rivetkit 2.3.12-rc.1 → 2.3.12-rc.2

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 (114) hide show
  1. package/dist/browser/client.d.ts +4 -0
  2. package/dist/browser/client.js +65 -32
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +1 -1
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/tsup/actor/errors.cjs +2 -2
  7. package/dist/tsup/actor/errors.d.cts +1 -1
  8. package/dist/tsup/actor/errors.d.ts +1 -1
  9. package/dist/tsup/actor/errors.js +1 -1
  10. package/dist/tsup/agent-os/index.cjs +2 -2
  11. package/dist/tsup/agent-os/index.cjs.map +1 -1
  12. package/dist/tsup/agent-os/index.d.cts +4 -0
  13. package/dist/tsup/agent-os/index.d.ts +4 -0
  14. package/dist/tsup/agent-os/index.js +2 -2
  15. package/dist/tsup/agent-os/index.js.map +1 -1
  16. package/dist/tsup/{chunk-OZWVDFCA.js → chunk-3JBE7REK.js} +4 -4
  17. package/dist/tsup/{chunk-MT33DKU4.js → chunk-6XR7IKBZ.js} +2 -2
  18. package/dist/tsup/{chunk-T4MKKCRF.cjs → chunk-APQQFCPR.cjs} +15 -10
  19. package/dist/tsup/chunk-APQQFCPR.cjs.map +1 -0
  20. package/dist/tsup/{chunk-A5BZEQOG.js → chunk-BK2JOGQQ.js} +62 -36
  21. package/dist/tsup/chunk-BK2JOGQQ.js.map +1 -0
  22. package/dist/tsup/{chunk-2D5PNV5A.cjs → chunk-CZKQ2UR5.cjs} +4 -4
  23. package/dist/tsup/{chunk-2D5PNV5A.cjs.map → chunk-CZKQ2UR5.cjs.map} +1 -1
  24. package/dist/tsup/{chunk-6ETWXXAZ.cjs → chunk-DXN6RPPQ.cjs} +214 -188
  25. package/dist/tsup/chunk-DXN6RPPQ.cjs.map +1 -0
  26. package/dist/tsup/{chunk-DIHAXOB7.cjs → chunk-GGGZ4TN7.cjs} +7 -7
  27. package/dist/tsup/{chunk-DIHAXOB7.cjs.map → chunk-GGGZ4TN7.cjs.map} +1 -1
  28. package/dist/tsup/{chunk-CMZBDX6Z.cjs → chunk-HRJHLVHZ.cjs} +3 -3
  29. package/dist/tsup/{chunk-CMZBDX6Z.cjs.map → chunk-HRJHLVHZ.cjs.map} +1 -1
  30. package/dist/tsup/{chunk-BEPAAID2.cjs → chunk-IU6TTH6L.cjs} +10 -10
  31. package/dist/tsup/{chunk-BEPAAID2.cjs.map → chunk-IU6TTH6L.cjs.map} +1 -1
  32. package/dist/tsup/{chunk-ZZ3WBRPD.js → chunk-IXBD7BXC.js} +15 -4
  33. package/dist/tsup/chunk-IXBD7BXC.js.map +1 -0
  34. package/dist/tsup/{chunk-ZTPFJOBX.js → chunk-JZGMOEEI.js} +3 -3
  35. package/dist/tsup/{chunk-5UYNV4W6.js → chunk-KPZQI3TG.js} +2 -2
  36. package/dist/tsup/{chunk-KRPA4UOE.js → chunk-KRQI5GXM.js} +2 -2
  37. package/dist/tsup/{chunk-4FC7TVS6.cjs → chunk-SPJORZMM.cjs} +15 -4
  38. package/dist/tsup/chunk-SPJORZMM.cjs.map +1 -0
  39. package/dist/tsup/{chunk-BZX4LYYD.cjs → chunk-WTD54OHL.cjs} +3 -3
  40. package/dist/tsup/{chunk-BZX4LYYD.cjs.map → chunk-WTD54OHL.cjs.map} +1 -1
  41. package/dist/tsup/{chunk-VJ4KLJO5.cjs → chunk-XBPOYV4E.cjs} +3 -3
  42. package/dist/tsup/{chunk-VJ4KLJO5.cjs.map → chunk-XBPOYV4E.cjs.map} +1 -1
  43. package/dist/tsup/{chunk-HVHDZDM2.js → chunk-YW75TS76.js} +8 -3
  44. package/dist/tsup/chunk-YW75TS76.js.map +1 -0
  45. package/dist/tsup/{chunk-JHHAMABO.js → chunk-ZEIH7S4M.js} +2 -2
  46. package/dist/tsup/client/mod.cjs +6 -6
  47. package/dist/tsup/client/mod.d.cts +5 -5
  48. package/dist/tsup/client/mod.d.ts +5 -5
  49. package/dist/tsup/client/mod.js +5 -5
  50. package/dist/tsup/common/log.cjs +3 -3
  51. package/dist/tsup/common/log.js +2 -2
  52. package/dist/tsup/common/websocket.cjs +4 -4
  53. package/dist/tsup/common/websocket.js +3 -3
  54. package/dist/tsup/{config-DTGoWdkG.d.cts → config-BXSV17G7.d.cts} +2 -2
  55. package/dist/tsup/{config-C4OSv0QP.d.ts → config-Bi1r6gI7.d.ts} +2 -2
  56. package/dist/tsup/{context-C6cvDNyk.d.cts → context-4fJemY0D.d.cts} +1 -1
  57. package/dist/tsup/{context-CMygeBxS.d.ts → context-D4sNYboo.d.ts} +1 -1
  58. package/dist/tsup/db/drizzle.cjs +3 -3
  59. package/dist/tsup/db/drizzle.js +2 -2
  60. package/dist/tsup/db/mod.cjs +4 -4
  61. package/dist/tsup/db/mod.js +3 -3
  62. package/dist/tsup/dynamic/mod.d.cts +3 -3
  63. package/dist/tsup/dynamic/mod.d.ts +3 -3
  64. package/dist/tsup/inspector/mod.cjs +6 -6
  65. package/dist/tsup/inspector/mod.js +5 -5
  66. package/dist/tsup/inspector/workflow.cjs +5 -5
  67. package/dist/tsup/inspector/workflow.js +4 -4
  68. package/dist/tsup/inspector-tab/mod.d.cts +4 -4
  69. package/dist/tsup/inspector-tab/mod.d.ts +4 -4
  70. package/dist/tsup/mod.cjs +112 -111
  71. package/dist/tsup/mod.cjs.map +1 -1
  72. package/dist/tsup/mod.d.cts +5 -5
  73. package/dist/tsup/mod.d.ts +5 -5
  74. package/dist/tsup/mod.js +10 -9
  75. package/dist/tsup/mod.js.map +1 -1
  76. package/dist/tsup/test/mod.cjs +7 -7
  77. package/dist/tsup/test/mod.d.cts +3 -3
  78. package/dist/tsup/test/mod.d.ts +3 -3
  79. package/dist/tsup/test/mod.js +5 -5
  80. package/dist/tsup/{utils-DQDCphrl.d.cts → utils-Bbz-3411.d.cts} +1 -1
  81. package/dist/tsup/{utils-CV0akuDD.d.ts → utils-BqdWVlzm.d.ts} +1 -1
  82. package/dist/tsup/{utils-CqDnC_PS.d.cts → utils-vvJQyygr.d.cts} +5 -0
  83. package/dist/tsup/{utils-CqDnC_PS.d.ts → utils-vvJQyygr.d.ts} +5 -0
  84. package/dist/tsup/utils.cjs +3 -3
  85. package/dist/tsup/utils.d.cts +2 -2
  86. package/dist/tsup/utils.d.ts +2 -2
  87. package/dist/tsup/utils.js +2 -2
  88. package/dist/tsup/workflow/mod.cjs +11 -11
  89. package/dist/tsup/workflow/mod.cjs.map +1 -1
  90. package/dist/tsup/workflow/mod.d.cts +5 -5
  91. package/dist/tsup/workflow/mod.d.ts +5 -5
  92. package/dist/tsup/workflow/mod.js +5 -5
  93. package/package.json +8 -8
  94. package/src/actor/errors.ts +29 -2
  95. package/src/client/actor-conn.ts +5 -4
  96. package/src/client/actor-handle.ts +32 -9
  97. package/src/client/actor-query.ts +8 -1
  98. package/src/client/errors.ts +2 -1
  99. package/src/client/raw-utils.ts +3 -5
  100. package/src/client/utils.ts +2 -0
  101. package/src/common/utils.ts +6 -0
  102. package/src/registry/native.ts +1 -0
  103. package/dist/tsup/chunk-4FC7TVS6.cjs.map +0 -1
  104. package/dist/tsup/chunk-6ETWXXAZ.cjs.map +0 -1
  105. package/dist/tsup/chunk-A5BZEQOG.js.map +0 -1
  106. package/dist/tsup/chunk-HVHDZDM2.js.map +0 -1
  107. package/dist/tsup/chunk-T4MKKCRF.cjs.map +0 -1
  108. package/dist/tsup/chunk-ZZ3WBRPD.js.map +0 -1
  109. /package/dist/tsup/{chunk-OZWVDFCA.js.map → chunk-3JBE7REK.js.map} +0 -0
  110. /package/dist/tsup/{chunk-MT33DKU4.js.map → chunk-6XR7IKBZ.js.map} +0 -0
  111. /package/dist/tsup/{chunk-ZTPFJOBX.js.map → chunk-JZGMOEEI.js.map} +0 -0
  112. /package/dist/tsup/{chunk-5UYNV4W6.js.map → chunk-KPZQI3TG.js.map} +0 -0
  113. /package/dist/tsup/{chunk-KRPA4UOE.js.map → chunk-KRQI5GXM.js.map} +0 -0
  114. /package/dist/tsup/{chunk-JHHAMABO.js.map → chunk-ZEIH7S4M.js.map} +0 -0
@@ -1,9 +1,9 @@
1
1
  import { WorkflowErrorEvent } from '@rivetkit/workflow-engine';
2
2
  export { Loop, TryBlockCatchKind, TryBlockConfig, TryBlockFailure, TryBlockResult, TryStepCatchKind, TryStepConfig, TryStepFailure, TryStepResult, WorkflowError, WorkflowErrorEvent } from '@rivetkit/workflow-engine';
3
- import { E as EventSchemaConfig, Q as QueueSchemaConfig, h as RunContext } from '../config-DTGoWdkG.cjs';
3
+ import { E as EventSchemaConfig, Q as QueueSchemaConfig, h as RunContext } from '../config-BXSV17G7.cjs';
4
4
  import { A as AnyDatabaseProvider } from '../config-ey2I2zz5.cjs';
5
- import { d as WorkflowContext } from '../context-C6cvDNyk.cjs';
6
- export { e as WorkflowBranchConfig, W as WorkflowBranchContextOf, a as WorkflowContextOf, f as WorkflowLoopConfig, b as WorkflowLoopContextOf, g as WorkflowStepConfig, h as WorkflowStepContext, c as WorkflowStepContextOf, i as WorkflowTryConfig, j as WorkflowTryStepConfig } from '../context-C6cvDNyk.cjs';
5
+ import { d as WorkflowContext } from '../context-4fJemY0D.cjs';
6
+ export { e as WorkflowBranchConfig, W as WorkflowBranchContextOf, a as WorkflowContextOf, f as WorkflowLoopConfig, b as WorkflowLoopContextOf, g as WorkflowStepConfig, h as WorkflowStepContext, c as WorkflowStepContextOf, i as WorkflowTryConfig, j as WorkflowTryStepConfig } from '../context-4fJemY0D.cjs';
7
7
  import 'zod/v4';
8
8
  import '@rivetkit/rivetkit-wasm';
9
9
  import 'zod';
@@ -11,9 +11,9 @@ import 'pino';
11
11
  import '@rivetkit/virtual-websocket';
12
12
  import '../inspector/workflow.cjs';
13
13
  import '@standard-schema/spec';
14
- import '../utils-DQDCphrl.cjs';
14
+ import '../utils-Bbz-3411.cjs';
15
15
  import 'hono';
16
- import '../utils-CqDnC_PS.cjs';
16
+ import '../utils-vvJQyygr.cjs';
17
17
  import 'hono/utils/http-status';
18
18
 
19
19
  interface WorkflowOptions<TState, TConnParams, TConnState, TVars, TInput, TDatabase extends AnyDatabaseProvider, TEvents extends EventSchemaConfig = Record<never, never>, TQueues extends QueueSchemaConfig = Record<never, never>> {
@@ -1,9 +1,9 @@
1
1
  import { WorkflowErrorEvent } from '@rivetkit/workflow-engine';
2
2
  export { Loop, TryBlockCatchKind, TryBlockConfig, TryBlockFailure, TryBlockResult, TryStepCatchKind, TryStepConfig, TryStepFailure, TryStepResult, WorkflowError, WorkflowErrorEvent } from '@rivetkit/workflow-engine';
3
- import { E as EventSchemaConfig, Q as QueueSchemaConfig, h as RunContext } from '../config-C4OSv0QP.js';
3
+ import { E as EventSchemaConfig, Q as QueueSchemaConfig, h as RunContext } from '../config-Bi1r6gI7.js';
4
4
  import { A as AnyDatabaseProvider } from '../config-ey2I2zz5.js';
5
- import { d as WorkflowContext } from '../context-CMygeBxS.js';
6
- export { e as WorkflowBranchConfig, W as WorkflowBranchContextOf, a as WorkflowContextOf, f as WorkflowLoopConfig, b as WorkflowLoopContextOf, g as WorkflowStepConfig, h as WorkflowStepContext, c as WorkflowStepContextOf, i as WorkflowTryConfig, j as WorkflowTryStepConfig } from '../context-CMygeBxS.js';
5
+ import { d as WorkflowContext } from '../context-D4sNYboo.js';
6
+ export { e as WorkflowBranchConfig, W as WorkflowBranchContextOf, a as WorkflowContextOf, f as WorkflowLoopConfig, b as WorkflowLoopContextOf, g as WorkflowStepConfig, h as WorkflowStepContext, c as WorkflowStepContextOf, i as WorkflowTryConfig, j as WorkflowTryStepConfig } from '../context-D4sNYboo.js';
7
7
  import 'zod/v4';
8
8
  import '@rivetkit/rivetkit-wasm';
9
9
  import 'zod';
@@ -11,9 +11,9 @@ import 'pino';
11
11
  import '@rivetkit/virtual-websocket';
12
12
  import '../inspector/workflow.js';
13
13
  import '@standard-schema/spec';
14
- import '../utils-CV0akuDD.js';
14
+ import '../utils-BqdWVlzm.js';
15
15
  import 'hono';
16
- import '../utils-CqDnC_PS.js';
16
+ import '../utils-vvJQyygr.js';
17
17
  import 'hono/utils/http-status';
18
18
 
19
19
  interface WorkflowOptions<TState, TConnParams, TConnState, TVars, TInput, TDatabase extends AnyDatabaseProvider, TEvents extends EventSchemaConfig = Record<never, never>, TQueues extends QueueSchemaConfig = Record<never, never>> {
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  createWorkflowInspectorAdapter
3
- } from "../chunk-OZWVDFCA.js";
4
- import "../chunk-MT33DKU4.js";
5
- import "../chunk-5UYNV4W6.js";
3
+ } from "../chunk-3JBE7REK.js";
4
+ import "../chunk-6XR7IKBZ.js";
6
5
  import {
7
6
  ACTOR_CONTEXT_INTERNAL_SYMBOL,
8
7
  defineRunHandler
9
8
  } from "../chunk-6W5VGLFT.js";
9
+ import "../chunk-KPZQI3TG.js";
10
10
  import {
11
11
  makeWorkflowKey,
12
12
  workflowStoragePrefix
13
13
  } from "../chunk-JI6GZ2C2.js";
14
14
  import {
15
15
  stringifyError
16
- } from "../chunk-HVHDZDM2.js";
16
+ } from "../chunk-YW75TS76.js";
17
17
  import {
18
18
  RivetError,
19
19
  isActorAbortedError
20
- } from "../chunk-ZZ3WBRPD.js";
20
+ } from "../chunk-IXBD7BXC.js";
21
21
 
22
22
  // src/workflow/mod.ts
23
23
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rivetkit",
3
- "version": "2.3.12-rc.1",
3
+ "version": "2.3.12-rc.2",
4
4
  "description": "Lightweight libraries for building stateful actors on edge platforms",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -211,14 +211,14 @@
211
211
  "@hono/zod-openapi": "^1.1.5",
212
212
  "@rivet-dev/agent-os-core": "^0.1.1",
213
213
  "@rivetkit/bare-ts": "^0.6.2",
214
- "@rivetkit/engine-cli": "2.3.12-rc.1",
215
- "@rivetkit/engine-envoy-protocol": "2.3.12-rc.1",
214
+ "@rivetkit/engine-cli": "2.3.12-rc.2",
215
+ "@rivetkit/engine-envoy-protocol": "2.3.12-rc.2",
216
216
  "@rivetkit/on-change": "6.0.1",
217
- "@rivetkit/rivetkit-napi": "2.3.12-rc.1",
218
- "@rivetkit/rivetkit-wasm": "2.3.12-rc.1",
219
- "@rivetkit/traces": "2.3.12-rc.1",
220
- "@rivetkit/virtual-websocket": "2.3.12-rc.1",
221
- "@rivetkit/workflow-engine": "2.3.12-rc.1",
217
+ "@rivetkit/rivetkit-napi": "2.3.12-rc.2",
218
+ "@rivetkit/rivetkit-wasm": "2.3.12-rc.2",
219
+ "@rivetkit/traces": "2.3.12-rc.2",
220
+ "@rivetkit/virtual-websocket": "2.3.12-rc.2",
221
+ "@rivetkit/workflow-engine": "2.3.12-rc.2",
222
222
  "cbor-x": "^1.6.0",
223
223
  "drizzle-orm": "^0.44.2",
224
224
  "hono": "^4.7.0",
@@ -12,6 +12,8 @@ export interface RivetErrorOptions extends ErrorOptions {
12
12
  public?: boolean;
13
13
  /** Metadata associated with this error. */
14
14
  metadata?: unknown;
15
+ /** Request identifier used to correlate this error with engine logs. */
16
+ rayId?: string;
15
17
  /** Explicit HTTP status override for router responses. */
16
18
  statusCode?: number;
17
19
  /** Actor context associated with this error. */
@@ -31,6 +33,7 @@ export interface RivetErrorLike {
31
33
  code: string;
32
34
  message: string;
33
35
  metadata?: unknown;
36
+ rayId?: string;
34
37
  public?: boolean;
35
38
  statusCode?: number;
36
39
  actor?: ActorSpecifier;
@@ -38,6 +41,14 @@ export interface RivetErrorLike {
38
41
 
39
42
  export interface BridgeRivetErrorPayload extends RivetErrorLike {}
40
43
 
44
+ /**
45
+ * Shape as it arrives from the native bridge, where an absent ray ID serializes
46
+ * to null. Normalized to a BridgeRivetErrorPayload before validation.
47
+ */
48
+ interface NativeBridgeErrorPayload extends Omit<BridgeRivetErrorPayload, "rayId"> {
49
+ rayId?: string | null;
50
+ }
51
+
41
52
  export interface UserErrorOptions extends ErrorOptions {
42
53
  /**
43
54
  * Machine readable code for this error. Useful for catching different types of
@@ -59,6 +70,7 @@ function looksLikeRivetErrorOptions(
59
70
  value !== null &&
60
71
  ("public" in value ||
61
72
  "metadata" in value ||
73
+ "rayId" in value ||
62
74
  "statusCode" in value ||
63
75
  "actor" in value ||
64
76
  "cause" in value)
@@ -94,6 +106,9 @@ export function isRivetErrorLike(
94
106
  typeof error.code === "string" &&
95
107
  "message" in error &&
96
108
  typeof error.message === "string" &&
109
+ (!("rayId" in error) ||
110
+ error.rayId === undefined ||
111
+ typeof error.rayId === "string") &&
97
112
  (!("__type" in error) || isTypedErrorTag(error.__type))
98
113
  );
99
114
  }
@@ -128,6 +143,7 @@ export class RivetError extends Error {
128
143
 
129
144
  public public: boolean;
130
145
  public metadata?: unknown;
146
+ public readonly rayId?: string;
131
147
  public statusCode: number;
132
148
  public actor?: ActorSpecifier;
133
149
  public readonly group: string;
@@ -161,6 +177,7 @@ export class RivetError extends Error {
161
177
  this.code = code;
162
178
  this.public = normalized.public ?? false;
163
179
  this.metadata = normalized.metadata;
180
+ this.rayId = normalized.rayId ?? undefined;
164
181
  this.statusCode = normalized.statusCode ?? (this.public ? 400 : 500);
165
182
  this.actor = normalized.actor;
166
183
  }
@@ -205,6 +222,7 @@ export function toRivetError(
205
222
  public: error.public,
206
223
  statusCode: error.statusCode,
207
224
  metadata: error.metadata,
225
+ rayId: error.rayId,
208
226
  actor: error.actor,
209
227
  cause: error instanceof Error ? error.cause : undefined,
210
228
  });
@@ -218,6 +236,7 @@ export function toRivetError(
218
236
  public: fallback?.public,
219
237
  statusCode: fallback?.statusCode,
220
238
  metadata: fallback?.metadata,
239
+ rayId: fallback?.rayId,
221
240
  actor: fallback?.actor,
222
241
  cause: error instanceof Error ? error : undefined,
223
242
  },
@@ -230,6 +249,7 @@ export function encodeBridgeRivetError(error: RivetErrorLike): string {
230
249
  code: error.code,
231
250
  message: error.message,
232
251
  metadata: error.metadata,
252
+ rayId: error.rayId,
233
253
  public: error.public,
234
254
  statusCode: error.statusCode,
235
255
  actor: error.actor,
@@ -244,9 +264,14 @@ export function decodeBridgeRivetErrorPayload(
244
264
  }
245
265
 
246
266
  try {
247
- const payload = JSON.parse(
267
+ const raw = JSON.parse(
248
268
  value.slice(BRIDGE_RIVET_ERROR_PREFIX.length),
249
- ) as BridgeRivetErrorPayload;
269
+ ) as NativeBridgeErrorPayload;
270
+ // Coerce the native bridge's null ray ID to undefined before validation.
271
+ const payload: BridgeRivetErrorPayload = {
272
+ ...raw,
273
+ rayId: raw.rayId ?? undefined,
274
+ };
250
275
  if (!isRivetErrorLike(payload)) {
251
276
  return undefined;
252
277
  }
@@ -272,6 +297,7 @@ export function decodeBridgeRivetError(value: string): RivetError | undefined {
272
297
 
273
298
  return new RivetError(payload.group, payload.code, payload.message, {
274
299
  metadata: payload.metadata,
300
+ rayId: payload.rayId,
275
301
  public: payload.public,
276
302
  statusCode: payload.statusCode,
277
303
  actor: payload.actor ?? undefined,
@@ -303,6 +329,7 @@ export function internalError(
303
329
  public: options?.public,
304
330
  statusCode: options?.statusCode,
305
331
  metadata: options?.metadata,
332
+ rayId: options?.rayId,
306
333
  actor: options?.actor,
307
334
  cause: options?.cause,
308
335
  },
@@ -874,7 +874,7 @@ export class ActorConnRaw {
874
874
  const parsed = parseWebSocketCloseReason(reason);
875
875
 
876
876
  if (parsed) {
877
- const { group, code } = parsed;
877
+ const { group, code, rayId } = parsed;
878
878
 
879
879
  if (this.#shouldReconnectForStaleActor(group, code)) {
880
880
  this.#clearResolvedActorIdentity();
@@ -883,7 +883,7 @@ export class ActorConnRaw {
883
883
  group,
884
884
  code,
885
885
  `Connection closed: ${reason}`,
886
- undefined,
886
+ { rayId },
887
887
  ),
888
888
  );
889
889
  return;
@@ -897,6 +897,7 @@ export class ActorConnRaw {
897
897
  this.#actorId,
898
898
  this.#actorResolutionState,
899
899
  this.#driver,
900
+ rayId,
900
901
  );
901
902
  if (schedulingError) {
902
903
  error = schedulingError;
@@ -905,7 +906,7 @@ export class ActorConnRaw {
905
906
  group,
906
907
  code,
907
908
  `Connection closed: ${reason}`,
908
- undefined,
909
+ { rayId },
909
910
  );
910
911
  }
911
912
  } else {
@@ -913,7 +914,7 @@ export class ActorConnRaw {
913
914
  group,
914
915
  code,
915
916
  `Connection closed: ${reason}`,
916
- undefined,
917
+ { rayId },
917
918
  );
918
919
  }
919
920
 
@@ -166,7 +166,7 @@ export class ActorHandleRaw {
166
166
  },
167
167
  }).send(name, body, options as any);
168
168
  } catch (err) {
169
- const { group, code, message, metadata, actor } =
169
+ const { group, code, message, metadata, rayId, actor } =
170
170
  deconstructError(err, true);
171
171
 
172
172
  if (
@@ -189,6 +189,7 @@ export class ActorHandleRaw {
189
189
  actorId,
190
190
  attempt,
191
191
  maxAttempts,
192
+ rayId,
192
193
  )
193
194
  ) {
194
195
  useQueryTarget = true;
@@ -227,6 +228,7 @@ export class ActorHandleRaw {
227
228
 
228
229
  throw new ActorError(group, code, message, {
229
230
  metadata,
231
+ rayId,
230
232
  actor,
231
233
  });
232
234
  }
@@ -357,7 +359,7 @@ export class ActorHandleRaw {
357
359
  }
358
360
  return output;
359
361
  } catch (err) {
360
- const { group, code, message, metadata, actor } =
362
+ const { group, code, message, metadata, rayId, actor } =
361
363
  deconstructError(err, true);
362
364
 
363
365
  if (
@@ -367,6 +369,7 @@ export class ActorHandleRaw {
367
369
  actorId,
368
370
  attempt,
369
371
  maxAttempts,
372
+ rayId,
370
373
  )
371
374
  ) {
372
375
  useQueryTarget = true;
@@ -398,7 +401,7 @@ export class ActorHandleRaw {
398
401
  "actor",
399
402
  "not_found",
400
403
  "The actor does not exist or was destroyed.",
401
- { metadata, actor },
404
+ { metadata, rayId, actor },
402
405
  );
403
406
  }
404
407
 
@@ -419,7 +422,11 @@ export class ActorHandleRaw {
419
422
  continue;
420
423
  }
421
424
 
422
- throw new ActorError(group, code, message, { metadata, actor });
425
+ throw new ActorError(group, code, message, {
426
+ metadata,
427
+ rayId,
428
+ actor,
429
+ });
423
430
  }
424
431
  }
425
432
 
@@ -514,6 +521,7 @@ export class ActorHandleRaw {
514
521
  actorId: string | undefined,
515
522
  attempt: number,
516
523
  maxAttempts: number,
524
+ rayId?: string,
517
525
  ): Promise<boolean> {
518
526
  if (
519
527
  !isDynamicActorQuery(this.#actorResolutionState) ||
@@ -530,6 +538,7 @@ export class ActorHandleRaw {
530
538
  actorId,
531
539
  this.#actorResolutionState,
532
540
  this.#driver,
541
+ rayId,
533
542
  );
534
543
  if (schedulingError) {
535
544
  throw schedulingError;
@@ -679,7 +688,7 @@ export class ActorHandleRaw {
679
688
  }
680
689
  return response;
681
690
  } catch (err) {
682
- const { group, code, message, metadata, actor } =
691
+ const { group, code, message, metadata, rayId, actor } =
683
692
  deconstructError(err, true);
684
693
 
685
694
  if (
@@ -689,6 +698,7 @@ export class ActorHandleRaw {
689
698
  actorId,
690
699
  attempt,
691
700
  maxAttempts,
701
+ rayId,
692
702
  )
693
703
  ) {
694
704
  useQueryTarget = true;
@@ -725,7 +735,11 @@ export class ActorHandleRaw {
725
735
  continue;
726
736
  }
727
737
 
728
- throw new ActorError(group, code, message, { metadata, actor });
738
+ throw new ActorError(group, code, message, {
739
+ metadata,
740
+ rayId,
741
+ actor,
742
+ });
729
743
  }
730
744
  }
731
745
 
@@ -750,7 +764,7 @@ export class ActorHandleRaw {
750
764
  return null;
751
765
  }
752
766
 
753
- const { group, code } = error;
767
+ const { group, code, rayId } = error;
754
768
 
755
769
  if (
756
770
  await this.#shouldRetrySchedulingError(
@@ -759,6 +773,7 @@ export class ActorHandleRaw {
759
773
  actorId,
760
774
  attempt,
761
775
  maxAttempts,
776
+ rayId,
762
777
  )
763
778
  ) {
764
779
  return {
@@ -802,6 +817,7 @@ export class ActorHandleRaw {
802
817
  code: string;
803
818
  message: string;
804
819
  metadata?: unknown;
820
+ rayId?: string;
805
821
  actor?: ActorSpecifier;
806
822
  } | null> {
807
823
  if (response.ok) {
@@ -814,7 +830,7 @@ export class ActorHandleRaw {
814
830
  : this.#encoding;
815
831
 
816
832
  try {
817
- return deserializeWithEncoding<
833
+ const error = deserializeWithEncoding<
818
834
  protocol.HttpResponseError,
819
835
  HttpResponseErrorJson,
820
836
  {
@@ -822,6 +838,7 @@ export class ActorHandleRaw {
822
838
  code: string;
823
839
  message: string;
824
840
  metadata?: unknown;
841
+ rayId?: string;
825
842
  actor?: ActorSpecifier;
826
843
  }
827
844
  >(
@@ -854,6 +871,10 @@ export class ActorHandleRaw {
854
871
  : undefined,
855
872
  }),
856
873
  );
874
+ return {
875
+ ...error,
876
+ rayId: response.headers.get("x-rivet-ray-id") ?? undefined,
877
+ };
857
878
  } catch {
858
879
  return null;
859
880
  }
@@ -927,7 +948,9 @@ export class ActorHandleRaw {
927
948
  "actor",
928
949
  "reload_failed",
929
950
  `reload failed with status ${response.status}: ${body}`,
930
- {},
951
+ {
952
+ rayId: response.headers.get("x-rivet-ray-id") ?? undefined,
953
+ },
931
954
  );
932
955
  }
933
956
  }
@@ -67,6 +67,7 @@ export async function checkForSchedulingError(
67
67
  actorId: string,
68
68
  query: ActorQuery,
69
69
  driver: EngineControlClient,
70
+ rayId?: string,
70
71
  ): Promise<ActorSchedulingError | null> {
71
72
  const name = getActorNameFromQuery(query);
72
73
 
@@ -79,7 +80,13 @@ export async function checkForSchedulingError(
79
80
  actorId,
80
81
  error: actor.error,
81
82
  });
82
- return actorSchedulingError(group, code, actorId, actor.error);
83
+ return actorSchedulingError(
84
+ group,
85
+ code,
86
+ actorId,
87
+ actor.error,
88
+ rayId,
89
+ );
83
90
  }
84
91
  } catch (err) {
85
92
  logger().warn({
@@ -51,12 +51,13 @@ export function actorSchedulingError(
51
51
  code: string,
52
52
  actorId: string,
53
53
  details: unknown,
54
+ rayId?: string,
54
55
  ): RivetError {
55
56
  return new RivetError(
56
57
  group,
57
58
  code,
58
59
  `Actor failed to start (${actorId}): ${JSON.stringify(details)}`,
59
- { metadata: { actorId, details } },
60
+ { metadata: { actorId, details }, rayId },
60
61
  );
61
62
  }
62
63
 
@@ -99,11 +99,9 @@ export async function rawHttpFetch(
99
99
  return driver.sendRequest(target, proxyRequest, options);
100
100
  } catch (err) {
101
101
  // Standardize to ClientActorError instead of the native backend error
102
- const { group, code, message, metadata, actor } = deconstructError(
103
- err,
104
- true,
105
- );
106
- throw new ActorError(group, code, message, { metadata, actor });
102
+ const { group, code, message, metadata, rayId, actor } =
103
+ deconstructError(err, true);
104
+ throw new ActorError(group, code, message, { metadata, rayId, actor });
107
105
  }
108
106
  }
109
107
 
@@ -215,6 +215,7 @@ export async function sendHttpRequest<
215
215
  code: responseData.code,
216
216
  message: responseData.message,
217
217
  metadata: responseData.metadata,
218
+ rayId,
218
219
  actorId: responseData.actor?.actorId,
219
220
  generation: responseData.actor?.generation,
220
221
  actorKey: responseData.actor?.key,
@@ -226,6 +227,7 @@ export async function sendHttpRequest<
226
227
  responseData.message,
227
228
  {
228
229
  metadata: responseData.metadata,
230
+ rayId: rayId ?? undefined,
229
231
  actor: responseData.actor,
230
232
  },
231
233
  );
@@ -44,6 +44,7 @@ export interface DeconstructedError {
44
44
  code: string;
45
45
  message: string;
46
46
  metadata?: unknown;
47
+ rayId?: string;
47
48
  actor?: errors.ActorSpecifier;
48
49
  }
49
50
 
@@ -80,6 +81,7 @@ export function deconstructError(
80
81
  let code: string;
81
82
  let message: string;
82
83
  let metadata: unknown;
84
+ let rayId: string | undefined;
83
85
  let actor: errors.ActorSpecifier | undefined;
84
86
  // Structured errors from core or from pre-built `RivetError` instances are canonical.
85
87
  // Only unstructured errors go through the classifier below.
@@ -96,6 +98,7 @@ export function deconstructError(
96
98
  code = error.code;
97
99
  message = error.message;
98
100
  metadata = error.metadata;
101
+ rayId = error.rayId;
99
102
  actor = error.actor;
100
103
  } else if (errors.ActorError.isActorError(error) && error.public) {
101
104
  // Check if error has statusCode (could be ActorError instance or DeconstructedError)
@@ -107,6 +110,7 @@ export function deconstructError(
107
110
  code = error.code;
108
111
  message = getErrorMessage(error);
109
112
  metadata = error.metadata;
113
+ rayId = error.rayId;
110
114
  actor = error.actor;
111
115
  } else if (exposeInternalError) {
112
116
  if (errors.ActorError.isActorError(error)) {
@@ -116,6 +120,7 @@ export function deconstructError(
116
120
  code = error.code;
117
121
  message = getErrorMessage(error);
118
122
  metadata = error.metadata;
123
+ rayId = error.rayId;
119
124
  actor = error.actor;
120
125
  } else {
121
126
  statusCode = 500;
@@ -146,6 +151,7 @@ export function deconstructError(
146
151
  code,
147
152
  message,
148
153
  metadata,
154
+ rayId,
149
155
  actor,
150
156
  };
151
157
  }
@@ -835,6 +835,7 @@ function encodeNativeCallbackError(error: unknown): Error {
835
835
  group: structuredError.group,
836
836
  code: structuredError.code,
837
837
  metadata: structuredError.metadata,
838
+ rayId: structuredError.rayId,
838
839
  });
839
840
  }
840
841
 
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/actors/actors/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-4FC7TVS6.cjs","../../src/actor/errors.ts"],"names":[],"mappings":"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A,MAAA;AACA,MAAA;AACD,IAAA;AACD,EAAA;AACD;AAEgB;AACR,EAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACC,MAAA;AACD,IAAA;AACD,EAAA;AACD;AAEgB;AACR,EAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACC,MAAA;AACA,MAAA;AACD,IAAA;AACD,EAAA;AACD;AAEgB;AACR,EAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AAGE,IAAA;AACH,EAAA;AACD;AAEgB;AACR,EAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACE,IAAA;AACH,EAAA;AACD;AAOgB;AACR,EAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACC,MAAA;AACA,MAAA;AACA,MAAA;AACC,QAAA;AACA,QAAA;AACA,QAAA;AAGD,MAAA;AACD,IAAA;AACD,EAAA;AACD;AAEgB;AACR,EAAA;AACN,IAAA;AACA,IAAA;AACA,EAAA;AACF;AAEgB;AACR,EAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACD,EAAA;AACD;ADvKU;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/actors/actors/rivetkit-typescript/packages/rivetkit/dist/tsup/chunk-4FC7TVS6.cjs","sourcesContent":[null,"import type { DeconstructedError } from \"@/common/utils\";\n\nexport const INTERNAL_ERROR_CODE = \"internal_error\";\nexport const INTERNAL_ERROR_DESCRIPTION = \"An internal error occurred\";\nexport type InternalErrorMetadata = Record<string, never>;\n\nexport const USER_ERROR_CODE = \"user_error\";\nexport const BRIDGE_RIVET_ERROR_PREFIX = \"__RIVET_ERROR_JSON__:\";\n\nexport interface RivetErrorOptions extends ErrorOptions {\n\t/** Error data can safely be serialized in a response to the client. */\n\tpublic?: boolean;\n\t/** Metadata associated with this error. */\n\tmetadata?: unknown;\n\t/** Explicit HTTP status override for router responses. */\n\tstatusCode?: number;\n\t/** Actor context associated with this error. */\n\tactor?: ActorSpecifier;\n}\n\n/** Identifies the actor that was handling work when an error was produced. */\nexport interface ActorSpecifier {\n\tactorId: string;\n\tgeneration: number;\n\tkey?: string;\n}\n\nexport interface RivetErrorLike {\n\t__type?: \"ActorError\" | \"RivetError\";\n\tgroup: string;\n\tcode: string;\n\tmessage: string;\n\tmetadata?: unknown;\n\tpublic?: boolean;\n\tstatusCode?: number;\n\tactor?: ActorSpecifier;\n}\n\nexport interface BridgeRivetErrorPayload extends RivetErrorLike {}\n\nexport interface UserErrorOptions extends ErrorOptions {\n\t/**\n\t * Machine readable code for this error. Useful for catching different types of\n\t * errors in try-catch.\n\t */\n\tcode?: string;\n\t/**\n\t * Additional metadata related to the error. Useful for understanding context\n\t * about the error.\n\t */\n\tmetadata?: unknown;\n}\n\nfunction looksLikeRivetErrorOptions(\n\tvalue: unknown,\n): value is RivetErrorOptions {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t(\"public\" in value ||\n\t\t\t\"metadata\" in value ||\n\t\t\t\"statusCode\" in value ||\n\t\t\t\"actor\" in value ||\n\t\t\t\"cause\" in value)\n\t);\n}\n\nfunction isTypedErrorTag(value: unknown): value is \"ActorError\" | \"RivetError\" {\n\treturn value === \"ActorError\" || value === \"RivetError\";\n}\n\nfunction errorMessage(error: unknown, fallback = String(error)): string {\n\tif (\n\t\terror &&\n\t\ttypeof error === \"object\" &&\n\t\t\"message\" in error &&\n\t\ttypeof error.message === \"string\"\n\t) {\n\t\treturn error.message;\n\t}\n\n\treturn fallback;\n}\n\nexport function isRivetErrorLike(\n\terror: unknown,\n): error is RivetError | DeconstructedError | RivetErrorLike {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"group\" in error &&\n\t\ttypeof error.group === \"string\" &&\n\t\t\"code\" in error &&\n\t\ttypeof error.code === \"string\" &&\n\t\t\"message\" in error &&\n\t\ttypeof error.message === \"string\" &&\n\t\t(!(\"__type\" in error) || isTypedErrorTag(error.__type))\n\t);\n}\n\n// Matches the `actor`/`aborted` error that core raises when an in-flight queue\n// wait is interrupted because the actor is going to sleep. This is the expected\n// way a parked `run` handler unwinds during sleep, not a failure.\nexport function isActorAbortedError(error: unknown): boolean {\n\treturn (\n\t\tisRivetErrorLike(error) &&\n\t\terror.group === \"actor\" &&\n\t\terror.code === \"aborted\"\n\t);\n}\n\nfunction isActorSpecifier(value: unknown): value is ActorSpecifier {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"actorId\" in value &&\n\t\ttypeof value.actorId === \"string\" &&\n\t\t\"generation\" in value &&\n\t\ttypeof value.generation === \"number\" &&\n\t\t(!(\"key\" in value) ||\n\t\t\tvalue.key === undefined ||\n\t\t\ttypeof value.key === \"string\")\n\t);\n}\n\nexport class RivetError extends Error {\n\t__type = \"RivetError\" as const;\n\n\tpublic public: boolean;\n\tpublic metadata?: unknown;\n\tpublic statusCode: number;\n\tpublic actor?: ActorSpecifier;\n\tpublic readonly group: string;\n\tpublic readonly code: string;\n\n\tpublic static isRivetError(\n\t\terror: unknown,\n\t): error is RivetError | DeconstructedError {\n\t\treturn isRivetErrorLike(error);\n\t}\n\n\tpublic static isActorError(\n\t\terror: unknown,\n\t): error is RivetError | DeconstructedError {\n\t\treturn isRivetErrorLike(error);\n\t}\n\n\tconstructor(\n\t\tgroup: string,\n\t\tcode: string,\n\t\tmessage: string,\n\t\toptions?: RivetErrorOptions | unknown,\n\t) {\n\t\tconst normalized = looksLikeRivetErrorOptions(options)\n\t\t\t? options\n\t\t\t: { metadata: options };\n\n\t\tsuper(message, { cause: normalized.cause });\n\t\tthis.name = \"RivetError\";\n\t\tthis.group = group;\n\t\tthis.code = code;\n\t\tthis.public = normalized.public ?? false;\n\t\tthis.metadata = normalized.metadata;\n\t\tthis.statusCode = normalized.statusCode ?? (this.public ? 400 : 500);\n\t\tthis.actor = normalized.actor;\n\t}\n\n\ttoString() {\n\t\treturn this.message;\n\t}\n}\n\nexport { RivetError as ActorError };\n\nexport class UserError extends RivetError {\n\tconstructor(message: string, options?: UserErrorOptions) {\n\t\tsuper(\"user\", options?.code ?? USER_ERROR_CODE, message, {\n\t\t\tpublic: true,\n\t\t\tmetadata: options?.metadata,\n\t\t\tcause: options?.cause,\n\t\t});\n\t}\n}\n\nexport function toRivetError(\n\terror: unknown,\n\tfallback?: Partial<RivetErrorLike>,\n): RivetError {\n\tif (typeof error === \"string\") {\n\t\tconst bridged = decodeBridgeRivetError(error);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\tif (error instanceof Error) {\n\t\tconst bridged = decodeBridgeRivetError(error.message);\n\t\tif (bridged) {\n\t\t\treturn bridged;\n\t\t}\n\t}\n\n\tif (isRivetErrorLike(error)) {\n\t\treturn new RivetError(error.group, error.code, error.message, {\n\t\t\tpublic: error.public,\n\t\t\tstatusCode: error.statusCode,\n\t\t\tmetadata: error.metadata,\n\t\t\tactor: error.actor,\n\t\t\tcause: error instanceof Error ? error.cause : undefined,\n\t\t});\n\t}\n\n\treturn new RivetError(\n\t\tfallback?.group ?? \"actor\",\n\t\tfallback?.code ?? INTERNAL_ERROR_CODE,\n\t\terrorMessage(error, fallback?.message ?? \"Unknown error\"),\n\t\t{\n\t\t\tpublic: fallback?.public,\n\t\t\tstatusCode: fallback?.statusCode,\n\t\t\tmetadata: fallback?.metadata,\n\t\t\tactor: fallback?.actor,\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t},\n\t);\n}\n\nexport function encodeBridgeRivetError(error: RivetErrorLike): string {\n\treturn `${BRIDGE_RIVET_ERROR_PREFIX}${JSON.stringify({\n\t\tgroup: error.group,\n\t\tcode: error.code,\n\t\tmessage: error.message,\n\t\tmetadata: error.metadata,\n\t\tpublic: error.public,\n\t\tstatusCode: error.statusCode,\n\t\tactor: error.actor,\n\t})}`;\n}\n\nexport function decodeBridgeRivetErrorPayload(\n\tvalue: string,\n): BridgeRivetErrorPayload | undefined {\n\tif (!value.startsWith(BRIDGE_RIVET_ERROR_PREFIX)) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst payload = JSON.parse(\n\t\t\tvalue.slice(BRIDGE_RIVET_ERROR_PREFIX.length),\n\t\t) as BridgeRivetErrorPayload;\n\t\tif (!isRivetErrorLike(payload)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (\n\t\t\tpayload.actor !== undefined &&\n\t\t\tpayload.actor !== null &&\n\t\t\t!isActorSpecifier(payload.actor)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn payload;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function decodeBridgeRivetError(value: string): RivetError | undefined {\n\tconst payload = decodeBridgeRivetErrorPayload(value);\n\tif (!payload) {\n\t\treturn undefined;\n\t}\n\n\treturn new RivetError(payload.group, payload.code, payload.message, {\n\t\tmetadata: payload.metadata,\n\t\tpublic: payload.public,\n\t\tstatusCode: payload.statusCode,\n\t\tactor: payload.actor ?? undefined,\n\t});\n}\n\nexport function isRivetErrorCode(\n\terror: unknown,\n\tgroup: string,\n\tcode: string,\n): error is RivetError {\n\treturn (\n\t\tisRivetErrorLike(error) && error.group === group && error.code === code\n\t);\n}\n\nexport function internalError(\n\tmessage: string,\n\toptions?: Partial<RivetErrorOptions> & {\n\t\tgroup?: string;\n\t\tcode?: string;\n\t},\n): RivetError {\n\treturn new RivetError(\n\t\toptions?.group ?? \"actor\",\n\t\toptions?.code ?? INTERNAL_ERROR_CODE,\n\t\tmessage,\n\t\t{\n\t\t\tpublic: options?.public,\n\t\t\tstatusCode: options?.statusCode,\n\t\t\tmetadata: options?.metadata,\n\t\t\tactor: options?.actor,\n\t\t\tcause: options?.cause,\n\t\t},\n\t);\n}\n\nexport function invalidEncoding(format?: string): RivetError {\n\treturn new RivetError(\n\t\t\"encoding\",\n\t\t\"invalid\",\n\t\t`Invalid encoding \\`${format}\\`. (https://www.rivet.dev/docs/clients/javascript)`,\n\t\t{\n\t\t\tpublic: true,\n\t\t},\n\t);\n}\n\nexport function invalidRequest(error?: unknown): RivetError {\n\treturn new RivetError(\n\t\t\"request\",\n\t\t\"invalid\",\n\t\t`Invalid request: ${errorMessage(error, String(error))}`,\n\t\t{\n\t\t\tpublic: true,\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t},\n\t);\n}\n\nexport function actorNotFound(identifier?: string): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"not_found\",\n\t\tidentifier\n\t\t\t? `Actor not found: ${identifier} (https://www.rivet.dev/docs/clients/javascript)`\n\t\t\t: \"Actor not found (https://www.rivet.dev/docs/clients/javascript)\",\n\t\t{ public: true },\n\t);\n}\n\nexport function actorStopping(identifier?: string): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"stopping\",\n\t\tidentifier ? `Actor stopping: ${identifier}` : \"Actor stopping\",\n\t\t{ public: true },\n\t);\n}\n\nexport interface ActorRestartingOptions {\n\tphase?: \"stopping\" | \"sleeping\" | \"waking\" | \"runner_shutdown\";\n\tretryAfterMs?: number;\n}\n\nexport function actorRestarting(opts?: ActorRestartingOptions): RivetError {\n\treturn new RivetError(\n\t\t\"actor\",\n\t\t\"restarting\",\n\t\t\"Actor is restarting. Retry the request.\",\n\t\t{\n\t\t\tpublic: true,\n\t\t\tstatusCode: 503,\n\t\t\tmetadata: {\n\t\t\t\tretryable: true,\n\t\t\t\t...(opts?.phase ? { phase: opts.phase } : {}),\n\t\t\t\t...(opts?.retryAfterMs !== undefined\n\t\t\t\t\t? { retryAfterMs: opts.retryAfterMs }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t},\n\t);\n}\n\nexport function forbiddenError(): RivetError {\n\treturn new RivetError(\"auth\", \"forbidden\", \"Forbidden\", {\n\t\tpublic: true,\n\t\tstatusCode: 403,\n\t});\n}\n\nexport function unsupportedFeature(feature: string): RivetError {\n\treturn new RivetError(\n\t\t\"feature\",\n\t\t\"unsupported\",\n\t\t`Unsupported feature: ${feature}`,\n\t);\n}\n"]}