@restatedev/restate-sdk 1.2.0 → 1.3.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.
- package/README.md +3 -3
- package/dist/cjs/src/common_api.d.ts +6 -3
- package/dist/cjs/src/common_api.d.ts.map +1 -1
- package/dist/cjs/src/common_api.js +7 -1
- package/dist/cjs/src/common_api.js.map +1 -1
- package/dist/cjs/src/context.d.ts +39 -7
- package/dist/cjs/src/context.d.ts.map +1 -1
- package/dist/cjs/src/context.js.map +1 -1
- package/dist/cjs/src/context_impl.d.ts +16 -18
- package/dist/cjs/src/context_impl.d.ts.map +1 -1
- package/dist/cjs/src/context_impl.js +109 -116
- package/dist/cjs/src/context_impl.js.map +1 -1
- package/dist/cjs/src/endpoint/endpoint_builder.js +1 -1
- package/dist/cjs/src/endpoint/fetch_endpoint.d.ts +2 -2
- package/dist/cjs/src/endpoint/fetch_endpoint.d.ts.map +1 -1
- package/dist/cjs/src/endpoint/fetch_endpoint.js.map +1 -1
- package/dist/cjs/src/endpoint/handlers/generic.d.ts.map +1 -1
- package/dist/cjs/src/endpoint/handlers/generic.js +2 -1
- package/dist/cjs/src/endpoint/handlers/generic.js.map +1 -1
- package/dist/cjs/src/endpoint.d.ts +6 -0
- package/dist/cjs/src/endpoint.d.ts.map +1 -1
- package/dist/cjs/src/generated/version.d.ts +1 -1
- package/dist/cjs/src/generated/version.js +1 -1
- package/dist/cjs/src/journal.d.ts.map +1 -1
- package/dist/cjs/src/journal.js +1 -3
- package/dist/cjs/src/journal.js.map +1 -1
- package/dist/cjs/src/local_state_store.d.ts +2 -4
- package/dist/cjs/src/local_state_store.d.ts.map +1 -1
- package/dist/cjs/src/local_state_store.js +9 -10
- package/dist/cjs/src/local_state_store.js.map +1 -1
- package/dist/cjs/src/state_machine.d.ts +2 -1
- package/dist/cjs/src/state_machine.d.ts.map +1 -1
- package/dist/cjs/src/state_machine.js.map +1 -1
- package/dist/cjs/src/types/rpc.d.ts +128 -11
- package/dist/cjs/src/types/rpc.d.ts.map +1 -1
- package/dist/cjs/src/types/rpc.js +215 -24
- package/dist/cjs/src/types/rpc.js.map +1 -1
- package/dist/cjs/src/user_agent.d.ts +1 -1
- package/dist/cjs/src/utils/rand.d.ts +1 -3
- package/dist/cjs/src/utils/rand.d.ts.map +1 -1
- package/dist/cjs/src/utils/rand.js +1 -1
- package/dist/cjs/src/utils/rand.js.map +1 -1
- package/dist/cjs/src/utils/utils.d.ts +0 -2
- package/dist/cjs/src/utils/utils.d.ts.map +1 -1
- package/dist/cjs/src/utils/utils.js +1 -11
- package/dist/cjs/src/utils/utils.js.map +1 -1
- package/dist/cjs/test/complete_awakeable.test.js +1 -1
- package/dist/cjs/test/complete_awakeable.test.js.map +1 -1
- package/dist/cjs/test/get_state.test.js +0 -5
- package/dist/cjs/test/get_state.test.js.map +1 -1
- package/dist/cjs/test/lambda.test.js +19 -7
- package/dist/cjs/test/lambda.test.js.map +1 -1
- package/dist/cjs/test/promise_combinators.test.js +2 -2
- package/dist/cjs/test/promise_combinators.test.js.map +1 -1
- package/dist/cjs/test/protoutils.d.ts +5 -5
- package/dist/cjs/test/protoutils.d.ts.map +1 -1
- package/dist/cjs/test/protoutils.js +35 -26
- package/dist/cjs/test/protoutils.js.map +1 -1
- package/dist/cjs/test/service_bind.test.js +25 -5
- package/dist/cjs/test/service_bind.test.js.map +1 -1
- package/dist/cjs/test/testdriver.d.ts +2 -0
- package/dist/cjs/test/testdriver.d.ts.map +1 -1
- package/dist/cjs/test/testdriver.js +11 -0
- package/dist/cjs/test/testdriver.js.map +1 -1
- package/dist/cjs/test/utils.test.js +0 -11
- package/dist/cjs/test/utils.test.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/common_api.d.ts +6 -3
- package/dist/esm/src/common_api.d.ts.map +1 -1
- package/dist/esm/src/common_api.js +3 -1
- package/dist/esm/src/common_api.js.map +1 -1
- package/dist/esm/src/context.d.ts +39 -7
- package/dist/esm/src/context.d.ts.map +1 -1
- package/dist/esm/src/context.js.map +1 -1
- package/dist/esm/src/context_impl.d.ts +16 -18
- package/dist/esm/src/context_impl.d.ts.map +1 -1
- package/dist/esm/src/context_impl.js +110 -117
- package/dist/esm/src/context_impl.js.map +1 -1
- package/dist/esm/src/endpoint/endpoint_builder.js +1 -1
- package/dist/esm/src/endpoint/fetch_endpoint.d.ts +2 -2
- package/dist/esm/src/endpoint/fetch_endpoint.d.ts.map +1 -1
- package/dist/esm/src/endpoint/fetch_endpoint.js.map +1 -1
- package/dist/esm/src/endpoint/handlers/generic.d.ts.map +1 -1
- package/dist/esm/src/endpoint/handlers/generic.js +2 -1
- package/dist/esm/src/endpoint/handlers/generic.js.map +1 -1
- package/dist/esm/src/endpoint.d.ts +6 -0
- package/dist/esm/src/endpoint.d.ts.map +1 -1
- package/dist/esm/src/generated/version.d.ts +1 -1
- package/dist/esm/src/generated/version.js +1 -1
- package/dist/esm/src/journal.d.ts.map +1 -1
- package/dist/esm/src/journal.js +2 -4
- package/dist/esm/src/journal.js.map +1 -1
- package/dist/esm/src/local_state_store.d.ts +2 -4
- package/dist/esm/src/local_state_store.d.ts.map +1 -1
- package/dist/esm/src/local_state_store.js +9 -10
- package/dist/esm/src/local_state_store.js.map +1 -1
- package/dist/esm/src/state_machine.d.ts +2 -1
- package/dist/esm/src/state_machine.d.ts.map +1 -1
- package/dist/esm/src/state_machine.js.map +1 -1
- package/dist/esm/src/types/rpc.d.ts +128 -11
- package/dist/esm/src/types/rpc.d.ts.map +1 -1
- package/dist/esm/src/types/rpc.js +209 -23
- package/dist/esm/src/types/rpc.js.map +1 -1
- package/dist/esm/src/user_agent.d.ts +1 -1
- package/dist/esm/src/utils/rand.d.ts +1 -3
- package/dist/esm/src/utils/rand.d.ts.map +1 -1
- package/dist/esm/src/utils/rand.js +1 -1
- package/dist/esm/src/utils/rand.js.map +1 -1
- package/dist/esm/src/utils/utils.d.ts +0 -2
- package/dist/esm/src/utils/utils.d.ts.map +1 -1
- package/dist/esm/src/utils/utils.js +0 -8
- package/dist/esm/src/utils/utils.js.map +1 -1
- package/dist/esm/test/complete_awakeable.test.js +1 -1
- package/dist/esm/test/complete_awakeable.test.js.map +1 -1
- package/dist/esm/test/get_state.test.js +0 -5
- package/dist/esm/test/get_state.test.js.map +1 -1
- package/dist/esm/test/lambda.test.js +19 -7
- package/dist/esm/test/lambda.test.js.map +1 -1
- package/dist/esm/test/promise_combinators.test.js +2 -2
- package/dist/esm/test/promise_combinators.test.js.map +1 -1
- package/dist/esm/test/protoutils.d.ts +5 -5
- package/dist/esm/test/protoutils.d.ts.map +1 -1
- package/dist/esm/test/protoutils.js +35 -26
- package/dist/esm/test/protoutils.js.map +1 -1
- package/dist/esm/test/service_bind.test.js +25 -5
- package/dist/esm/test/service_bind.test.js.map +1 -1
- package/dist/esm/test/testdriver.d.ts +2 -0
- package/dist/esm/test/testdriver.d.ts.map +1 -1
- package/dist/esm/test/testdriver.js +11 -0
- package/dist/esm/test/testdriver.js.map +1 -1
- package/dist/esm/test/utils.test.js +1 -12
- package/dist/esm/test/utils.test.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/cjs/src/utils/serde.d.ts +0 -5
- package/dist/cjs/src/utils/serde.d.ts.map +0 -1
- package/dist/cjs/src/utils/serde.js +0 -50
- package/dist/cjs/src/utils/serde.js.map +0 -1
- package/dist/esm/src/utils/serde.d.ts +0 -5
- package/dist/esm/src/utils/serde.d.ts.map +0 -1
- package/dist/esm/src/utils/serde.js +0 -43
- package/dist/esm/src/utils/serde.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
import type { Client, SendClient } from "./types/rpc.js";
|
|
3
|
-
import type { RestateContext, RestateObjectContext, RestateObjectSharedContext, RestateWorkflowContext, RestateWorkflowSharedContext, Service, ServiceDefinitionFrom, VirtualObject, VirtualObjectDefinitionFrom, Workflow, WorkflowDefinitionFrom } from "@restatedev/restate-sdk-core";
|
|
3
|
+
import type { RestateContext, RestateObjectContext, RestateObjectSharedContext, RestateWorkflowContext, RestateWorkflowSharedContext, Service, ServiceDefinitionFrom, VirtualObject, VirtualObjectDefinitionFrom, Workflow, WorkflowDefinitionFrom, Serde } from "@restatedev/restate-sdk-core";
|
|
4
4
|
/**
|
|
5
5
|
* Represents the original request as sent to this handler.
|
|
6
6
|
*
|
|
@@ -58,7 +58,7 @@ export interface KeyValueStore<TState extends TypedState> {
|
|
|
58
58
|
* @example
|
|
59
59
|
* const state = await ctx.get<string>("STATE");
|
|
60
60
|
*/
|
|
61
|
-
get<TValue, TKey extends keyof TState = string>(name: TState extends UntypedState ? string : TKey): Promise<(TState extends UntypedState ? TValue : TState[TKey]) | null>;
|
|
61
|
+
get<TValue, TKey extends keyof TState = string>(name: TState extends UntypedState ? string : TKey, serde?: Serde<TState extends UntypedState ? TValue : TState[TKey]>): Promise<(TState extends UntypedState ? TValue : TState[TKey]) | null>;
|
|
62
62
|
stateKeys(): Promise<Array<string>>;
|
|
63
63
|
/**
|
|
64
64
|
* Set/store state in the Restate runtime.
|
|
@@ -71,7 +71,7 @@ export interface KeyValueStore<TState extends TypedState> {
|
|
|
71
71
|
* @example
|
|
72
72
|
* ctx.set("STATE", "Hello");
|
|
73
73
|
*/
|
|
74
|
-
set<TValue, TKey extends keyof TState = string>(name: TState extends UntypedState ? string : TKey, value: TState extends UntypedState ? TValue : TState[TKey]): void;
|
|
74
|
+
set<TValue, TKey extends keyof TState = string>(name: TState extends UntypedState ? string : TKey, value: TState extends UntypedState ? TValue : TState[TKey], serde?: Serde<TState extends UntypedState ? TValue : TState[TKey]>): void;
|
|
75
75
|
/**
|
|
76
76
|
* Clear/delete state in the Restate runtime.
|
|
77
77
|
* @param name key of the state to delete
|
|
@@ -130,6 +130,35 @@ export interface ContextDate {
|
|
|
130
130
|
* A function that can be run and its result durably persisted by Restate.
|
|
131
131
|
*/
|
|
132
132
|
export type RunAction<T> = (() => Promise<T>) | (() => T);
|
|
133
|
+
export type RunOptions<T> = {
|
|
134
|
+
serde?: Serde<T>;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Call a handler directly avoiding restate's type safety checks.
|
|
138
|
+
* This is a generic machnisim to invoke handlers directly by only knowing
|
|
139
|
+
* the service and handler name, (or key in the case of objects or workflows)
|
|
140
|
+
*/
|
|
141
|
+
export type GenericCall<REQ, RES> = {
|
|
142
|
+
service: string;
|
|
143
|
+
method: string;
|
|
144
|
+
parameter: REQ;
|
|
145
|
+
key?: string;
|
|
146
|
+
inputSerde?: Serde<REQ>;
|
|
147
|
+
outputSerde?: Serde<RES>;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Send a message to an handler directly avoiding restate's type safety checks.
|
|
151
|
+
* This is a generic machnisim to invoke handlers directly by only knowing
|
|
152
|
+
* the service and handler name, (or key in the case of objects or workflows)
|
|
153
|
+
*/
|
|
154
|
+
export type GenericSend<REQ> = {
|
|
155
|
+
service: string;
|
|
156
|
+
method: string;
|
|
157
|
+
parameter: REQ;
|
|
158
|
+
key?: string;
|
|
159
|
+
inputSerde?: Serde<REQ>;
|
|
160
|
+
delay?: number;
|
|
161
|
+
};
|
|
133
162
|
/**
|
|
134
163
|
* The context that gives access to all Restate-backed operations, for example
|
|
135
164
|
* - sending reliable messages / RPC through Restate
|
|
@@ -212,6 +241,7 @@ export interface Context extends RestateContext {
|
|
|
212
241
|
* @param action the action to run.
|
|
213
242
|
*/
|
|
214
243
|
run<T>(name: string, action: RunAction<T>): Promise<T>;
|
|
244
|
+
run<T>(name: string, action: RunAction<T>, options: RunOptions<T>): Promise<T>;
|
|
215
245
|
/**
|
|
216
246
|
* Register an awakeable and pause the processing until the awakeable ID (and optional payload) have been returned to the service
|
|
217
247
|
* (via ctx.completeAwakeable(...)). The SDK deserializes the payload with `JSON.parse(result.toString()) as T`.
|
|
@@ -231,7 +261,7 @@ export interface Context extends RestateContext {
|
|
|
231
261
|
* // Wait for the external service to wake this service back up
|
|
232
262
|
* const result = await awakeable.promise;
|
|
233
263
|
*/
|
|
234
|
-
awakeable<T>(): {
|
|
264
|
+
awakeable<T>(serde?: Serde<T>): {
|
|
235
265
|
id: string;
|
|
236
266
|
promise: CombineablePromise<T>;
|
|
237
267
|
};
|
|
@@ -247,7 +277,7 @@ export interface Context extends RestateContext {
|
|
|
247
277
|
* // The sleeping service should have sent the awakeableIdentifier string to this service.
|
|
248
278
|
* ctx.resolveAwakeable(awakeableIdentifier, "hello");
|
|
249
279
|
*/
|
|
250
|
-
resolveAwakeable<T>(id: string, payload?: T): void;
|
|
280
|
+
resolveAwakeable<T>(id: string, payload?: T, serde?: Serde<T>): void;
|
|
251
281
|
/**
|
|
252
282
|
* Reject an awakeable. When rejecting, the service waiting on this awakeable will be woken up with a terminal error with the provided reason.
|
|
253
283
|
* @param id the string ID of the awakeable.
|
|
@@ -379,6 +409,8 @@ export interface Context extends RestateContext {
|
|
|
379
409
|
* @param opts Send options
|
|
380
410
|
*/
|
|
381
411
|
objectSendClient<D>(obj: VirtualObjectDefinitionFrom<D>, key: string, opts?: SendOptions): SendClient<VirtualObject<D>>;
|
|
412
|
+
genericCall<REQ = Uint8Array, RES = Uint8Array>(call: GenericCall<REQ, RES>): Promise<RES>;
|
|
413
|
+
genericSend<REQ = Uint8Array>(call: GenericSend<REQ>): void;
|
|
382
414
|
/**
|
|
383
415
|
* Returns the raw request that triggered that handler.
|
|
384
416
|
* Use that object to inspect the original request headers
|
|
@@ -424,7 +456,7 @@ export interface ObjectSharedContext<TState extends TypedState = UntypedState> e
|
|
|
424
456
|
* @example
|
|
425
457
|
* const state = await ctx.get<string>("STATE");
|
|
426
458
|
*/
|
|
427
|
-
get<TValue, TKey extends keyof TState = string>(name: TState extends UntypedState ? string : TKey): Promise<(TState extends UntypedState ? TValue : TState[TKey]) | null>;
|
|
459
|
+
get<TValue, TKey extends keyof TState = string>(name: TState extends UntypedState ? string : TKey, serde?: Serde<TState extends UntypedState ? TValue : TState[TKey]>): Promise<(TState extends UntypedState ? TValue : TState[TKey]) | null>;
|
|
428
460
|
/**
|
|
429
461
|
* Retrieve all the state keys for this object.
|
|
430
462
|
*/
|
|
@@ -548,7 +580,7 @@ export interface WorkflowSharedContext<TState extends TypedState = UntypedState>
|
|
|
548
580
|
*
|
|
549
581
|
* @param name the name of the durable promise
|
|
550
582
|
*/
|
|
551
|
-
promise<T
|
|
583
|
+
promise<T>(name: string, serde?: Serde<T>): DurablePromise<T>;
|
|
552
584
|
}
|
|
553
585
|
export interface WorkflowContext<TState extends TypedState = UntypedState> extends WorkflowSharedContext<TState>, ObjectContext<TState>, RestateWorkflowContext {
|
|
554
586
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/context.ts"],"names":[],"mappings":";AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,EAC5B,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,QAAQ,EACR,sBAAsB,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/context.ts"],"names":[],"mappings":";AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,EAC5B,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,QAAQ,EACR,sBAAsB,EACtB,KAAK,EACN,MAAM,8BAA8B,CAAC;AAGtC;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAE5E;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAE1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;CAC/B;AAGD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,SAAS,UAAU;IACtD;;;;;;;;;;OAUG;IACH,GAAG,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,MAAM,GAAG,MAAM,EAC5C,IAAI,EAAE,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,IAAI,EACjD,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GACjE,OAAO,CAAC,CAAC,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEzE,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpC;;;;;;;;;;OAUG;IACH,GAAG,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,MAAM,GAAG,MAAM,EAC5C,IAAI,EAAE,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,IAAI,EACjD,KAAK,EAAE,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAC1D,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GACjE,IAAI,CAAC;IAER;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,SAAS,MAAM,MAAM,EAC7B,IAAI,EAAE,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,IAAI,GAChD,IAAI,CAAC;IAER;;;;;OAKG;IACH,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB;;QAEI;IACJ,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,GAAG,IAAI;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAQ,SAAQ,cAAc;IAC7C;;;;;;;;OAQG;IACH,IAAI,EAAE,IAAI,CAAC;IAEX;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,WAAW,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEzC;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvD,GAAG,CAAC,CAAC,EACH,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG;QAC9B,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;IAEF;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAErE;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAElD;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE;;;;;OAKG;IACH,YAAY,CAAC,CAAC,EACZ,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,EACpC,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,cAAc,CAAC,CAAC,EACd,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,kBAAkB,CAAC,CAAC,EAClB,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,GACV,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,iBAAiB,CAAC,CAAC,EACjB,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,EACjC,IAAI,CAAC,EAAE,WAAW,GACjB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1B;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,EAChB,GAAG,EAAE,2BAA2B,CAAC,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,GACjB,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhC,WAAW,CAAC,GAAG,GAAG,UAAU,EAAE,GAAG,GAAG,UAAU,EAC5C,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhB,WAAW,CAAC,GAAG,GAAG,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAE5D;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,SAAS,UAAU,GAAG,YAAY,CACrE,SAAQ,OAAO,EACb,aAAa,CAAC,MAAM,CAAC,EACrB,oBAAoB;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB,CAAC,MAAM,SAAS,UAAU,GAAG,YAAY,CAC3E,SAAQ,OAAO,EACb,0BAA0B;IAC5B,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;;;;;;OAUG;IACH,GAAG,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,MAAM,GAAG,MAAM,EAC5C,IAAI,EAAE,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,IAAI,EACjD,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GACjE,OAAO,CAAC,CAAC,MAAM,SAAS,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEzE;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,IAAI;IACnB;;;OAGG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,IAAI,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IAC/C;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,kBAAkB;IAC7B;;;;;;;;OAQG;uEAEO,CAAC;IAaX;;;;;;;;OAQG;;IAaH;;;;;;;;;OASG;;IAaH;;;;;;;;OAQG;;CAgBJ,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IAC3C;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAE/B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,GAAG,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,UAAU,GAAG,YAAY,CAC7E,SAAQ,mBAAmB,CAAC,MAAM,CAAC,EACjC,4BAA4B;IAC9B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,UAAU,GAAG,YAAY,CACvE,SAAQ,qBAAqB,CAAC,MAAM,CAAC,EACnC,aAAa,CAAC,MAAM,CAAC,EACrB,sBAAsB;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyjBhD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC;;;;;;;;OAQG;IACH,GAAG,CACD,MAAS;QAET,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,WAAW,CAAC,gBAAgB,CACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EACzB,MAAM,CAGN,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,CACF,MAAS;QAET,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,WAAW,CAAC,gBAAgB,CACjC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAC1B,MAAM,CACwB,CAAC;IACnC,CAAC;IAED;;;;;;;;;OASG;IACH,GAAG,CACD,MAAS;QAET,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,WAAW,CAAC,gBAAgB,CACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EACzB,MAAM,CACwB,CAAC;IACnC,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU,CACR,MAAS;QAIT,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,WAAW,CAAC,gBAAgB,CACjC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAChC,MAAM,CAGN,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
|
|
3
|
-
import type { CombineablePromise, ContextDate, DurablePromise, ObjectContext, Rand, Request, RunAction, SendOptions, WorkflowContext } from "./context.js";
|
|
2
|
+
import type { CombineablePromise, ContextDate, DurablePromise, GenericCall, GenericSend, ObjectContext, Rand, Request, RunAction, RunOptions, SendOptions, WorkflowContext } from "./context.js";
|
|
4
3
|
import type { StateMachine } from "./state_machine.js";
|
|
5
|
-
import type { Client, SendClient } from "./types/rpc.js";
|
|
6
4
|
import { HandlerKind } from "./types/rpc.js";
|
|
7
|
-
import type {
|
|
5
|
+
import type { Client, SendClient } from "./types/rpc.js";
|
|
6
|
+
import type { Service, ServiceDefinitionFrom, VirtualObjectDefinitionFrom, VirtualObject, WorkflowDefinitionFrom, Workflow, Serde } from "@restatedev/restate-sdk-core";
|
|
8
7
|
import type { WrappedPromise } from "./utils/promises.js";
|
|
9
|
-
import { Buffer } from "node:buffer";
|
|
10
8
|
export type InternalCombineablePromise<T> = CombineablePromise<T> & {
|
|
11
9
|
journalIndex: number;
|
|
12
10
|
};
|
|
@@ -19,31 +17,31 @@ export declare class ContextImpl implements ObjectContext, WorkflowContext {
|
|
|
19
17
|
private readonly invocationRequest;
|
|
20
18
|
readonly rand: Rand;
|
|
21
19
|
readonly date: ContextDate;
|
|
22
|
-
constructor(id:
|
|
23
|
-
|
|
24
|
-
promise<T = void>(name: string): DurablePromise<T>;
|
|
20
|
+
constructor(id: Uint8Array, console: Console, handlerKind: HandlerKind, keyedContextKey: string | undefined, invocationValue: Uint8Array, invocationHeaders: ReadonlyMap<string, string>, attemptHeaders: ReadonlyMap<string, string | string[] | undefined>, extraArgs: unknown[], stateMachine: StateMachine);
|
|
21
|
+
promise<T>(name: string, serde?: Serde<T>): DurablePromise<T>;
|
|
25
22
|
get key(): string;
|
|
26
23
|
request(): Request;
|
|
27
|
-
get<T>(name: string): Promise<T | null>;
|
|
24
|
+
get<T>(name: string, serde?: Serde<T>): Promise<T | null>;
|
|
28
25
|
stateKeys(): Promise<Array<string>>;
|
|
29
|
-
set<T>(name: string, value: T): void;
|
|
26
|
+
set<T>(name: string, value: T, serde?: Serde<T>): void;
|
|
30
27
|
clear(name: string): void;
|
|
31
28
|
clearAll(): void;
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
genericCall<REQ = Uint8Array, RES = Uint8Array>(call: GenericCall<REQ, RES>): Promise<RES>;
|
|
30
|
+
genericSend<REQ = Uint8Array>(send: GenericSend<REQ>): void;
|
|
34
31
|
serviceClient<D>({ name }: ServiceDefinitionFrom<D>): Client<Service<D>>;
|
|
35
32
|
objectClient<D>({ name }: VirtualObjectDefinitionFrom<D>, key: string): Client<VirtualObject<D>>;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
workflowClient<D>({ name }: WorkflowDefinitionFrom<D>, key: string): Client<Workflow<D>>;
|
|
34
|
+
serviceSendClient<D>({ name }: ServiceDefinitionFrom<D>, opts?: SendOptions): SendClient<Service<D>>;
|
|
35
|
+
objectSendClient<D>({ name }: VirtualObjectDefinitionFrom<D>, key: string, opts?: SendOptions): SendClient<VirtualObject<D>>;
|
|
36
|
+
workflowSendClient<D>({ name }: WorkflowDefinitionFrom<D>, key: string, opts?: SendOptions): SendClient<Workflow<D>>;
|
|
37
|
+
run<T>(nameOrAction: string | RunAction<T>, actionSecondParameter?: RunAction<T>, options?: RunOptions<T>): Promise<T>;
|
|
40
38
|
sleep(millis: number): CombineablePromise<void>;
|
|
41
39
|
private sleepInternal;
|
|
42
|
-
awakeable<T>(): {
|
|
40
|
+
awakeable<T>(serde?: Serde<T>): {
|
|
43
41
|
id: string;
|
|
44
42
|
promise: CombineablePromise<T>;
|
|
45
43
|
};
|
|
46
|
-
resolveAwakeable<T>(id: string, payload?: T): void;
|
|
44
|
+
resolveAwakeable<T>(id: string, payload?: T, serde?: Serde<T>): void;
|
|
47
45
|
rejectAwakeable(id: string, reason: string): void;
|
|
48
46
|
private completeAwakeable;
|
|
49
47
|
static createCombinator<T extends readonly CombineablePromise<unknown>[]>(combinatorConstructor: (promises: PromiseLike<unknown>[]) => Promise<unknown>, promises: T): WrappedPromise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context_impl.d.ts","sourceRoot":"","sources":["../../../src/context_impl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context_impl.d.ts","sourceRoot":"","sources":["../../../src/context_impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,13 +11,12 @@
|
|
|
11
11
|
import { AwakeableEntryMessage, OneWayCallEntryMessage, CompleteAwakeableEntryMessage, Empty, GetStateEntryMessage, GetStateKeysEntryMessage, CallEntryMessage, RunEntryMessage, SleepEntryMessage, GetPromiseEntryMessage, PeekPromiseEntryMessage, CompletePromiseEntryMessage, } from "./generated/proto/protocol_pb.js";
|
|
12
12
|
import { AWAKEABLE_ENTRY_MESSAGE_TYPE, AWAKEABLE_IDENTIFIER_PREFIX, BACKGROUND_INVOKE_ENTRY_MESSAGE_TYPE, CLEAR_ALL_STATE_ENTRY_MESSAGE_TYPE, CLEAR_STATE_ENTRY_MESSAGE_TYPE, COMPLETE_AWAKEABLE_ENTRY_MESSAGE_TYPE, GET_STATE_ENTRY_MESSAGE_TYPE, GET_STATE_KEYS_ENTRY_MESSAGE_TYPE, INVOKE_ENTRY_MESSAGE_TYPE, SET_STATE_ENTRY_MESSAGE_TYPE, SIDE_EFFECT_ENTRY_MESSAGE_TYPE, SLEEP_ENTRY_MESSAGE_TYPE, GET_PROMISE_MESSAGE_TYPE, PEEK_PROMISE_MESSAGE_TYPE, COMPLETE_PROMISE_MESSAGE_TYPE, } from "./types/protocol.js";
|
|
13
13
|
import { RetryableError, TerminalError, ensureError, TimeoutError, INTERNAL_ERROR_CODE, UNKNOWN_ERROR_CODE, errorToFailure, } from "./types/errors.js";
|
|
14
|
-
import { jsonSerialize, jsonDeserialize } from "./utils/utils.js";
|
|
15
14
|
import { protoInt64 } from "@bufbuild/protobuf";
|
|
16
|
-
import { HandlerKind } from "./types/rpc.js";
|
|
15
|
+
import { HandlerKind, makeRpcCallProxy, makeRpcSendProxy, defaultSerde, } from "./types/rpc.js";
|
|
16
|
+
import { serde } from "@restatedev/restate-sdk-core";
|
|
17
17
|
import { RandImpl } from "./utils/rand.js";
|
|
18
18
|
import { newJournalEntryPromiseId } from "./promise_combinator_tracker.js";
|
|
19
19
|
import { Buffer } from "node:buffer";
|
|
20
|
-
import { deserializeJson, serializeJson } from "./utils/serde.js";
|
|
21
20
|
export class ContextImpl {
|
|
22
21
|
console;
|
|
23
22
|
handlerKind;
|
|
@@ -52,20 +51,8 @@ export class ContextImpl {
|
|
|
52
51
|
};
|
|
53
52
|
this.rand = new RandImpl(id, this.checkState.bind(this));
|
|
54
53
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const clientProxy = new Proxy({}, {
|
|
58
|
-
get: (_target, prop) => {
|
|
59
|
-
const route = prop;
|
|
60
|
-
return (...args) => {
|
|
61
|
-
return this.invoke(name, route, args.shift(), key, serializeJson, deserializeJson);
|
|
62
|
-
};
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
return clientProxy;
|
|
66
|
-
}
|
|
67
|
-
promise(name) {
|
|
68
|
-
return new DurablePromiseImpl(this, name);
|
|
54
|
+
promise(name, serde) {
|
|
55
|
+
return new DurablePromiseImpl(this, name, serde);
|
|
69
56
|
}
|
|
70
57
|
get key() {
|
|
71
58
|
switch (this.handlerKind) {
|
|
@@ -87,11 +74,13 @@ export class ContextImpl {
|
|
|
87
74
|
return this.invocationRequest;
|
|
88
75
|
}
|
|
89
76
|
// DON'T make this function async!!! see sideEffect comment for details.
|
|
90
|
-
get(name) {
|
|
77
|
+
get(name, serde) {
|
|
91
78
|
// Check if this is a valid action
|
|
92
79
|
this.checkState("get state");
|
|
93
80
|
// Create the message and let the state machine process it
|
|
94
|
-
const msg = new GetStateEntryMessage({
|
|
81
|
+
const msg = new GetStateEntryMessage({
|
|
82
|
+
key: new TextEncoder().encode(name),
|
|
83
|
+
});
|
|
95
84
|
const completed = this.stateMachine.localStateStore.tryCompleteGet(name, msg);
|
|
96
85
|
const getState = async () => {
|
|
97
86
|
const result = await this.stateMachine.handleUserCodeMessage(GET_STATE_ENTRY_MESSAGE_TYPE, msg, completed);
|
|
@@ -102,10 +91,10 @@ export class ContextImpl {
|
|
|
102
91
|
if (!completed) {
|
|
103
92
|
this.stateMachine.localStateStore.add(name, result);
|
|
104
93
|
}
|
|
105
|
-
if (!(result instanceof
|
|
94
|
+
if (!(result instanceof Uint8Array)) {
|
|
106
95
|
return null;
|
|
107
96
|
}
|
|
108
|
-
return
|
|
97
|
+
return (serde ?? defaultSerde()).deserialize(result);
|
|
109
98
|
};
|
|
110
99
|
return getState();
|
|
111
100
|
}
|
|
@@ -118,13 +107,14 @@ export class ContextImpl {
|
|
|
118
107
|
const completed = this.stateMachine.localStateStore.tryCompletedGetStateKeys(msg);
|
|
119
108
|
const getStateKeys = async () => {
|
|
120
109
|
const result = await this.stateMachine.handleUserCodeMessage(GET_STATE_KEYS_ENTRY_MESSAGE_TYPE, msg, completed);
|
|
121
|
-
return result.keys.map((b) =>
|
|
110
|
+
return result.keys.map((b) => new TextDecoder().decode(b));
|
|
122
111
|
};
|
|
123
112
|
return getStateKeys();
|
|
124
113
|
}
|
|
125
|
-
set(name, value) {
|
|
114
|
+
set(name, value, serde) {
|
|
126
115
|
this.checkState("set state");
|
|
127
|
-
const
|
|
116
|
+
const bytes = (serde ?? defaultSerde()).serialize(value);
|
|
117
|
+
const msg = this.stateMachine.localStateStore.set(name, bytes);
|
|
128
118
|
this.stateMachine
|
|
129
119
|
.handleUserCodeMessage(SET_STATE_ENTRY_MESSAGE_TYPE, msg)
|
|
130
120
|
.catch((e) => this.stateMachine.handleDanglingPromiseError(e));
|
|
@@ -144,108 +134,79 @@ export class ContextImpl {
|
|
|
144
134
|
.catch((e) => this.stateMachine.handleDanglingPromiseError(e));
|
|
145
135
|
}
|
|
146
136
|
// --- Calls, background calls, etc
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
137
|
+
//
|
|
138
|
+
genericCall(call) {
|
|
139
|
+
const requestSerde = call.inputSerde ?? serde.binary;
|
|
140
|
+
const responseSerde = call.outputSerde ?? serde.binary;
|
|
141
|
+
const parameter = requestSerde.serialize(call.parameter);
|
|
150
142
|
const msg = new CallEntryMessage({
|
|
151
|
-
serviceName: service,
|
|
152
|
-
handlerName: method,
|
|
153
|
-
parameter
|
|
154
|
-
key,
|
|
143
|
+
serviceName: call.service,
|
|
144
|
+
handlerName: call.method,
|
|
145
|
+
parameter,
|
|
146
|
+
key: call.key,
|
|
155
147
|
});
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const
|
|
165
|
-
const invokeTime =
|
|
148
|
+
const rawRequest = this.stateMachine.handleUserCodeMessage(INVOKE_ENTRY_MESSAGE_TYPE, msg);
|
|
149
|
+
const decoded = rawRequest.transform((res) => responseSerde.deserialize(res));
|
|
150
|
+
return this.markCombineablePromise(decoded);
|
|
151
|
+
}
|
|
152
|
+
genericSend(send) {
|
|
153
|
+
const requestSerde = send.inputSerde ?? serde.binary;
|
|
154
|
+
const parameter = requestSerde.serialize(send.parameter);
|
|
155
|
+
const actualDelay = send.delay || 0;
|
|
156
|
+
const jsInvokeTime = actualDelay > 0 ? Date.now() + actualDelay : protoInt64.zero;
|
|
157
|
+
const invokeTime = protoInt64.parse(jsInvokeTime);
|
|
166
158
|
const msg = new OneWayCallEntryMessage({
|
|
167
|
-
serviceName: service,
|
|
168
|
-
handlerName: method,
|
|
169
|
-
parameter
|
|
170
|
-
invokeTime
|
|
171
|
-
key,
|
|
159
|
+
serviceName: send.service,
|
|
160
|
+
handlerName: send.method,
|
|
161
|
+
parameter,
|
|
162
|
+
invokeTime,
|
|
163
|
+
key: send.key,
|
|
164
|
+
});
|
|
165
|
+
this.stateMachine
|
|
166
|
+
.handleUserCodeMessage(BACKGROUND_INVOKE_ENTRY_MESSAGE_TYPE, msg)
|
|
167
|
+
.catch((e) => {
|
|
168
|
+
this.stateMachine.handleDanglingPromiseError(e);
|
|
172
169
|
});
|
|
173
|
-
await this.stateMachine.handleUserCodeMessage(BACKGROUND_INVOKE_ENTRY_MESSAGE_TYPE, msg);
|
|
174
170
|
}
|
|
175
171
|
serviceClient({ name }) {
|
|
176
|
-
|
|
177
|
-
get: (_target, prop) => {
|
|
178
|
-
const route = prop;
|
|
179
|
-
return (...args) => {
|
|
180
|
-
return this.invoke(name, route, args.shift(), undefined, serializeJson, deserializeJson);
|
|
181
|
-
};
|
|
182
|
-
},
|
|
183
|
-
});
|
|
184
|
-
return clientProxy;
|
|
172
|
+
return makeRpcCallProxy((call) => this.genericCall(call), name);
|
|
185
173
|
}
|
|
186
174
|
objectClient({ name }, key) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
const route = prop;
|
|
201
|
-
return (...args) => {
|
|
202
|
-
this.invokeOneWay(service.name, route, args.shift(), serializeJson, opts?.delay).catch((e) => {
|
|
203
|
-
this.stateMachine.handleDanglingPromiseError(e);
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
|
-
},
|
|
207
|
-
});
|
|
208
|
-
return clientProxy;
|
|
209
|
-
}
|
|
210
|
-
objectSendClient(obj, key, opts) {
|
|
211
|
-
const clientProxy = new Proxy({}, {
|
|
212
|
-
get: (_target, prop) => {
|
|
213
|
-
const route = prop;
|
|
214
|
-
return (...args) => {
|
|
215
|
-
this.invokeOneWay(obj.name, route, args.shift(), serializeJson, opts?.delay, key).catch((e) => {
|
|
216
|
-
this.stateMachine.handleDanglingPromiseError(e);
|
|
217
|
-
});
|
|
218
|
-
};
|
|
219
|
-
},
|
|
220
|
-
});
|
|
221
|
-
return clientProxy;
|
|
222
|
-
}
|
|
223
|
-
workflowSendClient(def, key, opts) {
|
|
224
|
-
const clientProxy = new Proxy({}, {
|
|
225
|
-
get: (_target, prop) => {
|
|
226
|
-
const route = prop;
|
|
227
|
-
return (...args) => {
|
|
228
|
-
this.invokeOneWay(def.name, route, args.shift(), serializeJson, opts?.delay, key).catch((e) => {
|
|
229
|
-
this.stateMachine.handleDanglingPromiseError(e);
|
|
230
|
-
});
|
|
231
|
-
};
|
|
232
|
-
},
|
|
233
|
-
});
|
|
234
|
-
return clientProxy;
|
|
175
|
+
return makeRpcCallProxy((call) => this.genericCall(call), name, key);
|
|
176
|
+
}
|
|
177
|
+
workflowClient({ name }, key) {
|
|
178
|
+
return makeRpcCallProxy((call) => this.genericCall(call), name, key);
|
|
179
|
+
}
|
|
180
|
+
serviceSendClient({ name }, opts) {
|
|
181
|
+
return makeRpcSendProxy((send) => this.genericSend(send), name, undefined, opts?.delay);
|
|
182
|
+
}
|
|
183
|
+
objectSendClient({ name }, key, opts) {
|
|
184
|
+
return makeRpcSendProxy((send) => this.genericSend(send), name, key, opts?.delay);
|
|
185
|
+
}
|
|
186
|
+
workflowSendClient({ name }, key, opts) {
|
|
187
|
+
return makeRpcSendProxy((send) => this.genericSend(send), name, key, opts?.delay);
|
|
235
188
|
}
|
|
236
189
|
// DON'T make this function async!!!
|
|
237
190
|
// The reason is that we want the errors thrown by the initial checks to be propagated in the caller context,
|
|
238
191
|
// and not in the promise context. To understand the semantic difference, make this function async and run the
|
|
239
192
|
// UnawaitedSideEffectShouldFailSubsequentContextCall test.
|
|
240
|
-
run(nameOrAction, actionSecondParameter) {
|
|
193
|
+
run(nameOrAction, actionSecondParameter, options) {
|
|
241
194
|
this.checkState("run");
|
|
242
195
|
const { name, action } = unpack(nameOrAction, actionSecondParameter);
|
|
243
196
|
this.executingRun = true;
|
|
197
|
+
const serde = options?.serde ?? defaultSerde();
|
|
244
198
|
const executeRun = async () => {
|
|
245
199
|
// in replay mode, we directly return the value from the log
|
|
246
200
|
if (this.stateMachine.nextEntryWillBeReplayed()) {
|
|
247
201
|
const emptyMsg = new RunEntryMessage({});
|
|
248
|
-
return this.stateMachine
|
|
202
|
+
return this.stateMachine
|
|
203
|
+
.handleUserCodeMessage(SIDE_EFFECT_ENTRY_MESSAGE_TYPE, emptyMsg)
|
|
204
|
+
.transform((result) => {
|
|
205
|
+
if (!result || result instanceof Empty) {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
return serde.deserialize(result);
|
|
209
|
+
});
|
|
249
210
|
}
|
|
250
211
|
let sideEffectResult;
|
|
251
212
|
try {
|
|
@@ -291,7 +252,7 @@ export class ContextImpl {
|
|
|
291
252
|
name,
|
|
292
253
|
result: {
|
|
293
254
|
case: "value",
|
|
294
|
-
value:
|
|
255
|
+
value: serde.serialize(sideEffectResult),
|
|
295
256
|
},
|
|
296
257
|
})
|
|
297
258
|
: new RunEntryMessage({
|
|
@@ -324,17 +285,23 @@ export class ContextImpl {
|
|
|
324
285
|
}));
|
|
325
286
|
}
|
|
326
287
|
// -- Awakeables
|
|
327
|
-
awakeable() {
|
|
288
|
+
awakeable(serde) {
|
|
328
289
|
this.checkState("awakeable");
|
|
329
290
|
const msg = new AwakeableEntryMessage();
|
|
330
291
|
const promise = this.stateMachine
|
|
331
292
|
.handleUserCodeMessage(AWAKEABLE_ENTRY_MESSAGE_TYPE, msg)
|
|
332
293
|
.transform((result) => {
|
|
333
|
-
if (!(result instanceof
|
|
294
|
+
if (!(result instanceof Uint8Array)) {
|
|
334
295
|
// This should either be a filled buffer or an empty buffer but never anything else.
|
|
335
296
|
throw RetryableError.internal("Awakeable was not resolved with a buffer payload");
|
|
336
297
|
}
|
|
337
|
-
|
|
298
|
+
if (!serde) {
|
|
299
|
+
return defaultSerde().deserialize(result);
|
|
300
|
+
}
|
|
301
|
+
if (result.length == 0) {
|
|
302
|
+
return undefined;
|
|
303
|
+
}
|
|
304
|
+
return serde.deserialize(result);
|
|
338
305
|
});
|
|
339
306
|
// This needs to be done after handling the message in the state machine
|
|
340
307
|
// otherwise the index is not yet incremented.
|
|
@@ -346,14 +313,24 @@ export class ContextImpl {
|
|
|
346
313
|
promise: this.markCombineablePromise(promise),
|
|
347
314
|
};
|
|
348
315
|
}
|
|
349
|
-
resolveAwakeable(id, payload) {
|
|
316
|
+
resolveAwakeable(id, payload, serde) {
|
|
350
317
|
// We coerce undefined to null as null can be stringified by JSON.stringify
|
|
351
|
-
|
|
318
|
+
let value;
|
|
319
|
+
if (serde) {
|
|
320
|
+
value =
|
|
321
|
+
payload == undefined ? new Uint8Array() : serde.serialize(payload);
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
value =
|
|
325
|
+
payload != undefined
|
|
326
|
+
? defaultSerde().serialize(payload)
|
|
327
|
+
: defaultSerde().serialize(null);
|
|
328
|
+
}
|
|
352
329
|
this.checkState("resolveAwakeable");
|
|
353
330
|
this.completeAwakeable(id, {
|
|
354
331
|
result: {
|
|
355
332
|
case: "value",
|
|
356
|
-
value
|
|
333
|
+
value,
|
|
357
334
|
},
|
|
358
335
|
});
|
|
359
336
|
}
|
|
@@ -454,9 +431,11 @@ function extractContext(n) {
|
|
|
454
431
|
class DurablePromiseImpl {
|
|
455
432
|
ctx;
|
|
456
433
|
name;
|
|
457
|
-
|
|
434
|
+
serde;
|
|
435
|
+
constructor(ctx, name, serde) {
|
|
458
436
|
this.ctx = ctx;
|
|
459
437
|
this.name = name;
|
|
438
|
+
this.serde = serde ?? defaultSerde();
|
|
460
439
|
}
|
|
461
440
|
then(onfulfilled, onrejected) {
|
|
462
441
|
return this.get().then(onfulfilled, onrejected);
|
|
@@ -474,7 +453,15 @@ class DurablePromiseImpl {
|
|
|
474
453
|
});
|
|
475
454
|
return this.ctx.markCombineablePromise(this.ctx.stateMachine
|
|
476
455
|
.handleUserCodeMessage(GET_PROMISE_MESSAGE_TYPE, msg)
|
|
477
|
-
.transform((v) =>
|
|
456
|
+
.transform((v) => {
|
|
457
|
+
if (!v) {
|
|
458
|
+
return undefined;
|
|
459
|
+
}
|
|
460
|
+
if (v instanceof Empty) {
|
|
461
|
+
return undefined;
|
|
462
|
+
}
|
|
463
|
+
return this.serde.deserialize(v);
|
|
464
|
+
}));
|
|
478
465
|
}
|
|
479
466
|
peek() {
|
|
480
467
|
const msg = new PeekPromiseEntryMessage({
|
|
@@ -482,14 +469,20 @@ class DurablePromiseImpl {
|
|
|
482
469
|
});
|
|
483
470
|
return this.ctx.stateMachine
|
|
484
471
|
.handleUserCodeMessage(PEEK_PROMISE_MESSAGE_TYPE, msg)
|
|
485
|
-
.transform((v) =>
|
|
472
|
+
.transform((v) => {
|
|
473
|
+
if (!v || v instanceof Empty) {
|
|
474
|
+
return undefined;
|
|
475
|
+
}
|
|
476
|
+
return this.serde.deserialize(v);
|
|
477
|
+
});
|
|
486
478
|
}
|
|
487
479
|
resolve(value) {
|
|
480
|
+
const buffer = value != undefined ? this.serde.serialize(value) : new Uint8Array();
|
|
488
481
|
const msg = new CompletePromiseEntryMessage({
|
|
489
482
|
key: this.name,
|
|
490
483
|
completion: {
|
|
491
484
|
case: "completionValue",
|
|
492
|
-
value:
|
|
485
|
+
value: buffer,
|
|
493
486
|
},
|
|
494
487
|
});
|
|
495
488
|
return this.ctx.stateMachine.handleUserCodeMessage(COMPLETE_PROMISE_MESSAGE_TYPE, msg);
|