@restatedev/restate-sdk 1.11.1 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +12 -9
  2. package/dist/_virtual/rolldown_runtime.cjs +9 -0
  3. package/dist/common_api.cjs +2 -1
  4. package/dist/common_api.d.cts +6 -2
  5. package/dist/common_api.d.cts.map +1 -1
  6. package/dist/common_api.d.ts +6 -2
  7. package/dist/common_api.d.ts.map +1 -1
  8. package/dist/common_api.js +2 -1
  9. package/dist/common_api.js.map +1 -1
  10. package/dist/context.cjs +13 -9
  11. package/dist/context.d.cts +36 -29
  12. package/dist/context.d.cts.map +1 -1
  13. package/dist/context.d.ts +36 -29
  14. package/dist/context.d.ts.map +1 -1
  15. package/dist/context.js +13 -9
  16. package/dist/context.js.map +1 -1
  17. package/dist/context_impl.cjs +150 -91
  18. package/dist/context_impl.d.cts +8 -0
  19. package/dist/context_impl.d.ts +8 -72
  20. package/dist/context_impl.d.ts.map +1 -1
  21. package/dist/context_impl.js +151 -93
  22. package/dist/context_impl.js.map +1 -1
  23. package/dist/endpoint/components.cjs +38 -22
  24. package/dist/endpoint/components.d.cts +5 -0
  25. package/dist/endpoint/components.d.ts +5 -97
  26. package/dist/endpoint/components.d.ts.map +1 -1
  27. package/dist/endpoint/components.js +38 -22
  28. package/dist/endpoint/components.js.map +1 -1
  29. package/dist/endpoint/endpoint.cjs +2 -2
  30. package/dist/endpoint/endpoint.d.cts +5 -0
  31. package/dist/endpoint/endpoint.d.ts +5 -39
  32. package/dist/endpoint/endpoint.js +2 -2
  33. package/dist/endpoint/endpoint.js.map +1 -1
  34. package/dist/endpoint/handlers/generic.cjs +113 -39
  35. package/dist/endpoint/handlers/generic.d.ts.map +1 -1
  36. package/dist/endpoint/handlers/generic.js +113 -39
  37. package/dist/endpoint/handlers/generic.js.map +1 -1
  38. package/dist/endpoint/handlers/types.d.cts +1 -0
  39. package/dist/endpoint/handlers/types.d.ts +1 -41
  40. package/dist/endpoint/handlers/utils.cjs +1 -1
  41. package/dist/endpoint/handlers/utils.js +1 -1
  42. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.cjs +43 -3
  43. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.d.ts +19 -1
  44. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.d.ts.map +1 -1
  45. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js +43 -3
  46. package/dist/endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js.map +1 -1
  47. package/dist/endpoint/node_endpoint.cjs +28 -12
  48. package/dist/endpoint/node_endpoint.d.ts +14 -2
  49. package/dist/endpoint/node_endpoint.d.ts.map +1 -1
  50. package/dist/endpoint/node_endpoint.js +27 -11
  51. package/dist/endpoint/node_endpoint.js.map +1 -1
  52. package/dist/endpoint/types.d.cts +1 -1
  53. package/dist/endpoint/types.d.ts +1 -1
  54. package/dist/endpoint.d.cts +87 -5
  55. package/dist/endpoint.d.cts.map +1 -1
  56. package/dist/endpoint.d.ts +87 -5
  57. package/dist/endpoint.d.ts.map +1 -1
  58. package/dist/error_sanitization.cjs +26 -0
  59. package/dist/error_sanitization.d.ts +13 -0
  60. package/dist/error_sanitization.d.ts.map +1 -0
  61. package/dist/error_sanitization.js +26 -0
  62. package/dist/error_sanitization.js.map +1 -0
  63. package/dist/fetch.cjs +3 -1
  64. package/dist/fetch.d.cts +5 -3
  65. package/dist/fetch.d.cts.map +1 -1
  66. package/dist/fetch.d.ts +5 -3
  67. package/dist/fetch.d.ts.map +1 -1
  68. package/dist/fetch.js +3 -2
  69. package/dist/fetch.js.map +1 -1
  70. package/dist/hooks.d.cts +87 -0
  71. package/dist/hooks.d.cts.map +1 -0
  72. package/dist/hooks.d.ts +87 -0
  73. package/dist/hooks.d.ts.map +1 -0
  74. package/dist/hooks.js +2 -0
  75. package/dist/hooks.js.map +1 -0
  76. package/dist/index.cjs +3 -1
  77. package/dist/index.d.cts +6 -4
  78. package/dist/index.d.ts +6 -4
  79. package/dist/index.js +3 -2
  80. package/dist/internal.cjs +3 -1
  81. package/dist/internal.d.cts +186 -2
  82. package/dist/internal.d.cts.map +1 -1
  83. package/dist/internal.d.ts +186 -2
  84. package/dist/internal.d.ts.map +1 -1
  85. package/dist/internal.js +4 -1
  86. package/dist/internal.js.map +1 -1
  87. package/dist/io.d.cts +1 -0
  88. package/dist/io.d.ts +1 -24
  89. package/dist/lambda.cjs +3 -1
  90. package/dist/lambda.d.cts +5 -3
  91. package/dist/lambda.d.cts.map +1 -1
  92. package/dist/lambda.d.ts +5 -3
  93. package/dist/lambda.d.ts.map +1 -1
  94. package/dist/lambda.js +3 -2
  95. package/dist/lambda.js.map +1 -1
  96. package/dist/logging/logger.d.cts +1 -0
  97. package/dist/logging/logger.d.ts +1 -10
  98. package/dist/node.cjs +23 -6
  99. package/dist/node.d.cts +46 -8
  100. package/dist/node.d.cts.map +1 -1
  101. package/dist/node.d.ts +46 -8
  102. package/dist/node.d.ts.map +1 -1
  103. package/dist/node.js +23 -7
  104. package/dist/node.js.map +1 -1
  105. package/dist/package.cjs +1 -1
  106. package/dist/package.js +1 -1
  107. package/dist/package.js.map +1 -1
  108. package/dist/promises.cjs +100 -53
  109. package/dist/promises.d.cts +18 -0
  110. package/dist/promises.d.cts.map +1 -0
  111. package/dist/promises.d.ts +15 -108
  112. package/dist/promises.d.ts.map +1 -1
  113. package/dist/promises.js +95 -48
  114. package/dist/promises.js.map +1 -1
  115. package/dist/types/errors.cjs +13 -0
  116. package/dist/types/errors.d.cts +11 -5
  117. package/dist/types/errors.d.cts.map +1 -1
  118. package/dist/types/errors.d.ts +11 -5
  119. package/dist/types/errors.d.ts.map +1 -1
  120. package/dist/types/errors.js +13 -1
  121. package/dist/types/errors.js.map +1 -1
  122. package/dist/types/rpc.cjs +7 -19
  123. package/dist/types/rpc.d.cts +185 -0
  124. package/dist/types/rpc.d.cts.map +1 -1
  125. package/dist/types/rpc.d.ts +185 -0
  126. package/dist/types/rpc.d.ts.map +1 -1
  127. package/dist/types/rpc.js +7 -19
  128. package/dist/types/rpc.js.map +1 -1
  129. package/package.json +2 -2
@@ -1,72 +1,8 @@
1
- import type { ContextDate, DurablePromise, GenericCall, GenericSend, InvocationHandle, InvocationId, InvocationPromise, ObjectContext, Rand, Request, RestatePromise, RunAction, RunOptions, SendOptions, WorkflowContext } from "./context.js";
2
- import type * as vm from "./endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js";
3
- import { TerminalError } from "./types/errors.js";
4
- import type { Client, SendClient } from "./types/rpc.js";
5
- import { HandlerKind } from "./types/rpc.js";
6
- import type { Duration, JournalValueCodec, Serde, Service, ServiceDefinitionFrom, VirtualObject, VirtualObjectDefinitionFrom, Workflow, WorkflowDefinitionFrom } from "@restatedev/restate-sdk-core";
7
- import { CompletablePromise } from "./utils/completable_promise.js";
8
- import type { AsyncResultValue } from "./promises.js";
9
- import { PromisesExecutor } from "./promises.js";
10
- import type { ContextInternal } from "./internal.js";
11
- import { InputReader, OutputWriter } from "./endpoint/handlers/types.js";
12
- export declare class ContextImpl implements ObjectContext, WorkflowContext, ContextInternal {
13
- readonly coreVm: vm.WasmVM;
14
- readonly console: Console;
15
- readonly handlerKind: HandlerKind;
16
- readonly vmLogger: Console;
17
- private readonly invocationRequest;
18
- private readonly invocationEndPromise;
19
- readonly journalValueCodec: JournalValueCodec;
20
- private readonly asTerminalError?;
21
- readonly rand: Rand;
22
- readonly date: ContextDate;
23
- private readonly outputPump;
24
- private readonly runClosuresTracker;
25
- readonly promisesExecutor: PromisesExecutor;
26
- readonly defaultSerde: Serde<any>;
27
- private readonly serviceKey;
28
- constructor(coreVm: vm.WasmVM, input: vm.WasmInput, console: Console, handlerKind: HandlerKind, vmLogger: Console, invocationRequest: Request, invocationEndPromise: CompletablePromise<void>, inputReader: InputReader, outputWriter: OutputWriter, journalValueCodec: JournalValueCodec, defaultSerde?: Serde<any>, asTerminalError?: ((error: any) => TerminalError | undefined) | undefined);
29
- isProcessing(): boolean;
30
- cancel(invocationId: InvocationId): void;
31
- attach<T>(invocationId: InvocationId, serde?: Serde<T>): RestatePromise<T>;
32
- get key(): string;
33
- request(): Request;
34
- get<T>(name: string, serde?: Serde<T>): RestatePromise<T | null>;
35
- stateKeys(): RestatePromise<Array<string>>;
36
- set<T>(name: string, value: T, serde?: Serde<T>): void;
37
- clear(name: string): void;
38
- clearAll(): void;
39
- genericCall<REQ = Uint8Array, RES = Uint8Array>(call: GenericCall<REQ, RES>): InvocationPromise<RES>;
40
- genericSend<REQ = Uint8Array>(send: GenericSend<REQ>): InvocationHandle;
41
- serviceClient<D>({ name }: ServiceDefinitionFrom<D>): Client<Service<D>>;
42
- objectClient<D>({ name }: VirtualObjectDefinitionFrom<D>, key: string): Client<VirtualObject<D>>;
43
- workflowClient<D>({ name }: WorkflowDefinitionFrom<D>, key: string): Client<Workflow<D>>;
44
- serviceSendClient<D>({ name }: ServiceDefinitionFrom<D>, opts?: SendOptions): SendClient<Service<D>>;
45
- objectSendClient<D>({ name }: VirtualObjectDefinitionFrom<D>, key: string, opts?: SendOptions): SendClient<VirtualObject<D>>;
46
- workflowSendClient<D>({ name }: WorkflowDefinitionFrom<D>, key: string, opts?: SendOptions): SendClient<Workflow<D>>;
47
- run<T>(nameOrAction: string | RunAction<T>, actionSecondParameter?: RunAction<T>, options?: RunOptions<T>): RestatePromise<T>;
48
- sleep(duration: number | Duration, name?: string): RestatePromise<void>;
49
- awakeable<T>(serde?: Serde<T>): {
50
- id: string;
51
- promise: RestatePromise<T>;
52
- };
53
- resolveAwakeable<T>(id: string, payload?: T, serde?: Serde<T>): void;
54
- rejectAwakeable(id: string, reason: string): void;
55
- promise<T>(name: string, serde?: Serde<T>): DurablePromise<T>;
56
- static createCombinator<T extends readonly RestatePromise<unknown>[]>(combinatorConstructor: (promises: Promise<any>[]) => Promise<any>, promises: T): RestatePromise<unknown>;
57
- private processNonCompletableEntry;
58
- processCompletableEntry<T, U>(commandType: vm.WasmCommandType, prepare: () => T, vmCall: (vm: vm.WasmVM, t: T) => number, ...completers: Array<Completer>): RestatePromise<U>;
59
- promiseExecutorErrorCallback(e: unknown): void;
60
- handleInvocationEndError(e: unknown, notify_vm_error?: (vm: vm.WasmVM, error: Error) => void): void;
61
- }
62
- export declare class RunClosuresTracker {
63
- private currentRunWaitPoint?;
64
- private runsToExecute;
65
- executeRun(handle: number): void;
66
- registerRunClosure(handle: number, runClosure: () => Promise<any>): void;
67
- awaitNextCompletedRun(): Promise<void>;
68
- private unblockCurrentRunWaitPoint;
69
- }
70
- type Completer = (value: AsyncResultValue, prom: CompletablePromise<any>) => Promise<boolean>;
71
- export {};
72
- //# sourceMappingURL=context_impl.d.ts.map
1
+ import "./types/errors.js";
2
+ import "./types/rpc.js";
3
+ import "./context.js";
4
+ import "./internal.js";
5
+ import "./endpoint/components.js";
6
+ import "./endpoint/handlers/types.js";
7
+ import "./promises.js";
8
+ import { Duration, JournalValueCodec, Serde, Service, ServiceDefinitionFrom, VirtualObject, VirtualObjectDefinitionFrom, Workflow, WorkflowDefinitionFrom } from "@restatedev/restate-sdk-core";
@@ -1 +1 @@
1
- {"version":3,"file":"context_impl.d.ts","sourceRoot":"","sources":["../src/context_impl.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,OAAO,EACP,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,KAAK,EAAE,MAAM,yDAAyD,CAAC;AAKnF,OAAO,EAML,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EACjB,KAAK,EACL,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,QAAQ,EACR,sBAAsB,EACvB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,eAAe,CAAC;AAC9E,OAAO,EAIL,gBAAgB,EAKjB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEzE,qBAAa,WACX,YAAW,aAAa,EAAE,eAAe,EAAE,eAAe;IAqBxD,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM;aAEV,OAAO,EAAE,OAAO;aAChB,WAAW,EAAE,WAAW;IACxC,QAAQ,CAAC,QAAQ,EAAE,OAAO;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAGrC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IAE7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IA9BnC,SAAgB,IAAI,EAAE,IAAI,CAAC;IAE3B,SAAgB,IAAI,EAAE,WAAW,CAQ/B;IAEF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGzB,MAAM,EAAE,EAAE,CAAC,MAAM,EAC1B,KAAK,EAAE,EAAE,CAAC,SAAS,EACH,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EAC/B,QAAQ,EAAE,OAAO,EACT,iBAAiB,EAAE,OAAO,EAC1B,oBAAoB,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAC/D,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EACjB,iBAAiB,EAAE,iBAAiB,EAC7C,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EACR,eAAe,CAAC,GAAE,CAAC,KAAK,EAAE,GAAG,KAAK,aAAa,GAAG,SAAS,aAAA;IA2B9E,YAAY,IAAI,OAAO;IAIvB,MAAM,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAQxC,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAU1E,IAAW,GAAG,IAAI,MAAM,CAUvB;IAEM,OAAO,IAAI,OAAO;IAIlB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC;IAUhE,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAS1C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;IAWtD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQzB,QAAQ,IAAI,IAAI;IAUhB,WAAW,CAAC,GAAG,GAAG,UAAU,EAAE,GAAG,GAAG,UAAU,EACnD,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAC1B,iBAAiB,CAAC,GAAG,CAAC;IAkElB,WAAW,CAAC,GAAG,GAAG,UAAU,EACjC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,GACrB,gBAAgB;IA4DnB,aAAa,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IASxE,YAAY,CAAC,CAAC,EACZ,EAAE,IAAI,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC,EACxC,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAS3B,cAAc,CAAC,CAAC,EACd,EAAE,IAAI,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IASf,iBAAiB,CAAC,CAAC,EACxB,EAAE,IAAI,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAClC,IAAI,CAAC,EAAE,WAAW,GACjB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAUlB,gBAAgB,CAAC,CAAC,EACvB,EAAE,IAAI,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,GACjB,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAU/B,kBAAkB,CAAC,CAAC,EAClB,EAAE,IAAI,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,GACjB,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAcnB,GAAG,CAAC,CAAC,EACV,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,EACnC,qBAAqB,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EACpC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GACtB,cAAc,CAAC,CAAC,CAAC;IAuIb,KAAK,CACV,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,cAAc,CAAC,IAAI,CAAC;IAsBhB,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG;QACrC,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;KAC5B;IA0BM,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;IAsBpE,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAcjD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;WAKtD,gBAAgB,CAAC,CAAC,SAAS,SAAS,cAAc,CAAC,OAAO,CAAC,EAAE,EACzE,qBAAqB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACjE,QAAQ,EAAE,CAAC,GACV,cAAc,CAAC,OAAO,CAAC;IA6B1B,OAAO,CAAC,0BAA0B;IA0BlC,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAC1B,WAAW,EAAE,EAAE,CAAC,eAAe,EAC/B,OAAO,EAAE,MAAM,CAAC,EAChB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,EACvC,GAAG,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,GAC9B,cAAc,CAAC,CAAC,CAAC;IA8BpB,4BAA4B,CAAC,CAAC,EAAE,OAAO;IAyBvC,wBAAwB,CACtB,CAAC,EAAE,OAAO,EACV,eAAe,GAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAEjD;CASJ;AAmGD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,mBAAmB,CAAC,CAA2B;IACvD,OAAO,CAAC,aAAa,CAGjB;IAEJ,UAAU,CAAC,MAAM,EAAE,MAAM;IAYzB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;IAIjE,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtC,OAAO,CAAC,0BAA0B;CAOnC;AAID,KAAK,SAAS,GAAG,CACf,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"context_impl.d.ts","sourceRoot":"","sources":["../src/context_impl.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { WasmCommandType, WasmHeader } from "./endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js";
2
- import { INTERNAL_ERROR_CODE, RestateError, RetryableError, TerminalError, UNKNOWN_ERROR_CODE, ensureError, logError } from "./types/errors.js";
1
+ import { INTERNAL_ERROR_CODE, RetryableError, TerminalError, UNKNOWN_ERROR_CODE, ensureError } from "./types/errors.js";
2
+ import { CompletablePromise } from "./utils/completable_promise.js";
3
+ import { CombinatorRestatePromise, ConstRestatePromise, InvocationRestatePromise, PromisesExecutor, SingleRestatePromise, pendingPromise } from "./promises.js";
3
4
  import { HandlerKind, makeRpcCallProxy, makeRpcSendProxy } from "./types/rpc.js";
5
+ import { WasmCommandType, WasmHeader } from "./endpoint/handlers/vm/sdk_shared_core_wasm_bindings.js";
4
6
  import { RandImpl } from "./utils/rand.js";
5
- import { CompletablePromise } from "./utils/completable_promise.js";
6
- import { InvocationPendingPromise, PromisesExecutor, RestateCombinatorPromise, RestateInvocationPromise, RestatePendingPromise, RestateSinglePromise, extractContext, pendingPromise } from "./promises.js";
7
7
  import { InputPump, OutputPump } from "./io.js";
8
8
  import { millisOrDurationToMillis, serde } from "@restatedev/restate-sdk-core";
9
9
 
@@ -21,9 +21,13 @@ var ContextImpl = class {
21
21
  outputPump;
22
22
  runClosuresTracker;
23
23
  promisesExecutor;
24
- defaultSerde;
25
24
  serviceKey;
26
- constructor(coreVm, input, console, handlerKind, vmLogger, invocationRequest, invocationEndPromise, inputReader, outputWriter, journalValueCodec, defaultSerde, asTerminalError) {
25
+ runInterceptor;
26
+ cancellationPromise;
27
+ defaultSerde;
28
+ asTerminalError;
29
+ trackedInvocationIdPromises;
30
+ constructor(coreVm, input, console, handlerKind, vmLogger, invocationRequest, invocationEndPromise, inputReader, outputWriter, journalValueCodec, executionOptions) {
27
31
  this.coreVm = coreVm;
28
32
  this.console = console;
29
33
  this.handlerKind = handlerKind;
@@ -31,18 +35,26 @@ var ContextImpl = class {
31
35
  this.invocationRequest = invocationRequest;
32
36
  this.invocationEndPromise = invocationEndPromise;
33
37
  this.journalValueCodec = journalValueCodec;
34
- this.asTerminalError = asTerminalError;
35
38
  this.rand = new RandImpl(input.random_seed, () => {});
36
39
  this.outputPump = new OutputPump(coreVm, outputWriter);
37
40
  this.runClosuresTracker = new RunClosuresTracker();
38
- this.promisesExecutor = new PromisesExecutor(coreVm, new InputPump(coreVm, inputReader, this.handleInvocationEndError.bind(this)), this.outputPump, this.runClosuresTracker, this.promiseExecutorErrorCallback.bind(this));
39
- this.defaultSerde = defaultSerde ?? serde.json;
41
+ this.promisesExecutor = new PromisesExecutor(coreVm, new InputPump(coreVm, inputReader, this.abortAttempt.bind(this)), this.outputPump, this.runClosuresTracker, this.abortAttempt.bind(this));
40
42
  this.serviceKey = input.key;
43
+ this.runInterceptor = (_name, runner) => runner();
44
+ this.defaultSerde = executionOptions?.defaultSerde ?? serde.json;
45
+ this.asTerminalError = executionOptions?.asTerminalError;
46
+ this.trackedInvocationIdPromises = executionOptions?.explicitCancellation ? [] : void 0;
47
+ }
48
+ setRunInterceptor(interceptor) {
49
+ this.runInterceptor = interceptor;
41
50
  }
42
51
  isProcessing() {
43
52
  return this.coreVm.is_processing();
44
53
  }
45
54
  cancel(invocationId) {
55
+ this._cancel(invocationId);
56
+ }
57
+ _cancel(invocationId) {
46
58
  this.processNonCompletableEntry(WasmCommandType.CancelInvocation, () => {}, (vm) => vm.sys_cancel_invocation(invocationId));
47
59
  }
48
60
  attach(invocationId, serde$1) {
@@ -81,17 +93,18 @@ var ContextImpl = class {
81
93
  try {
82
94
  parameter = this.journalValueCodec.encode(requestSerde.serialize(call.parameter));
83
95
  } catch (e) {
84
- this.handleInvocationEndError(e, (vm, error) => vm.notify_error_for_next_command(error.message, error.stack, WasmCommandType.Call));
85
- return new InvocationPendingPromise(this);
96
+ this.abortAttempt(e, WasmCommandType.Call);
97
+ return Object.assign(ConstRestatePromise.pending(), { invocationId: pendingPromise() });
86
98
  }
87
99
  try {
88
100
  const call_handles = this.coreVm.sys_call(call.service, call.method, parameter, call.key, call.headers ? Object.entries(call.headers).map(([key, value]) => new WasmHeader(key, value)) : [], call.idempotencyKey, call.name);
89
101
  const commandIndex = this.coreVm.last_command_index();
90
- const invocationIdPromise = new RestateSinglePromise(this, call_handles.invocation_id_completion_id, completeCommandPromiseUsing(WasmCommandType.Call, commandIndex, InvocationIdCompleter));
91
- return new RestateInvocationPromise(this, call_handles.call_completion_id, completeCommandPromiseUsing(WasmCommandType.Call, commandIndex, SuccessWithSerde(responseSerde, this.journalValueCodec), Failure), invocationIdPromise);
102
+ const invocationIdPromise = new SingleRestatePromise(this, call_handles.invocation_id_completion_id, completeCommandPromiseUsing(WasmCommandType.Call, commandIndex, InvocationIdCompleter));
103
+ this.trackedInvocationIdPromises?.push(invocationIdPromise);
104
+ return new InvocationRestatePromise(this, call_handles.call_completion_id, completeCommandPromiseUsing(WasmCommandType.Call, commandIndex, SuccessWithSerde(responseSerde, this.journalValueCodec), Failure), invocationIdPromise);
92
105
  } catch (e) {
93
- this.handleInvocationEndError(e);
94
- return new InvocationPendingPromise(this);
106
+ this.abortAttempt(e);
107
+ return Object.assign(ConstRestatePromise.pending(), { invocationId: pendingPromise() });
95
108
  }
96
109
  }
97
110
  genericSend(send) {
@@ -100,16 +113,16 @@ var ContextImpl = class {
100
113
  try {
101
114
  parameter = this.journalValueCodec.encode(requestSerde.serialize(send.parameter));
102
115
  } catch (e) {
103
- this.handleInvocationEndError(e, (vm, error) => vm.notify_error_for_next_command(error.message, error.stack, WasmCommandType.OneWayCall));
104
- return new InvocationPendingPromise(this);
116
+ this.abortAttempt(e, WasmCommandType.OneWayCall);
117
+ return Object.assign(ConstRestatePromise.pending(), { invocationId: pendingPromise() });
105
118
  }
106
119
  try {
107
120
  const delay = send.delay !== void 0 ? millisOrDurationToMillis(send.delay) : void 0;
108
121
  const handles = this.coreVm.sys_send(send.service, send.method, parameter, send.key, send.headers ? Object.entries(send.headers).map(([key, value]) => new WasmHeader(key, value)) : [], delay !== void 0 && delay > 0 ? BigInt(delay) : void 0, send.idempotencyKey, send.name);
109
122
  const commandIndex = this.coreVm.last_command_index();
110
- return { invocationId: new RestateSinglePromise(this, handles.invocation_id_completion_id, completeCommandPromiseUsing(WasmCommandType.OneWayCall, commandIndex, InvocationIdCompleter)) };
123
+ return { invocationId: new SingleRestatePromise(this, handles.invocation_id_completion_id, completeCommandPromiseUsing(WasmCommandType.OneWayCall, commandIndex, InvocationIdCompleter)) };
111
124
  } catch (e) {
112
- this.handleInvocationEndError(e);
125
+ this.abortAttempt(e);
113
126
  return { invocationId: pendingPromise() };
114
127
  }
115
128
  }
@@ -122,14 +135,14 @@ var ContextImpl = class {
122
135
  workflowClient({ name }, key) {
123
136
  return makeRpcCallProxy((call) => this.genericCall(call), this.defaultSerde, name, key);
124
137
  }
125
- serviceSendClient({ name }, opts) {
126
- return makeRpcSendProxy((send) => this.genericSend(send), this.defaultSerde, name, void 0, opts?.delay);
138
+ serviceSendClient({ name }) {
139
+ return makeRpcSendProxy((send) => this.genericSend(send), this.defaultSerde, name, void 0);
127
140
  }
128
- objectSendClient({ name }, key, opts) {
129
- return makeRpcSendProxy((send) => this.genericSend(send), this.defaultSerde, name, key, opts?.delay);
141
+ objectSendClient({ name }, key) {
142
+ return makeRpcSendProxy((send) => this.genericSend(send), this.defaultSerde, name, key);
130
143
  }
131
- workflowSendClient({ name }, key, opts) {
132
- return makeRpcSendProxy((send) => this.genericSend(send), this.defaultSerde, name, key, opts?.delay);
144
+ workflowSendClient({ name }, key) {
145
+ return makeRpcSendProxy((send) => this.genericSend(send), this.defaultSerde, name, key);
133
146
  }
134
147
  run(nameOrAction, actionSecondParameter, options) {
135
148
  const { name, action } = unpackRunParameters(nameOrAction, actionSecondParameter);
@@ -138,8 +151,8 @@ var ContextImpl = class {
138
151
  try {
139
152
  handle = this.coreVm.sys_run(name ?? "");
140
153
  } catch (e) {
141
- this.handleInvocationEndError(e);
142
- return new RestatePendingPromise(this);
154
+ this.abortAttempt(e);
155
+ return ConstRestatePromise.pending();
143
156
  }
144
157
  const commandIndex = this.coreVm.last_command_index();
145
158
  const doRun = async () => {
@@ -147,7 +160,9 @@ var ContextImpl = class {
147
160
  let res;
148
161
  let err;
149
162
  try {
150
- res = await action();
163
+ await this.runInterceptor(name ?? "", async () => {
164
+ res = await action();
165
+ });
151
166
  } catch (e) {
152
167
  err = ensureError(e, this.asTerminalError);
153
168
  }
@@ -161,22 +176,17 @@ var ContextImpl = class {
161
176
  value
162
177
  }))
163
178
  });
164
- else if (err instanceof RetryableError) {
165
- const maxRetryDuration = options?.maxRetryDuration ?? options?.maxRetryDurationMillis;
166
- this.coreVm.propose_run_completion_failure_transient_with_delay_override(handle, err.message, err.stack, BigInt(attemptDuration), err.retryAfter !== void 0 ? BigInt(millisOrDurationToMillis(err.retryAfter)) : void 0, options?.maxRetryAttempts, maxRetryDuration !== void 0 ? BigInt(millisOrDurationToMillis(maxRetryDuration)) : void 0);
167
- } else {
179
+ else if (err instanceof RetryableError) this.coreVm.propose_run_completion_failure_transient_with_delay_override(handle, err.message, err.stack, BigInt(attemptDuration), err.retryAfter !== void 0 ? BigInt(millisOrDurationToMillis(err.retryAfter)) : void 0, options?.maxRetryAttempts, options?.maxRetryDuration !== void 0 ? BigInt(millisOrDurationToMillis(options?.maxRetryDuration)) : void 0);
180
+ else {
168
181
  this.vmLogger.warn(`Error when processing ctx.run '${name}'.\n`, err);
169
182
  let retryPolicy;
170
- if (options?.retryIntervalFactor !== void 0 || options?.maxRetryAttempts !== void 0 || options?.initialRetryInterval !== void 0 || options?.initialRetryIntervalMillis !== void 0 || options?.maxRetryDuration !== void 0 || options?.maxRetryDurationMillis !== void 0 || options?.maxRetryInterval !== void 0 || options?.maxRetryIntervalMillis !== void 0) {
171
- const maxRetryDuration = options?.maxRetryDuration ?? options?.maxRetryDurationMillis;
172
- retryPolicy = {
173
- factor: options?.retryIntervalFactor ?? 2,
174
- initial_interval: millisOrDurationToMillis(options?.initialRetryInterval ?? options?.initialRetryIntervalMillis ?? 50),
175
- max_attempts: options?.maxRetryAttempts,
176
- max_duration: maxRetryDuration === void 0 ? void 0 : millisOrDurationToMillis(maxRetryDuration),
177
- max_interval: millisOrDurationToMillis(options?.maxRetryInterval ?? options?.maxRetryIntervalMillis ?? { seconds: 10 })
178
- };
179
- }
183
+ if (options?.retryIntervalFactor !== void 0 || options?.maxRetryAttempts !== void 0 || options?.initialRetryInterval !== void 0 || options?.maxRetryDuration !== void 0 || options?.maxRetryInterval !== void 0) retryPolicy = {
184
+ factor: options?.retryIntervalFactor ?? 2,
185
+ initial_interval: millisOrDurationToMillis(options?.initialRetryInterval ?? 50),
186
+ max_attempts: options?.maxRetryAttempts,
187
+ max_duration: options?.maxRetryDuration === void 0 ? void 0 : millisOrDurationToMillis(options?.maxRetryDuration),
188
+ max_interval: millisOrDurationToMillis(options?.maxRetryInterval ?? { seconds: 10 })
189
+ };
180
190
  this.coreVm.propose_run_completion_failure_transient(handle, err.message, err.stack, BigInt(attemptDuration), retryPolicy);
181
191
  }
182
192
  else {
@@ -185,13 +195,13 @@ var ContextImpl = class {
185
195
  this.coreVm.propose_run_completion_success(handle, encodedRes);
186
196
  }
187
197
  } catch (e) {
188
- this.handleInvocationEndError(e);
198
+ this.abortAttempt(e);
189
199
  return pendingPromise();
190
200
  }
191
201
  await this.outputPump.awaitNextProgress();
192
202
  };
193
203
  this.runClosuresTracker.registerRunClosure(handle, doRun);
194
- return new RestateSinglePromise(this, handle, completeCommandPromiseUsing(WasmCommandType.Run, commandIndex, SuccessWithSerde(serde$1, this.journalValueCodec), Failure));
204
+ return new SingleRestatePromise(this, handle, completeCommandPromiseUsing(WasmCommandType.Run, commandIndex, SuccessWithSerde(serde$1, this.journalValueCodec), Failure));
195
205
  }
196
206
  sleep(duration, name) {
197
207
  return this.processCompletableEntry(WasmCommandType.Sleep, () => {
@@ -206,15 +216,15 @@ var ContextImpl = class {
206
216
  try {
207
217
  awakeable = this.coreVm.sys_awakeable();
208
218
  } catch (e) {
209
- this.handleInvocationEndError(e);
219
+ this.abortAttempt(e);
210
220
  return {
211
221
  id: "invalid",
212
- promise: new RestatePendingPromise(this)
222
+ promise: ConstRestatePromise.pending()
213
223
  };
214
224
  }
215
225
  return {
216
226
  id: awakeable.id,
217
- promise: new RestateSinglePromise(this, awakeable.handle, completeSignalPromiseUsing(VoidAsUndefined, SuccessWithSerde(serde$1 ?? this.defaultSerde, this.journalValueCodec), Failure))
227
+ promise: new SingleRestatePromise(this, awakeable.handle, completeSignalPromiseUsing(VoidAsUndefined, SuccessWithSerde(serde$1 ?? this.defaultSerde, this.journalValueCodec), Failure))
218
228
  };
219
229
  }
220
230
  resolveAwakeable(id, payload, serde$1) {
@@ -227,41 +237,53 @@ var ContextImpl = class {
227
237
  }
228
238
  rejectAwakeable(id, reason) {
229
239
  this.processNonCompletableEntry(WasmCommandType.CompleteAwakeable, () => {}, (vm) => {
230
- vm.sys_complete_awakeable_failure(id, {
231
- code: UNKNOWN_ERROR_CODE,
232
- message: reason,
233
- metadata: []
234
- });
240
+ vm.sys_complete_awakeable_failure(id, toWasmFailure(reason));
235
241
  });
236
242
  }
243
+ signal(name, serde$1) {
244
+ let handle;
245
+ try {
246
+ handle = this.coreVm.sys_signal(name);
247
+ } catch (e) {
248
+ this.abortAttempt(e);
249
+ return ConstRestatePromise.pending();
250
+ }
251
+ return new SingleRestatePromise(this, handle, completeSignalPromiseUsing(VoidAsUndefined, SuccessWithSerde(serde$1 ?? this.defaultSerde, this.journalValueCodec), Failure));
252
+ }
253
+ invocation(invocationId) {
254
+ return new InvocationReferenceImpl(this, invocationId);
255
+ }
237
256
  promise(name, serde$1) {
238
257
  return new DurablePromiseImpl(this, name, serde$1);
239
258
  }
240
- static createCombinator(combinatorConstructor, promises) {
241
- const self = extractContext(promises[0]);
242
- if (!self) throw new Error("Not a combinable promise");
243
- const castedPromises = [];
244
- for (const promise of promises) {
245
- if (extractContext(promise) !== self) {
246
- self.handleInvocationEndError(/* @__PURE__ */ new Error("You're mixing up RestatePromises from different RestateContext. This is not supported."));
247
- return new RestatePendingPromise(self);
248
- }
249
- castedPromises.push(promise);
250
- }
251
- return new RestateCombinatorPromise(self, combinatorConstructor, castedPromises);
259
+ cancellation() {
260
+ if (!this.cancellationPromise || this.cancellationPromise.isCompleted()) this.cancellationPromise = new SingleRestatePromise(this, 1, completeSignalPromiseUsing(VoidAsUndefined));
261
+ return this.cancellationPromise;
262
+ }
263
+ cancelPreviousCalls() {
264
+ if (!this.trackedInvocationIdPromises) return ConstRestatePromise.resolve([]);
265
+ return CombinatorRestatePromise.fromPromises((p) => Promise.allSettled(p), this.trackedInvocationIdPromises.splice(0)).map((results, failure) => {
266
+ if (failure) throw failure;
267
+ const cancelled = [];
268
+ for (const result of results) if (result.status === "fulfilled") {
269
+ this._cancel(result.value);
270
+ cancelled.push(result.value);
271
+ } else this.console.warn(`Error when trying to get invocation id: ${result.reason}`);
272
+ return cancelled;
273
+ });
252
274
  }
253
275
  processNonCompletableEntry(commandType, prepare, vmCall) {
254
276
  let input;
255
277
  try {
256
278
  input = prepare();
257
279
  } catch (e) {
258
- this.handleInvocationEndError(e, (vm, error) => vm.notify_error_for_next_command(error.message, error.stack, commandType));
280
+ this.abortAttempt(e, commandType);
259
281
  return;
260
282
  }
261
283
  try {
262
284
  vmCall(this.coreVm, input);
263
285
  } catch (e) {
264
- this.handleInvocationEndError(e);
286
+ this.abortAttempt(e);
265
287
  }
266
288
  }
267
289
  processCompletableEntry(commandType, prepare, vmCall, ...completers) {
@@ -269,40 +291,38 @@ var ContextImpl = class {
269
291
  try {
270
292
  input = prepare();
271
293
  } catch (e) {
272
- this.handleInvocationEndError(e, (vm, error) => vm.notify_error_for_next_command(error.message, error.stack, commandType));
273
- return new RestatePendingPromise(this);
294
+ this.abortAttempt(e, commandType);
295
+ return ConstRestatePromise.pending();
274
296
  }
275
297
  let handle;
276
298
  try {
277
299
  handle = vmCall(this.coreVm, input);
278
300
  } catch (e) {
279
- this.handleInvocationEndError(e);
280
- return new RestatePendingPromise(this);
301
+ this.abortAttempt(e);
302
+ return ConstRestatePromise.pending();
281
303
  }
282
304
  const commandIndex = this.coreVm.last_command_index();
283
- return new RestateSinglePromise(this, handle, completeCommandPromiseUsing(commandType, commandIndex, ...completers));
284
- }
285
- promiseExecutorErrorCallback(e) {
286
- if (e instanceof AsyncCompleterError) {
287
- const cause = ensureError(e.cause);
288
- logError(this.vmLogger, e.cause);
289
- this.coreVm.notify_error_for_specific_command(cause.message, cause.stack, e.commandType, e.commandIndex, null);
290
- } else {
291
- const error = ensureError(e);
292
- logError(this.vmLogger, error);
293
- if (!(error instanceof RestateError)) this.coreVm.notify_error(error.message, error.stack);
294
- }
295
- this.invocationEndPromise.resolve();
305
+ return new SingleRestatePromise(this, handle, completeCommandPromiseUsing(commandType, commandIndex, ...completers));
296
306
  }
297
- handleInvocationEndError(e, notify_vm_error = (vm, error$1) => {
298
- vm.notify_error(error$1.message, error$1.stack);
299
- }) {
300
- const error = ensureError(e);
301
- logError(this.vmLogger, error);
302
- notify_vm_error(this.coreVm, error);
303
- this.invocationEndPromise.resolve();
307
+ abortAttempt(e, commandType) {
308
+ this.invocationEndPromise.reject(commandType !== void 0 ? new CommandError(e, commandType) : ensureError(e));
304
309
  }
305
310
  };
311
+ function toWasmFailure(reason) {
312
+ if (typeof reason === "string") return {
313
+ code: UNKNOWN_ERROR_CODE,
314
+ message: reason,
315
+ metadata: []
316
+ };
317
+ return {
318
+ code: reason.code,
319
+ message: reason.message,
320
+ metadata: Object.entries(reason.metadata ?? {}).map(([key, value]) => ({
321
+ key,
322
+ value
323
+ }))
324
+ };
325
+ }
306
326
  function unpackRunParameters(a, b) {
307
327
  if (typeof a === "string") {
308
328
  if (typeof b !== "function") throw new TypeError("");
@@ -315,6 +335,38 @@ function unpackRunParameters(a, b) {
315
335
  if (b) throw new TypeError("unexpected a function as a second parameter.");
316
336
  return { action: a };
317
337
  }
338
+ var InvocationReferenceImpl = class {
339
+ constructor(ctx, invocationId) {
340
+ this.ctx = ctx;
341
+ this.invocationId = invocationId;
342
+ }
343
+ signal(name, serde$1) {
344
+ return new SignalReferenceImpl(this.ctx, this.invocationId, name, serde$1);
345
+ }
346
+ cancel() {
347
+ this.ctx.cancel(this.invocationId);
348
+ }
349
+ attach(serde$1) {
350
+ return this.ctx.attach(this.invocationId, serde$1);
351
+ }
352
+ };
353
+ var SignalReferenceImpl = class {
354
+ serde;
355
+ constructor(ctx, invocationId, name, serde$1) {
356
+ this.ctx = ctx;
357
+ this.invocationId = invocationId;
358
+ this.name = name;
359
+ this.serde = serde$1 ?? this.ctx.defaultSerde;
360
+ }
361
+ resolve(payload) {
362
+ this.ctx.processNonCompletableEntry(WasmCommandType.SendSignal, () => this.ctx.journalValueCodec.encode(this.serde.serialize(payload)), (vm, bytes) => vm.sys_complete_signal_success(this.invocationId, this.name, bytes));
363
+ }
364
+ reject(reason) {
365
+ this.ctx.processNonCompletableEntry(WasmCommandType.SendSignal, () => {}, (vm) => {
366
+ vm.sys_complete_signal_failure(this.invocationId, this.name, toWasmFailure(reason));
367
+ });
368
+ }
369
+ };
318
370
  var DurablePromiseImpl = class {
319
371
  serde;
320
372
  constructor(ctx, name, serde$1) {
@@ -374,19 +426,25 @@ var RunClosuresTracker = class {
374
426
  }
375
427
  }
376
428
  };
377
- var AsyncCompleterError = class {
429
+ var CommandError = class extends Error {
378
430
  constructor(cause, commandType, commandIndex) {
431
+ const msg = cause instanceof Error ? cause.message : String(cause);
432
+ super(msg, { cause });
379
433
  this.cause = cause;
380
434
  this.commandType = commandType;
381
435
  this.commandIndex = commandIndex;
382
436
  }
437
+ /** True when the error is for a specific command that exists in the journal. */
438
+ get hasCommandIndex() {
439
+ return this.commandIndex !== void 0;
440
+ }
383
441
  };
384
442
  function completeCommandPromiseUsing(commandType, commandIndex, ...completers) {
385
443
  return async (value, prom) => {
386
444
  try {
387
445
  for (const completer of completers) if (await completer(value, prom)) return;
388
446
  } catch (e) {
389
- throw new AsyncCompleterError(e, commandType, commandIndex);
447
+ throw new CommandError(e, commandType, commandIndex);
390
448
  }
391
449
  throw new Error(`Unexpected variant in async result: ${JSON.stringify(value)}`);
392
450
  };
@@ -453,5 +511,5 @@ const InvocationIdCompleter = (value, prom) => {
453
511
  };
454
512
 
455
513
  //#endregion
456
- export { ContextImpl };
514
+ export { CommandError, ContextImpl };
457
515
  //# sourceMappingURL=context_impl.js.map