@restatedev/restate-sdk 0.0.0-SNAPSHOT-20231025205407
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/LICENSE +21 -0
- package/README.md +157 -0
- package/dist/connection/connection.d.ts +19 -0
- package/dist/connection/connection.d.ts.map +1 -0
- package/dist/connection/connection.js +13 -0
- package/dist/connection/connection.js.map +1 -0
- package/dist/connection/embedded_connection.d.ts +22 -0
- package/dist/connection/embedded_connection.d.ts.map +1 -0
- package/dist/connection/embedded_connection.js +78 -0
- package/dist/connection/embedded_connection.js.map +1 -0
- package/dist/connection/http_connection.d.ts +73 -0
- package/dist/connection/http_connection.d.ts.map +1 -0
- package/dist/connection/http_connection.js +203 -0
- package/dist/connection/http_connection.js.map +1 -0
- package/dist/connection/lambda_connection.d.ts +14 -0
- package/dist/connection/lambda_connection.d.ts.map +1 -0
- package/dist/connection/lambda_connection.js +56 -0
- package/dist/connection/lambda_connection.js.map +1 -0
- package/dist/embedded/api.d.ts +18 -0
- package/dist/embedded/api.d.ts.map +1 -0
- package/dist/embedded/api.js +37 -0
- package/dist/embedded/api.js.map +1 -0
- package/dist/embedded/handler.d.ts +4 -0
- package/dist/embedded/handler.d.ts.map +1 -0
- package/dist/embedded/handler.js +28 -0
- package/dist/embedded/handler.js.map +1 -0
- package/dist/embedded/http2_remote.d.ts +10 -0
- package/dist/embedded/http2_remote.d.ts.map +1 -0
- package/dist/embedded/http2_remote.js +85 -0
- package/dist/embedded/http2_remote.js.map +1 -0
- package/dist/embedded/invocation.d.ts +4 -0
- package/dist/embedded/invocation.d.ts.map +1 -0
- package/dist/embedded/invocation.js +90 -0
- package/dist/embedded/invocation.js.map +1 -0
- package/dist/generated/dev/restate/events.d.ts +96 -0
- package/dist/generated/dev/restate/events.d.ts.map +1 -0
- package/dist/generated/dev/restate/events.js +371 -0
- package/dist/generated/dev/restate/events.js.map +1 -0
- package/dist/generated/dev/restate/ext.d.ts +88 -0
- package/dist/generated/dev/restate/ext.d.ts.map +1 -0
- package/dist/generated/dev/restate/ext.js +212 -0
- package/dist/generated/dev/restate/ext.js.map +1 -0
- package/dist/generated/google/protobuf/descriptor.d.ts +1204 -0
- package/dist/generated/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/generated/google/protobuf/descriptor.js +6676 -0
- package/dist/generated/google/protobuf/descriptor.js.map +1 -0
- package/dist/generated/google/protobuf/empty.d.ts +86 -0
- package/dist/generated/google/protobuf/empty.d.ts.map +1 -0
- package/dist/generated/google/protobuf/empty.js +107 -0
- package/dist/generated/google/protobuf/empty.js.map +1 -0
- package/dist/generated/google/protobuf/struct.d.ts +175 -0
- package/dist/generated/google/protobuf/struct.d.ts.map +1 -0
- package/dist/generated/google/protobuf/struct.js +754 -0
- package/dist/generated/google/protobuf/struct.js.map +1 -0
- package/dist/generated/proto/discovery.d.ts +105 -0
- package/dist/generated/proto/discovery.d.ts.map +1 -0
- package/dist/generated/proto/discovery.js +364 -0
- package/dist/generated/proto/discovery.js.map +1 -0
- package/dist/generated/proto/dynrpc.d.ts +150 -0
- package/dist/generated/proto/dynrpc.d.ts.map +1 -0
- package/dist/generated/proto/dynrpc.js +668 -0
- package/dist/generated/proto/dynrpc.js.map +1 -0
- package/dist/generated/proto/javascript.d.ts +97 -0
- package/dist/generated/proto/javascript.d.ts.map +1 -0
- package/dist/generated/proto/javascript.js +297 -0
- package/dist/generated/proto/javascript.js.map +1 -0
- package/dist/generated/proto/protocol.d.ts +371 -0
- package/dist/generated/proto/protocol.d.ts.map +1 -0
- package/dist/generated/proto/protocol.js +2179 -0
- package/dist/generated/proto/protocol.js.map +1 -0
- package/dist/generated/proto/services.d.ts +307 -0
- package/dist/generated/proto/services.d.ts.map +1 -0
- package/dist/generated/proto/services.js +1535 -0
- package/dist/generated/proto/services.js.map +1 -0
- package/dist/generated/proto/test.d.ts +116 -0
- package/dist/generated/proto/test.d.ts.map +1 -0
- package/dist/generated/proto/test.js +321 -0
- package/dist/generated/proto/test.js.map +1 -0
- package/dist/invocation.d.ts +39 -0
- package/dist/invocation.d.ts.map +1 -0
- package/dist/invocation.js +138 -0
- package/dist/invocation.js.map +1 -0
- package/dist/io/decoder.d.ts +8 -0
- package/dist/io/decoder.d.ts.map +1 -0
- package/dist/io/decoder.js +133 -0
- package/dist/io/decoder.js.map +1 -0
- package/dist/io/encoder.d.ts +7 -0
- package/dist/io/encoder.d.ts.map +1 -0
- package/dist/io/encoder.js +57 -0
- package/dist/io/encoder.js.map +1 -0
- package/dist/journal.d.ts +42 -0
- package/dist/journal.d.ts.map +1 -0
- package/dist/journal.js +368 -0
- package/dist/journal.js.map +1 -0
- package/dist/local_state_store.d.ts +13 -0
- package/dist/local_state_store.d.ts.map +1 -0
- package/dist/local_state_store.js +72 -0
- package/dist/local_state_store.js.map +1 -0
- package/dist/public_api.d.ts +10 -0
- package/dist/public_api.d.ts.map +1 -0
- package/dist/public_api.js +59 -0
- package/dist/public_api.js.map +1 -0
- package/dist/restate_context.d.ts +405 -0
- package/dist/restate_context.d.ts.map +1 -0
- package/dist/restate_context.js +46 -0
- package/dist/restate_context.js.map +1 -0
- package/dist/restate_context_impl.d.ts +54 -0
- package/dist/restate_context_impl.d.ts.map +1 -0
- package/dist/restate_context_impl.js +364 -0
- package/dist/restate_context_impl.js.map +1 -0
- package/dist/server/base_restate_server.d.ts +30 -0
- package/dist/server/base_restate_server.d.ts.map +1 -0
- package/dist/server/base_restate_server.js +360 -0
- package/dist/server/base_restate_server.js.map +1 -0
- package/dist/server/restate_lambda_handler.d.ts +104 -0
- package/dist/server/restate_lambda_handler.d.ts.map +1 -0
- package/dist/server/restate_lambda_handler.js +245 -0
- package/dist/server/restate_lambda_handler.js.map +1 -0
- package/dist/server/restate_server.d.ts +91 -0
- package/dist/server/restate_server.d.ts.map +1 -0
- package/dist/server/restate_server.js +230 -0
- package/dist/server/restate_server.js.map +1 -0
- package/dist/state_machine.d.ts +75 -0
- package/dist/state_machine.d.ts.map +1 -0
- package/dist/state_machine.js +380 -0
- package/dist/state_machine.js.map +1 -0
- package/dist/types/errors.d.ts +40 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +121 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/grpc.d.ts +88 -0
- package/dist/types/grpc.d.ts.map +1 -0
- package/dist/types/grpc.js +68 -0
- package/dist/types/grpc.js.map +1 -0
- package/dist/types/protocol.d.ts +24 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +115 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/types/router.d.ts +33 -0
- package/dist/types/router.d.ts.map +1 -0
- package/dist/types/router.js +36 -0
- package/dist/types/router.js.map +1 -0
- package/dist/types/types.d.ts +30 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +125 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/assumpsions.d.ts +8 -0
- package/dist/utils/assumpsions.d.ts.map +1 -0
- package/dist/utils/assumpsions.js +101 -0
- package/dist/utils/assumpsions.js.map +1 -0
- package/dist/utils/logger.d.ts +60 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +102 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/public_utils.d.ts +58 -0
- package/dist/utils/public_utils.d.ts.map +1 -0
- package/dist/utils/public_utils.js +49 -0
- package/dist/utils/public_utils.js.map +1 -0
- package/dist/utils/utils.d.ts +14 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +119 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2023 - 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.RpcContextImpl = exports.RestateGrpcContextImpl = void 0;
|
|
14
|
+
const protocol_1 = require("./generated/proto/protocol");
|
|
15
|
+
const protocol_2 = require("./types/protocol");
|
|
16
|
+
const javascript_1 = require("./generated/proto/javascript");
|
|
17
|
+
const async_hooks_1 = require("async_hooks");
|
|
18
|
+
const errors_1 = require("./types/errors");
|
|
19
|
+
const utils_1 = require("./utils/utils");
|
|
20
|
+
const public_utils_1 = require("./utils/public_utils");
|
|
21
|
+
const logger_1 = require("./utils/logger");
|
|
22
|
+
const dynrpc_1 = require("./generated/proto/dynrpc");
|
|
23
|
+
const assumpsions_1 = require("./utils/assumpsions");
|
|
24
|
+
var CallContexType;
|
|
25
|
+
(function (CallContexType) {
|
|
26
|
+
CallContexType[CallContexType["None"] = 0] = "None";
|
|
27
|
+
CallContexType[CallContexType["SideEffect"] = 1] = "SideEffect";
|
|
28
|
+
CallContexType[CallContexType["OneWayCall"] = 2] = "OneWayCall";
|
|
29
|
+
})(CallContexType || (CallContexType = {}));
|
|
30
|
+
class RestateGrpcContextImpl {
|
|
31
|
+
id;
|
|
32
|
+
serviceName;
|
|
33
|
+
stateMachine;
|
|
34
|
+
// here, we capture the context information for actions on the Restate context that
|
|
35
|
+
// are executed within other actions, such as
|
|
36
|
+
// ctx.oneWayCall( () => client.foo(bar) );
|
|
37
|
+
// we also use this information to ensure we check that only allowed operations are
|
|
38
|
+
// used. Within side-effects, no operations are allowed on the RestateContext.
|
|
39
|
+
// For example, this is illegal: 'ctx.sideEffect(() => {await ctx.get("my-state")})'
|
|
40
|
+
static callContext = new async_hooks_1.AsyncLocalStorage();
|
|
41
|
+
constructor(id, serviceName,
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
43
|
+
stateMachine) {
|
|
44
|
+
this.id = id;
|
|
45
|
+
this.serviceName = serviceName;
|
|
46
|
+
this.stateMachine = stateMachine;
|
|
47
|
+
}
|
|
48
|
+
async get(name) {
|
|
49
|
+
// Check if this is a valid action
|
|
50
|
+
this.checkState("get state");
|
|
51
|
+
// Create the message and let the state machine process it
|
|
52
|
+
const msg = this.stateMachine.localStateStore.get(name);
|
|
53
|
+
const result = await this.stateMachine.handleUserCodeMessage(protocol_2.GET_STATE_ENTRY_MESSAGE_TYPE, msg);
|
|
54
|
+
// If the GetState message did not have a value or empty,
|
|
55
|
+
// then we went to the runtime to get the value.
|
|
56
|
+
// When we get the response, we set it in the localStateStore,
|
|
57
|
+
// to answer subsequent requests
|
|
58
|
+
if (msg.value === undefined && msg.empty === undefined) {
|
|
59
|
+
this.stateMachine.localStateStore.add(name, result);
|
|
60
|
+
}
|
|
61
|
+
if (!(result instanceof Buffer)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return (0, utils_1.jsonDeserialize)(result.toString());
|
|
65
|
+
}
|
|
66
|
+
set(name, value) {
|
|
67
|
+
this.checkState("set state");
|
|
68
|
+
const msg = this.stateMachine.localStateStore.set(name, value);
|
|
69
|
+
this.stateMachine.handleUserCodeMessage(protocol_2.SET_STATE_ENTRY_MESSAGE_TYPE, msg);
|
|
70
|
+
}
|
|
71
|
+
clear(name) {
|
|
72
|
+
this.checkState("clear state");
|
|
73
|
+
const msg = this.stateMachine.localStateStore.clear(name);
|
|
74
|
+
this.stateMachine.handleUserCodeMessage(protocol_2.CLEAR_STATE_ENTRY_MESSAGE_TYPE, msg);
|
|
75
|
+
}
|
|
76
|
+
request(service, method, data) {
|
|
77
|
+
if (this.isInOneWayCall()) {
|
|
78
|
+
return this.invokeOneWay(service, method, data);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return this.invoke(service, method, data);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async invoke(service, method, data) {
|
|
85
|
+
this.checkState("invoke");
|
|
86
|
+
const msg = protocol_1.InvokeEntryMessage.create({
|
|
87
|
+
serviceName: service,
|
|
88
|
+
methodName: method,
|
|
89
|
+
parameter: Buffer.from(data),
|
|
90
|
+
});
|
|
91
|
+
const promise = this.stateMachine.handleUserCodeMessage(protocol_2.INVOKE_ENTRY_MESSAGE_TYPE, msg);
|
|
92
|
+
return (await promise);
|
|
93
|
+
}
|
|
94
|
+
async invokeOneWay(service, method, data) {
|
|
95
|
+
const delay = this.getOneWayCallDelay();
|
|
96
|
+
const invokeTime = delay > 0 ? Date.now() + delay : undefined;
|
|
97
|
+
const msg = protocol_1.BackgroundInvokeEntryMessage.create({
|
|
98
|
+
serviceName: service,
|
|
99
|
+
methodName: method,
|
|
100
|
+
parameter: Buffer.from(data),
|
|
101
|
+
invokeTime: invokeTime,
|
|
102
|
+
});
|
|
103
|
+
await this.stateMachine.handleUserCodeMessage(protocol_2.BACKGROUND_INVOKE_ENTRY_MESSAGE_TYPE, msg);
|
|
104
|
+
return new Uint8Array();
|
|
105
|
+
}
|
|
106
|
+
async oneWayCall(
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
|
+
call) {
|
|
109
|
+
this.checkState("oneWayCall");
|
|
110
|
+
await RestateGrpcContextImpl.callContext.run({ type: CallContexType.OneWayCall }, call);
|
|
111
|
+
}
|
|
112
|
+
async delayedCall(
|
|
113
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
114
|
+
call, delayMillis) {
|
|
115
|
+
this.checkState("delayedCall");
|
|
116
|
+
// Delayed call is a one way call with a delay
|
|
117
|
+
await RestateGrpcContextImpl.callContext.run({ type: CallContexType.OneWayCall, delay: delayMillis }, call);
|
|
118
|
+
}
|
|
119
|
+
async sideEffect(fn, retryPolicy = public_utils_1.DEFAULT_INFINITE_EXPONENTIAL_BACKOFF) {
|
|
120
|
+
if (this.isInSideEffect()) {
|
|
121
|
+
throw new errors_1.TerminalError("You cannot do sideEffect calls from within a side effect.", { errorCode: errors_1.ErrorCodes.INTERNAL });
|
|
122
|
+
}
|
|
123
|
+
else if (this.isInOneWayCall()) {
|
|
124
|
+
throw new errors_1.TerminalError("Cannot do a side effect from within ctx.oneWayCall(...). " +
|
|
125
|
+
"Context method ctx.oneWayCall() can only be used to invoke other services unidirectionally. " +
|
|
126
|
+
"e.g. ctx.oneWayCall(() => client.greet(my_request))", { errorCode: errors_1.ErrorCodes.INTERNAL });
|
|
127
|
+
}
|
|
128
|
+
const executeAndLogSideEffect = async () => {
|
|
129
|
+
// in replay mode, we directly return the value from the log
|
|
130
|
+
if (this.stateMachine.nextEntryWillBeReplayed()) {
|
|
131
|
+
const emptyMsg = javascript_1.SideEffectEntryMessage.create({});
|
|
132
|
+
return this.stateMachine.handleUserCodeMessage(protocol_2.SIDE_EFFECT_ENTRY_MESSAGE_TYPE, emptyMsg);
|
|
133
|
+
}
|
|
134
|
+
let sideEffectResult;
|
|
135
|
+
try {
|
|
136
|
+
sideEffectResult = await RestateGrpcContextImpl.callContext.run({ type: CallContexType.SideEffect }, fn);
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
// we commit any error from the side effet to thr journal, and re-throw it into
|
|
140
|
+
// the function. that way, any catching by the user and reacting to it will be
|
|
141
|
+
// deterministic on replay
|
|
142
|
+
const error = (0, errors_1.ensureError)(e);
|
|
143
|
+
const failure = (0, errors_1.errorToFailureWithTerminal)(error);
|
|
144
|
+
const sideEffectMsg = javascript_1.SideEffectEntryMessage.create({
|
|
145
|
+
failure: failure,
|
|
146
|
+
});
|
|
147
|
+
// this may throw an error from the SDK/runtime/connection side, in case the
|
|
148
|
+
// failure message cannot be committed to the journal. That error would then
|
|
149
|
+
// be returned from this function (replace the original error)
|
|
150
|
+
// that is acceptable, because in such a situation (failure to append to journal),
|
|
151
|
+
// the state machine closes anyways and no further operations will succeed and the
|
|
152
|
+
// the execution aborts
|
|
153
|
+
await this.stateMachine.handleUserCodeMessage(protocol_2.SIDE_EFFECT_ENTRY_MESSAGE_TYPE, sideEffectMsg, false, undefined, true);
|
|
154
|
+
throw e;
|
|
155
|
+
}
|
|
156
|
+
// we have this code outside the above try/catch block, to ensure that any error arising
|
|
157
|
+
// from here is not incorrectly attributed to the side-effect
|
|
158
|
+
const sideEffectMsg = sideEffectResult !== undefined
|
|
159
|
+
? javascript_1.SideEffectEntryMessage.create({
|
|
160
|
+
value: Buffer.from((0, utils_1.jsonSerialize)(sideEffectResult)),
|
|
161
|
+
})
|
|
162
|
+
: javascript_1.SideEffectEntryMessage.create();
|
|
163
|
+
// if an error arises from committing the side effect result, then this error will
|
|
164
|
+
// be thrown here (reject the returned promise) and the function will see that error,
|
|
165
|
+
// even if the side-effect function completed correctly
|
|
166
|
+
// that is acceptable, because in such a situation (failure to append to journal),
|
|
167
|
+
// the state machine closes anyways and reports an execution failure, meaning no further
|
|
168
|
+
// operations will succeed and the the execution will be retried.
|
|
169
|
+
// If the side-effect result did in fact not make it to the journal, then the side-effect
|
|
170
|
+
// re-executes, and if it made it to the journal after all (error happend inly during
|
|
171
|
+
// ack-back), then retries will use the journaled result.
|
|
172
|
+
// So all good in any case, due to the beauty of "the runtime log is the ground thruth" approach.
|
|
173
|
+
await this.stateMachine.handleUserCodeMessage(protocol_2.SIDE_EFFECT_ENTRY_MESSAGE_TYPE, sideEffectMsg, false, undefined, true);
|
|
174
|
+
return sideEffectResult;
|
|
175
|
+
};
|
|
176
|
+
const sleep = (millis) => this.sleep(millis);
|
|
177
|
+
return executeWithRetries(retryPolicy, executeAndLogSideEffect, sleep);
|
|
178
|
+
}
|
|
179
|
+
sleep(millis) {
|
|
180
|
+
this.checkState("sleep");
|
|
181
|
+
const msg = protocol_1.SleepEntryMessage.create({ wakeUpTime: Date.now() + millis });
|
|
182
|
+
return this.stateMachine.handleUserCodeMessage(protocol_2.SLEEP_ENTRY_MESSAGE_TYPE, msg);
|
|
183
|
+
}
|
|
184
|
+
awakeable() {
|
|
185
|
+
this.checkState("awakeable");
|
|
186
|
+
const msg = protocol_1.AwakeableEntryMessage.create();
|
|
187
|
+
const promise = this.stateMachine
|
|
188
|
+
.handleUserCodeMessage(protocol_2.AWAKEABLE_ENTRY_MESSAGE_TYPE, msg)
|
|
189
|
+
.transform((result) => {
|
|
190
|
+
if (!(result instanceof Buffer)) {
|
|
191
|
+
// This should either be a filled buffer or an empty buffer but never anything else.
|
|
192
|
+
throw errors_1.RetryableError.internal("Awakeable was not resolved with a buffer payload");
|
|
193
|
+
}
|
|
194
|
+
return JSON.parse(result.toString());
|
|
195
|
+
});
|
|
196
|
+
// This needs to be done after handling the message in the state machine
|
|
197
|
+
// otherwise the index is not yet incremented.
|
|
198
|
+
const encodedEntryIndex = Buffer.alloc(4 /* Size of u32 */);
|
|
199
|
+
encodedEntryIndex.writeUInt32BE(this.stateMachine.getUserCodeJournalIndex());
|
|
200
|
+
return {
|
|
201
|
+
id: Buffer.concat([this.id, encodedEntryIndex]).toString("base64url"),
|
|
202
|
+
promise: promise,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
resolveAwakeable(id, payload) {
|
|
206
|
+
this.checkState("resolveAwakeable");
|
|
207
|
+
this.completeAwakeable(id, {
|
|
208
|
+
value: Buffer.from(JSON.stringify(payload)),
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
rejectAwakeable(id, reason) {
|
|
212
|
+
this.checkState("rejectAwakeable");
|
|
213
|
+
this.completeAwakeable(id, {
|
|
214
|
+
failure: { code: errors_1.ErrorCodes.UNKNOWN, message: reason },
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
completeAwakeable(id, base) {
|
|
218
|
+
base.id = id;
|
|
219
|
+
this.stateMachine.handleUserCodeMessage(protocol_2.COMPLETE_AWAKEABLE_ENTRY_MESSAGE_TYPE, protocol_1.CompleteAwakeableEntryMessage.create(base));
|
|
220
|
+
}
|
|
221
|
+
isInSideEffect() {
|
|
222
|
+
const context = RestateGrpcContextImpl.callContext.getStore();
|
|
223
|
+
return context?.type === CallContexType.SideEffect;
|
|
224
|
+
}
|
|
225
|
+
isInOneWayCall() {
|
|
226
|
+
const context = RestateGrpcContextImpl.callContext.getStore();
|
|
227
|
+
return context?.type === CallContexType.OneWayCall;
|
|
228
|
+
}
|
|
229
|
+
getOneWayCallDelay() {
|
|
230
|
+
const context = RestateGrpcContextImpl.callContext.getStore();
|
|
231
|
+
return context?.delay || 0;
|
|
232
|
+
}
|
|
233
|
+
checkState(callType) {
|
|
234
|
+
const context = RestateGrpcContextImpl.callContext.getStore();
|
|
235
|
+
if (!context) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (context.type === CallContexType.SideEffect) {
|
|
239
|
+
throw new errors_1.TerminalError(`You cannot do ${callType} calls from within a side effect.`, { errorCode: errors_1.ErrorCodes.INTERNAL });
|
|
240
|
+
}
|
|
241
|
+
if (context.type === CallContexType.OneWayCall) {
|
|
242
|
+
throw new errors_1.TerminalError(`Cannot do a ${callType} from within ctx.oneWayCall(...).
|
|
243
|
+
Context method oneWayCall() can only be used to invoke other services in the background.
|
|
244
|
+
e.g. ctx.oneWayCall(() => client.greet(my_request))`, { errorCode: errors_1.ErrorCodes.INTERNAL });
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
exports.RestateGrpcContextImpl = RestateGrpcContextImpl;
|
|
249
|
+
async function executeWithRetries(retrySettings, executeAndLogSideEffect, sleep) {
|
|
250
|
+
const { initialDelayMs = public_utils_1.DEFAULT_INITIAL_DELAY_MS, maxDelayMs = Number.MAX_SAFE_INTEGER, maxRetries = Number.MAX_SAFE_INTEGER, policy = public_utils_1.EXPONENTIAL_BACKOFF, name = "side-effect", } = retrySettings;
|
|
251
|
+
let currentDelayMs = initialDelayMs;
|
|
252
|
+
let retriesLeft = maxRetries;
|
|
253
|
+
// eslint-disable-next-line no-constant-condition
|
|
254
|
+
while (true) {
|
|
255
|
+
try {
|
|
256
|
+
return await executeAndLogSideEffect();
|
|
257
|
+
}
|
|
258
|
+
catch (e) {
|
|
259
|
+
if (e instanceof errors_1.TerminalError) {
|
|
260
|
+
throw e;
|
|
261
|
+
}
|
|
262
|
+
// journal mismatch errors are special:
|
|
263
|
+
// - they are not terminal errors, because we want to allow pushing new code so
|
|
264
|
+
// that retries succeed later
|
|
265
|
+
// - they are not retried within the service, because they will never succeed within this service,
|
|
266
|
+
// but can only succeed within a new invocation going to service with fixed code
|
|
267
|
+
// we hence break the retries here similar to terminal errors
|
|
268
|
+
if (e instanceof errors_1.RestateError && e.code == errors_1.ErrorCodes.JOURNAL_MISMATCH) {
|
|
269
|
+
throw e;
|
|
270
|
+
}
|
|
271
|
+
const error = (0, errors_1.ensureError)(e);
|
|
272
|
+
logger_1.rlog.debug("Error while executing side effect '%s': %s - %s", name, error.name, error.message);
|
|
273
|
+
if (error.stack) {
|
|
274
|
+
logger_1.rlog.debug(error.stack);
|
|
275
|
+
}
|
|
276
|
+
if (retriesLeft > 0) {
|
|
277
|
+
logger_1.rlog.debug("Retrying in %d ms", currentDelayMs);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
logger_1.rlog.debug("No retries left.");
|
|
281
|
+
throw new errors_1.TerminalError(`Retries exhausted for ${name}. Last error: ${error.name}: ${error.message}`, {
|
|
282
|
+
errorCode: errors_1.ErrorCodes.INTERNAL,
|
|
283
|
+
cause: error,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
await sleep(currentDelayMs);
|
|
288
|
+
retriesLeft -= 1;
|
|
289
|
+
currentDelayMs = Math.min(policy.computeNextDelay(currentDelayMs), maxDelayMs);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
class RpcContextImpl {
|
|
293
|
+
ctx;
|
|
294
|
+
id;
|
|
295
|
+
serviceName;
|
|
296
|
+
constructor(ctx, id = ctx.id, serviceName = ctx.serviceName) {
|
|
297
|
+
this.ctx = ctx;
|
|
298
|
+
this.id = id;
|
|
299
|
+
this.serviceName = serviceName;
|
|
300
|
+
}
|
|
301
|
+
rpc({ path }) {
|
|
302
|
+
const clientProxy = new Proxy({}, {
|
|
303
|
+
get: (_target, prop) => {
|
|
304
|
+
const route = prop;
|
|
305
|
+
return async (...args) => {
|
|
306
|
+
const request = (0, assumpsions_1.requestFromArgs)(args);
|
|
307
|
+
const requestBytes = dynrpc_1.RpcRequest.encode(request).finish();
|
|
308
|
+
const responseBytes = await this.ctx.request(path, route, requestBytes);
|
|
309
|
+
const response = dynrpc_1.RpcResponse.decode(responseBytes);
|
|
310
|
+
return response.response;
|
|
311
|
+
};
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
return clientProxy;
|
|
315
|
+
}
|
|
316
|
+
send(options) {
|
|
317
|
+
return this.sendDelayed(options, 0);
|
|
318
|
+
}
|
|
319
|
+
sendDelayed({ path }, delayMillis) {
|
|
320
|
+
const clientProxy = new Proxy({}, {
|
|
321
|
+
get: (_target, prop) => {
|
|
322
|
+
const route = prop;
|
|
323
|
+
return (...args) => {
|
|
324
|
+
const request = (0, assumpsions_1.requestFromArgs)(args);
|
|
325
|
+
const requestBytes = dynrpc_1.RpcRequest.encode(request).finish();
|
|
326
|
+
const sender = () => this.ctx.request(path, route, requestBytes);
|
|
327
|
+
if (delayMillis === undefined || delayMillis === 0) {
|
|
328
|
+
this.ctx.oneWayCall(sender);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
this.ctx.delayedCall(sender, delayMillis);
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
return clientProxy;
|
|
337
|
+
}
|
|
338
|
+
get(name) {
|
|
339
|
+
return this.ctx.get(name);
|
|
340
|
+
}
|
|
341
|
+
set(name, value) {
|
|
342
|
+
this.ctx.set(name, value);
|
|
343
|
+
}
|
|
344
|
+
clear(name) {
|
|
345
|
+
this.ctx.clear(name);
|
|
346
|
+
}
|
|
347
|
+
sideEffect(fn) {
|
|
348
|
+
return this.ctx.sideEffect(fn);
|
|
349
|
+
}
|
|
350
|
+
awakeable() {
|
|
351
|
+
return this.ctx.awakeable();
|
|
352
|
+
}
|
|
353
|
+
resolveAwakeable(id, payload) {
|
|
354
|
+
this.ctx.resolveAwakeable(id, payload);
|
|
355
|
+
}
|
|
356
|
+
rejectAwakeable(id, reason) {
|
|
357
|
+
this.ctx.rejectAwakeable(id, reason);
|
|
358
|
+
}
|
|
359
|
+
sleep(millis) {
|
|
360
|
+
return this.ctx.sleep(millis);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
exports.RpcContextImpl = RpcContextImpl;
|
|
364
|
+
//# sourceMappingURL=restate_context_impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restate_context_impl.js","sourceRoot":"","sources":["../src/restate_context_impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { GrpcService, GrpcServiceMethod, HostedGrpcServiceMethod, ProtoMetadata } from "../types/grpc";
|
|
2
|
+
import { ProtocolMode, ServiceDiscoveryResponse } from "../generated/proto/discovery";
|
|
3
|
+
import { MethodDescriptorProto as MethodDescriptorProto1 } from "ts-proto-descriptors";
|
|
4
|
+
export interface ServiceOpts {
|
|
5
|
+
descriptor: ProtoMetadata;
|
|
6
|
+
service: string;
|
|
7
|
+
instance: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare abstract class BaseRestateServer {
|
|
10
|
+
protected readonly methods: Record<string, HostedGrpcServiceMethod<unknown, unknown>>;
|
|
11
|
+
protected readonly discovery: ServiceDiscoveryResponse;
|
|
12
|
+
protected constructor(protocolMode: ProtocolMode);
|
|
13
|
+
protected addDescriptor(descriptor: ProtoMetadata): void;
|
|
14
|
+
protected bindService({ descriptor, service, instance }: ServiceOpts): void;
|
|
15
|
+
rpcHandler(keyed: boolean, route: string, handler: Function): {
|
|
16
|
+
descriptor: MethodDescriptorProto1;
|
|
17
|
+
method: GrpcServiceMethod<unknown, unknown>;
|
|
18
|
+
};
|
|
19
|
+
stringKeyedEventHandler(keyed: boolean, route: string, handler: Function): {
|
|
20
|
+
descriptor: MethodDescriptorProto1;
|
|
21
|
+
method: GrpcServiceMethod<unknown, unknown>;
|
|
22
|
+
};
|
|
23
|
+
protected bindRpcService(name: string, router: RpcRouter, keyed: boolean): void;
|
|
24
|
+
protected methodByUrl<I, O>(url: string | undefined | null): HostedGrpcServiceMethod<I, O> | undefined;
|
|
25
|
+
}
|
|
26
|
+
export declare function parseService(meta: ProtoMetadata, serviceName: string, instance: any): GrpcService;
|
|
27
|
+
export type RpcRouter = {
|
|
28
|
+
[key: string]: Function;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=base_restate_server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base_restate_server.d.ts","sourceRoot":"","sources":["../../src/server/base_restate_server.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,EAGL,qBAAqB,IAAI,sBAAsB,EAChD,MAAM,sBAAsB,CAAC;AAkB9B,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,8BAAsB,iBAAiB;IACrC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAChC,MAAM,EACN,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAC1C,CAAM;IACP,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;IAEvD,SAAS,aAAa,YAAY,EAAE,YAAY;IAUhD,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa;IAwDjD,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,WAAW;IAuBpE,UAAU,CACR,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,GAChB;QACD,UAAU,EAAE,sBAAsB,CAAC;QACnC,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KAC7C;IA8BD,uBAAuB,CACrB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,GAChB;QACD,UAAU,EAAE,sBAAsB,CAAC;QACnC,MAAM,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KAC7C;IA4BD,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO;IAwDxE,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EACxB,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC7B,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;CAM7C;AAmDD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,GAAG,eAoEd;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzB,CAAC"}
|