rivetkit 2.1.4 → 2.1.6-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 (333) hide show
  1. package/dist/browser/client.d.ts +593 -588
  2. package/dist/browser/client.js +215 -35
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +109 -10
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/inspector.tar.gz +0 -0
  7. package/dist/tsup/actor/errors.cjs +2 -2
  8. package/dist/tsup/actor/errors.js +1 -1
  9. package/dist/tsup/{actor-router-consts-D29T1Z-K.d.cts → actor-router-consts-DU-1IdQj.d.cts} +1 -1
  10. package/dist/tsup/{actor-router-consts-D29T1Z-K.d.ts → actor-router-consts-DU-1IdQj.d.ts} +1 -1
  11. package/dist/tsup/chunk-2ELYUO6C.cjs +112 -0
  12. package/dist/tsup/chunk-2ELYUO6C.cjs.map +1 -0
  13. package/dist/tsup/chunk-2LY7RW3Y.cjs +2316 -0
  14. package/dist/tsup/chunk-2LY7RW3Y.cjs.map +1 -0
  15. package/dist/tsup/{chunk-L47L3ZWJ.cjs → chunk-6G7ZNM27.cjs} +11 -6
  16. package/dist/tsup/chunk-6G7ZNM27.cjs.map +1 -0
  17. package/dist/tsup/{chunk-LK36OGGO.cjs → chunk-A4KEUCB6.cjs} +84 -34
  18. package/dist/tsup/chunk-A4KEUCB6.cjs.map +1 -0
  19. package/dist/tsup/{chunk-7HTNH26M.js → chunk-AKUJ5OTO.js} +11 -6
  20. package/dist/tsup/chunk-AKUJ5OTO.js.map +1 -0
  21. package/dist/tsup/{chunk-ANKZ2FS6.js → chunk-C22JYHVT.js} +77 -27
  22. package/dist/tsup/chunk-C22JYHVT.js.map +1 -0
  23. package/dist/tsup/chunk-C4EB42ET.js +1459 -0
  24. package/dist/tsup/chunk-C4EB42ET.js.map +1 -0
  25. package/dist/tsup/chunk-CGGGBIDP.cjs +1459 -0
  26. package/dist/tsup/chunk-CGGGBIDP.cjs.map +1 -0
  27. package/dist/tsup/chunk-CMQPDBBR.cjs +1486 -0
  28. package/dist/tsup/chunk-CMQPDBBR.cjs.map +1 -0
  29. package/dist/tsup/{chunk-AQD4CBZ2.cjs → chunk-DH6UINWA.cjs} +4 -4
  30. package/dist/tsup/{chunk-AQD4CBZ2.cjs.map → chunk-DH6UINWA.cjs.map} +1 -1
  31. package/dist/tsup/chunk-DK46YYCJ.js +1486 -0
  32. package/dist/tsup/chunk-DK46YYCJ.js.map +1 -0
  33. package/dist/tsup/chunk-EGWXXBZV.js +2316 -0
  34. package/dist/tsup/chunk-EGWXXBZV.js.map +1 -0
  35. package/dist/tsup/{chunk-HBYEYBIC.js → chunk-EONWXYMN.js} +2 -2
  36. package/dist/tsup/{chunk-N4KRDJ56.js → chunk-GFGRBYO2.js} +35 -6
  37. package/dist/tsup/chunk-GFGRBYO2.js.map +1 -0
  38. package/dist/tsup/{chunk-TEUL4UYN.cjs → chunk-GUHXWPGB.cjs} +1515 -1479
  39. package/dist/tsup/chunk-GUHXWPGB.cjs.map +1 -0
  40. package/dist/tsup/{chunk-3B6PCYJB.cjs → chunk-HNE2AK6C.cjs} +2375 -3713
  41. package/dist/tsup/chunk-HNE2AK6C.cjs.map +1 -0
  42. package/dist/tsup/{chunk-5UEFNG7P.js → chunk-I5I6OALK.js} +2 -2
  43. package/dist/tsup/chunk-IHQAF2HV.cjs +23 -0
  44. package/dist/tsup/chunk-IHQAF2HV.cjs.map +1 -0
  45. package/dist/tsup/{chunk-UWAGLDT6.cjs → chunk-JJNZQDUN.cjs} +667 -2517
  46. package/dist/tsup/chunk-JJNZQDUN.cjs.map +1 -0
  47. package/dist/tsup/{chunk-M6H4XIF4.js → chunk-JJSPHLJN.js} +219 -287
  48. package/dist/tsup/chunk-JJSPHLJN.js.map +1 -0
  49. package/dist/tsup/chunk-JRKPV5NJ.js +481 -0
  50. package/dist/tsup/chunk-JRKPV5NJ.js.map +1 -0
  51. package/dist/tsup/{chunk-VKVNIQRQ.js → chunk-K7MVU5SI.js} +36 -41
  52. package/dist/tsup/chunk-K7MVU5SI.js.map +1 -0
  53. package/dist/tsup/{chunk-KJSYAUOM.js → chunk-MLK3GY6P.js} +43 -27
  54. package/dist/tsup/chunk-MLK3GY6P.js.map +1 -0
  55. package/dist/tsup/{chunk-4KSHPFXF.cjs → chunk-MPLMTJY5.cjs} +123 -23
  56. package/dist/tsup/chunk-MPLMTJY5.cjs.map +1 -0
  57. package/dist/tsup/{chunk-UDMRZR6A.js → chunk-PQWI44WD.js} +1755 -3093
  58. package/dist/tsup/chunk-PQWI44WD.js.map +1 -0
  59. package/dist/tsup/{chunk-SR3KQE7Q.cjs → chunk-SQFCIDCG.cjs} +35 -6
  60. package/dist/tsup/chunk-SQFCIDCG.cjs.map +1 -0
  61. package/dist/tsup/{chunk-3GTO6H3E.js → chunk-SVHJSM2E.js} +110 -24
  62. package/dist/tsup/chunk-SVHJSM2E.js.map +1 -0
  63. package/dist/tsup/chunk-T5KYKM6R.js +49 -0
  64. package/dist/tsup/chunk-T5KYKM6R.js.map +1 -0
  65. package/dist/tsup/{chunk-GXRVSSVD.cjs → chunk-TJ7DKW6F.cjs} +123 -37
  66. package/dist/tsup/chunk-TJ7DKW6F.cjs.map +1 -0
  67. package/dist/tsup/chunk-UQZRMTM3.js +23 -0
  68. package/dist/tsup/chunk-UQZRMTM3.js.map +1 -0
  69. package/dist/tsup/{chunk-QPADHLDU.cjs → chunk-V3JSZR5P.cjs} +3 -3
  70. package/dist/tsup/{chunk-QPADHLDU.cjs.map → chunk-V3JSZR5P.cjs.map} +1 -1
  71. package/dist/tsup/{chunk-HKOSZKKZ.cjs → chunk-VBR35EQF.cjs} +271 -339
  72. package/dist/tsup/chunk-VBR35EQF.cjs.map +1 -0
  73. package/dist/tsup/{chunk-DZXDUGLL.js → chunk-VWYO36X4.js} +117 -17
  74. package/dist/tsup/chunk-VWYO36X4.js.map +1 -0
  75. package/dist/tsup/{chunk-I6PL6QIY.js → chunk-WW27B6DM.js} +1452 -1416
  76. package/dist/tsup/chunk-WW27B6DM.js.map +1 -0
  77. package/dist/tsup/chunk-YAE3MEJM.cjs +49 -0
  78. package/dist/tsup/chunk-YAE3MEJM.cjs.map +1 -0
  79. package/dist/tsup/{chunk-KTWY3K6Z.js → chunk-YGYGANCA.js} +473 -2323
  80. package/dist/tsup/chunk-YGYGANCA.js.map +1 -0
  81. package/dist/tsup/chunk-YZJWZBY5.cjs +481 -0
  82. package/dist/tsup/chunk-YZJWZBY5.cjs.map +1 -0
  83. package/dist/tsup/{chunk-ZFY5J2EP.cjs → chunk-ZZLJ5TSM.cjs} +39 -44
  84. package/dist/tsup/chunk-ZZLJ5TSM.cjs.map +1 -0
  85. package/dist/tsup/client/mod.cjs +10 -7
  86. package/dist/tsup/client/mod.cjs.map +1 -1
  87. package/dist/tsup/client/mod.d.cts +6 -6
  88. package/dist/tsup/client/mod.d.ts +6 -6
  89. package/dist/tsup/client/mod.js +11 -8
  90. package/dist/tsup/common/log.cjs +3 -3
  91. package/dist/tsup/common/log.js +2 -2
  92. package/dist/tsup/common/websocket.cjs +4 -4
  93. package/dist/tsup/common/websocket.js +3 -3
  94. package/dist/tsup/{config-Qj-zLJPc.d.ts → config-C2Wwnc69.d.ts} +142 -208
  95. package/dist/tsup/{config-BiNoIHRs.d.ts → config-DROwzBLT.d.cts} +82 -6
  96. package/dist/tsup/{config-BiNoIHRs.d.cts → config-DROwzBLT.d.ts} +82 -6
  97. package/dist/tsup/{config-iPj5l1bL.d.cts → config-ehT-_3BB.d.cts} +142 -208
  98. package/dist/tsup/{context-DzvH1PBK.d.cts → context-DGMJuAyc.d.ts} +16 -3
  99. package/dist/tsup/{context-CQCMuHND.d.ts → context-Dpp2RJbW.d.cts} +16 -3
  100. package/dist/tsup/db/drizzle/mod.cjs +3 -3
  101. package/dist/tsup/db/drizzle/mod.d.cts +1 -1
  102. package/dist/tsup/db/drizzle/mod.d.ts +1 -1
  103. package/dist/tsup/db/drizzle/mod.js +2 -2
  104. package/dist/tsup/db/mod.cjs +3 -3
  105. package/dist/tsup/db/mod.d.cts +1 -1
  106. package/dist/tsup/db/mod.d.ts +1 -1
  107. package/dist/tsup/db/mod.js +2 -2
  108. package/dist/tsup/{driver-Jo8v-kbU.d.ts → driver-CYZP9QYo.d.ts} +1 -1
  109. package/dist/tsup/{driver-iV8J-WMv.d.cts → driver-CoTFpipv.d.cts} +1 -1
  110. package/dist/tsup/driver-helpers/mod.cjs +7 -5
  111. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  112. package/dist/tsup/driver-helpers/mod.d.cts +17 -18
  113. package/dist/tsup/driver-helpers/mod.d.ts +17 -18
  114. package/dist/tsup/driver-helpers/mod.js +11 -9
  115. package/dist/tsup/driver-test-suite/mod.cjs +1275 -228
  116. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  117. package/dist/tsup/driver-test-suite/mod.d.cts +6 -5
  118. package/dist/tsup/driver-test-suite/mod.d.ts +6 -5
  119. package/dist/tsup/driver-test-suite/mod.js +1581 -534
  120. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  121. package/dist/tsup/inspector/mod.cjs +4 -4
  122. package/dist/tsup/inspector/mod.js +3 -3
  123. package/dist/tsup/mod.cjs +15 -9
  124. package/dist/tsup/mod.cjs.map +1 -1
  125. package/dist/tsup/mod.d.cts +9 -9
  126. package/dist/tsup/mod.d.ts +9 -9
  127. package/dist/tsup/mod.js +19 -13
  128. package/dist/tsup/sandbox/client.cjs +28 -0
  129. package/dist/tsup/sandbox/client.cjs.map +1 -0
  130. package/dist/tsup/sandbox/client.d.cts +88 -0
  131. package/dist/tsup/sandbox/client.d.ts +88 -0
  132. package/dist/tsup/sandbox/client.js +28 -0
  133. package/dist/tsup/sandbox/client.js.map +1 -0
  134. package/dist/tsup/sandbox/index.cjs +761 -0
  135. package/dist/tsup/sandbox/index.cjs.map +1 -0
  136. package/dist/tsup/sandbox/index.d.cts +120 -0
  137. package/dist/tsup/sandbox/index.d.ts +120 -0
  138. package/dist/tsup/sandbox/index.js +761 -0
  139. package/dist/tsup/sandbox/index.js.map +1 -0
  140. package/dist/tsup/sandbox/providers/computesdk.cjs +3 -0
  141. package/dist/tsup/sandbox/providers/computesdk.cjs.map +1 -0
  142. package/dist/tsup/sandbox/providers/computesdk.d.cts +7 -0
  143. package/dist/tsup/sandbox/providers/computesdk.d.ts +7 -0
  144. package/dist/tsup/sandbox/providers/computesdk.js +3 -0
  145. package/dist/tsup/sandbox/providers/computesdk.js.map +1 -0
  146. package/dist/tsup/sandbox/providers/daytona.cjs +3 -0
  147. package/dist/tsup/sandbox/providers/daytona.cjs.map +1 -0
  148. package/dist/tsup/sandbox/providers/daytona.d.cts +1 -0
  149. package/dist/tsup/sandbox/providers/daytona.d.ts +1 -0
  150. package/dist/tsup/sandbox/providers/daytona.js +3 -0
  151. package/dist/tsup/sandbox/providers/daytona.js.map +1 -0
  152. package/dist/tsup/sandbox/providers/docker.cjs +3 -0
  153. package/dist/tsup/sandbox/providers/docker.cjs.map +1 -0
  154. package/dist/tsup/sandbox/providers/docker.d.cts +1 -0
  155. package/dist/tsup/sandbox/providers/docker.d.ts +1 -0
  156. package/dist/tsup/sandbox/providers/docker.js +3 -0
  157. package/dist/tsup/sandbox/providers/docker.js.map +1 -0
  158. package/dist/tsup/sandbox/providers/e2b.cjs +3 -0
  159. package/dist/tsup/sandbox/providers/e2b.cjs.map +1 -0
  160. package/dist/tsup/sandbox/providers/e2b.d.cts +1 -0
  161. package/dist/tsup/sandbox/providers/e2b.d.ts +1 -0
  162. package/dist/tsup/sandbox/providers/e2b.js +3 -0
  163. package/dist/tsup/sandbox/providers/e2b.js.map +1 -0
  164. package/dist/tsup/sandbox/providers/local.cjs +3 -0
  165. package/dist/tsup/sandbox/providers/local.cjs.map +1 -0
  166. package/dist/tsup/sandbox/providers/local.d.cts +1 -0
  167. package/dist/tsup/sandbox/providers/local.d.ts +1 -0
  168. package/dist/tsup/sandbox/providers/local.js +3 -0
  169. package/dist/tsup/sandbox/providers/local.js.map +1 -0
  170. package/dist/tsup/sandbox/providers/modal.cjs +3 -0
  171. package/dist/tsup/sandbox/providers/modal.cjs.map +1 -0
  172. package/dist/tsup/sandbox/providers/modal.d.cts +1 -0
  173. package/dist/tsup/sandbox/providers/modal.d.ts +1 -0
  174. package/dist/tsup/sandbox/providers/modal.js +3 -0
  175. package/dist/tsup/sandbox/providers/modal.js.map +1 -0
  176. package/dist/tsup/sandbox/providers/vercel.cjs +3 -0
  177. package/dist/tsup/sandbox/providers/vercel.cjs.map +1 -0
  178. package/dist/tsup/sandbox/providers/vercel.d.cts +1 -0
  179. package/dist/tsup/sandbox/providers/vercel.d.ts +1 -0
  180. package/dist/tsup/sandbox/providers/vercel.js +3 -0
  181. package/dist/tsup/sandbox/providers/vercel.js.map +1 -0
  182. package/dist/tsup/serve-test-suite/mod.cjs +451 -327
  183. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  184. package/dist/tsup/serve-test-suite/mod.js +362 -238
  185. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  186. package/dist/tsup/test/mod.cjs +17 -14
  187. package/dist/tsup/test/mod.cjs.map +1 -1
  188. package/dist/tsup/test/mod.d.cts +4 -4
  189. package/dist/tsup/test/mod.d.ts +4 -4
  190. package/dist/tsup/test/mod.js +14 -11
  191. package/dist/tsup/test/mod.js.map +1 -1
  192. package/dist/tsup/utils.cjs +3 -3
  193. package/dist/tsup/utils.js +2 -2
  194. package/dist/tsup/workflow/mod.cjs +6 -6
  195. package/dist/tsup/workflow/mod.d.cts +13 -9
  196. package/dist/tsup/workflow/mod.d.ts +13 -9
  197. package/dist/tsup/workflow/mod.js +5 -5
  198. package/package.json +113 -14
  199. package/src/actor/config.ts +94 -88
  200. package/src/actor/conn/drivers/websocket.ts +2 -1
  201. package/src/actor/contexts/base/actor.ts +27 -4
  202. package/src/actor/database.ts +6 -1
  203. package/src/actor/driver.ts +27 -8
  204. package/src/actor/errors.ts +10 -5
  205. package/src/actor/instance/connection-manager.ts +4 -3
  206. package/src/actor/instance/kv.ts +52 -9
  207. package/src/actor/instance/mod.ts +135 -84
  208. package/src/actor/instance/queue-manager.ts +2 -5
  209. package/src/actor/instance/queue.ts +31 -29
  210. package/src/actor/instance/state-manager.ts +7 -1
  211. package/src/actor/instance/traces-driver.ts +34 -36
  212. package/src/actor/metrics.ts +137 -0
  213. package/src/actor/protocol/old.ts +9 -12
  214. package/src/actor/router-websocket-endpoints.ts +12 -6
  215. package/src/actor/router.ts +46 -9
  216. package/src/actor/schema.ts +14 -22
  217. package/src/client/actor-common.ts +65 -0
  218. package/src/client/actor-conn.ts +71 -9
  219. package/src/client/actor-handle.ts +22 -5
  220. package/src/client/client.ts +32 -6
  221. package/src/client/config.ts +18 -21
  222. package/src/client/mod.ts +1 -0
  223. package/src/client/queue.ts +8 -6
  224. package/src/common/inline-websocket-adapter.ts +8 -2
  225. package/src/common/router.ts +1 -4
  226. package/src/common/utils.ts +2 -5
  227. package/src/db/config.ts +10 -5
  228. package/src/db/drizzle/mod.ts +51 -41
  229. package/src/db/mod.ts +54 -29
  230. package/src/db/shared.ts +42 -8
  231. package/src/driver-helpers/mod.ts +2 -1
  232. package/src/driver-helpers/sqlite-pool.ts +42 -0
  233. package/src/driver-helpers/utils.ts +0 -20
  234. package/src/driver-test-suite/mod.ts +11 -1
  235. package/src/driver-test-suite/tests/access-control.ts +19 -12
  236. package/src/driver-test-suite/tests/action-features.ts +20 -8
  237. package/src/driver-test-suite/tests/actor-conn.ts +94 -8
  238. package/src/driver-test-suite/tests/actor-db-kv-stats.ts +282 -0
  239. package/src/driver-test-suite/tests/actor-db-raw.ts +6 -2
  240. package/src/driver-test-suite/tests/actor-db.ts +101 -31
  241. package/src/driver-test-suite/tests/actor-inspector.ts +174 -32
  242. package/src/driver-test-suite/tests/actor-kv.ts +79 -33
  243. package/src/driver-test-suite/tests/actor-lifecycle.ts +4 -12
  244. package/src/driver-test-suite/tests/actor-queue.ts +125 -17
  245. package/src/driver-test-suite/tests/actor-run.ts +59 -55
  246. package/src/driver-test-suite/tests/actor-sandbox.ts +78 -0
  247. package/src/driver-test-suite/tests/actor-schedule.ts +1 -4
  248. package/src/driver-test-suite/tests/actor-sleep.ts +111 -0
  249. package/src/driver-test-suite/tests/actor-workflow.ts +387 -3
  250. package/src/driver-test-suite/tests/conn-error-serialization.ts +3 -1
  251. package/src/driver-test-suite/tests/raw-websocket.ts +5 -1
  252. package/src/drivers/default.ts +1 -3
  253. package/src/drivers/engine/actor-driver.ts +94 -21
  254. package/src/drivers/engine/config.ts +4 -12
  255. package/src/drivers/engine/mod.ts +1 -5
  256. package/src/drivers/file-system/actor.ts +43 -8
  257. package/src/drivers/file-system/global-state.ts +180 -64
  258. package/src/drivers/file-system/kv-limits.ts +1 -1
  259. package/src/drivers/file-system/sqlite-runtime.ts +13 -4
  260. package/src/engine-process/mod.ts +5 -1
  261. package/src/inspector/actor-inspector.ts +47 -21
  262. package/src/inspector/config.ts +1 -4
  263. package/src/inspector/mod.browser.ts +2 -2
  264. package/src/inspector/mod.ts +4 -1
  265. package/src/inspector/serve-ui.ts +0 -1
  266. package/src/inspector/workflow-history-json.ts +309 -0
  267. package/src/manager/gateway.ts +6 -2
  268. package/src/manager/router.ts +3 -3
  269. package/src/registry/config/index.ts +65 -12
  270. package/src/registry/config/runner.ts +19 -4
  271. package/src/registry/index.ts +42 -89
  272. package/src/sandbox/actor/db.ts +36 -0
  273. package/src/sandbox/actor/index.ts +476 -0
  274. package/src/sandbox/actor/session.ts +350 -0
  275. package/src/sandbox/actor.test.ts +36 -0
  276. package/src/sandbox/client.test.ts +484 -0
  277. package/src/sandbox/client.ts +707 -0
  278. package/src/sandbox/config.ts +151 -0
  279. package/src/sandbox/index.ts +41 -0
  280. package/src/sandbox/providers/computesdk.ts +1 -0
  281. package/src/sandbox/providers/daytona.ts +1 -0
  282. package/src/sandbox/providers/docker.ts +1 -0
  283. package/src/sandbox/providers/e2b.ts +1 -0
  284. package/src/sandbox/providers/local.ts +1 -0
  285. package/src/sandbox/providers/modal.ts +1 -0
  286. package/src/sandbox/providers/vercel.ts +1 -0
  287. package/src/sandbox/session-persist-driver.ts +180 -0
  288. package/src/sandbox/types.ts +138 -0
  289. package/src/serverless/configure.ts +5 -3
  290. package/src/serverless/router.test.ts +17 -9
  291. package/src/serverless/router.ts +20 -13
  292. package/src/test/mod.ts +3 -4
  293. package/src/utils/endpoint-parser.test.ts +6 -2
  294. package/src/utils/endpoint-parser.ts +6 -2
  295. package/src/utils/env-vars.ts +0 -2
  296. package/src/utils/node.ts +1 -1
  297. package/src/utils/serve.ts +10 -5
  298. package/src/utils.ts +6 -1
  299. package/src/workflow/constants.ts +1 -2
  300. package/src/workflow/context.ts +42 -9
  301. package/src/workflow/driver.ts +57 -23
  302. package/src/workflow/inspector.ts +7 -13
  303. package/src/workflow/mod.ts +91 -4
  304. package/dist/tsup/chunk-3B6PCYJB.cjs.map +0 -1
  305. package/dist/tsup/chunk-3GTO6H3E.js.map +0 -1
  306. package/dist/tsup/chunk-4KSHPFXF.cjs.map +0 -1
  307. package/dist/tsup/chunk-6LJAZ5R4.cjs +0 -96
  308. package/dist/tsup/chunk-6LJAZ5R4.cjs.map +0 -1
  309. package/dist/tsup/chunk-7HTNH26M.js.map +0 -1
  310. package/dist/tsup/chunk-ANKZ2FS6.js.map +0 -1
  311. package/dist/tsup/chunk-DZXDUGLL.js.map +0 -1
  312. package/dist/tsup/chunk-GXRVSSVD.cjs.map +0 -1
  313. package/dist/tsup/chunk-H5TSEPN4.cjs +0 -645
  314. package/dist/tsup/chunk-H5TSEPN4.cjs.map +0 -1
  315. package/dist/tsup/chunk-HKOSZKKZ.cjs.map +0 -1
  316. package/dist/tsup/chunk-I6PL6QIY.js.map +0 -1
  317. package/dist/tsup/chunk-KJSYAUOM.js.map +0 -1
  318. package/dist/tsup/chunk-KTWY3K6Z.js.map +0 -1
  319. package/dist/tsup/chunk-L47L3ZWJ.cjs.map +0 -1
  320. package/dist/tsup/chunk-LK36OGGO.cjs.map +0 -1
  321. package/dist/tsup/chunk-M6H4XIF4.js.map +0 -1
  322. package/dist/tsup/chunk-N4KRDJ56.js.map +0 -1
  323. package/dist/tsup/chunk-SR3KQE7Q.cjs.map +0 -1
  324. package/dist/tsup/chunk-TEFYRRAK.js +0 -645
  325. package/dist/tsup/chunk-TEFYRRAK.js.map +0 -1
  326. package/dist/tsup/chunk-TEUL4UYN.cjs.map +0 -1
  327. package/dist/tsup/chunk-UDMRZR6A.js.map +0 -1
  328. package/dist/tsup/chunk-UWAGLDT6.cjs.map +0 -1
  329. package/dist/tsup/chunk-VKVNIQRQ.js.map +0 -1
  330. package/dist/tsup/chunk-ZFY5J2EP.cjs.map +0 -1
  331. package/src/db/sqlite-vfs.ts +0 -12
  332. /package/dist/tsup/{chunk-HBYEYBIC.js.map → chunk-EONWXYMN.js.map} +0 -0
  333. /package/dist/tsup/{chunk-5UEFNG7P.js.map → chunk-I5I6OALK.js.map} +0 -0
@@ -0,0 +1,1459 @@
1
+ import {
2
+ ACTOR_VERSIONED,
3
+ CURRENT_VERSION2 as CURRENT_VERSION,
4
+ HEADER_ACTOR_ID,
5
+ HEADER_RIVET_ACTOR,
6
+ HEADER_RIVET_TARGET,
7
+ HEADER_RIVET_TOKEN,
8
+ WS_PROTOCOL_ACTOR,
9
+ WS_PROTOCOL_CONN_PARAMS,
10
+ WS_PROTOCOL_ENCODING,
11
+ WS_TEST_PROTOCOL_PATH,
12
+ buildActorNames,
13
+ deserializeActorKey,
14
+ handleHealthRequest,
15
+ handleMetadataRequest,
16
+ handleRouteError,
17
+ handleRouteNotFound,
18
+ loggerMiddleware,
19
+ parseWebSocketProtocols,
20
+ serializeActorKey,
21
+ timingSafeEqual
22
+ } from "./chunk-PQWI44WD.js";
23
+ import {
24
+ KEYS
25
+ } from "./chunk-C22JYHVT.js";
26
+ import {
27
+ bufferToArrayBuffer,
28
+ deconstructError,
29
+ detectRuntime,
30
+ getLogger,
31
+ isDev,
32
+ noopNext,
33
+ promiseWithResolvers,
34
+ stringifyError
35
+ } from "./chunk-VWYO36X4.js";
36
+ import {
37
+ Forbidden,
38
+ MissingActorHeader,
39
+ RestrictedFeature,
40
+ WebSocketsNotEnabled
41
+ } from "./chunk-AKUJ5OTO.js";
42
+
43
+ // src/manager/router.ts
44
+ import { createRoute } from "@hono/zod-openapi";
45
+ import * as cbor from "cbor-x";
46
+ import invariant2 from "invariant";
47
+ import { z as z3 } from "zod/v4";
48
+
49
+ // src/inspector/serve-ui.ts
50
+ import { extract } from "tar";
51
+
52
+ // src/utils/node.ts
53
+ import { createRequire } from "module";
54
+ var nodeCrypto;
55
+ var nodeFsSync;
56
+ var nodeFs;
57
+ var nodePath;
58
+ var nodeOs;
59
+ var nodeChildProcess;
60
+ var nodeStream;
61
+ var nodeUrl;
62
+ var hasImportedDependencies = false;
63
+ function getRequireFn() {
64
+ return createRequire(import.meta.url);
65
+ }
66
+ function importNodeDependencies() {
67
+ if (hasImportedDependencies) return;
68
+ try {
69
+ const requireFn = getRequireFn();
70
+ nodeCrypto = requireFn(
71
+ /* webpackIgnore: true */
72
+ "node:crypto"
73
+ );
74
+ nodeFsSync = requireFn(
75
+ /* webpackIgnore: true */
76
+ "node:fs"
77
+ );
78
+ nodeFs = requireFn(
79
+ /* webpackIgnore: true */
80
+ "node:fs/promises"
81
+ );
82
+ nodePath = requireFn(
83
+ /* webpackIgnore: true */
84
+ "node:path"
85
+ );
86
+ nodeOs = requireFn(
87
+ /* webpackIgnore: true */
88
+ "node:os"
89
+ );
90
+ nodeChildProcess = requireFn(
91
+ /* webpackIgnore: true */
92
+ "node:child_process"
93
+ );
94
+ nodeStream = requireFn(
95
+ /* webpackIgnore: true */
96
+ "node:stream/promises"
97
+ );
98
+ nodeUrl = requireFn(
99
+ /* webpackIgnore: true */
100
+ "node:url"
101
+ );
102
+ hasImportedDependencies = true;
103
+ } catch (err) {
104
+ console.warn(
105
+ "Node.js modules not available, file system driver will not work",
106
+ err
107
+ );
108
+ throw err;
109
+ }
110
+ }
111
+ function getNodeCrypto() {
112
+ if (!nodeCrypto) {
113
+ throw new Error(
114
+ "Node crypto module not loaded. Ensure importNodeDependencies() has been called."
115
+ );
116
+ }
117
+ return nodeCrypto;
118
+ }
119
+ function getNodeFsSync() {
120
+ if (!nodeFsSync) {
121
+ throw new Error(
122
+ "Node fs module not loaded. Ensure importNodeDependencies() has been called."
123
+ );
124
+ }
125
+ return nodeFsSync;
126
+ }
127
+ function getNodeFs() {
128
+ if (!nodeFs) {
129
+ throw new Error(
130
+ "Node fs/promises module not loaded. Ensure importNodeDependencies() has been called."
131
+ );
132
+ }
133
+ return nodeFs;
134
+ }
135
+ function getNodePath() {
136
+ if (!nodePath) {
137
+ throw new Error(
138
+ "Node path module not loaded. Ensure importNodeDependencies() has been called."
139
+ );
140
+ }
141
+ return nodePath;
142
+ }
143
+ function getNodeOs() {
144
+ if (!nodeOs) {
145
+ throw new Error(
146
+ "Node os module not loaded. Ensure importNodeDependencies() has been called."
147
+ );
148
+ }
149
+ return nodeOs;
150
+ }
151
+ function getNodeChildProcess() {
152
+ if (!nodeChildProcess) {
153
+ throw new Error(
154
+ "Node child_process module not loaded. Ensure importNodeDependencies() has been called."
155
+ );
156
+ }
157
+ return nodeChildProcess;
158
+ }
159
+ function getNodeStream() {
160
+ if (!nodeStream) {
161
+ throw new Error(
162
+ "Node stream/promises module not loaded. Ensure importNodeDependencies() has been called."
163
+ );
164
+ }
165
+ return nodeStream;
166
+ }
167
+ function getNodeUrl() {
168
+ if (!nodeUrl) {
169
+ throw new Error(
170
+ "Node url module not loaded. Ensure importNodeDependencies() has been called."
171
+ );
172
+ }
173
+ return nodeUrl;
174
+ }
175
+
176
+ // src/inspector/serve-ui.ts
177
+ var extractedDir;
178
+ var extractionPromise;
179
+ async function getInspectorDir() {
180
+ if (extractedDir !== void 0) return extractedDir;
181
+ if (extractionPromise !== void 0) return extractionPromise;
182
+ const nodeFs2 = getNodeFs();
183
+ const os = getNodeOs();
184
+ const url = getNodeUrl();
185
+ const path = getNodePath();
186
+ extractionPromise = (async () => {
187
+ const tarball = path.join(
188
+ path.dirname(url.fileURLToPath(import.meta.url)),
189
+ "../../dist/inspector.tar.gz"
190
+ );
191
+ try {
192
+ await nodeFs2.access(tarball);
193
+ } catch {
194
+ throw new Error(
195
+ `Inspector tarball not found at ${tarball}. Run 'pnpm build:pack-inspector' first.`
196
+ );
197
+ }
198
+ const dest = path.join(os.tmpdir(), "rivetkit-inspector");
199
+ await nodeFs2.mkdir(dest, { recursive: true });
200
+ await extract({ file: tarball, cwd: dest });
201
+ extractedDir = dest;
202
+ return dest;
203
+ })();
204
+ return extractionPromise;
205
+ }
206
+
207
+ // src/manager-api/actors.ts
208
+ import { z as z2 } from "zod/v4";
209
+
210
+ // src/manager-api/common.ts
211
+ import { z } from "zod/v4";
212
+ var RivetIdSchema = z.string();
213
+
214
+ // src/manager-api/actors.ts
215
+ var ActorSchema = z2.object({
216
+ actor_id: RivetIdSchema,
217
+ name: z2.string(),
218
+ key: z2.string(),
219
+ namespace_id: RivetIdSchema,
220
+ runner_name_selector: z2.string(),
221
+ create_ts: z2.number(),
222
+ connectable_ts: z2.number().nullable().optional(),
223
+ destroy_ts: z2.number().nullable().optional(),
224
+ sleep_ts: z2.number().nullable().optional(),
225
+ start_ts: z2.number().nullable().optional(),
226
+ error: z2.unknown().nullable().optional()
227
+ });
228
+ var ActorNameSchema = z2.object({
229
+ metadata: z2.record(z2.string(), z2.unknown())
230
+ });
231
+ var ActorsListResponseSchema = z2.object({
232
+ actors: z2.array(ActorSchema)
233
+ });
234
+ var ActorsCreateRequestSchema = z2.object({
235
+ datacenter: z2.string().optional(),
236
+ name: z2.string(),
237
+ runner_name_selector: z2.string(),
238
+ crash_policy: z2.string(),
239
+ key: z2.string().nullable().optional(),
240
+ input: z2.string().nullable().optional()
241
+ });
242
+ var ActorsCreateResponseSchema = z2.object({
243
+ actor: ActorSchema
244
+ });
245
+ var ActorsGetOrCreateRequestSchema = z2.object({
246
+ datacenter: z2.string().optional(),
247
+ name: z2.string(),
248
+ key: z2.string(),
249
+ runner_name_selector: z2.string(),
250
+ crash_policy: z2.string(),
251
+ input: z2.string().nullable().optional()
252
+ });
253
+ var ActorsGetOrCreateResponseSchema = z2.object({
254
+ actor: ActorSchema,
255
+ created: z2.boolean()
256
+ });
257
+ var ActorsDeleteResponseSchema = z2.object({});
258
+ var ActorsListNamesResponseSchema = z2.object({
259
+ names: z2.record(z2.string(), ActorNameSchema)
260
+ });
261
+ var ActorsKvGetResponseSchema = z2.object({
262
+ value: z2.string().nullable()
263
+ });
264
+
265
+ // src/registry/log.ts
266
+ function logger() {
267
+ return getLogger("registry");
268
+ }
269
+
270
+ // src/utils/serve.ts
271
+ import getPort from "get-port";
272
+ var DEFAULT_PORT = 6420;
273
+ var serveStaticLoaderPromises = {};
274
+ async function findFreePort(startPort = DEFAULT_PORT) {
275
+ function* portRange(start, count = 100) {
276
+ for (let i = 0; i < count; i++) {
277
+ yield start + i;
278
+ }
279
+ }
280
+ return getPort({ port: portRange(startPort) });
281
+ }
282
+ async function crossPlatformServe(config, managerPort, app, runtime = detectRuntime()) {
283
+ logger().debug({ msg: "detected runtime for serve", runtime });
284
+ switch (runtime) {
285
+ case "deno":
286
+ return serveDeno(config, managerPort, app);
287
+ case "bun":
288
+ return serveBun(config, managerPort, app);
289
+ case "node":
290
+ return serveNode(config, managerPort, app);
291
+ default:
292
+ return serveNode(config, managerPort, app);
293
+ }
294
+ }
295
+ async function loadRuntimeServeStatic(runtime) {
296
+ if (!serveStaticLoaderPromises[runtime]) {
297
+ if (runtime === "node") {
298
+ const nodeServeStaticModule = "@hono/node-server/serve-static";
299
+ serveStaticLoaderPromises[runtime] = import(
300
+ /* webpackIgnore: true */
301
+ nodeServeStaticModule
302
+ ).then((x) => x.serveStatic);
303
+ } else if (runtime === "bun") {
304
+ const bunModule = "hono/bun";
305
+ serveStaticLoaderPromises[runtime] = import(
306
+ /* webpackIgnore: true */
307
+ bunModule
308
+ ).then((x) => x.serveStatic);
309
+ } else if (runtime === "deno") {
310
+ const denoModule = "hono/deno";
311
+ serveStaticLoaderPromises[runtime] = import(
312
+ /* webpackIgnore: true */
313
+ denoModule
314
+ ).then((x) => x.serveStatic);
315
+ } else {
316
+ throw new Error(`unsupported runtime: ${runtime}`);
317
+ }
318
+ }
319
+ return await serveStaticLoaderPromises[runtime];
320
+ }
321
+ async function serveNode(config, managerPort, app) {
322
+ const nodeServerModule = "@hono/node-server";
323
+ let serve;
324
+ try {
325
+ const dep = await import(
326
+ /* webpackIgnore: true */
327
+ nodeServerModule
328
+ );
329
+ serve = dep.serve;
330
+ } catch (err) {
331
+ logger().error({
332
+ msg: "failed to import @hono/node-server. please run 'npm install @hono/node-server @hono/node-ws'",
333
+ error: stringifyError(err)
334
+ });
335
+ process.exit(1);
336
+ }
337
+ const nodeWsModule = "@hono/node-ws";
338
+ let createNodeWebSocket;
339
+ try {
340
+ const dep = await import(
341
+ /* webpackIgnore: true */
342
+ nodeWsModule
343
+ );
344
+ createNodeWebSocket = dep.createNodeWebSocket;
345
+ } catch (err) {
346
+ logger().error({
347
+ msg: "failed to import @hono/node-ws. please run 'npm install @hono/node-server @hono/node-ws'",
348
+ error: stringifyError(err)
349
+ });
350
+ process.exit(1);
351
+ }
352
+ const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({
353
+ app
354
+ });
355
+ const port = managerPort;
356
+ const hostname = config.managerHost;
357
+ const server = serve(
358
+ { fetch: app.fetch, port, hostname },
359
+ () => logger().info({ msg: "server listening", port, hostname })
360
+ );
361
+ injectWebSocket(server);
362
+ const closeServer = () => {
363
+ server.close();
364
+ };
365
+ return { upgradeWebSocket, closeServer };
366
+ }
367
+ async function serveDeno(config, managerPort, app) {
368
+ const honoDenoModule = "hono/deno";
369
+ let upgradeWebSocket;
370
+ try {
371
+ const dep = await import(
372
+ /* webpackIgnore: true */
373
+ honoDenoModule
374
+ );
375
+ upgradeWebSocket = dep.upgradeWebSocket;
376
+ } catch (err) {
377
+ logger().error({
378
+ msg: "failed to import hono/deno",
379
+ error: stringifyError(err)
380
+ });
381
+ process.exit(1);
382
+ }
383
+ const port = config.managerPort;
384
+ const hostname = config.managerHost;
385
+ Deno.serve({ port, hostname }, app.fetch);
386
+ logger().info({ msg: "server listening", port, hostname });
387
+ return { upgradeWebSocket };
388
+ }
389
+ async function serveBun(config, managerPort, app) {
390
+ const honoBunModule = "hono/bun";
391
+ let createBunWebSocket;
392
+ try {
393
+ const dep = await import(
394
+ /* webpackIgnore: true */
395
+ honoBunModule
396
+ );
397
+ createBunWebSocket = dep.createBunWebSocket;
398
+ } catch (err) {
399
+ logger().error({
400
+ msg: "failed to import hono/bun",
401
+ error: stringifyError(err)
402
+ });
403
+ process.exit(1);
404
+ }
405
+ const { websocket, upgradeWebSocket } = createBunWebSocket();
406
+ const port = config.managerPort;
407
+ const hostname = config.managerHost;
408
+ Bun.serve({
409
+ fetch: app.fetch,
410
+ port,
411
+ hostname,
412
+ websocket
413
+ });
414
+ logger().info({ msg: "server listening", port, hostname });
415
+ return { upgradeWebSocket };
416
+ }
417
+
418
+ // src/utils/router.ts
419
+ import { OpenAPIHono } from "@hono/zod-openapi";
420
+ import { createMiddleware } from "hono/factory";
421
+
422
+ // src/common/cors.ts
423
+ var cors = () => {
424
+ return async (c, next) => {
425
+ const origin = c.req.header("origin") || "*";
426
+ if (c.req.method === "OPTIONS") {
427
+ const requestHeaders = c.req.header("access-control-request-headers") || "*";
428
+ c.header("access-control-allow-origin", origin);
429
+ c.header("access-control-allow-credentials", "true");
430
+ c.header(
431
+ "access-control-allow-methods",
432
+ "GET, POST, PUT, DELETE, OPTIONS, PATCH"
433
+ );
434
+ c.header("access-control-allow-headers", requestHeaders);
435
+ c.header("access-control-expose-headers", "*");
436
+ c.header("access-control-max-age", "86400");
437
+ if (origin !== "*") {
438
+ c.header("vary", "Origin");
439
+ }
440
+ c.res.headers.delete("content-length");
441
+ c.res.headers.delete("content-type");
442
+ return c.body(null, 204);
443
+ }
444
+ await next();
445
+ c.header("access-control-allow-origin", origin);
446
+ c.header("access-control-allow-credentials", "true");
447
+ c.header("access-control-expose-headers", "*");
448
+ if (origin !== "*") {
449
+ c.header("vary", "Origin");
450
+ }
451
+ };
452
+ };
453
+
454
+ // src/utils/router.ts
455
+ function logger2() {
456
+ return getLogger("router");
457
+ }
458
+ function createRouter(basePath, builder) {
459
+ const router = new OpenAPIHono({ strict: false }).basePath(basePath);
460
+ router.use("*", loggerMiddleware(logger2()), cors());
461
+ router.use(
462
+ "*",
463
+ createMiddleware(async (c, next) => {
464
+ const upgrade = c.req.header("upgrade");
465
+ const isWebSocket = (upgrade == null ? void 0 : upgrade.toLowerCase()) === "websocket";
466
+ const isGet = c.req.method === "GET";
467
+ if (isGet && isWebSocket) {
468
+ c.header("Sec-WebSocket-Protocol", "rivet");
469
+ }
470
+ await next();
471
+ })
472
+ );
473
+ builder(router);
474
+ router.notFound(handleRouteNotFound);
475
+ router.onError(handleRouteError);
476
+ return { router, openapi: router };
477
+ }
478
+ function buildOpenApiResponses(schema) {
479
+ return {
480
+ 200: {
481
+ description: "Success",
482
+ content: {
483
+ "application/json": {
484
+ schema
485
+ }
486
+ }
487
+ },
488
+ 400: {
489
+ description: "User error"
490
+ },
491
+ 500: {
492
+ description: "Internal error"
493
+ }
494
+ };
495
+ }
496
+ function buildOpenApiRequestBody(schema) {
497
+ return {
498
+ required: true,
499
+ content: {
500
+ "application/json": {
501
+ schema
502
+ }
503
+ }
504
+ };
505
+ }
506
+
507
+ // src/manager/gateway.ts
508
+ import invariant from "invariant";
509
+
510
+ // src/manager/log.ts
511
+ function logger3() {
512
+ return getLogger("actor-manager");
513
+ }
514
+
515
+ // src/manager/gateway.ts
516
+ async function handleWebSocketGatewayPathBased(config, managerDriver, c, actorPathInfo, getUpgradeWebSocket) {
517
+ const upgradeWebSocket = getUpgradeWebSocket == null ? void 0 : getUpgradeWebSocket();
518
+ if (!upgradeWebSocket) {
519
+ throw new WebSocketsNotEnabled();
520
+ }
521
+ const { encoding, connParams } = parseWebSocketProtocols(
522
+ c.req.header("sec-websocket-protocol")
523
+ );
524
+ logger3().debug({
525
+ msg: "proxying websocket to actor via path-based routing",
526
+ actorId: actorPathInfo.actorId,
527
+ path: actorPathInfo.remainingPath,
528
+ encoding
529
+ });
530
+ return await managerDriver.proxyWebSocket(
531
+ c,
532
+ actorPathInfo.remainingPath,
533
+ actorPathInfo.actorId,
534
+ encoding,
535
+ // Will be validated by driver
536
+ connParams
537
+ );
538
+ }
539
+ async function handleHttpGatewayPathBased(managerDriver, c, actorPathInfo) {
540
+ logger3().debug({
541
+ msg: "proxying request to actor via path-based routing",
542
+ actorId: actorPathInfo.actorId,
543
+ path: actorPathInfo.remainingPath,
544
+ method: c.req.method
545
+ });
546
+ const proxyHeaders = new Headers(c.req.raw.headers);
547
+ const proxyUrl = new URL(`http://actor${actorPathInfo.remainingPath}`);
548
+ const proxyRequest = new Request(proxyUrl, {
549
+ method: c.req.raw.method,
550
+ headers: proxyHeaders,
551
+ body: c.req.raw.body,
552
+ signal: c.req.raw.signal,
553
+ duplex: "half"
554
+ });
555
+ return await managerDriver.proxyRequest(
556
+ c,
557
+ proxyRequest,
558
+ actorPathInfo.actorId
559
+ );
560
+ }
561
+ async function actorGateway(config, managerDriver, getUpgradeWebSocket, c, next) {
562
+ if (c.req.path.startsWith("/.test/")) {
563
+ return next();
564
+ }
565
+ let strippedPath = c.req.path;
566
+ if (config.managerBasePath && strippedPath.startsWith(config.managerBasePath)) {
567
+ strippedPath = strippedPath.slice(config.managerBasePath.length);
568
+ if (!strippedPath.startsWith("/")) {
569
+ strippedPath = "/" + strippedPath;
570
+ }
571
+ }
572
+ const pathWithQuery = c.req.url.includes("?") ? strippedPath + c.req.url.substring(c.req.url.indexOf("?")) : strippedPath;
573
+ const actorPathInfo = parseActorPath(pathWithQuery);
574
+ if (actorPathInfo) {
575
+ logger3().debug({
576
+ msg: "routing using path-based actor routing",
577
+ actorPathInfo
578
+ });
579
+ const isWebSocket = c.req.header("upgrade") === "websocket";
580
+ if (isWebSocket) {
581
+ return await handleWebSocketGatewayPathBased(
582
+ config,
583
+ managerDriver,
584
+ c,
585
+ actorPathInfo,
586
+ getUpgradeWebSocket
587
+ );
588
+ }
589
+ return await handleHttpGatewayPathBased(
590
+ managerDriver,
591
+ c,
592
+ actorPathInfo
593
+ );
594
+ }
595
+ if (c.req.header("upgrade") === "websocket") {
596
+ return await handleWebSocketGateway(
597
+ config,
598
+ managerDriver,
599
+ getUpgradeWebSocket,
600
+ c,
601
+ strippedPath
602
+ );
603
+ }
604
+ return await handleHttpGateway(managerDriver, c, next, strippedPath);
605
+ }
606
+ async function handleWebSocketGateway(config, managerDriver, getUpgradeWebSocket, c, strippedPath) {
607
+ const upgradeWebSocket = getUpgradeWebSocket == null ? void 0 : getUpgradeWebSocket();
608
+ if (!upgradeWebSocket) {
609
+ throw new WebSocketsNotEnabled();
610
+ }
611
+ let target;
612
+ let actorId;
613
+ const { encoding, connParams } = parseWebSocketProtocols(
614
+ c.req.header("sec-websocket-protocol")
615
+ );
616
+ if (target !== "actor") {
617
+ return c.text("WebSocket upgrade requires target.actor protocol", 400);
618
+ }
619
+ if (!actorId) {
620
+ throw new MissingActorHeader();
621
+ }
622
+ logger3().debug({
623
+ msg: "proxying websocket to actor",
624
+ actorId,
625
+ path: strippedPath,
626
+ encoding
627
+ });
628
+ const pathWithQuery = c.req.url.includes("?") ? strippedPath + c.req.url.substring(c.req.url.indexOf("?")) : strippedPath;
629
+ return await managerDriver.proxyWebSocket(
630
+ c,
631
+ pathWithQuery,
632
+ actorId,
633
+ encoding,
634
+ connParams
635
+ );
636
+ }
637
+ async function handleHttpGateway(managerDriver, c, next, strippedPath) {
638
+ const target = c.req.header(HEADER_RIVET_TARGET);
639
+ const actorId = c.req.header(HEADER_RIVET_ACTOR);
640
+ if (target !== "actor") {
641
+ return next();
642
+ }
643
+ if (!actorId) {
644
+ throw new MissingActorHeader();
645
+ }
646
+ logger3().debug({
647
+ msg: "proxying request to actor",
648
+ actorId,
649
+ path: strippedPath,
650
+ method: c.req.method
651
+ });
652
+ const proxyHeaders = new Headers(c.req.raw.headers);
653
+ proxyHeaders.delete(HEADER_RIVET_TARGET);
654
+ proxyHeaders.delete(HEADER_RIVET_ACTOR);
655
+ const url = new URL(c.req.url);
656
+ const proxyUrl = new URL(`http://actor${strippedPath}${url.search}`);
657
+ const proxyRequest = new Request(proxyUrl, {
658
+ method: c.req.raw.method,
659
+ headers: proxyHeaders,
660
+ body: c.req.raw.body,
661
+ signal: c.req.raw.signal,
662
+ duplex: "half"
663
+ });
664
+ return await managerDriver.proxyRequest(c, proxyRequest, actorId);
665
+ }
666
+ function parseActorPath(path) {
667
+ const queryPos = path.indexOf("?");
668
+ const fragmentPos = path.indexOf("#");
669
+ let queryString = "";
670
+ if (queryPos !== -1) {
671
+ if (fragmentPos !== -1 && queryPos < fragmentPos) {
672
+ queryString = path.slice(queryPos, fragmentPos);
673
+ } else {
674
+ queryString = path.slice(queryPos);
675
+ }
676
+ }
677
+ let basePath = path;
678
+ if (queryPos !== -1) {
679
+ basePath = path.slice(0, queryPos);
680
+ } else if (fragmentPos !== -1) {
681
+ basePath = path.slice(0, fragmentPos);
682
+ }
683
+ if (basePath.includes("//")) {
684
+ return null;
685
+ }
686
+ const segments = basePath.split("/").filter((s) => s.length > 0);
687
+ if (segments.length < 2) {
688
+ return null;
689
+ }
690
+ if (segments[0] !== "gateway") {
691
+ return null;
692
+ }
693
+ const actorSegment = segments[1];
694
+ if (actorSegment.length === 0) {
695
+ return null;
696
+ }
697
+ let actorId;
698
+ let token;
699
+ const atPos = actorSegment.indexOf("@");
700
+ if (atPos !== -1) {
701
+ const rawActorId = actorSegment.slice(0, atPos);
702
+ const rawToken = actorSegment.slice(atPos + 1);
703
+ if (rawActorId.length === 0 || rawToken.length === 0) {
704
+ return null;
705
+ }
706
+ try {
707
+ actorId = decodeURIComponent(rawActorId);
708
+ token = decodeURIComponent(rawToken);
709
+ } catch (e) {
710
+ return null;
711
+ }
712
+ } else {
713
+ try {
714
+ actorId = decodeURIComponent(actorSegment);
715
+ } catch (e) {
716
+ return null;
717
+ }
718
+ token = void 0;
719
+ }
720
+ let prefixLen = 0;
721
+ for (let i = 0; i < 2; i++) {
722
+ prefixLen += 1 + segments[i].length;
723
+ }
724
+ let remainingBase;
725
+ if (prefixLen < basePath.length) {
726
+ remainingBase = basePath.slice(prefixLen);
727
+ } else {
728
+ remainingBase = "/";
729
+ }
730
+ let remainingPath;
731
+ if (remainingBase.length === 0 || !remainingBase.startsWith("/")) {
732
+ remainingPath = `/${remainingBase}${queryString}`;
733
+ } else {
734
+ remainingPath = `${remainingBase}${queryString}`;
735
+ }
736
+ return {
737
+ actorId,
738
+ token,
739
+ remainingPath
740
+ };
741
+ }
742
+ async function createTestWebSocketProxy(proxyToActorWsPromise) {
743
+ let proxyToActorWs = null;
744
+ const {
745
+ promise: clientToProxyWsPromise,
746
+ resolve: clientToProxyWsResolve,
747
+ reject: clientToProxyWsReject
748
+ } = promiseWithResolvers(
749
+ (reason) => logger3().warn({
750
+ msg: "unhandled client websocket promise rejection",
751
+ reason
752
+ })
753
+ );
754
+ try {
755
+ logger3().debug({ msg: "awaiting client websocket promise" });
756
+ proxyToActorWs = await proxyToActorWsPromise;
757
+ logger3().debug({
758
+ msg: "client websocket promise resolved",
759
+ constructor: proxyToActorWs == null ? void 0 : proxyToActorWs.constructor.name
760
+ });
761
+ await new Promise((resolve, reject) => {
762
+ invariant(proxyToActorWs, "missing proxyToActorWs");
763
+ const onOpen = () => {
764
+ logger3().debug({
765
+ msg: "test websocket connection to actor opened"
766
+ });
767
+ resolve();
768
+ };
769
+ const onError = (error) => {
770
+ logger3().error({
771
+ msg: "test websocket connection failed",
772
+ error
773
+ });
774
+ reject(
775
+ new Error(
776
+ `Failed to open WebSocket: ${error.message || error}`
777
+ )
778
+ );
779
+ clientToProxyWsReject();
780
+ };
781
+ proxyToActorWs.addEventListener("open", onOpen);
782
+ proxyToActorWs.addEventListener("error", onError);
783
+ proxyToActorWs.addEventListener(
784
+ "message",
785
+ async (clientEvt) => {
786
+ var _a, _b;
787
+ const clientToProxyWs = await clientToProxyWsPromise;
788
+ logger3().debug({
789
+ msg: `test websocket connection message from client`,
790
+ dataType: typeof clientEvt.data,
791
+ isBlob: clientEvt.data instanceof Blob,
792
+ isArrayBuffer: clientEvt.data instanceof ArrayBuffer,
793
+ dataConstructor: (_b = (_a = clientEvt.data) == null ? void 0 : _a.constructor) == null ? void 0 : _b.name,
794
+ dataStr: typeof clientEvt.data === "string" ? clientEvt.data.substring(0, 100) : void 0
795
+ });
796
+ if (clientToProxyWs.readyState === 1) {
797
+ if (clientEvt.data instanceof Blob) {
798
+ clientEvt.data.arrayBuffer().then((buffer) => {
799
+ logger3().debug({
800
+ msg: "converted client blob to arraybuffer, sending to server",
801
+ bufferSize: buffer.byteLength
802
+ });
803
+ clientToProxyWs.send(buffer);
804
+ }).catch((error) => {
805
+ logger3().error({
806
+ msg: "failed to convert blob to arraybuffer",
807
+ error
808
+ });
809
+ });
810
+ } else {
811
+ logger3().debug({
812
+ msg: "sending client data directly to server",
813
+ dataType: typeof clientEvt.data,
814
+ dataLength: typeof clientEvt.data === "string" ? clientEvt.data.length : void 0
815
+ });
816
+ clientToProxyWs.send(clientEvt.data);
817
+ }
818
+ }
819
+ }
820
+ );
821
+ proxyToActorWs.addEventListener("close", async (clientEvt) => {
822
+ const clientToProxyWs = await clientToProxyWsPromise;
823
+ logger3().debug({
824
+ msg: `test websocket connection closed`
825
+ });
826
+ if (clientToProxyWs.readyState !== 3) {
827
+ clientToProxyWs.close(clientEvt.code, clientEvt.reason);
828
+ }
829
+ });
830
+ proxyToActorWs.addEventListener("error", async () => {
831
+ const clientToProxyWs = await clientToProxyWsPromise;
832
+ logger3().debug({
833
+ msg: `test websocket connection error`
834
+ });
835
+ if (clientToProxyWs.readyState !== 3) {
836
+ clientToProxyWs.close(1011, "Error in client websocket");
837
+ }
838
+ });
839
+ });
840
+ } catch (error) {
841
+ logger3().error({
842
+ msg: `failed to establish client websocket connection`,
843
+ error
844
+ });
845
+ return {
846
+ onOpen: (_evt, clientToProxyWs) => {
847
+ clientToProxyWs.close(1011, "Failed to establish connection");
848
+ },
849
+ onMessage: () => {
850
+ },
851
+ onError: () => {
852
+ },
853
+ onClose: () => {
854
+ }
855
+ };
856
+ }
857
+ return {
858
+ onOpen: (_evt, clientToProxyWs) => {
859
+ logger3().debug({
860
+ msg: `test websocket connection from client opened`
861
+ });
862
+ logger3().debug({
863
+ msg: "proxyToActorWs info",
864
+ constructor: proxyToActorWs.constructor.name,
865
+ hasAddEventListener: typeof proxyToActorWs.addEventListener === "function",
866
+ readyState: proxyToActorWs.readyState
867
+ });
868
+ clientToProxyWsResolve(clientToProxyWs);
869
+ },
870
+ onMessage: (evt) => {
871
+ var _a, _b;
872
+ logger3().debug({
873
+ msg: "received message from server",
874
+ dataType: typeof evt.data,
875
+ isBlob: evt.data instanceof Blob,
876
+ isArrayBuffer: evt.data instanceof ArrayBuffer,
877
+ dataConstructor: (_b = (_a = evt.data) == null ? void 0 : _a.constructor) == null ? void 0 : _b.name,
878
+ dataStr: typeof evt.data === "string" ? evt.data.substring(0, 100) : void 0
879
+ });
880
+ if (proxyToActorWs.readyState === 1) {
881
+ if (evt.data instanceof Blob) {
882
+ evt.data.arrayBuffer().then((buffer) => {
883
+ logger3().debug({
884
+ msg: "converted blob to arraybuffer, sending",
885
+ bufferSize: buffer.byteLength
886
+ });
887
+ proxyToActorWs.send(buffer);
888
+ }).catch((error) => {
889
+ logger3().error({
890
+ msg: "failed to convert blob to arraybuffer",
891
+ error
892
+ });
893
+ });
894
+ } else {
895
+ logger3().debug({
896
+ msg: "sending data directly",
897
+ dataType: typeof evt.data,
898
+ dataLength: typeof evt.data === "string" ? evt.data.length : void 0
899
+ });
900
+ proxyToActorWs.send(evt.data);
901
+ }
902
+ }
903
+ },
904
+ onClose: (event, clientToProxyWs) => {
905
+ logger3().debug({
906
+ msg: `server websocket closed`,
907
+ wasClean: event.wasClean,
908
+ code: event.code,
909
+ reason: event.reason
910
+ });
911
+ clientToProxyWs.close(1e3, "hack_force_close");
912
+ if (proxyToActorWs && proxyToActorWs.readyState !== proxyToActorWs.CLOSED && proxyToActorWs.readyState !== proxyToActorWs.CLOSING) {
913
+ proxyToActorWs.close(1e3, event.reason);
914
+ }
915
+ },
916
+ onError: (error) => {
917
+ logger3().error({
918
+ msg: `error in server websocket`,
919
+ error
920
+ });
921
+ if (proxyToActorWs && proxyToActorWs.readyState !== proxyToActorWs.CLOSED && proxyToActorWs.readyState !== proxyToActorWs.CLOSING) {
922
+ proxyToActorWs.close(1011, "Error in server websocket");
923
+ }
924
+ clientToProxyWsReject();
925
+ }
926
+ };
927
+ }
928
+
929
+ // src/manager/router.ts
930
+ function buildManagerRouter(config, managerDriver, getUpgradeWebSocket, runtime = "node") {
931
+ return createRouter(config.managerBasePath, (router) => {
932
+ var _a;
933
+ router.use(
934
+ "*",
935
+ actorGateway.bind(
936
+ void 0,
937
+ config,
938
+ managerDriver,
939
+ getUpgradeWebSocket
940
+ )
941
+ );
942
+ router.get("/", (c) => {
943
+ return c.text(
944
+ "This is a RivetKit server.\n\nLearn more at https://rivet.dev"
945
+ );
946
+ });
947
+ {
948
+ const route = createRoute({
949
+ method: "get",
950
+ path: "/actors",
951
+ request: {
952
+ query: z3.object({
953
+ name: z3.string().optional(),
954
+ actor_ids: z3.string().optional(),
955
+ key: z3.string().optional()
956
+ })
957
+ },
958
+ responses: buildOpenApiResponses(ActorsListResponseSchema)
959
+ });
960
+ router.openapi(route, async (c) => {
961
+ const { name, actor_ids, key } = c.req.valid("query");
962
+ const actorIdsParsed = actor_ids ? actor_ids.split(",").map((id) => id.trim()).filter((id) => id.length > 0) : void 0;
963
+ const actors = [];
964
+ if (actorIdsParsed && (name || key)) {
965
+ return c.json(
966
+ {
967
+ error: "Cannot provide both actor_ids and (name + key). Use either actor_ids or (name + key)."
968
+ },
969
+ 400
970
+ );
971
+ }
972
+ if (key && !name) {
973
+ return c.json(
974
+ {
975
+ error: "Name is required when key is provided."
976
+ },
977
+ 400
978
+ );
979
+ }
980
+ if (actorIdsParsed) {
981
+ if (actorIdsParsed.length > 32) {
982
+ return c.json(
983
+ {
984
+ error: `Too many actor IDs. Maximum is 32, got ${actorIdsParsed.length}.`
985
+ },
986
+ 400
987
+ );
988
+ }
989
+ if (actorIdsParsed.length === 0) {
990
+ return c.json({
991
+ actors: []
992
+ });
993
+ }
994
+ for (const actorId of actorIdsParsed) {
995
+ if (name) {
996
+ const actorOutput = await managerDriver.getForId({
997
+ c,
998
+ name,
999
+ actorId
1000
+ });
1001
+ if (actorOutput) {
1002
+ actors.push(actorOutput);
1003
+ }
1004
+ } else {
1005
+ for (const actorName of Object.keys(config.use)) {
1006
+ const actorOutput = await managerDriver.getForId({
1007
+ c,
1008
+ name: actorName,
1009
+ actorId
1010
+ });
1011
+ if (actorOutput) {
1012
+ actors.push(actorOutput);
1013
+ break;
1014
+ }
1015
+ }
1016
+ }
1017
+ }
1018
+ } else if (key && name) {
1019
+ const actorOutput = await managerDriver.getWithKey({
1020
+ c,
1021
+ name,
1022
+ key: deserializeActorKey(key)
1023
+ });
1024
+ if (actorOutput) {
1025
+ actors.push(actorOutput);
1026
+ }
1027
+ } else {
1028
+ if (!name) {
1029
+ return c.json(
1030
+ {
1031
+ error: "Name is required when not using actor_ids."
1032
+ },
1033
+ 400
1034
+ );
1035
+ }
1036
+ const actorOutputs = await managerDriver.listActors({
1037
+ c,
1038
+ name,
1039
+ key,
1040
+ includeDestroyed: false
1041
+ });
1042
+ actors.push(...actorOutputs);
1043
+ }
1044
+ return c.json({
1045
+ actors: actors.map((actor) => createApiActor(actor))
1046
+ });
1047
+ });
1048
+ }
1049
+ {
1050
+ const route = createRoute({
1051
+ method: "get",
1052
+ path: "/actors/names",
1053
+ request: {
1054
+ query: z3.object({
1055
+ namespace: z3.string()
1056
+ })
1057
+ },
1058
+ responses: buildOpenApiResponses(ActorsListNamesResponseSchema)
1059
+ });
1060
+ router.openapi(route, async (c) => {
1061
+ const names = buildActorNames(config);
1062
+ return c.json({
1063
+ names
1064
+ });
1065
+ });
1066
+ }
1067
+ {
1068
+ const route = createRoute({
1069
+ method: "put",
1070
+ path: "/actors",
1071
+ request: {
1072
+ body: buildOpenApiRequestBody(
1073
+ ActorsGetOrCreateRequestSchema
1074
+ )
1075
+ },
1076
+ responses: buildOpenApiResponses(
1077
+ ActorsGetOrCreateResponseSchema
1078
+ )
1079
+ });
1080
+ router.openapi(route, async (c) => {
1081
+ const body = c.req.valid("json");
1082
+ const existingActor = await managerDriver.getWithKey({
1083
+ c,
1084
+ name: body.name,
1085
+ key: deserializeActorKey(body.key)
1086
+ });
1087
+ if (existingActor) {
1088
+ return c.json({
1089
+ actor: createApiActor(existingActor),
1090
+ created: false
1091
+ });
1092
+ }
1093
+ const newActor = await managerDriver.getOrCreateWithKey({
1094
+ c,
1095
+ name: body.name,
1096
+ key: deserializeActorKey(body.key),
1097
+ input: body.input ? cbor.decode(Buffer.from(body.input, "base64")) : void 0,
1098
+ region: void 0
1099
+ // Not provided in the request schema
1100
+ });
1101
+ return c.json({
1102
+ actor: createApiActor(newActor),
1103
+ created: true
1104
+ });
1105
+ });
1106
+ }
1107
+ {
1108
+ const route = createRoute({
1109
+ method: "post",
1110
+ path: "/actors",
1111
+ request: {
1112
+ body: buildOpenApiRequestBody(ActorsCreateRequestSchema)
1113
+ },
1114
+ responses: buildOpenApiResponses(ActorsCreateResponseSchema)
1115
+ });
1116
+ router.openapi(route, async (c) => {
1117
+ const body = c.req.valid("json");
1118
+ const actorOutput = await managerDriver.createActor({
1119
+ c,
1120
+ name: body.name,
1121
+ key: deserializeActorKey(body.key || crypto.randomUUID()),
1122
+ input: body.input ? cbor.decode(Buffer.from(body.input, "base64")) : void 0,
1123
+ region: void 0
1124
+ // Not provided in the request schema
1125
+ });
1126
+ const actor = createApiActor(actorOutput);
1127
+ return c.json({ actor });
1128
+ });
1129
+ }
1130
+ {
1131
+ const route = createRoute({
1132
+ method: "get",
1133
+ path: "/actors/{actor_id}/kv/keys/{key}",
1134
+ request: {
1135
+ params: z3.object({
1136
+ actor_id: z3.string(),
1137
+ key: z3.string()
1138
+ })
1139
+ },
1140
+ responses: buildOpenApiResponses(ActorsKvGetResponseSchema)
1141
+ });
1142
+ router.openapi(route, async (c) => {
1143
+ if (isDev() && !config.token) {
1144
+ logger3().warn({
1145
+ msg: "RIVET_TOKEN is not set, skipping KV store access checks in development mode. This endpoint will be disabled in production, unless you set the token."
1146
+ });
1147
+ }
1148
+ if (!isDev()) {
1149
+ if (!config.token) {
1150
+ throw new RestrictedFeature("KV store access");
1151
+ }
1152
+ if (timingSafeEqual(
1153
+ config.token,
1154
+ c.req.header(HEADER_RIVET_TOKEN) || ""
1155
+ ) === false) {
1156
+ throw new Forbidden();
1157
+ }
1158
+ }
1159
+ const { actor_id: actorId, key } = c.req.valid("param");
1160
+ const response = await managerDriver.kvGet(
1161
+ actorId,
1162
+ Buffer.from(key, "base64")
1163
+ );
1164
+ return c.json({
1165
+ value: response ? Buffer.from(response).toString("base64") : null
1166
+ });
1167
+ });
1168
+ }
1169
+ if (config.test.enabled) {
1170
+ router.post(".test/inline-driver/call", async (c) => {
1171
+ const buffer = await c.req.arrayBuffer();
1172
+ const { encoding, method, args } = cbor.decode(new Uint8Array(buffer));
1173
+ logger3().debug({
1174
+ msg: "received inline request",
1175
+ encoding,
1176
+ method,
1177
+ args
1178
+ });
1179
+ let response;
1180
+ try {
1181
+ const output = await managerDriver[method](...args);
1182
+ response = { ok: output };
1183
+ } catch (rawErr) {
1184
+ const err = deconstructError(rawErr, logger3(), {}, true);
1185
+ response = { err };
1186
+ }
1187
+ return c.body(cbor.encode(response));
1188
+ });
1189
+ router.get(".test/inline-driver/connect-websocket/*", async (c) => {
1190
+ const upgradeWebSocket = getUpgradeWebSocket == null ? void 0 : getUpgradeWebSocket();
1191
+ invariant2(
1192
+ upgradeWebSocket,
1193
+ "websockets not supported on this platform"
1194
+ );
1195
+ return upgradeWebSocket(async (c2) => {
1196
+ const protocolHeader = c2.req.header("sec-websocket-protocol") || "";
1197
+ const protocols = protocolHeader.split(/,\s*/);
1198
+ let actorId = "";
1199
+ let encoding = "bare";
1200
+ let path = "";
1201
+ let params;
1202
+ for (const protocol of protocols) {
1203
+ if (protocol.startsWith(WS_PROTOCOL_ACTOR)) {
1204
+ actorId = decodeURIComponent(
1205
+ protocol.substring(WS_PROTOCOL_ACTOR.length)
1206
+ );
1207
+ } else if (protocol.startsWith(WS_PROTOCOL_ENCODING)) {
1208
+ encoding = protocol.substring(
1209
+ WS_PROTOCOL_ENCODING.length
1210
+ );
1211
+ } else if (protocol.startsWith(WS_TEST_PROTOCOL_PATH)) {
1212
+ path = decodeURIComponent(
1213
+ protocol.substring(
1214
+ WS_TEST_PROTOCOL_PATH.length
1215
+ )
1216
+ );
1217
+ } else if (protocol.startsWith(WS_PROTOCOL_CONN_PARAMS)) {
1218
+ const paramsRaw = decodeURIComponent(
1219
+ protocol.substring(
1220
+ WS_PROTOCOL_CONN_PARAMS.length
1221
+ )
1222
+ );
1223
+ params = JSON.parse(paramsRaw);
1224
+ }
1225
+ }
1226
+ logger3().debug({
1227
+ msg: "received test inline driver websocket",
1228
+ actorId,
1229
+ params,
1230
+ encodingKind: encoding,
1231
+ path
1232
+ });
1233
+ const clientToProxyWsPromise = managerDriver.openWebSocket(
1234
+ path,
1235
+ actorId,
1236
+ encoding,
1237
+ params
1238
+ );
1239
+ return await createTestWebSocketProxy(
1240
+ clientToProxyWsPromise
1241
+ );
1242
+ })(c, noopNext());
1243
+ });
1244
+ router.all(".test/inline-driver/send-request/*", async (c) => {
1245
+ const actorId = c.req.header(HEADER_ACTOR_ID);
1246
+ if (!actorId) {
1247
+ return c.text("Missing required headers", 400);
1248
+ }
1249
+ const pathOnly = c.req.path.split("/.test/inline-driver/send-request/")[1] || "";
1250
+ const url = new URL(c.req.url);
1251
+ const pathWithQuery = pathOnly + url.search;
1252
+ logger3().debug({
1253
+ msg: "received test inline driver raw http",
1254
+ actorId,
1255
+ path: pathWithQuery,
1256
+ method: c.req.method
1257
+ });
1258
+ try {
1259
+ const response = await managerDriver.sendRequest(
1260
+ actorId,
1261
+ new Request(`http://actor/${pathWithQuery}`, {
1262
+ method: c.req.method,
1263
+ headers: c.req.raw.headers,
1264
+ body: c.req.raw.body,
1265
+ duplex: "half"
1266
+ })
1267
+ );
1268
+ return response;
1269
+ } catch (error) {
1270
+ logger3().error({
1271
+ msg: "error in test inline raw http",
1272
+ error: stringifyError(error)
1273
+ });
1274
+ const err = deconstructError(error, logger3(), {}, true);
1275
+ return c.json(
1276
+ {
1277
+ error: {
1278
+ code: err.code,
1279
+ message: err.message,
1280
+ metadata: err.metadata
1281
+ }
1282
+ },
1283
+ err.statusCode
1284
+ );
1285
+ }
1286
+ });
1287
+ router.post("/.test/force-disconnect", async (c) => {
1288
+ const actorId = c.req.query("actor");
1289
+ const connId = c.req.query("conn");
1290
+ if (!actorId || !connId) {
1291
+ return c.text(
1292
+ "Missing actor or conn query parameters",
1293
+ 400
1294
+ );
1295
+ }
1296
+ logger3().debug({
1297
+ msg: "forcing unclean disconnect",
1298
+ actorId,
1299
+ connId
1300
+ });
1301
+ try {
1302
+ const response = await managerDriver.sendRequest(
1303
+ actorId,
1304
+ new Request(
1305
+ `http://actor/.test/force-disconnect?conn=${connId}`,
1306
+ {
1307
+ method: "POST"
1308
+ }
1309
+ )
1310
+ );
1311
+ if (!response.ok) {
1312
+ const text = await response.text();
1313
+ return c.text(
1314
+ `Failed to force disconnect: ${text}`,
1315
+ response.status
1316
+ );
1317
+ }
1318
+ return c.json({ success: true });
1319
+ } catch (error) {
1320
+ logger3().error({
1321
+ msg: "error forcing disconnect",
1322
+ error: stringifyError(error)
1323
+ });
1324
+ return c.text(`Error: ${error}`, 500);
1325
+ }
1326
+ });
1327
+ }
1328
+ if (config.inspector.enabled) {
1329
+ let inspectorRoot;
1330
+ router.get("/ui/*", async (c, next) => {
1331
+ let serveStatic;
1332
+ try {
1333
+ serveStatic = await loadRuntimeServeStatic(runtime);
1334
+ } catch (error) {
1335
+ logger3().error({
1336
+ msg: "failed to load inspector static file handler",
1337
+ error: stringifyError(error)
1338
+ });
1339
+ return c.text(
1340
+ `Failed to load static file handler for runtime '${runtime}'.`,
1341
+ 500
1342
+ );
1343
+ }
1344
+ if (!inspectorRoot) {
1345
+ inspectorRoot = await getInspectorDir();
1346
+ }
1347
+ const root = inspectorRoot;
1348
+ const rewrite = (path) => path.replace(/^\/ui/, "") || "/";
1349
+ return serveStatic({
1350
+ root,
1351
+ rewriteRequestPath: rewrite,
1352
+ onNotFound: async (_path, c2) => {
1353
+ await serveStatic({ root, path: "index.html" })(
1354
+ c2,
1355
+ next
1356
+ );
1357
+ }
1358
+ })(c, next);
1359
+ });
1360
+ router.get("/ui", (c) => c.redirect("/ui/"));
1361
+ }
1362
+ router.get("/health", (c) => handleHealthRequest(c));
1363
+ router.get(
1364
+ "/metadata",
1365
+ (c) => handleMetadataRequest(
1366
+ c,
1367
+ config,
1368
+ { normal: {} },
1369
+ config.publicEndpoint,
1370
+ config.publicNamespace,
1371
+ config.publicToken
1372
+ )
1373
+ );
1374
+ (_a = managerDriver.modifyManagerRouter) == null ? void 0 : _a.call(managerDriver, config, router);
1375
+ });
1376
+ }
1377
+ function createApiActor(actor) {
1378
+ return {
1379
+ actor_id: actor.actorId,
1380
+ name: actor.name,
1381
+ key: serializeActorKey(actor.key),
1382
+ namespace_id: "default",
1383
+ // Assert default namespace
1384
+ runner_name_selector: "default",
1385
+ create_ts: actor.createTs ?? Date.now(),
1386
+ connectable_ts: actor.connectableTs ?? null,
1387
+ destroy_ts: actor.destroyTs ?? null,
1388
+ sleep_ts: actor.sleepTs ?? null,
1389
+ start_ts: actor.startTs ?? null
1390
+ };
1391
+ }
1392
+
1393
+ // src/driver-helpers/utils.ts
1394
+ import * as cbor2 from "cbor-x";
1395
+ function serializeEmptyPersistData(input) {
1396
+ const persistData = {
1397
+ input: input !== void 0 ? bufferToArrayBuffer(cbor2.encode(input)) : null,
1398
+ hasInitialized: false,
1399
+ state: bufferToArrayBuffer(cbor2.encode(void 0)),
1400
+ scheduledEvents: []
1401
+ };
1402
+ return ACTOR_VERSIONED.serializeWithEmbeddedVersion(
1403
+ persistData,
1404
+ CURRENT_VERSION
1405
+ );
1406
+ }
1407
+ function getInitialActorKvState(input) {
1408
+ const persistData = serializeEmptyPersistData(input);
1409
+ return [[KEYS.PERSIST_DATA, persistData]];
1410
+ }
1411
+
1412
+ // src/driver-helpers/sqlite-pool.ts
1413
+ var SqliteVfsPoolManager = class {
1414
+ #poolPromise;
1415
+ #config;
1416
+ constructor(config) {
1417
+ this.#config = config;
1418
+ }
1419
+ async acquire(actorId) {
1420
+ if (!this.#poolPromise) {
1421
+ const poolConfig = this.#config.sqlitePool;
1422
+ this.#poolPromise = import("@rivetkit/sqlite-vfs").then(
1423
+ ({ SqliteVfsPool }) => new SqliteVfsPool({
1424
+ actorsPerInstance: poolConfig.actorsPerInstance,
1425
+ idleDestroyMs: poolConfig.idleDestroyMs
1426
+ })
1427
+ );
1428
+ }
1429
+ const pool = await this.#poolPromise;
1430
+ return await pool.acquire(actorId);
1431
+ }
1432
+ async shutdown() {
1433
+ if (this.#poolPromise) {
1434
+ const pool = await this.#poolPromise;
1435
+ await pool.shutdown();
1436
+ }
1437
+ }
1438
+ };
1439
+
1440
+ export {
1441
+ getRequireFn,
1442
+ importNodeDependencies,
1443
+ getNodeCrypto,
1444
+ getNodeFsSync,
1445
+ getNodeFs,
1446
+ getNodePath,
1447
+ getNodeOs,
1448
+ getNodeChildProcess,
1449
+ getNodeStream,
1450
+ logger,
1451
+ findFreePort,
1452
+ crossPlatformServe,
1453
+ loadRuntimeServeStatic,
1454
+ createRouter,
1455
+ buildManagerRouter,
1456
+ getInitialActorKvState,
1457
+ SqliteVfsPoolManager
1458
+ };
1459
+ //# sourceMappingURL=chunk-C4EB42ET.js.map