rivetkit 2.0.24-rc.1 → 2.0.24

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 (228) hide show
  1. package/dist/schemas/actor-persist/v2.ts +3 -3
  2. package/dist/schemas/actor-persist/v3.ts +274 -0
  3. package/dist/schemas/client-protocol/v2.ts +432 -0
  4. package/dist/schemas/file-system-driver/v2.ts +136 -0
  5. package/dist/tsup/actor/errors.cjs +2 -4
  6. package/dist/tsup/actor/errors.cjs.map +1 -1
  7. package/dist/tsup/actor/errors.d.cts +7 -10
  8. package/dist/tsup/actor/errors.d.ts +7 -10
  9. package/dist/tsup/actor/errors.js +9 -11
  10. package/dist/tsup/{actor-router-consts-B3Lu87yJ.d.cts → actor-router-consts-DzI2szci.d.cts} +5 -9
  11. package/dist/tsup/{actor-router-consts-B3Lu87yJ.d.ts → actor-router-consts-DzI2szci.d.ts} +5 -9
  12. package/dist/tsup/{chunk-HHFKKVLR.cjs → chunk-3543NCSN.cjs} +45 -57
  13. package/dist/tsup/chunk-3543NCSN.cjs.map +1 -0
  14. package/dist/tsup/chunk-4SHILYS5.cjs +5694 -0
  15. package/dist/tsup/chunk-4SHILYS5.cjs.map +1 -0
  16. package/dist/tsup/{chunk-ZTH3KYFH.cjs → chunk-5BZO5XPS.cjs} +3 -3
  17. package/dist/tsup/{chunk-ZTH3KYFH.cjs.map → chunk-5BZO5XPS.cjs.map} +1 -1
  18. package/dist/tsup/{chunk-PLUN2NQT.js → chunk-BAIGSF64.js} +189 -187
  19. package/dist/tsup/chunk-BAIGSF64.js.map +1 -0
  20. package/dist/tsup/{chunk-SHVX2QUR.cjs → chunk-CHLZBSI2.cjs} +17 -17
  21. package/dist/tsup/chunk-CHLZBSI2.cjs.map +1 -0
  22. package/dist/tsup/chunk-D3SLADUD.cjs +512 -0
  23. package/dist/tsup/chunk-D3SLADUD.cjs.map +1 -0
  24. package/dist/tsup/{chunk-KSRXX3Z4.cjs → chunk-D6762AOA.cjs} +20 -25
  25. package/dist/tsup/chunk-D6762AOA.cjs.map +1 -0
  26. package/dist/tsup/{chunk-7L65NNWP.cjs → chunk-DLK5YCTN.cjs} +187 -185
  27. package/dist/tsup/chunk-DLK5YCTN.cjs.map +1 -0
  28. package/dist/tsup/{chunk-YBG6R7LX.js → chunk-DUJQWGYD.js} +3 -7
  29. package/dist/tsup/chunk-DUJQWGYD.js.map +1 -0
  30. package/dist/tsup/{chunk-CD33GT6Z.js → chunk-EIPANQMF.js} +2 -2
  31. package/dist/tsup/{chunk-2JYPS5YM.cjs → chunk-ESMTDP7G.cjs} +6 -6
  32. package/dist/tsup/chunk-ESMTDP7G.cjs.map +1 -0
  33. package/dist/tsup/{chunk-VHGY7PU5.cjs → chunk-FVAKREFB.cjs} +1900 -1737
  34. package/dist/tsup/chunk-FVAKREFB.cjs.map +1 -0
  35. package/dist/tsup/{chunk-BLK27ES3.js → chunk-I3XT7WOF.js} +44 -56
  36. package/dist/tsup/chunk-I3XT7WOF.js.map +1 -0
  37. package/dist/tsup/{chunk-YBHYXIP6.js → chunk-IMDS5T42.js} +3 -3
  38. package/dist/tsup/chunk-IMDS5T42.js.map +1 -0
  39. package/dist/tsup/{chunk-INNFK746.cjs → chunk-J3HZJF2P.cjs} +10 -14
  40. package/dist/tsup/chunk-J3HZJF2P.cjs.map +1 -0
  41. package/dist/tsup/{chunk-BYMKMOBS.js → chunk-MBBJUHSP.js} +1844 -1681
  42. package/dist/tsup/chunk-MBBJUHSP.js.map +1 -0
  43. package/dist/tsup/{chunk-BOMZS2TJ.js → chunk-MO5CB6MD.js} +9 -9
  44. package/dist/tsup/chunk-MO5CB6MD.js.map +1 -0
  45. package/dist/tsup/chunk-OFOTPKAH.js +512 -0
  46. package/dist/tsup/chunk-OFOTPKAH.js.map +1 -0
  47. package/dist/tsup/{chunk-G64QUEDJ.js → chunk-W6RDS6NW.js} +23 -28
  48. package/dist/tsup/chunk-W6RDS6NW.js.map +1 -0
  49. package/dist/tsup/{chunk-36JJ4IQB.cjs → chunk-YC5DUHPM.cjs} +4 -8
  50. package/dist/tsup/chunk-YC5DUHPM.cjs.map +1 -0
  51. package/dist/tsup/{chunk-FX7TWFQR.js → chunk-YC7YPM2T.js} +2 -6
  52. package/dist/tsup/chunk-YC7YPM2T.js.map +1 -0
  53. package/dist/tsup/{chunk-227FEWMB.js → chunk-ZSPU5R4C.js} +3322 -2251
  54. package/dist/tsup/chunk-ZSPU5R4C.js.map +1 -0
  55. package/dist/tsup/client/mod.cjs +9 -9
  56. package/dist/tsup/client/mod.d.cts +5 -7
  57. package/dist/tsup/client/mod.d.ts +5 -7
  58. package/dist/tsup/client/mod.js +8 -8
  59. package/dist/tsup/common/log.cjs +3 -3
  60. package/dist/tsup/common/log.js +2 -2
  61. package/dist/tsup/common/websocket.cjs +4 -4
  62. package/dist/tsup/common/websocket.js +3 -3
  63. package/dist/tsup/{conn-B3Vhbgnd.d.ts → config-BRDYDraU.d.cts} +1119 -1047
  64. package/dist/tsup/{conn-DJWL3nGx.d.cts → config-Bo-blHpJ.d.ts} +1119 -1047
  65. package/dist/tsup/driver-helpers/mod.cjs +5 -13
  66. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  67. package/dist/tsup/driver-helpers/mod.d.cts +11 -9
  68. package/dist/tsup/driver-helpers/mod.d.ts +11 -9
  69. package/dist/tsup/driver-helpers/mod.js +14 -22
  70. package/dist/tsup/driver-test-suite/mod.cjs +474 -303
  71. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  72. package/dist/tsup/driver-test-suite/mod.d.cts +6 -9
  73. package/dist/tsup/driver-test-suite/mod.d.ts +6 -9
  74. package/dist/tsup/driver-test-suite/mod.js +1085 -914
  75. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  76. package/dist/tsup/inspector/mod.cjs +6 -6
  77. package/dist/tsup/inspector/mod.d.cts +5 -7
  78. package/dist/tsup/inspector/mod.d.ts +5 -7
  79. package/dist/tsup/inspector/mod.js +5 -5
  80. package/dist/tsup/mod.cjs +10 -16
  81. package/dist/tsup/mod.cjs.map +1 -1
  82. package/dist/tsup/mod.d.cts +23 -25
  83. package/dist/tsup/mod.d.ts +23 -25
  84. package/dist/tsup/mod.js +17 -23
  85. package/dist/tsup/test/mod.cjs +11 -11
  86. package/dist/tsup/test/mod.d.cts +4 -6
  87. package/dist/tsup/test/mod.d.ts +4 -6
  88. package/dist/tsup/test/mod.js +10 -10
  89. package/dist/tsup/utils.cjs +3 -5
  90. package/dist/tsup/utils.cjs.map +1 -1
  91. package/dist/tsup/utils.d.cts +1 -2
  92. package/dist/tsup/utils.d.ts +1 -2
  93. package/dist/tsup/utils.js +2 -4
  94. package/package.json +13 -6
  95. package/src/actor/config.ts +56 -44
  96. package/src/actor/conn/driver.ts +61 -0
  97. package/src/actor/conn/drivers/http.ts +17 -0
  98. package/src/actor/conn/drivers/raw-request.ts +24 -0
  99. package/src/actor/conn/drivers/raw-websocket.ts +65 -0
  100. package/src/actor/conn/drivers/websocket.ts +129 -0
  101. package/src/actor/conn/mod.ts +232 -0
  102. package/src/actor/conn/persisted.ts +81 -0
  103. package/src/actor/conn/state-manager.ts +196 -0
  104. package/src/actor/contexts/action.ts +23 -0
  105. package/src/actor/{context.ts → contexts/actor.ts} +19 -8
  106. package/src/actor/contexts/conn-init.ts +31 -0
  107. package/src/actor/contexts/conn.ts +48 -0
  108. package/src/actor/contexts/create-conn-state.ts +13 -0
  109. package/src/actor/contexts/on-before-connect.ts +13 -0
  110. package/src/actor/contexts/on-connect.ts +22 -0
  111. package/src/actor/contexts/request.ts +48 -0
  112. package/src/actor/contexts/websocket.ts +48 -0
  113. package/src/actor/definition.ts +3 -3
  114. package/src/actor/driver.ts +36 -5
  115. package/src/actor/errors.ts +19 -24
  116. package/src/actor/instance/connection-manager.ts +465 -0
  117. package/src/actor/instance/event-manager.ts +292 -0
  118. package/src/actor/instance/kv.ts +15 -0
  119. package/src/actor/instance/mod.ts +1107 -0
  120. package/src/actor/instance/persisted.ts +67 -0
  121. package/src/actor/instance/schedule-manager.ts +349 -0
  122. package/src/actor/instance/state-manager.ts +502 -0
  123. package/src/actor/mod.ts +13 -16
  124. package/src/actor/protocol/old.ts +131 -43
  125. package/src/actor/protocol/serde.ts +19 -4
  126. package/src/actor/router-endpoints.ts +61 -586
  127. package/src/actor/router-websocket-endpoints.ts +408 -0
  128. package/src/actor/router.ts +63 -197
  129. package/src/actor/schedule.ts +1 -1
  130. package/src/client/actor-conn.ts +183 -249
  131. package/src/client/actor-handle.ts +29 -6
  132. package/src/client/client.ts +0 -4
  133. package/src/client/config.ts +1 -4
  134. package/src/client/mod.ts +0 -1
  135. package/src/client/raw-utils.ts +3 -3
  136. package/src/client/utils.ts +85 -39
  137. package/src/common/actor-router-consts.ts +5 -12
  138. package/src/common/{inline-websocket-adapter2.ts → inline-websocket-adapter.ts} +26 -48
  139. package/src/common/log.ts +1 -1
  140. package/src/common/router.ts +28 -17
  141. package/src/common/utils.ts +2 -0
  142. package/src/driver-helpers/mod.ts +7 -10
  143. package/src/driver-helpers/utils.ts +18 -9
  144. package/src/driver-test-suite/mod.ts +26 -50
  145. package/src/driver-test-suite/test-inline-client-driver.ts +27 -51
  146. package/src/driver-test-suite/tests/actor-conn-hibernation.ts +150 -0
  147. package/src/driver-test-suite/tests/actor-conn-state.ts +1 -4
  148. package/src/driver-test-suite/tests/actor-conn.ts +5 -9
  149. package/src/driver-test-suite/tests/actor-destroy.ts +294 -0
  150. package/src/driver-test-suite/tests/actor-driver.ts +0 -7
  151. package/src/driver-test-suite/tests/actor-handle.ts +12 -12
  152. package/src/driver-test-suite/tests/actor-metadata.ts +1 -1
  153. package/src/driver-test-suite/tests/manager-driver.ts +1 -1
  154. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +8 -8
  155. package/src/driver-test-suite/tests/raw-http-request-properties.ts +6 -5
  156. package/src/driver-test-suite/tests/raw-http.ts +5 -5
  157. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +7 -7
  158. package/src/driver-test-suite/tests/request-access.ts +4 -4
  159. package/src/driver-test-suite/utils.ts +6 -10
  160. package/src/drivers/engine/actor-driver.ts +614 -424
  161. package/src/drivers/engine/mod.ts +0 -1
  162. package/src/drivers/file-system/actor.ts +24 -12
  163. package/src/drivers/file-system/global-state.ts +427 -37
  164. package/src/drivers/file-system/manager.ts +71 -83
  165. package/src/drivers/file-system/mod.ts +3 -0
  166. package/src/drivers/file-system/utils.ts +18 -8
  167. package/src/engine-process/mod.ts +38 -38
  168. package/src/inspector/utils.ts +7 -5
  169. package/src/manager/driver.ts +11 -4
  170. package/src/manager/gateway.ts +4 -29
  171. package/src/manager/protocol/mod.ts +0 -2
  172. package/src/manager/protocol/query.ts +0 -4
  173. package/src/manager/router.ts +67 -64
  174. package/src/manager-api/actors.ts +13 -0
  175. package/src/mod.ts +1 -3
  176. package/src/registry/mod.ts +20 -20
  177. package/src/registry/serve.ts +9 -14
  178. package/src/remote-manager-driver/actor-websocket-client.ts +1 -16
  179. package/src/remote-manager-driver/api-endpoints.ts +13 -1
  180. package/src/remote-manager-driver/api-utils.ts +8 -0
  181. package/src/remote-manager-driver/metadata.ts +58 -0
  182. package/src/remote-manager-driver/mod.ts +47 -62
  183. package/src/remote-manager-driver/ws-proxy.ts +1 -1
  184. package/src/schemas/actor-persist/mod.ts +1 -1
  185. package/src/schemas/actor-persist/versioned.ts +56 -31
  186. package/src/schemas/client-protocol/mod.ts +1 -1
  187. package/src/schemas/client-protocol/versioned.ts +41 -21
  188. package/src/schemas/client-protocol-zod/mod.ts +103 -0
  189. package/src/schemas/file-system-driver/mod.ts +1 -1
  190. package/src/schemas/file-system-driver/versioned.ts +42 -19
  191. package/src/serde.ts +33 -11
  192. package/src/test/mod.ts +7 -3
  193. package/src/utils/node.ts +173 -0
  194. package/src/utils.ts +0 -4
  195. package/dist/tsup/chunk-227FEWMB.js.map +0 -1
  196. package/dist/tsup/chunk-2JYPS5YM.cjs.map +0 -1
  197. package/dist/tsup/chunk-36JJ4IQB.cjs.map +0 -1
  198. package/dist/tsup/chunk-7L65NNWP.cjs.map +0 -1
  199. package/dist/tsup/chunk-BLK27ES3.js.map +0 -1
  200. package/dist/tsup/chunk-BOMZS2TJ.js.map +0 -1
  201. package/dist/tsup/chunk-BYMKMOBS.js.map +0 -1
  202. package/dist/tsup/chunk-FX7TWFQR.js.map +0 -1
  203. package/dist/tsup/chunk-G64QUEDJ.js.map +0 -1
  204. package/dist/tsup/chunk-HHFKKVLR.cjs.map +0 -1
  205. package/dist/tsup/chunk-INNFK746.cjs.map +0 -1
  206. package/dist/tsup/chunk-KSRXX3Z4.cjs.map +0 -1
  207. package/dist/tsup/chunk-O44LFKSB.cjs +0 -4623
  208. package/dist/tsup/chunk-O44LFKSB.cjs.map +0 -1
  209. package/dist/tsup/chunk-PLUN2NQT.js.map +0 -1
  210. package/dist/tsup/chunk-S4UJG7ZE.js +0 -1119
  211. package/dist/tsup/chunk-S4UJG7ZE.js.map +0 -1
  212. package/dist/tsup/chunk-SHVX2QUR.cjs.map +0 -1
  213. package/dist/tsup/chunk-VFB23BYZ.cjs +0 -1119
  214. package/dist/tsup/chunk-VFB23BYZ.cjs.map +0 -1
  215. package/dist/tsup/chunk-VHGY7PU5.cjs.map +0 -1
  216. package/dist/tsup/chunk-YBG6R7LX.js.map +0 -1
  217. package/dist/tsup/chunk-YBHYXIP6.js.map +0 -1
  218. package/src/actor/action.ts +0 -178
  219. package/src/actor/conn-drivers.ts +0 -216
  220. package/src/actor/conn-socket.ts +0 -8
  221. package/src/actor/conn.ts +0 -272
  222. package/src/actor/instance.ts +0 -2336
  223. package/src/actor/persisted.ts +0 -49
  224. package/src/actor/unstable-react.ts +0 -110
  225. package/src/driver-test-suite/tests/actor-reconnect.ts +0 -170
  226. package/src/drivers/engine/kv.ts +0 -3
  227. package/src/manager/hono-websocket-adapter.ts +0 -393
  228. /package/dist/tsup/{chunk-CD33GT6Z.js.map → chunk-EIPANQMF.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/inspector/protocol/common.ts","../../src/manager/protocol/query.ts"],"sourcesContent":["import z from \"zod/v4\";\nimport { ActorKeySchema, MAX_ACTOR_KEY_SIZE } from \"@/manager/protocol/query\";\n\nexport const ActorId = z.string().brand(\"ActorId\");\nexport type ActorId = z.infer<typeof ActorId>;\n\nexport enum ActorFeature {\n\tLogs = \"logs\",\n\tConfig = \"config\",\n\tConnections = \"connections\",\n\tState = \"state\",\n\tConsole = \"console\",\n\tRuntime = \"runtime\",\n\tMetrics = \"metrics\",\n\tEventsMonitoring = \"events-monitoring\",\n\tDatabase = \"database\",\n}\n\nexport const ActorLogEntry = z.object({\n\tlevel: z.string(),\n\tmessage: z.string(),\n\ttimestamp: z.string(),\n\tmetadata: z.record(z.string(), z.any()).optional(),\n});\n\nexport const ActorSchema = z.object({\n\tid: ActorId,\n\tname: z.string(),\n\tkey: z.array(z.string()),\n\ttags: z.record(z.string(), z.string()).optional(),\n\tregion: z.string().optional(),\n\tcreatedAt: z.string().optional(),\n\tstartedAt: z.string().optional(),\n\tdestroyedAt: z.string().optional(),\n\tfeatures: z.array(z.enum(ActorFeature)).optional(),\n});\n\nexport type Actor = z.infer<typeof ActorSchema>;\nexport type ActorLogEntry = z.infer<typeof ActorLogEntry>;\n\n// MARK: State\n\nexport const OperationSchema = z.discriminatedUnion(\"op\", [\n\tz.object({\n\t\top: z.literal(\"remove\"),\n\t\tpath: z.string(),\n\t}),\n\tz.object({\n\t\top: z.literal(\"add\"),\n\t\tpath: z.string(),\n\t\tvalue: z.unknown(),\n\t}),\n\tz.object({\n\t\top: z.literal(\"replace\"),\n\t\tpath: z.string(),\n\t\tvalue: z.unknown(),\n\t}),\n\tz.object({\n\t\top: z.literal(\"move\"),\n\t\tpath: z.string(),\n\t\tfrom: z.string(),\n\t}),\n\tz.object({\n\t\top: z.literal(\"copy\"),\n\t\tpath: z.string(),\n\t\tfrom: z.string(),\n\t}),\n\tz.object({\n\t\top: z.literal(\"test\"),\n\t\tpath: z.string(),\n\t\tvalue: z.unknown(),\n\t}),\n]);\nexport type Operation = z.infer<typeof OperationSchema>;\n\nexport const PatchSchema = z.array(OperationSchema);\nexport type Patch = z.infer<typeof PatchSchema>;\n\n// MARK: Connections\n\nexport const ConnectionSchema = z.object({\n\tparams: z.record(z.string(), z.any()).optional(),\n\tid: z.string(),\n\tstateEnabled: z.boolean().optional(),\n\tstate: z.any().optional(),\n\tauth: z.record(z.string(), z.any()).optional(),\n});\nexport type Connection = z.infer<typeof ConnectionSchema>;\n\n// MARK: Realtime Events\n\nexport const RealtimeEventSchema = z.discriminatedUnion(\"type\", [\n\tz.object({\n\t\ttype: z.literal(\"action\"),\n\t\tname: z.string(),\n\t\targs: z.array(z.any()),\n\t\tconnId: z.string(),\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"broadcast\"),\n\t\teventName: z.string(),\n\t\targs: z.array(z.any()),\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"subscribe\"),\n\t\teventName: z.string(),\n\t\tconnId: z.string(),\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"unsubscribe\"),\n\t\teventName: z.string(),\n\t\tconnId: z.string(),\n\t}),\n\tz.object({\n\t\ttype: z.literal(\"event\"),\n\t\teventName: z.string(),\n\t\targs: z.array(z.any()),\n\t\tconnId: z.string(),\n\t}),\n]);\nexport type RealtimeEvent = z.infer<typeof RealtimeEventSchema>;\nexport const RecordedRealtimeEventSchema = RealtimeEventSchema.and(\n\tz.object({\n\t\tid: z.string(),\n\t\ttimestamp: z.number(),\n\t}),\n);\nexport type RecordedRealtimeEvent = z.infer<typeof RecordedRealtimeEventSchema>;\n\n// MARK: Database\n\nexport const DatabaseQuerySchema = z.object({\n\tsql: z.string(),\n\targs: z.array(z.string().or(z.number())),\n});\nexport type DatabaseQuery = z.infer<typeof DatabaseQuerySchema>;\n\nexport const TableSchema = z.object({\n\tschema: z.string(),\n\tname: z.string(),\n\ttype: z.enum([\"table\", \"view\"]),\n});\nexport type Table = z.infer<typeof TableSchema>;\n\nexport const TablesSchema = z.array(TableSchema);\nexport type Tables = z.infer<typeof TablesSchema>;\n\nexport const ColumnSchema = z.object({\n\tcid: z.number(),\n\tname: z.string(),\n\ttype: z\n\t\t.string()\n\t\t.toLowerCase()\n\t\t.transform((val) => {\n\t\t\treturn z\n\t\t\t\t.enum([\"integer\", \"text\", \"real\", \"blob\", \"numeric\", \"serial\"])\n\t\t\t\t.parse(val);\n\t\t}),\n\tnotnull: z.coerce.boolean(),\n\tdflt_value: z.string().nullable(),\n\tpk: z.coerce.boolean().nullable(),\n});\nexport type Column = z.infer<typeof ColumnSchema>;\n\nexport const ColumnsSchema = z.array(ColumnSchema);\nexport type Columns = z.infer<typeof ColumnsSchema>;\n\nexport const ForeignKeySchema = z.object({\n\tid: z.number(),\n\ttable: z.string(),\n\tfrom: z.string(),\n\tto: z.string(),\n});\nexport type ForeignKey = z.infer<typeof ForeignKeySchema>;\n\nexport const ForeignKeysSchema = z.array(ForeignKeySchema);\nexport type ForeignKeys = z.infer<typeof ForeignKeysSchema>;\n\n// MARK: Builds\n\nexport const BuildSchema = z.object({\n\tname: z.string(),\n\tcreatedAt: z.string().optional(),\n\ttags: z.record(z.string(), z.string()).optional(),\n});\nexport type Build = z.infer<typeof BuildSchema>;\nexport const BuildsSchema = z.array(BuildSchema);\nexport type Builds = z.infer<typeof BuildsSchema>;\n\nexport const CreateActorSchema = z.object({\n\tname: z.string(),\n\t// FIXME: Replace with ActorKeySchema when ready\n\tkey: z.array(z.string().max(MAX_ACTOR_KEY_SIZE)),\n\tinput: z.any(),\n});\nexport type CreateActor = z.infer<typeof CreateActorSchema>;\n","import { z } from \"zod\";\nimport { EncodingSchema } from \"@/actor/protocol/serde\";\nimport {\n\tHEADER_ACTOR_ID,\n\tHEADER_ACTOR_QUERY,\n\tHEADER_CONN_ID,\n\tHEADER_CONN_PARAMS,\n\tHEADER_CONN_TOKEN,\n\tHEADER_ENCODING,\n} from \"@/common/actor-router-consts\";\n\n// Maximum size of a key component in bytes\n// Set to 128 bytes to allow for separators and escape characters in the full key\n// Cloudflare's maximum key size is 512 bytes, so we need to be significantly smaller\nexport const MAX_ACTOR_KEY_SIZE = 128;\n\nexport const ActorKeySchema = z.array(z.string().max(MAX_ACTOR_KEY_SIZE));\n\nexport type ActorKey = z.infer<typeof ActorKeySchema>;\n\nexport const CreateRequestSchema = z.object({\n\tname: z.string(),\n\tkey: ActorKeySchema,\n\tinput: z.unknown().optional(),\n\tregion: z.string().optional(),\n});\n\nexport const GetForKeyRequestSchema = z.object({\n\tname: z.string(),\n\tkey: ActorKeySchema,\n});\n\nexport const GetOrCreateRequestSchema = z.object({\n\tname: z.string(),\n\tkey: ActorKeySchema,\n\tinput: z.unknown().optional(),\n\tregion: z.string().optional(),\n});\n\nexport const ActorQuerySchema = z.union([\n\tz.object({\n\t\tgetForId: z.object({\n\t\t\tname: z.string(),\n\t\t\tactorId: z.string(),\n\t\t}),\n\t}),\n\tz.object({\n\t\tgetForKey: GetForKeyRequestSchema,\n\t}),\n\tz.object({\n\t\tgetOrCreateForKey: GetOrCreateRequestSchema,\n\t}),\n\tz.object({\n\t\tcreate: CreateRequestSchema,\n\t}),\n]);\n\nexport const ConnectRequestSchema = z.object({\n\tquery: ActorQuerySchema.describe(HEADER_ACTOR_QUERY),\n\tencoding: EncodingSchema.describe(HEADER_ENCODING),\n\tconnParams: z.string().optional().describe(HEADER_CONN_PARAMS),\n});\n\nexport const ConnectWebSocketRequestSchema = z.object({\n\tquery: ActorQuerySchema.describe(\"query\"),\n\tencoding: EncodingSchema.describe(\"encoding\"),\n\tconnParams: z.unknown().optional().describe(\"conn_params\"),\n});\n\nexport const ConnMessageRequestSchema = z.object({\n\tactorId: z.string().describe(HEADER_ACTOR_ID),\n\tconnId: z.string().describe(HEADER_CONN_ID),\n\tencoding: EncodingSchema.describe(HEADER_ENCODING),\n\tconnToken: z.string().describe(HEADER_CONN_TOKEN),\n});\n\nexport const ResolveRequestSchema = z.object({\n\tquery: ActorQuerySchema.describe(HEADER_ACTOR_QUERY),\n\tconnParams: z.string().optional().describe(HEADER_CONN_PARAMS),\n});\n\nexport type ActorQuery = z.infer<typeof ActorQuerySchema>;\nexport type GetForKeyRequest = z.infer<typeof GetForKeyRequestSchema>;\nexport type GetOrCreateRequest = z.infer<typeof GetOrCreateRequestSchema>;\nexport type ConnectQuery = z.infer<typeof ConnectRequestSchema>;\n/**\n * Interface representing a request to create a actor.\n */\nexport type CreateRequest = z.infer<typeof CreateRequestSchema>;\n"],"mappings":"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","names":["z","z","ActorFeature"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/mod.ts"],"sourcesContent":["import type { Registry } from \"@/registry/mod\";\nimport { RemoteManagerDriver } from \"@/remote-manager-driver/mod\";\nimport {\n\ttype Client,\n\ttype ClientConfigInput,\n\tcreateClientWithDriver,\n} from \"./client\";\nimport { ClientConfigSchema } from \"./config\";\n\nexport {\n\tActorDefinition,\n\tAnyActorDefinition,\n} from \"@/actor/definition\";\nexport type { Transport } from \"@/actor/protocol/old\";\nexport type { Encoding } from \"@/actor/protocol/serde\";\nexport {\n\tActorClientError,\n\tActorError,\n\tInternalError,\n\tMalformedResponseMessage,\n\tManagerError,\n} from \"@/client/errors\";\nexport type { CreateRequest } from \"@/manager/protocol/query\";\nexport type { ActorActionFunction } from \"./actor-common\";\nexport type { ActorConn, EventUnsubscribe } from \"./actor-conn\";\nexport { ActorConnRaw } from \"./actor-conn\";\nexport type { ActorHandle } from \"./actor-handle\";\nexport { ActorHandleRaw } from \"./actor-handle\";\nexport type {\n\tActorAccessor,\n\tClient,\n\tClientRaw,\n\tCreateOptions,\n\tExtractActorsFromRegistry,\n\tExtractRegistryFromClient,\n\tGetOptions,\n\tGetWithIdOptions,\n\tQueryOptions,\n\tRegion,\n} from \"./client\";\n\n/**\n * Creates a client with the actor accessor proxy.\n */\nexport function createClient<A extends Registry<any>>(\n\tendpointOrConfig?: string | ClientConfigInput,\n): Client<A> {\n\t// Parse config\n\tconst configInput =\n\t\tendpointOrConfig === undefined\n\t\t\t? {}\n\t\t\t: typeof endpointOrConfig === \"string\"\n\t\t\t\t? { endpoint: endpointOrConfig }\n\t\t\t\t: endpointOrConfig;\n\tconst config = ClientConfigSchema.parse(configInput);\n\n\t// Create client\n\tconst driver = new RemoteManagerDriver(config);\n\treturn createClientWithDriver<A>(driver, config);\n}\n"],"mappings":";;;;;;;;;AA4CO,SAAS,aACf,kBACY;AAEZ,QAAM,cACL,qBAAqB,SAClB,CAAC,IACD,OAAO,qBAAqB,WAC3B,EAAE,UAAU,iBAAiB,IAC7B;AACL,QAAM,SAAS,mBAAmB,MAAM,WAAW;AAGnD,QAAM,SAAS,IAAI,oBAAoB,MAAM;AAC7C,SAAO,uBAA0B,QAAQ,MAAM;AAChD;","names":[]}
@@ -1,178 +0,0 @@
1
- import type { ActorKey } from "@/actor/mod";
2
- import type { Client } from "@/client/client";
3
- import type { Logger } from "@/common/log";
4
- import type { Registry } from "@/registry/mod";
5
- import type { Conn, ConnId } from "./conn";
6
- import type { ActorContext } from "./context";
7
- import type { AnyDatabaseProvider, InferDatabaseClient } from "./database";
8
- import type { SaveStateOptions } from "./instance";
9
- import type { Schedule } from "./schedule";
10
-
11
- /**
12
- * Context for a remote procedure call.
13
- *
14
- * @typeParam A Actor this action belongs to
15
- */
16
- export class ActionContext<
17
- TState,
18
- TConnParams,
19
- TConnState,
20
- TVars,
21
- TInput,
22
- TDatabase extends AnyDatabaseProvider,
23
- > {
24
- #actorContext: ActorContext<
25
- TState,
26
- TConnParams,
27
- TConnState,
28
- TVars,
29
- TInput,
30
- TDatabase
31
- >;
32
-
33
- /**
34
- * Should not be called directly.
35
- *
36
- * @param actorContext - The actor context
37
- * @param conn - The connection associated with the action
38
- */
39
- constructor(
40
- actorContext: ActorContext<
41
- TState,
42
- TConnParams,
43
- TConnState,
44
- TVars,
45
- TInput,
46
- TDatabase
47
- >,
48
- public readonly conn: Conn<
49
- TState,
50
- TConnParams,
51
- TConnState,
52
- TVars,
53
- TInput,
54
- TDatabase
55
- >,
56
- ) {
57
- this.#actorContext = actorContext;
58
- }
59
-
60
- /**
61
- * Get the actor state
62
- */
63
- get state(): TState {
64
- return this.#actorContext.state;
65
- }
66
-
67
- /**
68
- * Get the actor variables
69
- */
70
- get vars(): TVars {
71
- return this.#actorContext.vars;
72
- }
73
-
74
- /**
75
- * Broadcasts an event to all connected clients.
76
- */
77
- broadcast(name: string, ...args: any[]): void {
78
- this.#actorContext.broadcast(name, ...args);
79
- }
80
-
81
- /**
82
- * Gets the logger instance.
83
- */
84
- get log(): Logger {
85
- return this.#actorContext.log;
86
- }
87
-
88
- /**
89
- * Gets actor ID.
90
- */
91
- get actorId(): string {
92
- return this.#actorContext.actorId;
93
- }
94
-
95
- /**
96
- * Gets the actor name.
97
- */
98
- get name(): string {
99
- return this.#actorContext.name;
100
- }
101
-
102
- /**
103
- * Gets the actor key.
104
- */
105
- get key(): ActorKey {
106
- return this.#actorContext.key;
107
- }
108
-
109
- /**
110
- * Gets the region.
111
- */
112
- get region(): string {
113
- return this.#actorContext.region;
114
- }
115
-
116
- /**
117
- * Gets the scheduler.
118
- */
119
- get schedule(): Schedule {
120
- return this.#actorContext.schedule;
121
- }
122
-
123
- /**
124
- * Gets the map of connections.
125
- */
126
- get conns(): Map<
127
- ConnId,
128
- Conn<TState, TConnParams, TConnState, TVars, TInput, TDatabase>
129
- > {
130
- return this.#actorContext.conns;
131
- }
132
-
133
- /**
134
- * Returns the client for the given registry.
135
- */
136
- client<R extends Registry<any>>(): Client<R> {
137
- return this.#actorContext.client<R>();
138
- }
139
-
140
- /**
141
- * @experimental
142
- */
143
- get db(): InferDatabaseClient<TDatabase> {
144
- return this.#actorContext.db;
145
- }
146
-
147
- /**
148
- * Forces the state to get saved.
149
- */
150
- async saveState(opts: SaveStateOptions): Promise<void> {
151
- return this.#actorContext.saveState(opts);
152
- }
153
-
154
- /**
155
- * Prevents the actor from sleeping until promise is complete.
156
- */
157
- waitUntil(promise: Promise<void>): void {
158
- this.#actorContext.waitUntil(promise);
159
- }
160
-
161
- /**
162
- * AbortSignal that fires when the actor is stopping.
163
- */
164
- get abortSignal(): AbortSignal {
165
- return this.#actorContext.abortSignal;
166
- }
167
-
168
- /**
169
- * Forces the actor to sleep.
170
- *
171
- * Not supported on all drivers.
172
- *
173
- * @experimental
174
- */
175
- sleep() {
176
- this.#actorContext.sleep();
177
- }
178
- }
@@ -1,216 +0,0 @@
1
- import type { SSEStreamingApi } from "hono/streaming";
2
- import type { WSContext } from "hono/ws";
3
- import type { WebSocket } from "ws";
4
- import type { AnyConn } from "@/actor/conn";
5
- import type { AnyActorInstance } from "@/actor/instance";
6
- import type { CachedSerializer, Encoding } from "@/actor/protocol/serde";
7
- import { encodeDataToString } from "@/actor/protocol/serde";
8
- import type { HonoWebSocketAdapter } from "@/manager/hono-websocket-adapter";
9
- import type * as protocol from "@/schemas/client-protocol/mod";
10
- import { assertUnreachable, type promiseWithResolvers } from "@/utils";
11
-
12
- export enum ConnDriverKind {
13
- WEBSOCKET = 0,
14
- SSE = 1,
15
- HTTP = 2,
16
- }
17
-
18
- export enum ConnReadyState {
19
- UNKNOWN = -1,
20
- CONNECTING = 0,
21
- OPEN = 1,
22
- CLOSING = 2,
23
- CLOSED = 3,
24
- }
25
-
26
- export interface ConnDriverWebSocketState {
27
- encoding: Encoding;
28
- websocket: WSContext;
29
- closePromise: ReturnType<typeof promiseWithResolvers<void>>;
30
- }
31
-
32
- export interface ConnDriverSseState {
33
- encoding: Encoding;
34
- stream: SSEStreamingApi;
35
- }
36
-
37
- export type ConnDriverHttpState = Record<never, never>;
38
-
39
- export type ConnDriverState =
40
- | { [ConnDriverKind.WEBSOCKET]: ConnDriverWebSocketState }
41
- | { [ConnDriverKind.SSE]: ConnDriverSseState }
42
- | { [ConnDriverKind.HTTP]: ConnDriverHttpState };
43
-
44
- export interface ConnDriver<State> {
45
- sendMessage?(
46
- actor: AnyActorInstance,
47
- conn: AnyConn,
48
- state: State,
49
- message: CachedSerializer<protocol.ToClient>,
50
- ): void;
51
-
52
- /**
53
- * This returns a promise since we commonly disconnect at the end of a program, and not waiting will cause the socket to not close cleanly.
54
- */
55
- disconnect(
56
- actor: AnyActorInstance,
57
- conn: AnyConn,
58
- state: State,
59
- reason?: string,
60
- ): Promise<void>;
61
-
62
- /**
63
- * Returns the ready state of the connection.
64
- * This is used to determine if the connection is ready to send messages, or if the connection is stale.
65
- */
66
- getConnectionReadyState(
67
- actor: AnyActorInstance,
68
- conn: AnyConn,
69
- state: State,
70
- ): ConnReadyState | undefined;
71
- }
72
-
73
- // MARK: WebSocket
74
- const WEBSOCKET_DRIVER: ConnDriver<ConnDriverWebSocketState> = {
75
- sendMessage: (
76
- actor: AnyActorInstance,
77
- conn: AnyConn,
78
- state: ConnDriverWebSocketState,
79
- message: CachedSerializer<protocol.ToClient>,
80
- ) => {
81
- if (state.websocket.readyState !== ConnReadyState.OPEN) {
82
- actor.rLog.warn({
83
- msg: "attempting to send message to closed websocket, this is likely a bug in RivetKit",
84
- connId: conn.id,
85
- wsReadyState: state.websocket.readyState,
86
- });
87
- return;
88
- }
89
-
90
- const serialized = message.serialize(state.encoding);
91
-
92
- actor.rLog.debug({
93
- msg: "sending websocket message",
94
- encoding: state.encoding,
95
- dataType: typeof serialized,
96
- isUint8Array: serialized instanceof Uint8Array,
97
- isArrayBuffer: serialized instanceof ArrayBuffer,
98
- dataLength:
99
- (serialized as any).byteLength || (serialized as any).length,
100
- });
101
-
102
- // Convert Uint8Array to ArrayBuffer for proper transmission
103
- if (serialized instanceof Uint8Array) {
104
- const buffer = serialized.buffer.slice(
105
- serialized.byteOffset,
106
- serialized.byteOffset + serialized.byteLength,
107
- );
108
- // Handle SharedArrayBuffer case
109
- if (buffer instanceof SharedArrayBuffer) {
110
- const arrayBuffer = new ArrayBuffer(buffer.byteLength);
111
- new Uint8Array(arrayBuffer).set(new Uint8Array(buffer));
112
- actor.rLog.debug({
113
- msg: "converted SharedArrayBuffer to ArrayBuffer",
114
- byteLength: arrayBuffer.byteLength,
115
- });
116
- state.websocket.send(arrayBuffer);
117
- } else {
118
- actor.rLog.debug({
119
- msg: "sending ArrayBuffer",
120
- byteLength: buffer.byteLength,
121
- });
122
- state.websocket.send(buffer);
123
- }
124
- } else {
125
- actor.rLog.debug({
126
- msg: "sending string data",
127
- length: (serialized as string).length,
128
- });
129
- state.websocket.send(serialized);
130
- }
131
- },
132
-
133
- disconnect: async (
134
- _actor: AnyActorInstance,
135
- _conn: AnyConn,
136
- state: ConnDriverWebSocketState,
137
- reason?: string,
138
- ) => {
139
- // Close socket
140
- state.websocket.close(1000, reason);
141
-
142
- // Create promise to wait for socket to close gracefully
143
- await state.closePromise.promise;
144
- },
145
-
146
- getConnectionReadyState: (
147
- _actor: AnyActorInstance,
148
- _conn: AnyConn,
149
- state: ConnDriverWebSocketState,
150
- ): ConnReadyState | undefined => {
151
- return state.websocket.readyState;
152
- },
153
- };
154
-
155
- // MARK: SSE
156
- const SSE_DRIVER: ConnDriver<ConnDriverSseState> = {
157
- sendMessage: (
158
- _actor: AnyActorInstance,
159
- _conn: AnyConn,
160
- state: ConnDriverSseState,
161
- message: CachedSerializer<protocol.ToClient>,
162
- ) => {
163
- state.stream.writeSSE({
164
- data: encodeDataToString(message.serialize(state.encoding)),
165
- });
166
- },
167
-
168
- disconnect: async (
169
- _actor: AnyActorInstance,
170
- _conn: AnyConn,
171
- state: ConnDriverSseState,
172
- _reason?: string,
173
- ) => {
174
- state.stream.close();
175
- },
176
-
177
- getConnectionReadyState: (
178
- _actor: AnyActorInstance,
179
- _conn: AnyConn,
180
- state: ConnDriverSseState,
181
- ): ConnReadyState | undefined => {
182
- if (state.stream.aborted || state.stream.closed) {
183
- return ConnReadyState.CLOSED;
184
- }
185
-
186
- return ConnReadyState.OPEN;
187
- },
188
- };
189
-
190
- // MARK: HTTP
191
- const HTTP_DRIVER: ConnDriver<ConnDriverHttpState> = {
192
- getConnectionReadyState(_actor, _conn) {
193
- // TODO: This might not be the correct logic
194
- return ConnReadyState.OPEN;
195
- },
196
- disconnect: async () => {
197
- // Noop
198
- // TODO: Abort the request
199
- },
200
- };
201
-
202
- /** List of all connection drivers. */
203
- export const CONN_DRIVERS: Record<ConnDriverKind, ConnDriver<unknown>> = {
204
- [ConnDriverKind.WEBSOCKET]: WEBSOCKET_DRIVER,
205
- [ConnDriverKind.SSE]: SSE_DRIVER,
206
- [ConnDriverKind.HTTP]: HTTP_DRIVER,
207
- };
208
-
209
- export function getConnDriverKindFromState(
210
- state: ConnDriverState,
211
- ): ConnDriverKind {
212
- if (ConnDriverKind.WEBSOCKET in state) return ConnDriverKind.WEBSOCKET;
213
- else if (ConnDriverKind.SSE in state) return ConnDriverKind.SSE;
214
- else if (ConnDriverKind.HTTP in state) return ConnDriverKind.HTTP;
215
- else assertUnreachable(state);
216
- }
@@ -1,8 +0,0 @@
1
- import type { ConnDriverState } from "./conn-drivers";
2
-
3
- export interface ConnSocket {
4
- requestId: string;
5
- requestIdBuf?: ArrayBuffer;
6
- hibernatable: boolean;
7
- driverState: ConnDriverState;
8
- }