@restatedev/restate-sdk-cloudflare-workers 1.9.1 → 1.10.1

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 (265) hide show
  1. package/LICENSE +21 -0
  2. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  3. package/dist/common_api.cjs +25 -0
  4. package/dist/common_api.d.cts +30 -0
  5. package/dist/common_api.d.cts.map +1 -0
  6. package/dist/common_api.d.ts +30 -0
  7. package/dist/common_api.d.ts.map +1 -0
  8. package/dist/common_api.js +19 -0
  9. package/dist/common_api.js.map +1 -0
  10. package/dist/context.cjs +29 -0
  11. package/dist/context.d.cts +699 -0
  12. package/dist/context.d.cts.map +1 -0
  13. package/dist/context.d.ts +699 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +29 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/context_impl.cjs +441 -0
  18. package/dist/context_impl.js +440 -0
  19. package/dist/context_impl.js.map +1 -0
  20. package/dist/endpoint/components.cjs +257 -0
  21. package/dist/endpoint/components.js +253 -0
  22. package/dist/endpoint/components.js.map +1 -0
  23. package/dist/endpoint/endpoint.cjs +117 -0
  24. package/dist/endpoint/endpoint.js +118 -0
  25. package/dist/endpoint/endpoint.js.map +1 -0
  26. package/dist/endpoint/fetch_endpoint.cjs +41 -0
  27. package/dist/endpoint/fetch_endpoint.d.cts +39 -0
  28. package/dist/endpoint/fetch_endpoint.d.cts.map +1 -0
  29. package/dist/endpoint/fetch_endpoint.d.ts +39 -0
  30. package/dist/endpoint/fetch_endpoint.d.ts.map +1 -0
  31. package/dist/endpoint/fetch_endpoint.js +42 -0
  32. package/dist/endpoint/fetch_endpoint.js.map +1 -0
  33. package/dist/endpoint/handlers/fetch.cjs +21 -0
  34. package/dist/endpoint/handlers/fetch.js +21 -0
  35. package/dist/endpoint/handlers/fetch.js.map +1 -0
  36. package/dist/endpoint/handlers/generic.cjs +328 -0
  37. package/dist/endpoint/handlers/generic.js +324 -0
  38. package/dist/endpoint/handlers/generic.js.map +1 -0
  39. package/dist/endpoint/handlers/lambda.cjs +93 -0
  40. package/dist/endpoint/handlers/lambda.js +89 -0
  41. package/dist/endpoint/handlers/lambda.js.map +1 -0
  42. package/dist/endpoint/lambda_endpoint.cjs +36 -0
  43. package/dist/endpoint/lambda_endpoint.d.cts +26 -0
  44. package/dist/endpoint/lambda_endpoint.d.cts.map +1 -0
  45. package/dist/endpoint/lambda_endpoint.d.ts +26 -0
  46. package/dist/endpoint/lambda_endpoint.d.ts.map +1 -0
  47. package/dist/endpoint/lambda_endpoint.js +37 -0
  48. package/dist/endpoint/lambda_endpoint.js.map +1 -0
  49. package/dist/endpoint/node_endpoint.cjs +101 -0
  50. package/dist/endpoint/node_endpoint.js +99 -0
  51. package/dist/endpoint/node_endpoint.js.map +1 -0
  52. package/dist/endpoint/types.d.cts +61 -0
  53. package/dist/endpoint/types.d.cts.map +1 -0
  54. package/dist/endpoint/types.d.ts +61 -0
  55. package/dist/endpoint/types.d.ts.map +1 -0
  56. package/dist/endpoint/withOptions.cjs +15 -0
  57. package/dist/endpoint/withOptions.js +15 -0
  58. package/dist/endpoint/withOptions.js.map +1 -0
  59. package/dist/endpoint.d.cts +112 -0
  60. package/dist/endpoint.d.cts.map +1 -0
  61. package/dist/endpoint.d.ts +112 -0
  62. package/dist/endpoint.d.ts.map +1 -0
  63. package/dist/fetch.cjs +83 -0
  64. package/dist/fetch.d.cts +52 -0
  65. package/dist/fetch.d.cts.map +1 -0
  66. package/dist/fetch.d.ts +52 -0
  67. package/dist/fetch.d.ts.map +1 -0
  68. package/dist/{esm/src/fetch.js → fetch.js} +15 -18
  69. package/dist/fetch.js.map +1 -0
  70. package/dist/index.cjs +48 -0
  71. package/dist/index.d.cts +9 -0
  72. package/dist/index.d.ts +9 -0
  73. package/dist/index.js +7 -0
  74. package/dist/io.cjs +48 -0
  75. package/dist/io.js +48 -0
  76. package/dist/io.js.map +1 -0
  77. package/dist/lambda.cjs +74 -0
  78. package/dist/lambda.d.cts +32 -0
  79. package/dist/lambda.d.cts.map +1 -0
  80. package/dist/lambda.d.ts +32 -0
  81. package/dist/lambda.d.ts.map +1 -0
  82. package/dist/lambda.js +35 -0
  83. package/dist/lambda.js.map +1 -0
  84. package/dist/logging/console_logger_transport.cjs +54 -0
  85. package/dist/logging/console_logger_transport.js +54 -0
  86. package/dist/logging/console_logger_transport.js.map +1 -0
  87. package/dist/logging/logger.cjs +43 -0
  88. package/dist/logging/logger.js +44 -0
  89. package/dist/logging/logger.js.map +1 -0
  90. package/dist/logging/logger_transport.cjs +42 -0
  91. package/dist/logging/logger_transport.d.cts +57 -0
  92. package/dist/logging/logger_transport.d.cts.map +1 -0
  93. package/dist/logging/logger_transport.d.ts +57 -0
  94. package/dist/logging/logger_transport.d.ts.map +1 -0
  95. package/dist/logging/logger_transport.js +40 -0
  96. package/dist/logging/logger_transport.js.map +1 -0
  97. package/dist/node.cjs +90 -0
  98. package/dist/node.d.cts +51 -0
  99. package/dist/node.d.cts.map +1 -0
  100. package/dist/node.d.ts +51 -0
  101. package/dist/node.d.ts.map +1 -0
  102. package/dist/node.js +50 -0
  103. package/dist/node.js.map +1 -0
  104. package/dist/package.cjs +11 -0
  105. package/dist/package.js +6 -0
  106. package/dist/package.js.map +1 -0
  107. package/dist/promises.cjs +234 -0
  108. package/dist/promises.js +226 -0
  109. package/dist/promises.js.map +1 -0
  110. package/dist/types/errors.cjs +110 -0
  111. package/dist/types/errors.d.cts +71 -0
  112. package/dist/types/errors.d.cts.map +1 -0
  113. package/dist/types/errors.d.ts +71 -0
  114. package/dist/types/errors.d.ts.map +1 -0
  115. package/dist/types/errors.js +102 -0
  116. package/dist/types/errors.js.map +1 -0
  117. package/dist/types/rpc.cjs +425 -0
  118. package/dist/types/rpc.d.cts +580 -0
  119. package/dist/types/rpc.d.cts.map +1 -0
  120. package/dist/types/rpc.d.ts +580 -0
  121. package/dist/types/rpc.d.ts.map +1 -0
  122. package/dist/types/rpc.js +406 -0
  123. package/dist/types/rpc.js.map +1 -0
  124. package/dist/user_agent.cjs +7 -0
  125. package/dist/user_agent.js +8 -0
  126. package/dist/user_agent.js.map +1 -0
  127. package/dist/utils/completable_promise.cjs +22 -0
  128. package/dist/utils/completable_promise.js +22 -0
  129. package/dist/utils/completable_promise.js.map +1 -0
  130. package/dist/utils/rand.cjs +72 -0
  131. package/dist/utils/rand.js +71 -0
  132. package/dist/utils/rand.js.map +1 -0
  133. package/dist/utils/streams.cjs +14 -0
  134. package/dist/utils/streams.js +13 -0
  135. package/dist/utils/streams.js.map +1 -0
  136. package/package.json +30 -52
  137. package/dist/esm/src/common_api.d.ts +0 -37
  138. package/dist/esm/src/common_api.d.ts.map +0 -1
  139. package/dist/esm/src/common_api.js +0 -32
  140. package/dist/esm/src/common_api.js.map +0 -1
  141. package/dist/esm/src/context.d.ts +0 -695
  142. package/dist/esm/src/context.d.ts.map +0 -1
  143. package/dist/esm/src/context.js +0 -87
  144. package/dist/esm/src/context.js.map +0 -1
  145. package/dist/esm/src/context_impl.d.ts +0 -69
  146. package/dist/esm/src/context_impl.d.ts.map +0 -1
  147. package/dist/esm/src/context_impl.js +0 -592
  148. package/dist/esm/src/context_impl.js.map +0 -1
  149. package/dist/esm/src/endpoint/components.d.ts +0 -97
  150. package/dist/esm/src/endpoint/components.d.ts.map +0 -1
  151. package/dist/esm/src/endpoint/components.js +0 -343
  152. package/dist/esm/src/endpoint/components.js.map +0 -1
  153. package/dist/esm/src/endpoint/discovery.d.ts +0 -184
  154. package/dist/esm/src/endpoint/discovery.d.ts.map +0 -1
  155. package/dist/esm/src/endpoint/discovery.js +0 -8
  156. package/dist/esm/src/endpoint/discovery.js.map +0 -1
  157. package/dist/esm/src/endpoint/endpoint.d.ts +0 -39
  158. package/dist/esm/src/endpoint/endpoint.d.ts.map +0 -1
  159. package/dist/esm/src/endpoint/endpoint.js +0 -155
  160. package/dist/esm/src/endpoint/endpoint.js.map +0 -1
  161. package/dist/esm/src/endpoint/fetch_endpoint.d.ts +0 -49
  162. package/dist/esm/src/endpoint/fetch_endpoint.d.ts.map +0 -1
  163. package/dist/esm/src/endpoint/fetch_endpoint.js +0 -49
  164. package/dist/esm/src/endpoint/fetch_endpoint.js.map +0 -1
  165. package/dist/esm/src/endpoint/handlers/fetch.d.ts +0 -5
  166. package/dist/esm/src/endpoint/handlers/fetch.d.ts.map +0 -1
  167. package/dist/esm/src/endpoint/handlers/fetch.js +0 -31
  168. package/dist/esm/src/endpoint/handlers/fetch.js.map +0 -1
  169. package/dist/esm/src/endpoint/handlers/generic.d.ts +0 -61
  170. package/dist/esm/src/endpoint/handlers/generic.d.ts.map +0 -1
  171. package/dist/esm/src/endpoint/handlers/generic.js +0 -470
  172. package/dist/esm/src/endpoint/handlers/generic.js.map +0 -1
  173. package/dist/esm/src/endpoint/handlers/lambda.d.ts +0 -10
  174. package/dist/esm/src/endpoint/handlers/lambda.d.ts.map +0 -1
  175. package/dist/esm/src/endpoint/handlers/lambda.js +0 -143
  176. package/dist/esm/src/endpoint/handlers/lambda.js.map +0 -1
  177. package/dist/esm/src/endpoint/lambda_endpoint.d.ts +0 -30
  178. package/dist/esm/src/endpoint/lambda_endpoint.d.ts.map +0 -1
  179. package/dist/esm/src/endpoint/lambda_endpoint.js +0 -48
  180. package/dist/esm/src/endpoint/lambda_endpoint.js.map +0 -1
  181. package/dist/esm/src/endpoint/node_endpoint.d.ts +0 -16
  182. package/dist/esm/src/endpoint/node_endpoint.d.ts.map +0 -1
  183. package/dist/esm/src/endpoint/node_endpoint.js +0 -124
  184. package/dist/esm/src/endpoint/node_endpoint.js.map +0 -1
  185. package/dist/esm/src/endpoint/types.d.ts +0 -55
  186. package/dist/esm/src/endpoint/types.d.ts.map +0 -1
  187. package/dist/esm/src/endpoint/types.js +0 -2
  188. package/dist/esm/src/endpoint/types.js.map +0 -1
  189. package/dist/esm/src/endpoint/withOptions.d.ts +0 -4
  190. package/dist/esm/src/endpoint/withOptions.d.ts.map +0 -1
  191. package/dist/esm/src/endpoint/withOptions.js +0 -19
  192. package/dist/esm/src/endpoint/withOptions.js.map +0 -1
  193. package/dist/esm/src/endpoint.d.ts +0 -108
  194. package/dist/esm/src/endpoint.d.ts.map +0 -1
  195. package/dist/esm/src/endpoint.js +0 -12
  196. package/dist/esm/src/endpoint.js.map +0 -1
  197. package/dist/esm/src/fetch.d.ts +0 -43
  198. package/dist/esm/src/fetch.d.ts.map +0 -1
  199. package/dist/esm/src/fetch.js.map +0 -1
  200. package/dist/esm/src/generated/version.d.ts +0 -2
  201. package/dist/esm/src/generated/version.d.ts.map +0 -1
  202. package/dist/esm/src/generated/version.js +0 -2
  203. package/dist/esm/src/generated/version.js.map +0 -1
  204. package/dist/esm/src/io.d.ts +0 -24
  205. package/dist/esm/src/io.d.ts.map +0 -1
  206. package/dist/esm/src/io.js +0 -73
  207. package/dist/esm/src/io.js.map +0 -1
  208. package/dist/esm/src/lambda.d.ts +0 -23
  209. package/dist/esm/src/lambda.d.ts.map +0 -1
  210. package/dist/esm/src/lambda.js +0 -37
  211. package/dist/esm/src/lambda.js.map +0 -1
  212. package/dist/esm/src/logging/console_logger_transport.d.ts +0 -5
  213. package/dist/esm/src/logging/console_logger_transport.d.ts.map +0 -1
  214. package/dist/esm/src/logging/console_logger_transport.js +0 -94
  215. package/dist/esm/src/logging/console_logger_transport.js.map +0 -1
  216. package/dist/esm/src/logging/logger.d.ts +0 -10
  217. package/dist/esm/src/logging/logger.d.ts.map +0 -1
  218. package/dist/esm/src/logging/logger.js +0 -57
  219. package/dist/esm/src/logging/logger.js.map +0 -1
  220. package/dist/esm/src/logging/logger_transport.d.ts +0 -52
  221. package/dist/esm/src/logging/logger_transport.d.ts.map +0 -1
  222. package/dist/esm/src/logging/logger_transport.js +0 -55
  223. package/dist/esm/src/logging/logger_transport.js.map +0 -1
  224. package/dist/esm/src/node.d.ts +0 -39
  225. package/dist/esm/src/node.d.ts.map +0 -1
  226. package/dist/esm/src/node.js +0 -52
  227. package/dist/esm/src/node.js.map +0 -1
  228. package/dist/esm/src/promises.d.ts +0 -111
  229. package/dist/esm/src/promises.d.ts.map +0 -1
  230. package/dist/esm/src/promises.js +0 -314
  231. package/dist/esm/src/promises.js.map +0 -1
  232. package/dist/esm/src/public_api.d.ts +0 -2
  233. package/dist/esm/src/public_api.d.ts.map +0 -1
  234. package/dist/esm/src/public_api.js +0 -12
  235. package/dist/esm/src/public_api.js.map +0 -1
  236. package/dist/esm/src/types/errors.d.ts +0 -74
  237. package/dist/esm/src/types/errors.d.ts.map +0 -1
  238. package/dist/esm/src/types/errors.js +0 -128
  239. package/dist/esm/src/types/errors.js.map +0 -1
  240. package/dist/esm/src/types/rpc.d.ts +0 -620
  241. package/dist/esm/src/types/rpc.d.ts.map +0 -1
  242. package/dist/esm/src/types/rpc.js +0 -577
  243. package/dist/esm/src/types/rpc.js.map +0 -1
  244. package/dist/esm/src/user_agent.d.ts +0 -2
  245. package/dist/esm/src/user_agent.d.ts.map +0 -1
  246. package/dist/esm/src/user_agent.js +0 -13
  247. package/dist/esm/src/user_agent.js.map +0 -1
  248. package/dist/esm/src/utils/completable_promise.d.ts +0 -9
  249. package/dist/esm/src/utils/completable_promise.d.ts.map +0 -1
  250. package/dist/esm/src/utils/completable_promise.js +0 -30
  251. package/dist/esm/src/utils/completable_promise.js.map +0 -1
  252. package/dist/esm/src/utils/rand.d.ts +0 -13
  253. package/dist/esm/src/utils/rand.d.ts.map +0 -1
  254. package/dist/esm/src/utils/rand.js +0 -109
  255. package/dist/esm/src/utils/rand.js.map +0 -1
  256. package/dist/esm/src/utils/streams.d.ts +0 -3
  257. package/dist/esm/src/utils/streams.d.ts.map +0 -1
  258. package/dist/esm/src/utils/streams.js +0 -20
  259. package/dist/esm/src/utils/streams.js.map +0 -1
  260. package/dist/esm/tsconfig.tsbuildinfo +0 -1
  261. /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings.d.ts +0 -0
  262. /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings.js +0 -0
  263. /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings_bg.js +0 -0
  264. /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings_bg.wasm +0 -0
  265. /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings_bg.wasm.d.ts +0 -0
@@ -1,470 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
3
- *
4
- * This file is part of the Restate SDK for Node.js/TypeScript,
5
- * which is released under the MIT license.
6
- *
7
- * You can find a copy of the license in file LICENSE in the root
8
- * directory of this repository or package, or at
9
- * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
10
- */
11
- import { ensureError, logError, RestateError, RetryableError, TerminalError, } from "../../types/errors.js";
12
- import { parseUrlComponents } from "../components.js";
13
- import { X_RESTATE_SERVER } from "../../user_agent.js";
14
- import { TransformStream } from "node:stream/web";
15
- import { OnceStream } from "../../utils/streams.js";
16
- import { ContextImpl } from "../../context_impl.js";
17
- import * as vm from "./vm/sdk_shared_core_wasm_bindings.js";
18
- import { CompletablePromise } from "../../utils/completable_promise.js";
19
- import { HandlerKind } from "../../types/rpc.js";
20
- import { createLogger } from "../../logging/logger.js";
21
- import { DEFAULT_CONSOLE_LOGGER_LOG_LEVEL, defaultLoggerTransport, } from "../../logging/console_logger_transport.js";
22
- import { LoggerContext, LogSource, RestateLogLevel, } from "../../logging/logger_transport.js";
23
- import { millisOrDurationToMillis, } from "@restatedev/restate-sdk-core";
24
- const ENDPOINT_MANIFEST_V2 = "application/vnd.restate.endpointmanifest.v2+json";
25
- const ENDPOINT_MANIFEST_V3 = "application/vnd.restate.endpointmanifest.v3+json";
26
- const ENDPOINT_MANIFEST_V4 = "application/vnd.restate.endpointmanifest.v4+json";
27
- export function tryCreateContextualLogger(loggerTransport, url, headers, additionalContext) {
28
- try {
29
- const path = new URL(url, "https://example.com").pathname;
30
- const parsed = parseUrlComponents(path);
31
- if (parsed.type !== "invoke") {
32
- return undefined;
33
- }
34
- const invocationId = invocationIdFromHeaders(headers);
35
- return createLogger(loggerTransport, LogSource.SYSTEM, new LoggerContext(invocationId, parsed.componentName, parsed.handlerName, undefined, undefined, additionalContext));
36
- }
37
- catch (e) {
38
- return undefined;
39
- }
40
- }
41
- function invocationIdFromHeaders(headers) {
42
- const invocationIdHeader = headers["x-restate-invocation-id"];
43
- const invocationId = typeof invocationIdHeader === "string"
44
- ? invocationIdHeader
45
- : Array.isArray(invocationIdHeader)
46
- ? invocationIdHeader[0] ?? "unknown id"
47
- : "unknown id";
48
- return invocationId;
49
- }
50
- /**
51
- * This is an internal API to support 'fetch' like handlers.
52
- * It supports both request-reply mode and bidirectional streaming mode.
53
- *
54
- * An individual handler will have to convert the shape of the incoming request
55
- * to a RestateRequest, and then pass it to this handler, and eventually convert back
56
- * the response.
57
- * Different runtimes have slightly different shapes of the incoming request, and responses.
58
- */
59
- export class GenericHandler {
60
- endpoint;
61
- protocolMode;
62
- additionalDiscoveryFields;
63
- identityVerifier;
64
- constructor(endpoint, protocolMode, additionalDiscoveryFields) {
65
- this.endpoint = endpoint;
66
- this.protocolMode = protocolMode;
67
- this.additionalDiscoveryFields = additionalDiscoveryFields;
68
- // Setup identity verifier
69
- if (this.endpoint.keySet === undefined ||
70
- this.endpoint.keySet.length === 0) {
71
- this.endpoint.rlog.warn(`Accepting requests without validating request signatures; handler access must be restricted`);
72
- }
73
- else {
74
- this.endpoint.rlog.info(`Validating requests using signing keys [${this.endpoint.keySet}]`);
75
- this.identityVerifier = new vm.WasmIdentityVerifier(this.endpoint.keySet);
76
- }
77
- // Set the logging level in the shared core too!
78
- vm.set_log_level(restateLogLevelToWasmLogLevel(DEFAULT_CONSOLE_LOGGER_LOG_LEVEL));
79
- }
80
- // handle does not throw.
81
- async handle(request, context) {
82
- try {
83
- return await this._handle(request, context);
84
- }
85
- catch (e) {
86
- const error = ensureError(e);
87
- (tryCreateContextualLogger(this.endpoint.loggerTransport, request.url, request.headers) ?? this.endpoint.rlog).error("Error while handling request: " + (error.stack ?? error.message));
88
- return this.toErrorResponse(error instanceof RestateError ? error.code : 500, error.message);
89
- }
90
- }
91
- async _handle(request, context) {
92
- // this is the recommended way to get the relative path from a url that may be relative or absolute
93
- const path = new URL(request.url, "https://example.com").pathname;
94
- const parsed = parseUrlComponents(path);
95
- if (parsed.type === "unknown") {
96
- const msg = `Invalid path. Allowed are /health, or /discover, or /invoke/SvcName/handlerName, but was: ${path}`;
97
- this.endpoint.rlog.trace(msg);
98
- return this.toErrorResponse(404, msg);
99
- }
100
- if (parsed.type === "health") {
101
- return {
102
- body: OnceStream(new TextEncoder().encode("OK")),
103
- headers: {
104
- "content-type": "application/text",
105
- "x-restate-server": X_RESTATE_SERVER,
106
- },
107
- statusCode: 200,
108
- };
109
- }
110
- const error = this.validateConnectionSignature(path, request.headers);
111
- if (error !== null) {
112
- return error;
113
- }
114
- if (parsed.type === "discover") {
115
- return this.handleDiscovery(request.headers["accept"]);
116
- }
117
- const serviceProtocolVersionString = request.headers["content-type"];
118
- if (typeof serviceProtocolVersionString !== "string") {
119
- const errorMessage = "Missing content-type header";
120
- this.endpoint.rlog.warn(errorMessage);
121
- return this.toErrorResponse(415, errorMessage);
122
- }
123
- const service = this.endpoint.components.get(parsed.componentName);
124
- if (!service) {
125
- const msg = `No service found for URL: ${JSON.stringify(parsed)}`;
126
- this.endpoint.rlog.error(msg);
127
- return this.toErrorResponse(404, msg);
128
- }
129
- const handler = service?.handlerMatching(parsed);
130
- if (!handler) {
131
- const msg = `No service found for URL: ${JSON.stringify(parsed)}`;
132
- this.endpoint.rlog.error(msg);
133
- return this.toErrorResponse(404, msg);
134
- }
135
- if (!request.body) {
136
- const msg = "The incoming message body was null";
137
- this.endpoint.rlog.error(msg);
138
- return this.toErrorResponse(400, msg);
139
- }
140
- return this.handleInvoke(service, handler, request.body, request.headers, request.extraArgs, request.abortSignal, context ?? {});
141
- }
142
- validateConnectionSignature(path, headers) {
143
- if (!this.identityVerifier) {
144
- // not validating
145
- return null;
146
- }
147
- const vmHeaders = Object.entries(headers)
148
- .filter(([, v]) => v !== undefined)
149
- .map(([k, v]) => new vm.WasmHeader(k, v instanceof Array ? v[0] : v));
150
- try {
151
- this.identityVerifier.verify_identity(path, vmHeaders);
152
- return null;
153
- }
154
- catch (e) {
155
- this.endpoint.rlog.error(
156
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
157
- `Rejecting request as its JWT did not validate: ${e}`);
158
- return this.toErrorResponse(401, "Unauthorized");
159
- }
160
- }
161
- async handleInvoke(service, handler, body, headers, extraArgs, abortSignal, additionalContext) {
162
- const journalValueCodec = this.endpoint.journalValueCodec
163
- ? await this.endpoint.journalValueCodec
164
- : {
165
- encode: (entry) => entry,
166
- decode: (entry) => Promise.resolve(entry),
167
- };
168
- const loggerId = Math.floor(Math.random() * 4_294_967_295 /* u32::MAX */);
169
- try {
170
- // Instantiate core vm and prepare response headers
171
- const vmHeaders = Object.entries(headers)
172
- .filter(([, v]) => v !== undefined)
173
- .map(([k, v]) => new vm.WasmHeader(k, v instanceof Array ? v[0] : v));
174
- const coreVm = new vm.WasmVM(vmHeaders, restateLogLevelToWasmLogLevel(DEFAULT_CONSOLE_LOGGER_LOG_LEVEL), loggerId, this.endpoint.journalValueCodec !== undefined);
175
- const responseHead = coreVm.get_response_head();
176
- const responseHeaders = responseHead.headers.reduce((headers, { key, value }) => ({
177
- [key]: value,
178
- ...headers,
179
- }), {
180
- "x-restate-server": X_RESTATE_SERVER,
181
- });
182
- // Use a default logger that still respects the endpoint custom logger
183
- // We will override this later with a logger that has a LoggerContext
184
- // See vm_log below for more details
185
- invocationLoggers.set(loggerId, createLogger(this.endpoint.loggerTransport, LogSource.JOURNAL, new LoggerContext(invocationIdFromHeaders(headers), service.name(), handler.name(), undefined, undefined, additionalContext)));
186
- const inputReader = body.getReader();
187
- abortSignal.addEventListener("abort", () => {
188
- invocationLoggers.delete(loggerId);
189
- void inputReader.cancel();
190
- }, { once: true });
191
- // Now buffer input entries
192
- while (!coreVm.is_ready_to_execute()) {
193
- const nextValue = await inputReader.read();
194
- if (nextValue.value !== undefined) {
195
- coreVm.notify_input(nextValue.value);
196
- }
197
- if (nextValue.done) {
198
- coreVm.notify_input_closed();
199
- break;
200
- }
201
- }
202
- // Get input
203
- const input = coreVm.sys_input();
204
- const invocationRequest = {
205
- id: input.invocation_id,
206
- headers: input.headers.reduce((headers, { key, value }) => {
207
- headers.set(key, value);
208
- return headers;
209
- }, new Map()),
210
- attemptHeaders: Object.entries(headers).reduce((headers, [key, value]) => {
211
- if (value !== undefined) {
212
- headers.set(key, value instanceof Array ? value[0] : value);
213
- }
214
- return headers;
215
- }, new Map()),
216
- body: input.input,
217
- extraArgs,
218
- attemptCompletedSignal: abortSignal,
219
- };
220
- // Prepare logger
221
- const loggerContext = new LoggerContext(input.invocation_id, handler.component().name(), handler.name(), handler.kind() === HandlerKind.SERVICE ? undefined : input.key, invocationRequest, additionalContext);
222
- const ctxLogger = createLogger(this.endpoint.loggerTransport, LogSource.USER, loggerContext, () => !coreVm.is_processing());
223
- const vmLogger = createLogger(this.endpoint.loggerTransport, LogSource.JOURNAL, loggerContext
224
- // Filtering is done within the shared core
225
- );
226
- // See vm_log below for more details
227
- invocationLoggers.set(loggerId, vmLogger);
228
- if (!coreVm.is_processing()) {
229
- vmLogger.info("Replaying invocation.");
230
- }
231
- else {
232
- vmLogger.info("Starting invocation.");
233
- }
234
- // This promise is used to signal the end of the computation,
235
- // which can be either the user returns a value,
236
- // or an exception gets catched, or the state machine fails/suspends.
237
- //
238
- // The last case is handled internally within the ContextImpl.
239
- const invocationEndPromise = new CompletablePromise();
240
- // Prepare response stream
241
- const responseTransformStream = new TransformStream();
242
- const outputWriter = responseTransformStream.writable.getWriter();
243
- // Prepare context
244
- const ctx = new ContextImpl(coreVm, input, ctxLogger, handler.kind(), vmLogger, invocationRequest, invocationEndPromise, inputReader, outputWriter, journalValueCodec, service.options?.asTerminalError);
245
- journalValueCodec
246
- .decode(input.input)
247
- .catch((e) => Promise.reject(new TerminalError(`Failed to decode input using journal value codec: ${ensureError(e).message}`, {
248
- errorCode: 400,
249
- })))
250
- .then((decodedInput) =>
251
- // Invoke user handler code
252
- handler.invoke(ctx, decodedInput))
253
- .then((output) => {
254
- // Write output result
255
- coreVm.sys_write_output_success(journalValueCodec.encode(output));
256
- coreVm.sys_end();
257
- vmLogger.info("Invocation completed successfully.");
258
- })
259
- .catch((e) => {
260
- // Convert to Error
261
- const error = ensureError(e, service.options?.asTerminalError);
262
- logError(vmLogger, error);
263
- // If TerminalError, handle it here.
264
- // NOTE: this can still fail!
265
- if (error instanceof TerminalError) {
266
- coreVm.sys_write_output_failure({
267
- code: error.code,
268
- message: error.message,
269
- });
270
- coreVm.sys_end();
271
- return;
272
- }
273
- // Not a terminal error, have the below catch handle it
274
- throw error;
275
- })
276
- .catch((e) => {
277
- // Handle any other error now (retryable errors)
278
- const error = ensureError(e);
279
- if (error instanceof RetryableError) {
280
- coreVm.notify_error_with_delay_override(error.message, error.stack, error.retryAfter !== undefined
281
- ? BigInt(millisOrDurationToMillis(error.retryAfter))
282
- : undefined);
283
- }
284
- else {
285
- coreVm.notify_error(error.message, error.stack);
286
- }
287
- })
288
- .finally(() => {
289
- invocationEndPromise.resolve();
290
- });
291
- // Let's wire up invocationEndPromise with consuming all the output and closing the streams.
292
- invocationEndPromise.promise
293
- .then(async () => {
294
- // Consume output till the end, write it out, then close the stream
295
- let nextOutput = coreVm.take_output();
296
- while (nextOutput !== null && nextOutput !== undefined) {
297
- await outputWriter.write(nextOutput);
298
- nextOutput = coreVm.take_output();
299
- }
300
- await outputWriter.close();
301
- // Let's cancel the input reader, if it's still here
302
- inputReader.cancel().catch(() => { });
303
- })
304
- .finally(() => {
305
- invocationLoggers.delete(loggerId);
306
- })
307
- .catch(() => { });
308
- return {
309
- headers: responseHeaders,
310
- statusCode: responseHead.status_code,
311
- body: responseTransformStream.readable,
312
- };
313
- }
314
- catch (error) {
315
- invocationLoggers.delete(loggerId);
316
- throw error;
317
- }
318
- }
319
- handleDiscovery(acceptVersionsString) {
320
- if (typeof acceptVersionsString !== "string") {
321
- const errorMessage = "Missing accept header";
322
- this.endpoint.rlog.warn(errorMessage);
323
- return this.toErrorResponse(415, errorMessage);
324
- }
325
- // Negotiate version to use
326
- let manifestVersion;
327
- if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V4)) {
328
- manifestVersion = 4;
329
- }
330
- else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V3)) {
331
- manifestVersion = 3;
332
- }
333
- else if (acceptVersionsString.includes(ENDPOINT_MANIFEST_V2)) {
334
- manifestVersion = 2;
335
- }
336
- else {
337
- const errorMessage = `Unsupported service discovery protocol version '${acceptVersionsString}'`;
338
- this.endpoint.rlog.warn(errorMessage);
339
- return this.toErrorResponse(415, errorMessage);
340
- }
341
- const discovery = {
342
- ...this.endpoint.discoveryMetadata,
343
- ...this.additionalDiscoveryFields,
344
- protocolMode: this.protocolMode,
345
- };
346
- const checkUnsupportedFeature = (obj, ...fields) => {
347
- for (const field of fields) {
348
- if (field in obj && obj[field] !== undefined) {
349
- return this.toErrorResponse(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.`);
350
- }
351
- }
352
- return;
353
- };
354
- // Verify none of the manifest v3 configuration options are used.
355
- if (manifestVersion < 3) {
356
- for (const service of discovery.services) {
357
- const error = checkUnsupportedFeature(service, "journalRetention", "idempotencyRetention", "inactivityTimeout", "abortTimeout", "enableLazyState", "ingressPrivate");
358
- if (error !== undefined) {
359
- return error;
360
- }
361
- for (const handler of service.handlers) {
362
- const error = checkUnsupportedFeature(handler, "journalRetention", "idempotencyRetention", "workflowCompletionRetention", "inactivityTimeout", "abortTimeout", "enableLazyState", "ingressPrivate");
363
- if (error !== undefined) {
364
- return error;
365
- }
366
- }
367
- }
368
- }
369
- if (manifestVersion < 4) {
370
- // Blank the lambda compression field. No need to fail in this case.
371
- discovery.lambdaCompression = undefined;
372
- for (const service of discovery.services) {
373
- const error = checkUnsupportedFeature(service, "retryPolicyExponentiationFactor", "retryPolicyInitialInterval", "retryPolicyMaxAttempts", "retryPolicyMaxInterval", "retryPolicyOnMaxAttempts");
374
- if (error !== undefined) {
375
- return error;
376
- }
377
- for (const handler of service.handlers) {
378
- const error = checkUnsupportedFeature(handler, "retryPolicyExponentiationFactor", "retryPolicyInitialInterval", "retryPolicyMaxAttempts", "retryPolicyMaxInterval", "retryPolicyOnMaxAttempts");
379
- if (error !== undefined) {
380
- return error;
381
- }
382
- }
383
- }
384
- }
385
- const body = JSON.stringify(discovery);
386
- return {
387
- headers: {
388
- "content-type": manifestVersion === 2
389
- ? ENDPOINT_MANIFEST_V2
390
- : manifestVersion === 3
391
- ? ENDPOINT_MANIFEST_V3
392
- : ENDPOINT_MANIFEST_V4,
393
- "x-restate-server": X_RESTATE_SERVER,
394
- },
395
- statusCode: 200,
396
- body: OnceStream(new TextEncoder().encode(body)),
397
- };
398
- }
399
- toErrorResponse(code, message) {
400
- return {
401
- headers: {
402
- "content-type": "application/json",
403
- "x-restate-server": X_RESTATE_SERVER,
404
- },
405
- statusCode: code,
406
- body: OnceStream(new TextEncoder().encode(JSON.stringify({ message }))),
407
- };
408
- }
409
- }
410
- // See vm_log below for more details
411
- const invocationLoggers = new Map();
412
- const logsTextDecoder = new TextDecoder("utf-8", { fatal: false });
413
- /**
414
- * The shared core propagates logs to the SDK invoking this method.
415
- * When possible it provides an invocationId, which is used to access the registered invocationLoggers, that should contain the logger per invocation id.
416
- */
417
- export function vm_log(level, strBytes, loggerId) {
418
- try {
419
- const logger = (loggerId && invocationLoggers.get(loggerId)) || undefined;
420
- const str = logsTextDecoder.decode(strBytes);
421
- if (logger !== undefined) {
422
- logger.logForLevel(wasmLogLevelToRestateLogLevel(level), str);
423
- }
424
- else {
425
- defaultLoggerTransport({
426
- level: wasmLogLevelToRestateLogLevel(level),
427
- replaying: false,
428
- source: LogSource.JOURNAL,
429
- }, str);
430
- }
431
- }
432
- catch (e) {
433
- // This function CAN'T EVER propagate an error,
434
- // because otherwise it will cause an awesome error in the shared core due to concurrent usage of it.
435
- defaultLoggerTransport({
436
- level: RestateLogLevel.ERROR,
437
- replaying: false,
438
- source: LogSource.SYSTEM,
439
- }, "Unexpected error thrown while trying to log: " + e?.toString());
440
- }
441
- }
442
- function wasmLogLevelToRestateLogLevel(level) {
443
- switch (level) {
444
- case vm.LogLevel.TRACE:
445
- return RestateLogLevel.TRACE;
446
- case vm.LogLevel.DEBUG:
447
- return RestateLogLevel.DEBUG;
448
- case vm.LogLevel.INFO:
449
- return RestateLogLevel.INFO;
450
- case vm.LogLevel.WARN:
451
- return RestateLogLevel.WARN;
452
- case vm.LogLevel.ERROR:
453
- return RestateLogLevel.ERROR;
454
- }
455
- }
456
- function restateLogLevelToWasmLogLevel(level) {
457
- switch (level) {
458
- case RestateLogLevel.TRACE:
459
- return vm.LogLevel.TRACE;
460
- case RestateLogLevel.DEBUG:
461
- return vm.LogLevel.DEBUG;
462
- case RestateLogLevel.INFO:
463
- return vm.LogLevel.INFO;
464
- case RestateLogLevel.WARN:
465
- return vm.LogLevel.WARN;
466
- case RestateLogLevel.ERROR:
467
- return vm.LogLevel.ERROR;
468
- }
469
- }
470
- //# sourceMappingURL=generic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../../../src/endpoint/handlers/generic.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { APIGatewayProxyEvent, APIGatewayProxyEventV2, APIGatewayProxyResult, APIGatewayProxyStructuredResultV2, Context } from "aws-lambda";
2
- import type { GenericHandler } from "./generic.js";
3
- export declare class LambdaHandler {
4
- private readonly handler;
5
- private readonly compressionSupported;
6
- constructor(handler: GenericHandler, compressionSupported: boolean);
7
- handleRequest(event: APIGatewayProxyEvent | APIGatewayProxyEventV2, context: Context): Promise<APIGatewayProxyResult | APIGatewayProxyStructuredResultV2>;
8
- }
9
- export declare function isCompressionSupported(): boolean;
10
- //# sourceMappingURL=lambda.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lambda.d.ts","sourceRoot":"","sources":["../../../../../src/endpoint/handlers/lambda.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iCAAiC,EACjC,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,cAAc,CAAC;AAUtB,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBADpB,OAAO,EAAE,cAAc,EACvB,oBAAoB,EAAE,OAAO;IAG1C,aAAa,CACjB,KAAK,EAAE,oBAAoB,GAAG,sBAAsB,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,qBAAqB,GAAG,iCAAiC,CAAC;CA8ItE;AAED,wBAAgB,sBAAsB,YAErC"}
@@ -1,143 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
3
- *
4
- * This file is part of the Restate SDK for Node.js/TypeScript,
5
- * which is released under the MIT license.
6
- *
7
- * You can find a copy of the license in file LICENSE in the root
8
- * directory of this repository or package, or at
9
- * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
10
- */
11
- import { Buffer } from "node:buffer";
12
- import { tryCreateContextualLogger } from "./generic.js";
13
- import { WritableStream } from "node:stream/web";
14
- import { OnceStream } from "../../utils/streams.js";
15
- import { X_RESTATE_SERVER } from "../../user_agent.js";
16
- import { ensureError } from "../../types/errors.js";
17
- import * as zlib from "node:zlib";
18
- const RESPONSE_COMPRESSION_THRESHOLD = 3 * 1024 * 1024;
19
- export class LambdaHandler {
20
- handler;
21
- compressionSupported;
22
- constructor(handler, compressionSupported) {
23
- this.handler = handler;
24
- this.compressionSupported = compressionSupported;
25
- }
26
- async handleRequest(event, context) {
27
- //
28
- // Request path
29
- //
30
- const path = "path" in event ? event.path : event.rawPath;
31
- // Deal with content-encoding
32
- let requestContentEncoding;
33
- let requestAcceptEncoding;
34
- for (const [key, value] of Object.entries(event.headers)) {
35
- if (key.localeCompare("content-encoding", undefined, {
36
- sensitivity: "accent",
37
- }) === 0) {
38
- requestContentEncoding = value;
39
- }
40
- else if (key.localeCompare("accept-encoding", undefined, {
41
- sensitivity: "accent",
42
- }) === 0) {
43
- requestAcceptEncoding = value;
44
- }
45
- }
46
- //
47
- // Convert the request body to a Uint8Array stream
48
- // Lambda functions receive the body as base64 encoded string
49
- //
50
- let bodyStream;
51
- if (!event.body) {
52
- bodyStream = null;
53
- }
54
- else {
55
- let bodyBuffer;
56
- if (event.isBase64Encoded) {
57
- bodyBuffer = Buffer.from(event.body, "base64");
58
- }
59
- else {
60
- bodyBuffer = Buffer.from(new TextEncoder().encode(event.body));
61
- }
62
- // Now decode if needed
63
- if (requestContentEncoding && requestContentEncoding.includes("zstd")) {
64
- if (!this.compressionSupported) {
65
- throw new Error("The input is compressed using zstd, but this lambda deployment doesn't support compression. Make sure to deploy the Lambda using Node > 22");
66
- }
67
- // Input encoded with zstd, let's decode it!
68
- bodyBuffer = zlib.zstdDecompressSync(bodyBuffer);
69
- }
70
- // Prep the stream to pass through the endpoint handler
71
- bodyStream = OnceStream(bodyBuffer);
72
- }
73
- const abortController = new AbortController();
74
- const request = {
75
- body: bodyStream,
76
- headers: event.headers,
77
- url: path,
78
- extraArgs: [context],
79
- abortSignal: abortController.signal,
80
- };
81
- let response;
82
- try {
83
- response = await this.handler.handle(request, {
84
- AWSRequestId: context.awsRequestId,
85
- });
86
- }
87
- catch (e) {
88
- abortController.abort();
89
- throw e;
90
- }
91
- const chunks = [];
92
- try {
93
- await response.body.pipeTo(new WritableStream({
94
- write: (chunk) => {
95
- chunks.push(chunk);
96
- },
97
- }));
98
- }
99
- catch (e) {
100
- // unlike in the streaming case, we can actually catch errors in the response body and form a nicer error
101
- const error = ensureError(e);
102
- (tryCreateContextualLogger(this.handler.endpoint.loggerTransport, request.url, request.headers) ?? this.handler.endpoint.rlog).error("Error while collecting invocation response: " +
103
- (error.stack ?? error.message));
104
- return {
105
- headers: {
106
- "content-type": "application/json",
107
- "x-restate-server": X_RESTATE_SERVER,
108
- },
109
- statusCode: 500,
110
- isBase64Encoded: false,
111
- body: JSON.stringify({ message: error.message }),
112
- };
113
- }
114
- finally {
115
- abortController.abort();
116
- }
117
- const responseBodyBuffer = Buffer.concat(chunks);
118
- let responseBody;
119
- // Now let's encode if we need to.
120
- if (this.compressionSupported &&
121
- responseBodyBuffer.length > RESPONSE_COMPRESSION_THRESHOLD &&
122
- requestAcceptEncoding &&
123
- requestAcceptEncoding.includes("zstd")) {
124
- response.headers["content-encoding"] = "zstd";
125
- responseBody = zlib
126
- .zstdCompressSync(responseBodyBuffer)
127
- .toString("base64");
128
- }
129
- else {
130
- responseBody = responseBodyBuffer.toString("base64");
131
- }
132
- return {
133
- headers: response.headers,
134
- statusCode: response.statusCode,
135
- isBase64Encoded: true,
136
- body: responseBody,
137
- };
138
- }
139
- }
140
- export function isCompressionSupported() {
141
- return "zstdDecompressSync" in zlib && "zstdCompressSync" in zlib;
142
- }
143
- //# sourceMappingURL=lambda.js.map