rivetkit 2.0.37 → 2.0.38

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 (81) hide show
  1. package/dist/tsup/{chunk-XI335ZED.js → chunk-4U45T5KW.js} +6 -4
  2. package/dist/tsup/chunk-4U45T5KW.js.map +1 -0
  3. package/dist/tsup/{chunk-G4N7FZMM.cjs → chunk-6WLJW57U.cjs} +149 -93
  4. package/dist/tsup/chunk-6WLJW57U.cjs.map +1 -0
  5. package/dist/tsup/{chunk-ZQBSQ6H3.js → chunk-EEL32AJM.js} +140 -89
  6. package/dist/tsup/chunk-EEL32AJM.js.map +1 -0
  7. package/dist/tsup/{chunk-J6TX5EFW.js → chunk-FA6FGAEC.js} +62 -6
  8. package/dist/tsup/chunk-FA6FGAEC.js.map +1 -0
  9. package/dist/tsup/{chunk-22NKW7F5.cjs → chunk-FZQHTGQX.cjs} +9 -9
  10. package/dist/tsup/{chunk-22NKW7F5.cjs.map → chunk-FZQHTGQX.cjs.map} +1 -1
  11. package/dist/tsup/{chunk-4V7MS7SO.cjs → chunk-GFKZZG2A.cjs} +3 -3
  12. package/dist/tsup/{chunk-4V7MS7SO.cjs.map → chunk-GFKZZG2A.cjs.map} +1 -1
  13. package/dist/tsup/{chunk-LYYTV7DN.cjs → chunk-IRTVRBJA.cjs} +46 -46
  14. package/dist/tsup/{chunk-LYYTV7DN.cjs.map → chunk-IRTVRBJA.cjs.map} +1 -1
  15. package/dist/tsup/{chunk-B6BP74X3.cjs → chunk-IWXMFQDT.cjs} +113 -74
  16. package/dist/tsup/chunk-IWXMFQDT.cjs.map +1 -0
  17. package/dist/tsup/{chunk-RBA5AQTB.js → chunk-K2RNF2ZR.js} +5 -5
  18. package/dist/tsup/{chunk-5VVIFC6M.cjs → chunk-LULP6HM2.cjs} +381 -330
  19. package/dist/tsup/chunk-LULP6HM2.cjs.map +1 -0
  20. package/dist/tsup/{chunk-5XGZXH74.js → chunk-MIOU6BF3.js} +57 -18
  21. package/dist/tsup/chunk-MIOU6BF3.js.map +1 -0
  22. package/dist/tsup/{chunk-X5IX3YPO.cjs → chunk-O433HWWG.cjs} +6 -4
  23. package/dist/tsup/chunk-O433HWWG.cjs.map +1 -0
  24. package/dist/tsup/{chunk-FIUSIG6J.js → chunk-UUEZVDRL.js} +4 -4
  25. package/dist/tsup/{chunk-RXA3ZMCL.js → chunk-WIZ4JGP6.js} +2 -2
  26. package/dist/tsup/client/mod.cjs +5 -5
  27. package/dist/tsup/client/mod.d.cts +2 -2
  28. package/dist/tsup/client/mod.d.ts +2 -2
  29. package/dist/tsup/client/mod.js +4 -4
  30. package/dist/tsup/common/log.cjs +2 -2
  31. package/dist/tsup/common/log.js +1 -1
  32. package/dist/tsup/common/websocket.cjs +3 -3
  33. package/dist/tsup/common/websocket.js +2 -2
  34. package/dist/tsup/{config-CRuzI6n4.d.ts → config-CbIHPGKl.d.ts} +167 -56
  35. package/dist/tsup/{config--NjwiYlS.d.cts → config-CwJCQyP1.d.cts} +167 -56
  36. package/dist/tsup/{driver-BcmckRaF.d.ts → driver-CMN823Lc.d.ts} +1 -1
  37. package/dist/tsup/{driver-yKjYx9Yy.d.cts → driver-Lw_oORox.d.cts} +1 -1
  38. package/dist/tsup/driver-helpers/mod.cjs +3 -3
  39. package/dist/tsup/driver-helpers/mod.d.cts +2 -2
  40. package/dist/tsup/driver-helpers/mod.d.ts +2 -2
  41. package/dist/tsup/driver-helpers/mod.js +2 -2
  42. package/dist/tsup/driver-test-suite/mod.cjs +34 -34
  43. package/dist/tsup/driver-test-suite/mod.d.cts +2 -2
  44. package/dist/tsup/driver-test-suite/mod.d.ts +2 -2
  45. package/dist/tsup/driver-test-suite/mod.js +7 -7
  46. package/dist/tsup/mod.cjs +17 -7
  47. package/dist/tsup/mod.cjs.map +1 -1
  48. package/dist/tsup/mod.d.cts +4 -4
  49. package/dist/tsup/mod.d.ts +4 -4
  50. package/dist/tsup/mod.js +16 -6
  51. package/dist/tsup/test/mod.cjs +7 -7
  52. package/dist/tsup/test/mod.d.cts +1 -1
  53. package/dist/tsup/test/mod.d.ts +1 -1
  54. package/dist/tsup/test/mod.js +6 -6
  55. package/dist/tsup/utils.cjs +2 -2
  56. package/dist/tsup/utils.js +1 -1
  57. package/package.json +6 -4
  58. package/src/actor/config.ts +47 -0
  59. package/src/client/actor-conn.ts +70 -81
  60. package/src/client/actor-handle.ts +22 -12
  61. package/src/client/actor-query.ts +47 -0
  62. package/src/client/errors.ts +22 -58
  63. package/src/client/utils.ts +33 -0
  64. package/src/manager/driver.ts +1 -3
  65. package/src/manager-api/actors.ts +1 -20
  66. package/src/registry/config/index.ts +68 -0
  67. package/src/remote-manager-driver/mod.ts +11 -1
  68. package/src/serverless/router.test.ts +166 -0
  69. package/src/serverless/router.ts +58 -5
  70. package/src/utils/env-vars.ts +4 -1
  71. package/dist/tsup/chunk-5VVIFC6M.cjs.map +0 -1
  72. package/dist/tsup/chunk-5XGZXH74.js.map +0 -1
  73. package/dist/tsup/chunk-B6BP74X3.cjs.map +0 -1
  74. package/dist/tsup/chunk-G4N7FZMM.cjs.map +0 -1
  75. package/dist/tsup/chunk-J6TX5EFW.js.map +0 -1
  76. package/dist/tsup/chunk-X5IX3YPO.cjs.map +0 -1
  77. package/dist/tsup/chunk-XI335ZED.js.map +0 -1
  78. package/dist/tsup/chunk-ZQBSQ6H3.js.map +0 -1
  79. /package/dist/tsup/{chunk-RBA5AQTB.js.map → chunk-K2RNF2ZR.js.map} +0 -0
  80. /package/dist/tsup/{chunk-FIUSIG6J.js.map → chunk-UUEZVDRL.js.map} +0 -0
  81. /package/dist/tsup/{chunk-RXA3ZMCL.js.map → chunk-WIZ4JGP6.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  importWebSocket,
3
3
  logger
4
- } from "./chunk-RXA3ZMCL.js";
4
+ } from "./chunk-WIZ4JGP6.js";
5
5
  import {
6
6
  ACTOR_VERSIONED,
7
7
  ActionContext,
@@ -59,7 +59,7 @@ import {
59
59
  serializeWithEncoding,
60
60
  tryParseEndpoint,
61
61
  uint8ArrayToBase64
62
- } from "./chunk-5XGZXH74.js";
62
+ } from "./chunk-MIOU6BF3.js";
63
63
  import {
64
64
  EXTRA_ERROR_LOG,
65
65
  SinglePromiseQueue,
@@ -84,7 +84,7 @@ import {
84
84
  noopNext,
85
85
  promiseWithResolvers,
86
86
  stringifyError
87
- } from "./chunk-XI335ZED.js";
87
+ } from "./chunk-4U45T5KW.js";
88
88
  import {
89
89
  ActionNotFound,
90
90
  ActionTimedOut,
@@ -169,46 +169,39 @@ var ActorConnDisposed = class extends ActorClientError {
169
169
  super("Attempting to interact with a disposed actor connection.");
170
170
  }
171
171
  };
172
- var ActorSchedulingError = class _ActorSchedulingError extends ActorClientError {
172
+ function isSchedulingError(group, code) {
173
+ return group === "guard" && (code === "actor_ready_timeout" || code === "actor_runner_failed");
174
+ }
175
+ var ActorSchedulingError = class extends ActorError {
173
176
  actorId;
174
- errorType;
175
177
  details;
176
- constructor(actorId, error) {
177
- const message = _ActorSchedulingError.formatMessage(error);
178
- super(message);
178
+ constructor(group, code, actorId, details) {
179
+ super(
180
+ group,
181
+ code,
182
+ `Actor failed to start (${actorId}): ${JSON.stringify(details)}`,
183
+ { actorId, details }
184
+ );
179
185
  this.name = "ActorSchedulingError";
180
186
  this.actorId = actorId;
181
- this.errorType = Object.keys(error)[0];
182
- this.details = error;
183
- }
184
- static formatMessage(error) {
185
- if ("serverless_error" in error) {
186
- const se = error.serverless_error;
187
- if (typeof se === "string") {
188
- return `Serverless error: ${se.replace(/_/g, " ")}`;
189
- }
190
- if ("http_error" in se) {
191
- return `Serverless HTTP ${se.http_error.status_code}: ${se.http_error.body}`;
192
- }
193
- if ("connection_error" in se) {
194
- return `Serverless connection error: ${se.connection_error.message}`;
195
- }
196
- if ("invalid_payload" in se) {
197
- return `Invalid serverless payload: ${se.invalid_payload.message}`;
198
- }
199
- return "Unknown serverless error";
200
- }
201
- if ("no_capacity" in error) {
202
- return `No capacity available for runner: ${error.no_capacity.runner_name}`;
203
- }
204
- if ("runner_no_response" in error) {
205
- return `Runner ${error.runner_no_response.runner_id} did not respond`;
206
- }
207
- return "Unknown scheduling error";
187
+ this.details = details;
208
188
  }
209
189
  };
210
190
 
211
191
  // src/client/utils.ts
192
+ function parseWebSocketCloseReason(reason) {
193
+ const [mainPart, rayId] = reason.split("#");
194
+ const [group, code] = mainPart.split(".");
195
+ if (!group || !code) {
196
+ logger().warn({ msg: "failed to parse close reason", reason });
197
+ return void 0;
198
+ }
199
+ return {
200
+ group,
201
+ code,
202
+ rayId
203
+ };
204
+ }
212
205
  function messageLength(message) {
213
206
  if (message instanceof Blob) {
214
207
  return message.size;
@@ -738,9 +731,17 @@ var RemoteManagerDriver = class {
738
731
  (metadataData) => {
739
732
  if (metadataData.clientEndpoint) {
740
733
  this.#config.endpoint = metadataData.clientEndpoint;
734
+ if (metadataData.clientNamespace) {
735
+ this.#config.namespace = metadataData.clientNamespace;
736
+ }
737
+ if (metadataData.clientToken) {
738
+ this.#config.token = metadataData.clientToken;
739
+ }
741
740
  logger3().info({
742
- msg: "overriding cached client endpoint",
743
- endpoint: metadataData.clientEndpoint
741
+ msg: "overriding client endpoint",
742
+ endpoint: metadataData.clientEndpoint,
743
+ namespace: metadataData.clientNamespace,
744
+ token: metadataData.clientToken
744
745
  });
745
746
  }
746
747
  logger3().info({
@@ -1018,6 +1019,34 @@ async function queryActor(c, query, managerDriver) {
1018
1019
  logger().debug({ msg: "actor query result", actorId: actorOutput.actorId });
1019
1020
  return { actorId: actorOutput.actorId };
1020
1021
  }
1022
+ function getActorNameFromQuery(query) {
1023
+ if ("getForId" in query) return query.getForId.name;
1024
+ if ("getForKey" in query) return query.getForKey.name;
1025
+ if ("getOrCreateForKey" in query) return query.getOrCreateForKey.name;
1026
+ if ("create" in query) return query.create.name;
1027
+ throw new InvalidRequest("Invalid query format");
1028
+ }
1029
+ async function checkForSchedulingError(group, code, actorId, query, driver) {
1030
+ const name = getActorNameFromQuery(query);
1031
+ try {
1032
+ const actor = await driver.getForId({ name, actorId });
1033
+ if (actor == null ? void 0 : actor.error) {
1034
+ logger().info({
1035
+ msg: "found actor scheduling error",
1036
+ actorId,
1037
+ error: actor.error
1038
+ });
1039
+ return new ActorSchedulingError(group, code, actorId, actor.error);
1040
+ }
1041
+ } catch (err) {
1042
+ logger().warn({
1043
+ msg: "failed to fetch actor details for scheduling error check",
1044
+ actorId,
1045
+ error: stringifyError(err)
1046
+ });
1047
+ }
1048
+ return null;
1049
+ }
1021
1050
 
1022
1051
  // src/client/actor-conn.ts
1023
1052
  var CONNECT_SYMBOL = Symbol("connect");
@@ -1232,9 +1261,9 @@ var ActorConnRaw = class {
1232
1261
  });
1233
1262
  }
1234
1263
  });
1235
- ws.addEventListener("close", (ev) => {
1264
+ ws.addEventListener("close", async (ev) => {
1236
1265
  try {
1237
- this.#handleOnClose(ev);
1266
+ await this.#handleOnClose(ev);
1238
1267
  } catch (err) {
1239
1268
  logger().error({
1240
1269
  msg: "error in websocket close handler",
@@ -1337,17 +1366,23 @@ var ActorConnRaw = class {
1337
1366
  message,
1338
1367
  metadata
1339
1368
  });
1340
- let errorToThrow;
1341
- if (group === "guard" && (code === "actor_ready_timeout" || code === "actor_runner_failed") && this.#actorId) {
1342
- const schedulingError = await this.#checkForSchedulingError();
1343
- errorToThrow = schedulingError ?? new ActorError(group, code, message, metadata);
1344
- } else {
1345
- errorToThrow = new ActorError(
1369
+ let errorToThrow = new ActorError(
1370
+ group,
1371
+ code,
1372
+ message,
1373
+ metadata
1374
+ );
1375
+ if (isSchedulingError(group, code) && this.#actorId) {
1376
+ const schedulingError = await checkForSchedulingError(
1346
1377
  group,
1347
1378
  code,
1348
- message,
1349
- metadata
1379
+ this.#actorId,
1380
+ this.#actorQuery,
1381
+ this.#driver
1350
1382
  );
1383
+ if (schedulingError) {
1384
+ errorToThrow = schedulingError;
1385
+ }
1351
1386
  }
1352
1387
  if (this.#onOpenPromise) {
1353
1388
  this.#onOpenPromise.reject(errorToThrow);
@@ -1356,9 +1391,7 @@ var ActorConnRaw = class {
1356
1391
  inFlight.reject(errorToThrow);
1357
1392
  this.#actionsInFlight.delete(id);
1358
1393
  }
1359
- if (errorToThrow instanceof ActorError) {
1360
- this.#dispatchActorError(errorToThrow);
1361
- }
1394
+ this.#dispatchActorError(errorToThrow);
1362
1395
  }
1363
1396
  } else if (response.body.tag === "ActionResponse") {
1364
1397
  const { id: actionId } = response.body.val;
@@ -1386,7 +1419,7 @@ var ActorConnRaw = class {
1386
1419
  }
1387
1420
  }
1388
1421
  /** Called by the onclose event from drivers. */
1389
- #handleOnClose(event) {
1422
+ async #handleOnClose(event) {
1390
1423
  const closeEvent = event;
1391
1424
  const wasClean = closeEvent.wasClean;
1392
1425
  const wasConnected = this.#connStatus === "connected";
@@ -1403,12 +1436,46 @@ var ActorConnRaw = class {
1403
1436
  this.#rejectPendingPromises(new ActorConnDisposed(), true);
1404
1437
  } else {
1405
1438
  this.#setConnStatus("disconnected");
1406
- this.#rejectPendingPromises(
1407
- new Error(
1408
- `${wasClean ? "Connection closed" : "Connection lost"} (code: ${closeEvent.code}, reason: ${closeEvent.reason})`
1409
- ),
1410
- false
1411
- );
1439
+ let error;
1440
+ const reason = closeEvent.reason || "";
1441
+ const parsed = parseWebSocketCloseReason(reason);
1442
+ if (parsed) {
1443
+ const { group, code } = parsed;
1444
+ if (isSchedulingError(group, code) && this.#actorId) {
1445
+ const schedulingError = await checkForSchedulingError(
1446
+ group,
1447
+ code,
1448
+ this.#actorId,
1449
+ this.#actorQuery,
1450
+ this.#driver
1451
+ );
1452
+ if (schedulingError) {
1453
+ error = schedulingError;
1454
+ } else {
1455
+ error = new ActorError(
1456
+ group,
1457
+ code,
1458
+ `Connection closed: ${reason}`,
1459
+ void 0
1460
+ );
1461
+ }
1462
+ } else {
1463
+ error = new ActorError(
1464
+ group,
1465
+ code,
1466
+ `Connection closed: ${reason}`,
1467
+ void 0
1468
+ );
1469
+ }
1470
+ } else {
1471
+ error = new Error(
1472
+ `${wasClean ? "Connection closed" : "Connection lost"} (code: ${closeEvent.code}, reason: ${reason})`
1473
+ );
1474
+ }
1475
+ this.#rejectPendingPromises(error, false);
1476
+ if (error instanceof ActorError) {
1477
+ this.#dispatchActorError(error);
1478
+ }
1412
1479
  if (wasConnected) {
1413
1480
  logger().debug({
1414
1481
  msg: "triggering reconnect",
@@ -1488,36 +1555,6 @@ var ActorConnRaw = class {
1488
1555
  }
1489
1556
  }
1490
1557
  }
1491
- async #checkForSchedulingError() {
1492
- if (!this.#actorId) return null;
1493
- const query = this.#actorQuery;
1494
- const name = "getForId" in query ? query.getForId.name : "getForKey" in query ? query.getForKey.name : "getOrCreateForKey" in query ? query.getOrCreateForKey.name : "create" in query ? query.create.name : null;
1495
- if (!name) return null;
1496
- try {
1497
- const actor = await this.#driver.getForId({
1498
- name,
1499
- actorId: this.#actorId
1500
- });
1501
- if (actor == null ? void 0 : actor.error) {
1502
- logger().info({
1503
- msg: "found actor scheduling error",
1504
- actorId: this.#actorId,
1505
- error: actor.error
1506
- });
1507
- return new ActorSchedulingError(
1508
- this.#actorId,
1509
- actor.error
1510
- );
1511
- }
1512
- } catch (err) {
1513
- logger().warn({
1514
- msg: "failed to fetch actor details for scheduling error check",
1515
- actorId: this.#actorId,
1516
- error: stringifyError(err)
1517
- });
1518
- }
1519
- return null;
1520
- }
1521
1558
  #addEventSubscription(eventName, callback, once) {
1522
1559
  const listener = {
1523
1560
  callback,
@@ -1976,12 +2013,14 @@ var ActorHandleRaw = class {
1976
2013
  * @template Response - The type of the response returned by the action function.
1977
2014
  */
1978
2015
  async action(opts) {
2016
+ let actorId;
1979
2017
  try {
1980
- const { actorId } = await queryActor(
2018
+ const result = await queryActor(
1981
2019
  void 0,
1982
2020
  this.#actorQuery,
1983
2021
  this.#driver
1984
2022
  );
2023
+ actorId = result.actorId;
1985
2024
  logger().debug({ msg: "found actor for action", actorId });
1986
2025
  invariant5(actorId, "Missing actor ID");
1987
2026
  logger().debug({
@@ -2030,6 +2069,18 @@ var ActorHandleRaw = class {
2030
2069
  {},
2031
2070
  true
2032
2071
  );
2072
+ if (actorId && isSchedulingError(group, code)) {
2073
+ const schedulingError = await checkForSchedulingError(
2074
+ group,
2075
+ code,
2076
+ actorId,
2077
+ this.#actorQuery,
2078
+ this.#driver
2079
+ );
2080
+ if (schedulingError) {
2081
+ throw schedulingError;
2082
+ }
2083
+ }
2033
2084
  throw new ActorError(group, code, message, metadata);
2034
2085
  }
2035
2086
  }
@@ -4684,4 +4735,4 @@ export {
4684
4735
  RemoteManagerDriver,
4685
4736
  createClient
4686
4737
  };
4687
- //# sourceMappingURL=chunk-ZQBSQ6H3.js.map
4738
+ //# sourceMappingURL=chunk-EEL32AJM.js.map