@resonatehq/sdk 0.9.6 → 0.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 (235) 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} +70 -40
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/{src/context.js → context.js} +140 -155
  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 +259 -0
  24. package/dist/coroutine.js.map +1 -0
  25. package/dist/{src/decorator.d.ts → decorator.d.ts} +9 -8
  26. package/dist/decorator.d.ts.map +1 -0
  27. package/dist/decorator.js +150 -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 +19 -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 +86 -0
  50. package/dist/network/http.d.ts.map +1 -0
  51. package/dist/network/http.js +350 -0
  52. package/dist/network/http.js.map +1 -0
  53. package/dist/network/local.d.ts +188 -0
  54. package/dist/network/local.d.ts.map +1 -0
  55. package/dist/network/local.js +1349 -0
  56. package/dist/network/local.js.map +1 -0
  57. package/dist/network/network.d.ts +17 -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 +1280 -0
  62. package/dist/network/types.d.ts.map +1 -0
  63. package/dist/network/types.js +920 -0
  64. package/dist/network/types.js.map +1 -0
  65. package/dist/{src/options.d.ts → options.d.ts} +15 -6
  66. package/dist/options.d.ts.map +1 -0
  67. package/dist/options.js +34 -0
  68. package/dist/options.js.map +1 -0
  69. package/dist/promises.d.ts +54 -0
  70. package/dist/promises.d.ts.map +1 -0
  71. package/dist/promises.js +122 -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 +475 -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/util.d.ts +28 -0
  97. package/dist/util.d.ts.map +1 -0
  98. package/dist/util.js +196 -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 +0 -20
  230. package/dist/src/util.d.ts.map +0 -1
  231. package/dist/src/util.js +0 -120
  232. package/dist/src/util.js.map +0 -1
  233. package/dist/tsconfig.build.tsbuildinfo +0 -1
  234. /package/dist/{src/clock.d.ts → clock.d.ts} +0 -0
  235. /package/dist/{src/retries.d.ts → retries.d.ts} +0 -0
@@ -0,0 +1,350 @@
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
+ match(target) {
38
+ util.assert(this.adapter !== undefined);
39
+ return this.adapter.match(target);
40
+ }
41
+ async init() {
42
+ util.assert(this.adapter !== undefined);
43
+ await this.adapter.init();
44
+ this.logger?.info({ component: "network", url: this.url, adapter_type: this.adapter.constructor.name }, "network initialized");
45
+ }
46
+ async stop() {
47
+ util.assert(this.adapter !== undefined);
48
+ await this.adapter.stop();
49
+ this.logger?.info({ component: "network" }, "network stopped");
50
+ }
51
+ recv(callback) {
52
+ this.adapter?.onReceive(callback);
53
+ }
54
+ // Valid protocol status codes — responses with these statuses are returned as-is.
55
+ // Everything else is a platform failure that throws ResonateTimeoutException.
56
+ static PROTOCOL_STATUSES = new Set([200, 300, 404, 409, 422, 501]);
57
+ send = async (req) => {
58
+ const startTime = Date.now();
59
+ this.logger?.debug({ component: "network", url: `${this.url}`, kind: req.kind, corr_id: req.head.corrId }, "request sent");
60
+ const controller = new AbortController();
61
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
62
+ if (this.token) {
63
+ req = { ...req, head: { ...req.head, auth: this.token } };
64
+ }
65
+ let httpResponse;
66
+ try {
67
+ httpResponse = await fetch(`${this.url}`, {
68
+ method: "POST",
69
+ headers: this.headers,
70
+ body: JSON.stringify(req),
71
+ signal: controller.signal,
72
+ });
73
+ }
74
+ catch (e) {
75
+ const cause = e instanceof Error ? e.message : String(e);
76
+ const errorType = cause.includes("abort") ? "http_timeout" : "connection_error";
77
+ this.logger?.warn({ component: "network", kind: req.kind, corr_id: req.head.corrId, error_type: errorType, error: cause }, "platform failure");
78
+ throw new ResonateTimeoutException(cause);
79
+ }
80
+ finally {
81
+ clearTimeout(timeoutId);
82
+ }
83
+ // Check HTTP status — non-protocol statuses are platform failures
84
+ if (!HttpNetwork.PROTOCOL_STATUSES.has(httpResponse.status)) {
85
+ const cause = `HTTP ${httpResponse.status}`;
86
+ this.logger?.warn({
87
+ component: "network",
88
+ kind: req.kind,
89
+ corr_id: req.head.corrId,
90
+ error_type: `server_error_${httpResponse.status}`,
91
+ error: cause,
92
+ }, "platform failure");
93
+ throw new ResonateTimeoutException(cause);
94
+ }
95
+ let resStr;
96
+ try {
97
+ resStr = await httpResponse.text();
98
+ }
99
+ catch (e) {
100
+ const cause = e instanceof Error ? e.message : String(e);
101
+ this.logger?.warn({
102
+ component: "network",
103
+ kind: req.kind,
104
+ corr_id: req.head.corrId,
105
+ error_type: "malformed_response",
106
+ error: cause,
107
+ }, "platform failure");
108
+ throw new ResonateTimeoutException(cause);
109
+ }
110
+ if (httpResponse.status === 404 && !httpResponse.headers.get("content-type")?.includes("application/json")) {
111
+ this.logger?.warn({
112
+ component: "network",
113
+ kind: req.kind,
114
+ corr_id: req.head.corrId,
115
+ error_type: "outdated_server",
116
+ }, "Legacy server detected. Please upgrade to the latest server: https://github.com/resonatehq/resonate");
117
+ throw new ResonateTimeoutException("legacy server detected");
118
+ }
119
+ let res;
120
+ try {
121
+ res = JSON.parse(resStr);
122
+ }
123
+ catch {
124
+ this.logger?.warn({
125
+ component: "network",
126
+ kind: req.kind,
127
+ corr_id: req.head.corrId,
128
+ error_type: "malformed_response",
129
+ error: "failed to parse response JSON",
130
+ }, "platform failure");
131
+ throw new ResonateTimeoutException("failed to parse response JSON");
132
+ }
133
+ if (!isResponse(res) || res.kind !== req.kind || res.head.corrId !== req.head.corrId) {
134
+ this.logger?.warn({
135
+ component: "network",
136
+ kind: req.kind,
137
+ corr_id: req.head.corrId,
138
+ error_type: "malformed_response",
139
+ error: "response did not match request",
140
+ }, "platform failure");
141
+ throw new ResonateTimeoutException("response did not match request");
142
+ }
143
+ const durationMs = Date.now() - startTime;
144
+ this.logger?.debug({
145
+ component: "network",
146
+ kind: res.kind,
147
+ corr_id: res.head.corrId,
148
+ status: res.head.status,
149
+ duration_ms: durationMs,
150
+ }, "protocol response");
151
+ return res;
152
+ };
153
+ }
154
+ // =============================================================================
155
+ // PollMessageSource — implements HttpAdapter
156
+ // =============================================================================
157
+ export class PollMessageSource {
158
+ unicast;
159
+ anycast;
160
+ pollUrl;
161
+ headers;
162
+ eventSource;
163
+ callbacks = [];
164
+ logger;
165
+ // Exponential backoff state
166
+ reconnectAttempt = 0;
167
+ static INITIAL_BACKOFF_MS = 1000;
168
+ static MAX_BACKOFF_MS = 30000;
169
+ constructor({ url, token = undefined, logger = undefined, }) {
170
+ this.pollUrl = url;
171
+ this.logger = logger;
172
+ // Derive unicast/anycast from the URL
173
+ // URL format: ${baseUrl}/poll/${group}/${pid}
174
+ const parsed = new URL(url);
175
+ const segments = parsed.pathname.split("/").filter(Boolean);
176
+ // segments: ["poll", group, pid]
177
+ const group = segments.length >= 2 ? decodeURIComponent(segments[1]) : "default";
178
+ const pid = segments.length >= 3 ? decodeURIComponent(segments[2]) : "";
179
+ this.unicast = `poll://uni@${group}/${pid}`;
180
+ this.anycast = `poll://any@${group}/${pid}`;
181
+ this.headers = {};
182
+ if (token) {
183
+ this.headers.Authorization = `Bearer ${token}`;
184
+ }
185
+ this.eventSource = this.connect();
186
+ }
187
+ match(target) {
188
+ return `poll://any@${target}`;
189
+ }
190
+ connect() {
191
+ this.eventSource = new EventSource(this.pollUrl, {
192
+ fetch: (url, init) => fetch(url, {
193
+ ...init,
194
+ headers: {
195
+ ...init.headers,
196
+ ...this.headers,
197
+ },
198
+ }),
199
+ });
200
+ this.eventSource.addEventListener("open", () => {
201
+ if (this.reconnectAttempt > 0) {
202
+ this.logger?.info({ component: "network", adapter_type: "HttpPoll", address: this.pollUrl, attempt: this.reconnectAttempt }, "adapter reconnected");
203
+ }
204
+ else {
205
+ this.logger?.info({ component: "network", adapter_type: "HttpPoll", address: this.pollUrl }, "adapter connected");
206
+ }
207
+ this.reconnectAttempt = 0;
208
+ });
209
+ this.eventSource.addEventListener("message", (event) => {
210
+ this.deliver(event.data);
211
+ });
212
+ this.eventSource.addEventListener("error", () => {
213
+ this.eventSource.close();
214
+ this.reconnectAttempt++;
215
+ const delay = Math.min(PollMessageSource.INITIAL_BACKOFF_MS * 2 ** (this.reconnectAttempt - 1), PollMessageSource.MAX_BACKOFF_MS);
216
+ this.logger?.warn({
217
+ component: "network",
218
+ adapter_type: "HttpPoll",
219
+ error: "SSE connection error",
220
+ attempt: this.reconnectAttempt,
221
+ }, "adapter reconnecting");
222
+ setTimeout(() => this.connect(), delay);
223
+ });
224
+ return this.eventSource;
225
+ }
226
+ deliver(msgStr) {
227
+ let parsed;
228
+ try {
229
+ parsed = JSON.parse(msgStr);
230
+ }
231
+ catch (e) {
232
+ const error = e instanceof Error ? e.message : String(e);
233
+ this.logger?.warn({ component: "network", error, raw_data: msgStr.slice(0, 200) }, "message parse error");
234
+ return;
235
+ }
236
+ if (!isMessage(parsed)) {
237
+ this.logger?.warn({ component: "network", error: "invalid message structure", raw_data: msgStr.slice(0, 200) }, "message parse error");
238
+ return;
239
+ }
240
+ const msgKind = parsed.kind;
241
+ const idField = msgKind === "execute" ? { task_id: parsed.data?.task?.id } : { promise_id: parsed.data?.promise?.id };
242
+ this.logger?.debug({ component: "network", msg_kind: msgKind, ...idField }, "message received");
243
+ for (const callback of this.callbacks) {
244
+ callback(parsed);
245
+ }
246
+ }
247
+ async init() { }
248
+ async stop() {
249
+ this.eventSource.close();
250
+ }
251
+ onReceive(callback) {
252
+ this.callbacks.push(callback);
253
+ }
254
+ }
255
+ // =============================================================================
256
+ // PushMessageSource — implements HttpAdapter
257
+ // =============================================================================
258
+ export class PushMessageSource {
259
+ unicast;
260
+ anycast;
261
+ host;
262
+ port;
263
+ server;
264
+ callbacks = [];
265
+ logger;
266
+ constructor({ host = "127.0.0.1", port = 0, logger = undefined, } = {}) {
267
+ this.host = host;
268
+ this.port = port;
269
+ this.logger = logger;
270
+ // addresses are set after init() resolves the actual port
271
+ this.unicast = "";
272
+ this.anycast = "";
273
+ this.server = createServer((req, res) => this.handleRequest(req, res));
274
+ }
275
+ match(_target) {
276
+ util.assert(this.anycast !== "", "PushMessageSource.match called before init()");
277
+ return this.anycast;
278
+ }
279
+ init() {
280
+ return new Promise((resolve, reject) => {
281
+ this.server.listen(this.port, this.host, () => {
282
+ const addr = this.server.address();
283
+ if (addr && typeof addr === "object") {
284
+ this.port = addr.port;
285
+ }
286
+ // set addresses now that the server is listening and port is known
287
+ this.unicast = `http://${this.host}:${this.port}`;
288
+ this.anycast = `http://${this.host}:${this.port}`;
289
+ this.logger?.info({ component: "network", adapter_type: "HttpPush", address: `${this.host}:${this.port}` }, "adapter connected");
290
+ resolve();
291
+ });
292
+ this.server.once("error", reject);
293
+ });
294
+ }
295
+ stop() {
296
+ return new Promise((resolve, reject) => {
297
+ this.server.close((err) => (err ? reject(err) : resolve()));
298
+ });
299
+ }
300
+ handleRequest(req, res) {
301
+ if (req.method === "OPTIONS") {
302
+ res.writeHead(204, {
303
+ "Access-Control-Allow-Origin": "*",
304
+ "Access-Control-Allow-Methods": "POST, OPTIONS",
305
+ "Access-Control-Allow-Headers": "Content-Type",
306
+ });
307
+ res.end();
308
+ return;
309
+ }
310
+ if (req.method !== "POST") {
311
+ res.writeHead(405, { "Content-Type": "application/json" });
312
+ res.end(JSON.stringify({ error: "Method not allowed" }));
313
+ return;
314
+ }
315
+ let body = "";
316
+ req.on("data", (chunk) => {
317
+ body += chunk;
318
+ });
319
+ req.on("end", () => {
320
+ this.deliver(body);
321
+ res.writeHead(200, { "Content-Type": "application/json" });
322
+ res.end(JSON.stringify({ status: "ok" }));
323
+ });
324
+ }
325
+ deliver(msgStr) {
326
+ let parsed;
327
+ try {
328
+ parsed = JSON.parse(msgStr);
329
+ }
330
+ catch (e) {
331
+ const error = e instanceof Error ? e.message : String(e);
332
+ this.logger?.warn({ component: "network", error, raw_data: msgStr.slice(0, 200) }, "message parse error");
333
+ return;
334
+ }
335
+ if (!isMessage(parsed)) {
336
+ this.logger?.warn({ component: "network", error: "invalid message structure", raw_data: msgStr.slice(0, 200) }, "message parse error");
337
+ return;
338
+ }
339
+ const msgKind = parsed.kind;
340
+ const idField = msgKind === "execute" ? { task_id: parsed.data?.task?.id } : { promise_id: parsed.data?.promise?.id };
341
+ this.logger?.debug({ component: "network", msg_kind: msgKind, ...idField }, "message received");
342
+ for (const callback of this.callbacks) {
343
+ callback(parsed);
344
+ }
345
+ }
346
+ onReceive(callback) {
347
+ this.callbacks.push(callback);
348
+ }
349
+ }
350
+ //# 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,188 @@
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 Promise {
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
+ callbacks: Set<string>;
27
+ listeners: 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 type TimeoutMode = "eager" | "none";
94
+ export declare class Server {
95
+ promises: Map<string, Promise>;
96
+ tasks: Map<string, Task>;
97
+ schedules: Map<string, Schedule>;
98
+ pTimeouts: PTimeout[];
99
+ tTimeouts: TTimeout[];
100
+ sTimeouts: STimeout[];
101
+ outgoing: {
102
+ address: string;
103
+ message: Message;
104
+ }[];
105
+ readonly timeoutMode: TimeoutMode;
106
+ constructor(opts?: {
107
+ timeoutMode?: TimeoutMode;
108
+ });
109
+ apply(now: number, req: Request): {
110
+ response: Response;
111
+ changes: Change[];
112
+ };
113
+ private validate;
114
+ private promiseGet;
115
+ private promiseCreate;
116
+ private promiseSettle;
117
+ private promiseRegisterCallback;
118
+ private promiseRegisterListener;
119
+ private taskGet;
120
+ private taskCreate;
121
+ private taskAcquire;
122
+ private taskRelease;
123
+ private taskFulfill;
124
+ private taskSuspend;
125
+ private taskHalt;
126
+ private taskContinue;
127
+ private taskFence;
128
+ private taskHeartbeat;
129
+ private scheduleGet;
130
+ private scheduleCreate;
131
+ private scheduleDelete;
132
+ private debugStart;
133
+ private debugReset;
134
+ private debugSnap;
135
+ private debugTick;
136
+ private debugStop;
137
+ private toPromiseRecord;
138
+ private toTaskRecord;
139
+ private toScheduleRecord;
140
+ private tryEagerTimeout;
141
+ private triggerSettlement;
142
+ private triggerFulfilled;
143
+ private triggerCallbacks;
144
+ private triggerListeners;
145
+ private preload;
146
+ private timeoutState;
147
+ private projectedPromise;
148
+ private projectedTask;
149
+ private getPromiseOrThrow;
150
+ private getAddressOrThrow;
151
+ private getTaskOrThrow;
152
+ private getScheduleOrThrow;
153
+ private setPromise;
154
+ private setTask;
155
+ private setSchedule;
156
+ private delSchedule;
157
+ private setPTimeout;
158
+ private delPTimeout;
159
+ private setTTimeout;
160
+ private delTTimeout;
161
+ private setSTimeout;
162
+ private delSTimeout;
163
+ private sendMessage;
164
+ private response;
165
+ }
166
+ export declare class LocalNetwork implements Network {
167
+ readonly unicast: string;
168
+ readonly anycast: string;
169
+ private started;
170
+ private server;
171
+ private subscribers;
172
+ private tickInterval?;
173
+ constructor({ pid, group, }?: {
174
+ pid?: string;
175
+ group?: string;
176
+ });
177
+ match(target: string): string;
178
+ init(): globalThis.Promise<void>;
179
+ stop(): globalThis.Promise<void>;
180
+ send: <K extends Request["kind"]>(req: Extract<Request, {
181
+ kind: K;
182
+ }>) => globalThis.Promise<Extract<Response, {
183
+ kind: K;
184
+ }>>;
185
+ recv(callback: (msg: Message) => void): void;
186
+ private dispatchMessages;
187
+ }
188
+ //# 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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"}