@toa.io/extensions.exposition 1.0.0-alpha.274 → 1.0.0-alpha.276

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/components/identity.passkeys/operations/tsconfig.tsbuildinfo +1 -1
  3. package/documentation/protocol.md +24 -0
  4. package/features/octets.cloudinary.feature +8 -2
  5. package/features/octets.download.feature +3 -1
  6. package/features/probes.feature +8 -4
  7. package/features/steps/Common.ts +24 -1
  8. package/features/steps/Gateway.ts +9 -1
  9. package/features/steps/Parameters.ts +4 -0
  10. package/features/steps/Probe.ts +34 -0
  11. package/package.json +3 -2
  12. package/readme.md +7 -13
  13. package/schemas/annotation.cos.yaml +11 -0
  14. package/source/Annotation.ts +11 -0
  15. package/source/HTTP/Context.ts +1 -6
  16. package/source/HTTP/Probe.ts +112 -0
  17. package/source/HTTP/Server.ts +123 -74
  18. package/source/HTTP/Timing.ts +1 -1
  19. package/source/HTTP/index.ts +2 -0
  20. package/source/HTTP/messages.test.ts +2 -5
  21. package/source/HTTP/messages.ts +38 -42
  22. package/source/HTTP/types.ts +39 -0
  23. package/source/deployment.ts +12 -4
  24. package/source/directives/octets/Get.ts +3 -3
  25. package/transpiled/Annotation.d.ts +10 -0
  26. package/transpiled/HTTP/Context.d.ts +1 -6
  27. package/transpiled/HTTP/Context.js.map +1 -1
  28. package/transpiled/HTTP/Probe.d.ts +36 -0
  29. package/transpiled/HTTP/Probe.js +117 -0
  30. package/transpiled/HTTP/Probe.js.map +1 -0
  31. package/transpiled/HTTP/Server.d.ts +11 -7
  32. package/transpiled/HTTP/Server.js +92 -58
  33. package/transpiled/HTTP/Server.js.map +1 -1
  34. package/transpiled/HTTP/Timing.d.ts +1 -2
  35. package/transpiled/HTTP/index.d.ts +2 -0
  36. package/transpiled/HTTP/index.js +2 -0
  37. package/transpiled/HTTP/index.js.map +1 -1
  38. package/transpiled/HTTP/messages.d.ts +8 -3
  39. package/transpiled/HTTP/messages.js +31 -37
  40. package/transpiled/HTTP/messages.js.map +1 -1
  41. package/transpiled/HTTP/types.d.ts +40 -0
  42. package/transpiled/HTTP/types.js +3 -0
  43. package/transpiled/HTTP/types.js.map +1 -0
  44. package/transpiled/deployment.js +8 -2
  45. package/transpiled/deployment.js.map +1 -1
  46. package/transpiled/directives/octets/Get.js +3 -3
  47. package/transpiled/directives/octets/Get.js.map +1 -1
  48. package/transpiled/tsconfig.tsbuildinfo +1 -1
@@ -1,10 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
- /// <reference types="node" />
4
3
  import { Timing } from './Timing';
5
4
  import { type Format } from './formats';
6
5
  import type { OutgoingMessage } from './messages';
7
- import type * as http from 'node:http';
6
+ import type { IncomingMessage } from './types';
8
7
  export declare class Context {
9
8
  readonly id: string;
10
9
  readonly authority: string;
@@ -21,10 +20,6 @@ export declare class Context {
21
20
  body<T>(): Promise<T>;
22
21
  private log;
23
22
  }
24
- export interface IncomingMessage extends http.IncomingMessage {
25
- url: string;
26
- method: string;
27
- }
28
23
  interface Pipelines {
29
24
  body: Array<(input: unknown) => unknown>;
30
25
  response: Array<(output: OutgoingMessage) => void | Promise<void>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../source/HTTP/Context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../source/HTTP/Context.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAgC;AAChC,qDAA8C;AAC9C,4DAAmC;AACnC,uCAAkC;AAClC,qCAAiC;AACjC,uCAAuD;AACvD,yCAAiC;AAIjC,MAAa,OAAO;IACF,EAAE,CAAQ;IACV,SAAS,CAAQ;IACjB,OAAO,CAAiB;IACxB,GAAG,CAAK;IACR,OAAO,GAAkB,IAAI,CAAA;IAC7B,OAAO,GAAkB,IAAI,CAAA;IAC7B,MAAM,CAAQ;IACd,KAAK,CAAS;IAEd,SAAS,GAAc;QACrC,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;KACb,CAAA;IAEO,QAAQ,GAAG,KAAK,CAAA;IAExB,sCAAsC;IACtC,YAAoB,SAAiB,EAAE,OAAwB,EAAE,UAAsB,EACrF,GAAQ;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAEtB,IAAI,CAAC,EAAE,GAAG,qBAAM,CAAC,UAAU,EAAE,CAAA;QAC7B,kFAAkF;QAClF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,EAAE,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;QAE1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAElC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,EACJ,IAAI,EACJ,OAAO,EACP,MAAM,EACP,GAAG,KAAK,CAAC,MAAO,CAAA;gBAEjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAA;gBACjD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACxB,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEvC,IAAI,OAAO,KAAK,SAAS;YACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,OAAO,MAAM,IAAA,kBAAM,EAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAA;QAEnD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI;YACzC,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;QAEhC,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,GAAG,CAAE,OAAwB;QACnC,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAEtC,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;YACrC,cAAc;YACd,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAE5F,kBAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IAC1F,CAAC;CACF;AA7ED,0BA6EC;AAWD;;;GAGG;AACH,SAAS,SAAS,CAAE,OAAwB;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAEpC,IAAI,KAAK,KAAK,SAAS;QACrB,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;IAE3C,MAAM,SAAS,GAAG,IAAI,oBAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAK,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAO,CAAC,SAAS,CAAC,CAAA;IAExE,IAAI,UAAU,CAAC,IAAI,IAAI,gBAAgB;QACrC,UAAU,CAAC,KAAK,EAAE,CAAA;IAEpB,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,CAAA;IAEvC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,sEAAsE;AACtE,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAsB,CAAA;AAC1D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;AAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAE7B,MAAM,OAAO,GAAG,4EAA4E,CAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The readiness probe, on a port of its own.
3
+ *
4
+ * It cannot share the port the gateway serves traffic on: kubelet speaks HTTP/1.1 only, and a
5
+ * cleartext HTTP/2 server answers nothing else on its port — there is no ALPN to negotiate with.
6
+ *
7
+ * It is the gateway's own readiness, not the process's. The identity composition nested in this
8
+ * process connects before route discovery has settled, so a probe tied to that composition would
9
+ * report ready while the gateway still had no routes and no open port.
10
+ */
11
+ export declare class Probe {
12
+ private readonly server;
13
+ private readonly port;
14
+ private readonly path;
15
+ private ready;
16
+ private startedAt;
17
+ private listening;
18
+ private skipped;
19
+ constructor(port: number, path?: string);
20
+ listen(): Promise<void>;
21
+ /** The gateway is listening and has routes: answer `200`. */
22
+ complete(): void;
23
+ close(): Promise<void>;
24
+ private listener;
25
+ }
26
+ /**
27
+ * Reserved for this probe. `8001` is the Telemetry readiness probe's, and `toa export` refuses a
28
+ * port claimed twice — `toa mono` and a local run put every service in one process.
29
+ */
30
+ export declare const PROBE = 8004;
31
+ export declare const PATH = "/.ready";
32
+ /**
33
+ * The initial delay of the readiness probe. The server does not sleep for it: whoever
34
+ * probes is the one that waits, and doing it here as well only delayed the process twice.
35
+ */
36
+ export declare const DELAY = 3;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DELAY = exports.PATH = exports.PROBE = exports.Probe = void 0;
27
+ const http = __importStar(require("node:http"));
28
+ const openspan_1 = require("openspan");
29
+ /**
30
+ * The readiness probe, on a port of its own.
31
+ *
32
+ * It cannot share the port the gateway serves traffic on: kubelet speaks HTTP/1.1 only, and a
33
+ * cleartext HTTP/2 server answers nothing else on its port — there is no ALPN to negotiate with.
34
+ *
35
+ * It is the gateway's own readiness, not the process's. The identity composition nested in this
36
+ * process connects before route discovery has settled, so a probe tied to that composition would
37
+ * report ready while the gateway still had no routes and no open port.
38
+ */
39
+ class Probe {
40
+ server = http.createServer();
41
+ port;
42
+ path;
43
+ ready = false;
44
+ startedAt = 0;
45
+ listening = false;
46
+ skipped = false;
47
+ constructor(port, path = exports.PATH) {
48
+ this.port = port;
49
+ this.path = path;
50
+ this.server.on('request', (request, response) => this.listener(request, response));
51
+ }
52
+ async listen() {
53
+ this.startedAt = Date.now();
54
+ try {
55
+ await new Promise((resolve, reject) => {
56
+ this.server.once('error', reject);
57
+ this.server.listen(this.port, () => {
58
+ this.server.removeListener('error', reject);
59
+ resolve();
60
+ });
61
+ });
62
+ }
63
+ catch (error) {
64
+ // processes sharing a host share the port; in a pod nothing else claims it
65
+ if (error?.code === 'EADDRINUSE') {
66
+ this.skipped = true;
67
+ openspan_1.console.warn('Ready probe port already in use, skipping', { port: this.port });
68
+ return;
69
+ }
70
+ throw error;
71
+ }
72
+ this.listening = true;
73
+ // a probe answers while the process runs; it must never be the reason it keeps running
74
+ this.server.unref();
75
+ }
76
+ /** The gateway is listening and has routes: answer `200`. */
77
+ complete() {
78
+ this.ready = true;
79
+ // the IPC signal is not tied to the probe: a process that gave up the shared port is
80
+ // still ready, and pm2 `wait_ready` would otherwise block until `listen_timeout`
81
+ process.send?.('ready');
82
+ }
83
+ async close() {
84
+ this.ready = false;
85
+ if (!this.listening || this.skipped)
86
+ return;
87
+ this.listening = false;
88
+ // keep-alive connections would otherwise hold the server handle, delaying the exit
89
+ this.server.closeAllConnections();
90
+ await new Promise((resolve) => this.server.close(() => resolve()));
91
+ }
92
+ listener(request, response) {
93
+ if (request.url !== this.path) {
94
+ response.writeHead(404).end();
95
+ return;
96
+ }
97
+ if (this.ready)
98
+ response.writeHead(200, { 'cache-control': 'no-store' }).end();
99
+ else {
100
+ const remaining = Math.ceil((Date.now() - this.startedAt) / 1000).toString();
101
+ response.writeHead(503, { 'retry-after': remaining }).end();
102
+ }
103
+ }
104
+ }
105
+ exports.Probe = Probe;
106
+ /**
107
+ * Reserved for this probe. `8001` is the Telemetry readiness probe's, and `toa export` refuses a
108
+ * port claimed twice — `toa mono` and a local run put every service in one process.
109
+ */
110
+ exports.PROBE = 8004;
111
+ exports.PATH = '/.ready';
112
+ /**
113
+ * The initial delay of the readiness probe. The server does not sleep for it: whoever
114
+ * probes is the one that waits, and doing it here as well only delayed the process twice.
115
+ */
116
+ exports.DELAY = 3; // seconds
117
+ //# sourceMappingURL=Probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Probe.js","sourceRoot":"","sources":["../../source/HTTP/Probe.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,30 @@
1
1
  import { Connector } from '@toa.io/core';
2
2
  import { type OutgoingMessage } from './messages';
3
3
  import { Context } from './Context';
4
+ import type { Protocol } from './types';
4
5
  export declare class Server extends Connector {
5
6
  private readonly server;
6
7
  private readonly properties;
7
8
  private readonly authorities;
9
+ /** Tracked for the drain: `Http2Server` has no `closeIdleConnections`. */
10
+ private readonly sessions;
11
+ private readonly probe;
8
12
  private process?;
9
- private ready;
10
- private startedAt;
11
13
  private constructor();
12
14
  static create(options: Options): Server;
13
15
  attach(process: Processor): void;
14
16
  protected open(): Promise<void>;
15
17
  protected close(): Promise<void>;
18
+ /** A malformed HTTP/1.1 request has no framing to answer in, so the status line is written by hand. */
19
+ private h1;
20
+ /** HTTP/2 has no `clientError`: failures surface per session, per stream, or per frame. */
21
+ private h2;
16
22
  private listener;
17
23
  private serve;
18
24
  private success;
19
25
  private fail;
20
26
  }
21
27
  export declare const PORT = 8000;
22
- /**
23
- * The initial delay of the readiness probe. The server does not sleep for it: whoever
24
- * probes is the one that waits, and doing it here as well only delayed the process twice.
25
- */
26
- export declare const DELAY = 3;
27
28
  export declare const DRAIN = 10;
28
29
  interface Properties {
29
30
  authorities: Record<string, string>;
@@ -31,6 +32,9 @@ interface Properties {
31
32
  debug: boolean;
32
33
  port: number;
33
34
  drain: number;
35
+ protocol: Protocol;
36
+ /** Port of the readiness probe, which is HTTP/1.1 whatever the gateway serves. */
37
+ probe: number;
34
38
  }
35
39
  export type Options = {
36
40
  authorities: Properties['authorities'];
@@ -26,11 +26,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.DRAIN = exports.DELAY = exports.PORT = exports.Server = void 0;
29
+ exports.DRAIN = exports.PORT = exports.Server = void 0;
30
30
  const node_assert_1 = __importDefault(require("node:assert"));
31
31
  const node_fs_1 = __importDefault(require("node:fs"));
32
32
  const node_os_1 = __importDefault(require("node:os"));
33
33
  const http = __importStar(require("node:http"));
34
+ const http2 = __importStar(require("node:http2"));
34
35
  const node_events_1 = require("node:events");
35
36
  const promises_1 = require("node:timers/promises");
36
37
  const openspan_1 = require("openspan");
@@ -38,25 +39,26 @@ const core_1 = require("@toa.io/core");
38
39
  const messages_1 = require("./messages");
39
40
  const exceptions_1 = require("./exceptions");
40
41
  const Context_1 = require("./Context");
42
+ const Probe_1 = require("./Probe");
41
43
  class Server extends core_1.Connector {
42
- server = http.createServer();
44
+ server;
43
45
  properties;
44
46
  authorities;
47
+ /** Tracked for the drain: `Http2Server` has no `closeIdleConnections`. */
48
+ sessions = new Set();
49
+ probe;
45
50
  process;
46
- ready = false;
47
- startedAt = 0;
48
51
  constructor(properties) {
49
52
  super();
50
53
  this.properties = properties;
51
54
  this.authorities = Object.fromEntries(Object.entries(properties.authorities).map(([key, value]) => [value, key]));
55
+ this.server = instantiate(properties.protocol);
56
+ this.probe = new Probe_1.Probe(properties.probe);
52
57
  this.server.on('request', (req, res) => this.listener(req, res));
53
- this.server.on('clientError', (error, socket) => {
54
- openspan_1.console.warn('Client connection error', error);
55
- if (socket.writable)
56
- socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
57
- else
58
- socket.destroy();
59
- });
58
+ if (properties.protocol === 'h1')
59
+ this.h1(this.server);
60
+ else
61
+ this.h2(this.server);
60
62
  }
61
63
  static create(options) {
62
64
  const properties = { ...DEFAULTS, ...options };
@@ -66,39 +68,77 @@ class Server extends core_1.Connector {
66
68
  this.process = process;
67
69
  }
68
70
  async open() {
69
- this.startedAt = Date.now();
71
+ // answers 503 from here; the gateway's dependencies have settled by the time `open` runs
72
+ await this.probe.listen();
70
73
  this.server.listen(this.properties.port);
71
74
  await (0, node_events_1.once)(this.server, 'listening');
72
75
  openspan_1.console.info('HTTP Server is listening');
73
- this.ready = true;
76
+ this.probe.complete();
74
77
  openspan_1.console.info('Ready');
75
- process.send?.('ready');
76
78
  }
77
79
  async close() {
78
- this.ready = false;
80
+ await this.probe.close();
79
81
  this.server.close();
80
- this.server.closeIdleConnections();
82
+ // GOAWAY lets in-flight streams finish; `Http2Server` has no `closeIdleConnections`
83
+ if (this.properties.protocol === 'h1')
84
+ this.server.closeIdleConnections();
85
+ else
86
+ for (const session of this.sessions)
87
+ session.close();
81
88
  openspan_1.console.info('Stopped accepting new connections');
82
89
  // keep-alive clients hold connections open indefinitely, so the drain is bounded
83
90
  await Promise.race([
84
91
  (0, node_events_1.once)(this.server, 'close'),
85
92
  (0, promises_1.setTimeout)(this.properties.drain, undefined, { ref: false })
86
93
  ]);
87
- this.server.closeAllConnections();
94
+ if (this.properties.protocol === 'h1')
95
+ this.server.closeAllConnections();
96
+ else
97
+ for (const session of this.sessions)
98
+ session.destroy();
88
99
  openspan_1.console.info('Stopped');
89
100
  }
101
+ /** A malformed HTTP/1.1 request has no framing to answer in, so the status line is written by hand. */
102
+ h1(server) {
103
+ server.on('clientError', (error, socket) => {
104
+ openspan_1.console.warn('Client connection error', error);
105
+ if (socket.writable)
106
+ socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
107
+ else
108
+ socket.destroy();
109
+ });
110
+ }
111
+ /** HTTP/2 has no `clientError`: failures surface per session, per stream, or per frame. */
112
+ h2(server) {
113
+ server.on('session', (session) => {
114
+ this.sessions.add(session);
115
+ session.on('close', () => this.sessions.delete(session));
116
+ });
117
+ server.on('sessionError', (error) => openspan_1.console.warn('Session error', error));
118
+ server.on('streamError', (error) => openspan_1.console.warn('Stream error', error));
119
+ server.on('unknownProtocol', (socket) => {
120
+ openspan_1.console.warn('Unknown protocol');
121
+ socket.destroy();
122
+ });
123
+ }
90
124
  listener(request, response) {
91
125
  request.once('error', (error) => {
92
126
  openspan_1.console.warn('Request error', errorAttributes(request, error));
93
127
  if (!response.writableEnded)
94
128
  response.destroy();
95
129
  });
96
- request.socket.once('error', (error) => {
97
- openspan_1.console.warn('Socket error', errorAttributes(request, error));
98
- if (!response.writableEnded)
99
- response.destroy();
100
- });
101
- const url = parse(request);
130
+ // no listener on `request.socket`: under HTTP/2 it is the session's socket, shared by
131
+ // every concurrent stream, and removing listeners on it would strip the siblings'
132
+ const host = authorityOf(request);
133
+ if (host === undefined) {
134
+ openspan_1.console.warn('Request without an authority', errorAttributes(request, new Error('No authority')));
135
+ response.writeHead(400).end();
136
+ return;
137
+ }
138
+ // directives and components read `host`; HTTP/2 sends `:authority` instead, and what a
139
+ // component sees must not depend on the protocol the request arrived over
140
+ request.headers.host ??= host;
141
+ const url = parse(request, host);
102
142
  if (url instanceof Error) {
103
143
  openspan_1.console.warn('Invalid request', errorAttributes(request, url));
104
144
  response.writeHead(400).end();
@@ -108,17 +148,7 @@ class Server extends core_1.Connector {
108
148
  response.writeHead(501).end();
109
149
  return;
110
150
  }
111
- if (request.url === '/.ready') {
112
- if (this.ready)
113
- response.writeHead(200, { 'cache-control': 'no-store' }).end();
114
- else {
115
- const remaining = (Math.ceil((Date.now() - this.startedAt) / 1000)).toString();
116
- response.writeHead(503, { 'retry-after': remaining }).end();
117
- }
118
- return;
119
- }
120
151
  (0, node_assert_1.default)(this.process !== undefined, 'Request processor is not attached');
121
- const host = request.headers.host;
122
152
  const authority = this.authorities[host] ?? host;
123
153
  // if the request carries no trace context, the trace starts here
124
154
  const remote = trace(request.headers);
@@ -144,10 +174,7 @@ class Server extends core_1.Connector {
144
174
  await this.process(context)
145
175
  .then(this.success(context, response))
146
176
  .catch(this.fail(context, response))
147
- .finally(() => {
148
- request.removeAllListeners('error');
149
- request.socket.removeAllListeners('error');
150
- });
177
+ .finally(() => request.removeAllListeners('error'));
151
178
  });
152
179
  }
153
180
  success(context, response) {
@@ -169,7 +196,9 @@ class Server extends core_1.Connector {
169
196
  fail(context, response) {
170
197
  return async (exception) => {
171
198
  try {
172
- if (!context.request.complete)
199
+ // Over HTTP/2 the reply is followed by RST_STREAM(NO_ERROR), which tells the client
200
+ // to stop sending without discarding the response — so the body is never read.
201
+ if (!context.request.complete && this.properties.protocol === 'h1')
173
202
  await adam(context.request);
174
203
  const status = exception instanceof exceptions_1.Exception ? exception.status : 500;
175
204
  const span = (0, openspan_1.current)();
@@ -207,10 +236,26 @@ class Server extends core_1.Connector {
207
236
  }
208
237
  }
209
238
  exports.Server = Server;
239
+ function instantiate(protocol) {
240
+ if (protocol === 'h1')
241
+ return http.createServer();
242
+ return http2.createServer({
243
+ // realtime pins one stream per subscription, and they all share a session
244
+ maxSessionMemory: SESSION_MEMORY,
245
+ settings: { initialWindowSize: WINDOW }
246
+ });
247
+ }
248
+ /**
249
+ * The authority the request is addressed to. HTTP/2 carries it in `:authority` and omits
250
+ * `host` entirely, so reading `host` alone would leave every HTTP/2 request unattributed.
251
+ */
252
+ function authorityOf(request) {
253
+ return request.headers[':authority'] ?? request.headers.host;
254
+ }
210
255
  /** Parsing the URL is how a request is validated, so the `Context` is handed the result. */
211
- function parse(request) {
256
+ function parse(request, authority) {
212
257
  try {
213
- return new URL(request.url, `https://${request.headers.host}`);
258
+ return new URL(request.url, `https://${authority}`);
214
259
  }
215
260
  catch (error) {
216
261
  return error;
@@ -236,12 +281,11 @@ function errorAttributes(request, error) {
236
281
  return attributes;
237
282
  }
238
283
  exports.PORT = 8000;
239
- /**
240
- * The initial delay of the readiness probe. The server does not sleep for it: whoever
241
- * probes is the one that waits, and doing it here as well only delayed the process twice.
242
- */
243
- exports.DELAY = 3; // seconds
244
284
  exports.DRAIN = 10; // seconds
285
+ /** Megabytes a single HTTP/2 session may hold, over Node's default of 10. */
286
+ const SESSION_MEMORY = 128;
287
+ /** Per-stream flow control window. The default 64 KiB throttles in proportion to RTT. */
288
+ const WINDOW = 1024 * 1024;
245
289
  /**
246
290
  * Extracts the remote trace context from the request headers.
247
291
  *
@@ -262,18 +306,8 @@ const DEFAULTS = {
262
306
  methods: new Set(['OPTIONS', 'GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'LOCK', 'UNLOCK']),
263
307
  debug: false,
264
308
  port: exports.PORT,
265
- drain: exports.DRAIN * 1000
309
+ drain: exports.DRAIN * 1000,
310
+ protocol: 'h1',
311
+ probe: Probe_1.PROBE
266
312
  };
267
- /**
268
- * I'm too fucking dumb to figure out how to handle this in a better way.
269
- * It can be reproduced by calling `response.destroy()` on the client side while reading
270
- * an empty stream.
271
- */
272
- process.on('uncaughtException', (err) => {
273
- const code = err.code;
274
- if (code === 'ECONNRESET' || code === 'EPIPE')
275
- openspan_1.console.warn('Connection reset by peer', code);
276
- else
277
- throw err;
278
- });
279
313
  //# sourceMappingURL=Server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/HTTP/Server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/HTTP/Server.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- /// <reference types="node" />
2
- import type { ServerResponse } from 'node:http';
1
+ import type { ServerResponse } from './types';
3
2
  export declare class Timing {
4
3
  private readonly start;
5
4
  private readonly breakpoints;
@@ -2,3 +2,5 @@ export * from './Server';
2
2
  export * from './messages';
3
3
  export * from './exceptions';
4
4
  export * from './Context';
5
+ export * from './types';
6
+ export * from './Probe';
@@ -18,4 +18,6 @@ __exportStar(require("./Server"), exports);
18
18
  __exportStar(require("./messages"), exports);
19
19
  __exportStar(require("./exceptions"), exports);
20
20
  __exportStar(require("./Context"), exports);
21
+ __exportStar(require("./types"), exports);
22
+ __exportStar(require("./Probe"), exports);
21
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/HTTP/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,6CAA0B;AAC1B,+CAA4B;AAC5B,4CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/HTTP/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,6CAA0B;AAC1B,+CAA4B;AAC5B,4CAAyB;AACzB,0CAAuB;AACvB,0CAAuB"}
@@ -1,9 +1,14 @@
1
1
  /// <reference types="node" />
2
+ import { Readable } from 'node:stream';
2
3
  import type { Context } from './Context';
3
- import type * as http from 'node:http';
4
- export declare function write(context: Context, response: http.ServerResponse, message: OutgoingMessage): Promise<void>;
4
+ import type { ServerResponse } from './types';
5
+ export declare function write(context: Context, response: ServerResponse, message: OutgoingMessage): Promise<void>;
5
6
  export declare function read(context: Context): Promise<any>;
6
- export declare function multipart(message: OutgoingMessage, context: Context, response: http.ServerResponse): void;
7
+ /**
8
+ * Frames an object stream as `multipart/*`: an `ACK` part, the parts themselves, then `FIN`.
9
+ * The body is a `Readable`; `write` reached here by testing it.
10
+ */
11
+ export declare function multipart(message: OutgoingMessage, context: Context, response: ServerResponse): Readable;
7
12
  export interface OutgoingMessage {
8
13
  status?: number;
9
14
  headers?: Headers;