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,477 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import type { DriverTestConfig } from "../mod";
3
+ import { setupDriverTest, waitFor } from "../utils";
4
+
5
+ type DbVariant = "raw" | "drizzle";
6
+
7
+ const CHUNK_SIZE = 4096;
8
+ const LARGE_PAYLOAD_SIZE = 32768;
9
+ const HIGH_VOLUME_COUNT = 1000;
10
+ const SLEEP_WAIT_MS = 150;
11
+ const LIFECYCLE_POLL_INTERVAL_MS = 25;
12
+ const LIFECYCLE_POLL_ATTEMPTS = 40;
13
+ const REAL_TIMER_DB_TIMEOUT_MS = 180_000;
14
+ const CHUNK_BOUNDARY_SIZES = [
15
+ CHUNK_SIZE - 1,
16
+ CHUNK_SIZE,
17
+ CHUNK_SIZE + 1,
18
+ 2 * CHUNK_SIZE - 1,
19
+ 2 * CHUNK_SIZE,
20
+ 2 * CHUNK_SIZE + 1,
21
+ 4 * CHUNK_SIZE - 1,
22
+ 4 * CHUNK_SIZE,
23
+ 4 * CHUNK_SIZE + 1,
24
+ ];
25
+ const SHRINK_GROW_INITIAL_ROWS = 16;
26
+ const SHRINK_GROW_REGROW_ROWS = 10;
27
+ const SHRINK_GROW_INITIAL_PAYLOAD = 4096;
28
+ const SHRINK_GROW_REGROW_PAYLOAD = 6144;
29
+ const HOT_ROW_COUNT = 10;
30
+ const HOT_ROW_UPDATES = 240;
31
+ const INTEGRITY_SEED_COUNT = 64;
32
+ const INTEGRITY_CHURN_COUNT = 120;
33
+
34
+ function getDbActor(
35
+ client: Awaited<ReturnType<typeof setupDriverTest>>["client"],
36
+ variant: DbVariant,
37
+ ) {
38
+ return variant === "raw" ? client.dbActorRaw : client.dbActorDrizzle;
39
+ }
40
+
41
+ export function runActorDbTests(driverTestConfig: DriverTestConfig) {
42
+ const variants: DbVariant[] = ["raw", "drizzle"];
43
+ const dbTestTimeout = driverTestConfig.useRealTimers
44
+ ? REAL_TIMER_DB_TIMEOUT_MS
45
+ : undefined;
46
+ const lifecycleTestTimeout = driverTestConfig.useRealTimers
47
+ ? REAL_TIMER_DB_TIMEOUT_MS
48
+ : undefined;
49
+
50
+ for (const variant of variants) {
51
+ describe(`Actor Database (${variant}) Tests`, () => {
52
+ test(
53
+ "bootstraps schema on startup",
54
+ async (c) => {
55
+ const { client } = await setupDriverTest(c, driverTestConfig);
56
+ const actor = getDbActor(client, variant).getOrCreate([
57
+ `db-${variant}-bootstrap-${crypto.randomUUID()}`,
58
+ ]);
59
+
60
+ const count = await actor.getCount();
61
+ expect(count).toBe(0);
62
+ },
63
+ dbTestTimeout,
64
+ );
65
+
66
+ test(
67
+ "supports CRUD, raw SQL, and multi-statement exec",
68
+ async (c) => {
69
+ const { client } = await setupDriverTest(c, driverTestConfig);
70
+ const actor = getDbActor(client, variant).getOrCreate([
71
+ `db-${variant}-crud-${crypto.randomUUID()}`,
72
+ ]);
73
+
74
+ await actor.reset();
75
+
76
+ const first = await actor.insertValue("alpha");
77
+ const second = await actor.insertValue("beta");
78
+
79
+ const values = await actor.getValues();
80
+ expect(values.length).toBeGreaterThanOrEqual(2);
81
+ expect(values.some((row) => row.value === "alpha")).toBeTruthy();
82
+ expect(values.some((row) => row.value === "beta")).toBeTruthy();
83
+
84
+ await actor.updateValue(first.id, "alpha-updated");
85
+ const updated = await actor.getValue(first.id);
86
+ expect(updated).toBe("alpha-updated");
87
+
88
+ await actor.deleteValue(second.id);
89
+ const count = await actor.getCount();
90
+ if (driverTestConfig.useRealTimers) {
91
+ expect(count).toBeGreaterThanOrEqual(1);
92
+ } else {
93
+ expect(count).toBe(1);
94
+ }
95
+
96
+ const rawCount = await actor.rawSelectCount();
97
+ if (driverTestConfig.useRealTimers) {
98
+ expect(rawCount).toBeGreaterThanOrEqual(1);
99
+ } else {
100
+ expect(rawCount).toBe(1);
101
+ }
102
+
103
+ const multiValue = await actor.multiStatementInsert("gamma");
104
+ expect(multiValue).toBe("gamma-updated");
105
+ },
106
+ dbTestTimeout,
107
+ );
108
+
109
+ test(
110
+ "handles transactions",
111
+ async (c) => {
112
+ const { client } = await setupDriverTest(c, driverTestConfig);
113
+ const actor = getDbActor(client, variant).getOrCreate([
114
+ `db-${variant}-tx-${crypto.randomUUID()}`,
115
+ ]);
116
+
117
+ await actor.reset();
118
+ await actor.transactionCommit("commit");
119
+ expect(await actor.getCount()).toBe(1);
120
+
121
+ await actor.transactionRollback("rollback");
122
+ expect(await actor.getCount()).toBe(1);
123
+ },
124
+ dbTestTimeout,
125
+ );
126
+
127
+ test(
128
+ "persists across sleep and wake cycles",
129
+ async (c) => {
130
+ const { client } = await setupDriverTest(c, driverTestConfig);
131
+ const actor = getDbActor(client, variant).getOrCreate([
132
+ `db-${variant}-sleep-${crypto.randomUUID()}`,
133
+ ]);
134
+
135
+ await actor.reset();
136
+ await actor.insertValue("sleepy");
137
+ const baselineCount = await actor.getCount();
138
+ expect(baselineCount).toBeGreaterThan(0);
139
+
140
+ for (let i = 0; i < 3; i++) {
141
+ await actor.triggerSleep();
142
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS);
143
+ expect(await actor.getCount()).toBe(baselineCount);
144
+ }
145
+ },
146
+ dbTestTimeout,
147
+ );
148
+
149
+ test(
150
+ "completes onDisconnect DB writes before sleeping",
151
+ async (c) => {
152
+ const { client } = await setupDriverTest(c, driverTestConfig);
153
+ const key = `db-${variant}-disconnect-${crypto.randomUUID()}`;
154
+
155
+ const actor = getDbActor(client, variant).getOrCreate([key]);
156
+ await actor.reset();
157
+ await actor.configureDisconnectInsert(true, 250);
158
+
159
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 250);
160
+ await actor.configureDisconnectInsert(false, 0);
161
+
162
+ expect(await actor.getDisconnectInsertCount()).toBe(1);
163
+ },
164
+ dbTestTimeout,
165
+ );
166
+
167
+ test(
168
+ "handles high-volume inserts",
169
+ async (c) => {
170
+ const { client } = await setupDriverTest(c, driverTestConfig);
171
+ const actor = getDbActor(client, variant).getOrCreate([
172
+ `db-${variant}-high-volume-${crypto.randomUUID()}`,
173
+ ]);
174
+
175
+ await actor.reset();
176
+ await actor.insertMany(HIGH_VOLUME_COUNT);
177
+ const count = await actor.getCount();
178
+ if (driverTestConfig.useRealTimers) {
179
+ expect(count).toBeGreaterThanOrEqual(HIGH_VOLUME_COUNT);
180
+ } else {
181
+ expect(count).toBe(HIGH_VOLUME_COUNT);
182
+ }
183
+ },
184
+ dbTestTimeout,
185
+ );
186
+
187
+ test(
188
+ "handles payloads across chunk boundaries",
189
+ async (c) => {
190
+ const { client } = await setupDriverTest(c, driverTestConfig);
191
+ const actor = getDbActor(client, variant).getOrCreate([
192
+ `db-${variant}-chunk-${crypto.randomUUID()}`,
193
+ ]);
194
+
195
+ await actor.reset();
196
+ for (const size of CHUNK_BOUNDARY_SIZES) {
197
+ const { id } = await actor.insertPayloadOfSize(size);
198
+ const storedSize = await actor.getPayloadSize(id);
199
+ expect(storedSize).toBe(size);
200
+ }
201
+ },
202
+ dbTestTimeout,
203
+ );
204
+
205
+ test(
206
+ "handles large payloads",
207
+ async (c) => {
208
+ const { client } = await setupDriverTest(c, driverTestConfig);
209
+ const actor = getDbActor(client, variant).getOrCreate([
210
+ `db-${variant}-large-${crypto.randomUUID()}`,
211
+ ]);
212
+
213
+ await actor.reset();
214
+ const { id } = await actor.insertPayloadOfSize(LARGE_PAYLOAD_SIZE);
215
+ const storedSize = await actor.getPayloadSize(id);
216
+ expect(storedSize).toBe(LARGE_PAYLOAD_SIZE);
217
+ },
218
+ dbTestTimeout,
219
+ );
220
+
221
+ test(
222
+ "supports shrink and regrow workloads with vacuum",
223
+ async (c) => {
224
+ const { client } = await setupDriverTest(c, driverTestConfig);
225
+ const actor = getDbActor(client, variant).getOrCreate([
226
+ `db-${variant}-shrink-regrow-${crypto.randomUUID()}`,
227
+ ]);
228
+
229
+ await actor.reset();
230
+ await actor.vacuum();
231
+ const baselinePages = await actor.getPageCount();
232
+
233
+ await actor.insertPayloadRows(
234
+ SHRINK_GROW_INITIAL_ROWS,
235
+ SHRINK_GROW_INITIAL_PAYLOAD,
236
+ );
237
+ const grownPages = await actor.getPageCount();
238
+
239
+ await actor.reset();
240
+ await actor.vacuum();
241
+ const shrunkPages = await actor.getPageCount();
242
+
243
+ await actor.insertPayloadRows(
244
+ SHRINK_GROW_REGROW_ROWS,
245
+ SHRINK_GROW_REGROW_PAYLOAD,
246
+ );
247
+ const regrownPages = await actor.getPageCount();
248
+
249
+ expect(grownPages).toBeGreaterThanOrEqual(baselinePages);
250
+ expect(shrunkPages).toBeLessThanOrEqual(grownPages);
251
+ expect(regrownPages).toBeGreaterThan(shrunkPages);
252
+ },
253
+ dbTestTimeout,
254
+ );
255
+
256
+ test(
257
+ "handles repeated updates to the same row",
258
+ async (c) => {
259
+ const { client } = await setupDriverTest(c, driverTestConfig);
260
+ const actor = getDbActor(client, variant).getOrCreate([
261
+ `db-${variant}-updates-${crypto.randomUUID()}`,
262
+ ]);
263
+
264
+ await actor.reset();
265
+ const { id } = await actor.insertValue("base");
266
+ const result = await actor.repeatUpdate(id, 50);
267
+ expect(result.value).toBe("Updated 49");
268
+ const value = await actor.getValue(id);
269
+ expect(value).toBe("Updated 49");
270
+
271
+ const hotRowIds: number[] = [];
272
+ for (let i = 0; i < HOT_ROW_COUNT; i++) {
273
+ const row = await actor.insertValue(`init-${i}`);
274
+ hotRowIds.push(row.id);
275
+ }
276
+
277
+ const updatedRows = await actor.roundRobinUpdateValues(
278
+ hotRowIds,
279
+ HOT_ROW_UPDATES,
280
+ );
281
+ expect(updatedRows).toHaveLength(HOT_ROW_COUNT);
282
+ for (const row of updatedRows) {
283
+ expect(row.value).toMatch(/^v-\d+$/);
284
+ }
285
+ },
286
+ dbTestTimeout,
287
+ );
288
+
289
+ test(
290
+ "passes integrity checks after mixed workload and sleep",
291
+ async (c) => {
292
+ const { client } = await setupDriverTest(c, driverTestConfig);
293
+ const actor = getDbActor(client, variant).getOrCreate([
294
+ `db-${variant}-integrity-${crypto.randomUUID()}`,
295
+ ]);
296
+
297
+ await actor.reset();
298
+ await actor.runMixedWorkload(
299
+ INTEGRITY_SEED_COUNT,
300
+ INTEGRITY_CHURN_COUNT,
301
+ );
302
+ expect((await actor.integrityCheck()).toLowerCase()).toBe("ok");
303
+
304
+ await actor.triggerSleep();
305
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
306
+ expect((await actor.integrityCheck()).toLowerCase()).toBe("ok");
307
+ },
308
+ dbTestTimeout,
309
+ );
310
+ });
311
+ }
312
+
313
+ describe("Actor Database Lifecycle Cleanup Tests", () => {
314
+ test(
315
+ "runs db provider cleanup on sleep",
316
+ async (c) => {
317
+ const { client } = await setupDriverTest(c, driverTestConfig);
318
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
319
+
320
+ const lifecycle = client.dbLifecycle.getOrCreate([
321
+ `db-lifecycle-sleep-${crypto.randomUUID()}`,
322
+ ]);
323
+ const actorId = await lifecycle.getActorId();
324
+
325
+ const before = await observer.getCounts(actorId);
326
+
327
+ await lifecycle.insertValue("before-sleep");
328
+ await lifecycle.triggerSleep();
329
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
330
+ await lifecycle.ping();
331
+
332
+ let after = before;
333
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
334
+ after = await observer.getCounts(actorId);
335
+ if (after.cleanup >= before.cleanup + 1) {
336
+ break;
337
+ }
338
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
339
+ }
340
+
341
+ expect(after.create).toBeGreaterThanOrEqual(before.create);
342
+ expect(after.migrate).toBeGreaterThanOrEqual(before.migrate);
343
+ expect(after.cleanup).toBeGreaterThanOrEqual(before.cleanup + 1);
344
+ },
345
+ lifecycleTestTimeout,
346
+ );
347
+
348
+ test(
349
+ "runs db provider cleanup on destroy",
350
+ async (c) => {
351
+ const { client } = await setupDriverTest(c, driverTestConfig);
352
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
353
+
354
+ const lifecycle = client.dbLifecycle.getOrCreate([
355
+ `db-lifecycle-destroy-${crypto.randomUUID()}`,
356
+ ]);
357
+ const actorId = await lifecycle.getActorId();
358
+ const before = await observer.getCounts(actorId);
359
+
360
+ await lifecycle.insertValue("before-destroy");
361
+ await lifecycle.triggerDestroy();
362
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
363
+
364
+ let cleanupCount = before.cleanup;
365
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
366
+ const counts = await observer.getCounts(actorId);
367
+ cleanupCount = counts.cleanup;
368
+ if (cleanupCount >= before.cleanup + 1) {
369
+ break;
370
+ }
371
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
372
+ }
373
+
374
+ expect(cleanupCount).toBeGreaterThanOrEqual(before.cleanup + 1);
375
+ },
376
+ lifecycleTestTimeout,
377
+ );
378
+
379
+ test(
380
+ "runs db provider cleanup when migration fails",
381
+ async (c) => {
382
+ const { client } = await setupDriverTest(c, driverTestConfig);
383
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
384
+ const beforeTotalCleanup = await observer.getTotalCleanupCount();
385
+ const key = `db-lifecycle-migrate-failure-${crypto.randomUUID()}`;
386
+ const lifecycle = client.dbLifecycleFailing.getOrCreate([key]);
387
+
388
+ let threw = false;
389
+ try {
390
+ await lifecycle.ping();
391
+ } catch {
392
+ threw = true;
393
+ }
394
+ expect(threw).toBeTruthy();
395
+
396
+ let cleanupCount = beforeTotalCleanup;
397
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
398
+ cleanupCount = await observer.getTotalCleanupCount();
399
+ if (cleanupCount >= beforeTotalCleanup + 1) {
400
+ break;
401
+ }
402
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
403
+ }
404
+
405
+ expect(cleanupCount).toBeGreaterThanOrEqual(beforeTotalCleanup + 1);
406
+ },
407
+ lifecycleTestTimeout,
408
+ );
409
+
410
+ test(
411
+ "handles parallel actor lifecycle churn",
412
+ async (c) => {
413
+ const { client } = await setupDriverTest(c, driverTestConfig);
414
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
415
+
416
+ const actorHandles = Array.from({ length: 12 }, (_, i) =>
417
+ client.dbLifecycle.getOrCreate([
418
+ `db-lifecycle-stress-${i}-${crypto.randomUUID()}`,
419
+ ]),
420
+ );
421
+ const actorIds = await Promise.all(
422
+ actorHandles.map((handle) => handle.getActorId()),
423
+ );
424
+
425
+ await Promise.all(
426
+ actorHandles.map((handle, i) => handle.insertValue(`phase-1-${i}`)),
427
+ );
428
+ await Promise.all(actorHandles.map((handle) => handle.triggerSleep()));
429
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
430
+ await Promise.all(
431
+ actorHandles.map((handle, i) => handle.insertValue(`phase-2-${i}`)),
432
+ );
433
+
434
+ const survivors = actorHandles.slice(0, 6);
435
+ const destroyed = actorHandles.slice(6);
436
+
437
+ await Promise.all(destroyed.map((handle) => handle.triggerDestroy()));
438
+ await Promise.all(survivors.map((handle) => handle.triggerSleep()));
439
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
440
+ await Promise.all(survivors.map((handle) => handle.ping()));
441
+
442
+ const survivorCounts = await Promise.all(
443
+ survivors.map((handle) => handle.getCount()),
444
+ );
445
+ for (const count of survivorCounts) {
446
+ if (driverTestConfig.useRealTimers) {
447
+ expect(count).toBeGreaterThanOrEqual(2);
448
+ } else {
449
+ expect(count).toBe(2);
450
+ }
451
+ }
452
+
453
+ const lifecycleCleanup = new Map<string, number>();
454
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
455
+ let allCleaned = true;
456
+ for (const actorId of actorIds) {
457
+ const counts = await observer.getCounts(actorId);
458
+ lifecycleCleanup.set(actorId, counts.cleanup);
459
+ if (counts.cleanup < 1) {
460
+ allCleaned = false;
461
+ }
462
+ }
463
+
464
+ if (allCleaned) {
465
+ break;
466
+ }
467
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
468
+ }
469
+
470
+ for (const actorId of actorIds) {
471
+ expect(lifecycleCleanup.get(actorId) ?? 0).toBeGreaterThanOrEqual(1);
472
+ }
473
+ },
474
+ lifecycleTestTimeout,
475
+ );
476
+ });
477
+ }