@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,234 @@
1
+ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
+ const require_errors = require('./types/errors.cjs');
3
+ const require_completable_promise = require('./utils/completable_promise.cjs');
4
+ let node_timers_promises = require("node:timers/promises");
5
+ node_timers_promises = require_rolldown_runtime.__toESM(node_timers_promises);
6
+
7
+ //#region src/promises.ts
8
+ function pendingPromise() {
9
+ return new Promise(() => {});
10
+ }
11
+ var PromiseState = /* @__PURE__ */ function(PromiseState$1) {
12
+ PromiseState$1[PromiseState$1["COMPLETED"] = 0] = "COMPLETED";
13
+ PromiseState$1[PromiseState$1["NOT_COMPLETED"] = 1] = "NOT_COMPLETED";
14
+ return PromiseState$1;
15
+ }(PromiseState || {});
16
+ const RESTATE_CTX_SYMBOL = Symbol("restateContext");
17
+ function extractContext(n) {
18
+ return n[RESTATE_CTX_SYMBOL];
19
+ }
20
+ var AbstractRestatePromise = class {
21
+ [RESTATE_CTX_SYMBOL];
22
+ pollingPromise;
23
+ cancelPromise = new require_completable_promise.CompletablePromise();
24
+ constructor(ctx) {
25
+ this[RESTATE_CTX_SYMBOL] = ctx;
26
+ }
27
+ then(onfulfilled, onrejected) {
28
+ this.pollingPromise = this.pollingPromise || this[RESTATE_CTX_SYMBOL].promisesExecutor.doProgress(this).catch(() => {});
29
+ return this.publicPromiseOrCancelPromise().then(onfulfilled, onrejected);
30
+ }
31
+ catch(onrejected) {
32
+ this.pollingPromise = this.pollingPromise || this[RESTATE_CTX_SYMBOL].promisesExecutor.doProgress(this).catch(() => {});
33
+ return this.publicPromiseOrCancelPromise().catch(onrejected);
34
+ }
35
+ finally(onfinally) {
36
+ this.pollingPromise = this.pollingPromise || this[RESTATE_CTX_SYMBOL].promisesExecutor.doProgress(this).catch(() => {});
37
+ return this.publicPromiseOrCancelPromise().finally(onfinally);
38
+ }
39
+ publicPromiseOrCancelPromise() {
40
+ return Promise.race([this.cancelPromise.promise, this.publicPromise()]);
41
+ }
42
+ orTimeout(duration) {
43
+ return new RestateCombinatorPromise(this[RESTATE_CTX_SYMBOL], ([thisPromise, sleepPromise]) => {
44
+ return new Promise((resolve, reject) => {
45
+ thisPromise.then(resolve, reject);
46
+ sleepPromise.then(() => {
47
+ reject(new require_errors.TimeoutError());
48
+ }, reject);
49
+ });
50
+ }, [this, this[RESTATE_CTX_SYMBOL].sleep(duration)]);
51
+ }
52
+ map(mapper) {
53
+ return new RestateMappedPromise(this[RESTATE_CTX_SYMBOL], this, mapper);
54
+ }
55
+ tryCancel() {
56
+ this.cancelPromise.reject(new require_errors.CancelledError());
57
+ }
58
+ };
59
+ var RestateSinglePromise = class extends AbstractRestatePromise {
60
+ state = PromiseState.NOT_COMPLETED;
61
+ completablePromise = new require_completable_promise.CompletablePromise();
62
+ constructor(ctx, handle, completer) {
63
+ super(ctx);
64
+ this.handle = handle;
65
+ this.completer = completer;
66
+ }
67
+ uncompletedLeaves() {
68
+ return this.state === PromiseState.COMPLETED ? [] : [this.handle];
69
+ }
70
+ async tryComplete() {
71
+ if (this.state === PromiseState.COMPLETED) return;
72
+ const notification = this[RESTATE_CTX_SYMBOL].coreVm.take_notification(this.handle);
73
+ if (notification === "NotReady") return;
74
+ this.state = PromiseState.COMPLETED;
75
+ await this.completer(notification, this.completablePromise);
76
+ }
77
+ publicPromise() {
78
+ return this.completablePromise.promise;
79
+ }
80
+ [Symbol.toStringTag] = "RestateSinglePromise";
81
+ };
82
+ var RestateInvocationPromise = class extends RestateSinglePromise {
83
+ constructor(ctx, handle, completer, invocationIdPromise) {
84
+ super(ctx, handle, completer);
85
+ this.invocationIdPromise = invocationIdPromise;
86
+ }
87
+ get invocationId() {
88
+ return this.invocationIdPromise;
89
+ }
90
+ };
91
+ var RestateCombinatorPromise = class extends AbstractRestatePromise {
92
+ state = PromiseState.NOT_COMPLETED;
93
+ combinatorPromise;
94
+ constructor(ctx, combinatorConstructor, childs) {
95
+ super(ctx);
96
+ this.childs = childs;
97
+ this.combinatorPromise = combinatorConstructor(childs.map((p) => p.publicPromise())).finally(() => {
98
+ this.state = PromiseState.COMPLETED;
99
+ });
100
+ }
101
+ uncompletedLeaves() {
102
+ return this.state === PromiseState.COMPLETED ? [] : this.childs.flatMap((p) => p.uncompletedLeaves());
103
+ }
104
+ async tryComplete() {
105
+ await Promise.allSettled(this.childs.map((c) => c.tryComplete()));
106
+ }
107
+ publicPromise() {
108
+ return this.combinatorPromise;
109
+ }
110
+ [Symbol.toStringTag] = "RestateCombinatorPromise";
111
+ };
112
+ var RestatePendingPromise = class {
113
+ [RESTATE_CTX_SYMBOL];
114
+ constructor(ctx) {
115
+ this[RESTATE_CTX_SYMBOL] = ctx;
116
+ }
117
+ then(onfulfilled, onrejected) {
118
+ return pendingPromise().then(onfulfilled, onrejected);
119
+ }
120
+ catch(onrejected) {
121
+ return pendingPromise().catch(onrejected);
122
+ }
123
+ finally(onfinally) {
124
+ return pendingPromise().finally(onfinally);
125
+ }
126
+ orTimeout() {
127
+ return this;
128
+ }
129
+ map() {
130
+ return this;
131
+ }
132
+ tryCancel() {}
133
+ async tryComplete() {}
134
+ uncompletedLeaves() {
135
+ return [];
136
+ }
137
+ publicPromise() {
138
+ return pendingPromise();
139
+ }
140
+ [Symbol.toStringTag] = "RestatePendingPromise";
141
+ };
142
+ var InvocationPendingPromise = class extends RestatePendingPromise {
143
+ constructor(ctx) {
144
+ super(ctx);
145
+ }
146
+ get invocationId() {
147
+ return pendingPromise();
148
+ }
149
+ };
150
+ var RestateMappedPromise = class extends AbstractRestatePromise {
151
+ publicPromiseMapper;
152
+ constructor(ctx, inner, mapper) {
153
+ super(ctx);
154
+ this.inner = inner;
155
+ this.publicPromiseMapper = (value, failure) => {
156
+ try {
157
+ return Promise.resolve(mapper(value, failure));
158
+ } catch (e) {
159
+ if (e instanceof require_errors.TerminalError) return Promise.reject(e);
160
+ else {
161
+ ctx.handleInvocationEndError(e);
162
+ return pendingPromise();
163
+ }
164
+ }
165
+ };
166
+ }
167
+ async tryComplete() {
168
+ await this.inner.tryComplete();
169
+ }
170
+ uncompletedLeaves() {
171
+ return this.inner.uncompletedLeaves();
172
+ }
173
+ publicPromise() {
174
+ const promiseMapper = this.publicPromiseMapper;
175
+ return this.inner.publicPromise().then((t) => promiseMapper(t, void 0), (error) => {
176
+ if (error instanceof require_errors.RestateError) return promiseMapper(void 0, error);
177
+ else throw error;
178
+ });
179
+ }
180
+ [Symbol.toStringTag] = "RestateMappedPromise";
181
+ };
182
+ /**
183
+ * Promises executor, gluing VM with I/O and Promises given to user space.
184
+ */
185
+ var PromisesExecutor = class {
186
+ constructor(coreVm, inputPump, outputPump, runClosuresTracker, errorCallback) {
187
+ this.coreVm = coreVm;
188
+ this.inputPump = inputPump;
189
+ this.outputPump = outputPump;
190
+ this.runClosuresTracker = runClosuresTracker;
191
+ this.errorCallback = errorCallback;
192
+ }
193
+ async doProgress(restatePromise) {
194
+ await this.outputPump.awaitNextProgress();
195
+ await this.doProgressInner(restatePromise);
196
+ }
197
+ async doProgressInner(restatePromise) {
198
+ try {
199
+ await restatePromise.tryComplete();
200
+ } catch (e) {
201
+ restatePromise[RESTATE_CTX_SYMBOL].handleInvocationEndError(e);
202
+ return Promise.resolve();
203
+ }
204
+ return (0, node_timers_promises.setImmediate)().then(async () => {
205
+ try {
206
+ const handles = restatePromise.uncompletedLeaves();
207
+ if (handles.length === 0) return;
208
+ const doProgressResult = this.coreVm.do_progress(new Uint32Array(handles));
209
+ if (doProgressResult === "AnyCompleted") {} else if (doProgressResult === "ReadFromInput") await this.inputPump.awaitNextProgress();
210
+ else if (doProgressResult === "WaitingPendingRun") await this.runClosuresTracker.awaitNextCompletedRun();
211
+ else if (doProgressResult === "CancelSignalReceived") {
212
+ restatePromise.tryCancel();
213
+ return;
214
+ } else {
215
+ this.runClosuresTracker.executeRun(doProgressResult.ExecuteRun);
216
+ await (0, node_timers_promises.setImmediate)();
217
+ }
218
+ await this.doProgressInner(restatePromise);
219
+ } catch (e) {
220
+ this.errorCallback(e);
221
+ }
222
+ });
223
+ }
224
+ };
225
+
226
+ //#endregion
227
+ exports.InvocationPendingPromise = InvocationPendingPromise;
228
+ exports.PromisesExecutor = PromisesExecutor;
229
+ exports.RestateCombinatorPromise = RestateCombinatorPromise;
230
+ exports.RestateInvocationPromise = RestateInvocationPromise;
231
+ exports.RestatePendingPromise = RestatePendingPromise;
232
+ exports.RestateSinglePromise = RestateSinglePromise;
233
+ exports.extractContext = extractContext;
234
+ exports.pendingPromise = pendingPromise;
@@ -0,0 +1,226 @@
1
+ import { CancelledError, RestateError, TerminalError, TimeoutError } from "./types/errors.js";
2
+ import { CompletablePromise } from "./utils/completable_promise.js";
3
+ import { setImmediate } from "node:timers/promises";
4
+
5
+ //#region src/promises.ts
6
+ function pendingPromise() {
7
+ return new Promise(() => {});
8
+ }
9
+ var PromiseState = /* @__PURE__ */ function(PromiseState$1) {
10
+ PromiseState$1[PromiseState$1["COMPLETED"] = 0] = "COMPLETED";
11
+ PromiseState$1[PromiseState$1["NOT_COMPLETED"] = 1] = "NOT_COMPLETED";
12
+ return PromiseState$1;
13
+ }(PromiseState || {});
14
+ const RESTATE_CTX_SYMBOL = Symbol("restateContext");
15
+ function extractContext(n) {
16
+ return n[RESTATE_CTX_SYMBOL];
17
+ }
18
+ var AbstractRestatePromise = class {
19
+ [RESTATE_CTX_SYMBOL];
20
+ pollingPromise;
21
+ cancelPromise = new CompletablePromise();
22
+ constructor(ctx) {
23
+ this[RESTATE_CTX_SYMBOL] = ctx;
24
+ }
25
+ then(onfulfilled, onrejected) {
26
+ this.pollingPromise = this.pollingPromise || this[RESTATE_CTX_SYMBOL].promisesExecutor.doProgress(this).catch(() => {});
27
+ return this.publicPromiseOrCancelPromise().then(onfulfilled, onrejected);
28
+ }
29
+ catch(onrejected) {
30
+ this.pollingPromise = this.pollingPromise || this[RESTATE_CTX_SYMBOL].promisesExecutor.doProgress(this).catch(() => {});
31
+ return this.publicPromiseOrCancelPromise().catch(onrejected);
32
+ }
33
+ finally(onfinally) {
34
+ this.pollingPromise = this.pollingPromise || this[RESTATE_CTX_SYMBOL].promisesExecutor.doProgress(this).catch(() => {});
35
+ return this.publicPromiseOrCancelPromise().finally(onfinally);
36
+ }
37
+ publicPromiseOrCancelPromise() {
38
+ return Promise.race([this.cancelPromise.promise, this.publicPromise()]);
39
+ }
40
+ orTimeout(duration) {
41
+ return new RestateCombinatorPromise(this[RESTATE_CTX_SYMBOL], ([thisPromise, sleepPromise]) => {
42
+ return new Promise((resolve, reject) => {
43
+ thisPromise.then(resolve, reject);
44
+ sleepPromise.then(() => {
45
+ reject(new TimeoutError());
46
+ }, reject);
47
+ });
48
+ }, [this, this[RESTATE_CTX_SYMBOL].sleep(duration)]);
49
+ }
50
+ map(mapper) {
51
+ return new RestateMappedPromise(this[RESTATE_CTX_SYMBOL], this, mapper);
52
+ }
53
+ tryCancel() {
54
+ this.cancelPromise.reject(new CancelledError());
55
+ }
56
+ };
57
+ var RestateSinglePromise = class extends AbstractRestatePromise {
58
+ state = PromiseState.NOT_COMPLETED;
59
+ completablePromise = new CompletablePromise();
60
+ constructor(ctx, handle, completer) {
61
+ super(ctx);
62
+ this.handle = handle;
63
+ this.completer = completer;
64
+ }
65
+ uncompletedLeaves() {
66
+ return this.state === PromiseState.COMPLETED ? [] : [this.handle];
67
+ }
68
+ async tryComplete() {
69
+ if (this.state === PromiseState.COMPLETED) return;
70
+ const notification = this[RESTATE_CTX_SYMBOL].coreVm.take_notification(this.handle);
71
+ if (notification === "NotReady") return;
72
+ this.state = PromiseState.COMPLETED;
73
+ await this.completer(notification, this.completablePromise);
74
+ }
75
+ publicPromise() {
76
+ return this.completablePromise.promise;
77
+ }
78
+ [Symbol.toStringTag] = "RestateSinglePromise";
79
+ };
80
+ var RestateInvocationPromise = class extends RestateSinglePromise {
81
+ constructor(ctx, handle, completer, invocationIdPromise) {
82
+ super(ctx, handle, completer);
83
+ this.invocationIdPromise = invocationIdPromise;
84
+ }
85
+ get invocationId() {
86
+ return this.invocationIdPromise;
87
+ }
88
+ };
89
+ var RestateCombinatorPromise = class extends AbstractRestatePromise {
90
+ state = PromiseState.NOT_COMPLETED;
91
+ combinatorPromise;
92
+ constructor(ctx, combinatorConstructor, childs) {
93
+ super(ctx);
94
+ this.childs = childs;
95
+ this.combinatorPromise = combinatorConstructor(childs.map((p) => p.publicPromise())).finally(() => {
96
+ this.state = PromiseState.COMPLETED;
97
+ });
98
+ }
99
+ uncompletedLeaves() {
100
+ return this.state === PromiseState.COMPLETED ? [] : this.childs.flatMap((p) => p.uncompletedLeaves());
101
+ }
102
+ async tryComplete() {
103
+ await Promise.allSettled(this.childs.map((c) => c.tryComplete()));
104
+ }
105
+ publicPromise() {
106
+ return this.combinatorPromise;
107
+ }
108
+ [Symbol.toStringTag] = "RestateCombinatorPromise";
109
+ };
110
+ var RestatePendingPromise = class {
111
+ [RESTATE_CTX_SYMBOL];
112
+ constructor(ctx) {
113
+ this[RESTATE_CTX_SYMBOL] = ctx;
114
+ }
115
+ then(onfulfilled, onrejected) {
116
+ return pendingPromise().then(onfulfilled, onrejected);
117
+ }
118
+ catch(onrejected) {
119
+ return pendingPromise().catch(onrejected);
120
+ }
121
+ finally(onfinally) {
122
+ return pendingPromise().finally(onfinally);
123
+ }
124
+ orTimeout() {
125
+ return this;
126
+ }
127
+ map() {
128
+ return this;
129
+ }
130
+ tryCancel() {}
131
+ async tryComplete() {}
132
+ uncompletedLeaves() {
133
+ return [];
134
+ }
135
+ publicPromise() {
136
+ return pendingPromise();
137
+ }
138
+ [Symbol.toStringTag] = "RestatePendingPromise";
139
+ };
140
+ var InvocationPendingPromise = class extends RestatePendingPromise {
141
+ constructor(ctx) {
142
+ super(ctx);
143
+ }
144
+ get invocationId() {
145
+ return pendingPromise();
146
+ }
147
+ };
148
+ var RestateMappedPromise = class extends AbstractRestatePromise {
149
+ publicPromiseMapper;
150
+ constructor(ctx, inner, mapper) {
151
+ super(ctx);
152
+ this.inner = inner;
153
+ this.publicPromiseMapper = (value, failure) => {
154
+ try {
155
+ return Promise.resolve(mapper(value, failure));
156
+ } catch (e) {
157
+ if (e instanceof TerminalError) return Promise.reject(e);
158
+ else {
159
+ ctx.handleInvocationEndError(e);
160
+ return pendingPromise();
161
+ }
162
+ }
163
+ };
164
+ }
165
+ async tryComplete() {
166
+ await this.inner.tryComplete();
167
+ }
168
+ uncompletedLeaves() {
169
+ return this.inner.uncompletedLeaves();
170
+ }
171
+ publicPromise() {
172
+ const promiseMapper = this.publicPromiseMapper;
173
+ return this.inner.publicPromise().then((t) => promiseMapper(t, void 0), (error) => {
174
+ if (error instanceof RestateError) return promiseMapper(void 0, error);
175
+ else throw error;
176
+ });
177
+ }
178
+ [Symbol.toStringTag] = "RestateMappedPromise";
179
+ };
180
+ /**
181
+ * Promises executor, gluing VM with I/O and Promises given to user space.
182
+ */
183
+ var PromisesExecutor = class {
184
+ constructor(coreVm, inputPump, outputPump, runClosuresTracker, errorCallback) {
185
+ this.coreVm = coreVm;
186
+ this.inputPump = inputPump;
187
+ this.outputPump = outputPump;
188
+ this.runClosuresTracker = runClosuresTracker;
189
+ this.errorCallback = errorCallback;
190
+ }
191
+ async doProgress(restatePromise) {
192
+ await this.outputPump.awaitNextProgress();
193
+ await this.doProgressInner(restatePromise);
194
+ }
195
+ async doProgressInner(restatePromise) {
196
+ try {
197
+ await restatePromise.tryComplete();
198
+ } catch (e) {
199
+ restatePromise[RESTATE_CTX_SYMBOL].handleInvocationEndError(e);
200
+ return Promise.resolve();
201
+ }
202
+ return setImmediate().then(async () => {
203
+ try {
204
+ const handles = restatePromise.uncompletedLeaves();
205
+ if (handles.length === 0) return;
206
+ const doProgressResult = this.coreVm.do_progress(new Uint32Array(handles));
207
+ if (doProgressResult === "AnyCompleted") {} else if (doProgressResult === "ReadFromInput") await this.inputPump.awaitNextProgress();
208
+ else if (doProgressResult === "WaitingPendingRun") await this.runClosuresTracker.awaitNextCompletedRun();
209
+ else if (doProgressResult === "CancelSignalReceived") {
210
+ restatePromise.tryCancel();
211
+ return;
212
+ } else {
213
+ this.runClosuresTracker.executeRun(doProgressResult.ExecuteRun);
214
+ await setImmediate();
215
+ }
216
+ await this.doProgressInner(restatePromise);
217
+ } catch (e) {
218
+ this.errorCallback(e);
219
+ }
220
+ });
221
+ }
222
+ };
223
+
224
+ //#endregion
225
+ export { InvocationPendingPromise, PromisesExecutor, RestateCombinatorPromise, RestateInvocationPromise, RestatePendingPromise, RestateSinglePromise, extractContext, pendingPromise };
226
+ //# sourceMappingURL=promises.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promises.js","names":["handle: number","completer: (\n value: AsyncResultValue,\n prom: CompletablePromise<T>\n ) => Promise<void>","invocationIdPromise: Promise<InvocationId>","childs: Array<InternalRestatePromise<any>>","inner: InternalRestatePromise<T>","coreVm: vm.WasmVM","inputPump: InputPump","outputPump: OutputPump","runClosuresTracker: RunClosuresTracker","errorCallback: (e: any) => void"],"sources":["../src/promises.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2025 - 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 {\n RestatePromise,\n InvocationId,\n InvocationPromise,\n} from \"./context.js\";\nimport type * as vm from \"./endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js\";\nimport {\n CancelledError,\n RestateError,\n TerminalError,\n TimeoutError,\n} from \"./types/errors.js\";\nimport { CompletablePromise } from \"./utils/completable_promise.js\";\nimport type { ContextImpl, RunClosuresTracker } from \"./context_impl.js\";\nimport { setImmediate } from \"node:timers/promises\";\nimport type { InputPump, OutputPump } from \"./io.js\";\nimport type { Duration } from \"@restatedev/restate-sdk-core\";\n\n// A promise that is never completed\nexport function pendingPromise<T>(): Promise<T> {\n return new Promise<T>(() => {});\n}\n\n// ------ Restate promises ------\n// These promises are \"proxy promises\" that will be handed over to the user,\n// and moved forward by the PromiseExecutor below when the user awaits on them.\n\nenum PromiseState {\n COMPLETED,\n NOT_COMPLETED,\n}\n\nexport const RESTATE_CTX_SYMBOL = Symbol(\"restateContext\");\n\nexport interface InternalRestatePromise<T> extends RestatePromise<T> {\n [RESTATE_CTX_SYMBOL]: ContextImpl;\n\n tryCancel(): void;\n tryComplete(): Promise<void>;\n uncompletedLeaves(): Array<number>;\n publicPromise(): Promise<T>;\n}\n\nexport type AsyncResultValue =\n | \"Empty\"\n | { Success: Uint8Array }\n | { Failure: vm.WasmFailure }\n | { StateKeys: string[] }\n | { InvocationId: string };\n\nexport function extractContext(n: any): ContextImpl | undefined {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return n[RESTATE_CTX_SYMBOL] as ContextImpl | undefined;\n}\n\nabstract class AbstractRestatePromise<T> implements InternalRestatePromise<T> {\n [RESTATE_CTX_SYMBOL]: ContextImpl;\n private pollingPromise?: Promise<any>;\n private cancelPromise: CompletablePromise<any> = new CompletablePromise();\n\n protected constructor(ctx: ContextImpl) {\n this[RESTATE_CTX_SYMBOL] = ctx;\n }\n\n // --- Promise methods\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n ): Promise<TResult1 | TResult2> {\n this.pollingPromise =\n this.pollingPromise ||\n this[RESTATE_CTX_SYMBOL].promisesExecutor\n .doProgress(this)\n .catch(() => {});\n return this.publicPromiseOrCancelPromise().then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n ): Promise<T | TResult> {\n this.pollingPromise =\n this.pollingPromise ||\n this[RESTATE_CTX_SYMBOL].promisesExecutor\n .doProgress(this)\n .catch(() => {});\n return this.publicPromiseOrCancelPromise().catch(onrejected);\n }\n\n finally(onfinally?: (() => void) | null): Promise<T> {\n this.pollingPromise =\n this.pollingPromise ||\n this[RESTATE_CTX_SYMBOL].promisesExecutor\n .doProgress(this)\n .catch(() => {});\n return this.publicPromiseOrCancelPromise().finally(onfinally);\n }\n\n private publicPromiseOrCancelPromise(): Promise<T> {\n return Promise.race([\n this.cancelPromise.promise as Promise<T>,\n this.publicPromise(),\n ]);\n }\n\n // --- RestatePromise methods\n\n orTimeout(duration: number | Duration): RestatePromise<T> {\n return new RestateCombinatorPromise(\n this[RESTATE_CTX_SYMBOL],\n ([thisPromise, sleepPromise]) => {\n return new Promise((resolve, reject) => {\n thisPromise!.then(resolve, reject);\n sleepPromise!.then(() => {\n reject(new TimeoutError());\n }, reject);\n });\n },\n [\n this,\n this[RESTATE_CTX_SYMBOL].sleep(duration) as InternalRestatePromise<any>,\n ]\n ) as RestatePromise<T>;\n }\n\n map<U>(mapper: (value?: T, failure?: TerminalError) => U): RestatePromise<U> {\n return new RestateMappedPromise(this[RESTATE_CTX_SYMBOL], this, mapper);\n }\n\n tryCancel() {\n this.cancelPromise.reject(new CancelledError());\n }\n\n abstract tryComplete(): Promise<void>;\n\n abstract uncompletedLeaves(): Array<number>;\n\n abstract publicPromise(): Promise<T>;\n\n abstract [Symbol.toStringTag]: string;\n}\n\nexport class RestateSinglePromise<T> extends AbstractRestatePromise<T> {\n private state: PromiseState = PromiseState.NOT_COMPLETED;\n private completablePromise: CompletablePromise<T> = new CompletablePromise();\n\n constructor(\n ctx: ContextImpl,\n readonly handle: number,\n private readonly completer: (\n value: AsyncResultValue,\n prom: CompletablePromise<T>\n ) => Promise<void>\n ) {\n super(ctx);\n }\n\n uncompletedLeaves(): number[] {\n return this.state === PromiseState.COMPLETED ? [] : [this.handle];\n }\n\n async tryComplete(): Promise<void> {\n if (this.state === PromiseState.COMPLETED) {\n return;\n }\n const notification = this[RESTATE_CTX_SYMBOL].coreVm.take_notification(\n this.handle\n );\n if (notification === \"NotReady\") {\n return;\n }\n this.state = PromiseState.COMPLETED;\n await this.completer(notification, this.completablePromise);\n }\n\n publicPromise(): Promise<T> {\n return this.completablePromise.promise;\n }\n\n readonly [Symbol.toStringTag] = \"RestateSinglePromise\";\n}\n\nexport class RestateInvocationPromise<T>\n extends RestateSinglePromise<T>\n implements InvocationPromise<T>\n{\n constructor(\n ctx: ContextImpl,\n handle: number,\n completer: (\n value: AsyncResultValue,\n prom: CompletablePromise<T>\n ) => Promise<void>,\n private readonly invocationIdPromise: Promise<InvocationId>\n ) {\n super(ctx, handle, completer);\n }\n\n get invocationId(): Promise<InvocationId> {\n return this.invocationIdPromise;\n }\n}\n\nexport class RestateCombinatorPromise extends AbstractRestatePromise<any> {\n private state: PromiseState = PromiseState.NOT_COMPLETED;\n private readonly combinatorPromise: Promise<any>;\n\n constructor(\n ctx: ContextImpl,\n combinatorConstructor: (promises: Promise<any>[]) => Promise<any>,\n readonly childs: Array<InternalRestatePromise<any>>\n ) {\n super(ctx);\n this.combinatorPromise = combinatorConstructor(\n childs.map((p) => p.publicPromise())\n ).finally(() => {\n this.state = PromiseState.COMPLETED;\n });\n }\n\n uncompletedLeaves(): number[] {\n return this.state === PromiseState.COMPLETED\n ? []\n : this.childs.flatMap((p) => p.uncompletedLeaves());\n }\n\n async tryComplete(): Promise<void> {\n await Promise.allSettled(this.childs.map((c) => c.tryComplete()));\n }\n\n publicPromise(): Promise<unknown> {\n return this.combinatorPromise;\n }\n\n readonly [Symbol.toStringTag] = \"RestateCombinatorPromise\";\n}\n\nexport class RestatePendingPromise<T> implements InternalRestatePromise<T> {\n [RESTATE_CTX_SYMBOL]: ContextImpl;\n\n constructor(ctx: ContextImpl) {\n this[RESTATE_CTX_SYMBOL] = ctx;\n }\n\n // --- Promise methods\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n ): Promise<TResult1 | TResult2> {\n return pendingPromise<T>().then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n ): Promise<T | TResult> {\n return pendingPromise<T>().catch(onrejected);\n }\n\n finally(onfinally?: (() => void) | null): Promise<T> {\n return pendingPromise<T>().finally(onfinally);\n }\n\n // --- RestatePromise methods\n\n orTimeout(): RestatePromise<T> {\n return this;\n }\n\n map<U>(): RestatePromise<U> {\n return this as unknown as RestatePromise<U>;\n }\n\n tryCancel(): void {}\n async tryComplete(): Promise<void> {}\n uncompletedLeaves(): number[] {\n return [];\n }\n publicPromise(): Promise<T> {\n return pendingPromise<T>();\n }\n\n readonly [Symbol.toStringTag] = \"RestatePendingPromise\";\n}\n\nexport class InvocationPendingPromise<T>\n extends RestatePendingPromise<T>\n implements InvocationPromise<T>\n{\n constructor(ctx: ContextImpl) {\n super(ctx);\n }\n\n get invocationId(): Promise<InvocationId> {\n return pendingPromise();\n }\n}\n\nexport class RestateMappedPromise<T, U> extends AbstractRestatePromise<U> {\n private publicPromiseMapper: (\n value?: T,\n failure?: TerminalError\n ) => Promise<U>;\n\n constructor(\n ctx: ContextImpl,\n readonly inner: InternalRestatePromise<T>,\n mapper: (value?: T, failure?: TerminalError) => U\n ) {\n super(ctx);\n this.publicPromiseMapper = (value?: T, failure?: TerminalError) => {\n try {\n return Promise.resolve(mapper(value, failure));\n } catch (e) {\n if (e instanceof TerminalError) {\n return Promise.reject(e);\n } else {\n ctx.handleInvocationEndError(e);\n return pendingPromise();\n }\n }\n };\n }\n\n async tryComplete(): Promise<void> {\n await this.inner.tryComplete();\n }\n\n uncompletedLeaves(): number[] {\n return this.inner.uncompletedLeaves();\n }\n\n publicPromise(): Promise<U> {\n const promiseMapper = this.publicPromiseMapper;\n return this.inner.publicPromise().then(\n (t) => promiseMapper(t, undefined),\n (error) => {\n if (error instanceof RestateError) {\n return promiseMapper(undefined, error);\n } else {\n // Something else, just re-throw it\n throw error;\n }\n }\n );\n }\n\n readonly [Symbol.toStringTag] = \"RestateMappedPromise\";\n}\n\n/**\n * Promises executor, gluing VM with I/O and Promises given to user space.\n */\nexport class PromisesExecutor {\n constructor(\n private readonly coreVm: vm.WasmVM,\n private readonly inputPump: InputPump,\n private readonly outputPump: OutputPump,\n private readonly runClosuresTracker: RunClosuresTracker,\n private readonly errorCallback: (e: any) => void\n ) {}\n\n async doProgress(restatePromise: InternalRestatePromise<unknown>) {\n // Only the first time try process output\n await this.outputPump.awaitNextProgress();\n await this.doProgressInner(restatePromise);\n }\n\n private async doProgressInner(\n restatePromise: InternalRestatePromise<unknown>\n ) {\n // Try complete the promise\n try {\n await restatePromise.tryComplete();\n } catch (e) {\n // This can happen if either take_notification throws an exception or completer throws an exception.\n // This could either happen for a deserialization issue, or for an SDK bug, but we cover them here.\n restatePromise[RESTATE_CTX_SYMBOL].handleInvocationEndError(e);\n return Promise.resolve();\n }\n\n // tl;dr don't touch this, or you can break combineable promises,\n // slinkydeveloper won't be happy about it\n //\n // The reason for this setTimeout is that we need to enqueue the polling after\n // we eventually resolve some promises. This is especially crucial for RestateCombinatorPromise\n // as it flips the completed state using .finally() on the combinator.\n return setImmediate().then(async () => {\n try {\n // Invoke do progress on the vm\n const handles = restatePromise.uncompletedLeaves();\n if (handles.length === 0) {\n // Completed, we're good!\n return;\n }\n const doProgressResult = this.coreVm.do_progress(\n new Uint32Array(handles)\n );\n\n if (doProgressResult === \"AnyCompleted\") {\n // Next recursion will cause the promise to do some progress\n } else if (doProgressResult === \"ReadFromInput\") {\n // Read from input\n await this.inputPump.awaitNextProgress();\n } else if (doProgressResult === \"WaitingPendingRun\") {\n // Wait for any of the pending run to complete\n await this.runClosuresTracker.awaitNextCompletedRun();\n } else if (doProgressResult === \"CancelSignalReceived\") {\n restatePromise.tryCancel();\n return;\n } else {\n // We need to execute a run closure\n this.runClosuresTracker.executeRun(doProgressResult.ExecuteRun);\n // Let the run context switch, then come back to this flow.\n await setImmediate();\n }\n\n // Recursion\n await this.doProgressInner(restatePromise);\n } catch (e) {\n // Not good, this is a retryable error.\n this.errorCallback(e);\n }\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+
2
+ //#region src/types/errors.ts
3
+ const INTERNAL_ERROR_CODE = 500;
4
+ const TIMEOUT_ERROR_CODE = 408;
5
+ const CANCEL_ERROR_CODE = 409;
6
+ const UNKNOWN_ERROR_CODE = 500;
7
+ const CLOSED_ERROR_CODE = 598;
8
+ const SUSPENDED_ERROR_CODE = 599;
9
+ function ensureError(e, asTerminalError) {
10
+ if (e instanceof TerminalError) return e;
11
+ const maybeTerminalError = asTerminalError ? asTerminalError(e) : void 0;
12
+ if (maybeTerminalError) return maybeTerminalError;
13
+ if (e instanceof Error) return e;
14
+ if (typeof e === "object" && e !== null && "code" in e && "message" in e) return new RestateError(e.message, { errorCode: e.code });
15
+ let msg;
16
+ try {
17
+ msg = JSON.stringify(e);
18
+ } catch {
19
+ msg = "(no JSON representation)";
20
+ }
21
+ return /* @__PURE__ */ new Error("Non-Error value: " + msg);
22
+ }
23
+ function logError(log, e) {
24
+ if (e instanceof RestateError) {
25
+ if (e.code === SUSPENDED_ERROR_CODE) {
26
+ log.info("Invocation suspended");
27
+ return;
28
+ } else if (e.code === CLOSED_ERROR_CODE) {
29
+ 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);
30
+ return;
31
+ }
32
+ }
33
+ log.warn("Error when processing a Restate context operation.\n", e);
34
+ }
35
+ var RestateError = class extends Error {
36
+ code;
37
+ name = "RestateError";
38
+ constructor(message, options) {
39
+ super(message, { cause: options?.cause });
40
+ this.code = options?.errorCode ?? INTERNAL_ERROR_CODE;
41
+ }
42
+ };
43
+ /**
44
+ * Does not lead to Restate retries.
45
+ *
46
+ * Leads to an output message with a failure defined.
47
+ */
48
+ var TerminalError = class extends RestateError {
49
+ name = "TerminalError";
50
+ constructor(message, options) {
51
+ super(message, options);
52
+ }
53
+ };
54
+ /**
55
+ * Returned by `RestatePromise.withTimeout` when the timeout is reached.
56
+ */
57
+ var TimeoutError = class extends TerminalError {
58
+ name = "TimeoutError";
59
+ constructor() {
60
+ super("Timeout occurred", { errorCode: TIMEOUT_ERROR_CODE });
61
+ }
62
+ };
63
+ /**
64
+ * Returned when the invocation was cancelled.
65
+ */
66
+ var CancelledError = class extends TerminalError {
67
+ name = "CancelledError";
68
+ constructor() {
69
+ super("Cancelled", { errorCode: CANCEL_ERROR_CODE });
70
+ }
71
+ };
72
+ /**
73
+ * Error that Restate will retry. By using this error type within a `ctx.run` closure,
74
+ * you can dynamically provide the retry delay specified in {@link RetryableErrorOptions}.
75
+ *
76
+ * You can wrap another error using {@link from}.
77
+ */
78
+ var RetryableError = class RetryableError extends RestateError {
79
+ name = "RetryableError";
80
+ retryAfter;
81
+ constructor(message, options) {
82
+ super(message, {
83
+ errorCode: options?.errorCode,
84
+ cause: options?.cause
85
+ });
86
+ this.retryAfter = options?.retryAfter;
87
+ }
88
+ /**
89
+ * Create a `RetryableError` from the given cause.
90
+ */
91
+ static from(cause, options) {
92
+ const error = ensureError(cause);
93
+ return new RetryableError(error.message, {
94
+ errorCode: error["errorCode"],
95
+ cause,
96
+ ...options
97
+ });
98
+ }
99
+ };
100
+
101
+ //#endregion
102
+ exports.CancelledError = CancelledError;
103
+ exports.INTERNAL_ERROR_CODE = INTERNAL_ERROR_CODE;
104
+ exports.RestateError = RestateError;
105
+ exports.RetryableError = RetryableError;
106
+ exports.TerminalError = TerminalError;
107
+ exports.TimeoutError = TimeoutError;
108
+ exports.UNKNOWN_ERROR_CODE = UNKNOWN_ERROR_CODE;
109
+ exports.ensureError = ensureError;
110
+ exports.logError = logError;
@@ -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.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.cts","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"}