rivetkit 2.0.3 → 2.0.5

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 (237) hide show
  1. package/README.md +11 -0
  2. package/dist/schemas/actor-persist/v1.ts +21 -24
  3. package/dist/schemas/client-protocol/v1.ts +6 -0
  4. package/dist/tsup/actor/errors.cjs +10 -2
  5. package/dist/tsup/actor/errors.cjs.map +1 -1
  6. package/dist/tsup/actor/errors.d.cts +17 -4
  7. package/dist/tsup/actor/errors.d.ts +17 -4
  8. package/dist/tsup/actor/errors.js +11 -3
  9. package/dist/tsup/{chunk-4NSUQZ2H.js → chunk-2MD57QF4.js} +119 -115
  10. package/dist/tsup/chunk-2MD57QF4.js.map +1 -0
  11. package/dist/tsup/{chunk-GIR3AFFI.cjs → chunk-5QGQK44L.cjs} +103 -44
  12. package/dist/tsup/chunk-5QGQK44L.cjs.map +1 -0
  13. package/dist/tsup/chunk-5YTI25C3.cjs +250 -0
  14. package/dist/tsup/chunk-5YTI25C3.cjs.map +1 -0
  15. package/dist/tsup/chunk-B2QGJGZQ.js +338 -0
  16. package/dist/tsup/chunk-B2QGJGZQ.js.map +1 -0
  17. package/dist/tsup/{chunk-3H7O2A7I.js → chunk-CFFKMUYH.js} +61 -22
  18. package/dist/tsup/chunk-CFFKMUYH.js.map +1 -0
  19. package/dist/tsup/{chunk-FLMTTN27.js → chunk-CKA54YQN.js} +15 -8
  20. package/dist/tsup/chunk-CKA54YQN.js.map +1 -0
  21. package/dist/tsup/chunk-D7NWUCRK.cjs +20 -0
  22. package/dist/tsup/chunk-D7NWUCRK.cjs.map +1 -0
  23. package/dist/tsup/{chunk-FCCPJNMA.cjs → chunk-FGFT4FVX.cjs} +12 -27
  24. package/dist/tsup/chunk-FGFT4FVX.cjs.map +1 -0
  25. package/dist/tsup/chunk-I5VTWPHW.js +20 -0
  26. package/dist/tsup/chunk-I5VTWPHW.js.map +1 -0
  27. package/dist/tsup/{chunk-6WKQDDUD.cjs → chunk-IRMBWX36.cjs} +146 -142
  28. package/dist/tsup/chunk-IRMBWX36.cjs.map +1 -0
  29. package/dist/tsup/chunk-L7QRXNWP.js +6562 -0
  30. package/dist/tsup/chunk-L7QRXNWP.js.map +1 -0
  31. package/dist/tsup/{chunk-R2OPSKIV.cjs → chunk-LZIBTLEY.cjs} +20 -13
  32. package/dist/tsup/chunk-LZIBTLEY.cjs.map +1 -0
  33. package/dist/tsup/chunk-MRZS2J4X.cjs +6562 -0
  34. package/dist/tsup/chunk-MRZS2J4X.cjs.map +1 -0
  35. package/dist/tsup/{chunk-PO4VLDWA.js → chunk-PG3K2LI7.js} +3 -5
  36. package/dist/tsup/chunk-PG3K2LI7.js.map +1 -0
  37. package/dist/tsup/{chunk-TZJKSBUQ.cjs → chunk-PHSQJ6QI.cjs} +3 -5
  38. package/dist/tsup/chunk-PHSQJ6QI.cjs.map +1 -0
  39. package/dist/tsup/chunk-RM2SVURR.cjs +338 -0
  40. package/dist/tsup/chunk-RM2SVURR.cjs.map +1 -0
  41. package/dist/tsup/{chunk-OGAPU3UG.cjs → chunk-WADSS5X4.cjs} +66 -27
  42. package/dist/tsup/chunk-WADSS5X4.cjs.map +1 -0
  43. package/dist/tsup/chunk-WNGOBAA7.js +250 -0
  44. package/dist/tsup/chunk-WNGOBAA7.js.map +1 -0
  45. package/dist/tsup/{chunk-INGJP237.js → chunk-YPZFLUO6.js} +103 -44
  46. package/dist/tsup/chunk-YPZFLUO6.js.map +1 -0
  47. package/dist/tsup/{chunk-6PDXBYI5.js → chunk-YW6Y6VNE.js} +8 -23
  48. package/dist/tsup/chunk-YW6Y6VNE.js.map +1 -0
  49. package/dist/tsup/client/mod.cjs +10 -10
  50. package/dist/tsup/client/mod.d.cts +7 -13
  51. package/dist/tsup/client/mod.d.ts +7 -13
  52. package/dist/tsup/client/mod.js +9 -9
  53. package/dist/tsup/common/log.cjs +12 -4
  54. package/dist/tsup/common/log.cjs.map +1 -1
  55. package/dist/tsup/common/log.d.cts +23 -17
  56. package/dist/tsup/common/log.d.ts +23 -17
  57. package/dist/tsup/common/log.js +15 -7
  58. package/dist/tsup/common/websocket.cjs +5 -5
  59. package/dist/tsup/common/websocket.js +4 -4
  60. package/dist/tsup/{common-CpqORuCq.d.cts → common-CXCe7s6i.d.cts} +2 -2
  61. package/dist/tsup/{common-CpqORuCq.d.ts → common-CXCe7s6i.d.ts} +2 -2
  62. package/dist/tsup/{connection-BwUMoe6n.d.ts → connection-BvE-Oq7t.d.ts} +215 -234
  63. package/dist/tsup/{connection-BR_Ve4ku.d.cts → connection-DTzmWwU5.d.cts} +215 -234
  64. package/dist/tsup/driver-helpers/mod.cjs +6 -9
  65. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  66. package/dist/tsup/driver-helpers/mod.d.cts +5 -6
  67. package/dist/tsup/driver-helpers/mod.d.ts +5 -6
  68. package/dist/tsup/driver-helpers/mod.js +6 -9
  69. package/dist/tsup/driver-test-suite/mod.cjs +615 -1357
  70. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  71. package/dist/tsup/driver-test-suite/mod.d.cts +12 -6
  72. package/dist/tsup/driver-test-suite/mod.d.ts +12 -6
  73. package/dist/tsup/driver-test-suite/mod.js +1334 -2076
  74. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  75. package/dist/tsup/inspector/mod.cjs +6 -8
  76. package/dist/tsup/inspector/mod.cjs.map +1 -1
  77. package/dist/tsup/inspector/mod.d.cts +3 -3
  78. package/dist/tsup/inspector/mod.d.ts +3 -3
  79. package/dist/tsup/inspector/mod.js +8 -10
  80. package/dist/tsup/mod.cjs +9 -15
  81. package/dist/tsup/mod.cjs.map +1 -1
  82. package/dist/tsup/mod.d.cts +47 -42
  83. package/dist/tsup/mod.d.ts +47 -42
  84. package/dist/tsup/mod.js +10 -16
  85. package/dist/tsup/{router-endpoints-DAbqVFx2.d.ts → router-endpoints-CctffZNL.d.cts} +2 -3
  86. package/dist/tsup/{router-endpoints-AYkXG8Tl.d.cts → router-endpoints-DFm1BglJ.d.ts} +2 -3
  87. package/dist/tsup/test/mod.cjs +10 -14
  88. package/dist/tsup/test/mod.cjs.map +1 -1
  89. package/dist/tsup/test/mod.d.cts +4 -5
  90. package/dist/tsup/test/mod.d.ts +4 -5
  91. package/dist/tsup/test/mod.js +9 -13
  92. package/dist/tsup/{utils-CT0cv4jd.d.ts → utils-fwx3o3K9.d.cts} +1 -0
  93. package/dist/tsup/{utils-CT0cv4jd.d.cts → utils-fwx3o3K9.d.ts} +1 -0
  94. package/dist/tsup/utils.cjs +5 -3
  95. package/dist/tsup/utils.cjs.map +1 -1
  96. package/dist/tsup/utils.d.cts +19 -2
  97. package/dist/tsup/utils.d.ts +19 -2
  98. package/dist/tsup/utils.js +4 -2
  99. package/package.json +6 -6
  100. package/src/actor/action.ts +1 -5
  101. package/src/actor/config.ts +27 -295
  102. package/src/actor/connection.ts +9 -12
  103. package/src/actor/context.ts +1 -4
  104. package/src/actor/definition.ts +7 -11
  105. package/src/actor/errors.ts +98 -36
  106. package/src/actor/generic-conn-driver.ts +28 -16
  107. package/src/actor/instance.ts +177 -133
  108. package/src/actor/log.ts +4 -13
  109. package/src/actor/mod.ts +0 -5
  110. package/src/actor/protocol/old.ts +42 -26
  111. package/src/actor/protocol/serde.ts +1 -1
  112. package/src/actor/router-endpoints.ts +47 -39
  113. package/src/actor/router.ts +22 -19
  114. package/src/actor/unstable-react.ts +1 -1
  115. package/src/actor/utils.ts +6 -2
  116. package/src/client/actor-common.ts +1 -1
  117. package/src/client/actor-conn.ts +152 -91
  118. package/src/client/actor-handle.ts +85 -25
  119. package/src/client/actor-query.ts +65 -0
  120. package/src/client/client.ts +29 -98
  121. package/src/client/config.ts +44 -0
  122. package/src/client/errors.ts +1 -0
  123. package/src/client/log.ts +2 -4
  124. package/src/client/mod.ts +16 -12
  125. package/src/client/raw-utils.ts +82 -25
  126. package/src/client/utils.ts +5 -3
  127. package/src/common/fake-event-source.ts +10 -9
  128. package/src/common/inline-websocket-adapter2.ts +39 -30
  129. package/src/common/log.ts +176 -101
  130. package/src/common/logfmt.ts +21 -30
  131. package/src/common/router.ts +12 -19
  132. package/src/common/utils.ts +27 -13
  133. package/src/common/websocket.ts +0 -1
  134. package/src/driver-helpers/mod.ts +1 -1
  135. package/src/driver-test-suite/log.ts +1 -3
  136. package/src/driver-test-suite/mod.ts +87 -61
  137. package/src/driver-test-suite/test-inline-client-driver.ts +441 -255
  138. package/src/driver-test-suite/tests/actor-error-handling.ts +4 -12
  139. package/src/driver-test-suite/tests/actor-handle.ts +33 -0
  140. package/src/driver-test-suite/tests/actor-inspector.ts +2 -1
  141. package/src/driver-test-suite/tests/manager-driver.ts +5 -3
  142. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -226
  143. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -392
  144. package/src/driver-test-suite/tests/request-access.ts +112 -126
  145. package/src/driver-test-suite/utils.ts +10 -6
  146. package/src/drivers/default.ts +7 -4
  147. package/src/drivers/engine/actor-driver.ts +22 -13
  148. package/src/drivers/engine/config.ts +2 -10
  149. package/src/drivers/engine/kv.ts +1 -1
  150. package/src/drivers/engine/log.ts +1 -3
  151. package/src/drivers/engine/mod.ts +2 -3
  152. package/src/drivers/file-system/actor.ts +1 -1
  153. package/src/drivers/file-system/global-state.ts +36 -21
  154. package/src/drivers/file-system/log.ts +1 -3
  155. package/src/drivers/file-system/manager.ts +33 -15
  156. package/src/inspector/config.ts +9 -4
  157. package/src/inspector/log.ts +1 -1
  158. package/src/inspector/manager.ts +2 -2
  159. package/src/inspector/utils.ts +1 -1
  160. package/src/manager/driver.ts +10 -2
  161. package/src/manager/hono-websocket-adapter.ts +21 -12
  162. package/src/manager/log.ts +2 -4
  163. package/src/manager/mod.ts +1 -1
  164. package/src/manager/router.ts +378 -1390
  165. package/src/manager-api/routes/actors-create.ts +16 -0
  166. package/src/manager-api/routes/actors-delete.ts +4 -0
  167. package/src/manager-api/routes/actors-get-by-id.ts +7 -0
  168. package/src/manager-api/routes/actors-get-or-create-by-id.ts +29 -0
  169. package/src/manager-api/routes/actors-get.ts +7 -0
  170. package/src/manager-api/routes/common.ts +18 -0
  171. package/src/mod.ts +0 -2
  172. package/src/registry/config.ts +1 -1
  173. package/src/registry/log.ts +2 -4
  174. package/src/registry/mod.ts +63 -34
  175. package/src/registry/run-config.ts +39 -26
  176. package/src/registry/serve.ts +4 -5
  177. package/src/remote-manager-driver/actor-http-client.ts +74 -0
  178. package/src/remote-manager-driver/actor-websocket-client.ts +64 -0
  179. package/src/remote-manager-driver/api-endpoints.ts +79 -0
  180. package/src/remote-manager-driver/api-utils.ts +46 -0
  181. package/src/remote-manager-driver/log.ts +5 -0
  182. package/src/remote-manager-driver/mod.ts +275 -0
  183. package/src/{drivers/engine → remote-manager-driver}/ws-proxy.ts +24 -14
  184. package/src/serde.ts +8 -2
  185. package/src/test/log.ts +1 -3
  186. package/src/test/mod.ts +17 -16
  187. package/src/utils.ts +53 -0
  188. package/dist/tsup/chunk-2CRLFV6Z.cjs +0 -202
  189. package/dist/tsup/chunk-2CRLFV6Z.cjs.map +0 -1
  190. package/dist/tsup/chunk-3H7O2A7I.js.map +0 -1
  191. package/dist/tsup/chunk-42I3OZ3Q.js +0 -15
  192. package/dist/tsup/chunk-42I3OZ3Q.js.map +0 -1
  193. package/dist/tsup/chunk-4NSUQZ2H.js.map +0 -1
  194. package/dist/tsup/chunk-6PDXBYI5.js.map +0 -1
  195. package/dist/tsup/chunk-6WKQDDUD.cjs.map +0 -1
  196. package/dist/tsup/chunk-CTBOSFUH.cjs +0 -116
  197. package/dist/tsup/chunk-CTBOSFUH.cjs.map +0 -1
  198. package/dist/tsup/chunk-EGVZZFE2.js +0 -2857
  199. package/dist/tsup/chunk-EGVZZFE2.js.map +0 -1
  200. package/dist/tsup/chunk-FCCPJNMA.cjs.map +0 -1
  201. package/dist/tsup/chunk-FLMTTN27.js.map +0 -1
  202. package/dist/tsup/chunk-GIR3AFFI.cjs.map +0 -1
  203. package/dist/tsup/chunk-INGJP237.js.map +0 -1
  204. package/dist/tsup/chunk-KJCJLKRM.js +0 -116
  205. package/dist/tsup/chunk-KJCJLKRM.js.map +0 -1
  206. package/dist/tsup/chunk-KUPQZYUQ.cjs +0 -15
  207. package/dist/tsup/chunk-KUPQZYUQ.cjs.map +0 -1
  208. package/dist/tsup/chunk-O2MBYIXO.cjs +0 -2857
  209. package/dist/tsup/chunk-O2MBYIXO.cjs.map +0 -1
  210. package/dist/tsup/chunk-OGAPU3UG.cjs.map +0 -1
  211. package/dist/tsup/chunk-OV6AYD4S.js +0 -4406
  212. package/dist/tsup/chunk-OV6AYD4S.js.map +0 -1
  213. package/dist/tsup/chunk-PO4VLDWA.js.map +0 -1
  214. package/dist/tsup/chunk-R2OPSKIV.cjs.map +0 -1
  215. package/dist/tsup/chunk-TZJKSBUQ.cjs.map +0 -1
  216. package/dist/tsup/chunk-UBUC5C3G.cjs +0 -189
  217. package/dist/tsup/chunk-UBUC5C3G.cjs.map +0 -1
  218. package/dist/tsup/chunk-UIM22YJL.cjs +0 -4406
  219. package/dist/tsup/chunk-UIM22YJL.cjs.map +0 -1
  220. package/dist/tsup/chunk-URVFQMYI.cjs +0 -230
  221. package/dist/tsup/chunk-URVFQMYI.cjs.map +0 -1
  222. package/dist/tsup/chunk-UVUPOS46.js +0 -230
  223. package/dist/tsup/chunk-UVUPOS46.js.map +0 -1
  224. package/dist/tsup/chunk-VRRHBNJC.js +0 -189
  225. package/dist/tsup/chunk-VRRHBNJC.js.map +0 -1
  226. package/dist/tsup/chunk-XFSS33EQ.js +0 -202
  227. package/dist/tsup/chunk-XFSS33EQ.js.map +0 -1
  228. package/src/client/http-client-driver.ts +0 -326
  229. package/src/driver-test-suite/tests/actor-auth.ts +0 -591
  230. package/src/drivers/engine/api-endpoints.ts +0 -128
  231. package/src/drivers/engine/api-utils.ts +0 -70
  232. package/src/drivers/engine/manager-driver.ts +0 -391
  233. package/src/inline-client-driver/log.ts +0 -7
  234. package/src/inline-client-driver/mod.ts +0 -385
  235. package/src/manager/auth.ts +0 -121
  236. /package/src/{drivers/engine → actor}/keys.test.ts +0 -0
  237. /package/src/{drivers/engine → actor}/keys.ts +0 -0
@@ -1,326 +0,0 @@
1
- import * as cbor from "cbor-x";
2
- import type { Context as HonoContext } from "hono";
3
- import type { WebSocket } from "ws";
4
- import type { Encoding } from "@/actor/protocol/serde";
5
- import {
6
- HEADER_ACTOR_ID,
7
- HEADER_ACTOR_QUERY,
8
- HEADER_CONN_ID,
9
- HEADER_CONN_PARAMS,
10
- HEADER_CONN_TOKEN,
11
- HEADER_ENCODING,
12
- } from "@/actor/router-endpoints";
13
- import { importEventSource } from "@/common/eventsource";
14
- import type { UniversalEventSource } from "@/common/eventsource-interface";
15
- import { importWebSocket } from "@/common/websocket";
16
- import type { ActorQuery } from "@/manager/protocol/query";
17
- import type * as protocol from "@/schemas/client-protocol/mod";
18
- import {
19
- HTTP_ACTION_REQUEST_VERSIONED,
20
- HTTP_ACTION_RESPONSE_VERSIONED,
21
- HTTP_RESOLVE_REQUEST_VERSIONED,
22
- HTTP_RESOLVE_RESPONSE_VERSIONED,
23
- TO_SERVER_VERSIONED,
24
- } from "@/schemas/client-protocol/versioned";
25
- import { serializeWithEncoding, wsBinaryTypeForEncoding } from "@/serde";
26
- import { assertUnreachable, bufferToArrayBuffer, httpUserAgent } from "@/utils";
27
- import type { ClientDriver } from "./client";
28
- import * as errors from "./errors";
29
- import { logger } from "./log";
30
- import { sendHttpRequest } from "./utils";
31
-
32
- /**
33
- * Client driver that communicates with the manager via HTTP.
34
- */
35
- export function createHttpClientDriver(managerEndpoint: string): ClientDriver {
36
- // Lazily import the dynamic imports so we don't have to turn `createClient` in to an async fn
37
- const dynamicImports = (async () => {
38
- // Import dynamic dependencies
39
- const [WebSocket, EventSource] = await Promise.all([
40
- importWebSocket(),
41
- importEventSource(),
42
- ]);
43
- return {
44
- WebSocket,
45
- EventSource,
46
- };
47
- })();
48
-
49
- const driver: ClientDriver = {
50
- action: async <Args extends Array<unknown> = unknown[], Response = unknown>(
51
- _c: HonoContext | undefined,
52
- actorQuery: ActorQuery,
53
- encoding: Encoding,
54
- params: unknown,
55
- name: string,
56
- args: Args,
57
- opts: { signal?: AbortSignal } | undefined,
58
- ): Promise<Response> => {
59
- logger().debug("actor handle action", {
60
- name,
61
- args,
62
- query: actorQuery,
63
- });
64
-
65
- const responseData = await sendHttpRequest<
66
- protocol.HttpActionRequest,
67
- protocol.HttpActionResponse
68
- >({
69
- url: `${managerEndpoint}/registry/actors/actions/${encodeURIComponent(name)}`,
70
- method: "POST",
71
- headers: {
72
- [HEADER_ENCODING]: encoding,
73
- [HEADER_ACTOR_QUERY]: JSON.stringify(actorQuery),
74
- ...(params !== undefined
75
- ? { [HEADER_CONN_PARAMS]: JSON.stringify(params) }
76
- : {}),
77
- },
78
- body: {
79
- args: bufferToArrayBuffer(cbor.encode(args)),
80
- } satisfies protocol.HttpActionRequest,
81
- encoding: encoding,
82
- signal: opts?.signal,
83
- requestVersionedDataHandler: HTTP_ACTION_REQUEST_VERSIONED,
84
- responseVersionedDataHandler: HTTP_ACTION_RESPONSE_VERSIONED,
85
- });
86
-
87
- return cbor.decode(new Uint8Array(responseData.output));
88
- },
89
-
90
- resolveActorId: async (
91
- _c: HonoContext | undefined,
92
- actorQuery: ActorQuery,
93
- encodingKind: Encoding,
94
- params: unknown,
95
- ): Promise<string> => {
96
- logger().debug("resolving actor ID", { query: actorQuery });
97
-
98
- try {
99
- const result = await sendHttpRequest<
100
- null,
101
- protocol.HttpResolveResponse
102
- >({
103
- url: `${managerEndpoint}/registry/actors/resolve`,
104
- method: "POST",
105
- headers: {
106
- [HEADER_ENCODING]: encodingKind,
107
- [HEADER_ACTOR_QUERY]: JSON.stringify(actorQuery),
108
- ...(params !== undefined
109
- ? { [HEADER_CONN_PARAMS]: JSON.stringify(params) }
110
- : {}),
111
- },
112
- body: null,
113
- encoding: encodingKind,
114
- requestVersionedDataHandler: HTTP_RESOLVE_REQUEST_VERSIONED,
115
- responseVersionedDataHandler: HTTP_RESOLVE_RESPONSE_VERSIONED,
116
- });
117
-
118
- logger().debug("resolved actor ID", { actorId: result.actorId });
119
- return result.actorId;
120
- } catch (error) {
121
- logger().error("failed to resolve actor ID", { error });
122
- if (error instanceof errors.ActorError) {
123
- throw error;
124
- } else {
125
- throw new errors.InternalError(
126
- `Failed to resolve actor ID: ${String(error)}`,
127
- );
128
- }
129
- }
130
- },
131
-
132
- connectWebSocket: async (
133
- _c: HonoContext | undefined,
134
- actorQuery: ActorQuery,
135
- encodingKind: Encoding,
136
- params: unknown,
137
- ): Promise<WebSocket> => {
138
- const { WebSocket } = await dynamicImports;
139
-
140
- const endpoint = managerEndpoint
141
- .replace(/^http:/, "ws:")
142
- .replace(/^https:/, "wss:");
143
- const url = `${endpoint}/registry/actors/connect/websocket`;
144
-
145
- // Pass sensitive data via protocol
146
- const protocol = [
147
- `query.${encodeURIComponent(JSON.stringify(actorQuery))}`,
148
- `encoding.${encodingKind}`,
149
- ];
150
- if (params)
151
- protocol.push(
152
- `conn_params.${encodeURIComponent(JSON.stringify(params))}`,
153
- );
154
-
155
- // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
156
- protocol.push("rivetkit");
157
-
158
- logger().debug("connecting to websocket", { url });
159
- const ws = new WebSocket(url, protocol);
160
- // HACK: Bun bug prevents changing binary type, so we ignore the error https://github.com/oven-sh/bun/issues/17005
161
- try {
162
- ws.binaryType = wsBinaryTypeForEncoding(encodingKind);
163
- } catch (error) {}
164
-
165
- // Node & web WebSocket types not compatible
166
- return ws as any;
167
- },
168
-
169
- connectSse: async (
170
- _c: HonoContext | undefined,
171
- actorQuery: ActorQuery,
172
- encodingKind: Encoding,
173
- params: unknown,
174
- ): Promise<UniversalEventSource> => {
175
- const { EventSource } = await dynamicImports;
176
-
177
- const url = `${managerEndpoint}/registry/actors/connect/sse`;
178
-
179
- logger().debug("connecting to sse", { url });
180
- const eventSource = new EventSource(url, {
181
- fetch: (input, init) => {
182
- return fetch(input, {
183
- ...init,
184
- headers: {
185
- ...init?.headers,
186
- "User-Agent": httpUserAgent(),
187
- [HEADER_ENCODING]: encodingKind,
188
- [HEADER_ACTOR_QUERY]: JSON.stringify(actorQuery),
189
- ...(params !== undefined
190
- ? { [HEADER_CONN_PARAMS]: JSON.stringify(params) }
191
- : {}),
192
- },
193
- credentials: "include",
194
- });
195
- },
196
- });
197
-
198
- return eventSource as UniversalEventSource;
199
- },
200
-
201
- sendHttpMessage: async (
202
- _c: HonoContext | undefined,
203
- actorId: string,
204
- encoding: Encoding,
205
- connectionId: string,
206
- connectionToken: string,
207
- message: protocol.ToServer,
208
- ): Promise<void> => {
209
- // TODO: Implement ordered messages, this is not guaranteed order. Needs to use an index in order to ensure we can pipeline requests efficiently.
210
- // TODO: Validate that we're using HTTP/3 whenever possible for pipelining requests
211
- const messageSerialized = serializeWithEncoding(
212
- encoding,
213
- message,
214
- TO_SERVER_VERSIONED,
215
- );
216
- const res = await fetch(`${managerEndpoint}/registry/actors/message`, {
217
- method: "POST",
218
- headers: {
219
- "User-Agent": httpUserAgent(),
220
- [HEADER_ENCODING]: encoding,
221
- [HEADER_ACTOR_ID]: actorId,
222
- [HEADER_CONN_ID]: connectionId,
223
- [HEADER_CONN_TOKEN]: connectionToken,
224
- },
225
- body: messageSerialized,
226
- credentials: "include",
227
- });
228
- if (!res.ok) {
229
- throw new errors.InternalError(
230
- `Publish message over HTTP error (${res.statusText}):\n${await res.text()}`,
231
- );
232
- }
233
-
234
- // Discard response
235
- await res.body?.cancel();
236
- },
237
-
238
- rawHttpRequest: async (
239
- _c: HonoContext | undefined,
240
- actorQuery: ActorQuery,
241
- encoding: Encoding,
242
- params: unknown,
243
- path: string,
244
- init: RequestInit,
245
- ): Promise<Response> => {
246
- // Build the full URL
247
- // Remove leading slash from path to avoid double slashes
248
- const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
249
- const url = `${managerEndpoint}/registry/actors/raw/http/${normalizedPath}`;
250
-
251
- logger().debug("rewriting http url", {
252
- from: path,
253
- to: url,
254
- });
255
-
256
- // Merge headers properly
257
- const headers = new Headers(init.headers);
258
- headers.set("User-Agent", httpUserAgent());
259
- headers.set(HEADER_ACTOR_QUERY, JSON.stringify(actorQuery));
260
- headers.set(HEADER_ENCODING, encoding);
261
- if (params !== undefined) {
262
- headers.set(HEADER_CONN_PARAMS, JSON.stringify(params));
263
- }
264
-
265
- // Forward the request with query in headers
266
- return await fetch(url, {
267
- ...init,
268
- headers,
269
- });
270
- },
271
-
272
- rawWebSocket: async (
273
- _c: HonoContext | undefined,
274
- actorQuery: ActorQuery,
275
- encoding: Encoding,
276
- params: unknown,
277
- path: string,
278
- protocols: string | string[] | undefined,
279
- ): Promise<WebSocket> => {
280
- const { WebSocket } = await dynamicImports;
281
-
282
- // Build the WebSocket URL with normalized path
283
- const wsEndpoint = managerEndpoint
284
- .replace(/^http:/, "ws:")
285
- .replace(/^https:/, "wss:");
286
- // Normalize path to match raw HTTP behavior
287
- const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
288
- const url = `${wsEndpoint}/registry/actors/raw/websocket/${normalizedPath}`;
289
-
290
- logger().debug("rewriting websocket url", {
291
- from: path,
292
- to: url,
293
- });
294
-
295
- // Pass data via WebSocket protocol subprotocols
296
- const protocolList: string[] = [];
297
- protocolList.push(
298
- `query.${encodeURIComponent(JSON.stringify(actorQuery))}`,
299
- );
300
- protocolList.push(`encoding.${encoding}`);
301
- if (params) {
302
- protocolList.push(
303
- `conn_params.${encodeURIComponent(JSON.stringify(params))}`,
304
- );
305
- }
306
-
307
- // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
308
- protocolList.push("rivetkit");
309
-
310
- // Add user protocols
311
- if (protocols) {
312
- if (Array.isArray(protocols)) {
313
- protocolList.push(...protocols);
314
- } else {
315
- protocolList.push(protocols);
316
- }
317
- }
318
-
319
- // Create WebSocket connection
320
- logger().debug("opening raw websocket", { url });
321
- return new WebSocket(url, protocolList) as any;
322
- },
323
- };
324
-
325
- return driver;
326
- }