rivetkit 2.0.42 → 2.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/{tsup/config-CLnylLYY.d.ts → browser/client.d.ts} +2127 -1910
  2. package/dist/browser/client.js +5182 -0
  3. package/dist/browser/client.js.map +1 -0
  4. package/dist/browser/inspector/client.d.ts +130 -0
  5. package/dist/browser/inspector/client.js +2854 -0
  6. package/dist/browser/inspector/client.js.map +1 -0
  7. package/dist/browser/v3-DnYObHH3.d.ts +279 -0
  8. package/dist/schemas/actor-inspector/v2.ts +796 -0
  9. package/dist/schemas/actor-inspector/v3.ts +899 -0
  10. package/dist/schemas/actor-persist/v4.ts +406 -0
  11. package/dist/schemas/client-protocol/v3.ts +554 -0
  12. package/dist/schemas/persist/v1.ts +781 -0
  13. package/dist/schemas/transport/v1.ts +697 -0
  14. package/dist/tsup/actor/errors.cjs +27 -3
  15. package/dist/tsup/actor/errors.cjs.map +1 -1
  16. package/dist/tsup/actor/errors.d.cts +37 -1
  17. package/dist/tsup/actor/errors.d.ts +37 -1
  18. package/dist/tsup/actor/errors.js +26 -1
  19. package/dist/tsup/{actor-router-consts-DzI2szci.d.cts → actor-router-consts-D29T1Z-K.d.cts} +1 -1
  20. package/dist/tsup/{actor-router-consts-DzI2szci.d.ts → actor-router-consts-D29T1Z-K.d.ts} +1 -1
  21. package/dist/tsup/chunk-424PT5DM.js +23 -0
  22. package/dist/tsup/chunk-424PT5DM.js.map +1 -0
  23. package/dist/tsup/{chunk-JDAD2YFA.js → chunk-5ESWDTHJ.js} +148 -273
  24. package/dist/tsup/chunk-5ESWDTHJ.js.map +1 -0
  25. package/dist/tsup/{chunk-FJ3KTN4V.js → chunk-6LIBPELE.js} +119 -11
  26. package/dist/tsup/chunk-6LIBPELE.js.map +1 -0
  27. package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
  28. package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
  29. package/dist/tsup/{chunk-LFVF5SCU.js → chunk-7HTNH26M.js} +126 -1
  30. package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
  31. package/dist/tsup/chunk-7K4CYDGD.js +630 -0
  32. package/dist/tsup/chunk-7K4CYDGD.js.map +1 -0
  33. package/dist/tsup/{chunk-XXGJCOL6.js → chunk-A6YIZWTK.js} +2 -2
  34. package/dist/tsup/chunk-AIYEYMX5.cjs +630 -0
  35. package/dist/tsup/chunk-AIYEYMX5.cjs.map +1 -0
  36. package/dist/tsup/{chunk-Q6W7RJJP.js → chunk-DIGBC2VI.js} +211 -2316
  37. package/dist/tsup/chunk-DIGBC2VI.js.map +1 -0
  38. package/dist/tsup/{chunk-RZW2DNND.cjs → chunk-F6JYU5IK.cjs} +1957 -1039
  39. package/dist/tsup/chunk-F6JYU5IK.cjs.map +1 -0
  40. package/dist/tsup/chunk-HAZL2EPK.cjs +534 -0
  41. package/dist/tsup/chunk-HAZL2EPK.cjs.map +1 -0
  42. package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
  43. package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
  44. package/dist/tsup/chunk-HIDX4C5Y.cjs +1036 -0
  45. package/dist/tsup/chunk-HIDX4C5Y.cjs.map +1 -0
  46. package/dist/tsup/chunk-IVG73YCW.js +534 -0
  47. package/dist/tsup/chunk-IVG73YCW.js.map +1 -0
  48. package/dist/tsup/chunk-KJSYAUOM.js +96 -0
  49. package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
  50. package/dist/tsup/{chunk-2XQS746M.cjs → chunk-L47L3ZWJ.cjs} +127 -2
  51. package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
  52. package/dist/tsup/{chunk-H4TB4X25.cjs → chunk-LW6KLR7A.cjs} +126 -18
  53. package/dist/tsup/chunk-LW6KLR7A.cjs.map +1 -0
  54. package/dist/tsup/chunk-LXUQ667X.js +2006 -0
  55. package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
  56. package/dist/tsup/{chunk-GMAVRZSF.js → chunk-M2T62AZQ.js} +1790 -872
  57. package/dist/tsup/chunk-M2T62AZQ.js.map +1 -0
  58. package/dist/tsup/chunk-MZ37VV3P.js +5974 -0
  59. package/dist/tsup/chunk-MZ37VV3P.js.map +1 -0
  60. package/dist/tsup/chunk-N4KRDJ56.js +72 -0
  61. package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
  62. package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
  63. package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
  64. package/dist/tsup/chunk-OMEPCQK2.js +649 -0
  65. package/dist/tsup/chunk-OMEPCQK2.js.map +1 -0
  66. package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
  67. package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
  68. package/dist/tsup/chunk-SSEP6DHP.cjs +2657 -0
  69. package/dist/tsup/chunk-SSEP6DHP.cjs.map +1 -0
  70. package/dist/tsup/chunk-T5YCUGVS.js +1036 -0
  71. package/dist/tsup/chunk-T5YCUGVS.js.map +1 -0
  72. package/dist/tsup/{chunk-EJVBH5VF.cjs → chunk-TPGXWFQT.cjs} +3 -3
  73. package/dist/tsup/{chunk-EJVBH5VF.cjs.map → chunk-TPGXWFQT.cjs.map} +1 -1
  74. package/dist/tsup/{chunk-X35U3YNX.cjs → chunk-TYLXNCA5.cjs} +214 -339
  75. package/dist/tsup/chunk-TYLXNCA5.cjs.map +1 -0
  76. package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
  77. package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
  78. package/dist/tsup/chunk-XWBAQO5H.cjs +649 -0
  79. package/dist/tsup/chunk-XWBAQO5H.cjs.map +1 -0
  80. package/dist/tsup/chunk-YQ4LDVD6.cjs +5974 -0
  81. package/dist/tsup/chunk-YQ4LDVD6.cjs.map +1 -0
  82. package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
  83. package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
  84. package/dist/tsup/client/mod.cjs +9 -10
  85. package/dist/tsup/client/mod.cjs.map +1 -1
  86. package/dist/tsup/client/mod.d.cts +11 -5
  87. package/dist/tsup/client/mod.d.ts +11 -5
  88. package/dist/tsup/client/mod.js +8 -8
  89. package/dist/tsup/common/log.cjs +4 -4
  90. package/dist/tsup/common/log.d.cts +2 -2
  91. package/dist/tsup/common/log.d.ts +2 -2
  92. package/dist/tsup/common/log.js +3 -2
  93. package/dist/tsup/common/websocket.cjs +5 -5
  94. package/dist/tsup/common/websocket.js +4 -3
  95. package/dist/tsup/config-BFqid9Gr.d.ts +2574 -0
  96. package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
  97. package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
  98. package/dist/tsup/{config-CZB2-W8x.d.cts → config-CAZphOS1.d.cts} +681 -355
  99. package/dist/tsup/db/drizzle/mod.cjs +49 -0
  100. package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
  101. package/dist/tsup/db/drizzle/mod.d.cts +17 -0
  102. package/dist/tsup/db/drizzle/mod.d.ts +17 -0
  103. package/dist/tsup/db/drizzle/mod.js +49 -0
  104. package/dist/tsup/db/drizzle/mod.js.map +1 -0
  105. package/dist/tsup/db/mod.cjs +9 -0
  106. package/dist/tsup/db/mod.cjs.map +1 -0
  107. package/dist/tsup/db/mod.d.cts +9 -0
  108. package/dist/tsup/db/mod.d.ts +9 -0
  109. package/dist/tsup/db/mod.js +9 -0
  110. package/dist/tsup/db/mod.js.map +1 -0
  111. package/dist/tsup/{driver-D0QX9M11.d.ts → driver-Bxv62E2p.d.ts} +2 -2
  112. package/dist/tsup/{driver-q-zqG7fc.d.cts → driver-DYXwJR5D.d.cts} +2 -2
  113. package/dist/tsup/driver-helpers/mod.cjs +12 -6
  114. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  115. package/dist/tsup/driver-helpers/mod.d.cts +12 -5
  116. package/dist/tsup/driver-helpers/mod.d.ts +12 -5
  117. package/dist/tsup/driver-helpers/mod.js +12 -5
  118. package/dist/tsup/driver-test-suite/mod.cjs +1370 -116
  119. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  120. package/dist/tsup/driver-test-suite/mod.d.cts +10 -4
  121. package/dist/tsup/driver-test-suite/mod.d.ts +10 -4
  122. package/dist/tsup/driver-test-suite/mod.js +2093 -838
  123. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  124. package/dist/tsup/inspector/mod.cjs +29 -3
  125. package/dist/tsup/inspector/mod.cjs.map +1 -1
  126. package/dist/tsup/inspector/mod.d.cts +124 -3
  127. package/dist/tsup/inspector/mod.d.ts +124 -3
  128. package/dist/tsup/inspector/mod.js +72 -45
  129. package/dist/tsup/keys-CydblqMh.d.cts +13 -0
  130. package/dist/tsup/keys-CydblqMh.d.ts +13 -0
  131. package/dist/tsup/mod.cjs +16 -10
  132. package/dist/tsup/mod.cjs.map +1 -1
  133. package/dist/tsup/mod.d.cts +26 -14
  134. package/dist/tsup/mod.d.ts +26 -14
  135. package/dist/tsup/mod.js +20 -13
  136. package/dist/tsup/serve-test-suite/mod.cjs +1165 -83
  137. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  138. package/dist/tsup/serve-test-suite/mod.js +1114 -29
  139. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  140. package/dist/tsup/test/mod.cjs +84 -11
  141. package/dist/tsup/test/mod.cjs.map +1 -1
  142. package/dist/tsup/test/mod.d.cts +10 -5
  143. package/dist/tsup/test/mod.d.ts +10 -5
  144. package/dist/tsup/test/mod.js +85 -11
  145. package/dist/tsup/test/mod.js.map +1 -1
  146. package/dist/tsup/utils.cjs +10 -4
  147. package/dist/tsup/utils.cjs.map +1 -1
  148. package/dist/tsup/utils.d.cts +72 -2
  149. package/dist/tsup/utils.d.ts +72 -2
  150. package/dist/tsup/utils.js +9 -2
  151. package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
  152. package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
  153. package/dist/tsup/workflow/mod.cjs +16 -0
  154. package/dist/tsup/workflow/mod.cjs.map +1 -0
  155. package/dist/tsup/workflow/mod.d.cts +83 -0
  156. package/dist/tsup/workflow/mod.d.ts +83 -0
  157. package/dist/tsup/workflow/mod.js +16 -0
  158. package/dist/tsup/workflow/mod.js.map +1 -0
  159. package/package.json +62 -5
  160. package/src/actor/config.ts +478 -68
  161. package/src/actor/conn/mod.ts +68 -16
  162. package/src/actor/conn/state-manager.ts +2 -2
  163. package/src/actor/contexts/action.ts +20 -12
  164. package/src/actor/contexts/base/actor.ts +137 -7
  165. package/src/actor/contexts/base/conn-init.ts +27 -7
  166. package/src/actor/contexts/base/conn.ts +27 -18
  167. package/src/actor/contexts/before-action-response.ts +9 -2
  168. package/src/actor/contexts/before-connect.ts +7 -2
  169. package/src/actor/contexts/connect.ts +9 -2
  170. package/src/actor/contexts/create-conn-state.ts +7 -2
  171. package/src/actor/contexts/create-vars.ts +16 -3
  172. package/src/actor/contexts/create.ts +16 -3
  173. package/src/actor/contexts/destroy.ts +9 -3
  174. package/src/actor/contexts/disconnect.ts +10 -4
  175. package/src/actor/contexts/index.ts +4 -3
  176. package/src/actor/contexts/request.ts +23 -6
  177. package/src/actor/contexts/run.ts +47 -0
  178. package/src/actor/contexts/sleep.ts +9 -3
  179. package/src/actor/contexts/state-change.ts +9 -3
  180. package/src/actor/contexts/wake.ts +9 -3
  181. package/src/actor/contexts/websocket.ts +23 -6
  182. package/src/actor/database.ts +8 -18
  183. package/src/actor/definition.ts +20 -6
  184. package/src/actor/driver.ts +32 -3
  185. package/src/actor/errors.ts +127 -0
  186. package/src/actor/instance/connection-manager.ts +183 -80
  187. package/src/actor/instance/event-manager.ts +26 -15
  188. package/src/actor/instance/keys.ts +117 -0
  189. package/src/actor/instance/mod.ts +784 -174
  190. package/src/actor/instance/queue-manager.ts +603 -0
  191. package/src/actor/instance/queue.ts +287 -0
  192. package/src/actor/instance/schedule-manager.ts +49 -7
  193. package/src/actor/instance/state-manager.ts +35 -11
  194. package/src/actor/instance/traces-driver.ts +128 -0
  195. package/src/actor/mod.ts +26 -2
  196. package/src/actor/protocol/old.ts +28 -13
  197. package/src/actor/protocol/serde.ts +1 -1
  198. package/src/actor/router-endpoints.ts +177 -21
  199. package/src/actor/router-websocket-endpoints.ts +18 -29
  200. package/src/actor/router.ts +177 -0
  201. package/src/actor/schema.ts +291 -0
  202. package/src/actor/utils.ts +40 -0
  203. package/src/client/actor-common.ts +1 -1
  204. package/src/client/actor-conn.ts +100 -33
  205. package/src/client/actor-handle.ts +61 -33
  206. package/src/client/client.ts +2 -4
  207. package/src/client/config.ts +1 -1
  208. package/src/client/mod.browser.ts +2 -0
  209. package/src/client/mod.ts +1 -4
  210. package/src/client/queue.ts +146 -0
  211. package/src/client/utils.ts +1 -1
  212. package/src/common/log.ts +1 -1
  213. package/src/common/utils.ts +3 -3
  214. package/src/db/config.ts +100 -0
  215. package/src/db/drizzle/mod.ts +226 -0
  216. package/src/db/drizzle/sqlite-core.ts +22 -0
  217. package/src/db/mod.ts +125 -0
  218. package/src/db/shared.ts +92 -0
  219. package/src/db/sqlite-vfs.ts +12 -0
  220. package/src/driver-helpers/mod.ts +1 -0
  221. package/src/driver-test-suite/mod.ts +69 -43
  222. package/src/driver-test-suite/tests/access-control.ts +218 -0
  223. package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
  224. package/src/driver-test-suite/tests/actor-db.ts +394 -0
  225. package/src/driver-test-suite/tests/actor-inspector.ts +259 -358
  226. package/src/driver-test-suite/tests/actor-kv.ts +41 -20
  227. package/src/driver-test-suite/tests/actor-queue.ts +324 -0
  228. package/src/driver-test-suite/tests/actor-run.ts +181 -0
  229. package/src/driver-test-suite/tests/actor-schedule.ts +5 -2
  230. package/src/driver-test-suite/tests/actor-sleep.ts +3 -3
  231. package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
  232. package/src/driver-test-suite/tests/actor-workflow.ts +108 -0
  233. package/src/driver-test-suite/tests/manager-driver.ts +11 -0
  234. package/src/driver-test-suite/tests/raw-http-request-properties.ts +1 -1
  235. package/src/driver-test-suite/tests/raw-websocket.ts +12 -12
  236. package/src/drivers/default.ts +7 -2
  237. package/src/drivers/engine/actor-driver.ts +45 -37
  238. package/src/drivers/engine/config.ts +1 -1
  239. package/src/drivers/file-system/actor.ts +20 -2
  240. package/src/drivers/file-system/global-state.ts +569 -258
  241. package/src/drivers/file-system/kv-limits.ts +70 -0
  242. package/src/drivers/file-system/manager.ts +22 -6
  243. package/src/drivers/file-system/mod.ts +39 -16
  244. package/src/drivers/file-system/sqlite-runtime.ts +210 -0
  245. package/src/inspector/actor-inspector.ts +224 -102
  246. package/src/inspector/config.ts +1 -1
  247. package/src/inspector/handler.ts +102 -20
  248. package/src/inspector/mod.browser.ts +8 -0
  249. package/src/inspector/mod.ts +2 -0
  250. package/src/inspector/serve-ui.ts +40 -0
  251. package/src/inspector/transport.ts +18 -0
  252. package/src/inspector/utils.ts +5 -39
  253. package/src/manager/gateway.ts +1 -1
  254. package/src/manager/protocol/mod.ts +1 -1
  255. package/src/manager/protocol/query.ts +1 -1
  256. package/src/manager/router-schema.ts +1 -1
  257. package/src/manager/router.ts +38 -12
  258. package/src/manager-api/actors.ts +1 -1
  259. package/src/manager-api/common.ts +1 -1
  260. package/src/registry/config/driver.ts +1 -1
  261. package/src/registry/config/index.ts +212 -43
  262. package/src/registry/config/legacy-runner.ts +1 -1
  263. package/src/registry/config/runner.ts +1 -1
  264. package/src/registry/config/serverless.ts +1 -1
  265. package/src/registry/index.ts +7 -5
  266. package/src/remote-manager-driver/api-utils.ts +1 -1
  267. package/src/schemas/actor-inspector/mod.ts +1 -1
  268. package/src/schemas/actor-inspector/versioned.ts +195 -8
  269. package/src/schemas/actor-persist/versioned.ts +87 -7
  270. package/src/schemas/client-protocol/mod.ts +1 -1
  271. package/src/schemas/client-protocol/versioned.ts +127 -11
  272. package/src/schemas/client-protocol-zod/mod.ts +16 -1
  273. package/src/schemas/persist/mod.ts +1 -0
  274. package/src/schemas/transport/mod.ts +1 -0
  275. package/src/serde.ts +1 -1
  276. package/src/serve-test-suite/mod.ts +10 -9
  277. package/src/test/mod.ts +15 -56
  278. package/src/utils/endpoint-parser.test.ts +1 -1
  279. package/src/utils/endpoint-parser.ts +1 -1
  280. package/src/utils/env-vars.ts +12 -1
  281. package/src/utils/node.ts +15 -2
  282. package/src/utils.test.ts +34 -0
  283. package/src/utils.ts +140 -6
  284. package/src/workflow/constants.ts +2 -0
  285. package/src/workflow/context.ts +532 -0
  286. package/src/workflow/driver.ts +191 -0
  287. package/src/workflow/inspector.ts +268 -0
  288. package/src/workflow/mod.ts +122 -0
  289. package/dist/tsup/chunk-2IJTYN6K.cjs +0 -278
  290. package/dist/tsup/chunk-2IJTYN6K.cjs.map +0 -1
  291. package/dist/tsup/chunk-2XQS746M.cjs.map +0 -1
  292. package/dist/tsup/chunk-3VP5CSHV.cjs +0 -114
  293. package/dist/tsup/chunk-3VP5CSHV.cjs.map +0 -1
  294. package/dist/tsup/chunk-AQFSQMBG.js +0 -114
  295. package/dist/tsup/chunk-AQFSQMBG.js.map +0 -1
  296. package/dist/tsup/chunk-E6ZE2YEA.js +0 -664
  297. package/dist/tsup/chunk-E6ZE2YEA.js.map +0 -1
  298. package/dist/tsup/chunk-FJ3KTN4V.js.map +0 -1
  299. package/dist/tsup/chunk-GBENOENJ.cjs +0 -8
  300. package/dist/tsup/chunk-GBENOENJ.cjs.map +0 -1
  301. package/dist/tsup/chunk-GD7UXGOE.cjs +0 -4762
  302. package/dist/tsup/chunk-GD7UXGOE.cjs.map +0 -1
  303. package/dist/tsup/chunk-GMAVRZSF.js.map +0 -1
  304. package/dist/tsup/chunk-H4TB4X25.cjs.map +0 -1
  305. package/dist/tsup/chunk-JDAD2YFA.js.map +0 -1
  306. package/dist/tsup/chunk-KCOVZOPS.js +0 -1946
  307. package/dist/tsup/chunk-KCOVZOPS.js.map +0 -1
  308. package/dist/tsup/chunk-KDFWJKMJ.cjs +0 -664
  309. package/dist/tsup/chunk-KDFWJKMJ.cjs.map +0 -1
  310. package/dist/tsup/chunk-LFVF5SCU.js.map +0 -1
  311. package/dist/tsup/chunk-Q6W7RJJP.js.map +0 -1
  312. package/dist/tsup/chunk-RUW5CZ5Z.cjs +0 -1949
  313. package/dist/tsup/chunk-RUW5CZ5Z.cjs.map +0 -1
  314. package/dist/tsup/chunk-RZW2DNND.cjs.map +0 -1
  315. package/dist/tsup/chunk-TCOEBUUE.js +0 -278
  316. package/dist/tsup/chunk-TCOEBUUE.js.map +0 -1
  317. package/dist/tsup/chunk-X35U3YNX.cjs.map +0 -1
  318. package/dist/tsup/keys-Chhy4ylv.d.cts +0 -8
  319. package/dist/tsup/keys-Chhy4ylv.d.ts +0 -8
  320. package/dist/tsup/v1-Gq4avTK3.d.cts +0 -240
  321. package/dist/tsup/v1-Gq4avTK3.d.ts +0 -240
  322. /package/dist/tsup/{chunk-XXGJCOL6.js.map → chunk-A6YIZWTK.js.map} +0 -0
@@ -1,1949 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
-
3
-
4
- var _chunkGD7UXGOEcjs = require('./chunk-GD7UXGOE.cjs');
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
- var _chunkRZW2DNNDcjs = require('./chunk-RZW2DNND.cjs');
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
- var _chunkH4TB4X25cjs = require('./chunk-H4TB4X25.cjs');
30
-
31
-
32
-
33
- var _chunk2XQS746Mcjs = require('./chunk-2XQS746M.cjs');
34
-
35
-
36
- var _chunkGBENOENJcjs = require('./chunk-GBENOENJ.cjs');
37
-
38
- // src/actor/router.ts
39
- var _hono = require('hono');
40
- function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
41
- const router = new (0, _hono.Hono)({
42
- strict: false
43
- });
44
- router.use("*", _chunkRZW2DNNDcjs.loggerMiddleware.call(void 0, _chunkRZW2DNNDcjs.loggerWithoutContext.call(void 0, )));
45
- router.use("*", async (c, next) => {
46
- const actor = await actorDriver.loadActor(c.env.actorId);
47
- actor.beginHonoHttpRequest();
48
- try {
49
- await next();
50
- } finally {
51
- actor.endHonoHttpRequest();
52
- }
53
- });
54
- router.get("/", (c) => {
55
- return c.text(
56
- "This is an RivetKit actor.\n\nLearn more at https://rivetkit.org"
57
- );
58
- });
59
- router.get("/health", (c) => {
60
- return c.text("ok");
61
- });
62
- router.get("/metadata", async (c) => {
63
- return c.json({
64
- runtime: "rivetkit",
65
- version: _chunkH4TB4X25cjs.VERSION
66
- });
67
- });
68
- if (isTest) {
69
- router.post("/.test/force-disconnect", async (c) => {
70
- var _a;
71
- const connId = c.req.query("conn");
72
- if (!connId) {
73
- return c.text("Missing conn query parameter", 400);
74
- }
75
- const actor = await actorDriver.loadActor(c.env.actorId);
76
- const conn = actor.connectionManager.getConnForId(connId);
77
- if (!conn) {
78
- return c.text(`Connection not found: ${connId}`, 404);
79
- }
80
- if ((_a = conn[_chunkRZW2DNNDcjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _a.terminate) {
81
- conn[_chunkRZW2DNNDcjs.CONN_DRIVER_SYMBOL].terminate(actor, conn);
82
- }
83
- return c.json({ success: true });
84
- });
85
- }
86
- if (getUpgradeWebSocket) {
87
- router.on(
88
- "GET",
89
- [_chunkRZW2DNNDcjs.PATH_CONNECT, `${_chunkRZW2DNNDcjs.PATH_WEBSOCKET_PREFIX}*`, _chunkRZW2DNNDcjs.PATH_INSPECTOR_CONNECT],
90
- async (c) => {
91
- const upgradeWebSocket = getUpgradeWebSocket();
92
- if (upgradeWebSocket) {
93
- return upgradeWebSocket(async (c2) => {
94
- const protocols = c2.req.header(
95
- "sec-websocket-protocol"
96
- );
97
- const { encoding, connParams } = _chunkRZW2DNNDcjs.parseWebSocketProtocols.call(void 0, protocols);
98
- return await _chunkRZW2DNNDcjs.routeWebSocket.call(void 0,
99
- c2.req.raw,
100
- c2.req.path,
101
- c2.req.header(),
102
- config4,
103
- actorDriver,
104
- c2.env.actorId,
105
- encoding,
106
- connParams,
107
- void 0,
108
- void 0,
109
- false,
110
- false
111
- );
112
- })(c, _chunkH4TB4X25cjs.noopNext.call(void 0, ));
113
- } else {
114
- return c.text(
115
- "WebSockets are not enabled for this driver.",
116
- 400
117
- );
118
- }
119
- }
120
- );
121
- }
122
- router.post("/action/:action", async (c) => {
123
- const actionName = c.req.param("action");
124
- return _chunkRZW2DNNDcjs.handleAction.call(void 0, c, config4, actorDriver, actionName, c.env.actorId);
125
- });
126
- router.all("/request/*", async (c) => {
127
- const url = new URL(c.req.url);
128
- const originalPath = url.pathname.replace(/^\/request/, "") || "/";
129
- const correctedUrl = new URL(originalPath + url.search, url.origin);
130
- const correctedRequest = new Request(correctedUrl, {
131
- method: c.req.method,
132
- headers: c.req.raw.headers,
133
- body: c.req.raw.body,
134
- duplex: "half"
135
- });
136
- _chunkRZW2DNNDcjs.loggerWithoutContext.call(void 0, ).debug({
137
- msg: "rewriting http url",
138
- from: c.req.url,
139
- to: correctedRequest.url
140
- });
141
- return await _chunkRZW2DNNDcjs.handleRawRequest.call(void 0,
142
- c,
143
- correctedRequest,
144
- actorDriver,
145
- c.env.actorId
146
- );
147
- });
148
- router.notFound(_chunkRZW2DNNDcjs.handleRouteNotFound);
149
- router.onError(_chunkRZW2DNNDcjs.handleRouteError);
150
- return router;
151
- }
152
-
153
- // src/common/inline-websocket-adapter.ts
154
- var _ws = require('hono/ws');
155
- var _virtualwebsocket = require('@rivetkit/virtual-websocket');
156
- function logger() {
157
- return _chunkH4TB4X25cjs.getLogger.call(void 0, "inline-websocket-adapter");
158
- }
159
- var InlineWebSocketAdapter = class {
160
- #handler;
161
- #wsContext;
162
- #readyState = 0;
163
- #clientWs;
164
- #actorWs;
165
- constructor(handler) {
166
- this.#handler = handler;
167
- this.#clientWs = new (0, _virtualwebsocket.VirtualWebSocket)({
168
- getReadyState: () => this.#readyState,
169
- onSend: (data) => {
170
- try {
171
- this.#handler.onMessage({ data }, this.#wsContext);
172
- this.#actorWs.triggerMessage(data);
173
- } catch (err) {
174
- this.#handleError(err);
175
- this.#close(1011, "Internal error processing message");
176
- }
177
- },
178
- onClose: (code, reason) => this.#close(code, reason)
179
- });
180
- this.#actorWs = new (0, _virtualwebsocket.VirtualWebSocket)({
181
- getReadyState: () => this.#readyState,
182
- onSend: (data) => this.#clientWs.triggerMessage(data),
183
- onClose: (code, reason) => this.#close(code, reason)
184
- });
185
- this.#wsContext = new (0, _ws.WSContext)({
186
- raw: this.#actorWs,
187
- send: (data) => {
188
- logger().debug({ msg: "WSContext.send called" });
189
- this.#clientWs.triggerMessage(data);
190
- },
191
- close: (code, reason) => {
192
- logger().debug({ msg: "WSContext.close called", code, reason });
193
- this.#close(code || 1e3, reason || "");
194
- },
195
- readyState: 1
196
- });
197
- setTimeout(() => {
198
- this.#initialize();
199
- }, 0);
200
- }
201
- /** Get the client-side WebSocket (for proxy/client code) */
202
- get clientWebSocket() {
203
- return this.#clientWs;
204
- }
205
- /** Get the actor-side WebSocket (passed to actor via wsContext.raw) */
206
- get actorWebSocket() {
207
- return this.#actorWs;
208
- }
209
- async #initialize() {
210
- try {
211
- logger().debug({ msg: "websocket initializing" });
212
- this.#readyState = 1;
213
- logger().debug({ msg: "calling handler.onOpen with WSContext" });
214
- this.#handler.onOpen(void 0, this.#wsContext);
215
- this.#clientWs.triggerOpen();
216
- this.#actorWs.triggerOpen();
217
- } catch (err) {
218
- this.#handleError(err);
219
- this.#close(1011, "Internal error during initialization");
220
- }
221
- }
222
- #handleError(err) {
223
- logger().error({
224
- msg: "error in websocket",
225
- error: err,
226
- errorMessage: err instanceof Error ? err.message : String(err),
227
- stack: err instanceof Error ? err.stack : void 0
228
- });
229
- try {
230
- this.#handler.onError(err, this.#wsContext);
231
- } catch (handlerErr) {
232
- logger().error({ msg: "error in onError handler", error: handlerErr });
233
- }
234
- this.#clientWs.triggerError(err);
235
- this.#actorWs.triggerError(err);
236
- }
237
- #close(code, reason) {
238
- if (this.#readyState === 3 || this.#readyState === 2) {
239
- return;
240
- }
241
- logger().debug({ msg: "closing websocket", code, reason });
242
- this.#readyState = 2;
243
- try {
244
- this.#handler.onClose({ code, reason, wasClean: true }, this.#wsContext);
245
- } catch (err) {
246
- logger().error({ msg: "error closing websocket", error: err });
247
- } finally {
248
- this.#readyState = 3;
249
- this.#clientWs.triggerClose(code, reason);
250
- this.#actorWs.triggerClose(code, reason);
251
- }
252
- }
253
- };
254
- function createInlineWebSocket(handler) {
255
- const adapter = new InlineWebSocketAdapter(handler);
256
- return adapter.clientWebSocket;
257
- }
258
-
259
- // src/utils/node.ts
260
- var _module = require('module');
261
- var nodeCrypto;
262
- var nodeFsSync;
263
- var nodeFs;
264
- var nodePath;
265
- var nodeOs;
266
- var nodeChildProcess;
267
- var nodeStream;
268
- var hasImportedDependencies = false;
269
- function getRequireFn() {
270
- return _module.createRequire.call(void 0, _chunkGBENOENJcjs.importMetaUrl);
271
- }
272
- function importNodeDependencies() {
273
- if (hasImportedDependencies) return;
274
- try {
275
- const requireFn = getRequireFn();
276
- nodeCrypto = requireFn(
277
- /* webpackIgnore: true */
278
- "node:crypto"
279
- );
280
- nodeFsSync = requireFn(
281
- /* webpackIgnore: true */
282
- "node:fs"
283
- );
284
- nodeFs = requireFn(
285
- /* webpackIgnore: true */
286
- "node:fs/promises"
287
- );
288
- nodePath = requireFn(
289
- /* webpackIgnore: true */
290
- "node:path"
291
- );
292
- nodeOs = requireFn(
293
- /* webpackIgnore: true */
294
- "node:os"
295
- );
296
- nodeChildProcess = requireFn(
297
- /* webpackIgnore: true */
298
- "node:child_process"
299
- );
300
- nodeStream = requireFn(
301
- /* webpackIgnore: true */
302
- "node:stream/promises"
303
- );
304
- hasImportedDependencies = true;
305
- } catch (err) {
306
- console.warn(
307
- "Node.js modules not available, file system driver will not work",
308
- err
309
- );
310
- throw err;
311
- }
312
- }
313
- function getNodeCrypto() {
314
- if (!nodeCrypto) {
315
- throw new Error(
316
- "Node crypto module not loaded. Ensure importNodeDependencies() has been called."
317
- );
318
- }
319
- return nodeCrypto;
320
- }
321
- function getNodeFsSync() {
322
- if (!nodeFsSync) {
323
- throw new Error(
324
- "Node fs module not loaded. Ensure importNodeDependencies() has been called."
325
- );
326
- }
327
- return nodeFsSync;
328
- }
329
- function getNodeFs() {
330
- if (!nodeFs) {
331
- throw new Error(
332
- "Node fs/promises module not loaded. Ensure importNodeDependencies() has been called."
333
- );
334
- }
335
- return nodeFs;
336
- }
337
- function getNodePath() {
338
- if (!nodePath) {
339
- throw new Error(
340
- "Node path module not loaded. Ensure importNodeDependencies() has been called."
341
- );
342
- }
343
- return nodePath;
344
- }
345
- function getNodeOs() {
346
- if (!nodeOs) {
347
- throw new Error(
348
- "Node os module not loaded. Ensure importNodeDependencies() has been called."
349
- );
350
- }
351
- return nodeOs;
352
- }
353
- function getNodeChildProcess() {
354
- if (!nodeChildProcess) {
355
- throw new Error(
356
- "Node child_process module not loaded. Ensure importNodeDependencies() has been called."
357
- );
358
- }
359
- return nodeChildProcess;
360
- }
361
- function getNodeStream() {
362
- if (!nodeStream) {
363
- throw new Error(
364
- "Node stream/promises module not loaded. Ensure importNodeDependencies() has been called."
365
- );
366
- }
367
- return nodeStream;
368
- }
369
-
370
- // src/drivers/file-system/actor.ts
371
- var FileSystemActorDriver = class {
372
- #config;
373
- #managerDriver;
374
- #inlineClient;
375
- #state;
376
- constructor(config4, managerDriver, inlineClient, state) {
377
- this.#config = config4;
378
- this.#managerDriver = managerDriver;
379
- this.#inlineClient = inlineClient;
380
- this.#state = state;
381
- }
382
- async loadActor(actorId) {
383
- return this.#state.startActor(
384
- this.#config,
385
- this.#inlineClient,
386
- this,
387
- actorId
388
- );
389
- }
390
- /**
391
- * Get the current storage directory path
392
- */
393
- get storagePath() {
394
- return this.#state.storagePath;
395
- }
396
- getContext(_actorId) {
397
- return {};
398
- }
399
- async kvBatchPut(actorId, entries) {
400
- await this.#state.kvBatchPut(actorId, entries);
401
- }
402
- async kvBatchGet(actorId, keys) {
403
- return await this.#state.kvBatchGet(actorId, keys);
404
- }
405
- async kvBatchDelete(actorId, keys) {
406
- await this.#state.kvBatchDelete(actorId, keys);
407
- }
408
- async kvListPrefix(actorId, prefix) {
409
- return await this.#state.kvListPrefix(actorId, prefix);
410
- }
411
- async setAlarm(actor, timestamp) {
412
- await this.#state.setActorAlarm(actor.id, timestamp);
413
- }
414
- getDatabase(actorId) {
415
- return this.#state.createDatabase(actorId);
416
- }
417
- startSleep(actorId) {
418
- this.#state.sleepActor(actorId);
419
- }
420
- async startDestroy(actorId) {
421
- await this.#state.destroyActor(actorId);
422
- }
423
- };
424
-
425
- // src/drivers/file-system/global-state.ts
426
- var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
427
-
428
- // src/schemas/file-system-driver/versioned.ts
429
- var _vbare = require('vbare');
430
-
431
- // dist/schemas/file-system-driver/v1.ts
432
- var _barets = require('@rivetkit/bare-ts'); var bare = _interopRequireWildcard(_barets); var bare2 = _interopRequireWildcard(_barets); var bare3 = _interopRequireWildcard(_barets);
433
- var config = /* @__PURE__ */ bare.Config({});
434
- function read0(bc) {
435
- const len = bare.readUintSafe(bc);
436
- if (len === 0) {
437
- return [];
438
- }
439
- const result = [bare.readString(bc)];
440
- for (let i = 1; i < len; i++) {
441
- result[i] = bare.readString(bc);
442
- }
443
- return result;
444
- }
445
- function write0(bc, x) {
446
- bare.writeUintSafe(bc, x.length);
447
- for (let i = 0; i < x.length; i++) {
448
- bare.writeString(bc, x[i]);
449
- }
450
- }
451
- function readActorState(bc) {
452
- return {
453
- actorId: bare.readString(bc),
454
- name: bare.readString(bc),
455
- key: read0(bc),
456
- persistedData: bare.readData(bc),
457
- createdAt: bare.readU64(bc)
458
- };
459
- }
460
- function writeActorState(bc, x) {
461
- bare.writeString(bc, x.actorId);
462
- bare.writeString(bc, x.name);
463
- write0(bc, x.key);
464
- bare.writeData(bc, x.persistedData);
465
- bare.writeU64(bc, x.createdAt);
466
- }
467
- function encodeActorState(x) {
468
- const bc = new bare.ByteCursor(
469
- new Uint8Array(config.initialBufferLength),
470
- config
471
- );
472
- writeActorState(bc, x);
473
- return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
474
- }
475
- function decodeActorState(bytes) {
476
- const bc = new bare.ByteCursor(bytes, config);
477
- const result = readActorState(bc);
478
- if (bc.offset < bc.view.byteLength) {
479
- throw new bare.BareError(bc.offset, "remaining bytes");
480
- }
481
- return result;
482
- }
483
- function readActorAlarm(bc) {
484
- return {
485
- actorId: bare.readString(bc),
486
- timestamp: bare.readUint(bc)
487
- };
488
- }
489
- function writeActorAlarm(bc, x) {
490
- bare.writeString(bc, x.actorId);
491
- bare.writeUint(bc, x.timestamp);
492
- }
493
- function encodeActorAlarm(x) {
494
- const bc = new bare.ByteCursor(
495
- new Uint8Array(config.initialBufferLength),
496
- config
497
- );
498
- writeActorAlarm(bc, x);
499
- return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
500
- }
501
- function decodeActorAlarm(bytes) {
502
- const bc = new bare.ByteCursor(bytes, config);
503
- const result = readActorAlarm(bc);
504
- if (bc.offset < bc.view.byteLength) {
505
- throw new bare.BareError(bc.offset, "remaining bytes");
506
- }
507
- return result;
508
- }
509
-
510
- // dist/schemas/file-system-driver/v2.ts
511
-
512
- var config2 = /* @__PURE__ */ bare2.Config({});
513
- function readActorKvEntry(bc) {
514
- return {
515
- key: bare2.readData(bc),
516
- value: bare2.readData(bc)
517
- };
518
- }
519
- function writeActorKvEntry(bc, x) {
520
- bare2.writeData(bc, x.key);
521
- bare2.writeData(bc, x.value);
522
- }
523
- function read02(bc) {
524
- const len = bare2.readUintSafe(bc);
525
- if (len === 0) {
526
- return [];
527
- }
528
- const result = [bare2.readString(bc)];
529
- for (let i = 1; i < len; i++) {
530
- result[i] = bare2.readString(bc);
531
- }
532
- return result;
533
- }
534
- function write02(bc, x) {
535
- bare2.writeUintSafe(bc, x.length);
536
- for (let i = 0; i < x.length; i++) {
537
- bare2.writeString(bc, x[i]);
538
- }
539
- }
540
- function read1(bc) {
541
- const len = bare2.readUintSafe(bc);
542
- if (len === 0) {
543
- return [];
544
- }
545
- const result = [readActorKvEntry(bc)];
546
- for (let i = 1; i < len; i++) {
547
- result[i] = readActorKvEntry(bc);
548
- }
549
- return result;
550
- }
551
- function write1(bc, x) {
552
- bare2.writeUintSafe(bc, x.length);
553
- for (let i = 0; i < x.length; i++) {
554
- writeActorKvEntry(bc, x[i]);
555
- }
556
- }
557
- function readActorState2(bc) {
558
- return {
559
- actorId: bare2.readString(bc),
560
- name: bare2.readString(bc),
561
- key: read02(bc),
562
- kvStorage: read1(bc),
563
- createdAt: bare2.readU64(bc)
564
- };
565
- }
566
- function writeActorState2(bc, x) {
567
- bare2.writeString(bc, x.actorId);
568
- bare2.writeString(bc, x.name);
569
- write02(bc, x.key);
570
- write1(bc, x.kvStorage);
571
- bare2.writeU64(bc, x.createdAt);
572
- }
573
- function encodeActorState2(x) {
574
- const bc = new bare2.ByteCursor(
575
- new Uint8Array(config2.initialBufferLength),
576
- config2
577
- );
578
- writeActorState2(bc, x);
579
- return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
580
- }
581
- function decodeActorState2(bytes) {
582
- const bc = new bare2.ByteCursor(bytes, config2);
583
- const result = readActorState2(bc);
584
- if (bc.offset < bc.view.byteLength) {
585
- throw new bare2.BareError(bc.offset, "remaining bytes");
586
- }
587
- return result;
588
- }
589
- function readActorAlarm2(bc) {
590
- return {
591
- actorId: bare2.readString(bc),
592
- timestamp: bare2.readUint(bc)
593
- };
594
- }
595
- function writeActorAlarm2(bc, x) {
596
- bare2.writeString(bc, x.actorId);
597
- bare2.writeUint(bc, x.timestamp);
598
- }
599
- function encodeActorAlarm2(x) {
600
- const bc = new bare2.ByteCursor(
601
- new Uint8Array(config2.initialBufferLength),
602
- config2
603
- );
604
- writeActorAlarm2(bc, x);
605
- return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
606
- }
607
- function decodeActorAlarm2(bytes) {
608
- const bc = new bare2.ByteCursor(bytes, config2);
609
- const result = readActorAlarm2(bc);
610
- if (bc.offset < bc.view.byteLength) {
611
- throw new bare2.BareError(bc.offset, "remaining bytes");
612
- }
613
- return result;
614
- }
615
-
616
- // dist/schemas/file-system-driver/v3.ts
617
-
618
- var config3 = /* @__PURE__ */ bare3.Config({});
619
- function readActorKvEntry2(bc) {
620
- return {
621
- key: bare3.readData(bc),
622
- value: bare3.readData(bc)
623
- };
624
- }
625
- function writeActorKvEntry2(bc, x) {
626
- bare3.writeData(bc, x.key);
627
- bare3.writeData(bc, x.value);
628
- }
629
- function read03(bc) {
630
- const len = bare3.readUintSafe(bc);
631
- if (len === 0) {
632
- return [];
633
- }
634
- const result = [bare3.readString(bc)];
635
- for (let i = 1; i < len; i++) {
636
- result[i] = bare3.readString(bc);
637
- }
638
- return result;
639
- }
640
- function write03(bc, x) {
641
- bare3.writeUintSafe(bc, x.length);
642
- for (let i = 0; i < x.length; i++) {
643
- bare3.writeString(bc, x[i]);
644
- }
645
- }
646
- function read12(bc) {
647
- const len = bare3.readUintSafe(bc);
648
- if (len === 0) {
649
- return [];
650
- }
651
- const result = [readActorKvEntry2(bc)];
652
- for (let i = 1; i < len; i++) {
653
- result[i] = readActorKvEntry2(bc);
654
- }
655
- return result;
656
- }
657
- function write12(bc, x) {
658
- bare3.writeUintSafe(bc, x.length);
659
- for (let i = 0; i < x.length; i++) {
660
- writeActorKvEntry2(bc, x[i]);
661
- }
662
- }
663
- function read2(bc) {
664
- return bare3.readBool(bc) ? bare3.readU64(bc) : null;
665
- }
666
- function write2(bc, x) {
667
- bare3.writeBool(bc, x !== null);
668
- if (x !== null) {
669
- bare3.writeU64(bc, x);
670
- }
671
- }
672
- function readActorState3(bc) {
673
- return {
674
- actorId: bare3.readString(bc),
675
- name: bare3.readString(bc),
676
- key: read03(bc),
677
- kvStorage: read12(bc),
678
- createdAt: bare3.readU64(bc),
679
- startTs: read2(bc),
680
- connectableTs: read2(bc),
681
- sleepTs: read2(bc),
682
- destroyTs: read2(bc)
683
- };
684
- }
685
- function writeActorState3(bc, x) {
686
- bare3.writeString(bc, x.actorId);
687
- bare3.writeString(bc, x.name);
688
- write03(bc, x.key);
689
- write12(bc, x.kvStorage);
690
- bare3.writeU64(bc, x.createdAt);
691
- write2(bc, x.startTs);
692
- write2(bc, x.connectableTs);
693
- write2(bc, x.sleepTs);
694
- write2(bc, x.destroyTs);
695
- }
696
- function encodeActorState3(x) {
697
- const bc = new bare3.ByteCursor(
698
- new Uint8Array(config3.initialBufferLength),
699
- config3
700
- );
701
- writeActorState3(bc, x);
702
- return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
703
- }
704
- function decodeActorState3(bytes) {
705
- const bc = new bare3.ByteCursor(bytes, config3);
706
- const result = readActorState3(bc);
707
- if (bc.offset < bc.view.byteLength) {
708
- throw new bare3.BareError(bc.offset, "remaining bytes");
709
- }
710
- return result;
711
- }
712
- function readActorAlarm3(bc) {
713
- return {
714
- actorId: bare3.readString(bc),
715
- timestamp: bare3.readUint(bc)
716
- };
717
- }
718
- function writeActorAlarm3(bc, x) {
719
- bare3.writeString(bc, x.actorId);
720
- bare3.writeUint(bc, x.timestamp);
721
- }
722
- function encodeActorAlarm3(x) {
723
- const bc = new bare3.ByteCursor(
724
- new Uint8Array(config3.initialBufferLength),
725
- config3
726
- );
727
- writeActorAlarm3(bc, x);
728
- return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
729
- }
730
- function decodeActorAlarm3(bytes) {
731
- const bc = new bare3.ByteCursor(bytes, config3);
732
- const result = readActorAlarm3(bc);
733
- if (bc.offset < bc.view.byteLength) {
734
- throw new bare3.BareError(bc.offset, "remaining bytes");
735
- }
736
- return result;
737
- }
738
-
739
- // src/schemas/file-system-driver/versioned.ts
740
- var CURRENT_VERSION = 3;
741
- var v1ToV2 = (v1State) => {
742
- const kvStorage = [];
743
- if (v1State.persistedData) {
744
- const key = new Uint8Array([1]);
745
- kvStorage.push({
746
- key: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key),
747
- value: v1State.persistedData
748
- });
749
- }
750
- return {
751
- actorId: v1State.actorId,
752
- name: v1State.name,
753
- key: v1State.key,
754
- kvStorage,
755
- createdAt: v1State.createdAt
756
- };
757
- };
758
- var v2ToV3 = (v2State) => {
759
- return {
760
- actorId: v2State.actorId,
761
- name: v2State.name,
762
- key: v2State.key,
763
- kvStorage: v2State.kvStorage,
764
- createdAt: v2State.createdAt,
765
- startTs: null,
766
- connectableTs: null,
767
- sleepTs: null,
768
- destroyTs: null
769
- };
770
- };
771
- var v3ToV2 = (v3State) => {
772
- return {
773
- actorId: v3State.actorId,
774
- name: v3State.name,
775
- key: v3State.key,
776
- kvStorage: v3State.kvStorage,
777
- createdAt: v3State.createdAt
778
- };
779
- };
780
- var v2ToV1 = (v2State) => {
781
- const persistDataEntry = v2State.kvStorage.find((entry) => {
782
- const key = new Uint8Array(entry.key);
783
- return key.length === 1 && key[0] === 1;
784
- });
785
- return {
786
- actorId: v2State.actorId,
787
- name: v2State.name,
788
- key: v2State.key,
789
- persistedData: (persistDataEntry == null ? void 0 : persistDataEntry.value) || new ArrayBuffer(0),
790
- createdAt: v2State.createdAt
791
- };
792
- };
793
- var ACTOR_STATE_VERSIONED = _vbare.createVersionedDataHandler.call(void 0, {
794
- deserializeVersion: (bytes, version) => {
795
- switch (version) {
796
- case 1:
797
- return decodeActorState(bytes);
798
- case 2:
799
- return decodeActorState2(bytes);
800
- case 3:
801
- return decodeActorState3(bytes);
802
- default:
803
- throw new Error(`Unknown version ${version}`);
804
- }
805
- },
806
- serializeVersion: (data, version) => {
807
- switch (version) {
808
- case 1:
809
- return encodeActorState(data);
810
- case 2:
811
- return encodeActorState2(data);
812
- case 3:
813
- return encodeActorState3(data);
814
- default:
815
- throw new Error(`Unknown version ${version}`);
816
- }
817
- },
818
- deserializeConverters: () => [v1ToV2, v2ToV3],
819
- serializeConverters: () => [v3ToV2, v2ToV1]
820
- });
821
- var ACTOR_ALARM_VERSIONED = _vbare.createVersionedDataHandler.call(void 0, {
822
- deserializeVersion: (bytes, version) => {
823
- switch (version) {
824
- case 1:
825
- return decodeActorAlarm(bytes);
826
- case 2:
827
- return decodeActorAlarm2(bytes);
828
- case 3:
829
- return decodeActorAlarm3(bytes);
830
- default:
831
- throw new Error(`Unknown version ${version}`);
832
- }
833
- },
834
- serializeVersion: (data, version) => {
835
- switch (version) {
836
- case 1:
837
- return encodeActorAlarm(data);
838
- case 2:
839
- return encodeActorAlarm2(data);
840
- case 3:
841
- return encodeActorAlarm3(data);
842
- default:
843
- throw new Error(`Unknown version ${version}`);
844
- }
845
- },
846
- deserializeConverters: () => [],
847
- serializeConverters: () => []
848
- });
849
-
850
- // src/drivers/file-system/log.ts
851
- function logger2() {
852
- return _chunkH4TB4X25cjs.getLogger.call(void 0, "driver-fs");
853
- }
854
-
855
- // src/drivers/file-system/utils.ts
856
- function generateActorId(name, key) {
857
- const jsonString = JSON.stringify([name, key]);
858
- const crypto2 = getNodeCrypto();
859
- const hash = crypto2.createHash("sha256").update(jsonString).digest("hex").substring(0, 16);
860
- return hash;
861
- }
862
- function createHashForPath(dirPath) {
863
- const path = getNodePath();
864
- const normalizedPath = path.normalize(dirPath);
865
- const lastComponent = path.basename(normalizedPath);
866
- const crypto2 = getNodeCrypto();
867
- const hash = crypto2.createHash("sha256").update(normalizedPath).digest("hex").substring(0, 8);
868
- return `${lastComponent}-${hash}`;
869
- }
870
- function getStoragePath() {
871
- const dataPath = getDataPath("rivetkit");
872
- const dirHash = createHashForPath(process.cwd());
873
- const path = getNodePath();
874
- return path.join(dataPath, dirHash);
875
- }
876
- async function pathExists(path) {
877
- try {
878
- const fs = getNodeFs();
879
- await fs.access(path);
880
- return true;
881
- } catch (e2) {
882
- return false;
883
- }
884
- }
885
- async function ensureDirectoryExists(directoryPath) {
886
- if (!await pathExists(directoryPath)) {
887
- const fs = getNodeFs();
888
- await fs.mkdir(directoryPath, { recursive: true });
889
- }
890
- }
891
- function ensureDirectoryExistsSync(directoryPath) {
892
- const fsSync = getNodeFsSync();
893
- if (!fsSync.existsSync(directoryPath)) {
894
- fsSync.mkdirSync(directoryPath, { recursive: true });
895
- }
896
- }
897
- function getDataPath(appName) {
898
- const platform = process.platform;
899
- const os = getNodeOs();
900
- const homeDir = os.homedir();
901
- const path = getNodePath();
902
- switch (platform) {
903
- case "win32":
904
- return path.join(
905
- process.env.APPDATA || path.join(homeDir, "AppData", "Roaming"),
906
- appName
907
- );
908
- case "darwin":
909
- return path.join(
910
- homeDir,
911
- "Library",
912
- "Application Support",
913
- appName
914
- );
915
- default:
916
- return path.join(
917
- process.env.XDG_DATA_HOME || path.join(homeDir, ".local", "share"),
918
- appName
919
- );
920
- }
921
- }
922
-
923
- // src/drivers/file-system/global-state.ts
924
- var FileSystemGlobalState = class {
925
- #storagePath;
926
- #stateDir;
927
- #dbsDir;
928
- #alarmsDir;
929
- #persist;
930
- // IMPORTANT: Never delete from this map. Doing so will result in race
931
- // conditions since the actor generation will cease to be tracked
932
- // correctly. Always increment generation if a new actor is created.
933
- #actors = /* @__PURE__ */ new Map();
934
- #actorCountOnStartup = 0;
935
- #runnerParams;
936
- get persist() {
937
- return this.#persist;
938
- }
939
- get storagePath() {
940
- return this.#storagePath;
941
- }
942
- get actorCountOnStartup() {
943
- return this.#actorCountOnStartup;
944
- }
945
- constructor(persist = true, customPath) {
946
- this.#persist = persist;
947
- this.#storagePath = persist ? _nullishCoalesce(customPath, () => ( getStoragePath())) : "/tmp";
948
- const path = getNodePath();
949
- this.#stateDir = path.join(this.#storagePath, "state");
950
- this.#dbsDir = path.join(this.#storagePath, "databases");
951
- this.#alarmsDir = path.join(this.#storagePath, "alarms");
952
- if (this.#persist) {
953
- ensureDirectoryExistsSync(this.#stateDir);
954
- ensureDirectoryExistsSync(this.#dbsDir);
955
- ensureDirectoryExistsSync(this.#alarmsDir);
956
- try {
957
- const fsSync = getNodeFsSync();
958
- const actorIds = fsSync.readdirSync(this.#stateDir);
959
- this.#actorCountOnStartup = actorIds.length;
960
- } catch (error) {
961
- logger2().error({ msg: "failed to count actors", error });
962
- }
963
- logger2().debug({
964
- msg: "file system driver ready",
965
- dir: this.#storagePath,
966
- actorCount: this.#actorCountOnStartup
967
- });
968
- try {
969
- this.#cleanupTempFilesSync();
970
- } catch (err) {
971
- logger2().error({
972
- msg: "failed to cleanup temp files",
973
- error: err
974
- });
975
- }
976
- } else {
977
- logger2().debug({ msg: "memory driver ready" });
978
- }
979
- }
980
- getActorStatePath(actorId) {
981
- return getNodePath().join(this.#stateDir, actorId);
982
- }
983
- getActorDbPath(actorId) {
984
- return getNodePath().join(this.#dbsDir, `${actorId}.db`);
985
- }
986
- getActorAlarmPath(actorId) {
987
- return getNodePath().join(this.#alarmsDir, actorId);
988
- }
989
- async *getActorsIterator(params) {
990
- let actorIds = Array.from(this.#actors.keys()).sort();
991
- const fsSync = getNodeFsSync();
992
- if (fsSync.existsSync(this.#stateDir)) {
993
- actorIds = fsSync.readdirSync(this.#stateDir).filter((id) => !id.includes(".tmp")).sort();
994
- }
995
- const startIndex = params.cursor ? actorIds.indexOf(params.cursor) + 1 : 0;
996
- for (let i = startIndex; i < actorIds.length; i++) {
997
- const actorId = actorIds[i];
998
- if (!actorId) {
999
- continue;
1000
- }
1001
- try {
1002
- const state = await this.loadActorStateOrError(actorId);
1003
- yield state;
1004
- } catch (error) {
1005
- logger2().error({
1006
- msg: "failed to load actor state",
1007
- actorId,
1008
- error
1009
- });
1010
- }
1011
- }
1012
- }
1013
- /**
1014
- * Ensures an entry exists for this actor.
1015
- *
1016
- * Used for #createActor and #loadActor.
1017
- */
1018
- #upsertEntry(actorId) {
1019
- let entry = this.#actors.get(actorId);
1020
- if (entry) {
1021
- return entry;
1022
- }
1023
- entry = {
1024
- id: actorId,
1025
- lifecycleState: 0 /* NONEXISTENT */,
1026
- generation: crypto.randomUUID()
1027
- };
1028
- this.#actors.set(actorId, entry);
1029
- return entry;
1030
- }
1031
- /**
1032
- * Creates a new actor and writes to file system.
1033
- */
1034
- async createActor(actorId, name, key, input) {
1035
- const entry = this.#upsertEntry(actorId);
1036
- if (entry.state) {
1037
- throw new (0, _chunk2XQS746Mcjs.ActorDuplicateKey)(name, key);
1038
- }
1039
- if (this.isActorStopping(actorId)) {
1040
- throw new Error(`Actor ${actorId} is stopping`);
1041
- }
1042
- if (entry.lifecycleState === 4 /* DESTROYED */) {
1043
- entry.lifecycleState = 0 /* NONEXISTENT */;
1044
- entry.generation = crypto.randomUUID();
1045
- }
1046
- const kvStorage = [];
1047
- const initialKvState = _chunkRZW2DNNDcjs.getInitialActorKvState.call(void 0, input);
1048
- for (const [key2, value] of initialKvState) {
1049
- kvStorage.push({
1050
- key: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key2),
1051
- value: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, value)
1052
- });
1053
- }
1054
- entry.state = {
1055
- actorId,
1056
- name,
1057
- key,
1058
- createdAt: BigInt(Date.now()),
1059
- kvStorage,
1060
- startTs: null,
1061
- connectableTs: null,
1062
- sleepTs: null,
1063
- destroyTs: null
1064
- };
1065
- entry.lifecycleState = 1 /* AWAKE */;
1066
- await this.writeActor(actorId, entry.generation, entry.state);
1067
- return entry;
1068
- }
1069
- /**
1070
- * Loads the actor from disk or returns the existing actor entry. This will return an entry even if the actor does not actually exist.
1071
- */
1072
- async loadActor(actorId) {
1073
- const entry = this.#upsertEntry(actorId);
1074
- if (entry.lifecycleState === 4 /* DESTROYED */) {
1075
- return entry;
1076
- }
1077
- if (entry.state) {
1078
- return entry;
1079
- }
1080
- if (!this.#persist) {
1081
- return entry;
1082
- }
1083
- if (entry.loadPromise) {
1084
- await entry.loadPromise;
1085
- return entry;
1086
- }
1087
- entry.loadPromise = this.loadActorState(entry);
1088
- return entry.loadPromise;
1089
- }
1090
- async loadActorState(entry) {
1091
- const stateFilePath = this.getActorStatePath(entry.id);
1092
- try {
1093
- const fs = getNodeFs();
1094
- const stateData = await fs.readFile(stateFilePath);
1095
- entry.state = ACTOR_STATE_VERSIONED.deserializeWithEmbeddedVersion(
1096
- new Uint8Array(stateData)
1097
- );
1098
- return entry;
1099
- } catch (innerError) {
1100
- if (innerError.code === "ENOENT") {
1101
- entry.loadPromise = void 0;
1102
- return entry;
1103
- }
1104
- const error = new Error(
1105
- `Failed to load actor state: ${innerError}`
1106
- );
1107
- throw error;
1108
- }
1109
- }
1110
- async loadOrCreateActor(actorId, name, key, input) {
1111
- const entry = await this.loadActor(actorId);
1112
- if (!entry.state) {
1113
- if (this.isActorStopping(actorId)) {
1114
- throw new Error(`Actor ${actorId} stopping`);
1115
- }
1116
- if (entry.lifecycleState === 4 /* DESTROYED */) {
1117
- entry.lifecycleState = 0 /* NONEXISTENT */;
1118
- entry.generation = crypto.randomUUID();
1119
- }
1120
- const kvStorage = [];
1121
- const initialKvState = _chunkRZW2DNNDcjs.getInitialActorKvState.call(void 0, input);
1122
- for (const [key2, value] of initialKvState) {
1123
- kvStorage.push({
1124
- key: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key2),
1125
- value: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, value)
1126
- });
1127
- }
1128
- entry.state = {
1129
- actorId,
1130
- name,
1131
- key,
1132
- createdAt: BigInt(Date.now()),
1133
- kvStorage,
1134
- startTs: null,
1135
- connectableTs: null,
1136
- sleepTs: null,
1137
- destroyTs: null
1138
- };
1139
- await this.writeActor(actorId, entry.generation, entry.state);
1140
- }
1141
- return entry;
1142
- }
1143
- async sleepActor(actorId) {
1144
- var _a;
1145
- _invariant2.default.call(void 0,
1146
- this.#persist,
1147
- "cannot sleep actor with memory driver, must use file system driver"
1148
- );
1149
- const actor = this.#upsertEntry(actorId);
1150
- _invariant2.default.call(void 0, actor, `tried to sleep ${actorId}, does not exist`);
1151
- if (this.isActorStopping(actorId)) {
1152
- return;
1153
- }
1154
- actor.lifecycleState = 2 /* STARTING_SLEEP */;
1155
- if (actor.loadPromise) await actor.loadPromise.catch();
1156
- if ((_a = actor.startPromise) == null ? void 0 : _a.promise)
1157
- await actor.startPromise.promise.catch();
1158
- if (actor.state) {
1159
- actor.state = {
1160
- ...actor.state,
1161
- sleepTs: BigInt(Date.now())
1162
- };
1163
- await this.writeActor(actorId, actor.generation, actor.state);
1164
- }
1165
- _invariant2.default.call(void 0, actor.actor, "actor should be loaded");
1166
- await actor.actor.onStop("sleep");
1167
- this.#actors.delete(actorId);
1168
- }
1169
- async destroyActor(actorId) {
1170
- var _a;
1171
- const actor = this.#upsertEntry(actorId);
1172
- if (this.isActorStopping(actorId)) {
1173
- return;
1174
- }
1175
- actor.lifecycleState = 3 /* STARTING_DESTROY */;
1176
- if (actor.loadPromise) await actor.loadPromise.catch();
1177
- if ((_a = actor.startPromise) == null ? void 0 : _a.promise)
1178
- await actor.startPromise.promise.catch();
1179
- if (actor.state) {
1180
- actor.state = {
1181
- ...actor.state,
1182
- destroyTs: BigInt(Date.now())
1183
- };
1184
- await this.writeActor(actorId, actor.generation, actor.state);
1185
- }
1186
- if (actor.actor) {
1187
- await actor.actor.onStop("destroy");
1188
- }
1189
- if (actor.alarmTimeout) {
1190
- actor.alarmTimeout.abort();
1191
- }
1192
- if (this.#persist) {
1193
- const fs = getNodeFs();
1194
- await Promise.all([
1195
- // Delete actor state file
1196
- (async () => {
1197
- try {
1198
- await fs.unlink(this.getActorStatePath(actorId));
1199
- } catch (err) {
1200
- if ((err == null ? void 0 : err.code) !== "ENOENT") {
1201
- logger2().error({
1202
- msg: "failed to delete actor state file",
1203
- actorId,
1204
- error: _chunkH4TB4X25cjs.stringifyError.call(void 0, err)
1205
- });
1206
- }
1207
- }
1208
- })(),
1209
- // Delete actor database file
1210
- (async () => {
1211
- try {
1212
- await fs.unlink(this.getActorDbPath(actorId));
1213
- } catch (err) {
1214
- if ((err == null ? void 0 : err.code) !== "ENOENT") {
1215
- logger2().error({
1216
- msg: "failed to delete actor database file",
1217
- actorId,
1218
- error: _chunkH4TB4X25cjs.stringifyError.call(void 0, err)
1219
- });
1220
- }
1221
- }
1222
- })(),
1223
- // Delete actor alarm file
1224
- (async () => {
1225
- try {
1226
- await fs.unlink(this.getActorAlarmPath(actorId));
1227
- } catch (err) {
1228
- if ((err == null ? void 0 : err.code) !== "ENOENT") {
1229
- logger2().error({
1230
- msg: "failed to delete actor alarm file",
1231
- actorId,
1232
- error: _chunkH4TB4X25cjs.stringifyError.call(void 0, err)
1233
- });
1234
- }
1235
- }
1236
- })()
1237
- ]);
1238
- }
1239
- actor.state = void 0;
1240
- actor.loadPromise = void 0;
1241
- actor.actor = void 0;
1242
- actor.startPromise = void 0;
1243
- actor.alarmTimeout = void 0;
1244
- actor.alarmTimeout = void 0;
1245
- actor.pendingWriteResolver = void 0;
1246
- actor.lifecycleState = 4 /* DESTROYED */;
1247
- }
1248
- /**
1249
- * Save actor state to disk.
1250
- */
1251
- async writeActor(actorId, generation, state) {
1252
- if (!this.#persist) {
1253
- return;
1254
- }
1255
- const entry = this.#actors.get(actorId);
1256
- _invariant2.default.call(void 0, entry, "actor entry does not exist");
1257
- await this.#performWrite(actorId, generation, state);
1258
- }
1259
- isGenerationCurrentAndNotDestroyed(actorId, generation) {
1260
- const entry = this.#upsertEntry(actorId);
1261
- if (!entry) return false;
1262
- return entry.generation === generation && entry.lifecycleState !== 3 /* STARTING_DESTROY */;
1263
- }
1264
- isActorStopping(actorId) {
1265
- const entry = this.#upsertEntry(actorId);
1266
- if (!entry) return false;
1267
- return entry.lifecycleState === 2 /* STARTING_SLEEP */ || entry.lifecycleState === 3 /* STARTING_DESTROY */;
1268
- }
1269
- async setActorAlarm(actorId, timestamp) {
1270
- const entry = this.#actors.get(actorId);
1271
- _invariant2.default.call(void 0, entry, "actor entry does not exist");
1272
- const writeGeneration = entry.generation;
1273
- if (this.isActorStopping(actorId)) {
1274
- logger2().info("skipping set alarm since actor stopping");
1275
- return;
1276
- }
1277
- if (this.#persist) {
1278
- const alarmPath = this.getActorAlarmPath(actorId);
1279
- const crypto2 = getNodeCrypto();
1280
- const tempPath = `${alarmPath}.tmp.${crypto2.randomUUID()}`;
1281
- try {
1282
- const path = getNodePath();
1283
- await ensureDirectoryExists(path.dirname(alarmPath));
1284
- const alarmData = {
1285
- actorId,
1286
- timestamp: BigInt(timestamp)
1287
- };
1288
- const data = ACTOR_ALARM_VERSIONED.serializeWithEmbeddedVersion(
1289
- alarmData,
1290
- CURRENT_VERSION
1291
- );
1292
- const fs = getNodeFs();
1293
- await fs.writeFile(tempPath, data);
1294
- if (!this.isGenerationCurrentAndNotDestroyed(
1295
- actorId,
1296
- writeGeneration
1297
- )) {
1298
- logger2().debug(
1299
- "skipping writing alarm since actor destroying or new generation"
1300
- );
1301
- return;
1302
- }
1303
- await fs.rename(tempPath, alarmPath);
1304
- } catch (error) {
1305
- try {
1306
- const fs = getNodeFs();
1307
- await fs.unlink(tempPath);
1308
- } catch (e3) {
1309
- }
1310
- logger2().error({
1311
- msg: "failed to write alarm",
1312
- actorId,
1313
- error
1314
- });
1315
- throw new Error(`Failed to write alarm: ${error}`);
1316
- }
1317
- }
1318
- this.#scheduleAlarmTimeout(actorId, timestamp);
1319
- }
1320
- /**
1321
- * Perform the actual write operation with atomic writes
1322
- */
1323
- async #performWrite(actorId, generation, state) {
1324
- const dataPath = this.getActorStatePath(actorId);
1325
- const crypto2 = getNodeCrypto();
1326
- const tempPath = `${dataPath}.tmp.${crypto2.randomUUID()}`;
1327
- try {
1328
- const path = getNodePath();
1329
- await ensureDirectoryExists(path.dirname(dataPath));
1330
- const bareState = {
1331
- actorId: state.actorId,
1332
- name: state.name,
1333
- key: state.key,
1334
- createdAt: state.createdAt,
1335
- kvStorage: state.kvStorage,
1336
- startTs: state.startTs,
1337
- connectableTs: state.connectableTs,
1338
- sleepTs: state.sleepTs,
1339
- destroyTs: state.destroyTs
1340
- };
1341
- const serializedState = ACTOR_STATE_VERSIONED.serializeWithEmbeddedVersion(
1342
- bareState,
1343
- CURRENT_VERSION
1344
- );
1345
- const fs = getNodeFs();
1346
- await fs.writeFile(tempPath, serializedState);
1347
- if (!this.isGenerationCurrentAndNotDestroyed(actorId, generation)) {
1348
- logger2().debug(
1349
- "skipping writing alarm since actor destroying or new generation"
1350
- );
1351
- return;
1352
- }
1353
- await fs.rename(tempPath, dataPath);
1354
- } catch (error) {
1355
- try {
1356
- const fs = getNodeFs();
1357
- await fs.unlink(tempPath);
1358
- } catch (e4) {
1359
- }
1360
- logger2().error({
1361
- msg: "failed to save actor state",
1362
- actorId,
1363
- error
1364
- });
1365
- throw new Error(`Failed to save actor state: ${error}`);
1366
- }
1367
- }
1368
- /**
1369
- * Call this method after the actor driver has been initiated.
1370
- *
1371
- * This will trigger all initial alarms from the file system.
1372
- *
1373
- * This needs to be sync since DriverConfig.actor is sync
1374
- */
1375
- onRunnerStart(config4, inlineClient, actorDriver) {
1376
- if (this.#runnerParams) {
1377
- return;
1378
- }
1379
- this.#runnerParams = {
1380
- config: config4,
1381
- inlineClient,
1382
- actorDriver
1383
- };
1384
- try {
1385
- this.#loadAlarmsSync();
1386
- } catch (err) {
1387
- logger2().error({
1388
- msg: "failed to load alarms on startup",
1389
- error: err
1390
- });
1391
- }
1392
- }
1393
- async startActor(config4, inlineClient, actorDriver, actorId) {
1394
- var _a;
1395
- const entry = await this.loadActor(actorId);
1396
- if (!entry.state) {
1397
- throw new Error(
1398
- `Actor does not exist and cannot be started: "${actorId}"`
1399
- );
1400
- }
1401
- if (entry.startPromise) {
1402
- await entry.startPromise.promise;
1403
- _invariant2.default.call(void 0, entry.actor, "actor should have loaded");
1404
- return entry.actor;
1405
- }
1406
- if (entry.actor) {
1407
- return entry.actor;
1408
- }
1409
- entry.startPromise = _chunkH4TB4X25cjs.promiseWithResolvers.call(void 0, );
1410
- try {
1411
- const definition = _chunkGD7UXGOEcjs.lookupInRegistry.call(void 0,
1412
- config4,
1413
- entry.state.name
1414
- );
1415
- entry.actor = definition.instantiate();
1416
- await entry.actor.start(
1417
- actorDriver,
1418
- inlineClient,
1419
- actorId,
1420
- entry.state.name,
1421
- entry.state.key,
1422
- "unknown"
1423
- );
1424
- const now = BigInt(Date.now());
1425
- entry.state = {
1426
- ...entry.state,
1427
- startTs: now,
1428
- connectableTs: now,
1429
- sleepTs: null
1430
- // Clear sleep timestamp when actor wakes up
1431
- };
1432
- await this.writeActor(actorId, entry.generation, entry.state);
1433
- entry.startPromise.resolve();
1434
- entry.startPromise = void 0;
1435
- return entry.actor;
1436
- } catch (innerError) {
1437
- const error = new Error(
1438
- `Failed to start actor ${actorId}: ${innerError}`,
1439
- { cause: innerError }
1440
- );
1441
- (_a = entry.startPromise) == null ? void 0 : _a.reject(error);
1442
- entry.startPromise = void 0;
1443
- throw error;
1444
- }
1445
- }
1446
- async loadActorStateOrError(actorId) {
1447
- const state = (await this.loadActor(actorId)).state;
1448
- if (!state) throw new Error(`Actor does not exist: ${actorId}`);
1449
- return state;
1450
- }
1451
- getActorOrError(actorId) {
1452
- const entry = this.#actors.get(actorId);
1453
- if (!entry) throw new Error(`No entry for actor: ${actorId}`);
1454
- return entry;
1455
- }
1456
- async createDatabase(actorId) {
1457
- return this.getActorDbPath(actorId);
1458
- }
1459
- /**
1460
- * Load all persisted alarms from disk and schedule their timers.
1461
- */
1462
- #loadAlarmsSync() {
1463
- try {
1464
- const fsSync = getNodeFsSync();
1465
- const files = fsSync.existsSync(this.#alarmsDir) ? fsSync.readdirSync(this.#alarmsDir) : [];
1466
- for (const file of files) {
1467
- if (file.includes(".tmp.")) continue;
1468
- const path = getNodePath();
1469
- const fullPath = path.join(this.#alarmsDir, file);
1470
- try {
1471
- const buf = fsSync.readFileSync(fullPath);
1472
- const alarmData = ACTOR_ALARM_VERSIONED.deserializeWithEmbeddedVersion(
1473
- new Uint8Array(buf)
1474
- );
1475
- const timestamp = Number(alarmData.timestamp);
1476
- if (Number.isFinite(timestamp)) {
1477
- this.#scheduleAlarmTimeout(
1478
- alarmData.actorId,
1479
- timestamp
1480
- );
1481
- } else {
1482
- logger2().debug({
1483
- msg: "invalid alarm file contents",
1484
- file
1485
- });
1486
- }
1487
- } catch (err) {
1488
- logger2().error({
1489
- msg: "failed to read alarm file",
1490
- file,
1491
- error: _chunkH4TB4X25cjs.stringifyError.call(void 0, err)
1492
- });
1493
- }
1494
- }
1495
- } catch (err) {
1496
- logger2().error({
1497
- msg: "failed to list alarms directory",
1498
- error: err
1499
- });
1500
- }
1501
- }
1502
- /**
1503
- * Schedule an alarm timer for an actor without writing to disk.
1504
- */
1505
- #scheduleAlarmTimeout(actorId, timestamp) {
1506
- var _a;
1507
- const entry = this.#upsertEntry(actorId);
1508
- if (entry.alarmTimestamp !== void 0 && timestamp >= entry.alarmTimestamp) {
1509
- logger2().debug({
1510
- msg: "skipping alarm schedule (later than existing)",
1511
- actorId,
1512
- timestamp,
1513
- current: entry.alarmTimestamp
1514
- });
1515
- return;
1516
- }
1517
- logger2().debug({ msg: "scheduling alarm", actorId, timestamp });
1518
- (_a = entry.alarmTimeout) == null ? void 0 : _a.abort();
1519
- entry.alarmTimestamp = timestamp;
1520
- const delay = Math.max(0, timestamp - Date.now());
1521
- entry.alarmTimeout = _chunkH4TB4X25cjs.setLongTimeout.call(void 0, async () => {
1522
- entry.alarmTimestamp = void 0;
1523
- if (this.#persist) {
1524
- try {
1525
- const fs = getNodeFs();
1526
- await fs.unlink(this.getActorAlarmPath(actorId));
1527
- } catch (err) {
1528
- if ((err == null ? void 0 : err.code) !== "ENOENT") {
1529
- logger2().debug({
1530
- msg: "failed to remove alarm file",
1531
- actorId,
1532
- error: _chunkH4TB4X25cjs.stringifyError.call(void 0, err)
1533
- });
1534
- }
1535
- }
1536
- }
1537
- try {
1538
- logger2().debug({ msg: "triggering alarm", actorId, timestamp });
1539
- const loaded = await this.loadActor(actorId);
1540
- if (!loaded.state)
1541
- throw new Error(`Actor does not exist: ${actorId}`);
1542
- const runnerParams = this.#runnerParams;
1543
- _invariant2.default.call(void 0, runnerParams, "missing runner params");
1544
- if (!loaded.actor) {
1545
- await this.startActor(
1546
- runnerParams.config,
1547
- runnerParams.inlineClient,
1548
- runnerParams.actorDriver,
1549
- actorId
1550
- );
1551
- }
1552
- _invariant2.default.call(void 0, loaded.actor, "actor should be loaded after wake");
1553
- await loaded.actor.onAlarm();
1554
- } catch (err) {
1555
- logger2().error({
1556
- msg: "failed to handle alarm",
1557
- actorId,
1558
- error: _chunkH4TB4X25cjs.stringifyError.call(void 0, err)
1559
- });
1560
- }
1561
- }, delay);
1562
- }
1563
- /**
1564
- * Cleanup stale temp files on startup (synchronous)
1565
- */
1566
- #cleanupTempFilesSync() {
1567
- try {
1568
- const fsSync = getNodeFsSync();
1569
- const files = fsSync.readdirSync(this.#stateDir);
1570
- const tempFiles = files.filter((f) => f.includes(".tmp."));
1571
- const oneHourAgo = Date.now() - 36e5;
1572
- for (const tempFile of tempFiles) {
1573
- try {
1574
- const path = getNodePath();
1575
- const fullPath = path.join(this.#stateDir, tempFile);
1576
- const stat = fsSync.statSync(fullPath);
1577
- if (stat.mtimeMs < oneHourAgo) {
1578
- fsSync.unlinkSync(fullPath);
1579
- logger2().info({
1580
- msg: "cleaned up stale temp file",
1581
- file: tempFile
1582
- });
1583
- }
1584
- } catch (err) {
1585
- logger2().debug({
1586
- msg: "failed to cleanup temp file",
1587
- file: tempFile,
1588
- error: err
1589
- });
1590
- }
1591
- }
1592
- } catch (err) {
1593
- logger2().error({
1594
- msg: "failed to read actors directory for cleanup",
1595
- error: err
1596
- });
1597
- }
1598
- }
1599
- /**
1600
- * Batch put KV entries for an actor.
1601
- */
1602
- async kvBatchPut(actorId, entries) {
1603
- const entry = await this.loadActor(actorId);
1604
- if (!entry.state) {
1605
- if (this.isActorStopping(actorId)) {
1606
- return;
1607
- } else {
1608
- throw new Error(`Actor ${actorId} state not loaded`);
1609
- }
1610
- }
1611
- const newKvStorage = [...entry.state.kvStorage];
1612
- for (const [key, value] of entries) {
1613
- const existingIndex = newKvStorage.findIndex(
1614
- (e) => _chunkH4TB4X25cjs.arrayBuffersEqual.call(void 0, e.key, _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key))
1615
- );
1616
- if (existingIndex >= 0) {
1617
- newKvStorage[existingIndex] = {
1618
- key: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key),
1619
- value: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, value)
1620
- };
1621
- } else {
1622
- newKvStorage.push({
1623
- key: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key),
1624
- value: _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, value)
1625
- });
1626
- }
1627
- }
1628
- entry.state = {
1629
- ...entry.state,
1630
- kvStorage: newKvStorage
1631
- };
1632
- await this.writeActor(actorId, entry.generation, entry.state);
1633
- }
1634
- /**
1635
- * Batch get KV entries for an actor.
1636
- */
1637
- async kvBatchGet(actorId, keys) {
1638
- const entry = await this.loadActor(actorId);
1639
- if (!entry.state) {
1640
- if (this.isActorStopping(actorId)) {
1641
- throw new Error(`Actor ${actorId} is stopping`);
1642
- } else {
1643
- throw new Error(`Actor ${actorId} state not loaded`);
1644
- }
1645
- }
1646
- const results = [];
1647
- for (const key of keys) {
1648
- const foundEntry = entry.state.kvStorage.find(
1649
- (e) => _chunkH4TB4X25cjs.arrayBuffersEqual.call(void 0, e.key, _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key))
1650
- );
1651
- if (foundEntry) {
1652
- results.push(new Uint8Array(foundEntry.value));
1653
- } else {
1654
- results.push(null);
1655
- }
1656
- }
1657
- return results;
1658
- }
1659
- /**
1660
- * Batch delete KV entries for an actor.
1661
- */
1662
- async kvBatchDelete(actorId, keys) {
1663
- const entry = await this.loadActor(actorId);
1664
- if (!entry.state) {
1665
- if (this.isActorStopping(actorId)) {
1666
- return;
1667
- } else {
1668
- throw new Error(`Actor ${actorId} state not loaded`);
1669
- }
1670
- }
1671
- const newKvStorage = [...entry.state.kvStorage];
1672
- for (const key of keys) {
1673
- const indexToDelete = newKvStorage.findIndex(
1674
- (e) => _chunkH4TB4X25cjs.arrayBuffersEqual.call(void 0, e.key, _chunkH4TB4X25cjs.bufferToArrayBuffer.call(void 0, key))
1675
- );
1676
- if (indexToDelete >= 0) {
1677
- newKvStorage.splice(indexToDelete, 1);
1678
- }
1679
- }
1680
- entry.state = {
1681
- ...entry.state,
1682
- kvStorage: newKvStorage
1683
- };
1684
- await this.writeActor(actorId, entry.generation, entry.state);
1685
- }
1686
- /**
1687
- * List KV entries with a given prefix for an actor.
1688
- */
1689
- async kvListPrefix(actorId, prefix) {
1690
- const entry = await this.loadActor(actorId);
1691
- if (!entry.state) {
1692
- if (this.isActorStopping(actorId)) {
1693
- throw new Error(`Actor ${actorId} is destroying`);
1694
- } else {
1695
- throw new Error(`Actor ${actorId} state not loaded`);
1696
- }
1697
- }
1698
- const results = [];
1699
- for (const kvEntry of entry.state.kvStorage) {
1700
- const keyBytes = new Uint8Array(kvEntry.key);
1701
- if (keyBytes.length >= prefix.length) {
1702
- let hasPrefix = true;
1703
- for (let i = 0; i < prefix.length; i++) {
1704
- if (keyBytes[i] !== prefix[i]) {
1705
- hasPrefix = false;
1706
- break;
1707
- }
1708
- }
1709
- if (hasPrefix) {
1710
- results.push([keyBytes, new Uint8Array(kvEntry.value)]);
1711
- }
1712
- }
1713
- }
1714
- return results;
1715
- }
1716
- };
1717
-
1718
- // src/drivers/file-system/manager.ts
1719
-
1720
- var FileSystemManagerDriver = class {
1721
- #config;
1722
- #state;
1723
- #driverConfig;
1724
- #getUpgradeWebSocket;
1725
- #actorDriver;
1726
- #actorRouter;
1727
- constructor(config4, state, driverConfig) {
1728
- this.#config = config4;
1729
- this.#state = state;
1730
- this.#driverConfig = driverConfig;
1731
- const inlineClient = _chunkGD7UXGOEcjs.createClientWithDriver.call(void 0, this);
1732
- this.#actorDriver = this.#driverConfig.actor(
1733
- config4,
1734
- this,
1735
- inlineClient
1736
- );
1737
- this.#actorRouter = createActorRouter(
1738
- this.#config,
1739
- this.#actorDriver,
1740
- void 0,
1741
- config4.test.enabled
1742
- );
1743
- }
1744
- async sendRequest(actorId, actorRequest) {
1745
- return await this.#actorRouter.fetch(actorRequest, {
1746
- actorId
1747
- });
1748
- }
1749
- async openWebSocket(path, actorId, encoding, params) {
1750
- const normalizedPath = path.startsWith("/") ? path : `/${path}`;
1751
- const fakeUrl = `http://inline-actor${normalizedPath}`;
1752
- const fakeRequest = new Request(fakeUrl, {
1753
- method: "GET"
1754
- });
1755
- const pathOnly = normalizedPath.split("?")[0];
1756
- const wsHandler = await _chunkRZW2DNNDcjs.routeWebSocket.call(void 0,
1757
- fakeRequest,
1758
- pathOnly,
1759
- {},
1760
- this.#config,
1761
- this.#actorDriver,
1762
- actorId,
1763
- encoding,
1764
- params,
1765
- void 0,
1766
- void 0,
1767
- false,
1768
- false
1769
- );
1770
- return createInlineWebSocket(wsHandler);
1771
- }
1772
- async proxyRequest(c, actorRequest, actorId) {
1773
- return await this.#actorRouter.fetch(actorRequest, {
1774
- actorId
1775
- });
1776
- }
1777
- async proxyWebSocket(c, path, actorId, encoding, params) {
1778
- var _a;
1779
- const upgradeWebSocket = (_a = this.#getUpgradeWebSocket) == null ? void 0 : _a.call(this);
1780
- _invariant2.default.call(void 0, upgradeWebSocket, "missing getUpgradeWebSocket");
1781
- const pathOnly = path.split("?")[0];
1782
- const normalizedPath = pathOnly.startsWith("/") ? pathOnly : `/${pathOnly}`;
1783
- const wsHandler = await _chunkRZW2DNNDcjs.routeWebSocket.call(void 0,
1784
- // TODO: Create new request with new path
1785
- c.req.raw,
1786
- normalizedPath,
1787
- c.req.header(),
1788
- this.#config,
1789
- this.#actorDriver,
1790
- actorId,
1791
- encoding,
1792
- params,
1793
- void 0,
1794
- void 0,
1795
- false,
1796
- false
1797
- );
1798
- return upgradeWebSocket(() => wsHandler)(c, _chunkH4TB4X25cjs.noopNext.call(void 0, ));
1799
- }
1800
- async buildGatewayUrl(actorId) {
1801
- const port = _nullishCoalesce(this.#config.managerPort, () => ( 6420));
1802
- return `http://127.0.0.1:${port}/gateway/${encodeURIComponent(actorId)}`;
1803
- }
1804
- async getForId({
1805
- actorId
1806
- }) {
1807
- const actor = await this.#state.loadActor(actorId);
1808
- if (!actor.state) {
1809
- return void 0;
1810
- }
1811
- if (this.#state.isActorStopping(actorId)) {
1812
- throw new (0, _chunk2XQS746Mcjs.ActorStopping)(actorId);
1813
- }
1814
- return actorStateToOutput(actor.state);
1815
- }
1816
- async getWithKey({
1817
- name,
1818
- key
1819
- }) {
1820
- const actorId = generateActorId(name, key);
1821
- const actor = await this.#state.loadActor(actorId);
1822
- if (actor.state) {
1823
- return actorStateToOutput(actor.state);
1824
- }
1825
- return void 0;
1826
- }
1827
- async getOrCreateWithKey(input) {
1828
- const actorId = generateActorId(input.name, input.key);
1829
- await this.#state.loadOrCreateActor(
1830
- actorId,
1831
- input.name,
1832
- input.key,
1833
- input.input
1834
- );
1835
- await this.#actorDriver.loadActor(actorId);
1836
- const state = await this.#state.loadActorStateOrError(actorId);
1837
- return actorStateToOutput(state);
1838
- }
1839
- async createActor({ name, key, input }) {
1840
- const actorId = generateActorId(name, key);
1841
- await this.#state.createActor(actorId, name, key, input);
1842
- await this.#actorDriver.loadActor(actorId);
1843
- const state = await this.#state.loadActorStateOrError(actorId);
1844
- return actorStateToOutput(state);
1845
- }
1846
- async listActors({ name }) {
1847
- const actors = [];
1848
- const itr = this.#state.getActorsIterator({});
1849
- for await (const actor of itr) {
1850
- if (actor.name === name) {
1851
- actors.push(actorStateToOutput(actor));
1852
- }
1853
- }
1854
- actors.sort((a, b) => {
1855
- const aTs = _nullishCoalesce(a.createTs, () => ( 0));
1856
- const bTs = _nullishCoalesce(b.createTs, () => ( 0));
1857
- return bTs - aTs;
1858
- });
1859
- return actors;
1860
- }
1861
- async kvGet(actorId, key) {
1862
- const response = await this.#state.kvBatchGet(actorId, [key]);
1863
- return response[0] !== null ? new TextDecoder().decode(response[0]) : null;
1864
- }
1865
- displayInformation() {
1866
- return {
1867
- properties: {
1868
- ...this.#state.persist ? { Data: this.#state.storagePath } : {},
1869
- Instances: this.#state.actorCountOnStartup.toString()
1870
- }
1871
- };
1872
- }
1873
- extraStartupLog() {
1874
- return {
1875
- instances: this.#state.actorCountOnStartup,
1876
- data: this.#state.storagePath
1877
- };
1878
- }
1879
- setGetUpgradeWebSocket(getUpgradeWebSocket) {
1880
- this.#getUpgradeWebSocket = getUpgradeWebSocket;
1881
- }
1882
- };
1883
- function actorStateToOutput(state) {
1884
- return {
1885
- actorId: state.actorId,
1886
- name: state.name,
1887
- key: state.key,
1888
- createTs: Number(state.createdAt),
1889
- startTs: state.startTs !== null ? Number(state.startTs) : null,
1890
- connectableTs: state.connectableTs !== null ? Number(state.connectableTs) : null,
1891
- sleepTs: state.sleepTs !== null ? Number(state.sleepTs) : null,
1892
- destroyTs: state.destroyTs !== null ? Number(state.destroyTs) : null
1893
- };
1894
- }
1895
-
1896
- // src/drivers/file-system/mod.ts
1897
- function createFileSystemOrMemoryDriver(persist = true, customPath) {
1898
- importNodeDependencies();
1899
- const state = new FileSystemGlobalState(persist, customPath);
1900
- const driverConfig = {
1901
- name: persist ? "file-system" : "memory",
1902
- displayName: persist ? "File System" : "Memory",
1903
- manager: (config4) => new FileSystemManagerDriver(
1904
- config4,
1905
- state,
1906
- driverConfig
1907
- ),
1908
- actor: (config4, managerDriver, inlineClient) => {
1909
- const actorDriver = new FileSystemActorDriver(
1910
- config4,
1911
- managerDriver,
1912
- inlineClient,
1913
- state
1914
- );
1915
- state.onRunnerStart(
1916
- config4,
1917
- inlineClient,
1918
- actorDriver
1919
- );
1920
- return actorDriver;
1921
- },
1922
- autoStartActorDriver: true
1923
- };
1924
- return driverConfig;
1925
- }
1926
- function createFileSystemDriver(opts) {
1927
- return createFileSystemOrMemoryDriver(true, opts == null ? void 0 : opts.path);
1928
- }
1929
- function createMemoryDriver() {
1930
- return createFileSystemOrMemoryDriver(false);
1931
- }
1932
-
1933
-
1934
-
1935
-
1936
-
1937
-
1938
-
1939
-
1940
-
1941
-
1942
-
1943
-
1944
-
1945
-
1946
-
1947
-
1948
- exports.createActorRouter = createActorRouter; exports.InlineWebSocketAdapter = InlineWebSocketAdapter; exports.importNodeDependencies = importNodeDependencies; exports.getNodeCrypto = getNodeCrypto; exports.getNodeFsSync = getNodeFsSync; exports.getNodeFs = getNodeFs; exports.getNodePath = getNodePath; exports.getNodeChildProcess = getNodeChildProcess; exports.getNodeStream = getNodeStream; exports.getStoragePath = getStoragePath; exports.ensureDirectoryExists = ensureDirectoryExists; exports.createFileSystemOrMemoryDriver = createFileSystemOrMemoryDriver; exports.createFileSystemDriver = createFileSystemDriver; exports.createMemoryDriver = createMemoryDriver;
1949
- //# sourceMappingURL=chunk-RUW5CZ5Z.cjs.map