@webda/core 4.0.0-beta.6 → 4.0.0-beta.8

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 (143) hide show
  1. package/README.md +6 -5
  2. package/lib/application/application.d.ts +18 -0
  3. package/lib/application/application.d.ts.map +1 -1
  4. package/lib/application/application.js +49 -11
  5. package/lib/application/application.js.map +1 -1
  6. package/lib/application/iconfiguration.d.ts +31 -0
  7. package/lib/application/iconfiguration.d.ts.map +1 -1
  8. package/lib/application/iconfiguration.js.map +1 -1
  9. package/lib/application/unpackedapplication.d.ts.map +1 -1
  10. package/lib/application/unpackedapplication.js +7 -5
  11. package/lib/application/unpackedapplication.js.map +1 -1
  12. package/lib/bin/cli-phase.d.ts +18 -2
  13. package/lib/bin/cli-phase.d.ts.map +1 -1
  14. package/lib/bin/cli-phase.js +25 -0
  15. package/lib/bin/cli-phase.js.map +1 -1
  16. package/lib/bin/cli.d.ts +8 -0
  17. package/lib/bin/cli.d.ts.map +1 -1
  18. package/lib/bin/cli.js +94 -35
  19. package/lib/bin/cli.js.map +1 -1
  20. package/lib/configurations/configuration.service.d.ts +7 -0
  21. package/lib/configurations/configuration.service.d.ts.map +1 -1
  22. package/lib/configurations/configuration.service.js +18 -5
  23. package/lib/configurations/configuration.service.js.map +1 -1
  24. package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -1
  25. package/lib/configurations/kubernetesconfiguration.service.js +1 -4
  26. package/lib/configurations/kubernetesconfiguration.service.js.map +1 -1
  27. package/lib/contexts/httpcontext.d.ts +15 -1
  28. package/lib/contexts/httpcontext.d.ts.map +1 -1
  29. package/lib/contexts/httpcontext.js +61 -19
  30. package/lib/contexts/httpcontext.js.map +1 -1
  31. package/lib/contexts/operationcontext.d.ts +6 -0
  32. package/lib/contexts/operationcontext.d.ts.map +1 -1
  33. package/lib/contexts/operationcontext.js +16 -2
  34. package/lib/contexts/operationcontext.js.map +1 -1
  35. package/lib/contexts/restcontext.d.ts +110 -0
  36. package/lib/contexts/restcontext.d.ts.map +1 -0
  37. package/lib/contexts/restcontext.js +247 -0
  38. package/lib/contexts/restcontext.js.map +1 -0
  39. package/lib/contexts/streamingcontext.d.ts +71 -0
  40. package/lib/contexts/streamingcontext.d.ts.map +1 -0
  41. package/lib/contexts/streamingcontext.js +93 -0
  42. package/lib/contexts/streamingcontext.js.map +1 -0
  43. package/lib/contexts/webcontext.d.ts +20 -0
  44. package/lib/contexts/webcontext.d.ts.map +1 -1
  45. package/lib/contexts/webcontext.js +43 -10
  46. package/lib/contexts/webcontext.js.map +1 -1
  47. package/lib/contexts/websocketcontext.d.ts +39 -0
  48. package/lib/contexts/websocketcontext.d.ts.map +1 -0
  49. package/lib/contexts/websocketcontext.js +67 -0
  50. package/lib/contexts/websocketcontext.js.map +1 -0
  51. package/lib/core/asyncqueue.d.ts +50 -0
  52. package/lib/core/asyncqueue.d.ts.map +1 -0
  53. package/lib/core/asyncqueue.js +96 -0
  54. package/lib/core/asyncqueue.js.map +1 -0
  55. package/lib/core/core.d.ts +18 -0
  56. package/lib/core/core.d.ts.map +1 -1
  57. package/lib/core/core.js +72 -7
  58. package/lib/core/core.js.map +1 -1
  59. package/lib/core/icore.d.ts +14 -1
  60. package/lib/core/icore.d.ts.map +1 -1
  61. package/lib/core/icore.js.map +1 -1
  62. package/lib/core/instancestorage.d.ts +1 -0
  63. package/lib/core/instancestorage.d.ts.map +1 -1
  64. package/lib/core/instancestorage.js +1 -0
  65. package/lib/core/instancestorage.js.map +1 -1
  66. package/lib/core/operations.d.ts +49 -6
  67. package/lib/core/operations.d.ts.map +1 -1
  68. package/lib/core/operations.js +187 -24
  69. package/lib/core/operations.js.map +1 -1
  70. package/lib/deployers/git.d.ts +4 -2
  71. package/lib/deployers/git.d.ts.map +1 -1
  72. package/lib/deployers/git.js +44 -5
  73. package/lib/deployers/git.js.map +1 -1
  74. package/lib/errors/errors.d.ts +15 -0
  75. package/lib/errors/errors.d.ts.map +1 -1
  76. package/lib/errors/errors.js +20 -0
  77. package/lib/errors/errors.js.map +1 -1
  78. package/lib/index.d.ts +5 -0
  79. package/lib/index.d.ts.map +1 -1
  80. package/lib/index.js +5 -0
  81. package/lib/index.js.map +1 -1
  82. package/lib/rest/restoperationstransport.service.d.ts +108 -0
  83. package/lib/rest/restoperationstransport.service.d.ts.map +1 -1
  84. package/lib/rest/restoperationstransport.service.js +360 -10
  85. package/lib/rest/restoperationstransport.service.js.map +1 -1
  86. package/lib/rest/router.service.d.ts +1 -1
  87. package/lib/rest/router.service.d.ts.map +1 -1
  88. package/lib/rest/router.service.js +5 -2
  89. package/lib/rest/router.service.js.map +1 -1
  90. package/lib/services/authenticatedencryption.d.ts +25 -0
  91. package/lib/services/authenticatedencryption.d.ts.map +1 -0
  92. package/lib/services/authenticatedencryption.js +56 -0
  93. package/lib/services/authenticatedencryption.js.map +1 -0
  94. package/lib/services/binary.service.d.ts +1 -1
  95. package/lib/services/binary.service.d.ts.map +1 -1
  96. package/lib/services/binary.service.js.map +1 -1
  97. package/lib/services/cloudbinary.d.ts.map +1 -1
  98. package/lib/services/cloudbinary.js +3 -2
  99. package/lib/services/cloudbinary.js.map +1 -1
  100. package/lib/services/command.d.ts +7 -1
  101. package/lib/services/command.d.ts.map +1 -1
  102. package/lib/services/command.js +4 -0
  103. package/lib/services/command.js.map +1 -1
  104. package/lib/services/cryptoservice.service.d.ts +405 -25
  105. package/lib/services/cryptoservice.service.d.ts.map +1 -1
  106. package/lib/services/cryptoservice.service.js +779 -72
  107. package/lib/services/cryptoservice.service.js.map +1 -1
  108. package/lib/services/httpserver.service.d.ts.map +1 -1
  109. package/lib/services/httpserver.service.js +20 -9
  110. package/lib/services/httpserver.service.js.map +1 -1
  111. package/lib/services/icryptoservice.d.ts +11 -0
  112. package/lib/services/icryptoservice.d.ts.map +1 -1
  113. package/lib/services/icryptoservice.js +2 -0
  114. package/lib/services/icryptoservice.js.map +1 -1
  115. package/lib/services/mailer.service.d.ts +4 -0
  116. package/lib/services/mailer.service.d.ts.map +1 -1
  117. package/lib/services/mailer.service.js +7 -1
  118. package/lib/services/mailer.service.js.map +1 -1
  119. package/lib/services/operationstransport.d.ts +13 -0
  120. package/lib/services/operationstransport.d.ts.map +1 -1
  121. package/lib/services/operationstransport.js +28 -6
  122. package/lib/services/operationstransport.js.map +1 -1
  123. package/lib/services/pki.encrypter.d.ts +214 -0
  124. package/lib/services/pki.encrypter.d.ts.map +1 -0
  125. package/lib/services/pki.encrypter.js +350 -0
  126. package/lib/services/pki.encrypter.js.map +1 -0
  127. package/lib/services/secretscheck.d.ts +120 -0
  128. package/lib/services/secretscheck.d.ts.map +1 -0
  129. package/lib/services/secretscheck.js +322 -0
  130. package/lib/services/secretscheck.js.map +1 -0
  131. package/lib/services/servicecommands.d.ts +8 -4
  132. package/lib/services/servicecommands.d.ts.map +1 -1
  133. package/lib/services/servicecommands.js +14 -5
  134. package/lib/services/servicecommands.js.map +1 -1
  135. package/lib/session/manager.model.d.ts +3 -1
  136. package/lib/session/manager.model.d.ts.map +1 -1
  137. package/lib/session/manager.model.js +6 -3
  138. package/lib/session/manager.model.js.map +1 -1
  139. package/lib/test/objects.d.ts.map +1 -1
  140. package/lib/test/objects.js +3 -1
  141. package/lib/test/objects.js.map +1 -1
  142. package/package.json +12 -11
  143. package/webda.module.json +135 -41
@@ -1,9 +1,29 @@
1
1
  import { parse as cookieParse } from "cookie";
2
2
  import { Readable } from "stream";
3
+ import { HttpError, UnsupportedMediaType } from "../errors/errors.js";
3
4
  /**
4
5
  * All methods supported by Webda
5
6
  */
6
7
  export const HttpMethodTypeAny = ["GET", "OPTIONS", "POST", "PUT", "PATCH", "DELETE"];
8
+ /**
9
+ * Extract the charset parameter from a Content-Type header value
10
+ *
11
+ * The parameter name is matched case-insensitively, surrounding quotes and whitespace are removed
12
+ *
13
+ * @param contentType the Content-Type header value
14
+ * @returns the charset label or undefined if none is present
15
+ */
16
+ export function getCharset(contentType) {
17
+ const match = contentType?.match(/;\s*charset\s*=\s*("[^"]*"|[^;]*)/i);
18
+ if (!match) {
19
+ return undefined;
20
+ }
21
+ const charset = match[1]
22
+ .trim()
23
+ .replace(/^"(.*)"$/, "$1")
24
+ .trim();
25
+ return charset || undefined;
26
+ }
7
27
  /**
8
28
  * The HttpContext
9
29
  *
@@ -216,26 +236,28 @@ export class HttpContext {
216
236
  /**
217
237
  * Get the raw body as string
218
238
  *
239
+ * Any WHATWG Encoding Standard label is accepted (utf-8, iso-8859-1, shift_jis, gbk, utf-16le, ...)
240
+ * A leading BOM is stripped
241
+ *
219
242
  * @param limit the size of readable request
220
243
  * @param timeout the time to read the request
221
- * @param encoding to analyze
244
+ * @param encoding to decode with, default to the Content-Type charset or utf-8
222
245
  * @returns the result
246
+ * @throws UnsupportedMediaType if the encoding is not supported
223
247
  */
224
248
  async getRawBodyAsString(limit = 1024 * 1024 * 10, timeout = 60000, encoding) {
225
- // Get charset from header
226
- if (!encoding) {
227
- const match = this.getUniqueHeader("content-type", "charset=utf-8").match(/charset=([^;\s]+)/);
228
- if (match) {
229
- encoding = match[1].trim();
230
- }
231
- else {
232
- encoding = "utf-8";
233
- }
249
+ const label = encoding ?? getCharset(this.getUniqueHeader("content-type")) ?? "utf-8";
250
+ let decoder;
251
+ try {
252
+ decoder = new TextDecoder(label);
234
253
  }
235
- if (encoding !== "utf-8") {
236
- throw new Error("Only UTF-8 is currently managed: https://github.com/loopingz/webda.io/issues/221");
254
+ catch (err) {
255
+ if (err instanceof RangeError) {
256
+ throw new UnsupportedMediaType(`Unsupported charset '${label}'`);
257
+ }
258
+ throw err;
237
259
  }
238
- return ((await this.getRawBody(limit, timeout)) || Buffer.from("")).toString(encoding);
260
+ return decoder.decode((await this.getRawBody(limit, timeout)) ?? Buffer.alloc(0));
239
261
  }
240
262
  /**
241
263
  * Get request body
@@ -243,26 +265,46 @@ export class HttpContext {
243
265
  * @param limit the size of readable request
244
266
  * @param timeout the time to read the request
245
267
  * @returns the result
268
+ * @throws HttpError 413 if the body is bigger than limit, 408 if it is not read within timeout
246
269
  */
247
270
  async getRawBody(limit = 1024 * 1024 * 10, timeout = 60000) {
248
271
  if (this.body instanceof Readable) {
249
272
  return new Promise((resolve, reject) => {
250
273
  const req = this.body;
251
274
  const body = [];
275
+ let total = 0;
276
+ let done = false;
277
+ const fail = (err) => {
278
+ done = true;
279
+ clearTimeout(timeoutId);
280
+ req.removeAllListeners("readable");
281
+ req.destroy();
282
+ reject(err);
283
+ };
252
284
  const timeoutId = setTimeout(() => {
253
- reject("Request timeout");
285
+ fail(new HttpError("Request timeout", 408));
254
286
  }, timeout);
255
287
  req.on("readable", () => {
256
- const chunk = req.read();
257
- if (chunk !== null) {
258
- if (chunk.length + body.length > limit) {
259
- clearTimeout(timeoutId);
260
- reject("Request oversized");
288
+ let chunk;
289
+ while (!done && (chunk = req.read()) !== null) {
290
+ if (total + chunk.length > limit) {
291
+ fail(new HttpError("Request oversized", 413));
292
+ return;
261
293
  }
294
+ total += chunk.length;
262
295
  body.push(chunk);
263
296
  }
264
297
  });
298
+ req.on("error", err => {
299
+ if (!done) {
300
+ fail(err);
301
+ }
302
+ });
265
303
  req.on("end", () => {
304
+ if (done) {
305
+ return;
306
+ }
307
+ done = true;
266
308
  clearTimeout(timeoutId);
267
309
  // Cache body as stream won't be able to be read twice
268
310
  this.body = Buffer.concat(body);
@@ -1 +1 @@
1
- {"version":3,"file":"httpcontext.js","sourceRoot":"","sources":["../../src/contexts/httpcontext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"httpcontext.js","sourceRoot":"","sources":["../../src/contexts/httpcontext.ts"],"names":[],"mappings":"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"}
@@ -159,6 +159,12 @@ export declare class OperationContext<Input = any, Parameters = any, Output = an
159
159
  * @returns true if the condition is met
160
160
  */
161
161
  write(output: Output, _encoding?: string, _cb?: (error: Error) => void): boolean;
162
+ /**
163
+ * Resolves when the client can take more streamed output. callOperation awaits it whenever write() returned
164
+ * false; transports with a real connection override it (backpressure, cancellation).
165
+ * @returns when more output can be written
166
+ */
167
+ drained(): Promise<void>;
162
168
  /**
163
169
  * Initialize the operation context
164
170
  * @returns this for chaining
@@ -1 +1 @@
1
- {"version":3,"file":"operationcontext.d.ts","sourceRoot":"","sources":["../../src/contexts/operationcontext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operationcontext.d.ts","sourceRoot":"","sources":["../../src/contexts/operationcontext.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ import { NotEnumerable } from "@webda/tsc-esm";
39
39
  import sanitize from "sanitize-html";
40
40
  import { JSONUtils } from "@webda/utils";
41
41
  import { useLog } from "../loggers/hooks.js";
42
+ import { HttpError } from "../errors/errors.js";
42
43
  import { runAsSystem } from "./execution.js";
43
44
  import { useUserResolver } from "../core/hooks.js";
44
45
  /**
@@ -200,10 +201,11 @@ let OperationContext = (() => {
200
201
  }
201
202
  return obj;
202
203
  };
204
+ let data;
203
205
  try {
204
206
  // TODO define this
205
207
  const { requestLimit, requestTimeout } = { requestLimit: 10 * 1024 * 1024, requestTimeout: 60000 };
206
- const data = await this.getRawInputAsString(requestLimit, requestTimeout);
208
+ data = await this.getRawInputAsString(requestLimit, requestTimeout);
207
209
  if (sanitizedOptions.raw === true) {
208
210
  return JSON.parse(data || sanitizedOptions.defaultValue);
209
211
  }
@@ -214,7 +216,11 @@ let OperationContext = (() => {
214
216
  this._sanitized = recursiveSanitize(JSON.parse(data), sanitizedOptions);
215
217
  }
216
218
  catch (err) {
217
- useLog("ERROR", err, `Body: '${await this.getRawInputAsString()}'`);
219
+ // Unsupported charset, oversized or timed out body are client errors to report
220
+ if (err instanceof HttpError) {
221
+ throw err;
222
+ }
223
+ useLog("ERROR", err, `Body: '${data}'`);
218
224
  this._sanitized = sanitizedOptions.defaultValue;
219
225
  }
220
226
  return this._sanitized;
@@ -318,6 +324,14 @@ let OperationContext = (() => {
318
324
  }
319
325
  return true;
320
326
  }
327
+ /**
328
+ * Resolves when the client can take more streamed output. callOperation awaits it whenever write() returned
329
+ * false; transports with a real connection override it (backpressure, cancellation).
330
+ * @returns when more output can be written
331
+ */
332
+ async drained() {
333
+ // In-memory output never fills up
334
+ }
321
335
  /**
322
336
  * Initialize the operation context
323
337
  * @returns this for chaining
@@ -1 +1 @@
1
- {"version":3,"file":"operationcontext.js","sourceRoot":"","sources":["../../src/contexts/operationcontext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operationcontext.js","sourceRoot":"","sources":["../../src/contexts/operationcontext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import type { OutgoingHttpHeaders, ServerResponse } from "node:http";
2
+ import { HttpContext } from "./httpcontext.js";
3
+ import { StreamingOperationContext } from "./streamingcontext.js";
4
+ import type { Session } from "../session/session.js";
5
+ /** How the chunks of a streamed response are framed */
6
+ export type RestStreamFormat = "ndjson" | "sse";
7
+ /**
8
+ * @param response - an HTTP/1.1 or HTTP/2 (compatibility API) response
9
+ * @returns whether it is over or its connection gone
10
+ */
11
+ export declare function isResponseGone(response: ServerResponse): boolean;
12
+ /**
13
+ * The context of a server-streaming operation served over a plain HTTP request: each streamed chunk is written to the
14
+ * response as soon as the operation yields it, as one JSON line (`ndjson`) or one server-sent event (`sse`).
15
+ *
16
+ * The status line and headers leave with the first chunk (or the first keep-alive): until then an error is still a
17
+ * normal HTTP error response. The context never ends the response by itself, see {@link RestStreamingOperationContext.finish}.
18
+ */
19
+ export declare class RestStreamingOperationContext extends StreamingOperationContext {
20
+ private readonly response;
21
+ private readonly format;
22
+ private readonly keepAliveInterval;
23
+ private readonly baseHeaders;
24
+ private readonly cookies;
25
+ private started;
26
+ private finished;
27
+ private timer?;
28
+ private beginning?;
29
+ private queued;
30
+ private needDrain;
31
+ private aborted;
32
+ /**
33
+ * @param httpContext - the request
34
+ * @param response - the HTTP response to stream to
35
+ * @param format - how to frame the chunks
36
+ * @param session - the session already loaded for the request, if any
37
+ * @param keepAliveInterval - milliseconds between two SSE keep-alive comments (0 disables them)
38
+ * @param baseHeaders - headers already set for the response (CORS...), sent with the first chunk
39
+ * @param cookies - Set-Cookie values already set for the response
40
+ */
41
+ constructor(httpContext: HttpContext, response: ServerResponse, format: RestStreamFormat, session?: Session, keepAliveInterval?: number, baseHeaders?: OutgoingHttpHeaders, cookies?: string[]);
42
+ /**
43
+ * The session of an authorized request is reused, not loaded twice
44
+ * @override
45
+ */
46
+ init(): Promise<this>;
47
+ /**
48
+ * @returns whether the status line and headers were sent
49
+ */
50
+ get hasStarted(): boolean;
51
+ /**
52
+ * The response is over or its connection destroyed (an HTTP/2 response has no `destroyed`: its stream tells)
53
+ * @override
54
+ */
55
+ protected get connectionEnded(): boolean;
56
+ /**
57
+ * @returns whether the client is gone or the response is over
58
+ */
59
+ get disconnected(): boolean;
60
+ /**
61
+ * Send the status line and headers, once
62
+ */
63
+ private start;
64
+ /**
65
+ * The operation failed before the response head was sent: it will never be written, so the caller can answer with a
66
+ * normal HTTP error
67
+ */
68
+ abortBeforeStart(): void;
69
+ /**
70
+ * Save the session (its cookie leaves with the headers, so changes made until now are kept), send the headers, then
71
+ * what was written meanwhile. Once.
72
+ * @returns a promise resolved when the response head is out
73
+ */
74
+ begin(): Promise<void>;
75
+ /**
76
+ * Send an SSE keep-alive comment every interval while the response is open and the operation is streaming. When the
77
+ * operation has not yielded anything yet the first one commits the response as a stream (an error after it is an
78
+ * error event). An operation that is not (yet) streaming, like a plain method awaiting its result, gets none.
79
+ */
80
+ startKeepAlive(): void;
81
+ /**
82
+ * Stop sending keep-alive comments
83
+ */
84
+ stopKeepAlive(): void;
85
+ /**
86
+ * One JSON line or server-sent event per chunk, without its `__` keys. The first one waits for the response head
87
+ * (the session is saved first): the operation is asked to wait for `drained()`.
88
+ * @override
89
+ */
90
+ protected sendChunk(chunk: any): boolean;
91
+ /**
92
+ * Wait for the response head, then for the response buffer to empty, or the response to close or fail
93
+ * @override
94
+ */
95
+ protected waitForDrain(signal: AbortSignal): Promise<void>;
96
+ /**
97
+ * Tell the client the stream failed: the last event or line of the response
98
+ * @param message - what the client may know
99
+ * @param code - the HTTP status the error maps to
100
+ * @returns a promise resolved once it is written
101
+ */
102
+ writeError(message: string, code: number): Promise<void>;
103
+ /**
104
+ * End the response (a normal end is announced to SSE clients with an `end` event)
105
+ * @param normal - whether the stream ended without error
106
+ * @returns a promise resolved once the response is ended
107
+ */
108
+ finish(normal?: boolean): Promise<void>;
109
+ }
110
+ //# sourceMappingURL=restcontext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restcontext.d.ts","sourceRoot":"","sources":["../../src/contexts/restcontext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAWhD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAEhE;AAED;;;;;;GAMG;AACH,qBAAa,6BAA8B,SAAQ,yBAAyB;IAoBxE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAxB1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;;;;OAQG;IACH,YACE,WAAW,EAAE,WAAW,EACP,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,gBAAgB,EACzC,OAAO,CAAC,EAAE,OAAO,EACA,iBAAiB,GAAE,MAAc,EACjC,WAAW,GAAE,mBAAwB,EACrC,OAAO,GAAE,MAAM,EAAO,EASxC;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;OAGG;IACH,SAAS,KAAK,eAAe,IAAI,OAAO,CAEvC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;OAEG;IACH,OAAO,CAAC,KAAK;IAoBb;;;OAGG;IACH,gBAAgB,IAAI,IAAI,CAEvB;IAED;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAYrB;IAED;;;;OAIG;IACH,cAAc,IAAI,IAAI,CAarB;IAED;;OAEG;IACH,aAAa,IAAI,IAAI,CAGpB;IAED;;;;OAIG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAWvC;IAED;;;OAGG;IACH,UAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/D;IAED;;;;;OAKG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7D;IAED;;;;OAIG;IACG,MAAM,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAanD;CACF"}
@@ -0,0 +1,247 @@
1
+ import { once } from "node:events";
2
+ import { JSONUtils } from "@webda/utils";
3
+ import { StreamingOperationContext } from "./streamingcontext.js";
4
+ /** Headers that only exist in HTTP/1.1: refused by HTTP/2 */
5
+ const HTTP1_ONLY_HEADERS = ["connection", "keep-alive", "transfer-encoding", "upgrade"];
6
+ /** Content type of each format */
7
+ const CONTENT_TYPES = {
8
+ ndjson: "application/x-ndjson",
9
+ sse: "text/event-stream; charset=utf-8"
10
+ };
11
+ /**
12
+ * @param response - an HTTP/1.1 or HTTP/2 (compatibility API) response
13
+ * @returns whether it is over or its connection gone
14
+ */
15
+ export function isResponseGone(response) {
16
+ return response.writableEnded || response.destroyed || response.stream?.destroyed === true;
17
+ }
18
+ /**
19
+ * The context of a server-streaming operation served over a plain HTTP request: each streamed chunk is written to the
20
+ * response as soon as the operation yields it, as one JSON line (`ndjson`) or one server-sent event (`sse`).
21
+ *
22
+ * The status line and headers leave with the first chunk (or the first keep-alive): until then an error is still a
23
+ * normal HTTP error response. The context never ends the response by itself, see {@link RestStreamingOperationContext.finish}.
24
+ */
25
+ export class RestStreamingOperationContext extends StreamingOperationContext {
26
+ response;
27
+ format;
28
+ keepAliveInterval;
29
+ baseHeaders;
30
+ cookies;
31
+ started = false;
32
+ finished = false;
33
+ timer;
34
+ beginning;
35
+ queued = [];
36
+ needDrain = false;
37
+ aborted = false;
38
+ /**
39
+ * @param httpContext - the request
40
+ * @param response - the HTTP response to stream to
41
+ * @param format - how to frame the chunks
42
+ * @param session - the session already loaded for the request, if any
43
+ * @param keepAliveInterval - milliseconds between two SSE keep-alive comments (0 disables them)
44
+ * @param baseHeaders - headers already set for the response (CORS...), sent with the first chunk
45
+ * @param cookies - Set-Cookie values already set for the response
46
+ */
47
+ constructor(httpContext, response, format, session, keepAliveInterval = 20000, baseHeaders = {}, cookies = []) {
48
+ super(httpContext, response);
49
+ this.response = response;
50
+ this.format = format;
51
+ this.keepAliveInterval = keepAliveInterval;
52
+ this.baseHeaders = baseHeaders;
53
+ this.cookies = cookies;
54
+ if (session)
55
+ this.session = session;
56
+ response.once("close", () => {
57
+ this.stopKeepAlive();
58
+ // The client left before the end of the stream
59
+ if (!this.finished)
60
+ this.cancel();
61
+ });
62
+ }
63
+ /**
64
+ * The session of an authorized request is reused, not loaded twice
65
+ * @override
66
+ */
67
+ async init() {
68
+ return this.session ? this : super.init();
69
+ }
70
+ /**
71
+ * @returns whether the status line and headers were sent
72
+ */
73
+ get hasStarted() {
74
+ return this.started;
75
+ }
76
+ /**
77
+ * The response is over or its connection destroyed (an HTTP/2 response has no `destroyed`: its stream tells)
78
+ * @override
79
+ */
80
+ get connectionEnded() {
81
+ return isResponseGone(this.response);
82
+ }
83
+ /**
84
+ * @returns whether the client is gone or the response is over
85
+ */
86
+ get disconnected() {
87
+ return this.connectionEnded;
88
+ }
89
+ /**
90
+ * Send the status line and headers, once
91
+ */
92
+ start() {
93
+ if (this.started)
94
+ return;
95
+ this.started = true;
96
+ const headers = {};
97
+ for (const [name, value] of Object.entries({ ...this.baseHeaders, ...this.getResponseHeaders() })) {
98
+ // Ours below, whatever the case of the name
99
+ if (["content-type", "cache-control", "content-length"].includes(name.toLowerCase()))
100
+ continue;
101
+ if (this.response.req?.httpVersionMajor >= 2 && HTTP1_ONLY_HEADERS.includes(name.toLowerCase()))
102
+ continue;
103
+ headers[name] = value;
104
+ }
105
+ headers["Content-Type"] = CONTENT_TYPES[this.format];
106
+ headers["Cache-Control"] = "no-cache";
107
+ // Reverse proxies must not buffer a stream
108
+ headers["X-Accel-Buffering"] = "no";
109
+ const cookies = [...this.cookies, ...this.getSetCookieHeaders()];
110
+ if (cookies.length)
111
+ headers["Set-Cookie"] = cookies;
112
+ this.setFlushedHeaders();
113
+ this.response.writeHead(200, headers);
114
+ }
115
+ /**
116
+ * The operation failed before the response head was sent: it will never be written, so the caller can answer with a
117
+ * normal HTTP error
118
+ */
119
+ abortBeforeStart() {
120
+ if (!this.started)
121
+ this.aborted = true;
122
+ }
123
+ /**
124
+ * Save the session (its cookie leaves with the headers, so changes made until now are kept), send the headers, then
125
+ * what was written meanwhile. Once.
126
+ * @returns a promise resolved when the response head is out
127
+ */
128
+ begin() {
129
+ this.beginning ??= (async () => {
130
+ this._sessionSaved = false;
131
+ await this.saveSession();
132
+ // Gone, over, or failed before anything was sent: the head is not ours to write anymore
133
+ if (this.finished || this.aborted || this.connectionEnded)
134
+ return;
135
+ this.start();
136
+ for (const text of this.queued.splice(0)) {
137
+ if (!this.response.write(text))
138
+ this.needDrain = true;
139
+ }
140
+ })();
141
+ return this.beginning;
142
+ }
143
+ /**
144
+ * Send an SSE keep-alive comment every interval while the response is open and the operation is streaming. When the
145
+ * operation has not yielded anything yet the first one commits the response as a stream (an error after it is an
146
+ * error event). An operation that is not (yet) streaming, like a plain method awaiting its result, gets none.
147
+ */
148
+ startKeepAlive() {
149
+ if (this.format !== "sse" || this.keepAliveInterval <= 0 || this.timer)
150
+ return;
151
+ this.timer = setInterval(() => {
152
+ if (this.finished || this.connectionEnded)
153
+ return;
154
+ if (!this.started && !this.getExtension("operationStreaming"))
155
+ return;
156
+ this.begin().then(() => {
157
+ if (!this.finished && !this.connectionEnded)
158
+ this.response.write(": keep-alive\n\n");
159
+ }, () => undefined);
160
+ }, this.keepAliveInterval);
161
+ this.timer.unref();
162
+ }
163
+ /**
164
+ * Stop sending keep-alive comments
165
+ */
166
+ stopKeepAlive() {
167
+ if (this.timer)
168
+ clearInterval(this.timer);
169
+ this.timer = undefined;
170
+ }
171
+ /**
172
+ * One JSON line or server-sent event per chunk, without its `__` keys. The first one waits for the response head
173
+ * (the session is saved first): the operation is asked to wait for `drained()`.
174
+ * @override
175
+ */
176
+ sendChunk(chunk) {
177
+ const json = JSONUtils.stringify(chunk, undefined, 0, true) ?? "null";
178
+ const text = this.format === "sse" ? `data: ${json}\n\n` : `${json}\n`;
179
+ if (this.started) {
180
+ const flushed = this.response.write(text);
181
+ if (!flushed)
182
+ this.needDrain = true;
183
+ return flushed;
184
+ }
185
+ this.queued.push(text);
186
+ this.begin().catch(() => undefined);
187
+ return false;
188
+ }
189
+ /**
190
+ * Wait for the response head, then for the response buffer to empty, or the response to close or fail
191
+ * @override
192
+ */
193
+ async waitForDrain(signal) {
194
+ await this.beginning;
195
+ // The client left while the head was being prepared: nothing will ever drain
196
+ this.assertAlive();
197
+ if (this.started && !this.needDrain)
198
+ return;
199
+ this.needDrain = false;
200
+ await Promise.race([
201
+ once(this.response, "drain", { signal }),
202
+ once(this.response, "close", { signal }),
203
+ once(this.response, "error", { signal }).then(([error]) => {
204
+ throw error;
205
+ })
206
+ ]);
207
+ }
208
+ /**
209
+ * Tell the client the stream failed: the last event or line of the response
210
+ * @param message - what the client may know
211
+ * @param code - the HTTP status the error maps to
212
+ * @returns a promise resolved once it is written
213
+ */
214
+ async writeError(message, code) {
215
+ if (this.finished || this.connectionEnded)
216
+ return;
217
+ await this.begin();
218
+ if (this.finished || this.connectionEnded)
219
+ return;
220
+ const payload = JSON.stringify({ message, code });
221
+ this.response.write(this.format === "sse" ? `event: error\ndata: ${payload}\n\n` : `{"error":${payload}}\n`);
222
+ }
223
+ /**
224
+ * End the response (a normal end is announced to SSE clients with an `end` event)
225
+ * @param normal - whether the stream ended without error
226
+ * @returns a promise resolved once the response is ended
227
+ */
228
+ async finish(normal = false) {
229
+ if (this.finished)
230
+ return;
231
+ this.stopKeepAlive();
232
+ if (this.connectionEnded) {
233
+ this.finished = true;
234
+ return;
235
+ }
236
+ await this.begin();
237
+ if (this.finished)
238
+ return;
239
+ this.finished = true;
240
+ if (this.connectionEnded)
241
+ return;
242
+ if (normal && this.format === "sse")
243
+ this.response.write("event: end\ndata: {}\n\n");
244
+ this.response.end();
245
+ }
246
+ }
247
+ //# sourceMappingURL=restcontext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restcontext.js","sourceRoot":"","sources":["../../src/contexts/restcontext.ts"],"names":[],"mappings":"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"}