@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.
- package/README.md +84 -12
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +12 -0
- package/dist/clock.js.map +1 -0
- package/dist/codec.d.ts +11 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +115 -0
- package/dist/codec.js.map +1 -0
- package/dist/computation.d.ts +40 -0
- package/dist/computation.d.ts.map +1 -0
- package/dist/computation.js +152 -0
- package/dist/computation.js.map +1 -0
- package/dist/{src/context.d.ts → context.d.ts} +70 -40
- package/dist/context.d.ts.map +1 -0
- package/dist/{src/context.js → context.js} +140 -155
- package/dist/context.js.map +1 -0
- package/dist/core.d.ts +45 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +140 -0
- package/dist/core.js.map +1 -0
- package/dist/coroutine.d.ts +37 -0
- package/dist/coroutine.d.ts.map +1 -0
- package/dist/coroutine.js +259 -0
- package/dist/coroutine.js.map +1 -0
- package/dist/{src/decorator.d.ts → decorator.d.ts} +9 -8
- package/dist/decorator.d.ts.map +1 -0
- package/dist/decorator.js +150 -0
- package/dist/decorator.js.map +1 -0
- package/dist/encryptor.d.ts +10 -0
- package/dist/encryptor.d.ts.map +1 -0
- package/dist/encryptor.js +9 -0
- package/dist/encryptor.js.map +1 -0
- package/dist/{src/exceptions.d.ts → exceptions.d.ts} +4 -1
- package/dist/exceptions.d.ts.map +1 -0
- package/dist/{src/exceptions.js → exceptions.js} +11 -11
- package/dist/exceptions.js.map +1 -0
- package/dist/{src/heartbeat.d.ts → heartbeat.d.ts} +5 -3
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +50 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +33 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +54 -0
- package/dist/logger.js.map +1 -0
- package/dist/network/http.d.ts +86 -0
- package/dist/network/http.d.ts.map +1 -0
- package/dist/network/http.js +350 -0
- package/dist/network/http.js.map +1 -0
- package/dist/network/local.d.ts +188 -0
- package/dist/network/local.d.ts.map +1 -0
- package/dist/network/local.js +1349 -0
- package/dist/network/local.js.map +1 -0
- package/dist/network/network.d.ts +17 -0
- package/dist/network/network.d.ts.map +1 -0
- package/dist/network/network.js +2 -0
- package/dist/network/network.js.map +1 -0
- package/dist/network/types.d.ts +1280 -0
- package/dist/network/types.d.ts.map +1 -0
- package/dist/network/types.js +920 -0
- package/dist/network/types.js.map +1 -0
- package/dist/{src/options.d.ts → options.d.ts} +15 -6
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +34 -0
- package/dist/options.js.map +1 -0
- package/dist/promises.d.ts +54 -0
- package/dist/promises.d.ts.map +1 -0
- package/dist/promises.js +122 -0
- package/dist/promises.js.map +1 -0
- package/dist/{src/registry.d.ts → registry.d.ts} +1 -1
- package/dist/registry.d.ts.map +1 -0
- package/dist/{src/registry.js → registry.js} +6 -13
- package/dist/registry.js.map +1 -0
- package/dist/resonate.d.ts +168 -0
- package/dist/resonate.d.ts.map +1 -0
- package/dist/resonate.js +475 -0
- package/dist/resonate.js.map +1 -0
- package/dist/retries.d.ts.map +1 -0
- package/dist/{src/retries.js → retries.js} +4 -11
- package/dist/retries.js.map +1 -0
- package/dist/schedules.d.ts +22 -0
- package/dist/schedules.d.ts.map +1 -0
- package/dist/schedules.js +65 -0
- package/dist/schedules.js.map +1 -0
- package/dist/trace.d.ts +79 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +224 -0
- package/dist/trace.js.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +28 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +196 -0
- package/dist/util.js.map +1 -0
- package/package.json +18 -10
- package/dist/dev/network.d.ts +0 -34
- package/dist/dev/network.d.ts.map +0 -1
- package/dist/dev/network.js +0 -115
- package/dist/dev/network.js.map +0 -1
- package/dist/dev/server.d.ts +0 -89
- package/dist/dev/server.d.ts.map +0 -1
- package/dist/dev/server.js +0 -890
- package/dist/dev/server.js.map +0 -1
- package/dist/sim/example-1.d.ts +0 -2
- package/dist/sim/example-1.d.ts.map +0 -1
- package/dist/sim/example-1.js +0 -95
- package/dist/sim/example-1.js.map +0 -1
- package/dist/sim/example-2.d.ts +0 -2
- package/dist/sim/example-2.d.ts.map +0 -1
- package/dist/sim/example-2.js +0 -97
- package/dist/sim/example-2.js.map +0 -1
- package/dist/sim/example-3.d.ts +0 -2
- package/dist/sim/example-3.d.ts.map +0 -1
- package/dist/sim/example-3.js +0 -97
- package/dist/sim/example-3.js.map +0 -1
- package/dist/sim/main.d.ts +0 -14
- package/dist/sim/main.d.ts.map +0 -1
- package/dist/sim/main.js +0 -207
- package/dist/sim/main.js.map +0 -1
- package/dist/sim/src/server.d.ts +0 -15
- package/dist/sim/src/server.d.ts.map +0 -1
- package/dist/sim/src/server.js +0 -85
- package/dist/sim/src/server.js.map +0 -1
- package/dist/sim/src/simulator.d.ts +0 -65
- package/dist/sim/src/simulator.d.ts.map +0 -1
- package/dist/sim/src/simulator.js +0 -236
- package/dist/sim/src/simulator.js.map +0 -1
- package/dist/sim/src/worker.d.ts +0 -23
- package/dist/sim/src/worker.d.ts.map +0 -1
- package/dist/sim/src/worker.js +0 -217
- package/dist/sim/src/worker.js.map +0 -1
- package/dist/src/clock.d.ts.map +0 -1
- package/dist/src/clock.js +0 -17
- package/dist/src/clock.js.map +0 -1
- package/dist/src/computation.d.ts +0 -49
- package/dist/src/computation.d.ts.map +0 -1
- package/dist/src/computation.js +0 -314
- package/dist/src/computation.js.map +0 -1
- package/dist/src/context.d.ts.map +0 -1
- package/dist/src/context.js.map +0 -1
- package/dist/src/core.d.ts +0 -12
- package/dist/src/core.d.ts.map +0 -1
- package/dist/src/core.js +0 -28
- package/dist/src/core.js.map +0 -1
- package/dist/src/coroutine.d.ts +0 -42
- package/dist/src/coroutine.d.ts.map +0 -1
- package/dist/src/coroutine.js +0 -364
- package/dist/src/coroutine.js.map +0 -1
- package/dist/src/decorator.d.ts.map +0 -1
- package/dist/src/decorator.js +0 -220
- package/dist/src/decorator.js.map +0 -1
- package/dist/src/encoder.d.ts +0 -12
- package/dist/src/encoder.d.ts.map +0 -1
- package/dist/src/encoder.js +0 -101
- package/dist/src/encoder.js.map +0 -1
- package/dist/src/encryptor.d.ts +0 -10
- package/dist/src/encryptor.d.ts.map +0 -1
- package/dist/src/encryptor.js +0 -13
- package/dist/src/encryptor.js.map +0 -1
- package/dist/src/exceptions.d.ts.map +0 -1
- package/dist/src/exceptions.js.map +0 -1
- package/dist/src/handler.d.ts +0 -49
- package/dist/src/handler.d.ts.map +0 -1
- package/dist/src/handler.js +0 -316
- package/dist/src/handler.js.map +0 -1
- package/dist/src/heartbeat.d.ts.map +0 -1
- package/dist/src/heartbeat.js +0 -87
- package/dist/src/heartbeat.js.map +0 -1
- package/dist/src/index.d.ts +0 -15
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -61
- package/dist/src/index.js.map +0 -1
- package/dist/src/network/network.d.ts +0 -254
- package/dist/src/network/network.d.ts.map +0 -1
- package/dist/src/network/network.js +0 -4
- package/dist/src/network/network.js.map +0 -1
- package/dist/src/network/remote.d.ts +0 -85
- package/dist/src/network/remote.d.ts.map +0 -1
- package/dist/src/network/remote.js +0 -523
- package/dist/src/network/remote.js.map +0 -1
- package/dist/src/nursery.d.ts +0 -19
- package/dist/src/nursery.d.ts.map +0 -1
- package/dist/src/nursery.js +0 -102
- package/dist/src/nursery.js.map +0 -1
- package/dist/src/options.d.ts.map +0 -1
- package/dist/src/options.js +0 -70
- package/dist/src/options.js.map +0 -1
- package/dist/src/processor/processor.d.ts +0 -12
- package/dist/src/processor/processor.d.ts.map +0 -1
- package/dist/src/processor/processor.js +0 -43
- package/dist/src/processor/processor.js.map +0 -1
- package/dist/src/promises.d.ts +0 -54
- package/dist/src/promises.d.ts.map +0 -1
- package/dist/src/promises.js +0 -169
- package/dist/src/promises.js.map +0 -1
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js.map +0 -1
- package/dist/src/resonate-inner.d.ts +0 -60
- package/dist/src/resonate-inner.d.ts.map +0 -1
- package/dist/src/resonate-inner.js +0 -97
- package/dist/src/resonate-inner.js.map +0 -1
- package/dist/src/resonate.d.ts +0 -341
- package/dist/src/resonate.d.ts.map +0 -1
- package/dist/src/resonate.js +0 -591
- package/dist/src/resonate.js.map +0 -1
- package/dist/src/retries.d.ts.map +0 -1
- package/dist/src/retries.js.map +0 -1
- package/dist/src/schedules.d.ts +0 -19
- package/dist/src/schedules.d.ts.map +0 -1
- package/dist/src/schedules.js +0 -85
- package/dist/src/schedules.js.map +0 -1
- package/dist/src/tasks.d.ts +0 -9
- package/dist/src/tasks.d.ts.map +0 -1
- package/dist/src/tasks.js +0 -61
- package/dist/src/tasks.js.map +0 -1
- package/dist/src/tracer.d.ts +0 -23
- package/dist/src/tracer.d.ts.map +0 -1
- package/dist/src/tracer.js +0 -25
- package/dist/src/tracer.js.map +0 -1
- package/dist/src/types.d.ts +0 -28
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -11
- package/dist/src/types.js.map +0 -1
- package/dist/src/util.d.ts +0 -20
- package/dist/src/util.d.ts.map +0 -1
- package/dist/src/util.js +0 -120
- package/dist/src/util.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- /package/dist/{src/clock.d.ts → clock.d.ts} +0 -0
- /package/dist/{src/retries.d.ts → retries.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,33 +1,105 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
3
|
# Resonate TypeScript SDK
|
|
4
4
|
|
|
5
5
|
[](https://github.com/resonatehq/resonate-sdk-ts/actions/workflows/cicd.yaml)
|
|
6
6
|
[](https://codecov.io/gh/resonatehq/resonate-sdk-ts)
|
|
7
|
+
[](https://github.com/resonatehq/resonate-sdk-ts/actions/workflows/dst.yml)
|
|
7
8
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
8
9
|
|
|
9
10
|
## About this component
|
|
10
11
|
|
|
11
12
|
The Resonate TypeScript SDK enables developers to build reliable and scalable cloud applications across a wide variety of use cases.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
- [How to contribute to this SDK](./CONTRIBUTING.md)
|
|
15
|
+
- [Evaluate Resonate for your next project](https://docs.resonatehq.io/evaluate/)
|
|
16
|
+
- [Example application library](https://github.com/resonatehq-examples)
|
|
17
|
+
- [Join the Discord](https://resonatehq.io/discord)
|
|
18
|
+
- [Subscribe to the Blog](https://journal.resonatehq.io/subscribe)
|
|
19
|
+
- [Follow on X](https://x.com/resonatehqio)
|
|
20
|
+
- [Follow on LinkedIn](https://www.linkedin.com/company/resonatehqio)
|
|
21
|
+
- [Subscribe on YouTube](https://www.youtube.com/@resonatehqio)
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
## Quickstart
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+

|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
1. Install the Resonate Server & CLI
|
|
20
28
|
|
|
21
|
-
|
|
29
|
+
```shell
|
|
30
|
+
brew install resonatehq/tap/resonate
|
|
31
|
+
```
|
|
22
32
|
|
|
23
|
-
|
|
33
|
+
2. Install the Resonate SDK
|
|
24
34
|
|
|
25
|
-
|
|
35
|
+
```shell
|
|
36
|
+
npm install @resonatehq/sdk
|
|
37
|
+
```
|
|
26
38
|
|
|
27
|
-
|
|
39
|
+
3. Write your first Resonate Function
|
|
28
40
|
|
|
29
|
-
|
|
41
|
+
A countdown as a loop. Simple, but the function can run for minutes, hours, or days, despite restarts.
|
|
30
42
|
|
|
31
|
-
|
|
43
|
+
```typescript
|
|
44
|
+
import { Resonate, type Context } from "@resonatehq/sdk";
|
|
32
45
|
|
|
33
|
-
|
|
46
|
+
function* countdown(context: Context, count: number, delay: number) {
|
|
47
|
+
for (let i = count; i > 0; i--) {
|
|
48
|
+
// Run a function, persist its result
|
|
49
|
+
yield* context.run((context: Context) => console.log(`Countdown: ${i}`));
|
|
50
|
+
// Sleep
|
|
51
|
+
yield* context.sleep(delay * 1000);
|
|
52
|
+
}
|
|
53
|
+
console.log("Done!");
|
|
54
|
+
}
|
|
55
|
+
// Instantiate Resonate
|
|
56
|
+
const resonate = new Resonate({ url: "http://localhost:8001" });
|
|
57
|
+
// Register the function
|
|
58
|
+
resonate.register(countdown);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
[Clone a working example repo](https://github.com/resonatehq-examples/example-quickstart-ts)
|
|
62
|
+
|
|
63
|
+
4. Start the server
|
|
64
|
+
|
|
65
|
+
```shell
|
|
66
|
+
resonate dev
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
5. Start the worker
|
|
70
|
+
|
|
71
|
+
```shell
|
|
72
|
+
npx ts-node countdown.ts
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
6. Run the function
|
|
76
|
+
|
|
77
|
+
Run the function with execution ID `countdown.1`:
|
|
78
|
+
|
|
79
|
+
```shell
|
|
80
|
+
resonate invoke countdown.1 --func countdown --arg 5 --arg 60
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Result**
|
|
84
|
+
|
|
85
|
+
You will see the countdown in the terminal
|
|
86
|
+
|
|
87
|
+
```shell
|
|
88
|
+
npx ts-node countdown.ts
|
|
89
|
+
Countdown: 5
|
|
90
|
+
Countdown: 4
|
|
91
|
+
Countdown: 3
|
|
92
|
+
Countdown: 2
|
|
93
|
+
Countdown: 1
|
|
94
|
+
Done!
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**What to try**
|
|
98
|
+
|
|
99
|
+
After starting the function, inspect the current state of the execution using the `resonate tree` command. The tree command visualizes the call graph of the function execution as a graph of durable promises.
|
|
100
|
+
|
|
101
|
+
```shell
|
|
102
|
+
resonate tree countdown.1
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Now try killing the worker mid-countdown and restarting. **The countdown picks up right where it left off without missing a beat.**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../src/clock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,GAAG,IAAI,MAAM,CAAC;CACf;AAED,qBAAa,SAAS;IACpB,GAAG,IAAI,MAAM;CAGd;AAED,qBAAa,SAAS;IACb,IAAI,SAAK;IAChB,GAAG,IAAI,MAAM;CAGd"}
|
package/dist/clock.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../src/clock.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,SAAS;IACpB,GAAG;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;CACF;AAED,MAAM,OAAO,SAAS;IACb,IAAI,GAAG,CAAC,CAAC;IAChB,GAAG;QACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/dist/codec.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Encryptor } from "./encryptor.js";
|
|
2
|
+
import type { PromiseRecord, Value } from "./network/types.js";
|
|
3
|
+
export declare class Codec {
|
|
4
|
+
private encoder;
|
|
5
|
+
private encryptor;
|
|
6
|
+
constructor(encryptor?: Encryptor);
|
|
7
|
+
encode(value: any): Value;
|
|
8
|
+
decode(value: Value | undefined): any | undefined;
|
|
9
|
+
decodePromise(promise: PromiseRecord): PromiseRecord;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,gBAAgB,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AA8E/D,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,GAAE,SAA+B;IAKtD,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK;IAWzB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS;IAajD,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa;CAUrD"}
|
package/dist/codec.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { NoopEncryptor } from "./encryptor.js";
|
|
2
|
+
import exceptions from "./exceptions.js";
|
|
3
|
+
import * as util from "./util.js";
|
|
4
|
+
class JsonEncoder {
|
|
5
|
+
inf = "__INF__";
|
|
6
|
+
negInf = "__NEG_INF__";
|
|
7
|
+
encode(value) {
|
|
8
|
+
if (value === undefined) {
|
|
9
|
+
return { data: "", headers: {} };
|
|
10
|
+
}
|
|
11
|
+
let json;
|
|
12
|
+
try {
|
|
13
|
+
json = JSON.stringify(value, (_, v) => {
|
|
14
|
+
if (v === Number.POSITIVE_INFINITY)
|
|
15
|
+
return this.inf;
|
|
16
|
+
if (v === Number.NEGATIVE_INFINITY)
|
|
17
|
+
return this.negInf;
|
|
18
|
+
if (v instanceof AggregateError) {
|
|
19
|
+
return {
|
|
20
|
+
__type: "aggregate_error",
|
|
21
|
+
message: v.message,
|
|
22
|
+
stack: v.stack,
|
|
23
|
+
name: v.name,
|
|
24
|
+
errors: v.errors,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (v instanceof Error) {
|
|
28
|
+
return {
|
|
29
|
+
__type: "error",
|
|
30
|
+
message: v.message,
|
|
31
|
+
stack: v.stack,
|
|
32
|
+
name: v.name,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return v;
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
headers: {},
|
|
39
|
+
data: util.base64Encode(json),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
throw exceptions.ENCODING_ARGS_UNENCODEABLE("unknown", e);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
decode(value) {
|
|
47
|
+
if (!value?.data) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const decoded = JSON.parse(util.base64Decode(value.data), (_, v) => {
|
|
52
|
+
if (v === this.inf)
|
|
53
|
+
return Number.POSITIVE_INFINITY;
|
|
54
|
+
if (v === this.negInf)
|
|
55
|
+
return Number.NEGATIVE_INFINITY;
|
|
56
|
+
if (v?.__type === "aggregate_error") {
|
|
57
|
+
return Object.assign(new AggregateError(v.errors, v.message), v);
|
|
58
|
+
}
|
|
59
|
+
if (v?.__type === "error") {
|
|
60
|
+
const err = new Error(v.message || "Unknown error");
|
|
61
|
+
if (v.name)
|
|
62
|
+
err.name = v.name;
|
|
63
|
+
if (v.stack)
|
|
64
|
+
err.stack = v.stack;
|
|
65
|
+
return err;
|
|
66
|
+
}
|
|
67
|
+
return v;
|
|
68
|
+
});
|
|
69
|
+
return decoded;
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
throw exceptions.ENCODING_ARGS_UNDECODEABLE("unknown", e);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export class Codec {
|
|
77
|
+
encoder;
|
|
78
|
+
encryptor;
|
|
79
|
+
constructor(encryptor = new NoopEncryptor()) {
|
|
80
|
+
this.encoder = new JsonEncoder();
|
|
81
|
+
this.encryptor = encryptor;
|
|
82
|
+
}
|
|
83
|
+
encode(value) {
|
|
84
|
+
const encoded = this.encoder.encode(value);
|
|
85
|
+
try {
|
|
86
|
+
const encrypted = this.encryptor.encrypt(encoded);
|
|
87
|
+
return encrypted;
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
throw exceptions.ENCODING_ARGS_UNENCODEABLE("unknown", e);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
decode(value) {
|
|
94
|
+
if (!value?.data) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const decrypted = this.encryptor.decrypt(value);
|
|
99
|
+
return this.encoder.decode(decrypted);
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
throw exceptions.ENCODING_ARGS_UNDECODEABLE("unknown", e);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
decodePromise(promise) {
|
|
106
|
+
const param = this.decode(promise.param);
|
|
107
|
+
const value = this.decode(promise.value);
|
|
108
|
+
return {
|
|
109
|
+
...promise,
|
|
110
|
+
param: { headers: promise.param?.headers, data: param },
|
|
111
|
+
value: { headers: promise.value?.headers, data: value },
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Clock } from "./clock.js";
|
|
2
|
+
import type { Heartbeat } from "./heartbeat.js";
|
|
3
|
+
import type { Logger } from "./logger.js";
|
|
4
|
+
import type { PromiseRecord } from "./network/types.js";
|
|
5
|
+
import type { OptionsBuilder } from "./options.js";
|
|
6
|
+
import type { Registry } from "./registry.js";
|
|
7
|
+
import { type RetryPolicyConstructor } from "./retries.js";
|
|
8
|
+
import { type Trace } from "./trace.js";
|
|
9
|
+
import type { Effects } from "./types.js";
|
|
10
|
+
export type Status = Done | Suspended;
|
|
11
|
+
export type Done = {
|
|
12
|
+
kind: "done";
|
|
13
|
+
id: string;
|
|
14
|
+
state: "resolved" | "rejected";
|
|
15
|
+
value: any;
|
|
16
|
+
trace: Trace;
|
|
17
|
+
};
|
|
18
|
+
export type Suspended = {
|
|
19
|
+
kind: "suspended";
|
|
20
|
+
awaited: string[];
|
|
21
|
+
trace: Trace;
|
|
22
|
+
};
|
|
23
|
+
export declare class Computation {
|
|
24
|
+
private id;
|
|
25
|
+
private clock;
|
|
26
|
+
private effects;
|
|
27
|
+
private retries;
|
|
28
|
+
private registry;
|
|
29
|
+
private dependencies;
|
|
30
|
+
private optsBuilder;
|
|
31
|
+
private logger;
|
|
32
|
+
private heartbeat;
|
|
33
|
+
private processing;
|
|
34
|
+
constructor(id: string, clock: Clock, effects: Effects, retries: Map<string, RetryPolicyConstructor>, registry: Registry, heartbeat: Heartbeat, dependencies: Map<string, any>, optsBuilder: OptionsBuilder, logger: Logger);
|
|
35
|
+
executeUntilBlocked(rootPromise: PromiseRecord): Promise<Status>;
|
|
36
|
+
private processAcquired;
|
|
37
|
+
private processGenerator;
|
|
38
|
+
private processFunction;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=computation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computation.d.ts","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAsB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,KAAK,KAAK,EAAkB,MAAM,YAAY,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAGhD,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEtC,MAAM,MAAM,IAAI,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;IAC/B,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AASF,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,UAAU,CAAS;gBAGzB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAC5C,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,MAAM;IAaH,mBAAmB,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;YAW/D,eAAe;YAqDf,gBAAgB;YAwChB,eAAe;CAoB9B"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { InnerContext } from "./context.js";
|
|
2
|
+
import { Coroutine } from "./coroutine.js";
|
|
3
|
+
import exceptions from "./exceptions.js";
|
|
4
|
+
import { Exponential, Never } from "./retries.js";
|
|
5
|
+
import { TraceCollector } from "./trace.js";
|
|
6
|
+
import * as util from "./util.js";
|
|
7
|
+
export class Computation {
|
|
8
|
+
id;
|
|
9
|
+
clock;
|
|
10
|
+
effects;
|
|
11
|
+
retries;
|
|
12
|
+
registry;
|
|
13
|
+
dependencies;
|
|
14
|
+
optsBuilder;
|
|
15
|
+
logger;
|
|
16
|
+
heartbeat;
|
|
17
|
+
processing = false;
|
|
18
|
+
constructor(id, clock, effects, retries, registry, heartbeat, dependencies, optsBuilder, logger) {
|
|
19
|
+
this.id = id;
|
|
20
|
+
this.clock = clock;
|
|
21
|
+
this.effects = effects;
|
|
22
|
+
this.retries = retries;
|
|
23
|
+
this.registry = registry;
|
|
24
|
+
this.heartbeat = heartbeat;
|
|
25
|
+
this.dependencies = dependencies;
|
|
26
|
+
this.optsBuilder = optsBuilder;
|
|
27
|
+
this.logger = logger;
|
|
28
|
+
}
|
|
29
|
+
async executeUntilBlocked(rootPromise) {
|
|
30
|
+
if (this.processing)
|
|
31
|
+
throw exceptions.PANIC("computation", "already processing");
|
|
32
|
+
this.processing = true;
|
|
33
|
+
try {
|
|
34
|
+
return await this.processAcquired(rootPromise);
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
this.processing = false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async processAcquired(rootPromise) {
|
|
41
|
+
if (!isValidData(rootPromise.param?.data)) {
|
|
42
|
+
throw exceptions.PANIC("computation", "invalid promise data");
|
|
43
|
+
}
|
|
44
|
+
const { func, args, retry, version = 1 } = rootPromise.param.data;
|
|
45
|
+
const registered = this.registry.get(func, version);
|
|
46
|
+
// function must be registered
|
|
47
|
+
if (!registered) {
|
|
48
|
+
throw exceptions.REGISTRY_FUNCTION_NOT_REGISTERED(func, version);
|
|
49
|
+
}
|
|
50
|
+
if (version !== 0)
|
|
51
|
+
util.assert(version === registered.version, "versions must match");
|
|
52
|
+
util.assert(func === registered.name, "names must match");
|
|
53
|
+
// start heartbeat
|
|
54
|
+
this.heartbeat.start();
|
|
55
|
+
const retryCtor = retry ? this.retries.get(retry.type) : undefined;
|
|
56
|
+
const retryPolicy = retryCtor
|
|
57
|
+
? new retryCtor(retry?.data)
|
|
58
|
+
: util.isGeneratorFunction(registered.func)
|
|
59
|
+
? new Never()
|
|
60
|
+
: new Exponential();
|
|
61
|
+
if (retry && !retryCtor) {
|
|
62
|
+
this.logger.warn({ component: "computation", retryType: retry.type }, `Retry policy '${retry.type}' not found. Will ignore.`);
|
|
63
|
+
}
|
|
64
|
+
const ctxConfig = {
|
|
65
|
+
id: this.id,
|
|
66
|
+
oId: rootPromise.tags["resonate:origin"] ?? this.id,
|
|
67
|
+
func: registered.func.name,
|
|
68
|
+
clock: this.clock,
|
|
69
|
+
registry: this.registry,
|
|
70
|
+
dependencies: this.dependencies,
|
|
71
|
+
optsBuilder: this.optsBuilder,
|
|
72
|
+
timeout: rootPromise.timeoutAt,
|
|
73
|
+
version: registered.version,
|
|
74
|
+
retryPolicy: retryPolicy,
|
|
75
|
+
};
|
|
76
|
+
if (util.isGeneratorFunction(registered.func)) {
|
|
77
|
+
return this.processGenerator(registered.func, ctxConfig, args, rootPromise);
|
|
78
|
+
}
|
|
79
|
+
return this.processFunction(this.id, registered.func, new InnerContext(ctxConfig), args);
|
|
80
|
+
}
|
|
81
|
+
async processGenerator(func, ctxConfig, args, rootPromise) {
|
|
82
|
+
const collector = new TraceCollector();
|
|
83
|
+
// If boundary promise is done, short-circuit (dedup the root)
|
|
84
|
+
if (rootPromise.state !== "pending") {
|
|
85
|
+
const state = rootPromise.state === "resolved" ? "resolved" : "rejected";
|
|
86
|
+
collector.emit({ kind: "dedup", id: rootPromise.id, state, value: rootPromise.value });
|
|
87
|
+
this.logger.debug({ component: "trace", kind: "dedup", id: rootPromise.id }, "trace: dedup");
|
|
88
|
+
return {
|
|
89
|
+
kind: "done",
|
|
90
|
+
id: rootPromise.id,
|
|
91
|
+
state,
|
|
92
|
+
value: rootPromise.value,
|
|
93
|
+
trace: collector.getTrace(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const ctx = new InnerContext(ctxConfig);
|
|
97
|
+
const status = await Coroutine.exec(this.logger, ctx, func, args, this.effects, collector);
|
|
98
|
+
const trace = collector.getTrace();
|
|
99
|
+
if (status.type === "done") {
|
|
100
|
+
return {
|
|
101
|
+
kind: "done",
|
|
102
|
+
id: this.id,
|
|
103
|
+
state: status.result.kind === "value" ? "resolved" : "rejected",
|
|
104
|
+
value: status.result.kind === "value" ? status.result.value : status.result.error,
|
|
105
|
+
trace,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Only remote todos remain — locals are handled inline by the coroutine
|
|
109
|
+
return { kind: "suspended", awaited: status.todo.remote.map((t) => t.id), trace };
|
|
110
|
+
}
|
|
111
|
+
async processFunction(id, func, ctx, args) {
|
|
112
|
+
const collector = new TraceCollector();
|
|
113
|
+
collector.emit({ kind: "spawn", id });
|
|
114
|
+
this.logger.debug({ component: "trace", kind: "spawn", id }, "trace: spawn");
|
|
115
|
+
const result = await util.executeWithRetry(ctx, func, args, this.logger);
|
|
116
|
+
const state = result.kind === "value" ? "resolved" : "rejected";
|
|
117
|
+
const value = result.kind === "value" ? result.value : result.error;
|
|
118
|
+
collector.emit({ kind: "return", id, state, value });
|
|
119
|
+
this.logger.debug({ component: "trace", kind: "return", id }, "trace: return");
|
|
120
|
+
return {
|
|
121
|
+
kind: "done",
|
|
122
|
+
id,
|
|
123
|
+
state,
|
|
124
|
+
value,
|
|
125
|
+
trace: collector.getTrace(),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Helper functions
|
|
130
|
+
function isValidData(data) {
|
|
131
|
+
if (data === null || typeof data !== "object")
|
|
132
|
+
return false;
|
|
133
|
+
const d = data;
|
|
134
|
+
// func must be a string
|
|
135
|
+
if (typeof d.func !== "string")
|
|
136
|
+
return false;
|
|
137
|
+
// args must be an array
|
|
138
|
+
if (!Array.isArray(d.args))
|
|
139
|
+
return false;
|
|
140
|
+
// retry (if present) must be an object with string `type` and any `data`
|
|
141
|
+
if (d.retry !== undefined) {
|
|
142
|
+
if (d.retry === null || typeof d.retry !== "object" || typeof d.retry.type !== "string" || !("data" in d.retry)) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// version (if present) must be a number
|
|
147
|
+
if (d.version !== undefined && typeof d.version !== "number") {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=computation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computation.js","sourceRoot":"","sources":["../src/computation.ts"],"names":[],"mappings":"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"}
|