@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
@@ -0,0 +1,71 @@
1
+ import { Duration } from "@restatedev/restate-sdk-core";
2
+
3
+ //#region src/types/errors.d.ts
4
+
5
+ declare class RestateError extends Error {
6
+ readonly code: number;
7
+ name: string;
8
+ constructor(message: string, options?: {
9
+ errorCode?: number;
10
+ cause?: any;
11
+ });
12
+ }
13
+ /**
14
+ * Does not lead to Restate retries.
15
+ *
16
+ * Leads to an output message with a failure defined.
17
+ */
18
+ declare class TerminalError extends RestateError {
19
+ name: string;
20
+ constructor(message: string, options?: {
21
+ /**
22
+ * Error code. This should be an HTTP status code, and in case the service was invoked from the ingress, this will be propagated back to the caller.
23
+ */
24
+ errorCode?: number;
25
+ /**
26
+ * @deprecated YOU MUST NOT USE THIS FIELD, AS IT WON'T BE RECORDED AND CAN LEAD TO NON-DETERMINISM! From the next SDK version, the constructor won't accept this field anymore.
27
+ */
28
+ cause?: any;
29
+ });
30
+ }
31
+ /**
32
+ * Returned by `RestatePromise.withTimeout` when the timeout is reached.
33
+ */
34
+ declare class TimeoutError extends TerminalError {
35
+ name: string;
36
+ constructor();
37
+ }
38
+ /**
39
+ * Returned when the invocation was cancelled.
40
+ */
41
+ declare class CancelledError extends TerminalError {
42
+ name: string;
43
+ constructor();
44
+ }
45
+ interface RetryableErrorOptions {
46
+ /**
47
+ * In how long it should retry.
48
+ */
49
+ retryAfter?: Duration | number;
50
+ }
51
+ /**
52
+ * Error that Restate will retry. By using this error type within a `ctx.run` closure,
53
+ * you can dynamically provide the retry delay specified in {@link RetryableErrorOptions}.
54
+ *
55
+ * You can wrap another error using {@link from}.
56
+ */
57
+ declare class RetryableError extends RestateError {
58
+ name: string;
59
+ readonly retryAfter?: Duration | number;
60
+ constructor(message: string, options?: RetryableErrorOptions & {
61
+ errorCode?: number;
62
+ cause?: any;
63
+ });
64
+ /**
65
+ * Create a `RetryableError` from the given cause.
66
+ */
67
+ static from(cause: any, options?: RetryableErrorOptions): RetryableError;
68
+ }
69
+ //#endregion
70
+ export { CancelledError, RestateError, RetryableError, RetryableErrorOptions, TerminalError, TimeoutError };
71
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","names":[],"sources":["../../src/types/errors.ts"],"sourcesContent":[],"mappings":";;;;AAsJwB,cAzEX,YAAA,SAAqB,KAAA,CAyEV;EAIV,SAAA,IAAA,EAAA,MAAA;EAgBsB,IAAA,EAAA,MAAA;EAAwB,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA;IAvBxB,SAAA,CAAA,EAAA,MAAA;IAAY,KAAA,CAAA,EAAA,GAAA;;;;;;;;cAvDnC,aAAA,SAAsB,YAAA;;;;;;;;;;;;;;;;cAuBtB,YAAA,SAAqB,aAAA;;;;;;;cAWrB,cAAA,SAAuB,aAAA;;;;UAQnB,qBAAA;;;;eAIF;;;;;;;;cASF,cAAA,SAAuB,YAAA;;wBAGZ;yCAIV;;;;;;;oCAgBsB,wBAAwB"}
@@ -0,0 +1,102 @@
1
+ //#region src/types/errors.ts
2
+ const INTERNAL_ERROR_CODE = 500;
3
+ const TIMEOUT_ERROR_CODE = 408;
4
+ const CANCEL_ERROR_CODE = 409;
5
+ const UNKNOWN_ERROR_CODE = 500;
6
+ const CLOSED_ERROR_CODE = 598;
7
+ const SUSPENDED_ERROR_CODE = 599;
8
+ function ensureError(e, asTerminalError) {
9
+ if (e instanceof TerminalError) return e;
10
+ const maybeTerminalError = asTerminalError ? asTerminalError(e) : void 0;
11
+ if (maybeTerminalError) return maybeTerminalError;
12
+ if (e instanceof Error) return e;
13
+ if (typeof e === "object" && e !== null && "code" in e && "message" in e) return new RestateError(e.message, { errorCode: e.code });
14
+ let msg;
15
+ try {
16
+ msg = JSON.stringify(e);
17
+ } catch {
18
+ msg = "(no JSON representation)";
19
+ }
20
+ return /* @__PURE__ */ new Error("Non-Error value: " + msg);
21
+ }
22
+ function logError(log, e) {
23
+ if (e instanceof RestateError) {
24
+ if (e.code === SUSPENDED_ERROR_CODE) {
25
+ log.info("Invocation suspended");
26
+ return;
27
+ } else if (e.code === CLOSED_ERROR_CODE) {
28
+ log.error("DANGER! The invocation is closed, but some related operation is still running. \nThis might indicate that a RestatePromise is being awaited on an asynchronous task, outside the handler, or you're awaiting a RestatePromise inside a ctx.run.\nThis is dangerous, and can lead the service to deadlock. Please fix the issue.\nDiagnostic: ", e);
29
+ return;
30
+ }
31
+ }
32
+ log.warn("Error when processing a Restate context operation.\n", e);
33
+ }
34
+ var RestateError = class extends Error {
35
+ code;
36
+ name = "RestateError";
37
+ constructor(message, options) {
38
+ super(message, { cause: options?.cause });
39
+ this.code = options?.errorCode ?? INTERNAL_ERROR_CODE;
40
+ }
41
+ };
42
+ /**
43
+ * Does not lead to Restate retries.
44
+ *
45
+ * Leads to an output message with a failure defined.
46
+ */
47
+ var TerminalError = class extends RestateError {
48
+ name = "TerminalError";
49
+ constructor(message, options) {
50
+ super(message, options);
51
+ }
52
+ };
53
+ /**
54
+ * Returned by `RestatePromise.withTimeout` when the timeout is reached.
55
+ */
56
+ var TimeoutError = class extends TerminalError {
57
+ name = "TimeoutError";
58
+ constructor() {
59
+ super("Timeout occurred", { errorCode: TIMEOUT_ERROR_CODE });
60
+ }
61
+ };
62
+ /**
63
+ * Returned when the invocation was cancelled.
64
+ */
65
+ var CancelledError = class extends TerminalError {
66
+ name = "CancelledError";
67
+ constructor() {
68
+ super("Cancelled", { errorCode: CANCEL_ERROR_CODE });
69
+ }
70
+ };
71
+ /**
72
+ * Error that Restate will retry. By using this error type within a `ctx.run` closure,
73
+ * you can dynamically provide the retry delay specified in {@link RetryableErrorOptions}.
74
+ *
75
+ * You can wrap another error using {@link from}.
76
+ */
77
+ var RetryableError = class RetryableError extends RestateError {
78
+ name = "RetryableError";
79
+ retryAfter;
80
+ constructor(message, options) {
81
+ super(message, {
82
+ errorCode: options?.errorCode,
83
+ cause: options?.cause
84
+ });
85
+ this.retryAfter = options?.retryAfter;
86
+ }
87
+ /**
88
+ * Create a `RetryableError` from the given cause.
89
+ */
90
+ static from(cause, options) {
91
+ const error = ensureError(cause);
92
+ return new RetryableError(error.message, {
93
+ errorCode: error["errorCode"],
94
+ cause,
95
+ ...options
96
+ });
97
+ }
98
+ };
99
+
100
+ //#endregion
101
+ export { CancelledError, INTERNAL_ERROR_CODE, RestateError, RetryableError, TerminalError, TimeoutError, UNKNOWN_ERROR_CODE, ensureError, logError };
102
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../../src/types/errors.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\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Duration } from \"@restatedev/restate-sdk-core\";\n\nexport const INTERNAL_ERROR_CODE = 500;\nexport const TIMEOUT_ERROR_CODE = 408;\nexport const CANCEL_ERROR_CODE = 409;\nexport const UNKNOWN_ERROR_CODE = 500;\n\n// From shared core!\nexport const CLOSED_ERROR_CODE = 598;\nexport const SUSPENDED_ERROR_CODE = 599;\n\nexport function ensureError(\n e: unknown,\n asTerminalError?: (error: any) => TerminalError | undefined\n): Error {\n if (e instanceof TerminalError) {\n return e;\n }\n // Try convert to terminal error\n const maybeTerminalError = asTerminalError ? asTerminalError(e) : undefined;\n if (maybeTerminalError) {\n return maybeTerminalError;\n }\n\n if (e instanceof Error) {\n return e;\n }\n if (typeof e === \"object\" && e !== null && \"code\" in e && \"message\" in e) {\n // This is an error from the VM\n return new RestateError(e.message as string, {\n errorCode: e.code as number,\n });\n }\n\n // None of the types we know\n let msg;\n try {\n msg = JSON.stringify(e);\n } catch {\n msg = \"(no JSON representation)\";\n }\n\n return new Error(\"Non-Error value: \" + msg);\n}\n\nexport function logError(log: Console, e: unknown) {\n if (e instanceof RestateError) {\n if (e.code === SUSPENDED_ERROR_CODE) {\n log.info(\"Invocation suspended\");\n return;\n } else if (e.code === CLOSED_ERROR_CODE) {\n log.error(\n \"DANGER! The invocation is closed, but some related operation is still running. \\n\" +\n \"This might indicate that a RestatePromise is being awaited on an asynchronous task, outside the handler, or you're awaiting a RestatePromise inside a ctx.run.\\n\" +\n \"This is dangerous, and can lead the service to deadlock. Please fix the issue.\\n\" +\n \"Diagnostic: \",\n e\n );\n return;\n }\n }\n log.warn(\"Error when processing a Restate context operation.\\n\", e);\n}\n\nexport class RestateError extends Error {\n public readonly code: number;\n public override name = \"RestateError\";\n\n constructor(message: string, options?: { errorCode?: number; cause?: any }) {\n super(message, { cause: options?.cause });\n this.code = options?.errorCode ?? INTERNAL_ERROR_CODE;\n }\n}\n\n/**\n * Does not lead to Restate retries.\n *\n * Leads to an output message with a failure defined.\n */\nexport class TerminalError extends RestateError {\n public override name = \"TerminalError\";\n\n constructor(\n message: string,\n options?: {\n /**\n * Error code. This should be an HTTP status code, and in case the service was invoked from the ingress, this will be propagated back to the caller.\n */\n errorCode?: number;\n /**\n * @deprecated YOU MUST NOT USE THIS FIELD, AS IT WON'T BE RECORDED AND CAN LEAD TO NON-DETERMINISM! From the next SDK version, the constructor won't accept this field anymore.\n */\n cause?: any;\n }\n ) {\n super(message, options);\n }\n}\n\n/**\n * Returned by `RestatePromise.withTimeout` when the timeout is reached.\n */\nexport class TimeoutError extends TerminalError {\n public override name = \"TimeoutError\";\n\n constructor() {\n super(\"Timeout occurred\", { errorCode: TIMEOUT_ERROR_CODE });\n }\n}\n\n/**\n * Returned when the invocation was cancelled.\n */\nexport class CancelledError extends TerminalError {\n public override name = \"CancelledError\";\n\n constructor() {\n super(\"Cancelled\", { errorCode: CANCEL_ERROR_CODE });\n }\n}\n\nexport interface RetryableErrorOptions {\n /**\n * In how long it should retry.\n */\n retryAfter?: Duration | number;\n}\n\n/**\n * Error that Restate will retry. By using this error type within a `ctx.run` closure,\n * you can dynamically provide the retry delay specified in {@link RetryableErrorOptions}.\n *\n * You can wrap another error using {@link from}.\n */\nexport class RetryableError extends RestateError {\n public override name = \"RetryableError\";\n\n readonly retryAfter?: Duration | number;\n\n constructor(\n message: string,\n options?: RetryableErrorOptions & {\n errorCode?: number;\n cause?: any;\n }\n ) {\n super(message, {\n errorCode: options?.errorCode,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n cause: options?.cause,\n });\n this.retryAfter = options?.retryAfter;\n }\n\n /**\n * Create a `RetryableError` from the given cause.\n */\n static from(cause: any, options?: RetryableErrorOptions): RetryableError {\n const error = ensureError(cause);\n return new RetryableError(error.message, {\n errorCode: error[\"errorCode\" as keyof typeof error] as number,\n cause: cause,\n ...options,\n });\n }\n}\n"],"mappings":";AAeA,MAAa,sBAAsB;AACnC,MAAa,qBAAqB;AAClC,MAAa,oBAAoB;AACjC,MAAa,qBAAqB;AAGlC,MAAa,oBAAoB;AACjC,MAAa,uBAAuB;AAEpC,SAAgB,YACd,GACA,iBACO;AACP,KAAI,aAAa,cACf,QAAO;CAGT,MAAM,qBAAqB,kBAAkB,gBAAgB,EAAE,GAAG;AAClE,KAAI,mBACF,QAAO;AAGT,KAAI,aAAa,MACf,QAAO;AAET,KAAI,OAAO,MAAM,YAAY,MAAM,QAAQ,UAAU,KAAK,aAAa,EAErE,QAAO,IAAI,aAAa,EAAE,SAAmB,EAC3C,WAAW,EAAE,MACd,CAAC;CAIJ,IAAI;AACJ,KAAI;AACF,QAAM,KAAK,UAAU,EAAE;SACjB;AACN,QAAM;;AAGR,wBAAO,IAAI,MAAM,sBAAsB,IAAI;;AAG7C,SAAgB,SAAS,KAAc,GAAY;AACjD,KAAI,aAAa,cACf;MAAI,EAAE,SAAS,sBAAsB;AACnC,OAAI,KAAK,uBAAuB;AAChC;aACS,EAAE,SAAS,mBAAmB;AACvC,OAAI,MACF,iVAIA,EACD;AACD;;;AAGJ,KAAI,KAAK,wDAAwD,EAAE;;AAGrE,IAAa,eAAb,cAAkC,MAAM;CACtC,AAAgB;CAChB,AAAgB,OAAO;CAEvB,YAAY,SAAiB,SAA+C;AAC1E,QAAM,SAAS,EAAE,OAAO,SAAS,OAAO,CAAC;AACzC,OAAK,OAAO,SAAS,aAAa;;;;;;;;AAStC,IAAa,gBAAb,cAAmC,aAAa;CAC9C,AAAgB,OAAO;CAEvB,YACE,SACA,SAUA;AACA,QAAM,SAAS,QAAQ;;;;;;AAO3B,IAAa,eAAb,cAAkC,cAAc;CAC9C,AAAgB,OAAO;CAEvB,cAAc;AACZ,QAAM,oBAAoB,EAAE,WAAW,oBAAoB,CAAC;;;;;;AAOhE,IAAa,iBAAb,cAAoC,cAAc;CAChD,AAAgB,OAAO;CAEvB,cAAc;AACZ,QAAM,aAAa,EAAE,WAAW,mBAAmB,CAAC;;;;;;;;;AAiBxD,IAAa,iBAAb,MAAa,uBAAuB,aAAa;CAC/C,AAAgB,OAAO;CAEvB,AAAS;CAET,YACE,SACA,SAIA;AACA,QAAM,SAAS;GACb,WAAW,SAAS;GAEpB,OAAO,SAAS;GACjB,CAAC;AACF,OAAK,aAAa,SAAS;;;;;CAM7B,OAAO,KAAK,OAAY,SAAiD;EACvE,MAAM,QAAQ,YAAY,MAAM;AAChC,SAAO,IAAI,eAAe,MAAM,SAAS;GACvC,WAAW,MAAM;GACV;GACP,GAAG;GACJ,CAAC"}
@@ -0,0 +1,425 @@
1
+ const require_errors = require('./errors.cjs');
2
+
3
+ //#region src/types/rpc.ts
4
+ var Opts = class Opts {
5
+ /**
6
+ * Create a call configuration from the provided options.
7
+ *
8
+ * @param opts the call configuration
9
+ */
10
+ static from(opts) {
11
+ return new Opts(opts);
12
+ }
13
+ constructor(opts) {
14
+ this.opts = opts;
15
+ }
16
+ getOpts() {
17
+ return this.opts;
18
+ }
19
+ };
20
+ var SendOpts = class SendOpts {
21
+ static from(opts) {
22
+ return new SendOpts(opts);
23
+ }
24
+ getOpts() {
25
+ return this.opts;
26
+ }
27
+ constructor(opts) {
28
+ this.opts = opts;
29
+ }
30
+ };
31
+ let rpc;
32
+ (function(_rpc) {
33
+ _rpc.opts = (opts) => Opts.from(opts);
34
+ _rpc.sendOpts = (opts) => SendOpts.from(opts);
35
+ })(rpc || (rpc = {}));
36
+ function optsFromArgs(args) {
37
+ let parameter;
38
+ let opts;
39
+ switch (args.length) {
40
+ case 0: break;
41
+ case 1:
42
+ if (args[0] instanceof Opts) opts = args[0].getOpts();
43
+ else if (args[0] instanceof SendOpts) opts = args[0].getOpts();
44
+ else parameter = args[0];
45
+ break;
46
+ case 2:
47
+ parameter = args[0];
48
+ if (args[1] instanceof Opts) opts = args[1].getOpts();
49
+ else if (args[1] instanceof SendOpts) opts = args[1].getOpts();
50
+ else throw new TypeError("The second argument must be either Opts or SendOpts");
51
+ break;
52
+ default: throw new TypeError("unexpected number of arguments");
53
+ }
54
+ return {
55
+ parameter,
56
+ opts
57
+ };
58
+ }
59
+ const makeRpcCallProxy = (genericCall, defaultSerde, service$1, key) => {
60
+ return new Proxy({}, { get: (_target, prop) => {
61
+ const method = prop;
62
+ return (...args) => {
63
+ const { parameter, opts } = optsFromArgs(args);
64
+ const requestSerde = opts?.input ?? defaultSerde;
65
+ const responseSerde = opts?.output ?? defaultSerde;
66
+ return genericCall({
67
+ service: service$1,
68
+ method,
69
+ parameter,
70
+ key,
71
+ headers: opts?.headers,
72
+ inputSerde: requestSerde,
73
+ outputSerde: responseSerde,
74
+ idempotencyKey: opts?.idempotencyKey
75
+ });
76
+ };
77
+ } });
78
+ };
79
+ const makeRpcSendProxy = (genericSend, defaultSerde, service$1, key, legacyDelay) => {
80
+ return new Proxy({}, { get: (_target, prop) => {
81
+ const method = prop;
82
+ return (...args) => {
83
+ const { parameter, opts } = optsFromArgs(args);
84
+ const requestSerde = opts?.input ?? defaultSerde;
85
+ const delay = legacyDelay ?? opts?.delay;
86
+ return genericSend({
87
+ service: service$1,
88
+ method,
89
+ parameter,
90
+ key,
91
+ headers: opts?.headers,
92
+ delay,
93
+ inputSerde: requestSerde,
94
+ idempotencyKey: opts?.idempotencyKey
95
+ });
96
+ };
97
+ } });
98
+ };
99
+ let HandlerKind = /* @__PURE__ */ function(HandlerKind$1) {
100
+ HandlerKind$1[HandlerKind$1["SERVICE"] = 0] = "SERVICE";
101
+ HandlerKind$1[HandlerKind$1["EXCLUSIVE"] = 1] = "EXCLUSIVE";
102
+ HandlerKind$1[HandlerKind$1["SHARED"] = 2] = "SHARED";
103
+ HandlerKind$1[HandlerKind$1["WORKFLOW"] = 3] = "WORKFLOW";
104
+ return HandlerKind$1;
105
+ }({});
106
+ const HANDLER_SYMBOL = Symbol("Handler");
107
+ var HandlerWrapper = class HandlerWrapper {
108
+ static from(kind, handler, opts) {
109
+ const handlerCopy = function(...args) {
110
+ return handler.apply(this, args);
111
+ };
112
+ return new HandlerWrapper(kind, handlerCopy, opts?.input, opts?.output, opts?.accept, opts?.description, opts?.metadata, opts?.idempotencyRetention, opts?.journalRetention, opts?.inactivityTimeout, opts?.abortTimeout, opts?.ingressPrivate, opts !== void 0 && "enableLazyState" in opts ? opts?.enableLazyState : void 0, opts?.retryPolicy);
113
+ }
114
+ static fromHandler(handler) {
115
+ return handler[HANDLER_SYMBOL];
116
+ }
117
+ constructor(kind, handler, inputSerde, outputSerde, accept, description, metadata, idempotencyRetention, journalRetention, inactivityTimeout, abortTimeout, ingressPrivate, enableLazyState, retryPolicy, asTerminalError) {
118
+ this.kind = kind;
119
+ this.handler = handler;
120
+ this.inputSerde = inputSerde;
121
+ this.outputSerde = outputSerde;
122
+ this.accept = accept;
123
+ this.description = description;
124
+ this.metadata = metadata;
125
+ this.idempotencyRetention = idempotencyRetention;
126
+ this.journalRetention = journalRetention;
127
+ this.inactivityTimeout = inactivityTimeout;
128
+ this.abortTimeout = abortTimeout;
129
+ this.ingressPrivate = ingressPrivate;
130
+ this.enableLazyState = enableLazyState;
131
+ this.retryPolicy = retryPolicy;
132
+ this.asTerminalError = asTerminalError;
133
+ }
134
+ bindInstance(t) {
135
+ this.handler = this.handler.bind(t);
136
+ }
137
+ async invoke(context, input) {
138
+ let req;
139
+ try {
140
+ req = (this.inputSerde ?? context.defaultSerde).deserialize(input);
141
+ } catch (e) {
142
+ throw new require_errors.TerminalError(`Failed to deserialize input: ${require_errors.ensureError(e).message}`, { errorCode: 400 });
143
+ }
144
+ const res = await this.handler(context, req);
145
+ return (this.outputSerde ?? context.defaultSerde).serialize(res);
146
+ }
147
+ /**
148
+ * Instead of a HandlerWrapper with a handler property,
149
+ * return the original handler with a HandlerWrapper property.
150
+ * This is needed to keep the appearance of regular functions
151
+ * bound to an object, so that for example, `this.foo(ctx, arg)` would
152
+ * work.
153
+ */
154
+ transpose() {
155
+ const handler = this.handler;
156
+ if (HandlerWrapper.fromHandler(handler) !== void 0) return handler;
157
+ Object.defineProperty(handler, HANDLER_SYMBOL, { value: this });
158
+ return handler;
159
+ }
160
+ };
161
+ let handlers;
162
+ (function(_handlers) {
163
+ function handler(opts, fn) {
164
+ return HandlerWrapper.from(HandlerKind.SERVICE, fn, opts).transpose();
165
+ }
166
+ _handlers.handler = handler;
167
+ let workflow$1;
168
+ (function(_workflow) {
169
+ function workflow$2(optsOrFn, fn) {
170
+ if (typeof optsOrFn === "function") return HandlerWrapper.from(HandlerKind.WORKFLOW, optsOrFn).transpose();
171
+ const opts = optsOrFn;
172
+ if (typeof fn !== "function") throw new TypeError("The second argument must be a function");
173
+ return HandlerWrapper.from(HandlerKind.WORKFLOW, fn, opts).transpose();
174
+ }
175
+ _workflow.workflow = workflow$2;
176
+ function shared(optsOrFn, fn) {
177
+ if (typeof optsOrFn === "function") return HandlerWrapper.from(HandlerKind.SHARED, optsOrFn).transpose();
178
+ const opts = optsOrFn;
179
+ if (typeof fn !== "function") throw new TypeError("The second argument must be a function");
180
+ return HandlerWrapper.from(HandlerKind.SHARED, fn, opts).transpose();
181
+ }
182
+ _workflow.shared = shared;
183
+ })(workflow$1 || (workflow$1 = _handlers.workflow || (_handlers.workflow = {})));
184
+ let object$1;
185
+ (function(_object) {
186
+ function exclusive(optsOrFn, fn) {
187
+ if (typeof optsOrFn === "function") return HandlerWrapper.from(HandlerKind.EXCLUSIVE, optsOrFn).transpose();
188
+ const opts = optsOrFn;
189
+ if (typeof fn !== "function") throw new TypeError("The second argument must be a function");
190
+ return HandlerWrapper.from(HandlerKind.EXCLUSIVE, fn, opts).transpose();
191
+ }
192
+ _object.exclusive = exclusive;
193
+ function shared(optsOrFn, fn) {
194
+ if (typeof optsOrFn === "function") return HandlerWrapper.from(HandlerKind.SHARED, optsOrFn).transpose();
195
+ const opts = optsOrFn;
196
+ if (typeof fn !== "function") throw new TypeError("The second argument must be a function");
197
+ return HandlerWrapper.from(HandlerKind.SHARED, fn, opts).transpose();
198
+ }
199
+ _object.shared = shared;
200
+ })(object$1 || (object$1 = _handlers.object || (_handlers.object = {})));
201
+ })(handlers || (handlers = {}));
202
+ /**
203
+ * Define a Restate service.
204
+ *
205
+ * @example Here is an example of how to define a service:
206
+ *
207
+ * ```ts
208
+ * const greeter = service({
209
+ * name: "greeter",
210
+ * handlers: {
211
+ * greet: async (ctx: Context, name: string) => {
212
+ * return `Hello ${name}`;
213
+ * }
214
+ * }
215
+ * });
216
+ * ```
217
+ *
218
+ * To use the service, you can bind it to an endpoint:
219
+ * ```
220
+ * ...
221
+ * endpoint.bind(greeter)
222
+ * ```
223
+ * @example To use a service, you can export its type to be used in a client:
224
+ * ```
225
+ * export type Greeter = typeof greeter;
226
+ * ...
227
+ * ...
228
+ * import type { Greeter } from "./greeter";
229
+ * const client = ctx.serviceClient<Greeter>({ name : "greeter"});
230
+ * client.greet("World").then(console.log);
231
+ * ```
232
+ *
233
+ * @example Alternatively to avoid repeating the service name, you can:
234
+ * ```
235
+ * import type {Greeter} from "./greeter";
236
+ * const Greeter: Greeter = { name : "greeter"};
237
+ *
238
+ * // now you can reference the service like this:
239
+ * const client = ctx.serviceClient(Greeter);
240
+ * ```
241
+ *
242
+ * @param name the service name
243
+ * @param handlers the handlers for the service
244
+ * @param description an optional description for the service
245
+ * @param metadata an optional metadata for the service
246
+ * @type P the name of the service
247
+ * @type M the handlers for the service
248
+ */
249
+ const service = (service$1) => {
250
+ if (!service$1.handlers) throw new Error("service must be defined");
251
+ const handlers$1 = Object.entries(service$1.handlers).map(([name, handler]) => {
252
+ if (handler instanceof Function) {
253
+ if (HandlerWrapper.fromHandler(handler) !== void 0) return [name, handler];
254
+ return [name, HandlerWrapper.from(HandlerKind.SERVICE, handler).transpose()];
255
+ }
256
+ throw new TypeError(`Unexpected handler type ${name}`);
257
+ });
258
+ return {
259
+ name: service$1.name,
260
+ service: Object.fromEntries(handlers$1),
261
+ metadata: service$1.metadata,
262
+ description: service$1.description,
263
+ options: service$1.options
264
+ };
265
+ };
266
+ /**
267
+ * Define a Restate virtual object.
268
+ *
269
+ * @example Here is an example of how to define a virtual object:
270
+ * ```ts
271
+ * const counter = object({
272
+ * name: "counter",
273
+ * handlers: {
274
+ * add: async (ctx: ObjectContext, amount: number) => {},
275
+ * get: async (ctx: ObjectContext) => {}
276
+ * }
277
+ * })
278
+ * ```
279
+ *
280
+ * @example To use the object, you can bind it to an endpoint:
281
+ * ```ts
282
+ * ...
283
+ * endpoint.bind(counter)
284
+ * ```
285
+ *
286
+ * @see to interact with the object, you can use the object client:
287
+ * ```ts
288
+ * ...
289
+ * const client = ctx.objectClient<typeof counter>({ name: "counter"});
290
+ * const res = await client.add(1)
291
+ * ```
292
+ *
293
+ * ### Shared handlers
294
+ *
295
+ * Shared handlers are used to allow concurrent read-only access to the object.
296
+ * This is useful when you want to allow multiple clients to read the object's state at the same time.
297
+ * To define a shared handler, you can use the `shared` decorator as shown below:
298
+ *
299
+ * ```ts
300
+ * const counter = object({
301
+ * name: "counter",
302
+ * handlers: {
303
+ *
304
+ * add: async (ctx: ObjectContext, amount: number) => { .. },
305
+ *
306
+ * get: handlers.object.shared(async (ctx: ObjectSharedContext) => {
307
+ * return ctx.get<number>("count");
308
+ * })
309
+ * }
310
+ * });
311
+ * ```
312
+ *
313
+ * @param name the name of the object
314
+ * @param handlers the handlers for the object
315
+ * @param description an optional description for the object
316
+ * @param metadata an optional metadata for the object
317
+ * @type P the name of the object
318
+ * @type M the handlers for the object
319
+ */
320
+ const object = (object$1) => {
321
+ if (!object$1.handlers) throw new Error("object options must be defined");
322
+ const handlers$1 = Object.entries(object$1.handlers).map(([name, handler]) => {
323
+ if (handler instanceof Function) {
324
+ if (HandlerWrapper.fromHandler(handler) !== void 0) return [name, handler];
325
+ return [name, HandlerWrapper.from(HandlerKind.EXCLUSIVE, handler).transpose()];
326
+ }
327
+ throw new TypeError(`Unexpected handler type ${name}`);
328
+ });
329
+ return {
330
+ name: object$1.name,
331
+ object: Object.fromEntries(handlers$1),
332
+ metadata: object$1.metadata,
333
+ description: object$1.description,
334
+ options: object$1.options
335
+ };
336
+ };
337
+ /**
338
+ * Define a Restate workflow.
339
+ *
340
+ *
341
+ * @example Here is an example of how to define a workflow:
342
+ * ```ts
343
+ * const mywf = workflow({
344
+ * name: "mywf",
345
+ * handlers: {
346
+ * run: async (ctx: WorkflowContext, argument: any) => {
347
+ * return "Hello World";
348
+ * }
349
+ * }
350
+ * });
351
+ * ```
352
+ *
353
+ * ### Note:
354
+ * * That a workflow must contain exactly one handler named 'run', and this handler must accept as a first argument a WorkflowContext.
355
+ * * The workflow handlers other than 'run' must accept as a first argument a WorkflowSharedContext.
356
+ * * The workflow handlers can not be named 'workflowSubmit', 'workflowAttach', 'workflowOutput' - as these are reserved keywords.
357
+ *
358
+ * @example To use the workflow, you can bind it to an endpoint:
359
+ * ```ts
360
+ * endpoint.bind(mywf)
361
+ * ```
362
+ *
363
+ * @example To interact with the workflow, you can use the workflow client:
364
+ * ```ts
365
+ * const client = ctx.workflowClient<typeof mywf>({ name: "mywf"});
366
+ * const res = await client.run("Hello");
367
+ * ```
368
+ *
369
+ * To use the workflow client from any other environment (like a browser), please refer to the documentation.
370
+ * https://docs.restate.dev
371
+ *
372
+ *
373
+ *
374
+ * @param name the workflow name
375
+ * @param handlers the handlers for the workflow.
376
+ */
377
+ const workflow = (workflow$1) => {
378
+ if (!workflow$1.handlers) throw new Error("workflow must contain handlers");
379
+ const runHandler = workflow$1.handlers["run"];
380
+ let runWrapper;
381
+ if (runHandler instanceof HandlerWrapper) runWrapper = runHandler;
382
+ else if (runHandler instanceof Function) runWrapper = HandlerWrapper.fromHandler(runHandler) ?? HandlerWrapper.from(HandlerKind.WORKFLOW, runHandler);
383
+ else throw new TypeError(`Missing main workflow handler, named 'run'`);
384
+ if (runWrapper.kind !== HandlerKind.WORKFLOW) throw new TypeError(`Workflow's main handler handler run, must be of type workflow'`);
385
+ const handlers$1 = [["run", runWrapper.transpose()]];
386
+ for (const [name, handler] of Object.entries(workflow$1.handlers)) {
387
+ if (name === "run") continue;
388
+ let wrapper;
389
+ if (handler instanceof HandlerWrapper) wrapper = handler;
390
+ else if (handler instanceof Function) wrapper = HandlerWrapper.fromHandler(handler) ?? HandlerWrapper.from(HandlerKind.SHARED, handler);
391
+ else throw new TypeError(`Unexpected handler type ${name}`);
392
+ if (wrapper.kind === HandlerKind.WORKFLOW) throw new TypeError(`A workflow must contain exactly one handler annotated as workflow, named 'run'. Please use a shared handler for any additional handlers`);
393
+ handlers$1.push([name, wrapper.transpose()]);
394
+ }
395
+ return {
396
+ name: workflow$1.name,
397
+ workflow: Object.fromEntries(handlers$1),
398
+ metadata: workflow$1.metadata,
399
+ description: workflow$1.description,
400
+ options: workflow$1.options
401
+ };
402
+ };
403
+
404
+ //#endregion
405
+ exports.HandlerKind = HandlerKind;
406
+ exports.HandlerWrapper = HandlerWrapper;
407
+ exports.Opts = Opts;
408
+ exports.SendOpts = SendOpts;
409
+ Object.defineProperty(exports, 'handlers', {
410
+ enumerable: true,
411
+ get: function () {
412
+ return handlers;
413
+ }
414
+ });
415
+ exports.makeRpcCallProxy = makeRpcCallProxy;
416
+ exports.makeRpcSendProxy = makeRpcSendProxy;
417
+ exports.object = object;
418
+ Object.defineProperty(exports, 'rpc', {
419
+ enumerable: true,
420
+ get: function () {
421
+ return rpc;
422
+ }
423
+ });
424
+ exports.service = service;
425
+ exports.workflow = workflow;