@restatedev/restate-sdk 0.9.2 → 1.0.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 (107) hide show
  1. package/README.md +10 -0
  2. package/dist/src/connection/buffered_connection.d.ts +1 -2
  3. package/dist/src/connection/buffered_connection.d.ts.map +1 -1
  4. package/dist/src/connection/buffered_connection.js.map +1 -1
  5. package/dist/src/connection/connection.d.ts +1 -0
  6. package/dist/src/connection/connection.d.ts.map +1 -1
  7. package/dist/src/connection/http_connection.d.ts +6 -2
  8. package/dist/src/connection/http_connection.d.ts.map +1 -1
  9. package/dist/src/connection/http_connection.js +8 -3
  10. package/dist/src/connection/http_connection.js.map +1 -1
  11. package/dist/src/connection/lambda_connection.d.ts +3 -1
  12. package/dist/src/connection/lambda_connection.d.ts.map +1 -1
  13. package/dist/src/connection/lambda_connection.js +6 -1
  14. package/dist/src/connection/lambda_connection.js.map +1 -1
  15. package/dist/src/context.d.ts +149 -44
  16. package/dist/src/context.d.ts.map +1 -1
  17. package/dist/src/context.js.map +1 -1
  18. package/dist/src/context_impl.d.ts +15 -12
  19. package/dist/src/context_impl.d.ts.map +1 -1
  20. package/dist/src/context_impl.js +109 -19
  21. package/dist/src/context_impl.js.map +1 -1
  22. package/dist/src/endpoint/endpoint_impl.d.ts +5 -6
  23. package/dist/src/endpoint/endpoint_impl.d.ts.map +1 -1
  24. package/dist/src/endpoint/endpoint_impl.js +44 -18
  25. package/dist/src/endpoint/endpoint_impl.js.map +1 -1
  26. package/dist/src/endpoint/http2_handler.d.ts.map +1 -1
  27. package/dist/src/endpoint/http2_handler.js +42 -9
  28. package/dist/src/endpoint/http2_handler.js.map +1 -1
  29. package/dist/src/endpoint/lambda_handler.d.ts.map +1 -1
  30. package/dist/src/endpoint/lambda_handler.js +34 -12
  31. package/dist/src/endpoint/lambda_handler.js.map +1 -1
  32. package/dist/src/endpoint.d.ts +5 -3
  33. package/dist/src/endpoint.d.ts.map +1 -1
  34. package/dist/src/endpoint.js.map +1 -1
  35. package/dist/src/generated/proto/discovery_pb.d.ts +18 -0
  36. package/dist/src/generated/proto/discovery_pb.d.ts.map +1 -0
  37. package/dist/src/generated/proto/discovery_pb.js +40 -0
  38. package/dist/src/generated/proto/discovery_pb.js.map +1 -0
  39. package/dist/src/generated/proto/protocol_pb.d.ts +186 -0
  40. package/dist/src/generated/proto/protocol_pb.d.ts.map +1 -1
  41. package/dist/src/generated/proto/protocol_pb.js +177 -1
  42. package/dist/src/generated/proto/protocol_pb.js.map +1 -1
  43. package/dist/src/generated/version.d.ts +1 -1
  44. package/dist/src/generated/version.js +1 -1
  45. package/dist/src/io/decoder.d.ts +0 -1
  46. package/dist/src/io/decoder.d.ts.map +1 -1
  47. package/dist/src/io/decoder.js +2 -8
  48. package/dist/src/io/decoder.js.map +1 -1
  49. package/dist/src/io/encoder.d.ts.map +1 -1
  50. package/dist/src/io/encoder.js +1 -2
  51. package/dist/src/io/encoder.js.map +1 -1
  52. package/dist/src/journal.d.ts.map +1 -1
  53. package/dist/src/journal.js +17 -0
  54. package/dist/src/journal.js.map +1 -1
  55. package/dist/src/logger.d.ts.map +1 -1
  56. package/dist/src/logger.js +0 -7
  57. package/dist/src/logger.js.map +1 -1
  58. package/dist/src/public_api.d.ts +4 -4
  59. package/dist/src/public_api.d.ts.map +1 -1
  60. package/dist/src/public_api.js +3 -26
  61. package/dist/src/public_api.js.map +1 -1
  62. package/dist/src/state_machine.d.ts +3 -2
  63. package/dist/src/state_machine.d.ts.map +1 -1
  64. package/dist/src/state_machine.js +9 -9
  65. package/dist/src/state_machine.js.map +1 -1
  66. package/dist/src/types/components.d.ts +31 -19
  67. package/dist/src/types/components.d.ts.map +1 -1
  68. package/dist/src/types/components.js +127 -30
  69. package/dist/src/types/components.js.map +1 -1
  70. package/dist/src/types/discovery.d.ts +6 -3
  71. package/dist/src/types/discovery.d.ts.map +1 -1
  72. package/dist/src/types/discovery.js +2 -0
  73. package/dist/src/types/discovery.js.map +1 -1
  74. package/dist/src/types/protocol.d.ts +13 -4
  75. package/dist/src/types/protocol.d.ts.map +1 -1
  76. package/dist/src/types/protocol.js +95 -5
  77. package/dist/src/types/protocol.js.map +1 -1
  78. package/dist/src/types/rpc.d.ts +276 -26
  79. package/dist/src/types/rpc.d.ts.map +1 -1
  80. package/dist/src/types/rpc.js +385 -5
  81. package/dist/src/types/rpc.js.map +1 -1
  82. package/dist/src/types/types.d.ts +2 -4
  83. package/dist/src/types/types.d.ts.map +1 -1
  84. package/dist/src/types/types.js +3 -14
  85. package/dist/src/types/types.js.map +1 -1
  86. package/dist/src/utils/serde.d.ts +2 -0
  87. package/dist/src/utils/serde.d.ts.map +1 -1
  88. package/dist/src/utils/serde.js +28 -4
  89. package/dist/src/utils/serde.js.map +1 -1
  90. package/dist/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +3 -3
  92. package/dist/src/clients/workflow_client.d.ts +0 -77
  93. package/dist/src/clients/workflow_client.d.ts.map +0 -1
  94. package/dist/src/clients/workflow_client.js +0 -172
  95. package/dist/src/clients/workflow_client.js.map +0 -1
  96. package/dist/src/workflows/workflow.d.ts +0 -101
  97. package/dist/src/workflows/workflow.d.ts.map +0 -1
  98. package/dist/src/workflows/workflow.js +0 -84
  99. package/dist/src/workflows/workflow.js.map +0 -1
  100. package/dist/src/workflows/workflow_state_service.d.ts +0 -35
  101. package/dist/src/workflows/workflow_state_service.d.ts.map +0 -1
  102. package/dist/src/workflows/workflow_state_service.js +0 -201
  103. package/dist/src/workflows/workflow_state_service.js.map +0 -1
  104. package/dist/src/workflows/workflow_wrapper_service.d.ts +0 -10
  105. package/dist/src/workflows/workflow_wrapper_service.d.ts.map +0 -1
  106. package/dist/src/workflows/workflow_wrapper_service.js +0 -285
  107. package/dist/src/workflows/workflow_wrapper_service.js.map +0 -1
@@ -1,172 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
4
- *
5
- * This file is part of the Restate SDK for Node.js/TypeScript,
6
- * which is released under the MIT license.
7
- *
8
- * You can find a copy of the license in file LICENSE in the root
9
- * directory of this repository or package, or at
10
- * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
- */
12
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- var desc = Object.getOwnPropertyDescriptor(m, k);
15
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
- desc = { enumerable: true, get: function() { return m[k]; } };
17
- }
18
- Object.defineProperty(o, k2, desc);
19
- }) : (function(o, m, k, k2) {
20
- if (k2 === undefined) k2 = k;
21
- o[k2] = m[k];
22
- }));
23
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
- Object.defineProperty(o, "default", { enumerable: true, value: v });
25
- }) : function(o, v) {
26
- o["default"] = v;
27
- });
28
- var __importStar = (this && this.__importStar) || function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.connect = void 0;
37
- const restate = __importStar(require("../public_api"));
38
- const errors_1 = require("../types/errors");
39
- /**
40
- * Creates a typed client to start and interact with workflow executions.
41
- * The specifiec URI must point to the Restate request endpoint (ingress).
42
- *
43
- * This function doesn't immediately verify the connection, it will not fail
44
- * if Restate is unreachable. Connection failures will only manifest when
45
- * attempting to submit or connect a specific workflow.
46
- */
47
- function connect(restateUri) {
48
- return {
49
- submitWorkflow: async (pathOrApi, workflowId, params) => {
50
- const path = typeof pathOrApi === "string" ? pathOrApi : pathOrApi.name;
51
- let result;
52
- try {
53
- result = await makeCall(restateUri, path, "submit", workflowId, params);
54
- }
55
- catch (err) {
56
- const error = (0, errors_1.ensureError)(err);
57
- throw new Error("Cannot start workflow: " + error.message, {
58
- cause: error,
59
- });
60
- }
61
- return {
62
- status: result,
63
- client: new WorkflowClientImpl(restateUri, path, workflowId),
64
- };
65
- },
66
- async connectToWorkflow(pathOrApi, workflowId) {
67
- const path = typeof pathOrApi === "string" ? pathOrApi : pathOrApi.name;
68
- const client = new WorkflowClientImpl(restateUri, path, workflowId);
69
- const status = await client.status();
70
- if (status === restate.workflow.LifecycleStatus.NOT_STARTED) {
71
- throw new Error("No workflow running/finished/failed with ID " + workflowId);
72
- }
73
- return {
74
- status,
75
- client: new WorkflowClientImpl(restateUri, path, workflowId),
76
- };
77
- },
78
- };
79
- }
80
- exports.connect = connect;
81
- class WorkflowClientImpl {
82
- restateUri;
83
- serviceName;
84
- wfId;
85
- constructor(restateUri, serviceName, wfId) {
86
- this.restateUri = restateUri;
87
- this.serviceName = serviceName;
88
- this.wfId = wfId;
89
- }
90
- workflowId() {
91
- return this.wfId;
92
- }
93
- status() {
94
- return this.makeCall("status", {});
95
- }
96
- result() {
97
- return this.makeCall("waitForResult", {});
98
- }
99
- workflowInterface() {
100
- const clientProxy = new Proxy({}, {
101
- get: (_target, prop) => {
102
- const method = prop;
103
- return async (args) => {
104
- return this.makeCall(method, args);
105
- };
106
- },
107
- });
108
- return clientProxy;
109
- }
110
- async makeCall(method, args) {
111
- return await makeCall(this.restateUri, this.serviceName, method, this.wfId, args);
112
- }
113
- }
114
- // ----------------------------------------------------------------------------
115
- // Utils
116
- // ----------------------------------------------------------------------------
117
- async function makeCall(restateUri, serviceName, method, workflowId, params) {
118
- if (!workflowId || typeof workflowId !== "string") {
119
- throw new Error("missing workflowId");
120
- }
121
- if (params === undefined) {
122
- params = {};
123
- }
124
- if (typeof params !== "object") {
125
- throw new Error("invalid parameters: must be an object");
126
- }
127
- const url = `${restateUri}/${serviceName}/${method}`;
128
- const data = {
129
- request: {
130
- workflowId,
131
- ...params,
132
- },
133
- };
134
- let body;
135
- try {
136
- body = JSON.stringify(data);
137
- }
138
- catch (err) {
139
- throw new Error("Cannot encode request: " + err, { cause: err });
140
- }
141
- // eslint-disable-next-line no-console
142
- console.debug(`Making call to Restate at ${url}`);
143
- const httpResponse = await fetch(url, {
144
- method: "POST",
145
- headers: {
146
- "Content-Type": "application/json",
147
- },
148
- body,
149
- });
150
- const responseText = await httpResponse.text();
151
- if (!httpResponse.ok) {
152
- throw new Error(`Request failed: ${httpResponse.status}\n${responseText}`);
153
- }
154
- let response;
155
- try {
156
- response = JSON.parse(responseText);
157
- }
158
- catch (err) {
159
- throw new Error("Cannot parse response JSON: " + err, { cause: err });
160
- }
161
- if (response.error) {
162
- throw new Error(response.error);
163
- }
164
- if (response.response) {
165
- return response.response;
166
- }
167
- if (Object.keys(response).length === 0) {
168
- return undefined;
169
- }
170
- throw new Error("Unrecognized response object: " + responseText);
171
- }
172
- //# sourceMappingURL=workflow_client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow_client.js","sourceRoot":"","sources":["../../../src/clients/workflow_client.ts"],"names":[],"mappings":"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"}
@@ -1,101 +0,0 @@
1
- import * as restate from "../public_api";
2
- /**
3
- * Creates a new workflow service that will be served under the given path.
4
- *
5
- * A workflow must consist of
6
- * - one run method: `run(ctx: WfContext, params: T) => Promise<R>`
7
- * - an arbitrary number of interaction methods: `foo(ctx: SharedWfContext, params: X) => Promise<Y>`
8
- */
9
- export declare function workflow<P extends string, R, T, U>(name: P, workflow: Workflow<R, T, U>): WorkflowServices<P, R, T, U>;
10
- /**
11
- * The type signature of a workflow.
12
- * A workflow must consist of
13
- * - one run method: `run(ctx: WfContext, params: T) => Promise<R>`
14
- * - an arbitrary number of interaction methods: `foo(ctx: SharedWfContext, params: T) => Promise<R>`
15
- */
16
- export type Workflow<R, T, U> = {
17
- run: RunMethod<R, T>;
18
- } & WorkflowMethods<R, T, U>;
19
- type RunMethod<R, T> = (ctx: WfContext, params: T) => Promise<R>;
20
- type InteractionMethod<R, T> = (ctx: SharedWfContext, params: T) => Promise<R>;
21
- type WorkflowMethods<R, T, U> = {
22
- [K in keyof U]: K extends "run" ? U[K] extends RunMethod<R, T> ? U[K] : "The 'run' methods needs to follow the signature: (ctx: WfContext, params: any) => Promise<any> " : U[K] extends InteractionMethod<any, any> ? U[K] : "Methods other than 'run' are interaction methods and need to follow the signature: (ctx: SharedWfContext, params: any) => Promise<any>";
23
- };
24
- /**
25
- * The workflow service(s) and API.
26
- *
27
- * Register at a Restate endpoint (HTTP/2, Lambda, etc.) as follows:
28
- * ```
29
- * const myWorkflow = restate.workflows.workflow("org.acme.myworkflow", {
30
- * // workflow implementation
31
- * })
32
- * restate.createServer().bind(myWorkflow)
33
- * ```
34
- *
35
- * The {@link WorkflowServices.api<P>} can be used to create typed clients, both
36
- * from other Restate-backed serviced (e.g., `ctx.rpc(api).triggerMySignal()`)
37
- * or from external clients (`clients.connectWorkflows(restateUri).connectToWorkflow(api, id);`).
38
- */
39
- export interface WorkflowServices<P extends string, R, T, U> extends restate.ServiceBundle {
40
- readonly api: restate.ServiceDefinition<P, WorkflowRestateRpcApi<R, T, U>>;
41
- }
42
- export type DurablePromise<T> = restate.CombineablePromise<T> & {
43
- peek(): Promise<T | null>;
44
- resolve(value?: T): void;
45
- reject(errorMsg: string): void;
46
- };
47
- /**
48
- * The context for the workflow's interaction methods, which are all methods
49
- * other than the 'run()' method.
50
- *
51
- * This gives primarily access to state reads and promises.
52
- */
53
- export interface SharedWfContext {
54
- workflowId: string;
55
- get<T>(stateName: string): Promise<T | null>;
56
- promise<T = void>(name: string): DurablePromise<T>;
57
- }
58
- /**
59
- * The context for the workflow's 'run()' function.
60
- *
61
- * This is a full context as for stateful durable keyed services, plus the
62
- * workflow-specific bits, like workflowID and durable promises.
63
- */
64
- export interface WfContext extends SharedWfContext, restate.ObjectContext {
65
- }
66
- export declare enum LifecycleStatus {
67
- NOT_STARTED = "NOT_STARTED",
68
- RUNNING = "RUNNING",
69
- FINISHED = "FINISHED",
70
- FAILED = "FAILED"
71
- }
72
- export declare enum WorkflowStartResult {
73
- STARTED = "STARTED",
74
- ALREADY_STARTED = "ALREADY_STARTED",
75
- ALREADY_FINISHED = "ALREADY_FINISHED"
76
- }
77
- /**
78
- * The type of requests accepted by the workflow service.
79
- * Must contain the 'workflowId' property.
80
- */
81
- export type WorkflowRequest<T> = T & {
82
- workflowId: string;
83
- };
84
- /**
85
- * The API signature of the workflow for use with RPC operations from Restate services.
86
- */
87
- export type WorkflowRestateRpcApi<R, T, U> = {
88
- start: (param: WorkflowRequest<T>) => Promise<WorkflowStartResult>;
89
- waitForResult: (request: WorkflowRequest<unknown>) => Promise<R>;
90
- status: (request: WorkflowRequest<unknown>) => Promise<LifecycleStatus>;
91
- } & {
92
- [K in keyof Omit<U, "run">]: U[K] extends InteractionMethod<infer R, infer T> ? (request: WorkflowRequest<T>) => Promise<R> : never;
93
- };
94
- /**
95
- * The API signature of the workflow for external clients.
96
- */
97
- export type WorkflowClientApi<U> = {
98
- [K in keyof Omit<U, "run">]: U[K] extends (ctx: SharedWfContext) => Promise<infer R> ? () => Promise<R> : U[K] extends (ctx: SharedWfContext, params: infer T) => Promise<infer R> ? (request: T) => Promise<R> : never;
99
- };
100
- export {};
101
- //# sourceMappingURL=workflow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/workflow.ts"],"names":[],"mappings":"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"}
@@ -1,84 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
4
- *
5
- * This file is part of the Restate SDK for Node.js/TypeScript,
6
- * which is released under the MIT license.
7
- *
8
- * You can find a copy of the license in file LICENSE in the root
9
- * directory of this repository or package, or at
10
- * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
- */
12
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- var desc = Object.getOwnPropertyDescriptor(m, k);
15
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
- desc = { enumerable: true, get: function() { return m[k]; } };
17
- }
18
- Object.defineProperty(o, k2, desc);
19
- }) : (function(o, m, k, k2) {
20
- if (k2 === undefined) k2 = k;
21
- o[k2] = m[k];
22
- }));
23
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
- Object.defineProperty(o, "default", { enumerable: true, value: v });
25
- }) : function(o, v) {
26
- o["default"] = v;
27
- });
28
- var __importStar = (this && this.__importStar) || function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.WorkflowStartResult = exports.LifecycleStatus = exports.workflow = void 0;
37
- const restate = __importStar(require("../public_api"));
38
- const wws = __importStar(require("./workflow_wrapper_service"));
39
- const wss = __importStar(require("./workflow_state_service"));
40
- const STATE_SERVICE_PATH_SUFFIX = "_state";
41
- // ----------------------------------------------------------------------------
42
- // workflow definition / registration
43
- // ----------------------------------------------------------------------------
44
- /**
45
- * Creates a new workflow service that will be served under the given path.
46
- *
47
- * A workflow must consist of
48
- * - one run method: `run(ctx: WfContext, params: T) => Promise<R>`
49
- * - an arbitrary number of interaction methods: `foo(ctx: SharedWfContext, params: X) => Promise<Y>`
50
- */
51
- function workflow(name, workflow) {
52
- // the state service manages all state and promises for us
53
- const stateServiceRouter = restate.object({
54
- name,
55
- handlers: wss.workflowStateService,
56
- });
57
- const stateServiceApi = {
58
- name: (name + STATE_SERVICE_PATH_SUFFIX),
59
- };
60
- // the wrapper service manages life cycle, contexts, delegation to the state service
61
- const wrapperServiceRouter = wws.createWrapperService(workflow, name, stateServiceApi);
62
- return {
63
- api: { name },
64
- registerServices: (endpoint) => {
65
- endpoint.bind(stateServiceRouter);
66
- endpoint.bind(wrapperServiceRouter);
67
- },
68
- };
69
- }
70
- exports.workflow = workflow;
71
- var LifecycleStatus;
72
- (function (LifecycleStatus) {
73
- LifecycleStatus["NOT_STARTED"] = "NOT_STARTED";
74
- LifecycleStatus["RUNNING"] = "RUNNING";
75
- LifecycleStatus["FINISHED"] = "FINISHED";
76
- LifecycleStatus["FAILED"] = "FAILED";
77
- })(LifecycleStatus = exports.LifecycleStatus || (exports.LifecycleStatus = {}));
78
- var WorkflowStartResult;
79
- (function (WorkflowStartResult) {
80
- WorkflowStartResult["STARTED"] = "STARTED";
81
- WorkflowStartResult["ALREADY_STARTED"] = "ALREADY_STARTED";
82
- WorkflowStartResult["ALREADY_FINISHED"] = "ALREADY_FINISHED";
83
- })(WorkflowStartResult = exports.WorkflowStartResult || (exports.WorkflowStartResult = {}));
84
- //# sourceMappingURL=workflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/workflows/workflow.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uDAAyC;AACzC,gEAAkD;AAClD,8DAAgD;AAEhD,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAE3C,+EAA+E;AAC/E,wDAAwD;AACxD,+EAA+E;AAE/E;;;;;;GAMG;AACH,SAAgB,QAAQ,CACtB,IAAO,EACP,QAA2B;IAE3B,0DAA0D;IAC1D,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI;QACJ,QAAQ,EAAE,GAAG,CAAC,oBAAoB;KACnC,CAAC,CAAC;IACH,MAAM,eAAe,GAAe;QAClC,IAAI,EAAE,CAAC,IAAI,GAAG,yBAAyB,CAAM;KAC9C,CAAC;IAEF,oFAAoF;IACpF,MAAM,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,CACnD,QAAQ,EACR,IAAI,EACJ,eAAe,CAChB,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,EAAE,IAAI,EAGV;QACD,gBAAgB,EAAE,CAAC,QAAiC,EAAE,EAAE;YACtD,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,CAAC;KACqC,CAAC;AAC3C,CAAC;AA9BD,4BA8BC;AA+ED,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,8CAA2B,CAAA;IAC3B,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;AACnB,CAAC,EALW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAK1B;AAED,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,0CAAmB,CAAA;IACnB,0DAAmC,CAAA;IACnC,4DAAqC,CAAA;AACvC,CAAC,EAJW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAI9B"}
@@ -1,35 +0,0 @@
1
- import * as restate from "../public_api";
2
- import { LifecycleStatus, WorkflowStartResult } from "./workflow";
3
- export type ValueOrError<T> = {
4
- value?: T;
5
- error?: string;
6
- };
7
- export type api<P extends string> = restate.VirtualObjectDefinition<P, restate.VirtualObject<typeof workflowStateService>>;
8
- export declare const workflowStateService: {
9
- startWorkflow: (ctx: restate.ObjectContext) => Promise<WorkflowStartResult>;
10
- finishOrFailWorkflow: <R>(ctx: restate.ObjectContext, result: ValueOrError<R>) => Promise<void>;
11
- getStatus: (ctx: restate.ObjectContext) => Promise<LifecycleStatus>;
12
- completePromise: <T>(ctx: restate.ObjectContext, req: {
13
- promiseName: string;
14
- completion: ValueOrError<T>;
15
- }) => Promise<void>;
16
- peekPromise: <T_1>(ctx: restate.ObjectContext, req: {
17
- promiseName: string;
18
- }) => Promise<ValueOrError<T_1> | null>;
19
- subscribePromise: <T_2>(ctx: restate.ObjectContext, req: {
20
- promiseName: string;
21
- awkId: string;
22
- }) => Promise<ValueOrError<T_2> | null>;
23
- getResult: <R_1>(ctx: restate.ObjectContext) => Promise<ValueOrError<R_1> | null>;
24
- subscribeResult: <T_3>(ctx: restate.ObjectContext, awkId: string) => Promise<ValueOrError<T_3> | null>;
25
- getState: <T_4>(ctx: restate.ObjectContext, stateName: string) => Promise<T_4 | null>;
26
- setState: <T_5>(ctx: restate.ObjectContext, request: {
27
- stateName: string;
28
- value: T_5;
29
- }) => Promise<void>;
30
- clearState: (ctx: restate.ObjectContext, stateName: string) => Promise<void>;
31
- stateKeys: (ctx: restate.ObjectContext) => Promise<Array<string>>;
32
- clearAllState: (ctx: restate.ObjectContext) => Promise<void>;
33
- dispose: (ctx: restate.ObjectContext) => Promise<void>;
34
- };
35
- //# sourceMappingURL=workflow_state_service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow_state_service.d.ts","sourceRoot":"","sources":["../../../src/workflows/workflow_state_service.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AASlE,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,uBAAuB,CACjE,CAAC,EACD,OAAO,CAAC,aAAa,CAAC,OAAO,oBAAoB,CAAC,CACnD,CAAC;AAEF,eAAO,MAAM,oBAAoB;yBAExB,QAAQ,aAAa,KACzB,QAAQ,mBAAmB,CAAC;mCAgBxB,QAAQ,aAAa,8BAEzB,QAAQ,IAAI,CAAC;qBA2BO,QAAQ,aAAa,KAAG,QAAQ,eAAe,CAAC;8BAQhE,QAAQ,aAAa;qBACN,MAAM;;UACzB,QAAQ,IAAI,CAAC;4BAeT,QAAQ,aAAa,OACrB;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE;iCAMvB,QAAQ,aAAa,OACrB;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;0BAWtC,QAAQ,aAAa;gCAMrB,QAAQ,aAAa,SACnB,MAAM;yBAmBR,QAAQ,aAAa,aACf,MAAM;yBAMZ,QAAQ,aAAa;mBACJ,MAAM;;UAC3B,QAAQ,IAAI,CAAC;sBAqBT,QAAQ,aAAa,aACf,MAAM,KAChB,QAAQ,IAAI,CAAC;qBAIO,QAAQ,aAAa,KAAG,QAAQ,MAAM,MAAM,CAAC,CAAC;yBAM1C,QAAQ,aAAa,KAAG,QAAQ,IAAI,CAAC;mBAS3C,QAAQ,aAAa,KAAG,QAAQ,IAAI,CAAC;CAG3D,CAAC"}
@@ -1,201 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
4
- *
5
- * This file is part of the Restate SDK for Node.js/TypeScript,
6
- * which is released under the MIT license.
7
- *
8
- * You can find a copy of the license in file LICENSE in the root
9
- * directory of this repository or package, or at
10
- * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
- */
12
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- var desc = Object.getOwnPropertyDescriptor(m, k);
15
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
- desc = { enumerable: true, get: function() { return m[k]; } };
17
- }
18
- Object.defineProperty(o, k2, desc);
19
- }) : (function(o, m, k, k2) {
20
- if (k2 === undefined) k2 = k;
21
- o[k2] = m[k];
22
- }));
23
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
- Object.defineProperty(o, "default", { enumerable: true, value: v });
25
- }) : function(o, v) {
26
- o["default"] = v;
27
- });
28
- var __importStar = (this && this.__importStar) || function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.workflowStateService = void 0;
37
- const restate = __importStar(require("../public_api"));
38
- const workflow_1 = require("./workflow");
39
- const LIFECYCLE_STATUS_STATE_NAME = "status";
40
- const RESULT_STATE_NAME = "result";
41
- const RESULT_LISTENERS_NAME = "result_listeners";
42
- const PROMISE_STATE_PREFIX = "prom_s_";
43
- const USER_STATE_PREFIX = "state_";
44
- const PROMISE_AWAKEABLE_PREFIX = "prom_l_";
45
- exports.workflowStateService = {
46
- startWorkflow: async (ctx) => {
47
- const status = (await ctx.get(LIFECYCLE_STATUS_STATE_NAME)) ??
48
- workflow_1.LifecycleStatus.NOT_STARTED;
49
- if (status !== workflow_1.LifecycleStatus.NOT_STARTED) {
50
- return status === workflow_1.LifecycleStatus.RUNNING
51
- ? workflow_1.WorkflowStartResult.ALREADY_STARTED
52
- : workflow_1.WorkflowStartResult.ALREADY_FINISHED;
53
- }
54
- ctx.set(LIFECYCLE_STATUS_STATE_NAME, workflow_1.LifecycleStatus.RUNNING);
55
- return workflow_1.WorkflowStartResult.STARTED;
56
- },
57
- finishOrFailWorkflow: async (ctx, result) => {
58
- if (result.error === undefined && result.value === undefined) {
59
- throw new restate.TerminalError("Result is undefined");
60
- }
61
- const status = (await ctx.get(LIFECYCLE_STATUS_STATE_NAME)) ??
62
- workflow_1.LifecycleStatus.NOT_STARTED;
63
- if (status !== workflow_1.LifecycleStatus.RUNNING) {
64
- // not sure this can ever happen, but we put this here defensively
65
- throw new restate.TerminalError("Unexpected state: " + status);
66
- }
67
- const newStatus = result.error
68
- ? workflow_1.LifecycleStatus.FAILED
69
- : workflow_1.LifecycleStatus.FINISHED;
70
- ctx.set(LIFECYCLE_STATUS_STATE_NAME, newStatus);
71
- await completePromise(ctx, RESULT_STATE_NAME, RESULT_LISTENERS_NAME, result);
72
- },
73
- getStatus: async (ctx) => {
74
- return ((await ctx.get(LIFECYCLE_STATUS_STATE_NAME)) ??
75
- workflow_1.LifecycleStatus.NOT_STARTED);
76
- },
77
- completePromise: async (ctx, req) => {
78
- // we don't accept writes after the workflow is done
79
- if (!(await checkIfRunning(ctx))) {
80
- return;
81
- }
82
- await completePromise(ctx, PROMISE_STATE_PREFIX + req.promiseName, PROMISE_AWAKEABLE_PREFIX + req.promiseName, req.completion);
83
- },
84
- peekPromise: async (ctx, req) => {
85
- return peekPromise(ctx, PROMISE_STATE_PREFIX + req.promiseName);
86
- },
87
- subscribePromise: async (ctx, req) => {
88
- return subscribePromise(ctx, PROMISE_STATE_PREFIX + req.promiseName, PROMISE_AWAKEABLE_PREFIX + req.promiseName, req.awkId);
89
- },
90
- getResult: async (ctx) => {
91
- return peekPromise(ctx, RESULT_STATE_NAME);
92
- },
93
- subscribeResult: async (ctx, awkId) => {
94
- const status = (await ctx.get(LIFECYCLE_STATUS_STATE_NAME)) ??
95
- workflow_1.LifecycleStatus.NOT_STARTED;
96
- if (status === workflow_1.LifecycleStatus.NOT_STARTED) {
97
- throw new restate.TerminalError(`Workflow with id '${ctx.key}' does not exist.`);
98
- }
99
- return subscribePromise(ctx, RESULT_STATE_NAME, RESULT_LISTENERS_NAME, awkId);
100
- },
101
- getState: async (ctx, stateName) => {
102
- return ctx.get(USER_STATE_PREFIX + stateName);
103
- },
104
- setState: async (ctx, request) => {
105
- if (!request?.stateName) {
106
- throw new restate.TerminalError("missing state name");
107
- }
108
- if (request.value === undefined || request.value === null) {
109
- throw new restate.TerminalError("invalid state value: " + request.value);
110
- }
111
- // if the workflow isn't running (any more) we don't accept state updates
112
- // shouldn't be possible anyways (because only workflow method has access to writable state)
113
- // but we are defensive here against API errors
114
- if (!(await checkIfRunning(ctx))) {
115
- return;
116
- }
117
- const stateName = USER_STATE_PREFIX + request.stateName;
118
- ctx.set(stateName, request.value);
119
- },
120
- clearState: async (ctx, stateName) => {
121
- ctx.clear(USER_STATE_PREFIX + stateName);
122
- },
123
- stateKeys: async (ctx) => {
124
- return (await ctx.stateKeys()).filter((name) => name.startsWith(USER_STATE_PREFIX));
125
- },
126
- clearAllState: async (ctx) => {
127
- const stateNames = (await ctx.stateKeys()).filter((name) => name.startsWith(USER_STATE_PREFIX));
128
- for (const stateName of stateNames) {
129
- ctx.clear(stateName);
130
- }
131
- },
132
- dispose: async (ctx) => {
133
- ctx.clearAll();
134
- },
135
- };
136
- // ----------------------------------------------------------------------------
137
- async function completePromise(ctx, stateName, awakeableStateName, completion) {
138
- if (completion.value !== undefined && completion.error !== undefined) {
139
- throw new restate.TerminalError("Completion can only be either with value or with error");
140
- }
141
- if (completion.value !== undefined && completion.value === null) {
142
- throw new restate.TerminalError("promise cannot be completed with null");
143
- }
144
- if (completion.error !== undefined && completion.error === null) {
145
- throw new restate.TerminalError("promise cannot be rejected with null");
146
- }
147
- const currVal = await ctx.get(stateName);
148
- if (currVal !== null) {
149
- // promise already completed
150
- return currVal;
151
- }
152
- // first completor
153
- // (a) set state
154
- ctx.set(stateName, completion);
155
- // (b) complete awaiting awakeables
156
- const listeners = (await ctx.get(awakeableStateName)) ?? [];
157
- listeners.forEach((awkId) => {
158
- if (completion.error !== undefined) {
159
- ctx.rejectAwakeable(awkId, completion.error);
160
- }
161
- else {
162
- ctx.resolveAwakeable(awkId, completion.value);
163
- }
164
- });
165
- ctx.clear(awakeableStateName);
166
- return completion;
167
- }
168
- async function subscribePromise(ctx, stateName, awakeableStateName, awakeableId) {
169
- const currVal = await ctx.get(stateName);
170
- // case (a), we have a value already
171
- if (currVal !== null) {
172
- if (currVal.error !== undefined) {
173
- ctx.rejectAwakeable(awakeableId, currVal.error);
174
- }
175
- else {
176
- ctx.resolveAwakeable(awakeableId, currVal.value);
177
- }
178
- return currVal;
179
- }
180
- // case (b), we remember the awk Id and get when we have a value
181
- // but only if the workflow is still running
182
- if (!(await checkIfRunning(ctx))) {
183
- const response = {
184
- error: "Promised will never resolve because workflow is not running",
185
- };
186
- ctx.rejectAwakeable(awakeableId, response.error);
187
- return response;
188
- }
189
- const listeners = (await ctx.get(awakeableStateName)) ?? [];
190
- listeners.push(awakeableId);
191
- ctx.set(awakeableStateName, listeners);
192
- return null;
193
- }
194
- async function peekPromise(ctx, stateName) {
195
- return ctx.get(stateName);
196
- }
197
- async function checkIfRunning(ctx) {
198
- const status = await ctx.get(LIFECYCLE_STATUS_STATE_NAME);
199
- return status === workflow_1.LifecycleStatus.RUNNING;
200
- }
201
- //# sourceMappingURL=workflow_state_service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow_state_service.js","sourceRoot":"","sources":["../../../src/workflows/workflow_state_service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import * as restate from "../public_api";
2
- import * as wf from "./workflow";
3
- import * as wss from "./workflow_state_service";
4
- export declare function createWrapperService<P extends string, R, T, M>(workflow: wf.Workflow<R, T, M>, name: P, stateServiceApi: wss.api<P>): restate.ServiceDefinition<P, restate.Service<{
5
- submit: (ctx: restate.Context, request: wf.WorkflowRequest<T>) => Promise<wf.WorkflowStartResult>;
6
- run: (ctx: restate.Context, request: wf.WorkflowRequest<T>) => Promise<R>;
7
- waitForResult: (ctx: restate.Context, request: wf.WorkflowRequest<unknown>) => Promise<R>;
8
- status: (ctx: restate.Context, request: wf.WorkflowRequest<unknown>) => Promise<wf.LifecycleStatus>;
9
- }>>;
10
- //# sourceMappingURL=workflow_wrapper_service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow_wrapper_service.d.ts","sourceRoot":"","sources":["../../../src/workflows/workflow_wrapper_service.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAC;AA2LhD,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5D,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,IAAI,EAAE,CAAC,EACP,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;kBAIlB,QAAQ,OAAO,WACX,GAAG,eAAe,CAAC,CAAC,CAAC,KAC7B,QAAQ,GAAG,mBAAmB,CAAC;eAa3B,QAAQ,OAAO,WACX,GAAG,eAAe,CAAC,CAAC,CAAC,KAC7B,QAAQ,CAAC,CAAC;yBA+BN,QAAQ,OAAO,WACX,GAAG,eAAe,CAAC,OAAO,CAAC,KACnC,QAAQ,CAAC,CAAC;kBAWN,QAAQ,OAAO,WACX,GAAG,eAAe,CAAC,OAAO,CAAC,KACnC,QAAQ,GAAG,eAAe,CAAC;IA2CjC"}