@restatedev/restate-sdk 0.7.3-worker → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +29 -51
  3. package/dist/clients/workflow_client.d.ts +77 -0
  4. package/dist/clients/workflow_client.d.ts.map +1 -0
  5. package/dist/clients/workflow_client.js +172 -0
  6. package/dist/clients/workflow_client.js.map +1 -0
  7. package/dist/connection/buffered_connection.js +44 -0
  8. package/dist/connection/buffered_connection.js.map +1 -0
  9. package/dist/connection/connection.js +13 -0
  10. package/dist/connection/connection.js.map +1 -0
  11. package/dist/connection/embedded_connection.js +59 -0
  12. package/dist/connection/embedded_connection.js.map +1 -0
  13. package/dist/connection/http_connection.js +203 -0
  14. package/dist/connection/http_connection.js.map +1 -0
  15. package/dist/connection/lambda_connection.js +58 -0
  16. package/dist/connection/lambda_connection.js.map +1 -0
  17. package/dist/{restate_context.d.ts → context.d.ts} +239 -170
  18. package/dist/context.d.ts.map +1 -0
  19. package/dist/context.js +113 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/{restate_context_impl.d.ts → context_impl.d.ts} +26 -30
  22. package/dist/context_impl.d.ts.map +1 -0
  23. package/dist/context_impl.js +439 -0
  24. package/dist/context_impl.js.map +1 -0
  25. package/dist/embedded/api.d.ts +2 -2
  26. package/dist/embedded/api.d.ts.map +1 -1
  27. package/dist/embedded/api.js +35 -0
  28. package/dist/embedded/api.js.map +1 -0
  29. package/dist/embedded/handler.d.ts +2 -2
  30. package/dist/embedded/handler.d.ts.map +1 -1
  31. package/dist/embedded/handler.js +26 -0
  32. package/dist/embedded/handler.js.map +1 -0
  33. package/dist/embedded/http2_remote.js +91 -0
  34. package/dist/embedded/http2_remote.js.map +1 -0
  35. package/dist/embedded/invocation.d.ts.map +1 -1
  36. package/dist/embedded/invocation.js +94 -0
  37. package/dist/embedded/invocation.js.map +1 -0
  38. package/dist/endpoint/endpoint_impl.d.ts +35 -0
  39. package/dist/endpoint/endpoint_impl.d.ts.map +1 -0
  40. package/dist/endpoint/endpoint_impl.js +405 -0
  41. package/dist/endpoint/endpoint_impl.js.map +1 -0
  42. package/dist/endpoint/http2_handler.d.ts +11 -0
  43. package/dist/endpoint/http2_handler.d.ts.map +1 -0
  44. package/dist/endpoint/http2_handler.js +119 -0
  45. package/dist/endpoint/http2_handler.js.map +1 -0
  46. package/dist/endpoint/lambda_handler.d.ts +15 -0
  47. package/dist/endpoint/lambda_handler.d.ts.map +1 -0
  48. package/dist/endpoint/lambda_handler.js +144 -0
  49. package/dist/endpoint/lambda_handler.js.map +1 -0
  50. package/dist/endpoint.d.ts +161 -0
  51. package/dist/endpoint.d.ts.map +1 -0
  52. package/dist/endpoint.js +22 -0
  53. package/dist/endpoint.js.map +1 -0
  54. package/dist/generated/dev/restate/events.js +371 -0
  55. package/dist/generated/dev/restate/events.js.map +1 -0
  56. package/dist/generated/dev/restate/ext.js +215 -0
  57. package/dist/generated/dev/restate/ext.js.map +1 -0
  58. package/dist/generated/google/protobuf/descriptor.js +6676 -0
  59. package/dist/generated/google/protobuf/descriptor.js.map +1 -0
  60. package/dist/generated/google/protobuf/empty.js +107 -0
  61. package/dist/generated/google/protobuf/empty.js.map +1 -0
  62. package/dist/generated/google/protobuf/struct.js +754 -0
  63. package/dist/generated/google/protobuf/struct.js.map +1 -0
  64. package/dist/generated/proto/discovery.js +364 -0
  65. package/dist/generated/proto/discovery.js.map +1 -0
  66. package/dist/generated/proto/dynrpc.js +668 -0
  67. package/dist/generated/proto/dynrpc.js.map +1 -0
  68. package/dist/generated/proto/javascript.d.ts +13 -0
  69. package/dist/generated/proto/javascript.d.ts.map +1 -1
  70. package/dist/generated/proto/javascript.js +416 -0
  71. package/dist/generated/proto/javascript.js.map +1 -0
  72. package/dist/generated/proto/protocol.d.ts +43 -0
  73. package/dist/generated/proto/protocol.d.ts.map +1 -1
  74. package/dist/generated/proto/protocol.js +2641 -0
  75. package/dist/generated/proto/protocol.js.map +1 -0
  76. package/dist/generated/proto/services.js +1535 -0
  77. package/dist/generated/proto/services.js.map +1 -0
  78. package/dist/generated/proto/test.js +321 -0
  79. package/dist/generated/proto/test.js.map +1 -0
  80. package/dist/invocation.d.ts +4 -1
  81. package/dist/invocation.d.ts.map +1 -1
  82. package/dist/invocation.js +157 -0
  83. package/dist/invocation.js.map +1 -0
  84. package/dist/io/decoder.d.ts +1 -0
  85. package/dist/io/decoder.d.ts.map +1 -1
  86. package/dist/io/decoder.js +140 -0
  87. package/dist/io/decoder.js.map +1 -0
  88. package/dist/io/encoder.d.ts +1 -2
  89. package/dist/io/encoder.d.ts.map +1 -1
  90. package/dist/io/encoder.js +68 -0
  91. package/dist/io/encoder.js.map +1 -0
  92. package/dist/journal.d.ts +13 -4
  93. package/dist/journal.d.ts.map +1 -1
  94. package/dist/journal.js +405 -0
  95. package/dist/journal.js.map +1 -0
  96. package/dist/local_state_store.d.ts +5 -3
  97. package/dist/local_state_store.d.ts.map +1 -1
  98. package/dist/local_state_store.js +82 -0
  99. package/dist/local_state_store.js.map +1 -0
  100. package/dist/logger.d.ts +19 -0
  101. package/dist/logger.d.ts.map +1 -0
  102. package/dist/logger.js +90 -0
  103. package/dist/logger.js.map +1 -0
  104. package/dist/promise_combinator_tracker.d.ts +29 -0
  105. package/dist/promise_combinator_tracker.d.ts.map +1 -0
  106. package/dist/promise_combinator_tracker.js +128 -0
  107. package/dist/promise_combinator_tracker.js.map +1 -0
  108. package/dist/public_api.d.ts +5 -5
  109. package/dist/public_api.d.ts.map +1 -1
  110. package/dist/public_api.js +60 -0
  111. package/dist/public_api.js.map +1 -0
  112. package/dist/state_machine.d.ts +19 -12
  113. package/dist/state_machine.d.ts.map +1 -1
  114. package/dist/state_machine.js +437 -0
  115. package/dist/state_machine.js.map +1 -0
  116. package/dist/types/errors.d.ts +12 -3
  117. package/dist/types/errors.d.ts.map +1 -1
  118. package/dist/types/errors.js +273 -0
  119. package/dist/types/errors.js.map +1 -0
  120. package/dist/types/grpc.d.ts +6 -4
  121. package/dist/types/grpc.d.ts.map +1 -1
  122. package/dist/types/grpc.js +81 -0
  123. package/dist/types/grpc.js.map +1 -0
  124. package/dist/types/protocol.d.ts +9 -5
  125. package/dist/types/protocol.d.ts.map +1 -1
  126. package/dist/types/protocol.js +147 -0
  127. package/dist/types/protocol.js.map +1 -0
  128. package/dist/types/router.d.ts +8 -8
  129. package/dist/types/router.d.ts.map +1 -1
  130. package/dist/types/router.js +36 -0
  131. package/dist/types/router.js.map +1 -0
  132. package/dist/types/types.d.ts +1 -0
  133. package/dist/types/types.d.ts.map +1 -1
  134. package/dist/types/types.js +138 -0
  135. package/dist/types/types.js.map +1 -0
  136. package/dist/utils/{assumpsions.d.ts → assumptions.d.ts} +1 -1
  137. package/dist/utils/{assumpsions.d.ts.map → assumptions.d.ts.map} +1 -1
  138. package/dist/utils/assumptions.js +101 -0
  139. package/dist/utils/assumptions.js.map +1 -0
  140. package/dist/utils/message_logger.d.ts +28 -0
  141. package/dist/utils/message_logger.d.ts.map +1 -0
  142. package/dist/utils/message_logger.js +88 -0
  143. package/dist/utils/message_logger.js.map +1 -0
  144. package/dist/utils/promises.d.ts +15 -0
  145. package/dist/utils/promises.d.ts.map +1 -0
  146. package/dist/utils/promises.js +67 -0
  147. package/dist/utils/promises.js.map +1 -0
  148. package/dist/utils/public_utils.js +49 -0
  149. package/dist/utils/public_utils.js.map +1 -0
  150. package/dist/utils/rand.d.ts +1 -1
  151. package/dist/utils/rand.d.ts.map +1 -1
  152. package/dist/utils/rand.js +114 -0
  153. package/dist/utils/rand.js.map +1 -0
  154. package/dist/utils/utils.d.ts +1 -10
  155. package/dist/utils/utils.d.ts.map +1 -1
  156. package/dist/utils/utils.js +122 -0
  157. package/dist/utils/utils.js.map +1 -0
  158. package/dist/workflows/workflow.d.ts +101 -0
  159. package/dist/workflows/workflow.d.ts.map +1 -0
  160. package/dist/workflows/workflow.js +80 -0
  161. package/dist/workflows/workflow.js.map +1 -0
  162. package/dist/workflows/workflow_state_service.d.ts +35 -0
  163. package/dist/workflows/workflow_state_service.d.ts.map +1 -0
  164. package/dist/workflows/workflow_state_service.js +201 -0
  165. package/dist/workflows/workflow_state_service.js.map +1 -0
  166. package/dist/workflows/workflow_wrapper_service.d.ts +10 -0
  167. package/dist/workflows/workflow_wrapper_service.d.ts.map +1 -0
  168. package/dist/workflows/workflow_wrapper_service.js +264 -0
  169. package/dist/workflows/workflow_wrapper_service.js.map +1 -0
  170. package/package.json +38 -39
  171. package/src/clients/workflow_client.ts +290 -0
  172. package/src/connection/buffered_connection.ts +47 -0
  173. package/src/connection/connection.ts +34 -0
  174. package/src/connection/embedded_connection.ts +62 -0
  175. package/src/connection/http_connection.ts +228 -0
  176. package/src/connection/lambda_connection.ts +69 -0
  177. package/src/context.ts +633 -0
  178. package/src/context_impl.ts +721 -0
  179. package/src/embedded/api.ts +57 -0
  180. package/src/embedded/handler.ts +36 -0
  181. package/src/embedded/http2_remote.ts +103 -0
  182. package/src/embedded/invocation.ts +126 -0
  183. package/src/endpoint/endpoint_impl.ts +623 -0
  184. package/src/endpoint/http2_handler.ts +151 -0
  185. package/src/endpoint/lambda_handler.ts +181 -0
  186. package/src/endpoint.ts +187 -0
  187. package/src/generated/dev/restate/events.ts +430 -0
  188. package/src/generated/dev/restate/ext.ts +238 -0
  189. package/src/generated/google/protobuf/descriptor.ts +7889 -0
  190. package/src/generated/google/protobuf/empty.ts +150 -0
  191. package/src/generated/google/protobuf/struct.ts +878 -0
  192. package/src/generated/proto/discovery.ts +423 -0
  193. package/src/generated/proto/dynrpc.ts +768 -0
  194. package/src/generated/proto/javascript.ts +488 -0
  195. package/src/generated/proto/protocol.ts +3091 -0
  196. package/src/generated/proto/services.ts +1834 -0
  197. package/src/generated/proto/test.ts +387 -0
  198. package/src/invocation.ts +212 -0
  199. package/src/io/decoder.ts +171 -0
  200. package/src/io/encoder.ts +72 -0
  201. package/src/journal.ts +537 -0
  202. package/src/local_state_store.ts +94 -0
  203. package/src/logger.ts +121 -0
  204. package/src/promise_combinator_tracker.ts +191 -0
  205. package/src/public_api.ts +53 -0
  206. package/src/state_machine.ts +635 -0
  207. package/src/types/errors.ts +297 -0
  208. package/src/types/grpc.ts +97 -0
  209. package/src/types/protocol.ts +201 -0
  210. package/src/types/router.ts +118 -0
  211. package/src/types/types.ts +160 -0
  212. package/src/utils/assumptions.ts +131 -0
  213. package/src/utils/message_logger.ts +112 -0
  214. package/src/utils/promises.ts +118 -0
  215. package/src/utils/public_utils.ts +91 -0
  216. package/src/utils/rand.ts +142 -0
  217. package/src/utils/utils.ts +178 -0
  218. package/src/workflows/workflow.ts +178 -0
  219. package/src/workflows/workflow_state_service.ts +299 -0
  220. package/src/workflows/workflow_wrapper_service.ts +314 -0
  221. package/dist/cloudflare_bundle.js +0 -27387
  222. package/dist/restate_context.d.ts.map +0 -1
  223. package/dist/restate_context_impl.d.ts.map +0 -1
  224. package/dist/server/base_restate_server.d.ts +0 -32
  225. package/dist/server/base_restate_server.d.ts.map +0 -1
  226. package/dist/server/restate_lambda_handler.d.ts +0 -104
  227. package/dist/server/restate_lambda_handler.d.ts.map +0 -1
  228. package/dist/server/restate_server.d.ts +0 -97
  229. package/dist/server/restate_server.d.ts.map +0 -1
  230. package/dist/utils/logger.d.ts +0 -60
  231. package/dist/utils/logger.d.ts.map +0 -1
@@ -0,0 +1,405 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.parseService = exports.EndpointImpl = void 0;
17
+ /* eslint-disable @typescript-eslint/ban-types */
18
+ const grpc_1 = require("../types/grpc");
19
+ const types_1 = require("../types/types");
20
+ const descriptor_1 = require("../generated/google/protobuf/descriptor");
21
+ const empty_1 = require("../generated/google/protobuf/empty");
22
+ const ext_1 = require("../generated/dev/restate/ext");
23
+ const dynrpc_1 = require("../generated/proto/dynrpc");
24
+ const context_1 = require("../context");
25
+ const assumptions_1 = require("../utils/assumptions");
26
+ const public_api_1 = require("../public_api");
27
+ const router_1 = require("../types/router");
28
+ const utils_1 = require("../utils/utils");
29
+ const logger_1 = require("../logger");
30
+ const http2_1 = __importDefault(require("http2"));
31
+ const http2_handler_1 = require("./http2_handler");
32
+ const lambda_handler_1 = require("./lambda_handler");
33
+ class EndpointImpl {
34
+ methods = {};
35
+ discovery;
36
+ dynrpcDescriptor;
37
+ constructor() {
38
+ this.discovery = {
39
+ files: { file: [] },
40
+ services: [],
41
+ minProtocolVersion: 0,
42
+ maxProtocolVersion: 0,
43
+ };
44
+ this.dynrpcDescriptor = copyProtoMetadata(dynrpc_1.protoMetadata);
45
+ }
46
+ bindService({ descriptor, service, instance }) {
47
+ const spec = parseService(descriptor, service, instance);
48
+ this.addDescriptor(descriptor);
49
+ const qname = spec.packge === "" ? spec.name : `${spec.packge}.${spec.name}`;
50
+ this.discovery.services?.push(qname);
51
+ for (const method of spec.methods) {
52
+ const url = `/invoke/${qname}/${method.name}`;
53
+ this.methods[url] = new grpc_1.HostedGrpcServiceMethod(instance, spec.packge, service, method);
54
+ // note that this log will not print all the keys.
55
+ logger_1.rlog.info(`Binding: ${url} -> ${JSON.stringify(method, null, "\t")}`);
56
+ }
57
+ return this;
58
+ }
59
+ bindRouter(path, router) {
60
+ this.bindRpcService(path, router, false);
61
+ return this;
62
+ }
63
+ bindKeyedRouter(path, router) {
64
+ this.bindRpcService(path, router, true);
65
+ return this;
66
+ }
67
+ bind(services) {
68
+ services.registerServices(this);
69
+ return this;
70
+ }
71
+ http2Handler() {
72
+ const handler = new http2_handler_1.Http2Handler(this);
73
+ return handler.acceptConnection.bind(handler);
74
+ }
75
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ lambdaHandler() {
77
+ const handler = new lambda_handler_1.LambdaHandler(this);
78
+ return handler.handleRequest.bind(handler);
79
+ }
80
+ listen(port) {
81
+ const actualPort = port ?? parseInt(process.env.PORT ?? "9080");
82
+ logger_1.rlog.info(`Listening on ${actualPort}...`);
83
+ const server = http2_1.default.createServer(this.http2Handler());
84
+ server.listen(actualPort);
85
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
86
+ return new Promise(() => { });
87
+ }
88
+ // Private methods to build the endpoint
89
+ addDescriptor(descriptor) {
90
+ const desc = descriptor_1.FileDescriptorProto.fromPartial(descriptor.fileDescriptor);
91
+ // extract out service options and put into the fileDescriptor
92
+ for (const name in descriptor.options?.services) {
93
+ if (descriptor.options?.services[name]?.options?.service_type !== undefined) {
94
+ desc.service
95
+ .find((desc) => desc.name === name)
96
+ ?.options?.uninterpretedOption.push(descriptor_1.UninterpretedOption.fromPartial({
97
+ name: [
98
+ { namePart: "dev.restate.ext.service_type", isExtension: true },
99
+ ],
100
+ identifierValue: (0, ext_1.serviceTypeToJSON)(descriptor.options?.services[name]?.options?.service_type),
101
+ }));
102
+ }
103
+ }
104
+ // extract out field options and put into the fileDescriptor
105
+ for (const messageName in descriptor.options?.messages) {
106
+ for (const fieldName in descriptor.options?.messages[messageName]
107
+ ?.fields) {
108
+ const fields = descriptor.options?.messages[messageName]?.fields || {};
109
+ if (fields[fieldName]["field"] !== undefined) {
110
+ desc.messageType
111
+ .find((desc) => desc.name === messageName)
112
+ ?.field?.find((desc) => desc.name === fieldName)
113
+ ?.options?.uninterpretedOption.push(descriptor_1.UninterpretedOption.fromPartial({
114
+ name: [
115
+ { namePart: "dev.restate.ext.field", isExtension: true },
116
+ ],
117
+ identifierValue: (0, ext_1.fieldTypeToJSON)(fields[fieldName]["field"]),
118
+ }));
119
+ }
120
+ }
121
+ }
122
+ if (this.discovery.files?.file?.filter((haveDesc) => desc.name === haveDesc.name).length === 0) {
123
+ this.discovery.files?.file.push(desc);
124
+ }
125
+ descriptor.dependencies?.forEach((dep) => {
126
+ this.addDescriptor(dep);
127
+ });
128
+ }
129
+ rpcHandler(keyed, route, handler) {
130
+ const descriptor = createRpcMethodDescriptor(route);
131
+ const localMethod = (instance, input) => {
132
+ if (keyed) {
133
+ return dispatchKeyedRpcHandler((0, context_1.useKeyedContext)(instance), input, handler);
134
+ }
135
+ else {
136
+ return dispatchUnkeyedRpcHandler((0, context_1.useContext)(instance), input, handler);
137
+ }
138
+ };
139
+ const decoder = dynrpc_1.RpcRequest.decode;
140
+ const encoder = (message) => dynrpc_1.RpcResponse.encode({
141
+ response: (0, utils_1.jsonSafeAny)("", message.response),
142
+ }).finish();
143
+ const method = new grpc_1.GrpcServiceMethod(route, route, keyed, localMethod, decoder, encoder);
144
+ return {
145
+ descriptor: descriptor,
146
+ method: method,
147
+ };
148
+ }
149
+ stringKeyedEventHandler(keyed, route, handler) {
150
+ if (!keyed) {
151
+ // TODO: support unkeyed rpc event handler
152
+ throw new public_api_1.TerminalError("Unkeyed Event handlers are not yet supported.");
153
+ }
154
+ const descriptor = createStringKeyedMethodDescriptor(route);
155
+ const localMethod = (instance, input) => {
156
+ return dispatchKeyedEventHandler((0, context_1.useKeyedContext)(instance), input, handler);
157
+ };
158
+ const decoder = dynrpc_1.KeyedEvent.decode;
159
+ const encoder = (message) => empty_1.Empty.encode(message).finish();
160
+ const method = new grpc_1.GrpcServiceMethod(route, route, keyed, localMethod, decoder, encoder);
161
+ return {
162
+ descriptor,
163
+ method: method,
164
+ };
165
+ }
166
+ bindRpcService(name, router, keyed) {
167
+ if (name === undefined || router === undefined || keyed === undefined) {
168
+ throw new Error("incomplete arguments: (name, router, keyed)");
169
+ }
170
+ if (!(typeof name === "string") || name.length === 0) {
171
+ throw new Error("service name must be a non-empty string");
172
+ }
173
+ if (name.indexOf("/") !== -1) {
174
+ throw new Error("service name must not contain any slash '/'");
175
+ }
176
+ const lastDot = name.indexOf(".");
177
+ const serviceName = lastDot === -1 ? name : name.substring(lastDot + 1);
178
+ const servicePackage = name.substring(0, name.length - serviceName.length - 1);
179
+ const desc = this.dynrpcDescriptor;
180
+ const serviceGrpcSpec = keyed
181
+ ? pushKeyedService(desc, name)
182
+ : pushUnKeyedService(desc, name);
183
+ for (const [route, handler] of Object.entries(router)) {
184
+ let registration;
185
+ if ((0, router_1.isEventHandler)(handler)) {
186
+ const theHandler = handler.handler;
187
+ registration = this.stringKeyedEventHandler(keyed, route, theHandler);
188
+ }
189
+ else {
190
+ registration = this.rpcHandler(keyed, route, handler);
191
+ }
192
+ serviceGrpcSpec.method.push(registration.descriptor);
193
+ const url = `/invoke/${name}/${route}`;
194
+ this.methods[url] = new grpc_1.HostedGrpcServiceMethod({}, // we don't actually execute on any class instance
195
+ servicePackage, serviceName, registration.method);
196
+ logger_1.rlog.info(`Binding: ${url} -> ${JSON.stringify(registration.method, null, "\t")}`);
197
+ }
198
+ // since we modified this descriptor, we need to remove it in case it was added before,
199
+ // so that the modified version is processed and added again
200
+ const filteredFiles = this.discovery.files?.file?.filter((haveDesc) => desc.fileDescriptor.name !== haveDesc.name);
201
+ if (this.discovery.files !== undefined && filteredFiles !== undefined) {
202
+ this.discovery.files.file = filteredFiles;
203
+ }
204
+ this.addDescriptor(desc);
205
+ this.discovery.services?.push(name);
206
+ }
207
+ methodByUrl(url) {
208
+ if (url == undefined || url === null) {
209
+ return undefined;
210
+ }
211
+ return this.methods[url];
212
+ }
213
+ }
214
+ exports.EndpointImpl = EndpointImpl;
215
+ /* eslint-disable @typescript-eslint/no-explicit-any */
216
+ function indexProperties(instance) {
217
+ const names = new Map();
218
+ while (instance !== null &&
219
+ instance !== undefined &&
220
+ instance !== Object.prototype) {
221
+ for (const property of Object.getOwnPropertyNames(instance)) {
222
+ names.set(property.toLowerCase(), property);
223
+ }
224
+ instance = Object.getPrototypeOf(instance);
225
+ }
226
+ return names;
227
+ }
228
+ // Given:
229
+ // * an instance of a class that implements a gRPC TypeScript interface,
230
+ // as generated by our protoc plugin, this method
231
+ // * The ProtobufFileDescriptor as generated by the protobuf plugin
232
+ // * and the gRPC service name
233
+ //
234
+ // Return a GrpcService definition, as defined above.
235
+ //
236
+ // For example (see first: example.proto and example.ts):
237
+ //
238
+ // > parse(example.protoMetaData, "Greeter", new GreeterService())
239
+ //
240
+ // produces ~
241
+ //
242
+ // serviceName: 'Greeter',
243
+ // instance: GreeterService {},
244
+ // methods: {
245
+ // multiword: {
246
+ // localName: 'multiWord',
247
+ // fn: [Function: multiWord],
248
+ // inputType: [Object],
249
+ // outputType: [Object]
250
+ // },
251
+ // greet: {
252
+ // localName: 'greet',
253
+ // fn: [Function: greet],
254
+ // inputType: [Object],
255
+ // outputType: [Object]
256
+ // }
257
+ // }
258
+ //}
259
+ //
260
+ /* eslint-disable @typescript-eslint/no-explicit-any */
261
+ function parseService(meta, serviceName, instance) {
262
+ const svcMethods = [];
263
+ const service_type = meta.options?.services?.[serviceName].options?.["service_type"];
264
+ const keyed = service_type !== ext_1.ServiceType.UNKEYED;
265
+ // index all the existing properties that `instance` has.
266
+ // we index them by the lower case represention.
267
+ const names = indexProperties(instance);
268
+ for (const serviceDescriptor of meta.fileDescriptor.service) {
269
+ if (serviceName !== serviceDescriptor.name) {
270
+ continue;
271
+ }
272
+ for (const methodDescriptor of serviceDescriptor.method) {
273
+ const lowercaseName = methodDescriptor.name.toLowerCase();
274
+ const localName = names.get(lowercaseName);
275
+ if (localName === undefined || localName === null) {
276
+ throw new Error(`unimplemented method ${methodDescriptor.name}`);
277
+ }
278
+ const fn = instance[localName];
279
+ if (typeof fn !== "function") {
280
+ throw new Error(`A property ${localName} exists, which coresponds to a gRPC service named ${methodDescriptor.name}, but that property is not a function.`);
281
+ }
282
+ const localMethod = async (instance, input) => {
283
+ return await fn.call(instance, input);
284
+ };
285
+ let inputMessage = meta.references[methodDescriptor.inputType];
286
+ // If the input message type is not defined by the proto files of the service but by a dependency (e.g. BoolValue, Empty, etc)
287
+ // then we need to look for the encoders and decoders in the dependencies.
288
+ if (inputMessage === undefined) {
289
+ meta.dependencies?.forEach((dep) => {
290
+ if (dep.references[methodDescriptor.inputType] !== undefined) {
291
+ inputMessage = dep.references[methodDescriptor.inputType];
292
+ }
293
+ });
294
+ }
295
+ let outputMessage = meta.references[methodDescriptor.outputType];
296
+ // If the output message type is not defined by use but by the proto files of the service (e.g. BoolValue, Empty, etc)
297
+ // then we need to look for the encoders and decoders in the dependencies.
298
+ if (outputMessage === undefined) {
299
+ meta.dependencies?.forEach((dep) => {
300
+ if (dep.references[methodDescriptor.outputType] !== undefined) {
301
+ outputMessage = dep.references[methodDescriptor.outputType];
302
+ }
303
+ });
304
+ }
305
+ const decoder = (buffer) => inputMessage.decode(buffer);
306
+ const encoder = (message) => outputMessage.encode(message).finish();
307
+ svcMethods.push(new grpc_1.GrpcServiceMethod(methodDescriptor.name, localName, keyed, localMethod, decoder, encoder));
308
+ }
309
+ return new grpc_1.GrpcService(serviceName, meta.fileDescriptor.package, instance, svcMethods);
310
+ }
311
+ throw new Error(`Unable to find a service ${serviceName}.`);
312
+ }
313
+ exports.parseService = parseService;
314
+ async function dispatchKeyedRpcHandler(ctx, req, handler) {
315
+ const { key, request } = (0, assumptions_1.verifyAssumptions)(true, req);
316
+ if (typeof key !== "string" || key.length === 0) {
317
+ // we throw a terminal error here, because this cannot be patched by updating code:
318
+ // if the request is wrong (missing a key), the request can never make it
319
+ throw new public_api_1.TerminalError("Keyed handlers must recieve a non null or empty string key");
320
+ }
321
+ const jsResult = (await handler(ctx, key, request));
322
+ return dynrpc_1.RpcResponse.create({ response: jsResult });
323
+ }
324
+ async function dispatchUnkeyedRpcHandler(ctx, req, handler) {
325
+ const { request } = (0, assumptions_1.verifyAssumptions)(false, req);
326
+ const result = await handler(ctx, request);
327
+ return dynrpc_1.RpcResponse.create({ response: result });
328
+ }
329
+ async function dispatchKeyedEventHandler(ctx, req, handler) {
330
+ const key = req.key;
331
+ if (key === null || key === undefined || key.length === 0) {
332
+ // we throw a terminal error here, because this cannot be patched by updating code:
333
+ // if the request is wrong (missing a key), the request can never make it
334
+ throw new public_api_1.TerminalError("Keyed handlers must receive a non null or empty string key");
335
+ }
336
+ const jsEvent = new types_1.Event(key, req.payload, req.attributes);
337
+ await handler(ctx, jsEvent);
338
+ return empty_1.Empty.create({});
339
+ }
340
+ function copyProtoMetadata(original) {
341
+ // duplicate the file descriptor. shallow, because we only need to
342
+ // change one top-level field: service[]
343
+ const fileDescriptorCopy = {
344
+ ...original.fileDescriptor,
345
+ };
346
+ fileDescriptorCopy.service = [];
347
+ let options = original.options;
348
+ if (options !== undefined) {
349
+ options = {
350
+ ...original.options,
351
+ };
352
+ options.services = {};
353
+ }
354
+ return {
355
+ fileDescriptor: fileDescriptorCopy,
356
+ references: original.references,
357
+ dependencies: original.dependencies,
358
+ options: options,
359
+ };
360
+ }
361
+ function pushKeyedService(desc, newName) {
362
+ const service = {
363
+ ...dynrpc_1.protoMetadata.fileDescriptor.service[0],
364
+ };
365
+ service.name = newName;
366
+ service.method = [];
367
+ desc.fileDescriptor.service.push(service);
368
+ const serviceOptions = dynrpc_1.protoMetadata.options?.services?.["RpcEndpoint"];
369
+ if (serviceOptions === undefined) {
370
+ throw new Error("Missing service options in original RpcEndpoint proto descriptor");
371
+ }
372
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
373
+ desc.options.services[newName] = serviceOptions;
374
+ return service;
375
+ }
376
+ function pushUnKeyedService(desc, newName) {
377
+ const service = {
378
+ ...dynrpc_1.protoMetadata.fileDescriptor.service[1],
379
+ };
380
+ service.name = newName;
381
+ service.method = [];
382
+ desc.fileDescriptor.service.push(service);
383
+ const serviceOptions = dynrpc_1.protoMetadata.options?.services?.["UnkeyedRpcEndpoint"];
384
+ if (serviceOptions === undefined) {
385
+ throw new Error("Missing service options in original UnkeyedRpcEndpoint proto descriptor");
386
+ }
387
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
388
+ desc.options.services[newName] = serviceOptions;
389
+ return service;
390
+ }
391
+ function createRpcMethodDescriptor(methodName) {
392
+ const desc = {
393
+ ...dynrpc_1.protoMetadata.fileDescriptor.service[0].method[0],
394
+ };
395
+ desc.name = methodName;
396
+ return desc;
397
+ }
398
+ function createStringKeyedMethodDescriptor(methodName) {
399
+ const desc = {
400
+ ...dynrpc_1.protoMetadata.fileDescriptor.service[0].method[1],
401
+ };
402
+ desc.name = methodName;
403
+ return desc;
404
+ }
405
+ //# sourceMappingURL=endpoint_impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint_impl.js","sourceRoot":"","sources":["../../src/endpoint/endpoint_impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import { Http2ServerRequest, Http2ServerResponse } from "http2";
3
+ import { EndpointImpl } from "./endpoint_impl";
4
+ export declare class Http2Handler {
5
+ private readonly endpoint;
6
+ private readonly discoveryResponse;
7
+ constructor(endpoint: EndpointImpl);
8
+ acceptConnection(request: Http2ServerRequest, _response: Http2ServerResponse): void;
9
+ private handleConnection;
10
+ }
11
+ //# sourceMappingURL=http2_handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http2_handler.d.ts","sourceRoot":"","sources":["../../src/endpoint/http2_handler.ts"],"names":[],"mappings":";AAaA,OAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAMvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,qBAAa,YAAY;IAEX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IADrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;gBAChC,QAAQ,EAAE,YAAY;IAOnD,gBAAgB,CACd,OAAO,EAAE,kBAAkB,EAE3B,SAAS,EAAE,mBAAmB;YAelB,gBAAgB;CAgC/B"}
@@ -0,0 +1,119 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.Http2Handler = void 0;
17
+ const stream_1 = __importDefault(require("stream"));
18
+ const promises_1 = require("stream/promises");
19
+ const url_1 = require("url");
20
+ const discovery_1 = require("../generated/proto/discovery");
21
+ const http_connection_1 = require("../connection/http_connection");
22
+ const errors_1 = require("../types/errors");
23
+ const invocation_1 = require("../invocation");
24
+ const state_machine_1 = require("../state_machine");
25
+ const logger_1 = require("../logger");
26
+ class Http2Handler {
27
+ endpoint;
28
+ discoveryResponse;
29
+ constructor(endpoint) {
30
+ this.endpoint = endpoint;
31
+ this.discoveryResponse = discovery_1.ServiceDiscoveryResponse.fromPartial({
32
+ ...this.endpoint.discovery,
33
+ protocolMode: discovery_1.ProtocolMode.BIDI_STREAM,
34
+ });
35
+ }
36
+ acceptConnection(request,
37
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
38
+ _response) {
39
+ const stream = request.stream;
40
+ const url = (0, url_1.parse)(request.url ?? "/");
41
+ this.handleConnection(url, stream).catch((e) => {
42
+ const error = (0, errors_1.ensureError)(e);
43
+ logger_1.rlog.error("Error while handling connection: " + (error.stack ?? error.message));
44
+ stream.end();
45
+ stream.destroy();
46
+ });
47
+ }
48
+ async handleConnection(url, stream) {
49
+ const method = this.endpoint.methodByUrl(url.path);
50
+ if (method !== undefined) {
51
+ // valid connection, let's dispatch the invocation
52
+ stream.respond({
53
+ "content-type": "application/restate",
54
+ ":status": 200,
55
+ });
56
+ const restateStream = http_connection_1.RestateHttp2Connection.from(stream);
57
+ await handleInvocation(method, restateStream);
58
+ return;
59
+ }
60
+ // no method under that name. might be a discovery request
61
+ if (url.path == "/discover") {
62
+ logger_1.rlog.info("Answering discovery request. Announcing services: " +
63
+ JSON.stringify(this.discoveryResponse.services));
64
+ await respondDiscovery(this.discoveryResponse, stream);
65
+ return;
66
+ }
67
+ // no discovery, so unknown method: 404
68
+ logger_1.rlog.error(`No service and function found for URL ${url.path}`);
69
+ await respondNotFound(stream);
70
+ }
71
+ }
72
+ exports.Http2Handler = Http2Handler;
73
+ async function respondDiscovery(response, http2Stream) {
74
+ const responseData = discovery_1.ServiceDiscoveryResponse.encode(response).finish();
75
+ http2Stream.respond({
76
+ ":status": 200,
77
+ "content-type": "application/proto",
78
+ });
79
+ await (0, promises_1.pipeline)(stream_1.default.Readable.from(responseData), http2Stream, {
80
+ end: true,
81
+ });
82
+ }
83
+ async function respondNotFound(stream) {
84
+ stream.respond({
85
+ "content-type": "application/restate",
86
+ ":status": 404,
87
+ });
88
+ stream.end();
89
+ await (0, promises_1.finished)(stream);
90
+ }
91
+ async function handleInvocation(func, connection) {
92
+ // step 1: collect all journal events
93
+ const journalBuilder = new invocation_1.InvocationBuilder(func);
94
+ connection.pipeToConsumer(journalBuilder);
95
+ try {
96
+ await journalBuilder.completion();
97
+ }
98
+ finally {
99
+ // ensure GC friendliness, also in case of errors
100
+ connection.removeCurrentConsumer();
101
+ }
102
+ // step 2: create the state machine
103
+ const invocation = journalBuilder.build();
104
+ const stateMachine = new state_machine_1.StateMachine(connection, invocation, discovery_1.ProtocolMode.BIDI_STREAM, func.method.keyedContext, invocation.inferLoggerContext());
105
+ connection.pipeToConsumer(stateMachine);
106
+ // step 3: invoke the function
107
+ // This call would propagate errors in the state machine logic, but not errors
108
+ // in the application function code. Ending a function with an error as well
109
+ // as failign an invocation and being retried are perfectly valid actions from the
110
+ // SDK's perspective.
111
+ try {
112
+ await stateMachine.invoke();
113
+ }
114
+ finally {
115
+ // ensure GC friendliness, also in case of errors
116
+ connection.removeCurrentConsumer();
117
+ }
118
+ }
119
+ //# sourceMappingURL=http2_handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http2_handler.js","sourceRoot":"","sources":["../../src/endpoint/http2_handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { APIGatewayProxyEvent, APIGatewayProxyEventV2, APIGatewayProxyResult, APIGatewayProxyResultV2, Context } from "aws-lambda";
2
+ import { EndpointImpl } from "./endpoint_impl";
3
+ export declare class LambdaHandler {
4
+ private readonly endpoint;
5
+ private readonly discoveryResponse;
6
+ constructor(endpoint: EndpointImpl);
7
+ /**
8
+ * This is the main request handling method, effectively a typed variant of `create()`.
9
+ */
10
+ handleRequest(event: APIGatewayProxyEvent | APIGatewayProxyEventV2, context: Context): Promise<APIGatewayProxyResult | APIGatewayProxyResultV2>;
11
+ private handleInvoke;
12
+ private handleDiscovery;
13
+ private toErrorResponse;
14
+ }
15
+ //# sourceMappingURL=lambda_handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lambda_handler.d.ts","sourceRoot":"","sources":["../../src/endpoint/lambda_handler.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,OAAO,EACR,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/C,qBAAa,aAAa;IAEZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IADrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;gBAChC,QAAQ,EAAE,YAAY;IASnD;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,oBAAoB,GAAG,sBAAsB,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,qBAAqB,GAAG,uBAAuB,CAAC;YAkC7C,YAAY;IAgE1B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,eAAe;CAUxB"}