rivetkit 2.0.5 → 2.0.7-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 (178) hide show
  1. package/dist/schemas/actor-persist/v1.ts +0 -6
  2. package/dist/tsup/actor-router-consts-B3Lu87yJ.d.cts +28 -0
  3. package/dist/tsup/actor-router-consts-B3Lu87yJ.d.ts +28 -0
  4. package/dist/tsup/{chunk-5YTI25C3.cjs → chunk-3MBP4WNC.cjs} +7 -7
  5. package/dist/tsup/{chunk-5YTI25C3.cjs.map → chunk-3MBP4WNC.cjs.map} +1 -1
  6. package/dist/tsup/chunk-3Y45CIF4.cjs +3726 -0
  7. package/dist/tsup/chunk-3Y45CIF4.cjs.map +1 -0
  8. package/dist/tsup/chunk-4GP7BZSR.js +102 -0
  9. package/dist/tsup/chunk-4GP7BZSR.js.map +1 -0
  10. package/dist/tsup/chunk-5ZOHIKWG.cjs +4071 -0
  11. package/dist/tsup/chunk-5ZOHIKWG.cjs.map +1 -0
  12. package/dist/tsup/{chunk-WADSS5X4.cjs → chunk-6EUWRXLT.cjs} +21 -7
  13. package/dist/tsup/chunk-6EUWRXLT.cjs.map +1 -0
  14. package/dist/tsup/{chunk-D7NWUCRK.cjs → chunk-6OVKCDSH.cjs} +6 -6
  15. package/dist/tsup/{chunk-D7NWUCRK.cjs.map → chunk-6OVKCDSH.cjs.map} +1 -1
  16. package/dist/tsup/{chunk-I5VTWPHW.js → chunk-7N56ZUC7.js} +3 -3
  17. package/dist/tsup/{chunk-LZIBTLEY.cjs → chunk-B3TLRM4Q.cjs} +13 -25
  18. package/dist/tsup/chunk-B3TLRM4Q.cjs.map +1 -0
  19. package/dist/tsup/chunk-BW5DPM6Z.js +4071 -0
  20. package/dist/tsup/chunk-BW5DPM6Z.js.map +1 -0
  21. package/dist/tsup/chunk-DFS77KAA.cjs +1046 -0
  22. package/dist/tsup/chunk-DFS77KAA.cjs.map +1 -0
  23. package/dist/tsup/{chunk-PG3K2LI7.js → chunk-E4UVJKSV.js} +2 -2
  24. package/dist/tsup/chunk-G4ABMAQY.cjs +102 -0
  25. package/dist/tsup/chunk-G4ABMAQY.cjs.map +1 -0
  26. package/dist/tsup/{chunk-CKA54YQN.js → chunk-GZVBFXBI.js} +3 -15
  27. package/dist/tsup/chunk-GZVBFXBI.js.map +1 -0
  28. package/dist/tsup/chunk-HPT3I7UU.js +3726 -0
  29. package/dist/tsup/chunk-HPT3I7UU.js.map +1 -0
  30. package/dist/tsup/chunk-JD54PXWP.js +1046 -0
  31. package/dist/tsup/chunk-JD54PXWP.js.map +1 -0
  32. package/dist/tsup/{chunk-PHSQJ6QI.cjs → chunk-K4ENQCC4.cjs} +3 -3
  33. package/dist/tsup/{chunk-PHSQJ6QI.cjs.map → chunk-K4ENQCC4.cjs.map} +1 -1
  34. package/dist/tsup/{chunk-WNGOBAA7.js → chunk-PUSQNDJG.js} +2 -2
  35. package/dist/tsup/{chunk-CFFKMUYH.js → chunk-RVP5RUSC.js} +20 -6
  36. package/dist/tsup/chunk-RVP5RUSC.js.map +1 -0
  37. package/dist/tsup/chunk-SAZCNSVY.cjs +259 -0
  38. package/dist/tsup/chunk-SAZCNSVY.cjs.map +1 -0
  39. package/dist/tsup/{chunk-YW6Y6VNE.js → chunk-SBKRVQS2.js} +9 -5
  40. package/dist/tsup/chunk-SBKRVQS2.js.map +1 -0
  41. package/dist/tsup/{chunk-FGFT4FVX.cjs → chunk-TZGUSEIJ.cjs} +14 -10
  42. package/dist/tsup/chunk-TZGUSEIJ.cjs.map +1 -0
  43. package/dist/tsup/chunk-YQ4XQYPM.js +259 -0
  44. package/dist/tsup/chunk-YQ4XQYPM.js.map +1 -0
  45. package/dist/tsup/client/mod.cjs +9 -9
  46. package/dist/tsup/client/mod.d.cts +7 -8
  47. package/dist/tsup/client/mod.d.ts +7 -8
  48. package/dist/tsup/client/mod.js +8 -8
  49. package/dist/tsup/common/log.cjs +3 -3
  50. package/dist/tsup/common/log.js +2 -2
  51. package/dist/tsup/common/websocket.cjs +4 -4
  52. package/dist/tsup/common/websocket.js +3 -3
  53. package/dist/tsup/{connection-BvE-Oq7t.d.ts → conn-DCSQgIlw.d.ts} +1605 -1353
  54. package/dist/tsup/{connection-DTzmWwU5.d.cts → conn-DdzHTm2E.d.cts} +1605 -1353
  55. package/dist/tsup/driver-helpers/mod.cjs +31 -5
  56. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  57. package/dist/tsup/driver-helpers/mod.d.cts +7 -8
  58. package/dist/tsup/driver-helpers/mod.d.ts +7 -8
  59. package/dist/tsup/driver-helpers/mod.js +33 -7
  60. package/dist/tsup/driver-test-suite/mod.cjs +319 -216
  61. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  62. package/dist/tsup/driver-test-suite/mod.d.cts +7 -7
  63. package/dist/tsup/driver-test-suite/mod.d.ts +7 -7
  64. package/dist/tsup/driver-test-suite/mod.js +588 -485
  65. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  66. package/dist/tsup/inspector/mod.cjs +17 -5
  67. package/dist/tsup/inspector/mod.cjs.map +1 -1
  68. package/dist/tsup/inspector/mod.d.cts +34 -7
  69. package/dist/tsup/inspector/mod.d.ts +34 -7
  70. package/dist/tsup/inspector/mod.js +20 -8
  71. package/dist/tsup/mod.cjs +10 -17
  72. package/dist/tsup/mod.cjs.map +1 -1
  73. package/dist/tsup/mod.d.cts +56 -9
  74. package/dist/tsup/mod.d.ts +56 -9
  75. package/dist/tsup/mod.js +17 -24
  76. package/dist/tsup/test/mod.cjs +11 -9
  77. package/dist/tsup/test/mod.cjs.map +1 -1
  78. package/dist/tsup/test/mod.d.cts +6 -7
  79. package/dist/tsup/test/mod.d.ts +6 -7
  80. package/dist/tsup/test/mod.js +10 -8
  81. package/dist/tsup/utils.cjs +4 -2
  82. package/dist/tsup/utils.cjs.map +1 -1
  83. package/dist/tsup/utils.d.cts +11 -1
  84. package/dist/tsup/utils.d.ts +11 -1
  85. package/dist/tsup/utils.js +3 -1
  86. package/package.json +8 -4
  87. package/src/actor/action.ts +1 -1
  88. package/src/actor/config.ts +1 -1
  89. package/src/actor/conn-drivers.ts +205 -0
  90. package/src/actor/conn-socket.ts +6 -0
  91. package/src/actor/{connection.ts → conn.ts} +78 -84
  92. package/src/actor/context.ts +1 -1
  93. package/src/actor/driver.ts +4 -43
  94. package/src/actor/instance.ts +162 -86
  95. package/src/actor/mod.ts +6 -14
  96. package/src/actor/persisted.ts +2 -5
  97. package/src/actor/protocol/old.ts +1 -1
  98. package/src/actor/router-endpoints.ts +147 -138
  99. package/src/actor/router.ts +89 -52
  100. package/src/actor/utils.ts +5 -1
  101. package/src/client/actor-conn.ts +163 -31
  102. package/src/client/actor-handle.ts +0 -1
  103. package/src/client/client.ts +2 -2
  104. package/src/client/config.ts +7 -0
  105. package/src/client/raw-utils.ts +1 -1
  106. package/src/client/utils.ts +1 -1
  107. package/src/common/actor-router-consts.ts +59 -0
  108. package/src/common/router.ts +2 -1
  109. package/src/common/versioned-data.ts +5 -5
  110. package/src/driver-helpers/mod.ts +15 -2
  111. package/src/driver-test-suite/mod.ts +11 -2
  112. package/src/driver-test-suite/test-inline-client-driver.ts +40 -22
  113. package/src/driver-test-suite/tests/actor-conn-state.ts +66 -22
  114. package/src/driver-test-suite/tests/actor-conn.ts +65 -126
  115. package/src/driver-test-suite/tests/actor-reconnect.ts +160 -0
  116. package/src/driver-test-suite/tests/actor-sleep.ts +0 -1
  117. package/src/driver-test-suite/tests/raw-websocket.ts +0 -35
  118. package/src/driver-test-suite/utils.ts +8 -3
  119. package/src/drivers/default.ts +8 -7
  120. package/src/drivers/engine/actor-driver.ts +67 -44
  121. package/src/drivers/engine/config.ts +4 -0
  122. package/src/drivers/file-system/actor.ts +0 -6
  123. package/src/drivers/file-system/global-state.ts +3 -14
  124. package/src/drivers/file-system/manager.ts +12 -8
  125. package/src/inspector/actor.ts +4 -3
  126. package/src/inspector/config.ts +10 -1
  127. package/src/inspector/mod.ts +1 -0
  128. package/src/inspector/utils.ts +23 -4
  129. package/src/manager/driver.ts +12 -2
  130. package/src/manager/gateway.ts +407 -0
  131. package/src/manager/protocol/query.ts +1 -1
  132. package/src/manager/router.ts +269 -468
  133. package/src/manager-api/actors.ts +61 -0
  134. package/src/manager-api/common.ts +4 -0
  135. package/src/mod.ts +1 -1
  136. package/src/registry/mod.ts +126 -12
  137. package/src/registry/serve.ts +8 -3
  138. package/src/remote-manager-driver/actor-http-client.ts +30 -19
  139. package/src/remote-manager-driver/actor-websocket-client.ts +45 -18
  140. package/src/remote-manager-driver/api-endpoints.ts +19 -21
  141. package/src/remote-manager-driver/api-utils.ts +10 -1
  142. package/src/remote-manager-driver/mod.ts +53 -53
  143. package/src/remote-manager-driver/ws-proxy.ts +2 -9
  144. package/src/test/mod.ts +6 -2
  145. package/src/utils.ts +21 -2
  146. package/dist/tsup/chunk-2MD57QF4.js +0 -1794
  147. package/dist/tsup/chunk-2MD57QF4.js.map +0 -1
  148. package/dist/tsup/chunk-B2QGJGZQ.js +0 -338
  149. package/dist/tsup/chunk-B2QGJGZQ.js.map +0 -1
  150. package/dist/tsup/chunk-CFFKMUYH.js.map +0 -1
  151. package/dist/tsup/chunk-CKA54YQN.js.map +0 -1
  152. package/dist/tsup/chunk-FGFT4FVX.cjs.map +0 -1
  153. package/dist/tsup/chunk-IRMBWX36.cjs +0 -1794
  154. package/dist/tsup/chunk-IRMBWX36.cjs.map +0 -1
  155. package/dist/tsup/chunk-L7QRXNWP.js +0 -6562
  156. package/dist/tsup/chunk-L7QRXNWP.js.map +0 -1
  157. package/dist/tsup/chunk-LZIBTLEY.cjs.map +0 -1
  158. package/dist/tsup/chunk-MRZS2J4X.cjs +0 -6562
  159. package/dist/tsup/chunk-MRZS2J4X.cjs.map +0 -1
  160. package/dist/tsup/chunk-RM2SVURR.cjs +0 -338
  161. package/dist/tsup/chunk-RM2SVURR.cjs.map +0 -1
  162. package/dist/tsup/chunk-WADSS5X4.cjs.map +0 -1
  163. package/dist/tsup/chunk-YW6Y6VNE.js.map +0 -1
  164. package/dist/tsup/common-CXCe7s6i.d.cts +0 -218
  165. package/dist/tsup/common-CXCe7s6i.d.ts +0 -218
  166. package/dist/tsup/router-endpoints-CctffZNL.d.cts +0 -65
  167. package/dist/tsup/router-endpoints-DFm1BglJ.d.ts +0 -65
  168. package/src/actor/generic-conn-driver.ts +0 -246
  169. package/src/common/fake-event-source.ts +0 -267
  170. package/src/manager-api/routes/actors-create.ts +0 -16
  171. package/src/manager-api/routes/actors-delete.ts +0 -4
  172. package/src/manager-api/routes/actors-get-by-id.ts +0 -7
  173. package/src/manager-api/routes/actors-get-or-create-by-id.ts +0 -29
  174. package/src/manager-api/routes/actors-get.ts +0 -7
  175. package/src/manager-api/routes/common.ts +0 -18
  176. /package/dist/tsup/{chunk-I5VTWPHW.js.map → chunk-7N56ZUC7.js.map} +0 -0
  177. /package/dist/tsup/{chunk-PG3K2LI7.js.map → chunk-E4UVJKSV.js.map} +0 -0
  178. /package/dist/tsup/{chunk-WNGOBAA7.js.map → chunk-PUSQNDJG.js.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  import * as cbor from "cbor-x";
2
- import type { Hono, Context as HonoContext } from "hono";
2
+ import type { Context as HonoContext } from "hono";
3
3
  import invariant from "invariant";
4
- import { ActorAlreadyExists } from "@/actor/errors";
5
4
  import { deserializeActorKey, serializeActorKey } from "@/actor/keys";
5
+ import { generateRandomString } from "@/actor/utils";
6
6
  import type { ClientConfig } from "@/client/client";
7
7
  import { noopNext } from "@/common/utils";
8
8
  import type {
@@ -14,21 +14,19 @@ import type {
14
14
  ManagerDisplayInformation,
15
15
  ManagerDriver,
16
16
  } from "@/driver-helpers/mod";
17
- import type { ManagerInspector } from "@/inspector/manager";
18
- import type { Encoding, RegistryConfig, UniversalWebSocket } from "@/mod";
19
- import type { RunConfig } from "@/registry/run-config";
17
+ import type { Encoding, UniversalWebSocket } from "@/mod";
20
18
  import { combineUrlPath } from "@/utils";
21
19
  import { sendHttpRequestToActor } from "./actor-http-client";
22
20
  import {
23
- buildGuardHeadersForWebSocket,
21
+ buildWebSocketProtocols,
24
22
  openWebSocketToActor,
25
23
  } from "./actor-websocket-client";
26
24
  import {
27
25
  createActor,
28
26
  destroyActor,
29
27
  getActor,
30
- getActorById,
31
- getOrCreateActorById,
28
+ getActorByKey,
29
+ getOrCreateActor,
32
30
  } from "./api-endpoints";
33
31
  import { EngineApiError, getEndpoint } from "./api-utils";
34
32
  import { logger } from "./log";
@@ -61,39 +59,30 @@ export class RemoteManagerDriver implements ManagerDriver {
61
59
  actorId,
62
60
  }: GetForIdInput): Promise<ActorOutput | undefined> {
63
61
  // Fetch from API if not in cache
64
- try {
65
- const response = await getActor(this.#config, actorId);
66
-
67
- // Validate name matches
68
- if (response.actor.name !== name) {
69
- logger().debug({
70
- msg: "actor name mismatch from api",
71
- actorId,
72
- apiName: response.actor.name,
73
- requestedName: name,
74
- });
75
- return undefined;
76
- }
77
-
78
- const keyRaw = response.actor.key;
79
- invariant(keyRaw, `actor ${actorId} should have key`);
80
- const key = deserializeActorKey(keyRaw);
62
+ const response = await getActor(this.#config, name, actorId);
63
+ const actor = response.actors[0];
64
+ if (!actor) return undefined;
81
65
 
82
- return {
66
+ // Validate name matches
67
+ if (actor.name !== name) {
68
+ logger().debug({
69
+ msg: "actor name mismatch from api",
83
70
  actorId,
84
- name,
85
- key,
86
- };
87
- } catch (error) {
88
- if (
89
- error instanceof EngineApiError &&
90
- (error as EngineApiError).group === "actor" &&
91
- (error as EngineApiError).code === "not_found"
92
- ) {
93
- return undefined;
94
- }
95
- throw error;
71
+ apiName: actor.name,
72
+ requestedName: name,
73
+ });
74
+ return undefined;
96
75
  }
76
+
77
+ const keyRaw = actor.key;
78
+ invariant(keyRaw, `actor ${actorId} should have key`);
79
+ const key = deserializeActorKey(keyRaw);
80
+
81
+ return {
82
+ actorId,
83
+ name,
84
+ key,
85
+ };
97
86
  }
98
87
 
99
88
  async getWithKey({
@@ -105,13 +94,11 @@ export class RemoteManagerDriver implements ManagerDriver {
105
94
 
106
95
  // If not in local cache, fetch by key from API
107
96
  try {
108
- const response = await getActorById(this.#config, name, key);
109
-
110
- if (!response.actor_id) {
111
- return undefined;
112
- }
97
+ const response = await getActorByKey(this.#config, name, key);
98
+ const actor = response.actors[0];
99
+ if (!actor) return undefined;
113
100
 
114
- const actorId = response.actor_id;
101
+ const actorId = actor.actor_id;
115
102
 
116
103
  logger().debug({
117
104
  msg: "getWithKey: found actor via api",
@@ -148,22 +135,24 @@ export class RemoteManagerDriver implements ManagerDriver {
148
135
  key,
149
136
  });
150
137
 
151
- const response = await getOrCreateActorById(this.#config, {
138
+ const { actor, created } = await getOrCreateActor(this.#config, {
152
139
  name,
153
140
  key: serializeActorKey(key),
154
141
  runner_name_selector: this.#config.runnerName,
155
- input: input ? cbor.encode(actorInput).toString("base64") : undefined,
142
+ input: actorInput
143
+ ? cbor.encode(actorInput).toString("base64")
144
+ : undefined,
156
145
  crash_policy: "sleep",
157
146
  });
158
147
 
159
- const actorId = response.actor_id;
148
+ const actorId = actor.actor_id;
160
149
 
161
150
  logger().info({
162
151
  msg: "getOrCreateWithKey: actor ready",
163
152
  actorId,
164
153
  name,
165
154
  key,
166
- created: response.created,
155
+ created,
167
156
  });
168
157
 
169
158
  return {
@@ -217,6 +206,8 @@ export class RemoteManagerDriver implements ManagerDriver {
217
206
  actorId: string,
218
207
  encoding: Encoding,
219
208
  params: unknown,
209
+ connId?: string,
210
+ connToken?: string,
220
211
  ): Promise<UniversalWebSocket> {
221
212
  return await openWebSocketToActor(
222
213
  this.#config,
@@ -224,6 +215,8 @@ export class RemoteManagerDriver implements ManagerDriver {
224
215
  actorId,
225
216
  encoding,
226
217
  params,
218
+ connId,
219
+ connToken,
227
220
  );
228
221
  }
229
222
 
@@ -241,7 +234,8 @@ export class RemoteManagerDriver implements ManagerDriver {
241
234
  actorId: string,
242
235
  encoding: Encoding,
243
236
  params: unknown,
244
- authData: unknown,
237
+ connId?: string,
238
+ connToken?: string,
245
239
  ): Promise<Response> {
246
240
  const upgradeWebSocket = this.#config.getUpgradeWebSocket?.();
247
241
  invariant(upgradeWebSocket, "missing getUpgradeWebSocket");
@@ -257,14 +251,16 @@ export class RemoteManagerDriver implements ManagerDriver {
257
251
  guardUrl,
258
252
  });
259
253
 
260
- // Build headers
261
- const headers = buildGuardHeadersForWebSocket(
254
+ // Build protocols
255
+ const protocols = buildWebSocketProtocols(
256
+ this.#config,
262
257
  actorId,
263
258
  encoding,
264
259
  params,
265
- authData,
260
+ connId,
261
+ connToken,
266
262
  );
267
- const args = await createWebSocketProxy(c, wsGuardUrl, headers);
263
+ const args = await createWebSocketProxy(c, wsGuardUrl, protocols);
268
264
 
269
265
  return await upgradeWebSocket(() => args)(c, noopNext());
270
266
  }
@@ -272,4 +268,8 @@ export class RemoteManagerDriver implements ManagerDriver {
272
268
  displayInformation(): ManagerDisplayInformation {
273
269
  return { name: "Remote", properties: {} };
274
270
  }
271
+
272
+ getOrCreateInspectorAccessToken() {
273
+ return generateRandomString();
274
+ }
275
275
  }
@@ -11,17 +11,10 @@ import { logger } from "./log";
11
11
  export async function createWebSocketProxy(
12
12
  c: HonoContext,
13
13
  targetUrl: string,
14
- headers: Record<string, string>,
14
+ protocols: string[],
15
15
  ): Promise<UpgradeWebSocketArgs> {
16
16
  const WebSocket = await importWebSocket();
17
17
 
18
- // HACK: Sanitize WebSocket-specific headers. If we don't do this, some WebSocket implementations (i.e. native WebSocket in Node.js) will fail to connect.
19
- for (const [k, v] of c.req.raw.headers.entries()) {
20
- if (!k.startsWith("sec-") && k !== "connection" && k !== "upgrade") {
21
- headers[k] = v;
22
- }
23
- }
24
-
25
18
  // WebSocket state
26
19
  interface WsState {
27
20
  targetWs?: WebSocket;
@@ -43,7 +36,7 @@ export async function createWebSocketProxy(
43
36
  }
44
37
 
45
38
  // Create WebSocket
46
- const targetWs = new WebSocket(targetUrl, { headers });
39
+ const targetWs = new WebSocket(targetUrl, protocols);
47
40
  state.targetWs = targetWs;
48
41
 
49
42
  // Setup connection promise
package/src/test/mod.ts CHANGED
@@ -5,7 +5,10 @@ import { type TestContext, vi } from "vitest";
5
5
  import { type Client, createClient } from "@/client/mod";
6
6
  import { chooseDefaultDriver } from "@/drivers/default";
7
7
  import { createFileSystemOrMemoryDriver } from "@/drivers/file-system/mod";
8
- import { getInspectorUrl } from "@/inspector/utils";
8
+ import {
9
+ configureInspectorAccessToken,
10
+ getInspectorUrl,
11
+ } from "@/inspector/utils";
9
12
  import { createManagerRouter } from "@/manager/router";
10
13
  import type { Registry } from "@/registry/mod";
11
14
  import { RunConfigSchema } from "@/registry/run-config";
@@ -27,11 +30,12 @@ function serve(registry: Registry<any>, inputConfig?: InputConfig): ServerType {
27
30
  const runConfig = RunConfigSchema.parse(inputConfig);
28
31
  const driver = inputConfig.driver ?? createFileSystemOrMemoryDriver(false);
29
32
  const managerDriver = driver.manager(registry.config, config);
33
+ configureInspectorAccessToken(config, managerDriver);
30
34
  const { router } = createManagerRouter(
31
35
  registry.config,
32
36
  runConfig,
33
37
  managerDriver,
34
- false,
38
+ undefined,
35
39
  );
36
40
 
37
41
  // Inject WebSocket
package/src/utils.ts CHANGED
@@ -77,6 +77,25 @@ const TIMEOUT_MAX = 2147483647; // 2^31-1
77
77
 
78
78
  export type LongTimeoutHandle = { abort: () => void };
79
79
 
80
+ /**
81
+ * Polyfill for Promise.withResolvers().
82
+ *
83
+ * This is specifically for Cloudflare Workers. Their implementation of Promise.withResolvers does not work correctly.
84
+ */
85
+ export function promiseWithResolvers<T>(): {
86
+ promise: Promise<T>;
87
+ resolve: (value: T | PromiseLike<T>) => void;
88
+ reject: (reason?: any) => void;
89
+ } {
90
+ let resolve!: (value: T | PromiseLike<T>) => void;
91
+ let reject!: (reason?: any) => void;
92
+ const promise = new Promise<T>((res, rej) => {
93
+ resolve = res;
94
+ reject = rej;
95
+ });
96
+ return { promise, resolve, reject };
97
+ }
98
+
80
99
  export function setLongTimeout(
81
100
  listener: () => void,
82
101
  after: number,
@@ -115,7 +134,7 @@ export class SinglePromiseQueue {
115
134
  runningDrainLoop?: Promise<void>;
116
135
 
117
136
  /** Pending resolver fro the currently queued entry. */
118
- #pending?: PromiseWithResolvers<void>;
137
+ #pending?: ReturnType<typeof promiseWithResolvers<void>>;
119
138
 
120
139
  /** Queue the next operation and return a promise that resolves when it flushes. */
121
140
  enqueue(op: () => Promise<void>): Promise<void> {
@@ -124,7 +143,7 @@ export class SinglePromiseQueue {
124
143
 
125
144
  // Ensure a shared resolver exists for all callers in this cycle
126
145
  if (!this.#pending) {
127
- this.#pending = Promise.withResolvers<void>();
146
+ this.#pending = promiseWithResolvers<void>();
128
147
  }
129
148
 
130
149
  const waitForThisCycle = this.#pending.promise;