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,668 @@
1
+ import type { Context as HonoContext, Next } from "hono";
2
+ import type { WSContext } from "hono/ws";
3
+ import invariant from "invariant";
4
+ import { MissingActorHeader, WebSocketsNotEnabled } from "@/actor/errors";
5
+ import {
6
+ parseWebSocketProtocols,
7
+ type UpgradeWebSocketArgs,
8
+ } from "@/actor/router-websocket-endpoints";
9
+ import {
10
+ HEADER_RIVET_ACTOR,
11
+ HEADER_RIVET_TARGET,
12
+ WS_PROTOCOL_ACTOR,
13
+ WS_PROTOCOL_CONN_PARAMS,
14
+ WS_PROTOCOL_ENCODING,
15
+ WS_PROTOCOL_TARGET,
16
+ } from "@/common/actor-router-consts";
17
+ import type { UniversalWebSocket } from "@/mod";
18
+ import type { RegistryConfig } from "@/registry/config";
19
+ import { type GetUpgradeWebSocket, promiseWithResolvers } from "@/utils";
20
+ import type { ManagerDriver } from "./driver";
21
+ import { logger } from "./log";
22
+
23
+ interface ActorPathInfo {
24
+ actorId: string;
25
+ token?: string;
26
+ remainingPath: string;
27
+ }
28
+
29
+ /**
30
+ * Handle path-based WebSocket routing
31
+ */
32
+ async function handleWebSocketGatewayPathBased(
33
+ config: RegistryConfig,
34
+ managerDriver: ManagerDriver,
35
+ c: HonoContext,
36
+ actorPathInfo: ActorPathInfo,
37
+ getUpgradeWebSocket: GetUpgradeWebSocket | undefined,
38
+ ): Promise<Response> {
39
+ const upgradeWebSocket = getUpgradeWebSocket?.();
40
+ if (!upgradeWebSocket) {
41
+ throw new WebSocketsNotEnabled();
42
+ }
43
+
44
+ // NOTE: Token validation implemented in EE
45
+
46
+ // Parse additional configuration from Sec-WebSocket-Protocol header
47
+ const { encoding, connParams } = parseWebSocketProtocols(
48
+ c.req.header("sec-websocket-protocol"),
49
+ );
50
+
51
+ logger().debug({
52
+ msg: "proxying websocket to actor via path-based routing",
53
+ actorId: actorPathInfo.actorId,
54
+ path: actorPathInfo.remainingPath,
55
+ encoding,
56
+ });
57
+
58
+ return await managerDriver.proxyWebSocket(
59
+ c,
60
+ actorPathInfo.remainingPath,
61
+ actorPathInfo.actorId,
62
+ encoding as any, // Will be validated by driver
63
+ connParams,
64
+ );
65
+ }
66
+
67
+ /**
68
+ * Handle path-based HTTP routing
69
+ */
70
+ async function handleHttpGatewayPathBased(
71
+ managerDriver: ManagerDriver,
72
+ c: HonoContext,
73
+ actorPathInfo: ActorPathInfo,
74
+ ): Promise<Response> {
75
+ // NOTE: Token validation implemented in EE
76
+
77
+ logger().debug({
78
+ msg: "proxying request to actor via path-based routing",
79
+ actorId: actorPathInfo.actorId,
80
+ path: actorPathInfo.remainingPath,
81
+ method: c.req.method,
82
+ });
83
+
84
+ // Preserve all headers
85
+ const proxyHeaders = new Headers(c.req.raw.headers);
86
+
87
+ // Build the proxy request with the actor URL format
88
+ const proxyUrl = new URL(`http://actor${actorPathInfo.remainingPath}`);
89
+
90
+ const proxyRequest = new Request(proxyUrl, {
91
+ method: c.req.raw.method,
92
+ headers: proxyHeaders,
93
+ body: c.req.raw.body,
94
+ signal: c.req.raw.signal,
95
+ duplex: "half",
96
+ } as RequestInit);
97
+
98
+ return await managerDriver.proxyRequest(
99
+ c,
100
+ proxyRequest,
101
+ actorPathInfo.actorId,
102
+ );
103
+ }
104
+
105
+ /**
106
+ * Provides an endpoint to connect to individual actors.
107
+ *
108
+ * Routes requests using either path-based routing or header-based routing:
109
+ *
110
+ * Path-based routing (checked first):
111
+ * - /gateway/{actor_id}/{...path}
112
+ * - /gateway/{actor_id}@{token}/{...path}
113
+ *
114
+ * Header-based routing (fallback):
115
+ * - WebSocket requests: Uses sec-websocket-protocol for routing (target.actor, actor.{id})
116
+ * - HTTP requests: Uses x-rivet-target and x-rivet-actor headers for routing
117
+ */
118
+ export async function actorGateway(
119
+ config: RegistryConfig,
120
+ managerDriver: ManagerDriver,
121
+ getUpgradeWebSocket: GetUpgradeWebSocket | undefined,
122
+ c: HonoContext,
123
+ next: Next,
124
+ ) {
125
+
126
+ // Skip test routes - let them be handled by their specific handlers
127
+ if (c.req.path.startsWith("/.test/")) {
128
+ return next();
129
+ }
130
+
131
+ // Strip basePath from the request path
132
+ let strippedPath = c.req.path;
133
+ if (
134
+ config.managerBasePath &&
135
+ strippedPath.startsWith(config.managerBasePath)
136
+ ) {
137
+ strippedPath = strippedPath.slice(config.managerBasePath.length);
138
+ // Ensure the path starts with /
139
+ if (!strippedPath.startsWith("/")) {
140
+ strippedPath = "/" + strippedPath;
141
+ }
142
+ }
143
+
144
+ // Include query string if present (needed for parseActorPath to preserve query params)
145
+ const pathWithQuery = c.req.url.includes("?")
146
+ ? strippedPath + c.req.url.substring(c.req.url.indexOf("?"))
147
+ : strippedPath;
148
+
149
+ // First, check if this is an actor path-based route
150
+ const actorPathInfo = parseActorPath(pathWithQuery);
151
+ if (actorPathInfo) {
152
+ logger().debug({
153
+ msg: "routing using path-based actor routing",
154
+ actorPathInfo,
155
+ });
156
+
157
+ // Check if this is a WebSocket upgrade request
158
+ const isWebSocket = c.req.header("upgrade") === "websocket";
159
+
160
+ if (isWebSocket) {
161
+ return await handleWebSocketGatewayPathBased(
162
+ config,
163
+ managerDriver,
164
+ c,
165
+ actorPathInfo,
166
+ getUpgradeWebSocket,
167
+ );
168
+ }
169
+
170
+ // Handle regular HTTP requests
171
+ return await handleHttpGatewayPathBased(
172
+ managerDriver,
173
+ c,
174
+ actorPathInfo,
175
+ );
176
+ }
177
+
178
+ // Fallback to header-based routing
179
+ // Check if this is a WebSocket upgrade request
180
+ if (c.req.header("upgrade") === "websocket") {
181
+ return await handleWebSocketGateway(
182
+ config,
183
+ managerDriver,
184
+ getUpgradeWebSocket,
185
+ c,
186
+ strippedPath,
187
+ );
188
+ }
189
+
190
+ // Handle regular HTTP requests
191
+ return await handleHttpGateway(managerDriver, c, next, strippedPath);
192
+ }
193
+
194
+ /**
195
+ * Handle WebSocket requests using sec-websocket-protocol for routing
196
+ */
197
+ async function handleWebSocketGateway(
198
+ config: RegistryConfig,
199
+ managerDriver: ManagerDriver,
200
+ getUpgradeWebSocket: GetUpgradeWebSocket | undefined,
201
+ c: HonoContext,
202
+ strippedPath: string,
203
+ ) {
204
+ const upgradeWebSocket = getUpgradeWebSocket?.();
205
+ if (!upgradeWebSocket) {
206
+ throw new WebSocketsNotEnabled();
207
+ }
208
+
209
+ let target: string | undefined;
210
+ let actorId: string | undefined;
211
+
212
+ // Parse configuration from Sec-WebSocket-Protocol header
213
+ const { encoding, connParams } = parseWebSocketProtocols(
214
+ c.req.header("sec-websocket-protocol"),
215
+ );
216
+
217
+ if (target !== "actor") {
218
+ return c.text("WebSocket upgrade requires target.actor protocol", 400);
219
+ }
220
+
221
+ if (!actorId) {
222
+ throw new MissingActorHeader();
223
+ }
224
+
225
+ logger().debug({
226
+ msg: "proxying websocket to actor",
227
+ actorId,
228
+ path: strippedPath,
229
+ encoding,
230
+ });
231
+
232
+ // Include query string if present
233
+ const pathWithQuery = c.req.url.includes("?")
234
+ ? strippedPath + c.req.url.substring(c.req.url.indexOf("?"))
235
+ : strippedPath;
236
+
237
+ return await managerDriver.proxyWebSocket(
238
+ c,
239
+ pathWithQuery,
240
+ actorId,
241
+ encoding,
242
+ connParams,
243
+ );
244
+ }
245
+
246
+ /**
247
+ * Handle HTTP requests using x-rivet headers for routing
248
+ */
249
+ async function handleHttpGateway(
250
+ managerDriver: ManagerDriver,
251
+ c: HonoContext,
252
+ next: Next,
253
+ strippedPath: string,
254
+ ) {
255
+ const target = c.req.header(HEADER_RIVET_TARGET);
256
+ const actorId = c.req.header(HEADER_RIVET_ACTOR);
257
+
258
+ if (target !== "actor") {
259
+ return next();
260
+ }
261
+
262
+ if (!actorId) {
263
+ throw new MissingActorHeader();
264
+ }
265
+
266
+ logger().debug({
267
+ msg: "proxying request to actor",
268
+ actorId,
269
+ path: strippedPath,
270
+ method: c.req.method,
271
+ });
272
+
273
+ // Preserve all headers except the routing headers
274
+ const proxyHeaders = new Headers(c.req.raw.headers);
275
+ proxyHeaders.delete(HEADER_RIVET_TARGET);
276
+ proxyHeaders.delete(HEADER_RIVET_ACTOR);
277
+
278
+ // Build the proxy request with the actor URL format
279
+ const url = new URL(c.req.url);
280
+ const proxyUrl = new URL(`http://actor${strippedPath}${url.search}`);
281
+
282
+ const proxyRequest = new Request(proxyUrl, {
283
+ method: c.req.raw.method,
284
+ headers: proxyHeaders,
285
+ body: c.req.raw.body,
286
+ signal: c.req.raw.signal,
287
+ duplex: "half",
288
+ } as RequestInit);
289
+
290
+ return await managerDriver.proxyRequest(c, proxyRequest, actorId);
291
+ }
292
+
293
+ /**
294
+ * Parse actor routing information from path
295
+ * Matches patterns:
296
+ * - /gateway/{actor_id}/{...path}
297
+ * - /gateway/{actor_id}@{token}/{...path}
298
+ */
299
+ export function parseActorPath(path: string): ActorPathInfo | null {
300
+ // Find query string position (everything from ? onwards, but before fragment)
301
+ const queryPos = path.indexOf("?");
302
+ const fragmentPos = path.indexOf("#");
303
+
304
+ // Extract query string (excluding fragment)
305
+ let queryString = "";
306
+ if (queryPos !== -1) {
307
+ if (fragmentPos !== -1 && queryPos < fragmentPos) {
308
+ queryString = path.slice(queryPos, fragmentPos);
309
+ } else {
310
+ queryString = path.slice(queryPos);
311
+ }
312
+ }
313
+
314
+ // Extract base path (before query and fragment)
315
+ let basePath = path;
316
+ if (queryPos !== -1) {
317
+ basePath = path.slice(0, queryPos);
318
+ } else if (fragmentPos !== -1) {
319
+ basePath = path.slice(0, fragmentPos);
320
+ }
321
+
322
+ // Check for double slashes (invalid path)
323
+ if (basePath.includes("//")) {
324
+ return null;
325
+ }
326
+
327
+ // Split the path into segments
328
+ const segments = basePath.split("/").filter((s) => s.length > 0);
329
+
330
+ // Check minimum required segments: gateway, {actor_id}
331
+ if (segments.length < 2) {
332
+ return null;
333
+ }
334
+
335
+ // Verify the first segment is "gateway"
336
+ if (segments[0] !== "gateway") {
337
+ return null;
338
+ }
339
+
340
+ // Extract actor_id segment (may contain @token)
341
+ const actorSegment = segments[1];
342
+
343
+ // Check for empty actor segment
344
+ if (actorSegment.length === 0) {
345
+ return null;
346
+ }
347
+
348
+ // Parse actor_id and optional token from the segment
349
+ let actorId: string;
350
+ let token: string | undefined;
351
+
352
+ const atPos = actorSegment.indexOf("@");
353
+ if (atPos !== -1) {
354
+ // Pattern: /gateway/{actor_id}@{token}/{...path}
355
+ const rawActorId = actorSegment.slice(0, atPos);
356
+ const rawToken = actorSegment.slice(atPos + 1);
357
+
358
+ // Check for empty actor_id or token
359
+ if (rawActorId.length === 0 || rawToken.length === 0) {
360
+ return null;
361
+ }
362
+
363
+ // URL-decode both actor_id and token
364
+ try {
365
+ actorId = decodeURIComponent(rawActorId);
366
+ token = decodeURIComponent(rawToken);
367
+ } catch (e) {
368
+ // Invalid URL encoding
369
+ return null;
370
+ }
371
+ } else {
372
+ // Pattern: /gateway/{actor_id}/{...path}
373
+ // URL-decode actor_id
374
+ try {
375
+ actorId = decodeURIComponent(actorSegment);
376
+ } catch (e) {
377
+ // Invalid URL encoding
378
+ return null;
379
+ }
380
+ token = undefined;
381
+ }
382
+
383
+ // Calculate remaining path
384
+ // The remaining path starts after /gateway/{actor_id[@token]}/
385
+ let prefixLen = 0;
386
+ for (let i = 0; i < 2; i++) {
387
+ prefixLen += 1 + segments[i].length; // +1 for the slash
388
+ }
389
+
390
+ // Extract the remaining path preserving trailing slashes
391
+ let remainingBase: string;
392
+ if (prefixLen < basePath.length) {
393
+ remainingBase = basePath.slice(prefixLen);
394
+ } else {
395
+ remainingBase = "/";
396
+ }
397
+
398
+ // Ensure remaining path starts with /
399
+ let remainingPath: string;
400
+ if (remainingBase.length === 0 || !remainingBase.startsWith("/")) {
401
+ remainingPath = `/${remainingBase}${queryString}`;
402
+ } else {
403
+ remainingPath = `${remainingBase}${queryString}`;
404
+ }
405
+
406
+ return {
407
+ actorId,
408
+ token,
409
+ remainingPath,
410
+ };
411
+ }
412
+
413
+ /**
414
+ * Creates a WebSocket proxy for test endpoints that forwards messages between server and client WebSockets
415
+ *
416
+ * clientToProxyWs = the websocket from the client -> the proxy
417
+ * proxyToActorWs = the websocket from the proxy -> the actor
418
+ */
419
+ export async function createTestWebSocketProxy(
420
+ proxyToActorWsPromise: Promise<UniversalWebSocket>,
421
+ ): Promise<UpgradeWebSocketArgs> {
422
+ // Store a reference to the resolved WebSocket
423
+ let proxyToActorWs: UniversalWebSocket | null = null;
424
+ const {
425
+ promise: clientToProxyWsPromise,
426
+ resolve: clientToProxyWsResolve,
427
+ reject: clientToProxyWsReject,
428
+ } = promiseWithResolvers<WSContext>((reason) => logger().warn({ msg: "unhandled client websocket promise rejection", reason }));
429
+ try {
430
+ // Resolve the client WebSocket promise
431
+ logger().debug({ msg: "awaiting client websocket promise" });
432
+ proxyToActorWs = await proxyToActorWsPromise;
433
+ logger().debug({
434
+ msg: "client websocket promise resolved",
435
+ constructor: proxyToActorWs?.constructor.name,
436
+ });
437
+
438
+ // Wait for ws to open
439
+ await new Promise<void>((resolve, reject) => {
440
+ invariant(proxyToActorWs, "missing proxyToActorWs");
441
+
442
+ const onOpen = () => {
443
+ logger().debug({
444
+ msg: "test websocket connection to actor opened",
445
+ });
446
+ resolve();
447
+ };
448
+ const onError = (error: any) => {
449
+ logger().error({
450
+ msg: "test websocket connection failed",
451
+ error,
452
+ });
453
+ reject(
454
+ new Error(
455
+ `Failed to open WebSocket: ${error.message || error}`,
456
+ ),
457
+ );
458
+ clientToProxyWsReject();
459
+ };
460
+
461
+ proxyToActorWs.addEventListener("open", onOpen);
462
+
463
+ proxyToActorWs.addEventListener("error", onError);
464
+
465
+ proxyToActorWs.addEventListener(
466
+ "message",
467
+ async (clientEvt: MessageEvent) => {
468
+ const clientToProxyWs = await clientToProxyWsPromise;
469
+
470
+ logger().debug({
471
+ msg: `test websocket connection message from client`,
472
+ dataType: typeof clientEvt.data,
473
+ isBlob: clientEvt.data instanceof Blob,
474
+ isArrayBuffer: clientEvt.data instanceof ArrayBuffer,
475
+ dataConstructor: clientEvt.data?.constructor?.name,
476
+ dataStr:
477
+ typeof clientEvt.data === "string"
478
+ ? clientEvt.data.substring(0, 100)
479
+ : undefined,
480
+ });
481
+
482
+ if (clientToProxyWs.readyState === 1) {
483
+ // OPEN
484
+ // Handle Blob data
485
+ if (clientEvt.data instanceof Blob) {
486
+ clientEvt.data
487
+ .arrayBuffer()
488
+ .then((buffer) => {
489
+ logger().debug({
490
+ msg: "converted client blob to arraybuffer, sending to server",
491
+ bufferSize: buffer.byteLength,
492
+ });
493
+ clientToProxyWs.send(buffer as any);
494
+ })
495
+ .catch((error) => {
496
+ logger().error({
497
+ msg: "failed to convert blob to arraybuffer",
498
+ error,
499
+ });
500
+ });
501
+ } else {
502
+ logger().debug({
503
+ msg: "sending client data directly to server",
504
+ dataType: typeof clientEvt.data,
505
+ dataLength:
506
+ typeof clientEvt.data === "string"
507
+ ? clientEvt.data.length
508
+ : undefined,
509
+ });
510
+ clientToProxyWs.send(clientEvt.data as any);
511
+ }
512
+ }
513
+ },
514
+ );
515
+
516
+ proxyToActorWs.addEventListener("close", async (clientEvt: any) => {
517
+ const clientToProxyWs = await clientToProxyWsPromise;
518
+
519
+ logger().debug({
520
+ msg: `test websocket connection closed`,
521
+ });
522
+
523
+ if (clientToProxyWs.readyState !== 3) {
524
+ // Not CLOSED
525
+ clientToProxyWs.close(clientEvt.code, clientEvt.reason);
526
+ }
527
+ });
528
+
529
+ proxyToActorWs.addEventListener("error", async () => {
530
+ const clientToProxyWs = await clientToProxyWsPromise;
531
+
532
+ logger().debug({
533
+ msg: `test websocket connection error`,
534
+ });
535
+
536
+ if (clientToProxyWs.readyState !== 3) {
537
+ // Not CLOSED
538
+ clientToProxyWs.close(1011, "Error in client websocket");
539
+ }
540
+ });
541
+ });
542
+ } catch (error) {
543
+ logger().error({
544
+ msg: `failed to establish client websocket connection`,
545
+ error,
546
+ });
547
+ return {
548
+ onOpen: (_evt, clientToProxyWs) => {
549
+ clientToProxyWs.close(1011, "Failed to establish connection");
550
+ },
551
+ onMessage: () => {},
552
+ onError: () => {},
553
+ onClose: () => {},
554
+ };
555
+ }
556
+
557
+ // Create WebSocket proxy handlers to relay messages between client and server
558
+ return {
559
+ onOpen: (_evt: any, clientToProxyWs: WSContext) => {
560
+ logger().debug({
561
+ msg: `test websocket connection from client opened`,
562
+ });
563
+
564
+ // Check WebSocket type
565
+ logger().debug({
566
+ msg: "proxyToActorWs info",
567
+ constructor: proxyToActorWs.constructor.name,
568
+ hasAddEventListener:
569
+ typeof proxyToActorWs.addEventListener === "function",
570
+ readyState: proxyToActorWs.readyState,
571
+ });
572
+
573
+ clientToProxyWsResolve(clientToProxyWs);
574
+ },
575
+ onMessage: (evt: { data: any }) => {
576
+ logger().debug({
577
+ msg: "received message from server",
578
+ dataType: typeof evt.data,
579
+ isBlob: evt.data instanceof Blob,
580
+ isArrayBuffer: evt.data instanceof ArrayBuffer,
581
+ dataConstructor: evt.data?.constructor?.name,
582
+ dataStr:
583
+ typeof evt.data === "string"
584
+ ? evt.data.substring(0, 100)
585
+ : undefined,
586
+ });
587
+
588
+ // Forward messages from server websocket to client websocket
589
+ if (proxyToActorWs.readyState === 1) {
590
+ // OPEN
591
+ // Handle Blob data
592
+ if (evt.data instanceof Blob) {
593
+ evt.data
594
+ .arrayBuffer()
595
+ .then((buffer) => {
596
+ logger().debug({
597
+ msg: "converted blob to arraybuffer, sending",
598
+ bufferSize: buffer.byteLength,
599
+ });
600
+ proxyToActorWs.send(buffer);
601
+ })
602
+ .catch((error) => {
603
+ logger().error({
604
+ msg: "failed to convert blob to arraybuffer",
605
+ error,
606
+ });
607
+ });
608
+ } else {
609
+ logger().debug({
610
+ msg: "sending data directly",
611
+ dataType: typeof evt.data,
612
+ dataLength:
613
+ typeof evt.data === "string"
614
+ ? evt.data.length
615
+ : undefined,
616
+ });
617
+ proxyToActorWs.send(evt.data);
618
+ }
619
+ }
620
+ },
621
+ onClose: (
622
+ event: {
623
+ wasClean: boolean;
624
+ code: number;
625
+ reason: string;
626
+ },
627
+ clientToProxyWs: WSContext,
628
+ ) => {
629
+ logger().debug({
630
+ msg: `server websocket closed`,
631
+ wasClean: event.wasClean,
632
+ code: event.code,
633
+ reason: event.reason,
634
+ });
635
+
636
+ // HACK: Close socket in order to fix bug with Cloudflare leaving WS in closing state
637
+ // https://github.com/cloudflare/workerd/issues/2569
638
+ clientToProxyWs.close(1000, "hack_force_close");
639
+
640
+ // Close the client websocket when the server websocket closes
641
+ if (
642
+ proxyToActorWs &&
643
+ proxyToActorWs.readyState !== proxyToActorWs.CLOSED &&
644
+ proxyToActorWs.readyState !== proxyToActorWs.CLOSING
645
+ ) {
646
+ // Don't pass code/message since this may affect how close events are triggered
647
+ proxyToActorWs.close(1000, event.reason);
648
+ }
649
+ },
650
+ onError: (error: unknown) => {
651
+ logger().error({
652
+ msg: `error in server websocket`,
653
+ error,
654
+ });
655
+
656
+ // Close the client websocket on error
657
+ if (
658
+ proxyToActorWs &&
659
+ proxyToActorWs.readyState !== proxyToActorWs.CLOSED &&
660
+ proxyToActorWs.readyState !== proxyToActorWs.CLOSING
661
+ ) {
662
+ proxyToActorWs.close(1011, "Error in server websocket");
663
+ }
664
+
665
+ clientToProxyWsReject();
666
+ },
667
+ };
668
+ }
@@ -0,0 +1,5 @@
1
+ import { getLogger } from "@/common/log";
2
+
3
+ export function logger() {
4
+ return getLogger("actor-manager");
5
+ }
@@ -0,0 +1,2 @@
1
+ export { ManagerDisplayInformation, ManagerDriver } from "./driver";
2
+ export { buildManagerRouter } from "./router";
@@ -0,0 +1,22 @@
1
+ import { z } from "zod/v4";
2
+ import { ActorQuerySchema } from "./query";
3
+
4
+ export * from "./query";
5
+
6
+ export const ActorsRequestSchema = z.object({
7
+ query: ActorQuerySchema,
8
+ });
9
+
10
+ export const ActorsResponseSchema = z.object({
11
+ actorId: z.string(),
12
+ });
13
+
14
+ //export const RivetConfigResponseSchema = z.object({
15
+ // endpoint: z.string(),
16
+ // project: z.string().optional(),
17
+ // environment: z.string().optional(),
18
+ //});
19
+
20
+ export type ActorsRequest = z.infer<typeof ActorsRequestSchema>;
21
+ export type ActorsResponse = z.infer<typeof ActorsResponseSchema>;
22
+ //export type RivetConfigResponse = z.infer<typeof RivetConfigResponseSchema>;