rivetkit 2.0.2 → 2.0.4-rc.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 (403) hide show
  1. package/README.md +3 -5
  2. package/dist/browser/client.d.ts +2485 -0
  3. package/dist/browser/client.js +5182 -0
  4. package/dist/browser/client.js.map +1 -0
  5. package/dist/browser/inspector/client.d.ts +130 -0
  6. package/dist/browser/inspector/client.js +2854 -0
  7. package/dist/browser/inspector/client.js.map +1 -0
  8. package/dist/browser/v3-DnYObHH3.d.ts +279 -0
  9. package/dist/inspector.tar.gz +0 -0
  10. package/dist/schemas/actor-inspector/v1.ts +784 -0
  11. package/dist/schemas/actor-inspector/v2.ts +796 -0
  12. package/dist/schemas/actor-inspector/v3.ts +899 -0
  13. package/dist/schemas/actor-persist/v1.ts +225 -0
  14. package/dist/schemas/actor-persist/v2.ts +268 -0
  15. package/dist/schemas/actor-persist/v3.ts +280 -0
  16. package/dist/schemas/actor-persist/v4.ts +406 -0
  17. package/dist/schemas/client-protocol/v1.ts +441 -0
  18. package/dist/schemas/client-protocol/v2.ts +438 -0
  19. package/dist/schemas/client-protocol/v3.ts +554 -0
  20. package/dist/schemas/file-system-driver/v1.ts +108 -0
  21. package/dist/schemas/file-system-driver/v2.ts +142 -0
  22. package/dist/schemas/file-system-driver/v3.ts +167 -0
  23. package/dist/schemas/persist/v1.ts +781 -0
  24. package/dist/schemas/transport/v1.ts +697 -0
  25. package/dist/tsup/actor/errors.cjs +106 -0
  26. package/dist/tsup/actor/errors.cjs.map +1 -0
  27. package/dist/tsup/actor/errors.d.cts +188 -0
  28. package/dist/tsup/actor/errors.d.ts +188 -0
  29. package/dist/tsup/actor/errors.js +106 -0
  30. package/dist/tsup/actor/errors.js.map +1 -0
  31. package/dist/tsup/actor-router-consts-D29T1Z-K.d.cts +24 -0
  32. package/dist/tsup/actor-router-consts-D29T1Z-K.d.ts +24 -0
  33. package/dist/tsup/chunk-325TLXJT.js +1060 -0
  34. package/dist/tsup/chunk-325TLXJT.js.map +1 -0
  35. package/dist/tsup/chunk-424PT5DM.js +23 -0
  36. package/dist/tsup/chunk-424PT5DM.js.map +1 -0
  37. package/dist/tsup/chunk-4JVIG3SS.cjs +6289 -0
  38. package/dist/tsup/chunk-4JVIG3SS.cjs.map +1 -0
  39. package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
  40. package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
  41. package/dist/tsup/chunk-6XU3FMCB.cjs +534 -0
  42. package/dist/tsup/chunk-6XU3FMCB.cjs.map +1 -0
  43. package/dist/tsup/chunk-7HTNH26M.js +509 -0
  44. package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
  45. package/dist/tsup/chunk-AUVH72RE.cjs +5977 -0
  46. package/dist/tsup/chunk-AUVH72RE.cjs.map +1 -0
  47. package/dist/tsup/chunk-D4BYUPNQ.js +645 -0
  48. package/dist/tsup/chunk-D4BYUPNQ.js.map +1 -0
  49. package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
  50. package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
  51. package/dist/tsup/chunk-HHXX2VRM.js +6289 -0
  52. package/dist/tsup/chunk-HHXX2VRM.js.map +1 -0
  53. package/dist/tsup/chunk-JEAEA2PB.js +49 -0
  54. package/dist/tsup/chunk-JEAEA2PB.js.map +1 -0
  55. package/dist/tsup/chunk-JYSEG3VF.cjs +642 -0
  56. package/dist/tsup/chunk-JYSEG3VF.cjs.map +1 -0
  57. package/dist/tsup/chunk-K6DGYILQ.js +2657 -0
  58. package/dist/tsup/chunk-K6DGYILQ.js.map +1 -0
  59. package/dist/tsup/chunk-KJSYAUOM.js +96 -0
  60. package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
  61. package/dist/tsup/chunk-L47L3ZWJ.cjs +509 -0
  62. package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
  63. package/dist/tsup/chunk-LXUQ667X.js +2006 -0
  64. package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
  65. package/dist/tsup/chunk-MXNPAB5W.js +5977 -0
  66. package/dist/tsup/chunk-MXNPAB5W.js.map +1 -0
  67. package/dist/tsup/chunk-N4KRDJ56.js +72 -0
  68. package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
  69. package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
  70. package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
  71. package/dist/tsup/chunk-PQZHDKRW.cjs +1060 -0
  72. package/dist/tsup/chunk-PQZHDKRW.cjs.map +1 -0
  73. package/dist/tsup/chunk-PVOE6BU7.cjs +1050 -0
  74. package/dist/tsup/chunk-PVOE6BU7.cjs.map +1 -0
  75. package/dist/tsup/chunk-Q4UD2GA4.cjs +1810 -0
  76. package/dist/tsup/chunk-Q4UD2GA4.cjs.map +1 -0
  77. package/dist/tsup/chunk-QUD664YZ.js +1810 -0
  78. package/dist/tsup/chunk-QUD664YZ.js.map +1 -0
  79. package/dist/tsup/chunk-RTOCTWME.js +1050 -0
  80. package/dist/tsup/chunk-RTOCTWME.js.map +1 -0
  81. package/dist/tsup/chunk-SAZZ4SB2.cjs +2657 -0
  82. package/dist/tsup/chunk-SAZZ4SB2.cjs.map +1 -0
  83. package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
  84. package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
  85. package/dist/tsup/chunk-V2GHLYC6.cjs +49 -0
  86. package/dist/tsup/chunk-V2GHLYC6.cjs.map +1 -0
  87. package/dist/tsup/chunk-V3WG7XTW.cjs +645 -0
  88. package/dist/tsup/chunk-V3WG7XTW.cjs.map +1 -0
  89. package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
  90. package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
  91. package/dist/tsup/chunk-WMPW7JYC.js +642 -0
  92. package/dist/tsup/chunk-WMPW7JYC.js.map +1 -0
  93. package/dist/tsup/chunk-Z7HNQ2WF.js +534 -0
  94. package/dist/tsup/chunk-Z7HNQ2WF.js.map +1 -0
  95. package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
  96. package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
  97. package/dist/tsup/client/mod.cjs +33 -0
  98. package/dist/tsup/client/mod.cjs.map +1 -0
  99. package/dist/tsup/client/mod.d.cts +64 -0
  100. package/dist/tsup/client/mod.d.ts +64 -0
  101. package/dist/tsup/client/mod.js +33 -0
  102. package/dist/tsup/client/mod.js.map +1 -0
  103. package/dist/tsup/common/log.cjs +21 -0
  104. package/dist/tsup/common/log.cjs.map +1 -0
  105. package/dist/tsup/common/log.d.cts +34 -0
  106. package/dist/tsup/common/log.d.ts +34 -0
  107. package/dist/tsup/common/log.js +21 -0
  108. package/dist/tsup/common/log.js.map +1 -0
  109. package/dist/tsup/common/websocket.cjs +10 -0
  110. package/dist/tsup/common/websocket.cjs.map +1 -0
  111. package/dist/tsup/common/websocket.d.cts +3 -0
  112. package/dist/tsup/common/websocket.d.ts +3 -0
  113. package/dist/tsup/common/websocket.js +10 -0
  114. package/dist/tsup/common/websocket.js.map +1 -0
  115. package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
  116. package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
  117. package/dist/tsup/config-P3XujgRr.d.ts +2594 -0
  118. package/dist/tsup/config-_gfywqqI.d.cts +2594 -0
  119. package/dist/tsup/context-Bxd8Cx4H.d.cts +75 -0
  120. package/dist/tsup/context-uNA4TRn3.d.ts +75 -0
  121. package/dist/tsup/db/drizzle/mod.cjs +49 -0
  122. package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
  123. package/dist/tsup/db/drizzle/mod.d.cts +17 -0
  124. package/dist/tsup/db/drizzle/mod.d.ts +17 -0
  125. package/dist/tsup/db/drizzle/mod.js +49 -0
  126. package/dist/tsup/db/drizzle/mod.js.map +1 -0
  127. package/dist/tsup/db/mod.cjs +9 -0
  128. package/dist/tsup/db/mod.cjs.map +1 -0
  129. package/dist/tsup/db/mod.d.cts +9 -0
  130. package/dist/tsup/db/mod.d.ts +9 -0
  131. package/dist/tsup/db/mod.js +9 -0
  132. package/dist/tsup/db/mod.js.map +1 -0
  133. package/dist/tsup/driver-BcLvZcKl.d.cts +13 -0
  134. package/dist/tsup/driver-CPGHKXyh.d.ts +13 -0
  135. package/dist/tsup/driver-helpers/mod.cjs +53 -0
  136. package/dist/tsup/driver-helpers/mod.cjs.map +1 -0
  137. package/dist/tsup/driver-helpers/mod.d.cts +47 -0
  138. package/dist/tsup/driver-helpers/mod.d.ts +47 -0
  139. package/dist/tsup/driver-helpers/mod.js +53 -0
  140. package/dist/tsup/driver-helpers/mod.js.map +1 -0
  141. package/dist/tsup/driver-test-suite/mod.cjs +4974 -0
  142. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -0
  143. package/dist/tsup/driver-test-suite/mod.d.cts +73 -0
  144. package/dist/tsup/driver-test-suite/mod.d.ts +73 -0
  145. package/dist/tsup/driver-test-suite/mod.js +4974 -0
  146. package/dist/tsup/driver-test-suite/mod.js.map +1 -0
  147. package/dist/tsup/inspector/mod.cjs +164 -0
  148. package/dist/tsup/inspector/mod.cjs.map +1 -0
  149. package/dist/tsup/inspector/mod.d.cts +130 -0
  150. package/dist/tsup/inspector/mod.d.ts +130 -0
  151. package/dist/tsup/inspector/mod.js +164 -0
  152. package/dist/tsup/inspector/mod.js.map +1 -0
  153. package/dist/tsup/keys-CydblqMh.d.cts +13 -0
  154. package/dist/tsup/keys-CydblqMh.d.ts +13 -0
  155. package/dist/tsup/mod.cjs +82 -0
  156. package/dist/tsup/mod.cjs.map +1 -0
  157. package/dist/tsup/mod.d.cts +126 -0
  158. package/dist/tsup/mod.d.ts +126 -0
  159. package/dist/tsup/mod.js +82 -0
  160. package/dist/tsup/mod.js.map +1 -0
  161. package/dist/tsup/serve-test-suite/mod.cjs +2601 -0
  162. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -0
  163. package/dist/tsup/serve-test-suite/mod.d.cts +9 -0
  164. package/dist/tsup/serve-test-suite/mod.d.ts +9 -0
  165. package/dist/tsup/serve-test-suite/mod.js +2601 -0
  166. package/dist/tsup/serve-test-suite/mod.js.map +1 -0
  167. package/dist/tsup/test/mod.cjs +90 -0
  168. package/dist/tsup/test/mod.cjs.map +1 -0
  169. package/dist/tsup/test/mod.d.cts +26 -0
  170. package/dist/tsup/test/mod.d.ts +26 -0
  171. package/dist/tsup/test/mod.js +90 -0
  172. package/dist/tsup/test/mod.js.map +1 -0
  173. package/dist/tsup/utils-fwx3o3K9.d.cts +18 -0
  174. package/dist/tsup/utils-fwx3o3K9.d.ts +18 -0
  175. package/dist/tsup/utils.cjs +43 -0
  176. package/dist/tsup/utils.cjs.map +1 -0
  177. package/dist/tsup/utils.d.cts +148 -0
  178. package/dist/tsup/utils.d.ts +148 -0
  179. package/dist/tsup/utils.js +43 -0
  180. package/dist/tsup/utils.js.map +1 -0
  181. package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
  182. package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
  183. package/dist/tsup/workflow/mod.cjs +16 -0
  184. package/dist/tsup/workflow/mod.cjs.map +1 -0
  185. package/dist/tsup/workflow/mod.d.cts +25 -0
  186. package/dist/tsup/workflow/mod.d.ts +25 -0
  187. package/dist/tsup/workflow/mod.js +16 -0
  188. package/dist/tsup/workflow/mod.js.map +1 -0
  189. package/package.json +293 -5
  190. package/src/actor/config.ts +1221 -0
  191. package/src/actor/conn/driver.ts +61 -0
  192. package/src/actor/conn/drivers/http.ts +17 -0
  193. package/src/actor/conn/drivers/raw-request.ts +24 -0
  194. package/src/actor/conn/drivers/raw-websocket.ts +65 -0
  195. package/src/actor/conn/drivers/websocket.ts +144 -0
  196. package/src/actor/conn/mod.ts +288 -0
  197. package/src/actor/conn/persisted.ts +81 -0
  198. package/src/actor/conn/state-manager.ts +196 -0
  199. package/src/actor/contexts/action.ts +47 -0
  200. package/src/actor/contexts/base/actor.ts +347 -0
  201. package/src/actor/contexts/base/conn-init.ts +68 -0
  202. package/src/actor/contexts/base/conn.ts +73 -0
  203. package/src/actor/contexts/before-action-response.ts +42 -0
  204. package/src/actor/contexts/before-connect.ts +31 -0
  205. package/src/actor/contexts/connect.ts +42 -0
  206. package/src/actor/contexts/create-conn-state.ts +32 -0
  207. package/src/actor/contexts/create-vars.ts +39 -0
  208. package/src/actor/contexts/create.ts +39 -0
  209. package/src/actor/contexts/destroy.ts +42 -0
  210. package/src/actor/contexts/disconnect.ts +43 -0
  211. package/src/actor/contexts/index.ts +33 -0
  212. package/src/actor/contexts/request.ts +80 -0
  213. package/src/actor/contexts/run.ts +47 -0
  214. package/src/actor/contexts/sleep.ts +42 -0
  215. package/src/actor/contexts/state-change.ts +42 -0
  216. package/src/actor/contexts/wake.ts +42 -0
  217. package/src/actor/contexts/websocket.ts +80 -0
  218. package/src/actor/database.ts +13 -0
  219. package/src/actor/definition.ts +64 -0
  220. package/src/actor/driver.ts +114 -0
  221. package/src/actor/errors.ts +556 -0
  222. package/src/actor/instance/connection-manager.ts +574 -0
  223. package/src/actor/instance/event-manager.ts +314 -0
  224. package/src/actor/instance/keys.ts +146 -0
  225. package/src/actor/instance/kv.ts +241 -0
  226. package/src/actor/instance/mod.ts +1658 -0
  227. package/src/actor/instance/persisted.ts +67 -0
  228. package/src/actor/instance/queue-manager.ts +603 -0
  229. package/src/actor/instance/queue.ts +345 -0
  230. package/src/actor/instance/schedule-manager.ts +392 -0
  231. package/src/actor/instance/state-manager.ts +542 -0
  232. package/src/actor/instance/traces-driver.ts +128 -0
  233. package/src/actor/keys.test.ts +275 -0
  234. package/src/actor/keys.ts +89 -0
  235. package/src/actor/log.ts +6 -0
  236. package/src/actor/mod.ts +110 -0
  237. package/src/actor/protocol/old.ts +416 -0
  238. package/src/actor/protocol/serde.ts +222 -0
  239. package/src/actor/router-endpoints.ts +400 -0
  240. package/src/actor/router-websocket-endpoints.test.ts +54 -0
  241. package/src/actor/router-websocket-endpoints.ts +405 -0
  242. package/src/actor/router.ts +380 -0
  243. package/src/actor/schedule.ts +17 -0
  244. package/src/actor/schema.ts +291 -0
  245. package/src/actor/utils.test.ts +48 -0
  246. package/src/actor/utils.ts +158 -0
  247. package/src/client/actor-common.ts +32 -0
  248. package/src/client/actor-conn.ts +1262 -0
  249. package/src/client/actor-handle.ts +344 -0
  250. package/src/client/actor-query.ts +112 -0
  251. package/src/client/client.ts +558 -0
  252. package/src/client/config.ts +151 -0
  253. package/src/client/errors.ts +76 -0
  254. package/src/client/log.ts +5 -0
  255. package/src/client/mod.browser.ts +2 -0
  256. package/src/client/mod.ts +70 -0
  257. package/src/client/queue.ts +146 -0
  258. package/src/client/raw-utils.ts +149 -0
  259. package/src/client/test.ts +44 -0
  260. package/src/client/utils.ts +252 -0
  261. package/src/common/actor-router-consts.ts +59 -0
  262. package/src/common/cors.ts +57 -0
  263. package/src/common/eventsource-interface.ts +47 -0
  264. package/src/common/eventsource.ts +44 -0
  265. package/src/common/inline-websocket-adapter.ts +154 -0
  266. package/src/common/log-levels.ts +27 -0
  267. package/src/common/log.ts +229 -0
  268. package/src/common/logfmt.ts +221 -0
  269. package/src/common/network.ts +2 -0
  270. package/src/common/router.ts +174 -0
  271. package/src/common/utils.ts +339 -0
  272. package/src/common/websocket-interface.ts +7 -0
  273. package/src/common/websocket.ts +43 -0
  274. package/src/db/config.ts +100 -0
  275. package/src/db/drizzle/mod.ts +226 -0
  276. package/src/db/drizzle/sqlite-core.ts +22 -0
  277. package/src/db/mod.ts +125 -0
  278. package/src/db/shared.ts +92 -0
  279. package/src/db/sqlite-vfs.ts +12 -0
  280. package/src/devtools-loader/index.ts +33 -0
  281. package/src/devtools-loader/log.ts +5 -0
  282. package/src/driver-helpers/mod.ts +33 -0
  283. package/src/driver-helpers/utils.ts +54 -0
  284. package/src/driver-test-suite/log.ts +5 -0
  285. package/src/driver-test-suite/mod.ts +293 -0
  286. package/src/driver-test-suite/test-inline-client-driver.ts +307 -0
  287. package/src/driver-test-suite/tests/access-control.ts +218 -0
  288. package/src/driver-test-suite/tests/action-features.ts +203 -0
  289. package/src/driver-test-suite/tests/actor-conn-hibernation.ts +152 -0
  290. package/src/driver-test-suite/tests/actor-conn-state.ts +300 -0
  291. package/src/driver-test-suite/tests/actor-conn.ts +596 -0
  292. package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
  293. package/src/driver-test-suite/tests/actor-db.ts +477 -0
  294. package/src/driver-test-suite/tests/actor-destroy.ts +294 -0
  295. package/src/driver-test-suite/tests/actor-driver.ts +18 -0
  296. package/src/driver-test-suite/tests/actor-error-handling.ts +150 -0
  297. package/src/driver-test-suite/tests/actor-handle.ts +312 -0
  298. package/src/driver-test-suite/tests/actor-inline-client.ts +163 -0
  299. package/src/driver-test-suite/tests/actor-inspector.ts +264 -0
  300. package/src/driver-test-suite/tests/actor-kv.ts +65 -0
  301. package/src/driver-test-suite/tests/actor-metadata.ts +116 -0
  302. package/src/driver-test-suite/tests/actor-onstatechange.ts +95 -0
  303. package/src/driver-test-suite/tests/actor-queue.ts +325 -0
  304. package/src/driver-test-suite/tests/actor-run.ts +181 -0
  305. package/src/driver-test-suite/tests/actor-schedule.ts +97 -0
  306. package/src/driver-test-suite/tests/actor-sleep.ts +415 -0
  307. package/src/driver-test-suite/tests/actor-state.ts +54 -0
  308. package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
  309. package/src/driver-test-suite/tests/actor-vars.ts +97 -0
  310. package/src/driver-test-suite/tests/actor-workflow.ts +118 -0
  311. package/src/driver-test-suite/tests/manager-driver.ts +388 -0
  312. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -0
  313. package/src/driver-test-suite/tests/raw-http-request-properties.ts +454 -0
  314. package/src/driver-test-suite/tests/raw-http.ts +359 -0
  315. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -0
  316. package/src/driver-test-suite/tests/raw-websocket.ts +513 -0
  317. package/src/driver-test-suite/tests/request-access.ts +240 -0
  318. package/src/driver-test-suite/utils.ts +80 -0
  319. package/src/drivers/default.ts +38 -0
  320. package/src/drivers/engine/actor-driver.ts +1027 -0
  321. package/src/drivers/engine/config.ts +43 -0
  322. package/src/drivers/engine/log.ts +5 -0
  323. package/src/drivers/engine/mod.ts +36 -0
  324. package/src/drivers/file-system/actor.ts +102 -0
  325. package/src/drivers/file-system/global-state.ts +1445 -0
  326. package/src/drivers/file-system/kv-limits.ts +70 -0
  327. package/src/drivers/file-system/log.ts +5 -0
  328. package/src/drivers/file-system/manager.ts +300 -0
  329. package/src/drivers/file-system/mod.ts +78 -0
  330. package/src/drivers/file-system/sqlite-runtime.ts +210 -0
  331. package/src/drivers/file-system/utils.ts +125 -0
  332. package/src/engine-process/constants.ts +2 -0
  333. package/src/engine-process/log.ts +5 -0
  334. package/src/engine-process/mod.ts +464 -0
  335. package/src/globals.d.ts +35 -0
  336. package/src/inspector/actor-inspector.ts +352 -0
  337. package/src/inspector/config.ts +49 -0
  338. package/src/inspector/handler.ts +273 -0
  339. package/src/inspector/log.ts +5 -0
  340. package/src/inspector/mod.browser.ts +8 -0
  341. package/src/inspector/mod.ts +4 -0
  342. package/src/inspector/serve-ui.ts +40 -0
  343. package/src/inspector/transport.ts +18 -0
  344. package/src/inspector/utils.ts +32 -0
  345. package/src/manager/driver.ts +106 -0
  346. package/src/manager/gateway.ts +668 -0
  347. package/src/manager/log.ts +5 -0
  348. package/src/manager/mod.ts +2 -0
  349. package/src/manager/protocol/mod.ts +22 -0
  350. package/src/manager/protocol/query.ts +85 -0
  351. package/src/manager/router-schema.ts +22 -0
  352. package/src/manager/router.ts +660 -0
  353. package/src/manager-api/actors.ts +83 -0
  354. package/src/manager-api/common.ts +4 -0
  355. package/src/mod.ts +24 -0
  356. package/src/registry/config/driver.ts +21 -0
  357. package/src/registry/config/index.ts +510 -0
  358. package/src/registry/config/legacy-runner.ts +157 -0
  359. package/src/registry/config/runner.ts +21 -0
  360. package/src/registry/config/serverless.ts +94 -0
  361. package/src/registry/index.ts +194 -0
  362. package/src/registry/log.ts +5 -0
  363. package/src/remote-manager-driver/actor-http-client.ts +84 -0
  364. package/src/remote-manager-driver/actor-websocket-client.ts +81 -0
  365. package/src/remote-manager-driver/api-endpoints.ts +159 -0
  366. package/src/remote-manager-driver/api-utils.ts +69 -0
  367. package/src/remote-manager-driver/log.ts +5 -0
  368. package/src/remote-manager-driver/metadata.ts +64 -0
  369. package/src/remote-manager-driver/mod.ts +414 -0
  370. package/src/remote-manager-driver/ws-proxy.ts +189 -0
  371. package/src/schemas/actor-inspector/mod.ts +1 -0
  372. package/src/schemas/actor-inspector/versioned.ts +233 -0
  373. package/src/schemas/actor-persist/mod.ts +1 -0
  374. package/src/schemas/actor-persist/versioned.ts +217 -0
  375. package/src/schemas/client-protocol/mod.ts +1 -0
  376. package/src/schemas/client-protocol/versioned.ts +330 -0
  377. package/src/schemas/client-protocol-zod/mod.ts +118 -0
  378. package/src/schemas/file-system-driver/mod.ts +1 -0
  379. package/src/schemas/file-system-driver/versioned.ts +135 -0
  380. package/src/schemas/persist/mod.ts +1 -0
  381. package/src/schemas/transport/mod.ts +1 -0
  382. package/src/serde.ts +138 -0
  383. package/src/serve-test-suite/mod.ts +148 -0
  384. package/src/serverless/configure.ts +82 -0
  385. package/src/serverless/log.ts +5 -0
  386. package/src/serverless/router.test.ts +299 -0
  387. package/src/serverless/router.ts +215 -0
  388. package/src/test/log.ts +5 -0
  389. package/src/test/mod.ts +99 -0
  390. package/src/utils/crypto.ts +24 -0
  391. package/src/utils/endpoint-parser.test.ts +202 -0
  392. package/src/utils/endpoint-parser.ts +124 -0
  393. package/src/utils/env-vars.ts +78 -0
  394. package/src/utils/node.ts +178 -0
  395. package/src/utils/router.ts +83 -0
  396. package/src/utils/serve.ts +212 -0
  397. package/src/utils.test.ts +34 -0
  398. package/src/utils.ts +437 -0
  399. package/src/workflow/constants.ts +2 -0
  400. package/src/workflow/context.ts +597 -0
  401. package/src/workflow/driver.ts +194 -0
  402. package/src/workflow/inspector.ts +268 -0
  403. package/src/workflow/mod.ts +128 -0
@@ -0,0 +1,344 @@
1
+ import * as cbor from "cbor-x";
2
+ import invariant from "invariant";
3
+ import type { AnyActorDefinition } from "@/actor/definition";
4
+ import type { Encoding } from "@/actor/protocol/serde";
5
+ import { assertUnreachable } from "@/actor/utils";
6
+ import { deconstructError } from "@/common/utils";
7
+ import {
8
+ HEADER_CONN_PARAMS,
9
+ HEADER_ENCODING,
10
+ type ManagerDriver,
11
+ } from "@/driver-helpers/mod";
12
+ import type { ActorQuery } from "@/manager/protocol/query";
13
+ import type * as protocol from "@/schemas/client-protocol/mod";
14
+ import {
15
+ CURRENT_VERSION as CLIENT_PROTOCOL_CURRENT_VERSION,
16
+ HTTP_ACTION_REQUEST_VERSIONED,
17
+ HTTP_ACTION_RESPONSE_VERSIONED,
18
+ } from "@/schemas/client-protocol/versioned";
19
+ import {
20
+ type HttpActionRequest as HttpActionRequestJson,
21
+ HttpActionRequestSchema,
22
+ type HttpActionResponse as HttpActionResponseJson,
23
+ HttpActionResponseSchema,
24
+ } from "@/schemas/client-protocol-zod/mod";
25
+ import { bufferToArrayBuffer } from "@/utils";
26
+ import type { ActorDefinitionActions } from "./actor-common";
27
+ import { type ActorConn, ActorConnRaw } from "./actor-conn";
28
+ import { checkForSchedulingError, queryActor } from "./actor-query";
29
+ import { type ClientRaw, CREATE_ACTOR_CONN_PROXY } from "./client";
30
+ import { ActorError, isSchedulingError } from "./errors";
31
+ import { logger } from "./log";
32
+ import {
33
+ createQueueSender,
34
+ type QueueSendNoWaitOptions,
35
+ type QueueSendOptions,
36
+ type QueueSendResult,
37
+ type QueueSendWaitOptions,
38
+ } from "./queue";
39
+ import { rawHttpFetch, rawWebSocket } from "./raw-utils";
40
+ import { sendHttpRequest } from "./utils";
41
+
42
+ /**
43
+ * Provides underlying functions for stateless {@link ActorHandle} for action calls.
44
+ * Similar to ActorConnRaw but doesn't maintain a connection.
45
+ *
46
+ * @see {@link ActorHandle}
47
+ */
48
+ export class ActorHandleRaw {
49
+ #client: ClientRaw;
50
+ #driver: ManagerDriver;
51
+ #encoding: Encoding;
52
+ #actorQuery: ActorQuery;
53
+ #params: unknown;
54
+ #queueSender: ReturnType<typeof createQueueSender>;
55
+
56
+ /**
57
+ * Do not call this directly.
58
+ *
59
+ * Creates an instance of ActorHandleRaw.
60
+ *
61
+ * @protected
62
+ */
63
+ public constructor(
64
+ client: any,
65
+ driver: ManagerDriver,
66
+ params: unknown,
67
+ encoding: Encoding,
68
+ actorQuery: ActorQuery,
69
+ ) {
70
+ this.#client = client;
71
+ this.#driver = driver;
72
+ this.#encoding = encoding;
73
+ this.#actorQuery = actorQuery;
74
+ this.#params = params;
75
+ this.#queueSender = createQueueSender({
76
+ encoding: this.#encoding,
77
+ params: this.#params,
78
+ customFetch: async (request: Request) => {
79
+ const { actorId } = await queryActor(
80
+ undefined,
81
+ this.#actorQuery,
82
+ this.#driver,
83
+ );
84
+ return this.#driver.sendRequest(actorId, request);
85
+ },
86
+ });
87
+ }
88
+
89
+ send(
90
+ name: string,
91
+ body: unknown,
92
+ options: QueueSendWaitOptions,
93
+ ): Promise<QueueSendResult>;
94
+ send(
95
+ name: string,
96
+ body: unknown,
97
+ options?: QueueSendNoWaitOptions,
98
+ ): Promise<void>;
99
+ send(
100
+ name: string,
101
+ body: unknown,
102
+ options?: QueueSendOptions,
103
+ ): Promise<QueueSendResult | void> {
104
+ return this.#queueSender.send(name, body, options as any);
105
+ }
106
+
107
+ /**
108
+ * Call a raw action. This method sends an HTTP request to invoke the named action.
109
+ *
110
+ * @see {@link ActorHandle}
111
+ * @template Args - The type of arguments to pass to the action function.
112
+ * @template Response - The type of the response returned by the action function.
113
+ */
114
+ async action<
115
+ Args extends Array<unknown> = unknown[],
116
+ Response = unknown,
117
+ >(opts: {
118
+ name: string;
119
+ args: Args;
120
+ signal?: AbortSignal;
121
+ }): Promise<Response> {
122
+ // Track actorId for scheduling error lookups
123
+ let actorId: string | undefined;
124
+
125
+ try {
126
+ // Get the actor ID
127
+ const result = await queryActor(
128
+ undefined,
129
+ this.#actorQuery,
130
+ this.#driver,
131
+ );
132
+ actorId = result.actorId;
133
+ logger().debug({ msg: "found actor for action", actorId });
134
+ invariant(actorId, "Missing actor ID");
135
+
136
+ // Invoke the action
137
+ logger().debug({
138
+ msg: "handling action",
139
+ name: opts.name,
140
+ encoding: this.#encoding,
141
+ });
142
+ const responseData = await sendHttpRequest<
143
+ protocol.HttpActionRequest, // Bare type
144
+ protocol.HttpActionResponse, // Bare type
145
+ HttpActionRequestJson, // Json type
146
+ HttpActionResponseJson, // Json type
147
+ unknown[], // Request type (the args array)
148
+ Response // Response type (the output value)
149
+ >({
150
+ url: `http://actor/action/${encodeURIComponent(opts.name)}`,
151
+ method: "POST",
152
+ headers: {
153
+ [HEADER_ENCODING]: this.#encoding,
154
+ ...(this.#params !== undefined
155
+ ? { [HEADER_CONN_PARAMS]: JSON.stringify(this.#params) }
156
+ : {}),
157
+ },
158
+ body: opts.args,
159
+ encoding: this.#encoding,
160
+ customFetch: this.#driver.sendRequest.bind(
161
+ this.#driver,
162
+ actorId,
163
+ ),
164
+ signal: opts?.signal,
165
+ requestVersion: CLIENT_PROTOCOL_CURRENT_VERSION,
166
+ requestVersionedDataHandler: HTTP_ACTION_REQUEST_VERSIONED,
167
+ responseVersion: CLIENT_PROTOCOL_CURRENT_VERSION,
168
+ responseVersionedDataHandler: HTTP_ACTION_RESPONSE_VERSIONED,
169
+ requestZodSchema: HttpActionRequestSchema,
170
+ responseZodSchema: HttpActionResponseSchema,
171
+ // JSON Request: args is the raw value
172
+ requestToJson: (args): HttpActionRequestJson => ({
173
+ args,
174
+ }),
175
+ // BARE Request: args needs to be CBOR-encoded
176
+ requestToBare: (args): protocol.HttpActionRequest => ({
177
+ args: bufferToArrayBuffer(cbor.encode(args)),
178
+ }),
179
+ // JSON Response: output is the raw value
180
+ responseFromJson: (json): Response => json.output as Response,
181
+ // BARE Response: output is ArrayBuffer that needs CBOR-decoding
182
+ responseFromBare: (bare): Response =>
183
+ cbor.decode(new Uint8Array(bare.output)) as Response,
184
+ });
185
+
186
+ return responseData;
187
+ } catch (err) {
188
+ // Standardize to ClientActorError instead of the native backend error
189
+ const { group, code, message, metadata } = deconstructError(
190
+ err,
191
+ logger(),
192
+ {},
193
+ true,
194
+ );
195
+
196
+ // Check if this is a scheduling error and try to get more details
197
+ if (actorId && isSchedulingError(group, code)) {
198
+ const schedulingError = await checkForSchedulingError(
199
+ group,
200
+ code,
201
+ actorId,
202
+ this.#actorQuery,
203
+ this.#driver,
204
+ );
205
+ if (schedulingError) {
206
+ throw schedulingError;
207
+ }
208
+ }
209
+
210
+ throw new ActorError(group, code, message, metadata);
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Establishes a persistent connection to the actor.
216
+ *
217
+ * @template AD The actor class that this connection is for.
218
+ * @returns {ActorConn<AD>} A connection to the actor.
219
+ */
220
+ connect(): ActorConn<AnyActorDefinition> {
221
+ logger().debug({
222
+ msg: "establishing connection from handle",
223
+ query: this.#actorQuery,
224
+ });
225
+
226
+ const conn = new ActorConnRaw(
227
+ this.#client,
228
+ this.#driver,
229
+ this.#params,
230
+ this.#encoding,
231
+ this.#actorQuery,
232
+ );
233
+
234
+ return this.#client[CREATE_ACTOR_CONN_PROXY](
235
+ conn,
236
+ ) as ActorConn<AnyActorDefinition>;
237
+ }
238
+
239
+ /**
240
+ * Fetches a resource from this actor via the /request endpoint. This is a
241
+ * convenience wrapper around the raw HTTP API.
242
+ */
243
+ fetch(input: string | URL | Request, init?: RequestInit) {
244
+ return rawHttpFetch(
245
+ this.#driver,
246
+ this.#actorQuery,
247
+ this.#params,
248
+ input,
249
+ init,
250
+ );
251
+ }
252
+
253
+ /**
254
+ * Opens a raw WebSocket connection to this actor.
255
+ */
256
+ webSocket(path?: string, protocols?: string | string[]) {
257
+ return rawWebSocket(
258
+ this.#driver,
259
+ this.#actorQuery,
260
+ this.#params,
261
+ path,
262
+ protocols,
263
+ );
264
+ }
265
+
266
+ /**
267
+ * Resolves the actor to get its unique actor ID.
268
+ */
269
+ async resolve(): Promise<string> {
270
+ if ("getForKey" in this.#actorQuery) {
271
+ const name = this.#actorQuery.getForKey.name;
272
+
273
+ // Query the actor to get the id
274
+ const { actorId } = await queryActor(
275
+ undefined,
276
+ this.#actorQuery,
277
+ this.#driver,
278
+ );
279
+
280
+ this.#actorQuery = { getForId: { actorId, name } };
281
+
282
+ return actorId;
283
+ } else if ("getOrCreateForKey" in this.#actorQuery) {
284
+ const name = this.#actorQuery.getOrCreateForKey.name;
285
+
286
+ // Query the actor to get or create and get the id
287
+ const { actorId } = await queryActor(
288
+ undefined,
289
+ this.#actorQuery,
290
+ this.#driver,
291
+ );
292
+
293
+ this.#actorQuery = { getForId: { actorId, name } };
294
+
295
+ return actorId;
296
+ } else if ("getForId" in this.#actorQuery) {
297
+ // Skip since it's already resolved
298
+ return this.#actorQuery.getForId.actorId;
299
+ } else if ("create" in this.#actorQuery) {
300
+ // Cannot create a handle with this query
301
+ invariant(false, "actorQuery cannot be create");
302
+ } else {
303
+ assertUnreachable(this.#actorQuery);
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Returns the raw URL for routing traffic to the actor.
309
+ */
310
+ async getGatewayUrl(): Promise<string> {
311
+ const { actorId } = await queryActor(
312
+ undefined,
313
+ this.#actorQuery,
314
+ this.#driver,
315
+ );
316
+ return await this.#driver.buildGatewayUrl(actorId);
317
+ }
318
+ }
319
+
320
+ /**
321
+ * Stateless handle to a actor. Allows calling actor's remote procedure calls with inferred types
322
+ * without establishing a persistent connection.
323
+ *
324
+ * @example
325
+ * ```
326
+ * const room = client.get<ChatRoom>(...etc...);
327
+ * // This calls the action named `sendMessage` on the `ChatRoom` actor without a connection.
328
+ * await room.sendMessage('Hello, world!');
329
+ * ```
330
+ *
331
+ * Private methods (e.g. those starting with `_`) are automatically excluded.
332
+ *
333
+ * @template AD The actor class that this handle is for.
334
+ * @see {@link ActorHandleRaw}
335
+ */
336
+ export type ActorHandle<AD extends AnyActorDefinition> = Omit<
337
+ ActorHandleRaw,
338
+ "connect"
339
+ > & {
340
+ // Add typed version of ActorConn (instead of using AnyActorDefinition)
341
+ connect(): ActorConn<AD>;
342
+ // Resolve method returns the actor ID
343
+ resolve(): Promise<string>;
344
+ } & ActorDefinitionActions<AD>;
@@ -0,0 +1,112 @@
1
+ import type { Context as HonoContext } from "hono";
2
+ import * as errors from "@/actor/errors";
3
+ import { stringifyError } from "@/common/utils";
4
+ import type { ManagerDriver } from "@/driver-helpers/mod";
5
+ import type { ActorQuery } from "@/manager/protocol/query";
6
+ import { ActorSchedulingError } from "./errors";
7
+ import { logger } from "./log";
8
+
9
+ /**
10
+ * Query the manager driver to get or create a actor based on the provided query
11
+ */
12
+ export async function queryActor(
13
+ c: HonoContext | undefined,
14
+ query: ActorQuery,
15
+ managerDriver: ManagerDriver,
16
+ ): Promise<{ actorId: string }> {
17
+ logger().debug({ msg: "querying actor", query: JSON.stringify(query) });
18
+ let actorOutput: { actorId: string };
19
+ if ("getForId" in query) {
20
+ const output = await managerDriver.getForId({
21
+ c,
22
+ name: query.getForId.name,
23
+ actorId: query.getForId.actorId,
24
+ });
25
+ if (!output) throw new errors.ActorNotFound(query.getForId.actorId);
26
+ actorOutput = output;
27
+ } else if ("getForKey" in query) {
28
+ const existingActor = await managerDriver.getWithKey({
29
+ c,
30
+ name: query.getForKey.name,
31
+ key: query.getForKey.key,
32
+ });
33
+ if (!existingActor) {
34
+ throw new errors.ActorNotFound(
35
+ `${query.getForKey.name}:${JSON.stringify(query.getForKey.key)}`,
36
+ );
37
+ }
38
+ actorOutput = existingActor;
39
+ } else if ("getOrCreateForKey" in query) {
40
+ const getOrCreateOutput = await managerDriver.getOrCreateWithKey({
41
+ c,
42
+ name: query.getOrCreateForKey.name,
43
+ key: query.getOrCreateForKey.key,
44
+ input: query.getOrCreateForKey.input,
45
+ region: query.getOrCreateForKey.region,
46
+ });
47
+ actorOutput = {
48
+ actorId: getOrCreateOutput.actorId,
49
+ };
50
+ } else if ("create" in query) {
51
+ const createOutput = await managerDriver.createActor({
52
+ c,
53
+ name: query.create.name,
54
+ key: query.create.key,
55
+ input: query.create.input,
56
+ region: query.create.region,
57
+ });
58
+ actorOutput = {
59
+ actorId: createOutput.actorId,
60
+ };
61
+ } else {
62
+ throw new errors.InvalidRequest("Invalid query format");
63
+ }
64
+
65
+ logger().debug({ msg: "actor query result", actorId: actorOutput.actorId });
66
+ return { actorId: actorOutput.actorId };
67
+ }
68
+
69
+ /**
70
+ * Extract the actor name from a query.
71
+ */
72
+ export function getActorNameFromQuery(query: ActorQuery): string {
73
+ if ("getForId" in query) return query.getForId.name;
74
+ if ("getForKey" in query) return query.getForKey.name;
75
+ if ("getOrCreateForKey" in query) return query.getOrCreateForKey.name;
76
+ if ("create" in query) return query.create.name;
77
+ throw new errors.InvalidRequest("Invalid query format");
78
+ }
79
+
80
+ /**
81
+ * Fetch actor details and check for scheduling errors.
82
+ */
83
+ export async function checkForSchedulingError(
84
+ group: string,
85
+ code: string,
86
+ actorId: string,
87
+ query: ActorQuery,
88
+ driver: ManagerDriver,
89
+ ): Promise<ActorSchedulingError | null> {
90
+ const name = getActorNameFromQuery(query);
91
+
92
+ try {
93
+ const actor = await driver.getForId({ name, actorId });
94
+
95
+ if (actor?.error) {
96
+ logger().info({
97
+ msg: "found actor scheduling error",
98
+ actorId,
99
+ error: actor.error,
100
+ });
101
+ return new ActorSchedulingError(group, code, actorId, actor.error);
102
+ }
103
+ } catch (err) {
104
+ logger().warn({
105
+ msg: "failed to fetch actor details for scheduling error check",
106
+ actorId,
107
+ error: stringifyError(err),
108
+ });
109
+ }
110
+
111
+ return null;
112
+ }