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,37 +1,157 @@
1
1
  import {
2
2
  hibernationActor,
3
3
  logger,
4
+ runWithEarlyExit,
5
+ runWithError,
6
+ runWithQueueConsumer,
7
+ runWithTicks,
8
+ runWithoutHandler,
4
9
  sleep,
5
10
  sleepWithLongRpc,
6
11
  sleepWithNoSleepOption,
7
12
  sleepWithRawHttp,
8
- sleepWithRawWebSocket
9
- } from "../chunk-TCOEBUUE.js";
13
+ sleepWithRawWebSocket,
14
+ workflowAccessActor,
15
+ workflowCounterActor,
16
+ workflowQueueActor,
17
+ workflowSleepActor,
18
+ workflowStopTeardownActor
19
+ } from "../chunk-OMEPCQK2.js";
20
+ import "../chunk-7K4CYDGD.js";
21
+ import "../chunk-IVG73YCW.js";
22
+ import {
23
+ db as db2,
24
+ integer,
25
+ mod_exports,
26
+ sqliteTable,
27
+ text
28
+ } from "../chunk-VKVNIQRQ.js";
10
29
  import {
11
30
  actor,
31
+ event,
32
+ queue,
12
33
  setup
13
- } from "../chunk-JDAD2YFA.js";
34
+ } from "../chunk-5ESWDTHJ.js";
14
35
  import {
15
36
  createFileSystemOrMemoryDriver
16
- } from "../chunk-KCOVZOPS.js";
17
- import "../chunk-Q6W7RJJP.js";
18
- import "../chunk-XXGJCOL6.js";
37
+ } from "../chunk-MZ37VV3P.js";
38
+ import "../chunk-DIGBC2VI.js";
39
+ import "../chunk-A6YIZWTK.js";
40
+ import {
41
+ db
42
+ } from "../chunk-KJSYAUOM.js";
43
+ import "../chunk-N4KRDJ56.js";
19
44
  import {
20
45
  buildManagerRouter
21
- } from "../chunk-GMAVRZSF.js";
22
- import "../chunk-E6ZE2YEA.js";
23
- import "../chunk-FJ3KTN4V.js";
46
+ } from "../chunk-M2T62AZQ.js";
47
+ import "../chunk-LXUQ667X.js";
48
+ import "../chunk-T5YCUGVS.js";
49
+ import "../chunk-6LIBPELE.js";
24
50
  import {
25
51
  UserError
26
- } from "../chunk-LFVF5SCU.js";
52
+ } from "../chunk-7HTNH26M.js";
53
+ import "../chunk-424PT5DM.js";
27
54
 
28
55
  // src/serve-test-suite/mod.ts
29
- import { serve as honoServe } from "@hono/node-server";
30
- import { createNodeWebSocket } from "@hono/node-ws";
31
56
  import { createServer } from "net";
32
57
  import { fileURLToPath } from "url";
58
+ import { serve as honoServe } from "@hono/node-server";
59
+ import { createNodeWebSocket } from "@hono/node-ws";
33
60
  import invariant from "invariant";
34
61
 
62
+ // fixtures/driver-test-suite/access-control.ts
63
+ import { Forbidden } from "rivetkit/errors";
64
+ var accessControlEvents = {
65
+ allowedEvent: event({
66
+ canSubscribe: (c) => {
67
+ c.state.lastCanSubscribeConnId = c.conn.id;
68
+ return true;
69
+ }
70
+ }),
71
+ blockedEvent: event({
72
+ canSubscribe: (c) => {
73
+ c.state.lastCanSubscribeConnId = c.conn.id;
74
+ return false;
75
+ }
76
+ })
77
+ };
78
+ var accessControlQueues = {
79
+ allowedQueue: queue({
80
+ canPublish: (c) => {
81
+ c.state.lastCanPublishConnId = c.conn.id;
82
+ return true;
83
+ }
84
+ }),
85
+ blockedQueue: queue({
86
+ canPublish: (c) => {
87
+ c.state.lastCanPublishConnId = c.conn.id;
88
+ return false;
89
+ }
90
+ })
91
+ };
92
+ var accessControlActor = actor({
93
+ state: {
94
+ lastCanPublishConnId: "",
95
+ lastCanSubscribeConnId: ""
96
+ },
97
+ events: accessControlEvents,
98
+ queues: accessControlQueues,
99
+ onBeforeConnect: (_c, params) => {
100
+ if ((params == null ? void 0 : params.allowRequest) === false || (params == null ? void 0 : params.allowWebSocket) === false) {
101
+ throw new Forbidden();
102
+ }
103
+ },
104
+ onRequest(_c, request) {
105
+ const url = new URL(request.url);
106
+ if (url.pathname === "/status") {
107
+ return Response.json({ ok: true });
108
+ }
109
+ return new Response("Not Found", { status: 404 });
110
+ },
111
+ onWebSocket(_c, websocket) {
112
+ websocket.send(JSON.stringify({ type: "welcome" }));
113
+ },
114
+ actions: {
115
+ allowedAction: (_c, value) => {
116
+ return `allowed:${value}`;
117
+ },
118
+ allowedGetLastCanPublishConnId: (c) => {
119
+ return c.state.lastCanPublishConnId;
120
+ },
121
+ allowedGetLastCanSubscribeConnId: (c) => {
122
+ return c.state.lastCanSubscribeConnId;
123
+ },
124
+ allowedReceiveQueue: async (c) => {
125
+ const [message] = await c.queue.tryNext({
126
+ names: ["allowedQueue"]
127
+ });
128
+ return (message == null ? void 0 : message.body) ?? null;
129
+ },
130
+ allowedReceiveAnyQueue: async (c) => {
131
+ const [message] = await c.queue.tryNext();
132
+ return (message == null ? void 0 : message.body) ?? null;
133
+ },
134
+ allowedBroadcastAllowedEvent: (c, value) => {
135
+ c.broadcast("allowedEvent", { value });
136
+ },
137
+ allowedBroadcastBlockedEvent: (c, value) => {
138
+ c.broadcast("blockedEvent", { value });
139
+ },
140
+ allowedBroadcastUndefinedEvent: (c, value) => {
141
+ c.broadcast("undefinedEvent", { value });
142
+ }
143
+ }
144
+ });
145
+ var accessControlNoQueuesActor = actor({
146
+ state: {},
147
+ actions: {
148
+ readAnyQueue: async (c) => {
149
+ const [message] = await c.queue.tryNext();
150
+ return (message == null ? void 0 : message.body) ?? null;
151
+ }
152
+ }
153
+ });
154
+
35
155
  // fixtures/driver-test-suite/action-inputs.ts
36
156
  var inputActor = actor({
37
157
  createState: (c, input) => {
@@ -178,6 +298,680 @@ var promiseActor = actor({
178
298
  }
179
299
  });
180
300
 
301
+ // fixtures/driver-test-suite/actor-db-raw.ts
302
+ function firstRowValue(row) {
303
+ if (!row) {
304
+ return void 0;
305
+ }
306
+ const values = Object.values(row);
307
+ return values.length > 0 ? values[0] : void 0;
308
+ }
309
+ function toSafeInteger(value) {
310
+ if (typeof value === "bigint") {
311
+ return Number(value);
312
+ }
313
+ if (typeof value === "number") {
314
+ return Number.isFinite(value) ? Math.trunc(value) : 0;
315
+ }
316
+ if (typeof value === "string") {
317
+ const parsed = Number.parseInt(value, 10);
318
+ return Number.isFinite(parsed) ? parsed : 0;
319
+ }
320
+ return 0;
321
+ }
322
+ function normalizeRowIds(rowIds) {
323
+ const normalized = rowIds.map((id) => Math.trunc(id)).filter((id) => Number.isFinite(id) && id > 0);
324
+ return Array.from(new Set(normalized));
325
+ }
326
+ function makePayload(size) {
327
+ const normalizedSize = Math.max(0, Math.trunc(size));
328
+ return "x".repeat(normalizedSize);
329
+ }
330
+ var dbActorRaw = actor({
331
+ state: {
332
+ disconnectInsertEnabled: false,
333
+ disconnectInsertDelayMs: 0
334
+ },
335
+ db: db({
336
+ onMigrate: async (db3) => {
337
+ await db3.execute(`
338
+ CREATE TABLE IF NOT EXISTS test_data (
339
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
340
+ value TEXT NOT NULL,
341
+ payload TEXT NOT NULL DEFAULT '',
342
+ created_at INTEGER NOT NULL
343
+ )
344
+ `);
345
+ }
346
+ }),
347
+ onDisconnect: async (c) => {
348
+ if (!c.state.disconnectInsertEnabled) {
349
+ return;
350
+ }
351
+ if (c.state.disconnectInsertDelayMs > 0) {
352
+ await new Promise(
353
+ (resolve) => setTimeout(resolve, c.state.disconnectInsertDelayMs)
354
+ );
355
+ }
356
+ await c.db.execute(
357
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('__disconnect__', '', ${Date.now()})`
358
+ );
359
+ },
360
+ actions: {
361
+ configureDisconnectInsert: (c, enabled, delayMs) => {
362
+ c.state.disconnectInsertEnabled = enabled;
363
+ c.state.disconnectInsertDelayMs = Math.max(
364
+ 0,
365
+ Math.floor(delayMs)
366
+ );
367
+ },
368
+ getDisconnectInsertCount: async (c) => {
369
+ var _a;
370
+ const results = await c.db.execute(
371
+ `SELECT COUNT(*) as count FROM test_data WHERE value = '__disconnect__'`
372
+ );
373
+ return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
374
+ },
375
+ reset: async (c) => {
376
+ await c.db.execute(`DELETE FROM test_data`);
377
+ },
378
+ insertValue: async (c, value) => {
379
+ await c.db.execute(
380
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()})`
381
+ );
382
+ const results = await c.db.execute(
383
+ `SELECT last_insert_rowid() as id`
384
+ );
385
+ return { id: results[0].id };
386
+ },
387
+ getValues: async (c) => {
388
+ const results = await c.db.execute(
389
+ `SELECT * FROM test_data ORDER BY id`
390
+ );
391
+ return results;
392
+ },
393
+ getValue: async (c, id) => {
394
+ var _a;
395
+ const results = await c.db.execute(
396
+ `SELECT value FROM test_data WHERE id = ${id}`
397
+ );
398
+ return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
399
+ },
400
+ getCount: async (c) => {
401
+ const results = await c.db.execute(
402
+ `SELECT COUNT(*) as count FROM test_data`
403
+ );
404
+ return results[0].count;
405
+ },
406
+ rawSelectCount: async (c) => {
407
+ const results = await c.db.execute(
408
+ `SELECT COUNT(*) as count FROM test_data`
409
+ );
410
+ return results[0].count;
411
+ },
412
+ insertMany: async (c, count) => {
413
+ if (count <= 0) {
414
+ return { count: 0 };
415
+ }
416
+ const now = Date.now();
417
+ const values = [];
418
+ for (let i = 0; i < count; i++) {
419
+ values.push(`('User ${i}', '', ${now})`);
420
+ }
421
+ await c.db.execute(
422
+ `INSERT INTO test_data (value, payload, created_at) VALUES ${values.join(", ")}`
423
+ );
424
+ return { count };
425
+ },
426
+ updateValue: async (c, id, value) => {
427
+ await c.db.execute(
428
+ `UPDATE test_data SET value = '${value}' WHERE id = ${id}`
429
+ );
430
+ return { success: true };
431
+ },
432
+ deleteValue: async (c, id) => {
433
+ await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
434
+ },
435
+ transactionCommit: async (c, value) => {
436
+ await c.db.execute(
437
+ `BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); COMMIT;`
438
+ );
439
+ },
440
+ transactionRollback: async (c, value) => {
441
+ await c.db.execute(
442
+ `BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); ROLLBACK;`
443
+ );
444
+ },
445
+ insertPayloadOfSize: async (c, size) => {
446
+ const payload = "x".repeat(size);
447
+ await c.db.execute(
448
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('payload', '${payload}', ${Date.now()})`
449
+ );
450
+ const results = await c.db.execute(
451
+ `SELECT last_insert_rowid() as id`
452
+ );
453
+ return { id: results[0].id, size };
454
+ },
455
+ getPayloadSize: async (c, id) => {
456
+ var _a;
457
+ const results = await c.db.execute(
458
+ `SELECT length(payload) as size FROM test_data WHERE id = ${id}`
459
+ );
460
+ return ((_a = results[0]) == null ? void 0 : _a.size) ?? 0;
461
+ },
462
+ insertPayloadRows: async (c, count, payloadSize) => {
463
+ const normalizedCount = Math.max(0, Math.trunc(count));
464
+ if (normalizedCount === 0) {
465
+ return { count: 0 };
466
+ }
467
+ const payload = makePayload(payloadSize);
468
+ const now = Date.now();
469
+ for (let i = 0; i < normalizedCount; i++) {
470
+ await c.db.execute(
471
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('bulk-${i}', '${payload}', ${now})`
472
+ );
473
+ }
474
+ return { count: normalizedCount };
475
+ },
476
+ roundRobinUpdateValues: async (c, rowIds, iterations) => {
477
+ const normalizedRowIds = normalizeRowIds(rowIds);
478
+ const normalizedIterations = Math.max(0, Math.trunc(iterations));
479
+ if (normalizedRowIds.length === 0 || normalizedIterations === 0) {
480
+ const emptyRows = [];
481
+ return emptyRows;
482
+ }
483
+ for (let i = 0; i < normalizedIterations; i++) {
484
+ const rowId = normalizedRowIds[i % normalizedRowIds.length] ?? 0;
485
+ await c.db.execute(
486
+ `UPDATE test_data SET value = 'v-${i}' WHERE id = ${rowId}`
487
+ );
488
+ }
489
+ return await c.db.execute(
490
+ `SELECT id, value FROM test_data WHERE id IN (${normalizedRowIds.join(",")}) ORDER BY id`
491
+ );
492
+ },
493
+ getPageCount: async (c) => {
494
+ const rows = await c.db.execute(
495
+ "PRAGMA page_count"
496
+ );
497
+ return toSafeInteger(firstRowValue(rows[0]));
498
+ },
499
+ vacuum: async (c) => {
500
+ await c.db.execute("VACUUM");
501
+ },
502
+ integrityCheck: async (c) => {
503
+ const rows = await c.db.execute(
504
+ "PRAGMA integrity_check"
505
+ );
506
+ const value = firstRowValue(rows[0]);
507
+ return String(value ?? "");
508
+ },
509
+ runMixedWorkload: async (c, seedCount, churnCount) => {
510
+ const normalizedSeedCount = Math.max(1, Math.trunc(seedCount));
511
+ const normalizedChurnCount = Math.max(0, Math.trunc(churnCount));
512
+ const now = Date.now();
513
+ for (let i = 0; i < normalizedSeedCount; i++) {
514
+ const payload = makePayload(1024 + i % 5 * 128);
515
+ await c.db.execute(
516
+ `INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${i + 1}, 'seed-${i}', '${payload}', ${now})`
517
+ );
518
+ }
519
+ for (let i = 0; i < normalizedChurnCount; i++) {
520
+ const id = i % normalizedSeedCount + 1;
521
+ if (i % 9 === 0) {
522
+ await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
523
+ } else {
524
+ const payload = makePayload(768 + i % 7 * 96);
525
+ await c.db.execute(
526
+ `INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${id}, 'upd-${i}', '${payload}', ${now + i})`
527
+ );
528
+ }
529
+ }
530
+ },
531
+ repeatUpdate: async (c, id, count) => {
532
+ let value = "";
533
+ if (count <= 0) {
534
+ return { value };
535
+ }
536
+ const statements = ["BEGIN"];
537
+ for (let i = 0; i < count; i++) {
538
+ value = `Updated ${i}`;
539
+ statements.push(
540
+ `UPDATE test_data SET value = '${value}' WHERE id = ${id}`
541
+ );
542
+ }
543
+ statements.push("COMMIT");
544
+ await c.db.execute(statements.join("; "));
545
+ return { value };
546
+ },
547
+ multiStatementInsert: async (c, value) => {
548
+ var _a;
549
+ await c.db.execute(
550
+ `BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); UPDATE test_data SET value = '${value}-updated' WHERE id = last_insert_rowid(); COMMIT;`
551
+ );
552
+ const results = await c.db.execute(
553
+ `SELECT value FROM test_data ORDER BY id DESC LIMIT 1`
554
+ );
555
+ return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
556
+ },
557
+ triggerSleep: (c) => {
558
+ c.sleep();
559
+ }
560
+ },
561
+ options: {
562
+ sleepTimeout: 100
563
+ }
564
+ });
565
+
566
+ // fixtures/driver-test-suite/db/migrations.ts
567
+ var migrations = {
568
+ journal: {
569
+ entries: [
570
+ {
571
+ idx: 0,
572
+ when: 17e11,
573
+ tag: "0000_init",
574
+ breakpoints: false
575
+ }
576
+ ]
577
+ },
578
+ migrations: {
579
+ m0000: `
580
+ CREATE TABLE IF NOT EXISTS test_data (
581
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
582
+ value TEXT NOT NULL,
583
+ payload TEXT NOT NULL DEFAULT '',
584
+ created_at INTEGER NOT NULL
585
+ );
586
+ `
587
+ }
588
+ };
589
+
590
+ // fixtures/driver-test-suite/db/schema.ts
591
+ var testData = sqliteTable("test_data", {
592
+ id: integer("id").primaryKey({ autoIncrement: true }),
593
+ value: text("value").notNull(),
594
+ payload: text("payload").notNull().default(""),
595
+ createdAt: integer("created_at").notNull()
596
+ });
597
+ var schema = {
598
+ testData
599
+ };
600
+
601
+ // fixtures/driver-test-suite/actor-db-drizzle.ts
602
+ function firstRowValue2(row) {
603
+ if (!row) {
604
+ return void 0;
605
+ }
606
+ const values = Object.values(row);
607
+ return values.length > 0 ? values[0] : void 0;
608
+ }
609
+ function toSafeInteger2(value) {
610
+ if (typeof value === "bigint") {
611
+ return Number(value);
612
+ }
613
+ if (typeof value === "number") {
614
+ return Number.isFinite(value) ? Math.trunc(value) : 0;
615
+ }
616
+ if (typeof value === "string") {
617
+ const parsed = Number.parseInt(value, 10);
618
+ return Number.isFinite(parsed) ? parsed : 0;
619
+ }
620
+ return 0;
621
+ }
622
+ function normalizeRowIds2(rowIds) {
623
+ const normalized = rowIds.map((id) => Math.trunc(id)).filter((id) => Number.isFinite(id) && id > 0);
624
+ return Array.from(new Set(normalized));
625
+ }
626
+ function makePayload2(size) {
627
+ const normalizedSize = Math.max(0, Math.trunc(size));
628
+ return "x".repeat(normalizedSize);
629
+ }
630
+ var dbActorDrizzle = actor({
631
+ state: {
632
+ disconnectInsertEnabled: false,
633
+ disconnectInsertDelayMs: 0
634
+ },
635
+ db: db2({
636
+ schema,
637
+ migrations
638
+ }),
639
+ onDisconnect: async (c) => {
640
+ if (!c.state.disconnectInsertEnabled) {
641
+ return;
642
+ }
643
+ if (c.state.disconnectInsertDelayMs > 0) {
644
+ await new Promise(
645
+ (resolve) => setTimeout(resolve, c.state.disconnectInsertDelayMs)
646
+ );
647
+ }
648
+ await c.db.execute(
649
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('__disconnect__', '', ${Date.now()})`
650
+ );
651
+ },
652
+ actions: {
653
+ configureDisconnectInsert: (c, enabled, delayMs) => {
654
+ c.state.disconnectInsertEnabled = enabled;
655
+ c.state.disconnectInsertDelayMs = Math.max(
656
+ 0,
657
+ Math.floor(delayMs)
658
+ );
659
+ },
660
+ getDisconnectInsertCount: async (c) => {
661
+ var _a;
662
+ const results = await c.db.execute(
663
+ `SELECT COUNT(*) as count FROM test_data WHERE value = '__disconnect__'`
664
+ );
665
+ return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
666
+ },
667
+ reset: async (c) => {
668
+ await c.db.execute(`DELETE FROM test_data`);
669
+ },
670
+ insertValue: async (c, value) => {
671
+ await c.db.execute(
672
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()})`
673
+ );
674
+ const results = await c.db.execute(
675
+ `SELECT last_insert_rowid() as id`
676
+ );
677
+ return { id: results[0].id };
678
+ },
679
+ getValues: async (c) => {
680
+ const results = await c.db.execute(
681
+ `SELECT * FROM test_data ORDER BY id`
682
+ );
683
+ return results;
684
+ },
685
+ getValue: async (c, id) => {
686
+ var _a;
687
+ const results = await c.db.execute(
688
+ `SELECT value FROM test_data WHERE id = ${id}`
689
+ );
690
+ return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
691
+ },
692
+ getCount: async (c) => {
693
+ const results = await c.db.execute(
694
+ `SELECT COUNT(*) as count FROM test_data`
695
+ );
696
+ return results[0].count;
697
+ },
698
+ rawSelectCount: async (c) => {
699
+ var _a;
700
+ const results = await c.db.execute(
701
+ `SELECT COUNT(*) as count FROM test_data`
702
+ );
703
+ return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
704
+ },
705
+ insertMany: async (c, count) => {
706
+ if (count <= 0) {
707
+ return { count: 0 };
708
+ }
709
+ const now = Date.now();
710
+ const values = [];
711
+ for (let i = 0; i < count; i++) {
712
+ values.push(`('User ${i}', '', ${now})`);
713
+ }
714
+ await c.db.execute(
715
+ `INSERT INTO test_data (value, payload, created_at) VALUES ${values.join(", ")}`
716
+ );
717
+ return { count };
718
+ },
719
+ updateValue: async (c, id, value) => {
720
+ await c.db.execute(
721
+ `UPDATE test_data SET value = '${value}' WHERE id = ${id}`
722
+ );
723
+ return { success: true };
724
+ },
725
+ deleteValue: async (c, id) => {
726
+ await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
727
+ },
728
+ transactionCommit: async (c, value) => {
729
+ await c.db.execute(
730
+ `BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); COMMIT;`
731
+ );
732
+ },
733
+ transactionRollback: async (c, value) => {
734
+ await c.db.execute(
735
+ `BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); ROLLBACK;`
736
+ );
737
+ },
738
+ insertPayloadOfSize: async (c, size) => {
739
+ const payload = "x".repeat(size);
740
+ await c.db.execute(
741
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('payload', '${payload}', ${Date.now()})`
742
+ );
743
+ const results = await c.db.execute(
744
+ `SELECT last_insert_rowid() as id`
745
+ );
746
+ return { id: results[0].id, size };
747
+ },
748
+ getPayloadSize: async (c, id) => {
749
+ var _a;
750
+ const results = await c.db.execute(
751
+ `SELECT length(payload) as size FROM test_data WHERE id = ${id}`
752
+ );
753
+ return ((_a = results[0]) == null ? void 0 : _a.size) ?? 0;
754
+ },
755
+ insertPayloadRows: async (c, count, payloadSize) => {
756
+ const normalizedCount = Math.max(0, Math.trunc(count));
757
+ if (normalizedCount === 0) {
758
+ return { count: 0 };
759
+ }
760
+ const payload = makePayload2(payloadSize);
761
+ const now = Date.now();
762
+ for (let i = 0; i < normalizedCount; i++) {
763
+ await c.db.execute(
764
+ `INSERT INTO test_data (value, payload, created_at) VALUES ('bulk-${i}', '${payload}', ${now})`
765
+ );
766
+ }
767
+ return { count: normalizedCount };
768
+ },
769
+ roundRobinUpdateValues: async (c, rowIds, iterations) => {
770
+ const normalizedRowIds = normalizeRowIds2(rowIds);
771
+ const normalizedIterations = Math.max(0, Math.trunc(iterations));
772
+ if (normalizedRowIds.length === 0 || normalizedIterations === 0) {
773
+ const emptyRows = [];
774
+ return emptyRows;
775
+ }
776
+ for (let i = 0; i < normalizedIterations; i++) {
777
+ const rowId = normalizedRowIds[i % normalizedRowIds.length] ?? 0;
778
+ await c.db.execute(
779
+ `UPDATE test_data SET value = 'v-${i}' WHERE id = ${rowId}`
780
+ );
781
+ }
782
+ return await c.db.execute(
783
+ `SELECT id, value FROM test_data WHERE id IN (${normalizedRowIds.join(",")}) ORDER BY id`
784
+ );
785
+ },
786
+ getPageCount: async (c) => {
787
+ const rows = await c.db.execute(
788
+ "PRAGMA page_count"
789
+ );
790
+ return toSafeInteger2(firstRowValue2(rows[0]));
791
+ },
792
+ vacuum: async (c) => {
793
+ await c.db.execute("VACUUM");
794
+ },
795
+ integrityCheck: async (c) => {
796
+ const rows = await c.db.execute(
797
+ "PRAGMA integrity_check"
798
+ );
799
+ const value = firstRowValue2(rows[0]);
800
+ return String(value ?? "");
801
+ },
802
+ runMixedWorkload: async (c, seedCount, churnCount) => {
803
+ const normalizedSeedCount = Math.max(1, Math.trunc(seedCount));
804
+ const normalizedChurnCount = Math.max(0, Math.trunc(churnCount));
805
+ const now = Date.now();
806
+ for (let i = 0; i < normalizedSeedCount; i++) {
807
+ const payload = makePayload2(1024 + i % 5 * 128);
808
+ await c.db.execute(
809
+ `INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${i + 1}, 'seed-${i}', '${payload}', ${now})`
810
+ );
811
+ }
812
+ for (let i = 0; i < normalizedChurnCount; i++) {
813
+ const id = i % normalizedSeedCount + 1;
814
+ if (i % 9 === 0) {
815
+ await c.db.execute(`DELETE FROM test_data WHERE id = ${id}`);
816
+ } else {
817
+ const payload = makePayload2(768 + i % 7 * 96);
818
+ await c.db.execute(
819
+ `INSERT OR REPLACE INTO test_data (id, value, payload, created_at) VALUES (${id}, 'upd-${i}', '${payload}', ${now + i})`
820
+ );
821
+ }
822
+ }
823
+ },
824
+ repeatUpdate: async (c, id, count) => {
825
+ let value = "";
826
+ if (count <= 0) {
827
+ return { value };
828
+ }
829
+ const statements = ["BEGIN"];
830
+ for (let i = 0; i < count; i++) {
831
+ value = `Updated ${i}`;
832
+ statements.push(
833
+ `UPDATE test_data SET value = '${value}' WHERE id = ${id}`
834
+ );
835
+ }
836
+ statements.push("COMMIT");
837
+ await c.db.execute(statements.join("; "));
838
+ return { value };
839
+ },
840
+ multiStatementInsert: async (c, value) => {
841
+ var _a;
842
+ await c.db.execute(
843
+ `BEGIN; INSERT INTO test_data (value, payload, created_at) VALUES ('${value}', '', ${Date.now()}); UPDATE test_data SET value = '${value}-updated' WHERE id = last_insert_rowid(); COMMIT;`
844
+ );
845
+ const results = await c.db.execute(
846
+ `SELECT value FROM test_data ORDER BY id DESC LIMIT 1`
847
+ );
848
+ return ((_a = results[0]) == null ? void 0 : _a.value) ?? null;
849
+ },
850
+ triggerSleep: (c) => {
851
+ c.sleep();
852
+ }
853
+ },
854
+ options: {
855
+ sleepTimeout: 100
856
+ }
857
+ });
858
+
859
+ // fixtures/driver-test-suite/db-lifecycle.ts
860
+ var clientActorIds = /* @__PURE__ */ new WeakMap();
861
+ var createCounts = /* @__PURE__ */ new Map();
862
+ var migrateCounts = /* @__PURE__ */ new Map();
863
+ var cleanupCounts = /* @__PURE__ */ new Map();
864
+ function increment(map, actorId) {
865
+ map.set(actorId, (map.get(actorId) ?? 0) + 1);
866
+ }
867
+ function getCounts(actorId) {
868
+ return {
869
+ create: createCounts.get(actorId) ?? 0,
870
+ migrate: migrateCounts.get(actorId) ?? 0,
871
+ cleanup: cleanupCounts.get(actorId) ?? 0
872
+ };
873
+ }
874
+ var baseProvider = db({
875
+ onMigrate: async (dbHandle) => {
876
+ await dbHandle.execute(`
877
+ CREATE TABLE IF NOT EXISTS lifecycle_data (
878
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
879
+ value TEXT NOT NULL,
880
+ created_at INTEGER NOT NULL
881
+ )
882
+ `);
883
+ }
884
+ });
885
+ var lifecycleProvider = {
886
+ createClient: async (ctx) => {
887
+ const client = await baseProvider.createClient(ctx);
888
+ clientActorIds.set(client, ctx.actorId);
889
+ increment(createCounts, ctx.actorId);
890
+ return client;
891
+ },
892
+ onMigrate: async (client) => {
893
+ const actorId = clientActorIds.get(client);
894
+ if (actorId) {
895
+ increment(migrateCounts, actorId);
896
+ }
897
+ await baseProvider.onMigrate(client);
898
+ },
899
+ onDestroy: async (client) => {
900
+ var _a;
901
+ const actorId = clientActorIds.get(client);
902
+ if (actorId) {
903
+ increment(cleanupCounts, actorId);
904
+ }
905
+ await ((_a = baseProvider.onDestroy) == null ? void 0 : _a.call(baseProvider, client));
906
+ }
907
+ };
908
+ var failingLifecycleProvider = {
909
+ createClient: async (ctx) => {
910
+ const client = await baseProvider.createClient(ctx);
911
+ clientActorIds.set(client, ctx.actorId);
912
+ increment(createCounts, ctx.actorId);
913
+ return client;
914
+ },
915
+ onMigrate: async (client) => {
916
+ const actorId = clientActorIds.get(client);
917
+ if (actorId) {
918
+ increment(migrateCounts, actorId);
919
+ }
920
+ throw new Error("forced migrate failure");
921
+ },
922
+ onDestroy: async (client) => {
923
+ var _a;
924
+ const actorId = clientActorIds.get(client);
925
+ if (actorId) {
926
+ increment(cleanupCounts, actorId);
927
+ }
928
+ await ((_a = baseProvider.onDestroy) == null ? void 0 : _a.call(baseProvider, client));
929
+ }
930
+ };
931
+ var dbLifecycle = actor({
932
+ db: lifecycleProvider,
933
+ actions: {
934
+ getActorId: (c) => c.actorId,
935
+ ping: () => "pong",
936
+ insertValue: async (c, value) => {
937
+ await c.db.execute(
938
+ "INSERT INTO lifecycle_data (value, created_at) VALUES (?, ?)",
939
+ value,
940
+ Date.now()
941
+ );
942
+ },
943
+ getCount: async (c) => {
944
+ var _a;
945
+ const results = await c.db.execute(
946
+ `SELECT COUNT(*) as count FROM lifecycle_data`
947
+ );
948
+ return ((_a = results[0]) == null ? void 0 : _a.count) ?? 0;
949
+ },
950
+ triggerSleep: (c) => {
951
+ c.sleep();
952
+ },
953
+ triggerDestroy: (c) => {
954
+ c.destroy();
955
+ }
956
+ },
957
+ options: {
958
+ sleepTimeout: 100
959
+ }
960
+ });
961
+ var dbLifecycleFailing = actor({
962
+ db: failingLifecycleProvider,
963
+ actions: {
964
+ ping: () => "pong"
965
+ }
966
+ });
967
+ var dbLifecycleObserver = actor({
968
+ actions: {
969
+ getCounts: (_c, actorId) => {
970
+ return getCounts(actorId);
971
+ }
972
+ }
973
+ });
974
+
181
975
  // fixtures/driver-test-suite/actor-onstatechange.ts
182
976
  var onStateChangeActor = actor({
183
977
  state: {
@@ -348,6 +1142,9 @@ var counter = actor({
348
1142
  },
349
1143
  getCount: (c) => {
350
1144
  return c.state.count;
1145
+ },
1146
+ getKey: (c) => {
1147
+ return c.key;
351
1148
  }
352
1149
  }
353
1150
  });
@@ -504,6 +1301,41 @@ var customTimeoutActor = actor({
504
1301
  }
505
1302
  });
506
1303
 
1304
+ // fixtures/driver-test-suite/file-system-hibernation-cleanup.ts
1305
+ var fileSystemHibernationCleanupActor = actor({
1306
+ state: {
1307
+ wakeCount: 0,
1308
+ sleepCount: 0,
1309
+ disconnectWakeCounts: []
1310
+ },
1311
+ createConnState: () => ({}),
1312
+ onWake: (c) => {
1313
+ c.state.wakeCount += 1;
1314
+ },
1315
+ onSleep: (c) => {
1316
+ c.state.sleepCount += 1;
1317
+ },
1318
+ onDisconnect: (c, conn) => {
1319
+ if (conn.isHibernatable) {
1320
+ c.state.disconnectWakeCounts.push(c.state.wakeCount);
1321
+ }
1322
+ },
1323
+ actions: {
1324
+ ping: () => "pong",
1325
+ triggerSleep: (c) => {
1326
+ c.sleep();
1327
+ },
1328
+ getCounts: (c) => ({
1329
+ wakeCount: c.state.wakeCount,
1330
+ sleepCount: c.state.sleepCount
1331
+ }),
1332
+ getDisconnectWakeCounts: (c) => c.state.disconnectWakeCounts
1333
+ },
1334
+ options: {
1335
+ sleepTimeout: 500
1336
+ }
1337
+ });
1338
+
507
1339
  // fixtures/driver-test-suite/inline-client.ts
508
1340
  var inlineClientActor = actor({
509
1341
  state: { messages: [] },
@@ -750,6 +1582,201 @@ var metadataActor = actor({
750
1582
  }
751
1583
  });
752
1584
 
1585
+ // fixtures/driver-test-suite/queue.ts
1586
+ var queueSchemas = {
1587
+ greeting: queue(),
1588
+ self: queue(),
1589
+ a: queue(),
1590
+ b: queue(),
1591
+ c: queue(),
1592
+ one: queue(),
1593
+ two: queue(),
1594
+ missing: queue(),
1595
+ abort: queue(),
1596
+ tasks: queue(),
1597
+ timeout: queue(),
1598
+ nowait: queue(),
1599
+ twice: queue()
1600
+ };
1601
+ var queueActor = actor({
1602
+ state: {},
1603
+ queues: queueSchemas,
1604
+ actions: {
1605
+ receiveOne: async (c, name, opts) => {
1606
+ const messages = await c.queue.next({
1607
+ names: [name],
1608
+ count: opts == null ? void 0 : opts.count,
1609
+ timeout: opts == null ? void 0 : opts.timeout
1610
+ });
1611
+ const message = messages[0];
1612
+ if (!message) {
1613
+ return null;
1614
+ }
1615
+ return { name: message.name, body: message.body };
1616
+ },
1617
+ receiveMany: async (c, names, opts) => {
1618
+ const messages = await c.queue.next({
1619
+ names,
1620
+ count: opts == null ? void 0 : opts.count,
1621
+ timeout: opts == null ? void 0 : opts.timeout
1622
+ });
1623
+ return messages.map((message) => ({
1624
+ name: message.name,
1625
+ body: message.body
1626
+ }));
1627
+ },
1628
+ receiveRequest: async (c, request) => {
1629
+ const messages = await c.queue.next(request);
1630
+ return messages.map((message) => ({
1631
+ name: message.name,
1632
+ body: message.body
1633
+ }));
1634
+ },
1635
+ tryReceiveMany: async (c, request) => {
1636
+ const messages = await c.queue.tryNext(request);
1637
+ return messages.map((message) => ({
1638
+ name: message.name,
1639
+ body: message.body
1640
+ }));
1641
+ },
1642
+ receiveWithIterator: async (c, name) => {
1643
+ for await (const message of c.queue.iter({ names: [name] })) {
1644
+ return { name: message.name, body: message.body };
1645
+ }
1646
+ return null;
1647
+ },
1648
+ receiveWithAsyncIterator: async (c) => {
1649
+ for await (const message of c.queue.iter()) {
1650
+ return { name: message.name, body: message.body };
1651
+ }
1652
+ return null;
1653
+ },
1654
+ sendToSelf: async (c, name, body) => {
1655
+ const client = c.client();
1656
+ const handle = client.queueActor.getForId(c.actorId);
1657
+ await handle.send(name, body);
1658
+ return true;
1659
+ },
1660
+ waitForAbort: async (c) => {
1661
+ setTimeout(() => {
1662
+ c.destroy();
1663
+ }, 10);
1664
+ await c.queue.next({ names: ["abort"], timeout: 1e4 });
1665
+ return true;
1666
+ },
1667
+ waitForSignalAbort: async (c) => {
1668
+ const controller = new AbortController();
1669
+ controller.abort();
1670
+ try {
1671
+ await c.queue.next({
1672
+ names: ["abort"],
1673
+ timeout: 1e4,
1674
+ signal: controller.signal
1675
+ });
1676
+ return { ok: false };
1677
+ } catch (error) {
1678
+ const actorError = error;
1679
+ return { group: actorError.group, code: actorError.code };
1680
+ }
1681
+ },
1682
+ waitForActorAbortWithSignal: async (c) => {
1683
+ const controller = new AbortController();
1684
+ setTimeout(() => {
1685
+ c.destroy();
1686
+ }, 10);
1687
+ try {
1688
+ await c.queue.next({
1689
+ names: ["abort"],
1690
+ timeout: 1e4,
1691
+ signal: controller.signal
1692
+ });
1693
+ return { ok: false };
1694
+ } catch (error) {
1695
+ const actorError = error;
1696
+ return { group: actorError.group, code: actorError.code };
1697
+ }
1698
+ },
1699
+ iterWithSignalAbort: async (c) => {
1700
+ const controller = new AbortController();
1701
+ controller.abort();
1702
+ for await (const _message of c.queue.iter({
1703
+ names: ["abort"],
1704
+ signal: controller.signal
1705
+ })) {
1706
+ return { ok: false };
1707
+ }
1708
+ return { ok: true };
1709
+ },
1710
+ receiveAndComplete: async (c, name) => {
1711
+ const messages = await c.queue.next({ names: [name], completable: true });
1712
+ const message = messages[0];
1713
+ if (!message) {
1714
+ return null;
1715
+ }
1716
+ await message.complete({ echo: message.body });
1717
+ return { name: message.name, body: message.body };
1718
+ },
1719
+ receiveWithoutComplete: async (c, name) => {
1720
+ const messages = await c.queue.next({ names: [name], completable: true });
1721
+ const message = messages[0];
1722
+ if (!message) {
1723
+ return null;
1724
+ }
1725
+ return { name: message.name, body: message.body };
1726
+ },
1727
+ receiveManualThenNextWithoutComplete: async (c, name) => {
1728
+ const messages = await c.queue.next({ names: [name], completable: true });
1729
+ const message = messages[0];
1730
+ if (!message) {
1731
+ return { ok: false, reason: "no_message" };
1732
+ }
1733
+ try {
1734
+ await c.queue.next({ names: [name], timeout: 0 });
1735
+ c.destroy();
1736
+ return { ok: false, reason: "next_succeeded" };
1737
+ } catch (error) {
1738
+ c.destroy();
1739
+ const actorError = error;
1740
+ return { group: actorError.group, code: actorError.code };
1741
+ }
1742
+ },
1743
+ receiveAndCompleteTwice: async (c, name) => {
1744
+ const messages = await c.queue.next({ names: [name], completable: true });
1745
+ const message = messages[0];
1746
+ if (!message) {
1747
+ return null;
1748
+ }
1749
+ await message.complete({ ok: true });
1750
+ try {
1751
+ await message.complete({ ok: true });
1752
+ return { ok: false };
1753
+ } catch (error) {
1754
+ const actorError = error;
1755
+ return { group: actorError.group, code: actorError.code };
1756
+ }
1757
+ },
1758
+ receiveWithoutCompleteMethod: async (c, name) => {
1759
+ const messages = await c.queue.next({ names: [name], completable: true });
1760
+ const message = messages[0];
1761
+ return {
1762
+ hasComplete: message !== void 0 && typeof message.complete === "function"
1763
+ };
1764
+ }
1765
+ }
1766
+ });
1767
+ var queueLimitedActor = actor({
1768
+ state: {},
1769
+ queues: {
1770
+ message: queue(),
1771
+ oversize: queue()
1772
+ },
1773
+ actions: {},
1774
+ options: {
1775
+ maxQueueSize: 1,
1776
+ maxQueueMessageSize: 64
1777
+ }
1778
+ });
1779
+
753
1780
  // fixtures/driver-test-suite/raw-http.ts
754
1781
  import { Hono } from "hono";
755
1782
  var rawHttpActor = actor({
@@ -864,11 +1891,11 @@ var rawHttpRequestPropertiesActor = actor({
864
1891
  const contentType = request.headers.get("content-type") || "";
865
1892
  try {
866
1893
  if (contentType.includes("application/json")) {
867
- const text = await request.text();
868
- return text ? JSON.parse(text) : null;
1894
+ const text2 = await request.text();
1895
+ return text2 ? JSON.parse(text2) : null;
869
1896
  } else {
870
- const text = await request.text();
871
- return text || null;
1897
+ const text2 = await request.text();
1898
+ return text2 || null;
872
1899
  }
873
1900
  } catch (error) {
874
1901
  return null;
@@ -933,14 +1960,14 @@ var rawWebSocketActor = actor({
933
1960
  })
934
1961
  );
935
1962
  console.log("[ACTOR] Sent welcome message");
936
- websocket.addEventListener("message", (event) => {
1963
+ websocket.addEventListener("message", (event2) => {
937
1964
  var _a;
938
1965
  ctx.state.messageCount = ctx.state.messageCount + 1;
939
1966
  console.log(
940
1967
  `[ACTOR] Message received, total count: ${ctx.state.messageCount}, data:`,
941
- event.data
1968
+ event2.data
942
1969
  );
943
- const data = event.data;
1970
+ const data = event2.data;
944
1971
  if (typeof data === "string") {
945
1972
  try {
946
1973
  const parsed = JSON.parse(data);
@@ -1001,8 +2028,8 @@ var rawWebSocketActor = actor({
1001
2028
  });
1002
2029
  var rawWebSocketBinaryActor = actor({
1003
2030
  onWebSocket(ctx, websocket) {
1004
- websocket.addEventListener("message", (event) => {
1005
- const data = event.data;
2031
+ websocket.addEventListener("message", (event2) => {
2032
+ const data = event2.data;
1006
2033
  if (data instanceof ArrayBuffer || data instanceof Uint8Array) {
1007
2034
  const bytes = new Uint8Array(data);
1008
2035
  const reversed = new Uint8Array(bytes.length);
@@ -1125,8 +2152,8 @@ var requestAccessActor = actor({
1125
2152
  requestHeaders: headers
1126
2153
  })
1127
2154
  );
1128
- websocket.addEventListener("message", (event) => {
1129
- websocket.send(event.data);
2155
+ websocket.addEventListener("message", (event2) => {
2156
+ websocket.send(event2.data);
1130
2157
  });
1131
2158
  },
1132
2159
  actions: {
@@ -1223,6 +2250,33 @@ var scheduled = actor({
1223
2250
  }
1224
2251
  });
1225
2252
 
2253
+ // fixtures/driver-test-suite/stateless.ts
2254
+ var statelessActor = actor({
2255
+ actions: {
2256
+ ping: () => "pong",
2257
+ echo: (c, message) => message,
2258
+ getActorId: (c) => c.actorId,
2259
+ // Try to access state - should throw StateNotEnabled
2260
+ tryGetState: (c) => {
2261
+ try {
2262
+ const state = c.state;
2263
+ return { success: true, state };
2264
+ } catch (error) {
2265
+ return { success: false, error: error.message };
2266
+ }
2267
+ },
2268
+ // Try to access db - should throw DatabaseNotEnabled
2269
+ tryGetDb: (c) => {
2270
+ try {
2271
+ const db3 = c.db;
2272
+ return { success: true, db: db3 };
2273
+ } catch (error) {
2274
+ return { success: false, error: error.message };
2275
+ }
2276
+ }
2277
+ }
2278
+ });
2279
+
1226
2280
  // fixtures/driver-test-suite/vars.ts
1227
2281
  var staticVarActor = actor({
1228
2282
  state: { value: 0 },
@@ -1328,6 +2382,9 @@ var registry = setup({
1328
2382
  inlineClientActor,
1329
2383
  // From kv.ts
1330
2384
  kvActor,
2385
+ // From queue.ts
2386
+ queueActor,
2387
+ queueLimitedActor,
1331
2388
  // From action-inputs.ts
1332
2389
  inputActor,
1333
2390
  // From action-timeout.ts
@@ -1372,9 +2429,36 @@ var registry = setup({
1372
2429
  destroyObserver,
1373
2430
  // From hibernation.ts
1374
2431
  hibernationActor,
2432
+ // From file-system-hibernation-cleanup.ts
2433
+ fileSystemHibernationCleanupActor,
1375
2434
  // From large-payloads.ts
1376
2435
  largePayloadActor,
1377
- largePayloadConnActor
2436
+ largePayloadConnActor,
2437
+ // From run.ts
2438
+ runWithTicks,
2439
+ runWithQueueConsumer,
2440
+ runWithEarlyExit,
2441
+ runWithError,
2442
+ runWithoutHandler,
2443
+ // From workflow.ts
2444
+ workflowCounterActor,
2445
+ workflowQueueActor,
2446
+ workflowAccessActor,
2447
+ workflowSleepActor,
2448
+ workflowStopTeardownActor,
2449
+ // From actor-db-raw.ts
2450
+ dbActorRaw,
2451
+ // From actor-db-drizzle.ts
2452
+ dbActorDrizzle,
2453
+ // From db-lifecycle.ts
2454
+ dbLifecycle,
2455
+ dbLifecycleFailing,
2456
+ dbLifecycleObserver,
2457
+ // From stateless.ts
2458
+ statelessActor,
2459
+ // From access-control.ts
2460
+ accessControlActor,
2461
+ accessControlNoQueuesActor
1378
2462
  }
1379
2463
  });
1380
2464
 
@@ -1428,10 +2512,9 @@ async function serveTestSuite() {
1428
2512
  ...registry.config.serverless,
1429
2513
  publicEndpoint: `http://127.0.0.1:${port}`
1430
2514
  };
1431
- const driver = await createFileSystemOrMemoryDriver(
1432
- true,
1433
- `/tmp/rivetkit-test-suite-${crypto.randomUUID()}`
1434
- );
2515
+ const driver = await createFileSystemOrMemoryDriver(true, {
2516
+ path: `/tmp/rivetkit-test-suite-${crypto.randomUUID()}`
2517
+ });
1435
2518
  registry.config.driver = driver;
1436
2519
  let upgradeWebSocket;
1437
2520
  const parsedConfig = registry.parseConfig();
@@ -1462,7 +2545,9 @@ async function serveTestSuite() {
1462
2545
  namespace: "default",
1463
2546
  runnerName: "default",
1464
2547
  close: async () => {
1465
- await new Promise((resolve) => server.close(() => resolve(void 0)));
2548
+ await new Promise(
2549
+ (resolve) => server.close(() => resolve(void 0))
2550
+ );
1466
2551
  }
1467
2552
  };
1468
2553
  }