rivetkit 2.0.41 → 2.0.43-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/tsup/actor/errors.cjs +2 -2
  2. package/dist/tsup/actor/errors.cjs.map +1 -1
  3. package/dist/tsup/actor/errors.js +1 -1
  4. package/dist/tsup/{chunk-LMG4QMDO.js → chunk-2NJQ3DJ5.js} +15 -5
  5. package/dist/tsup/{chunk-LMG4QMDO.js.map → chunk-2NJQ3DJ5.js.map} +1 -1
  6. package/dist/tsup/{chunk-SNAUKDDK.cjs → chunk-2XQS746M.cjs} +4 -4
  7. package/dist/tsup/chunk-2XQS746M.cjs.map +1 -0
  8. package/dist/tsup/{chunk-DSNSFYDL.cjs → chunk-3HKN5HQ7.cjs} +3 -3
  9. package/dist/tsup/chunk-3HKN5HQ7.cjs.map +1 -0
  10. package/dist/tsup/{chunk-B5UXC4QV.cjs → chunk-BEMEUFS2.cjs} +78 -78
  11. package/dist/tsup/chunk-BEMEUFS2.cjs.map +1 -0
  12. package/dist/tsup/chunk-CKBPIXRM.js +278 -0
  13. package/dist/tsup/chunk-CKBPIXRM.js.map +1 -0
  14. package/dist/tsup/{chunk-GTQKDCM4.cjs → chunk-ETNL2HZL.cjs} +49 -49
  15. package/dist/tsup/chunk-ETNL2HZL.cjs.map +1 -0
  16. package/dist/tsup/{chunk-OXN6EZUB.js → chunk-F7ZL4T63.js} +3 -3
  17. package/dist/tsup/chunk-GBENOENJ.cjs.map +1 -1
  18. package/dist/tsup/chunk-KDFWJKMJ.cjs.map +1 -1
  19. package/dist/tsup/{chunk-2YHR67M4.js → chunk-LFVF5SCU.js} +4 -4
  20. package/dist/tsup/chunk-LFVF5SCU.js.map +1 -0
  21. package/dist/tsup/{chunk-4UHJ3ADW.cjs → chunk-MQ3PTGWH.cjs} +115 -99
  22. package/dist/tsup/chunk-MQ3PTGWH.cjs.map +1 -0
  23. package/dist/tsup/{chunk-Y7ZDTLD2.js → chunk-NENM5PQN.js} +2 -2
  24. package/dist/tsup/chunk-R33VIC3W.cjs +278 -0
  25. package/dist/tsup/chunk-R33VIC3W.cjs.map +1 -0
  26. package/dist/tsup/{chunk-QDVKDX7G.cjs → chunk-ROVVTBUE.cjs} +9 -9
  27. package/dist/tsup/chunk-ROVVTBUE.cjs.map +1 -0
  28. package/dist/tsup/{chunk-7KIR3QLO.js → chunk-S22E2HUH.js} +24 -8
  29. package/dist/tsup/chunk-S22E2HUH.js.map +1 -0
  30. package/dist/tsup/{chunk-UGOCTUBG.js → chunk-TFMRMA5S.js} +5 -5
  31. package/dist/tsup/{chunk-WYZLRPQM.cjs → chunk-YR6H6STI.cjs} +269 -269
  32. package/dist/tsup/chunk-YR6H6STI.cjs.map +1 -0
  33. package/dist/tsup/{chunk-S6F7EKC7.cjs → chunk-YZZF7DES.cjs} +20 -10
  34. package/dist/tsup/chunk-YZZF7DES.cjs.map +1 -0
  35. package/dist/tsup/{chunk-4J5EFV3E.js → chunk-Z3BORZE2.js} +5 -5
  36. package/dist/tsup/{chunk-NRP2OHSW.js → chunk-ZKCVZA7Z.js} +5 -5
  37. package/dist/tsup/client/mod.cjs +6 -6
  38. package/dist/tsup/client/mod.cjs.map +1 -1
  39. package/dist/tsup/client/mod.d.cts +2 -2
  40. package/dist/tsup/client/mod.d.ts +2 -2
  41. package/dist/tsup/client/mod.js +5 -5
  42. package/dist/tsup/common/log.cjs +3 -3
  43. package/dist/tsup/common/log.cjs.map +1 -1
  44. package/dist/tsup/common/log.d.cts +2 -2
  45. package/dist/tsup/common/log.d.ts +2 -2
  46. package/dist/tsup/common/log.js +2 -2
  47. package/dist/tsup/common/websocket.cjs +4 -4
  48. package/dist/tsup/common/websocket.cjs.map +1 -1
  49. package/dist/tsup/common/websocket.js +3 -3
  50. package/dist/tsup/{config-D43N-CFi.d.ts → config-CLnylLYY.d.ts} +10 -10
  51. package/dist/tsup/{config-COyis_uH.d.cts → config-CZB2-W8x.d.cts} +10 -10
  52. package/dist/tsup/{driver-KyM2v645.d.ts → driver-D0QX9M11.d.ts} +1 -1
  53. package/dist/tsup/driver-helpers/mod.cjs +4 -4
  54. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  55. package/dist/tsup/driver-helpers/mod.d.cts +2 -2
  56. package/dist/tsup/driver-helpers/mod.d.ts +2 -2
  57. package/dist/tsup/driver-helpers/mod.js +3 -3
  58. package/dist/tsup/{driver-Bt7B-qMd.d.cts → driver-q-zqG7fc.d.cts} +1 -1
  59. package/dist/tsup/driver-test-suite/mod.cjs +323 -448
  60. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  61. package/dist/tsup/driver-test-suite/mod.d.cts +2 -2
  62. package/dist/tsup/driver-test-suite/mod.d.ts +2 -2
  63. package/dist/tsup/driver-test-suite/mod.js +916 -1041
  64. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  65. package/dist/tsup/inspector/mod.cjs.map +1 -1
  66. package/dist/tsup/mod.cjs +8 -8
  67. package/dist/tsup/mod.cjs.map +1 -1
  68. package/dist/tsup/mod.d.cts +4 -4
  69. package/dist/tsup/mod.d.ts +4 -4
  70. package/dist/tsup/mod.js +7 -7
  71. package/dist/tsup/serve-test-suite/mod.cjs +1581 -0
  72. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -0
  73. package/dist/tsup/serve-test-suite/mod.d.cts +9 -0
  74. package/dist/tsup/serve-test-suite/mod.d.ts +9 -0
  75. package/dist/tsup/serve-test-suite/mod.js +1578 -0
  76. package/dist/tsup/serve-test-suite/mod.js.map +1 -0
  77. package/dist/tsup/test/mod.cjs +8 -8
  78. package/dist/tsup/test/mod.cjs.map +1 -1
  79. package/dist/tsup/test/mod.d.cts +1 -1
  80. package/dist/tsup/test/mod.d.ts +1 -1
  81. package/dist/tsup/test/mod.js +7 -7
  82. package/dist/tsup/utils.cjs +3 -3
  83. package/dist/tsup/utils.cjs.map +1 -1
  84. package/dist/tsup/utils.js +2 -2
  85. package/package.json +14 -4
  86. package/src/actor/errors.ts +4 -4
  87. package/src/driver-test-suite/mod.ts +3 -0
  88. package/src/driver-test-suite/tests/actor-driver.ts +4 -0
  89. package/src/driver-test-suite/tests/actor-lifecycle.ts +157 -0
  90. package/src/driver-test-suite/tests/conn-error-serialization.ts +64 -0
  91. package/src/drivers/engine/actor-driver.ts +24 -4
  92. package/src/serve-test-suite/mod.ts +147 -0
  93. package/dist/schemas/actor-persist/v1.js +0 -167
  94. package/dist/schemas/actor-persist/v2.js +0 -200
  95. package/dist/schemas/actor-persist/v3.js +0 -200
  96. package/dist/schemas/client-protocol/v1.js +0 -301
  97. package/dist/schemas/client-protocol/v2.js +0 -299
  98. package/dist/schemas/file-system-driver/v1.js +0 -76
  99. package/dist/schemas/file-system-driver/v2.js +0 -103
  100. package/dist/schemas/file-system-driver/v3.js +0 -122
  101. package/dist/tsup/chunk-2YHR67M4.js.map +0 -1
  102. package/dist/tsup/chunk-4UHJ3ADW.cjs.map +0 -1
  103. package/dist/tsup/chunk-7KIR3QLO.js.map +0 -1
  104. package/dist/tsup/chunk-B5UXC4QV.cjs.map +0 -1
  105. package/dist/tsup/chunk-DSNSFYDL.cjs.map +0 -1
  106. package/dist/tsup/chunk-GTQKDCM4.cjs.map +0 -1
  107. package/dist/tsup/chunk-QDVKDX7G.cjs.map +0 -1
  108. package/dist/tsup/chunk-S6F7EKC7.cjs.map +0 -1
  109. package/dist/tsup/chunk-SNAUKDDK.cjs.map +0 -1
  110. package/dist/tsup/chunk-WYZLRPQM.cjs.map +0 -1
  111. /package/dist/tsup/{chunk-OXN6EZUB.js.map → chunk-F7ZL4T63.js.map} +0 -0
  112. /package/dist/tsup/{chunk-Y7ZDTLD2.js.map → chunk-NENM5PQN.js.map} +0 -0
  113. /package/dist/tsup/{chunk-UGOCTUBG.js.map → chunk-TFMRMA5S.js.map} +0 -0
  114. /package/dist/tsup/{chunk-4J5EFV3E.js.map → chunk-Z3BORZE2.js.map} +0 -0
  115. /package/dist/tsup/{chunk-NRP2OHSW.js.map → chunk-ZKCVZA7Z.js.map} +0 -0
@@ -0,0 +1,1581 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ var _chunkR33VIC3Wcjs = require('../chunk-R33VIC3W.cjs');
10
+
11
+
12
+
13
+ var _chunkMQ3PTGWHcjs = require('../chunk-MQ3PTGWH.cjs');
14
+
15
+
16
+ var _chunkETNL2HZLcjs = require('../chunk-ETNL2HZL.cjs');
17
+ require('../chunk-YR6H6STI.cjs');
18
+ require('../chunk-3HKN5HQ7.cjs');
19
+
20
+
21
+ var _chunkBEMEUFS2cjs = require('../chunk-BEMEUFS2.cjs');
22
+ require('../chunk-KDFWJKMJ.cjs');
23
+ require('../chunk-YZZF7DES.cjs');
24
+
25
+
26
+
27
+ var _chunk2XQS746Mcjs = require('../chunk-2XQS746M.cjs');
28
+
29
+
30
+ var _chunkGBENOENJcjs = require('../chunk-GBENOENJ.cjs');
31
+
32
+ // src/serve-test-suite/mod.ts
33
+ var _nodeserver = require('@hono/node-server');
34
+ var _nodews = require('@hono/node-ws');
35
+ var _net = require('net');
36
+ var _url = require('url');
37
+ var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
38
+
39
+ // fixtures/driver-test-suite/action-inputs.ts
40
+ var inputActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
41
+ createState: (c, input) => {
42
+ return {
43
+ initialInput: input,
44
+ onCreateInput: void 0
45
+ };
46
+ },
47
+ onCreate: (c, input) => {
48
+ c.state.onCreateInput = input;
49
+ },
50
+ actions: {
51
+ getInputs: (c) => {
52
+ return {
53
+ initialInput: c.state.initialInput,
54
+ onCreateInput: c.state.onCreateInput
55
+ };
56
+ }
57
+ }
58
+ });
59
+
60
+ // fixtures/driver-test-suite/action-timeout.ts
61
+ var shortTimeoutActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
62
+ state: { value: 0 },
63
+ options: {
64
+ actionTimeout: 50
65
+ // 50ms timeout
66
+ },
67
+ actions: {
68
+ quickAction: async (c) => {
69
+ return "quick response";
70
+ },
71
+ slowAction: async (c) => {
72
+ await new Promise((resolve) => setTimeout(resolve, 100));
73
+ return "slow response";
74
+ }
75
+ }
76
+ });
77
+ var longTimeoutActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
78
+ state: { value: 0 },
79
+ options: {
80
+ actionTimeout: 200
81
+ // 200ms timeout
82
+ },
83
+ actions: {
84
+ delayedAction: async (c) => {
85
+ await new Promise((resolve) => setTimeout(resolve, 100));
86
+ return "delayed response";
87
+ }
88
+ }
89
+ });
90
+ var defaultTimeoutActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
91
+ state: { value: 0 },
92
+ actions: {
93
+ normalAction: async (c) => {
94
+ await new Promise((resolve) => setTimeout(resolve, 50));
95
+ return "normal response";
96
+ }
97
+ }
98
+ });
99
+ var syncTimeoutActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
100
+ state: { value: 0 },
101
+ options: {
102
+ actionTimeout: 50
103
+ // 50ms timeout
104
+ },
105
+ actions: {
106
+ syncAction: (c) => {
107
+ return "sync response";
108
+ }
109
+ }
110
+ });
111
+
112
+ // fixtures/driver-test-suite/action-types.ts
113
+ var syncActionActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
114
+ state: { value: 0 },
115
+ actions: {
116
+ // Simple synchronous action that returns a value directly
117
+ increment: (c, amount = 1) => {
118
+ c.state.value += amount;
119
+ return c.state.value;
120
+ },
121
+ // Synchronous action that returns an object
122
+ getInfo: (c) => {
123
+ return {
124
+ currentValue: c.state.value,
125
+ timestamp: Date.now()
126
+ };
127
+ },
128
+ // Synchronous action with no return value (void)
129
+ reset: (c) => {
130
+ c.state.value = 0;
131
+ }
132
+ }
133
+ });
134
+ var asyncActionActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
135
+ state: { value: 0, data: null },
136
+ actions: {
137
+ // Async action with a delay
138
+ delayedIncrement: async (c, amount = 1) => {
139
+ await Promise.resolve();
140
+ c.state.value += amount;
141
+ return c.state.value;
142
+ },
143
+ // Async action that simulates an API call
144
+ fetchData: async (c, id) => {
145
+ await Promise.resolve();
146
+ const data = { id, timestamp: Date.now() };
147
+ c.state.data = data;
148
+ return data;
149
+ },
150
+ // Async action with error handling
151
+ asyncWithError: async (c, shouldError) => {
152
+ await Promise.resolve();
153
+ if (shouldError) {
154
+ throw new (0, _chunk2XQS746Mcjs.UserError)("Intentional error");
155
+ }
156
+ return "Success";
157
+ }
158
+ }
159
+ });
160
+ var promiseActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
161
+ state: { results: [] },
162
+ actions: {
163
+ // Action that returns a resolved promise
164
+ resolvedPromise: (c) => {
165
+ return Promise.resolve("resolved value");
166
+ },
167
+ // Action that returns a promise that resolves after a delay
168
+ delayedPromise: (c) => {
169
+ return new Promise((resolve) => {
170
+ c.state.results.push("delayed");
171
+ resolve("delayed value");
172
+ });
173
+ },
174
+ // Action that returns a rejected promise
175
+ rejectedPromise: (c) => {
176
+ return Promise.reject(new (0, _chunk2XQS746Mcjs.UserError)("promised rejection"));
177
+ },
178
+ // Action to check the collected results
179
+ getResults: (c) => {
180
+ return c.state.results;
181
+ }
182
+ }
183
+ });
184
+
185
+ // fixtures/driver-test-suite/actor-onstatechange.ts
186
+ var onStateChangeActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
187
+ state: {
188
+ value: 0,
189
+ changeCount: 0
190
+ },
191
+ actions: {
192
+ // Action that modifies state - should trigger onStateChange
193
+ setValue: (c, newValue) => {
194
+ c.state.value = newValue;
195
+ return c.state.value;
196
+ },
197
+ // Action that modifies state multiple times - should trigger onStateChange for each change
198
+ incrementMultiple: (c, times) => {
199
+ for (let i = 0; i < times; i++) {
200
+ c.state.value++;
201
+ }
202
+ return c.state.value;
203
+ },
204
+ // Action that doesn't modify state - should NOT trigger onStateChange
205
+ getValue: (c) => {
206
+ return c.state.value;
207
+ },
208
+ // Action that reads and returns without modifying - should NOT trigger onStateChange
209
+ getDoubled: (c) => {
210
+ const doubled = c.state.value * 2;
211
+ return doubled;
212
+ },
213
+ // Get the count of how many times onStateChange was called
214
+ getChangeCount: (c) => {
215
+ return c.state.changeCount;
216
+ },
217
+ // Reset change counter for testing
218
+ resetChangeCount: (c) => {
219
+ c.state.changeCount = 0;
220
+ }
221
+ },
222
+ // Track onStateChange calls
223
+ onStateChange: (c) => {
224
+ c.state.changeCount++;
225
+ }
226
+ });
227
+
228
+ // fixtures/driver-test-suite/conn-params.ts
229
+ var counterWithParams = _chunkMQ3PTGWHcjs.actor.call(void 0, {
230
+ state: { count: 0, initializers: [] },
231
+ createConnState: (c, params) => {
232
+ return {
233
+ name: params.name || "anonymous"
234
+ };
235
+ },
236
+ onConnect: (c, conn) => {
237
+ c.state.initializers.push(conn.state.name);
238
+ },
239
+ actions: {
240
+ increment: (c, x) => {
241
+ c.state.count += x;
242
+ c.broadcast("newCount", {
243
+ count: c.state.count,
244
+ by: c.conn.state.name
245
+ });
246
+ return c.state.count;
247
+ },
248
+ getInitializers: (c) => {
249
+ return c.state.initializers;
250
+ }
251
+ }
252
+ });
253
+
254
+ // fixtures/driver-test-suite/conn-state.ts
255
+ var connStateActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
256
+ state: {
257
+ sharedCounter: 0,
258
+ disconnectionCount: 0
259
+ },
260
+ // Define connection state
261
+ createConnState: (c, params) => {
262
+ return {
263
+ username: (params == null ? void 0 : params.username) || "anonymous",
264
+ role: (params == null ? void 0 : params.role) || "user",
265
+ counter: 0,
266
+ createdAt: Date.now(),
267
+ noCount: _nullishCoalesce((params == null ? void 0 : params.noCount), () => ( false))
268
+ };
269
+ },
270
+ // Lifecycle hook when a connection is established
271
+ onConnect: (c, conn) => {
272
+ c.broadcast("userConnected", {
273
+ id: conn.id,
274
+ username: "anonymous",
275
+ role: "user"
276
+ });
277
+ },
278
+ // Lifecycle hook when a connection is closed
279
+ onDisconnect: (c, conn) => {
280
+ var _a;
281
+ if (!((_a = conn.state) == null ? void 0 : _a.noCount)) {
282
+ c.state.disconnectionCount += 1;
283
+ c.broadcast("userDisconnected", {
284
+ id: conn.id
285
+ });
286
+ }
287
+ },
288
+ actions: {
289
+ // Action to increment the connection's counter
290
+ incrementConnCounter: (c, amount = 1) => {
291
+ c.conn.state.counter += amount;
292
+ },
293
+ // Action to increment the shared counter
294
+ incrementSharedCounter: (c, amount = 1) => {
295
+ c.state.sharedCounter += amount;
296
+ return c.state.sharedCounter;
297
+ },
298
+ // Get the connection state
299
+ getConnectionState: (c) => {
300
+ return { id: c.conn.id, ...c.conn.state };
301
+ },
302
+ // Check all active connections
303
+ getConnectionIds: (c) => {
304
+ return c.conns.entries().filter((c2) => {
305
+ var _a;
306
+ return !((_a = c2[1].state) == null ? void 0 : _a.noCount);
307
+ }).map((x) => x[0]).toArray();
308
+ },
309
+ // Get disconnection count
310
+ getDisconnectionCount: (c) => {
311
+ return c.state.disconnectionCount;
312
+ },
313
+ // Get all active connection states
314
+ getAllConnectionStates: (c) => {
315
+ return c.conns.entries().map(([id, conn]) => ({ id, ...conn.state })).toArray();
316
+ },
317
+ // Send message to a specific connection with matching ID
318
+ sendToConnection: (c, targetId, message) => {
319
+ if (c.conns.has(targetId)) {
320
+ c.conns.get(targetId).send("directMessage", { from: c.conn.id, message });
321
+ return true;
322
+ } else {
323
+ return false;
324
+ }
325
+ },
326
+ // Update connection state (simulated for tests)
327
+ updateConnection: (c, updates) => {
328
+ if (updates.username) c.conn.state.username = updates.username;
329
+ if (updates.role) c.conn.state.role = updates.role;
330
+ return c.conn.state;
331
+ },
332
+ disconnectSelf: (c, reason) => {
333
+ c.conn.disconnect(_nullishCoalesce(reason, () => ( "test.disconnect")));
334
+ return true;
335
+ }
336
+ }
337
+ });
338
+
339
+ // fixtures/driver-test-suite/counter.ts
340
+ var counter = _chunkMQ3PTGWHcjs.actor.call(void 0, {
341
+ state: { count: 0 },
342
+ actions: {
343
+ increment: (c, x) => {
344
+ c.state.count += x;
345
+ c.broadcast("newCount", c.state.count);
346
+ return c.state.count;
347
+ },
348
+ setCount: (c, x) => {
349
+ c.state.count = x;
350
+ c.broadcast("newCount", x);
351
+ return c.state.count;
352
+ },
353
+ getCount: (c) => {
354
+ return c.state.count;
355
+ }
356
+ }
357
+ });
358
+
359
+ // fixtures/driver-test-suite/counter-conn.ts
360
+ var counterConn = _chunkMQ3PTGWHcjs.actor.call(void 0, {
361
+ state: {
362
+ connectionCount: 0
363
+ },
364
+ connState: { count: 0 },
365
+ onConnect: (c, conn) => {
366
+ c.state.connectionCount += 1;
367
+ },
368
+ onDisconnect: (c, conn) => {
369
+ c.state.connectionCount -= 1;
370
+ },
371
+ actions: {
372
+ increment: (c, x) => {
373
+ c.conn.state.count += x;
374
+ c.broadcast("newCount", c.conn.state.count);
375
+ },
376
+ setCount: (c, x) => {
377
+ c.conn.state.count = x;
378
+ c.broadcast("newCount", x);
379
+ },
380
+ getCount: (c) => {
381
+ return c.conn.state.count;
382
+ },
383
+ getConnectionCount: (c) => {
384
+ return c.state.connectionCount;
385
+ }
386
+ }
387
+ });
388
+
389
+ // fixtures/driver-test-suite/destroy.ts
390
+ var destroyObserver = _chunkMQ3PTGWHcjs.actor.call(void 0, {
391
+ state: { destroyedActors: [] },
392
+ actions: {
393
+ notifyDestroyed: (c, actorKey) => {
394
+ c.state.destroyedActors.push(actorKey);
395
+ },
396
+ wasDestroyed: (c, actorKey) => {
397
+ return c.state.destroyedActors.includes(actorKey);
398
+ },
399
+ reset: (c) => {
400
+ c.state.destroyedActors = [];
401
+ }
402
+ }
403
+ });
404
+ var destroyActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
405
+ state: { value: 0, key: "" },
406
+ onWake: (c) => {
407
+ c.state.key = c.key.join("/");
408
+ },
409
+ onDestroy: async (c) => {
410
+ const client = c.client();
411
+ const observer = client.destroyObserver.getOrCreate(["observer"]);
412
+ await observer.notifyDestroyed(c.state.key);
413
+ },
414
+ actions: {
415
+ setValue: async (c, newValue) => {
416
+ c.state.value = newValue;
417
+ await c.saveState({ immediate: true });
418
+ return c.state.value;
419
+ },
420
+ getValue: (c) => {
421
+ return c.state.value;
422
+ },
423
+ destroy: (c) => {
424
+ c.destroy();
425
+ }
426
+ }
427
+ });
428
+
429
+ // fixtures/driver-test-suite/error-handling.ts
430
+ var errorHandlingActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
431
+ state: {
432
+ errorLog: []
433
+ },
434
+ actions: {
435
+ // Action that throws a UserError with just a message
436
+ throwSimpleError: () => {
437
+ throw new (0, _chunk2XQS746Mcjs.UserError)("Simple error message");
438
+ },
439
+ // Action that throws a UserError with code and metadata
440
+ throwDetailedError: () => {
441
+ throw new (0, _chunk2XQS746Mcjs.UserError)("Detailed error message", {
442
+ code: "detailed_error",
443
+ metadata: {
444
+ reason: "test",
445
+ timestamp: Date.now()
446
+ }
447
+ });
448
+ },
449
+ // Action that throws an internal error
450
+ throwInternalError: () => {
451
+ throw new Error("This is an internal error");
452
+ },
453
+ // Action that returns successfully
454
+ successfulAction: () => {
455
+ return "success";
456
+ },
457
+ // Action that times out (simulated with a long delay)
458
+ timeoutAction: async (c) => {
459
+ return new Promise((resolve) => {
460
+ setTimeout(() => {
461
+ resolve("This should not be reached if timeout works");
462
+ }, 1e4);
463
+ });
464
+ },
465
+ // Action with configurable delay to test timeout edge cases
466
+ delayedAction: async (c, delayMs) => {
467
+ return new Promise((resolve) => {
468
+ setTimeout(() => {
469
+ resolve(`Completed after ${delayMs}ms`);
470
+ }, delayMs);
471
+ });
472
+ },
473
+ // Log an error for inspection
474
+ logError: (c, error) => {
475
+ c.state.errorLog.push(error);
476
+ return c.state.errorLog;
477
+ },
478
+ // Get the error log
479
+ getErrorLog: (c) => {
480
+ return c.state.errorLog;
481
+ },
482
+ // Clear the error log
483
+ clearErrorLog: (c) => {
484
+ c.state.errorLog = [];
485
+ return true;
486
+ }
487
+ },
488
+ options: {
489
+ actionTimeout: 500
490
+ // 500ms timeout for actions
491
+ }
492
+ });
493
+ var customTimeoutActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
494
+ state: {},
495
+ actions: {
496
+ quickAction: async () => {
497
+ await new Promise((resolve) => setTimeout(resolve, 50));
498
+ return "Quick action completed";
499
+ },
500
+ slowAction: async () => {
501
+ await new Promise((resolve) => setTimeout(resolve, 300));
502
+ return "Slow action completed";
503
+ }
504
+ },
505
+ options: {
506
+ actionTimeout: 200
507
+ // 200ms timeout
508
+ }
509
+ });
510
+
511
+ // fixtures/driver-test-suite/inline-client.ts
512
+ var inlineClientActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
513
+ state: { messages: [] },
514
+ actions: {
515
+ // Action that uses client to call another actor (stateless)
516
+ callCounterIncrement: async (c, amount) => {
517
+ const client = c.client();
518
+ const result = await client.counter.getOrCreate(["inline-test"]).increment(amount);
519
+ c.state.messages.push(
520
+ `Called counter.increment(${amount}), result: ${result}`
521
+ );
522
+ return result;
523
+ },
524
+ // Action that uses client to get counter state (stateless)
525
+ getCounterState: async (c) => {
526
+ const client = c.client();
527
+ const count = await client.counter.getOrCreate(["inline-test"]).getCount();
528
+ c.state.messages.push(`Got counter state: ${count}`);
529
+ return count;
530
+ },
531
+ // Action that uses client with .connect() for stateful communication
532
+ connectToCounterAndIncrement: async (c, amount) => {
533
+ const client = c.client();
534
+ const handle = client.counter.getOrCreate(["inline-test-stateful"]);
535
+ const connection = handle.connect();
536
+ const events = [];
537
+ connection.on("newCount", (count) => {
538
+ events.push(count);
539
+ });
540
+ const result1 = await connection.increment(amount);
541
+ const result2 = await connection.increment(amount * 2);
542
+ await connection.dispose();
543
+ c.state.messages.push(
544
+ `Connected to counter, incremented by ${amount} and ${amount * 2}, results: ${result1}, ${result2}, events: ${JSON.stringify(events)}`
545
+ );
546
+ return { result1, result2, events };
547
+ },
548
+ // Get all messages from this actor's state
549
+ getMessages: (c) => {
550
+ return c.state.messages;
551
+ },
552
+ // Clear messages
553
+ clearMessages: (c) => {
554
+ c.state.messages = [];
555
+ }
556
+ }
557
+ });
558
+
559
+ // fixtures/driver-test-suite/kv.ts
560
+ var kvActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
561
+ actions: {
562
+ putText: async (c, key, value) => {
563
+ await c.kv.put(key, value);
564
+ return true;
565
+ },
566
+ getText: async (c, key) => {
567
+ return await c.kv.get(key);
568
+ },
569
+ listText: async (c, prefix) => {
570
+ const results = await c.kv.list(prefix, { keyType: "text" });
571
+ return results.map(([key, value]) => ({
572
+ key,
573
+ value
574
+ }));
575
+ },
576
+ roundtripArrayBuffer: async (c, key, values) => {
577
+ const buffer = new Uint8Array(values).buffer;
578
+ await c.kv.put(key, buffer, { type: "arrayBuffer" });
579
+ const result = await c.kv.get(key, { type: "arrayBuffer" });
580
+ if (!result) {
581
+ return null;
582
+ }
583
+ return Array.from(new Uint8Array(result));
584
+ }
585
+ }
586
+ });
587
+
588
+ // fixtures/driver-test-suite/large-payloads.ts
589
+ var largePayloadActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
590
+ state: {},
591
+ actions: {
592
+ /**
593
+ * Accepts a large request payload and returns its size
594
+ */
595
+ processLargeRequest: (c, data) => {
596
+ return {
597
+ itemCount: data.items.length,
598
+ firstItem: data.items[0],
599
+ lastItem: data.items[data.items.length - 1]
600
+ };
601
+ },
602
+ /**
603
+ * Returns a large response payload
604
+ */
605
+ getLargeResponse: (c, itemCount) => {
606
+ const items = [];
607
+ for (let i = 0; i < itemCount; i++) {
608
+ items.push(`Item ${i} with some additional text to increase size`);
609
+ }
610
+ return { items };
611
+ },
612
+ /**
613
+ * Echo back the request data
614
+ */
615
+ echo: (c, data) => {
616
+ return data;
617
+ }
618
+ }
619
+ });
620
+ var largePayloadConnActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
621
+ state: {},
622
+ connState: {
623
+ lastRequestSize: 0
624
+ },
625
+ actions: {
626
+ /**
627
+ * Accepts a large request payload and returns its size
628
+ */
629
+ processLargeRequest: (c, data) => {
630
+ c.conn.state.lastRequestSize = data.items.length;
631
+ return {
632
+ itemCount: data.items.length,
633
+ firstItem: data.items[0],
634
+ lastItem: data.items[data.items.length - 1]
635
+ };
636
+ },
637
+ /**
638
+ * Returns a large response payload
639
+ */
640
+ getLargeResponse: (c, itemCount) => {
641
+ const items = [];
642
+ for (let i = 0; i < itemCount; i++) {
643
+ items.push(`Item ${i} with some additional text to increase size`);
644
+ }
645
+ return { items };
646
+ },
647
+ /**
648
+ * Echo back the request data
649
+ */
650
+ echo: (c, data) => {
651
+ return data;
652
+ },
653
+ /**
654
+ * Get the last request size
655
+ */
656
+ getLastRequestSize: (c) => {
657
+ return c.conn.state.lastRequestSize;
658
+ }
659
+ }
660
+ });
661
+
662
+ // fixtures/driver-test-suite/lifecycle.ts
663
+ var counterWithLifecycle = _chunkMQ3PTGWHcjs.actor.call(void 0, {
664
+ state: {
665
+ count: 0,
666
+ events: []
667
+ },
668
+ createConnState: (c, params) => ({
669
+ joinTime: Date.now()
670
+ }),
671
+ onWake: (c) => {
672
+ c.state.events.push("onWake");
673
+ },
674
+ onBeforeConnect: (c, params) => {
675
+ if (params == null ? void 0 : params.trackLifecycle) c.state.events.push("onBeforeConnect");
676
+ },
677
+ onConnect: (c, conn) => {
678
+ var _a;
679
+ if ((_a = conn.params) == null ? void 0 : _a.trackLifecycle) c.state.events.push("onConnect");
680
+ },
681
+ onDisconnect: (c, conn) => {
682
+ var _a;
683
+ if ((_a = conn.params) == null ? void 0 : _a.trackLifecycle) c.state.events.push("onDisconnect");
684
+ },
685
+ actions: {
686
+ getEvents: (c) => {
687
+ return c.state.events;
688
+ },
689
+ increment: (c, x) => {
690
+ c.state.count += x;
691
+ return c.state.count;
692
+ }
693
+ }
694
+ });
695
+
696
+ // fixtures/driver-test-suite/metadata.ts
697
+ var metadataActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
698
+ state: {
699
+ lastMetadata: null,
700
+ actorName: "",
701
+ // Store tags and region in state for testing since they may not be
702
+ // available in the context in all environments
703
+ storedTags: {},
704
+ storedRegion: null
705
+ },
706
+ onWake: (c) => {
707
+ c.state.actorName = c.name;
708
+ },
709
+ actions: {
710
+ // Set up test tags - this will be called by tests to simulate tags
711
+ setupTestTags: (c, tags) => {
712
+ c.state.storedTags = tags;
713
+ return tags;
714
+ },
715
+ // Set up test region - this will be called by tests to simulate region
716
+ setupTestRegion: (c, region) => {
717
+ c.state.storedRegion = region;
718
+ return region;
719
+ },
720
+ // Get all available metadata
721
+ getMetadata: (c) => {
722
+ const metadata = {
723
+ name: c.name,
724
+ tags: c.state.storedTags,
725
+ region: c.state.storedRegion
726
+ };
727
+ c.state.lastMetadata = metadata;
728
+ return metadata;
729
+ },
730
+ // Get the actor name
731
+ getActorName: (c) => {
732
+ return c.name;
733
+ },
734
+ // Get a specific tag by key
735
+ getTag: (c, key) => {
736
+ return c.state.storedTags[key] || null;
737
+ },
738
+ // Get all tags
739
+ getTags: (c) => {
740
+ return c.state.storedTags;
741
+ },
742
+ // Get the region
743
+ getRegion: (c) => {
744
+ return c.state.storedRegion;
745
+ },
746
+ // Get the stored actor name (from onWake)
747
+ getStoredActorName: (c) => {
748
+ return c.state.actorName;
749
+ },
750
+ // Get last retrieved metadata
751
+ getLastMetadata: (c) => {
752
+ return c.state.lastMetadata;
753
+ }
754
+ }
755
+ });
756
+
757
+ // fixtures/driver-test-suite/raw-http.ts
758
+ var _hono = require('hono');
759
+ var rawHttpActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
760
+ state: {
761
+ requestCount: 0
762
+ },
763
+ onRequest(ctx, request) {
764
+ const url = new URL(request.url);
765
+ const method = request.method;
766
+ ctx.state.requestCount++;
767
+ if (url.pathname === "/api/hello") {
768
+ return new Response(
769
+ JSON.stringify({ message: "Hello from actor!" }),
770
+ {
771
+ headers: { "Content-Type": "application/json" }
772
+ }
773
+ );
774
+ }
775
+ if (url.pathname === "/api/echo" && method === "POST") {
776
+ return new Response(request.body, {
777
+ headers: request.headers
778
+ });
779
+ }
780
+ if (url.pathname === "/api/state") {
781
+ return new Response(
782
+ JSON.stringify({
783
+ requestCount: ctx.state.requestCount
784
+ }),
785
+ {
786
+ headers: { "Content-Type": "application/json" }
787
+ }
788
+ );
789
+ }
790
+ if (url.pathname === "/api/headers") {
791
+ const headers = {};
792
+ request.headers.forEach((value, key) => {
793
+ headers[key] = value;
794
+ });
795
+ return new Response(JSON.stringify(headers), {
796
+ headers: { "Content-Type": "application/json" }
797
+ });
798
+ }
799
+ return new Response("Not Found", { status: 404 });
800
+ },
801
+ actions: {}
802
+ });
803
+ var rawHttpNoHandlerActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
804
+ actions: {}
805
+ });
806
+ var rawHttpVoidReturnActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
807
+ onRequest(ctx, request) {
808
+ return void 0;
809
+ },
810
+ actions: {}
811
+ });
812
+ var rawHttpHonoActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
813
+ createVars() {
814
+ const router = new (0, _hono.Hono)();
815
+ router.get(
816
+ "/",
817
+ (c) => c.json({ message: "Welcome to Hono actor!" })
818
+ );
819
+ router.get(
820
+ "/users",
821
+ (c) => c.json([
822
+ { id: 1, name: "Alice" },
823
+ { id: 2, name: "Bob" }
824
+ ])
825
+ );
826
+ router.get("/users/:id", (c) => {
827
+ const id = c.req.param("id");
828
+ return c.json({
829
+ id: parseInt(id),
830
+ name: id === "1" ? "Alice" : "Bob"
831
+ });
832
+ });
833
+ router.post("/users", async (c) => {
834
+ const body = await c.req.json();
835
+ return c.json({ id: 3, ...body }, 201);
836
+ });
837
+ router.put("/users/:id", async (c) => {
838
+ const id = c.req.param("id");
839
+ const body = await c.req.json();
840
+ return c.json({ id: parseInt(id), ...body });
841
+ });
842
+ router.delete("/users/:id", (c) => {
843
+ const id = c.req.param("id");
844
+ return c.json({ message: `User ${id} deleted` });
845
+ });
846
+ return { router };
847
+ },
848
+ onRequest(ctx, request) {
849
+ return ctx.vars.router.fetch(request);
850
+ },
851
+ actions: {}
852
+ });
853
+
854
+ // fixtures/driver-test-suite/raw-http-request-properties.ts
855
+ var rawHttpRequestPropertiesActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
856
+ actions: {},
857
+ onRequest(ctx, request) {
858
+ const url = new URL(request.url);
859
+ const method = request.method;
860
+ const headers = {};
861
+ request.headers.forEach((value, key) => {
862
+ headers[key] = value;
863
+ });
864
+ const handleBody = async () => {
865
+ if (!request.body) {
866
+ return null;
867
+ }
868
+ const contentType = request.headers.get("content-type") || "";
869
+ try {
870
+ if (contentType.includes("application/json")) {
871
+ const text = await request.text();
872
+ return text ? JSON.parse(text) : null;
873
+ } else {
874
+ const text = await request.text();
875
+ return text || null;
876
+ }
877
+ } catch (error) {
878
+ return null;
879
+ }
880
+ };
881
+ if (method === "HEAD") {
882
+ return new Response(null, {
883
+ status: 200
884
+ });
885
+ }
886
+ if (method === "OPTIONS") {
887
+ return new Response(null, {
888
+ status: 204
889
+ });
890
+ }
891
+ return handleBody().then((body) => {
892
+ const responseData = {
893
+ // URL properties
894
+ url: request.url,
895
+ pathname: url.pathname,
896
+ search: url.search,
897
+ searchParams: Object.fromEntries(url.searchParams.entries()),
898
+ hash: url.hash,
899
+ // Method
900
+ method: request.method,
901
+ // Headers
902
+ headers,
903
+ // Body
904
+ body,
905
+ bodyText: typeof body === "string" ? body : body === null && request.body !== null ? "" : null,
906
+ // Additional properties that might be available
907
+ // Note: Some properties like cache, credentials, mode, etc.
908
+ // might not be available in all environments
909
+ cache: request.cache || null,
910
+ credentials: request.credentials || null,
911
+ mode: request.mode || null,
912
+ redirect: request.redirect || null,
913
+ referrer: request.referrer || null
914
+ };
915
+ return new Response(JSON.stringify(responseData), {
916
+ headers: { "Content-Type": "application/json" }
917
+ });
918
+ });
919
+ }
920
+ });
921
+
922
+ // fixtures/driver-test-suite/raw-websocket.ts
923
+ var rawWebSocketActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
924
+ state: {
925
+ connectionCount: 0,
926
+ messageCount: 0
927
+ },
928
+ onWebSocket(ctx, websocket) {
929
+ ctx.state.connectionCount = ctx.state.connectionCount + 1;
930
+ console.log(
931
+ `[ACTOR] New connection, count: ${ctx.state.connectionCount}`
932
+ );
933
+ websocket.send(
934
+ JSON.stringify({
935
+ type: "welcome",
936
+ connectionCount: ctx.state.connectionCount
937
+ })
938
+ );
939
+ console.log("[ACTOR] Sent welcome message");
940
+ websocket.addEventListener("message", (event) => {
941
+ var _a;
942
+ ctx.state.messageCount = ctx.state.messageCount + 1;
943
+ console.log(
944
+ `[ACTOR] Message received, total count: ${ctx.state.messageCount}, data:`,
945
+ event.data
946
+ );
947
+ const data = event.data;
948
+ if (typeof data === "string") {
949
+ try {
950
+ const parsed = JSON.parse(data);
951
+ if (parsed.type === "ping") {
952
+ websocket.send(
953
+ JSON.stringify({
954
+ type: "pong",
955
+ timestamp: Date.now()
956
+ })
957
+ );
958
+ } else if (parsed.type === "getStats") {
959
+ console.log(
960
+ `[ACTOR] Sending stats - connections: ${ctx.state.connectionCount}, messages: ${ctx.state.messageCount}`
961
+ );
962
+ websocket.send(
963
+ JSON.stringify({
964
+ type: "stats",
965
+ connectionCount: ctx.state.connectionCount,
966
+ messageCount: ctx.state.messageCount
967
+ })
968
+ );
969
+ } else if (parsed.type === "getRequestInfo") {
970
+ const url = ((_a = ctx.request) == null ? void 0 : _a.url) || "ws://actor/websocket";
971
+ const urlObj = new URL(url);
972
+ websocket.send(
973
+ JSON.stringify({
974
+ type: "requestInfo",
975
+ url,
976
+ pathname: urlObj.pathname,
977
+ search: urlObj.search
978
+ })
979
+ );
980
+ } else {
981
+ websocket.send(data);
982
+ }
983
+ } catch (e) {
984
+ websocket.send(data);
985
+ }
986
+ } else {
987
+ websocket.send(data);
988
+ }
989
+ });
990
+ websocket.addEventListener("close", () => {
991
+ ctx.state.connectionCount = ctx.state.connectionCount - 1;
992
+ console.log(
993
+ `[ACTOR] Connection closed, count: ${ctx.state.connectionCount}`
994
+ );
995
+ });
996
+ },
997
+ actions: {
998
+ getStats(ctx) {
999
+ return {
1000
+ connectionCount: ctx.state.connectionCount,
1001
+ messageCount: ctx.state.messageCount
1002
+ };
1003
+ }
1004
+ }
1005
+ });
1006
+ var rawWebSocketBinaryActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1007
+ onWebSocket(ctx, websocket) {
1008
+ websocket.addEventListener("message", (event) => {
1009
+ const data = event.data;
1010
+ if (data instanceof ArrayBuffer || data instanceof Uint8Array) {
1011
+ const bytes = new Uint8Array(data);
1012
+ const reversed = new Uint8Array(bytes.length);
1013
+ for (let i = 0; i < bytes.length; i++) {
1014
+ reversed[i] = bytes[bytes.length - 1 - i];
1015
+ }
1016
+ websocket.send(reversed);
1017
+ }
1018
+ });
1019
+ },
1020
+ actions: {}
1021
+ });
1022
+
1023
+ // fixtures/driver-test-suite/request-access.ts
1024
+ var requestAccessActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1025
+ state: {
1026
+ // Track request info from different hooks
1027
+ onBeforeConnectRequest: {
1028
+ hasRequest: false,
1029
+ requestUrl: null,
1030
+ requestMethod: null,
1031
+ requestHeaders: {}
1032
+ },
1033
+ createConnStateRequest: {
1034
+ hasRequest: false,
1035
+ requestUrl: null,
1036
+ requestMethod: null,
1037
+ requestHeaders: {}
1038
+ },
1039
+ onRequestRequest: {
1040
+ hasRequest: false,
1041
+ requestUrl: null,
1042
+ requestMethod: null,
1043
+ requestHeaders: {}
1044
+ },
1045
+ onWebSocketRequest: {
1046
+ hasRequest: false,
1047
+ requestUrl: null,
1048
+ requestMethod: null,
1049
+ requestHeaders: {}
1050
+ }
1051
+ },
1052
+ createConnState: (c, params) => {
1053
+ let requestInfo = null;
1054
+ if ((params == null ? void 0 : params.trackRequest) && c.request) {
1055
+ const headers = {};
1056
+ c.request.headers.forEach((value, key) => {
1057
+ headers[key] = value;
1058
+ });
1059
+ requestInfo = {
1060
+ hasRequest: true,
1061
+ requestUrl: c.request.url,
1062
+ requestMethod: c.request.method,
1063
+ requestHeaders: headers
1064
+ };
1065
+ }
1066
+ return {
1067
+ trackRequest: (params == null ? void 0 : params.trackRequest) || false,
1068
+ requestInfo
1069
+ };
1070
+ },
1071
+ onConnect: (c, conn) => {
1072
+ if (conn.state.requestInfo) {
1073
+ c.state.createConnStateRequest = conn.state.requestInfo;
1074
+ }
1075
+ },
1076
+ onBeforeConnect: (c, params) => {
1077
+ if (params == null ? void 0 : params.trackRequest) {
1078
+ if (c.request) {
1079
+ c.state.onBeforeConnectRequest.hasRequest = true;
1080
+ c.state.onBeforeConnectRequest.requestUrl = c.request.url;
1081
+ c.state.onBeforeConnectRequest.requestMethod = c.request.method;
1082
+ const headers = {};
1083
+ c.request.headers.forEach((value, key) => {
1084
+ headers[key] = value;
1085
+ });
1086
+ c.state.onBeforeConnectRequest.requestHeaders = headers;
1087
+ } else {
1088
+ c.state.onBeforeConnectRequest.hasRequest = false;
1089
+ }
1090
+ }
1091
+ },
1092
+ onRequest: (c, request) => {
1093
+ c.state.onRequestRequest.hasRequest = true;
1094
+ c.state.onRequestRequest.requestUrl = request.url;
1095
+ c.state.onRequestRequest.requestMethod = request.method;
1096
+ const headers = {};
1097
+ request.headers.forEach((value, key) => {
1098
+ headers[key] = value;
1099
+ });
1100
+ c.state.onRequestRequest.requestHeaders = headers;
1101
+ return new Response(
1102
+ JSON.stringify({
1103
+ hasRequest: true,
1104
+ requestUrl: request.url,
1105
+ requestMethod: request.method,
1106
+ requestHeaders: headers
1107
+ }),
1108
+ {
1109
+ status: 200,
1110
+ headers: { "Content-Type": "application/json" }
1111
+ }
1112
+ );
1113
+ },
1114
+ onWebSocket: (c, websocket) => {
1115
+ if (!c.request) throw "Missing request";
1116
+ c.state.onWebSocketRequest.hasRequest = true;
1117
+ c.state.onWebSocketRequest.requestUrl = c.request.url;
1118
+ c.state.onWebSocketRequest.requestMethod = c.request.method;
1119
+ const headers = {};
1120
+ c.request.headers.forEach((value, key) => {
1121
+ headers[key] = value;
1122
+ });
1123
+ c.state.onWebSocketRequest.requestHeaders = headers;
1124
+ websocket.send(
1125
+ JSON.stringify({
1126
+ hasRequest: true,
1127
+ requestUrl: c.request.url,
1128
+ requestMethod: c.request.method,
1129
+ requestHeaders: headers
1130
+ })
1131
+ );
1132
+ websocket.addEventListener("message", (event) => {
1133
+ websocket.send(event.data);
1134
+ });
1135
+ },
1136
+ actions: {
1137
+ getRequestInfo: (c) => {
1138
+ return {
1139
+ onBeforeConnect: c.state.onBeforeConnectRequest,
1140
+ createConnState: c.state.createConnStateRequest,
1141
+ onRequest: c.state.onRequestRequest,
1142
+ onWebSocket: c.state.onWebSocketRequest
1143
+ };
1144
+ }
1145
+ }
1146
+ });
1147
+
1148
+ // fixtures/driver-test-suite/reject-connection.ts
1149
+ var rejectConnectionActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1150
+ onBeforeConnect: async (_c, params) => {
1151
+ if (params == null ? void 0 : params.reject) {
1152
+ await new Promise((resolve) => setTimeout(resolve, 500));
1153
+ throw new (0, _chunk2XQS746Mcjs.UserError)("Rejected connection", {
1154
+ code: "rejected"
1155
+ });
1156
+ }
1157
+ },
1158
+ actions: {
1159
+ ping: () => "pong"
1160
+ }
1161
+ });
1162
+
1163
+ // fixtures/driver-test-suite/scheduled.ts
1164
+ var scheduled = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1165
+ state: {
1166
+ lastRun: 0,
1167
+ scheduledCount: 0,
1168
+ taskHistory: []
1169
+ },
1170
+ actions: {
1171
+ // Schedule using 'at' with specific timestamp
1172
+ scheduleTaskAt: (c, timestamp) => {
1173
+ c.schedule.at(timestamp, "onScheduledTask");
1174
+ return timestamp;
1175
+ },
1176
+ // Schedule using 'after' with delay
1177
+ scheduleTaskAfter: (c, delayMs) => {
1178
+ c.schedule.after(delayMs, "onScheduledTask");
1179
+ return Date.now() + delayMs;
1180
+ },
1181
+ // Schedule with a task ID for ordering tests
1182
+ scheduleTaskAfterWithId: (c, taskId, delayMs) => {
1183
+ c.schedule.after(delayMs, "onScheduledTaskWithId", taskId);
1184
+ return { taskId, scheduledFor: Date.now() + delayMs };
1185
+ },
1186
+ // Original method for backward compatibility
1187
+ scheduleTask: (c, delayMs) => {
1188
+ const timestamp = Date.now() + delayMs;
1189
+ c.schedule.at(timestamp, "onScheduledTask");
1190
+ return timestamp;
1191
+ },
1192
+ // Getters for state
1193
+ getLastRun: (c) => {
1194
+ return c.state.lastRun;
1195
+ },
1196
+ getScheduledCount: (c) => {
1197
+ return c.state.scheduledCount;
1198
+ },
1199
+ getTaskHistory: (c) => {
1200
+ return c.state.taskHistory;
1201
+ },
1202
+ clearHistory: (c) => {
1203
+ c.state.taskHistory = [];
1204
+ c.state.scheduledCount = 0;
1205
+ c.state.lastRun = 0;
1206
+ return true;
1207
+ },
1208
+ // Scheduled task handlers
1209
+ onScheduledTask: (c) => {
1210
+ c.state.lastRun = Date.now();
1211
+ c.state.scheduledCount++;
1212
+ c.broadcast("scheduled", {
1213
+ time: c.state.lastRun,
1214
+ count: c.state.scheduledCount
1215
+ });
1216
+ },
1217
+ onScheduledTaskWithId: (c, taskId) => {
1218
+ c.state.lastRun = Date.now();
1219
+ c.state.scheduledCount++;
1220
+ c.state.taskHistory.push(taskId);
1221
+ c.broadcast("scheduledWithId", {
1222
+ taskId,
1223
+ time: c.state.lastRun,
1224
+ count: c.state.scheduledCount
1225
+ });
1226
+ }
1227
+ }
1228
+ });
1229
+
1230
+ // fixtures/driver-test-suite/vars.ts
1231
+ var staticVarActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1232
+ state: { value: 0 },
1233
+ connState: { hello: "world" },
1234
+ vars: { counter: 42, name: "test-actor" },
1235
+ actions: {
1236
+ getVars: (c) => {
1237
+ return c.vars;
1238
+ },
1239
+ getName: (c) => {
1240
+ return c.vars.name;
1241
+ }
1242
+ }
1243
+ });
1244
+ var nestedVarActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1245
+ state: { value: 0 },
1246
+ connState: { hello: "world" },
1247
+ vars: {
1248
+ counter: 42,
1249
+ nested: {
1250
+ value: "original",
1251
+ array: [1, 2, 3],
1252
+ obj: { key: "value" }
1253
+ }
1254
+ },
1255
+ actions: {
1256
+ getVars: (c) => {
1257
+ return c.vars;
1258
+ },
1259
+ modifyNested: (c) => {
1260
+ c.vars.nested.value = "modified";
1261
+ c.vars.nested.array.push(4);
1262
+ c.vars.nested.obj.key = "new-value";
1263
+ return c.vars;
1264
+ }
1265
+ }
1266
+ });
1267
+ var dynamicVarActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1268
+ state: { value: 0 },
1269
+ connState: { hello: "world" },
1270
+ createVars: () => {
1271
+ return {
1272
+ random: Math.random(),
1273
+ computed: `Actor-${Math.floor(Math.random() * 1e3)}`
1274
+ };
1275
+ },
1276
+ actions: {
1277
+ getVars: (c) => {
1278
+ return c.vars;
1279
+ }
1280
+ }
1281
+ });
1282
+ var uniqueVarActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1283
+ state: { value: 0 },
1284
+ connState: { hello: "world" },
1285
+ createVars: () => {
1286
+ return {
1287
+ id: Math.floor(Math.random() * 1e6)
1288
+ };
1289
+ },
1290
+ actions: {
1291
+ getVars: (c) => {
1292
+ return c.vars;
1293
+ }
1294
+ }
1295
+ });
1296
+ var driverCtxActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1297
+ state: { value: 0 },
1298
+ connState: { hello: "world" },
1299
+ createVars: (c, driverCtx) => {
1300
+ return {
1301
+ hasDriverCtx: Boolean(driverCtx == null ? void 0 : driverCtx.isTest)
1302
+ };
1303
+ },
1304
+ actions: {
1305
+ getVars: (c) => {
1306
+ return c.vars;
1307
+ }
1308
+ }
1309
+ });
1310
+
1311
+ // fixtures/driver-test-suite/start-stop-race.ts
1312
+ var startStopRaceActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1313
+ state: {
1314
+ initialized: false,
1315
+ startTime: 0,
1316
+ destroyCalled: false,
1317
+ startCompleted: false
1318
+ },
1319
+ onWake: async (c) => {
1320
+ c.state.startTime = Date.now();
1321
+ await new Promise((resolve) => setTimeout(resolve, 100));
1322
+ c.state.initialized = true;
1323
+ c.state.startCompleted = true;
1324
+ },
1325
+ onDestroy: (c) => {
1326
+ c.state.destroyCalled = true;
1327
+ },
1328
+ actions: {
1329
+ getState: (c) => {
1330
+ return {
1331
+ initialized: c.state.initialized,
1332
+ startTime: c.state.startTime,
1333
+ destroyCalled: c.state.destroyCalled,
1334
+ startCompleted: c.state.startCompleted
1335
+ };
1336
+ },
1337
+ ping: (c) => {
1338
+ return "pong";
1339
+ },
1340
+ destroy: (c) => {
1341
+ c.destroy();
1342
+ }
1343
+ }
1344
+ });
1345
+ var lifecycleObserver = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1346
+ state: {
1347
+ events: []
1348
+ },
1349
+ actions: {
1350
+ recordEvent: (c, params) => {
1351
+ c.state.events.push({
1352
+ actorKey: params.actorKey,
1353
+ event: params.event,
1354
+ timestamp: Date.now()
1355
+ });
1356
+ },
1357
+ getEvents: (c) => {
1358
+ return c.state.events;
1359
+ },
1360
+ clearEvents: (c) => {
1361
+ c.state.events = [];
1362
+ }
1363
+ }
1364
+ });
1365
+
1366
+ // fixtures/driver-test-suite/conn-error-serialization.ts
1367
+ var CustomConnectionError = class extends _chunk2XQS746Mcjs.ActorError {
1368
+ constructor(message) {
1369
+ super("connection", "custom_error", message, { public: true });
1370
+ }
1371
+ };
1372
+ var connErrorSerializationActor = _chunkMQ3PTGWHcjs.actor.call(void 0, {
1373
+ state: {
1374
+ value: 0
1375
+ },
1376
+ createConnState: (_c, params) => {
1377
+ if (params.shouldThrow) {
1378
+ throw new CustomConnectionError("Test error from createConnState");
1379
+ }
1380
+ return { initialized: true };
1381
+ },
1382
+ actions: {
1383
+ getValue: (c) => c.state.value
1384
+ }
1385
+ });
1386
+
1387
+ // fixtures/driver-test-suite/registry.ts
1388
+ var registry = _chunkMQ3PTGWHcjs.setup.call(void 0, {
1389
+ use: {
1390
+ // From counter.ts
1391
+ counter,
1392
+ // From counter-conn.ts
1393
+ counterConn,
1394
+ // From lifecycle.ts
1395
+ counterWithLifecycle,
1396
+ // From scheduled.ts
1397
+ scheduled,
1398
+ // From sleep.ts
1399
+ sleep: _chunkR33VIC3Wcjs.sleep,
1400
+ sleepWithLongRpc: _chunkR33VIC3Wcjs.sleepWithLongRpc,
1401
+ sleepWithRawHttp: _chunkR33VIC3Wcjs.sleepWithRawHttp,
1402
+ sleepWithRawWebSocket: _chunkR33VIC3Wcjs.sleepWithRawWebSocket,
1403
+ sleepWithNoSleepOption: _chunkR33VIC3Wcjs.sleepWithNoSleepOption,
1404
+ // From error-handling.ts
1405
+ errorHandlingActor,
1406
+ customTimeoutActor,
1407
+ // From inline-client.ts
1408
+ inlineClientActor,
1409
+ // From kv.ts
1410
+ kvActor,
1411
+ // From action-inputs.ts
1412
+ inputActor,
1413
+ // From action-timeout.ts
1414
+ shortTimeoutActor,
1415
+ longTimeoutActor,
1416
+ defaultTimeoutActor,
1417
+ syncTimeoutActor,
1418
+ // From action-types.ts
1419
+ syncActionActor,
1420
+ asyncActionActor,
1421
+ promiseActor,
1422
+ // From conn-params.ts
1423
+ counterWithParams,
1424
+ // From conn-state.ts
1425
+ connStateActor,
1426
+ // From metadata.ts
1427
+ metadataActor,
1428
+ // From vars.ts
1429
+ staticVarActor,
1430
+ nestedVarActor,
1431
+ dynamicVarActor,
1432
+ uniqueVarActor,
1433
+ driverCtxActor,
1434
+ // From raw-http.ts
1435
+ rawHttpActor,
1436
+ rawHttpNoHandlerActor,
1437
+ rawHttpVoidReturnActor,
1438
+ rawHttpHonoActor,
1439
+ // From raw-http-request-properties.ts
1440
+ rawHttpRequestPropertiesActor,
1441
+ // From raw-websocket.ts
1442
+ rawWebSocketActor,
1443
+ rawWebSocketBinaryActor,
1444
+ // From reject-connection.ts
1445
+ rejectConnectionActor,
1446
+ // From request-access.ts
1447
+ requestAccessActor,
1448
+ // From actor-onstatechange.ts
1449
+ onStateChangeActor,
1450
+ // From destroy.ts
1451
+ destroyActor,
1452
+ destroyObserver,
1453
+ // From hibernation.ts
1454
+ hibernationActor: _chunkR33VIC3Wcjs.hibernationActor,
1455
+ // From large-payloads.ts
1456
+ largePayloadActor,
1457
+ largePayloadConnActor,
1458
+ // From start-stop-race.ts
1459
+ startStopRaceActor,
1460
+ lifecycleObserver,
1461
+ // From conn-error-serialization.ts
1462
+ connErrorSerializationActor
1463
+ }
1464
+ });
1465
+
1466
+ // src/serve-test-suite/mod.ts
1467
+ async function getPort() {
1468
+ const MIN_PORT = 1e4;
1469
+ const MAX_PORT = 65535;
1470
+ const getRandomPort = () => Math.floor(Math.random() * (MAX_PORT - MIN_PORT + 1)) + MIN_PORT;
1471
+ let port = getRandomPort();
1472
+ let maxAttempts = 10;
1473
+ while (maxAttempts > 0) {
1474
+ try {
1475
+ const server = await new Promise((resolve, reject) => {
1476
+ const server2 = _net.createServer.call(void 0, );
1477
+ server2.once("error", (err) => {
1478
+ if (err.code === "EADDRINUSE") {
1479
+ reject(new Error(`Port ${port} is in use`));
1480
+ } else {
1481
+ reject(err);
1482
+ }
1483
+ });
1484
+ server2.once("listening", () => {
1485
+ resolve(server2);
1486
+ });
1487
+ server2.listen(port);
1488
+ });
1489
+ await new Promise((resolve) => {
1490
+ server.close(() => resolve());
1491
+ });
1492
+ return port;
1493
+ } catch (e2) {
1494
+ maxAttempts--;
1495
+ if (maxAttempts <= 0) {
1496
+ break;
1497
+ }
1498
+ port = getRandomPort();
1499
+ }
1500
+ }
1501
+ throw new Error("Could not find an available port after multiple attempts");
1502
+ }
1503
+ async function serveTestSuite() {
1504
+ var _a;
1505
+ registry.config.test = { ...registry.config.test, enabled: true };
1506
+ registry.config.inspector = {
1507
+ enabled: true,
1508
+ token: () => "token"
1509
+ };
1510
+ const port = await getPort();
1511
+ registry.config.managerPort = port;
1512
+ registry.config.serverless = {
1513
+ ...registry.config.serverless,
1514
+ publicEndpoint: `http://127.0.0.1:${port}`
1515
+ };
1516
+ const driver = await _chunkETNL2HZLcjs.createFileSystemOrMemoryDriver.call(void 0,
1517
+ true,
1518
+ `/tmp/rivetkit-test-suite-${crypto.randomUUID()}`
1519
+ );
1520
+ registry.config.driver = driver;
1521
+ let upgradeWebSocket;
1522
+ const parsedConfig = registry.parseConfig();
1523
+ const managerDriver = (_a = driver.manager) == null ? void 0 : _a.call(driver, parsedConfig);
1524
+ _invariant2.default.call(void 0, managerDriver, "missing manager driver");
1525
+ const { router } = _chunkBEMEUFS2cjs.buildManagerRouter.call(void 0,
1526
+ parsedConfig,
1527
+ managerDriver,
1528
+ () => upgradeWebSocket
1529
+ );
1530
+ const nodeWebSocket = _nodews.createNodeWebSocket.call(void 0, { app: router });
1531
+ upgradeWebSocket = nodeWebSocket.upgradeWebSocket;
1532
+ managerDriver.setGetUpgradeWebSocket(() => upgradeWebSocket);
1533
+ const server = _nodeserver.serve.call(void 0, {
1534
+ fetch: router.fetch,
1535
+ hostname: "127.0.0.1",
1536
+ port
1537
+ });
1538
+ _invariant2.default.call(void 0,
1539
+ nodeWebSocket.injectWebSocket !== void 0,
1540
+ "should have injectWebSocket"
1541
+ );
1542
+ nodeWebSocket.injectWebSocket(server);
1543
+ const endpoint = `http://127.0.0.1:${port}`;
1544
+ _chunkR33VIC3Wcjs.logger.call(void 0, ).info({ msg: "test suite server listening", port });
1545
+ return {
1546
+ endpoint,
1547
+ namespace: "default",
1548
+ runnerName: "default",
1549
+ close: async () => {
1550
+ await new Promise((resolve) => server.close(() => resolve(void 0)));
1551
+ }
1552
+ };
1553
+ }
1554
+ async function runCli() {
1555
+ const result = await serveTestSuite();
1556
+ process.stdout.write(
1557
+ `${JSON.stringify({
1558
+ endpoint: result.endpoint,
1559
+ namespace: result.namespace,
1560
+ runnerName: result.runnerName
1561
+ })}
1562
+ `
1563
+ );
1564
+ const shutdown = async () => {
1565
+ await result.close();
1566
+ process.exit(0);
1567
+ };
1568
+ process.on("SIGINT", shutdown);
1569
+ process.on("SIGTERM", shutdown);
1570
+ }
1571
+ var mainPath = process.argv[1];
1572
+ if (mainPath && mainPath === _url.fileURLToPath.call(void 0, _chunkGBENOENJcjs.importMetaUrl)) {
1573
+ runCli().catch((err) => {
1574
+ _chunkR33VIC3Wcjs.logger.call(void 0, ).error({ msg: "serve-test-suite failed", error: err });
1575
+ process.exit(1);
1576
+ });
1577
+ }
1578
+
1579
+
1580
+ exports.serveTestSuite = serveTestSuite;
1581
+ //# sourceMappingURL=mod.cjs.map