rivetkit 2.0.2 → 2.0.4

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 (246) hide show
  1. package/README.md +3 -5
  2. package/dist/schemas/actor-persist/v1.ts +225 -0
  3. package/dist/schemas/client-protocol/v1.ts +435 -0
  4. package/dist/schemas/file-system-driver/v1.ts +102 -0
  5. package/dist/tsup/actor/errors.cjs +77 -0
  6. package/dist/tsup/actor/errors.cjs.map +1 -0
  7. package/dist/tsup/actor/errors.d.cts +156 -0
  8. package/dist/tsup/actor/errors.d.ts +156 -0
  9. package/dist/tsup/actor/errors.js +77 -0
  10. package/dist/tsup/actor/errors.js.map +1 -0
  11. package/dist/tsup/chunk-3F2YSRJL.js +117 -0
  12. package/dist/tsup/chunk-3F2YSRJL.js.map +1 -0
  13. package/dist/tsup/chunk-4CXBCT26.cjs +250 -0
  14. package/dist/tsup/chunk-4CXBCT26.cjs.map +1 -0
  15. package/dist/tsup/chunk-4R73YDN3.cjs +20 -0
  16. package/dist/tsup/chunk-4R73YDN3.cjs.map +1 -0
  17. package/dist/tsup/chunk-6LJT3QRL.cjs +539 -0
  18. package/dist/tsup/chunk-6LJT3QRL.cjs.map +1 -0
  19. package/dist/tsup/chunk-GICQ3YCU.cjs +1792 -0
  20. package/dist/tsup/chunk-GICQ3YCU.cjs.map +1 -0
  21. package/dist/tsup/chunk-H26RP6GD.js +251 -0
  22. package/dist/tsup/chunk-H26RP6GD.js.map +1 -0
  23. package/dist/tsup/chunk-HI3HWJRC.js +20 -0
  24. package/dist/tsup/chunk-HI3HWJRC.js.map +1 -0
  25. package/dist/tsup/chunk-HLLF4B4Q.js +1792 -0
  26. package/dist/tsup/chunk-HLLF4B4Q.js.map +1 -0
  27. package/dist/tsup/chunk-IH6CKNDW.cjs +117 -0
  28. package/dist/tsup/chunk-IH6CKNDW.cjs.map +1 -0
  29. package/dist/tsup/chunk-LV2S3OU3.js +250 -0
  30. package/dist/tsup/chunk-LV2S3OU3.js.map +1 -0
  31. package/dist/tsup/chunk-LWNKVZG5.cjs +251 -0
  32. package/dist/tsup/chunk-LWNKVZG5.cjs.map +1 -0
  33. package/dist/tsup/chunk-NFU2BBT5.js +374 -0
  34. package/dist/tsup/chunk-NFU2BBT5.js.map +1 -0
  35. package/dist/tsup/chunk-PQY7KKTL.js +539 -0
  36. package/dist/tsup/chunk-PQY7KKTL.js.map +1 -0
  37. package/dist/tsup/chunk-QK72M5JB.js +45 -0
  38. package/dist/tsup/chunk-QK72M5JB.js.map +1 -0
  39. package/dist/tsup/chunk-QNNXFOQV.cjs +45 -0
  40. package/dist/tsup/chunk-QNNXFOQV.cjs.map +1 -0
  41. package/dist/tsup/chunk-SBHHJ6QS.cjs +374 -0
  42. package/dist/tsup/chunk-SBHHJ6QS.cjs.map +1 -0
  43. package/dist/tsup/chunk-TQ62L3X7.js +325 -0
  44. package/dist/tsup/chunk-TQ62L3X7.js.map +1 -0
  45. package/dist/tsup/chunk-VO7ZRVVD.cjs +6293 -0
  46. package/dist/tsup/chunk-VO7ZRVVD.cjs.map +1 -0
  47. package/dist/tsup/chunk-WHBPJNGW.cjs +325 -0
  48. package/dist/tsup/chunk-WHBPJNGW.cjs.map +1 -0
  49. package/dist/tsup/chunk-XJQHKJ4P.js +6293 -0
  50. package/dist/tsup/chunk-XJQHKJ4P.js.map +1 -0
  51. package/dist/tsup/client/mod.cjs +32 -0
  52. package/dist/tsup/client/mod.cjs.map +1 -0
  53. package/dist/tsup/client/mod.d.cts +20 -0
  54. package/dist/tsup/client/mod.d.ts +20 -0
  55. package/dist/tsup/client/mod.js +32 -0
  56. package/dist/tsup/client/mod.js.map +1 -0
  57. package/dist/tsup/common/log.cjs +21 -0
  58. package/dist/tsup/common/log.cjs.map +1 -0
  59. package/dist/tsup/common/log.d.cts +26 -0
  60. package/dist/tsup/common/log.d.ts +26 -0
  61. package/dist/tsup/common/log.js +21 -0
  62. package/dist/tsup/common/log.js.map +1 -0
  63. package/dist/tsup/common/websocket.cjs +10 -0
  64. package/dist/tsup/common/websocket.cjs.map +1 -0
  65. package/dist/tsup/common/websocket.d.cts +3 -0
  66. package/dist/tsup/common/websocket.d.ts +3 -0
  67. package/dist/tsup/common/websocket.js +10 -0
  68. package/dist/tsup/common/websocket.js.map +1 -0
  69. package/dist/tsup/common-CXCe7s6i.d.cts +218 -0
  70. package/dist/tsup/common-CXCe7s6i.d.ts +218 -0
  71. package/dist/tsup/connection-BI-6UIBJ.d.ts +2087 -0
  72. package/dist/tsup/connection-Dyd4NLGW.d.cts +2087 -0
  73. package/dist/tsup/driver-helpers/mod.cjs +30 -0
  74. package/dist/tsup/driver-helpers/mod.cjs.map +1 -0
  75. package/dist/tsup/driver-helpers/mod.d.cts +17 -0
  76. package/dist/tsup/driver-helpers/mod.d.ts +17 -0
  77. package/dist/tsup/driver-helpers/mod.js +30 -0
  78. package/dist/tsup/driver-helpers/mod.js.map +1 -0
  79. package/dist/tsup/driver-test-suite/mod.cjs +3411 -0
  80. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -0
  81. package/dist/tsup/driver-test-suite/mod.d.cts +63 -0
  82. package/dist/tsup/driver-test-suite/mod.d.ts +63 -0
  83. package/dist/tsup/driver-test-suite/mod.js +3411 -0
  84. package/dist/tsup/driver-test-suite/mod.js.map +1 -0
  85. package/dist/tsup/inspector/mod.cjs +51 -0
  86. package/dist/tsup/inspector/mod.cjs.map +1 -0
  87. package/dist/tsup/inspector/mod.d.cts +408 -0
  88. package/dist/tsup/inspector/mod.d.ts +408 -0
  89. package/dist/tsup/inspector/mod.js +51 -0
  90. package/dist/tsup/inspector/mod.js.map +1 -0
  91. package/dist/tsup/mod.cjs +67 -0
  92. package/dist/tsup/mod.cjs.map +1 -0
  93. package/dist/tsup/mod.d.cts +105 -0
  94. package/dist/tsup/mod.d.ts +105 -0
  95. package/dist/tsup/mod.js +67 -0
  96. package/dist/tsup/mod.js.map +1 -0
  97. package/dist/tsup/router-endpoints-BTe_Rsdn.d.cts +65 -0
  98. package/dist/tsup/router-endpoints-CBSrKHmo.d.ts +65 -0
  99. package/dist/tsup/test/mod.cjs +17 -0
  100. package/dist/tsup/test/mod.cjs.map +1 -0
  101. package/dist/tsup/test/mod.d.cts +26 -0
  102. package/dist/tsup/test/mod.d.ts +26 -0
  103. package/dist/tsup/test/mod.js +17 -0
  104. package/dist/tsup/test/mod.js.map +1 -0
  105. package/dist/tsup/utils-fwx3o3K9.d.cts +18 -0
  106. package/dist/tsup/utils-fwx3o3K9.d.ts +18 -0
  107. package/dist/tsup/utils.cjs +26 -0
  108. package/dist/tsup/utils.cjs.map +1 -0
  109. package/dist/tsup/utils.d.cts +36 -0
  110. package/dist/tsup/utils.d.ts +36 -0
  111. package/dist/tsup/utils.js +26 -0
  112. package/dist/tsup/utils.js.map +1 -0
  113. package/package.json +208 -5
  114. package/src/actor/action.ts +178 -0
  115. package/src/actor/config.ts +497 -0
  116. package/src/actor/connection.ts +257 -0
  117. package/src/actor/context.ts +168 -0
  118. package/src/actor/database.ts +23 -0
  119. package/src/actor/definition.ts +82 -0
  120. package/src/actor/driver.ts +84 -0
  121. package/src/actor/errors.ts +422 -0
  122. package/src/actor/generic-conn-driver.ts +246 -0
  123. package/src/actor/instance.ts +1844 -0
  124. package/src/actor/keys.test.ts +266 -0
  125. package/src/actor/keys.ts +89 -0
  126. package/src/actor/log.ts +6 -0
  127. package/src/actor/mod.ts +108 -0
  128. package/src/actor/persisted.ts +42 -0
  129. package/src/actor/protocol/old.ts +297 -0
  130. package/src/actor/protocol/serde.ts +131 -0
  131. package/src/actor/router-endpoints.ts +688 -0
  132. package/src/actor/router.ts +265 -0
  133. package/src/actor/schedule.ts +17 -0
  134. package/src/actor/unstable-react.ts +110 -0
  135. package/src/actor/utils.ts +102 -0
  136. package/src/client/actor-common.ts +30 -0
  137. package/src/client/actor-conn.ts +865 -0
  138. package/src/client/actor-handle.ts +268 -0
  139. package/src/client/actor-query.ts +65 -0
  140. package/src/client/client.ts +554 -0
  141. package/src/client/config.ts +44 -0
  142. package/src/client/errors.ts +42 -0
  143. package/src/client/log.ts +5 -0
  144. package/src/client/mod.ts +60 -0
  145. package/src/client/raw-utils.ts +149 -0
  146. package/src/client/test.ts +44 -0
  147. package/src/client/utils.ts +152 -0
  148. package/src/common/eventsource-interface.ts +47 -0
  149. package/src/common/eventsource.ts +80 -0
  150. package/src/common/fake-event-source.ts +267 -0
  151. package/src/common/inline-websocket-adapter2.ts +454 -0
  152. package/src/common/log-levels.ts +27 -0
  153. package/src/common/log.ts +214 -0
  154. package/src/common/logfmt.ts +219 -0
  155. package/src/common/network.ts +2 -0
  156. package/src/common/router.ts +80 -0
  157. package/src/common/utils.ts +336 -0
  158. package/src/common/versioned-data.ts +95 -0
  159. package/src/common/websocket-interface.ts +49 -0
  160. package/src/common/websocket.ts +42 -0
  161. package/src/driver-helpers/mod.ts +22 -0
  162. package/src/driver-helpers/utils.ts +17 -0
  163. package/src/driver-test-suite/log.ts +5 -0
  164. package/src/driver-test-suite/mod.ts +239 -0
  165. package/src/driver-test-suite/tests/action-features.ts +136 -0
  166. package/src/driver-test-suite/tests/actor-conn-state.ts +249 -0
  167. package/src/driver-test-suite/tests/actor-conn.ts +349 -0
  168. package/src/driver-test-suite/tests/actor-driver.ts +25 -0
  169. package/src/driver-test-suite/tests/actor-error-handling.ts +158 -0
  170. package/src/driver-test-suite/tests/actor-handle.ts +292 -0
  171. package/src/driver-test-suite/tests/actor-inline-client.ts +152 -0
  172. package/src/driver-test-suite/tests/actor-inspector.ts +570 -0
  173. package/src/driver-test-suite/tests/actor-metadata.ts +116 -0
  174. package/src/driver-test-suite/tests/actor-onstatechange.ts +95 -0
  175. package/src/driver-test-suite/tests/actor-schedule.ts +108 -0
  176. package/src/driver-test-suite/tests/actor-sleep.ts +413 -0
  177. package/src/driver-test-suite/tests/actor-state.ts +54 -0
  178. package/src/driver-test-suite/tests/actor-vars.ts +93 -0
  179. package/src/driver-test-suite/tests/manager-driver.ts +367 -0
  180. package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -0
  181. package/src/driver-test-suite/tests/raw-http-request-properties.ts +414 -0
  182. package/src/driver-test-suite/tests/raw-http.ts +347 -0
  183. package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -0
  184. package/src/driver-test-suite/tests/raw-websocket.ts +484 -0
  185. package/src/driver-test-suite/tests/request-access.ts +230 -0
  186. package/src/driver-test-suite/utils.ts +71 -0
  187. package/src/drivers/default.ts +34 -0
  188. package/src/drivers/engine/actor-driver.ts +369 -0
  189. package/src/drivers/engine/config.ts +31 -0
  190. package/src/drivers/engine/kv.ts +3 -0
  191. package/src/drivers/engine/log.ts +5 -0
  192. package/src/drivers/engine/mod.ts +35 -0
  193. package/src/drivers/file-system/actor.ts +91 -0
  194. package/src/drivers/file-system/global-state.ts +686 -0
  195. package/src/drivers/file-system/log.ts +5 -0
  196. package/src/drivers/file-system/manager.ts +329 -0
  197. package/src/drivers/file-system/mod.ts +48 -0
  198. package/src/drivers/file-system/utils.ts +109 -0
  199. package/src/globals.d.ts +6 -0
  200. package/src/inspector/actor.ts +298 -0
  201. package/src/inspector/config.ts +88 -0
  202. package/src/inspector/log.ts +5 -0
  203. package/src/inspector/manager.ts +86 -0
  204. package/src/inspector/mod.ts +2 -0
  205. package/src/inspector/protocol/actor.ts +10 -0
  206. package/src/inspector/protocol/common.ts +196 -0
  207. package/src/inspector/protocol/manager.ts +10 -0
  208. package/src/inspector/protocol/mod.ts +2 -0
  209. package/src/inspector/utils.ts +76 -0
  210. package/src/manager/driver.ts +88 -0
  211. package/src/manager/hono-websocket-adapter.ts +342 -0
  212. package/src/manager/log.ts +5 -0
  213. package/src/manager/mod.ts +2 -0
  214. package/src/manager/protocol/mod.ts +24 -0
  215. package/src/manager/protocol/query.ts +89 -0
  216. package/src/manager/router.ts +412 -0
  217. package/src/manager-api/routes/actors-create.ts +16 -0
  218. package/src/manager-api/routes/actors-delete.ts +4 -0
  219. package/src/manager-api/routes/actors-get-by-id.ts +7 -0
  220. package/src/manager-api/routes/actors-get-or-create-by-id.ts +29 -0
  221. package/src/manager-api/routes/actors-get.ts +7 -0
  222. package/src/manager-api/routes/common.ts +18 -0
  223. package/src/mod.ts +18 -0
  224. package/src/registry/config.ts +32 -0
  225. package/src/registry/log.ts +5 -0
  226. package/src/registry/mod.ts +157 -0
  227. package/src/registry/run-config.ts +52 -0
  228. package/src/registry/serve.ts +52 -0
  229. package/src/remote-manager-driver/actor-http-client.ts +72 -0
  230. package/src/remote-manager-driver/actor-websocket-client.ts +63 -0
  231. package/src/remote-manager-driver/api-endpoints.ts +79 -0
  232. package/src/remote-manager-driver/api-utils.ts +43 -0
  233. package/src/remote-manager-driver/log.ts +5 -0
  234. package/src/remote-manager-driver/mod.ts +274 -0
  235. package/src/remote-manager-driver/ws-proxy.ts +180 -0
  236. package/src/schemas/actor-persist/mod.ts +1 -0
  237. package/src/schemas/actor-persist/versioned.ts +25 -0
  238. package/src/schemas/client-protocol/mod.ts +1 -0
  239. package/src/schemas/client-protocol/versioned.ts +63 -0
  240. package/src/schemas/file-system-driver/mod.ts +1 -0
  241. package/src/schemas/file-system-driver/versioned.ts +28 -0
  242. package/src/serde.ts +90 -0
  243. package/src/test/config.ts +16 -0
  244. package/src/test/log.ts +5 -0
  245. package/src/test/mod.ts +154 -0
  246. package/src/utils.ts +172 -0
@@ -0,0 +1,393 @@
1
+ // TODO: re-expose this once we can have actor queries on the gateway
2
+ // import { describe, expect, test } from "vitest";
3
+ // import { importWebSocket } from "@/common/websocket";
4
+ // import type { ActorQuery } from "@/manager/protocol/query";
5
+ // import type { DriverTestConfig } from "../mod";
6
+ // import { setupDriverTest } from "../utils";
7
+ //
8
+ // export function runRawWebSocketDirectRegistryTests(
9
+ // driverTestConfig: DriverTestConfig,
10
+ // ) {
11
+ // describe("raw websocket - direct registry access", () => {
12
+ // test("should establish vanilla WebSocket connection with proper subprotocols", async (c) => {
13
+ // const { endpoint } = await setupDriverTest(c, driverTestConfig);
14
+ // const WebSocket = await importWebSocket();
15
+ //
16
+ // // Build the actor query
17
+ // const actorQuery: ActorQuery = {
18
+ // getOrCreateForKey: {
19
+ // name: "rawWebSocketActor",
20
+ // key: ["vanilla-test"],
21
+ // },
22
+ // };
23
+ //
24
+ // // Encode query as WebSocket subprotocol
25
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
26
+ //
27
+ // // Build WebSocket URL (convert http to ws)
28
+ // const wsEndpoint = endpoint
29
+ // .replace(/^http:/, "ws:")
30
+ // .replace(/^https:/, "wss:");
31
+ // const wsUrl = `${wsEndpoint}/registry/actors/raw/websocket/`;
32
+ //
33
+ // // Create WebSocket connection with subprotocol
34
+ // const ws = new WebSocket(wsUrl, [
35
+ // queryProtocol,
36
+ // // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
37
+ // "rivetkit",
38
+ // ]) as any;
39
+ //
40
+ // await new Promise<void>((resolve, reject) => {
41
+ // ws.addEventListener("open", () => {
42
+ // resolve();
43
+ // });
44
+ // ws.addEventListener("error", reject);
45
+ // ws.addEventListener("close", reject);
46
+ // });
47
+ //
48
+ // // Should receive welcome message
49
+ // const welcomeMessage = await new Promise<any>((resolve, reject) => {
50
+ // ws.addEventListener(
51
+ // "message",
52
+ // (event: any) => {
53
+ // resolve(JSON.parse(event.data as string));
54
+ // },
55
+ // { once: true },
56
+ // );
57
+ // ws.addEventListener("close", reject);
58
+ // });
59
+ //
60
+ // expect(welcomeMessage.type).toBe("welcome");
61
+ // expect(welcomeMessage.connectionCount).toBe(1);
62
+ //
63
+ // ws.close();
64
+ // });
65
+ //
66
+ // test("should echo messages with vanilla WebSocket", async (c) => {
67
+ // const { endpoint } = await setupDriverTest(c, driverTestConfig);
68
+ // const WebSocket = await importWebSocket();
69
+ //
70
+ // const actorQuery: ActorQuery = {
71
+ // getOrCreateForKey: {
72
+ // name: "rawWebSocketActor",
73
+ // key: ["vanilla-echo"],
74
+ // },
75
+ // };
76
+ //
77
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
78
+ //
79
+ // const wsEndpoint = endpoint
80
+ // .replace(/^http:/, "ws:")
81
+ // .replace(/^https:/, "wss:");
82
+ // const wsUrl = `${wsEndpoint}/registry/actors/raw/websocket/`;
83
+ //
84
+ // const ws = new WebSocket(wsUrl, [
85
+ // queryProtocol,
86
+ // // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
87
+ // "rivetkit",
88
+ // ]) as any;
89
+ //
90
+ // await new Promise<void>((resolve, reject) => {
91
+ // ws.addEventListener("open", () => resolve(), { once: true });
92
+ // ws.addEventListener("close", reject);
93
+ // });
94
+ //
95
+ // // Skip welcome message
96
+ // await new Promise<void>((resolve, reject) => {
97
+ // ws.addEventListener("message", () => resolve(), { once: true });
98
+ // ws.addEventListener("close", reject);
99
+ // });
100
+ //
101
+ // // Send and receive echo
102
+ // const testMessage = { test: "vanilla", timestamp: Date.now() };
103
+ // ws.send(JSON.stringify(testMessage));
104
+ //
105
+ // const echoMessage = await new Promise<any>((resolve, reject) => {
106
+ // ws.addEventListener(
107
+ // "message",
108
+ // (event: any) => {
109
+ // resolve(JSON.parse(event.data as string));
110
+ // },
111
+ // { once: true },
112
+ // );
113
+ // ws.addEventListener("close", reject);
114
+ // });
115
+ //
116
+ // expect(echoMessage).toEqual(testMessage);
117
+ //
118
+ // ws.close();
119
+ // });
120
+ //
121
+ // test("should handle connection parameters for authentication", async (c) => {
122
+ // const { endpoint } = await setupDriverTest(c, driverTestConfig);
123
+ // const WebSocket = await importWebSocket();
124
+ //
125
+ // const actorQuery: ActorQuery = {
126
+ // getOrCreateForKey: {
127
+ // name: "rawWebSocketActor",
128
+ // key: ["vanilla-auth"],
129
+ // },
130
+ // };
131
+ //
132
+ // const connParams = { token: "ws-auth-token", userId: "ws-user123" };
133
+ //
134
+ // // Encode both query and connection params as subprotocols
135
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
136
+ // const connParamsProtocol = `conn_params.${encodeURIComponent(JSON.stringify(connParams))}`;
137
+ //
138
+ // const wsEndpoint = endpoint
139
+ // .replace(/^http:/, "ws:")
140
+ // .replace(/^https:/, "wss:");
141
+ // const wsUrl = `${wsEndpoint}/registry/actors/raw/websocket/`;
142
+ //
143
+ // const ws = new WebSocket(wsUrl, [
144
+ // queryProtocol,
145
+ // connParamsProtocol,
146
+ // // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
147
+ // "rivetkit",
148
+ // ]) as any;
149
+ //
150
+ // await new Promise<void>((resolve, reject) => {
151
+ // ws.addEventListener("open", () => {
152
+ // resolve();
153
+ // });
154
+ // ws.addEventListener("error", reject);
155
+ // ws.addEventListener("close", reject);
156
+ // });
157
+ //
158
+ // // Connection should succeed with auth params
159
+ // const welcomeMessage = await new Promise<any>((resolve, reject) => {
160
+ // ws.addEventListener(
161
+ // "message",
162
+ // (event: any) => {
163
+ // resolve(JSON.parse(event.data as string));
164
+ // },
165
+ // { once: true },
166
+ // );
167
+ // ws.addEventListener("close", reject);
168
+ // });
169
+ //
170
+ // expect(welcomeMessage.type).toBe("welcome");
171
+ //
172
+ // ws.close();
173
+ // });
174
+ //
175
+ // test("should handle custom user protocols alongside rivetkit protocols", async (c) => {
176
+ // const { endpoint } = await setupDriverTest(c, driverTestConfig);
177
+ // const WebSocket = await importWebSocket();
178
+ //
179
+ // const actorQuery: ActorQuery = {
180
+ // getOrCreateForKey: {
181
+ // name: "rawWebSocketActor",
182
+ // key: ["vanilla-protocols"],
183
+ // },
184
+ // };
185
+ //
186
+ // // Include user-defined protocols
187
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
188
+ // const userProtocol1 = "chat-v1";
189
+ // const userProtocol2 = "custom-protocol";
190
+ //
191
+ // const wsEndpoint = endpoint
192
+ // .replace(/^http:/, "ws:")
193
+ // .replace(/^https:/, "wss:");
194
+ // const wsUrl = `${wsEndpoint}/registry/actors/raw/websocket/`;
195
+ //
196
+ // const ws = new WebSocket(wsUrl, [
197
+ // queryProtocol,
198
+ // userProtocol1,
199
+ // userProtocol2,
200
+ // // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
201
+ // "rivetkit",
202
+ // ]) as any;
203
+ //
204
+ // await new Promise<void>((resolve, reject) => {
205
+ // ws.addEventListener("open", () => {
206
+ // resolve();
207
+ // });
208
+ // ws.addEventListener("error", reject);
209
+ // ws.addEventListener("close", reject);
210
+ // });
211
+ //
212
+ // // Should connect successfully with custom protocols
213
+ // const welcomeMessage = await new Promise<any>((resolve, reject) => {
214
+ // ws.addEventListener(
215
+ // "message",
216
+ // (event: any) => {
217
+ // resolve(JSON.parse(event.data as string));
218
+ // },
219
+ // { once: true },
220
+ // );
221
+ // ws.addEventListener("close", reject);
222
+ // });
223
+ //
224
+ // expect(welcomeMessage.type).toBe("welcome");
225
+ //
226
+ // ws.close();
227
+ // });
228
+ //
229
+ // test("should handle different paths for WebSocket routes", async (c) => {
230
+ // const { endpoint } = await setupDriverTest(c, driverTestConfig);
231
+ // const WebSocket = await importWebSocket();
232
+ //
233
+ // const actorQuery: ActorQuery = {
234
+ // getOrCreateForKey: {
235
+ // name: "rawWebSocketActor",
236
+ // key: ["vanilla-paths"],
237
+ // },
238
+ // };
239
+ //
240
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
241
+ //
242
+ // const wsEndpoint = endpoint
243
+ // .replace(/^http:/, "ws:")
244
+ // .replace(/^https:/, "wss:");
245
+ //
246
+ // // Test different paths
247
+ // const paths = ["chat/room1", "updates/feed", "stream/events"];
248
+ //
249
+ // for (const path of paths) {
250
+ // const wsUrl = `${wsEndpoint}/registry/actors/raw/websocket/${path}`;
251
+ // const ws = new WebSocket(wsUrl, [
252
+ // queryProtocol,
253
+ // // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
254
+ // "rivetkit",
255
+ // ]) as any;
256
+ //
257
+ // await new Promise<void>((resolve, reject) => {
258
+ // ws.addEventListener("open", () => {
259
+ // resolve();
260
+ // });
261
+ // ws.addEventListener("error", reject);
262
+ // });
263
+ //
264
+ // // Should receive welcome message with the path
265
+ // const welcomeMessage = await new Promise<any>((resolve, reject) => {
266
+ // ws.addEventListener(
267
+ // "message",
268
+ // (event: any) => {
269
+ // resolve(JSON.parse(event.data as string));
270
+ // },
271
+ // { once: true },
272
+ // );
273
+ // ws.addEventListener("close", reject);
274
+ // });
275
+ //
276
+ // expect(welcomeMessage.type).toBe("welcome");
277
+ //
278
+ // ws.close();
279
+ // }
280
+ // });
281
+ //
282
+ // test("should return error for actors without onWebSocket handler", async (c) => {
283
+ // const { endpoint } = await setupDriverTest(c, driverTestConfig);
284
+ // const WebSocket = await importWebSocket();
285
+ //
286
+ // const actorQuery: ActorQuery = {
287
+ // getOrCreateForKey: {
288
+ // name: "rawWebSocketNoHandlerActor",
289
+ // key: ["vanilla-no-handler"],
290
+ // },
291
+ // };
292
+ //
293
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
294
+ //
295
+ // const wsEndpoint = endpoint
296
+ // .replace(/^http:/, "ws:")
297
+ // .replace(/^https:/, "wss:");
298
+ // const wsUrl = `${wsEndpoint}/registry/actors/raw/websocket/`;
299
+ //
300
+ // const ws = new WebSocket(wsUrl, [
301
+ // queryProtocol,
302
+ //
303
+ // // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
304
+ // "rivetkit",
305
+ // ]) as any;
306
+ //
307
+ // // Should fail to connect
308
+ // await new Promise<void>((resolve) => {
309
+ // ws.addEventListener("error", () => resolve(), { once: true });
310
+ // ws.addEventListener("close", () => resolve(), { once: true });
311
+ // });
312
+ //
313
+ // expect(ws.readyState).toBe(ws.CLOSED || 3); // WebSocket.CLOSED
314
+ // });
315
+ //
316
+ // test("should handle binary data over vanilla WebSocket", async (c) => {
317
+ // const { endpoint } = await setupDriverTest(c, driverTestConfig);
318
+ // const WebSocket = await importWebSocket();
319
+ //
320
+ // const actorQuery: ActorQuery = {
321
+ // getOrCreateForKey: {
322
+ // name: "rawWebSocketActor",
323
+ // key: ["vanilla-binary"],
324
+ // },
325
+ // };
326
+ //
327
+ // const queryProtocol = `query.${encodeURIComponent(JSON.stringify(actorQuery))}`;
328
+ //
329
+ // const wsEndpoint = endpoint
330
+ // .replace(/^http:/, "ws:")
331
+ // .replace(/^https:/, "wss:");
332
+ // const wsUrl = `${wsEndpoint}/registry/actors/raw/websocket/`;
333
+ //
334
+ // const ws = new WebSocket(wsUrl, [
335
+ // queryProtocol,
336
+ // // HACK: See packages/drivers/cloudflare-workers/src/websocket.ts
337
+ // "rivetkit",
338
+ // ]) as any;
339
+ // ws.binaryType = "arraybuffer";
340
+ //
341
+ // await new Promise<void>((resolve, reject) => {
342
+ // ws.addEventListener("open", () => resolve(), { once: true });
343
+ // ws.addEventListener("close", reject);
344
+ // });
345
+ //
346
+ // // Skip welcome message
347
+ // await new Promise<void>((resolve, reject) => {
348
+ // ws.addEventListener("message", () => resolve(), { once: true });
349
+ // ws.addEventListener("close", reject);
350
+ // });
351
+ //
352
+ // // Send binary data
353
+ // const binaryData = new Uint8Array([1, 2, 3, 4, 5]);
354
+ // ws.send(binaryData.buffer);
355
+ //
356
+ // // Receive echoed binary data
357
+ // const echoedData = await new Promise<ArrayBuffer>((resolve, reject) => {
358
+ // ws.addEventListener(
359
+ // "message",
360
+ // (event: any) => {
361
+ // // The actor echoes binary data back as-is
362
+ // resolve(event.data as ArrayBuffer);
363
+ // },
364
+ // { once: true },
365
+ // );
366
+ // ws.addEventListener("close", reject);
367
+ // });
368
+ //
369
+ // // Verify the echoed data matches what we sent
370
+ // const echoedArray = new Uint8Array(echoedData);
371
+ // expect(Array.from(echoedArray)).toEqual([1, 2, 3, 4, 5]);
372
+ //
373
+ // // Now test JSON echo
374
+ // ws.send(JSON.stringify({ type: "binary-test", size: binaryData.length }));
375
+ //
376
+ // const echoMessage = await new Promise<any>((resolve, reject) => {
377
+ // ws.addEventListener(
378
+ // "message",
379
+ // (event: any) => {
380
+ // resolve(JSON.parse(event.data as string));
381
+ // },
382
+ // { once: true },
383
+ // );
384
+ // ws.addEventListener("close", reject);
385
+ // });
386
+ //
387
+ // expect(echoMessage.type).toBe("binary-test");
388
+ // expect(echoMessage.size).toBe(5);
389
+ //
390
+ // ws.close();
391
+ // });
392
+ // });
393
+ // }