rivetkit 2.0.42 → 2.1.0-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 (322) hide show
  1. package/dist/{tsup/config-CLnylLYY.d.ts → browser/client.d.ts} +2127 -1910
  2. package/dist/browser/client.js +5182 -0
  3. package/dist/browser/client.js.map +1 -0
  4. package/dist/browser/inspector/client.d.ts +130 -0
  5. package/dist/browser/inspector/client.js +2854 -0
  6. package/dist/browser/inspector/client.js.map +1 -0
  7. package/dist/browser/v3-DnYObHH3.d.ts +279 -0
  8. package/dist/schemas/actor-inspector/v2.ts +796 -0
  9. package/dist/schemas/actor-inspector/v3.ts +899 -0
  10. package/dist/schemas/actor-persist/v4.ts +406 -0
  11. package/dist/schemas/client-protocol/v3.ts +554 -0
  12. package/dist/schemas/persist/v1.ts +781 -0
  13. package/dist/schemas/transport/v1.ts +697 -0
  14. package/dist/tsup/actor/errors.cjs +27 -3
  15. package/dist/tsup/actor/errors.cjs.map +1 -1
  16. package/dist/tsup/actor/errors.d.cts +37 -1
  17. package/dist/tsup/actor/errors.d.ts +37 -1
  18. package/dist/tsup/actor/errors.js +26 -1
  19. package/dist/tsup/{actor-router-consts-DzI2szci.d.cts → actor-router-consts-D29T1Z-K.d.cts} +1 -1
  20. package/dist/tsup/{actor-router-consts-DzI2szci.d.ts → actor-router-consts-D29T1Z-K.d.ts} +1 -1
  21. package/dist/tsup/chunk-424PT5DM.js +23 -0
  22. package/dist/tsup/chunk-424PT5DM.js.map +1 -0
  23. package/dist/tsup/{chunk-JDAD2YFA.js → chunk-5ESWDTHJ.js} +148 -273
  24. package/dist/tsup/chunk-5ESWDTHJ.js.map +1 -0
  25. package/dist/tsup/{chunk-FJ3KTN4V.js → chunk-6LIBPELE.js} +119 -11
  26. package/dist/tsup/chunk-6LIBPELE.js.map +1 -0
  27. package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
  28. package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
  29. package/dist/tsup/{chunk-LFVF5SCU.js → chunk-7HTNH26M.js} +126 -1
  30. package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
  31. package/dist/tsup/chunk-7K4CYDGD.js +630 -0
  32. package/dist/tsup/chunk-7K4CYDGD.js.map +1 -0
  33. package/dist/tsup/{chunk-XXGJCOL6.js → chunk-A6YIZWTK.js} +2 -2
  34. package/dist/tsup/chunk-AIYEYMX5.cjs +630 -0
  35. package/dist/tsup/chunk-AIYEYMX5.cjs.map +1 -0
  36. package/dist/tsup/{chunk-Q6W7RJJP.js → chunk-DIGBC2VI.js} +211 -2316
  37. package/dist/tsup/chunk-DIGBC2VI.js.map +1 -0
  38. package/dist/tsup/{chunk-RZW2DNND.cjs → chunk-F6JYU5IK.cjs} +1957 -1039
  39. package/dist/tsup/chunk-F6JYU5IK.cjs.map +1 -0
  40. package/dist/tsup/chunk-HAZL2EPK.cjs +534 -0
  41. package/dist/tsup/chunk-HAZL2EPK.cjs.map +1 -0
  42. package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
  43. package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
  44. package/dist/tsup/chunk-HIDX4C5Y.cjs +1036 -0
  45. package/dist/tsup/chunk-HIDX4C5Y.cjs.map +1 -0
  46. package/dist/tsup/chunk-IVG73YCW.js +534 -0
  47. package/dist/tsup/chunk-IVG73YCW.js.map +1 -0
  48. package/dist/tsup/chunk-KJSYAUOM.js +96 -0
  49. package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
  50. package/dist/tsup/{chunk-2XQS746M.cjs → chunk-L47L3ZWJ.cjs} +127 -2
  51. package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
  52. package/dist/tsup/{chunk-H4TB4X25.cjs → chunk-LW6KLR7A.cjs} +126 -18
  53. package/dist/tsup/chunk-LW6KLR7A.cjs.map +1 -0
  54. package/dist/tsup/chunk-LXUQ667X.js +2006 -0
  55. package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
  56. package/dist/tsup/{chunk-GMAVRZSF.js → chunk-M2T62AZQ.js} +1790 -872
  57. package/dist/tsup/chunk-M2T62AZQ.js.map +1 -0
  58. package/dist/tsup/chunk-MZ37VV3P.js +5974 -0
  59. package/dist/tsup/chunk-MZ37VV3P.js.map +1 -0
  60. package/dist/tsup/chunk-N4KRDJ56.js +72 -0
  61. package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
  62. package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
  63. package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
  64. package/dist/tsup/chunk-OMEPCQK2.js +649 -0
  65. package/dist/tsup/chunk-OMEPCQK2.js.map +1 -0
  66. package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
  67. package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
  68. package/dist/tsup/chunk-SSEP6DHP.cjs +2657 -0
  69. package/dist/tsup/chunk-SSEP6DHP.cjs.map +1 -0
  70. package/dist/tsup/chunk-T5YCUGVS.js +1036 -0
  71. package/dist/tsup/chunk-T5YCUGVS.js.map +1 -0
  72. package/dist/tsup/{chunk-EJVBH5VF.cjs → chunk-TPGXWFQT.cjs} +3 -3
  73. package/dist/tsup/{chunk-EJVBH5VF.cjs.map → chunk-TPGXWFQT.cjs.map} +1 -1
  74. package/dist/tsup/{chunk-X35U3YNX.cjs → chunk-TYLXNCA5.cjs} +214 -339
  75. package/dist/tsup/chunk-TYLXNCA5.cjs.map +1 -0
  76. package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
  77. package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
  78. package/dist/tsup/chunk-XWBAQO5H.cjs +649 -0
  79. package/dist/tsup/chunk-XWBAQO5H.cjs.map +1 -0
  80. package/dist/tsup/chunk-YQ4LDVD6.cjs +5974 -0
  81. package/dist/tsup/chunk-YQ4LDVD6.cjs.map +1 -0
  82. package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
  83. package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
  84. package/dist/tsup/client/mod.cjs +9 -10
  85. package/dist/tsup/client/mod.cjs.map +1 -1
  86. package/dist/tsup/client/mod.d.cts +11 -5
  87. package/dist/tsup/client/mod.d.ts +11 -5
  88. package/dist/tsup/client/mod.js +8 -8
  89. package/dist/tsup/common/log.cjs +4 -4
  90. package/dist/tsup/common/log.d.cts +2 -2
  91. package/dist/tsup/common/log.d.ts +2 -2
  92. package/dist/tsup/common/log.js +3 -2
  93. package/dist/tsup/common/websocket.cjs +5 -5
  94. package/dist/tsup/common/websocket.js +4 -3
  95. package/dist/tsup/config-BFqid9Gr.d.ts +2574 -0
  96. package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
  97. package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
  98. package/dist/tsup/{config-CZB2-W8x.d.cts → config-CAZphOS1.d.cts} +681 -355
  99. package/dist/tsup/db/drizzle/mod.cjs +49 -0
  100. package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
  101. package/dist/tsup/db/drizzle/mod.d.cts +17 -0
  102. package/dist/tsup/db/drizzle/mod.d.ts +17 -0
  103. package/dist/tsup/db/drizzle/mod.js +49 -0
  104. package/dist/tsup/db/drizzle/mod.js.map +1 -0
  105. package/dist/tsup/db/mod.cjs +9 -0
  106. package/dist/tsup/db/mod.cjs.map +1 -0
  107. package/dist/tsup/db/mod.d.cts +9 -0
  108. package/dist/tsup/db/mod.d.ts +9 -0
  109. package/dist/tsup/db/mod.js +9 -0
  110. package/dist/tsup/db/mod.js.map +1 -0
  111. package/dist/tsup/{driver-D0QX9M11.d.ts → driver-Bxv62E2p.d.ts} +2 -2
  112. package/dist/tsup/{driver-q-zqG7fc.d.cts → driver-DYXwJR5D.d.cts} +2 -2
  113. package/dist/tsup/driver-helpers/mod.cjs +12 -6
  114. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  115. package/dist/tsup/driver-helpers/mod.d.cts +12 -5
  116. package/dist/tsup/driver-helpers/mod.d.ts +12 -5
  117. package/dist/tsup/driver-helpers/mod.js +12 -5
  118. package/dist/tsup/driver-test-suite/mod.cjs +1370 -116
  119. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  120. package/dist/tsup/driver-test-suite/mod.d.cts +10 -4
  121. package/dist/tsup/driver-test-suite/mod.d.ts +10 -4
  122. package/dist/tsup/driver-test-suite/mod.js +2093 -838
  123. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  124. package/dist/tsup/inspector/mod.cjs +29 -3
  125. package/dist/tsup/inspector/mod.cjs.map +1 -1
  126. package/dist/tsup/inspector/mod.d.cts +124 -3
  127. package/dist/tsup/inspector/mod.d.ts +124 -3
  128. package/dist/tsup/inspector/mod.js +72 -45
  129. package/dist/tsup/keys-CydblqMh.d.cts +13 -0
  130. package/dist/tsup/keys-CydblqMh.d.ts +13 -0
  131. package/dist/tsup/mod.cjs +16 -10
  132. package/dist/tsup/mod.cjs.map +1 -1
  133. package/dist/tsup/mod.d.cts +26 -14
  134. package/dist/tsup/mod.d.ts +26 -14
  135. package/dist/tsup/mod.js +20 -13
  136. package/dist/tsup/serve-test-suite/mod.cjs +1165 -83
  137. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  138. package/dist/tsup/serve-test-suite/mod.js +1114 -29
  139. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  140. package/dist/tsup/test/mod.cjs +84 -11
  141. package/dist/tsup/test/mod.cjs.map +1 -1
  142. package/dist/tsup/test/mod.d.cts +10 -5
  143. package/dist/tsup/test/mod.d.ts +10 -5
  144. package/dist/tsup/test/mod.js +85 -11
  145. package/dist/tsup/test/mod.js.map +1 -1
  146. package/dist/tsup/utils.cjs +10 -4
  147. package/dist/tsup/utils.cjs.map +1 -1
  148. package/dist/tsup/utils.d.cts +72 -2
  149. package/dist/tsup/utils.d.ts +72 -2
  150. package/dist/tsup/utils.js +9 -2
  151. package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
  152. package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
  153. package/dist/tsup/workflow/mod.cjs +16 -0
  154. package/dist/tsup/workflow/mod.cjs.map +1 -0
  155. package/dist/tsup/workflow/mod.d.cts +83 -0
  156. package/dist/tsup/workflow/mod.d.ts +83 -0
  157. package/dist/tsup/workflow/mod.js +16 -0
  158. package/dist/tsup/workflow/mod.js.map +1 -0
  159. package/package.json +62 -5
  160. package/src/actor/config.ts +478 -68
  161. package/src/actor/conn/mod.ts +68 -16
  162. package/src/actor/conn/state-manager.ts +2 -2
  163. package/src/actor/contexts/action.ts +20 -12
  164. package/src/actor/contexts/base/actor.ts +137 -7
  165. package/src/actor/contexts/base/conn-init.ts +27 -7
  166. package/src/actor/contexts/base/conn.ts +27 -18
  167. package/src/actor/contexts/before-action-response.ts +9 -2
  168. package/src/actor/contexts/before-connect.ts +7 -2
  169. package/src/actor/contexts/connect.ts +9 -2
  170. package/src/actor/contexts/create-conn-state.ts +7 -2
  171. package/src/actor/contexts/create-vars.ts +16 -3
  172. package/src/actor/contexts/create.ts +16 -3
  173. package/src/actor/contexts/destroy.ts +9 -3
  174. package/src/actor/contexts/disconnect.ts +10 -4
  175. package/src/actor/contexts/index.ts +4 -3
  176. package/src/actor/contexts/request.ts +23 -6
  177. package/src/actor/contexts/run.ts +47 -0
  178. package/src/actor/contexts/sleep.ts +9 -3
  179. package/src/actor/contexts/state-change.ts +9 -3
  180. package/src/actor/contexts/wake.ts +9 -3
  181. package/src/actor/contexts/websocket.ts +23 -6
  182. package/src/actor/database.ts +8 -18
  183. package/src/actor/definition.ts +20 -6
  184. package/src/actor/driver.ts +32 -3
  185. package/src/actor/errors.ts +127 -0
  186. package/src/actor/instance/connection-manager.ts +183 -80
  187. package/src/actor/instance/event-manager.ts +26 -15
  188. package/src/actor/instance/keys.ts +117 -0
  189. package/src/actor/instance/mod.ts +784 -174
  190. package/src/actor/instance/queue-manager.ts +603 -0
  191. package/src/actor/instance/queue.ts +287 -0
  192. package/src/actor/instance/schedule-manager.ts +49 -7
  193. package/src/actor/instance/state-manager.ts +35 -11
  194. package/src/actor/instance/traces-driver.ts +128 -0
  195. package/src/actor/mod.ts +26 -2
  196. package/src/actor/protocol/old.ts +28 -13
  197. package/src/actor/protocol/serde.ts +1 -1
  198. package/src/actor/router-endpoints.ts +177 -21
  199. package/src/actor/router-websocket-endpoints.ts +18 -29
  200. package/src/actor/router.ts +177 -0
  201. package/src/actor/schema.ts +291 -0
  202. package/src/actor/utils.ts +40 -0
  203. package/src/client/actor-common.ts +1 -1
  204. package/src/client/actor-conn.ts +100 -33
  205. package/src/client/actor-handle.ts +61 -33
  206. package/src/client/client.ts +2 -4
  207. package/src/client/config.ts +1 -1
  208. package/src/client/mod.browser.ts +2 -0
  209. package/src/client/mod.ts +1 -4
  210. package/src/client/queue.ts +146 -0
  211. package/src/client/utils.ts +1 -1
  212. package/src/common/log.ts +1 -1
  213. package/src/common/utils.ts +3 -3
  214. package/src/db/config.ts +100 -0
  215. package/src/db/drizzle/mod.ts +226 -0
  216. package/src/db/drizzle/sqlite-core.ts +22 -0
  217. package/src/db/mod.ts +125 -0
  218. package/src/db/shared.ts +92 -0
  219. package/src/db/sqlite-vfs.ts +12 -0
  220. package/src/driver-helpers/mod.ts +1 -0
  221. package/src/driver-test-suite/mod.ts +69 -43
  222. package/src/driver-test-suite/tests/access-control.ts +218 -0
  223. package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
  224. package/src/driver-test-suite/tests/actor-db.ts +394 -0
  225. package/src/driver-test-suite/tests/actor-inspector.ts +259 -358
  226. package/src/driver-test-suite/tests/actor-kv.ts +41 -20
  227. package/src/driver-test-suite/tests/actor-queue.ts +324 -0
  228. package/src/driver-test-suite/tests/actor-run.ts +181 -0
  229. package/src/driver-test-suite/tests/actor-schedule.ts +5 -2
  230. package/src/driver-test-suite/tests/actor-sleep.ts +3 -3
  231. package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
  232. package/src/driver-test-suite/tests/actor-workflow.ts +108 -0
  233. package/src/driver-test-suite/tests/manager-driver.ts +11 -0
  234. package/src/driver-test-suite/tests/raw-http-request-properties.ts +1 -1
  235. package/src/driver-test-suite/tests/raw-websocket.ts +12 -12
  236. package/src/drivers/default.ts +7 -2
  237. package/src/drivers/engine/actor-driver.ts +45 -37
  238. package/src/drivers/engine/config.ts +1 -1
  239. package/src/drivers/file-system/actor.ts +20 -2
  240. package/src/drivers/file-system/global-state.ts +569 -258
  241. package/src/drivers/file-system/kv-limits.ts +70 -0
  242. package/src/drivers/file-system/manager.ts +22 -6
  243. package/src/drivers/file-system/mod.ts +39 -16
  244. package/src/drivers/file-system/sqlite-runtime.ts +210 -0
  245. package/src/inspector/actor-inspector.ts +224 -102
  246. package/src/inspector/config.ts +1 -1
  247. package/src/inspector/handler.ts +102 -20
  248. package/src/inspector/mod.browser.ts +8 -0
  249. package/src/inspector/mod.ts +2 -0
  250. package/src/inspector/serve-ui.ts +40 -0
  251. package/src/inspector/transport.ts +18 -0
  252. package/src/inspector/utils.ts +5 -39
  253. package/src/manager/gateway.ts +1 -1
  254. package/src/manager/protocol/mod.ts +1 -1
  255. package/src/manager/protocol/query.ts +1 -1
  256. package/src/manager/router-schema.ts +1 -1
  257. package/src/manager/router.ts +38 -12
  258. package/src/manager-api/actors.ts +1 -1
  259. package/src/manager-api/common.ts +1 -1
  260. package/src/registry/config/driver.ts +1 -1
  261. package/src/registry/config/index.ts +212 -43
  262. package/src/registry/config/legacy-runner.ts +1 -1
  263. package/src/registry/config/runner.ts +1 -1
  264. package/src/registry/config/serverless.ts +1 -1
  265. package/src/registry/index.ts +7 -5
  266. package/src/remote-manager-driver/api-utils.ts +1 -1
  267. package/src/schemas/actor-inspector/mod.ts +1 -1
  268. package/src/schemas/actor-inspector/versioned.ts +195 -8
  269. package/src/schemas/actor-persist/versioned.ts +87 -7
  270. package/src/schemas/client-protocol/mod.ts +1 -1
  271. package/src/schemas/client-protocol/versioned.ts +127 -11
  272. package/src/schemas/client-protocol-zod/mod.ts +16 -1
  273. package/src/schemas/persist/mod.ts +1 -0
  274. package/src/schemas/transport/mod.ts +1 -0
  275. package/src/serde.ts +1 -1
  276. package/src/serve-test-suite/mod.ts +10 -9
  277. package/src/test/mod.ts +15 -56
  278. package/src/utils/endpoint-parser.test.ts +1 -1
  279. package/src/utils/endpoint-parser.ts +1 -1
  280. package/src/utils/env-vars.ts +12 -1
  281. package/src/utils/node.ts +15 -2
  282. package/src/utils.test.ts +34 -0
  283. package/src/utils.ts +140 -6
  284. package/src/workflow/constants.ts +2 -0
  285. package/src/workflow/context.ts +532 -0
  286. package/src/workflow/driver.ts +191 -0
  287. package/src/workflow/inspector.ts +268 -0
  288. package/src/workflow/mod.ts +122 -0
  289. package/dist/tsup/chunk-2IJTYN6K.cjs +0 -278
  290. package/dist/tsup/chunk-2IJTYN6K.cjs.map +0 -1
  291. package/dist/tsup/chunk-2XQS746M.cjs.map +0 -1
  292. package/dist/tsup/chunk-3VP5CSHV.cjs +0 -114
  293. package/dist/tsup/chunk-3VP5CSHV.cjs.map +0 -1
  294. package/dist/tsup/chunk-AQFSQMBG.js +0 -114
  295. package/dist/tsup/chunk-AQFSQMBG.js.map +0 -1
  296. package/dist/tsup/chunk-E6ZE2YEA.js +0 -664
  297. package/dist/tsup/chunk-E6ZE2YEA.js.map +0 -1
  298. package/dist/tsup/chunk-FJ3KTN4V.js.map +0 -1
  299. package/dist/tsup/chunk-GBENOENJ.cjs +0 -8
  300. package/dist/tsup/chunk-GBENOENJ.cjs.map +0 -1
  301. package/dist/tsup/chunk-GD7UXGOE.cjs +0 -4762
  302. package/dist/tsup/chunk-GD7UXGOE.cjs.map +0 -1
  303. package/dist/tsup/chunk-GMAVRZSF.js.map +0 -1
  304. package/dist/tsup/chunk-H4TB4X25.cjs.map +0 -1
  305. package/dist/tsup/chunk-JDAD2YFA.js.map +0 -1
  306. package/dist/tsup/chunk-KCOVZOPS.js +0 -1946
  307. package/dist/tsup/chunk-KCOVZOPS.js.map +0 -1
  308. package/dist/tsup/chunk-KDFWJKMJ.cjs +0 -664
  309. package/dist/tsup/chunk-KDFWJKMJ.cjs.map +0 -1
  310. package/dist/tsup/chunk-LFVF5SCU.js.map +0 -1
  311. package/dist/tsup/chunk-Q6W7RJJP.js.map +0 -1
  312. package/dist/tsup/chunk-RUW5CZ5Z.cjs +0 -1949
  313. package/dist/tsup/chunk-RUW5CZ5Z.cjs.map +0 -1
  314. package/dist/tsup/chunk-RZW2DNND.cjs.map +0 -1
  315. package/dist/tsup/chunk-TCOEBUUE.js +0 -278
  316. package/dist/tsup/chunk-TCOEBUUE.js.map +0 -1
  317. package/dist/tsup/chunk-X35U3YNX.cjs.map +0 -1
  318. package/dist/tsup/keys-Chhy4ylv.d.cts +0 -8
  319. package/dist/tsup/keys-Chhy4ylv.d.ts +0 -8
  320. package/dist/tsup/v1-Gq4avTK3.d.cts +0 -240
  321. package/dist/tsup/v1-Gq4avTK3.d.ts +0 -240
  322. /package/dist/tsup/{chunk-XXGJCOL6.js.map → chunk-A6YIZWTK.js.map} +0 -0
@@ -1,11 +1,11 @@
1
- import { serve as honoServe } from "@hono/node-server";
2
- import { createNodeWebSocket } from "@hono/node-ws";
3
1
  import { createServer } from "node:net";
4
2
  import { fileURLToPath } from "node:url";
3
+ import { serve as honoServe } from "@hono/node-server";
4
+ import { createNodeWebSocket } from "@hono/node-ws";
5
5
  import invariant from "invariant";
6
- import { buildManagerRouter } from "@/manager/router";
7
- import { createFileSystemOrMemoryDriver } from "@/drivers/file-system/mod";
8
6
  import { logger } from "@/driver-test-suite/log";
7
+ import { createFileSystemOrMemoryDriver } from "@/drivers/file-system/mod";
8
+ import { buildManagerRouter } from "@/manager/router";
9
9
  import { registry } from "../../fixtures/driver-test-suite/registry";
10
10
 
11
11
  export interface ServeTestSuiteResult {
@@ -74,10 +74,9 @@ export async function serveTestSuite(): Promise<ServeTestSuiteResult> {
74
74
  publicEndpoint: `http://127.0.0.1:${port}`,
75
75
  };
76
76
 
77
- const driver = await createFileSystemOrMemoryDriver(
78
- true,
79
- `/tmp/rivetkit-test-suite-${crypto.randomUUID()}`,
80
- );
77
+ const driver = await createFileSystemOrMemoryDriver(true, {
78
+ path: `/tmp/rivetkit-test-suite-${crypto.randomUUID()}`,
79
+ });
81
80
  registry.config.driver = driver;
82
81
 
83
82
  let upgradeWebSocket: any;
@@ -114,7 +113,9 @@ export async function serveTestSuite(): Promise<ServeTestSuiteResult> {
114
113
  namespace: "default",
115
114
  runnerName: "default",
116
115
  close: async () => {
117
- await new Promise((resolve) => server.close(() => resolve(undefined)));
116
+ await new Promise((resolve) =>
117
+ server.close(() => resolve(undefined)),
118
+ );
118
119
  },
119
120
  };
120
121
  }
package/src/test/mod.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { createServer } from "node:net";
2
1
  import { serve as honoServe } from "@hono/node-server";
3
2
  import { createNodeWebSocket } from "@hono/node-ws";
4
3
  import invariant from "invariant";
@@ -24,9 +23,9 @@ export async function setupTest<A extends Registry<any>>(
24
23
  registry.config.test = { ...registry.config.test, enabled: true };
25
24
 
26
25
  // Create driver
27
- const driver = await createFileSystemOrMemoryDriver(
26
+ const driver = createFileSystemOrMemoryDriver(
28
27
  true,
29
- `/tmp/rivetkit-test-${crypto.randomUUID()}`,
28
+ { path: `/tmp/rivetkit-test-${crypto.randomUUID()}` },
30
29
  );
31
30
 
32
31
  // Build driver config
@@ -42,6 +41,8 @@ export async function setupTest<A extends Registry<any>>(
42
41
  const parsedConfig = registry.parseConfig();
43
42
  const managerDriver = driver.manager?.(parsedConfig);
44
43
  invariant(managerDriver, "missing manager driver");
44
+ const getUpgradeWebSocket = () => upgradeWebSocket;
45
+ managerDriver.setGetUpgradeWebSocket(getUpgradeWebSocket);
45
46
  // const internalClient = createClientWithDriver(
46
47
  // managerDriver,
47
48
  // ClientConfigSchema.parse({}),
@@ -49,7 +50,7 @@ export async function setupTest<A extends Registry<any>>(
49
50
  const { router } = buildManagerRouter(
50
51
  parsedConfig,
51
52
  managerDriver,
52
- () => upgradeWebSocket!,
53
+ getUpgradeWebSocket,
53
54
  );
54
55
 
55
56
  // Inject WebSocket
@@ -58,17 +59,24 @@ export async function setupTest<A extends Registry<any>>(
58
59
 
59
60
  // TODO: I think this whole function is fucked, we should probably switch to calling registry.serve() directly
60
61
  // Start server
61
- const port = await getPort();
62
62
  const server = honoServe({
63
63
  fetch: router.fetch,
64
64
  hostname: "127.0.0.1",
65
- port,
65
+ port: 0,
66
66
  });
67
+ if (!server.listening) {
68
+ await new Promise<void>((resolve) => {
69
+ server.once("listening", () => resolve());
70
+ });
71
+ }
67
72
  invariant(
68
73
  nodeWebSocket.injectWebSocket !== undefined,
69
74
  "should have injectWebSocket",
70
75
  );
71
76
  nodeWebSocket.injectWebSocket(server);
77
+ const address = server.address();
78
+ invariant(address && typeof address !== "string", "missing server address");
79
+ const port = address.port;
72
80
  const endpoint = `http://127.0.0.1:${port}`;
73
81
 
74
82
  logger().info({ msg: "test server listening", port });
@@ -83,58 +91,9 @@ export async function setupTest<A extends Registry<any>>(
83
91
  endpoint,
84
92
  namespace: "default",
85
93
  runnerName: "default",
94
+ disableMetadataLookup: true,
86
95
  });
87
96
  c.onTestFinished(async () => await client.dispose());
88
97
 
89
98
  return { client };
90
99
  }
91
-
92
- export async function getPort(): Promise<number> {
93
- // Pick random port between 10000 and 65535 (avoiding well-known and registered ports)
94
- const MIN_PORT = 10000;
95
- const MAX_PORT = 65535;
96
- const getRandomPort = () =>
97
- Math.floor(Math.random() * (MAX_PORT - MIN_PORT + 1)) + MIN_PORT;
98
-
99
- let port = getRandomPort();
100
- let maxAttempts = 10;
101
-
102
- while (maxAttempts > 0) {
103
- try {
104
- // Try to create a server on the port to check if it's available
105
- const server = await new Promise<any>((resolve, reject) => {
106
- const server = createServer();
107
-
108
- server.once("error", (err: Error & { code?: string }) => {
109
- if (err.code === "EADDRINUSE") {
110
- reject(new Error(`Port ${port} is in use`));
111
- } else {
112
- reject(err);
113
- }
114
- });
115
-
116
- server.once("listening", () => {
117
- resolve(server);
118
- });
119
-
120
- server.listen(port);
121
- });
122
-
123
- // Close the server since we're just checking availability
124
- await new Promise<void>((resolve) => {
125
- server.close(() => resolve());
126
- });
127
-
128
- return port;
129
- } catch (err) {
130
- // If port is in use, try a different one
131
- maxAttempts--;
132
- if (maxAttempts <= 0) {
133
- break;
134
- }
135
- port = getRandomPort();
136
- }
137
- }
138
-
139
- throw new Error("Could not find an available port after multiple attempts");
140
- }
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, test } from "vitest";
2
- import type { z } from "zod";
2
+ import type { z } from "zod/v4";
3
3
  import { tryParseEndpoint } from "./endpoint-parser";
4
4
 
5
5
  // Helper to create a mock Zod refinement context for testing
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v4";
2
2
 
3
3
  export interface ParsedEndpoint {
4
4
  endpoint: string;
@@ -1,7 +1,7 @@
1
1
  // This file consolidates all environment variables that affect RivetKit's behavior.
2
2
  //
3
3
  // IMPORTANT: When adding or modifying environment variables here, also update the
4
- // documentation at: docs/general/registry-configuration.mdx
4
+ // documentation at: website/src/content/docs/general/environment-variables.mdx
5
5
 
6
6
  import { getEnvUniversal } from "@/utils";
7
7
 
@@ -44,6 +44,8 @@ export const getRivetkitInspectorToken = (): string | undefined =>
44
44
  getEnvUniversal("RIVET_INSPECTOR_TOKEN");
45
45
  export const getRivetkitInspectorDisable = (): boolean =>
46
46
  getEnvUniversal("RIVET_INSPECTOR_DISABLE") === "1";
47
+ export const getRivetkitStoragePath = (): string | undefined =>
48
+ getEnvUniversal("RIVETKIT_STORAGE_PATH");
47
49
 
48
50
  // Logging configuration
49
51
  // DEPRECATED: LOG_LEVEL will be removed in a future version
@@ -65,3 +67,12 @@ export const getNodeEnv = (): string | undefined => getEnvUniversal("NODE_ENV");
65
67
  export const getNextPhase = (): string | undefined =>
66
68
  getEnvUniversal("NEXT_PHASE");
67
69
  export const isDev = (): boolean => getNodeEnv() !== "production";
70
+
71
+ // Experimental
72
+ /**
73
+ * Enables experimental OTel tracing for Rivet Actors.
74
+ *
75
+ * When disabled, actors use an in-memory no-op traces implementation.
76
+ */
77
+ export const getRivetExperimentalOtel = (): boolean =>
78
+ getEnvUniversal("RIVET_EXPERIMENTAL_OTEL") === "1";
package/src/utils/node.ts CHANGED
@@ -16,13 +16,14 @@ let nodePath: typeof import("node:path") | undefined;
16
16
  let nodeOs: typeof import("node:os") | undefined;
17
17
  let nodeChildProcess: typeof import("node:child_process") | undefined;
18
18
  let nodeStream: typeof import("node:stream/promises") | undefined;
19
+ let nodeUrl: typeof import("node:url") | undefined;
19
20
 
20
21
  let hasImportedDependencies = false;
21
22
 
22
23
  // Helper to get a require function that works in both CommonJS and ESM.
23
24
  // We use require() instead of await import() because registry.start() cannot
24
25
  // be async and needs immediate access to Node.js modules during setup.
25
- function getRequireFn() {
26
+ export function getRequireFn() {
26
27
  // TODO: This causes issues in tsup
27
28
  // CommonJS context - use global require
28
29
  // if (typeof require !== "undefined") {
@@ -62,7 +63,7 @@ export function importNodeDependencies(): void {
62
63
  nodeStream = requireFn(
63
64
  /* webpackIgnore: true */ "node:stream/promises",
64
65
  );
65
-
66
+ nodeUrl = requireFn(/* webpackIgnore: true */ "node:url");
66
67
  hasImportedDependencies = true;
67
68
  } catch (err) {
68
69
  console.warn(
@@ -163,3 +164,15 @@ export function getNodeStream(): typeof import("node:stream/promises") {
163
164
  }
164
165
  return nodeStream;
165
166
  }
167
+
168
+ /**
169
+ * Gets the Node.js url module lazily.
170
+ */
171
+ export function getNodeUrl(): typeof import("node:url") {
172
+ if (!nodeUrl) {
173
+ throw new Error(
174
+ "Node url module not loaded. Ensure importNodeDependencies() has been called.",
175
+ );
176
+ }
177
+ return nodeUrl;
178
+ }
@@ -0,0 +1,34 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { joinSignals } from "./utils";
3
+
4
+ describe("joinSignals", () => {
5
+ test("returns a non-aborted signal when no inputs are provided", () => {
6
+ const signal = joinSignals();
7
+ expect(signal.aborted).toBe(false);
8
+ });
9
+
10
+ test("returns the same signal when only one input is provided", () => {
11
+ const controller = new AbortController();
12
+ const signal = joinSignals(controller.signal);
13
+ expect(signal).toBe(controller.signal);
14
+ });
15
+
16
+ test("aborts immediately when any input signal is already aborted", () => {
17
+ const controllerA = new AbortController();
18
+ const controllerB = new AbortController();
19
+ controllerA.abort("already-aborted");
20
+
21
+ const signal = joinSignals(controllerA.signal, controllerB.signal);
22
+ expect(signal.aborted).toBe(true);
23
+ });
24
+
25
+ test("aborts when one of the joined signals aborts", () => {
26
+ const controllerA = new AbortController();
27
+ const controllerB = new AbortController();
28
+ const signal = joinSignals(controllerA.signal, controllerB.signal);
29
+
30
+ expect(signal.aborted).toBe(false);
31
+ controllerB.abort("stopped");
32
+ expect(signal.aborted).toBe(true);
33
+ });
34
+ });
package/src/utils.ts CHANGED
@@ -1,11 +1,103 @@
1
- export { stringifyError } from "@/common/utils";
2
- export { assertUnreachable } from "./common/utils";
3
-
1
+ import { stringifyError } from "@/common/utils";
4
2
  import type { Context as HonoContext, Handler as HonoHandler } from "hono";
5
3
  import { stringify as uuidstringify } from "uuid";
6
- import { stringifyError } from "@/common/utils";
7
4
  import pkgJson from "../package.json" with { type: "json" };
8
5
  import { getLogger } from "./common/log";
6
+ import { assertUnreachable } from "./common/utils";
7
+
8
+ /** @experimental */
9
+ export { stringifyError };
10
+
11
+ /** @experimental */
12
+ export { assertUnreachable };
13
+
14
+ /**
15
+ * Joins multiple abort signals into one.
16
+ *
17
+ * The returned signal aborts when the first input signal aborts.
18
+ * Uses `AbortSignal.any(...)` when available, with a runtime fallback.
19
+ *
20
+ * @experimental
21
+ */
22
+ export function joinSignals(
23
+ ...signals: Array<AbortSignal | undefined | null>
24
+ ): AbortSignal {
25
+ const validSignals = signals.filter(
26
+ (signal): signal is AbortSignal => signal != null,
27
+ );
28
+
29
+ if (validSignals.length === 0) {
30
+ return new AbortController().signal;
31
+ }
32
+
33
+ if (validSignals.length === 1) {
34
+ return validSignals[0];
35
+ }
36
+
37
+ const signalAny = (
38
+ AbortSignal as typeof AbortSignal & {
39
+ any?: (signals: AbortSignal[]) => AbortSignal;
40
+ }
41
+ ).any;
42
+ if (typeof signalAny === "function") {
43
+ return signalAny(validSignals);
44
+ }
45
+
46
+ const controller = new AbortController();
47
+ const cleanups: Array<() => void> = [];
48
+
49
+ const abortWithSignal = (signal: AbortSignal) => {
50
+ if (controller.signal.aborted) {
51
+ return;
52
+ }
53
+
54
+ for (const cleanup of cleanups) {
55
+ cleanup();
56
+ }
57
+
58
+ const reason = (signal as AbortSignal & { reason?: unknown }).reason;
59
+ controller.abort(reason);
60
+ };
61
+
62
+ for (const signal of validSignals) {
63
+ if (signal.aborted) {
64
+ abortWithSignal(signal);
65
+ break;
66
+ }
67
+
68
+ const onAbort = () => abortWithSignal(signal);
69
+ signal.addEventListener("abort", onAbort, { once: true });
70
+ cleanups.push(() => signal.removeEventListener("abort", onAbort));
71
+ }
72
+
73
+ return controller.signal;
74
+ }
75
+
76
+ /**
77
+ * Returns a promise that resolves after the given number of milliseconds.
78
+ *
79
+ * @experimental
80
+ */
81
+ export function sleep(ms: number): Promise<void> {
82
+ return new Promise<void>((resolve) => setTimeout(resolve, ms));
83
+ }
84
+
85
+ /**
86
+ * Creates a fixed-rate interval tick function that can be awaited in a loop.
87
+ *
88
+ * @example
89
+ * const tick = interval(100);
90
+ * while (!c.aborted) {
91
+ * await tick();
92
+ * if (c.aborted) break;
93
+ * // ... game logic
94
+ * }
95
+ *
96
+ * @experimental
97
+ */
98
+ export function interval(ms: number): () => Promise<void> {
99
+ return () => sleep(ms);
100
+ }
9
101
 
10
102
  export const VERSION = pkgJson.version;
11
103
 
@@ -15,6 +107,11 @@ function logger() {
15
107
  return getLogger("utils");
16
108
  }
17
109
 
110
+ /**
111
+ * Builds the HTTP user agent used by this library.
112
+ *
113
+ * @experimental
114
+ */
18
115
  export function httpUserAgent(): string {
19
116
  // Return cached value if already initialized
20
117
  if (_userAgent !== undefined) {
@@ -40,6 +137,11 @@ export type UpgradeWebSocket = (
40
137
 
41
138
  export type GetUpgradeWebSocket = () => UpgradeWebSocket;
42
139
 
140
+ /**
141
+ * Reads an environment variable from Deno or Node runtimes.
142
+ *
143
+ * @experimental
144
+ */
43
145
  export function getEnvUniversal(key: string): string | undefined {
44
146
  if (typeof Deno !== "undefined") {
45
147
  return Deno.env.get(key);
@@ -49,6 +151,11 @@ export function getEnvUniversal(key: string): string | undefined {
49
151
  }
50
152
  }
51
153
 
154
+ /**
155
+ * Traces a debug value and returns it.
156
+ *
157
+ * @experimental
158
+ */
52
159
  export function dbg<T>(x: T): T {
53
160
  console.trace(`=== DEBUG ===\n${x}`);
54
161
  return x;
@@ -60,6 +167,8 @@ export function dbg<T>(x: T): T {
60
167
  *
61
168
  * @param data - The ArrayBuffer or ArrayBufferView to convert
62
169
  * @returns A Uint8Array view of the data
170
+ *
171
+ * @experimental
63
172
  */
64
173
  export function toUint8Array(data: ArrayBuffer | ArrayBufferView): Uint8Array {
65
174
  if (data instanceof Uint8Array) {
@@ -93,8 +202,10 @@ export type LongTimeoutHandle = { abort: () => void };
93
202
  * Polyfill for Promise.withResolvers().
94
203
  *
95
204
  * This is specifically for Cloudflare Workers. Their implementation of Promise.withResolvers does not work correctly.
205
+ *
206
+ * @experimental
96
207
  */
97
- export function promiseWithResolvers<T>(): {
208
+ export function promiseWithResolvers<T>(onReject: (reason?: any) => void): {
98
209
  promise: Promise<T>;
99
210
  resolve: (value: T | PromiseLike<T>) => void;
100
211
  reject: (reason?: any) => void;
@@ -105,9 +216,15 @@ export function promiseWithResolvers<T>(): {
105
216
  resolve = res;
106
217
  reject = rej;
107
218
  });
219
+ promise.catch(onReject);
108
220
  return { promise, resolve, reject };
109
221
  }
110
222
 
223
+ /**
224
+ * Sets a timeout that supports delays larger than the JavaScript timer limit.
225
+ *
226
+ * @experimental
227
+ */
111
228
  export function setLongTimeout(
112
229
  listener: () => void,
113
230
  after: number,
@@ -155,7 +272,7 @@ export class SinglePromiseQueue {
155
272
 
156
273
  // Ensure a shared resolver exists for all callers in this cycle
157
274
  if (!this.#pending) {
158
- this.#pending = promiseWithResolvers<void>();
275
+ this.#pending = promiseWithResolvers<void>((reason) => logger().warn({ msg: "unhandled single promise queue rejection", reason }));
159
276
  }
160
277
 
161
278
  const waitForThisCycle = this.#pending.promise;
@@ -199,6 +316,11 @@ export class SinglePromiseQueue {
199
316
  }
200
317
  }
201
318
 
319
+ /**
320
+ * Converts a Buffer or Uint8Array into an ArrayBuffer view.
321
+ *
322
+ * @experimental
323
+ */
202
324
  export function bufferToArrayBuffer(buf: Buffer | Uint8Array): ArrayBuffer {
203
325
  return buf.buffer.slice(
204
326
  buf.byteOffset,
@@ -221,6 +343,8 @@ export function bufferToArrayBuffer(buf: Buffer | Uint8Array): ArrayBuffer {
221
343
  * @param path The path to append to the endpoint (may include query parameters)
222
344
  * @param queryParams Optional additional query parameters to append
223
345
  * @returns The properly combined URL string
346
+ *
347
+ * @experimental
224
348
  */
225
349
  export function combineUrlPath(
226
350
  endpoint: string,
@@ -259,6 +383,11 @@ export function combineUrlPath(
259
383
  return `${baseUrl.protocol}//${baseUrl.host}${fullPath}${fullQuery}`;
260
384
  }
261
385
 
386
+ /**
387
+ * Compares two ArrayBuffer values by byte content.
388
+ *
389
+ * @experimental
390
+ */
262
391
  export function arrayBuffersEqual(
263
392
  buf1: ArrayBuffer,
264
393
  buf2: ArrayBuffer,
@@ -282,6 +411,11 @@ export const EXTRA_ERROR_LOG = {
282
411
 
283
412
  export type Runtime = "deno" | "bun" | "node";
284
413
 
414
+ /**
415
+ * Detects the current JavaScript runtime from the user agent.
416
+ *
417
+ * @experimental
418
+ */
285
419
  export function detectRuntime(): Runtime {
286
420
  const userAgent =
287
421
  typeof navigator !== "undefined" ? navigator.userAgent : "";
@@ -0,0 +1,2 @@
1
+ export const WORKFLOW_GUARD_KV_KEY =
2
+ "__rivet_actor_workflow_guard_triggered";