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
@@ -2,21 +2,24 @@
2
2
 
3
3
 
4
4
 
5
- var _chunk2IJTYN6Kcjs = require('../chunk-2IJTYN6K.cjs');
6
5
 
7
6
 
8
- var _chunk3VP5CSHVcjs = require('../chunk-3VP5CSHV.cjs');
9
- require('../chunk-X35U3YNX.cjs');
10
- require('../chunk-RUW5CZ5Z.cjs');
7
+ var _chunkXWBAQO5Hcjs = require('../chunk-XWBAQO5H.cjs');
8
+ require('../chunk-AIYEYMX5.cjs');
9
+ require('../chunk-HAZL2EPK.cjs');
10
+ require('../chunk-TYLXNCA5.cjs');
11
+ require('../chunk-YQ4LDVD6.cjs');
11
12
 
12
13
 
13
14
 
14
15
 
15
16
 
16
- var _chunkGD7UXGOEcjs = require('../chunk-GD7UXGOE.cjs');
17
+ var _chunkSSEP6DHPcjs = require('../chunk-SSEP6DHP.cjs');
17
18
 
18
19
 
19
- var _chunkEJVBH5VFcjs = require('../chunk-EJVBH5VF.cjs');
20
+ var _chunkTPGXWFQTcjs = require('../chunk-TPGXWFQT.cjs');
21
+ require('../chunk-6LJAZ5R4.cjs');
22
+ require('../chunk-SR3KQE7Q.cjs');
20
23
 
21
24
 
22
25
 
@@ -26,17 +29,19 @@ var _chunkEJVBH5VFcjs = require('../chunk-EJVBH5VF.cjs');
26
29
 
27
30
 
28
31
 
32
+ var _chunkF6JYU5IKcjs = require('../chunk-F6JYU5IK.cjs');
33
+ require('../chunk-NIYZDWMW.cjs');
29
34
 
30
- var _chunkRZW2DNNDcjs = require('../chunk-RZW2DNND.cjs');
31
- require('../chunk-KDFWJKMJ.cjs');
32
35
 
36
+ var _chunkHIDX4C5Ycjs = require('../chunk-HIDX4C5Y.cjs');
33
37
 
34
- var _chunkH4TB4X25cjs = require('../chunk-H4TB4X25.cjs');
35
38
 
39
+ var _chunkLW6KLR7Acjs = require('../chunk-LW6KLR7A.cjs');
36
40
 
37
41
 
38
- var _chunk2XQS746Mcjs = require('../chunk-2XQS746M.cjs');
39
- require('../chunk-GBENOENJ.cjs');
42
+
43
+ var _chunkL47L3ZWJcjs = require('../chunk-L47L3ZWJ.cjs');
44
+ require('../chunk-HDQ2JUQT.cjs');
40
45
 
41
46
  // src/driver-test-suite/mod.ts
42
47
  var _nodeserver = require('@hono/node-server');
@@ -80,20 +85,20 @@ function createTestInlineClientDriver(endpoint, encoding) {
80
85
  const oldUrl = new URL(actorRequest.url);
81
86
  const normalizedPath = oldUrl.pathname.startsWith("/") ? oldUrl.pathname.slice(1) : oldUrl.pathname;
82
87
  const pathWithQuery = normalizedPath + oldUrl.search;
83
- _chunk2IJTYN6Kcjs.logger.call(void 0, ).debug({
88
+ _chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
84
89
  msg: "sending raw http request via test inline driver",
85
90
  actorId,
86
91
  encoding,
87
92
  path: pathWithQuery
88
93
  });
89
94
  const url = `${endpoint}/.test/inline-driver/send-request/${pathWithQuery}`;
90
- _chunk2IJTYN6Kcjs.logger.call(void 0, ).debug({
95
+ _chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
91
96
  msg: "rewriting http url",
92
97
  from: oldUrl,
93
98
  to: url
94
99
  });
95
100
  const headers = new Headers(actorRequest.headers);
96
- headers.set(_chunkRZW2DNNDcjs.HEADER_ACTOR_ID, actorId);
101
+ headers.set(_chunkF6JYU5IKcjs.HEADER_ACTOR_ID, actorId);
97
102
  const response = await fetch(
98
103
  new Request(url, {
99
104
  method: actorRequest.method,
@@ -109,7 +114,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
109
114
  const errorData = await clonedResponse.json();
110
115
  if (errorData.error) {
111
116
  if (typeof errorData.error === "object") {
112
- throw new (0, _chunkGD7UXGOEcjs.ActorError)(
117
+ throw new (0, _chunkSSEP6DHPcjs.ActorError)(
113
118
  errorData.error.code,
114
119
  errorData.error.message,
115
120
  errorData.error.metadata
@@ -117,7 +122,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
117
122
  }
118
123
  }
119
124
  } catch (e) {
120
- if (!(e instanceof _chunkGD7UXGOEcjs.ActorError)) {
125
+ if (!(e instanceof _chunkSSEP6DHPcjs.ActorError)) {
121
126
  return response;
122
127
  }
123
128
  throw e;
@@ -126,33 +131,33 @@ function createTestInlineClientDriver(endpoint, encoding) {
126
131
  return response;
127
132
  },
128
133
  async openWebSocket(path, actorId, encoding2, params) {
129
- const WebSocket2 = await _chunkEJVBH5VFcjs.importWebSocket.call(void 0, );
134
+ const WebSocket2 = await _chunkTPGXWFQTcjs.importWebSocket.call(void 0, );
130
135
  const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
131
136
  const wsUrl = new URL(
132
137
  `${endpoint}/.test/inline-driver/connect-websocket/ws`
133
138
  );
134
- _chunk2IJTYN6Kcjs.logger.call(void 0, ).debug({
139
+ _chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
135
140
  msg: "creating websocket connection via test inline driver",
136
141
  url: wsUrl.toString()
137
142
  });
138
143
  const wsProtocol = wsUrl.protocol === "https:" ? "wss:" : "ws:";
139
144
  const finalWsUrl = `${wsProtocol}//${wsUrl.host}${wsUrl.pathname}`;
140
145
  const protocols = [];
141
- protocols.push(_chunkRZW2DNNDcjs.WS_PROTOCOL_STANDARD);
142
- protocols.push(`${_chunkRZW2DNNDcjs.WS_PROTOCOL_TARGET}actor`);
146
+ protocols.push(_chunkF6JYU5IKcjs.WS_PROTOCOL_STANDARD);
147
+ protocols.push(`${_chunkF6JYU5IKcjs.WS_PROTOCOL_TARGET}actor`);
143
148
  protocols.push(
144
- `${_chunkRZW2DNNDcjs.WS_PROTOCOL_ACTOR}${encodeURIComponent(actorId)}`
149
+ `${_chunkF6JYU5IKcjs.WS_PROTOCOL_ACTOR}${encodeURIComponent(actorId)}`
145
150
  );
146
- protocols.push(`${_chunkRZW2DNNDcjs.WS_PROTOCOL_ENCODING}${encoding2}`);
151
+ protocols.push(`${_chunkF6JYU5IKcjs.WS_PROTOCOL_ENCODING}${encoding2}`);
147
152
  protocols.push(
148
- `${_chunkRZW2DNNDcjs.WS_TEST_PROTOCOL_PATH}${encodeURIComponent(normalizedPath)}`
153
+ `${_chunkF6JYU5IKcjs.WS_TEST_PROTOCOL_PATH}${encodeURIComponent(normalizedPath)}`
149
154
  );
150
155
  if (params !== void 0) {
151
156
  protocols.push(
152
- `${_chunkRZW2DNNDcjs.WS_PROTOCOL_CONN_PARAMS}${encodeURIComponent(JSON.stringify(params))}`
157
+ `${_chunkF6JYU5IKcjs.WS_PROTOCOL_CONN_PARAMS}${encodeURIComponent(JSON.stringify(params))}`
153
158
  );
154
159
  }
155
- _chunk2IJTYN6Kcjs.logger.call(void 0, ).debug({
160
+ _chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
156
161
  msg: "connecting to websocket",
157
162
  url: finalWsUrl,
158
163
  protocols
@@ -172,7 +177,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
172
177
  encoding2,
173
178
  params
174
179
  );
175
- return upgradeWebSocket(() => wsHandler)(c, _chunkH4TB4X25cjs.noopNext.call(void 0, ));
180
+ return upgradeWebSocket(() => wsHandler)(c, _chunkLW6KLR7Acjs.noopNext.call(void 0, ));
176
181
  },
177
182
  async buildGatewayUrl(actorId) {
178
183
  return `${endpoint}/gateway/${actorId}`;
@@ -189,7 +194,7 @@ function createTestInlineClientDriver(endpoint, encoding) {
189
194
  };
190
195
  }
191
196
  async function makeInlineRequest(endpoint, encoding, method, args) {
192
- _chunk2IJTYN6Kcjs.logger.call(void 0, ).debug({
197
+ _chunkXWBAQO5Hcjs.logger.call(void 0, ).debug({
193
198
  msg: "sending inline request",
194
199
  encoding,
195
200
  method,
@@ -219,14 +224,14 @@ async function makeInlineRequest(endpoint, encoding, method, args) {
219
224
  if ("ok" in callResponse) {
220
225
  return callResponse.ok;
221
226
  } else if ("err" in callResponse) {
222
- throw new (0, _chunkGD7UXGOEcjs.ActorError)(
227
+ throw new (0, _chunkSSEP6DHPcjs.ActorError)(
223
228
  callResponse.err.group,
224
229
  callResponse.err.code,
225
230
  callResponse.err.message,
226
231
  callResponse.err.metadata
227
232
  );
228
233
  } else {
229
- _chunkRZW2DNNDcjs.assertUnreachable.call(void 0, callResponse);
234
+ _chunkHIDX4C5Ycjs.assertUnreachable.call(void 0, callResponse);
230
235
  }
231
236
  }
232
237
 
@@ -239,12 +244,12 @@ async function setupDriverTest(c, driverTestConfig) {
239
244
  }
240
245
  const { endpoint, namespace, runnerName, cleanup } = await driverTestConfig.start();
241
246
  c.onTestFinished(() => {
242
- _chunk2IJTYN6Kcjs.logger.call(void 0, ).info("cleaning up test");
247
+ _chunkXWBAQO5Hcjs.logger.call(void 0, ).info("cleaning up test");
243
248
  cleanup();
244
249
  });
245
250
  let client;
246
251
  if (driverTestConfig.clientType === "http") {
247
- client = _chunkGD7UXGOEcjs.createClient.call(void 0, {
252
+ client = _chunkSSEP6DHPcjs.createClient.call(void 0, {
248
253
  endpoint,
249
254
  namespace,
250
255
  runnerName,
@@ -257,12 +262,12 @@ async function setupDriverTest(c, driverTestConfig) {
257
262
  } else if (driverTestConfig.clientType === "inline") {
258
263
  const encoding = _nullishCoalesce(driverTestConfig.encoding, () => ( "bare"));
259
264
  const managerDriver = createTestInlineClientDriver(endpoint, encoding);
260
- const runConfig = _chunkGD7UXGOEcjs.ClientConfigSchema.parse({
265
+ const runConfig = _chunkSSEP6DHPcjs.ClientConfigSchema.parse({
261
266
  encoding
262
267
  });
263
- client = _chunkGD7UXGOEcjs.createClientWithDriver.call(void 0, managerDriver, runConfig);
268
+ client = _chunkSSEP6DHPcjs.createClientWithDriver.call(void 0, managerDriver, runConfig);
264
269
  } else {
265
- _chunkRZW2DNNDcjs.assertUnreachable.call(void 0, driverTestConfig.clientType);
270
+ _chunkHIDX4C5Ycjs.assertUnreachable.call(void 0, driverTestConfig.clientType);
266
271
  }
267
272
  if (!driverTestConfig.HACK_skipCleanupNet) {
268
273
  c.onTestFinished(async () => await client.dispose());
@@ -404,6 +409,194 @@ function runActionFeaturesTests(driverTestConfig) {
404
409
  });
405
410
  }
406
411
 
412
+ // src/driver-test-suite/tests/access-control.ts
413
+
414
+ function runAccessControlTests(driverTestConfig) {
415
+ _vitest.describe.call(void 0, "access control", () => {
416
+ _vitest.test.call(void 0, "actions run without entrypoint auth gating", async (c) => {
417
+ const { client } = await setupDriverTest(c, driverTestConfig);
418
+ const handle = client.accessControlActor.getOrCreate(["actions"]);
419
+ const allowed = await handle.allowedAction("ok");
420
+ _vitest.expect.call(void 0, allowed).toBe("allowed:ok");
421
+ });
422
+ _vitest.test.call(void 0, "passes connection id into canPublish context", async (c) => {
423
+ const { client } = await setupDriverTest(c, driverTestConfig);
424
+ const handle = client.accessControlActor.getOrCreate(["publish-ctx"]);
425
+ await handle.send("allowedQueue", { value: "one" });
426
+ const connId = await handle.allowedGetLastCanPublishConnId();
427
+ _vitest.expect.call(void 0, typeof connId).toBe("string");
428
+ _vitest.expect.call(void 0, connId.length).toBeGreaterThan(0);
429
+ });
430
+ _vitest.test.call(void 0, "allows and denies queue sends, and ignores undefined queues", async (c) => {
431
+ const { client } = await setupDriverTest(c, driverTestConfig);
432
+ const handle = client.accessControlActor.getOrCreate(["queue"]);
433
+ await handle.send("allowedQueue", { value: "one" });
434
+ await _vitest.expect.call(void 0,
435
+ handle.send("blockedQueue", { value: "two" })
436
+ ).rejects.toMatchObject({
437
+ code: "forbidden"
438
+ });
439
+ await _vitest.expect.call(void 0,
440
+ handle.send("missingQueue", { value: "three" })
441
+ ).resolves.toBeUndefined();
442
+ await _vitest.expect.call(void 0,
443
+ handle.send(
444
+ "missingQueue",
445
+ { value: "four" },
446
+ { wait: true, timeout: 50 }
447
+ )
448
+ ).resolves.toMatchObject({ status: "completed" });
449
+ const allowedMessage = await handle.allowedReceiveQueue();
450
+ _vitest.expect.call(void 0, allowedMessage).toEqual({ value: "one" });
451
+ const remainingMessage = await handle.allowedReceiveAnyQueue();
452
+ _vitest.expect.call(void 0, remainingMessage).toBeNull();
453
+ });
454
+ _vitest.test.call(void 0, "ignores incoming queue sends when actor has no queues config", async (c) => {
455
+ const { client } = await setupDriverTest(c, driverTestConfig);
456
+ const handle = client.accessControlNoQueuesActor.getOrCreate([
457
+ "no-queues"
458
+ ]);
459
+ await _vitest.expect.call(void 0,
460
+ handle.send("anyQueue", { value: "ignored" })
461
+ ).resolves.toBeUndefined();
462
+ await _vitest.expect.call(void 0,
463
+ handle.send(
464
+ "anyQueue",
465
+ { value: "ignored-wait" },
466
+ { wait: true, timeout: 50 }
467
+ )
468
+ ).resolves.toMatchObject({ status: "completed" });
469
+ _vitest.expect.call(void 0, await handle.readAnyQueue()).toBeNull();
470
+ });
471
+ _vitest.test.call(void 0, "allows and denies subscriptions with canSubscribe", async (c) => {
472
+ const { client } = await setupDriverTest(c, driverTestConfig);
473
+ const handle = client.accessControlActor.getOrCreate([
474
+ "subscription"
475
+ ]);
476
+ const conn = handle.connect();
477
+ const allowedEventPromise = new Promise(
478
+ (resolve, reject) => {
479
+ const unsubscribeError = conn.onError((error) => {
480
+ reject(error);
481
+ });
482
+ const unsubscribeEvent = conn.on(
483
+ "allowedEvent",
484
+ (payload) => {
485
+ unsubscribeError();
486
+ unsubscribeEvent();
487
+ resolve(payload);
488
+ }
489
+ );
490
+ }
491
+ );
492
+ await conn.allowedAction("subscribe-ready");
493
+ await conn.allowedBroadcastAllowedEvent("hello");
494
+ _vitest.expect.call(void 0, await allowedEventPromise).toEqual({ value: "hello" });
495
+ const connId = await conn.allowedGetLastCanSubscribeConnId();
496
+ _vitest.expect.call(void 0, typeof connId).toBe("string");
497
+ _vitest.expect.call(void 0, connId.length).toBeGreaterThan(0);
498
+ await conn.dispose();
499
+ const blockedConn = handle.connect();
500
+ blockedConn.on("blockedEvent", () => {
501
+ });
502
+ await _vitest.expect.call(void 0,
503
+ blockedConn.allowedAction("blocked-subscribe-ready")
504
+ ).rejects.toMatchObject({
505
+ code: "forbidden"
506
+ });
507
+ await blockedConn.dispose();
508
+ });
509
+ _vitest.test.call(void 0, "broadcasts undefined events without failing subscriptions", async (c) => {
510
+ const { client } = await setupDriverTest(c, driverTestConfig);
511
+ const handle = client.accessControlActor.getOrCreate([
512
+ "undefined-event"
513
+ ]);
514
+ const conn = handle.connect();
515
+ const eventPromise = new Promise((resolve, reject) => {
516
+ const unsubscribeError = conn.onError((error) => {
517
+ reject(error);
518
+ });
519
+ const unsubscribeEvent = conn.on("undefinedEvent", (payload) => {
520
+ unsubscribeError();
521
+ unsubscribeEvent();
522
+ resolve(payload);
523
+ });
524
+ });
525
+ await conn.allowedAction("undefined-subscribe-ready");
526
+ await conn.allowedBroadcastUndefinedEvent("wildcard");
527
+ _vitest.expect.call(void 0, await eventPromise).toEqual({ value: "wildcard" });
528
+ await conn.dispose();
529
+ });
530
+ _vitest.test.call(void 0, "allows and denies raw request handlers", async (c) => {
531
+ const { client } = await setupDriverTest(c, driverTestConfig);
532
+ const allowedHandle = client.accessControlActor.getOrCreate(
533
+ ["raw-request-allow"],
534
+ {
535
+ params: { allowRequest: true }
536
+ }
537
+ );
538
+ const deniedHandle = client.accessControlActor.getOrCreate(
539
+ ["raw-request-deny"],
540
+ {
541
+ params: { allowRequest: false }
542
+ }
543
+ );
544
+ const allowedResponse = await allowedHandle.fetch("/status");
545
+ _vitest.expect.call(void 0, allowedResponse.status).toBe(200);
546
+ _vitest.expect.call(void 0, await allowedResponse.json()).toEqual({ ok: true });
547
+ const deniedResponse = await deniedHandle.fetch("/status");
548
+ _vitest.expect.call(void 0, deniedResponse.status).toBe(403);
549
+ });
550
+ _vitest.test.call(void 0, "allows and denies raw websocket handlers", async (c) => {
551
+ const { client } = await setupDriverTest(c, driverTestConfig);
552
+ const allowedHandle = client.accessControlActor.getOrCreate(
553
+ ["raw-websocket-allow"],
554
+ {
555
+ params: { allowWebSocket: true }
556
+ }
557
+ );
558
+ const ws = await allowedHandle.webSocket();
559
+ const welcome = await new Promise((resolve) => {
560
+ ws.addEventListener(
561
+ "message",
562
+ (event) => {
563
+ resolve(
564
+ JSON.parse(event.data)
565
+ );
566
+ },
567
+ { once: true }
568
+ );
569
+ });
570
+ _vitest.expect.call(void 0, welcome.type).toBe("welcome");
571
+ ws.close();
572
+ const deniedHandle = client.accessControlActor.getOrCreate(
573
+ ["raw-websocket-deny"],
574
+ {
575
+ params: { allowWebSocket: false }
576
+ }
577
+ );
578
+ let denied = false;
579
+ try {
580
+ const deniedWs = await deniedHandle.webSocket();
581
+ const closeEvent = await new Promise((resolve) => {
582
+ deniedWs.addEventListener(
583
+ "close",
584
+ (event) => {
585
+ resolve(event);
586
+ },
587
+ { once: true }
588
+ );
589
+ });
590
+ _vitest.expect.call(void 0, closeEvent.code).toBe(1011);
591
+ denied = true;
592
+ } catch (e2) {
593
+ denied = true;
594
+ }
595
+ _vitest.expect.call(void 0, denied).toBe(true);
596
+ });
597
+ });
598
+ }
599
+
407
600
  // src/driver-test-suite/tests/actor-conn.ts
408
601
 
409
602
  function runActorConnTests(driverTestConfig) {
@@ -796,7 +989,7 @@ function runActorConnHibernationTests(driverTestConfig) {
796
989
  await hibernatingActor.triggerSleep();
797
990
  await waitFor(
798
991
  driverTestConfig,
799
- _chunk2IJTYN6Kcjs.HIBERNATION_SLEEP_TIMEOUT + 100
992
+ _chunkXWBAQO5Hcjs.HIBERNATION_SLEEP_TIMEOUT + 100
800
993
  );
801
994
  const ping2 = await hibernatingActor.ping();
802
995
  _vitest.expect.call(void 0, ping2).toBe("pong");
@@ -818,7 +1011,7 @@ function runActorConnHibernationTests(driverTestConfig) {
818
1011
  await hibernatingActor.triggerSleep();
819
1012
  await waitFor(
820
1013
  driverTestConfig,
821
- _chunk2IJTYN6Kcjs.HIBERNATION_SLEEP_TIMEOUT + 100
1014
+ _chunkXWBAQO5Hcjs.HIBERNATION_SLEEP_TIMEOUT + 100
822
1015
  );
823
1016
  const count3 = await hibernatingActor.getConnCount();
824
1017
  _vitest.expect.call(void 0, count3).toBe(2);
@@ -840,7 +1033,7 @@ function runActorConnHibernationTests(driverTestConfig) {
840
1033
  await conn1.triggerSleep();
841
1034
  await waitFor(
842
1035
  driverTestConfig,
843
- _chunk2IJTYN6Kcjs.HIBERNATION_SLEEP_TIMEOUT + 100
1036
+ _chunkXWBAQO5Hcjs.HIBERNATION_SLEEP_TIMEOUT + 100
844
1037
  );
845
1038
  await conn1.dispose();
846
1039
  await waitFor(driverTestConfig, 250);
@@ -1046,6 +1239,329 @@ function runActorConnStateTests(driverTestConfig) {
1046
1239
  });
1047
1240
  }
1048
1241
 
1242
+ // src/driver-test-suite/tests/actor-db.ts
1243
+
1244
+ var CHUNK_SIZE = 4096;
1245
+ var LARGE_PAYLOAD_SIZE = 32768;
1246
+ var HIGH_VOLUME_COUNT = 1e3;
1247
+ var SLEEP_WAIT_MS = 150;
1248
+ var LIFECYCLE_POLL_INTERVAL_MS = 25;
1249
+ var LIFECYCLE_POLL_ATTEMPTS = 40;
1250
+ var CHUNK_BOUNDARY_SIZES = [
1251
+ CHUNK_SIZE - 1,
1252
+ CHUNK_SIZE,
1253
+ CHUNK_SIZE + 1,
1254
+ 2 * CHUNK_SIZE - 1,
1255
+ 2 * CHUNK_SIZE,
1256
+ 2 * CHUNK_SIZE + 1,
1257
+ 4 * CHUNK_SIZE - 1,
1258
+ 4 * CHUNK_SIZE,
1259
+ 4 * CHUNK_SIZE + 1
1260
+ ];
1261
+ var SHRINK_GROW_INITIAL_ROWS = 16;
1262
+ var SHRINK_GROW_REGROW_ROWS = 10;
1263
+ var SHRINK_GROW_INITIAL_PAYLOAD = 4096;
1264
+ var SHRINK_GROW_REGROW_PAYLOAD = 6144;
1265
+ var HOT_ROW_COUNT = 10;
1266
+ var HOT_ROW_UPDATES = 240;
1267
+ var INTEGRITY_SEED_COUNT = 64;
1268
+ var INTEGRITY_CHURN_COUNT = 120;
1269
+ function getDbActor(client, variant) {
1270
+ return variant === "raw" ? client.dbActorRaw : client.dbActorDrizzle;
1271
+ }
1272
+ function runActorDbTests(driverTestConfig) {
1273
+ const variants = ["raw", "drizzle"];
1274
+ for (const variant of variants) {
1275
+ _vitest.describe.call(void 0, `Actor Database (${variant}) Tests`, () => {
1276
+ _vitest.test.call(void 0, "bootstraps schema on startup", async (c) => {
1277
+ const { client } = await setupDriverTest(c, driverTestConfig);
1278
+ const actor = getDbActor(client, variant).getOrCreate([
1279
+ `db-${variant}-bootstrap-${crypto.randomUUID()}`
1280
+ ]);
1281
+ const count = await actor.getCount();
1282
+ _vitest.expect.call(void 0, count).toBe(0);
1283
+ });
1284
+ _vitest.test.call(void 0, "supports CRUD, raw SQL, and multi-statement exec", async (c) => {
1285
+ const { client } = await setupDriverTest(c, driverTestConfig);
1286
+ const actor = getDbActor(client, variant).getOrCreate([
1287
+ `db-${variant}-crud-${crypto.randomUUID()}`
1288
+ ]);
1289
+ await actor.reset();
1290
+ const first = await actor.insertValue("alpha");
1291
+ const second = await actor.insertValue("beta");
1292
+ const values = await actor.getValues();
1293
+ _vitest.expect.call(void 0, values).toHaveLength(2);
1294
+ _vitest.expect.call(void 0, values[0].value).toBe("alpha");
1295
+ _vitest.expect.call(void 0, values[1].value).toBe("beta");
1296
+ await actor.updateValue(first.id, "alpha-updated");
1297
+ const updated = await actor.getValue(first.id);
1298
+ _vitest.expect.call(void 0, updated).toBe("alpha-updated");
1299
+ await actor.deleteValue(second.id);
1300
+ const count = await actor.getCount();
1301
+ _vitest.expect.call(void 0, count).toBe(1);
1302
+ const rawCount = await actor.rawSelectCount();
1303
+ _vitest.expect.call(void 0, rawCount).toBe(1);
1304
+ const multiValue = await actor.multiStatementInsert("gamma");
1305
+ _vitest.expect.call(void 0, multiValue).toBe("gamma-updated");
1306
+ });
1307
+ _vitest.test.call(void 0, "handles transactions", async (c) => {
1308
+ const { client } = await setupDriverTest(c, driverTestConfig);
1309
+ const actor = getDbActor(client, variant).getOrCreate([
1310
+ `db-${variant}-tx-${crypto.randomUUID()}`
1311
+ ]);
1312
+ await actor.reset();
1313
+ await actor.transactionCommit("commit");
1314
+ _vitest.expect.call(void 0, await actor.getCount()).toBe(1);
1315
+ await actor.transactionRollback("rollback");
1316
+ _vitest.expect.call(void 0, await actor.getCount()).toBe(1);
1317
+ });
1318
+ _vitest.test.call(void 0, "persists across sleep and wake cycles", async (c) => {
1319
+ const { client } = await setupDriverTest(c, driverTestConfig);
1320
+ const actor = getDbActor(client, variant).getOrCreate([
1321
+ `db-${variant}-sleep-${crypto.randomUUID()}`
1322
+ ]);
1323
+ await actor.reset();
1324
+ await actor.insertValue("sleepy");
1325
+ _vitest.expect.call(void 0, await actor.getCount()).toBe(1);
1326
+ for (let i = 0; i < 3; i++) {
1327
+ await actor.triggerSleep();
1328
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS);
1329
+ _vitest.expect.call(void 0, await actor.getCount()).toBe(1);
1330
+ }
1331
+ });
1332
+ _vitest.test.call(void 0, "completes onDisconnect DB writes before sleeping", async (c) => {
1333
+ const { client } = await setupDriverTest(c, driverTestConfig);
1334
+ const key = `db-${variant}-disconnect-${crypto.randomUUID()}`;
1335
+ const actor = getDbActor(client, variant).getOrCreate([key]);
1336
+ await actor.reset();
1337
+ await actor.configureDisconnectInsert(true, 250);
1338
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 250);
1339
+ await actor.configureDisconnectInsert(false, 0);
1340
+ _vitest.expect.call(void 0, await actor.getDisconnectInsertCount()).toBe(1);
1341
+ });
1342
+ _vitest.test.call(void 0, "handles high-volume inserts", async (c) => {
1343
+ const { client } = await setupDriverTest(c, driverTestConfig);
1344
+ const actor = getDbActor(client, variant).getOrCreate([
1345
+ `db-${variant}-high-volume-${crypto.randomUUID()}`
1346
+ ]);
1347
+ await actor.reset();
1348
+ await actor.insertMany(HIGH_VOLUME_COUNT);
1349
+ _vitest.expect.call(void 0, await actor.getCount()).toBe(HIGH_VOLUME_COUNT);
1350
+ });
1351
+ _vitest.test.call(void 0, "handles payloads across chunk boundaries", async (c) => {
1352
+ const { client } = await setupDriverTest(c, driverTestConfig);
1353
+ const actor = getDbActor(client, variant).getOrCreate([
1354
+ `db-${variant}-chunk-${crypto.randomUUID()}`
1355
+ ]);
1356
+ await actor.reset();
1357
+ for (const size of CHUNK_BOUNDARY_SIZES) {
1358
+ const { id } = await actor.insertPayloadOfSize(size);
1359
+ const storedSize = await actor.getPayloadSize(id);
1360
+ _vitest.expect.call(void 0, storedSize).toBe(size);
1361
+ }
1362
+ });
1363
+ _vitest.test.call(void 0, "handles large payloads", async (c) => {
1364
+ const { client } = await setupDriverTest(c, driverTestConfig);
1365
+ const actor = getDbActor(client, variant).getOrCreate([
1366
+ `db-${variant}-large-${crypto.randomUUID()}`
1367
+ ]);
1368
+ await actor.reset();
1369
+ const { id } = await actor.insertPayloadOfSize(LARGE_PAYLOAD_SIZE);
1370
+ const storedSize = await actor.getPayloadSize(id);
1371
+ _vitest.expect.call(void 0, storedSize).toBe(LARGE_PAYLOAD_SIZE);
1372
+ });
1373
+ _vitest.test.call(void 0, "supports shrink and regrow workloads with vacuum", async (c) => {
1374
+ const { client } = await setupDriverTest(c, driverTestConfig);
1375
+ const actor = getDbActor(client, variant).getOrCreate([
1376
+ `db-${variant}-shrink-regrow-${crypto.randomUUID()}`
1377
+ ]);
1378
+ await actor.reset();
1379
+ await actor.vacuum();
1380
+ const baselinePages = await actor.getPageCount();
1381
+ await actor.insertPayloadRows(
1382
+ SHRINK_GROW_INITIAL_ROWS,
1383
+ SHRINK_GROW_INITIAL_PAYLOAD
1384
+ );
1385
+ const grownPages = await actor.getPageCount();
1386
+ await actor.reset();
1387
+ await actor.vacuum();
1388
+ const shrunkPages = await actor.getPageCount();
1389
+ await actor.insertPayloadRows(
1390
+ SHRINK_GROW_REGROW_ROWS,
1391
+ SHRINK_GROW_REGROW_PAYLOAD
1392
+ );
1393
+ const regrownPages = await actor.getPageCount();
1394
+ _vitest.expect.call(void 0, grownPages).toBeGreaterThanOrEqual(baselinePages);
1395
+ _vitest.expect.call(void 0, shrunkPages).toBeLessThanOrEqual(grownPages);
1396
+ _vitest.expect.call(void 0, regrownPages).toBeGreaterThan(shrunkPages);
1397
+ });
1398
+ _vitest.test.call(void 0, "handles repeated updates to the same row", async (c) => {
1399
+ const { client } = await setupDriverTest(c, driverTestConfig);
1400
+ const actor = getDbActor(client, variant).getOrCreate([
1401
+ `db-${variant}-updates-${crypto.randomUUID()}`
1402
+ ]);
1403
+ await actor.reset();
1404
+ const { id } = await actor.insertValue("base");
1405
+ const result = await actor.repeatUpdate(id, 50);
1406
+ _vitest.expect.call(void 0, result.value).toBe("Updated 49");
1407
+ const value = await actor.getValue(id);
1408
+ _vitest.expect.call(void 0, value).toBe("Updated 49");
1409
+ const hotRowIds = [];
1410
+ for (let i = 0; i < HOT_ROW_COUNT; i++) {
1411
+ const row = await actor.insertValue(`init-${i}`);
1412
+ hotRowIds.push(row.id);
1413
+ }
1414
+ const updatedRows = await actor.roundRobinUpdateValues(
1415
+ hotRowIds,
1416
+ HOT_ROW_UPDATES
1417
+ );
1418
+ _vitest.expect.call(void 0, updatedRows).toHaveLength(HOT_ROW_COUNT);
1419
+ for (const row of updatedRows) {
1420
+ _vitest.expect.call(void 0, row.value).toMatch(/^v-\d+$/);
1421
+ }
1422
+ });
1423
+ _vitest.test.call(void 0, "passes integrity checks after mixed workload and sleep", async (c) => {
1424
+ const { client } = await setupDriverTest(c, driverTestConfig);
1425
+ const actor = getDbActor(client, variant).getOrCreate([
1426
+ `db-${variant}-integrity-${crypto.randomUUID()}`
1427
+ ]);
1428
+ await actor.reset();
1429
+ await actor.runMixedWorkload(
1430
+ INTEGRITY_SEED_COUNT,
1431
+ INTEGRITY_CHURN_COUNT
1432
+ );
1433
+ _vitest.expect.call(void 0, (await actor.integrityCheck()).toLowerCase()).toBe("ok");
1434
+ await actor.triggerSleep();
1435
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
1436
+ _vitest.expect.call(void 0, (await actor.integrityCheck()).toLowerCase()).toBe("ok");
1437
+ });
1438
+ });
1439
+ }
1440
+ _vitest.describe.call(void 0, "Actor Database Lifecycle Cleanup Tests", () => {
1441
+ _vitest.test.call(void 0, "runs db provider cleanup on sleep", async (c) => {
1442
+ const { client } = await setupDriverTest(c, driverTestConfig);
1443
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
1444
+ const lifecycle = client.dbLifecycle.getOrCreate([
1445
+ `db-lifecycle-sleep-${crypto.randomUUID()}`
1446
+ ]);
1447
+ const actorId = await lifecycle.getActorId();
1448
+ const before = await observer.getCounts(actorId);
1449
+ await lifecycle.insertValue("before-sleep");
1450
+ await lifecycle.triggerSleep();
1451
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
1452
+ await lifecycle.ping();
1453
+ let after = before;
1454
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
1455
+ after = await observer.getCounts(actorId);
1456
+ if (after.cleanup >= before.cleanup + 1) {
1457
+ break;
1458
+ }
1459
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
1460
+ }
1461
+ _vitest.expect.call(void 0, after.create).toBeGreaterThanOrEqual(before.create);
1462
+ _vitest.expect.call(void 0, after.migrate).toBeGreaterThanOrEqual(before.migrate);
1463
+ _vitest.expect.call(void 0, after.cleanup).toBeGreaterThanOrEqual(before.cleanup + 1);
1464
+ });
1465
+ _vitest.test.call(void 0, "runs db provider cleanup on destroy", async (c) => {
1466
+ const { client } = await setupDriverTest(c, driverTestConfig);
1467
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
1468
+ const lifecycle = client.dbLifecycle.getOrCreate([
1469
+ `db-lifecycle-destroy-${crypto.randomUUID()}`
1470
+ ]);
1471
+ const actorId = await lifecycle.getActorId();
1472
+ const before = await observer.getCounts(actorId);
1473
+ await lifecycle.insertValue("before-destroy");
1474
+ await lifecycle.triggerDestroy();
1475
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
1476
+ let cleanupCount = before.cleanup;
1477
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
1478
+ const counts = await observer.getCounts(actorId);
1479
+ cleanupCount = counts.cleanup;
1480
+ if (cleanupCount >= before.cleanup + 1) {
1481
+ break;
1482
+ }
1483
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
1484
+ }
1485
+ _vitest.expect.call(void 0, cleanupCount).toBeGreaterThanOrEqual(before.cleanup + 1);
1486
+ });
1487
+ _vitest.test.call(void 0, "runs db provider cleanup when migration fails", async (c) => {
1488
+ const { client } = await setupDriverTest(c, driverTestConfig);
1489
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
1490
+ const key = `db-lifecycle-migrate-failure-${crypto.randomUUID()}`;
1491
+ const lifecycle = client.dbLifecycleFailing.getOrCreate([key]);
1492
+ let threw = false;
1493
+ try {
1494
+ await lifecycle.ping();
1495
+ } catch (e3) {
1496
+ threw = true;
1497
+ }
1498
+ _vitest.expect.call(void 0, threw).toBeTruthy();
1499
+ const actorId = await client.dbLifecycleFailing.get([key]).resolve();
1500
+ let cleanupCount = 0;
1501
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
1502
+ const counts = await observer.getCounts(actorId);
1503
+ cleanupCount = counts.cleanup;
1504
+ if (cleanupCount >= 1) {
1505
+ break;
1506
+ }
1507
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
1508
+ }
1509
+ _vitest.expect.call(void 0, cleanupCount).toBeGreaterThanOrEqual(1);
1510
+ });
1511
+ _vitest.test.call(void 0, "handles parallel actor lifecycle churn", async (c) => {
1512
+ const { client } = await setupDriverTest(c, driverTestConfig);
1513
+ const observer = client.dbLifecycleObserver.getOrCreate(["observer"]);
1514
+ const actorHandles = Array.from(
1515
+ { length: 12 },
1516
+ (_, i) => client.dbLifecycle.getOrCreate([
1517
+ `db-lifecycle-stress-${i}-${crypto.randomUUID()}`
1518
+ ])
1519
+ );
1520
+ const actorIds = await Promise.all(
1521
+ actorHandles.map((handle) => handle.getActorId())
1522
+ );
1523
+ await Promise.all(
1524
+ actorHandles.map((handle, i) => handle.insertValue(`phase-1-${i}`))
1525
+ );
1526
+ await Promise.all(actorHandles.map((handle) => handle.triggerSleep()));
1527
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
1528
+ await Promise.all(
1529
+ actorHandles.map((handle, i) => handle.insertValue(`phase-2-${i}`))
1530
+ );
1531
+ const survivors = actorHandles.slice(0, 6);
1532
+ const destroyed = actorHandles.slice(6);
1533
+ await Promise.all(destroyed.map((handle) => handle.triggerDestroy()));
1534
+ await Promise.all(survivors.map((handle) => handle.triggerSleep()));
1535
+ await waitFor(driverTestConfig, SLEEP_WAIT_MS + 100);
1536
+ await Promise.all(survivors.map((handle) => handle.ping()));
1537
+ const survivorCounts = await Promise.all(
1538
+ survivors.map((handle) => handle.getCount())
1539
+ );
1540
+ for (const count of survivorCounts) {
1541
+ _vitest.expect.call(void 0, count).toBe(2);
1542
+ }
1543
+ const lifecycleCleanup = /* @__PURE__ */ new Map();
1544
+ for (let i = 0; i < LIFECYCLE_POLL_ATTEMPTS; i++) {
1545
+ let allCleaned = true;
1546
+ for (const actorId of actorIds) {
1547
+ const counts = await observer.getCounts(actorId);
1548
+ lifecycleCleanup.set(actorId, counts.cleanup);
1549
+ if (counts.cleanup < 1) {
1550
+ allCleaned = false;
1551
+ }
1552
+ }
1553
+ if (allCleaned) {
1554
+ break;
1555
+ }
1556
+ await waitFor(driverTestConfig, LIFECYCLE_POLL_INTERVAL_MS);
1557
+ }
1558
+ for (const actorId of actorIds) {
1559
+ _vitest.expect.call(void 0, _nullishCoalesce(lifecycleCleanup.get(actorId), () => ( 0))).toBeGreaterThanOrEqual(1);
1560
+ }
1561
+ });
1562
+ });
1563
+ }
1564
+
1049
1565
  // src/driver-test-suite/tests/actor-destroy.ts
1050
1566
 
1051
1567
  function runActorDestroyTests(driverTestConfig) {
@@ -1281,10 +1797,13 @@ function runActorScheduleTests(driverTestConfig) {
1281
1797
  await scheduled.scheduleTaskAfterWithId("third", 1250);
1282
1798
  await waitFor(driverTestConfig, 500);
1283
1799
  const history1 = await scheduled.getTaskHistory();
1284
- _vitest.expect.call(void 0, history1).toEqual(["first"]);
1800
+ _vitest.expect.call(void 0, history1[0]).toBe("first");
1285
1801
  await waitFor(driverTestConfig, 500);
1286
1802
  const history2 = await scheduled.getTaskHistory();
1287
- _vitest.expect.call(void 0, history2).toEqual(["first", "second"]);
1803
+ _vitest.expect.call(void 0, history2.slice(0, 2)).toEqual([
1804
+ "first",
1805
+ "second"
1806
+ ]);
1288
1807
  await waitFor(driverTestConfig, 500);
1289
1808
  const history3 = await scheduled.getTaskHistory();
1290
1809
  _vitest.expect.call(void 0, history3).toEqual(["first", "second", "third"]);
@@ -1325,7 +1844,7 @@ function runActorSleepTests(driverTestConfig) {
1325
1844
  }
1326
1845
  await sleepActor.triggerSleep();
1327
1846
  await sleepActor.dispose();
1328
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1847
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1329
1848
  const sleepActor2 = client.sleep.getOrCreate();
1330
1849
  {
1331
1850
  const { startCount, sleepCount } = await sleepActor2.getCounts();
@@ -1341,7 +1860,7 @@ function runActorSleepTests(driverTestConfig) {
1341
1860
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1342
1861
  _vitest.expect.call(void 0, startCount).toBe(1);
1343
1862
  }
1344
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1863
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1345
1864
  {
1346
1865
  const { startCount, sleepCount } = await sleepActor.getCounts();
1347
1866
  _vitest.expect.call(void 0, sleepCount).toBe(1);
@@ -1357,7 +1876,7 @@ function runActorSleepTests(driverTestConfig) {
1357
1876
  _vitest.expect.call(void 0, startCount).toBe(1);
1358
1877
  }
1359
1878
  await sleepActor.dispose();
1360
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1879
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1361
1880
  const sleepActor2 = client.sleep.getOrCreate();
1362
1881
  {
1363
1882
  const { startCount, sleepCount } = await sleepActor2.getCounts();
@@ -1373,19 +1892,19 @@ function runActorSleepTests(driverTestConfig) {
1373
1892
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1374
1893
  _vitest.expect.call(void 0, startCount).toBe(1);
1375
1894
  }
1376
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT - 250);
1895
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT - 250);
1377
1896
  {
1378
1897
  const { startCount, sleepCount } = await sleepActor.getCounts();
1379
1898
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1380
1899
  _vitest.expect.call(void 0, startCount).toBe(1);
1381
1900
  }
1382
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT - 250);
1901
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT - 250);
1383
1902
  {
1384
1903
  const { startCount, sleepCount } = await sleepActor.getCounts();
1385
1904
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1386
1905
  _vitest.expect.call(void 0, startCount).toBe(1);
1387
1906
  }
1388
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1907
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1389
1908
  {
1390
1909
  const { startCount, sleepCount } = await sleepActor.getCounts();
1391
1910
  _vitest.expect.call(void 0, sleepCount).toBe(1);
@@ -1400,8 +1919,8 @@ function runActorSleepTests(driverTestConfig) {
1400
1919
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1401
1920
  _vitest.expect.call(void 0, startCount).toBe(1);
1402
1921
  }
1403
- await sleepActor.setAlarm(_chunk2IJTYN6Kcjs.SLEEP_TIMEOUT - 250);
1404
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1922
+ await sleepActor.setAlarm(_chunkXWBAQO5Hcjs.SLEEP_TIMEOUT - 250);
1923
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1405
1924
  {
1406
1925
  const { startCount, sleepCount } = await sleepActor.getCounts();
1407
1926
  _vitest.expect.call(void 0, sleepCount).toBe(0);
@@ -1416,8 +1935,8 @@ function runActorSleepTests(driverTestConfig) {
1416
1935
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1417
1936
  _vitest.expect.call(void 0, startCount).toBe(1);
1418
1937
  }
1419
- await sleepActor.setAlarm(_chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1420
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 200);
1938
+ await sleepActor.setAlarm(_chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1939
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 200);
1421
1940
  {
1422
1941
  const { startCount, sleepCount } = await sleepActor.getCounts();
1423
1942
  _vitest.expect.call(void 0, sleepCount).toBe(1);
@@ -1437,7 +1956,7 @@ function runActorSleepTests(driverTestConfig) {
1437
1956
  );
1438
1957
  const longRunningPromise = sleepActor.longRunningRpc();
1439
1958
  await waitPromise;
1440
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1959
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1441
1960
  await sleepActor.finishLongRunningRpc();
1442
1961
  await longRunningPromise;
1443
1962
  {
@@ -1446,7 +1965,7 @@ function runActorSleepTests(driverTestConfig) {
1446
1965
  _vitest.expect.call(void 0, startCount).toBe(1);
1447
1966
  }
1448
1967
  await sleepActor.dispose();
1449
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
1968
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1450
1969
  const sleepActor2 = client.sleepWithLongRpc.getOrCreate();
1451
1970
  {
1452
1971
  const { startCount, sleepCount } = await sleepActor2.getCounts();
@@ -1465,7 +1984,7 @@ function runActorSleepTests(driverTestConfig) {
1465
1984
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1466
1985
  _vitest.expect.call(void 0, startCount).toBe(1);
1467
1986
  }
1468
- const ws = await sleepActor.websocket();
1987
+ const ws = await sleepActor.webSocket();
1469
1988
  await new Promise((resolve, reject) => {
1470
1989
  ws.onopen = () => resolve();
1471
1990
  ws.onerror = reject;
@@ -1478,7 +1997,7 @@ function runActorSleepTests(driverTestConfig) {
1478
1997
  }
1479
1998
  };
1480
1999
  });
1481
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
2000
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1482
2001
  ws.send(JSON.stringify({ type: "getCounts" }));
1483
2002
  const counts = await new Promise((resolve) => {
1484
2003
  ws.onmessage = (event) => {
@@ -1491,7 +2010,7 @@ function runActorSleepTests(driverTestConfig) {
1491
2010
  _vitest.expect.call(void 0, counts.sleepCount).toBe(0);
1492
2011
  _vitest.expect.call(void 0, counts.startCount).toBe(1);
1493
2012
  ws.close();
1494
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
2013
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1495
2014
  {
1496
2015
  const { startCount, sleepCount } = await sleepActor.getCounts();
1497
2016
  _vitest.expect.call(void 0, sleepCount).toBe(1);
@@ -1509,7 +2028,7 @@ function runActorSleepTests(driverTestConfig) {
1509
2028
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1510
2029
  _vitest.expect.call(void 0, startCount).toBe(1);
1511
2030
  }
1512
- const fetchDuration = _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250;
2031
+ const fetchDuration = _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250;
1513
2032
  const fetchPromise = sleepActor.fetch(
1514
2033
  `long-request?duration=${fetchDuration}`
1515
2034
  );
@@ -1522,7 +2041,7 @@ function runActorSleepTests(driverTestConfig) {
1522
2041
  _vitest.expect.call(void 0, startCount).toBe(1);
1523
2042
  _vitest.expect.call(void 0, requestCount).toBe(1);
1524
2043
  }
1525
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
2044
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1526
2045
  {
1527
2046
  const { startCount, sleepCount } = await sleepActor.getCounts();
1528
2047
  _vitest.expect.call(void 0, sleepCount).toBe(1);
@@ -1537,13 +2056,13 @@ function runActorSleepTests(driverTestConfig) {
1537
2056
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1538
2057
  _vitest.expect.call(void 0, startCount).toBe(1);
1539
2058
  }
1540
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
2059
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1541
2060
  {
1542
2061
  const { startCount, sleepCount } = await sleepActor.getCounts();
1543
2062
  _vitest.expect.call(void 0, sleepCount).toBe(0);
1544
2063
  _vitest.expect.call(void 0, startCount).toBe(1);
1545
2064
  }
1546
- await waitFor(driverTestConfig, _chunk2IJTYN6Kcjs.SLEEP_TIMEOUT + 250);
2065
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.SLEEP_TIMEOUT + 250);
1547
2066
  {
1548
2067
  const { startCount, sleepCount } = await sleepActor.getCounts();
1549
2068
  _vitest.expect.call(void 0, sleepCount).toBe(0);
@@ -1639,8 +2158,8 @@ function runActorErrorHandlingTests(driverTestConfig) {
1639
2158
  await handle.throwInternalError();
1640
2159
  _vitest.expect.call(void 0, true).toBe(false);
1641
2160
  } catch (error) {
1642
- _vitest.expect.call(void 0, error.code).toBe(_chunk2XQS746Mcjs.INTERNAL_ERROR_CODE);
1643
- _vitest.expect.call(void 0, error.message).toBe(_chunk2XQS746Mcjs.INTERNAL_ERROR_DESCRIPTION);
2161
+ _vitest.expect.call(void 0, error.code).toBe(_chunkL47L3ZWJcjs.INTERNAL_ERROR_CODE);
2162
+ _vitest.expect.call(void 0, error.message).toBe(_chunkL47L3ZWJcjs.INTERNAL_ERROR_DESCRIPTION);
1644
2163
  }
1645
2164
  });
1646
2165
  });
@@ -2000,7 +2519,197 @@ function runActorInlineClientTests(driverTestConfig) {
2000
2519
  // src/driver-test-suite/tests/actor-inspector.ts
2001
2520
 
2002
2521
  function runActorInspectorTests(driverTestConfig) {
2003
- _vitest.describe.skip("Actor Inspector Tests", () => {
2522
+ _vitest.describe.call(void 0, "Actor Inspector HTTP API", () => {
2523
+ _vitest.test.call(void 0, "GET /inspector/state returns actor state", async (c) => {
2524
+ const { client } = await setupDriverTest(c, driverTestConfig);
2525
+ const handle = client.counter.getOrCreate(["inspector-state"]);
2526
+ await handle.increment(5);
2527
+ const gatewayUrl = await handle.getGatewayUrl();
2528
+ const response = await fetch(`${gatewayUrl}/inspector/state`, {
2529
+ headers: { Authorization: "Bearer token" }
2530
+ });
2531
+ _vitest.expect.call(void 0, response.status).toBe(200);
2532
+ const data = await response.json();
2533
+ _vitest.expect.call(void 0, data).toEqual({ state: { count: 5 } });
2534
+ });
2535
+ _vitest.test.call(void 0, "PATCH /inspector/state updates actor state", async (c) => {
2536
+ const { client } = await setupDriverTest(c, driverTestConfig);
2537
+ const handle = client.counter.getOrCreate([
2538
+ "inspector-set-state"
2539
+ ]);
2540
+ await handle.increment(5);
2541
+ const gatewayUrl = await handle.getGatewayUrl();
2542
+ const patchResponse = await fetch(
2543
+ `${gatewayUrl}/inspector/state`,
2544
+ {
2545
+ method: "PATCH",
2546
+ headers: {
2547
+ "Content-Type": "application/json",
2548
+ Authorization: "Bearer token"
2549
+ },
2550
+ body: JSON.stringify({ state: { count: 42 } })
2551
+ }
2552
+ );
2553
+ _vitest.expect.call(void 0, patchResponse.status).toBe(200);
2554
+ const patchData = await patchResponse.json();
2555
+ _vitest.expect.call(void 0, patchData).toEqual({ ok: true });
2556
+ const count = await handle.getCount();
2557
+ _vitest.expect.call(void 0, count).toBe(42);
2558
+ });
2559
+ _vitest.test.call(void 0, "GET /inspector/connections returns connections list", async (c) => {
2560
+ const { client } = await setupDriverTest(c, driverTestConfig);
2561
+ const handle = client.counter.getOrCreate([
2562
+ "inspector-connections"
2563
+ ]);
2564
+ await handle.increment(0);
2565
+ const gatewayUrl = await handle.getGatewayUrl();
2566
+ const response = await fetch(
2567
+ `${gatewayUrl}/inspector/connections`,
2568
+ {
2569
+ headers: { Authorization: "Bearer token" }
2570
+ }
2571
+ );
2572
+ _vitest.expect.call(void 0, response.status).toBe(200);
2573
+ const data = await response.json();
2574
+ _vitest.expect.call(void 0, data).toHaveProperty("connections");
2575
+ _vitest.expect.call(void 0, Array.isArray(data.connections)).toBe(true);
2576
+ });
2577
+ _vitest.test.call(void 0, "GET /inspector/rpcs returns available actions", async (c) => {
2578
+ const { client } = await setupDriverTest(c, driverTestConfig);
2579
+ const handle = client.counter.getOrCreate(["inspector-rpcs"]);
2580
+ await handle.increment(0);
2581
+ const gatewayUrl = await handle.getGatewayUrl();
2582
+ const response = await fetch(`${gatewayUrl}/inspector/rpcs`, {
2583
+ headers: { Authorization: "Bearer token" }
2584
+ });
2585
+ _vitest.expect.call(void 0, response.status).toBe(200);
2586
+ const data = await response.json();
2587
+ _vitest.expect.call(void 0, data).toHaveProperty("rpcs");
2588
+ _vitest.expect.call(void 0, data.rpcs).toContain("increment");
2589
+ _vitest.expect.call(void 0, data.rpcs).toContain("getCount");
2590
+ _vitest.expect.call(void 0, data.rpcs).toContain("setCount");
2591
+ });
2592
+ _vitest.test.call(void 0, "POST /inspector/action/:name executes an action", async (c) => {
2593
+ const { client } = await setupDriverTest(c, driverTestConfig);
2594
+ const handle = client.counter.getOrCreate([
2595
+ "inspector-action"
2596
+ ]);
2597
+ await handle.increment(10);
2598
+ const gatewayUrl = await handle.getGatewayUrl();
2599
+ const response = await fetch(
2600
+ `${gatewayUrl}/inspector/action/increment`,
2601
+ {
2602
+ method: "POST",
2603
+ headers: {
2604
+ "Content-Type": "application/json",
2605
+ Authorization: "Bearer token"
2606
+ },
2607
+ body: JSON.stringify({ args: [5] })
2608
+ }
2609
+ );
2610
+ _vitest.expect.call(void 0, response.status).toBe(200);
2611
+ const data = await response.json();
2612
+ _vitest.expect.call(void 0, data.output).toBe(15);
2613
+ const count = await handle.getCount();
2614
+ _vitest.expect.call(void 0, count).toBe(15);
2615
+ });
2616
+ _vitest.test.call(void 0, "GET /inspector/queue returns queue status", async (c) => {
2617
+ const { client } = await setupDriverTest(c, driverTestConfig);
2618
+ const handle = client.counter.getOrCreate(["inspector-queue"]);
2619
+ await handle.increment(0);
2620
+ const gatewayUrl = await handle.getGatewayUrl();
2621
+ const response = await fetch(
2622
+ `${gatewayUrl}/inspector/queue?limit=10`,
2623
+ {
2624
+ headers: { Authorization: "Bearer token" }
2625
+ }
2626
+ );
2627
+ _vitest.expect.call(void 0, response.status).toBe(200);
2628
+ const data = await response.json();
2629
+ _vitest.expect.call(void 0, data).toHaveProperty("size");
2630
+ _vitest.expect.call(void 0, data).toHaveProperty("maxSize");
2631
+ _vitest.expect.call(void 0, data).toHaveProperty("truncated");
2632
+ _vitest.expect.call(void 0, data).toHaveProperty("messages");
2633
+ _vitest.expect.call(void 0, typeof data.size).toBe("number");
2634
+ _vitest.expect.call(void 0, typeof data.maxSize).toBe("number");
2635
+ _vitest.expect.call(void 0, typeof data.truncated).toBe("boolean");
2636
+ _vitest.expect.call(void 0, Array.isArray(data.messages)).toBe(true);
2637
+ });
2638
+ _vitest.test.call(void 0, "GET /inspector/traces returns trace data", async (c) => {
2639
+ const { client } = await setupDriverTest(c, driverTestConfig);
2640
+ const handle = client.counter.getOrCreate([
2641
+ "inspector-traces"
2642
+ ]);
2643
+ await handle.increment(1);
2644
+ const gatewayUrl = await handle.getGatewayUrl();
2645
+ const response = await fetch(
2646
+ `${gatewayUrl}/inspector/traces?startMs=0&endMs=${Date.now() + 6e4}&limit=100`,
2647
+ {
2648
+ headers: { Authorization: "Bearer token" }
2649
+ }
2650
+ );
2651
+ _vitest.expect.call(void 0, response.status).toBe(200);
2652
+ const data = await response.json();
2653
+ _vitest.expect.call(void 0, data).toHaveProperty("otlp");
2654
+ _vitest.expect.call(void 0, data).toHaveProperty("clamped");
2655
+ _vitest.expect.call(void 0, typeof data.clamped).toBe("boolean");
2656
+ });
2657
+ _vitest.test.call(void 0, "GET /inspector/workflow-history returns workflow status", async (c) => {
2658
+ const { client } = await setupDriverTest(c, driverTestConfig);
2659
+ const handle = client.counter.getOrCreate([
2660
+ "inspector-workflow"
2661
+ ]);
2662
+ await handle.increment(0);
2663
+ const gatewayUrl = await handle.getGatewayUrl();
2664
+ const response = await fetch(
2665
+ `${gatewayUrl}/inspector/workflow-history`,
2666
+ {
2667
+ headers: { Authorization: "Bearer token" }
2668
+ }
2669
+ );
2670
+ _vitest.expect.call(void 0, response.status).toBe(200);
2671
+ const data = await response.json();
2672
+ _vitest.expect.call(void 0, data).toHaveProperty("history");
2673
+ _vitest.expect.call(void 0, data).toHaveProperty("isWorkflowEnabled");
2674
+ _vitest.expect.call(void 0, data.isWorkflowEnabled).toBe(false);
2675
+ _vitest.expect.call(void 0, data.history).toBeNull();
2676
+ });
2677
+ _vitest.test.call(void 0, "GET /inspector/summary returns full actor snapshot", async (c) => {
2678
+ const { client } = await setupDriverTest(c, driverTestConfig);
2679
+ const handle = client.counter.getOrCreate([
2680
+ "inspector-summary"
2681
+ ]);
2682
+ await handle.increment(7);
2683
+ const gatewayUrl = await handle.getGatewayUrl();
2684
+ const response = await fetch(
2685
+ `${gatewayUrl}/inspector/summary`,
2686
+ {
2687
+ headers: { Authorization: "Bearer token" }
2688
+ }
2689
+ );
2690
+ _vitest.expect.call(void 0, response.status).toBe(200);
2691
+ const data = await response.json();
2692
+ _vitest.expect.call(void 0, data.state).toEqual({ count: 7 });
2693
+ _vitest.expect.call(void 0, Array.isArray(data.connections)).toBe(true);
2694
+ _vitest.expect.call(void 0, data.rpcs).toContain("increment");
2695
+ _vitest.expect.call(void 0, typeof data.queueSize).toBe("number");
2696
+ _vitest.expect.call(void 0, data.isStateEnabled).toBe(true);
2697
+ _vitest.expect.call(void 0, typeof data.isDatabaseEnabled).toBe("boolean");
2698
+ _vitest.expect.call(void 0, data.isWorkflowEnabled).toBe(false);
2699
+ _vitest.expect.call(void 0, data.workflowHistory).toBeNull();
2700
+ });
2701
+ _vitest.test.call(void 0, "inspector endpoints require auth in non-dev mode", async (c) => {
2702
+ const { client } = await setupDriverTest(c, driverTestConfig);
2703
+ const handle = client.counter.getOrCreate([
2704
+ "inspector-auth"
2705
+ ]);
2706
+ await handle.increment(0);
2707
+ const gatewayUrl = await handle.getGatewayUrl();
2708
+ const response = await fetch(`${gatewayUrl}/inspector/state`, {
2709
+ headers: { Authorization: "Bearer wrong-token" }
2710
+ });
2711
+ _vitest.expect.call(void 0, response.status).toBe(401);
2712
+ });
2004
2713
  });
2005
2714
  }
2006
2715
 
@@ -2009,7 +2718,11 @@ function runActorInspectorTests(driverTestConfig) {
2009
2718
  function runActorKvTests(driverTestConfig) {
2010
2719
  _vitest.describe.call(void 0, "Actor KV Tests", () => {
2011
2720
  _vitest.test.call(void 0, "supports text encoding and decoding", async (c) => {
2012
- const { client } = await setupDriverTest(c, driverTestConfig);
2721
+ const { client: rawClient } = await setupDriverTest(
2722
+ c,
2723
+ driverTestConfig
2724
+ );
2725
+ const client = rawClient;
2013
2726
  const kvHandle = client.kvActor.getOrCreate(["kv-text"]);
2014
2727
  await kvHandle.putText("greeting", "hello");
2015
2728
  const value = await kvHandle.getText("greeting");
@@ -2026,8 +2739,14 @@ function runActorKvTests(driverTestConfig) {
2026
2739
  _vitest.test.call(void 0,
2027
2740
  "supports arrayBuffer encoding and decoding",
2028
2741
  async (c) => {
2029
- const { client } = await setupDriverTest(c, driverTestConfig);
2030
- const kvHandle = client.kvActor.getOrCreate(["kv-array-buffer"]);
2742
+ const { client: rawClient } = await setupDriverTest(
2743
+ c,
2744
+ driverTestConfig
2745
+ );
2746
+ const client = rawClient;
2747
+ const kvHandle = client.kvActor.getOrCreate([
2748
+ "kv-array-buffer"
2749
+ ]);
2031
2750
  const values = await kvHandle.roundtripArrayBuffer("bytes", [
2032
2751
  4,
2033
2752
  8,
@@ -2172,6 +2891,437 @@ function runActorOnStateChangeTests(driverTestConfig) {
2172
2891
  });
2173
2892
  }
2174
2893
 
2894
+ // src/driver-test-suite/tests/actor-queue.ts
2895
+
2896
+ function runActorQueueTests(driverTestConfig) {
2897
+ _vitest.describe.call(void 0, "Actor Queue Tests", () => {
2898
+ _vitest.test.call(void 0, "client can send to actor queue", async (c) => {
2899
+ const { client } = await setupDriverTest(c, driverTestConfig);
2900
+ const handle = client.queueActor.getOrCreate(["client-send"]);
2901
+ await handle.send("greeting", { hello: "world" });
2902
+ const message = await handle.receiveOne("greeting");
2903
+ _vitest.expect.call(void 0, message).toEqual({
2904
+ name: "greeting",
2905
+ body: { hello: "world" }
2906
+ });
2907
+ });
2908
+ _vitest.test.call(void 0, "actor can send to its own queue", async (c) => {
2909
+ const { client } = await setupDriverTest(c, driverTestConfig);
2910
+ const handle = client.queueActor.getOrCreate(["self-send"]);
2911
+ await handle.sendToSelf("self", { value: 42 });
2912
+ const message = await handle.receiveOne("self");
2913
+ _vitest.expect.call(void 0, message).toEqual({ name: "self", body: { value: 42 } });
2914
+ });
2915
+ _vitest.test.call(void 0, "next supports name arrays and counts", async (c) => {
2916
+ const { client } = await setupDriverTest(c, driverTestConfig);
2917
+ const handle = client.queueActor.getOrCreate(["receive-array"]);
2918
+ await handle.send("a", 1);
2919
+ await handle.send("b", 2);
2920
+ await handle.send("c", 3);
2921
+ const messages = await handle.receiveMany(["a", "b"], { count: 2 });
2922
+ _vitest.expect.call(void 0, messages).toEqual([
2923
+ { name: "a", body: 1 },
2924
+ { name: "b", body: 2 }
2925
+ ]);
2926
+ });
2927
+ _vitest.test.call(void 0, "next supports request objects", async (c) => {
2928
+ const { client } = await setupDriverTest(c, driverTestConfig);
2929
+ const handle = client.queueActor.getOrCreate(["receive-request"]);
2930
+ await handle.send("one", "first");
2931
+ await handle.send("two", "second");
2932
+ const messages = await handle.receiveRequest({
2933
+ names: ["one", "two"],
2934
+ count: 2
2935
+ });
2936
+ _vitest.expect.call(void 0, messages).toEqual([
2937
+ { name: "one", body: "first" },
2938
+ { name: "two", body: "second" }
2939
+ ]);
2940
+ });
2941
+ _vitest.test.call(void 0, "next defaults to all names when names is omitted", async (c) => {
2942
+ const { client } = await setupDriverTest(c, driverTestConfig);
2943
+ const handle = client.queueActor.getOrCreate([
2944
+ "receive-request-all"
2945
+ ]);
2946
+ await handle.send("one", "first");
2947
+ await handle.send("two", "second");
2948
+ const messages = await handle.receiveRequest({ count: 2 });
2949
+ _vitest.expect.call(void 0, messages).toEqual([
2950
+ { name: "one", body: "first" },
2951
+ { name: "two", body: "second" }
2952
+ ]);
2953
+ });
2954
+ _vitest.test.call(void 0, "next timeout returns empty array", async (c) => {
2955
+ const { client } = await setupDriverTest(c, driverTestConfig);
2956
+ const handle = client.queueActor.getOrCreate(["receive-timeout"]);
2957
+ const promise = handle.receiveMany(["missing"], { timeout: 50 });
2958
+ await waitFor(driverTestConfig, 60);
2959
+ const messages = await promise;
2960
+ _vitest.expect.call(void 0, messages).toEqual([]);
2961
+ });
2962
+ _vitest.test.call(void 0, "tryNext does not wait and returns empty array", async (c) => {
2963
+ const { client } = await setupDriverTest(c, driverTestConfig);
2964
+ const handle = client.queueActor.getOrCreate(["try-next-empty"]);
2965
+ const messages = await handle.tryReceiveMany({
2966
+ names: ["missing"],
2967
+ count: 1
2968
+ });
2969
+ _vitest.expect.call(void 0, messages).toEqual([]);
2970
+ });
2971
+ _vitest.test.call(void 0, "abort throws ActorAborted", async (c) => {
2972
+ const { client } = await setupDriverTest(c, driverTestConfig);
2973
+ const handle = client.queueActor.getOrCreate(["abort-test"]);
2974
+ try {
2975
+ await handle.waitForAbort();
2976
+ _vitest.expect.fail("expected ActorAborted error");
2977
+ } catch (error) {
2978
+ _vitest.expect.call(void 0, error.group).toBe("actor");
2979
+ _vitest.expect.call(void 0, error.code).toBe("aborted");
2980
+ }
2981
+ });
2982
+ _vitest.test.call(void 0, "next supports signal abort", async (c) => {
2983
+ const { client } = await setupDriverTest(c, driverTestConfig);
2984
+ const handle = client.queueActor.getOrCreate(["signal-abort-next"]);
2985
+ const result = await handle.waitForSignalAbort();
2986
+ _vitest.expect.call(void 0, result).toEqual({
2987
+ group: "actor",
2988
+ code: "aborted"
2989
+ });
2990
+ });
2991
+ _vitest.test.call(void 0, "next supports actor abort when signal is provided", async (c) => {
2992
+ const { client } = await setupDriverTest(c, driverTestConfig);
2993
+ const handle = client.queueActor.getOrCreate([
2994
+ "actor-abort-with-signal-next"
2995
+ ]);
2996
+ const result = await handle.waitForActorAbortWithSignal();
2997
+ _vitest.expect.call(void 0, result).toEqual({
2998
+ group: "actor",
2999
+ code: "aborted"
3000
+ });
3001
+ });
3002
+ _vitest.test.call(void 0, "iter supports signal abort", async (c) => {
3003
+ const { client } = await setupDriverTest(c, driverTestConfig);
3004
+ const handle = client.queueActor.getOrCreate(["signal-abort-iter"]);
3005
+ const result = await handle.iterWithSignalAbort();
3006
+ _vitest.expect.call(void 0, result).toEqual({ ok: true });
3007
+ });
3008
+ _vitest.test.call(void 0, "enforces queue size limit", async (c) => {
3009
+ const { client } = await setupDriverTest(c, driverTestConfig);
3010
+ const key = `size-limit-${Date.now()}-${Math.random().toString(16).slice(2)}`;
3011
+ const handle = client.queueLimitedActor.getOrCreate([key]);
3012
+ await handle.send("message", 1);
3013
+ await waitFor(driverTestConfig, 10);
3014
+ try {
3015
+ await handle.send("message", 2);
3016
+ _vitest.expect.fail("expected queue full error");
3017
+ } catch (error) {
3018
+ _vitest.expect.call(void 0, error).toBeInstanceOf(Error);
3019
+ _vitest.expect.call(void 0, error.message).toContain(
3020
+ "Queue is full. Limit is"
3021
+ );
3022
+ if (driverTestConfig.clientType !== "http") {
3023
+ _vitest.expect.call(void 0, error.group).toBe("queue");
3024
+ _vitest.expect.call(void 0, error.code).toBe("full");
3025
+ }
3026
+ }
3027
+ });
3028
+ _vitest.test.call(void 0, "enforces message size limit", async (c) => {
3029
+ const { client } = await setupDriverTest(c, driverTestConfig);
3030
+ const handle = client.queueLimitedActor.getOrCreate([
3031
+ "message-limit"
3032
+ ]);
3033
+ const largePayload = "a".repeat(200);
3034
+ try {
3035
+ await handle.send("oversize", largePayload);
3036
+ _vitest.expect.fail("expected message_too_large error");
3037
+ } catch (error) {
3038
+ _vitest.expect.call(void 0, error.group).toBe("queue");
3039
+ _vitest.expect.call(void 0, error.code).toBe("message_too_large");
3040
+ }
3041
+ });
3042
+ _vitest.test.call(void 0, "wait send returns completion response", async (c) => {
3043
+ const { client } = await setupDriverTest(c, driverTestConfig);
3044
+ const handle = client.queueActor.getOrCreate(["wait-complete"]);
3045
+ const actionPromise = handle.receiveAndComplete("tasks");
3046
+ const result = await handle.send(
3047
+ "tasks",
3048
+ { value: 123 },
3049
+ { wait: true, timeout: 1e3 }
3050
+ );
3051
+ await actionPromise;
3052
+ _vitest.expect.call(void 0, result).toEqual({
3053
+ status: "completed",
3054
+ response: { echo: { value: 123 } }
3055
+ });
3056
+ });
3057
+ _vitest.test.call(void 0, "wait send times out", async (c) => {
3058
+ const { client } = await setupDriverTest(c, driverTestConfig);
3059
+ const handle = client.queueActor.getOrCreate(["wait-timeout"]);
3060
+ const resultPromise = handle.send(
3061
+ "timeout",
3062
+ { value: 456 },
3063
+ { wait: true, timeout: 50 }
3064
+ );
3065
+ await waitFor(driverTestConfig, 60);
3066
+ const result = await resultPromise;
3067
+ _vitest.expect.call(void 0, result.status).toBe("timedOut");
3068
+ });
3069
+ _vitest.test.call(void 0, "manual receive retries message when not completed", async (c) => {
3070
+ const { client } = await setupDriverTest(c, driverTestConfig);
3071
+ const handle = client.queueActor.getOrCreate([
3072
+ "manual-retry-uncompleted"
3073
+ ]);
3074
+ await handle.send("tasks", { value: 789 });
3075
+ const first = await handle.receiveWithoutComplete("tasks");
3076
+ _vitest.expect.call(void 0, first).toEqual({ name: "tasks", body: { value: 789 } });
3077
+ const retried = await handle.receiveOne("tasks", { timeout: 1e3 });
3078
+ _vitest.expect.call(void 0, retried).toEqual({ name: "tasks", body: { value: 789 } });
3079
+ });
3080
+ _vitest.test.call(void 0, "next throws when previous manual message is not completed", async (c) => {
3081
+ const { client } = await setupDriverTest(c, driverTestConfig);
3082
+ const handle = client.queueActor.getOrCreate([
3083
+ "manual-next-requires-complete"
3084
+ ]);
3085
+ await handle.send("tasks", { value: 111 });
3086
+ const result = await handle.receiveManualThenNextWithoutComplete(
3087
+ "tasks"
3088
+ );
3089
+ _vitest.expect.call(void 0, result).toEqual({
3090
+ group: "queue",
3091
+ code: "previous_message_not_completed"
3092
+ });
3093
+ });
3094
+ _vitest.test.call(void 0, "manual receive includes complete even without completion schema", async (c) => {
3095
+ const { client } = await setupDriverTest(c, driverTestConfig);
3096
+ const handle = client.queueActor.getOrCreate([
3097
+ "complete-not-allowed"
3098
+ ]);
3099
+ await handle.send("nowait", { value: "test" });
3100
+ const result = await handle.receiveWithoutCompleteMethod("nowait");
3101
+ _vitest.expect.call(void 0, result).toEqual({
3102
+ hasComplete: true
3103
+ });
3104
+ });
3105
+ _vitest.test.call(void 0, "manual receive retries queues without completion schema until completed", async (c) => {
3106
+ const { client } = await setupDriverTest(c, driverTestConfig);
3107
+ const handle = client.queueActor.getOrCreate([
3108
+ "complete-not-allowed-consume"
3109
+ ]);
3110
+ await handle.send("nowait", { value: "test" });
3111
+ const result = await handle.receiveWithoutCompleteMethod("nowait");
3112
+ _vitest.expect.call(void 0, result).toEqual({ hasComplete: true });
3113
+ const next = await handle.receiveOne("nowait", { timeout: 1e3 });
3114
+ _vitest.expect.call(void 0, next).toEqual({ name: "nowait", body: { value: "test" } });
3115
+ });
3116
+ _vitest.test.call(void 0, "complete throws when called twice", async (c) => {
3117
+ const { client } = await setupDriverTest(c, driverTestConfig);
3118
+ const handle = client.queueActor.getOrCreate([
3119
+ "complete-twice"
3120
+ ]);
3121
+ await handle.send("twice", { value: "test" });
3122
+ const result = await handle.receiveAndCompleteTwice("twice");
3123
+ _vitest.expect.call(void 0, result).toEqual({
3124
+ group: "queue",
3125
+ code: "already_completed"
3126
+ });
3127
+ });
3128
+ _vitest.test.call(void 0, "wait send no longer requires queue completion schema", async (c) => {
3129
+ const { client } = await setupDriverTest(c, driverTestConfig);
3130
+ const handle = client.queueActor.getOrCreate([
3131
+ "missing-completion-schema"
3132
+ ]);
3133
+ const result = await handle.send(
3134
+ "nowait",
3135
+ { value: "test" },
3136
+ { wait: true, timeout: 50 }
3137
+ );
3138
+ _vitest.expect.call(void 0, result).toEqual({ status: "timedOut" });
3139
+ });
3140
+ _vitest.test.call(void 0, "iter can consume queued messages", async (c) => {
3141
+ const { client } = await setupDriverTest(c, driverTestConfig);
3142
+ const handle = client.queueActor.getOrCreate(["iter-consume"]);
3143
+ await handle.send("one", "first");
3144
+ const message = await handle.receiveWithIterator("one");
3145
+ _vitest.expect.call(void 0, message).toEqual({ name: "one", body: "first" });
3146
+ });
3147
+ _vitest.test.call(void 0, "queue async iterator can consume queued messages", async (c) => {
3148
+ const { client } = await setupDriverTest(c, driverTestConfig);
3149
+ const handle = client.queueActor.getOrCreate([
3150
+ "async-iter-consume"
3151
+ ]);
3152
+ await handle.send("two", "second");
3153
+ const message = await handle.receiveWithAsyncIterator();
3154
+ _vitest.expect.call(void 0, message).toEqual({ name: "two", body: "second" });
3155
+ });
3156
+ });
3157
+ }
3158
+
3159
+ // src/driver-test-suite/tests/actor-run.ts
3160
+
3161
+ function runActorRunTests(driverTestConfig) {
3162
+ var _a;
3163
+ _vitest.describe.skipIf((_a = driverTestConfig.skip) == null ? void 0 : _a.sleep)("Actor Run Tests", () => {
3164
+ _vitest.test.call(void 0, "run handler starts after actor startup", async (c) => {
3165
+ const { client } = await setupDriverTest(c, driverTestConfig);
3166
+ const actor = client.runWithTicks.getOrCreate(["run-starts"]);
3167
+ await waitFor(driverTestConfig, 100);
3168
+ const state = await actor.getState();
3169
+ _vitest.expect.call(void 0, state.runStarted).toBe(true);
3170
+ _vitest.expect.call(void 0, state.tickCount).toBeGreaterThan(0);
3171
+ });
3172
+ _vitest.test.call(void 0, "run handler ticks continuously", async (c) => {
3173
+ const { client } = await setupDriverTest(c, driverTestConfig);
3174
+ const actor = client.runWithTicks.getOrCreate(["run-ticks"]);
3175
+ await waitFor(driverTestConfig, 200);
3176
+ const state1 = await actor.getState();
3177
+ _vitest.expect.call(void 0, state1.tickCount).toBeGreaterThan(0);
3178
+ const count1 = state1.tickCount;
3179
+ await waitFor(driverTestConfig, 200);
3180
+ const state2 = await actor.getState();
3181
+ _vitest.expect.call(void 0, state2.tickCount).toBeGreaterThan(count1);
3182
+ });
3183
+ _vitest.test.call(void 0, "active run handler keeps actor awake past sleep timeout", async (c) => {
3184
+ const { client } = await setupDriverTest(c, driverTestConfig);
3185
+ const actor = client.runWithTicks.getOrCreate([
3186
+ "run-stays-awake"
3187
+ ]);
3188
+ await waitFor(driverTestConfig, 100);
3189
+ const state1 = await actor.getState();
3190
+ _vitest.expect.call(void 0, state1.runStarted).toBe(true);
3191
+ const tickCount1 = state1.tickCount;
3192
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.RUN_SLEEP_TIMEOUT + 300);
3193
+ const state2 = await actor.getState();
3194
+ _vitest.expect.call(void 0, state2.runStarted).toBe(true);
3195
+ _vitest.expect.call(void 0, state2.runExited).toBe(false);
3196
+ _vitest.expect.call(void 0, state2.tickCount).toBeGreaterThan(tickCount1);
3197
+ });
3198
+ _vitest.test.call(void 0, "actor without run handler works normally", async (c) => {
3199
+ const { client } = await setupDriverTest(c, driverTestConfig);
3200
+ const actor = client.runWithoutHandler.getOrCreate([
3201
+ "no-run-handler"
3202
+ ]);
3203
+ const state = await actor.getState();
3204
+ _vitest.expect.call(void 0, state.wakeCount).toBe(1);
3205
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.RUN_SLEEP_TIMEOUT + 300);
3206
+ const state2 = await actor.getState();
3207
+ _vitest.expect.call(void 0, state2.wakeCount).toBe(2);
3208
+ });
3209
+ _vitest.test.call(void 0, "run handler can consume from queue", async (c) => {
3210
+ const { client } = await setupDriverTest(c, driverTestConfig);
3211
+ const actor = client.runWithQueueConsumer.getOrCreate([
3212
+ "queue-consumer"
3213
+ ]);
3214
+ await waitFor(driverTestConfig, 100);
3215
+ await actor.sendMessage({ type: "test", value: 1 });
3216
+ await actor.sendMessage({ type: "test", value: 2 });
3217
+ await actor.sendMessage({ type: "test", value: 3 });
3218
+ await waitFor(driverTestConfig, 1200);
3219
+ const state = await actor.getState();
3220
+ _vitest.expect.call(void 0, state.runStarted).toBe(true);
3221
+ _vitest.expect.call(void 0, state.messagesReceived.length).toBe(3);
3222
+ _vitest.expect.call(void 0, state.messagesReceived[0].body).toEqual({
3223
+ type: "test",
3224
+ value: 1
3225
+ });
3226
+ _vitest.expect.call(void 0, state.messagesReceived[1].body).toEqual({
3227
+ type: "test",
3228
+ value: 2
3229
+ });
3230
+ _vitest.expect.call(void 0, state.messagesReceived[2].body).toEqual({
3231
+ type: "test",
3232
+ value: 3
3233
+ });
3234
+ });
3235
+ _vitest.test.call(void 0, "queue-waiting run handler can sleep and resume", async (c) => {
3236
+ const { client } = await setupDriverTest(c, driverTestConfig);
3237
+ const actor = client.runWithQueueConsumer.getOrCreate([
3238
+ "queue-consumer-sleep"
3239
+ ]);
3240
+ await waitFor(driverTestConfig, 100);
3241
+ const state1 = await actor.getState();
3242
+ _vitest.expect.call(void 0, state1.runStarted).toBe(true);
3243
+ await waitFor(driverTestConfig, _chunkXWBAQO5Hcjs.RUN_SLEEP_TIMEOUT + 500);
3244
+ const state2 = await actor.getState();
3245
+ _vitest.expect.call(void 0, state2.wakeCount).toBeGreaterThan(state1.wakeCount);
3246
+ });
3247
+ _vitest.test.call(void 0, "run handler that exits early triggers destroy", async (c) => {
3248
+ const { client } = await setupDriverTest(c, driverTestConfig);
3249
+ const actor = client.runWithEarlyExit.getOrCreate(["early-exit"]);
3250
+ await waitFor(driverTestConfig, 100);
3251
+ const state1 = await actor.getState();
3252
+ _vitest.expect.call(void 0, state1.runStarted).toBe(true);
3253
+ await waitFor(driverTestConfig, 300);
3254
+ const actor2 = client.runWithEarlyExit.getOrCreate([
3255
+ "early-exit-fresh"
3256
+ ]);
3257
+ const state2 = await actor2.getState();
3258
+ _vitest.expect.call(void 0, state2.runStarted).toBe(true);
3259
+ });
3260
+ _vitest.test.call(void 0, "run handler that throws error triggers destroy", async (c) => {
3261
+ const { client } = await setupDriverTest(c, driverTestConfig);
3262
+ const actor = client.runWithError.getOrCreate(["run-error"]);
3263
+ await waitFor(driverTestConfig, 100);
3264
+ const state1 = await actor.getState();
3265
+ _vitest.expect.call(void 0, state1.runStarted).toBe(true);
3266
+ await waitFor(driverTestConfig, 300);
3267
+ const actor2 = client.runWithError.getOrCreate(["run-error-fresh"]);
3268
+ const state2 = await actor2.getState();
3269
+ _vitest.expect.call(void 0, state2.runStarted).toBe(true);
3270
+ });
3271
+ });
3272
+ }
3273
+
3274
+ // src/driver-test-suite/tests/actor-stateless.ts
3275
+
3276
+ function runActorStatelessTests(driverTestConfig) {
3277
+ _vitest.describe.call(void 0, "Actor Stateless Tests", () => {
3278
+ _vitest.describe.call(void 0, "Stateless Actor Operations", () => {
3279
+ _vitest.test.call(void 0, "can call actions on stateless actor", async (c) => {
3280
+ const { client } = await setupDriverTest(c, driverTestConfig);
3281
+ const instance = client.statelessActor.getOrCreate();
3282
+ const result = await instance.ping();
3283
+ _vitest.expect.call(void 0, result).toBe("pong");
3284
+ });
3285
+ _vitest.test.call(void 0, "can echo messages", async (c) => {
3286
+ const { client } = await setupDriverTest(c, driverTestConfig);
3287
+ const instance = client.statelessActor.getOrCreate();
3288
+ const message = "Hello, World!";
3289
+ const result = await instance.echo(message);
3290
+ _vitest.expect.call(void 0, result).toBe(message);
3291
+ });
3292
+ _vitest.test.call(void 0, "can access actorId", async (c) => {
3293
+ const { client } = await setupDriverTest(c, driverTestConfig);
3294
+ const instance = client.statelessActor.getOrCreate(["test-id"]);
3295
+ const actorId = await instance.getActorId();
3296
+ _vitest.expect.call(void 0, actorId).toBeDefined();
3297
+ _vitest.expect.call(void 0, typeof actorId).toBe("string");
3298
+ });
3299
+ _vitest.test.call(void 0, "accessing state throws StateNotEnabled", async (c) => {
3300
+ const { client } = await setupDriverTest(c, driverTestConfig);
3301
+ const instance = client.statelessActor.getOrCreate();
3302
+ const result = await instance.tryGetState();
3303
+ _vitest.expect.call(void 0, result.success).toBe(false);
3304
+ _vitest.expect.call(void 0, result.error).toContain("state");
3305
+ });
3306
+ _vitest.test.call(void 0, "accessing db throws DatabaseNotEnabled", async (c) => {
3307
+ const { client } = await setupDriverTest(c, driverTestConfig);
3308
+ const instance = client.statelessActor.getOrCreate();
3309
+ const result = await instance.tryGetDb();
3310
+ _vitest.expect.call(void 0, result.success).toBe(false);
3311
+ _vitest.expect.call(void 0, result.error).toContain("database");
3312
+ });
3313
+ _vitest.test.call(void 0, "multiple stateless actors can exist independently", async (c) => {
3314
+ const { client } = await setupDriverTest(c, driverTestConfig);
3315
+ const actor1 = client.statelessActor.getOrCreate(["actor-1"]);
3316
+ const actor2 = client.statelessActor.getOrCreate(["actor-2"]);
3317
+ const id1 = await actor1.getActorId();
3318
+ const id2 = await actor2.getActorId();
3319
+ _vitest.expect.call(void 0, id1).not.toBe(id2);
3320
+ });
3321
+ });
3322
+ });
3323
+ }
3324
+
2175
3325
  // src/driver-test-suite/tests/actor-vars.ts
2176
3326
 
2177
3327
  function runActorVarsTests(driverTestConfig) {
@@ -2236,6 +3386,89 @@ function runActorVarsTests(driverTestConfig) {
2236
3386
  });
2237
3387
  }
2238
3388
 
3389
+ // src/driver-test-suite/tests/actor-workflow.ts
3390
+
3391
+ function runActorWorkflowTests(driverTestConfig) {
3392
+ _vitest.describe.call(void 0, "Actor Workflow Tests", () => {
3393
+ var _a;
3394
+ _vitest.test.call(void 0, "replays steps and guards state access", async (c) => {
3395
+ const { client } = await setupDriverTest(c, driverTestConfig);
3396
+ const actor = client.workflowCounterActor.getOrCreate([
3397
+ "workflow-basic"
3398
+ ]);
3399
+ await waitFor(driverTestConfig, 1e3);
3400
+ const state = await actor.getState();
3401
+ _vitest.expect.call(void 0, state.runCount).toBeGreaterThan(0);
3402
+ _vitest.expect.call(void 0, state.history.length).toBeGreaterThan(0);
3403
+ _vitest.expect.call(void 0, state.guardTriggered).toBe(true);
3404
+ });
3405
+ _vitest.test.call(void 0, "consumes queue messages via workflow queue.next", async (c) => {
3406
+ const { client } = await setupDriverTest(c, driverTestConfig);
3407
+ const actor = client.workflowQueueActor.getOrCreate(["workflow-queue"]);
3408
+ await actor.send(_chunkXWBAQO5Hcjs.WORKFLOW_QUEUE_NAME, {
3409
+ hello: "world"
3410
+ });
3411
+ await waitFor(driverTestConfig, 200);
3412
+ const messages = await actor.getMessages();
3413
+ _vitest.expect.call(void 0, messages).toEqual([{ hello: "world" }]);
3414
+ });
3415
+ _vitest.test.call(void 0, "workflow queue.next supports completing wait sends", async (c) => {
3416
+ const { client } = await setupDriverTest(c, driverTestConfig);
3417
+ const actor = client.workflowQueueActor.getOrCreate([
3418
+ "workflow-queue-wait"
3419
+ ]);
3420
+ const result = await actor.sendAndWait({ value: 123 });
3421
+ _vitest.expect.call(void 0, result).toEqual({
3422
+ status: "completed",
3423
+ response: { echo: { value: 123 } }
3424
+ });
3425
+ });
3426
+ _vitest.test.call(void 0, "db and client are step-only in workflow context", async (c) => {
3427
+ const { client } = await setupDriverTest(c, driverTestConfig);
3428
+ const actor = client.workflowAccessActor.getOrCreate([
3429
+ "workflow-access"
3430
+ ]);
3431
+ let state = await actor.getState();
3432
+ for (let i = 0; i < 20 && state.insideDbCount === 0; i++) {
3433
+ await waitFor(driverTestConfig, 50);
3434
+ state = await actor.getState();
3435
+ }
3436
+ _vitest.expect.call(void 0, state.outsideDbError).toBe(
3437
+ "db is only available inside workflow steps"
3438
+ );
3439
+ _vitest.expect.call(void 0, state.outsideClientError).toBe(
3440
+ "client is only available inside workflow steps"
3441
+ );
3442
+ _vitest.expect.call(void 0, state.insideDbCount).toBeGreaterThan(0);
3443
+ _vitest.expect.call(void 0, state.insideClientAvailable).toBe(true);
3444
+ });
3445
+ _vitest.test.call(void 0, "sleeps and resumes between ticks", async (c) => {
3446
+ const { client } = await setupDriverTest(c, driverTestConfig);
3447
+ const actor = client.workflowSleepActor.getOrCreate(["workflow-sleep"]);
3448
+ const initial = await actor.getState();
3449
+ await waitFor(driverTestConfig, 200);
3450
+ const next = await actor.getState();
3451
+ _vitest.expect.call(void 0, next.ticks).toBeGreaterThan(initial.ticks);
3452
+ });
3453
+ _vitest.test.skipIf((_a = driverTestConfig.skip) == null ? void 0 : _a.sleep)(
3454
+ "workflow run teardown does not wait for runStopTimeout",
3455
+ async (c) => {
3456
+ const { client } = await setupDriverTest(c, driverTestConfig);
3457
+ const actor = client.workflowStopTeardownActor.getOrCreate([
3458
+ "workflow-stop-teardown"
3459
+ ]);
3460
+ await actor.getTimeline();
3461
+ await waitFor(driverTestConfig, 1200);
3462
+ const timeline = await actor.getTimeline();
3463
+ _vitest.expect.call(void 0, timeline.wakeAts.length).toBeGreaterThanOrEqual(2);
3464
+ _vitest.expect.call(void 0, timeline.sleepAts.length).toBeGreaterThanOrEqual(1);
3465
+ const firstSleepDelayMs = timeline.sleepAts[0] - timeline.wakeAts[0];
3466
+ _vitest.expect.call(void 0, firstSleepDelayMs).toBeLessThan(1800);
3467
+ }
3468
+ );
3469
+ });
3470
+ }
3471
+
2239
3472
  // src/driver-test-suite/tests/manager-driver.ts
2240
3473
 
2241
3474
  function runManagerDriverTests(driverTestConfig) {
@@ -2355,6 +3588,12 @@ function runManagerDriverTests(driverTestConfig) {
2355
3588
  });
2356
3589
  });
2357
3590
  _vitest.describe.call(void 0, "Key Matching", () => {
3591
+ _vitest.test.call(void 0, "multi-part actor keys are passed through correctly", async (c) => {
3592
+ const { client } = await setupDriverTest(c, driverTestConfig);
3593
+ const multiPartKey = ["tenant/with/slash", "room"];
3594
+ const counter = client.counter.getOrCreate(multiPartKey);
3595
+ _vitest.expect.call(void 0, await counter.getKey()).toEqual(multiPartKey);
3596
+ });
2358
3597
  _vitest.test.call(void 0, "matches actors only with exactly the same keys", async (c) => {
2359
3598
  const { client } = await setupDriverTest(c, driverTestConfig);
2360
3599
  const originalCounter = client.counter.getOrCreate([
@@ -2536,7 +3775,7 @@ function runRawHttpTests(driverTestConfig) {
2536
3775
  _vitest.expect.call(void 0, errorData.message).toContain(
2537
3776
  "onRequest handler must return a Response"
2538
3777
  );
2539
- } catch (e2) {
3778
+ } catch (e4) {
2540
3779
  }
2541
3780
  });
2542
3781
  _vitest.test.call(void 0, "should handle different HTTP methods", async (c) => {
@@ -3071,7 +4310,7 @@ function runRawWebSocketTests(driverTestConfig) {
3071
4310
  _vitest.test.call(void 0, "should establish raw WebSocket connection", async (c) => {
3072
4311
  const { client } = await setupDriverTest(c, driverTestConfig);
3073
4312
  const actor = client.rawWebSocketActor.getOrCreate(["basic"]);
3074
- const ws = await actor.websocket();
4313
+ const ws = await actor.webSocket();
3075
4314
  await new Promise((resolve) => {
3076
4315
  if (ws.readyState === WebSocket.OPEN) {
3077
4316
  resolve();
@@ -3102,7 +4341,7 @@ function runRawWebSocketTests(driverTestConfig) {
3102
4341
  _vitest.test.call(void 0, "should echo messages", async (c) => {
3103
4342
  const { client } = await setupDriverTest(c, driverTestConfig);
3104
4343
  const actor = client.rawWebSocketActor.getOrCreate(["echo"]);
3105
- const ws = await actor.websocket();
4344
+ const ws = await actor.webSocket();
3106
4345
  if (ws.readyState !== WebSocket.OPEN) {
3107
4346
  await new Promise((resolve, reject) => {
3108
4347
  ws.addEventListener("open", () => resolve(), {
@@ -3133,7 +4372,7 @@ function runRawWebSocketTests(driverTestConfig) {
3133
4372
  _vitest.test.call(void 0, "should handle ping/pong protocol", async (c) => {
3134
4373
  const { client } = await setupDriverTest(c, driverTestConfig);
3135
4374
  const actor = client.rawWebSocketActor.getOrCreate(["ping"]);
3136
- const ws = await actor.websocket();
4375
+ const ws = await actor.webSocket();
3137
4376
  if (ws.readyState !== WebSocket.OPEN) {
3138
4377
  await new Promise((resolve, reject) => {
3139
4378
  ws.addEventListener("open", () => resolve(), {
@@ -3163,7 +4402,7 @@ function runRawWebSocketTests(driverTestConfig) {
3163
4402
  _vitest.test.call(void 0, "should track stats across connections", async (c) => {
3164
4403
  const { client } = await setupDriverTest(c, driverTestConfig);
3165
4404
  const actor1 = client.rawWebSocketActor.getOrCreate(["stats"]);
3166
- const ws1 = await actor1.websocket();
4405
+ const ws1 = await actor1.webSocket();
3167
4406
  const ws1MessagePromise = new Promise((resolve, reject) => {
3168
4407
  ws1.addEventListener("message", () => resolve(), {
3169
4408
  once: true
@@ -3172,7 +4411,7 @@ function runRawWebSocketTests(driverTestConfig) {
3172
4411
  });
3173
4412
  await ws1MessagePromise;
3174
4413
  const actor2 = client.rawWebSocketActor.get(["stats"]);
3175
- const ws2 = await actor2.websocket();
4414
+ const ws2 = await actor2.webSocket();
3176
4415
  const ws2MessagePromise = new Promise((resolve, reject) => {
3177
4416
  ws2.addEventListener("message", () => resolve(), {
3178
4417
  once: true
@@ -3217,7 +4456,7 @@ function runRawWebSocketTests(driverTestConfig) {
3217
4456
  const actor = client.rawWebSocketBinaryActor.getOrCreate([
3218
4457
  "binary"
3219
4458
  ]);
3220
- const ws = await actor.websocket();
4459
+ const ws = await actor.webSocket();
3221
4460
  if (ws.readyState !== WebSocket.OPEN) {
3222
4461
  await new Promise((resolve, reject) => {
3223
4462
  ws.addEventListener("open", () => resolve(), {
@@ -3262,7 +4501,7 @@ function runRawWebSocketTests(driverTestConfig) {
3262
4501
  _vitest.test.call(void 0, "should work with custom paths", async (c) => {
3263
4502
  const { client } = await setupDriverTest(c, driverTestConfig);
3264
4503
  const actor = client.rawWebSocketActor.getOrCreate(["paths"]);
3265
- const ws = await actor.websocket("custom/path");
4504
+ const ws = await actor.webSocket("custom/path");
3266
4505
  await new Promise((resolve, reject) => {
3267
4506
  ws.addEventListener("open", () => {
3268
4507
  resolve();
@@ -3285,7 +4524,7 @@ function runRawWebSocketTests(driverTestConfig) {
3285
4524
  _vitest.test.call(void 0, "should handle connection close properly", async (c) => {
3286
4525
  const { client } = await setupDriverTest(c, driverTestConfig);
3287
4526
  const actor = client.rawWebSocketActor.getOrCreate(["close-test"]);
3288
- const ws = await actor.websocket();
4527
+ const ws = await actor.webSocket();
3289
4528
  if (ws.readyState !== WebSocket.OPEN) {
3290
4529
  await new Promise((resolve, reject) => {
3291
4530
  ws.addEventListener("open", () => resolve(), {
@@ -3316,7 +4555,7 @@ function runRawWebSocketTests(driverTestConfig) {
3316
4555
  const actor = client.rawWebSocketActor.getOrCreate([
3317
4556
  "open-close-test"
3318
4557
  ]);
3319
- const ws1 = await actor.websocket();
4558
+ const ws1 = await actor.webSocket();
3320
4559
  await new Promise((resolve, reject) => {
3321
4560
  ws1.addEventListener("open", () => resolve(), { once: true });
3322
4561
  ws1.addEventListener("close", reject);
@@ -3333,7 +4572,7 @@ function runRawWebSocketTests(driverTestConfig) {
3333
4572
  });
3334
4573
  _vitest.expect.call(void 0, welcome1.type).toBe("welcome");
3335
4574
  _vitest.expect.call(void 0, welcome1.connectionCount).toBe(1);
3336
- const ws2 = await actor.websocket();
4575
+ const ws2 = await actor.webSocket();
3337
4576
  await new Promise((resolve, reject) => {
3338
4577
  ws2.addEventListener("open", () => resolve(), { once: true });
3339
4578
  ws2.addEventListener("close", reject);
@@ -3384,7 +4623,7 @@ function runRawWebSocketTests(driverTestConfig) {
3384
4623
  const actor = client.rawWebSocketActor.getOrCreate([
3385
4624
  "query-params"
3386
4625
  ]);
3387
- const ws = await actor.websocket(
4626
+ const ws = await actor.webSocket(
3388
4627
  "api/v1/stream?token=abc123&user=test"
3389
4628
  );
3390
4629
  await new Promise((resolve, reject) => {
@@ -3412,7 +4651,7 @@ function runRawWebSocketTests(driverTestConfig) {
3412
4651
  const actor = client.rawWebSocketActor.getOrCreate([
3413
4652
  "base-path-query-params"
3414
4653
  ]);
3415
- const ws = await actor.websocket("?token=secret&session=123");
4654
+ const ws = await actor.webSocket("?token=secret&session=123");
3416
4655
  await new Promise((resolve, reject) => {
3417
4656
  ws.addEventListener("open", () => resolve(), { once: true });
3418
4657
  ws.addEventListener("error", reject);
@@ -3527,41 +4766,49 @@ function runRequestAccessTests(driverTestConfig) {
3527
4766
 
3528
4767
  // src/driver-test-suite/mod.ts
3529
4768
  function runDriverTests(driverTestConfigPartial) {
3530
- var _a;
3531
- const clientTypes = ((_a = driverTestConfigPartial.skip) == null ? void 0 : _a.inline) ? ["http"] : ["http", "inline"];
3532
- for (const clientType of clientTypes) {
3533
- _vitest.describe.call(void 0, `client type (${clientType})`, () => {
3534
- const encodings = ["bare", "cbor", "json"];
3535
- for (const encoding of encodings) {
3536
- _vitest.describe.call(void 0, `encoding (${encoding})`, () => {
3537
- const driverTestConfig = {
3538
- ...driverTestConfigPartial,
3539
- clientType,
3540
- encoding
3541
- };
3542
- runActorDriverTests(driverTestConfig);
3543
- runManagerDriverTests(driverTestConfig);
3544
- runActorConnTests(driverTestConfig);
3545
- runActorConnStateTests(driverTestConfig);
3546
- runActorConnHibernationTests(driverTestConfig);
3547
- runActorDestroyTests(driverTestConfig);
3548
- runRequestAccessTests(driverTestConfig);
3549
- runActorHandleTests(driverTestConfig);
3550
- runActionFeaturesTests(driverTestConfig);
3551
- runActorVarsTests(driverTestConfig);
3552
- runActorMetadataTests(driverTestConfig);
3553
- runActorOnStateChangeTests(driverTestConfig);
3554
- runActorErrorHandlingTests(driverTestConfig);
3555
- runActorInlineClientTests(driverTestConfig);
3556
- runActorKvTests(driverTestConfig);
3557
- runRawHttpTests(driverTestConfig);
3558
- runRawHttpRequestPropertiesTests(driverTestConfig);
3559
- runRawWebSocketTests(driverTestConfig);
3560
- runActorInspectorTests(driverTestConfig);
3561
- });
3562
- }
3563
- });
3564
- }
4769
+ _vitest.describe.call(void 0, "Driver Tests", () => {
4770
+ var _a;
4771
+ const clientTypes = ((_a = driverTestConfigPartial.skip) == null ? void 0 : _a.inline) ? ["http"] : ["http", "inline"];
4772
+ for (const clientType of clientTypes) {
4773
+ _vitest.describe.call(void 0, `client type (${clientType})`, () => {
4774
+ const encodings = ["bare", "cbor", "json"];
4775
+ for (const encoding of encodings) {
4776
+ _vitest.describe.call(void 0, `encoding (${encoding})`, () => {
4777
+ const driverTestConfig = {
4778
+ ...driverTestConfigPartial,
4779
+ clientType,
4780
+ encoding
4781
+ };
4782
+ runActorDriverTests(driverTestConfig);
4783
+ runManagerDriverTests(driverTestConfig);
4784
+ runActorConnTests(driverTestConfig);
4785
+ runActorConnStateTests(driverTestConfig);
4786
+ runActorConnHibernationTests(driverTestConfig);
4787
+ runActorDbTests(driverTestConfig);
4788
+ runActorDestroyTests(driverTestConfig);
4789
+ runRequestAccessTests(driverTestConfig);
4790
+ runActorHandleTests(driverTestConfig);
4791
+ runActionFeaturesTests(driverTestConfig);
4792
+ runAccessControlTests(driverTestConfig);
4793
+ runActorVarsTests(driverTestConfig);
4794
+ runActorMetadataTests(driverTestConfig);
4795
+ runActorOnStateChangeTests(driverTestConfig);
4796
+ runActorErrorHandlingTests(driverTestConfig);
4797
+ runActorQueueTests(driverTestConfig);
4798
+ runActorRunTests(driverTestConfig);
4799
+ runActorInlineClientTests(driverTestConfig);
4800
+ runActorKvTests(driverTestConfig);
4801
+ runActorWorkflowTests(driverTestConfig);
4802
+ runActorStatelessTests(driverTestConfig);
4803
+ runRawHttpTests(driverTestConfig);
4804
+ runRawHttpRequestPropertiesTests(driverTestConfig);
4805
+ runRawWebSocketTests(driverTestConfig);
4806
+ runActorInspectorTests(driverTestConfig);
4807
+ });
4808
+ }
4809
+ });
4810
+ }
4811
+ });
3565
4812
  }
3566
4813
  async function createTestRuntime(registryPath, driverFactory) {
3567
4814
  var _a;
@@ -3591,7 +4838,7 @@ async function createTestRuntime(registryPath, driverFactory) {
3591
4838
  const parsedConfig = registry.parseConfig();
3592
4839
  const managerDriver = (_a = driver.manager) == null ? void 0 : _a.call(driver, parsedConfig);
3593
4840
  _invariant2.default.call(void 0, managerDriver, "missing manager driver");
3594
- const { router } = _chunkRZW2DNNDcjs.buildManagerRouter.call(void 0,
4841
+ const { router } = _chunkF6JYU5IKcjs.buildManagerRouter.call(void 0,
3595
4842
  parsedConfig,
3596
4843
  managerDriver,
3597
4844
  () => upgradeWebSocket
@@ -3599,19 +4846,26 @@ async function createTestRuntime(registryPath, driverFactory) {
3599
4846
  const nodeWebSocket = _nodews.createNodeWebSocket.call(void 0, { app: router });
3600
4847
  upgradeWebSocket = nodeWebSocket.upgradeWebSocket;
3601
4848
  managerDriver.setGetUpgradeWebSocket(() => upgradeWebSocket);
3602
- const port = await _chunk3VP5CSHVcjs.getPort.call(void 0, );
3603
4849
  const server = _nodeserver.serve.call(void 0, {
3604
4850
  fetch: router.fetch,
3605
4851
  hostname: "127.0.0.1",
3606
- port
4852
+ port: 0
3607
4853
  });
4854
+ if (!server.listening) {
4855
+ await new Promise((resolve) => {
4856
+ server.once("listening", () => resolve());
4857
+ });
4858
+ }
3608
4859
  _invariant2.default.call(void 0,
3609
4860
  nodeWebSocket.injectWebSocket !== void 0,
3610
4861
  "should have injectWebSocket"
3611
4862
  );
3612
4863
  nodeWebSocket.injectWebSocket(server);
4864
+ const address = server.address();
4865
+ _invariant2.default.call(void 0, address && typeof address !== "string", "missing server address");
4866
+ const port = address.port;
3613
4867
  const serverEndpoint = `http://127.0.0.1:${port}`;
3614
- _chunk2IJTYN6Kcjs.logger.call(void 0, ).info({ msg: "test serer listening", port });
4868
+ _chunkXWBAQO5Hcjs.logger.call(void 0, ).info({ msg: "test serer listening", port });
3615
4869
  const cleanup = async () => {
3616
4870
  await new Promise(
3617
4871
  (resolve) => server.close(() => resolve(void 0))