rivetkit 2.0.42 → 2.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/{tsup/config-CLnylLYY.d.ts → browser/client.d.ts} +2127 -1910
  2. package/dist/browser/client.js +5182 -0
  3. package/dist/browser/client.js.map +1 -0
  4. package/dist/browser/inspector/client.d.ts +130 -0
  5. package/dist/browser/inspector/client.js +2854 -0
  6. package/dist/browser/inspector/client.js.map +1 -0
  7. package/dist/browser/v3-DnYObHH3.d.ts +279 -0
  8. package/dist/schemas/actor-inspector/v2.ts +796 -0
  9. package/dist/schemas/actor-inspector/v3.ts +899 -0
  10. package/dist/schemas/actor-persist/v4.ts +406 -0
  11. package/dist/schemas/client-protocol/v3.ts +554 -0
  12. package/dist/schemas/persist/v1.ts +781 -0
  13. package/dist/schemas/transport/v1.ts +697 -0
  14. package/dist/tsup/actor/errors.cjs +27 -3
  15. package/dist/tsup/actor/errors.cjs.map +1 -1
  16. package/dist/tsup/actor/errors.d.cts +37 -1
  17. package/dist/tsup/actor/errors.d.ts +37 -1
  18. package/dist/tsup/actor/errors.js +26 -1
  19. package/dist/tsup/{actor-router-consts-DzI2szci.d.cts → actor-router-consts-D29T1Z-K.d.cts} +1 -1
  20. package/dist/tsup/{actor-router-consts-DzI2szci.d.ts → actor-router-consts-D29T1Z-K.d.ts} +1 -1
  21. package/dist/tsup/chunk-424PT5DM.js +23 -0
  22. package/dist/tsup/chunk-424PT5DM.js.map +1 -0
  23. package/dist/tsup/{chunk-JDAD2YFA.js → chunk-5ESWDTHJ.js} +148 -273
  24. package/dist/tsup/chunk-5ESWDTHJ.js.map +1 -0
  25. package/dist/tsup/{chunk-FJ3KTN4V.js → chunk-6LIBPELE.js} +119 -11
  26. package/dist/tsup/chunk-6LIBPELE.js.map +1 -0
  27. package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
  28. package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
  29. package/dist/tsup/{chunk-LFVF5SCU.js → chunk-7HTNH26M.js} +126 -1
  30. package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
  31. package/dist/tsup/chunk-7K4CYDGD.js +630 -0
  32. package/dist/tsup/chunk-7K4CYDGD.js.map +1 -0
  33. package/dist/tsup/{chunk-XXGJCOL6.js → chunk-A6YIZWTK.js} +2 -2
  34. package/dist/tsup/chunk-AIYEYMX5.cjs +630 -0
  35. package/dist/tsup/chunk-AIYEYMX5.cjs.map +1 -0
  36. package/dist/tsup/{chunk-Q6W7RJJP.js → chunk-DIGBC2VI.js} +211 -2316
  37. package/dist/tsup/chunk-DIGBC2VI.js.map +1 -0
  38. package/dist/tsup/{chunk-RZW2DNND.cjs → chunk-F6JYU5IK.cjs} +1957 -1039
  39. package/dist/tsup/chunk-F6JYU5IK.cjs.map +1 -0
  40. package/dist/tsup/chunk-HAZL2EPK.cjs +534 -0
  41. package/dist/tsup/chunk-HAZL2EPK.cjs.map +1 -0
  42. package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
  43. package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
  44. package/dist/tsup/chunk-HIDX4C5Y.cjs +1036 -0
  45. package/dist/tsup/chunk-HIDX4C5Y.cjs.map +1 -0
  46. package/dist/tsup/chunk-IVG73YCW.js +534 -0
  47. package/dist/tsup/chunk-IVG73YCW.js.map +1 -0
  48. package/dist/tsup/chunk-KJSYAUOM.js +96 -0
  49. package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
  50. package/dist/tsup/{chunk-2XQS746M.cjs → chunk-L47L3ZWJ.cjs} +127 -2
  51. package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
  52. package/dist/tsup/{chunk-H4TB4X25.cjs → chunk-LW6KLR7A.cjs} +126 -18
  53. package/dist/tsup/chunk-LW6KLR7A.cjs.map +1 -0
  54. package/dist/tsup/chunk-LXUQ667X.js +2006 -0
  55. package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
  56. package/dist/tsup/{chunk-GMAVRZSF.js → chunk-M2T62AZQ.js} +1790 -872
  57. package/dist/tsup/chunk-M2T62AZQ.js.map +1 -0
  58. package/dist/tsup/chunk-MZ37VV3P.js +5974 -0
  59. package/dist/tsup/chunk-MZ37VV3P.js.map +1 -0
  60. package/dist/tsup/chunk-N4KRDJ56.js +72 -0
  61. package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
  62. package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
  63. package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
  64. package/dist/tsup/chunk-OMEPCQK2.js +649 -0
  65. package/dist/tsup/chunk-OMEPCQK2.js.map +1 -0
  66. package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
  67. package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
  68. package/dist/tsup/chunk-SSEP6DHP.cjs +2657 -0
  69. package/dist/tsup/chunk-SSEP6DHP.cjs.map +1 -0
  70. package/dist/tsup/chunk-T5YCUGVS.js +1036 -0
  71. package/dist/tsup/chunk-T5YCUGVS.js.map +1 -0
  72. package/dist/tsup/{chunk-EJVBH5VF.cjs → chunk-TPGXWFQT.cjs} +3 -3
  73. package/dist/tsup/{chunk-EJVBH5VF.cjs.map → chunk-TPGXWFQT.cjs.map} +1 -1
  74. package/dist/tsup/{chunk-X35U3YNX.cjs → chunk-TYLXNCA5.cjs} +214 -339
  75. package/dist/tsup/chunk-TYLXNCA5.cjs.map +1 -0
  76. package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
  77. package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
  78. package/dist/tsup/chunk-XWBAQO5H.cjs +649 -0
  79. package/dist/tsup/chunk-XWBAQO5H.cjs.map +1 -0
  80. package/dist/tsup/chunk-YQ4LDVD6.cjs +5974 -0
  81. package/dist/tsup/chunk-YQ4LDVD6.cjs.map +1 -0
  82. package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
  83. package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
  84. package/dist/tsup/client/mod.cjs +9 -10
  85. package/dist/tsup/client/mod.cjs.map +1 -1
  86. package/dist/tsup/client/mod.d.cts +11 -5
  87. package/dist/tsup/client/mod.d.ts +11 -5
  88. package/dist/tsup/client/mod.js +8 -8
  89. package/dist/tsup/common/log.cjs +4 -4
  90. package/dist/tsup/common/log.d.cts +2 -2
  91. package/dist/tsup/common/log.d.ts +2 -2
  92. package/dist/tsup/common/log.js +3 -2
  93. package/dist/tsup/common/websocket.cjs +5 -5
  94. package/dist/tsup/common/websocket.js +4 -3
  95. package/dist/tsup/config-BFqid9Gr.d.ts +2574 -0
  96. package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
  97. package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
  98. package/dist/tsup/{config-CZB2-W8x.d.cts → config-CAZphOS1.d.cts} +681 -355
  99. package/dist/tsup/db/drizzle/mod.cjs +49 -0
  100. package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
  101. package/dist/tsup/db/drizzle/mod.d.cts +17 -0
  102. package/dist/tsup/db/drizzle/mod.d.ts +17 -0
  103. package/dist/tsup/db/drizzle/mod.js +49 -0
  104. package/dist/tsup/db/drizzle/mod.js.map +1 -0
  105. package/dist/tsup/db/mod.cjs +9 -0
  106. package/dist/tsup/db/mod.cjs.map +1 -0
  107. package/dist/tsup/db/mod.d.cts +9 -0
  108. package/dist/tsup/db/mod.d.ts +9 -0
  109. package/dist/tsup/db/mod.js +9 -0
  110. package/dist/tsup/db/mod.js.map +1 -0
  111. package/dist/tsup/{driver-D0QX9M11.d.ts → driver-Bxv62E2p.d.ts} +2 -2
  112. package/dist/tsup/{driver-q-zqG7fc.d.cts → driver-DYXwJR5D.d.cts} +2 -2
  113. package/dist/tsup/driver-helpers/mod.cjs +12 -6
  114. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  115. package/dist/tsup/driver-helpers/mod.d.cts +12 -5
  116. package/dist/tsup/driver-helpers/mod.d.ts +12 -5
  117. package/dist/tsup/driver-helpers/mod.js +12 -5
  118. package/dist/tsup/driver-test-suite/mod.cjs +1370 -116
  119. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  120. package/dist/tsup/driver-test-suite/mod.d.cts +10 -4
  121. package/dist/tsup/driver-test-suite/mod.d.ts +10 -4
  122. package/dist/tsup/driver-test-suite/mod.js +2093 -838
  123. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  124. package/dist/tsup/inspector/mod.cjs +29 -3
  125. package/dist/tsup/inspector/mod.cjs.map +1 -1
  126. package/dist/tsup/inspector/mod.d.cts +124 -3
  127. package/dist/tsup/inspector/mod.d.ts +124 -3
  128. package/dist/tsup/inspector/mod.js +72 -45
  129. package/dist/tsup/keys-CydblqMh.d.cts +13 -0
  130. package/dist/tsup/keys-CydblqMh.d.ts +13 -0
  131. package/dist/tsup/mod.cjs +16 -10
  132. package/dist/tsup/mod.cjs.map +1 -1
  133. package/dist/tsup/mod.d.cts +26 -14
  134. package/dist/tsup/mod.d.ts +26 -14
  135. package/dist/tsup/mod.js +20 -13
  136. package/dist/tsup/serve-test-suite/mod.cjs +1165 -83
  137. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  138. package/dist/tsup/serve-test-suite/mod.js +1114 -29
  139. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  140. package/dist/tsup/test/mod.cjs +84 -11
  141. package/dist/tsup/test/mod.cjs.map +1 -1
  142. package/dist/tsup/test/mod.d.cts +10 -5
  143. package/dist/tsup/test/mod.d.ts +10 -5
  144. package/dist/tsup/test/mod.js +85 -11
  145. package/dist/tsup/test/mod.js.map +1 -1
  146. package/dist/tsup/utils.cjs +10 -4
  147. package/dist/tsup/utils.cjs.map +1 -1
  148. package/dist/tsup/utils.d.cts +72 -2
  149. package/dist/tsup/utils.d.ts +72 -2
  150. package/dist/tsup/utils.js +9 -2
  151. package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
  152. package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
  153. package/dist/tsup/workflow/mod.cjs +16 -0
  154. package/dist/tsup/workflow/mod.cjs.map +1 -0
  155. package/dist/tsup/workflow/mod.d.cts +83 -0
  156. package/dist/tsup/workflow/mod.d.ts +83 -0
  157. package/dist/tsup/workflow/mod.js +16 -0
  158. package/dist/tsup/workflow/mod.js.map +1 -0
  159. package/package.json +62 -5
  160. package/src/actor/config.ts +478 -68
  161. package/src/actor/conn/mod.ts +68 -16
  162. package/src/actor/conn/state-manager.ts +2 -2
  163. package/src/actor/contexts/action.ts +20 -12
  164. package/src/actor/contexts/base/actor.ts +137 -7
  165. package/src/actor/contexts/base/conn-init.ts +27 -7
  166. package/src/actor/contexts/base/conn.ts +27 -18
  167. package/src/actor/contexts/before-action-response.ts +9 -2
  168. package/src/actor/contexts/before-connect.ts +7 -2
  169. package/src/actor/contexts/connect.ts +9 -2
  170. package/src/actor/contexts/create-conn-state.ts +7 -2
  171. package/src/actor/contexts/create-vars.ts +16 -3
  172. package/src/actor/contexts/create.ts +16 -3
  173. package/src/actor/contexts/destroy.ts +9 -3
  174. package/src/actor/contexts/disconnect.ts +10 -4
  175. package/src/actor/contexts/index.ts +4 -3
  176. package/src/actor/contexts/request.ts +23 -6
  177. package/src/actor/contexts/run.ts +47 -0
  178. package/src/actor/contexts/sleep.ts +9 -3
  179. package/src/actor/contexts/state-change.ts +9 -3
  180. package/src/actor/contexts/wake.ts +9 -3
  181. package/src/actor/contexts/websocket.ts +23 -6
  182. package/src/actor/database.ts +8 -18
  183. package/src/actor/definition.ts +20 -6
  184. package/src/actor/driver.ts +32 -3
  185. package/src/actor/errors.ts +127 -0
  186. package/src/actor/instance/connection-manager.ts +183 -80
  187. package/src/actor/instance/event-manager.ts +26 -15
  188. package/src/actor/instance/keys.ts +117 -0
  189. package/src/actor/instance/mod.ts +784 -174
  190. package/src/actor/instance/queue-manager.ts +603 -0
  191. package/src/actor/instance/queue.ts +287 -0
  192. package/src/actor/instance/schedule-manager.ts +49 -7
  193. package/src/actor/instance/state-manager.ts +35 -11
  194. package/src/actor/instance/traces-driver.ts +128 -0
  195. package/src/actor/mod.ts +26 -2
  196. package/src/actor/protocol/old.ts +28 -13
  197. package/src/actor/protocol/serde.ts +1 -1
  198. package/src/actor/router-endpoints.ts +177 -21
  199. package/src/actor/router-websocket-endpoints.ts +18 -29
  200. package/src/actor/router.ts +177 -0
  201. package/src/actor/schema.ts +291 -0
  202. package/src/actor/utils.ts +40 -0
  203. package/src/client/actor-common.ts +1 -1
  204. package/src/client/actor-conn.ts +100 -33
  205. package/src/client/actor-handle.ts +61 -33
  206. package/src/client/client.ts +2 -4
  207. package/src/client/config.ts +1 -1
  208. package/src/client/mod.browser.ts +2 -0
  209. package/src/client/mod.ts +1 -4
  210. package/src/client/queue.ts +146 -0
  211. package/src/client/utils.ts +1 -1
  212. package/src/common/log.ts +1 -1
  213. package/src/common/utils.ts +3 -3
  214. package/src/db/config.ts +100 -0
  215. package/src/db/drizzle/mod.ts +226 -0
  216. package/src/db/drizzle/sqlite-core.ts +22 -0
  217. package/src/db/mod.ts +125 -0
  218. package/src/db/shared.ts +92 -0
  219. package/src/db/sqlite-vfs.ts +12 -0
  220. package/src/driver-helpers/mod.ts +1 -0
  221. package/src/driver-test-suite/mod.ts +69 -43
  222. package/src/driver-test-suite/tests/access-control.ts +218 -0
  223. package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
  224. package/src/driver-test-suite/tests/actor-db.ts +394 -0
  225. package/src/driver-test-suite/tests/actor-inspector.ts +259 -358
  226. package/src/driver-test-suite/tests/actor-kv.ts +41 -20
  227. package/src/driver-test-suite/tests/actor-queue.ts +324 -0
  228. package/src/driver-test-suite/tests/actor-run.ts +181 -0
  229. package/src/driver-test-suite/tests/actor-schedule.ts +5 -2
  230. package/src/driver-test-suite/tests/actor-sleep.ts +3 -3
  231. package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
  232. package/src/driver-test-suite/tests/actor-workflow.ts +108 -0
  233. package/src/driver-test-suite/tests/manager-driver.ts +11 -0
  234. package/src/driver-test-suite/tests/raw-http-request-properties.ts +1 -1
  235. package/src/driver-test-suite/tests/raw-websocket.ts +12 -12
  236. package/src/drivers/default.ts +7 -2
  237. package/src/drivers/engine/actor-driver.ts +45 -37
  238. package/src/drivers/engine/config.ts +1 -1
  239. package/src/drivers/file-system/actor.ts +20 -2
  240. package/src/drivers/file-system/global-state.ts +569 -258
  241. package/src/drivers/file-system/kv-limits.ts +70 -0
  242. package/src/drivers/file-system/manager.ts +22 -6
  243. package/src/drivers/file-system/mod.ts +39 -16
  244. package/src/drivers/file-system/sqlite-runtime.ts +210 -0
  245. package/src/inspector/actor-inspector.ts +224 -102
  246. package/src/inspector/config.ts +1 -1
  247. package/src/inspector/handler.ts +102 -20
  248. package/src/inspector/mod.browser.ts +8 -0
  249. package/src/inspector/mod.ts +2 -0
  250. package/src/inspector/serve-ui.ts +40 -0
  251. package/src/inspector/transport.ts +18 -0
  252. package/src/inspector/utils.ts +5 -39
  253. package/src/manager/gateway.ts +1 -1
  254. package/src/manager/protocol/mod.ts +1 -1
  255. package/src/manager/protocol/query.ts +1 -1
  256. package/src/manager/router-schema.ts +1 -1
  257. package/src/manager/router.ts +38 -12
  258. package/src/manager-api/actors.ts +1 -1
  259. package/src/manager-api/common.ts +1 -1
  260. package/src/registry/config/driver.ts +1 -1
  261. package/src/registry/config/index.ts +212 -43
  262. package/src/registry/config/legacy-runner.ts +1 -1
  263. package/src/registry/config/runner.ts +1 -1
  264. package/src/registry/config/serverless.ts +1 -1
  265. package/src/registry/index.ts +7 -5
  266. package/src/remote-manager-driver/api-utils.ts +1 -1
  267. package/src/schemas/actor-inspector/mod.ts +1 -1
  268. package/src/schemas/actor-inspector/versioned.ts +195 -8
  269. package/src/schemas/actor-persist/versioned.ts +87 -7
  270. package/src/schemas/client-protocol/mod.ts +1 -1
  271. package/src/schemas/client-protocol/versioned.ts +127 -11
  272. package/src/schemas/client-protocol-zod/mod.ts +16 -1
  273. package/src/schemas/persist/mod.ts +1 -0
  274. package/src/schemas/transport/mod.ts +1 -0
  275. package/src/serde.ts +1 -1
  276. package/src/serve-test-suite/mod.ts +10 -9
  277. package/src/test/mod.ts +15 -56
  278. package/src/utils/endpoint-parser.test.ts +1 -1
  279. package/src/utils/endpoint-parser.ts +1 -1
  280. package/src/utils/env-vars.ts +12 -1
  281. package/src/utils/node.ts +15 -2
  282. package/src/utils.test.ts +34 -0
  283. package/src/utils.ts +140 -6
  284. package/src/workflow/constants.ts +2 -0
  285. package/src/workflow/context.ts +532 -0
  286. package/src/workflow/driver.ts +191 -0
  287. package/src/workflow/inspector.ts +268 -0
  288. package/src/workflow/mod.ts +122 -0
  289. package/dist/tsup/chunk-2IJTYN6K.cjs +0 -278
  290. package/dist/tsup/chunk-2IJTYN6K.cjs.map +0 -1
  291. package/dist/tsup/chunk-2XQS746M.cjs.map +0 -1
  292. package/dist/tsup/chunk-3VP5CSHV.cjs +0 -114
  293. package/dist/tsup/chunk-3VP5CSHV.cjs.map +0 -1
  294. package/dist/tsup/chunk-AQFSQMBG.js +0 -114
  295. package/dist/tsup/chunk-AQFSQMBG.js.map +0 -1
  296. package/dist/tsup/chunk-E6ZE2YEA.js +0 -664
  297. package/dist/tsup/chunk-E6ZE2YEA.js.map +0 -1
  298. package/dist/tsup/chunk-FJ3KTN4V.js.map +0 -1
  299. package/dist/tsup/chunk-GBENOENJ.cjs +0 -8
  300. package/dist/tsup/chunk-GBENOENJ.cjs.map +0 -1
  301. package/dist/tsup/chunk-GD7UXGOE.cjs +0 -4762
  302. package/dist/tsup/chunk-GD7UXGOE.cjs.map +0 -1
  303. package/dist/tsup/chunk-GMAVRZSF.js.map +0 -1
  304. package/dist/tsup/chunk-H4TB4X25.cjs.map +0 -1
  305. package/dist/tsup/chunk-JDAD2YFA.js.map +0 -1
  306. package/dist/tsup/chunk-KCOVZOPS.js +0 -1946
  307. package/dist/tsup/chunk-KCOVZOPS.js.map +0 -1
  308. package/dist/tsup/chunk-KDFWJKMJ.cjs +0 -664
  309. package/dist/tsup/chunk-KDFWJKMJ.cjs.map +0 -1
  310. package/dist/tsup/chunk-LFVF5SCU.js.map +0 -1
  311. package/dist/tsup/chunk-Q6W7RJJP.js.map +0 -1
  312. package/dist/tsup/chunk-RUW5CZ5Z.cjs +0 -1949
  313. package/dist/tsup/chunk-RUW5CZ5Z.cjs.map +0 -1
  314. package/dist/tsup/chunk-RZW2DNND.cjs.map +0 -1
  315. package/dist/tsup/chunk-TCOEBUUE.js +0 -278
  316. package/dist/tsup/chunk-TCOEBUUE.js.map +0 -1
  317. package/dist/tsup/chunk-X35U3YNX.cjs.map +0 -1
  318. package/dist/tsup/keys-Chhy4ylv.d.cts +0 -8
  319. package/dist/tsup/keys-Chhy4ylv.d.ts +0 -8
  320. package/dist/tsup/v1-Gq4avTK3.d.cts +0 -240
  321. package/dist/tsup/v1-Gq4avTK3.d.ts +0 -240
  322. /package/dist/tsup/{chunk-XXGJCOL6.js.map → chunk-A6YIZWTK.js.map} +0 -0
@@ -0,0 +1,287 @@
1
+ import * as errors from "../errors";
2
+ import type { AnyDatabaseProvider } from "../database";
3
+ import type {
4
+ EventSchemaConfig,
5
+ InferQueueCompleteMap,
6
+ InferSchemaMap,
7
+ QueueSchemaConfig,
8
+ } from "../schema";
9
+ import { joinAbortSignals } from "../utils";
10
+ import type { QueueManager, QueueMessage } from "./queue-manager";
11
+
12
+ export type QueueMessageOf<Name extends string, Body> = Omit<
13
+ QueueMessage,
14
+ "name" | "body"
15
+ > & {
16
+ name: Name;
17
+ body: Body;
18
+ };
19
+
20
+ export type QueueName<TQueues extends QueueSchemaConfig> = keyof TQueues & string;
21
+ export type QueueFilterName<TQueues extends QueueSchemaConfig> =
22
+ keyof TQueues extends never ? string : QueueName<TQueues>;
23
+
24
+ type QueueMessageForName<
25
+ TQueues extends QueueSchemaConfig,
26
+ TName extends QueueFilterName<TQueues>,
27
+ > = keyof TQueues extends never
28
+ ? QueueMessage
29
+ : TName extends QueueName<TQueues>
30
+ ? QueueMessageOf<TName, InferSchemaMap<TQueues>[TName]>
31
+ : never;
32
+
33
+ type QueueCompleteArgs<T> = undefined extends T
34
+ ? [response?: T]
35
+ : [response: T];
36
+
37
+ type QueueCompleteArgsForName<
38
+ TQueues extends QueueSchemaConfig,
39
+ TName extends QueueFilterName<TQueues>,
40
+ > = keyof TQueues extends never
41
+ ? [response?: unknown]
42
+ : TName extends QueueName<TQueues>
43
+ ? [InferQueueCompleteMap<TQueues>[TName]] extends [never]
44
+ ? [response?: unknown]
45
+ : QueueCompleteArgs<InferQueueCompleteMap<TQueues>[TName]>
46
+ : [response?: unknown];
47
+
48
+ type QueueCompletableMessageForName<
49
+ TQueues extends QueueSchemaConfig,
50
+ TName extends QueueFilterName<TQueues>,
51
+ > = QueueMessageForName<TQueues, TName> & {
52
+ complete(
53
+ ...args: QueueCompleteArgsForName<TQueues, TName>
54
+ ): Promise<void>;
55
+ };
56
+
57
+ export type QueueResultMessageForName<
58
+ TQueues extends QueueSchemaConfig,
59
+ TName extends QueueFilterName<TQueues>,
60
+ TCompletable extends boolean,
61
+ > = TCompletable extends true
62
+ ? QueueCompletableMessageForName<TQueues, TName>
63
+ : QueueMessageForName<TQueues, TName>;
64
+
65
+ /** Options for receiving queue messages. */
66
+ export interface QueueNextOptions<
67
+ TName extends string = string,
68
+ TCompletable extends boolean = boolean,
69
+ > {
70
+ /** Queue names to receive from. If omitted, reads from all queue names. */
71
+ names?: readonly TName[];
72
+ /** Maximum number of messages to receive. Defaults to 1. */
73
+ count?: number;
74
+ /** Timeout in milliseconds. Omit to wait indefinitely. */
75
+ timeout?: number;
76
+ /** Optional abort signal for this receive call. */
77
+ signal?: AbortSignal;
78
+ /** Whether to return completable messages. */
79
+ completable?: TCompletable;
80
+ }
81
+
82
+ /** Options for non-blocking queue reads. */
83
+ export interface QueueTryNextOptions<
84
+ TName extends string = string,
85
+ TCompletable extends boolean = boolean,
86
+ > {
87
+ /** Queue names to receive from. If omitted, reads from all queue names. */
88
+ names?: readonly TName[];
89
+ /** Maximum number of messages to receive. Defaults to 1. */
90
+ count?: number;
91
+ /** Whether to return completable messages. */
92
+ completable?: TCompletable;
93
+ }
94
+
95
+ /** Options for queue async iteration. */
96
+ export interface QueueIterOptions<
97
+ TName extends string = string,
98
+ TCompletable extends boolean = boolean,
99
+ > {
100
+ /** Queue names to receive from. If omitted, reads from all queue names. */
101
+ names?: readonly TName[];
102
+ /** Optional abort signal for this iterator. */
103
+ signal?: AbortSignal;
104
+ /** Whether to return completable messages. */
105
+ completable?: TCompletable;
106
+ }
107
+
108
+ /** User-facing queue interface exposed on ActorContext. */
109
+ export class ActorQueue<
110
+ S,
111
+ CP,
112
+ CS,
113
+ V,
114
+ I,
115
+ DB extends AnyDatabaseProvider,
116
+ TEvents extends EventSchemaConfig = Record<never, never>,
117
+ TQueues extends QueueSchemaConfig = Record<never, never>,
118
+ > {
119
+ #queueManager: QueueManager<S, CP, CS, V, I, DB, TEvents, TQueues>;
120
+ #abortSignal: AbortSignal;
121
+ #pendingCompletableMessageIds = new Set<string>();
122
+
123
+ constructor(
124
+ queueManager: QueueManager<S, CP, CS, V, I, DB, TEvents, TQueues>,
125
+ abortSignal: AbortSignal,
126
+ ) {
127
+ this.#queueManager = queueManager;
128
+ this.#abortSignal = abortSignal;
129
+ }
130
+
131
+ async next<
132
+ const TName extends QueueFilterName<TQueues>,
133
+ const TCompletable extends boolean = false,
134
+ >(
135
+ opts?: QueueNextOptions<TName, TCompletable>,
136
+ ): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {
137
+ const resolvedOpts = (opts ?? {}) as QueueNextOptions<
138
+ TName,
139
+ TCompletable
140
+ >;
141
+ const completable = resolvedOpts.completable === true;
142
+
143
+ if (this.#pendingCompletableMessageIds.size > 0) {
144
+ throw new errors.QueuePreviousMessageNotCompleted();
145
+ }
146
+
147
+ const names = this.#normalizeNames(resolvedOpts.names);
148
+ const count = Math.max(1, resolvedOpts.count ?? 1);
149
+ const { signal, cleanup } = joinAbortSignals(
150
+ this.#abortSignal,
151
+ resolvedOpts.signal,
152
+ );
153
+ const messages = await this.#queueManager
154
+ .receive(
155
+ names,
156
+ count,
157
+ resolvedOpts.timeout,
158
+ signal,
159
+ completable,
160
+ )
161
+ .finally(cleanup);
162
+ if (!completable) {
163
+ return messages as Array<
164
+ QueueResultMessageForName<TQueues, TName, TCompletable>
165
+ >;
166
+ }
167
+ return messages.map((message) => this.#makeCompletableMessage(message)) as unknown as Array<
168
+ QueueResultMessageForName<TQueues, TName, TCompletable>
169
+ >;
170
+ }
171
+
172
+ async tryNext<
173
+ const TName extends QueueFilterName<TQueues>,
174
+ const TCompletable extends boolean = false,
175
+ >(
176
+ opts?: QueueTryNextOptions<TName, TCompletable>,
177
+ ): Promise<Array<QueueResultMessageForName<TQueues, TName, TCompletable>>> {
178
+ const resolvedOpts = (opts ?? {}) as QueueTryNextOptions<
179
+ TName,
180
+ TCompletable
181
+ >;
182
+ if (resolvedOpts.completable === true) {
183
+ return (await this.next<TName, true>({
184
+ names: resolvedOpts.names,
185
+ count: resolvedOpts.count,
186
+ timeout: 0,
187
+ completable: true,
188
+ })) as Array<QueueResultMessageForName<TQueues, TName, TCompletable>>;
189
+ }
190
+ return (await this.next<TName, false>({
191
+ names: resolvedOpts.names,
192
+ count: resolvedOpts.count,
193
+ timeout: 0,
194
+ })) as Array<QueueResultMessageForName<TQueues, TName, TCompletable>>;
195
+ }
196
+
197
+ async *iter<
198
+ const TName extends QueueFilterName<TQueues>,
199
+ const TCompletable extends boolean = false,
200
+ >(
201
+ opts?: QueueIterOptions<TName, TCompletable>,
202
+ ): AsyncIterableIterator<
203
+ QueueResultMessageForName<TQueues, TName, TCompletable>
204
+ > {
205
+ const resolvedOpts = (opts ?? {}) as QueueIterOptions<
206
+ TName,
207
+ TCompletable
208
+ >;
209
+ while (!this.#abortSignal.aborted) {
210
+ try {
211
+ const messages = resolvedOpts.completable === true
212
+ ? await this.next<TName, true>({
213
+ names: resolvedOpts.names,
214
+ count: 1,
215
+ signal: resolvedOpts.signal,
216
+ completable: true,
217
+ })
218
+ : await this.next<TName, false>({
219
+ names: resolvedOpts.names,
220
+ count: 1,
221
+ signal: resolvedOpts.signal,
222
+ });
223
+ if (messages.length === 0) {
224
+ continue;
225
+ }
226
+ yield messages[0] as QueueResultMessageForName<
227
+ TQueues,
228
+ TName,
229
+ TCompletable
230
+ >;
231
+ } catch (error) {
232
+ if (error instanceof errors.ActorAborted) {
233
+ return;
234
+ }
235
+ throw error;
236
+ }
237
+ }
238
+ }
239
+
240
+ /** Sends a message to the specified queue. */
241
+ send<K extends keyof TQueues & string>(
242
+ name: K,
243
+ body: InferSchemaMap<TQueues>[K],
244
+ ): Promise<QueueMessage>;
245
+ send(
246
+ name: keyof TQueues extends never ? string : never,
247
+ body: unknown,
248
+ ): Promise<QueueMessage>;
249
+ async send(name: string, body: unknown): Promise<QueueMessage> {
250
+ return await this.#queueManager.enqueue(name, body);
251
+ }
252
+
253
+ #normalizeNames(names: readonly string[] | undefined): string[] | undefined {
254
+ if (!names || names.length === 0) {
255
+ return undefined;
256
+ }
257
+ return [...new Set(names)];
258
+ }
259
+
260
+ #makeCompletableMessage(
261
+ message: QueueMessage,
262
+ ): QueueMessage & {
263
+ complete: (response?: unknown) => Promise<void>;
264
+ } {
265
+ const messageId = message.id.toString();
266
+ this.#pendingCompletableMessageIds.add(messageId);
267
+
268
+ let completed = false;
269
+ const completableMessage = {
270
+ ...message,
271
+ complete: async (response?: unknown) => {
272
+ if (completed) {
273
+ throw new errors.QueueAlreadyCompleted();
274
+ }
275
+ completed = true;
276
+ try {
277
+ await this.#queueManager.completeMessage(message, response);
278
+ this.#pendingCompletableMessageIds.delete(messageId);
279
+ } catch (error) {
280
+ completed = false;
281
+ throw error;
282
+ }
283
+ },
284
+ };
285
+ return completableMessage;
286
+ }
287
+ }
@@ -6,6 +6,7 @@ import {
6
6
  } from "@/utils";
7
7
  import type { AnyDatabaseProvider } from "../database";
8
8
  import type { ActorDriver } from "../driver";
9
+ import type { EventSchemaConfig, QueueSchemaConfig } from "../schema";
9
10
  import type { ActorInstance } from "./mod";
10
11
  import type { PersistedScheduleEvent } from "./persisted";
11
12
 
@@ -13,15 +14,24 @@ import type { PersistedScheduleEvent } from "./persisted";
13
14
  * Manages scheduled events and alarms for actor instances.
14
15
  * Handles event scheduling, alarm triggers, and automatic event execution.
15
16
  */
16
- export class ScheduleManager<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {
17
- #actor: ActorInstance<S, CP, CS, V, I, DB>;
17
+ export class ScheduleManager<
18
+ S,
19
+ CP,
20
+ CS,
21
+ V,
22
+ I,
23
+ DB extends AnyDatabaseProvider,
24
+ E extends EventSchemaConfig = Record<never, never>,
25
+ Q extends QueueSchemaConfig = Record<never, never>,
26
+ > {
27
+ #actor: ActorInstance<S, CP, CS, V, I, DB, E, Q>;
18
28
  #actorDriver: ActorDriver;
19
29
  #alarmWriteQueue = new SinglePromiseQueue();
20
30
  #config: any; // ActorConfig type
21
31
  #persist: any; // Reference to PersistedActor
22
32
 
23
33
  constructor(
24
- actor: ActorInstance<S, CP, CS, V, I, DB>,
34
+ actor: ActorInstance<S, CP, CS, V, I, DB, E, Q>,
25
35
  actorDriver: ActorDriver,
26
36
  config: any,
27
37
  ) {
@@ -59,6 +69,12 @@ export class ScheduleManager<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {
59
69
  args: bufferToArrayBuffer(cbor.encode(args)),
60
70
  };
61
71
 
72
+ this.#actor.emitTraceEvent("schedule.created", {
73
+ "rivet.schedule.event_id": newEvent.eventId,
74
+ "rivet.schedule.action": newEvent.action,
75
+ "rivet.schedule.timestamp_ms": newEvent.timestamp,
76
+ });
77
+
62
78
  await this.#scheduleEventInner(newEvent);
63
79
  }
64
80
 
@@ -252,7 +268,25 @@ export class ScheduleManager<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {
252
268
 
253
269
  async #executeDueEvents(events: PersistedScheduleEvent[]): Promise<void> {
254
270
  for (const event of events) {
271
+ const span = this.#actor.startTraceSpan(
272
+ `actor.action.${event.action}`,
273
+ {
274
+ "rivet.action.name": event.action,
275
+ "rivet.action.scheduled": true,
276
+ "rivet.schedule.event_id": event.eventId,
277
+ "rivet.schedule.timestamp_ms": event.timestamp,
278
+ },
279
+ );
255
280
  try {
281
+ this.#actor.emitTraceEvent(
282
+ "schedule.triggered",
283
+ {
284
+ "rivet.schedule.event_id": event.eventId,
285
+ "rivet.schedule.action": event.action,
286
+ "rivet.schedule.timestamp_ms": event.timestamp,
287
+ },
288
+ span,
289
+ );
256
290
  this.#actor.log.info({
257
291
  msg: "executing scheduled event",
258
292
  eventId: event.eventId,
@@ -281,10 +315,8 @@ export class ScheduleManager<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {
281
315
  ? cbor.decode(new Uint8Array(event.args))
282
316
  : [];
283
317
 
284
- const result = fn.call(
285
- undefined,
286
- this.#actor.actorContext,
287
- ...args,
318
+ const result = this.#actor.traces.withSpan(span, () =>
319
+ fn.call(undefined, this.#actor.actorContext, ...args),
288
320
  );
289
321
 
290
322
  // Handle async actions
@@ -292,12 +324,22 @@ export class ScheduleManager<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {
292
324
  await result;
293
325
  }
294
326
 
327
+ this.#actor.endTraceSpan(span, { code: "OK" });
295
328
  this.#actor.log.debug({
296
329
  msg: "scheduled event completed",
297
330
  eventId: event.eventId,
298
331
  action: event.action,
299
332
  });
300
333
  } catch (error) {
334
+ this.#actor.traces.setAttributes(span, {
335
+ "error.message": stringifyError(error),
336
+ "error.type":
337
+ error instanceof Error ? error.name : typeof error,
338
+ });
339
+ this.#actor.endTraceSpan(span, {
340
+ code: "ERROR",
341
+ message: stringifyError(error),
342
+ });
301
343
  this.#actor.log.error({
302
344
  msg: "error executing scheduled event",
303
345
  error: stringifyError(error),
@@ -7,10 +7,12 @@ import {
7
7
  CONN_VERSIONED,
8
8
  } from "@/schemas/actor-persist/versioned";
9
9
  import { promiseWithResolvers, SinglePromiseQueue } from "@/utils";
10
+ import { loggerWithoutContext } from "@/actor/log";
10
11
  import { type AnyConn, CONN_STATE_MANAGER_SYMBOL } from "../conn/mod";
11
12
  import { convertConnToBarePersistedConn } from "../conn/persisted";
12
13
  import type { ActorDriver } from "../driver";
13
14
  import * as errors from "../errors";
15
+ import type { EventSchemaConfig, QueueSchemaConfig } from "../schema";
14
16
  import { isConnStatePath, isStatePath } from "../utils";
15
17
  import { KEYS, makeConnKey } from "./keys";
16
18
  import type { ActorInstance } from "./mod";
@@ -35,8 +37,15 @@ export interface SaveStateOptions {
35
37
  * Manages actor state persistence, proxying, and synchronization.
36
38
  * Handles automatic state change detection and throttled persistence to KV storage.
37
39
  */
38
- export class StateManager<S, CP, CS, I> {
39
- #actor: ActorInstance<S, CP, CS, any, I, any>;
40
+ export class StateManager<
41
+ S,
42
+ CP,
43
+ CS,
44
+ I,
45
+ E extends EventSchemaConfig = Record<never, never>,
46
+ Q extends QueueSchemaConfig = Record<never, never>,
47
+ > {
48
+ #actor: ActorInstance<S, CP, CS, any, I, any, E, Q>;
40
49
  #actorDriver: ActorDriver;
41
50
 
42
51
  // State tracking
@@ -57,7 +66,7 @@ export class StateManager<S, CP, CS, I> {
57
66
  #stateSaveInterval: number;
58
67
 
59
68
  constructor(
60
- actor: ActorInstance<S, CP, CS, any, I, any>,
69
+ actor: ActorInstance<S, CP, CS, any, I, any, E, Q>,
61
70
  actorDriver: ActorDriver,
62
71
  config: any,
63
72
  ) {
@@ -108,9 +117,14 @@ export class StateManager<S, CP, CS, I> {
108
117
  this.#actor.rLog.info({ msg: "actor state initializing" });
109
118
 
110
119
  if ("createState" in this.#config) {
111
- stateData = await this.#config.createState(
112
- this.#actor.actorContext,
113
- persistData.input!,
120
+ stateData = await this.#actor.runInTraceSpan(
121
+ "actor.createState",
122
+ undefined,
123
+ () =>
124
+ this.#config.createState!(
125
+ this.#actor.actorContext,
126
+ persistData.input!,
127
+ ),
114
128
  );
115
129
  } else if ("state" in this.#config) {
116
130
  stateData = structuredClone(this.#config.state);
@@ -205,7 +219,7 @@ export class StateManager<S, CP, CS, I> {
205
219
  } else {
206
220
  // Create promise for waiting
207
221
  if (!this.#onPersistSavedPromise) {
208
- this.#onPersistSavedPromise = promiseWithResolvers();
222
+ this.#onPersistSavedPromise = promiseWithResolvers((reason) => loggerWithoutContext().warn({ msg: "unhandled persist saved promise rejection", reason }));
209
223
  }
210
224
 
211
225
  // Save throttled
@@ -349,13 +363,23 @@ export class StateManager<S, CP, CS, I> {
349
363
  this.#actor.isReady() &&
350
364
  !this.#isInOnStateChange
351
365
  ) {
366
+ const span = this.#actor.startTraceSpan("actor.onStateChange", {
367
+ "rivet.state.path": path,
368
+ });
352
369
  try {
353
370
  this.#isInOnStateChange = true;
354
- this.#config.onStateChange(
355
- this.#actor.actorContext,
356
- this.#persistRaw.state,
371
+ this.#actor.traces.withSpan(span, () =>
372
+ this.#config.onStateChange!(
373
+ this.#actor.actorContext,
374
+ this.#persistRaw.state,
375
+ ),
357
376
  );
377
+ this.#actor.endTraceSpan(span, { code: "OK" });
358
378
  } catch (error) {
379
+ this.#actor.endTraceSpan(span, {
380
+ code: "ERROR",
381
+ message: stringifyError(error),
382
+ });
359
383
  this.#actor.rLog.error({
360
384
  msg: "error in `_onStateChange`",
361
385
  error: stringifyError(error),
@@ -440,7 +464,7 @@ export class StateManager<S, CP, CS, I> {
440
464
  this.#actor.rLog.info({
441
465
  msg: "persisting connection",
442
466
  connId,
443
- gatewayId: idToStr(hibernatableDataRaw.requestId),
467
+ gatewayId: idToStr(hibernatableDataRaw.gatewayId),
444
468
  requestId: idToStr(hibernatableDataRaw.requestId),
445
469
  serverMessageIndex:
446
470
  hibernatableDataRaw.serverMessageIndex,
@@ -0,0 +1,128 @@
1
+ import type { TracesDriver } from "@rivetkit/traces";
2
+ import type { ActorDriver } from "../driver";
3
+ import { tracesStoragePrefix } from "./keys";
4
+
5
+ function concatPrefix(prefix: Uint8Array, key: Uint8Array): Uint8Array {
6
+ const merged = new Uint8Array(prefix.length + key.length);
7
+ merged.set(prefix, 0);
8
+ merged.set(key, prefix.length);
9
+ return merged;
10
+ }
11
+
12
+ function stripPrefix(prefix: Uint8Array, key: Uint8Array): Uint8Array {
13
+ return key.slice(prefix.length);
14
+ }
15
+
16
+ function compareBytes(a: Uint8Array, b: Uint8Array): number {
17
+ const len = Math.min(a.length, b.length);
18
+ for (let i = 0; i < len; i++) {
19
+ if (a[i] !== b[i]) {
20
+ return a[i] - b[i];
21
+ }
22
+ }
23
+ return a.length - b.length;
24
+ }
25
+
26
+ export class ActorTracesDriver implements TracesDriver {
27
+ #driver: ActorDriver;
28
+ #actorId: string;
29
+ #prefix: Uint8Array;
30
+
31
+ constructor(driver: ActorDriver, actorId: string) {
32
+ this.#driver = driver;
33
+ this.#actorId = actorId;
34
+ this.#prefix = tracesStoragePrefix();
35
+ }
36
+
37
+ async get(key: Uint8Array): Promise<Uint8Array | null> {
38
+ const [value] = await this.#driver.kvBatchGet(this.#actorId, [
39
+ concatPrefix(this.#prefix, key),
40
+ ]);
41
+ return value ?? null;
42
+ }
43
+
44
+ async set(key: Uint8Array, value: Uint8Array): Promise<void> {
45
+ await this.#driver.kvBatchPut(this.#actorId, [
46
+ [concatPrefix(this.#prefix, key), value],
47
+ ]);
48
+ }
49
+
50
+ async delete(key: Uint8Array): Promise<void> {
51
+ await this.#driver.kvBatchDelete(this.#actorId, [
52
+ concatPrefix(this.#prefix, key),
53
+ ]);
54
+ }
55
+
56
+ async deletePrefix(prefix: Uint8Array): Promise<void> {
57
+ const fullPrefix = concatPrefix(this.#prefix, prefix);
58
+ const entries = await this.#driver.kvListPrefix(
59
+ this.#actorId,
60
+ fullPrefix,
61
+ );
62
+ if (entries.length === 0) {
63
+ return;
64
+ }
65
+ await this.#driver.kvBatchDelete(
66
+ this.#actorId,
67
+ entries.map(([key]) => key),
68
+ );
69
+ }
70
+
71
+ async list(
72
+ prefix: Uint8Array,
73
+ ): Promise<Array<{ key: Uint8Array; value: Uint8Array }>> {
74
+ const fullPrefix = concatPrefix(this.#prefix, prefix);
75
+ const entries = await this.#driver.kvListPrefix(
76
+ this.#actorId,
77
+ fullPrefix,
78
+ );
79
+ return entries.map(([key, value]) => ({
80
+ key: stripPrefix(this.#prefix, key),
81
+ value,
82
+ }));
83
+ }
84
+
85
+ async listRange(
86
+ start: Uint8Array,
87
+ end: Uint8Array,
88
+ options?: { reverse?: boolean; limit?: number },
89
+ ): Promise<Array<{ key: Uint8Array; value: Uint8Array }>> {
90
+ const fullStart = concatPrefix(this.#prefix, start);
91
+ const fullEnd = concatPrefix(this.#prefix, end);
92
+ const entries = await this.#driver.kvListPrefix(
93
+ this.#actorId,
94
+ this.#prefix,
95
+ );
96
+ const filtered = entries
97
+ .filter(([key]) => {
98
+ return (
99
+ compareBytes(key, fullStart) >= 0 &&
100
+ compareBytes(key, fullEnd) < 0
101
+ );
102
+ })
103
+ .sort(([keyA], [keyB]) => compareBytes(keyA, keyB));
104
+ if (options?.reverse) {
105
+ filtered.reverse();
106
+ }
107
+ const limited = options?.limit
108
+ ? filtered.slice(0, options.limit)
109
+ : filtered;
110
+ return limited.map(([key, value]) => ({
111
+ key: stripPrefix(this.#prefix, key),
112
+ value,
113
+ }));
114
+ }
115
+
116
+ async batch(writes: Array<{ key: Uint8Array; value: Uint8Array }>): Promise<void> {
117
+ if (writes.length === 0) {
118
+ return;
119
+ }
120
+ await this.#driver.kvBatchPut(
121
+ this.#actorId,
122
+ writes.map(({ key, value }) => [
123
+ concatPrefix(this.#prefix, key),
124
+ value,
125
+ ]),
126
+ );
127
+ }
128
+ }
package/src/actor/mod.ts CHANGED
@@ -7,6 +7,8 @@ import {
7
7
  } from "./config";
8
8
  import type { AnyDatabaseProvider } from "./database";
9
9
  import { ActorDefinition } from "./definition";
10
+ import { event as schemaEvent, queue as schemaQueue } from "./schema";
11
+ import type { EventSchemaConfig, QueueSchemaConfig } from "./schema";
10
12
 
11
13
  export function actor<
12
14
  TState,
@@ -15,13 +17,26 @@ export function actor<
15
17
  TVars,
16
18
  TInput,
17
19
  TDatabase extends AnyDatabaseProvider,
20
+ TEvents extends EventSchemaConfig = Record<never, never>,
21
+ TQueues extends QueueSchemaConfig = Record<never, never>,
18
22
  TActions extends Actions<
19
23
  TState,
20
24
  TConnParams,
21
25
  TConnState,
22
26
  TVars,
23
27
  TInput,
24
- TDatabase
28
+ TDatabase,
29
+ TEvents,
30
+ TQueues
31
+ > = Actions<
32
+ TState,
33
+ TConnParams,
34
+ TConnState,
35
+ TVars,
36
+ TInput,
37
+ TDatabase,
38
+ TEvents,
39
+ TQueues
25
40
  >,
26
41
  >(
27
42
  input: ActorConfigInput<
@@ -31,6 +46,8 @@ export function actor<
31
46
  TVars,
32
47
  TInput,
33
48
  TDatabase,
49
+ TEvents,
50
+ TQueues,
34
51
  TActions
35
52
  >,
36
53
  ): ActorDefinition<
@@ -40,6 +57,8 @@ export function actor<
40
57
  TVars,
41
58
  TInput,
42
59
  TDatabase,
60
+ TEvents,
61
+ TQueues,
43
62
  TActions
44
63
  > {
45
64
  const config = ActorConfigSchema.parse(input) as ActorConfig<
@@ -48,7 +67,9 @@ export function actor<
48
67
  TConnState,
49
68
  TVars,
50
69
  TInput,
51
- TDatabase
70
+ TDatabase,
71
+ TEvents,
72
+ TQueues
52
73
  >;
53
74
  return new ActorDefinition(config);
54
75
  }
@@ -84,3 +105,6 @@ export {
84
105
  createActorRouter,
85
106
  } from "./router";
86
107
  export { routeWebSocket } from "./router-websocket-endpoints";
108
+ export type { Type } from "./schema";
109
+ export const event = schemaEvent;
110
+ export const queue = schemaQueue;