Hyperlinkv0.8.0-beta.28

Node

Node.ProtocolKindMismatchclasssrc/internal/nodeCore.ts:1188

A node-bound resource is being served over a transport that isn't in its node's declared ProtocolKind set. Because a client derives its transport from the node's declared transports, serving it over one the node doesn't advertise (e.g. a WebSocket-only node served on an httpServer) means every client dials a protocol the server never answers — the silent "blank dashboard / no live data" failure. The server refuses to boot with this instead, so the mismatch is loud and immediate. A multi-protocol node served over any of its declared transports passes.

export class ProtocolKindMismatch extends Data.TaggedError("ProtocolKindMismatch")<{
  readonly resource: string;
  readonly declared: ReadonlyArray<ProtocolKind>;
  readonly servedOver: ProtocolKind;
}> {
  override get message() {
    const serverFor = (k: ProtocolKind): string =>
      k === "Http" ? "httpServer" : k === "WebSocket" ? "wsServer" : "ipcServer";
    const kinds = this.declared.join(" / ");
    const servers = this.declared.map((k) => `Node.${serverFor(k)}`).join(" / ");
    return `Hyperlink "${this.resource}" declares its node over ${kinds}, but is being served over ${this.servedOver} — a client dials one of [${kinds}] and would never reach it. Serve it over a declared transport (${servers}), or add ${this.servedOver} to the node.`;
  }
}