@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,488 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { setTimeout as delay } from "node:timers/promises";
3
+ import { WallClock } from "./clock.js";
4
+ import { Codec } from "./codec.js";
5
+ import { Core } from "./core.js";
6
+ import { NoopEncryptor } from "./encryptor.js";
7
+ import exceptions, { ResonateTimeoutException } from "./exceptions.js";
8
+ import { AsyncHeartbeat, NoopHeartbeat } from "./heartbeat.js";
9
+ import { ConsoleLogger } from "./logger.js";
10
+ import { HttpNetwork, PollMessageSource } from "./network/http.js";
11
+ import { LocalNetwork } from "./network/local.js";
12
+ import { isConflict, isSuccess, } from "./network/types.js";
13
+ import { OptionsBuilder } from "./options.js";
14
+ import { Promises } from "./promises.js";
15
+ import { Registry } from "./registry.js";
16
+ import { Schedules } from "./schedules.js";
17
+ import * as util from "./util.js";
18
+ export class Resonate {
19
+ clock;
20
+ pid;
21
+ ttl;
22
+ idPrefix;
23
+ core;
24
+ codec;
25
+ network;
26
+ send;
27
+ logger;
28
+ registry;
29
+ heartbeat;
30
+ dependencies;
31
+ optsBuilder;
32
+ subscriptions = new Map();
33
+ subscribeEvery;
34
+ intervalId;
35
+ promises;
36
+ schedules;
37
+ /**
38
+ * Creates a new Resonate client instance.
39
+ *
40
+ * @param options - Configuration options for the client.
41
+ * @param options.url - Resonate server URL. Falls back to `process.env.RESONATE_URL`.
42
+ * If no URL is resolved, a local in-memory network is used.
43
+ * @param options.group - Worker group name. Defaults to `"default"`.
44
+ * @param options.pid - Process identifier for the client. Defaults to a random UUID.
45
+ * @param options.ttl - Time-to-live (in seconds) for claimed tasks. Defaults to `1 * util.MIN`.
46
+ * @param options.token - Bearer token for authentication. Passed through to HttpNetwork
47
+ * which falls back to `RESONATE_TOKEN` env var.
48
+ * @param options.timeout - Network request timeout. Passed through to HttpNetwork
49
+ * which falls back to `RESONATE_TIMEOUT` env var (default: 10s).
50
+ * @param options.verbose - Enables verbose logging (shorthand for `logLevel: "debug"`). Defaults to `false`.
51
+ * @param options.logLevel - Log level for the default ConsoleLogger. Defaults to `"warn"`. Takes precedence over `verbose`.
52
+ * @param options.logger - Custom logger implementation. Defaults to {@link ConsoleLogger}.
53
+ * @param options.encryptor - Payload encryptor. Defaults to {@link NoopEncryptor}.
54
+ * @param options.network - Custom network implementation. Defaults to `undefined`.
55
+ * @param options.prefix - ID prefix applied to generated IDs. Defaults to
56
+ * `process.env.RESONATE_PREFIX` when set.
57
+ */
58
+ constructor({ url = undefined, group = "default", pid = undefined, ttl = 1 * util.MIN, token = undefined, timeout = undefined, verbose = false, logLevel = undefined, logger = undefined, encryptor = undefined, network = undefined, prefix = undefined, } = {}) {
59
+ this.clock = new WallClock();
60
+ this.ttl = ttl;
61
+ this.codec = new Codec(encryptor ?? new NoopEncryptor());
62
+ const resolvedPrefix = prefix ?? process.env.RESONATE_PREFIX;
63
+ this.idPrefix = resolvedPrefix ? `${resolvedPrefix}:` : "";
64
+ // Resolve logger: explicit logger > ConsoleLogger with resolved level
65
+ // logLevel takes precedence over verbose; verbose: true -> "debug"
66
+ const resolvedLogLevel = logLevel ?? (verbose ? "debug" : "warn");
67
+ this.logger = logger ?? new ConsoleLogger(resolvedLogLevel);
68
+ this.subscribeEvery = 60 * 1000; // make this configurable
69
+ // Determine the URL: url arg > RESONATE_URL env var
70
+ // Only used to decide between LocalNetwork and HttpNetwork.
71
+ // Full URL/bun fmt
72
+ // bun check
73
+ // /token/timeout env var resolution is HttpNetwork's responsibility (3.7).
74
+ const resolvedUrl = url ?? (process.env.RESONATE_URL || undefined);
75
+ this.pid = pid ?? crypto.randomUUID().replace(/-/g, "");
76
+ let heartbeat;
77
+ if (network) {
78
+ this.network = network;
79
+ heartbeat = true;
80
+ }
81
+ else if (resolvedUrl) {
82
+ const adapter = new PollMessageSource({
83
+ url: `${resolvedUrl}/poll/${encodeURIComponent(group)}/${encodeURIComponent(this.pid)}`,
84
+ token,
85
+ logger: this.logger,
86
+ });
87
+ this.network = new HttpNetwork({
88
+ url: resolvedUrl,
89
+ token,
90
+ timeout,
91
+ headers: {},
92
+ adapter,
93
+ logger: this.logger,
94
+ });
95
+ heartbeat = true;
96
+ }
97
+ else {
98
+ this.network = new LocalNetwork({ pid: this.pid, group });
99
+ heartbeat = false;
100
+ }
101
+ this.send = this.network.send;
102
+ if (heartbeat) {
103
+ this.heartbeat = new AsyncHeartbeat(this.pid, ttl / 2, this.send, this.logger);
104
+ }
105
+ else {
106
+ this.heartbeat = new NoopHeartbeat();
107
+ }
108
+ this.registry = new Registry();
109
+ this.dependencies = new Map();
110
+ // match function: resolve target to an anycast address
111
+ const matchFn = (target) => {
112
+ if (util.isUrl(target))
113
+ return target;
114
+ // For local network, derive from the anycast scheme
115
+ const anycast = this.network.anycast;
116
+ const schemeEnd = anycast.indexOf("://");
117
+ if (schemeEnd >= 0) {
118
+ const scheme = anycast.slice(0, schemeEnd);
119
+ return `${scheme}://any@${target}`;
120
+ }
121
+ return target;
122
+ };
123
+ this.optsBuilder = new OptionsBuilder({ match: matchFn, idPrefix: this.idPrefix });
124
+ this.core = new Core({
125
+ pid: this.pid,
126
+ ttl: this.ttl,
127
+ clock: this.clock,
128
+ send: this.send,
129
+ codec: this.codec,
130
+ registry: this.registry,
131
+ heartbeat: this.heartbeat,
132
+ dependencies: this.dependencies,
133
+ optsBuilder: this.optsBuilder,
134
+ logger: this.logger,
135
+ });
136
+ this.promises = new Promises(this.send);
137
+ this.schedules = new Schedules(this.send);
138
+ // subscribe to network
139
+ this.network.recv(this.onMessage.bind(this));
140
+ this.network.init().catch((err) => {
141
+ this.logger.error({ component: "resonate", error: err instanceof Error ? err.message : String(err) }, "Failed to start network");
142
+ });
143
+ // periodically refresh subscriptions
144
+ this.intervalId = setInterval(async () => {
145
+ for (const [id, sub] of this.subscriptions.entries()) {
146
+ try {
147
+ const registerListenerReq = {
148
+ kind: "promise.register_listener",
149
+ head: { corrId: randomUUID(), version: util.VERSION },
150
+ data: {
151
+ awaited: id,
152
+ address: this.network.unicast,
153
+ },
154
+ };
155
+ const res = await this.promiseRegisterListener(registerListenerReq);
156
+ if (res.state !== "pending") {
157
+ sub.resolve(res);
158
+ this.subscriptions.delete(id);
159
+ }
160
+ }
161
+ catch {
162
+ // silently skip on error
163
+ }
164
+ }
165
+ }, this.subscribeEvery);
166
+ }
167
+ register(nameOrFunc, funcOrOptions, maybeOptions = {}) {
168
+ const { version = 1 } = (typeof funcOrOptions === "object" ? funcOrOptions : maybeOptions) ?? {};
169
+ const func = typeof nameOrFunc === "function" ? nameOrFunc : funcOrOptions;
170
+ const name = typeof nameOrFunc === "string" ? nameOrFunc : func.name;
171
+ this.registry.add(func, name, version);
172
+ return {
173
+ run: (id, ...args) => this.run(id, func, ...this.getArgsAndOpts(args, version)),
174
+ rpc: (id, ...args) => this.rpc(id, func, ...this.getArgsAndOpts(args, version)),
175
+ beginRun: (id, ...args) => this.beginRun(id, func, ...this.getArgsAndOpts(args, version)),
176
+ beginRpc: (id, ...args) => this.beginRpc(id, func, ...this.getArgsAndOpts(args, version)),
177
+ options: this.options,
178
+ };
179
+ }
180
+ async run(id, funcOrName, ...args) {
181
+ return (await this.beginRun(id, funcOrName, ...args)).result();
182
+ }
183
+ async beginRun(id, funcOrName, ...argsWithOpts) {
184
+ const [args, opts] = this.getArgsAndOpts(argsWithOpts);
185
+ const registered = this.registry.get(funcOrName, opts.version);
186
+ // function must be registered
187
+ if (!registered) {
188
+ throw exceptions.REGISTRY_FUNCTION_NOT_REGISTERED(typeof funcOrName === "string" ? funcOrName : funcOrName.name, opts.version);
189
+ }
190
+ id = `${this.idPrefix}${id}`;
191
+ util.assert(registered.version > 0, "function version must be greater than zero");
192
+ const { promise, task } = await this.taskCreate({
193
+ kind: "task.create",
194
+ head: { corrId: randomUUID(), version: util.VERSION },
195
+ data: {
196
+ pid: this.pid,
197
+ ttl: this.ttl,
198
+ action: {
199
+ kind: "promise.create",
200
+ head: { corrId: randomUUID(), version: util.VERSION },
201
+ data: {
202
+ id: id,
203
+ timeoutAt: Date.now() + opts.timeout,
204
+ param: {
205
+ data: {
206
+ func: registered.name,
207
+ args: args,
208
+ retry: opts.retryPolicy?.encode(),
209
+ version: registered.version,
210
+ },
211
+ headers: {},
212
+ },
213
+ tags: {
214
+ ...opts.tags,
215
+ "resonate:origin": id,
216
+ "resonate:branch": id,
217
+ "resonate:parent": id,
218
+ "resonate:scope": "global",
219
+ "resonate:target": this.network.anycast,
220
+ },
221
+ },
222
+ },
223
+ },
224
+ });
225
+ if (task && task.state === "acquired") {
226
+ this.core
227
+ .executeUntilBlocked(task, promise)
228
+ .catch((err) => this.logger.warn({ component: "resonate", error: err instanceof Error ? err.message : String(err) }, "executeUntilBlocked failed"));
229
+ }
230
+ return this.createHandle(promise);
231
+ }
232
+ async rpc(id, funcOrName, ...args) {
233
+ return (await this.beginRpc(id, funcOrName, ...args)).result();
234
+ }
235
+ async beginRpc(id, funcOrName, ...argsWithOpts) {
236
+ const [args, opts] = this.getArgsAndOpts(argsWithOpts);
237
+ const registered = this.registry.get(funcOrName, opts.version);
238
+ // function must be registered if function pointer is provided
239
+ if (typeof funcOrName === "function" && !registered) {
240
+ throw exceptions.REGISTRY_FUNCTION_NOT_REGISTERED(funcOrName.name, opts.version);
241
+ }
242
+ id = `${this.idPrefix}${id}`;
243
+ const func = registered ? registered.name : funcOrName;
244
+ const version = registered ? registered.version : opts.version || 1;
245
+ const promise = await this.promiseCreate({
246
+ kind: "promise.create",
247
+ head: { corrId: randomUUID(), version: util.VERSION },
248
+ data: {
249
+ id: id,
250
+ timeoutAt: Date.now() + opts.timeout,
251
+ param: {
252
+ data: {
253
+ func,
254
+ args,
255
+ retry: opts.retryPolicy?.encode(),
256
+ version,
257
+ },
258
+ headers: {},
259
+ },
260
+ tags: {
261
+ ...opts.tags,
262
+ "resonate:origin": id,
263
+ "resonate:branch": id,
264
+ "resonate:parent": id,
265
+ "resonate:scope": "global",
266
+ "resonate:target": opts.target,
267
+ },
268
+ },
269
+ });
270
+ return this.createHandle(promise);
271
+ }
272
+ async schedule(name, cron, funcOrName, ...argsWithOpts) {
273
+ const [args, opts] = this.getArgsAndOpts(argsWithOpts);
274
+ const registered = this.registry.get(funcOrName, opts.version);
275
+ // function must be registered if function pointer is provided
276
+ if (typeof funcOrName === "function" && !registered) {
277
+ throw exceptions.REGISTRY_FUNCTION_NOT_REGISTERED(funcOrName.name, opts.version);
278
+ }
279
+ // TODO: move this into the handler?
280
+ const { headers, data } = this.codec.encode({
281
+ func: registered ? registered.name : funcOrName,
282
+ args: args,
283
+ version: registered ? registered.version : opts.version || 1,
284
+ });
285
+ await this.schedules.create(name, cron, `${this.idPrefix}{{.id}}.{{.timestamp}}`, opts.timeout, {
286
+ promiseHeaders: headers,
287
+ promiseData: data,
288
+ promiseTags: { ...opts.tags, "resonate:target": opts.target },
289
+ });
290
+ return {
291
+ delete: () => this.schedules.delete(name),
292
+ };
293
+ }
294
+ async get(id) {
295
+ id = `${this.idPrefix}${id}`;
296
+ const promise = await this.promiseGet({
297
+ kind: "promise.get",
298
+ head: { corrId: randomUUID(), version: util.VERSION },
299
+ data: {
300
+ id,
301
+ },
302
+ });
303
+ return this.createHandle(promise);
304
+ }
305
+ /**
306
+ * Builds a resolved {@link Options} object by merging the provided partial options
307
+ * with the client's defaults.
308
+ *
309
+ * This is useful for inspecting the effective configuration that would be applied
310
+ * to a `run`, `rpc`, or `schedule` call, or for passing explicit options to the
311
+ * convenience methods on a {@link ResonateFunc} handle.
312
+ *
313
+ * @param opts - Partial options to merge. Supports `tags`, `target`, `timeout`,
314
+ * `version`, and `retryPolicy`.
315
+ *
316
+ * @returns A fully resolved {@link Options} object.
317
+ */
318
+ options(opts = {}) {
319
+ return this.optsBuilder.build(opts);
320
+ }
321
+ getArgsAndOpts(args, version) {
322
+ return util.splitArgsAndOpts(args, this.options({ version }));
323
+ }
324
+ /**
325
+ * Registers a named dependency that will be available to all Resonate functions
326
+ * via `context.getDependency(name)`.
327
+ *
328
+ * Use this to inject services, clients, or configuration objects into Resonate
329
+ * functions without tight coupling.
330
+ *
331
+ * @param name - A unique key identifying the dependency.
332
+ * @param obj - The dependency value (any object or primitive).
333
+ */
334
+ setDependency(name, obj) {
335
+ this.dependencies.set(name, obj);
336
+ }
337
+ /**
338
+ * Stops the Resonate client, releasing all resources.
339
+ *
340
+ * This shuts down the underlying network transport and message source, stops the
341
+ * heartbeat loop, and clears the subscription refresh interval. After calling
342
+ * `stop()`, the client should not be used for further operations.
343
+ */
344
+ async stop() {
345
+ await this.network.stop();
346
+ this.heartbeat.stop();
347
+ clearInterval(this.intervalId);
348
+ }
349
+ async taskCreate(req) {
350
+ req.data.action.data.param = this.codec.encode(req.data.action.data.param.data);
351
+ const res = await this.send(req);
352
+ if (!isSuccess(res) && !isConflict(res)) {
353
+ throw exceptions.SERVER_ERROR(res.data, true, {
354
+ code: res.head.status,
355
+ message: res.data,
356
+ });
357
+ }
358
+ if (isConflict(res)) {
359
+ const promise = await this.promiseRegisterListener({
360
+ kind: "promise.register_listener",
361
+ head: { corrId: randomUUID(), version: util.VERSION },
362
+ data: {
363
+ awaited: req.data.action.data.id,
364
+ address: this.network.unicast,
365
+ },
366
+ });
367
+ return { promise, task: undefined };
368
+ }
369
+ const promise = this.codec.decodePromise(res.data.promise);
370
+ return { promise, task: res.data.task };
371
+ }
372
+ async promiseCreate(req) {
373
+ req.data.param = this.codec.encode(req.data.param.data);
374
+ const res = await this.send(req);
375
+ if (!isSuccess(res)) {
376
+ throw exceptions.SERVER_ERROR(res.data, true, {
377
+ code: res.head.status,
378
+ message: res.data,
379
+ });
380
+ }
381
+ return this.codec.decodePromise(res.data.promise);
382
+ }
383
+ async promiseRegisterListener(req) {
384
+ const retryDelay = 5000;
385
+ while (true) {
386
+ try {
387
+ const res = await this.send(req);
388
+ if (!isSuccess(res)) {
389
+ await delay(retryDelay);
390
+ continue;
391
+ }
392
+ return this.codec.decodePromise(res.data.promise);
393
+ }
394
+ catch (e) {
395
+ if (e instanceof ResonateTimeoutException) {
396
+ await delay(retryDelay);
397
+ continue;
398
+ }
399
+ throw e;
400
+ }
401
+ }
402
+ }
403
+ async promiseGet(req) {
404
+ const res = await this.send(req);
405
+ if (!isSuccess(res)) {
406
+ throw exceptions.SERVER_ERROR(res.data, true, {
407
+ code: res.head.status,
408
+ message: res.data,
409
+ });
410
+ }
411
+ return this.codec.decodePromise(res.data.promise);
412
+ }
413
+ createHandle(promise) {
414
+ const registerListenerReq = {
415
+ kind: "promise.register_listener",
416
+ head: { corrId: randomUUID(), version: util.VERSION },
417
+ data: {
418
+ awaited: promise.id,
419
+ address: this.network.unicast,
420
+ },
421
+ };
422
+ return {
423
+ id: promise.id,
424
+ done: () => this.promiseRegisterListener(registerListenerReq).then((res) => res.state !== "pending"),
425
+ result: () => this.promiseRegisterListener(registerListenerReq).then((res) => this.subscribe(promise.id, res)),
426
+ };
427
+ }
428
+ onMessage(msg) {
429
+ if (msg.kind === "execute") {
430
+ this.core
431
+ .onMessage(msg)
432
+ .catch((err) => this.logger.warn({ component: "resonate", error: err instanceof Error ? err.message : String(err) }, "onMessage failed"));
433
+ return;
434
+ }
435
+ util.assert(msg.kind === "unblock");
436
+ try {
437
+ const decoded = this.codec.decodePromise(msg.data.promise);
438
+ this.notify(msg.data.promise.id, undefined, decoded);
439
+ }
440
+ catch {
441
+ this.notify(msg.data.promise.id, new Error("Failed to decode promise"));
442
+ }
443
+ }
444
+ async subscribe(id, res) {
445
+ const { promise, resolve, reject } = this.subscriptions.get(id) ?? Promise.withResolvers();
446
+ if (res.state === "pending") {
447
+ this.subscriptions.set(id, { promise, resolve, reject, timeout: res.timeoutAt });
448
+ }
449
+ else {
450
+ resolve(res);
451
+ this.subscriptions.delete(id);
452
+ }
453
+ const p = await promise;
454
+ util.assert(p.state !== "pending", "promise must be completed");
455
+ if (p.state === "resolved") {
456
+ return p.value?.data;
457
+ }
458
+ if (p.state === "rejected") {
459
+ throw p.value?.data;
460
+ }
461
+ if (p.state === "rejected_canceled") {
462
+ throw new Error("Promise canceled");
463
+ }
464
+ if (p.state === "rejected_timedout") {
465
+ throw new Error("Promise timedout");
466
+ }
467
+ }
468
+ notify(id, err, res) {
469
+ let subscription = this.subscriptions.get(id);
470
+ if (!subscription) {
471
+ const { promise, resolve, reject } = Promise.withResolvers();
472
+ // if no res, we cannot extract timeoutAt information. So we fallback to a large number
473
+ subscription = { promise, resolve, reject, timeout: res ? res.timeoutAt : 100000000 };
474
+ this.subscriptions.set(id, subscription);
475
+ }
476
+ else {
477
+ this.subscriptions.delete(id);
478
+ }
479
+ if (res) {
480
+ util.assert(res.state !== "pending", "promise must be completed");
481
+ subscription.resolve(res);
482
+ }
483
+ else {
484
+ subscription.reject(err);
485
+ }
486
+ }
487
+ }
488
+ //# sourceMappingURL=resonate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resonate.js","sourceRoot":"","sources":["../src/resonate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retries.d.ts","sourceRoot":"","sources":["../src/retries.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC;CACvC;AAED,qBAAa,QAAS,YAAW,WAAW;IAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,EAAE,KAAY,EAAE,UAAoC,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAKhH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgBpC,MAAM;;;;;;;CAMP;AAED,qBAAa,WAAY,YAAW,WAAW;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,iBAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,EACV,KAAY,EACZ,MAAU,EACV,UAAoC,EACpC,QAAgB,GACjB,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAOnF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgBpC,MAAM;;;;;;;;;CAMP;AAED,qBAAa,MAAO,YAAW,WAAW;IACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,YAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,EAAE,KAAY,EAAE,UAAoC,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAKhH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYpC,MAAM;;;;;;;CAMP;AAED,qBAAa,KAAM,YAAW,WAAW;IACvC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW;IAE/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQpC,MAAM;;;;CAMP"}
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Never = exports.Linear = exports.Exponential = exports.Constant = void 0;
4
- class Constant {
1
+ export class Constant {
5
2
  static type = "constant";
6
3
  delay;
7
4
  maxRetries;
@@ -28,8 +25,7 @@ class Constant {
28
25
  };
29
26
  }
30
27
  }
31
- exports.Constant = Constant;
32
- class Exponential {
28
+ export class Exponential {
33
29
  static type = "exponential";
34
30
  delay;
35
31
  maxRetries;
@@ -60,8 +56,7 @@ class Exponential {
60
56
  };
61
57
  }
62
58
  }
63
- exports.Exponential = Exponential;
64
- class Linear {
59
+ export class Linear {
65
60
  static type = "linear";
66
61
  delay;
67
62
  maxRetries;
@@ -85,8 +80,7 @@ class Linear {
85
80
  };
86
81
  }
87
82
  }
88
- exports.Linear = Linear;
89
- class Never {
83
+ export class Never {
90
84
  static type = "never";
91
85
  next(attempt) {
92
86
  if (attempt < 0) {
@@ -101,5 +95,4 @@ class Never {
101
95
  };
102
96
  }
103
97
  }
104
- exports.Never = Never;
105
98
  //# sourceMappingURL=retries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retries.js","sourceRoot":"","sources":["../src/retries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type ScheduleRecord } from "./network/types.js";
2
+ import type { Send } from "./types.js";
3
+ export declare class Schedules {
4
+ private send;
5
+ constructor(send?: Send);
6
+ get(id: string): Promise<ScheduleRecord>;
7
+ create(id: string, cron: string, promiseId: string, promiseTimeout: number, { promiseHeaders, promiseData, promiseTags, }?: {
8
+ description?: string;
9
+ tags?: {
10
+ [key: string]: string;
11
+ };
12
+ promiseHeaders?: {
13
+ [key: string]: string;
14
+ };
15
+ promiseData?: string;
16
+ promiseTags?: {
17
+ [key: string]: string;
18
+ };
19
+ }): Promise<ScheduleRecord>;
20
+ delete(id: string): Promise<undefined>;
21
+ }
22
+ //# sourceMappingURL=schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,GAAE,IAA8B;IAI1C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiBxC,MAAM,CACV,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,EACE,cAAmB,EACnB,WAAgB,EAChB,WAAgB,GACjB,GAAE;QACD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QACjC,cAAc,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;KACpC,GACL,OAAO,CAAC,cAAc,CAAC;IAsBpB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAgB7C"}
@@ -0,0 +1,65 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import exceptions from "./exceptions.js";
3
+ import { LocalNetwork } from "./network/local.js";
4
+ import { isSuccess } from "./network/types.js";
5
+ import { VERSION } from "./util.js";
6
+ export class Schedules {
7
+ send;
8
+ constructor(send = new LocalNetwork().send) {
9
+ this.send = send;
10
+ }
11
+ async get(id) {
12
+ const res = await this.send({
13
+ kind: "schedule.get",
14
+ head: { corrId: randomUUID(), version: VERSION },
15
+ data: {
16
+ id,
17
+ },
18
+ });
19
+ if (!isSuccess(res)) {
20
+ throw exceptions.SERVER_ERROR(res.data, true, {
21
+ code: res.head.status,
22
+ message: res.data,
23
+ });
24
+ }
25
+ return res.data.schedule;
26
+ }
27
+ async create(id, cron, promiseId, promiseTimeout, { promiseHeaders = {}, promiseData = "", promiseTags = {}, } = {}) {
28
+ const res = await this.send({
29
+ kind: "schedule.create",
30
+ head: { corrId: randomUUID(), version: VERSION },
31
+ data: {
32
+ id: id,
33
+ cron: cron,
34
+ promiseId: promiseId,
35
+ promiseTimeout: promiseTimeout,
36
+ promiseParam: { headers: promiseHeaders, data: promiseData },
37
+ promiseTags: promiseTags,
38
+ },
39
+ });
40
+ if (!isSuccess(res)) {
41
+ throw exceptions.SERVER_ERROR(res.data, true, {
42
+ code: res.head.status,
43
+ message: res.data,
44
+ });
45
+ }
46
+ return res.data.schedule;
47
+ }
48
+ async delete(id) {
49
+ const res = await this.send({
50
+ kind: "schedule.delete",
51
+ head: { corrId: randomUUID(), version: VERSION },
52
+ data: {
53
+ id,
54
+ },
55
+ });
56
+ if (!isSuccess(res)) {
57
+ throw exceptions.SERVER_ERROR(res.data, true, {
58
+ code: res.head.status,
59
+ message: res.data,
60
+ });
61
+ }
62
+ return undefined;
63
+ }
64
+ }
65
+ //# sourceMappingURL=schedules.js.map