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,252 @@
1
+ import * as cbor from "cbor-x";
2
+ import invariant from "invariant";
3
+ import type { VersionedDataHandler } from "vbare";
4
+ import type { z } from "zod/v4";
5
+ import type { Encoding } from "@/actor/protocol/serde";
6
+ import { assertUnreachable } from "@/common/utils";
7
+ import type { HttpResponseError } from "@/schemas/client-protocol/mod";
8
+ import { HTTP_RESPONSE_ERROR_VERSIONED } from "@/schemas/client-protocol/versioned";
9
+ import {
10
+ type HttpResponseError as HttpResponseErrorJson,
11
+ HttpResponseErrorSchema,
12
+ } from "@/schemas/client-protocol-zod/mod";
13
+ import {
14
+ contentTypeForEncoding,
15
+ deserializeWithEncoding,
16
+ encodingIsBinary,
17
+ serializeWithEncoding,
18
+ } from "@/serde";
19
+ import { httpUserAgent } from "@/utils";
20
+ import { ActorError, HttpRequestError } from "./errors";
21
+ import { logger } from "./log";
22
+
23
+ export interface ParsedCloseReason {
24
+ group: string;
25
+ code: string;
26
+ rayId?: string;
27
+ }
28
+
29
+ /**
30
+ * Parses WebSocket close reason string into structured data.
31
+ *
32
+ * Expected format examples:
33
+ * - "guard.actor_runner_failed#t1s80so6h3irenp8ymzltfoittcl00"
34
+ * - "ws.client_closed"
35
+ *
36
+ * Returns undefined if the format is invalid
37
+ */
38
+ export function parseWebSocketCloseReason(
39
+ reason: string,
40
+ ): ParsedCloseReason | undefined {
41
+ const [mainPart, rayId] = reason.split("#");
42
+ const [group, code] = mainPart.split(".");
43
+
44
+ if (!group || !code) {
45
+ logger().warn({ msg: "failed to parse close reason", reason });
46
+ return undefined;
47
+ }
48
+
49
+ return {
50
+ group,
51
+ code,
52
+ rayId,
53
+ };
54
+ }
55
+
56
+ export type WebSocketMessage = string | Blob | ArrayBuffer | Uint8Array;
57
+
58
+ export function messageLength(message: WebSocketMessage): number {
59
+ if (message instanceof Blob) {
60
+ return message.size;
61
+ }
62
+ if (message instanceof ArrayBuffer) {
63
+ return message.byteLength;
64
+ }
65
+ if (message instanceof Uint8Array) {
66
+ return message.byteLength;
67
+ }
68
+ if (typeof message === "string") {
69
+ return message.length;
70
+ }
71
+ assertUnreachable(message);
72
+ }
73
+
74
+ export interface HttpRequestOpts<
75
+ RequestBare,
76
+ ResponseBare,
77
+ RequestJson = RequestBare,
78
+ ResponseJson = ResponseBare,
79
+ Request = RequestBare,
80
+ Response = ResponseBare,
81
+ > {
82
+ method: string;
83
+ url: string;
84
+ headers: Record<string, string>;
85
+ body?: Request;
86
+ encoding: Encoding;
87
+ skipParseResponse?: boolean;
88
+ signal?: AbortSignal;
89
+ customFetch?: (req: globalThis.Request) => Promise<globalThis.Response>;
90
+ requestVersionedDataHandler: VersionedDataHandler<RequestBare> | undefined;
91
+ requestVersion: number | undefined;
92
+ responseVersionedDataHandler:
93
+ | VersionedDataHandler<ResponseBare>
94
+ | undefined;
95
+ responseVersion: number | undefined;
96
+ requestZodSchema: z.ZodType<RequestJson>;
97
+ responseZodSchema: z.ZodType<ResponseJson>;
98
+ requestToJson: (value: Request) => RequestJson;
99
+ requestToBare: (value: Request) => RequestBare;
100
+ responseFromJson: (value: ResponseJson) => Response;
101
+ responseFromBare: (value: ResponseBare) => Response;
102
+ }
103
+
104
+ export async function sendHttpRequest<
105
+ RequestBare = unknown,
106
+ ResponseBare = unknown,
107
+ RequestJson = RequestBare,
108
+ ResponseJson = ResponseBare,
109
+ Request = RequestBare,
110
+ Response = ResponseBare,
111
+ >(
112
+ opts: HttpRequestOpts<
113
+ RequestBare,
114
+ ResponseBare,
115
+ RequestJson,
116
+ ResponseJson,
117
+ Request,
118
+ Response
119
+ >,
120
+ ): Promise<Response> {
121
+ logger().debug({
122
+ msg: "sending http request",
123
+ url: opts.url,
124
+ encoding: opts.encoding,
125
+ });
126
+
127
+ // Serialize body
128
+ let contentType: string | undefined;
129
+ let bodyData: string | Uint8Array | undefined;
130
+ if (opts.method === "POST" || opts.method === "PUT") {
131
+ invariant(opts.body !== undefined, "missing body");
132
+ contentType = contentTypeForEncoding(opts.encoding);
133
+ bodyData = serializeWithEncoding<RequestBare, RequestJson, Request>(
134
+ opts.encoding,
135
+ opts.body,
136
+ opts.requestVersionedDataHandler,
137
+ opts.requestVersion,
138
+ opts.requestZodSchema,
139
+ opts.requestToJson,
140
+ opts.requestToBare,
141
+ );
142
+ }
143
+
144
+ // Send request
145
+ let response: globalThis.Response;
146
+ try {
147
+ // Make the HTTP request
148
+ response = await (opts.customFetch ?? fetch)(
149
+ new globalThis.Request(opts.url, {
150
+ method: opts.method,
151
+ headers: {
152
+ ...opts.headers,
153
+ ...(contentType
154
+ ? {
155
+ "Content-Type": contentType,
156
+ }
157
+ : {}),
158
+ "User-Agent": httpUserAgent(),
159
+ },
160
+ body: bodyData,
161
+ credentials: "include",
162
+ signal: opts.signal,
163
+ }),
164
+ );
165
+ } catch (error) {
166
+ throw new HttpRequestError(`Request failed: ${error}`, {
167
+ cause: error,
168
+ });
169
+ }
170
+
171
+ // Parse response error
172
+ if (!response.ok) {
173
+ const bufferResponse = await response.arrayBuffer();
174
+ const contentType = response.headers.get("content-type");
175
+ const rayId = response.headers.get("x-rivet-ray-id");
176
+
177
+ // Determine encoding from Content-Type header, defaulting to provided encoding
178
+ const encoding: Encoding = contentType?.includes("application/json")
179
+ ? "json"
180
+ : opts.encoding;
181
+
182
+ // Attempt to parse structured error data
183
+ try {
184
+ const responseData = deserializeWithEncoding(
185
+ encoding,
186
+ new Uint8Array(bufferResponse),
187
+ HTTP_RESPONSE_ERROR_VERSIONED,
188
+ HttpResponseErrorSchema,
189
+ // JSON: metadata is already unknown
190
+ (json): HttpResponseErrorJson => json as HttpResponseErrorJson,
191
+ // BARE: decode ArrayBuffer metadata to unknown
192
+ (bare): any => ({
193
+ group: bare.group,
194
+ code: bare.code,
195
+ message: bare.message,
196
+ metadata: bare.metadata
197
+ ? cbor.decode(new Uint8Array(bare.metadata))
198
+ : undefined,
199
+ }),
200
+ );
201
+
202
+ throw new ActorError(
203
+ responseData.group,
204
+ responseData.code,
205
+ responseData.message,
206
+ responseData.metadata,
207
+ );
208
+ } catch (error) {
209
+ // If it's already an ActorError, re-throw it
210
+ if (error instanceof ActorError) {
211
+ throw error;
212
+ }
213
+
214
+ // Otherwise, fall back to generic error with text response
215
+ const textResponse = new TextDecoder("utf-8", {
216
+ fatal: false,
217
+ }).decode(bufferResponse);
218
+
219
+ if (rayId) {
220
+ throw new HttpRequestError(
221
+ `${response.statusText} (${response.status}) (Ray ID: ${rayId}):\n${textResponse}`,
222
+ );
223
+ } else {
224
+ throw new HttpRequestError(
225
+ `${response.statusText} (${response.status}):\n${textResponse}`,
226
+ );
227
+ }
228
+ }
229
+ }
230
+
231
+ // Some requests don't need the success response to be parsed, so this can speed things up
232
+ if (opts.skipParseResponse) {
233
+ return undefined as Response;
234
+ }
235
+
236
+ // Parse the response based on encoding
237
+ try {
238
+ const buffer = new Uint8Array(await response.arrayBuffer());
239
+ return deserializeWithEncoding<ResponseBare, ResponseJson, Response>(
240
+ opts.encoding,
241
+ buffer,
242
+ opts.responseVersionedDataHandler,
243
+ opts.responseZodSchema,
244
+ opts.responseFromJson,
245
+ opts.responseFromBare,
246
+ );
247
+ } catch (error) {
248
+ throw new HttpRequestError(`Failed to parse response: ${error}`, {
249
+ cause: error,
250
+ });
251
+ }
252
+ }
@@ -0,0 +1,59 @@
1
+ // NOTE: This is in a separate file from the router since it needs to be shared between the client & the server. If this was in the router file, the client would end up importing the *entire* actor router and tree shaking would not work.
2
+
3
+ // MARK: Paths
4
+ export const PATH_CONNECT = "/connect";
5
+ export const PATH_WEBSOCKET_BASE = "/websocket";
6
+ export const PATH_WEBSOCKET_PREFIX = "/websocket/";
7
+ export const PATH_INSPECTOR_CONNECT = "/inspector/connect";
8
+
9
+ // MARK: Headers
10
+ export const HEADER_ACTOR_QUERY = "x-rivet-query";
11
+
12
+ export const HEADER_ENCODING = "x-rivet-encoding";
13
+
14
+ // IMPORTANT: Params must be in headers or in an E2EE part of the request (i.e. NOT the URL or query string) in order to ensure that tokens can be securely passed in params.
15
+ export const HEADER_CONN_PARAMS = "x-rivet-conn-params";
16
+
17
+ export const HEADER_ACTOR_ID = "x-rivet-actor";
18
+
19
+ export const HEADER_RIVET_TOKEN = "x-rivet-token";
20
+
21
+ // MARK: Manager Gateway Headers
22
+ export const HEADER_RIVET_TARGET = "x-rivet-target";
23
+ export const HEADER_RIVET_ACTOR = "x-rivet-actor";
24
+ export const HEADER_RIVET_NAMESPACE = "x-rivet-namespace";
25
+
26
+ // MARK: WebSocket Protocol Prefixes
27
+ /** Some servers (such as node-ws & Cloudflare) require explicitly match a certain WebSocket protocol. This gives us a static protocol to match against. */
28
+ export const WS_PROTOCOL_STANDARD = "rivet";
29
+ export const WS_PROTOCOL_TARGET = "rivet_target.";
30
+ export const WS_PROTOCOL_ACTOR = "rivet_actor.";
31
+ export const WS_PROTOCOL_ENCODING = "rivet_encoding.";
32
+ export const WS_PROTOCOL_CONN_PARAMS = "rivet_conn_params.";
33
+ export const WS_PROTOCOL_TOKEN = "rivet_token.";
34
+ /**
35
+ * Used to pass an inspector token for connecting to the inspector.
36
+ * Only used internally by Rivet.
37
+ */
38
+ export const WS_PROTOCOL_INSPECTOR_TOKEN = "rivet_inspector_token.";
39
+
40
+ // MARK: WebSocket Inline Test Protocol Prefixes
41
+ export const WS_TEST_PROTOCOL_PATH = "test_path.";
42
+
43
+ /**
44
+ * Headers that publics can send from public clients.
45
+ *
46
+ * Used for CORS.
47
+ **/
48
+ export const ALLOWED_PUBLIC_HEADERS = [
49
+ "Content-Type",
50
+ "User-Agent",
51
+ HEADER_ACTOR_QUERY,
52
+ HEADER_ENCODING,
53
+ HEADER_CONN_PARAMS,
54
+ HEADER_ACTOR_ID,
55
+ HEADER_RIVET_TARGET,
56
+ HEADER_RIVET_ACTOR,
57
+ HEADER_RIVET_NAMESPACE,
58
+ HEADER_RIVET_TOKEN,
59
+ ];
@@ -0,0 +1,57 @@
1
+ import type { MiddlewareHandler } from "hono";
2
+
3
+ /**
4
+ * Simple CORS middleware that matches the gateway behavior.
5
+ *
6
+ * - Echoes back the Origin header from the request
7
+ * - Echoes back the Access-Control-Request-Headers from preflight
8
+ * - Supports credentials
9
+ * - Allows common HTTP methods
10
+ * - Caches preflight for 24 hours
11
+ * - Adds Vary header to prevent cache poisoning
12
+ */
13
+ export const cors = (): MiddlewareHandler => {
14
+ return async (c, next) => {
15
+ // Extract origin from request
16
+ const origin = c.req.header("origin") || "*";
17
+
18
+ // Handle preflight OPTIONS request
19
+ if (c.req.method === "OPTIONS") {
20
+ const requestHeaders =
21
+ c.req.header("access-control-request-headers") || "*";
22
+
23
+ c.header("access-control-allow-origin", origin);
24
+ c.header("access-control-allow-credentials", "true");
25
+ c.header(
26
+ "access-control-allow-methods",
27
+ "GET, POST, PUT, DELETE, OPTIONS, PATCH",
28
+ );
29
+ c.header("access-control-allow-headers", requestHeaders);
30
+ c.header("access-control-expose-headers", "*");
31
+ c.header("access-control-max-age", "86400");
32
+
33
+ // Add Vary header to prevent cache poisoning when echoing origin
34
+ if (origin !== "*") {
35
+ c.header("vary", "Origin");
36
+ }
37
+
38
+ // Remove content headers from preflight response
39
+ c.res.headers.delete("content-length");
40
+ c.res.headers.delete("content-type");
41
+
42
+ return c.body(null, 204);
43
+ }
44
+
45
+ await next();
46
+
47
+ // Add CORS headers to actual request
48
+ c.header("access-control-allow-origin", origin);
49
+ c.header("access-control-allow-credentials", "true");
50
+ c.header("access-control-expose-headers", "*");
51
+
52
+ // Add Vary header to prevent cache poisoning when echoing origin
53
+ if (origin !== "*") {
54
+ c.header("vary", "Origin");
55
+ }
56
+ };
57
+ };
@@ -0,0 +1,47 @@
1
+ // Define minimal event interfaces to avoid conflicts between different EventSource implementations
2
+ export interface UniversalEvent {
3
+ type: string;
4
+ target?: any;
5
+ currentTarget?: any;
6
+ }
7
+
8
+ export interface UniversalMessageEvent extends UniversalEvent {
9
+ data: string;
10
+ lastEventId: string;
11
+ origin: string;
12
+ }
13
+
14
+ export interface UniversalErrorEvent extends UniversalEvent {
15
+ message: string;
16
+ filename?: string;
17
+ lineno?: number;
18
+ colno?: number;
19
+ error?: any;
20
+ }
21
+
22
+ /**
23
+ * Common EventSource interface that can be implemented by different EventSource-like classes
24
+ * This is compatible with the standard EventSource API but allows for custom implementations
25
+ */
26
+ export interface UniversalEventSource {
27
+ // EventSource readyState values
28
+ readonly CONNECTING: 0;
29
+ readonly OPEN: 1;
30
+ readonly CLOSED: 2;
31
+
32
+ // Properties
33
+ readonly readyState: 0 | 1 | 2;
34
+ readonly url: string;
35
+ readonly withCredentials: boolean;
36
+
37
+ // Methods
38
+ close(): void;
39
+ addEventListener(type: string, listener: (event: any) => void): void;
40
+ removeEventListener(type: string, listener: (event: any) => void): void;
41
+ dispatchEvent(event: UniversalEvent): boolean;
42
+
43
+ // Event handlers (optional)
44
+ onopen?: ((event: UniversalEvent) => void) | null;
45
+ onmessage?: ((event: UniversalMessageEvent) => void) | null;
46
+ onerror?: ((event: UniversalErrorEvent) => void) | null;
47
+ }
@@ -0,0 +1,44 @@
1
+ import type { EventSource } from "eventsource";
2
+ import { logger } from "@/client/log";
3
+
4
+ // Global singleton promise that will be reused for subsequent calls
5
+ let eventSourcePromise: Promise<typeof EventSource> | null = null;
6
+
7
+ export async function importEventSource(): Promise<typeof EventSource> {
8
+ // IMPORTANT: Import `eventsource` from the custom `eventsource` library. We need a custom implementation
9
+ // since we need to attach our own custom headers to the request.
10
+ //
11
+ // We can't use the browser-provided EventSource since it does not allow providing custom headers.
12
+
13
+ // Return existing promise if we already started loading
14
+ if (eventSourcePromise !== null) {
15
+ return eventSourcePromise;
16
+ }
17
+
18
+ // Create and store the promise
19
+ eventSourcePromise = (async () => {
20
+ let _EventSource: typeof EventSource;
21
+
22
+ // Node.js environment
23
+ try {
24
+ const moduleName = "eventsource";
25
+ const es = await import(/* webpackIgnore: true */ moduleName);
26
+ _EventSource = es.EventSource;
27
+ logger().debug("using eventsource from npm");
28
+ } catch (err) {
29
+ // EventSource not available
30
+ _EventSource = class MockEventSource {
31
+ constructor() {
32
+ throw new Error(
33
+ 'EventSource support requires installing the "eventsource" peer dependency.',
34
+ );
35
+ }
36
+ } as unknown as typeof EventSource;
37
+ logger().debug("using mock eventsource");
38
+ }
39
+
40
+ return _EventSource;
41
+ })();
42
+
43
+ return eventSourcePromise;
44
+ }
@@ -0,0 +1,154 @@
1
+ import { WSContext } from "hono/ws";
2
+ import type { UpgradeWebSocketArgs } from "@/actor/router-websocket-endpoints";
3
+ import type { UniversalWebSocket } from "@/common/websocket-interface";
4
+ import { VirtualWebSocket } from "@rivetkit/virtual-websocket";
5
+ import { getLogger } from "./log";
6
+
7
+ function logger() {
8
+ return getLogger("inline-websocket-adapter");
9
+ }
10
+
11
+ /**
12
+ * InlineWebSocketAdapter creates two linked WebSocket objects:
13
+ * - clientWs: for the client/proxy side (returned from openWebSocket)
14
+ * - actorWs: for the actor side (passed via wsContext.raw)
15
+ *
16
+ * Each side's send() triggers the OTHER side's message event.
17
+ */
18
+ export class InlineWebSocketAdapter {
19
+ #handler: UpgradeWebSocketArgs;
20
+ #wsContext: WSContext;
21
+ #readyState: 0 | 1 | 2 | 3 = 0;
22
+
23
+ #clientWs: VirtualWebSocket;
24
+ #actorWs: VirtualWebSocket;
25
+
26
+ constructor(handler: UpgradeWebSocketArgs) {
27
+ this.#handler = handler;
28
+
29
+ // Create linked WebSocket pair
30
+ // Client's send() -> handler.onMessage (for RPC) + Actor's message event (for raw WS)
31
+ // Actor's send() -> Client's message event
32
+ this.#clientWs = new VirtualWebSocket({
33
+ getReadyState: () => this.#readyState,
34
+ onSend: (data) => {
35
+ try {
36
+ // Call handler.onMessage for protocol-based connections (RPC)
37
+ this.#handler.onMessage({ data }, this.#wsContext);
38
+ // Also trigger message event on actor's websocket for raw websocket handlers
39
+ this.#actorWs.triggerMessage(data);
40
+ } catch (err) {
41
+ this.#handleError(err);
42
+ this.#close(1011, "Internal error processing message");
43
+ }
44
+ },
45
+ onClose: (code, reason) => this.#close(code, reason),
46
+ });
47
+
48
+ this.#actorWs = new VirtualWebSocket({
49
+ getReadyState: () => this.#readyState,
50
+ onSend: (data) => this.#clientWs.triggerMessage(data),
51
+ onClose: (code, reason) => this.#close(code, reason),
52
+ });
53
+
54
+ // Create WSContext with actorWs as raw
55
+ this.#wsContext = new WSContext({
56
+ raw: this.#actorWs,
57
+ send: (data: string | ArrayBuffer | Uint8Array) => {
58
+ logger().debug({ msg: "WSContext.send called" });
59
+ this.#clientWs.triggerMessage(data);
60
+ },
61
+ close: (code?: number, reason?: string) => {
62
+ logger().debug({ msg: "WSContext.close called", code, reason });
63
+ this.#close(code || 1000, reason || "");
64
+ },
65
+ readyState: 1,
66
+ });
67
+
68
+ // Defer initialization to allow event listeners to be attached first
69
+ setTimeout(() => {
70
+ this.#initialize();
71
+ }, 0);
72
+ }
73
+
74
+ /** Get the client-side WebSocket (for proxy/client code) */
75
+ get clientWebSocket(): UniversalWebSocket {
76
+ return this.#clientWs;
77
+ }
78
+
79
+ /** Get the actor-side WebSocket (passed to actor via wsContext.raw) */
80
+ get actorWebSocket(): UniversalWebSocket {
81
+ return this.#actorWs;
82
+ }
83
+
84
+ async #initialize(): Promise<void> {
85
+ try {
86
+ logger().debug({ msg: "websocket initializing" });
87
+
88
+ this.#readyState = 1; // OPEN
89
+
90
+ logger().debug({ msg: "calling handler.onOpen with WSContext" });
91
+ this.#handler.onOpen(undefined, this.#wsContext);
92
+
93
+ // Fire open event to both sides
94
+ this.#clientWs.triggerOpen();
95
+ this.#actorWs.triggerOpen();
96
+ } catch (err) {
97
+ this.#handleError(err);
98
+ this.#close(1011, "Internal error during initialization");
99
+ }
100
+ }
101
+
102
+ #handleError(err: unknown): void {
103
+ logger().error({
104
+ msg: "error in websocket",
105
+ error: err,
106
+ errorMessage: err instanceof Error ? err.message : String(err),
107
+ stack: err instanceof Error ? err.stack : undefined,
108
+ });
109
+
110
+ // Call handler.onError
111
+ try {
112
+ this.#handler.onError(err, this.#wsContext);
113
+ } catch (handlerErr) {
114
+ logger().error({ msg: "error in onError handler", error: handlerErr });
115
+ }
116
+
117
+ // Fire error event to both sides
118
+ this.#clientWs.triggerError(err);
119
+ this.#actorWs.triggerError(err);
120
+ }
121
+
122
+ #close(code: number, reason: string): void {
123
+ if (this.#readyState === 3 || this.#readyState === 2) {
124
+ return;
125
+ }
126
+
127
+ logger().debug({ msg: "closing websocket", code, reason });
128
+
129
+ this.#readyState = 2; // CLOSING
130
+
131
+ try {
132
+ this.#handler.onClose({ code, reason, wasClean: true }, this.#wsContext);
133
+ } catch (err) {
134
+ logger().error({ msg: "error closing websocket", error: err });
135
+ } finally {
136
+ this.#readyState = 3; // CLOSED
137
+
138
+ // Fire close event to both sides
139
+ this.#clientWs.triggerClose(code, reason);
140
+ this.#actorWs.triggerClose(code, reason);
141
+ }
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Creates an InlineWebSocketAdapter and returns the client-side WebSocket.
147
+ * This is the main entry point for creating inline WebSocket connections.
148
+ */
149
+ export function createInlineWebSocket(
150
+ handler: UpgradeWebSocketArgs,
151
+ ): UniversalWebSocket {
152
+ const adapter = new InlineWebSocketAdapter(handler);
153
+ return adapter.clientWebSocket;
154
+ }
@@ -0,0 +1,27 @@
1
+ export type LogLevel =
2
+ | "TRACE"
3
+ | "DEBUG"
4
+ | "INFO"
5
+ | "WARN"
6
+ | "ERROR"
7
+ | "CRITICAL";
8
+
9
+ export const LogLevels: Record<LogLevel, LevelIndex> = {
10
+ TRACE: 0,
11
+ DEBUG: 1,
12
+ INFO: 2,
13
+ WARN: 3,
14
+ ERROR: 4,
15
+ CRITICAL: 5,
16
+ } as const;
17
+
18
+ export const LevelNameMap: Record<number, LogLevel> = {
19
+ 0: "TRACE",
20
+ 1: "DEBUG",
21
+ 2: "INFO",
22
+ 3: "WARN",
23
+ 4: "ERROR",
24
+ 5: "CRITICAL",
25
+ };
26
+
27
+ export type LevelIndex = number;