rivetkit 2.0.2 → 2.0.4-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 (403) hide show
  1. package/README.md +3 -5
  2. package/dist/browser/client.d.ts +2485 -0
  3. package/dist/browser/client.js +5182 -0
  4. package/dist/browser/client.js.map +1 -0
  5. package/dist/browser/inspector/client.d.ts +130 -0
  6. package/dist/browser/inspector/client.js +2854 -0
  7. package/dist/browser/inspector/client.js.map +1 -0
  8. package/dist/browser/v3-DnYObHH3.d.ts +279 -0
  9. package/dist/inspector.tar.gz +0 -0
  10. package/dist/schemas/actor-inspector/v1.ts +784 -0
  11. package/dist/schemas/actor-inspector/v2.ts +796 -0
  12. package/dist/schemas/actor-inspector/v3.ts +899 -0
  13. package/dist/schemas/actor-persist/v1.ts +225 -0
  14. package/dist/schemas/actor-persist/v2.ts +268 -0
  15. package/dist/schemas/actor-persist/v3.ts +280 -0
  16. package/dist/schemas/actor-persist/v4.ts +406 -0
  17. package/dist/schemas/client-protocol/v1.ts +441 -0
  18. package/dist/schemas/client-protocol/v2.ts +438 -0
  19. package/dist/schemas/client-protocol/v3.ts +554 -0
  20. package/dist/schemas/file-system-driver/v1.ts +108 -0
  21. package/dist/schemas/file-system-driver/v2.ts +142 -0
  22. package/dist/schemas/file-system-driver/v3.ts +167 -0
  23. package/dist/schemas/persist/v1.ts +781 -0
  24. package/dist/schemas/transport/v1.ts +697 -0
  25. package/dist/tsup/actor/errors.cjs +106 -0
  26. package/dist/tsup/actor/errors.cjs.map +1 -0
  27. package/dist/tsup/actor/errors.d.cts +188 -0
  28. package/dist/tsup/actor/errors.d.ts +188 -0
  29. package/dist/tsup/actor/errors.js +106 -0
  30. package/dist/tsup/actor/errors.js.map +1 -0
  31. package/dist/tsup/actor-router-consts-D29T1Z-K.d.cts +24 -0
  32. package/dist/tsup/actor-router-consts-D29T1Z-K.d.ts +24 -0
  33. package/dist/tsup/chunk-325TLXJT.js +1060 -0
  34. package/dist/tsup/chunk-325TLXJT.js.map +1 -0
  35. package/dist/tsup/chunk-424PT5DM.js +23 -0
  36. package/dist/tsup/chunk-424PT5DM.js.map +1 -0
  37. package/dist/tsup/chunk-4JVIG3SS.cjs +6289 -0
  38. package/dist/tsup/chunk-4JVIG3SS.cjs.map +1 -0
  39. package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
  40. package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
  41. package/dist/tsup/chunk-6XU3FMCB.cjs +534 -0
  42. package/dist/tsup/chunk-6XU3FMCB.cjs.map +1 -0
  43. package/dist/tsup/chunk-7HTNH26M.js +509 -0
  44. package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
  45. package/dist/tsup/chunk-AUVH72RE.cjs +5977 -0
  46. package/dist/tsup/chunk-AUVH72RE.cjs.map +1 -0
  47. package/dist/tsup/chunk-D4BYUPNQ.js +645 -0
  48. package/dist/tsup/chunk-D4BYUPNQ.js.map +1 -0
  49. package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
  50. package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
  51. package/dist/tsup/chunk-HHXX2VRM.js +6289 -0
  52. package/dist/tsup/chunk-HHXX2VRM.js.map +1 -0
  53. package/dist/tsup/chunk-JEAEA2PB.js +49 -0
  54. package/dist/tsup/chunk-JEAEA2PB.js.map +1 -0
  55. package/dist/tsup/chunk-JYSEG3VF.cjs +642 -0
  56. package/dist/tsup/chunk-JYSEG3VF.cjs.map +1 -0
  57. package/dist/tsup/chunk-K6DGYILQ.js +2657 -0
  58. package/dist/tsup/chunk-K6DGYILQ.js.map +1 -0
  59. package/dist/tsup/chunk-KJSYAUOM.js +96 -0
  60. package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
  61. package/dist/tsup/chunk-L47L3ZWJ.cjs +509 -0
  62. package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
  63. package/dist/tsup/chunk-LXUQ667X.js +2006 -0
  64. package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
  65. package/dist/tsup/chunk-MXNPAB5W.js +5977 -0
  66. package/dist/tsup/chunk-MXNPAB5W.js.map +1 -0
  67. package/dist/tsup/chunk-N4KRDJ56.js +72 -0
  68. package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
  69. package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
  70. package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
  71. package/dist/tsup/chunk-PQZHDKRW.cjs +1060 -0
  72. package/dist/tsup/chunk-PQZHDKRW.cjs.map +1 -0
  73. package/dist/tsup/chunk-PVOE6BU7.cjs +1050 -0
  74. package/dist/tsup/chunk-PVOE6BU7.cjs.map +1 -0
  75. package/dist/tsup/chunk-Q4UD2GA4.cjs +1810 -0
  76. package/dist/tsup/chunk-Q4UD2GA4.cjs.map +1 -0
  77. package/dist/tsup/chunk-QUD664YZ.js +1810 -0
  78. package/dist/tsup/chunk-QUD664YZ.js.map +1 -0
  79. package/dist/tsup/chunk-RTOCTWME.js +1050 -0
  80. package/dist/tsup/chunk-RTOCTWME.js.map +1 -0
  81. package/dist/tsup/chunk-SAZZ4SB2.cjs +2657 -0
  82. package/dist/tsup/chunk-SAZZ4SB2.cjs.map +1 -0
  83. package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
  84. package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
  85. package/dist/tsup/chunk-V2GHLYC6.cjs +49 -0
  86. package/dist/tsup/chunk-V2GHLYC6.cjs.map +1 -0
  87. package/dist/tsup/chunk-V3WG7XTW.cjs +645 -0
  88. package/dist/tsup/chunk-V3WG7XTW.cjs.map +1 -0
  89. package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
  90. package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
  91. package/dist/tsup/chunk-WMPW7JYC.js +642 -0
  92. package/dist/tsup/chunk-WMPW7JYC.js.map +1 -0
  93. package/dist/tsup/chunk-Z7HNQ2WF.js +534 -0
  94. package/dist/tsup/chunk-Z7HNQ2WF.js.map +1 -0
  95. package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
  96. package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
  97. package/dist/tsup/client/mod.cjs +33 -0
  98. package/dist/tsup/client/mod.cjs.map +1 -0
  99. package/dist/tsup/client/mod.d.cts +64 -0
  100. package/dist/tsup/client/mod.d.ts +64 -0
  101. package/dist/tsup/client/mod.js +33 -0
  102. package/dist/tsup/client/mod.js.map +1 -0
  103. package/dist/tsup/common/log.cjs +21 -0
  104. package/dist/tsup/common/log.cjs.map +1 -0
  105. package/dist/tsup/common/log.d.cts +34 -0
  106. package/dist/tsup/common/log.d.ts +34 -0
  107. package/dist/tsup/common/log.js +21 -0
  108. package/dist/tsup/common/log.js.map +1 -0
  109. package/dist/tsup/common/websocket.cjs +10 -0
  110. package/dist/tsup/common/websocket.cjs.map +1 -0
  111. package/dist/tsup/common/websocket.d.cts +3 -0
  112. package/dist/tsup/common/websocket.d.ts +3 -0
  113. package/dist/tsup/common/websocket.js +10 -0
  114. package/dist/tsup/common/websocket.js.map +1 -0
  115. package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
  116. package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
  117. package/dist/tsup/config-P3XujgRr.d.ts +2594 -0
  118. package/dist/tsup/config-_gfywqqI.d.cts +2594 -0
  119. package/dist/tsup/context-Bxd8Cx4H.d.cts +75 -0
  120. package/dist/tsup/context-uNA4TRn3.d.ts +75 -0
  121. package/dist/tsup/db/drizzle/mod.cjs +49 -0
  122. package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
  123. package/dist/tsup/db/drizzle/mod.d.cts +17 -0
  124. package/dist/tsup/db/drizzle/mod.d.ts +17 -0
  125. package/dist/tsup/db/drizzle/mod.js +49 -0
  126. package/dist/tsup/db/drizzle/mod.js.map +1 -0
  127. package/dist/tsup/db/mod.cjs +9 -0
  128. package/dist/tsup/db/mod.cjs.map +1 -0
  129. package/dist/tsup/db/mod.d.cts +9 -0
  130. package/dist/tsup/db/mod.d.ts +9 -0
  131. package/dist/tsup/db/mod.js +9 -0
  132. package/dist/tsup/db/mod.js.map +1 -0
  133. package/dist/tsup/driver-BcLvZcKl.d.cts +13 -0
  134. package/dist/tsup/driver-CPGHKXyh.d.ts +13 -0
  135. package/dist/tsup/driver-helpers/mod.cjs +53 -0
  136. package/dist/tsup/driver-helpers/mod.cjs.map +1 -0
  137. package/dist/tsup/driver-helpers/mod.d.cts +47 -0
  138. package/dist/tsup/driver-helpers/mod.d.ts +47 -0
  139. package/dist/tsup/driver-helpers/mod.js +53 -0
  140. package/dist/tsup/driver-helpers/mod.js.map +1 -0
  141. package/dist/tsup/driver-test-suite/mod.cjs +4974 -0
  142. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -0
  143. package/dist/tsup/driver-test-suite/mod.d.cts +73 -0
  144. package/dist/tsup/driver-test-suite/mod.d.ts +73 -0
  145. package/dist/tsup/driver-test-suite/mod.js +4974 -0
  146. package/dist/tsup/driver-test-suite/mod.js.map +1 -0
  147. package/dist/tsup/inspector/mod.cjs +164 -0
  148. package/dist/tsup/inspector/mod.cjs.map +1 -0
  149. package/dist/tsup/inspector/mod.d.cts +130 -0
  150. package/dist/tsup/inspector/mod.d.ts +130 -0
  151. package/dist/tsup/inspector/mod.js +164 -0
  152. package/dist/tsup/inspector/mod.js.map +1 -0
  153. package/dist/tsup/keys-CydblqMh.d.cts +13 -0
  154. package/dist/tsup/keys-CydblqMh.d.ts +13 -0
  155. package/dist/tsup/mod.cjs +82 -0
  156. package/dist/tsup/mod.cjs.map +1 -0
  157. package/dist/tsup/mod.d.cts +126 -0
  158. package/dist/tsup/mod.d.ts +126 -0
  159. package/dist/tsup/mod.js +82 -0
  160. package/dist/tsup/mod.js.map +1 -0
  161. package/dist/tsup/serve-test-suite/mod.cjs +2601 -0
  162. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -0
  163. package/dist/tsup/serve-test-suite/mod.d.cts +9 -0
  164. package/dist/tsup/serve-test-suite/mod.d.ts +9 -0
  165. package/dist/tsup/serve-test-suite/mod.js +2601 -0
  166. package/dist/tsup/serve-test-suite/mod.js.map +1 -0
  167. package/dist/tsup/test/mod.cjs +90 -0
  168. package/dist/tsup/test/mod.cjs.map +1 -0
  169. package/dist/tsup/test/mod.d.cts +26 -0
  170. package/dist/tsup/test/mod.d.ts +26 -0
  171. package/dist/tsup/test/mod.js +90 -0
  172. package/dist/tsup/test/mod.js.map +1 -0
  173. package/dist/tsup/utils-fwx3o3K9.d.cts +18 -0
  174. package/dist/tsup/utils-fwx3o3K9.d.ts +18 -0
  175. package/dist/tsup/utils.cjs +43 -0
  176. package/dist/tsup/utils.cjs.map +1 -0
  177. package/dist/tsup/utils.d.cts +148 -0
  178. package/dist/tsup/utils.d.ts +148 -0
  179. package/dist/tsup/utils.js +43 -0
  180. package/dist/tsup/utils.js.map +1 -0
  181. package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
  182. package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
  183. package/dist/tsup/workflow/mod.cjs +16 -0
  184. package/dist/tsup/workflow/mod.cjs.map +1 -0
  185. package/dist/tsup/workflow/mod.d.cts +25 -0
  186. package/dist/tsup/workflow/mod.d.ts +25 -0
  187. package/dist/tsup/workflow/mod.js +16 -0
  188. package/dist/tsup/workflow/mod.js.map +1 -0
  189. package/package.json +293 -5
  190. package/src/actor/config.ts +1221 -0
  191. package/src/actor/conn/driver.ts +61 -0
  192. package/src/actor/conn/drivers/http.ts +17 -0
  193. package/src/actor/conn/drivers/raw-request.ts +24 -0
  194. package/src/actor/conn/drivers/raw-websocket.ts +65 -0
  195. package/src/actor/conn/drivers/websocket.ts +144 -0
  196. package/src/actor/conn/mod.ts +288 -0
  197. package/src/actor/conn/persisted.ts +81 -0
  198. package/src/actor/conn/state-manager.ts +196 -0
  199. package/src/actor/contexts/action.ts +47 -0
  200. package/src/actor/contexts/base/actor.ts +347 -0
  201. package/src/actor/contexts/base/conn-init.ts +68 -0
  202. package/src/actor/contexts/base/conn.ts +73 -0
  203. package/src/actor/contexts/before-action-response.ts +42 -0
  204. package/src/actor/contexts/before-connect.ts +31 -0
  205. package/src/actor/contexts/connect.ts +42 -0
  206. package/src/actor/contexts/create-conn-state.ts +32 -0
  207. package/src/actor/contexts/create-vars.ts +39 -0
  208. package/src/actor/contexts/create.ts +39 -0
  209. package/src/actor/contexts/destroy.ts +42 -0
  210. package/src/actor/contexts/disconnect.ts +43 -0
  211. package/src/actor/contexts/index.ts +33 -0
  212. package/src/actor/contexts/request.ts +80 -0
  213. package/src/actor/contexts/run.ts +47 -0
  214. package/src/actor/contexts/sleep.ts +42 -0
  215. package/src/actor/contexts/state-change.ts +42 -0
  216. package/src/actor/contexts/wake.ts +42 -0
  217. package/src/actor/contexts/websocket.ts +80 -0
  218. package/src/actor/database.ts +13 -0
  219. package/src/actor/definition.ts +64 -0
  220. package/src/actor/driver.ts +114 -0
  221. package/src/actor/errors.ts +556 -0
  222. package/src/actor/instance/connection-manager.ts +574 -0
  223. package/src/actor/instance/event-manager.ts +314 -0
  224. package/src/actor/instance/keys.ts +146 -0
  225. package/src/actor/instance/kv.ts +241 -0
  226. package/src/actor/instance/mod.ts +1658 -0
  227. package/src/actor/instance/persisted.ts +67 -0
  228. package/src/actor/instance/queue-manager.ts +603 -0
  229. package/src/actor/instance/queue.ts +345 -0
  230. package/src/actor/instance/schedule-manager.ts +392 -0
  231. package/src/actor/instance/state-manager.ts +542 -0
  232. package/src/actor/instance/traces-driver.ts +128 -0
  233. package/src/actor/keys.test.ts +275 -0
  234. package/src/actor/keys.ts +89 -0
  235. package/src/actor/log.ts +6 -0
  236. package/src/actor/mod.ts +110 -0
  237. package/src/actor/protocol/old.ts +416 -0
  238. package/src/actor/protocol/serde.ts +222 -0
  239. package/src/actor/router-endpoints.ts +400 -0
  240. package/src/actor/router-websocket-endpoints.test.ts +54 -0
  241. package/src/actor/router-websocket-endpoints.ts +405 -0
  242. package/src/actor/router.ts +380 -0
  243. package/src/actor/schedule.ts +17 -0
  244. package/src/actor/schema.ts +291 -0
  245. package/src/actor/utils.test.ts +48 -0
  246. package/src/actor/utils.ts +158 -0
  247. package/src/client/actor-common.ts +32 -0
  248. package/src/client/actor-conn.ts +1262 -0
  249. package/src/client/actor-handle.ts +344 -0
  250. package/src/client/actor-query.ts +112 -0
  251. package/src/client/client.ts +558 -0
  252. package/src/client/config.ts +151 -0
  253. package/src/client/errors.ts +76 -0
  254. package/src/client/log.ts +5 -0
  255. package/src/client/mod.browser.ts +2 -0
  256. package/src/client/mod.ts +70 -0
  257. package/src/client/queue.ts +146 -0
  258. package/src/client/raw-utils.ts +149 -0
  259. package/src/client/test.ts +44 -0
  260. package/src/client/utils.ts +252 -0
  261. package/src/common/actor-router-consts.ts +59 -0
  262. package/src/common/cors.ts +57 -0
  263. package/src/common/eventsource-interface.ts +47 -0
  264. package/src/common/eventsource.ts +44 -0
  265. package/src/common/inline-websocket-adapter.ts +154 -0
  266. package/src/common/log-levels.ts +27 -0
  267. package/src/common/log.ts +229 -0
  268. package/src/common/logfmt.ts +221 -0
  269. package/src/common/network.ts +2 -0
  270. package/src/common/router.ts +174 -0
  271. package/src/common/utils.ts +339 -0
  272. package/src/common/websocket-interface.ts +7 -0
  273. package/src/common/websocket.ts +43 -0
  274. package/src/db/config.ts +100 -0
  275. package/src/db/drizzle/mod.ts +226 -0
  276. package/src/db/drizzle/sqlite-core.ts +22 -0
  277. package/src/db/mod.ts +125 -0
  278. package/src/db/shared.ts +92 -0
  279. package/src/db/sqlite-vfs.ts +12 -0
  280. package/src/devtools-loader/index.ts +33 -0
  281. package/src/devtools-loader/log.ts +5 -0
  282. package/src/driver-helpers/mod.ts +33 -0
  283. package/src/driver-helpers/utils.ts +54 -0
  284. package/src/driver-test-suite/log.ts +5 -0
  285. package/src/driver-test-suite/mod.ts +293 -0
  286. package/src/driver-test-suite/test-inline-client-driver.ts +307 -0
  287. package/src/driver-test-suite/tests/access-control.ts +218 -0
  288. package/src/driver-test-suite/tests/action-features.ts +203 -0
  289. package/src/driver-test-suite/tests/actor-conn-hibernation.ts +152 -0
  290. package/src/driver-test-suite/tests/actor-conn-state.ts +300 -0
  291. package/src/driver-test-suite/tests/actor-conn.ts +596 -0
  292. package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
  293. package/src/driver-test-suite/tests/actor-db.ts +477 -0
  294. package/src/driver-test-suite/tests/actor-destroy.ts +294 -0
  295. package/src/driver-test-suite/tests/actor-driver.ts +18 -0
  296. package/src/driver-test-suite/tests/actor-error-handling.ts +150 -0
  297. package/src/driver-test-suite/tests/actor-handle.ts +312 -0
  298. package/src/driver-test-suite/tests/actor-inline-client.ts +163 -0
  299. package/src/driver-test-suite/tests/actor-inspector.ts +264 -0
  300. package/src/driver-test-suite/tests/actor-kv.ts +65 -0
  301. package/src/driver-test-suite/tests/actor-metadata.ts +116 -0
  302. package/src/driver-test-suite/tests/actor-onstatechange.ts +95 -0
  303. package/src/driver-test-suite/tests/actor-queue.ts +325 -0
  304. package/src/driver-test-suite/tests/actor-run.ts +181 -0
  305. package/src/driver-test-suite/tests/actor-schedule.ts +97 -0
  306. package/src/driver-test-suite/tests/actor-sleep.ts +415 -0
  307. package/src/driver-test-suite/tests/actor-state.ts +54 -0
  308. package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
  309. package/src/driver-test-suite/tests/actor-vars.ts +97 -0
  310. package/src/driver-test-suite/tests/actor-workflow.ts +118 -0
  311. package/src/driver-test-suite/tests/manager-driver.ts +388 -0
  312. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -0
  313. package/src/driver-test-suite/tests/raw-http-request-properties.ts +454 -0
  314. package/src/driver-test-suite/tests/raw-http.ts +359 -0
  315. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -0
  316. package/src/driver-test-suite/tests/raw-websocket.ts +513 -0
  317. package/src/driver-test-suite/tests/request-access.ts +240 -0
  318. package/src/driver-test-suite/utils.ts +80 -0
  319. package/src/drivers/default.ts +38 -0
  320. package/src/drivers/engine/actor-driver.ts +1027 -0
  321. package/src/drivers/engine/config.ts +43 -0
  322. package/src/drivers/engine/log.ts +5 -0
  323. package/src/drivers/engine/mod.ts +36 -0
  324. package/src/drivers/file-system/actor.ts +102 -0
  325. package/src/drivers/file-system/global-state.ts +1445 -0
  326. package/src/drivers/file-system/kv-limits.ts +70 -0
  327. package/src/drivers/file-system/log.ts +5 -0
  328. package/src/drivers/file-system/manager.ts +300 -0
  329. package/src/drivers/file-system/mod.ts +78 -0
  330. package/src/drivers/file-system/sqlite-runtime.ts +210 -0
  331. package/src/drivers/file-system/utils.ts +125 -0
  332. package/src/engine-process/constants.ts +2 -0
  333. package/src/engine-process/log.ts +5 -0
  334. package/src/engine-process/mod.ts +464 -0
  335. package/src/globals.d.ts +35 -0
  336. package/src/inspector/actor-inspector.ts +352 -0
  337. package/src/inspector/config.ts +49 -0
  338. package/src/inspector/handler.ts +273 -0
  339. package/src/inspector/log.ts +5 -0
  340. package/src/inspector/mod.browser.ts +8 -0
  341. package/src/inspector/mod.ts +4 -0
  342. package/src/inspector/serve-ui.ts +40 -0
  343. package/src/inspector/transport.ts +18 -0
  344. package/src/inspector/utils.ts +32 -0
  345. package/src/manager/driver.ts +106 -0
  346. package/src/manager/gateway.ts +668 -0
  347. package/src/manager/log.ts +5 -0
  348. package/src/manager/mod.ts +2 -0
  349. package/src/manager/protocol/mod.ts +22 -0
  350. package/src/manager/protocol/query.ts +85 -0
  351. package/src/manager/router-schema.ts +22 -0
  352. package/src/manager/router.ts +660 -0
  353. package/src/manager-api/actors.ts +83 -0
  354. package/src/manager-api/common.ts +4 -0
  355. package/src/mod.ts +24 -0
  356. package/src/registry/config/driver.ts +21 -0
  357. package/src/registry/config/index.ts +510 -0
  358. package/src/registry/config/legacy-runner.ts +157 -0
  359. package/src/registry/config/runner.ts +21 -0
  360. package/src/registry/config/serverless.ts +94 -0
  361. package/src/registry/index.ts +194 -0
  362. package/src/registry/log.ts +5 -0
  363. package/src/remote-manager-driver/actor-http-client.ts +84 -0
  364. package/src/remote-manager-driver/actor-websocket-client.ts +81 -0
  365. package/src/remote-manager-driver/api-endpoints.ts +159 -0
  366. package/src/remote-manager-driver/api-utils.ts +69 -0
  367. package/src/remote-manager-driver/log.ts +5 -0
  368. package/src/remote-manager-driver/metadata.ts +64 -0
  369. package/src/remote-manager-driver/mod.ts +414 -0
  370. package/src/remote-manager-driver/ws-proxy.ts +189 -0
  371. package/src/schemas/actor-inspector/mod.ts +1 -0
  372. package/src/schemas/actor-inspector/versioned.ts +233 -0
  373. package/src/schemas/actor-persist/mod.ts +1 -0
  374. package/src/schemas/actor-persist/versioned.ts +217 -0
  375. package/src/schemas/client-protocol/mod.ts +1 -0
  376. package/src/schemas/client-protocol/versioned.ts +330 -0
  377. package/src/schemas/client-protocol-zod/mod.ts +118 -0
  378. package/src/schemas/file-system-driver/mod.ts +1 -0
  379. package/src/schemas/file-system-driver/versioned.ts +135 -0
  380. package/src/schemas/persist/mod.ts +1 -0
  381. package/src/schemas/transport/mod.ts +1 -0
  382. package/src/serde.ts +138 -0
  383. package/src/serve-test-suite/mod.ts +148 -0
  384. package/src/serverless/configure.ts +82 -0
  385. package/src/serverless/log.ts +5 -0
  386. package/src/serverless/router.test.ts +299 -0
  387. package/src/serverless/router.ts +215 -0
  388. package/src/test/log.ts +5 -0
  389. package/src/test/mod.ts +99 -0
  390. package/src/utils/crypto.ts +24 -0
  391. package/src/utils/endpoint-parser.test.ts +202 -0
  392. package/src/utils/endpoint-parser.ts +124 -0
  393. package/src/utils/env-vars.ts +78 -0
  394. package/src/utils/node.ts +178 -0
  395. package/src/utils/router.ts +83 -0
  396. package/src/utils/serve.ts +212 -0
  397. package/src/utils.test.ts +34 -0
  398. package/src/utils.ts +437 -0
  399. package/src/workflow/constants.ts +2 -0
  400. package/src/workflow/context.ts +597 -0
  401. package/src/workflow/driver.ts +194 -0
  402. package/src/workflow/inspector.ts +268 -0
  403. package/src/workflow/mod.ts +128 -0
@@ -0,0 +1,61 @@
1
+ import type { AnyConn } from "@/actor/conn/mod";
2
+ import type { AnyActorInstance } from "@/actor/instance/mod";
3
+ import type { CachedSerializer } from "@/actor/protocol/serde";
4
+
5
+ export enum DriverReadyState {
6
+ UNKNOWN = -1,
7
+ CONNECTING = 0,
8
+ OPEN = 1,
9
+ CLOSING = 2,
10
+ CLOSED = 3,
11
+ }
12
+
13
+ export interface ConnDriver {
14
+ /** The type of driver. Used for debug purposes only. */
15
+ type: string;
16
+
17
+ /**
18
+ * If defined, this connection driver talks the RivetKit client driver (see
19
+ * schemas/client-protocol/).
20
+ *
21
+ * If enabled, events like `Init`, subscription events, etc. will be sent
22
+ * to this connection.
23
+ */
24
+ rivetKitProtocol?: {
25
+ /** Sends a RivetKit client message. */
26
+ sendMessage(
27
+ actor: AnyActorInstance,
28
+ conn: AnyConn,
29
+ message: CachedSerializer<any, any, any>,
30
+ ): void;
31
+ };
32
+
33
+ /**
34
+ * If the connection can be hibernated. If true, this will allow the actor to go to sleep while the connection is still active.
35
+ **/
36
+ hibernatable?: {
37
+ gatewayId: ArrayBuffer;
38
+ requestId: ArrayBuffer;
39
+ };
40
+
41
+ /**
42
+ * This returns a promise since we commonly disconnect at the end of a program, and not waiting will cause the socket to not close cleanly.
43
+ */
44
+ disconnect(
45
+ actor: AnyActorInstance,
46
+ conn: AnyConn,
47
+ reason?: string,
48
+ ): Promise<void>;
49
+
50
+ /** Terminates the connection without graceful handling. */
51
+ terminate?(actor: AnyActorInstance, conn: AnyConn): void;
52
+
53
+ /**
54
+ * Returns the ready state of the connection.
55
+ * This is used to determine if the connection is ready to send messages, or if the connection is stale.
56
+ */
57
+ getConnectionReadyState(
58
+ actor: AnyActorInstance,
59
+ conn: AnyConn,
60
+ ): DriverReadyState | undefined;
61
+ }
@@ -0,0 +1,17 @@
1
+ import { type ConnDriver, DriverReadyState } from "../driver";
2
+
3
+ export type ConnHttpState = Record<never, never>;
4
+
5
+ export function createHttpDriver(): ConnDriver {
6
+ return {
7
+ type: "http",
8
+ getConnectionReadyState(_actor, _conn) {
9
+ // TODO: This might not be the correct logic
10
+ return DriverReadyState.OPEN;
11
+ },
12
+ disconnect: async () => {
13
+ // Noop
14
+ // TODO: Configure with abort signals to abort the request
15
+ },
16
+ };
17
+ }
@@ -0,0 +1,24 @@
1
+ import type { ConnDriver } from "../driver";
2
+ import { DriverReadyState } from "../driver";
3
+
4
+ /**
5
+ * Creates a raw HTTP connection driver.
6
+ *
7
+ * This driver is used for raw HTTP connections that don't use the RivetKit protocol.
8
+ * Unlike the standard HTTP driver, this provides connection lifecycle management
9
+ * for tracking the HTTP request through the actor's onRequest handler.
10
+ */
11
+ export function createRawRequestDriver(): ConnDriver {
12
+ return {
13
+ type: "raw-request",
14
+
15
+ disconnect: async () => {
16
+ // Noop
17
+ },
18
+
19
+ getConnectionReadyState: (): DriverReadyState | undefined => {
20
+ // HTTP connections are always considered open until the request completes
21
+ return DriverReadyState.OPEN;
22
+ },
23
+ };
24
+ }
@@ -0,0 +1,65 @@
1
+ import type { AnyConn } from "@/actor/conn/mod";
2
+ import type { AnyActorInstance } from "@/actor/instance/mod";
3
+ import type { UniversalWebSocket } from "@/common/websocket-interface";
4
+ import { loggerWithoutContext } from "../../log";
5
+ import { type ConnDriver, DriverReadyState } from "../driver";
6
+
7
+ /**
8
+ * Creates a raw WebSocket connection driver.
9
+ *
10
+ * This driver is used for raw WebSocket connections that don't use the RivetKit protocol.
11
+ * Unlike the standard WebSocket driver, this doesn't have sendMessage since raw WebSockets
12
+ * don't handle messages from the RivetKit protocol - they handle messages directly in the
13
+ * actor's onWebSocket handler.
14
+ */
15
+ export function createRawWebSocketDriver(
16
+ hibernatable: ConnDriver["hibernatable"],
17
+ closePromise: Promise<void>,
18
+ ): { driver: ConnDriver; setWebSocket(ws: UniversalWebSocket): void } {
19
+ let websocket: UniversalWebSocket | undefined;
20
+
21
+ const driver: ConnDriver = {
22
+ type: "raw-websocket",
23
+ hibernatable,
24
+
25
+ // No sendMessage implementation since this is a raw WebSocket that doesn't
26
+ // handle messages from the RivetKit protocol
27
+
28
+ disconnect: async (
29
+ _actor: AnyActorInstance,
30
+ _conn: AnyConn,
31
+ reason?: string,
32
+ ) => {
33
+ if (!websocket) {
34
+ loggerWithoutContext().warn(
35
+ "disconnecting raw ws without websocket",
36
+ );
37
+ return;
38
+ }
39
+
40
+ // Close socket
41
+ websocket.close(1000, reason);
42
+
43
+ // Wait for socket to close gracefully
44
+ await closePromise;
45
+ },
46
+
47
+ terminate: () => {
48
+ (websocket as any)?.terminate?.();
49
+ },
50
+
51
+ getConnectionReadyState: (
52
+ _actor: AnyActorInstance,
53
+ _conn: AnyConn,
54
+ ): DriverReadyState | undefined => {
55
+ return websocket?.readyState ?? DriverReadyState.CONNECTING;
56
+ },
57
+ };
58
+
59
+ return {
60
+ driver,
61
+ setWebSocket(ws) {
62
+ websocket = ws;
63
+ },
64
+ };
65
+ }
@@ -0,0 +1,144 @@
1
+ import type { WSContext } from "hono/ws";
2
+ import type { AnyConn } from "@/actor/conn/mod";
3
+ import type { AnyActorInstance } from "@/actor/instance/mod";
4
+ import type { CachedSerializer, Encoding } from "@/actor/protocol/serde";
5
+ import * as errors from "@/actor/errors";
6
+ import { loggerWithoutContext } from "../../log";
7
+ import { type ConnDriver, DriverReadyState } from "../driver";
8
+ import { RegistryConfig } from "@/registry/config";
9
+
10
+ export type ConnDriverWebSocketState = Record<never, never>;
11
+
12
+ export function createWebSocketDriver(
13
+ hibernatable: ConnDriver["hibernatable"],
14
+ encoding: Encoding,
15
+ closePromise: Promise<void>,
16
+ config: RegistryConfig,
17
+ ): { driver: ConnDriver; setWebSocket(ws: WSContext): void } {
18
+ loggerWithoutContext().debug({
19
+ msg: "createWebSocketDriver creating driver",
20
+ hibernatable,
21
+ });
22
+ // Wait for WS to open
23
+ let websocket: WSContext | undefined;
24
+
25
+ const driver: ConnDriver = {
26
+ type: "websocket",
27
+ hibernatable,
28
+ rivetKitProtocol: {
29
+ sendMessage: (
30
+ actor: AnyActorInstance,
31
+ conn: AnyConn,
32
+ message: CachedSerializer<any, any, any>,
33
+ ) => {
34
+ if (!websocket) {
35
+ actor.rLog.warn({
36
+ msg: "websocket not open",
37
+ connId: conn.id,
38
+ });
39
+ return;
40
+ }
41
+ if (websocket.readyState !== DriverReadyState.OPEN) {
42
+ actor.rLog.warn({
43
+ msg: "attempting to send message to closed websocket, this is likely a bug in RivetKit",
44
+ connId: conn.id,
45
+ wsReadyState: websocket.readyState,
46
+ });
47
+ return;
48
+ }
49
+
50
+ const serialized = message.serialize(encoding);
51
+
52
+ actor.rLog.debug({
53
+ msg: "sending websocket message",
54
+ encoding: encoding,
55
+ dataType: typeof serialized,
56
+ isUint8Array: serialized instanceof Uint8Array,
57
+ isArrayBuffer: serialized instanceof ArrayBuffer,
58
+ dataLength:
59
+ (serialized as any).byteLength ||
60
+ (serialized as any).length,
61
+ });
62
+
63
+ // Check outgoing message size
64
+ const messageSize =
65
+ (serialized as any).byteLength || (serialized as any).length;
66
+ if (messageSize > config.maxOutgoingMessageSize) {
67
+ actor.rLog.error({
68
+ msg: "outgoing message exceeds maxOutgoingMessageSize",
69
+ messageSize,
70
+ maxOutgoingMessageSize: config.maxOutgoingMessageSize,
71
+ });
72
+ throw new errors.OutgoingMessageTooLong();
73
+ }
74
+
75
+ // Convert Uint8Array to ArrayBuffer for proper transmission
76
+ if (serialized instanceof Uint8Array) {
77
+ const buffer = serialized.buffer.slice(
78
+ serialized.byteOffset,
79
+ serialized.byteOffset + serialized.byteLength,
80
+ );
81
+ // Handle SharedArrayBuffer case
82
+ if (buffer instanceof SharedArrayBuffer) {
83
+ const arrayBuffer = new ArrayBuffer(buffer.byteLength);
84
+ new Uint8Array(arrayBuffer).set(new Uint8Array(buffer));
85
+ actor.rLog.debug({
86
+ msg: "converted SharedArrayBuffer to ArrayBuffer",
87
+ byteLength: arrayBuffer.byteLength,
88
+ });
89
+ websocket.send(arrayBuffer);
90
+ } else {
91
+ actor.rLog.debug({
92
+ msg: "sending ArrayBuffer",
93
+ byteLength: buffer.byteLength,
94
+ });
95
+ websocket.send(buffer);
96
+ }
97
+ } else {
98
+ actor.rLog.debug({
99
+ msg: "sending string data",
100
+ length: (serialized as string).length,
101
+ });
102
+ websocket.send(serialized);
103
+ }
104
+ },
105
+ },
106
+
107
+ disconnect: async (
108
+ _actor: AnyActorInstance,
109
+ _conn: AnyConn,
110
+ reason?: string,
111
+ ) => {
112
+ if (!websocket) {
113
+ loggerWithoutContext().warn(
114
+ "disconnecting ws without websocket",
115
+ );
116
+ return;
117
+ }
118
+
119
+ // Close socket
120
+ websocket.close(1000, reason);
121
+
122
+ // Create promise to wait for socket to close gracefully
123
+ await closePromise;
124
+ },
125
+
126
+ terminate: () => {
127
+ (websocket as any).terminate();
128
+ },
129
+
130
+ getConnectionReadyState: (
131
+ _actor: AnyActorInstance,
132
+ _conn: AnyConn,
133
+ ): DriverReadyState | undefined => {
134
+ return websocket?.readyState ?? DriverReadyState.CONNECTING;
135
+ },
136
+ };
137
+
138
+ return {
139
+ driver,
140
+ setWebSocket(ws) {
141
+ websocket = ws;
142
+ },
143
+ };
144
+ }
@@ -0,0 +1,288 @@
1
+ import * as cbor from "cbor-x";
2
+ import type * as protocol from "@/schemas/client-protocol/mod";
3
+ import {
4
+ CURRENT_VERSION as CLIENT_PROTOCOL_CURRENT_VERSION,
5
+ TO_CLIENT_VERSIONED,
6
+ } from "@/schemas/client-protocol/versioned";
7
+ import {
8
+ type ToClient as ToClientJson,
9
+ ToClientSchema,
10
+ } from "@/schemas/client-protocol-zod/mod";
11
+ import { bufferToArrayBuffer } from "@/utils";
12
+ import type { AnyDatabaseProvider } from "../database";
13
+ import { EventPayloadInvalid, InternalError } from "../errors";
14
+ import type { ActorInstance } from "../instance/mod";
15
+ import { CachedSerializer } from "../protocol/serde";
16
+ import {
17
+ type EventSchemaConfig,
18
+ hasSchemaConfigKey,
19
+ type InferEventArgs,
20
+ type InferSchemaMap,
21
+ type QueueSchemaConfig,
22
+ validateSchemaSync,
23
+ } from "../schema";
24
+ import type { ConnDriver } from "./driver";
25
+ import { type ConnDataInput, StateManager } from "./state-manager";
26
+
27
+ export type ConnId = string;
28
+
29
+ export type AnyConn = Conn<any, any, any, any, any, any, any, any>;
30
+
31
+ export const CONN_CONNECTED_SYMBOL = Symbol("connected");
32
+ export const CONN_SPEAKS_RIVETKIT_SYMBOL = Symbol("speaksRivetKit");
33
+ export const CONN_DRIVER_SYMBOL = Symbol("driver");
34
+ export const CONN_ACTOR_SYMBOL = Symbol("actor");
35
+ export const CONN_STATE_MANAGER_SYMBOL = Symbol("stateManager");
36
+ export const CONN_SEND_MESSAGE_SYMBOL = Symbol("sendMessage");
37
+
38
+ /**
39
+ * Represents a client connection to a actor.
40
+ *
41
+ * Manages connection-specific data and controls the connection lifecycle.
42
+ *
43
+ * @see {@link https://rivet.dev/docs/connections|Connection Documentation}
44
+ */
45
+ export class Conn<
46
+ S,
47
+ CP,
48
+ CS,
49
+ V,
50
+ I,
51
+ DB extends AnyDatabaseProvider,
52
+ E extends EventSchemaConfig = Record<never, never>,
53
+ Q extends QueueSchemaConfig = Record<never, never>,
54
+ > {
55
+ #actor: ActorInstance<S, CP, CS, V, I, DB, E, Q>;
56
+
57
+ get [CONN_ACTOR_SYMBOL](): ActorInstance<S, CP, CS, V, I, DB, E, Q> {
58
+ return this.#actor;
59
+ }
60
+
61
+ #stateManager!: StateManager<CP, CS>;
62
+
63
+ get [CONN_STATE_MANAGER_SYMBOL]() {
64
+ return this.#stateManager;
65
+ }
66
+
67
+ /**
68
+ * Connections exist before being connected to an actor. If true, this
69
+ * connection has been connected.
70
+ **/
71
+ [CONN_CONNECTED_SYMBOL] = false;
72
+
73
+ /**
74
+ * If undefined, then no socket is connected to this conn
75
+ */
76
+ [CONN_DRIVER_SYMBOL]?: ConnDriver;
77
+
78
+ /**
79
+ * If this connection is speaking the RivetKit protocol. If false, this is
80
+ * a raw connection for WebSocket or fetch or inspector.
81
+ **/
82
+ get [CONN_SPEAKS_RIVETKIT_SYMBOL](): boolean {
83
+ return this[CONN_DRIVER_SYMBOL]?.rivetKitProtocol !== undefined;
84
+ }
85
+
86
+ subscriptions: Set<string> = new Set<string>();
87
+
88
+ #assertConnected() {
89
+ if (!this[CONN_CONNECTED_SYMBOL])
90
+ throw new InternalError(
91
+ "Connection not connected yet. This happens when trying to use the connection in onBeforeConnect or createConnState.",
92
+ );
93
+ }
94
+
95
+ // MARK: - Public Getters
96
+ get params(): CP {
97
+ return this.#stateManager.ephemeralData.parameters;
98
+ }
99
+
100
+ /**
101
+ * Gets the current state of the connection.
102
+ *
103
+ * Throws an error if the state is not enabled.
104
+ */
105
+ get state(): CS {
106
+ return this.#stateManager.state;
107
+ }
108
+
109
+ /**
110
+ * Sets the state of the connection.
111
+ *
112
+ * Throws an error if the state is not enabled.
113
+ */
114
+ set state(value: CS) {
115
+ this.#stateManager.state = value;
116
+ }
117
+
118
+ /**
119
+ * Unique identifier for the connection.
120
+ */
121
+ get id(): ConnId {
122
+ return this.#stateManager.ephemeralData.id;
123
+ }
124
+
125
+ /**
126
+ * @experimental
127
+ *
128
+ * If the underlying connection can hibernate.
129
+ */
130
+ get isHibernatable(): boolean {
131
+ return this.#stateManager.hibernatableDataRaw !== undefined;
132
+ }
133
+
134
+ /**
135
+ * Initializes a new instance of the Connection class.
136
+ *
137
+ * This should only be constructed by {@link Actor}.
138
+ *
139
+ * @protected
140
+ */
141
+ constructor(
142
+ actor: ActorInstance<S, CP, CS, V, I, DB, E, Q>,
143
+ data: ConnDataInput<CP, CS>,
144
+ ) {
145
+ this.#actor = actor;
146
+ this.#stateManager = new StateManager(this, data);
147
+ }
148
+
149
+ /**
150
+ * Sends a raw message to the underlying connection.
151
+ */
152
+ [CONN_SEND_MESSAGE_SYMBOL](message: CachedSerializer<any, any, any>) {
153
+ if (this[CONN_DRIVER_SYMBOL]) {
154
+ const driver = this[CONN_DRIVER_SYMBOL];
155
+
156
+ if (driver.rivetKitProtocol) {
157
+ driver.rivetKitProtocol.sendMessage(this.#actor, this, message);
158
+ } else {
159
+ this.#actor.rLog.warn({
160
+ msg: "attempting to send RivetKit protocol message to connection that does not support it",
161
+ conn: this.id,
162
+ });
163
+ }
164
+ } else {
165
+ this.#actor.rLog.warn({
166
+ msg: "missing connection driver state for send message",
167
+ conn: this.id,
168
+ });
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Sends an event with arguments to the client.
174
+ *
175
+ * @param eventName - The name of the event.
176
+ * @param args - The arguments for the event.
177
+ * @see {@link https://rivet.dev/docs/events|Events Documentation}
178
+ */
179
+ send<K extends keyof E & string>(
180
+ eventName: K,
181
+ ...args: InferEventArgs<InferSchemaMap<E>[K]>
182
+ ): void;
183
+ send(
184
+ eventName: keyof E extends never ? string : never,
185
+ ...args: unknown[]
186
+ ): void;
187
+ send(eventName: string, ...args: unknown[]) {
188
+ this.#assertConnected();
189
+ if (!this[CONN_SPEAKS_RIVETKIT_SYMBOL]) {
190
+ this.#actor.rLog.warn({
191
+ msg: "cannot send messages to this connection type",
192
+ connId: this.id,
193
+ connType: this[CONN_DRIVER_SYMBOL]?.type,
194
+ });
195
+ }
196
+
197
+ if (
198
+ this.#actor.config.events !== undefined &&
199
+ !hasSchemaConfigKey(this.#actor.config.events, eventName)
200
+ ) {
201
+ this.#actor.rLog.warn({
202
+ msg: "sending event not defined in actor events config",
203
+ eventName,
204
+ connId: this.id,
205
+ });
206
+ }
207
+
208
+ const payload = args.length === 1 ? args[0] : args;
209
+ const result = validateSchemaSync(
210
+ this.#actor.config.events,
211
+ eventName as keyof E & string,
212
+ payload,
213
+ );
214
+ if (!result.success) {
215
+ throw new EventPayloadInvalid(eventName, result.issues);
216
+ }
217
+ const eventArgs =
218
+ args.length === 1
219
+ ? [result.data]
220
+ : Array.isArray(result.data)
221
+ ? (result.data as unknown[])
222
+ : args;
223
+ this.#actor.emitTraceEvent("message.send", {
224
+ "rivet.event.name": eventName,
225
+ "rivet.conn.id": this.id,
226
+ });
227
+ const eventData = { name: eventName, args: eventArgs };
228
+ this[CONN_SEND_MESSAGE_SYMBOL](
229
+ new CachedSerializer(
230
+ eventData,
231
+ TO_CLIENT_VERSIONED,
232
+ CLIENT_PROTOCOL_CURRENT_VERSION,
233
+ ToClientSchema,
234
+ // JSON: args is the raw value (array of arguments)
235
+ (value): ToClientJson => ({
236
+ body: {
237
+ tag: "Event" as const,
238
+ val: {
239
+ name: value.name,
240
+ args: value.args,
241
+ },
242
+ },
243
+ }),
244
+ // BARE/CBOR: args needs to be CBOR-encoded to ArrayBuffer
245
+ (value): protocol.ToClient => ({
246
+ body: {
247
+ tag: "Event" as const,
248
+ val: {
249
+ name: value.name,
250
+ args: bufferToArrayBuffer(cbor.encode(value.args)),
251
+ },
252
+ },
253
+ }),
254
+ ),
255
+ );
256
+ }
257
+
258
+ /**
259
+ * Disconnects the client with an optional reason.
260
+ *
261
+ * @param reason - The reason for disconnection.
262
+ */
263
+ async disconnect(reason?: string) {
264
+ if (this[CONN_DRIVER_SYMBOL]) {
265
+ const driver = this[CONN_DRIVER_SYMBOL];
266
+ if (driver.disconnect) {
267
+ driver.disconnect(this.#actor, this, reason);
268
+ } else {
269
+ this.#actor.rLog.debug({
270
+ msg: "no disconnect handler for conn driver",
271
+ conn: this.id,
272
+ });
273
+ }
274
+
275
+ try {
276
+ await this.#actor.connectionManager.connDisconnected(this);
277
+ } finally {
278
+ this[CONN_DRIVER_SYMBOL] = undefined;
279
+ }
280
+ } else {
281
+ this.#actor.rLog.warn({
282
+ msg: "missing connection driver state for disconnect",
283
+ conn: this.id,
284
+ });
285
+ this[CONN_DRIVER_SYMBOL] = undefined;
286
+ }
287
+ }
288
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Persisted data structures for connections.
3
+ *
4
+ * Keep this file in sync with the Connection section of rivetkit-typescript/packages/rivetkit/schemas/actor-persist/
5
+ */
6
+
7
+ import * as cbor from "cbor-x";
8
+ import type * as persistSchema from "@/schemas/actor-persist/mod";
9
+ import { bufferToArrayBuffer } from "@/utils";
10
+
11
+ export type GatewayId = ArrayBuffer;
12
+ export type RequestId = ArrayBuffer;
13
+
14
+ export type Cbor = ArrayBuffer;
15
+
16
+ // MARK: Connection
17
+ /** Event subscription for connection */
18
+ export interface PersistedSubscription {
19
+ eventName: string;
20
+ }
21
+
22
+ /** Connection associated with hibernatable WebSocket that should persist across lifecycles */
23
+ export interface PersistedConn<CP, CS> {
24
+ /** Connection ID generated by RivetKit */
25
+ id: string;
26
+ parameters: CP;
27
+ state: CS;
28
+ subscriptions: PersistedSubscription[];
29
+ gatewayId: GatewayId;
30
+ requestId: RequestId;
31
+ serverMessageIndex: number;
32
+ clientMessageIndex: number;
33
+ requestPath: string;
34
+ requestHeaders: Record<string, string>;
35
+ }
36
+
37
+ /**
38
+ * Converts persisted connection data to BARE schema format for serialization.
39
+ * @throws {Error} If the connection is ephemeral (not hibernatable)
40
+ */
41
+ export function convertConnToBarePersistedConn<CP, CS>(
42
+ persist: PersistedConn<CP, CS>,
43
+ ): persistSchema.Conn {
44
+ return {
45
+ id: persist.id,
46
+ parameters: bufferToArrayBuffer(cbor.encode(persist.parameters)),
47
+ state: bufferToArrayBuffer(cbor.encode(persist.state)),
48
+ subscriptions: persist.subscriptions.map((sub) => ({
49
+ eventName: sub.eventName,
50
+ })),
51
+ gatewayId: persist.gatewayId,
52
+ requestId: persist.requestId,
53
+ serverMessageIndex: persist.serverMessageIndex,
54
+ clientMessageIndex: persist.clientMessageIndex,
55
+ requestPath: persist.requestPath,
56
+ requestHeaders: new Map(Object.entries(persist.requestHeaders)),
57
+ };
58
+ }
59
+
60
+ /**
61
+ * Converts BARE schema format to persisted connection data.
62
+ * @throws {Error} If the connection is ephemeral (not hibernatable)
63
+ */
64
+ export function convertConnFromBarePersistedConn<CP, CS>(
65
+ bareData: persistSchema.Conn,
66
+ ): PersistedConn<CP, CS> {
67
+ return {
68
+ id: bareData.id,
69
+ parameters: cbor.decode(new Uint8Array(bareData.parameters)),
70
+ state: cbor.decode(new Uint8Array(bareData.state)),
71
+ subscriptions: bareData.subscriptions.map((sub) => ({
72
+ eventName: sub.eventName,
73
+ })),
74
+ gatewayId: bareData.gatewayId,
75
+ requestId: bareData.requestId,
76
+ serverMessageIndex: bareData.serverMessageIndex,
77
+ clientMessageIndex: bareData.clientMessageIndex,
78
+ requestPath: bareData.requestPath,
79
+ requestHeaders: Object.fromEntries(bareData.requestHeaders),
80
+ };
81
+ }