{"record":{"id":"6134526667930802","repo":"denoland/deno","slug":"unknown-override-kind-override-kind","errorCode":null,"errorMessage":"unknown override kind: ${override.kind}","messagePattern":"unknown override kind: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"ext/node/polyfills/internal/http/address_override.js","lineNumber":101,"sourceCode":"}\n\n// Translate an override record into the argument for denoListen().\nfunction overrideToListenArgs(override) {\n  switch (override.kind) {\n    case KIND_TCP:\n      return { hostname: override.host, port: override.port };\n    case KIND_UNIX:\n      return { transport: \"unix\", path: override.host };\n    case KIND_VSOCK:\n      return {\n        transport: \"vsock\",\n        cid: Number(override.host),\n        port: override.port,\n      };\n    case KIND_TUNNEL:\n      return { transport: \"tunnel\" };\n    default:\n      throw new Error(`unknown override kind: ${override.kind}`);\n  }\n}\n\n// Minimal Socket-like Duplex wrapping a Deno.Conn. It exposes the\n// subset of the net.Socket interface that connectionListener in\n// _http_server.js actually uses.\nclass OverrideSocket extends Duplex {\n  #conn;\n  #closed = false;\n  #initialChunk = null;\n  #readBuf = new Uint8Array(64 * 1024);\n  #timeoutMsecs = 0;\n  #timeoutTimer = null;\n  // Node's HTTP server uses these directly.\n  isDenoServeAddressOverride = true;\n  // Set by the alpn-routing dispatch (node:http2 servers) to the sniffed\n  // protocol, mirroring what a TLS socket would report.\n  alpnProtocol = undefined;","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/ext/node/polyfills/internal/http/address_override.js#L83-L119","documentation":"Internal invariant violation in Deno's Node-compat HTTP address-override layer. getAddress() (ext/node/polyfills/internal/http/address_override.js) converts an address override into a Deno listen/connect address; if override.kind is not one of the supported kinds (inet, unix, vsock, tunnel) it falls through to the default branch and throws a plain Error with no code. Reaching it means an address shape the polyfill cannot map leaked into http/net APIs.","triggerScenarios":"Calling server.listen() or http2.connect() with a Deno-shaped address object (e.g. { transport: \"unix\", path } or { transport: \"vsock\" }) instead of Node-style arguments; passing a Deno.listen() result into a Node http server; a tunnel/upgrade path producing an override with an unset kind field.","commonSituations":"Cross-runtime code mixing Deno-native listen options into node:http calls; polyfilling gaps where an override object is constructed by hand; older Deno versions whose address_override covers fewer kinds than the code assumes.","solutions":["Use plain Node-style listen arguments: server.listen(port[, host]), server.listen(\"/path.sock\") for unix sockets","Normalize any Deno address object to { port, host } or a path string before it reaches a Node API","Verify the same call works under node:http, then re-test on the latest Deno — if inputs are valid, report the bug upstream"],"exampleFix":"// before\nconst server = http.createServer(handler);\nserver.listen({ transport: \"unix\", path: \"/tmp/s.sock\" }); // unknown override kind\n\n// after\nconst server = http.createServer(handler);\nserver.listen(\"/tmp/s.sock\"); // Node-style unix socket path","handlingStrategy":"validation","validationCode":"function isSupportedListenArg(a) {\n  if (typeof a === \"number\" || typeof a === \"string\") return true; // port or path\n  if (a && typeof a === \"object\") {\n    return Number.isInteger(a.port) || typeof a.path === \"string\";\n  }\n  return false;\n}","typeGuard":null,"tryCatchPattern":"try {\n  server.listen(addr);\n} catch (err) {\n  if (/unknown override kind/.test(err.message)) {\n    // normalize addr to { port, host } or a path string and retry; else report upstream\n  } else throw err;\n}","preventionTips":["Pass Node-shaped listen arguments to Node APIs and Deno-shaped addresses to Deno APIs — never mix them","Keep the runtime current; address-override coverage improves each release"],"tags":["http","net","listen","address","node-compat","deno"],"backgroundTag":"unsupported-listen-address","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}