@restatedev/restate-sdk 1.10.4 → 1.11.0

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 (78) hide show
  1. package/dist/context_impl.cjs +17 -6
  2. package/dist/context_impl.d.ts +4 -4
  3. package/dist/context_impl.d.ts.map +1 -1
  4. package/dist/context_impl.js +17 -6
  5. package/dist/context_impl.js.map +1 -1
  6. package/dist/endpoint/endpoint.cjs +2 -2
  7. package/dist/endpoint/endpoint.js +2 -2
  8. package/dist/endpoint/fetch_endpoint.cjs +2 -2
  9. package/dist/endpoint/fetch_endpoint.js +2 -2
  10. package/dist/endpoint/fetch_endpoint.js.map +1 -1
  11. package/dist/endpoint/handlers/core_logging.cjs +52 -0
  12. package/dist/endpoint/handlers/core_logging.d.ts +10 -0
  13. package/dist/endpoint/handlers/core_logging.d.ts.map +1 -0
  14. package/dist/endpoint/handlers/core_logging.js +51 -0
  15. package/dist/endpoint/handlers/core_logging.js.map +1 -0
  16. package/dist/endpoint/handlers/discovery.cjs +58 -0
  17. package/dist/endpoint/handlers/discovery.d.ts +5 -0
  18. package/dist/endpoint/handlers/discovery.d.ts.map +1 -0
  19. package/dist/endpoint/handlers/discovery.js +59 -0
  20. package/dist/endpoint/handlers/discovery.js.map +1 -0
  21. package/dist/endpoint/handlers/fetch.cjs +23 -11
  22. package/dist/endpoint/handlers/fetch.d.ts +2 -2
  23. package/dist/endpoint/handlers/fetch.d.ts.map +1 -1
  24. package/dist/endpoint/handlers/fetch.js +24 -11
  25. package/dist/endpoint/handlers/fetch.js.map +1 -1
  26. package/dist/endpoint/handlers/generic.cjs +167 -253
  27. package/dist/endpoint/handlers/generic.d.ts +2 -58
  28. package/dist/endpoint/handlers/generic.d.ts.map +1 -1
  29. package/dist/endpoint/handlers/generic.js +166 -249
  30. package/dist/endpoint/handlers/generic.js.map +1 -1
  31. package/dist/endpoint/handlers/lambda.cjs +64 -61
  32. package/dist/endpoint/handlers/lambda.d.ts +2 -2
  33. package/dist/endpoint/handlers/lambda.d.ts.map +1 -1
  34. package/dist/endpoint/handlers/lambda.js +64 -60
  35. package/dist/endpoint/handlers/lambda.js.map +1 -1
  36. package/dist/endpoint/handlers/types.d.ts +41 -0
  37. package/dist/endpoint/handlers/types.d.ts.map +1 -0
  38. package/dist/endpoint/handlers/types.js +2 -0
  39. package/dist/endpoint/handlers/types.js.map +1 -0
  40. package/dist/endpoint/handlers/utils.cjs +51 -0
  41. package/dist/endpoint/handlers/utils.d.ts +11 -0
  42. package/dist/endpoint/handlers/utils.d.ts.map +1 -0
  43. package/dist/endpoint/handlers/utils.js +48 -0
  44. package/dist/endpoint/handlers/utils.js.map +1 -0
  45. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.cjs +11 -11
  46. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.d.ts +4 -4
  47. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.d.ts.map +1 -1
  48. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js +10 -10
  49. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js.map +1 -1
  50. package/dist/endpoint/lambda_endpoint.cjs +2 -2
  51. package/dist/endpoint/lambda_endpoint.js +2 -2
  52. package/dist/endpoint/lambda_endpoint.js.map +1 -1
  53. package/dist/endpoint/node_endpoint.cjs +41 -41
  54. package/dist/endpoint/node_endpoint.d.ts +1 -1
  55. package/dist/endpoint/node_endpoint.d.ts.map +1 -1
  56. package/dist/endpoint/node_endpoint.js +41 -40
  57. package/dist/endpoint/node_endpoint.js.map +1 -1
  58. package/dist/io.cjs +2 -2
  59. package/dist/io.d.ts +3 -3
  60. package/dist/io.d.ts.map +1 -1
  61. package/dist/io.js +2 -2
  62. package/dist/io.js.map +1 -1
  63. package/dist/package.cjs +1 -1
  64. package/dist/package.js +1 -1
  65. package/dist/package.js.map +1 -1
  66. package/dist/types/errors.cjs +2 -0
  67. package/dist/types/errors.d.cts +8 -0
  68. package/dist/types/errors.d.cts.map +1 -1
  69. package/dist/types/errors.d.ts +8 -0
  70. package/dist/types/errors.d.ts.map +1 -1
  71. package/dist/types/errors.js +2 -0
  72. package/dist/types/errors.js.map +1 -1
  73. package/package.json +2 -2
  74. package/dist/utils/streams.cjs +0 -14
  75. package/dist/utils/streams.d.ts +0 -3
  76. package/dist/utils/streams.d.ts.map +0 -1
  77. package/dist/utils/streams.js +0 -13
  78. package/dist/utils/streams.js.map +0 -1
@@ -0,0 +1,58 @@
1
+ const require_user_agent = require('../../user_agent.cjs');
2
+ const require_utils = require('./utils.cjs');
3
+
4
+ //#region src/endpoint/handlers/discovery.ts
5
+ const ENDPOINT_MANIFEST_V2 = "application/vnd.restate.endpointmanifest.v2+json";
6
+ const ENDPOINT_MANIFEST_V3 = "application/vnd.restate.endpointmanifest.v3+json";
7
+ const ENDPOINT_MANIFEST_V4 = "application/vnd.restate.endpointmanifest.v4+json";
8
+ function handleDiscovery(endpoint, protocolMode, additionalDiscoveryFields, acceptVersionsString) {
9
+ if (typeof acceptVersionsString !== "string") {
10
+ const errorMessage = "Missing accept header";
11
+ endpoint.rlog.warn(errorMessage);
12
+ return require_utils.errorResponse(415, errorMessage);
13
+ }
14
+ let manifestVersion;
15
+ if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V4)) manifestVersion = 4;
16
+ else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V3)) manifestVersion = 3;
17
+ else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V2)) manifestVersion = 2;
18
+ else {
19
+ const errorMessage = `Unsupported service discovery protocol version '${acceptVersionsString}'`;
20
+ endpoint.rlog.warn(errorMessage);
21
+ return require_utils.errorResponse(415, errorMessage);
22
+ }
23
+ const discovery = {
24
+ ...endpoint.discoveryMetadata,
25
+ ...additionalDiscoveryFields,
26
+ protocolMode
27
+ };
28
+ const checkUnsupportedFeature = (obj, ...fields) => {
29
+ for (const field of fields) if (field in obj && obj[field] !== void 0) return require_utils.errorResponse(500, `The code uses the new discovery feature '${String(field)}' but the runtime doesn't support it yet (discovery protocol negotiated version ${manifestVersion}). Either remove the usage of this feature, or upgrade the runtime.`);
30
+ };
31
+ if (manifestVersion < 3) for (const service of discovery.services) {
32
+ const error = checkUnsupportedFeature(service, "journalRetention", "idempotencyRetention", "inactivityTimeout", "abortTimeout", "enableLazyState", "ingressPrivate");
33
+ if (error !== void 0) return error;
34
+ for (const handler of service.handlers) {
35
+ const error$1 = checkUnsupportedFeature(handler, "journalRetention", "idempotencyRetention", "workflowCompletionRetention", "inactivityTimeout", "abortTimeout", "enableLazyState", "ingressPrivate");
36
+ if (error$1 !== void 0) return error$1;
37
+ }
38
+ }
39
+ if (manifestVersion < 4) {
40
+ discovery.lambdaCompression = void 0;
41
+ for (const service of discovery.services) {
42
+ const error = checkUnsupportedFeature(service, "retryPolicyExponentiationFactor", "retryPolicyInitialInterval", "retryPolicyMaxAttempts", "retryPolicyMaxInterval", "retryPolicyOnMaxAttempts");
43
+ if (error !== void 0) return error;
44
+ for (const handler of service.handlers) {
45
+ const error$1 = checkUnsupportedFeature(handler, "retryPolicyExponentiationFactor", "retryPolicyInitialInterval", "retryPolicyMaxAttempts", "retryPolicyMaxInterval", "retryPolicyOnMaxAttempts");
46
+ if (error$1 !== void 0) return error$1;
47
+ }
48
+ }
49
+ }
50
+ const body = JSON.stringify(discovery);
51
+ return require_utils.simpleResponse(200, {
52
+ "content-type": manifestVersion === 2 ? ENDPOINT_MANIFEST_V2 : manifestVersion === 3 ? ENDPOINT_MANIFEST_V3 : ENDPOINT_MANIFEST_V4,
53
+ "x-restate-server": require_user_agent.X_RESTATE_SERVER
54
+ }, new TextEncoder().encode(body));
55
+ }
56
+
57
+ //#endregion
58
+ exports.handleDiscovery = handleDiscovery;
@@ -0,0 +1,5 @@
1
+ import type { RestateResponse } from "./types.js";
2
+ import type { Endpoint } from "../endpoint.js";
3
+ import type { Endpoint as EndpointManifest, ProtocolMode } from "../discovery.js";
4
+ export declare function handleDiscovery(endpoint: Endpoint, protocolMode: ProtocolMode, additionalDiscoveryFields: Partial<EndpointManifest>, acceptVersionsString: string | string[] | undefined): RestateResponse;
5
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/endpoint/handlers/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,QAAQ,IAAI,gBAAgB,EAC5B,YAAY,EACb,MAAM,iBAAiB,CAAC;AAQzB,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,yBAAyB,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACpD,oBAAoB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAClD,eAAe,CA0HjB"}
@@ -0,0 +1,59 @@
1
+ import { X_RESTATE_SERVER } from "../../user_agent.js";
2
+ import { errorResponse, simpleResponse } from "./utils.js";
3
+
4
+ //#region src/endpoint/handlers/discovery.ts
5
+ const ENDPOINT_MANIFEST_V2 = "application/vnd.restate.endpointmanifest.v2+json";
6
+ const ENDPOINT_MANIFEST_V3 = "application/vnd.restate.endpointmanifest.v3+json";
7
+ const ENDPOINT_MANIFEST_V4 = "application/vnd.restate.endpointmanifest.v4+json";
8
+ function handleDiscovery(endpoint, protocolMode, additionalDiscoveryFields, acceptVersionsString) {
9
+ if (typeof acceptVersionsString !== "string") {
10
+ const errorMessage = "Missing accept header";
11
+ endpoint.rlog.warn(errorMessage);
12
+ return errorResponse(415, errorMessage);
13
+ }
14
+ let manifestVersion;
15
+ if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V4)) manifestVersion = 4;
16
+ else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V3)) manifestVersion = 3;
17
+ else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V2)) manifestVersion = 2;
18
+ else {
19
+ const errorMessage = `Unsupported service discovery protocol version '${acceptVersionsString}'`;
20
+ endpoint.rlog.warn(errorMessage);
21
+ return errorResponse(415, errorMessage);
22
+ }
23
+ const discovery = {
24
+ ...endpoint.discoveryMetadata,
25
+ ...additionalDiscoveryFields,
26
+ protocolMode
27
+ };
28
+ const checkUnsupportedFeature = (obj, ...fields) => {
29
+ for (const field of fields) if (field in obj && obj[field] !== void 0) return errorResponse(500, `The code uses the new discovery feature '${String(field)}' but the runtime doesn't support it yet (discovery protocol negotiated version ${manifestVersion}). Either remove the usage of this feature, or upgrade the runtime.`);
30
+ };
31
+ if (manifestVersion < 3) for (const service of discovery.services) {
32
+ const error = checkUnsupportedFeature(service, "journalRetention", "idempotencyRetention", "inactivityTimeout", "abortTimeout", "enableLazyState", "ingressPrivate");
33
+ if (error !== void 0) return error;
34
+ for (const handler of service.handlers) {
35
+ const error$1 = checkUnsupportedFeature(handler, "journalRetention", "idempotencyRetention", "workflowCompletionRetention", "inactivityTimeout", "abortTimeout", "enableLazyState", "ingressPrivate");
36
+ if (error$1 !== void 0) return error$1;
37
+ }
38
+ }
39
+ if (manifestVersion < 4) {
40
+ discovery.lambdaCompression = void 0;
41
+ for (const service of discovery.services) {
42
+ const error = checkUnsupportedFeature(service, "retryPolicyExponentiationFactor", "retryPolicyInitialInterval", "retryPolicyMaxAttempts", "retryPolicyMaxInterval", "retryPolicyOnMaxAttempts");
43
+ if (error !== void 0) return error;
44
+ for (const handler of service.handlers) {
45
+ const error$1 = checkUnsupportedFeature(handler, "retryPolicyExponentiationFactor", "retryPolicyInitialInterval", "retryPolicyMaxAttempts", "retryPolicyMaxInterval", "retryPolicyOnMaxAttempts");
46
+ if (error$1 !== void 0) return error$1;
47
+ }
48
+ }
49
+ }
50
+ const body = JSON.stringify(discovery);
51
+ return simpleResponse(200, {
52
+ "content-type": manifestVersion === 2 ? ENDPOINT_MANIFEST_V2 : manifestVersion === 3 ? ENDPOINT_MANIFEST_V3 : ENDPOINT_MANIFEST_V4,
53
+ "x-restate-server": X_RESTATE_SERVER
54
+ }, new TextEncoder().encode(body));
55
+ }
56
+
57
+ //#endregion
58
+ export { handleDiscovery };
59
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","names":["error"],"sources":["../../../src/endpoint/handlers/discovery.ts"],"sourcesContent":["import type { RestateResponse } from \"./types.js\";\nimport type { Endpoint } from \"../endpoint.js\";\nimport type {\n Endpoint as EndpointManifest,\n ProtocolMode,\n} from \"../discovery.js\";\nimport { X_RESTATE_SERVER } from \"../../user_agent.js\";\nimport { errorResponse, simpleResponse } from \"./utils.js\";\n\nconst ENDPOINT_MANIFEST_V2 = \"application/vnd.restate.endpointmanifest.v2+json\";\nconst ENDPOINT_MANIFEST_V3 = \"application/vnd.restate.endpointmanifest.v3+json\";\nconst ENDPOINT_MANIFEST_V4 = \"application/vnd.restate.endpointmanifest.v4+json\";\n\nexport function handleDiscovery(\n endpoint: Endpoint,\n protocolMode: ProtocolMode,\n additionalDiscoveryFields: Partial<EndpointManifest>,\n acceptVersionsString: string | string[] | undefined\n): RestateResponse {\n if (typeof acceptVersionsString !== \"string\") {\n const errorMessage = \"Missing accept header\";\n endpoint.rlog.warn(errorMessage);\n return errorResponse(415, errorMessage);\n }\n\n // Negotiate version to use\n let manifestVersion;\n if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V4)) {\n manifestVersion = 4;\n } else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V3)) {\n manifestVersion = 3;\n } else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V2)) {\n manifestVersion = 2;\n } else {\n const errorMessage = `Unsupported service discovery protocol version '${acceptVersionsString}'`;\n endpoint.rlog.warn(errorMessage);\n return errorResponse(415, errorMessage);\n }\n\n const discovery = {\n ...endpoint.discoveryMetadata,\n ...additionalDiscoveryFields,\n protocolMode: protocolMode,\n };\n\n const checkUnsupportedFeature = <T extends object>(\n obj: T,\n ...fields: Array<keyof T>\n ) => {\n for (const field of fields) {\n if (field in obj && obj[field] !== undefined) {\n return errorResponse(\n 500,\n `The code uses the new discovery feature '${String(\n field\n )}' but the runtime doesn't support it yet (discovery protocol negotiated version ${manifestVersion}). Either remove the usage of this feature, or upgrade the runtime.`\n );\n }\n }\n return;\n };\n\n // Verify none of the manifest v3 configuration options are used.\n if (manifestVersion < 3) {\n for (const service of discovery.services) {\n const error = checkUnsupportedFeature(\n service,\n \"journalRetention\",\n \"idempotencyRetention\",\n \"inactivityTimeout\",\n \"abortTimeout\",\n \"enableLazyState\",\n \"ingressPrivate\"\n );\n if (error !== undefined) {\n return error;\n }\n for (const handler of service.handlers) {\n const error = checkUnsupportedFeature(\n handler,\n \"journalRetention\",\n \"idempotencyRetention\",\n \"workflowCompletionRetention\",\n \"inactivityTimeout\",\n \"abortTimeout\",\n \"enableLazyState\",\n \"ingressPrivate\"\n );\n if (error !== undefined) {\n return error;\n }\n }\n }\n }\n\n if (manifestVersion < 4) {\n // Blank the lambda compression field. No need to fail in this case.\n discovery.lambdaCompression = undefined;\n for (const service of discovery.services) {\n const error = checkUnsupportedFeature(\n service,\n \"retryPolicyExponentiationFactor\",\n \"retryPolicyInitialInterval\",\n \"retryPolicyMaxAttempts\",\n \"retryPolicyMaxInterval\",\n \"retryPolicyOnMaxAttempts\"\n );\n if (error !== undefined) {\n return error;\n }\n for (const handler of service.handlers) {\n const error = checkUnsupportedFeature(\n handler,\n \"retryPolicyExponentiationFactor\",\n \"retryPolicyInitialInterval\",\n \"retryPolicyMaxAttempts\",\n \"retryPolicyMaxInterval\",\n \"retryPolicyOnMaxAttempts\"\n );\n if (error !== undefined) {\n return error;\n }\n }\n }\n }\n\n const body = JSON.stringify(discovery);\n return simpleResponse(\n 200,\n {\n \"content-type\":\n manifestVersion === 2\n ? ENDPOINT_MANIFEST_V2\n : manifestVersion === 3\n ? ENDPOINT_MANIFEST_V3\n : ENDPOINT_MANIFEST_V4,\n \"x-restate-server\": X_RESTATE_SERVER,\n },\n new TextEncoder().encode(body)\n );\n}\n"],"mappings":";;;;AASA,MAAM,uBAAuB;AAC7B,MAAM,uBAAuB;AAC7B,MAAM,uBAAuB;AAE7B,SAAgB,gBACd,UACA,cACA,2BACA,sBACiB;AACjB,KAAI,OAAO,yBAAyB,UAAU;EAC5C,MAAM,eAAe;AACrB,WAAS,KAAK,KAAK,aAAa;AAChC,SAAO,cAAc,KAAK,aAAa;;CAIzC,IAAI;AACJ,KAAI,qBAAqB,SAAS,qBAAqB,CACrD,mBAAkB;UACT,qBAAqB,SAAS,qBAAqB,CAC5D,mBAAkB;UACT,qBAAqB,SAAS,qBAAqB,CAC5D,mBAAkB;MACb;EACL,MAAM,eAAe,mDAAmD,qBAAqB;AAC7F,WAAS,KAAK,KAAK,aAAa;AAChC,SAAO,cAAc,KAAK,aAAa;;CAGzC,MAAM,YAAY;EAChB,GAAG,SAAS;EACZ,GAAG;EACW;EACf;CAED,MAAM,2BACJ,KACA,GAAG,WACA;AACH,OAAK,MAAM,SAAS,OAClB,KAAI,SAAS,OAAO,IAAI,WAAW,OACjC,QAAO,cACL,KACA,4CAA4C,OAC1C,MACD,CAAC,kFAAkF,gBAAgB,qEACrG;;AAOP,KAAI,kBAAkB,EACpB,MAAK,MAAM,WAAW,UAAU,UAAU;EACxC,MAAM,QAAQ,wBACZ,SACA,oBACA,wBACA,qBACA,gBACA,mBACA,iBACD;AACD,MAAI,UAAU,OACZ,QAAO;AAET,OAAK,MAAM,WAAW,QAAQ,UAAU;GACtC,MAAMA,UAAQ,wBACZ,SACA,oBACA,wBACA,+BACA,qBACA,gBACA,mBACA,iBACD;AACD,OAAIA,YAAU,OACZ,QAAOA;;;AAMf,KAAI,kBAAkB,GAAG;AAEvB,YAAU,oBAAoB;AAC9B,OAAK,MAAM,WAAW,UAAU,UAAU;GACxC,MAAM,QAAQ,wBACZ,SACA,mCACA,8BACA,0BACA,0BACA,2BACD;AACD,OAAI,UAAU,OACZ,QAAO;AAET,QAAK,MAAM,WAAW,QAAQ,UAAU;IACtC,MAAMA,UAAQ,wBACZ,SACA,mCACA,8BACA,0BACA,0BACA,2BACD;AACD,QAAIA,YAAU,OACZ,QAAOA;;;;CAMf,MAAM,OAAO,KAAK,UAAU,UAAU;AACtC,QAAO,eACL,KACA;EACE,gBACE,oBAAoB,IAChB,uBACA,oBAAoB,IAClB,uBACA;EACR,oBAAoB;EACrB,EACD,IAAI,aAAa,CAAC,OAAO,KAAK,CAC/B"}
@@ -1,19 +1,31 @@
1
+ const require_errors = require('../../types/errors.cjs');
2
+ const require_utils = require('./utils.cjs');
1
3
 
2
4
  //#region src/endpoint/handlers/fetch.ts
3
5
  function fetcher(handler) {
4
- return { fetch: async (event, ...extraArgs) => {
5
- const request = {
6
- url: event.url,
7
- headers: Object.fromEntries(event.headers.entries()),
8
- body: event.body,
9
- extraArgs,
6
+ return { fetch: (event, ...extraArgs) => {
7
+ const url = event.url;
8
+ const headers = Object.fromEntries(event.headers.entries());
9
+ const response = handler.handle({
10
+ url,
11
+ headers,
12
+ extraArgs
13
+ });
14
+ const inputReader = event.body ? event.body[Symbol.asyncIterator]() : require_utils.emptyInputReader();
15
+ const transformStream = new TransformStream();
16
+ const outputWriter = transformStream.writable.getWriter();
17
+ response.process({
18
+ inputReader,
19
+ outputWriter,
10
20
  abortSignal: event.signal
11
- };
12
- const resp = await handler.handle(request);
13
- return new Response(resp.body, {
14
- status: resp.statusCode,
15
- headers: resp.headers
21
+ }).catch((e) => {
22
+ const error = require_errors.ensureError(e);
23
+ (require_utils.tryCreateContextualLogger(handler.endpoint.loggerTransport, url, headers) ?? handler.endpoint.rlog).error("Unexpected error: " + (error.stack ?? error.message));
16
24
  });
25
+ return Promise.resolve(new Response(transformStream.readable, {
26
+ status: response.statusCode,
27
+ headers: response.headers
28
+ }));
17
29
  } };
18
30
  }
19
31
 
@@ -1,5 +1,5 @@
1
- import type { GenericHandler } from "./generic.js";
2
- export declare function fetcher(handler: GenericHandler): {
1
+ import type { RestateHandler } from "./types.js";
2
+ export declare function fetcher(handler: RestateHandler): {
3
3
  fetch: (event: Request, ...extraArgs: unknown[]) => Promise<Response>;
4
4
  };
5
5
  //# sourceMappingURL=fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/endpoint/handlers/fetch.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,cAAc,CAAC;AAEnE,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc;mBAGlC,OAAO,gBACA,OAAO,EAAE,KACtB,OAAO,CAAC,QAAQ,CAAC;EAoBvB"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/endpoint/handlers/fetch.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc;mBAE5B,OAAO,gBAAgB,OAAO,EAAE,KAAG,OAAO,CAAC,QAAQ,CAAC;EA6CtE"}
@@ -1,18 +1,31 @@
1
+ import { ensureError } from "../../types/errors.js";
2
+ import { emptyInputReader, tryCreateContextualLogger } from "./utils.js";
3
+
1
4
  //#region src/endpoint/handlers/fetch.ts
2
5
  function fetcher(handler) {
3
- return { fetch: async (event, ...extraArgs) => {
4
- const request = {
5
- url: event.url,
6
- headers: Object.fromEntries(event.headers.entries()),
7
- body: event.body,
8
- extraArgs,
6
+ return { fetch: (event, ...extraArgs) => {
7
+ const url = event.url;
8
+ const headers = Object.fromEntries(event.headers.entries());
9
+ const response = handler.handle({
10
+ url,
11
+ headers,
12
+ extraArgs
13
+ });
14
+ const inputReader = event.body ? event.body[Symbol.asyncIterator]() : emptyInputReader();
15
+ const transformStream = new TransformStream();
16
+ const outputWriter = transformStream.writable.getWriter();
17
+ response.process({
18
+ inputReader,
19
+ outputWriter,
9
20
  abortSignal: event.signal
10
- };
11
- const resp = await handler.handle(request);
12
- return new Response(resp.body, {
13
- status: resp.statusCode,
14
- headers: resp.headers
21
+ }).catch((e) => {
22
+ const error = ensureError(e);
23
+ (tryCreateContextualLogger(handler.endpoint.loggerTransport, url, headers) ?? handler.endpoint.rlog).error("Unexpected error: " + (error.stack ?? error.message));
15
24
  });
25
+ return Promise.resolve(new Response(transformStream.readable, {
26
+ status: response.statusCode,
27
+ headers: response.headers
28
+ }));
16
29
  } };
17
30
  }
18
31
 
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","names":["request: RestateRequest"],"sources":["../../../src/endpoint/handlers/fetch.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH\n *\n * This file is part of the Restate SDK for Node.js/TypeScript,\n * which is released under the MIT license.\n *\n * You can find a copy of the license in file LICENSE in the root\n * directory of this repository or package, or at\n * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE\n */\n\nimport type { GenericHandler, RestateRequest } from \"./generic.js\";\n\nexport function fetcher(handler: GenericHandler) {\n return {\n fetch: async (\n event: Request,\n ...extraArgs: unknown[]\n ): Promise<Response> => {\n const url = event.url;\n const headers = Object.fromEntries(event.headers.entries());\n\n const request: RestateRequest = {\n url,\n headers,\n body: event.body,\n extraArgs,\n abortSignal: event.signal,\n };\n\n const resp = await handler.handle(request);\n\n return new Response(resp.body, {\n status: resp.statusCode,\n headers: resp.headers,\n });\n },\n };\n}\n"],"mappings":";AAaA,SAAgB,QAAQ,SAAyB;AAC/C,QAAO,EACL,OAAO,OACL,OACA,GAAG,cACmB;EAItB,MAAMA,UAA0B;GAC9B,KAJU,MAAM;GAKhB,SAJc,OAAO,YAAY,MAAM,QAAQ,SAAS,CAAC;GAKzD,MAAM,MAAM;GACZ;GACA,aAAa,MAAM;GACpB;EAED,MAAM,OAAO,MAAM,QAAQ,OAAO,QAAQ;AAE1C,SAAO,IAAI,SAAS,KAAK,MAAM;GAC7B,QAAQ,KAAK;GACb,SAAS,KAAK;GACf,CAAC;IAEL"}
1
+ {"version":3,"file":"fetch.js","names":[],"sources":["../../../src/endpoint/handlers/fetch.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH\n *\n * This file is part of the Restate SDK for Node.js/TypeScript,\n * which is released under the MIT license.\n *\n * You can find a copy of the license in file LICENSE in the root\n * directory of this repository or package, or at\n * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE\n */\n\nimport { ensureError } from \"../../types/errors.js\";\nimport type { RestateHandler } from \"./types.js\";\nimport { emptyInputReader, tryCreateContextualLogger } from \"./utils.js\";\n\nexport function fetcher(handler: RestateHandler) {\n return {\n fetch: (event: Request, ...extraArgs: unknown[]): Promise<Response> => {\n const url = event.url;\n const headers = Object.fromEntries(event.headers.entries());\n\n const response = handler.handle({\n url,\n headers,\n extraArgs,\n });\n\n const inputReader = event.body\n ? event.body[Symbol.asyncIterator]()\n : emptyInputReader();\n\n // We use the TransformStream here to adapt writer -> reader\n const transformStream = new TransformStream<Uint8Array>();\n const outputWriter = transformStream.writable.getWriter();\n\n // Start processing, then return back the response\n response\n .process({\n inputReader,\n outputWriter,\n abortSignal: event.signal,\n })\n .catch((e) => {\n // handle should never throw\n const error = ensureError(e);\n const logger =\n tryCreateContextualLogger(\n handler.endpoint.loggerTransport,\n url,\n headers\n ) ?? handler.endpoint.rlog;\n logger.error(\"Unexpected error: \" + (error.stack ?? error.message));\n });\n\n return Promise.resolve(\n new Response(transformStream.readable, {\n status: response.statusCode,\n headers: response.headers,\n })\n );\n },\n };\n}\n"],"mappings":";;;;AAeA,SAAgB,QAAQ,SAAyB;AAC/C,QAAO,EACL,QAAQ,OAAgB,GAAG,cAA4C;EACrE,MAAM,MAAM,MAAM;EAClB,MAAM,UAAU,OAAO,YAAY,MAAM,QAAQ,SAAS,CAAC;EAE3D,MAAM,WAAW,QAAQ,OAAO;GAC9B;GACA;GACA;GACD,CAAC;EAEF,MAAM,cAAc,MAAM,OACtB,MAAM,KAAK,OAAO,gBAAgB,GAClC,kBAAkB;EAGtB,MAAM,kBAAkB,IAAI,iBAA6B;EACzD,MAAM,eAAe,gBAAgB,SAAS,WAAW;AAGzD,WACG,QAAQ;GACP;GACA;GACA,aAAa,MAAM;GACpB,CAAC,CACD,OAAO,MAAM;GAEZ,MAAM,QAAQ,YAAY,EAAE;AAO5B,IALE,0BACE,QAAQ,SAAS,iBACjB,KACA,QACD,IAAI,QAAQ,SAAS,MACjB,MAAM,wBAAwB,MAAM,SAAS,MAAM,SAAS;IACnE;AAEJ,SAAO,QAAQ,QACb,IAAI,SAAS,gBAAgB,UAAU;GACrC,QAAQ,SAAS;GACjB,SAAS,SAAS;GACnB,CAAC,CACH;IAEJ"}