@resonatehq/sdk 0.9.6 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/README.md +84 -12
  2. package/dist/clock.d.ts.map +1 -0
  3. package/dist/clock.js +12 -0
  4. package/dist/clock.js.map +1 -0
  5. package/dist/codec.d.ts +11 -0
  6. package/dist/codec.d.ts.map +1 -0
  7. package/dist/codec.js +115 -0
  8. package/dist/codec.js.map +1 -0
  9. package/dist/computation.d.ts +40 -0
  10. package/dist/computation.d.ts.map +1 -0
  11. package/dist/computation.js +152 -0
  12. package/dist/computation.js.map +1 -0
  13. package/dist/{src/context.d.ts → context.d.ts} +65 -40
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/{src/context.js → context.js} +131 -153
  16. package/dist/context.js.map +1 -0
  17. package/dist/core.d.ts +45 -0
  18. package/dist/core.d.ts.map +1 -0
  19. package/dist/core.js +140 -0
  20. package/dist/core.js.map +1 -0
  21. package/dist/coroutine.d.ts +37 -0
  22. package/dist/coroutine.d.ts.map +1 -0
  23. package/dist/coroutine.js +258 -0
  24. package/dist/coroutine.js.map +1 -0
  25. package/dist/{src/decorator.d.ts → decorator.d.ts} +8 -8
  26. package/dist/decorator.d.ts.map +1 -0
  27. package/dist/decorator.js +149 -0
  28. package/dist/decorator.js.map +1 -0
  29. package/dist/encryptor.d.ts +10 -0
  30. package/dist/encryptor.d.ts.map +1 -0
  31. package/dist/encryptor.js +9 -0
  32. package/dist/encryptor.js.map +1 -0
  33. package/dist/{src/exceptions.d.ts → exceptions.d.ts} +4 -1
  34. package/dist/exceptions.d.ts.map +1 -0
  35. package/dist/{src/exceptions.js → exceptions.js} +11 -11
  36. package/dist/exceptions.js.map +1 -0
  37. package/dist/{src/heartbeat.d.ts → heartbeat.d.ts} +5 -3
  38. package/dist/heartbeat.d.ts.map +1 -0
  39. package/dist/heartbeat.js +50 -0
  40. package/dist/heartbeat.js.map +1 -0
  41. package/dist/index.d.ts +21 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +15 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/logger.d.ts +33 -0
  46. package/dist/logger.d.ts.map +1 -0
  47. package/dist/logger.js +54 -0
  48. package/dist/logger.js.map +1 -0
  49. package/dist/network/http.d.ts +82 -0
  50. package/dist/network/http.d.ts.map +1 -0
  51. package/dist/network/http.js +339 -0
  52. package/dist/network/http.js.map +1 -0
  53. package/dist/network/local.d.ts +179 -0
  54. package/dist/network/local.d.ts.map +1 -0
  55. package/dist/network/local.js +1232 -0
  56. package/dist/network/local.js.map +1 -0
  57. package/dist/network/network.d.ts +16 -0
  58. package/dist/network/network.d.ts.map +1 -0
  59. package/dist/network/network.js +2 -0
  60. package/dist/network/network.js.map +1 -0
  61. package/dist/network/types.d.ts +1279 -0
  62. package/dist/network/types.d.ts.map +1 -0
  63. package/dist/network/types.js +919 -0
  64. package/dist/network/types.js.map +1 -0
  65. package/dist/{src/options.d.ts → options.d.ts} +10 -4
  66. package/dist/options.d.ts.map +1 -0
  67. package/dist/options.js +32 -0
  68. package/dist/options.js.map +1 -0
  69. package/dist/promises.d.ts +41 -0
  70. package/dist/promises.d.ts.map +1 -0
  71. package/dist/promises.js +113 -0
  72. package/dist/promises.js.map +1 -0
  73. package/dist/{src/registry.d.ts → registry.d.ts} +1 -1
  74. package/dist/registry.d.ts.map +1 -0
  75. package/dist/{src/registry.js → registry.js} +6 -13
  76. package/dist/registry.js.map +1 -0
  77. package/dist/resonate.d.ts +168 -0
  78. package/dist/resonate.d.ts.map +1 -0
  79. package/dist/resonate.js +488 -0
  80. package/dist/resonate.js.map +1 -0
  81. package/dist/retries.d.ts.map +1 -0
  82. package/dist/{src/retries.js → retries.js} +4 -11
  83. package/dist/retries.js.map +1 -0
  84. package/dist/schedules.d.ts +22 -0
  85. package/dist/schedules.d.ts.map +1 -0
  86. package/dist/schedules.js +65 -0
  87. package/dist/schedules.js.map +1 -0
  88. package/dist/trace.d.ts +79 -0
  89. package/dist/trace.d.ts.map +1 -0
  90. package/dist/trace.js +224 -0
  91. package/dist/trace.js.map +1 -0
  92. package/dist/types.d.ts +21 -0
  93. package/dist/types.d.ts.map +1 -0
  94. package/dist/types.js +2 -0
  95. package/dist/types.js.map +1 -0
  96. package/dist/{src/util.d.ts → util.d.ts} +10 -6
  97. package/dist/util.d.ts.map +1 -0
  98. package/dist/util.js +156 -0
  99. package/dist/util.js.map +1 -0
  100. package/package.json +18 -10
  101. package/dist/dev/network.d.ts +0 -34
  102. package/dist/dev/network.d.ts.map +0 -1
  103. package/dist/dev/network.js +0 -115
  104. package/dist/dev/network.js.map +0 -1
  105. package/dist/dev/server.d.ts +0 -89
  106. package/dist/dev/server.d.ts.map +0 -1
  107. package/dist/dev/server.js +0 -890
  108. package/dist/dev/server.js.map +0 -1
  109. package/dist/sim/example-1.d.ts +0 -2
  110. package/dist/sim/example-1.d.ts.map +0 -1
  111. package/dist/sim/example-1.js +0 -95
  112. package/dist/sim/example-1.js.map +0 -1
  113. package/dist/sim/example-2.d.ts +0 -2
  114. package/dist/sim/example-2.d.ts.map +0 -1
  115. package/dist/sim/example-2.js +0 -97
  116. package/dist/sim/example-2.js.map +0 -1
  117. package/dist/sim/example-3.d.ts +0 -2
  118. package/dist/sim/example-3.d.ts.map +0 -1
  119. package/dist/sim/example-3.js +0 -97
  120. package/dist/sim/example-3.js.map +0 -1
  121. package/dist/sim/main.d.ts +0 -14
  122. package/dist/sim/main.d.ts.map +0 -1
  123. package/dist/sim/main.js +0 -207
  124. package/dist/sim/main.js.map +0 -1
  125. package/dist/sim/src/server.d.ts +0 -15
  126. package/dist/sim/src/server.d.ts.map +0 -1
  127. package/dist/sim/src/server.js +0 -85
  128. package/dist/sim/src/server.js.map +0 -1
  129. package/dist/sim/src/simulator.d.ts +0 -65
  130. package/dist/sim/src/simulator.d.ts.map +0 -1
  131. package/dist/sim/src/simulator.js +0 -236
  132. package/dist/sim/src/simulator.js.map +0 -1
  133. package/dist/sim/src/worker.d.ts +0 -23
  134. package/dist/sim/src/worker.d.ts.map +0 -1
  135. package/dist/sim/src/worker.js +0 -217
  136. package/dist/sim/src/worker.js.map +0 -1
  137. package/dist/src/clock.d.ts.map +0 -1
  138. package/dist/src/clock.js +0 -17
  139. package/dist/src/clock.js.map +0 -1
  140. package/dist/src/computation.d.ts +0 -49
  141. package/dist/src/computation.d.ts.map +0 -1
  142. package/dist/src/computation.js +0 -314
  143. package/dist/src/computation.js.map +0 -1
  144. package/dist/src/context.d.ts.map +0 -1
  145. package/dist/src/context.js.map +0 -1
  146. package/dist/src/core.d.ts +0 -12
  147. package/dist/src/core.d.ts.map +0 -1
  148. package/dist/src/core.js +0 -28
  149. package/dist/src/core.js.map +0 -1
  150. package/dist/src/coroutine.d.ts +0 -42
  151. package/dist/src/coroutine.d.ts.map +0 -1
  152. package/dist/src/coroutine.js +0 -364
  153. package/dist/src/coroutine.js.map +0 -1
  154. package/dist/src/decorator.d.ts.map +0 -1
  155. package/dist/src/decorator.js +0 -220
  156. package/dist/src/decorator.js.map +0 -1
  157. package/dist/src/encoder.d.ts +0 -12
  158. package/dist/src/encoder.d.ts.map +0 -1
  159. package/dist/src/encoder.js +0 -101
  160. package/dist/src/encoder.js.map +0 -1
  161. package/dist/src/encryptor.d.ts +0 -10
  162. package/dist/src/encryptor.d.ts.map +0 -1
  163. package/dist/src/encryptor.js +0 -13
  164. package/dist/src/encryptor.js.map +0 -1
  165. package/dist/src/exceptions.d.ts.map +0 -1
  166. package/dist/src/exceptions.js.map +0 -1
  167. package/dist/src/handler.d.ts +0 -49
  168. package/dist/src/handler.d.ts.map +0 -1
  169. package/dist/src/handler.js +0 -316
  170. package/dist/src/handler.js.map +0 -1
  171. package/dist/src/heartbeat.d.ts.map +0 -1
  172. package/dist/src/heartbeat.js +0 -87
  173. package/dist/src/heartbeat.js.map +0 -1
  174. package/dist/src/index.d.ts +0 -15
  175. package/dist/src/index.d.ts.map +0 -1
  176. package/dist/src/index.js +0 -61
  177. package/dist/src/index.js.map +0 -1
  178. package/dist/src/network/network.d.ts +0 -254
  179. package/dist/src/network/network.d.ts.map +0 -1
  180. package/dist/src/network/network.js +0 -4
  181. package/dist/src/network/network.js.map +0 -1
  182. package/dist/src/network/remote.d.ts +0 -85
  183. package/dist/src/network/remote.d.ts.map +0 -1
  184. package/dist/src/network/remote.js +0 -523
  185. package/dist/src/network/remote.js.map +0 -1
  186. package/dist/src/nursery.d.ts +0 -19
  187. package/dist/src/nursery.d.ts.map +0 -1
  188. package/dist/src/nursery.js +0 -102
  189. package/dist/src/nursery.js.map +0 -1
  190. package/dist/src/options.d.ts.map +0 -1
  191. package/dist/src/options.js +0 -70
  192. package/dist/src/options.js.map +0 -1
  193. package/dist/src/processor/processor.d.ts +0 -12
  194. package/dist/src/processor/processor.d.ts.map +0 -1
  195. package/dist/src/processor/processor.js +0 -43
  196. package/dist/src/processor/processor.js.map +0 -1
  197. package/dist/src/promises.d.ts +0 -54
  198. package/dist/src/promises.d.ts.map +0 -1
  199. package/dist/src/promises.js +0 -169
  200. package/dist/src/promises.js.map +0 -1
  201. package/dist/src/registry.d.ts.map +0 -1
  202. package/dist/src/registry.js.map +0 -1
  203. package/dist/src/resonate-inner.d.ts +0 -60
  204. package/dist/src/resonate-inner.d.ts.map +0 -1
  205. package/dist/src/resonate-inner.js +0 -97
  206. package/dist/src/resonate-inner.js.map +0 -1
  207. package/dist/src/resonate.d.ts +0 -341
  208. package/dist/src/resonate.d.ts.map +0 -1
  209. package/dist/src/resonate.js +0 -591
  210. package/dist/src/resonate.js.map +0 -1
  211. package/dist/src/retries.d.ts.map +0 -1
  212. package/dist/src/retries.js.map +0 -1
  213. package/dist/src/schedules.d.ts +0 -19
  214. package/dist/src/schedules.d.ts.map +0 -1
  215. package/dist/src/schedules.js +0 -85
  216. package/dist/src/schedules.js.map +0 -1
  217. package/dist/src/tasks.d.ts +0 -9
  218. package/dist/src/tasks.d.ts.map +0 -1
  219. package/dist/src/tasks.js +0 -61
  220. package/dist/src/tasks.js.map +0 -1
  221. package/dist/src/tracer.d.ts +0 -23
  222. package/dist/src/tracer.d.ts.map +0 -1
  223. package/dist/src/tracer.js +0 -25
  224. package/dist/src/tracer.js.map +0 -1
  225. package/dist/src/types.d.ts +0 -28
  226. package/dist/src/types.d.ts.map +0 -1
  227. package/dist/src/types.js +0 -11
  228. package/dist/src/types.js.map +0 -1
  229. package/dist/src/util.d.ts.map +0 -1
  230. package/dist/src/util.js +0 -120
  231. package/dist/src/util.js.map +0 -1
  232. package/dist/tsconfig.build.tsbuildinfo +0 -1
  233. /package/dist/{src/clock.d.ts → clock.d.ts} +0 -0
  234. /package/dist/{src/retries.d.ts → retries.d.ts} +0 -0
@@ -0,0 +1,339 @@
1
+ import { createServer } from "node:http";
2
+ import { EventSource } from "eventsource";
3
+ import { ResonateTimeoutException } from "../exceptions.js";
4
+ import * as util from "../util.js";
5
+ import { isMessage, isResponse } from "./types.js";
6
+ export class HttpNetwork {
7
+ url;
8
+ timeout;
9
+ headers;
10
+ token;
11
+ adapter;
12
+ logger;
13
+ constructor({ url = undefined, timeout = undefined, headers = {}, token = undefined, logger = undefined, adapter = undefined, }) {
14
+ // Priority: programmatic config > RESONATE_URL env var > default
15
+ this.url = url ?? process.env.RESONATE_URL ?? "http://localhost:8001";
16
+ // Priority: programmatic config > RESONATE_TIMEOUT env var > default (10s)
17
+ const envTimeout = process.env.RESONATE_TIMEOUT ? Number.parseInt(process.env.RESONATE_TIMEOUT, 10) : undefined;
18
+ this.timeout = timeout ?? (envTimeout && !Number.isNaN(envTimeout) ? envTimeout : 10 * util.SEC);
19
+ this.logger = logger;
20
+ this.adapter = adapter;
21
+ // Priority: programmatic token > env var
22
+ const resolvedToken = token ?? process.env.RESONATE_TOKEN;
23
+ this.headers = { "Content-Type": "application/json", ...headers };
24
+ if (resolvedToken) {
25
+ this.headers.Authorization = `Bearer ${resolvedToken}`;
26
+ this.token = resolvedToken;
27
+ }
28
+ }
29
+ get unicast() {
30
+ util.assert(this.adapter !== undefined);
31
+ return this.adapter.unicast;
32
+ }
33
+ get anycast() {
34
+ util.assert(this.adapter !== undefined);
35
+ return this.adapter.anycast;
36
+ }
37
+ async init() {
38
+ util.assert(this.adapter !== undefined);
39
+ await this.adapter.init();
40
+ this.logger?.info({ component: "network", url: this.url, adapter_type: this.adapter.constructor.name }, "network initialized");
41
+ }
42
+ async stop() {
43
+ util.assert(this.adapter !== undefined);
44
+ await this.adapter.stop();
45
+ this.logger?.info({ component: "network" }, "network stopped");
46
+ }
47
+ recv(callback) {
48
+ this.adapter?.onReceive(callback);
49
+ }
50
+ // Valid protocol status codes — responses with these statuses are returned as-is.
51
+ // Everything else is a platform failure that throws ResonateTimeoutException.
52
+ static PROTOCOL_STATUSES = new Set([200, 300, 404, 409, 422, 501]);
53
+ send = async (req) => {
54
+ const startTime = Date.now();
55
+ this.logger?.debug({ component: "network", url: `${this.url}`, kind: req.kind, corr_id: req.head.corrId }, "request sent");
56
+ const controller = new AbortController();
57
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
58
+ if (this.token) {
59
+ req = { ...req, head: { ...req.head, auth: this.token } };
60
+ }
61
+ let httpResponse;
62
+ try {
63
+ httpResponse = await fetch(`${this.url}`, {
64
+ method: "POST",
65
+ headers: this.headers,
66
+ body: JSON.stringify(req),
67
+ signal: controller.signal,
68
+ });
69
+ }
70
+ catch (e) {
71
+ const cause = e instanceof Error ? e.message : String(e);
72
+ const errorType = cause.includes("abort") ? "http_timeout" : "connection_error";
73
+ this.logger?.warn({ component: "network", kind: req.kind, corr_id: req.head.corrId, error_type: errorType, error: cause }, "platform failure");
74
+ throw new ResonateTimeoutException(cause);
75
+ }
76
+ finally {
77
+ clearTimeout(timeoutId);
78
+ }
79
+ // Check HTTP status — non-protocol statuses are platform failures
80
+ if (!HttpNetwork.PROTOCOL_STATUSES.has(httpResponse.status)) {
81
+ const cause = `HTTP ${httpResponse.status}`;
82
+ this.logger?.warn({
83
+ component: "network",
84
+ kind: req.kind,
85
+ corr_id: req.head.corrId,
86
+ error_type: `server_error_${httpResponse.status}`,
87
+ error: cause,
88
+ }, "platform failure");
89
+ throw new ResonateTimeoutException(cause);
90
+ }
91
+ let resStr;
92
+ try {
93
+ resStr = await httpResponse.text();
94
+ }
95
+ catch (e) {
96
+ const cause = e instanceof Error ? e.message : String(e);
97
+ this.logger?.warn({
98
+ component: "network",
99
+ kind: req.kind,
100
+ corr_id: req.head.corrId,
101
+ error_type: "malformed_response",
102
+ error: cause,
103
+ }, "platform failure");
104
+ throw new ResonateTimeoutException(cause);
105
+ }
106
+ if (httpResponse.status === 404 && !httpResponse.headers.get("content-type")?.includes("application/json")) {
107
+ this.logger?.warn({
108
+ component: "network",
109
+ kind: req.kind,
110
+ corr_id: req.head.corrId,
111
+ error_type: "outdated_server",
112
+ }, "Legacy server detected. Please upgrade to the latest server: https://github.com/resonatehq/resonate");
113
+ throw new ResonateTimeoutException("legacy server detected");
114
+ }
115
+ let res;
116
+ try {
117
+ res = JSON.parse(resStr);
118
+ }
119
+ catch {
120
+ this.logger?.warn({
121
+ component: "network",
122
+ kind: req.kind,
123
+ corr_id: req.head.corrId,
124
+ error_type: "malformed_response",
125
+ error: "failed to parse response JSON",
126
+ }, "platform failure");
127
+ throw new ResonateTimeoutException("failed to parse response JSON");
128
+ }
129
+ if (!isResponse(res) || res.kind !== req.kind || res.head.corrId !== req.head.corrId) {
130
+ this.logger?.warn({
131
+ component: "network",
132
+ kind: req.kind,
133
+ corr_id: req.head.corrId,
134
+ error_type: "malformed_response",
135
+ error: "response did not match request",
136
+ }, "platform failure");
137
+ throw new ResonateTimeoutException("response did not match request");
138
+ }
139
+ const durationMs = Date.now() - startTime;
140
+ this.logger?.debug({
141
+ component: "network",
142
+ kind: res.kind,
143
+ corr_id: res.head.corrId,
144
+ status: res.head.status,
145
+ duration_ms: durationMs,
146
+ }, "protocol response");
147
+ return res;
148
+ };
149
+ }
150
+ // =============================================================================
151
+ // PollMessageSource — implements HttpAdapter
152
+ // =============================================================================
153
+ export class PollMessageSource {
154
+ unicast;
155
+ anycast;
156
+ pollUrl;
157
+ headers;
158
+ eventSource;
159
+ callbacks = [];
160
+ logger;
161
+ // Exponential backoff state
162
+ reconnectAttempt = 0;
163
+ static INITIAL_BACKOFF_MS = 1000;
164
+ static MAX_BACKOFF_MS = 30000;
165
+ constructor({ url, token = undefined, logger = undefined, }) {
166
+ this.pollUrl = url;
167
+ this.logger = logger;
168
+ // Derive unicast/anycast from the URL
169
+ // URL format: ${baseUrl}/poll/${group}/${pid}
170
+ const parsed = new URL(url);
171
+ const segments = parsed.pathname.split("/").filter(Boolean);
172
+ // segments: ["poll", group, pid]
173
+ const group = segments.length >= 2 ? decodeURIComponent(segments[1]) : "default";
174
+ const pid = segments.length >= 3 ? decodeURIComponent(segments[2]) : "";
175
+ this.unicast = `poll://uni@${group}/${pid}`;
176
+ this.anycast = `poll://any@${group}/${pid}`;
177
+ this.headers = {};
178
+ if (token) {
179
+ this.headers.Authorization = `Bearer ${token}`;
180
+ }
181
+ this.eventSource = this.connect();
182
+ }
183
+ connect() {
184
+ this.eventSource = new EventSource(this.pollUrl, {
185
+ fetch: (url, init) => fetch(url, {
186
+ ...init,
187
+ headers: {
188
+ ...init.headers,
189
+ ...this.headers,
190
+ },
191
+ }),
192
+ });
193
+ this.eventSource.addEventListener("open", () => {
194
+ if (this.reconnectAttempt > 0) {
195
+ this.logger?.info({ component: "network", adapter_type: "HttpPoll", address: this.pollUrl, attempt: this.reconnectAttempt }, "adapter reconnected");
196
+ }
197
+ else {
198
+ this.logger?.info({ component: "network", adapter_type: "HttpPoll", address: this.pollUrl }, "adapter connected");
199
+ }
200
+ this.reconnectAttempt = 0;
201
+ });
202
+ this.eventSource.addEventListener("message", (event) => {
203
+ this.deliver(event.data);
204
+ });
205
+ this.eventSource.addEventListener("error", () => {
206
+ this.eventSource.close();
207
+ this.reconnectAttempt++;
208
+ const delay = Math.min(PollMessageSource.INITIAL_BACKOFF_MS * 2 ** (this.reconnectAttempt - 1), PollMessageSource.MAX_BACKOFF_MS);
209
+ this.logger?.warn({
210
+ component: "network",
211
+ adapter_type: "HttpPoll",
212
+ error: "SSE connection error",
213
+ attempt: this.reconnectAttempt,
214
+ }, "adapter reconnecting");
215
+ setTimeout(() => this.connect(), delay);
216
+ });
217
+ return this.eventSource;
218
+ }
219
+ deliver(msgStr) {
220
+ let parsed;
221
+ try {
222
+ parsed = JSON.parse(msgStr);
223
+ }
224
+ catch (e) {
225
+ const error = e instanceof Error ? e.message : String(e);
226
+ this.logger?.warn({ component: "network", error, raw_data: msgStr.slice(0, 200) }, "message parse error");
227
+ return;
228
+ }
229
+ if (!isMessage(parsed)) {
230
+ this.logger?.warn({ component: "network", error: "invalid message structure", raw_data: msgStr.slice(0, 200) }, "message parse error");
231
+ return;
232
+ }
233
+ const msgKind = parsed.kind;
234
+ const idField = msgKind === "execute" ? { task_id: parsed.data?.task?.id } : { promise_id: parsed.data?.promise?.id };
235
+ this.logger?.debug({ component: "network", msg_kind: msgKind, ...idField }, "message received");
236
+ for (const callback of this.callbacks) {
237
+ callback(parsed);
238
+ }
239
+ }
240
+ async init() { }
241
+ async stop() {
242
+ this.eventSource.close();
243
+ }
244
+ onReceive(callback) {
245
+ this.callbacks.push(callback);
246
+ }
247
+ }
248
+ // =============================================================================
249
+ // PushMessageSource — implements HttpAdapter
250
+ // =============================================================================
251
+ export class PushMessageSource {
252
+ unicast;
253
+ anycast;
254
+ host;
255
+ port;
256
+ server;
257
+ callbacks = [];
258
+ logger;
259
+ constructor({ host = "0.0.0.0", port = 0, logger = undefined, } = {}) {
260
+ this.host = host;
261
+ this.port = port;
262
+ this.logger = logger;
263
+ // addresses are set after init() resolves the actual port
264
+ this.unicast = "";
265
+ this.anycast = "";
266
+ this.server = createServer((req, res) => this.handleRequest(req, res));
267
+ }
268
+ init() {
269
+ return new Promise((resolve, reject) => {
270
+ this.server.listen(this.port, this.host, () => {
271
+ const addr = this.server.address();
272
+ if (addr && typeof addr === "object") {
273
+ this.port = addr.port;
274
+ }
275
+ // set addresses now that the server is listening and port is known
276
+ this.unicast = `http://${this.host}:${this.port}`;
277
+ this.anycast = `http://${this.host}:${this.port}`;
278
+ this.logger?.info({ component: "network", adapter_type: "HttpPush", address: `${this.host}:${this.port}` }, "adapter connected");
279
+ resolve();
280
+ });
281
+ this.server.once("error", reject);
282
+ });
283
+ }
284
+ stop() {
285
+ return new Promise((resolve, reject) => {
286
+ this.server.close((err) => (err ? reject(err) : resolve()));
287
+ });
288
+ }
289
+ handleRequest(req, res) {
290
+ if (req.method === "OPTIONS") {
291
+ res.writeHead(204, {
292
+ "Access-Control-Allow-Origin": "*",
293
+ "Access-Control-Allow-Methods": "POST, OPTIONS",
294
+ "Access-Control-Allow-Headers": "Content-Type",
295
+ });
296
+ res.end();
297
+ return;
298
+ }
299
+ if (req.method !== "POST") {
300
+ res.writeHead(405, { "Content-Type": "application/json" });
301
+ res.end(JSON.stringify({ error: "Method not allowed" }));
302
+ return;
303
+ }
304
+ let body = "";
305
+ req.on("data", (chunk) => {
306
+ body += chunk;
307
+ });
308
+ req.on("end", () => {
309
+ this.deliver(body);
310
+ res.writeHead(200, { "Content-Type": "application/json" });
311
+ res.end(JSON.stringify({ status: "ok" }));
312
+ });
313
+ }
314
+ deliver(msgStr) {
315
+ let parsed;
316
+ try {
317
+ parsed = JSON.parse(msgStr);
318
+ }
319
+ catch (e) {
320
+ const error = e instanceof Error ? e.message : String(e);
321
+ this.logger?.warn({ component: "network", error, raw_data: msgStr.slice(0, 200) }, "message parse error");
322
+ return;
323
+ }
324
+ if (!isMessage(parsed)) {
325
+ this.logger?.warn({ component: "network", error: "invalid message structure", raw_data: msgStr.slice(0, 200) }, "message parse error");
326
+ return;
327
+ }
328
+ const msgKind = parsed.kind;
329
+ const idField = msgKind === "execute" ? { task_id: parsed.data?.task?.id } : { promise_id: parsed.data?.promise?.id };
330
+ this.logger?.debug({ component: "network", msg_kind: msgKind, ...idField }, "message received");
331
+ for (const callback of this.callbacks) {
332
+ callback(parsed);
333
+ }
334
+ }
335
+ onReceive(callback) {
336
+ this.callbacks.push(callback);
337
+ }
338
+ }
339
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/network/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ import type { Network } from "./network.js";
2
+ import type { Message, PromiseRecord, Request, Response, ScheduleRecord, TaskRecord, Value } from "./types.ts";
3
+ export interface PTimeout {
4
+ id: string;
5
+ timeout: number;
6
+ }
7
+ export interface TTimeout {
8
+ id: string;
9
+ type: 0 | 1;
10
+ timeout: number;
11
+ }
12
+ export interface STimeout {
13
+ id: string;
14
+ timeout: number;
15
+ }
16
+ export type PromiseState = "pending" | "resolved" | "rejected" | "rejected_canceled" | "rejected_timedout";
17
+ export interface DurablePromise {
18
+ id: string;
19
+ state: PromiseState;
20
+ param: Value;
21
+ value: Value;
22
+ tags: Record<string, string>;
23
+ timeoutAt: number;
24
+ createdAt: number;
25
+ settledAt: number | null;
26
+ awaiters: Set<string>;
27
+ subscribers: Set<string>;
28
+ }
29
+ export type TaskState = "pending" | "acquired" | "suspended" | "halted" | "fulfilled";
30
+ export interface Task {
31
+ id: string;
32
+ state: TaskState;
33
+ version: number;
34
+ pid?: string;
35
+ ttl?: number;
36
+ resumes: Set<string>;
37
+ }
38
+ export interface Schedule {
39
+ id: string;
40
+ cron: string;
41
+ promiseId: string;
42
+ promiseTimeout: number;
43
+ promiseParam: Value;
44
+ promiseTags: Record<string, string>;
45
+ createdAt: number;
46
+ lastRunAt?: number;
47
+ }
48
+ export type Change = {
49
+ kind: "promise.set";
50
+ promise: PromiseRecord;
51
+ } | {
52
+ kind: "task.set";
53
+ task: TaskRecord;
54
+ } | {
55
+ kind: "schedule.set";
56
+ schedule: ScheduleRecord;
57
+ } | {
58
+ kind: "schedule.del";
59
+ id: string;
60
+ } | {
61
+ kind: "ptimeout.set";
62
+ timeout: {
63
+ id: string;
64
+ timeout: number;
65
+ };
66
+ } | {
67
+ kind: "ptimeout.del";
68
+ id: string;
69
+ } | {
70
+ kind: "ttimeout.set";
71
+ timeout: {
72
+ id: string;
73
+ type: number;
74
+ timeout: number;
75
+ };
76
+ } | {
77
+ kind: "ttimeout.del";
78
+ id: string;
79
+ } | {
80
+ kind: "stimeout.set";
81
+ timeout: {
82
+ id: string;
83
+ timeout: number;
84
+ };
85
+ } | {
86
+ kind: "stimeout.del";
87
+ id: string;
88
+ } | {
89
+ kind: "message.send";
90
+ address: string;
91
+ message: Message;
92
+ };
93
+ export declare class Server {
94
+ promises: Map<string, DurablePromise>;
95
+ tasks: Map<string, Task>;
96
+ schedules: Map<string, Schedule>;
97
+ pTimeouts: PTimeout[];
98
+ tTimeouts: TTimeout[];
99
+ sTimeouts: STimeout[];
100
+ outgoing: {
101
+ address: string;
102
+ message: Message;
103
+ }[];
104
+ apply(now: number, req: Request): {
105
+ response: Response;
106
+ changes: Change[];
107
+ };
108
+ private validate;
109
+ private promiseGet;
110
+ private promiseCreate;
111
+ private promiseSettle;
112
+ private promiseRegisterCallback;
113
+ private promiseRegisterListener;
114
+ private taskGet;
115
+ private taskCreate;
116
+ private taskAcquire;
117
+ private taskRelease;
118
+ private taskFulfill;
119
+ private taskSuspend;
120
+ private taskHalt;
121
+ private taskContinue;
122
+ private taskFence;
123
+ private taskHeartbeat;
124
+ private scheduleGet;
125
+ private scheduleCreate;
126
+ private scheduleDelete;
127
+ private debugStart;
128
+ private debugReset;
129
+ private debugSnap;
130
+ private debugTick;
131
+ private debugStop;
132
+ private toPromiseRecord;
133
+ private toTaskRecord;
134
+ private toScheduleRecord;
135
+ private tryAutoTimeout;
136
+ private enqueueSettle;
137
+ private resumeAwaiters;
138
+ private notifySubscribers;
139
+ private preload;
140
+ private timeoutState;
141
+ private getPromiseOrThrow;
142
+ private getAddressOrThrow;
143
+ private getTaskOrThrow;
144
+ private getScheduleOrThrow;
145
+ private setPromise;
146
+ private setTask;
147
+ private setSchedule;
148
+ private delSchedule;
149
+ private setPTimeout;
150
+ private delPTimeout;
151
+ private setTTimeout;
152
+ private delTTimeout;
153
+ private setSTimeout;
154
+ private delSTimeout;
155
+ private sendMessage;
156
+ private response;
157
+ }
158
+ export declare class LocalNetwork implements Network {
159
+ readonly unicast: string;
160
+ readonly anycast: string;
161
+ private started;
162
+ private server;
163
+ private subscribers;
164
+ private tickInterval?;
165
+ constructor({ pid, group, }?: {
166
+ pid?: string;
167
+ group?: string;
168
+ });
169
+ init(): Promise<void>;
170
+ stop(): Promise<void>;
171
+ send: <K extends Request["kind"]>(req: Extract<Request, {
172
+ kind: K;
173
+ }>) => Promise<Extract<Response, {
174
+ kind: K;
175
+ }>>;
176
+ recv(callback: (msg: Message) => void): void;
177
+ private dispatchMessages;
178
+ }
179
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/network/local.ts"],"names":[],"mappings":"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"}