@restatedev/restate-sdk 0.8.1 → 0.9.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 (374) hide show
  1. package/README.md +12 -118
  2. package/dist/{clients → src/clients}/workflow_client.d.ts +2 -2
  3. package/dist/src/clients/workflow_client.d.ts.map +1 -0
  4. package/dist/{clients → src/clients}/workflow_client.js +2 -2
  5. package/dist/src/clients/workflow_client.js.map +1 -0
  6. package/dist/{connection → src/connection}/buffered_connection.d.ts +1 -0
  7. package/dist/src/connection/buffered_connection.d.ts.map +1 -0
  8. package/dist/src/connection/buffered_connection.js.map +1 -0
  9. package/dist/src/connection/connection.d.ts.map +1 -0
  10. package/dist/src/connection/connection.js.map +1 -0
  11. package/dist/{connection → src/connection}/http_connection.d.ts +1 -1
  12. package/dist/src/connection/http_connection.d.ts.map +1 -0
  13. package/dist/{connection → src/connection}/http_connection.js +1 -1
  14. package/dist/src/connection/http_connection.js.map +1 -0
  15. package/dist/{connection → src/connection}/lambda_connection.d.ts +1 -0
  16. package/dist/src/connection/lambda_connection.d.ts.map +1 -0
  17. package/dist/{connection → src/connection}/lambda_connection.js +5 -4
  18. package/dist/src/connection/lambda_connection.js.map +1 -0
  19. package/dist/{context.d.ts → src/context.d.ts} +146 -224
  20. package/dist/src/context.d.ts.map +1 -0
  21. package/dist/{context.js → src/context.js} +6 -41
  22. package/dist/src/context.js.map +1 -0
  23. package/dist/src/context_impl.d.ts +62 -0
  24. package/dist/src/context_impl.d.ts.map +1 -0
  25. package/dist/{context_impl.js → src/context_impl.js} +201 -182
  26. package/dist/src/context_impl.js.map +1 -0
  27. package/dist/src/endpoint/endpoint_impl.d.ts +28 -0
  28. package/dist/src/endpoint/endpoint_impl.d.ts.map +1 -0
  29. package/dist/src/endpoint/endpoint_impl.js +164 -0
  30. package/dist/src/endpoint/endpoint_impl.js.map +1 -0
  31. package/dist/{endpoint → src/endpoint}/http2_handler.d.ts +1 -1
  32. package/dist/src/endpoint/http2_handler.d.ts.map +1 -0
  33. package/dist/src/endpoint/http2_handler.js +153 -0
  34. package/dist/src/endpoint/http2_handler.js.map +1 -0
  35. package/dist/{endpoint → src/endpoint}/lambda_handler.d.ts +2 -2
  36. package/dist/src/endpoint/lambda_handler.d.ts.map +1 -0
  37. package/dist/{endpoint → src/endpoint}/lambda_handler.js +66 -56
  38. package/dist/src/endpoint/lambda_handler.js.map +1 -0
  39. package/dist/src/endpoint/request_signing/basex.d.ts +10 -0
  40. package/dist/src/endpoint/request_signing/basex.d.ts.map +1 -0
  41. package/dist/src/endpoint/request_signing/basex.js +138 -0
  42. package/dist/src/endpoint/request_signing/basex.js.map +1 -0
  43. package/dist/src/endpoint/request_signing/ed25519.d.ts +17 -0
  44. package/dist/src/endpoint/request_signing/ed25519.d.ts.map +1 -0
  45. package/dist/src/endpoint/request_signing/ed25519.js +78 -0
  46. package/dist/src/endpoint/request_signing/ed25519.js.map +1 -0
  47. package/dist/src/endpoint/request_signing/v1.d.ts +9 -0
  48. package/dist/src/endpoint/request_signing/v1.d.ts.map +1 -0
  49. package/dist/src/endpoint/request_signing/v1.js +148 -0
  50. package/dist/src/endpoint/request_signing/v1.js.map +1 -0
  51. package/dist/src/endpoint/request_signing/validate.d.ts +18 -0
  52. package/dist/src/endpoint/request_signing/validate.d.ts.map +1 -0
  53. package/dist/src/endpoint/request_signing/validate.js +45 -0
  54. package/dist/src/endpoint/request_signing/validate.js.map +1 -0
  55. package/dist/src/endpoint.d.ts +102 -0
  56. package/dist/src/endpoint.d.ts.map +1 -0
  57. package/dist/{endpoint.js → src/endpoint.js} +1 -1
  58. package/dist/src/endpoint.js.map +1 -0
  59. package/dist/src/generated/proto/javascript_pb.d.ts +26 -0
  60. package/dist/src/generated/proto/javascript_pb.d.ts.map +1 -0
  61. package/dist/src/generated/proto/javascript_pb.js +52 -0
  62. package/dist/src/generated/proto/javascript_pb.js.map +1 -0
  63. package/dist/src/generated/proto/protocol_pb.d.ts +865 -0
  64. package/dist/src/generated/proto/protocol_pb.d.ts.map +1 -0
  65. package/dist/src/generated/proto/protocol_pb.js +1112 -0
  66. package/dist/src/generated/proto/protocol_pb.js.map +1 -0
  67. package/dist/src/generated/version.d.ts +2 -0
  68. package/dist/src/generated/version.d.ts.map +1 -0
  69. package/dist/src/generated/version.js +5 -0
  70. package/dist/src/generated/version.js.map +1 -0
  71. package/dist/{invocation.d.ts → src/invocation.d.ts} +14 -18
  72. package/dist/src/invocation.d.ts.map +1 -0
  73. package/dist/{invocation.js → src/invocation.js} +25 -24
  74. package/dist/src/invocation.js.map +1 -0
  75. package/dist/{io → src/io}/decoder.d.ts +3 -2
  76. package/dist/src/io/decoder.d.ts.map +1 -0
  77. package/dist/{io → src/io}/decoder.js +12 -10
  78. package/dist/src/io/decoder.js.map +1 -0
  79. package/dist/{io → src/io}/encoder.d.ts +1 -1
  80. package/dist/src/io/encoder.d.ts.map +1 -0
  81. package/dist/{io → src/io}/encoder.js +11 -21
  82. package/dist/src/io/encoder.js.map +1 -0
  83. package/dist/{journal.d.ts → src/journal.d.ts} +7 -7
  84. package/dist/src/journal.d.ts.map +1 -0
  85. package/dist/{journal.js → src/journal.js} +64 -46
  86. package/dist/src/journal.js.map +1 -0
  87. package/dist/{local_state_store.d.ts → src/local_state_store.d.ts} +2 -2
  88. package/dist/src/local_state_store.d.ts.map +1 -0
  89. package/dist/{local_state_store.js → src/local_state_store.js} +19 -17
  90. package/dist/src/local_state_store.js.map +1 -0
  91. package/dist/{logger.d.ts → src/logger.d.ts} +9 -1
  92. package/dist/src/logger.d.ts.map +1 -0
  93. package/dist/src/logger.js +158 -0
  94. package/dist/src/logger.js.map +1 -0
  95. package/dist/src/promise_combinator_tracker.d.ts.map +1 -0
  96. package/dist/src/promise_combinator_tracker.js.map +1 -0
  97. package/dist/src/public_api.d.ts +7 -0
  98. package/dist/src/public_api.d.ts.map +1 -0
  99. package/dist/{public_api.js → src/public_api.js} +4 -14
  100. package/dist/src/public_api.js.map +1 -0
  101. package/dist/{state_machine.d.ts → src/state_machine.d.ts} +7 -4
  102. package/dist/src/state_machine.d.ts.map +1 -0
  103. package/dist/{state_machine.js → src/state_machine.js} +34 -37
  104. package/dist/src/state_machine.js.map +1 -0
  105. package/dist/src/types/components.d.ts +65 -0
  106. package/dist/src/types/components.d.ts.map +1 -0
  107. package/dist/src/types/components.js +163 -0
  108. package/dist/src/types/components.js.map +1 -0
  109. package/dist/src/types/discovery.d.ts +40 -0
  110. package/dist/src/types/discovery.d.ts.map +1 -0
  111. package/dist/src/types/discovery.js +29 -0
  112. package/dist/src/types/discovery.js.map +1 -0
  113. package/dist/src/types/errors.d.ts +53 -0
  114. package/dist/src/types/errors.d.ts.map +1 -0
  115. package/dist/src/types/errors.js +129 -0
  116. package/dist/src/types/errors.js.map +1 -0
  117. package/dist/src/types/protocol.d.ts +33 -0
  118. package/dist/src/types/protocol.d.ts.map +1 -0
  119. package/dist/{types → src/types}/protocol.js +52 -52
  120. package/dist/src/types/protocol.js.map +1 -0
  121. package/dist/src/types/rpc.d.ts +50 -0
  122. package/dist/src/types/rpc.d.ts.map +1 -0
  123. package/dist/src/types/rpc.js +38 -0
  124. package/dist/src/types/rpc.js.map +1 -0
  125. package/dist/{types → src/types}/types.d.ts +0 -9
  126. package/dist/src/types/types.d.ts.map +1 -0
  127. package/dist/{types → src/types}/types.js +4 -21
  128. package/dist/src/types/types.js.map +1 -0
  129. package/dist/src/user_agent.d.ts +2 -0
  130. package/dist/src/user_agent.d.ts.map +1 -0
  131. package/dist/src/user_agent.js +16 -0
  132. package/dist/src/user_agent.js.map +1 -0
  133. package/dist/src/utils/message_logger.d.ts +7 -0
  134. package/dist/src/utils/message_logger.d.ts.map +1 -0
  135. package/dist/{utils → src/utils}/message_logger.js +17 -26
  136. package/dist/src/utils/message_logger.js.map +1 -0
  137. package/dist/src/utils/promises.d.ts.map +1 -0
  138. package/dist/src/utils/promises.js.map +1 -0
  139. package/dist/{utils → src/utils}/rand.d.ts +1 -0
  140. package/dist/src/utils/rand.d.ts.map +1 -0
  141. package/dist/{utils → src/utils}/rand.js +7 -6
  142. package/dist/src/utils/rand.js.map +1 -0
  143. package/dist/src/utils/serde.d.ts +3 -0
  144. package/dist/src/utils/serde.d.ts.map +1 -0
  145. package/dist/src/utils/serde.js +24 -0
  146. package/dist/src/utils/serde.js.map +1 -0
  147. package/dist/{utils → src/utils}/utils.d.ts +0 -1
  148. package/dist/src/utils/utils.d.ts.map +1 -0
  149. package/dist/{utils → src/utils}/utils.js +36 -43
  150. package/dist/src/utils/utils.js.map +1 -0
  151. package/dist/{workflows → src/workflows}/workflow.d.ts +6 -6
  152. package/dist/src/workflows/workflow.d.ts.map +1 -0
  153. package/dist/{workflows → src/workflows}/workflow.js +11 -7
  154. package/dist/src/workflows/workflow.js.map +1 -0
  155. package/dist/src/workflows/workflow_state_service.d.ts +35 -0
  156. package/dist/src/workflows/workflow_state_service.d.ts.map +1 -0
  157. package/dist/{workflows → src/workflows}/workflow_state_service.js +11 -11
  158. package/dist/src/workflows/workflow_state_service.js.map +1 -0
  159. package/dist/{workflows → src/workflows}/workflow_wrapper_service.d.ts +2 -2
  160. package/dist/src/workflows/workflow_wrapper_service.d.ts.map +1 -0
  161. package/dist/{workflows → src/workflows}/workflow_wrapper_service.js +66 -45
  162. package/dist/src/workflows/workflow_wrapper_service.js.map +1 -0
  163. package/dist/tsconfig.tsbuildinfo +1 -0
  164. package/package.json +13 -28
  165. package/LICENSE +0 -21
  166. package/dist/clients/workflow_client.d.ts.map +0 -1
  167. package/dist/clients/workflow_client.js.map +0 -1
  168. package/dist/connection/buffered_connection.d.ts.map +0 -1
  169. package/dist/connection/buffered_connection.js.map +0 -1
  170. package/dist/connection/connection.d.ts.map +0 -1
  171. package/dist/connection/connection.js.map +0 -1
  172. package/dist/connection/embedded_connection.d.ts +0 -20
  173. package/dist/connection/embedded_connection.d.ts.map +0 -1
  174. package/dist/connection/embedded_connection.js +0 -59
  175. package/dist/connection/embedded_connection.js.map +0 -1
  176. package/dist/connection/http_connection.d.ts.map +0 -1
  177. package/dist/connection/http_connection.js.map +0 -1
  178. package/dist/connection/lambda_connection.d.ts.map +0 -1
  179. package/dist/connection/lambda_connection.js.map +0 -1
  180. package/dist/context.d.ts.map +0 -1
  181. package/dist/context.js.map +0 -1
  182. package/dist/context_impl.d.ts +0 -65
  183. package/dist/context_impl.d.ts.map +0 -1
  184. package/dist/context_impl.js.map +0 -1
  185. package/dist/embedded/api.d.ts +0 -27
  186. package/dist/embedded/api.d.ts.map +0 -1
  187. package/dist/embedded/api.js +0 -35
  188. package/dist/embedded/api.js.map +0 -1
  189. package/dist/embedded/handler.d.ts +0 -4
  190. package/dist/embedded/handler.d.ts.map +0 -1
  191. package/dist/embedded/handler.js +0 -26
  192. package/dist/embedded/handler.js.map +0 -1
  193. package/dist/embedded/http2_remote.d.ts +0 -11
  194. package/dist/embedded/http2_remote.d.ts.map +0 -1
  195. package/dist/embedded/http2_remote.js +0 -91
  196. package/dist/embedded/http2_remote.js.map +0 -1
  197. package/dist/embedded/invocation.d.ts +0 -5
  198. package/dist/embedded/invocation.d.ts.map +0 -1
  199. package/dist/embedded/invocation.js +0 -94
  200. package/dist/embedded/invocation.js.map +0 -1
  201. package/dist/endpoint/endpoint_impl.d.ts +0 -35
  202. package/dist/endpoint/endpoint_impl.d.ts.map +0 -1
  203. package/dist/endpoint/endpoint_impl.js +0 -405
  204. package/dist/endpoint/endpoint_impl.js.map +0 -1
  205. package/dist/endpoint/http2_handler.d.ts.map +0 -1
  206. package/dist/endpoint/http2_handler.js +0 -119
  207. package/dist/endpoint/http2_handler.js.map +0 -1
  208. package/dist/endpoint/lambda_handler.d.ts.map +0 -1
  209. package/dist/endpoint/lambda_handler.js.map +0 -1
  210. package/dist/endpoint.d.ts +0 -161
  211. package/dist/endpoint.d.ts.map +0 -1
  212. package/dist/endpoint.js.map +0 -1
  213. package/dist/generated/dev/restate/events.d.ts +0 -96
  214. package/dist/generated/dev/restate/events.d.ts.map +0 -1
  215. package/dist/generated/dev/restate/events.js +0 -371
  216. package/dist/generated/dev/restate/events.js.map +0 -1
  217. package/dist/generated/dev/restate/ext.d.ts +0 -91
  218. package/dist/generated/dev/restate/ext.d.ts.map +0 -1
  219. package/dist/generated/dev/restate/ext.js +0 -215
  220. package/dist/generated/dev/restate/ext.js.map +0 -1
  221. package/dist/generated/google/protobuf/descriptor.d.ts +0 -1204
  222. package/dist/generated/google/protobuf/descriptor.d.ts.map +0 -1
  223. package/dist/generated/google/protobuf/descriptor.js +0 -6676
  224. package/dist/generated/google/protobuf/descriptor.js.map +0 -1
  225. package/dist/generated/google/protobuf/empty.d.ts +0 -86
  226. package/dist/generated/google/protobuf/empty.d.ts.map +0 -1
  227. package/dist/generated/google/protobuf/empty.js +0 -107
  228. package/dist/generated/google/protobuf/empty.js.map +0 -1
  229. package/dist/generated/google/protobuf/struct.d.ts +0 -175
  230. package/dist/generated/google/protobuf/struct.d.ts.map +0 -1
  231. package/dist/generated/google/protobuf/struct.js +0 -754
  232. package/dist/generated/google/protobuf/struct.js.map +0 -1
  233. package/dist/generated/proto/discovery.d.ts +0 -105
  234. package/dist/generated/proto/discovery.d.ts.map +0 -1
  235. package/dist/generated/proto/discovery.js +0 -364
  236. package/dist/generated/proto/discovery.js.map +0 -1
  237. package/dist/generated/proto/dynrpc.d.ts +0 -150
  238. package/dist/generated/proto/dynrpc.d.ts.map +0 -1
  239. package/dist/generated/proto/dynrpc.js +0 -668
  240. package/dist/generated/proto/dynrpc.js.map +0 -1
  241. package/dist/generated/proto/javascript.d.ts +0 -110
  242. package/dist/generated/proto/javascript.d.ts.map +0 -1
  243. package/dist/generated/proto/javascript.js +0 -416
  244. package/dist/generated/proto/javascript.js.map +0 -1
  245. package/dist/generated/proto/protocol.d.ts +0 -450
  246. package/dist/generated/proto/protocol.d.ts.map +0 -1
  247. package/dist/generated/proto/protocol.js +0 -2641
  248. package/dist/generated/proto/protocol.js.map +0 -1
  249. package/dist/generated/proto/services.d.ts +0 -307
  250. package/dist/generated/proto/services.d.ts.map +0 -1
  251. package/dist/generated/proto/services.js +0 -1535
  252. package/dist/generated/proto/services.js.map +0 -1
  253. package/dist/generated/proto/test.d.ts +0 -116
  254. package/dist/generated/proto/test.d.ts.map +0 -1
  255. package/dist/generated/proto/test.js +0 -321
  256. package/dist/generated/proto/test.js.map +0 -1
  257. package/dist/invocation.d.ts.map +0 -1
  258. package/dist/invocation.js.map +0 -1
  259. package/dist/io/decoder.d.ts.map +0 -1
  260. package/dist/io/decoder.js.map +0 -1
  261. package/dist/io/encoder.d.ts.map +0 -1
  262. package/dist/io/encoder.js.map +0 -1
  263. package/dist/journal.d.ts.map +0 -1
  264. package/dist/journal.js.map +0 -1
  265. package/dist/local_state_store.d.ts.map +0 -1
  266. package/dist/local_state_store.js.map +0 -1
  267. package/dist/logger.d.ts.map +0 -1
  268. package/dist/logger.js +0 -90
  269. package/dist/logger.js.map +0 -1
  270. package/dist/promise_combinator_tracker.d.ts.map +0 -1
  271. package/dist/promise_combinator_tracker.js.map +0 -1
  272. package/dist/public_api.d.ts +0 -10
  273. package/dist/public_api.d.ts.map +0 -1
  274. package/dist/public_api.js.map +0 -1
  275. package/dist/state_machine.d.ts.map +0 -1
  276. package/dist/state_machine.js.map +0 -1
  277. package/dist/types/errors.d.ts +0 -188
  278. package/dist/types/errors.d.ts.map +0 -1
  279. package/dist/types/errors.js +0 -273
  280. package/dist/types/errors.js.map +0 -1
  281. package/dist/types/grpc.d.ts +0 -90
  282. package/dist/types/grpc.d.ts.map +0 -1
  283. package/dist/types/grpc.js +0 -81
  284. package/dist/types/grpc.js.map +0 -1
  285. package/dist/types/protocol.d.ts +0 -30
  286. package/dist/types/protocol.d.ts.map +0 -1
  287. package/dist/types/protocol.js.map +0 -1
  288. package/dist/types/router.d.ts +0 -33
  289. package/dist/types/router.d.ts.map +0 -1
  290. package/dist/types/router.js +0 -36
  291. package/dist/types/router.js.map +0 -1
  292. package/dist/types/types.d.ts.map +0 -1
  293. package/dist/types/types.js.map +0 -1
  294. package/dist/utils/assumptions.d.ts +0 -8
  295. package/dist/utils/assumptions.d.ts.map +0 -1
  296. package/dist/utils/assumptions.js +0 -101
  297. package/dist/utils/assumptions.js.map +0 -1
  298. package/dist/utils/message_logger.d.ts +0 -28
  299. package/dist/utils/message_logger.d.ts.map +0 -1
  300. package/dist/utils/message_logger.js.map +0 -1
  301. package/dist/utils/promises.d.ts.map +0 -1
  302. package/dist/utils/promises.js.map +0 -1
  303. package/dist/utils/public_utils.d.ts +0 -58
  304. package/dist/utils/public_utils.d.ts.map +0 -1
  305. package/dist/utils/public_utils.js +0 -49
  306. package/dist/utils/public_utils.js.map +0 -1
  307. package/dist/utils/rand.d.ts.map +0 -1
  308. package/dist/utils/rand.js.map +0 -1
  309. package/dist/utils/utils.d.ts.map +0 -1
  310. package/dist/utils/utils.js.map +0 -1
  311. package/dist/workflows/workflow.d.ts.map +0 -1
  312. package/dist/workflows/workflow.js.map +0 -1
  313. package/dist/workflows/workflow_state_service.d.ts +0 -35
  314. package/dist/workflows/workflow_state_service.d.ts.map +0 -1
  315. package/dist/workflows/workflow_state_service.js.map +0 -1
  316. package/dist/workflows/workflow_wrapper_service.d.ts.map +0 -1
  317. package/dist/workflows/workflow_wrapper_service.js.map +0 -1
  318. package/src/clients/workflow_client.ts +0 -290
  319. package/src/connection/buffered_connection.ts +0 -47
  320. package/src/connection/connection.ts +0 -34
  321. package/src/connection/embedded_connection.ts +0 -62
  322. package/src/connection/http_connection.ts +0 -228
  323. package/src/connection/lambda_connection.ts +0 -69
  324. package/src/context.ts +0 -633
  325. package/src/context_impl.ts +0 -721
  326. package/src/embedded/api.ts +0 -57
  327. package/src/embedded/handler.ts +0 -36
  328. package/src/embedded/http2_remote.ts +0 -103
  329. package/src/embedded/invocation.ts +0 -126
  330. package/src/endpoint/endpoint_impl.ts +0 -623
  331. package/src/endpoint/http2_handler.ts +0 -151
  332. package/src/endpoint/lambda_handler.ts +0 -181
  333. package/src/endpoint.ts +0 -187
  334. package/src/generated/dev/restate/events.ts +0 -430
  335. package/src/generated/dev/restate/ext.ts +0 -238
  336. package/src/generated/google/protobuf/descriptor.ts +0 -7889
  337. package/src/generated/google/protobuf/empty.ts +0 -150
  338. package/src/generated/google/protobuf/struct.ts +0 -878
  339. package/src/generated/proto/discovery.ts +0 -423
  340. package/src/generated/proto/dynrpc.ts +0 -768
  341. package/src/generated/proto/javascript.ts +0 -488
  342. package/src/generated/proto/protocol.ts +0 -3091
  343. package/src/generated/proto/services.ts +0 -1834
  344. package/src/generated/proto/test.ts +0 -387
  345. package/src/invocation.ts +0 -212
  346. package/src/io/decoder.ts +0 -171
  347. package/src/io/encoder.ts +0 -72
  348. package/src/journal.ts +0 -537
  349. package/src/local_state_store.ts +0 -94
  350. package/src/logger.ts +0 -121
  351. package/src/promise_combinator_tracker.ts +0 -191
  352. package/src/public_api.ts +0 -53
  353. package/src/state_machine.ts +0 -635
  354. package/src/types/errors.ts +0 -297
  355. package/src/types/grpc.ts +0 -97
  356. package/src/types/protocol.ts +0 -201
  357. package/src/types/router.ts +0 -118
  358. package/src/types/types.ts +0 -160
  359. package/src/utils/assumptions.ts +0 -131
  360. package/src/utils/message_logger.ts +0 -112
  361. package/src/utils/promises.ts +0 -118
  362. package/src/utils/public_utils.ts +0 -91
  363. package/src/utils/rand.ts +0 -142
  364. package/src/utils/utils.ts +0 -178
  365. package/src/workflows/workflow.ts +0 -178
  366. package/src/workflows/workflow_state_service.ts +0 -299
  367. package/src/workflows/workflow_wrapper_service.ts +0 -314
  368. /package/dist/{connection → src/connection}/buffered_connection.js +0 -0
  369. /package/dist/{connection → src/connection}/connection.d.ts +0 -0
  370. /package/dist/{connection → src/connection}/connection.js +0 -0
  371. /package/dist/{promise_combinator_tracker.d.ts → src/promise_combinator_tracker.d.ts} +0 -0
  372. /package/dist/{promise_combinator_tracker.js → src/promise_combinator_tracker.js} +0 -0
  373. /package/dist/{utils → src/utils}/promises.d.ts +0 -0
  374. /package/dist/{utils → src/utils}/promises.js +0 -0
@@ -1,623 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
3
- *
4
- * This file is part of the Restate SDK for Node.js/TypeScript,
5
- * which is released under the MIT license.
6
- *
7
- * You can find a copy of the license in file LICENSE in the root
8
- * directory of this repository or package, or at
9
- * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
10
- */
11
-
12
- /* eslint-disable @typescript-eslint/ban-types */
13
-
14
- import {
15
- GrpcService,
16
- GrpcServiceMethod,
17
- HostedGrpcServiceMethod,
18
- ProtoMetadata,
19
- } from "../types/grpc";
20
- import {
21
- DeepPartial,
22
- ServiceDiscoveryResponse,
23
- } from "../generated/proto/discovery";
24
- import { Event } from "../types/types";
25
- import {
26
- FileDescriptorProto,
27
- UninterpretedOption,
28
- } from "../generated/google/protobuf/descriptor";
29
- import { Empty } from "../generated/google/protobuf/empty";
30
- import {
31
- FileDescriptorProto as FileDescriptorProto1,
32
- ServiceDescriptorProto as ServiceDescriptorProto1,
33
- MethodDescriptorProto as MethodDescriptorProto1,
34
- } from "ts-proto-descriptors";
35
- import {
36
- fieldTypeToJSON,
37
- ServiceType,
38
- serviceTypeToJSON,
39
- } from "../generated/dev/restate/ext";
40
- import {
41
- RpcRequest,
42
- RpcResponse,
43
- ProtoMetadata as RpcServiceProtoMetadata,
44
- protoMetadata as rpcServiceProtoMetadata,
45
- KeyedEvent,
46
- } from "../generated/proto/dynrpc";
47
- import { Context, KeyedContext, useContext, useKeyedContext } from "../context";
48
- import { verifyAssumptions } from "../utils/assumptions";
49
- import { RestateEndpoint, ServiceBundle, TerminalError } from "../public_api";
50
- import { KeyedRouter, UnKeyedRouter, isEventHandler } from "../types/router";
51
- import { jsonSafeAny } from "../utils/utils";
52
- import { rlog } from "../logger";
53
- import { ServiceOpts } from "../endpoint";
54
- import http2, { Http2ServerRequest, Http2ServerResponse } from "http2";
55
- import { Http2Handler } from "./http2_handler";
56
- import { LambdaHandler } from "./lambda_handler";
57
-
58
- export class EndpointImpl implements RestateEndpoint {
59
- protected readonly methods: Record<
60
- string,
61
- HostedGrpcServiceMethod<unknown, unknown>
62
- > = {};
63
- readonly discovery: DeepPartial<ServiceDiscoveryResponse>;
64
- protected readonly dynrpcDescriptor: RpcServiceProtoMetadata;
65
-
66
- public constructor() {
67
- this.discovery = {
68
- files: { file: [] },
69
- services: [],
70
- minProtocolVersion: 0,
71
- maxProtocolVersion: 0,
72
- };
73
- this.dynrpcDescriptor = copyProtoMetadata(rpcServiceProtoMetadata);
74
- }
75
-
76
- bindService({ descriptor, service, instance }: ServiceOpts): RestateEndpoint {
77
- const spec = parseService(descriptor, service, instance);
78
- this.addDescriptor(descriptor);
79
-
80
- const qname =
81
- spec.packge === "" ? spec.name : `${spec.packge}.${spec.name}`;
82
-
83
- this.discovery.services?.push(qname);
84
- for (const method of spec.methods) {
85
- const url = `/invoke/${qname}/${method.name}`;
86
- this.methods[url] = new HostedGrpcServiceMethod(
87
- instance,
88
- spec.packge,
89
- service,
90
- method
91
- );
92
- // note that this log will not print all the keys.
93
- rlog.info(`Binding: ${url} -> ${JSON.stringify(method, null, "\t")}`);
94
- }
95
-
96
- return this;
97
- }
98
-
99
- public bindRouter<M>(
100
- path: string,
101
- router: UnKeyedRouter<M>
102
- ): RestateEndpoint {
103
- this.bindRpcService(path, router, false);
104
- return this;
105
- }
106
-
107
- public bindKeyedRouter<M>(
108
- path: string,
109
- router: KeyedRouter<M>
110
- ): RestateEndpoint {
111
- this.bindRpcService(path, router, true);
112
- return this;
113
- }
114
-
115
- public bind(services: ServiceBundle): RestateEndpoint {
116
- services.registerServices(this);
117
- return this;
118
- }
119
-
120
- http2Handler(): (
121
- request: Http2ServerRequest,
122
- response: Http2ServerResponse
123
- ) => void {
124
- const handler = new Http2Handler(this);
125
- return handler.acceptConnection.bind(handler);
126
- }
127
-
128
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
129
- lambdaHandler(): (event: any, ctx: any) => Promise<any> {
130
- const handler = new LambdaHandler(this);
131
- return handler.handleRequest.bind(handler);
132
- }
133
-
134
- listen(port?: number): Promise<void> {
135
- const actualPort = port ?? parseInt(process.env.PORT ?? "9080");
136
- rlog.info(`Listening on ${actualPort}...`);
137
-
138
- const server = http2.createServer(this.http2Handler());
139
- server.listen(actualPort);
140
- // eslint-disable-next-line @typescript-eslint/no-empty-function
141
- return new Promise(() => {});
142
- }
143
-
144
- // Private methods to build the endpoint
145
-
146
- private addDescriptor(descriptor: ProtoMetadata) {
147
- const desc = FileDescriptorProto.fromPartial(descriptor.fileDescriptor);
148
-
149
- // extract out service options and put into the fileDescriptor
150
- for (const name in descriptor.options?.services) {
151
- if (
152
- descriptor.options?.services[name]?.options?.service_type !== undefined
153
- ) {
154
- desc.service
155
- .find((desc) => desc.name === name)
156
- ?.options?.uninterpretedOption.push(
157
- UninterpretedOption.fromPartial({
158
- name: [
159
- { namePart: "dev.restate.ext.service_type", isExtension: true },
160
- ],
161
- identifierValue: serviceTypeToJSON(
162
- descriptor.options?.services[name]?.options?.service_type
163
- ),
164
- })
165
- );
166
- }
167
- }
168
-
169
- // extract out field options and put into the fileDescriptor
170
- for (const messageName in descriptor.options?.messages) {
171
- for (const fieldName in descriptor.options?.messages[messageName]
172
- ?.fields) {
173
- const fields = descriptor.options?.messages[messageName]?.fields || {};
174
- if (fields[fieldName]["field"] !== undefined) {
175
- desc.messageType
176
- .find((desc) => desc.name === messageName)
177
- ?.field?.find((desc) => desc.name === fieldName)
178
- ?.options?.uninterpretedOption.push(
179
- UninterpretedOption.fromPartial({
180
- name: [
181
- { namePart: "dev.restate.ext.field", isExtension: true },
182
- ],
183
- identifierValue: fieldTypeToJSON(fields[fieldName]["field"]),
184
- })
185
- );
186
- }
187
- }
188
- }
189
-
190
- if (
191
- this.discovery.files?.file?.filter(
192
- (haveDesc) => desc.name === haveDesc.name
193
- ).length === 0
194
- ) {
195
- this.discovery.files?.file.push(desc);
196
- }
197
- descriptor.dependencies?.forEach((dep) => {
198
- this.addDescriptor(dep);
199
- });
200
- }
201
-
202
- private rpcHandler(
203
- keyed: boolean,
204
- route: string,
205
- handler: Function
206
- ): {
207
- descriptor: MethodDescriptorProto1;
208
- method: GrpcServiceMethod<unknown, unknown>;
209
- } {
210
- const descriptor = createRpcMethodDescriptor(route);
211
-
212
- const localMethod = (instance: unknown, input: RpcRequest) => {
213
- if (keyed) {
214
- return dispatchKeyedRpcHandler(
215
- useKeyedContext(instance),
216
- input,
217
- handler
218
- );
219
- } else {
220
- return dispatchUnkeyedRpcHandler(useContext(instance), input, handler);
221
- }
222
- };
223
-
224
- const decoder = RpcRequest.decode;
225
- const encoder = (message: RpcResponse) =>
226
- RpcResponse.encode({
227
- response: jsonSafeAny("", message.response),
228
- }).finish();
229
-
230
- const method = new GrpcServiceMethod<RpcRequest, RpcResponse>(
231
- route,
232
- route,
233
- keyed,
234
- localMethod,
235
- decoder,
236
- encoder
237
- );
238
-
239
- return {
240
- descriptor: descriptor,
241
- method: method as GrpcServiceMethod<unknown, unknown>,
242
- };
243
- }
244
-
245
- stringKeyedEventHandler(
246
- keyed: boolean,
247
- route: string,
248
- handler: Function
249
- ): {
250
- descriptor: MethodDescriptorProto1;
251
- method: GrpcServiceMethod<unknown, unknown>;
252
- } {
253
- if (!keyed) {
254
- // TODO: support unkeyed rpc event handler
255
- throw new TerminalError("Unkeyed Event handlers are not yet supported.");
256
- }
257
- const descriptor = createStringKeyedMethodDescriptor(route);
258
- const localMethod = (instance: unknown, input: KeyedEvent) => {
259
- return dispatchKeyedEventHandler(
260
- useKeyedContext(instance),
261
- input,
262
- handler
263
- );
264
- };
265
-
266
- const decoder = KeyedEvent.decode;
267
- const encoder = (message: Empty) => Empty.encode(message).finish();
268
-
269
- const method = new GrpcServiceMethod<KeyedEvent, Empty>(
270
- route,
271
- route,
272
- keyed,
273
- localMethod,
274
- decoder,
275
- encoder
276
- );
277
-
278
- return {
279
- descriptor,
280
- method: method as GrpcServiceMethod<unknown, unknown>,
281
- };
282
- }
283
-
284
- private bindRpcService(name: string, router: RpcRouter, keyed: boolean) {
285
- if (name === undefined || router === undefined || keyed === undefined) {
286
- throw new Error("incomplete arguments: (name, router, keyed)");
287
- }
288
- if (!(typeof name === "string") || name.length === 0) {
289
- throw new Error("service name must be a non-empty string");
290
- }
291
- if (name.indexOf("/") !== -1) {
292
- throw new Error("service name must not contain any slash '/'");
293
- }
294
-
295
- const lastDot = name.indexOf(".");
296
- const serviceName = lastDot === -1 ? name : name.substring(lastDot + 1);
297
- const servicePackage = name.substring(
298
- 0,
299
- name.length - serviceName.length - 1
300
- );
301
-
302
- const desc = this.dynrpcDescriptor;
303
- const serviceGrpcSpec = keyed
304
- ? pushKeyedService(desc, name)
305
- : pushUnKeyedService(desc, name);
306
-
307
- for (const [route, handler] of Object.entries(router)) {
308
- let registration: {
309
- descriptor: MethodDescriptorProto1;
310
- method: GrpcServiceMethod<unknown, unknown>;
311
- };
312
-
313
- if (isEventHandler(handler)) {
314
- const theHandler = handler.handler;
315
- registration = this.stringKeyedEventHandler(keyed, route, theHandler);
316
- } else {
317
- registration = this.rpcHandler(keyed, route, handler);
318
- }
319
- serviceGrpcSpec.method.push(registration.descriptor);
320
- const url = `/invoke/${name}/${route}`;
321
- this.methods[url] = new HostedGrpcServiceMethod(
322
- {}, // we don't actually execute on any class instance
323
- servicePackage,
324
- serviceName,
325
- registration.method
326
- ) as HostedGrpcServiceMethod<unknown, unknown>;
327
-
328
- rlog.info(
329
- `Binding: ${url} -> ${JSON.stringify(registration.method, null, "\t")}`
330
- );
331
- }
332
-
333
- // since we modified this descriptor, we need to remove it in case it was added before,
334
- // so that the modified version is processed and added again
335
- const filteredFiles = this.discovery.files?.file?.filter(
336
- (haveDesc) => desc.fileDescriptor.name !== haveDesc.name
337
- );
338
- if (this.discovery.files !== undefined && filteredFiles !== undefined) {
339
- this.discovery.files.file = filteredFiles;
340
- }
341
-
342
- this.addDescriptor(desc);
343
- this.discovery.services?.push(name);
344
- }
345
-
346
- methodByUrl<I, O>(
347
- url: string | undefined | null
348
- ): HostedGrpcServiceMethod<I, O> | undefined {
349
- if (url == undefined || url === null) {
350
- return undefined;
351
- }
352
- return this.methods[url] as HostedGrpcServiceMethod<I, O>;
353
- }
354
- }
355
-
356
- /* eslint-disable @typescript-eslint/no-explicit-any */
357
- function indexProperties(instance: any): Map<string, string> {
358
- const names = new Map<string, string>();
359
- while (
360
- instance !== null &&
361
- instance !== undefined &&
362
- instance !== Object.prototype
363
- ) {
364
- for (const property of Object.getOwnPropertyNames(instance)) {
365
- names.set(property.toLowerCase(), property);
366
- }
367
- instance = Object.getPrototypeOf(instance);
368
- }
369
- return names;
370
- }
371
-
372
- // Given:
373
- // * an instance of a class that implements a gRPC TypeScript interface,
374
- // as generated by our protoc plugin, this method
375
- // * The ProtobufFileDescriptor as generated by the protobuf plugin
376
- // * and the gRPC service name
377
- //
378
- // Return a GrpcService definition, as defined above.
379
- //
380
- // For example (see first: example.proto and example.ts):
381
- //
382
- // > parse(example.protoMetaData, "Greeter", new GreeterService())
383
- //
384
- // produces ~
385
- //
386
- // serviceName: 'Greeter',
387
- // instance: GreeterService {},
388
- // methods: {
389
- // multiword: {
390
- // localName: 'multiWord',
391
- // fn: [Function: multiWord],
392
- // inputType: [Object],
393
- // outputType: [Object]
394
- // },
395
- // greet: {
396
- // localName: 'greet',
397
- // fn: [Function: greet],
398
- // inputType: [Object],
399
- // outputType: [Object]
400
- // }
401
- // }
402
- //}
403
- //
404
- /* eslint-disable @typescript-eslint/no-explicit-any */
405
- export function parseService(
406
- meta: ProtoMetadata,
407
- serviceName: string,
408
- instance: any
409
- ) {
410
- const svcMethods: Array<GrpcServiceMethod<unknown, unknown>> = [];
411
-
412
- const service_type =
413
- meta.options?.services?.[serviceName].options?.["service_type"];
414
- const keyed = service_type !== ServiceType.UNKEYED;
415
-
416
- // index all the existing properties that `instance` has.
417
- // we index them by the lower case represention.
418
- const names = indexProperties(instance);
419
- for (const serviceDescriptor of meta.fileDescriptor.service) {
420
- if (serviceName !== serviceDescriptor.name) {
421
- continue;
422
- }
423
- for (const methodDescriptor of serviceDescriptor.method) {
424
- const lowercaseName = methodDescriptor.name.toLowerCase();
425
- const localName = names.get(lowercaseName);
426
- if (localName === undefined || localName === null) {
427
- throw new Error(`unimplemented method ${methodDescriptor.name}`);
428
- }
429
- const fn = instance[localName];
430
- if (typeof fn !== "function") {
431
- throw new Error(
432
- `A property ${localName} exists, which coresponds to a gRPC service named ${methodDescriptor.name}, but that property is not a function.`
433
- );
434
- }
435
- const localMethod = async (instance: unknown, input: unknown) => {
436
- return await fn.call(instance, input);
437
- };
438
- let inputMessage = meta.references[methodDescriptor.inputType];
439
- // If the input message type is not defined by the proto files of the service but by a dependency (e.g. BoolValue, Empty, etc)
440
- // then we need to look for the encoders and decoders in the dependencies.
441
- if (inputMessage === undefined) {
442
- meta.dependencies?.forEach((dep) => {
443
- if (dep.references[methodDescriptor.inputType] !== undefined) {
444
- inputMessage = dep.references[methodDescriptor.inputType];
445
- }
446
- });
447
- }
448
- let outputMessage = meta.references[methodDescriptor.outputType];
449
- // If the output message type is not defined by use but by the proto files of the service (e.g. BoolValue, Empty, etc)
450
- // then we need to look for the encoders and decoders in the dependencies.
451
- if (outputMessage === undefined) {
452
- meta.dependencies?.forEach((dep) => {
453
- if (dep.references[methodDescriptor.outputType] !== undefined) {
454
- outputMessage = dep.references[methodDescriptor.outputType];
455
- }
456
- });
457
- }
458
-
459
- const decoder = (buffer: Uint8Array) => inputMessage.decode(buffer);
460
- const encoder = (message: unknown) =>
461
- outputMessage.encode(message).finish();
462
- svcMethods.push(
463
- new GrpcServiceMethod<unknown, unknown>(
464
- methodDescriptor.name,
465
- localName,
466
- keyed,
467
- localMethod,
468
- decoder,
469
- encoder
470
- )
471
- );
472
- }
473
-
474
- return new GrpcService(
475
- serviceName,
476
- meta.fileDescriptor.package,
477
- instance,
478
- svcMethods
479
- );
480
- }
481
- throw new Error(`Unable to find a service ${serviceName}.`);
482
- }
483
-
484
- export type RpcRouter = {
485
- [key: string]: Function;
486
- };
487
-
488
- async function dispatchKeyedRpcHandler(
489
- ctx: KeyedContext,
490
- req: RpcRequest,
491
- handler: Function
492
- ): Promise<RpcResponse> {
493
- const { key, request } = verifyAssumptions(true, req);
494
- if (typeof key !== "string" || key.length === 0) {
495
- // we throw a terminal error here, because this cannot be patched by updating code:
496
- // if the request is wrong (missing a key), the request can never make it
497
- throw new TerminalError(
498
- "Keyed handlers must recieve a non null or empty string key"
499
- );
500
- }
501
- const jsResult = (await handler(ctx, key, request)) as any;
502
- return RpcResponse.create({ response: jsResult });
503
- }
504
-
505
- async function dispatchUnkeyedRpcHandler(
506
- ctx: Context,
507
- req: RpcRequest,
508
- handler: Function
509
- ): Promise<RpcResponse> {
510
- const { request } = verifyAssumptions(false, req);
511
- const result = await handler(ctx, request);
512
- return RpcResponse.create({ response: result });
513
- }
514
-
515
- async function dispatchKeyedEventHandler(
516
- ctx: KeyedContext,
517
- req: KeyedEvent,
518
- handler: Function
519
- ): Promise<Empty> {
520
- const key = req.key;
521
- if (key === null || key === undefined || key.length === 0) {
522
- // we throw a terminal error here, because this cannot be patched by updating code:
523
- // if the request is wrong (missing a key), the request can never make it
524
- throw new TerminalError(
525
- "Keyed handlers must receive a non null or empty string key"
526
- );
527
- }
528
- const jsEvent = new Event(key, req.payload, req.attributes);
529
- await handler(ctx, jsEvent);
530
- return Empty.create({});
531
- }
532
-
533
- function copyProtoMetadata(
534
- original: RpcServiceProtoMetadata
535
- ): RpcServiceProtoMetadata {
536
- // duplicate the file descriptor. shallow, because we only need to
537
- // change one top-level field: service[]
538
- const fileDescriptorCopy = {
539
- ...original.fileDescriptor,
540
- } as FileDescriptorProto1;
541
- fileDescriptorCopy.service = [];
542
-
543
- let options = original.options;
544
- if (options !== undefined) {
545
- options = {
546
- ...original.options,
547
- };
548
- options.services = {};
549
- }
550
-
551
- return {
552
- fileDescriptor: fileDescriptorCopy,
553
- references: original.references,
554
- dependencies: original.dependencies,
555
- options: options,
556
- };
557
- }
558
-
559
- function pushKeyedService(
560
- desc: RpcServiceProtoMetadata,
561
- newName: string
562
- ): ServiceDescriptorProto1 {
563
- const service = {
564
- ...rpcServiceProtoMetadata.fileDescriptor.service[0],
565
- } as ServiceDescriptorProto1;
566
- service.name = newName;
567
- service.method = [];
568
- desc.fileDescriptor.service.push(service);
569
-
570
- const serviceOptions =
571
- rpcServiceProtoMetadata.options?.services?.["RpcEndpoint"];
572
- if (serviceOptions === undefined) {
573
- throw new Error(
574
- "Missing service options in original RpcEndpoint proto descriptor"
575
- );
576
- }
577
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
578
- desc.options!.services![newName] = serviceOptions;
579
-
580
- return service;
581
- }
582
-
583
- function pushUnKeyedService(
584
- desc: RpcServiceProtoMetadata,
585
- newName: string
586
- ): ServiceDescriptorProto1 {
587
- const service = {
588
- ...rpcServiceProtoMetadata.fileDescriptor.service[1],
589
- } as ServiceDescriptorProto1;
590
- service.name = newName;
591
- service.method = [];
592
- desc.fileDescriptor.service.push(service);
593
-
594
- const serviceOptions =
595
- rpcServiceProtoMetadata.options?.services?.["UnkeyedRpcEndpoint"];
596
- if (serviceOptions === undefined) {
597
- throw new Error(
598
- "Missing service options in original UnkeyedRpcEndpoint proto descriptor"
599
- );
600
- }
601
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
602
- desc.options!.services![newName] = serviceOptions;
603
-
604
- return service;
605
- }
606
-
607
- function createRpcMethodDescriptor(methodName: string): MethodDescriptorProto1 {
608
- const desc = {
609
- ...rpcServiceProtoMetadata.fileDescriptor.service[0].method[0],
610
- } as MethodDescriptorProto1;
611
- desc.name = methodName;
612
- return desc;
613
- }
614
-
615
- function createStringKeyedMethodDescriptor(
616
- methodName: string
617
- ): MethodDescriptorProto1 {
618
- const desc = {
619
- ...rpcServiceProtoMetadata.fileDescriptor.service[0].method[1],
620
- } as MethodDescriptorProto1;
621
- desc.name = methodName;
622
- return desc;
623
- }