@resonatehq/sdk 0.3.3 → 0.3.5

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 (105) hide show
  1. package/dist/async.d.ts +144 -0
  2. package/dist/async.d.ts.map +1 -0
  3. package/dist/async.js +235 -0
  4. package/dist/async.js.map +1 -0
  5. package/dist/core/encoder.d.ts +5 -0
  6. package/dist/core/encoder.d.ts.map +1 -0
  7. package/dist/core/encoder.js +3 -0
  8. package/dist/core/encoder.js.map +1 -0
  9. package/dist/core/encoders/base64.d.ts +6 -0
  10. package/dist/core/encoders/base64.d.ts.map +1 -0
  11. package/dist/core/encoders/base64.js +13 -0
  12. package/dist/core/encoders/base64.js.map +1 -0
  13. package/dist/core/encoders/json.d.ts +6 -0
  14. package/dist/core/encoders/json.d.ts.map +1 -0
  15. package/dist/core/encoders/json.js +65 -0
  16. package/dist/core/encoders/json.js.map +1 -0
  17. package/dist/core/errors.d.ts +21 -0
  18. package/dist/core/errors.d.ts.map +1 -0
  19. package/dist/core/errors.js +38 -0
  20. package/dist/core/errors.js.map +1 -0
  21. package/dist/core/execution.d.ts +44 -0
  22. package/dist/core/execution.d.ts.map +1 -0
  23. package/dist/core/execution.js +206 -0
  24. package/dist/core/execution.js.map +1 -0
  25. package/dist/core/future.d.ts +54 -0
  26. package/dist/core/future.d.ts.map +1 -0
  27. package/dist/core/future.js +101 -0
  28. package/dist/core/future.js.map +1 -0
  29. package/dist/core/invocation.d.ts +43 -0
  30. package/dist/core/invocation.d.ts.map +1 -0
  31. package/dist/core/invocation.js +77 -0
  32. package/dist/core/invocation.js.map +1 -0
  33. package/dist/core/logger.d.ts +10 -0
  34. package/dist/core/logger.d.ts.map +1 -0
  35. package/dist/core/logger.js +3 -0
  36. package/dist/core/logger.js.map +1 -0
  37. package/dist/core/loggers/logger.d.ts +13 -0
  38. package/dist/core/loggers/logger.d.ts.map +1 -0
  39. package/dist/core/loggers/logger.js +48 -0
  40. package/dist/core/loggers/logger.js.map +1 -0
  41. package/dist/core/options.d.ts +84 -0
  42. package/dist/core/options.d.ts.map +1 -0
  43. package/dist/core/options.js +8 -0
  44. package/dist/core/options.js.map +1 -0
  45. package/dist/core/promises/promises.d.ts +48 -0
  46. package/dist/core/promises/promises.d.ts.map +1 -0
  47. package/dist/core/promises/promises.js +133 -0
  48. package/dist/core/promises/promises.js.map +1 -0
  49. package/dist/core/promises/types.d.ts +99 -0
  50. package/dist/core/promises/types.d.ts.map +1 -0
  51. package/dist/core/promises/types.js +40 -0
  52. package/dist/core/promises/types.js.map +1 -0
  53. package/dist/core/retries/retry.d.ts +20 -0
  54. package/dist/core/retries/retry.d.ts.map +1 -0
  55. package/dist/core/retries/retry.js +41 -0
  56. package/dist/core/retries/retry.js.map +1 -0
  57. package/dist/core/retry.d.ts +27 -0
  58. package/dist/core/retry.d.ts.map +1 -0
  59. package/dist/core/retry.js +22 -0
  60. package/dist/core/retry.js.map +1 -0
  61. package/dist/core/schedules/types.d.ts +19 -0
  62. package/dist/core/schedules/types.d.ts.map +1 -0
  63. package/dist/core/schedules/types.js +8 -0
  64. package/dist/core/schedules/types.js.map +1 -0
  65. package/dist/core/storage.d.ts +6 -0
  66. package/dist/core/storage.d.ts.map +1 -0
  67. package/dist/core/storage.js +3 -0
  68. package/dist/core/storage.js.map +1 -0
  69. package/dist/core/storages/memory.d.ts +8 -0
  70. package/dist/core/storages/memory.d.ts.map +1 -0
  71. package/dist/core/storages/memory.js +27 -0
  72. package/dist/core/storages/memory.js.map +1 -0
  73. package/dist/core/storages/withTimeout.d.ts +10 -0
  74. package/dist/core/storages/withTimeout.d.ts.map +1 -0
  75. package/dist/core/storages/withTimeout.js +43 -0
  76. package/dist/core/storages/withTimeout.js.map +1 -0
  77. package/dist/core/store.d.ts +139 -0
  78. package/dist/core/store.d.ts.map +1 -0
  79. package/dist/core/store.js +3 -0
  80. package/dist/core/store.js.map +1 -0
  81. package/dist/core/stores/local.d.ts +54 -0
  82. package/dist/core/stores/local.d.ts.map +1 -0
  83. package/dist/core/stores/local.js +399 -0
  84. package/dist/core/stores/local.js.map +1 -0
  85. package/dist/core/stores/remote.d.ts +48 -0
  86. package/dist/core/stores/remote.d.ts.map +1 -0
  87. package/dist/core/stores/remote.js +407 -0
  88. package/dist/core/stores/remote.js.map +1 -0
  89. package/dist/core/utils.d.ts +3 -0
  90. package/dist/core/utils.d.ts.map +1 -0
  91. package/dist/core/utils.js +19 -0
  92. package/dist/core/utils.js.map +1 -0
  93. package/dist/generator.d.ts +187 -0
  94. package/dist/generator.d.ts.map +1 -0
  95. package/dist/generator.js +426 -0
  96. package/dist/generator.js.map +1 -0
  97. package/dist/index.d.ts +4 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +32 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/resonate.d.ts +74 -0
  102. package/dist/resonate.d.ts.map +1 -0
  103. package/dist/resonate.js +172 -0
  104. package/dist/resonate.js.map +1 -0
  105. package/package.json +15 -11
@@ -0,0 +1,407 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemoteLockStore = exports.RemoteScheduleStore = exports.RemotePromiseStore = exports.RemoteStore = void 0;
4
+ const base64_1 = require("../encoders/base64");
5
+ const errors_1 = require("../errors");
6
+ const logger_1 = require("../loggers/logger");
7
+ const types_1 = require("../promises/types");
8
+ const types_2 = require("../schedules/types");
9
+ class RemoteStore {
10
+ promises;
11
+ schedules;
12
+ locks;
13
+ constructor(url, pid, logger = new logger_1.Logger(), encoder = new base64_1.Base64Encoder()) {
14
+ this.promises = new RemotePromiseStore(url, logger, encoder);
15
+ this.schedules = new RemoteScheduleStore(url, logger, encoder);
16
+ this.locks = new RemoteLockStore(url, pid, logger);
17
+ }
18
+ }
19
+ exports.RemoteStore = RemoteStore;
20
+ class RemotePromiseStore {
21
+ url;
22
+ logger;
23
+ encoder;
24
+ constructor(url, logger = new logger_1.Logger(), encoder = new base64_1.Base64Encoder()) {
25
+ this.url = url;
26
+ this.logger = logger;
27
+ this.encoder = encoder;
28
+ }
29
+ async create(id, ikey, strict, headers, data, timeout, tags) {
30
+ const reqHeaders = {
31
+ Accept: "application/json",
32
+ "Content-Type": "application/json",
33
+ Strict: JSON.stringify(strict),
34
+ };
35
+ if (ikey !== undefined) {
36
+ reqHeaders["Idempotency-Key"] = ikey;
37
+ }
38
+ const promise = await call(`${this.url}/promises`, types_1.isDurablePromise, {
39
+ method: "POST",
40
+ headers: reqHeaders,
41
+ body: JSON.stringify({
42
+ id: id,
43
+ param: {
44
+ headers: headers,
45
+ data: data ? encode(data, this.encoder) : undefined,
46
+ },
47
+ timeout: timeout,
48
+ tags: tags,
49
+ }),
50
+ }, this.logger);
51
+ return decode(promise, this.encoder);
52
+ }
53
+ async cancel(id, ikey, strict, headers, data) {
54
+ const reqHeaders = {
55
+ Accept: "application/json",
56
+ "Content-Type": "application/json",
57
+ Strict: JSON.stringify(strict),
58
+ };
59
+ if (ikey !== undefined) {
60
+ reqHeaders["Idempotency-Key"] = ikey;
61
+ }
62
+ const promise = await call(`${this.url}/promises/${id}`, types_1.isCompletedPromise, {
63
+ method: "PATCH",
64
+ headers: reqHeaders,
65
+ body: JSON.stringify({
66
+ state: "REJECTED_CANCELED",
67
+ value: {
68
+ headers: headers,
69
+ data: data ? encode(data, this.encoder) : undefined,
70
+ },
71
+ }),
72
+ }, this.logger);
73
+ return decode(promise, this.encoder);
74
+ }
75
+ async resolve(id, ikey, strict, headers, data) {
76
+ const reqHeaders = {
77
+ Accept: "application/json",
78
+ "Content-Type": "application/json",
79
+ Strict: JSON.stringify(strict),
80
+ };
81
+ if (ikey !== undefined) {
82
+ reqHeaders["Idempotency-Key"] = ikey;
83
+ }
84
+ const promise = await call(`${this.url}/promises/${id}`, types_1.isCompletedPromise, {
85
+ method: "PATCH",
86
+ headers: reqHeaders,
87
+ body: JSON.stringify({
88
+ state: "RESOLVED",
89
+ value: {
90
+ headers: headers,
91
+ data: data ? encode(data, this.encoder) : undefined,
92
+ },
93
+ }),
94
+ }, this.logger);
95
+ return decode(promise, this.encoder);
96
+ }
97
+ async reject(id, ikey, strict, headers, data) {
98
+ const reqHeaders = {
99
+ Accept: "application/json",
100
+ "Content-Type": "application/json",
101
+ Strict: JSON.stringify(strict),
102
+ };
103
+ if (ikey !== undefined) {
104
+ reqHeaders["Idempotency-Key"] = ikey;
105
+ }
106
+ const promise = await call(`${this.url}/promises/${id}`, types_1.isCompletedPromise, {
107
+ method: "PATCH",
108
+ headers: reqHeaders,
109
+ body: JSON.stringify({
110
+ state: "REJECTED",
111
+ value: {
112
+ headers: headers,
113
+ data: data ? encode(data, this.encoder) : undefined,
114
+ },
115
+ }),
116
+ }, this.logger);
117
+ return decode(promise, this.encoder);
118
+ }
119
+ async get(id) {
120
+ const promise = await call(`${this.url}/promises/${id}`, types_1.isDurablePromise, {
121
+ method: "GET",
122
+ headers: {
123
+ Accept: "application/json",
124
+ "Content-Type": "application/json",
125
+ },
126
+ }, this.logger);
127
+ return decode(promise, this.encoder);
128
+ }
129
+ async *search(id, state, tags, limit) {
130
+ let cursor = undefined;
131
+ while (cursor !== null) {
132
+ const params = new URLSearchParams({ id });
133
+ if (state !== undefined) {
134
+ params.append("state", state);
135
+ }
136
+ for (const [k, v] of Object.entries(tags ?? {})) {
137
+ params.append(`tags[${k}]`, v);
138
+ }
139
+ if (limit !== undefined) {
140
+ params.append("limit", limit.toString());
141
+ }
142
+ if (cursor !== undefined) {
143
+ params.append("cursor", cursor);
144
+ }
145
+ const url = new URL(`${this.url}/promises`);
146
+ url.search = params.toString();
147
+ const res = await call(url.toString(), isSearchPromiseResult, {
148
+ method: "GET",
149
+ headers: {
150
+ Accept: "application/json",
151
+ "Content-Type": "application/json",
152
+ },
153
+ }, this.logger);
154
+ cursor = res.cursor;
155
+ yield res.promises.map((p) => decode(p, this.encoder));
156
+ }
157
+ }
158
+ }
159
+ exports.RemotePromiseStore = RemotePromiseStore;
160
+ class RemoteScheduleStore {
161
+ url;
162
+ logger;
163
+ encoder;
164
+ constructor(url, logger = new logger_1.Logger(), encoder = new base64_1.Base64Encoder()) {
165
+ this.url = url;
166
+ this.logger = logger;
167
+ this.encoder = encoder;
168
+ }
169
+ async create(id, ikey, description, cron, tags, promiseId, promiseTimeout, promiseHeaders, promiseData, promiseTags) {
170
+ const reqHeaders = {
171
+ Accept: "application/json",
172
+ "Content-Type": "application/json",
173
+ };
174
+ if (ikey !== undefined) {
175
+ reqHeaders["Idempotency-Key"] = ikey;
176
+ }
177
+ const schedule = call(`${this.url}/schedules`, types_2.isSchedule, {
178
+ method: "POST",
179
+ headers: reqHeaders,
180
+ body: JSON.stringify({
181
+ id,
182
+ description,
183
+ cron,
184
+ tags,
185
+ promiseId,
186
+ promiseTimeout,
187
+ promiseParam: {
188
+ headers: promiseHeaders,
189
+ data: promiseData ? encode(promiseData, this.encoder) : undefined,
190
+ },
191
+ promiseTags,
192
+ }),
193
+ }, this.logger);
194
+ return schedule;
195
+ }
196
+ async get(id) {
197
+ const schedule = call(`${this.url}/schedules/${id}`, types_2.isSchedule, {
198
+ method: "GET",
199
+ headers: {
200
+ Accept: "application/json",
201
+ "Content-Type": "application/json",
202
+ },
203
+ }, this.logger);
204
+ return schedule;
205
+ }
206
+ async delete(id) {
207
+ await call(`${this.url}/schedules/${id}`, (b) => true, {
208
+ method: "DELETE",
209
+ headers: {
210
+ Accept: "application/json",
211
+ "Content-Type": "application/json",
212
+ },
213
+ }, this.logger);
214
+ }
215
+ async *search(id, tags, limit) {
216
+ let cursor = undefined;
217
+ while (cursor !== null) {
218
+ const params = new URLSearchParams({ id });
219
+ for (const [k, v] of Object.entries(tags ?? {})) {
220
+ params.append(`tags[${k}]`, v);
221
+ }
222
+ if (limit !== undefined) {
223
+ params.append("limit", limit.toString());
224
+ }
225
+ if (cursor !== undefined) {
226
+ params.append("cursor", cursor);
227
+ }
228
+ const url = new URL(`${this.url}/schedules`);
229
+ url.search = params.toString();
230
+ const res = await call(url.toString(), isSearchSchedulesResult, {
231
+ method: "GET",
232
+ headers: {
233
+ Accept: "application/json",
234
+ "Content-Type": "application/json",
235
+ },
236
+ }, this.logger);
237
+ cursor = res.cursor;
238
+ yield res.schedules;
239
+ }
240
+ }
241
+ }
242
+ exports.RemoteScheduleStore = RemoteScheduleStore;
243
+ class RemoteLockStore {
244
+ url;
245
+ pid;
246
+ logger;
247
+ lockTimeout;
248
+ heartbeatDelay;
249
+ hearbeatInterval = null;
250
+ constructor(url, pid, logger = new logger_1.Logger(), lockTimeout = 60000) {
251
+ this.url = url;
252
+ this.pid = pid;
253
+ this.logger = logger;
254
+ this.lockTimeout = lockTimeout;
255
+ this.heartbeatDelay = this.lockTimeout / 4;
256
+ }
257
+ async tryAcquire(resourceId, executionId) {
258
+ const acquired = call(`${this.url}/locks/acquire`, (b) => true, {
259
+ method: "POST",
260
+ body: JSON.stringify({
261
+ resourceId: resourceId,
262
+ processId: this.pid,
263
+ executionId: executionId,
264
+ expiryInSeconds: this.lockTimeout / 1000,
265
+ }),
266
+ }, this.logger);
267
+ // lazily start the heartbeat
268
+ this.startHeartbeat();
269
+ if (await acquired) {
270
+ return true;
271
+ }
272
+ return false;
273
+ }
274
+ async release(resourceId, executionId) {
275
+ return call(`${this.url}/locks/release`, (b) => b === undefined, {
276
+ method: "POST",
277
+ headers: {
278
+ "Content-Type": "application/json",
279
+ },
280
+ body: JSON.stringify({
281
+ resourceId,
282
+ executionId,
283
+ }),
284
+ }, this.logger);
285
+ }
286
+ startHeartbeat() {
287
+ if (this.hearbeatInterval === null) {
288
+ // the + converts to a number
289
+ this.hearbeatInterval = +setInterval(() => this.heartbeat(), this.heartbeatDelay);
290
+ }
291
+ }
292
+ stopHeartbeat() {
293
+ if (this.hearbeatInterval !== null) {
294
+ clearInterval(this.hearbeatInterval);
295
+ this.hearbeatInterval = null;
296
+ }
297
+ }
298
+ async heartbeat() {
299
+ const res = await call(`${this.url}/locks/heartbeat`, (b) => typeof b === "object" && b !== null && "locksAffected" in b && typeof b.locksAffected === "number", {
300
+ method: "POST",
301
+ headers: {
302
+ "Content-Type": "application/json",
303
+ },
304
+ body: JSON.stringify({
305
+ processId: this.pid,
306
+ }),
307
+ }, this.logger);
308
+ if (res.locksAffected === 0) {
309
+ this.stopHeartbeat();
310
+ }
311
+ return res.locksAffected;
312
+ }
313
+ }
314
+ exports.RemoteLockStore = RemoteLockStore;
315
+ // Utils
316
+ async function call(url, guard, options, logger, retries = 3) {
317
+ let error;
318
+ for (let i = 0; i < retries; i++) {
319
+ try {
320
+ logger.debug("store:req", {
321
+ method: options.method,
322
+ url: url,
323
+ headers: options.headers,
324
+ body: options.body,
325
+ });
326
+ const r = await fetch(url, options);
327
+ const body = r.status !== 204 ? await r.json() : undefined;
328
+ logger.debug("store:res", {
329
+ status: r.status,
330
+ body: body,
331
+ });
332
+ if (!r.ok) {
333
+ switch (r.status) {
334
+ case 400:
335
+ throw new errors_1.ResonateError("Invalid request", errors_1.ErrorCodes.STORE_PAYLOAD, body);
336
+ case 403:
337
+ throw new errors_1.ResonateError("Forbidden request", errors_1.ErrorCodes.STORE_FORBIDDEN, body);
338
+ case 404:
339
+ throw new errors_1.ResonateError("Not found", errors_1.ErrorCodes.STORE_NOT_FOUND, body);
340
+ case 409:
341
+ throw new errors_1.ResonateError("Already exists", errors_1.ErrorCodes.STORE_ALREADY_EXISTS, body);
342
+ default:
343
+ throw new errors_1.ResonateError("Server error", errors_1.ErrorCodes.STORE, body, true);
344
+ }
345
+ }
346
+ if (!guard(body)) {
347
+ throw new errors_1.ResonateError("Invalid response", errors_1.ErrorCodes.STORE_PAYLOAD, body);
348
+ }
349
+ return body;
350
+ }
351
+ catch (e) {
352
+ if (e instanceof errors_1.ResonateError && !e.retriable) {
353
+ throw e;
354
+ }
355
+ else {
356
+ error = e;
357
+ }
358
+ }
359
+ }
360
+ throw errors_1.ResonateError.fromError(error);
361
+ }
362
+ function encode(value, encoder) {
363
+ try {
364
+ return encoder.encode(value);
365
+ }
366
+ catch (e) {
367
+ throw new errors_1.ResonateError("Encoder error", errors_1.ErrorCodes.STORE_ENCODER, e);
368
+ }
369
+ }
370
+ function decode(promise, encoder) {
371
+ try {
372
+ if (promise.param?.data) {
373
+ promise.param.data = encoder.decode(promise.param.data);
374
+ }
375
+ if (promise.value?.data) {
376
+ promise.value.data = encoder.decode(promise.value.data);
377
+ }
378
+ return promise;
379
+ }
380
+ catch (e) {
381
+ throw new errors_1.ResonateError("Decoder error", errors_1.ErrorCodes.STORE_ENCODER, e);
382
+ }
383
+ }
384
+ // Type guards
385
+ function isSearchPromiseResult(obj) {
386
+ return (typeof obj === "object" &&
387
+ obj !== null &&
388
+ "cursor" in obj &&
389
+ obj.cursor !== undefined &&
390
+ (obj.cursor === null || typeof obj.cursor === "string") &&
391
+ "promises" in obj &&
392
+ obj.promises !== undefined &&
393
+ Array.isArray(obj.promises) &&
394
+ obj.promises.every(types_1.isDurablePromise));
395
+ }
396
+ function isSearchSchedulesResult(obj) {
397
+ return (typeof obj === "object" &&
398
+ obj !== null &&
399
+ "cursor" in obj &&
400
+ obj.cursor !== undefined &&
401
+ (obj.cursor === null || typeof obj.cursor === "string") &&
402
+ "schedules" in obj &&
403
+ obj.schedules !== undefined &&
404
+ Array.isArray(obj.schedules) &&
405
+ obj.schedules.every(types_2.isSchedule));
406
+ }
407
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../lib/core/stores/remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function randomId(): string;
2
+ export declare function hash(s: string): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/core/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAUtC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hash = exports.randomId = void 0;
4
+ function randomId() {
5
+ return Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16);
6
+ }
7
+ exports.randomId = randomId;
8
+ function hash(s) {
9
+ let h = 0;
10
+ for (let i = 0; i < s.length; i++) {
11
+ h = (Math.imul(31, h) + s.charCodeAt(i)) | 0;
12
+ }
13
+ // Generate fixed length hexadecimal hash
14
+ const hashString = (Math.abs(h) >>> 0).toString(16); // Convert to unsigned int and then to hexadecimal
15
+ const maxLength = 8;
16
+ return "0".repeat(Math.max(0, maxLength - hashString.length)) + hashString;
17
+ }
18
+ exports.hash = hash;
19
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/core/utils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,QAAQ;IACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAFD,4BAEC;AAED,SAAgB,IAAI,CAAC,CAAS;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,yCAAyC;IACzC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,kDAAkD;IACvG,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC;AAC7E,CAAC;AAVD,oBAUC"}
@@ -0,0 +1,187 @@
1
+ import { Future, ResonatePromise } from "./core/future";
2
+ import { Invocation } from "./core/invocation";
3
+ import { ResonateOptions, Options, PartialOptions } from "./core/options";
4
+ import { ResonateBase } from "./resonate";
5
+ export type GFunc = (ctx: Context, ...args: any[]) => Generator<Yieldable>;
6
+ export type IFunc = (info: Info, ...args: any[]) => any;
7
+ export type Params<F> = F extends (ctx: any, ...args: infer P) => any ? P : never;
8
+ export type Return<F> = F extends (...args: any[]) => Generator<any, infer T> ? T : never;
9
+ export type Yieldable = Call | Future<any>;
10
+ export type Call = {
11
+ kind: "call";
12
+ value: ResonateFunction | OrdinaryFunction | DeferredFunction;
13
+ yieldFuture: boolean;
14
+ };
15
+ type ResonateFunction = {
16
+ kind: "resonate";
17
+ func: GFunc;
18
+ args: any[];
19
+ opts: Options;
20
+ };
21
+ type OrdinaryFunction = {
22
+ kind: "ordinary";
23
+ func: IFunc;
24
+ args: any[];
25
+ opts: Options;
26
+ };
27
+ type DeferredFunction = {
28
+ kind: "deferred";
29
+ func: string;
30
+ args: any;
31
+ opts: Options;
32
+ };
33
+ export declare class Resonate extends ResonateBase {
34
+ private scheduler;
35
+ /**
36
+ * Creates a Resonate instance. This is the starting point for using Resonate.
37
+ *
38
+ * @constructor
39
+ * @param opts - A partial {@link ResonateOptions} object.
40
+ */
41
+ constructor(opts?: Partial<ResonateOptions>);
42
+ /**
43
+ * Register a function with Resonate. Registered functions can be invoked by calling {@link run}, or by the returned function.
44
+ *
45
+ * @template F The type of the generator function.
46
+ * @param name A unique name to identify the function.
47
+ * @param func The generator function to register with Resonate.
48
+ * @param opts Resonate options, can be constructed by calling {@link options}.
49
+ * @returns Resonate function
50
+ */
51
+ register<F extends GFunc>(name: string, func: F, opts?: Partial<Options>): (id: string, ...args: any) => ResonatePromise<Return<F>>;
52
+ /**
53
+ * Register a function with Resonate. Registered functions can be invoked by calling {@link run}, or by the returned function.
54
+ *
55
+ * @template F The type of the generator function.
56
+ * @param name A unique name to identify the function.
57
+ * @param version Version of the function.
58
+ * @param func The generator function to register with Resonate.
59
+ * @param opts Resonate options, can be constructed by calling {@link options}.
60
+ * @returns Resonate function
61
+ */
62
+ register<F extends GFunc>(name: string, version: number, func: F, opts?: Partial<Options>): (id: string, ...args: any) => ResonatePromise<Return<F>>;
63
+ /**
64
+ * Register a module with Resonate. Registered functions can be invoked by calling {@link run}.
65
+ *
66
+ * @template F The type of the generator function.
67
+ * @param module The module to register with Resonate.
68
+ * @param opts Resonate options, can be constructed by calling {@link options}.
69
+ * @returns Resonate function
70
+ */
71
+ registerModule<F extends GFunc>(module: Record<string, F>, opts?: Partial<Options>): void;
72
+ protected execute<F extends GFunc>(name: string, version: number, id: string, func: F, args: Params<F>, opts: Options): ResonatePromise<Return<F>>;
73
+ }
74
+ export declare class Info {
75
+ private invocation;
76
+ constructor(invocation: Invocation<any>);
77
+ /**
78
+ * The running count of function execution attempts.
79
+ */
80
+ get attempt(): number;
81
+ /**
82
+ * Uniquely identifies the function invocation.
83
+ */
84
+ get id(): string;
85
+ /**
86
+ * Deduplicates function invocations with the same id.
87
+ */
88
+ get idempotencyKey(): string | undefined;
89
+ /**
90
+ * The timestamp in ms, once this time elapses the function invocation will timeout.
91
+ */
92
+ get timeout(): number;
93
+ /**
94
+ * The resonate function version.
95
+ */
96
+ get version(): number;
97
+ }
98
+ export declare class Context {
99
+ private invocation;
100
+ constructor(invocation: Invocation<any>);
101
+ /**
102
+ * The running count of child function invocations.
103
+ */
104
+ get counter(): number;
105
+ /**
106
+ * Uniquely identifies the function invocation.
107
+ */
108
+ get id(): string;
109
+ /**
110
+ * Deduplicates function invocations with the same id.
111
+ */
112
+ get idempotencyKey(): string | undefined;
113
+ /**
114
+ * The timestamp in ms, once this time elapses the function invocation will timeout.
115
+ */
116
+ get timeout(): number;
117
+ /**
118
+ * The resonate function version.
119
+ */
120
+ get version(): number;
121
+ /**
122
+ * Invoke a generator function.
123
+ *
124
+ * @template F The type of the generator function.
125
+ * @param func The function to invoke.
126
+ * @param args The function arguments, optionally followed by {@link options}.
127
+ * @returns A {@link Call} that can be yielded for a value.
128
+ */
129
+ run<F extends GFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
130
+ /**
131
+ * Invoke a function.
132
+ *
133
+ * @template F The type of the function.
134
+ * @param func The function to invoke.
135
+ * @param args The function arguments, optionally followed by {@link options}.
136
+ * @returns A {@link Call} that can be yielded for a value.
137
+ */
138
+ run<F extends IFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
139
+ /**
140
+ * Invoke a remote function.
141
+ *
142
+ * @param func The id of the remote function.
143
+ * @param args The arguments to pass to the remote function.
144
+ * @param opts Optional {@link options}.
145
+ * @returns A {@link Call} that can be yielded for a value.
146
+ */
147
+ run(func: string, args?: any, opts?: PartialOptions): Call;
148
+ /**
149
+ * Invoke a generator function.
150
+ *
151
+ * @template F The type of the generator function.
152
+ * @param func The function to invoke.
153
+ * @param args The function arguments, optionally followed by {@link options}.
154
+ * @returns A {@link Call} that can be yielded for a {@link Future}.
155
+ */
156
+ call<F extends GFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
157
+ /**
158
+ * Invoke a function.
159
+ *
160
+ * @template F The type of the function.
161
+ * @param func The function to invoke.
162
+ * @param args The function arguments, optionally followed by {@link options}.
163
+ * @returns A {@link Call} that can be yielded for a {@link Future}.
164
+ */
165
+ call<F extends IFunc>(func: F, ...args: [...Params<F>, PartialOptions?]): Call;
166
+ /**
167
+ * Invoke a remote function.
168
+ *
169
+ * @param func The id of the remote function.
170
+ * @param args The arguments to pass to the remote function.
171
+ * @param opts Optional {@link options}.
172
+ * @returns A {@link Call} that can be yielded for a {@link Future}.
173
+ */
174
+ call(func: string, args?: any, opts?: PartialOptions): Call;
175
+ private _call;
176
+ /**
177
+ * Construct options.
178
+ *
179
+ * @param opts A partial {@link Options} object.
180
+ * @returns Options with the __resonate flag set.
181
+ */
182
+ options(opts?: Partial<Options>): Partial<Options> & {
183
+ __resonate: true;
184
+ };
185
+ }
186
+ export {};
187
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../lib/generator.ts"],"names":[],"mappings":"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"}