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,3411 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkIH6CKNDWcjs = require('../chunk-IH6CKNDW.cjs');
4
+
5
+
6
+ var _chunk4R73YDN3cjs = require('../chunk-4R73YDN3.cjs');
7
+
8
+
9
+
10
+ var _chunkVO7ZRVVDcjs = require('../chunk-VO7ZRVVD.cjs');
11
+
12
+
13
+
14
+ var _chunkLWNKVZG5cjs = require('../chunk-LWNKVZG5.cjs');
15
+ require('../chunk-QNNXFOQV.cjs');
16
+
17
+
18
+ var _chunkWHBPJNGWcjs = require('../chunk-WHBPJNGW.cjs');
19
+
20
+
21
+
22
+ var _chunkGICQ3YCUcjs = require('../chunk-GICQ3YCU.cjs');
23
+
24
+
25
+ var _chunk4CXBCT26cjs = require('../chunk-4CXBCT26.cjs');
26
+ require('../chunk-6LJT3QRL.cjs');
27
+
28
+
29
+
30
+ var _chunkSBHHJ6QScjs = require('../chunk-SBHHJ6QS.cjs');
31
+
32
+ // src/driver-test-suite/mod.ts
33
+ var _nodeserver = require('@hono/node-server');
34
+ var _nodews = require('@hono/node-ws');
35
+ var _bundlerequire = require('bundle-require');
36
+ var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
37
+ var _vitest = require('vitest');
38
+
39
+ // src/driver-test-suite/log.ts
40
+ function logger() {
41
+ return _chunk4CXBCT26cjs.getLogger.call(void 0, "test-suite");
42
+ }
43
+
44
+ // src/driver-test-suite/tests/action-features.ts
45
+
46
+
47
+ // src/driver-test-suite/utils.ts
48
+ var _path = require('path');
49
+
50
+ var FAKE_TIME = /* @__PURE__ */ new Date("2024-01-01T00:00:00.000Z");
51
+ async function setupDriverTest(c, driverTestConfig) {
52
+ if (!driverTestConfig.useRealTimers) {
53
+ _vitest.vi.useFakeTimers();
54
+ _vitest.vi.setSystemTime(FAKE_TIME);
55
+ }
56
+ const projectPath = _path.resolve.call(void 0, __dirname, "../../fixtures/driver-test-suite");
57
+ const { endpoint, namespace, runnerName, cleanup } = await driverTestConfig.start(projectPath);
58
+ c.onTestFinished(cleanup);
59
+ let client;
60
+ if (driverTestConfig.clientType === "http") {
61
+ client = _chunk4R73YDN3cjs.createClient.call(void 0, {
62
+ endpoint,
63
+ namespace,
64
+ runnerName,
65
+ transport: driverTestConfig.transport
66
+ });
67
+ } else if (driverTestConfig.clientType === "inline") {
68
+ throw "TODO";
69
+ } else {
70
+ _chunkGICQ3YCUcjs.assertUnreachable.call(void 0, driverTestConfig.clientType);
71
+ }
72
+ if (!driverTestConfig.HACK_skipCleanupNet) {
73
+ c.onTestFinished(async () => await client.dispose());
74
+ }
75
+ return {
76
+ client,
77
+ endpoint
78
+ };
79
+ }
80
+ async function waitFor(driverTestConfig, ms) {
81
+ if (driverTestConfig.useRealTimers) {
82
+ return new Promise((resolve2) => setTimeout(resolve2, ms));
83
+ } else {
84
+ _vitest.vi.advanceTimersByTime(ms);
85
+ return Promise.resolve();
86
+ }
87
+ }
88
+
89
+ // src/driver-test-suite/tests/action-features.ts
90
+ function runActionFeaturesTests(driverTestConfig) {
91
+ _vitest.describe.call(void 0, "Action Features", () => {
92
+ _vitest.describe.call(void 0, "Action Timeouts", () => {
93
+ const usesFakeTimers = !driverTestConfig.useRealTimers;
94
+ _vitest.test.call(void 0, "should timeout actions that exceed the configured timeout", async (c) => {
95
+ const { client } = await setupDriverTest(c, driverTestConfig);
96
+ const quickResult = await client.shortTimeoutActor.getOrCreate().quickAction();
97
+ _vitest.expect.call(void 0, quickResult).toBe("quick response");
98
+ await _vitest.expect.call(void 0,
99
+ client.shortTimeoutActor.getOrCreate().slowAction()
100
+ ).rejects.toThrow("Action timed out");
101
+ });
102
+ _vitest.test.call(void 0, "should respect the default timeout", async (c) => {
103
+ const { client } = await setupDriverTest(c, driverTestConfig);
104
+ const result = await client.defaultTimeoutActor.getOrCreate().normalAction();
105
+ _vitest.expect.call(void 0, result).toBe("normal response");
106
+ });
107
+ _vitest.test.call(void 0, "non-promise action results should not be affected by timeout", async (c) => {
108
+ const { client } = await setupDriverTest(c, driverTestConfig);
109
+ const result = await client.syncTimeoutActor.getOrCreate().syncAction();
110
+ _vitest.expect.call(void 0, result).toBe("sync response");
111
+ });
112
+ _vitest.test.call(void 0, "should allow configuring different timeouts for different actors", async (c) => {
113
+ const { client } = await setupDriverTest(c, driverTestConfig);
114
+ await _vitest.expect.call(void 0,
115
+ client.shortTimeoutActor.getOrCreate().slowAction()
116
+ ).rejects.toThrow("Action timed out");
117
+ const result = await client.longTimeoutActor.getOrCreate().delayedAction();
118
+ _vitest.expect.call(void 0, result).toBe("delayed response");
119
+ });
120
+ });
121
+ _vitest.describe.call(void 0, "Action Sync & Async", () => {
122
+ _vitest.test.call(void 0, "should support synchronous actions", async (c) => {
123
+ const { client } = await setupDriverTest(c, driverTestConfig);
124
+ const instance = client.syncActionActor.getOrCreate();
125
+ let result = await instance.increment(5);
126
+ _vitest.expect.call(void 0, result).toBe(5);
127
+ result = await instance.increment(3);
128
+ _vitest.expect.call(void 0, result).toBe(8);
129
+ const info = await instance.getInfo();
130
+ _vitest.expect.call(void 0, info.currentValue).toBe(8);
131
+ _vitest.expect.call(void 0, typeof info.timestamp).toBe("number");
132
+ await instance.reset();
133
+ result = await instance.increment(0);
134
+ _vitest.expect.call(void 0, result).toBe(0);
135
+ });
136
+ _vitest.test.call(void 0, "should support asynchronous actions", async (c) => {
137
+ const { client } = await setupDriverTest(c, driverTestConfig);
138
+ const instance = client.asyncActionActor.getOrCreate();
139
+ const result = await instance.delayedIncrement(5);
140
+ _vitest.expect.call(void 0, result).toBe(5);
141
+ const data = await instance.fetchData("test-123");
142
+ _vitest.expect.call(void 0, data.id).toBe("test-123");
143
+ _vitest.expect.call(void 0, typeof data.timestamp).toBe("number");
144
+ const success = await instance.asyncWithError(false);
145
+ _vitest.expect.call(void 0, success).toBe("Success");
146
+ try {
147
+ await instance.asyncWithError(true);
148
+ _vitest.expect.fail("did not error");
149
+ } catch (error) {
150
+ _vitest.expect.call(void 0, error.message).toBe("Intentional error");
151
+ }
152
+ });
153
+ _vitest.test.call(void 0, "should handle promises returned from actions correctly", async (c) => {
154
+ const { client } = await setupDriverTest(c, driverTestConfig);
155
+ const instance = client.promiseActor.getOrCreate();
156
+ const resolvedValue = await instance.resolvedPromise();
157
+ _vitest.expect.call(void 0, resolvedValue).toBe("resolved value");
158
+ const delayedValue = await instance.delayedPromise();
159
+ _vitest.expect.call(void 0, delayedValue).toBe("delayed value");
160
+ await _vitest.expect.call(void 0, instance.rejectedPromise()).rejects.toThrow(
161
+ "promised rejection"
162
+ );
163
+ const results = await instance.getResults();
164
+ _vitest.expect.call(void 0, results).toContain("delayed");
165
+ });
166
+ });
167
+ });
168
+ }
169
+
170
+ // src/driver-test-suite/tests/actor-conn.ts
171
+
172
+ function runActorConnTests(driverTestConfig) {
173
+ _vitest.describe.call(void 0, "Actor Connection Tests", () => {
174
+ _vitest.describe.call(void 0, "Connection Methods", () => {
175
+ _vitest.test.call(void 0, "should connect using .get().connect()", async (c) => {
176
+ const { client } = await setupDriverTest(c, driverTestConfig);
177
+ await client.counter.create(["test-get"]);
178
+ const handle = client.counter.get(["test-get"]);
179
+ const connection = handle.connect();
180
+ const count = await connection.increment(5);
181
+ _vitest.expect.call(void 0, count).toBe(5);
182
+ await connection.dispose();
183
+ });
184
+ _vitest.test.call(void 0, "should connect using .getForId().connect()", async (c) => {
185
+ const { client } = await setupDriverTest(c, driverTestConfig);
186
+ const handle = client.counter.getOrCreate(["test-get-for-id"]);
187
+ await handle.increment(3);
188
+ const actorId = await handle.resolve();
189
+ const idHandle = client.counter.getForId(actorId);
190
+ const connection = idHandle.connect();
191
+ const count = await connection.getCount();
192
+ _vitest.expect.call(void 0, count).toBe(3);
193
+ await connection.dispose();
194
+ });
195
+ _vitest.test.call(void 0, "should connect using .getOrCreate().connect()", async (c) => {
196
+ const { client } = await setupDriverTest(c, driverTestConfig);
197
+ const handle = client.counter.getOrCreate(["test-get-or-create"]);
198
+ const connection = handle.connect();
199
+ const count = await connection.increment(7);
200
+ _vitest.expect.call(void 0, count).toBe(7);
201
+ await connection.dispose();
202
+ });
203
+ _vitest.test.call(void 0, "should connect using (await create()).connect()", async (c) => {
204
+ const { client } = await setupDriverTest(c, driverTestConfig);
205
+ const handle = await client.counter.create(["test-create"]);
206
+ const connection = handle.connect();
207
+ const count = await connection.increment(9);
208
+ _vitest.expect.call(void 0, count).toBe(9);
209
+ await connection.dispose();
210
+ });
211
+ });
212
+ _vitest.describe.call(void 0, "Event Communication", () => {
213
+ _vitest.test.call(void 0, "should mix RPC calls and WebSocket events", async (c) => {
214
+ const { client } = await setupDriverTest(c, driverTestConfig);
215
+ const handle = client.counter.getOrCreate(["test-mixed-rpc-ws"]);
216
+ const connection = handle.connect();
217
+ const receivedEvents = [];
218
+ const receivedEventsPromise = new Promise((resolve2) => {
219
+ connection.on("newCount", (count) => {
220
+ receivedEvents.push(count);
221
+ if (receivedEvents.includes(1) && receivedEvents.includes(6) && receivedEvents.includes(9))
222
+ resolve2(void 0);
223
+ });
224
+ });
225
+ await connection.increment(1);
226
+ await handle.increment(5);
227
+ await handle.increment(3);
228
+ await receivedEventsPromise;
229
+ await connection.dispose();
230
+ });
231
+ _vitest.test.call(void 0, "should receive events via broadcast", async (c) => {
232
+ const { client } = await setupDriverTest(c, driverTestConfig);
233
+ const handle = client.counter.getOrCreate(["test-broadcast"]);
234
+ const connection = handle.connect();
235
+ const receivedEvents = [];
236
+ connection.on("newCount", (count) => {
237
+ receivedEvents.push(count);
238
+ });
239
+ await connection.increment(5);
240
+ await connection.increment(3);
241
+ _vitest.expect.call(void 0, receivedEvents).toContain(5);
242
+ _vitest.expect.call(void 0, receivedEvents).toContain(8);
243
+ await connection.dispose();
244
+ });
245
+ _vitest.test.call(void 0, "should handle one-time events with once()", async (c) => {
246
+ const { client } = await setupDriverTest(c, driverTestConfig);
247
+ const handle = client.counter.getOrCreate(["test-once"]);
248
+ const connection = handle.connect();
249
+ const receivedEvents = [];
250
+ connection.once("newCount", (count) => {
251
+ receivedEvents.push(count);
252
+ });
253
+ await connection.increment(5);
254
+ await connection.increment(3);
255
+ _vitest.expect.call(void 0, receivedEvents).toEqual([5]);
256
+ _vitest.expect.call(void 0, receivedEvents).not.toContain(8);
257
+ await connection.dispose();
258
+ });
259
+ _vitest.test.call(void 0, "should unsubscribe from events", async (c) => {
260
+ const { client } = await setupDriverTest(c, driverTestConfig);
261
+ const handle = client.counter.getOrCreate(["test-unsubscribe"]);
262
+ const connection = handle.connect();
263
+ const receivedEvents = [];
264
+ const unsubscribe = connection.on("newCount", (count) => {
265
+ receivedEvents.push(count);
266
+ });
267
+ await connection.increment(5);
268
+ unsubscribe();
269
+ await connection.increment(3);
270
+ _vitest.expect.call(void 0, receivedEvents).toEqual([5]);
271
+ _vitest.expect.call(void 0, receivedEvents).not.toContain(8);
272
+ await connection.dispose();
273
+ });
274
+ });
275
+ _vitest.describe.call(void 0, "Connection Parameters", () => {
276
+ _vitest.test.call(void 0, "should pass connection parameters", async (c) => {
277
+ const { client } = await setupDriverTest(c, driverTestConfig);
278
+ const handle1 = client.counterWithParams.getOrCreate(["test-params"], {
279
+ params: { name: "user1" }
280
+ });
281
+ const handle2 = client.counterWithParams.getOrCreate(["test-params"], {
282
+ params: { name: "user2" }
283
+ });
284
+ const conn1 = handle1.connect();
285
+ const conn2 = handle2.connect();
286
+ await conn1.getInitializers();
287
+ await conn2.getInitializers();
288
+ const initializers = await conn1.getInitializers();
289
+ _vitest.expect.call(void 0, initializers).toContain("user1");
290
+ _vitest.expect.call(void 0, initializers).toContain("user2");
291
+ await conn1.dispose();
292
+ await conn2.dispose();
293
+ });
294
+ });
295
+ _vitest.describe.call(void 0, "Lifecycle Hooks", () => {
296
+ _vitest.test.call(void 0, "should trigger lifecycle hooks", async (c) => {
297
+ const { client } = await setupDriverTest(c, driverTestConfig);
298
+ const connHandle = client.counterWithLifecycle.getOrCreate(
299
+ ["test-lifecycle"],
300
+ {
301
+ params: { trackLifecycle: true }
302
+ }
303
+ );
304
+ const connection = connHandle.connect();
305
+ const events = await connection.getEvents();
306
+ _vitest.expect.call(void 0, events).toEqual(["onStart", "onBeforeConnect", "onConnect"]);
307
+ await connection.dispose();
308
+ const handle = client.counterWithLifecycle.getOrCreate([
309
+ "test-lifecycle"
310
+ ]);
311
+ const finalEvents = await handle.getEvents();
312
+ _vitest.expect.call(void 0, finalEvents).toBeOneOf([
313
+ // Still active
314
+ ["onStart", "onBeforeConnect", "onConnect", "onDisconnect"],
315
+ // Went to sleep and woke back up
316
+ [
317
+ "onStart",
318
+ "onBeforeConnect",
319
+ "onConnect",
320
+ "onDisconnect",
321
+ "onStart"
322
+ ]
323
+ ]);
324
+ });
325
+ });
326
+ _vitest.describe.call(void 0, "Connection Liveness", () => {
327
+ _vitest.test.skip("should return correct liveness status for connections", async (c) => {
328
+ const { client } = await setupDriverTest(c, driverTestConfig);
329
+ const handle = client.connLivenessActor.getOrCreate([
330
+ "test-liveness-status"
331
+ ]);
332
+ const connA = handle.connect();
333
+ const connB = handle.connect();
334
+ const connAId = await connA.getConnectionId();
335
+ const connBId = await connB.getConnectionId();
336
+ await connA.increment(5);
337
+ await connB.increment(5);
338
+ const counter = await handle.getCounter();
339
+ _vitest.expect.call(void 0, counter).toBe(10);
340
+ const connectionsStatusBeforeKill = await handle.getWsConnectionsLiveness();
341
+ _vitest.expect.call(void 0, connectionsStatusBeforeKill).toHaveLength(2);
342
+ _vitest.expect.call(void 0, connectionsStatusBeforeKill).toContainEqual(
343
+ _vitest.expect.objectContaining({
344
+ id: connAId,
345
+ status: "connected",
346
+ lastSeen: FAKE_TIME.getTime()
347
+ })
348
+ );
349
+ _vitest.expect.call(void 0, connectionsStatusBeforeKill).toContainEqual(
350
+ _vitest.expect.objectContaining({
351
+ id: connBId,
352
+ status: "connected",
353
+ lastSeen: FAKE_TIME.getTime()
354
+ })
355
+ );
356
+ await handle.kill(connAId);
357
+ const connectionsStatusAfterKill = await handle.getWsConnectionsLiveness();
358
+ _vitest.expect.call(void 0, connectionsStatusAfterKill).toEqual(
359
+ _vitest.expect.arrayContaining([
360
+ _vitest.expect.objectContaining({
361
+ id: connAId,
362
+ status: "reconnecting",
363
+ lastSeen: FAKE_TIME.getTime()
364
+ }),
365
+ _vitest.expect.objectContaining({
366
+ id: connBId,
367
+ status: "connected",
368
+ lastSeen: FAKE_TIME.getTime()
369
+ })
370
+ ])
371
+ );
372
+ await waitFor(driverTestConfig, 5e3);
373
+ const connectionsStatusAfterCleanup = await handle.getWsConnectionsLiveness();
374
+ _vitest.expect.call(void 0, connectionsStatusAfterCleanup).not.toContainEqual(
375
+ _vitest.expect.objectContaining({
376
+ id: connAId
377
+ })
378
+ );
379
+ _vitest.expect.call(void 0, connectionsStatusAfterCleanup).toContainEqual(
380
+ _vitest.expect.objectContaining({
381
+ id: connBId
382
+ })
383
+ );
384
+ });
385
+ });
386
+ });
387
+ }
388
+
389
+ // src/driver-test-suite/tests/actor-conn-state.ts
390
+
391
+ function runActorConnStateTests(driverTestConfig) {
392
+ _vitest.describe.call(void 0, "Actor Connection State Tests", () => {
393
+ _vitest.describe.call(void 0, "Connection State Initialization", () => {
394
+ _vitest.test.call(void 0, "should retrieve connection state", async (c) => {
395
+ const { client } = await setupDriverTest(c, driverTestConfig);
396
+ const connection = client.connStateActor.getOrCreate().connect();
397
+ const connState = await connection.getConnectionState();
398
+ _vitest.expect.call(void 0, connState.id).toBeDefined();
399
+ _vitest.expect.call(void 0, connState.username).toBeDefined();
400
+ _vitest.expect.call(void 0, connState.role).toBeDefined();
401
+ _vitest.expect.call(void 0, connState.counter).toBeDefined();
402
+ _vitest.expect.call(void 0, connState.createdAt).toBeDefined();
403
+ await connection.dispose();
404
+ });
405
+ _vitest.test.call(void 0, "should initialize connection state with custom parameters", async (c) => {
406
+ const { client } = await setupDriverTest(c, driverTestConfig);
407
+ const connection = client.connStateActor.getOrCreate([], {
408
+ params: {
409
+ username: "testuser",
410
+ role: "admin"
411
+ }
412
+ }).connect();
413
+ const connState = await connection.getConnectionState();
414
+ _vitest.expect.call(void 0, connState.username).toBe("testuser");
415
+ _vitest.expect.call(void 0, connState.role).toBe("admin");
416
+ await connection.dispose();
417
+ });
418
+ });
419
+ _vitest.describe.call(void 0, "Connection State Management", () => {
420
+ _vitest.test.call(void 0, "should maintain unique state for each connection", async (c) => {
421
+ const { client } = await setupDriverTest(c, driverTestConfig);
422
+ const conn1 = client.connStateActor.getOrCreate([], {
423
+ params: { username: "user1" }
424
+ }).connect();
425
+ const conn2 = client.connStateActor.getOrCreate([], {
426
+ params: { username: "user2" }
427
+ }).connect();
428
+ await conn1.incrementConnCounter(5);
429
+ await conn2.incrementConnCounter(10);
430
+ const state1 = await conn1.getConnectionState();
431
+ const state2 = await conn2.getConnectionState();
432
+ _vitest.expect.call(void 0, state1.counter).toBe(5);
433
+ _vitest.expect.call(void 0, state2.counter).toBe(10);
434
+ _vitest.expect.call(void 0, state1.username).toBe("user1");
435
+ _vitest.expect.call(void 0, state2.username).toBe("user2");
436
+ await conn1.dispose();
437
+ await conn2.dispose();
438
+ });
439
+ _vitest.test.call(void 0, "should track connections in shared state", async (c) => {
440
+ const { client } = await setupDriverTest(c, driverTestConfig);
441
+ const handle = client.connStateActor.getOrCreate();
442
+ const conn1 = handle.connect();
443
+ const conn2 = handle.connect();
444
+ await conn1.getConnectionState();
445
+ await conn2.getConnectionState();
446
+ const state1 = await conn1.getConnectionState();
447
+ const connectionIds = await conn1.getConnectionIds();
448
+ _vitest.expect.call(void 0, connectionIds.length).toBeGreaterThanOrEqual(2);
449
+ _vitest.expect.call(void 0, connectionIds).toContain(state1.id);
450
+ await conn1.dispose();
451
+ await conn2.dispose();
452
+ });
453
+ _vitest.test.call(void 0, "should identify different connections in the same actor", async (c) => {
454
+ const { client } = await setupDriverTest(c, driverTestConfig);
455
+ const handle = client.connStateActor.getOrCreate();
456
+ const conn1 = handle.connect();
457
+ const conn2 = handle.connect();
458
+ await conn1.getConnectionState();
459
+ await conn2.getConnectionState();
460
+ const allStates = await conn1.getAllConnectionStates();
461
+ _vitest.expect.call(void 0, allStates.length).toBeGreaterThanOrEqual(2);
462
+ const ids = allStates.map((state) => state.id);
463
+ const uniqueIds = [...new Set(ids)];
464
+ _vitest.expect.call(void 0, uniqueIds.length).toBe(ids.length);
465
+ await conn1.dispose();
466
+ await conn2.dispose();
467
+ });
468
+ });
469
+ _vitest.describe.call(void 0, "Connection Lifecycle", () => {
470
+ _vitest.test.call(void 0, "should track connection and disconnection events", async (c) => {
471
+ const { client } = await setupDriverTest(c, driverTestConfig);
472
+ const handle = client.connStateActor.getOrCreate();
473
+ const conn = handle.connect();
474
+ const connState = await conn.getConnectionState();
475
+ const connectionIds = await conn.getConnectionIds();
476
+ _vitest.expect.call(void 0, connectionIds).toContain(connState.id);
477
+ const initialDisconnections = await conn.getDisconnectionCount();
478
+ await conn.dispose();
479
+ const newConn = handle.connect();
480
+ await _vitest.vi.waitFor(async () => {
481
+ const newDisconnections = await newConn.getDisconnectionCount();
482
+ _vitest.expect.call(void 0, newDisconnections).toBeGreaterThan(initialDisconnections);
483
+ });
484
+ await newConn.dispose();
485
+ });
486
+ _vitest.test.call(void 0, "should update connection state", async (c) => {
487
+ const { client } = await setupDriverTest(c, driverTestConfig);
488
+ const conn = client.connStateActor.getOrCreate().connect();
489
+ const initialState = await conn.getConnectionState();
490
+ _vitest.expect.call(void 0, initialState.username).toBe("anonymous");
491
+ const updatedState = await conn.updateConnection({
492
+ username: "newname",
493
+ role: "moderator"
494
+ });
495
+ _vitest.expect.call(void 0, updatedState.username).toBe("newname");
496
+ _vitest.expect.call(void 0, updatedState.role).toBe("moderator");
497
+ const latestState = await conn.getConnectionState();
498
+ _vitest.expect.call(void 0, latestState.username).toBe("newname");
499
+ _vitest.expect.call(void 0, latestState.role).toBe("moderator");
500
+ await conn.dispose();
501
+ });
502
+ });
503
+ _vitest.describe.call(void 0, "Connection Communication", () => {
504
+ _vitest.test.call(void 0, "should send messages to specific connections", async (c) => {
505
+ const { client } = await setupDriverTest(c, driverTestConfig);
506
+ const handle = client.connStateActor.getOrCreate();
507
+ const conn1 = handle.connect();
508
+ const conn2 = handle.connect();
509
+ const state1 = await conn1.getConnectionState();
510
+ const state2 = await conn2.getConnectionState();
511
+ const receivedMessages = [];
512
+ conn2.on("directMessage", (data) => {
513
+ receivedMessages.push(data);
514
+ });
515
+ const success = await conn1.sendToConnection(
516
+ state2.id,
517
+ "Hello from conn1"
518
+ );
519
+ _vitest.expect.call(void 0, success).toBe(true);
520
+ _vitest.expect.call(void 0, receivedMessages.length).toBe(1);
521
+ _vitest.expect.call(void 0, receivedMessages[0].from).toBe(state1.id);
522
+ _vitest.expect.call(void 0, receivedMessages[0].message).toBe("Hello from conn1");
523
+ await conn1.dispose();
524
+ await conn2.dispose();
525
+ });
526
+ });
527
+ });
528
+ }
529
+
530
+ // src/driver-test-suite/tests/actor-driver.ts
531
+
532
+
533
+ // src/driver-test-suite/tests/actor-schedule.ts
534
+
535
+ function runActorScheduleTests(driverTestConfig) {
536
+ var _a;
537
+ _vitest.describe.skipIf((_a = driverTestConfig.skip) == null ? void 0 : _a.schedule)(
538
+ "Actor Schedule Tests",
539
+ () => {
540
+ _vitest.describe.call(void 0, "Scheduled Alarms", () => {
541
+ _vitest.test.call(void 0, "executes c.schedule.at() with specific timestamp", async (c) => {
542
+ const { client } = await setupDriverTest(c, driverTestConfig);
543
+ const scheduled = client.scheduled.getOrCreate();
544
+ const timestamp = Date.now() + 100;
545
+ await scheduled.scheduleTaskAt(timestamp);
546
+ await waitFor(driverTestConfig, 200);
547
+ const lastRun = await scheduled.getLastRun();
548
+ const scheduledCount = await scheduled.getScheduledCount();
549
+ _vitest.expect.call(void 0, lastRun).toBeGreaterThan(0);
550
+ _vitest.expect.call(void 0, scheduledCount).toBe(1);
551
+ });
552
+ _vitest.test.call(void 0, "executes c.schedule.after() with delay", async (c) => {
553
+ const { client } = await setupDriverTest(c, driverTestConfig);
554
+ const scheduled = client.scheduled.getOrCreate();
555
+ await scheduled.scheduleTaskAfter(100);
556
+ await waitFor(driverTestConfig, 200);
557
+ const lastRun = await scheduled.getLastRun();
558
+ const scheduledCount = await scheduled.getScheduledCount();
559
+ _vitest.expect.call(void 0, lastRun).toBeGreaterThan(0);
560
+ _vitest.expect.call(void 0, scheduledCount).toBe(1);
561
+ });
562
+ _vitest.test.call(void 0, "scheduled tasks persist across actor restarts", async (c) => {
563
+ const { client } = await setupDriverTest(c, driverTestConfig);
564
+ const scheduled = client.scheduled.getOrCreate();
565
+ await scheduled.scheduleTaskAfter(200);
566
+ await waitFor(driverTestConfig, 100);
567
+ const newInstance = client.scheduled.getOrCreate();
568
+ const initialCount = await newInstance.getScheduledCount();
569
+ _vitest.expect.call(void 0, initialCount).toBe(0);
570
+ await waitFor(driverTestConfig, 200);
571
+ const scheduledCount = await newInstance.getScheduledCount();
572
+ _vitest.expect.call(void 0, scheduledCount).toBe(1);
573
+ });
574
+ _vitest.test.call(void 0, "multiple scheduled tasks execute in order", async (c) => {
575
+ const { client } = await setupDriverTest(c, driverTestConfig);
576
+ const scheduled = client.scheduled.getOrCreate();
577
+ await scheduled.clearHistory();
578
+ await scheduled.scheduleTaskAfterWithId("first", 100);
579
+ await scheduled.scheduleTaskAfterWithId("second", 300);
580
+ await scheduled.scheduleTaskAfterWithId("third", 500);
581
+ await waitFor(driverTestConfig, 200);
582
+ const history1 = await scheduled.getTaskHistory();
583
+ _vitest.expect.call(void 0, history1).toEqual(["first"]);
584
+ await waitFor(driverTestConfig, 200);
585
+ const history2 = await scheduled.getTaskHistory();
586
+ _vitest.expect.call(void 0, history2).toEqual(["first", "second"]);
587
+ await waitFor(driverTestConfig, 200);
588
+ const history3 = await scheduled.getTaskHistory();
589
+ _vitest.expect.call(void 0, history3).toEqual(["first", "second", "third"]);
590
+ });
591
+ });
592
+ }
593
+ );
594
+ }
595
+
596
+ // src/driver-test-suite/tests/actor-sleep.ts
597
+
598
+
599
+ // fixtures/driver-test-suite/sleep.ts
600
+ var SLEEP_TIMEOUT = 500;
601
+ var sleep = _chunkVO7ZRVVDcjs.actor.call(void 0, {
602
+ state: { startCount: 0, sleepCount: 0 },
603
+ onStart: (c) => {
604
+ c.state.startCount += 1;
605
+ },
606
+ onStop: (c) => {
607
+ c.state.sleepCount += 1;
608
+ },
609
+ actions: {
610
+ triggerSleep: (c) => {
611
+ c.sleep();
612
+ },
613
+ getCounts: (c) => {
614
+ return { startCount: c.state.startCount, sleepCount: c.state.sleepCount };
615
+ },
616
+ setAlarm: async (c, duration) => {
617
+ await c.schedule.after(duration, "onAlarm");
618
+ },
619
+ onAlarm: (c) => {
620
+ c.log.info("alarm called");
621
+ }
622
+ },
623
+ options: {
624
+ sleepTimeout: SLEEP_TIMEOUT
625
+ }
626
+ });
627
+ var sleepWithLongRpc = _chunkVO7ZRVVDcjs.actor.call(void 0, {
628
+ state: { startCount: 0, sleepCount: 0 },
629
+ createVars: () => ({}),
630
+ onStart: (c) => {
631
+ c.state.startCount += 1;
632
+ },
633
+ onStop: (c) => {
634
+ c.state.sleepCount += 1;
635
+ },
636
+ actions: {
637
+ getCounts: (c) => {
638
+ return { startCount: c.state.startCount, sleepCount: c.state.sleepCount };
639
+ },
640
+ longRunningRpc: async (c) => {
641
+ c.log.info("starting long running rpc");
642
+ c.vars.longRunningResolve = Promise.withResolvers();
643
+ c.broadcast("waiting");
644
+ await c.vars.longRunningResolve.promise;
645
+ c.log.info("finished long running rpc");
646
+ },
647
+ finishLongRunningRpc: (c) => {
648
+ var _a;
649
+ return (_a = c.vars.longRunningResolve) == null ? void 0 : _a.resolve();
650
+ }
651
+ },
652
+ options: {
653
+ sleepTimeout: SLEEP_TIMEOUT
654
+ }
655
+ });
656
+ var sleepWithRawHttp = _chunkVO7ZRVVDcjs.actor.call(void 0, {
657
+ state: { startCount: 0, sleepCount: 0, requestCount: 0 },
658
+ onStart: (c) => {
659
+ c.state.startCount += 1;
660
+ },
661
+ onStop: (c) => {
662
+ c.state.sleepCount += 1;
663
+ },
664
+ onFetch: async (c, request) => {
665
+ c.state.requestCount += 1;
666
+ const url = new URL(request.url);
667
+ if (url.pathname === "/long-request") {
668
+ const duration = parseInt(url.searchParams.get("duration") || "1000");
669
+ c.log.info({ msg: "starting long fetch request", duration });
670
+ await new Promise((resolve2) => setTimeout(resolve2, duration));
671
+ c.log.info("finished long fetch request");
672
+ return new Response(JSON.stringify({ completed: true }), {
673
+ headers: { "Content-Type": "application/json" }
674
+ });
675
+ }
676
+ return new Response("Not Found", { status: 404 });
677
+ },
678
+ actions: {
679
+ getCounts: (c) => {
680
+ return {
681
+ startCount: c.state.startCount,
682
+ sleepCount: c.state.sleepCount,
683
+ requestCount: c.state.requestCount
684
+ };
685
+ }
686
+ },
687
+ options: {
688
+ sleepTimeout: SLEEP_TIMEOUT
689
+ }
690
+ });
691
+ var sleepWithRawWebSocket = _chunkVO7ZRVVDcjs.actor.call(void 0, {
692
+ state: { startCount: 0, sleepCount: 0, connectionCount: 0 },
693
+ onStart: (c) => {
694
+ c.state.startCount += 1;
695
+ },
696
+ onStop: (c) => {
697
+ c.state.sleepCount += 1;
698
+ },
699
+ onWebSocket: (c, websocket, opts) => {
700
+ c.state.connectionCount += 1;
701
+ c.log.info({
702
+ msg: "websocket connected",
703
+ connectionCount: c.state.connectionCount
704
+ });
705
+ websocket.send(
706
+ JSON.stringify({
707
+ type: "connected",
708
+ connectionCount: c.state.connectionCount
709
+ })
710
+ );
711
+ websocket.addEventListener("message", (event) => {
712
+ const data = event.data;
713
+ if (typeof data === "string") {
714
+ try {
715
+ const parsed = JSON.parse(data);
716
+ if (parsed.type === "getCounts") {
717
+ websocket.send(
718
+ JSON.stringify({
719
+ type: "counts",
720
+ startCount: c.state.startCount,
721
+ sleepCount: c.state.sleepCount,
722
+ connectionCount: c.state.connectionCount
723
+ })
724
+ );
725
+ } else if (parsed.type === "keepAlive") {
726
+ websocket.send(JSON.stringify({ type: "ack" }));
727
+ }
728
+ } catch (e2) {
729
+ websocket.send(data);
730
+ }
731
+ }
732
+ });
733
+ websocket.addEventListener("close", () => {
734
+ c.state.connectionCount -= 1;
735
+ c.log.info({
736
+ msg: "websocket disconnected",
737
+ connectionCount: c.state.connectionCount
738
+ });
739
+ });
740
+ },
741
+ actions: {
742
+ getCounts: (c) => {
743
+ return {
744
+ startCount: c.state.startCount,
745
+ sleepCount: c.state.sleepCount,
746
+ connectionCount: c.state.connectionCount
747
+ };
748
+ }
749
+ },
750
+ options: {
751
+ sleepTimeout: SLEEP_TIMEOUT
752
+ }
753
+ });
754
+ var sleepWithNoSleepOption = _chunkVO7ZRVVDcjs.actor.call(void 0, {
755
+ state: { startCount: 0, sleepCount: 0 },
756
+ onStart: (c) => {
757
+ c.state.startCount += 1;
758
+ },
759
+ onStop: (c) => {
760
+ c.state.sleepCount += 1;
761
+ },
762
+ actions: {
763
+ getCounts: (c) => {
764
+ return { startCount: c.state.startCount, sleepCount: c.state.sleepCount };
765
+ }
766
+ },
767
+ options: {
768
+ sleepTimeout: SLEEP_TIMEOUT,
769
+ noSleep: true
770
+ }
771
+ });
772
+
773
+ // src/driver-test-suite/tests/actor-sleep.ts
774
+ function runActorSleepTests(driverTestConfig) {
775
+ var _a;
776
+ _vitest.describe.skipIf((_a = driverTestConfig.skip) == null ? void 0 : _a.sleep)("Actor Sleep Tests", () => {
777
+ _vitest.test.call(void 0, "actor sleep persists state", async (c) => {
778
+ const { client } = await setupDriverTest(c, driverTestConfig);
779
+ const sleepActor = client.sleep.getOrCreate();
780
+ {
781
+ const { startCount, sleepCount } = await sleepActor.getCounts();
782
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
783
+ _vitest.expect.call(void 0, startCount).toBe(1);
784
+ }
785
+ await sleepActor.triggerSleep();
786
+ await waitFor(driverTestConfig, 100);
787
+ {
788
+ const { startCount, sleepCount } = await sleepActor.getCounts();
789
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
790
+ _vitest.expect.call(void 0, startCount).toBe(2);
791
+ }
792
+ });
793
+ _vitest.test.call(void 0, "actor sleep persists state with connect", async (c) => {
794
+ const { client } = await setupDriverTest(c, driverTestConfig);
795
+ const sleepActor = client.sleep.getOrCreate().connect();
796
+ {
797
+ const { startCount, sleepCount } = await sleepActor.getCounts();
798
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
799
+ _vitest.expect.call(void 0, startCount).toBe(1);
800
+ }
801
+ await sleepActor.triggerSleep();
802
+ await sleepActor.dispose();
803
+ await waitFor(driverTestConfig, 100);
804
+ const sleepActor2 = client.sleep.getOrCreate();
805
+ {
806
+ const { startCount, sleepCount } = await sleepActor2.getCounts();
807
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
808
+ _vitest.expect.call(void 0, startCount).toBe(2);
809
+ }
810
+ });
811
+ _vitest.test.call(void 0, "actor automatically sleeps after timeout", async (c) => {
812
+ const { client } = await setupDriverTest(c, driverTestConfig);
813
+ const sleepActor = client.sleep.getOrCreate();
814
+ {
815
+ const { startCount, sleepCount } = await sleepActor.getCounts();
816
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
817
+ _vitest.expect.call(void 0, startCount).toBe(1);
818
+ }
819
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
820
+ {
821
+ const { startCount, sleepCount } = await sleepActor.getCounts();
822
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
823
+ _vitest.expect.call(void 0, startCount).toBe(2);
824
+ }
825
+ });
826
+ _vitest.test.call(void 0, "actor automatically sleeps after timeout with connect", async (c) => {
827
+ const { client } = await setupDriverTest(c, driverTestConfig);
828
+ const sleepActor = client.sleep.getOrCreate().connect();
829
+ {
830
+ const { startCount, sleepCount } = await sleepActor.getCounts();
831
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
832
+ _vitest.expect.call(void 0, startCount).toBe(1);
833
+ }
834
+ await sleepActor.dispose();
835
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
836
+ const sleepActor2 = client.sleep.getOrCreate();
837
+ {
838
+ const { startCount, sleepCount } = await sleepActor2.getCounts();
839
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
840
+ _vitest.expect.call(void 0, startCount).toBe(2);
841
+ }
842
+ });
843
+ _vitest.test.call(void 0, "rpc calls keep actor awake", async (c) => {
844
+ const { client } = await setupDriverTest(c, driverTestConfig);
845
+ const sleepActor = client.sleep.getOrCreate();
846
+ {
847
+ const { startCount, sleepCount } = await sleepActor.getCounts();
848
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
849
+ _vitest.expect.call(void 0, startCount).toBe(1);
850
+ }
851
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT - 100);
852
+ {
853
+ const { startCount, sleepCount } = await sleepActor.getCounts();
854
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
855
+ _vitest.expect.call(void 0, startCount).toBe(1);
856
+ }
857
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT - 100);
858
+ {
859
+ const { startCount, sleepCount } = await sleepActor.getCounts();
860
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
861
+ _vitest.expect.call(void 0, startCount).toBe(1);
862
+ }
863
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
864
+ {
865
+ const { startCount, sleepCount } = await sleepActor.getCounts();
866
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
867
+ _vitest.expect.call(void 0, startCount).toBe(2);
868
+ }
869
+ });
870
+ _vitest.test.call(void 0, "alarms keep actor awake", async (c) => {
871
+ const { client } = await setupDriverTest(c, driverTestConfig);
872
+ const sleepActor = client.sleep.getOrCreate();
873
+ {
874
+ const { startCount, sleepCount } = await sleepActor.getCounts();
875
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
876
+ _vitest.expect.call(void 0, startCount).toBe(1);
877
+ }
878
+ await sleepActor.setAlarm(SLEEP_TIMEOUT - 100);
879
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
880
+ {
881
+ const { startCount, sleepCount } = await sleepActor.getCounts();
882
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
883
+ _vitest.expect.call(void 0, startCount).toBe(1);
884
+ }
885
+ });
886
+ _vitest.test.call(void 0, "alarms wake actors", async (c) => {
887
+ const { client } = await setupDriverTest(c, driverTestConfig);
888
+ const sleepActor = client.sleep.getOrCreate();
889
+ {
890
+ const { startCount, sleepCount } = await sleepActor.getCounts();
891
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
892
+ _vitest.expect.call(void 0, startCount).toBe(1);
893
+ }
894
+ await sleepActor.setAlarm(SLEEP_TIMEOUT + 100);
895
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 200);
896
+ {
897
+ const { startCount, sleepCount } = await sleepActor.getCounts();
898
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
899
+ _vitest.expect.call(void 0, startCount).toBe(2);
900
+ }
901
+ });
902
+ _vitest.test.call(void 0, "long running rpcs keep actor awake", async (c) => {
903
+ const { client } = await setupDriverTest(c, driverTestConfig);
904
+ const sleepActor = client.sleepWithLongRpc.getOrCreate().connect();
905
+ {
906
+ const { startCount, sleepCount } = await sleepActor.getCounts();
907
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
908
+ _vitest.expect.call(void 0, startCount).toBe(1);
909
+ }
910
+ const waitPromise = new Promise(
911
+ (resolve2) => sleepActor.once("waiting", resolve2)
912
+ );
913
+ const longRunningPromise = sleepActor.longRunningRpc();
914
+ await waitPromise;
915
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
916
+ await sleepActor.finishLongRunningRpc();
917
+ await longRunningPromise;
918
+ {
919
+ const { startCount, sleepCount } = await sleepActor.getCounts();
920
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
921
+ _vitest.expect.call(void 0, startCount).toBe(1);
922
+ }
923
+ await sleepActor.dispose();
924
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
925
+ const sleepActor2 = client.sleepWithLongRpc.getOrCreate();
926
+ {
927
+ const { startCount, sleepCount } = await sleepActor2.getCounts();
928
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
929
+ _vitest.expect.call(void 0, startCount).toBe(2);
930
+ }
931
+ });
932
+ _vitest.test.call(void 0, "active raw websockets keep actor awake", async (c) => {
933
+ const { client, endpoint: baseUrl } = await setupDriverTest(
934
+ c,
935
+ driverTestConfig
936
+ );
937
+ const sleepActor = client.sleepWithRawWebSocket.getOrCreate();
938
+ {
939
+ const { startCount, sleepCount } = await sleepActor.getCounts();
940
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
941
+ _vitest.expect.call(void 0, startCount).toBe(1);
942
+ }
943
+ const ws = await sleepActor.websocket();
944
+ await new Promise((resolve2, reject) => {
945
+ ws.onopen = () => resolve2();
946
+ ws.onerror = reject;
947
+ });
948
+ await new Promise((resolve2) => {
949
+ ws.onmessage = (event) => {
950
+ const data = JSON.parse(event.data);
951
+ if (data.type === "connected") {
952
+ resolve2();
953
+ }
954
+ };
955
+ });
956
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
957
+ ws.send(JSON.stringify({ type: "getCounts" }));
958
+ const counts = await new Promise((resolve2) => {
959
+ ws.onmessage = (event) => {
960
+ const data = JSON.parse(event.data);
961
+ if (data.type === "counts") {
962
+ resolve2(data);
963
+ }
964
+ };
965
+ });
966
+ _vitest.expect.call(void 0, counts.sleepCount).toBe(0);
967
+ _vitest.expect.call(void 0, counts.startCount).toBe(1);
968
+ ws.close();
969
+ await new Promise((resolve2) => setTimeout(resolve2, 100));
970
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
971
+ {
972
+ const { startCount, sleepCount } = await sleepActor.getCounts();
973
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
974
+ _vitest.expect.call(void 0, startCount).toBe(2);
975
+ }
976
+ });
977
+ _vitest.test.call(void 0, "active raw fetch requests keep actor awake", async (c) => {
978
+ const { client, endpoint: baseUrl } = await setupDriverTest(
979
+ c,
980
+ driverTestConfig
981
+ );
982
+ const sleepActor = client.sleepWithRawHttp.getOrCreate();
983
+ {
984
+ const { startCount, sleepCount } = await sleepActor.getCounts();
985
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
986
+ _vitest.expect.call(void 0, startCount).toBe(1);
987
+ }
988
+ const fetchDuration = SLEEP_TIMEOUT + 100;
989
+ const fetchPromise = sleepActor.fetch(
990
+ `long-request?duration=${fetchDuration}`
991
+ );
992
+ const response = await fetchPromise;
993
+ const result = await response.json();
994
+ _vitest.expect.call(void 0, result.completed).toBe(true);
995
+ {
996
+ const { startCount, sleepCount, requestCount } = await sleepActor.getCounts();
997
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
998
+ _vitest.expect.call(void 0, startCount).toBe(1);
999
+ _vitest.expect.call(void 0, requestCount).toBe(1);
1000
+ }
1001
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
1002
+ {
1003
+ const { startCount, sleepCount } = await sleepActor.getCounts();
1004
+ _vitest.expect.call(void 0, sleepCount).toBe(1);
1005
+ _vitest.expect.call(void 0, startCount).toBe(2);
1006
+ }
1007
+ });
1008
+ _vitest.test.call(void 0, "noSleep option disables sleeping", async (c) => {
1009
+ const { client } = await setupDriverTest(c, driverTestConfig);
1010
+ const sleepActor = client.sleepWithNoSleepOption.getOrCreate();
1011
+ {
1012
+ const { startCount, sleepCount } = await sleepActor.getCounts();
1013
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
1014
+ _vitest.expect.call(void 0, startCount).toBe(1);
1015
+ }
1016
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
1017
+ {
1018
+ const { startCount, sleepCount } = await sleepActor.getCounts();
1019
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
1020
+ _vitest.expect.call(void 0, startCount).toBe(1);
1021
+ }
1022
+ await waitFor(driverTestConfig, SLEEP_TIMEOUT + 100);
1023
+ {
1024
+ const { startCount, sleepCount } = await sleepActor.getCounts();
1025
+ _vitest.expect.call(void 0, sleepCount).toBe(0);
1026
+ _vitest.expect.call(void 0, startCount).toBe(1);
1027
+ }
1028
+ });
1029
+ });
1030
+ }
1031
+
1032
+ // src/driver-test-suite/tests/actor-state.ts
1033
+
1034
+ function runActorStateTests(driverTestConfig) {
1035
+ _vitest.describe.call(void 0, "Actor State Tests", () => {
1036
+ _vitest.describe.call(void 0, "State Persistence", () => {
1037
+ _vitest.test.call(void 0, "persists state between actor instances", async (c) => {
1038
+ const { client } = await setupDriverTest(c, driverTestConfig);
1039
+ const counterInstance = client.counter.getOrCreate();
1040
+ const initialCount = await counterInstance.increment(5);
1041
+ _vitest.expect.call(void 0, initialCount).toBe(5);
1042
+ const sameInstance = client.counter.getOrCreate();
1043
+ const persistedCount = await sameInstance.increment(3);
1044
+ _vitest.expect.call(void 0, persistedCount).toBe(8);
1045
+ });
1046
+ _vitest.test.call(void 0, "restores state after actor disconnect/reconnect", async (c) => {
1047
+ const { client } = await setupDriverTest(c, driverTestConfig);
1048
+ const counterInstance = client.counter.getOrCreate();
1049
+ await counterInstance.increment(5);
1050
+ const reconnectedInstance = client.counter.getOrCreate();
1051
+ const persistedCount = await reconnectedInstance.increment(0);
1052
+ _vitest.expect.call(void 0, persistedCount).toBe(5);
1053
+ });
1054
+ _vitest.test.call(void 0, "maintains separate state for different actors", async (c) => {
1055
+ const { client } = await setupDriverTest(c, driverTestConfig);
1056
+ const counterA = client.counter.getOrCreate(["counter-a"]);
1057
+ await counterA.increment(5);
1058
+ const counterB = client.counter.getOrCreate(["counter-b"]);
1059
+ await counterB.increment(10);
1060
+ const countA = await counterA.increment(0);
1061
+ const countB = await counterB.increment(0);
1062
+ _vitest.expect.call(void 0, countA).toBe(5);
1063
+ _vitest.expect.call(void 0, countB).toBe(10);
1064
+ });
1065
+ });
1066
+ });
1067
+ }
1068
+
1069
+ // src/driver-test-suite/tests/actor-driver.ts
1070
+ function runActorDriverTests(driverTestConfig) {
1071
+ _vitest.describe.call(void 0, "Actor Driver Tests", () => {
1072
+ runActorStateTests(driverTestConfig);
1073
+ runActorScheduleTests(driverTestConfig);
1074
+ });
1075
+ }
1076
+ function runActorDriverTestsWithTransport(driverTestConfig) {
1077
+ _vitest.describe.call(void 0, "Actor Driver Tests", () => {
1078
+ runActorSleepTests(driverTestConfig);
1079
+ });
1080
+ }
1081
+
1082
+ // src/driver-test-suite/tests/actor-error-handling.ts
1083
+
1084
+ function runActorErrorHandlingTests(driverTestConfig) {
1085
+ _vitest.describe.call(void 0, "Actor Error Handling Tests", () => {
1086
+ _vitest.describe.call(void 0, "UserError Handling", () => {
1087
+ _vitest.test.call(void 0, "should handle simple UserError with message", async (c) => {
1088
+ const { client } = await setupDriverTest(c, driverTestConfig);
1089
+ const handle = client.errorHandlingActor.getOrCreate();
1090
+ try {
1091
+ await handle.throwSimpleError();
1092
+ _vitest.expect.call(void 0, true).toBe(false);
1093
+ } catch (error) {
1094
+ _vitest.expect.call(void 0, error.message).toBe("Simple error message");
1095
+ _vitest.expect.call(void 0, error.code).toBe("user_error");
1096
+ _vitest.expect.call(void 0, error.metadata).toBeUndefined();
1097
+ }
1098
+ });
1099
+ _vitest.test.call(void 0, "should handle detailed UserError with code and metadata", async (c) => {
1100
+ const { client } = await setupDriverTest(c, driverTestConfig);
1101
+ const handle = client.errorHandlingActor.getOrCreate();
1102
+ try {
1103
+ await handle.throwDetailedError();
1104
+ _vitest.expect.call(void 0, true).toBe(false);
1105
+ } catch (error) {
1106
+ _vitest.expect.call(void 0, error.message).toBe("Detailed error message");
1107
+ _vitest.expect.call(void 0, error.code).toBe("detailed_error");
1108
+ _vitest.expect.call(void 0, error.metadata).toBeDefined();
1109
+ _vitest.expect.call(void 0, error.metadata.reason).toBe("test");
1110
+ _vitest.expect.call(void 0, error.metadata.timestamp).toBeDefined();
1111
+ }
1112
+ });
1113
+ });
1114
+ _vitest.describe.call(void 0, "Internal Error Handling", () => {
1115
+ _vitest.test.call(void 0, "should convert internal errors to safe format", async (c) => {
1116
+ const { client } = await setupDriverTest(c, driverTestConfig);
1117
+ const handle = client.errorHandlingActor.getOrCreate();
1118
+ try {
1119
+ await handle.throwInternalError();
1120
+ _vitest.expect.call(void 0, true).toBe(false);
1121
+ } catch (error) {
1122
+ if (driverTestConfig.clientType === "http") {
1123
+ _vitest.expect.call(void 0, error.code).toBe(_chunkSBHHJ6QScjs.INTERNAL_ERROR_CODE);
1124
+ _vitest.expect.call(void 0, error.message).toBe(_chunkSBHHJ6QScjs.INTERNAL_ERROR_DESCRIPTION);
1125
+ } else if (driverTestConfig.clientType === "inline") {
1126
+ _vitest.expect.call(void 0, error.code).toBe(_chunkSBHHJ6QScjs.INTERNAL_ERROR_CODE);
1127
+ _vitest.expect.call(void 0, error.message).toBe("This is an internal error");
1128
+ } else {
1129
+ _chunkGICQ3YCUcjs.assertUnreachable.call(void 0, driverTestConfig.clientType);
1130
+ }
1131
+ }
1132
+ });
1133
+ });
1134
+ _vitest.describe.skip("Action Timeout", () => {
1135
+ _vitest.test.call(void 0, "should handle action timeouts with custom duration", async (c) => {
1136
+ const { client } = await setupDriverTest(c, driverTestConfig);
1137
+ const handle = client.errorHandlingActor.getOrCreate();
1138
+ const timeoutPromise = handle.timeoutAction();
1139
+ try {
1140
+ await timeoutPromise;
1141
+ _vitest.expect.call(void 0, true).toBe(false);
1142
+ } catch (error) {
1143
+ _vitest.expect.call(void 0, error.message).toMatch(/timed out/i);
1144
+ }
1145
+ });
1146
+ _vitest.test.call(void 0, "should successfully run actions within timeout", async (c) => {
1147
+ const { client } = await setupDriverTest(c, driverTestConfig);
1148
+ const handle = client.errorHandlingActor.getOrCreate();
1149
+ const result = await handle.delayedAction(200);
1150
+ _vitest.expect.call(void 0, result).toBe("Completed after 200ms");
1151
+ });
1152
+ _vitest.test.call(void 0, "should respect different timeouts for different actors", async (c) => {
1153
+ const { client } = await setupDriverTest(c, driverTestConfig);
1154
+ try {
1155
+ await client.customTimeoutActor.getOrCreate().slowAction();
1156
+ _vitest.expect.call(void 0, true).toBe(false);
1157
+ } catch (error) {
1158
+ _vitest.expect.call(void 0, error.message).toMatch(/timed out/i);
1159
+ }
1160
+ const quickResult = await client.customTimeoutActor.getOrCreate().quickAction();
1161
+ _vitest.expect.call(void 0, quickResult).toBe("Quick action completed");
1162
+ });
1163
+ });
1164
+ _vitest.describe.call(void 0, "Error Recovery", () => {
1165
+ _vitest.test.call(void 0, "should continue working after errors", async (c) => {
1166
+ const { client } = await setupDriverTest(c, driverTestConfig);
1167
+ const handle = client.errorHandlingActor.getOrCreate();
1168
+ try {
1169
+ await handle.throwSimpleError();
1170
+ } catch (error) {
1171
+ }
1172
+ const result = await handle.successfulAction();
1173
+ _vitest.expect.call(void 0, result).toBe("success");
1174
+ });
1175
+ });
1176
+ });
1177
+ }
1178
+
1179
+ // src/driver-test-suite/tests/actor-handle.ts
1180
+
1181
+ function runActorHandleTests(driverTestConfig) {
1182
+ _vitest.describe.call(void 0, "Actor Handle Tests", () => {
1183
+ _vitest.describe.call(void 0, "Access Methods", () => {
1184
+ _vitest.test.call(void 0, "should use .get() to access a actor", async (c) => {
1185
+ const { client } = await setupDriverTest(c, driverTestConfig);
1186
+ await client.counter.create(["test-get-handle"]);
1187
+ const handle = client.counter.get(["test-get-handle"]);
1188
+ const count = await handle.increment(5);
1189
+ _vitest.expect.call(void 0, count).toBe(5);
1190
+ const retrievedCount = await handle.getCount();
1191
+ _vitest.expect.call(void 0, retrievedCount).toBe(5);
1192
+ });
1193
+ _vitest.test.call(void 0, "should use .getForId() to access a actor by ID", async (c) => {
1194
+ const { client } = await setupDriverTest(c, driverTestConfig);
1195
+ const handle = client.counter.getOrCreate(["test-get-for-id-handle"]);
1196
+ await handle.increment(3);
1197
+ const actorId = await handle.resolve();
1198
+ const idHandle = client.counter.getForId(actorId);
1199
+ const count = await idHandle.getCount();
1200
+ _vitest.expect.call(void 0, count).toBe(3);
1201
+ const newCount = await idHandle.increment(4);
1202
+ _vitest.expect.call(void 0, newCount).toBe(7);
1203
+ });
1204
+ _vitest.test.call(void 0, "should use .getOrCreate() to access or create a actor", async (c) => {
1205
+ const { client } = await setupDriverTest(c, driverTestConfig);
1206
+ const handle = client.counter.getOrCreate([
1207
+ "test-get-or-create-handle"
1208
+ ]);
1209
+ const count = await handle.increment(7);
1210
+ _vitest.expect.call(void 0, count).toBe(7);
1211
+ const sameHandle = client.counter.getOrCreate([
1212
+ "test-get-or-create-handle"
1213
+ ]);
1214
+ const retrievedCount = await sameHandle.getCount();
1215
+ _vitest.expect.call(void 0, retrievedCount).toBe(7);
1216
+ });
1217
+ _vitest.test.call(void 0, "should use (await create()) to create and return a handle", async (c) => {
1218
+ const { client } = await setupDriverTest(c, driverTestConfig);
1219
+ const handle = await client.counter.create(["test-create-handle"]);
1220
+ const count = await handle.increment(9);
1221
+ _vitest.expect.call(void 0, count).toBe(9);
1222
+ const retrievedCount = await handle.getCount();
1223
+ _vitest.expect.call(void 0, retrievedCount).toBe(9);
1224
+ });
1225
+ _vitest.test.call(void 0, "errors when calling create twice with the same key", async (c) => {
1226
+ const { client } = await setupDriverTest(c, driverTestConfig);
1227
+ const key = ["duplicate-create-handle", crypto.randomUUID()];
1228
+ await client.counter.create(key);
1229
+ try {
1230
+ await client.counter.create(key);
1231
+ _vitest.expect.fail("did not error on duplicate create");
1232
+ } catch (err) {
1233
+ _vitest.expect.call(void 0, err.group).toBe("actor");
1234
+ _vitest.expect.call(void 0, err.code).toBe("already_exists");
1235
+ }
1236
+ });
1237
+ _vitest.test.call(void 0, ".get().resolve() errors for non-existent actor", async (c) => {
1238
+ const { client } = await setupDriverTest(c, driverTestConfig);
1239
+ const missingId = `nonexistent-${crypto.randomUUID()}`;
1240
+ try {
1241
+ await client.counter.get([missingId]).resolve();
1242
+ _vitest.expect.fail("did not error for get().resolve() on missing actor");
1243
+ } catch (err) {
1244
+ _vitest.expect.call(void 0, err.group).toBe("actor");
1245
+ _vitest.expect.call(void 0, err.code).toBe("not_found");
1246
+ }
1247
+ });
1248
+ });
1249
+ _vitest.describe.call(void 0, "Action Functionality", () => {
1250
+ _vitest.test.call(void 0, "should call actions directly on the handle", async (c) => {
1251
+ const { client } = await setupDriverTest(c, driverTestConfig);
1252
+ const handle = client.counter.getOrCreate(["test-action-handle"]);
1253
+ const count1 = await handle.increment(3);
1254
+ _vitest.expect.call(void 0, count1).toBe(3);
1255
+ const count2 = await handle.increment(5);
1256
+ _vitest.expect.call(void 0, count2).toBe(8);
1257
+ const retrievedCount = await handle.getCount();
1258
+ _vitest.expect.call(void 0, retrievedCount).toBe(8);
1259
+ });
1260
+ _vitest.test.call(void 0, "should handle independent handles to the same actor", async (c) => {
1261
+ const { client } = await setupDriverTest(c, driverTestConfig);
1262
+ const handle1 = client.counter.getOrCreate(["test-multiple-handles"]);
1263
+ const handle2 = client.counter.get(["test-multiple-handles"]);
1264
+ await handle1.increment(3);
1265
+ const count = await handle2.getCount();
1266
+ _vitest.expect.call(void 0, count).toBe(3);
1267
+ const finalCount = await handle2.increment(4);
1268
+ _vitest.expect.call(void 0, finalCount).toBe(7);
1269
+ const checkCount = await handle1.getCount();
1270
+ _vitest.expect.call(void 0, checkCount).toBe(7);
1271
+ });
1272
+ _vitest.test.call(void 0, "should resolve a actor's ID", async (c) => {
1273
+ const { client } = await setupDriverTest(c, driverTestConfig);
1274
+ const handle = client.counter.getOrCreate(["test-resolve-id"]);
1275
+ await handle.increment(1);
1276
+ const actorId = await handle.resolve();
1277
+ _vitest.expect.call(void 0, typeof actorId).toBe("string");
1278
+ _vitest.expect.call(void 0, actorId).not.toBe("");
1279
+ const idHandle = client.counter.getForId(actorId);
1280
+ const count = await idHandle.getCount();
1281
+ _vitest.expect.call(void 0, count).toBe(1);
1282
+ });
1283
+ });
1284
+ _vitest.describe.call(void 0, "Lifecycle Hooks", () => {
1285
+ _vitest.test.call(void 0, "should trigger lifecycle hooks on actor creation", async (c) => {
1286
+ const { client } = await setupDriverTest(c, driverTestConfig);
1287
+ const handle = client.counterWithLifecycle.getOrCreate([
1288
+ "test-lifecycle-handle"
1289
+ ]);
1290
+ const initialEvents = await handle.getEvents();
1291
+ _vitest.expect.call(void 0, initialEvents).toContain("onStart");
1292
+ const sameHandle = client.counterWithLifecycle.getOrCreate([
1293
+ "test-lifecycle-handle"
1294
+ ]);
1295
+ const events = await sameHandle.getEvents();
1296
+ _vitest.expect.call(void 0, events).toContain("onStart");
1297
+ _vitest.expect.call(void 0, events.filter((e) => e === "onStart").length).toBe(1);
1298
+ });
1299
+ _vitest.test.call(void 0, "should trigger lifecycle hooks for each Action call", async (c) => {
1300
+ const { client } = await setupDriverTest(c, driverTestConfig);
1301
+ const viewHandle = client.counterWithLifecycle.getOrCreate([
1302
+ "test-lifecycle-action"
1303
+ ]);
1304
+ const initialEvents = await viewHandle.getEvents();
1305
+ _vitest.expect.call(void 0, initialEvents).toContain("onStart");
1306
+ _vitest.expect.call(void 0, initialEvents).not.toContain("onBeforeConnect");
1307
+ _vitest.expect.call(void 0, initialEvents).not.toContain("onConnect");
1308
+ _vitest.expect.call(void 0, initialEvents).not.toContain("onDisconnect");
1309
+ const trackingHandle = client.counterWithLifecycle.getOrCreate(
1310
+ ["test-lifecycle-action"],
1311
+ { params: { trackLifecycle: true } }
1312
+ );
1313
+ await trackingHandle.increment(5);
1314
+ const eventsAfterAction = await viewHandle.getEvents();
1315
+ _vitest.expect.call(void 0, eventsAfterAction).toContain("onBeforeConnect");
1316
+ _vitest.expect.call(void 0, eventsAfterAction).toContain("onConnect");
1317
+ _vitest.expect.call(void 0, eventsAfterAction).toContain("onDisconnect");
1318
+ _vitest.expect.call(void 0,
1319
+ eventsAfterAction.filter((e) => e === "onBeforeConnect").length
1320
+ ).toBe(1);
1321
+ _vitest.expect.call(void 0, eventsAfterAction.filter((e) => e === "onConnect").length).toBe(
1322
+ 1
1323
+ );
1324
+ _vitest.expect.call(void 0,
1325
+ eventsAfterAction.filter((e) => e === "onDisconnect").length
1326
+ ).toBe(1);
1327
+ await trackingHandle.increment(10);
1328
+ const eventsAfterSecondAction = await viewHandle.getEvents();
1329
+ _vitest.expect.call(void 0,
1330
+ eventsAfterSecondAction.filter((e) => e === "onBeforeConnect").length
1331
+ ).toBe(2);
1332
+ _vitest.expect.call(void 0,
1333
+ eventsAfterSecondAction.filter((e) => e === "onConnect").length
1334
+ ).toBe(2);
1335
+ _vitest.expect.call(void 0,
1336
+ eventsAfterSecondAction.filter((e) => e === "onDisconnect").length
1337
+ ).toBe(2);
1338
+ });
1339
+ _vitest.test.call(void 0, "should trigger lifecycle hooks for each Action call across multiple handles", async (c) => {
1340
+ const { client } = await setupDriverTest(c, driverTestConfig);
1341
+ const viewHandle = client.counterWithLifecycle.getOrCreate([
1342
+ "test-lifecycle-multi-handle"
1343
+ ]);
1344
+ const trackingHandle1 = client.counterWithLifecycle.getOrCreate(
1345
+ ["test-lifecycle-multi-handle"],
1346
+ { params: { trackLifecycle: true } }
1347
+ );
1348
+ const trackingHandle2 = client.counterWithLifecycle.getOrCreate(
1349
+ ["test-lifecycle-multi-handle"],
1350
+ { params: { trackLifecycle: true } }
1351
+ );
1352
+ await trackingHandle1.increment(5);
1353
+ await trackingHandle2.increment(10);
1354
+ const events = await viewHandle.getEvents();
1355
+ _vitest.expect.call(void 0, events.filter((e) => e === "onStart").length).toBe(1);
1356
+ _vitest.expect.call(void 0, events.filter((e) => e === "onBeforeConnect").length).toBe(2);
1357
+ _vitest.expect.call(void 0, events.filter((e) => e === "onConnect").length).toBe(2);
1358
+ _vitest.expect.call(void 0, events.filter((e) => e === "onDisconnect").length).toBe(2);
1359
+ });
1360
+ });
1361
+ });
1362
+ }
1363
+
1364
+ // src/driver-test-suite/tests/actor-inline-client.ts
1365
+
1366
+ function runActorInlineClientTests(driverTestConfig) {
1367
+ _vitest.describe.call(void 0, "Actor Inline Client Tests", () => {
1368
+ _vitest.describe.call(void 0, "Stateless Client Calls", () => {
1369
+ _vitest.test.call(void 0, "should make stateless calls to other actors", async (c) => {
1370
+ const { client } = await setupDriverTest(c, driverTestConfig);
1371
+ const inlineClientHandle = client.inlineClientActor.getOrCreate([
1372
+ "inline-client-test"
1373
+ ]);
1374
+ const result = await inlineClientHandle.callCounterIncrement(5);
1375
+ _vitest.expect.call(void 0, result).toBe(5);
1376
+ const counterState = await inlineClientHandle.getCounterState();
1377
+ _vitest.expect.call(void 0, counterState).toBe(5);
1378
+ const messages = await inlineClientHandle.getMessages();
1379
+ _vitest.expect.call(void 0, messages).toHaveLength(2);
1380
+ _vitest.expect.call(void 0, messages[0]).toContain("Called counter.increment(5), result: 5");
1381
+ _vitest.expect.call(void 0, messages[1]).toContain("Got counter state: 5");
1382
+ });
1383
+ _vitest.test.call(void 0, "should handle multiple stateless calls", async (c) => {
1384
+ const { client } = await setupDriverTest(c, driverTestConfig);
1385
+ const inlineClientHandle = client.inlineClientActor.getOrCreate([
1386
+ "inline-client-multi"
1387
+ ]);
1388
+ await inlineClientHandle.clearMessages();
1389
+ const result1 = await inlineClientHandle.callCounterIncrement(3);
1390
+ const result2 = await inlineClientHandle.callCounterIncrement(7);
1391
+ const finalState = await inlineClientHandle.getCounterState();
1392
+ _vitest.expect.call(void 0, result1).toBe(3);
1393
+ _vitest.expect.call(void 0, result2).toBe(10);
1394
+ _vitest.expect.call(void 0, finalState).toBe(10);
1395
+ const messages = await inlineClientHandle.getMessages();
1396
+ _vitest.expect.call(void 0, messages).toHaveLength(3);
1397
+ _vitest.expect.call(void 0, messages[0]).toContain("Called counter.increment(3), result: 3");
1398
+ _vitest.expect.call(void 0, messages[1]).toContain(
1399
+ "Called counter.increment(7), result: 10"
1400
+ );
1401
+ _vitest.expect.call(void 0, messages[2]).toContain("Got counter state: 10");
1402
+ });
1403
+ });
1404
+ _vitest.describe.call(void 0, "Stateful Client Calls", () => {
1405
+ _vitest.test.call(void 0, "should connect to other actors and receive events", async (c) => {
1406
+ const { client } = await setupDriverTest(c, driverTestConfig);
1407
+ const inlineClientHandle = client.inlineClientActor.getOrCreate([
1408
+ "inline-client-stateful"
1409
+ ]);
1410
+ await inlineClientHandle.clearMessages();
1411
+ const result = await inlineClientHandle.connectToCounterAndIncrement(4);
1412
+ _vitest.expect.call(void 0, result.result1).toBe(4);
1413
+ _vitest.expect.call(void 0, result.result2).toBe(12);
1414
+ _vitest.expect.call(void 0, result.events).toEqual([4, 12]);
1415
+ const messages = await inlineClientHandle.getMessages();
1416
+ _vitest.expect.call(void 0, messages).toHaveLength(1);
1417
+ _vitest.expect.call(void 0, messages[0]).toContain(
1418
+ "Connected to counter, incremented by 4 and 8"
1419
+ );
1420
+ _vitest.expect.call(void 0, messages[0]).toContain("results: 4, 12");
1421
+ _vitest.expect.call(void 0, messages[0]).toContain("events: [4,12]");
1422
+ });
1423
+ _vitest.test.call(void 0, "should handle stateful connection independently", async (c) => {
1424
+ const { client } = await setupDriverTest(c, driverTestConfig);
1425
+ const inlineClientHandle = client.inlineClientActor.getOrCreate([
1426
+ "inline-client-independent"
1427
+ ]);
1428
+ await inlineClientHandle.clearMessages();
1429
+ const result = await inlineClientHandle.connectToCounterAndIncrement(2);
1430
+ _vitest.expect.call(void 0, result.result1).toBe(2);
1431
+ _vitest.expect.call(void 0, result.result2).toBe(6);
1432
+ _vitest.expect.call(void 0, result.events).toEqual([2, 6]);
1433
+ const messages = await inlineClientHandle.getMessages();
1434
+ _vitest.expect.call(void 0, messages).toHaveLength(1);
1435
+ _vitest.expect.call(void 0, messages[0]).toContain(
1436
+ "Connected to counter, incremented by 2 and 4"
1437
+ );
1438
+ });
1439
+ });
1440
+ _vitest.describe.call(void 0, "Mixed Client Usage", () => {
1441
+ _vitest.test.call(void 0, "should handle both stateless and stateful calls", async (c) => {
1442
+ const { client } = await setupDriverTest(c, driverTestConfig);
1443
+ const inlineClientHandle = client.inlineClientActor.getOrCreate([
1444
+ "inline-client-mixed"
1445
+ ]);
1446
+ await inlineClientHandle.clearMessages();
1447
+ await inlineClientHandle.callCounterIncrement(1);
1448
+ const statelessResult = await inlineClientHandle.getCounterState();
1449
+ _vitest.expect.call(void 0, statelessResult).toBe(1);
1450
+ const statefulResult = await inlineClientHandle.connectToCounterAndIncrement(3);
1451
+ _vitest.expect.call(void 0, statefulResult.result1).toBe(3);
1452
+ _vitest.expect.call(void 0, statefulResult.result2).toBe(9);
1453
+ const messages = await inlineClientHandle.getMessages();
1454
+ _vitest.expect.call(void 0, messages).toHaveLength(3);
1455
+ _vitest.expect.call(void 0, messages[0]).toContain("Called counter.increment(1), result: 1");
1456
+ _vitest.expect.call(void 0, messages[1]).toContain("Got counter state: 1");
1457
+ _vitest.expect.call(void 0, messages[2]).toContain(
1458
+ "Connected to counter, incremented by 3 and 6"
1459
+ );
1460
+ });
1461
+ });
1462
+ });
1463
+ }
1464
+
1465
+ // src/driver-test-suite/tests/actor-inspector.ts
1466
+
1467
+ function runActorInspectorTests(driverTestConfig) {
1468
+ _vitest.describe.call(void 0, "Actor Inspector Tests", () => {
1469
+ _vitest.describe.call(void 0, "Manager Inspector", () => {
1470
+ _vitest.test.call(void 0, "should respond to ping", async (c) => {
1471
+ const { endpoint } = await setupDriverTest(c, driverTestConfig);
1472
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1473
+ headers: {
1474
+ Authorization: `Bearer token`
1475
+ }
1476
+ });
1477
+ const response = await http.ping.$get();
1478
+ _vitest.expect.call(void 0, response.status).toBe(200);
1479
+ const data = await response.json();
1480
+ _vitest.expect.call(void 0, data).toEqual({ message: "pong" });
1481
+ });
1482
+ _vitest.test.call(void 0, "should get actors with pagination", async (c) => {
1483
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1484
+ await client.counter.create(["test-actor-1"]);
1485
+ await client.counter.create(["test-actor-2"]);
1486
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1487
+ headers: {
1488
+ Authorization: `Bearer token`
1489
+ }
1490
+ });
1491
+ const response = await http.actors.$get({
1492
+ query: { limit: "1" }
1493
+ });
1494
+ _vitest.expect.call(void 0, response.status).toBe(200);
1495
+ const data = await response.json();
1496
+ _vitest.expect.call(void 0, data).toEqual(
1497
+ _vitest.expect.arrayContaining([
1498
+ _vitest.expect.objectContaining({ key: ["test-actor-1"] })
1499
+ ])
1500
+ );
1501
+ _vitest.expect.call(void 0, data.length).toBe(1);
1502
+ });
1503
+ _vitest.test.call(void 0, "should get all actors with pagination", async (c) => {
1504
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1505
+ const actorKey1 = ["test-cursor-1"];
1506
+ const actorKey2 = ["test-cursor-2"];
1507
+ await client.counter.create(actorKey1);
1508
+ await client.counter.create(actorKey2);
1509
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1510
+ headers: {
1511
+ Authorization: `Bearer token`
1512
+ }
1513
+ });
1514
+ const response = await http.actors.$get({
1515
+ query: { limit: "5" }
1516
+ });
1517
+ _vitest.expect.call(void 0, response.status).toBe(200);
1518
+ const data = await response.json();
1519
+ _vitest.expect.call(void 0, data).toEqual(
1520
+ _vitest.expect.arrayContaining([
1521
+ _vitest.expect.objectContaining({
1522
+ id: _vitest.expect.any(String),
1523
+ key: actorKey1
1524
+ }),
1525
+ _vitest.expect.objectContaining({
1526
+ id: _vitest.expect.any(String),
1527
+ key: actorKey2
1528
+ })
1529
+ ])
1530
+ );
1531
+ });
1532
+ _vitest.test.call(void 0, "should handle invalid limit parameter", async (c) => {
1533
+ const { endpoint } = await setupDriverTest(c, driverTestConfig);
1534
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1535
+ headers: {
1536
+ Authorization: `Bearer token`
1537
+ }
1538
+ });
1539
+ const response = await http.actors.$get({
1540
+ query: { limit: "0" }
1541
+ });
1542
+ _vitest.expect.call(void 0, response.status).toBe(400);
1543
+ });
1544
+ _vitest.test.call(void 0, "should create a new actor", async (c) => {
1545
+ const { endpoint } = await setupDriverTest(c, driverTestConfig);
1546
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1547
+ headers: {
1548
+ Authorization: `Bearer token`
1549
+ }
1550
+ });
1551
+ const response = await http.actors.$post({
1552
+ json: {
1553
+ name: "default",
1554
+ key: ["test-create-actor"],
1555
+ input: {}
1556
+ }
1557
+ });
1558
+ _vitest.expect.call(void 0, response.status).toBe(201);
1559
+ const data = await response.json();
1560
+ _vitest.expect.call(void 0, data).toEqual(
1561
+ _vitest.expect.objectContaining({
1562
+ id: _vitest.expect.any(String),
1563
+ name: "default",
1564
+ key: ["test-create-actor"]
1565
+ })
1566
+ );
1567
+ });
1568
+ _vitest.test.call(void 0, "should get builds", async (c) => {
1569
+ const { endpoint } = await setupDriverTest(c, driverTestConfig);
1570
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1571
+ headers: {
1572
+ Authorization: `Bearer token`
1573
+ }
1574
+ });
1575
+ const response = await http.builds.$get();
1576
+ _vitest.expect.call(void 0, response.status).toBe(200);
1577
+ const data = await response.json();
1578
+ _vitest.expect.call(void 0, data).toEqual(
1579
+ _vitest.expect.arrayContaining([
1580
+ _vitest.expect.objectContaining({ name: _vitest.expect.any(String) })
1581
+ ])
1582
+ );
1583
+ });
1584
+ _vitest.test.call(void 0, "should get actor by id", async (c) => {
1585
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1586
+ const handle = await client.counter.create(["test-get-by-id"]);
1587
+ const actorId = await handle.resolve();
1588
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1589
+ headers: {
1590
+ Authorization: `Bearer token`
1591
+ }
1592
+ });
1593
+ const response = await http.actor[":id"].$get({
1594
+ param: { id: actorId }
1595
+ });
1596
+ _vitest.expect.call(void 0, response.status).toBe(200);
1597
+ const data = await response.json();
1598
+ _vitest.expect.call(void 0, data).toHaveProperty("id", actorId);
1599
+ });
1600
+ _vitest.test.call(void 0, "should return 404 for non-existent actor", async (c) => {
1601
+ const { endpoint } = await setupDriverTest(c, driverTestConfig);
1602
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1603
+ headers: {
1604
+ Authorization: `Bearer token`
1605
+ }
1606
+ });
1607
+ const response = await http.actor[":id"].$get({
1608
+ param: { id: "non-existent-id" }
1609
+ });
1610
+ _vitest.expect.call(void 0, response.status).toBe(404);
1611
+ const data = await response.json();
1612
+ _vitest.expect.call(void 0, data).toEqual({ error: "Actor not found" });
1613
+ });
1614
+ _vitest.test.call(void 0, "should get bootstrap data", async (c) => {
1615
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1616
+ const handle = await client.counter.create(["test-bootstrap"]);
1617
+ await handle.resolve();
1618
+ const http = _chunkLWNKVZG5cjs.createManagerInspectorClient.call(void 0, `${endpoint}/inspect`, {
1619
+ headers: {
1620
+ Authorization: `Bearer token`
1621
+ }
1622
+ });
1623
+ const response = await http.bootstrap.$get();
1624
+ _vitest.expect.call(void 0, response.status).toBe(200);
1625
+ const data = await response.json();
1626
+ _vitest.expect.call(void 0, data.actors).toEqual(
1627
+ _vitest.expect.arrayContaining([
1628
+ _vitest.expect.objectContaining({
1629
+ key: ["test-bootstrap"],
1630
+ name: "counter"
1631
+ })
1632
+ ])
1633
+ );
1634
+ });
1635
+ });
1636
+ _vitest.describe.call(void 0, "Actor Inspector", () => {
1637
+ _vitest.test.call(void 0, "should handle actor not found", async (c) => {
1638
+ const { endpoint } = await setupDriverTest(c, driverTestConfig);
1639
+ const actorId = "non-existing";
1640
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1641
+ headers: {
1642
+ Authorization: `Bearer token`,
1643
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1644
+ getForId: { name: "counter", actorId }
1645
+ })
1646
+ }
1647
+ });
1648
+ const response = await http.ping.$get();
1649
+ _vitest.expect.call(void 0, response.ok).toBe(false);
1650
+ });
1651
+ _vitest.test.call(void 0, "should respond to ping", async (c) => {
1652
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1653
+ const handle = await client.counter.create(["test-ping"]);
1654
+ const actorId = await handle.resolve();
1655
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1656
+ headers: {
1657
+ Authorization: `Bearer token`,
1658
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1659
+ getForId: { name: "counter", actorId }
1660
+ })
1661
+ }
1662
+ });
1663
+ const response = await http.ping.$get();
1664
+ _vitest.expect.call(void 0, response.status).toBe(200);
1665
+ const data = await response.json();
1666
+ _vitest.expect.call(void 0, data).toEqual({ message: "pong" });
1667
+ });
1668
+ _vitest.test.call(void 0, "should get actor state", async (c) => {
1669
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1670
+ const handle = await client.counter.create(["test-state"]);
1671
+ const actorId = await handle.resolve();
1672
+ await handle.increment(5);
1673
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1674
+ headers: {
1675
+ Authorization: `Bearer token`,
1676
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1677
+ getForId: { name: "counter", actorId }
1678
+ })
1679
+ }
1680
+ });
1681
+ const response = await http.state.$get();
1682
+ _vitest.expect.call(void 0, response.status).toBe(200);
1683
+ const data = await response.json();
1684
+ _vitest.expect.call(void 0, data).toEqual({
1685
+ enabled: true,
1686
+ state: _vitest.expect.objectContaining({
1687
+ count: 5
1688
+ })
1689
+ });
1690
+ });
1691
+ _vitest.test.call(void 0, "should update actor state with replace", async (c) => {
1692
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1693
+ const handle = await client.counter.create(["test-state-replace"]);
1694
+ const actorId = await handle.resolve();
1695
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1696
+ headers: {
1697
+ Authorization: `Bearer token`,
1698
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1699
+ getForId: { name: "counter", actorId }
1700
+ })
1701
+ }
1702
+ });
1703
+ const response = await http.state.$patch({
1704
+ json: {
1705
+ replace: { count: 10 }
1706
+ }
1707
+ });
1708
+ _vitest.expect.call(void 0, response.status).toBe(200);
1709
+ const data = await response.json();
1710
+ _vitest.expect.call(void 0, data).toEqual({
1711
+ enabled: true,
1712
+ state: { count: 10 }
1713
+ });
1714
+ });
1715
+ _vitest.test.call(void 0, "should update actor state with patch", async (c) => {
1716
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1717
+ const handle = await client.counter.create(["test-state-patch"]);
1718
+ const actorId = await handle.resolve();
1719
+ await handle.increment(3);
1720
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1721
+ headers: {
1722
+ Authorization: `Bearer token`,
1723
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1724
+ getForId: { name: "counter", actorId }
1725
+ })
1726
+ }
1727
+ });
1728
+ const response = await http.state.$patch({
1729
+ json: {
1730
+ patch: [
1731
+ {
1732
+ op: "replace",
1733
+ path: "/count",
1734
+ value: 7
1735
+ }
1736
+ ]
1737
+ }
1738
+ });
1739
+ _vitest.expect.call(void 0, response.status).toBe(200);
1740
+ const data = await response.json();
1741
+ _vitest.expect.call(void 0, data).toEqual({
1742
+ enabled: true,
1743
+ state: _vitest.expect.objectContaining({
1744
+ count: 7
1745
+ })
1746
+ });
1747
+ });
1748
+ _vitest.test.call(void 0, "should get actor connections", async (c) => {
1749
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1750
+ const handle = await client.counter.create(["test-connections"]);
1751
+ const actorId = await handle.resolve();
1752
+ handle.connect();
1753
+ await handle.increment(10);
1754
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1755
+ headers: {
1756
+ Authorization: `Bearer token`,
1757
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1758
+ getForId: { name: "counter", actorId }
1759
+ })
1760
+ }
1761
+ });
1762
+ const response = await http.connections.$get();
1763
+ _vitest.expect.call(void 0, response.status).toBe(200);
1764
+ const data = await response.json();
1765
+ _vitest.expect.call(void 0, data.connections).toEqual(
1766
+ _vitest.expect.arrayContaining([
1767
+ _vitest.expect.objectContaining({
1768
+ id: _vitest.expect.any(String)
1769
+ })
1770
+ ])
1771
+ );
1772
+ });
1773
+ _vitest.test.call(void 0, "should get actor events", async (c) => {
1774
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1775
+ const handle = await client.counter.create(["test-events"]);
1776
+ const actorId = await handle.resolve();
1777
+ handle.connect();
1778
+ await handle.increment(10);
1779
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1780
+ headers: {
1781
+ Authorization: `Bearer token`,
1782
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1783
+ getForId: { name: "counter", actorId }
1784
+ })
1785
+ }
1786
+ });
1787
+ const response = await http.events.$get();
1788
+ _vitest.expect.call(void 0, response.status).toBe(200);
1789
+ const data = await response.json();
1790
+ _vitest.expect.call(void 0, data.events).toEqual(
1791
+ _vitest.expect.arrayContaining([
1792
+ _vitest.expect.objectContaining({
1793
+ type: "broadcast",
1794
+ id: _vitest.expect.any(String)
1795
+ })
1796
+ ])
1797
+ );
1798
+ });
1799
+ _vitest.test.call(void 0, "should clear actor events", async (c) => {
1800
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1801
+ const handle = await client.counter.create(["test-events-clear"]);
1802
+ const actorId = await handle.resolve();
1803
+ handle.connect();
1804
+ await handle.increment(10);
1805
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1806
+ headers: {
1807
+ Authorization: `Bearer token`,
1808
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1809
+ getForId: { name: "counter", actorId }
1810
+ })
1811
+ }
1812
+ });
1813
+ {
1814
+ const response2 = await http.events.$get();
1815
+ _vitest.expect.call(void 0, response2.status).toBe(200);
1816
+ const data = await response2.json();
1817
+ _vitest.expect.call(void 0, data.events).toEqual(
1818
+ _vitest.expect.arrayContaining([
1819
+ _vitest.expect.objectContaining({
1820
+ type: "broadcast",
1821
+ id: _vitest.expect.any(String)
1822
+ })
1823
+ ])
1824
+ );
1825
+ }
1826
+ const response = await http.events.clear.$post();
1827
+ _vitest.expect.call(void 0, response.status).toBe(200);
1828
+ });
1829
+ _vitest.test.call(void 0, "should get actor rpcs", async (c) => {
1830
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1831
+ const handle = await client.counter.create(["test-rpcs"]);
1832
+ const actorId = await handle.resolve();
1833
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1834
+ headers: {
1835
+ Authorization: `Bearer token`,
1836
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1837
+ getForId: { name: "counter", actorId }
1838
+ })
1839
+ }
1840
+ });
1841
+ const response = await http.rpcs.$get();
1842
+ _vitest.expect.call(void 0, response.status).toBe(200);
1843
+ const data = await response.json();
1844
+ _vitest.expect.call(void 0, data).toEqual(
1845
+ _vitest.expect.objectContaining({
1846
+ rpcs: _vitest.expect.arrayContaining(["increment", "getCount"])
1847
+ })
1848
+ );
1849
+ });
1850
+ _vitest.test.skip("should get actor database info", async (c) => {
1851
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1852
+ const handle = await client.counter.create(["test-db"]);
1853
+ const actorId = await handle.resolve();
1854
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1855
+ headers: {
1856
+ Authorization: `Bearer token`,
1857
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1858
+ getForId: { name: "counter", actorId }
1859
+ })
1860
+ }
1861
+ });
1862
+ const response = await http.db.$get();
1863
+ _vitest.expect.call(void 0, response.status).toBe(200);
1864
+ const data = await response.json();
1865
+ _vitest.expect.call(void 0, data).toHaveProperty("enabled");
1866
+ _vitest.expect.call(void 0, typeof data.enabled).toBe("boolean");
1867
+ if (data.enabled) {
1868
+ _vitest.expect.call(void 0, data).toHaveProperty("db");
1869
+ _vitest.expect.call(void 0, Array.isArray(data.db)).toBe(true);
1870
+ } else {
1871
+ _vitest.expect.call(void 0, data.db).toBe(null);
1872
+ }
1873
+ });
1874
+ _vitest.test.skip("should execute database query when database is enabled", async (c) => {
1875
+ const { client, endpoint } = await setupDriverTest(c, driverTestConfig);
1876
+ const handle = await client.counter.create(["test-db-query"]);
1877
+ const actorId = await handle.resolve();
1878
+ const http = _chunkLWNKVZG5cjs.createActorInspectorClient.call(void 0, `${endpoint}/actors/inspect`, {
1879
+ headers: {
1880
+ Authorization: `Bearer token`,
1881
+ [_chunkGICQ3YCUcjs.HEADER_ACTOR_QUERY]: JSON.stringify({
1882
+ getForId: { name: "counter", actorId }
1883
+ })
1884
+ }
1885
+ });
1886
+ const dbInfoResponse = await http.db.$get();
1887
+ const dbInfo = await dbInfoResponse.json();
1888
+ if (dbInfo.enabled) {
1889
+ const queryResponse = await http.db.$post({
1890
+ json: {
1891
+ query: "SELECT 1 as test",
1892
+ params: []
1893
+ }
1894
+ });
1895
+ _vitest.expect.call(void 0, queryResponse.status).toBe(200);
1896
+ const queryData = await queryResponse.json();
1897
+ _vitest.expect.call(void 0, queryData).toHaveProperty("result");
1898
+ } else {
1899
+ const queryResponse = await http.db.$post({
1900
+ json: {
1901
+ query: "SELECT 1 as test",
1902
+ params: []
1903
+ }
1904
+ });
1905
+ _vitest.expect.call(void 0, queryResponse.status).toBe(200);
1906
+ const queryData = await queryResponse.json();
1907
+ _vitest.expect.call(void 0, queryData).toEqual({ enabled: false });
1908
+ }
1909
+ });
1910
+ });
1911
+ });
1912
+ }
1913
+
1914
+ // src/driver-test-suite/tests/actor-metadata.ts
1915
+
1916
+ function runActorMetadataTests(driverTestConfig) {
1917
+ _vitest.describe.call(void 0, "Actor Metadata Tests", () => {
1918
+ _vitest.describe.call(void 0, "Actor Name", () => {
1919
+ _vitest.test.call(void 0, "should provide access to actor name", async (c) => {
1920
+ const { client } = await setupDriverTest(c, driverTestConfig);
1921
+ const handle = client.metadataActor.getOrCreate();
1922
+ const actorName = await handle.getActorName();
1923
+ _vitest.expect.call(void 0, actorName).toBe("metadataActor");
1924
+ });
1925
+ _vitest.test.call(void 0, "should preserve actor name in state during onStart", async (c) => {
1926
+ const { client } = await setupDriverTest(c, driverTestConfig);
1927
+ const handle = client.metadataActor.getOrCreate();
1928
+ const storedName = await handle.getStoredActorName();
1929
+ _vitest.expect.call(void 0, storedName).toBe("metadataActor");
1930
+ });
1931
+ });
1932
+ _vitest.describe.call(void 0, "Actor Tags", () => {
1933
+ _vitest.test.call(void 0, "should provide access to tags", async (c) => {
1934
+ const { client } = await setupDriverTest(c, driverTestConfig);
1935
+ const handle = client.metadataActor.getOrCreate();
1936
+ await handle.setupTestTags({
1937
+ env: "test",
1938
+ purpose: "metadata-test"
1939
+ });
1940
+ const tags = await handle.getTags();
1941
+ _vitest.expect.call(void 0, tags).toHaveProperty("env");
1942
+ _vitest.expect.call(void 0, tags.env).toBe("test");
1943
+ _vitest.expect.call(void 0, tags).toHaveProperty("purpose");
1944
+ _vitest.expect.call(void 0, tags.purpose).toBe("metadata-test");
1945
+ });
1946
+ _vitest.test.call(void 0, "should allow accessing individual tags", async (c) => {
1947
+ const { client } = await setupDriverTest(c, driverTestConfig);
1948
+ const handle = client.metadataActor.getOrCreate();
1949
+ await handle.setupTestTags({
1950
+ category: "test-actor",
1951
+ version: "1.0"
1952
+ });
1953
+ const category = await handle.getTag("category");
1954
+ const version = await handle.getTag("version");
1955
+ const nonexistent = await handle.getTag("nonexistent");
1956
+ _vitest.expect.call(void 0, category).toBe("test-actor");
1957
+ _vitest.expect.call(void 0, version).toBe("1.0");
1958
+ _vitest.expect.call(void 0, nonexistent).toBeNull();
1959
+ });
1960
+ });
1961
+ _vitest.describe.call(void 0, "Metadata Structure", () => {
1962
+ _vitest.test.call(void 0, "should provide complete metadata object", async (c) => {
1963
+ const { client } = await setupDriverTest(c, driverTestConfig);
1964
+ const handle = client.metadataActor.getOrCreate();
1965
+ await handle.setupTestTags({ type: "metadata-test" });
1966
+ await handle.setupTestRegion("us-west-1");
1967
+ const metadata = await handle.getMetadata();
1968
+ _vitest.expect.call(void 0, metadata).toHaveProperty("name");
1969
+ _vitest.expect.call(void 0, metadata.name).toBe("metadataActor");
1970
+ _vitest.expect.call(void 0, metadata).toHaveProperty("tags");
1971
+ _vitest.expect.call(void 0, metadata.tags).toHaveProperty("type");
1972
+ _vitest.expect.call(void 0, metadata.tags.type).toBe("metadata-test");
1973
+ _vitest.expect.call(void 0, metadata).toHaveProperty("region");
1974
+ _vitest.expect.call(void 0, metadata.region).toBe("us-west-1");
1975
+ });
1976
+ });
1977
+ _vitest.describe.call(void 0, "Region Information", () => {
1978
+ _vitest.test.call(void 0, "should retrieve region information", async (c) => {
1979
+ const { client } = await setupDriverTest(c, driverTestConfig);
1980
+ const handle = client.metadataActor.getOrCreate();
1981
+ await handle.setupTestRegion("eu-central-1");
1982
+ const region = await handle.getRegion();
1983
+ _vitest.expect.call(void 0, region).toBe("eu-central-1");
1984
+ });
1985
+ });
1986
+ });
1987
+ }
1988
+
1989
+ // src/driver-test-suite/tests/actor-onstatechange.ts
1990
+
1991
+ function runActorOnStateChangeTests(driverTestConfig) {
1992
+ _vitest.describe.call(void 0, "Actor onStateChange Tests", () => {
1993
+ _vitest.test.call(void 0, "triggers onStateChange when state is modified", async (c) => {
1994
+ const { client } = await setupDriverTest(c, driverTestConfig);
1995
+ const actor2 = client.onStateChangeActor.getOrCreate();
1996
+ await actor2.setValue(10);
1997
+ const changeCount = await actor2.getChangeCount();
1998
+ _vitest.expect.call(void 0, changeCount).toBe(1);
1999
+ });
2000
+ _vitest.test.call(void 0, "triggers onChange multiple times for multiple state changes", async (c) => {
2001
+ const { client } = await setupDriverTest(c, driverTestConfig);
2002
+ const actor2 = client.onStateChangeActor.getOrCreate();
2003
+ await actor2.incrementMultiple(3);
2004
+ const changeCount = await actor2.getChangeCount();
2005
+ _vitest.expect.call(void 0, changeCount).toBe(3);
2006
+ });
2007
+ _vitest.test.call(void 0, "does NOT trigger onChange for read-only actions", async (c) => {
2008
+ const { client } = await setupDriverTest(c, driverTestConfig);
2009
+ const actor2 = client.onStateChangeActor.getOrCreate();
2010
+ await actor2.setValue(5);
2011
+ const value = await actor2.getValue();
2012
+ _vitest.expect.call(void 0, value).toBe(5);
2013
+ const changeCount = await actor2.getChangeCount();
2014
+ _vitest.expect.call(void 0, changeCount).toBe(1);
2015
+ });
2016
+ _vitest.test.call(void 0, "does NOT trigger onChange for computed values", async (c) => {
2017
+ const { client } = await setupDriverTest(c, driverTestConfig);
2018
+ const actor2 = client.onStateChangeActor.getOrCreate();
2019
+ await actor2.setValue(3);
2020
+ {
2021
+ const changeCount = await actor2.getChangeCount();
2022
+ _vitest.expect.call(void 0, changeCount).toBe(1);
2023
+ }
2024
+ const doubled = await actor2.getDoubled();
2025
+ _vitest.expect.call(void 0, doubled).toBe(6);
2026
+ {
2027
+ const changeCount = await actor2.getChangeCount();
2028
+ _vitest.expect.call(void 0, changeCount).toBe(1);
2029
+ }
2030
+ });
2031
+ _vitest.test.call(void 0, "simple: connect, call action, dispose does NOT trigger onChange", async (c) => {
2032
+ const { client } = await setupDriverTest(c, driverTestConfig);
2033
+ const actor2 = client.onStateChangeActor.getOrCreate();
2034
+ const connection = await actor2.connect();
2035
+ const value = await connection.getValue();
2036
+ _vitest.expect.call(void 0, value).toBe(0);
2037
+ await connection.dispose();
2038
+ const changeCount = await actor2.getChangeCount();
2039
+ _vitest.expect.call(void 0, changeCount).toBe(0);
2040
+ });
2041
+ });
2042
+ }
2043
+
2044
+ // src/driver-test-suite/tests/actor-vars.ts
2045
+
2046
+ function runActorVarsTests(driverTestConfig) {
2047
+ _vitest.describe.call(void 0, "Actor Variables", () => {
2048
+ _vitest.describe.call(void 0, "Static vars", () => {
2049
+ _vitest.test.call(void 0, "should provide access to static vars", async (c) => {
2050
+ const { client } = await setupDriverTest(c, driverTestConfig);
2051
+ const instance = client.staticVarActor.getOrCreate();
2052
+ const result = await instance.getVars();
2053
+ _vitest.expect.call(void 0, result).toEqual({ counter: 42, name: "test-actor" });
2054
+ const name = await instance.getName();
2055
+ _vitest.expect.call(void 0, name).toBe("test-actor");
2056
+ });
2057
+ });
2058
+ _vitest.describe.call(void 0, "Deep cloning of static vars", () => {
2059
+ _vitest.test.call(void 0, "should deep clone static vars between actor instances", async (c) => {
2060
+ const { client } = await setupDriverTest(c, driverTestConfig);
2061
+ const instance1 = client.nestedVarActor.getOrCreate(["instance1"]);
2062
+ const instance2 = client.nestedVarActor.getOrCreate(["instance2"]);
2063
+ const modifiedVars = await instance1.modifyNested();
2064
+ _vitest.expect.call(void 0, modifiedVars.nested.value).toBe("modified");
2065
+ _vitest.expect.call(void 0, modifiedVars.nested.array).toContain(4);
2066
+ _vitest.expect.call(void 0, modifiedVars.nested.obj.key).toBe("new-value");
2067
+ const instance2Vars = await instance2.getVars();
2068
+ _vitest.expect.call(void 0, instance2Vars.nested.value).toBe("original");
2069
+ _vitest.expect.call(void 0, instance2Vars.nested.array).toEqual([1, 2, 3]);
2070
+ _vitest.expect.call(void 0, instance2Vars.nested.obj.key).toBe("value");
2071
+ });
2072
+ });
2073
+ _vitest.describe.call(void 0, "createVars", () => {
2074
+ _vitest.test.call(void 0, "should support dynamic vars creation", async (c) => {
2075
+ const { client } = await setupDriverTest(c, driverTestConfig);
2076
+ const instance = client.dynamicVarActor.getOrCreate();
2077
+ const vars = await instance.getVars();
2078
+ _vitest.expect.call(void 0, vars).toHaveProperty("random");
2079
+ _vitest.expect.call(void 0, vars).toHaveProperty("computed");
2080
+ _vitest.expect.call(void 0, typeof vars.random).toBe("number");
2081
+ _vitest.expect.call(void 0, typeof vars.computed).toBe("string");
2082
+ _vitest.expect.call(void 0, vars.computed).toMatch(/^Actor-\d+$/);
2083
+ });
2084
+ _vitest.test.call(void 0, "should create different vars for different instances", async (c) => {
2085
+ const { client } = await setupDriverTest(c, driverTestConfig);
2086
+ const instance1 = client.uniqueVarActor.getOrCreate(["test1"]);
2087
+ const instance2 = client.uniqueVarActor.getOrCreate(["test2"]);
2088
+ const vars1 = await instance1.getVars();
2089
+ const vars2 = await instance2.getVars();
2090
+ _vitest.expect.call(void 0, vars1.id).not.toBe(vars2.id);
2091
+ });
2092
+ });
2093
+ _vitest.describe.call(void 0, "Driver Context", () => {
2094
+ _vitest.test.call(void 0, "should provide access to driver context", async (c) => {
2095
+ const { client } = await setupDriverTest(c, driverTestConfig);
2096
+ const instance = client.driverCtxActor.getOrCreate();
2097
+ const vars = await instance.getVars();
2098
+ _vitest.expect.call(void 0, vars).toHaveProperty("hasDriverCtx");
2099
+ });
2100
+ });
2101
+ });
2102
+ }
2103
+
2104
+ // src/driver-test-suite/tests/manager-driver.ts
2105
+
2106
+ function runManagerDriverTests(driverTestConfig) {
2107
+ _vitest.describe.call(void 0, "Manager Driver Tests", () => {
2108
+ _vitest.describe.call(void 0, "Client Connection Methods", () => {
2109
+ _vitest.test.call(void 0, "connect() - finds or creates a actor", async (c) => {
2110
+ const { client } = await setupDriverTest(c, driverTestConfig);
2111
+ const counterA = client.counter.getOrCreate();
2112
+ await counterA.increment(5);
2113
+ const counterAAgain = client.counter.getOrCreate();
2114
+ const count = await counterAAgain.increment(0);
2115
+ _vitest.expect.call(void 0, count).toBe(5);
2116
+ const counterB = client.counter.getOrCreate(["counter-b", "testing"]);
2117
+ await counterB.increment(10);
2118
+ const countB = await counterB.increment(0);
2119
+ _vitest.expect.call(void 0, countB).toBe(10);
2120
+ });
2121
+ _vitest.test.call(void 0, "throws ActorAlreadyExists when creating duplicate actors", async (c) => {
2122
+ const { client } = await setupDriverTest(c, driverTestConfig);
2123
+ const uniqueKey = ["duplicate-actor-test", crypto.randomUUID()];
2124
+ const counter = client.counter.getOrCreate(uniqueKey);
2125
+ await counter.increment(5);
2126
+ try {
2127
+ await client.counter.create(uniqueKey);
2128
+ _vitest.expect.fail("did not error on duplicate create");
2129
+ } catch (err) {
2130
+ _vitest.expect.call(void 0, err.group).toBe("actor");
2131
+ _vitest.expect.call(void 0, err.code).toBe("already_exists");
2132
+ }
2133
+ const count = await counter.increment(0);
2134
+ _vitest.expect.call(void 0, count).toBe(5);
2135
+ });
2136
+ });
2137
+ _vitest.describe.call(void 0, "Connection Options", () => {
2138
+ _vitest.test.call(void 0, "get without create prevents actor creation", async (c) => {
2139
+ const { client } = await setupDriverTest(c, driverTestConfig);
2140
+ const nonexistentId = `nonexistent-${crypto.randomUUID()}`;
2141
+ try {
2142
+ await client.counter.get([nonexistentId]).resolve();
2143
+ _vitest.expect.fail("did not error for get");
2144
+ } catch (err) {
2145
+ _vitest.expect.call(void 0, err.group).toBe("actor");
2146
+ _vitest.expect.call(void 0, err.code).toBe("not_found");
2147
+ }
2148
+ const createdCounter = client.counter.getOrCreate(nonexistentId);
2149
+ await createdCounter.increment(3);
2150
+ const retrievedCounter = client.counter.get(nonexistentId);
2151
+ const count = await retrievedCounter.increment(0);
2152
+ _vitest.expect.call(void 0, count).toBe(3);
2153
+ });
2154
+ _vitest.test.call(void 0, "connection params are passed to actors", async (c) => {
2155
+ const { client } = await setupDriverTest(c, driverTestConfig);
2156
+ const counter = client.counter.getOrCreate(void 0, {
2157
+ params: {
2158
+ userId: "user-123",
2159
+ authToken: "token-abc",
2160
+ settings: { increment: 5 }
2161
+ }
2162
+ });
2163
+ await counter.increment(1);
2164
+ const count = await counter.increment(0);
2165
+ _vitest.expect.call(void 0, count).toBe(1);
2166
+ });
2167
+ });
2168
+ _vitest.describe.call(void 0, "Actor Creation & Retrieval", () => {
2169
+ _vitest.test.call(void 0, "creates and retrieves actors by ID", async (c) => {
2170
+ const { client } = await setupDriverTest(c, driverTestConfig);
2171
+ const uniqueId = `test-counter-${crypto.randomUUID()}`;
2172
+ const counter = client.counter.getOrCreate([uniqueId]);
2173
+ await counter.increment(10);
2174
+ const retrievedCounter = client.counter.getOrCreate([uniqueId]);
2175
+ const count = await retrievedCounter.increment(0);
2176
+ _vitest.expect.call(void 0, count).toBe(10);
2177
+ });
2178
+ _vitest.test.call(void 0, "passes input to actor during creation", async (c) => {
2179
+ const { client } = await setupDriverTest(c, driverTestConfig);
2180
+ const testInput = {
2181
+ name: "test-actor",
2182
+ value: 42,
2183
+ nested: { foo: "bar" }
2184
+ };
2185
+ const actor2 = await client.inputActor.create(void 0, {
2186
+ input: testInput
2187
+ });
2188
+ const inputs = await actor2.getInputs();
2189
+ _vitest.expect.call(void 0, inputs.initialInput).toEqual(testInput);
2190
+ _vitest.expect.call(void 0, inputs.onCreateInput).toEqual(testInput);
2191
+ });
2192
+ _vitest.test.call(void 0, "input is undefined when not provided", async (c) => {
2193
+ const { client } = await setupDriverTest(c, driverTestConfig);
2194
+ const actor2 = await client.inputActor.create();
2195
+ const inputs = await actor2.getInputs();
2196
+ _vitest.expect.call(void 0, inputs.initialInput).toBeUndefined();
2197
+ _vitest.expect.call(void 0, inputs.onCreateInput).toBeUndefined();
2198
+ });
2199
+ _vitest.test.call(void 0, "getOrCreate passes input to actor during creation", async (c) => {
2200
+ const { client } = await setupDriverTest(c, driverTestConfig);
2201
+ const uniqueKey = [`input-test-${crypto.randomUUID()}`];
2202
+ const testInput = {
2203
+ name: "getorcreate-test",
2204
+ value: 100,
2205
+ nested: { baz: "qux" }
2206
+ };
2207
+ const actor2 = client.inputActor.getOrCreate(uniqueKey, {
2208
+ createWithInput: testInput
2209
+ });
2210
+ const inputs = await actor2.getInputs();
2211
+ _vitest.expect.call(void 0, inputs.initialInput).toEqual(testInput);
2212
+ _vitest.expect.call(void 0, inputs.onCreateInput).toEqual(testInput);
2213
+ const existingActor = client.inputActor.getOrCreate(uniqueKey);
2214
+ const existingInputs = await existingActor.getInputs();
2215
+ _vitest.expect.call(void 0, existingInputs.initialInput).toEqual(testInput);
2216
+ _vitest.expect.call(void 0, existingInputs.onCreateInput).toEqual(testInput);
2217
+ });
2218
+ });
2219
+ _vitest.describe.call(void 0, "Key Matching", () => {
2220
+ _vitest.test.call(void 0, "matches actors only with exactly the same keys", async (c) => {
2221
+ const { client } = await setupDriverTest(c, driverTestConfig);
2222
+ const originalCounter = client.counter.getOrCreate([
2223
+ "counter-match",
2224
+ "test",
2225
+ "us-east"
2226
+ ]);
2227
+ await originalCounter.increment(10);
2228
+ const exactMatchCounter = client.counter.getOrCreate([
2229
+ "counter-match",
2230
+ "test",
2231
+ "us-east"
2232
+ ]);
2233
+ const exactMatchCount = await exactMatchCounter.increment(0);
2234
+ _vitest.expect.call(void 0, exactMatchCount).toBe(10);
2235
+ const subsetMatchCounter = client.counter.getOrCreate([
2236
+ "counter-match",
2237
+ "test"
2238
+ ]);
2239
+ const subsetMatchCount = await subsetMatchCounter.increment(0);
2240
+ _vitest.expect.call(void 0, subsetMatchCount).toBe(0);
2241
+ const singleKeyCounter = client.counter.getOrCreate(["counter-match"]);
2242
+ const singleKeyCount = await singleKeyCounter.increment(0);
2243
+ _vitest.expect.call(void 0, singleKeyCount).toBe(0);
2244
+ });
2245
+ _vitest.test.call(void 0, "string key matches array with single string key", async (c) => {
2246
+ const { client } = await setupDriverTest(c, driverTestConfig);
2247
+ const stringKeyCounter = client.counter.getOrCreate("string-key-test");
2248
+ await stringKeyCounter.increment(7);
2249
+ const arrayKeyCounter = client.counter.getOrCreate(["string-key-test"]);
2250
+ const count = await arrayKeyCounter.increment(0);
2251
+ _vitest.expect.call(void 0, count).toBe(7);
2252
+ });
2253
+ _vitest.test.call(void 0, "undefined key matches empty array key and no key", async (c) => {
2254
+ const { client } = await setupDriverTest(c, driverTestConfig);
2255
+ const undefinedKeyCounter = client.counter.getOrCreate(void 0);
2256
+ await undefinedKeyCounter.increment(12);
2257
+ const emptyArrayKeyCounter = client.counter.getOrCreate([]);
2258
+ const emptyArrayCount = await emptyArrayKeyCounter.increment(0);
2259
+ _vitest.expect.call(void 0, emptyArrayCount).toBe(12);
2260
+ const noKeyCounter = client.counter.getOrCreate();
2261
+ const noKeyCount = await noKeyCounter.increment(0);
2262
+ _vitest.expect.call(void 0, noKeyCount).toBe(12);
2263
+ });
2264
+ _vitest.test.call(void 0, "no keys does not match actors with keys", async (c) => {
2265
+ const { client } = await setupDriverTest(c, driverTestConfig);
2266
+ const keyedCounter = client.counter.getOrCreate([
2267
+ "counter-with-keys",
2268
+ "special"
2269
+ ]);
2270
+ await keyedCounter.increment(15);
2271
+ const noKeysCounter = client.counter.getOrCreate();
2272
+ const count = await noKeysCounter.increment(10);
2273
+ _vitest.expect.call(void 0, count).toBe(10);
2274
+ });
2275
+ _vitest.test.call(void 0, "actors with keys match actors with no keys", async (c) => {
2276
+ const { client } = await setupDriverTest(c, driverTestConfig);
2277
+ const noKeysCounter = client.counter.getOrCreate();
2278
+ await noKeysCounter.increment(25);
2279
+ const keyedCounter = client.counter.getOrCreate([
2280
+ "new-counter",
2281
+ "prod"
2282
+ ]);
2283
+ const keyedCount = await keyedCounter.increment(0);
2284
+ _vitest.expect.call(void 0, keyedCount).toBe(0);
2285
+ });
2286
+ });
2287
+ _vitest.describe.call(void 0, "Multiple Actor Instances", () => {
2288
+ _vitest.test.call(void 0, "creates multiple actor instances of the same type", async (c) => {
2289
+ const { client } = await setupDriverTest(c, driverTestConfig);
2290
+ const instance1 = client.counter.getOrCreate(["multi-1"]);
2291
+ const instance2 = client.counter.getOrCreate(["multi-2"]);
2292
+ const instance3 = client.counter.getOrCreate(["multi-3"]);
2293
+ await instance1.increment(1);
2294
+ await instance2.increment(2);
2295
+ await instance3.increment(3);
2296
+ const retrieved1 = client.counter.getOrCreate(["multi-1"]);
2297
+ const retrieved2 = client.counter.getOrCreate(["multi-2"]);
2298
+ const retrieved3 = client.counter.getOrCreate(["multi-3"]);
2299
+ _vitest.expect.call(void 0, await retrieved1.increment(0)).toBe(1);
2300
+ _vitest.expect.call(void 0, await retrieved2.increment(0)).toBe(2);
2301
+ _vitest.expect.call(void 0, await retrieved3.increment(0)).toBe(3);
2302
+ });
2303
+ _vitest.test.call(void 0, "handles default instance with no explicit ID", async (c) => {
2304
+ const { client } = await setupDriverTest(c, driverTestConfig);
2305
+ const defaultCounter = client.counter.getOrCreate();
2306
+ await defaultCounter.increment(5);
2307
+ const sameDefaultCounter = client.counter.getOrCreate();
2308
+ const count = await sameDefaultCounter.increment(0);
2309
+ _vitest.expect.call(void 0, count).toBe(5);
2310
+ });
2311
+ });
2312
+ });
2313
+ }
2314
+
2315
+ // src/driver-test-suite/tests/raw-http.ts
2316
+
2317
+ function runRawHttpTests(driverTestConfig) {
2318
+ _vitest.describe.call(void 0, "raw http", () => {
2319
+ _vitest.test.call(void 0, "should handle raw HTTP GET requests", async (c) => {
2320
+ const { client } = await setupDriverTest(c, driverTestConfig);
2321
+ const actor2 = client.rawHttpActor.getOrCreate(["test"]);
2322
+ const helloResponse = await actor2.fetch("api/hello");
2323
+ _vitest.expect.call(void 0, helloResponse.ok).toBe(true);
2324
+ const helloData = await helloResponse.json();
2325
+ _vitest.expect.call(void 0, helloData).toEqual({ message: "Hello from actor!" });
2326
+ });
2327
+ _vitest.test.call(void 0, "should handle raw HTTP POST requests with echo", async (c) => {
2328
+ const { client } = await setupDriverTest(c, driverTestConfig);
2329
+ const actor2 = client.rawHttpActor.getOrCreate(["test"]);
2330
+ const testData = { test: "data", number: 123 };
2331
+ const echoResponse = await actor2.fetch("api/echo", {
2332
+ method: "POST",
2333
+ headers: {
2334
+ "Content-Type": "application/json"
2335
+ },
2336
+ body: JSON.stringify(testData)
2337
+ });
2338
+ _vitest.expect.call(void 0, echoResponse.ok).toBe(true);
2339
+ const echoData = await echoResponse.json();
2340
+ _vitest.expect.call(void 0, echoData).toEqual(testData);
2341
+ });
2342
+ _vitest.test.call(void 0, "should track state across raw HTTP requests", async (c) => {
2343
+ const { client } = await setupDriverTest(c, driverTestConfig);
2344
+ const actor2 = client.rawHttpActor.getOrCreate(["state-test"]);
2345
+ await actor2.fetch("api/hello");
2346
+ await actor2.fetch("api/hello");
2347
+ await actor2.fetch("api/state");
2348
+ const stateResponse = await actor2.fetch("api/state");
2349
+ _vitest.expect.call(void 0, stateResponse.ok).toBe(true);
2350
+ const stateData = await stateResponse.json();
2351
+ _vitest.expect.call(void 0, stateData.requestCount).toBe(4);
2352
+ });
2353
+ _vitest.test.call(void 0, "should pass headers correctly", async (c) => {
2354
+ const { client } = await setupDriverTest(c, driverTestConfig);
2355
+ const actor2 = client.rawHttpActor.getOrCreate(["headers-test"]);
2356
+ const customHeaders = {
2357
+ "X-Custom-Header": "test-value",
2358
+ "X-Another-Header": "another-value"
2359
+ };
2360
+ const response = await actor2.fetch("api/headers", {
2361
+ headers: customHeaders
2362
+ });
2363
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2364
+ const headers = await response.json();
2365
+ _vitest.expect.call(void 0, headers["x-custom-header"]).toBe("test-value");
2366
+ _vitest.expect.call(void 0, headers["x-another-header"]).toBe("another-value");
2367
+ });
2368
+ _vitest.test.call(void 0, "should return 404 for unhandled paths", async (c) => {
2369
+ const { client } = await setupDriverTest(c, driverTestConfig);
2370
+ const actor2 = client.rawHttpActor.getOrCreate(["404-test"]);
2371
+ const response = await actor2.fetch("api/nonexistent");
2372
+ _vitest.expect.call(void 0, response.ok).toBe(false);
2373
+ _vitest.expect.call(void 0, response.status).toBe(404);
2374
+ });
2375
+ _vitest.test.call(void 0, "should return 404 when no onFetch handler defined", async (c) => {
2376
+ const { client } = await setupDriverTest(c, driverTestConfig);
2377
+ const actor2 = client.rawHttpNoHandlerActor.getOrCreate(["no-handler"]);
2378
+ const response = await actor2.fetch("api/anything");
2379
+ _vitest.expect.call(void 0, response.ok).toBe(false);
2380
+ _vitest.expect.call(void 0, response.status).toBe(404);
2381
+ });
2382
+ _vitest.test.call(void 0, "should return 500 error when onFetch returns void", async (c) => {
2383
+ const { client } = await setupDriverTest(c, driverTestConfig);
2384
+ const actor2 = client.rawHttpVoidReturnActor.getOrCreate(["void-return"]);
2385
+ const response = await actor2.fetch("api/anything");
2386
+ _vitest.expect.call(void 0, response.ok).toBe(false);
2387
+ _vitest.expect.call(void 0, response.status).toBe(500);
2388
+ try {
2389
+ const errorData = await response.json();
2390
+ _vitest.expect.call(void 0, errorData.message).toContain(
2391
+ "onFetch handler must return a Response"
2392
+ );
2393
+ } catch (e3) {
2394
+ }
2395
+ });
2396
+ _vitest.test.call(void 0, "should handle different HTTP methods", async (c) => {
2397
+ const { client } = await setupDriverTest(c, driverTestConfig);
2398
+ const actor2 = client.rawHttpActor.getOrCreate(["methods-test"]);
2399
+ const methods = ["GET", "POST", "PUT", "DELETE", "PATCH"];
2400
+ for (const method of methods) {
2401
+ const response = await actor2.fetch("api/echo", {
2402
+ method,
2403
+ body: ["POST", "PUT", "PATCH"].includes(method) ? JSON.stringify({ method }) : void 0
2404
+ });
2405
+ if (method === "POST") {
2406
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2407
+ const data = await response.json();
2408
+ _vitest.expect.call(void 0, data).toEqual({ method });
2409
+ } else if (method === "GET") {
2410
+ _vitest.expect.call(void 0, response.status).toBe(404);
2411
+ } else {
2412
+ _vitest.expect.call(void 0, response.status).toBe(404);
2413
+ }
2414
+ }
2415
+ });
2416
+ _vitest.test.call(void 0, "should handle binary data", async (c) => {
2417
+ const { client } = await setupDriverTest(c, driverTestConfig);
2418
+ const actor2 = client.rawHttpActor.getOrCreate(["binary-test"]);
2419
+ const binaryData = new Uint8Array([1, 2, 3, 4, 5]);
2420
+ const response = await actor2.fetch("api/echo", {
2421
+ method: "POST",
2422
+ headers: {
2423
+ "Content-Type": "application/octet-stream"
2424
+ },
2425
+ body: binaryData
2426
+ });
2427
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2428
+ const responseBuffer = await response.arrayBuffer();
2429
+ const responseArray = new Uint8Array(responseBuffer);
2430
+ _vitest.expect.call(void 0, Array.from(responseArray)).toEqual([1, 2, 3, 4, 5]);
2431
+ });
2432
+ _vitest.test.call(void 0, "should work with Hono router using createVars", async (c) => {
2433
+ const { client } = await setupDriverTest(c, driverTestConfig);
2434
+ const actor2 = client.rawHttpHonoActor.getOrCreate(["hono-test"]);
2435
+ const rootResponse = await actor2.fetch("/");
2436
+ _vitest.expect.call(void 0, rootResponse.ok).toBe(true);
2437
+ const rootData = await rootResponse.json();
2438
+ _vitest.expect.call(void 0, rootData).toEqual({ message: "Welcome to Hono actor!" });
2439
+ const usersResponse = await actor2.fetch("/users");
2440
+ _vitest.expect.call(void 0, usersResponse.ok).toBe(true);
2441
+ const users = await usersResponse.json();
2442
+ _vitest.expect.call(void 0, users).toEqual([
2443
+ { id: 1, name: "Alice" },
2444
+ { id: 2, name: "Bob" }
2445
+ ]);
2446
+ const userResponse = await actor2.fetch("/users/1");
2447
+ _vitest.expect.call(void 0, userResponse.ok).toBe(true);
2448
+ const user = await userResponse.json();
2449
+ _vitest.expect.call(void 0, user).toEqual({ id: 1, name: "Alice" });
2450
+ const newUser = { name: "Charlie" };
2451
+ const createResponse = await actor2.fetch("/users", {
2452
+ method: "POST",
2453
+ headers: { "Content-Type": "application/json" },
2454
+ body: JSON.stringify(newUser)
2455
+ });
2456
+ _vitest.expect.call(void 0, createResponse.ok).toBe(true);
2457
+ _vitest.expect.call(void 0, createResponse.status).toBe(201);
2458
+ const createdUser = await createResponse.json();
2459
+ _vitest.expect.call(void 0, createdUser).toEqual({ id: 3, name: "Charlie" });
2460
+ const updateData = { name: "Alice Updated" };
2461
+ const updateResponse = await actor2.fetch("/users/1", {
2462
+ method: "PUT",
2463
+ headers: { "Content-Type": "application/json" },
2464
+ body: JSON.stringify(updateData)
2465
+ });
2466
+ _vitest.expect.call(void 0, updateResponse.ok).toBe(true);
2467
+ const updatedUser = await updateResponse.json();
2468
+ _vitest.expect.call(void 0, updatedUser).toEqual({ id: 1, name: "Alice Updated" });
2469
+ const deleteResponse = await actor2.fetch("/users/2", {
2470
+ method: "DELETE"
2471
+ });
2472
+ _vitest.expect.call(void 0, deleteResponse.ok).toBe(true);
2473
+ const deleteResult = await deleteResponse.json();
2474
+ _vitest.expect.call(void 0, deleteResult).toEqual({ message: "User 2 deleted" });
2475
+ const notFoundResponse = await actor2.fetch("/api/unknown");
2476
+ _vitest.expect.call(void 0, notFoundResponse.ok).toBe(false);
2477
+ _vitest.expect.call(void 0, notFoundResponse.status).toBe(404);
2478
+ });
2479
+ _vitest.test.call(void 0, "should handle paths with and without leading slashes", async (c) => {
2480
+ const { client } = await setupDriverTest(c, driverTestConfig);
2481
+ const actor2 = client.rawHttpActor.getOrCreate(["path-test"]);
2482
+ const responseWithoutSlash = await actor2.fetch("api/hello");
2483
+ _vitest.expect.call(void 0, responseWithoutSlash.ok).toBe(true);
2484
+ const dataWithoutSlash = await responseWithoutSlash.json();
2485
+ _vitest.expect.call(void 0, dataWithoutSlash).toEqual({ message: "Hello from actor!" });
2486
+ const responseWithSlash = await actor2.fetch("/api/hello");
2487
+ _vitest.expect.call(void 0, responseWithSlash.ok).toBe(true);
2488
+ const dataWithSlash = await responseWithSlash.json();
2489
+ _vitest.expect.call(void 0, dataWithSlash).toEqual({ message: "Hello from actor!" });
2490
+ });
2491
+ _vitest.test.call(void 0, "should not create double slashes in request URLs", async (c) => {
2492
+ const { client } = await setupDriverTest(c, driverTestConfig);
2493
+ const actor2 = client.rawHttpHonoActor.getOrCreate(["url-test"]);
2494
+ const response = await actor2.fetch("/users");
2495
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2496
+ const data = await response.json();
2497
+ _vitest.expect.call(void 0, data).toEqual([
2498
+ { id: 1, name: "Alice" },
2499
+ { id: 2, name: "Bob" }
2500
+ ]);
2501
+ });
2502
+ _vitest.test.call(void 0, "should handle forwarded requests correctly without double slashes", async (c) => {
2503
+ const { client } = await setupDriverTest(c, driverTestConfig);
2504
+ const actor2 = client.rawHttpHonoActor.getOrCreate(["forward-test"]);
2505
+ const truncatedPath = "/users";
2506
+ const url = new URL(truncatedPath, "http://example.com");
2507
+ const newRequest = new Request(url, {
2508
+ method: "GET"
2509
+ });
2510
+ const response = await actor2.fetch(truncatedPath, newRequest);
2511
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2512
+ const users = await response.json();
2513
+ _vitest.expect.call(void 0, users).toEqual([
2514
+ { id: 1, name: "Alice" },
2515
+ { id: 2, name: "Bob" }
2516
+ ]);
2517
+ });
2518
+ _vitest.test.call(void 0, "example fix: should properly forward requests using just Request object", async (c) => {
2519
+ const { client } = await setupDriverTest(c, driverTestConfig);
2520
+ const actor2 = client.rawHttpHonoActor.getOrCreate(["forward-fix"]);
2521
+ const truncatedPath = "/users/1";
2522
+ const url = new URL(truncatedPath, "http://example.com");
2523
+ const newRequest = new Request(url, {
2524
+ method: "GET"
2525
+ });
2526
+ const response = await actor2.fetch(newRequest);
2527
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2528
+ const user = await response.json();
2529
+ _vitest.expect.call(void 0, user).toEqual({ id: 1, name: "Alice" });
2530
+ });
2531
+ _vitest.test.call(void 0, "should support standard fetch API with URL and Request objects", async (c) => {
2532
+ const { client } = await setupDriverTest(c, driverTestConfig);
2533
+ const actor2 = client.rawHttpActor.getOrCreate(["fetch-api-test"]);
2534
+ const url = new URL("/api/echo", "http://example.com");
2535
+ const urlResponse = await actor2.fetch(url, {
2536
+ method: "POST",
2537
+ headers: { "Content-Type": "application/json" },
2538
+ body: JSON.stringify({ from: "URL object" })
2539
+ });
2540
+ _vitest.expect.call(void 0, urlResponse.ok).toBe(true);
2541
+ const urlData = await urlResponse.json();
2542
+ _vitest.expect.call(void 0, urlData).toEqual({ from: "URL object" });
2543
+ const request = new Request("http://example.com/api/echo", {
2544
+ method: "POST",
2545
+ headers: { "Content-Type": "application/json" },
2546
+ body: JSON.stringify({ from: "Request object" })
2547
+ });
2548
+ const requestResponse = await actor2.fetch(request);
2549
+ _vitest.expect.call(void 0, requestResponse.ok).toBe(true);
2550
+ const requestData = await requestResponse.json();
2551
+ _vitest.expect.call(void 0, requestData).toEqual({ from: "Request object" });
2552
+ const request2 = new Request("http://example.com/api/headers", {
2553
+ method: "GET",
2554
+ headers: { "X-Original": "request-header" }
2555
+ });
2556
+ const overrideResponse = await actor2.fetch(request2, {
2557
+ headers: { "X-Override": "init-header" }
2558
+ });
2559
+ _vitest.expect.call(void 0, overrideResponse.ok).toBe(true);
2560
+ const headers = await overrideResponse.json();
2561
+ _vitest.expect.call(void 0, headers["x-override"]).toBe("init-header");
2562
+ _vitest.expect.call(void 0, headers["x-original"]).toBe("request-header");
2563
+ });
2564
+ });
2565
+ }
2566
+
2567
+ // src/driver-test-suite/tests/raw-http-request-properties.ts
2568
+
2569
+ function runRawHttpRequestPropertiesTests(driverTestConfig) {
2570
+ _vitest.describe.call(void 0, "raw http request properties", () => {
2571
+ _vitest.test.call(void 0, "should pass all Request properties correctly to onFetch", async (c) => {
2572
+ const { client } = await setupDriverTest(c, driverTestConfig);
2573
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2574
+ const response = await actor2.fetch("test/path?foo=bar&baz=qux", {
2575
+ method: "POST",
2576
+ headers: {
2577
+ "Content-Type": "application/json",
2578
+ "X-Custom-Header": "custom-value",
2579
+ Authorization: "Bearer test-token"
2580
+ },
2581
+ body: JSON.stringify({ test: "data" })
2582
+ });
2583
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2584
+ const data = await response.json();
2585
+ _vitest.expect.call(void 0, data.url).toContain("/test/path?foo=bar&baz=qux");
2586
+ _vitest.expect.call(void 0, data.pathname).toBe("/test/path");
2587
+ _vitest.expect.call(void 0, data.search).toBe("?foo=bar&baz=qux");
2588
+ _vitest.expect.call(void 0, data.searchParams).toEqual({
2589
+ foo: "bar",
2590
+ baz: "qux"
2591
+ });
2592
+ _vitest.expect.call(void 0, data.method).toBe("POST");
2593
+ _vitest.expect.call(void 0, data.headers["content-type"]).toBe("application/json");
2594
+ _vitest.expect.call(void 0, data.headers["x-custom-header"]).toBe("custom-value");
2595
+ _vitest.expect.call(void 0, data.headers["authorization"]).toBe("Bearer test-token");
2596
+ _vitest.expect.call(void 0, data.body).toEqual({ test: "data" });
2597
+ });
2598
+ _vitest.test.call(void 0, "should handle GET requests with no body", async (c) => {
2599
+ const { client } = await setupDriverTest(c, driverTestConfig);
2600
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2601
+ const response = await actor2.fetch("test/get", {
2602
+ method: "GET"
2603
+ });
2604
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2605
+ const data = await response.json();
2606
+ _vitest.expect.call(void 0, data.method).toBe("GET");
2607
+ _vitest.expect.call(void 0, data.body).toBeNull();
2608
+ });
2609
+ _vitest.test.call(void 0, "should handle different content types", async (c) => {
2610
+ const { client } = await setupDriverTest(c, driverTestConfig);
2611
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2612
+ const formData = new URLSearchParams();
2613
+ formData.append("field1", "value1");
2614
+ formData.append("field2", "value2");
2615
+ const formResponse = await actor2.fetch("test/form", {
2616
+ method: "POST",
2617
+ headers: {
2618
+ "Content-Type": "application/x-www-form-urlencoded"
2619
+ },
2620
+ body: formData.toString()
2621
+ });
2622
+ _vitest.expect.call(void 0, formResponse.ok).toBe(true);
2623
+ const formResult = await formResponse.json();
2624
+ _vitest.expect.call(void 0, formResult.headers["content-type"]).toBe(
2625
+ "application/x-www-form-urlencoded"
2626
+ );
2627
+ _vitest.expect.call(void 0, formResult.bodyText).toBe("field1=value1&field2=value2");
2628
+ const textResponse = await actor2.fetch("test/text", {
2629
+ method: "POST",
2630
+ headers: {
2631
+ "Content-Type": "text/plain"
2632
+ },
2633
+ body: "Hello, World!"
2634
+ });
2635
+ _vitest.expect.call(void 0, textResponse.ok).toBe(true);
2636
+ const textResult = await textResponse.json();
2637
+ _vitest.expect.call(void 0, textResult.headers["content-type"]).toBe("text/plain");
2638
+ _vitest.expect.call(void 0, textResult.bodyText).toBe("Hello, World!");
2639
+ });
2640
+ _vitest.test.call(void 0, "should preserve all header casing and values", async (c) => {
2641
+ const { client } = await setupDriverTest(c, driverTestConfig);
2642
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2643
+ const response = await actor2.fetch("test/headers", {
2644
+ headers: {
2645
+ Accept: "application/json",
2646
+ "Accept-Language": "en-US,en;q=0.9",
2647
+ "Cache-Control": "no-cache",
2648
+ "User-Agent": "RivetKit-Test/1.0",
2649
+ "X-Request-ID": "12345"
2650
+ }
2651
+ });
2652
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2653
+ const data = await response.json();
2654
+ _vitest.expect.call(void 0, data.headers["accept"]).toBe("application/json");
2655
+ _vitest.expect.call(void 0, data.headers["accept-language"]).toBe("en-US,en;q=0.9");
2656
+ _vitest.expect.call(void 0, data.headers["cache-control"]).toBe("no-cache");
2657
+ _vitest.expect.call(void 0, data.headers["user-agent"]).toBeTruthy();
2658
+ _vitest.expect.call(void 0, data.headers["x-request-id"]).toBe("12345");
2659
+ });
2660
+ _vitest.test.call(void 0, "should handle empty and special URL paths", async (c) => {
2661
+ const { client } = await setupDriverTest(c, driverTestConfig);
2662
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2663
+ const rootResponse = await actor2.fetch("");
2664
+ _vitest.expect.call(void 0, rootResponse.ok).toBe(true);
2665
+ const rootData = await rootResponse.json();
2666
+ _vitest.expect.call(void 0, rootData.pathname).toBe("/");
2667
+ const specialResponse = await actor2.fetch(
2668
+ "test/path%20with%20spaces/and%2Fslashes"
2669
+ );
2670
+ _vitest.expect.call(void 0, specialResponse.ok).toBe(true);
2671
+ const specialData = await specialResponse.json();
2672
+ _vitest.expect.call(void 0, specialData.pathname).toMatch(/path.*with.*spaces.*and.*slashes/);
2673
+ const fragmentResponse = await actor2.fetch("test/path#fragment");
2674
+ _vitest.expect.call(void 0, fragmentResponse.ok).toBe(true);
2675
+ const fragmentData = await fragmentResponse.json();
2676
+ _vitest.expect.call(void 0, fragmentData.pathname).toBe("/test/path");
2677
+ _vitest.expect.call(void 0, fragmentData.hash).toBe("");
2678
+ });
2679
+ _vitest.test.call(void 0, "should handle request properties for all HTTP methods", async (c) => {
2680
+ const { client } = await setupDriverTest(c, driverTestConfig);
2681
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2682
+ const methods = [
2683
+ "GET",
2684
+ "POST",
2685
+ "PUT",
2686
+ "DELETE",
2687
+ "PATCH",
2688
+ "HEAD",
2689
+ "OPTIONS"
2690
+ ];
2691
+ for (const method of methods) {
2692
+ const response = await actor2.fetch(`test/${method.toLowerCase()}`, {
2693
+ method,
2694
+ // Only include body for methods that support it
2695
+ body: ["POST", "PUT", "PATCH"].includes(method) ? JSON.stringify({ method }) : void 0
2696
+ });
2697
+ if (method === "HEAD") {
2698
+ _vitest.expect.call(void 0, response.status).toBe(200);
2699
+ const text = await response.text();
2700
+ _vitest.expect.call(void 0, text).toBe("");
2701
+ } else if (method === "OPTIONS") {
2702
+ _vitest.expect.call(void 0, response.status).toBe(204);
2703
+ const text = await response.text();
2704
+ _vitest.expect.call(void 0, text).toBe("");
2705
+ } else {
2706
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2707
+ const data = await response.json();
2708
+ _vitest.expect.call(void 0, data.method).toBe(method);
2709
+ }
2710
+ }
2711
+ });
2712
+ _vitest.test.call(void 0, "should handle complex query parameters", async (c) => {
2713
+ const { client } = await setupDriverTest(c, driverTestConfig);
2714
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2715
+ const response = await actor2.fetch(
2716
+ "test?key=value1&key=value2&array[]=1&array[]=2&nested[prop]=val"
2717
+ );
2718
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2719
+ const data = await response.json();
2720
+ _vitest.expect.call(void 0, data.searchParams.key).toBe("value2");
2721
+ _vitest.expect.call(void 0, data.searchParams["array[]"]).toBe("2");
2722
+ _vitest.expect.call(void 0, data.searchParams["nested[prop]"]).toBe("val");
2723
+ });
2724
+ _vitest.test.call(void 0, "should handle multipart form data", async (c) => {
2725
+ const { client } = await setupDriverTest(c, driverTestConfig);
2726
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2727
+ const boundary = "----RivetKitBoundary";
2728
+ const body = [
2729
+ `------${boundary}`,
2730
+ 'Content-Disposition: form-data; name="field1"',
2731
+ "",
2732
+ "value1",
2733
+ `------${boundary}`,
2734
+ 'Content-Disposition: form-data; name="field2"',
2735
+ "",
2736
+ "value2",
2737
+ `------${boundary}--`
2738
+ ].join("\r\n");
2739
+ const response = await actor2.fetch("test/multipart", {
2740
+ method: "POST",
2741
+ headers: {
2742
+ "Content-Type": `multipart/form-data; boundary=----${boundary}`
2743
+ },
2744
+ body
2745
+ });
2746
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2747
+ const data = await response.json();
2748
+ _vitest.expect.call(void 0, data.headers["content-type"]).toContain("multipart/form-data");
2749
+ _vitest.expect.call(void 0, data.bodyText).toContain("field1");
2750
+ _vitest.expect.call(void 0, data.bodyText).toContain("value1");
2751
+ });
2752
+ _vitest.test.call(void 0, "should handle very long URLs", async (c) => {
2753
+ const { client } = await setupDriverTest(c, driverTestConfig);
2754
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2755
+ const longValue = "x".repeat(1e3);
2756
+ const response = await actor2.fetch(`test/long?param=${longValue}`);
2757
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2758
+ const data = await response.json();
2759
+ _vitest.expect.call(void 0, data.searchParams.param).toBe(longValue);
2760
+ _vitest.expect.call(void 0, data.search.length).toBeGreaterThan(1e3);
2761
+ });
2762
+ _vitest.test.call(void 0, "should handle large request bodies", async (c) => {
2763
+ const { client } = await setupDriverTest(c, driverTestConfig);
2764
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2765
+ const largeArray = new Array(1e4).fill({
2766
+ id: 1,
2767
+ name: "Test",
2768
+ description: "This is a test object with some data"
2769
+ });
2770
+ const response = await actor2.fetch("test/large", {
2771
+ method: "POST",
2772
+ headers: {
2773
+ "Content-Type": "application/json"
2774
+ },
2775
+ body: JSON.stringify(largeArray)
2776
+ });
2777
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2778
+ const data = await response.json();
2779
+ _vitest.expect.call(void 0, data.body).toHaveLength(1e4);
2780
+ });
2781
+ _vitest.test.call(void 0, "should handle missing content-type header", async (c) => {
2782
+ const { client } = await setupDriverTest(c, driverTestConfig);
2783
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2784
+ const response = await actor2.fetch("test/no-content-type", {
2785
+ method: "POST",
2786
+ body: "plain text without content-type"
2787
+ });
2788
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2789
+ const data = await response.json();
2790
+ _vitest.expect.call(void 0, data.bodyText).toBe("plain text without content-type");
2791
+ });
2792
+ _vitest.test.call(void 0, "should handle empty request body", async (c) => {
2793
+ const { client } = await setupDriverTest(c, driverTestConfig);
2794
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2795
+ const response = await actor2.fetch("test/empty", {
2796
+ method: "POST",
2797
+ headers: {
2798
+ "Content-Type": "application/json"
2799
+ },
2800
+ body: ""
2801
+ });
2802
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2803
+ const data = await response.json();
2804
+ _vitest.expect.call(void 0, data.body).toBeNull();
2805
+ _vitest.expect.call(void 0, data.bodyText).toBe("");
2806
+ });
2807
+ _vitest.test.call(void 0, "should handle custom HTTP methods", async (c) => {
2808
+ const { client } = await setupDriverTest(c, driverTestConfig);
2809
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2810
+ try {
2811
+ const response = await actor2.fetch("test/custom", {
2812
+ method: "CUSTOM"
2813
+ });
2814
+ if (response.ok) {
2815
+ const data = await response.json();
2816
+ _vitest.expect.call(void 0, data.method).toBe("CUSTOM");
2817
+ }
2818
+ } catch (error) {
2819
+ }
2820
+ });
2821
+ _vitest.test.call(void 0, "should handle cookies in headers", async (c) => {
2822
+ const { client } = await setupDriverTest(c, driverTestConfig);
2823
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2824
+ const response = await actor2.fetch("test/cookies", {
2825
+ headers: {
2826
+ Cookie: "session=abc123; user=test; preferences=dark_mode"
2827
+ }
2828
+ });
2829
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2830
+ const data = await response.json();
2831
+ _vitest.expect.call(void 0, data.headers.cookie).toBe(
2832
+ "session=abc123; user=test; preferences=dark_mode"
2833
+ );
2834
+ });
2835
+ _vitest.test.call(void 0, "should handle URL encoding properly", async (c) => {
2836
+ const { client } = await setupDriverTest(c, driverTestConfig);
2837
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2838
+ const response = await actor2.fetch(
2839
+ "test/encoded?special=%20%21%40%23%24%25%5E%26&unicode=%E2%9C%93&email=test%40example.com"
2840
+ );
2841
+ _vitest.expect.call(void 0, response.ok).toBe(true);
2842
+ const data = await response.json();
2843
+ _vitest.expect.call(void 0, data.searchParams.special).toBe(" !@#$%^&");
2844
+ _vitest.expect.call(void 0, data.searchParams.unicode).toBe("\u2713");
2845
+ _vitest.expect.call(void 0, data.searchParams.email).toBe("test@example.com");
2846
+ });
2847
+ _vitest.test.call(void 0, "should handle concurrent requests maintaining separate contexts", async (c) => {
2848
+ const { client } = await setupDriverTest(c, driverTestConfig);
2849
+ const actor2 = client.rawHttpRequestPropertiesActor.getOrCreate(["test"]);
2850
+ const requests = [
2851
+ actor2.fetch("test/concurrent?id=1", {
2852
+ method: "POST",
2853
+ headers: { "Content-Type": "application/json" },
2854
+ body: JSON.stringify({ request: 1 })
2855
+ }),
2856
+ actor2.fetch("test/concurrent?id=2", {
2857
+ method: "PUT",
2858
+ headers: { "Content-Type": "application/json" },
2859
+ body: JSON.stringify({ request: 2 })
2860
+ }),
2861
+ actor2.fetch("test/concurrent?id=3", {
2862
+ method: "DELETE"
2863
+ })
2864
+ ];
2865
+ const responses = await Promise.all(requests);
2866
+ const results = await Promise.all(
2867
+ responses.map((r) => r.json())
2868
+ );
2869
+ _vitest.expect.call(void 0, results[0].searchParams.id).toBe("1");
2870
+ _vitest.expect.call(void 0, results[0].method).toBe("POST");
2871
+ _vitest.expect.call(void 0, results[0].body).toEqual({ request: 1 });
2872
+ _vitest.expect.call(void 0, results[1].searchParams.id).toBe("2");
2873
+ _vitest.expect.call(void 0, results[1].method).toBe("PUT");
2874
+ _vitest.expect.call(void 0, results[1].body).toEqual({ request: 2 });
2875
+ _vitest.expect.call(void 0, results[2].searchParams.id).toBe("3");
2876
+ _vitest.expect.call(void 0, results[2].method).toBe("DELETE");
2877
+ _vitest.expect.call(void 0, results[2].body).toBeNull();
2878
+ });
2879
+ });
2880
+ }
2881
+
2882
+ // src/driver-test-suite/tests/raw-websocket.ts
2883
+
2884
+ function runRawWebSocketTests(driverTestConfig) {
2885
+ _vitest.describe.call(void 0, "raw websocket", () => {
2886
+ _vitest.test.call(void 0, "should establish raw WebSocket connection", async (c) => {
2887
+ const { client } = await setupDriverTest(c, driverTestConfig);
2888
+ const actor2 = client.rawWebSocketActor.getOrCreate(["basic"]);
2889
+ const ws = await actor2.websocket();
2890
+ await new Promise((resolve2) => {
2891
+ if (ws.readyState === WebSocket.OPEN) {
2892
+ resolve2();
2893
+ } else {
2894
+ ws.addEventListener(
2895
+ "open",
2896
+ () => {
2897
+ resolve2();
2898
+ },
2899
+ { once: true }
2900
+ );
2901
+ }
2902
+ });
2903
+ const welcomeMessage = await new Promise((resolve2, reject) => {
2904
+ ws.addEventListener(
2905
+ "message",
2906
+ (event) => {
2907
+ resolve2(JSON.parse(event.data));
2908
+ },
2909
+ { once: true }
2910
+ );
2911
+ ws.addEventListener("close", reject);
2912
+ });
2913
+ _vitest.expect.call(void 0, welcomeMessage.type).toBe("welcome");
2914
+ _vitest.expect.call(void 0, welcomeMessage.connectionCount).toBe(1);
2915
+ ws.close();
2916
+ });
2917
+ _vitest.test.call(void 0, "should echo messages", async (c) => {
2918
+ const { client } = await setupDriverTest(c, driverTestConfig);
2919
+ const actor2 = client.rawWebSocketActor.getOrCreate(["echo"]);
2920
+ const ws = await actor2.websocket();
2921
+ if (ws.readyState !== WebSocket.OPEN) {
2922
+ await new Promise((resolve2, reject) => {
2923
+ ws.addEventListener("open", () => resolve2(), { once: true });
2924
+ ws.addEventListener("close", reject);
2925
+ });
2926
+ }
2927
+ await new Promise((resolve2, reject) => {
2928
+ ws.addEventListener("message", () => resolve2(), { once: true });
2929
+ ws.addEventListener("close", reject);
2930
+ });
2931
+ const testMessage = { test: "data", timestamp: Date.now() };
2932
+ ws.send(JSON.stringify(testMessage));
2933
+ const echoMessage = await new Promise((resolve2, reject) => {
2934
+ ws.addEventListener(
2935
+ "message",
2936
+ (event) => {
2937
+ resolve2(JSON.parse(event.data));
2938
+ },
2939
+ { once: true }
2940
+ );
2941
+ ws.addEventListener("close", reject);
2942
+ });
2943
+ _vitest.expect.call(void 0, echoMessage).toEqual(testMessage);
2944
+ ws.close();
2945
+ });
2946
+ _vitest.test.call(void 0, "should handle ping/pong protocol", async (c) => {
2947
+ const { client } = await setupDriverTest(c, driverTestConfig);
2948
+ const actor2 = client.rawWebSocketActor.getOrCreate(["ping"]);
2949
+ const ws = await actor2.websocket();
2950
+ if (ws.readyState !== WebSocket.OPEN) {
2951
+ await new Promise((resolve2, reject) => {
2952
+ ws.addEventListener("open", () => resolve2(), { once: true });
2953
+ ws.addEventListener("close", reject);
2954
+ });
2955
+ }
2956
+ await new Promise((resolve2, reject) => {
2957
+ ws.addEventListener("message", () => resolve2(), { once: true });
2958
+ ws.addEventListener("close", reject);
2959
+ });
2960
+ ws.send(JSON.stringify({ type: "ping" }));
2961
+ const pongMessage = await new Promise((resolve2, reject) => {
2962
+ ws.addEventListener("message", (event) => {
2963
+ const data = JSON.parse(event.data);
2964
+ if (data.type === "pong") {
2965
+ resolve2(data);
2966
+ }
2967
+ });
2968
+ ws.addEventListener("close", reject);
2969
+ });
2970
+ _vitest.expect.call(void 0, pongMessage.type).toBe("pong");
2971
+ _vitest.expect.call(void 0, pongMessage.timestamp).toBeDefined();
2972
+ ws.close();
2973
+ });
2974
+ _vitest.test.call(void 0, "should track stats across connections", async (c) => {
2975
+ const { client } = await setupDriverTest(c, driverTestConfig);
2976
+ const actor1 = client.rawWebSocketActor.getOrCreate(["stats"]);
2977
+ const ws1 = await actor1.websocket();
2978
+ const ws1MessagePromise = new Promise((resolve2, reject) => {
2979
+ ws1.addEventListener("message", () => resolve2(), { once: true });
2980
+ ws1.addEventListener("close", reject);
2981
+ });
2982
+ await ws1MessagePromise;
2983
+ const actor2 = client.rawWebSocketActor.get(["stats"]);
2984
+ const ws2 = await actor2.websocket();
2985
+ const ws2MessagePromise = new Promise((resolve2, reject) => {
2986
+ ws2.addEventListener("message", () => resolve2(), { once: true });
2987
+ ws2.addEventListener("close", reject);
2988
+ });
2989
+ await Promise.all([ws1MessagePromise, ws2MessagePromise]);
2990
+ const pingPromise = new Promise((resolve2, reject) => {
2991
+ ws2.addEventListener("message", (event) => {
2992
+ const data = JSON.parse(event.data);
2993
+ if (data.type === "pong") {
2994
+ resolve2(void 0);
2995
+ }
2996
+ });
2997
+ ws2.addEventListener("close", reject);
2998
+ });
2999
+ ws1.send(JSON.stringify({ data: "test1" }));
3000
+ ws1.send(JSON.stringify({ data: "test3" }));
3001
+ ws2.send(JSON.stringify({ type: "ping" }));
3002
+ await pingPromise;
3003
+ const statsPromise = new Promise((resolve2, reject) => {
3004
+ ws1.addEventListener("message", (event) => {
3005
+ const data = JSON.parse(event.data);
3006
+ if (data.type === "stats") {
3007
+ resolve2(data);
3008
+ }
3009
+ });
3010
+ ws1.addEventListener("close", reject);
3011
+ });
3012
+ ws1.send(JSON.stringify({ type: "getStats" }));
3013
+ const stats = await statsPromise;
3014
+ _vitest.expect.call(void 0, stats.connectionCount).toBe(2);
3015
+ _vitest.expect.call(void 0, stats.messageCount).toBe(4);
3016
+ const actionStats = await actor1.getStats();
3017
+ _vitest.expect.call(void 0, actionStats.connectionCount).toBe(2);
3018
+ _vitest.expect.call(void 0, actionStats.messageCount).toBe(4);
3019
+ ws1.close();
3020
+ ws2.close();
3021
+ });
3022
+ _vitest.test.call(void 0, "should handle binary data", async (c) => {
3023
+ const { client } = await setupDriverTest(c, driverTestConfig);
3024
+ const actor2 = client.rawWebSocketBinaryActor.getOrCreate(["binary"]);
3025
+ const ws = await actor2.websocket();
3026
+ if (ws.readyState !== WebSocket.OPEN) {
3027
+ await new Promise((resolve2, reject) => {
3028
+ ws.addEventListener("open", () => resolve2(), { once: true });
3029
+ ws.addEventListener("close", reject);
3030
+ });
3031
+ }
3032
+ const receiveBinaryMessage = async () => {
3033
+ const response = await new Promise(
3034
+ (resolve2, reject) => {
3035
+ ws.addEventListener(
3036
+ "message",
3037
+ (event) => {
3038
+ resolve2(event.data);
3039
+ },
3040
+ { once: true }
3041
+ );
3042
+ ws.addEventListener("close", reject);
3043
+ }
3044
+ );
3045
+ const buffer = response instanceof Blob ? await response.arrayBuffer() : response;
3046
+ return new Uint8Array(buffer);
3047
+ };
3048
+ const smallData = new Uint8Array([1, 2, 3, 4, 5]);
3049
+ ws.send(smallData);
3050
+ const smallReversed = await receiveBinaryMessage();
3051
+ _vitest.expect.call(void 0, Array.from(smallReversed)).toEqual([5, 4, 3, 2, 1]);
3052
+ const largeData = new Uint8Array(1024);
3053
+ for (let i = 0; i < largeData.length; i++) {
3054
+ largeData[i] = i % 256;
3055
+ }
3056
+ ws.send(largeData);
3057
+ const largeReversed = await receiveBinaryMessage();
3058
+ for (let i = 0; i < largeData.length; i++) {
3059
+ _vitest.expect.call(void 0, largeReversed[i]).toBe(largeData[largeData.length - 1 - i]);
3060
+ }
3061
+ ws.close();
3062
+ });
3063
+ _vitest.test.call(void 0, "should work with custom paths", async (c) => {
3064
+ const { client } = await setupDriverTest(c, driverTestConfig);
3065
+ const actor2 = client.rawWebSocketActor.getOrCreate(["paths"]);
3066
+ const ws = await actor2.websocket("custom/path");
3067
+ await new Promise((resolve2, reject) => {
3068
+ ws.addEventListener("open", () => {
3069
+ resolve2();
3070
+ });
3071
+ ws.addEventListener("error", reject);
3072
+ ws.addEventListener("close", reject);
3073
+ });
3074
+ const welcomeMessage = await new Promise((resolve2) => {
3075
+ ws.addEventListener(
3076
+ "message",
3077
+ (event) => {
3078
+ resolve2(JSON.parse(event.data));
3079
+ },
3080
+ { once: true }
3081
+ );
3082
+ });
3083
+ _vitest.expect.call(void 0, welcomeMessage.type).toBe("welcome");
3084
+ ws.close();
3085
+ });
3086
+ _vitest.test.call(void 0, "should pass connection parameters through subprotocols", async (c) => {
3087
+ const { client } = await setupDriverTest(c, driverTestConfig);
3088
+ const testParams = { userId: "test123", role: "admin" };
3089
+ const actor2 = client.rawWebSocketActor.getOrCreate(["params"], {
3090
+ params: testParams
3091
+ });
3092
+ const ws = await actor2.websocket();
3093
+ await new Promise((resolve2) => {
3094
+ ws.addEventListener("open", () => resolve2(), { once: true });
3095
+ });
3096
+ ws.send(JSON.stringify({ type: "getAuthData" }));
3097
+ const response = await new Promise((resolve2, reject) => {
3098
+ ws.addEventListener("message", (event) => {
3099
+ const data = JSON.parse(event.data);
3100
+ if (data.type === "authData") {
3101
+ resolve2(data);
3102
+ }
3103
+ });
3104
+ ws.addEventListener("close", reject);
3105
+ });
3106
+ _vitest.expect.call(void 0, response).toBeDefined();
3107
+ ws.close();
3108
+ });
3109
+ _vitest.test.call(void 0, "should handle connection close properly", async (c) => {
3110
+ const { client } = await setupDriverTest(c, driverTestConfig);
3111
+ const actor2 = client.rawWebSocketActor.getOrCreate(["close-test"]);
3112
+ const ws = await actor2.websocket();
3113
+ if (ws.readyState !== WebSocket.OPEN) {
3114
+ await new Promise((resolve2, reject) => {
3115
+ ws.addEventListener("open", () => resolve2(), { once: true });
3116
+ ws.addEventListener("close", reject);
3117
+ });
3118
+ }
3119
+ const initialStats = await actor2.getStats();
3120
+ _vitest.expect.call(void 0, initialStats.connectionCount).toBe(1);
3121
+ const closePromise = new Promise((resolve2) => {
3122
+ ws.addEventListener("close", () => resolve2(), { once: true });
3123
+ });
3124
+ ws.close();
3125
+ await closePromise;
3126
+ let finalStats;
3127
+ for (let i = 0; i < 20; i++) {
3128
+ finalStats = await actor2.getStats();
3129
+ if (finalStats.connectionCount === 0) {
3130
+ break;
3131
+ }
3132
+ await new Promise((resolve2) => setTimeout(resolve2, 50));
3133
+ }
3134
+ _vitest.expect.call(void 0, finalStats == null ? void 0 : finalStats.connectionCount).toBe(0);
3135
+ });
3136
+ _vitest.test.call(void 0, "should properly handle onWebSocket open and close events", async (c) => {
3137
+ const { client } = await setupDriverTest(c, driverTestConfig);
3138
+ const actor2 = client.rawWebSocketActor.getOrCreate(["open-close-test"]);
3139
+ const ws1 = await actor2.websocket();
3140
+ await new Promise((resolve2, reject) => {
3141
+ ws1.addEventListener("open", () => resolve2(), { once: true });
3142
+ ws1.addEventListener("close", reject);
3143
+ });
3144
+ const welcome1 = await new Promise((resolve2, reject) => {
3145
+ ws1.addEventListener(
3146
+ "message",
3147
+ (event) => {
3148
+ resolve2(JSON.parse(event.data));
3149
+ },
3150
+ { once: true }
3151
+ );
3152
+ ws1.addEventListener("close", reject);
3153
+ });
3154
+ _vitest.expect.call(void 0, welcome1.type).toBe("welcome");
3155
+ _vitest.expect.call(void 0, welcome1.connectionCount).toBe(1);
3156
+ const ws2 = await actor2.websocket();
3157
+ await new Promise((resolve2, reject) => {
3158
+ ws2.addEventListener("open", () => resolve2(), { once: true });
3159
+ ws2.addEventListener("close", reject);
3160
+ });
3161
+ const welcome2 = await new Promise((resolve2, reject) => {
3162
+ ws2.addEventListener(
3163
+ "message",
3164
+ (event) => {
3165
+ resolve2(JSON.parse(event.data));
3166
+ },
3167
+ { once: true }
3168
+ );
3169
+ ws2.addEventListener("close", reject);
3170
+ });
3171
+ _vitest.expect.call(void 0, welcome2.type).toBe("welcome");
3172
+ _vitest.expect.call(void 0, welcome2.connectionCount).toBe(2);
3173
+ const midStats = await actor2.getStats();
3174
+ _vitest.expect.call(void 0, midStats.connectionCount).toBe(2);
3175
+ ws1.close();
3176
+ await new Promise((resolve2) => {
3177
+ ws1.addEventListener("close", () => resolve2(), { once: true });
3178
+ });
3179
+ let afterFirstClose;
3180
+ for (let i = 0; i < 20; i++) {
3181
+ afterFirstClose = await actor2.getStats();
3182
+ if (afterFirstClose.connectionCount === 1) {
3183
+ break;
3184
+ }
3185
+ await new Promise((resolve2) => setTimeout(resolve2, 50));
3186
+ }
3187
+ _vitest.expect.call(void 0, afterFirstClose == null ? void 0 : afterFirstClose.connectionCount).toBe(1);
3188
+ ws2.close();
3189
+ await new Promise((resolve2) => {
3190
+ ws2.addEventListener("close", () => resolve2(), { once: true });
3191
+ });
3192
+ let finalStats;
3193
+ for (let i = 0; i < 20; i++) {
3194
+ finalStats = await actor2.getStats();
3195
+ if (finalStats.connectionCount === 0) {
3196
+ break;
3197
+ }
3198
+ await new Promise((resolve2) => setTimeout(resolve2, 50));
3199
+ }
3200
+ _vitest.expect.call(void 0, finalStats == null ? void 0 : finalStats.connectionCount).toBe(0);
3201
+ });
3202
+ _vitest.test.call(void 0, "should handle query parameters in websocket paths", async (c) => {
3203
+ const { client } = await setupDriverTest(c, driverTestConfig);
3204
+ const actor2 = client.rawWebSocketActor.getOrCreate(["query-params"]);
3205
+ const ws = await actor2.websocket("api/v1/stream?token=abc123&user=test");
3206
+ await new Promise((resolve2, reject) => {
3207
+ ws.addEventListener("open", () => resolve2(), { once: true });
3208
+ ws.addEventListener("error", reject);
3209
+ });
3210
+ const requestInfoPromise = new Promise((resolve2, reject) => {
3211
+ ws.addEventListener("message", (event) => {
3212
+ const data = JSON.parse(event.data);
3213
+ if (data.type === "requestInfo") {
3214
+ resolve2(data);
3215
+ }
3216
+ });
3217
+ ws.addEventListener("close", reject);
3218
+ });
3219
+ ws.send(JSON.stringify({ type: "getRequestInfo" }));
3220
+ const requestInfo = await requestInfoPromise;
3221
+ _vitest.expect.call(void 0, requestInfo.url).toContain("api/v1/stream");
3222
+ _vitest.expect.call(void 0, requestInfo.url).toContain("token=abc123");
3223
+ _vitest.expect.call(void 0, requestInfo.url).toContain("user=test");
3224
+ ws.close();
3225
+ });
3226
+ });
3227
+ }
3228
+
3229
+ // src/driver-test-suite/tests/request-access.ts
3230
+
3231
+ function runRequestAccessTests(driverTestConfig) {
3232
+ _vitest.describe.call(void 0, "Request Access in Lifecycle Hooks", () => {
3233
+ _vitest.test.call(void 0, "should have access to request object in onBeforeConnect and createConnState", async (c) => {
3234
+ const { client } = await setupDriverTest(c, driverTestConfig);
3235
+ const handle = client.requestAccessActor.getOrCreate(["test-request"], {
3236
+ params: { trackRequest: true }
3237
+ });
3238
+ const connection = handle.connect();
3239
+ const requestInfo = await connection.getRequestInfo();
3240
+ if (driverTestConfig.clientType === "http") {
3241
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.hasRequest).toBe(true);
3242
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestUrl).toBeDefined();
3243
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestMethod).toBeDefined();
3244
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestHeaders).toBeDefined();
3245
+ _vitest.expect.call(void 0, requestInfo.createConnState.hasRequest).toBe(true);
3246
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestUrl).toBeDefined();
3247
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestMethod).toBeDefined();
3248
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestHeaders).toBeDefined();
3249
+ } else {
3250
+ }
3251
+ await connection.dispose();
3252
+ });
3253
+ _vitest.test.call(void 0, "should not have request when trackRequest is false", async (c) => {
3254
+ const { client } = await setupDriverTest(c, driverTestConfig);
3255
+ const handle = client.requestAccessActor.getOrCreate(
3256
+ ["test-no-request"],
3257
+ {
3258
+ params: { trackRequest: false }
3259
+ }
3260
+ );
3261
+ const connection = handle.connect();
3262
+ const requestInfo = await connection.getRequestInfo();
3263
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.hasRequest).toBe(false);
3264
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestUrl).toBeNull();
3265
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestMethod).toBeNull();
3266
+ _vitest.expect.call(void 0,
3267
+ Object.keys(requestInfo.onBeforeConnect.requestHeaders)
3268
+ ).toHaveLength(0);
3269
+ _vitest.expect.call(void 0, requestInfo.createConnState.hasRequest).toBe(false);
3270
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestUrl).toBeNull();
3271
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestMethod).toBeNull();
3272
+ _vitest.expect.call(void 0,
3273
+ Object.keys(requestInfo.createConnState.requestHeaders)
3274
+ ).toHaveLength(0);
3275
+ await connection.dispose();
3276
+ });
3277
+ _vitest.test.call(void 0, "should capture request headers and method", async (c) => {
3278
+ const { client } = await setupDriverTest(c, driverTestConfig);
3279
+ const handle = client.requestAccessActor.getOrCreate(["test-headers"], {
3280
+ params: { trackRequest: true }
3281
+ });
3282
+ const connection = handle.connect();
3283
+ const requestInfo = await connection.getRequestInfo();
3284
+ if (driverTestConfig.clientType === "http") {
3285
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.hasRequest).toBe(true);
3286
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestMethod).toBeTruthy();
3287
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestUrl).toBeTruthy();
3288
+ _vitest.expect.call(void 0, requestInfo.onBeforeConnect.requestHeaders).toBeTruthy();
3289
+ _vitest.expect.call(void 0, typeof requestInfo.onBeforeConnect.requestHeaders).toBe(
3290
+ "object"
3291
+ );
3292
+ _vitest.expect.call(void 0, requestInfo.createConnState.hasRequest).toBe(true);
3293
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestMethod).toBeTruthy();
3294
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestUrl).toBeTruthy();
3295
+ _vitest.expect.call(void 0, requestInfo.createConnState.requestHeaders).toBeTruthy();
3296
+ _vitest.expect.call(void 0, typeof requestInfo.createConnState.requestHeaders).toBe(
3297
+ "object"
3298
+ );
3299
+ } else {
3300
+ }
3301
+ await connection.dispose();
3302
+ });
3303
+ });
3304
+ }
3305
+
3306
+ // src/driver-test-suite/mod.ts
3307
+ function runDriverTests(driverTestConfigPartial) {
3308
+ for (const clientType of ["http", "inline"]) {
3309
+ const driverTestConfig = {
3310
+ ...driverTestConfigPartial,
3311
+ clientType
3312
+ };
3313
+ _vitest.describe.call(void 0, `client type (${clientType})`, () => {
3314
+ runActorDriverTests(driverTestConfig);
3315
+ runManagerDriverTests(driverTestConfig);
3316
+ for (const transport of ["websocket", "sse"]) {
3317
+ _vitest.describe.call(void 0, `transport (${transport})`, () => {
3318
+ runActorConnTests({
3319
+ ...driverTestConfig,
3320
+ transport
3321
+ });
3322
+ runActorConnStateTests({ ...driverTestConfig, transport });
3323
+ runRequestAccessTests({ ...driverTestConfig, transport });
3324
+ runActorDriverTestsWithTransport({ ...driverTestConfig, transport });
3325
+ });
3326
+ }
3327
+ runActorHandleTests(driverTestConfig);
3328
+ runActionFeaturesTests(driverTestConfig);
3329
+ runActorVarsTests(driverTestConfig);
3330
+ runActorMetadataTests(driverTestConfig);
3331
+ runActorOnStateChangeTests(driverTestConfig);
3332
+ runActorErrorHandlingTests(driverTestConfig);
3333
+ runActorInlineClientTests(driverTestConfig);
3334
+ runRawHttpTests(driverTestConfig);
3335
+ runRawHttpRequestPropertiesTests(driverTestConfig);
3336
+ runRawWebSocketTests(driverTestConfig);
3337
+ runActorInspectorTests(driverTestConfig);
3338
+ });
3339
+ }
3340
+ }
3341
+ async function createTestRuntime(registryPath, driverFactory) {
3342
+ const {
3343
+ mod: { registry }
3344
+ } = await _bundlerequire.bundleRequire.call(void 0, {
3345
+ filepath: registryPath
3346
+ });
3347
+ registry.config.test.enabled = true;
3348
+ const {
3349
+ driver,
3350
+ cleanup: driverCleanup,
3351
+ rivetEngine
3352
+ } = await driverFactory(registry);
3353
+ if (rivetEngine) {
3354
+ const cleanup = async () => {
3355
+ await (driverCleanup == null ? void 0 : driverCleanup());
3356
+ };
3357
+ return {
3358
+ endpoint: rivetEngine.endpoint,
3359
+ namespace: rivetEngine.namespace,
3360
+ runnerName: rivetEngine.runnerName,
3361
+ cleanup
3362
+ };
3363
+ } else {
3364
+ let upgradeWebSocket;
3365
+ const config = _chunkWHBPJNGWcjs.RunConfigSchema.parse({
3366
+ driver,
3367
+ getUpgradeWebSocket: () => upgradeWebSocket,
3368
+ inspector: {
3369
+ enabled: true,
3370
+ token: () => "token"
3371
+ }
3372
+ });
3373
+ const managerDriver = driver.manager(registry.config, config);
3374
+ const { router } = _chunkVO7ZRVVDcjs.createManagerRouter.call(void 0,
3375
+ registry.config,
3376
+ config,
3377
+ managerDriver,
3378
+ false
3379
+ );
3380
+ const nodeWebSocket = _nodews.createNodeWebSocket.call(void 0, { app: router });
3381
+ upgradeWebSocket = nodeWebSocket.upgradeWebSocket;
3382
+ const port = await _chunkIH6CKNDWcjs.getPort.call(void 0, );
3383
+ const server = _nodeserver.serve.call(void 0, {
3384
+ fetch: router.fetch,
3385
+ hostname: "127.0.0.1",
3386
+ port
3387
+ });
3388
+ _invariant2.default.call(void 0,
3389
+ nodeWebSocket.injectWebSocket !== void 0,
3390
+ "should have injectWebSocket"
3391
+ );
3392
+ nodeWebSocket.injectWebSocket(server);
3393
+ const serverEndpoint = `http://127.0.0.1:${port}`;
3394
+ logger().info({ msg: "test serer listening", port });
3395
+ const cleanup = async () => {
3396
+ await new Promise((resolve2) => server.close(() => resolve2(void 0)));
3397
+ await (driverCleanup == null ? void 0 : driverCleanup());
3398
+ };
3399
+ return {
3400
+ endpoint: serverEndpoint,
3401
+ namespace: "default",
3402
+ runnerName: "rivetkit",
3403
+ cleanup
3404
+ };
3405
+ }
3406
+ }
3407
+
3408
+
3409
+
3410
+ exports.createTestRuntime = createTestRuntime; exports.runDriverTests = runDriverTests;
3411
+ //# sourceMappingURL=mod.cjs.map