realtime-avatar 0.27.3 → 0.27.5

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.
package/README.md CHANGED
@@ -97,10 +97,11 @@ Recordings may finish processing after a call ends. Use `listRecordings({ sessio
97
97
  them, or refresh `getRecording(recordingId)` while processing. These methods and
98
98
  `getRecordingAccess` require a server key with `recordings:read`.
99
99
 
100
- Save `recordingId`, not a playback URL. Files are retained until `retainedUntil` (30 days by
101
- default); each URL expires at `expiresAt` (up to one hour, capped by retention). Obtain fresh
100
+ Save `recordingId`, not a playback URL. Files are retained until `retainedUntil` (the platform's
101
+ existing default is 36,500 days); each URL expires at `expiresAt` (up to one hour, capped by retention). Obtain fresh
102
102
  access before replaying or seeking after expiry. An expired URL does not delete the file.
103
103
  Treat the URL as private: anyone who has it can play that file until it expires.
104
+ This is the existing platform retention policy, not a new SDK setting or extension.
104
105
 
105
106
  For participant replay, pass every ready `{ recording, url }` asset to `RecordingPlayer`
106
107
  from `realtime-avatar/react`. It accepts combined participant MP4s and separate audio/video
@@ -288,6 +289,48 @@ rta.iterateSessions({ from, to }) // the same, paging handled
288
289
  verifyTranscript(rawBytes, headers, secret)
289
290
  ```
290
291
 
292
+ ### Session page validation
293
+
294
+ `listSessions` parses the complete response using the generated platform contract and
295
+ returns `{ sessions, nextCursor, from, to }`. Missing required fields, invalid statuses,
296
+ invalid billing numbers and unknown page or session fields throw
297
+ the public `RealtimeAvatarError` with a contract-mismatch message, without retaining the
298
+ rejected response or validation details, including when successful response bytes are not JSON.
299
+ They are not coerced into empty pages, failed sessions or null values. Every own metadata key,
300
+ including `__proto__`, is preserved without prototype mutation. Metadata is an open
301
+ record and keeps its contents, and optional contract fields such as `releaseIdentity` are
302
+ preserved when returned. `iterateSessions` applies the same validation on every page;
303
+ cursor forwarding and the served window remain unchanged.
304
+
305
+ ### Optional speech diagnostics
306
+
307
+ ```ts
308
+ for await (const session of rta.iterateSessions({ from, to, speechDiagnostics: true })) {
309
+ const diagnostics = session.speechDiagnostics;
310
+ if (diagnostics?.status === "available") {
311
+ const endToEndMs = diagnostics.latency_ms.e2e?.p50;
312
+ // An absent leg is unknown, not zero.
313
+ } else if (diagnostics?.status === "unavailable") {
314
+ console.log(diagnostics.reason);
315
+ }
316
+ }
317
+ ```
318
+
319
+ `listSessions` accepts the same option. Only `true` sends `X-RTA-Speech-Diagnostics: 1`;
320
+ false and omission send no header. Iteration keeps it on every page without adding a query
321
+ parameter, request body or call metadata. There is no general request-header override.
322
+ The `available` branch carries whole-session dialogue per-leg `latency_ms` statistics
323
+ (`count`, `p50`, `p90`, `max`) and coverage (`first_at`, `last_at`, `lines`). Coverage timestamps
324
+ may be null or log timestamps without a timezone. Missing legs remain absent. These are
325
+ not pooled turn percentiles, query-date-window slices, or browser-audible latency. The
326
+ `unavailable` branch carries a canonical reason, never fabricated healthy zero. Older servers
327
+ may omit `speechDiagnostics` even when requested; preserve that absence. No raw logs or
328
+ warnings are returned. Malformed diagnostics throw the same public `RealtimeAvatarError`.
329
+
330
+ The API owns opt-in limits: at most 50 sessions per page, 65,536 bytes per summary,
331
+ a 5,000 ms total page deadline and concurrency 4. The SDK does not clamp `limit` locally or
332
+ reimplement server budgets; it follows the returned cursor and served window.
333
+
291
334
  ---
292
335
 
293
336
  ## Subpaths
@@ -334,7 +334,7 @@ function transcriptionToWire(input) {
334
334
  ...options.customVocabulary !== void 0 ? { custom_vocabulary: options.customVocabulary } : {}
335
335
  };
336
336
  }
337
- var schema03 = z.enum(["minor-sexual-content-v1"]);
337
+ var schema03 = z.enum(["minor-sexual-content-v1", "safe-content-v1"]);
338
338
  var contentPolicySchema = schema03;
339
339
 
340
340
  // ../client/src/wire.ts
@@ -672,10 +672,103 @@ var liveKitSessionReleaseReasonSchema = z.enum([
672
672
  "manual",
673
673
  "idle_timeout"
674
674
  ]);
675
+ var schema04 = z.string().min(8).max(80);
676
+ var schema111 = z.enum(["eou", "llm", "tts", "decision", "hold", "e2e"]);
677
+ var schema28 = z.literal("interrupt_stop");
678
+ var schema33 = z.union([schema111, schema28]);
679
+ var schema43 = z.int().max(9007199254740991).gt(0);
680
+ var schema52 = z.number().min(0);
681
+ var schema62 = z.strictObject({
682
+ "count": schema43,
683
+ "max": schema52,
684
+ "p50": schema52,
685
+ "p90": schema52
686
+ });
687
+ var schema72 = z.partialRecord(schema33, schema62);
688
+ var schema82 = z.literal("available");
689
+ var schema92 = z.literal("dialogue");
690
+ var schema102 = z.string().regex(new RegExp("^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"));
691
+ var schema112 = z.null();
692
+ var schema122 = z.union([schema102, schema112]);
693
+ var schema132 = z.int().min(0).max(9007199254740991);
694
+ var schema142 = z.strictObject({
695
+ "first_at": schema122,
696
+ "last_at": schema122,
697
+ "lines": schema132
698
+ });
699
+ var schema152 = z.strictObject({
700
+ "latency_ms": schema72,
701
+ "status": schema82,
702
+ "sourceRole": schema92,
703
+ "coverage": schema142
704
+ });
705
+ var schema162 = z.literal("unavailable");
706
+ var schema172 = z.enum(["not_closed", "unconfigured", "missing", "invalid", "oversized", "unscorable", "no_measured_latency", "timeout", "aborted", "storage_unavailable"]);
707
+ var schema182 = z.strictObject({
708
+ "status": schema162,
709
+ "reason": schema172
710
+ });
711
+ var schema192 = z.union([schema152, schema182]);
712
+ var schema202 = z.string().min(1).max(200);
713
+ var schema212 = z.union([schema202, schema112]);
714
+ var schema222 = z.string().regex(new RegExp("^[0-9a-f]{40}$"));
715
+ var schema232 = z.union([schema222, schema112]);
716
+ var schema242 = z.literal("cloudflare-worker-version");
717
+ var schema252 = z.literal("authenticated-worker-heartbeat");
718
+ var schema262 = z.union([schema252, schema112]);
719
+ var schema272 = z.string().min(1).max(160);
720
+ var schema282 = z.union([schema272, schema112]);
721
+ var schema29 = z.union([schema132, schema112]);
722
+ var schema30 = z.iso.datetime({ offset: true }).regex(new RegExp("^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"));
723
+ var schema31 = z.union([schema30, schema112]);
724
+ var schema322 = z.strictObject({
725
+ "deploymentSource": schema242,
726
+ "workerSource": schema262,
727
+ "workerId": schema282,
728
+ "podStartedAtMs": schema29,
729
+ "workerObservedAt": schema31
730
+ });
731
+ var schema332 = z.strictObject({
732
+ "deploymentId": schema212,
733
+ "workerRevision": schema232,
734
+ "provenance": schema322
735
+ });
736
+ var schema34 = z.string();
737
+ var schema35 = z.union([schema34, schema112]);
738
+ var schema36 = z.enum(["reserved", "started", "released", "failed"]);
739
+ var schema37 = z.union([schema52, schema112]);
740
+ var schema38 = z.custom((value) => typeof value === "object" && value !== null && !Array.isArray(value));
741
+ var schema39 = z.strictObject({
742
+ "sessionId": schema04,
743
+ "speechDiagnostics": schema192.optional(),
744
+ "releaseIdentity": schema332.optional(),
745
+ "avatarId": schema35,
746
+ "avatarName": schema35,
747
+ "status": schema36,
748
+ "startedAt": schema35,
749
+ "endedAt": schema35,
750
+ "activeSeconds": schema37,
751
+ "billedCreditMicros": schema29,
752
+ "metadata": schema38,
753
+ "createdAt": schema34
754
+ });
755
+ var schema40 = z.array(schema39);
756
+ var schema41 = z.iso.datetime({ offset: true }).regex(new RegExp("^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"));
757
+ var schema422 = z.strictObject({
758
+ "data": schema40,
759
+ "nextCursor": schema35,
760
+ "from": schema41,
761
+ "to": schema41
762
+ });
763
+ var listUsageSessionsResponseSchema = schema422;
764
+ function toSessionsPage(page) {
765
+ const { data, ...pagination } = page;
766
+ return { ...pagination, sessions: data };
767
+ }
675
768
 
676
769
  // ../http-client/src/client.ts
677
770
  var DEFAULT_BASE_URL = "https://realtimeavatar.ai/api/v1";
678
- var SDK_VERSION = "0.27.3";
771
+ var SDK_VERSION = "0.27.5";
679
772
  var RealtimeAvatar = class {
680
773
  #apiKey;
681
774
  #baseUrl;
@@ -1081,6 +1174,10 @@ var RealtimeAvatar = class {
1081
1174
  *
1082
1175
  * Tagging is optional and nothing degrades without it — you just cannot attribute a
1083
1176
  * session to one of your users. Requires a key with the `usage:read` scope.
1177
+ *
1178
+ * `speechDiagnostics: true` opts into whole-session dialogue per-leg measurements, not
1179
+ * browser-audible latency. Unavailable evidence is explicit; old-server absence stays absent.
1180
+ * The API owns the opt-in page cap and budgets; the SDK forwards the requested limit.
1084
1181
  */
1085
1182
  async listSessions(options = {}) {
1086
1183
  const query = new URLSearchParams();
@@ -1090,8 +1187,22 @@ var RealtimeAvatar = class {
1090
1187
  if (options.cursor) query.set("cursor", options.cursor);
1091
1188
  if (options.endUserId) query.set("endUserId", options.endUserId);
1092
1189
  const suffix = query.size > 0 ? `?${query}` : "";
1093
- const page = await this.#json(await this.#request("GET", `/usage/sessions${suffix}`));
1094
- return toUsageSessionPage(page);
1190
+ const response = await this.#request("GET", `/usage/sessions${suffix}`, {
1191
+ headers: options.speechDiagnostics === true ? { "X-RTA-Speech-Diagnostics": "1" } : void 0
1192
+ });
1193
+ const mismatch = "Usage sessions response did not match the SDK contract";
1194
+ let raw;
1195
+ try {
1196
+ raw = await this.#json(response);
1197
+ } catch (error) {
1198
+ if (error instanceof SyntaxError) throw new RealtimeAvatarError(mismatch);
1199
+ throw error;
1200
+ }
1201
+ const page = listUsageSessionsResponseSchema.safeParse(raw);
1202
+ if (!page.success) {
1203
+ throw new RealtimeAvatarError(mismatch);
1204
+ }
1205
+ return toSessionsPage(page.data);
1095
1206
  }
1096
1207
  /**
1097
1208
  * Every session in a window, following the cursor for you.
@@ -1140,6 +1251,9 @@ var RealtimeAvatar = class {
1140
1251
  authorization: `Bearer ${this.#apiKey}`,
1141
1252
  "user-agent": this.#userAgent
1142
1253
  };
1254
+ if (init.headers?.["X-RTA-Speech-Diagnostics"] === "1") {
1255
+ headers["X-RTA-Speech-Diagnostics"] = "1";
1256
+ }
1143
1257
  let body = init.body;
1144
1258
  if (init.json !== void 0) {
1145
1259
  headers["content-type"] = "application/json";
@@ -1184,34 +1298,6 @@ var RealtimeAvatar = class {
1184
1298
  throw new RealtimeAvatarHttpError(response.status, code, text, response.headers.get("x-request-id") ?? void 0);
1185
1299
  }
1186
1300
  };
1187
- function toUsageSessionPage(raw) {
1188
- const body = isRecord(raw) ? raw : {};
1189
- const rows = Array.isArray(body.data) ? body.data : [];
1190
- return {
1191
- sessions: rows.filter(isRecord).map((row) => ({
1192
- sessionId: String(row.sessionId ?? ""),
1193
- avatarId: typeof row.avatarId === "string" ? row.avatarId : null,
1194
- // Added to the contract alongside avatarId so a usage row is readable without a
1195
- // second lookup. Defensive like its siblings: an older server that omits it
1196
- // yields null rather than the string "undefined".
1197
- avatarName: typeof row.avatarName === "string" ? row.avatarName : null,
1198
- status: usageStatus(row.status),
1199
- startedAt: typeof row.startedAt === "string" ? row.startedAt : null,
1200
- endedAt: typeof row.endedAt === "string" ? row.endedAt : null,
1201
- activeSeconds: typeof row.activeSeconds === "number" ? row.activeSeconds : null,
1202
- billedCreditMicros: typeof row.billedCreditMicros === "number" ? row.billedCreditMicros : null,
1203
- metadata: isRecord(row.metadata) ? row.metadata : {},
1204
- createdAt: String(row.createdAt ?? "")
1205
- })),
1206
- nextCursor: typeof body.nextCursor === "string" ? body.nextCursor : null,
1207
- from: String(body.from ?? ""),
1208
- to: String(body.to ?? "")
1209
- };
1210
- }
1211
- var USAGE_STATUSES = ["reserved", "started", "released", "failed"];
1212
- function usageStatus(value) {
1213
- return USAGE_STATUSES.find((s) => s === value) ?? "failed";
1214
- }
1215
1301
  function isRecord(value) {
1216
1302
  return typeof value === "object" && value !== null && !Array.isArray(value);
1217
1303
  }
@@ -1,8 +1,11 @@
1
- import { sessionModeSchema, liveKitSessionReleaseReasonSchema, RealtimeAvatar, ROUTE_TIMEOUT_MS, isQueued, RealtimeAvatarHttpError, RealtimeAvatarError } from './chunk-W4DGBG4Z.js';
1
+ import { sessionModeSchema, liveKitSessionReleaseReasonSchema, RealtimeAvatar, ROUTE_TIMEOUT_MS, isQueued, RealtimeAvatarHttpError, RealtimeAvatarError } from './chunk-6E3SZH35.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // ../http-client/src/generated/error-semantics.ts
5
5
  var ERROR_SEMANTICS = {
6
+ "capacity_full": { statuses: [429], message: "All session seats are busy. Keep your queue ticket and retry shortly.", retryable: true },
7
+ "capacity_no_workers": { statuses: [429], message: "No session workers are available. Keep your queue ticket and retry shortly.", retryable: true },
8
+ "capacity_draining": { statuses: [429], message: "Session workers are restarting or draining. Keep your queue ticket and retry shortly.", retryable: true },
6
9
  "bad_request": { statuses: [400], message: "Check the request and try again.", retryable: false },
7
10
  "unauthorized": { statuses: [401], message: "Authentication is required to use Realtime Avatar.", retryable: false },
8
11
  "payment_required": { statuses: [402], message: "Add credits to continue using realtime avatars.", retryable: false },
package/dist/express.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ProxyConfig } from './types-lgS4Z9rd.js';
2
- import './types-kgmS7ECd.js';
1
+ import { P as ProxyConfig } from './types-B1IR4EaJ.js';
2
+ import './types-C8X50QT9.js';
3
3
  import 'zod';
4
4
 
5
5
  type Expressish = {
package/dist/express.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createProxyHandler } from './chunk-QBOIOZ3O.js';
2
- import './chunk-W4DGBG4Z.js';
1
+ import { createProxyHandler } from './chunk-IJHM44YT.js';
2
+ import './chunk-6E3SZH35.js';
3
3
  import './chunk-MCIXU6XP.js';
4
4
 
5
5
  // ../proxy/src/express.ts
package/dist/hono.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ProxyConfig } from './types-lgS4Z9rd.js';
2
- import './types-kgmS7ECd.js';
1
+ import { P as ProxyConfig } from './types-B1IR4EaJ.js';
2
+ import './types-C8X50QT9.js';
3
3
  import 'zod';
4
4
 
5
5
  /**
package/dist/hono.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createProxyHandler } from './chunk-QBOIOZ3O.js';
2
- import './chunk-W4DGBG4Z.js';
1
+ import { createProxyHandler } from './chunk-IJHM44YT.js';
2
+ import './chunk-6E3SZH35.js';
3
3
  import './chunk-MCIXU6XP.js';
4
4
 
5
5
  // ../proxy/src/hono.ts
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as CallPolicy, C as CallMode, S as StartCallResult, E as EndCallOptions, A as Avatar, b as AvatarUpdate, c as AvatarSourceSwap, d as ClipLibraryDeclaration, e as ClipLibraryUpdate, L as LoopRedirect, f as ClipLibrary, g as AssetKind, h as Asset, i as ListSessionsOptions, U as UsageSessionPage, j as UsageSession, k as ListRecordingsQuery, l as ListRecordingsResponse, R as RecordingArtifact, m as RecordingAccessResponse, n as CreditBalance, T as TranscriptPayload } from './types-kgmS7ECd.js';
2
- export { o as AvatarClip, p as CallConnection, q as CallQueued, r as ClipDeclaration, s as ClipLibraryPlan, t as ClipSource, u as ContextMessage, v as EndCallReason, w as ExternalLlm, x as RecordingArtifactStatus, y as RecordingMode, V as VideoPolicy, z as isQueued, B as listRecordingsResponseSchema, D as recordingAccessResponseSchema, F as recordingArtifactSchema, G as recordingModeSchema } from './types-kgmS7ECd.js';
1
+ import { a as CallPolicy, C as CallMode, S as StartCallResult, E as EndCallOptions, A as Avatar, b as AvatarUpdate, c as AvatarSourceSwap, d as ClipLibraryDeclaration, e as ClipLibraryUpdate, L as LoopRedirect, f as ClipLibrary, g as AssetKind, h as Asset, i as ListSessionsOptions, U as UsageSessionPage, j as UsageSession, k as ListRecordingsQuery, l as ListRecordingsResponse, R as RecordingArtifact, m as RecordingAccessResponse, n as CreditBalance, T as TranscriptPayload } from './types-C8X50QT9.js';
2
+ export { o as AvatarClip, p as CallConnection, q as CallQueued, r as ClipDeclaration, s as ClipLibraryPlan, t as ClipSource, u as ContextMessage, v as EndCallReason, w as ExternalLlm, x as RecordingArtifactStatus, y as RecordingMode, V as VideoPolicy, z as isQueued, B as listRecordingsResponseSchema, D as recordingAccessResponseSchema, F as recordingArtifactSchema, G as recordingModeSchema } from './types-C8X50QT9.js';
3
3
  import { ConnectionHistoryResponse } from './connection-history.js';
4
4
  import { z } from 'zod';
5
5
 
@@ -278,6 +278,10 @@ declare class RealtimeAvatar {
278
278
  *
279
279
  * Tagging is optional and nothing degrades without it — you just cannot attribute a
280
280
  * session to one of your users. Requires a key with the `usage:read` scope.
281
+ *
282
+ * `speechDiagnostics: true` opts into whole-session dialogue per-leg measurements, not
283
+ * browser-audible latency. Unavailable evidence is explicit; old-server absence stays absent.
284
+ * The API owns the opt-in page cap and budgets; the SDK forwards the requested limit.
281
285
  */
282
286
  listSessions(options?: ListSessionsOptions): Promise<UsageSessionPage>;
283
287
  /**
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-W4DGBG4Z.js';
1
+ export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-6E3SZH35.js';
2
2
  import './chunk-MCIXU6XP.js';
package/dist/nextjs.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { P as ProxyConfig } from './types-lgS4Z9rd.js';
2
- import './types-kgmS7ECd.js';
1
+ import { P as ProxyConfig } from './types-B1IR4EaJ.js';
2
+ import './types-C8X50QT9.js';
3
3
  import 'zod';
4
4
 
5
5
  /**
package/dist/nextjs.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createProxyHandler } from './chunk-QBOIOZ3O.js';
2
- import './chunk-W4DGBG4Z.js';
1
+ import { createProxyHandler } from './chunk-IJHM44YT.js';
2
+ import './chunk-6E3SZH35.js';
3
3
  import './chunk-MCIXU6XP.js';
4
4
 
5
5
  // ../proxy/src/nextjs.ts
@@ -11,7 +11,7 @@ declare function useAvatarCamera({ allowed, active }: {
11
11
  }): {
12
12
  enabled: boolean;
13
13
  pending: boolean;
14
- error: "permission_denied" | "unavailable" | null;
14
+ error: "unavailable" | "permission_denied" | null;
15
15
  available: boolean;
16
16
  toggle: () => Promise<void>;
17
17
  setEnabled: (enabled: boolean) => Promise<void>;
@@ -244,6 +244,7 @@ declare const liveKitSessionRequestSchema: z.ZodObject<{
244
244
  connectionHistory: z.ZodOptional<z.ZodBoolean>;
245
245
  contentPolicy: z.ZodOptional<z.ZodEnum<{
246
246
  "minor-sexual-content-v1": "minor-sexual-content-v1";
247
+ "safe-content-v1": "safe-content-v1";
247
248
  }>>;
248
249
  }, z.core.$strict>;
249
250
  declare const liveKitSessionGrantSchema: z.ZodObject<{
@@ -1,7 +1,7 @@
1
1
  import { LiveKitRoomProps } from '@livekit/react-native';
2
2
  export { AudioSession, VideoTrack, VideoTrackProps, registerGlobals } from '@livekit/react-native';
3
- import { L as LiveKitSessionGrant, A as AvatarVideoFit } from './proxy-client-BAY77sJZ.js';
4
- export { a as AdaptivePlayoutController, b as AdaptivePlayoutDecision, c as AdaptivePlayoutOptions, d as AdaptivePlayoutSample, e as ApproachingEndEvent, f as ApproachingEndReason, g as AvatarConnectionDetails, h as AvatarSessionClient, B as BehaviorSnapshot, C as CallTranscript, i as CallTranscriptSegment, j as CartesiaTtsModel, k as ClipResult, l as ClosingTurnResult, m as CreditsLowEvent, D as DEFAULT_APPROACHING_END_LEAD_SECONDS, n as DEFAULT_CREDITS_LOW_LEAD_SECONDS, o as DEFAULT_GOVERNOR_CONFIG, p as DEFAULT_GRACE_CEILING_SECONDS, q as DEFAULT_GRACE_WINDOW_LEAD_SECONDS, r as DEFAULT_IDLE_SECONDS, s as DEFAULT_IDLE_WARN_LEAD_SECONDS, t as DEFAULT_READY_TIMEOUT_SECONDS, u as DEFAULT_TURN_TIMEOUT_SECONDS, v as DeclaredInputSource, E as EndReason, w as EndedEvent, x as ExtendResult, F as FishTtsModel, y as FreezeReadingFn, G as Governor, z as GovernorAction, H as GovernorConfig, I as GovernorSignal, J as GovernorState, K as GraceWindowClosedEvent, M as GraceWindowOpenEvent, N as GraceWindowState, O as IdleWarningEvent, P as InboundRtpCursor, Q as InboundRtpReading, R as KnownBehaviorState, S as LLMProvider, T as LLMSelection, U as LiveKitAvatarGrantState, V as LiveKitAvatarGrantStatus, W as LiveKitCapacityState, X as LiveKitConnectionStatus, Y as LiveKitSessionRequest, Z as LiveKitSessionStartResult, _ as MAX_RECONNECT_ATTEMPTS, $ as MAX_SESSION_INSTRUCTIONS_CHARS, a0 as ProxyClientOptions, a1 as QualityCap, a2 as RECONNECT_BACKOFF_MS, a3 as RealtimeAvatarRequestOptions, a4 as RealtimeSessionApi, a5 as RealtimeSessionMedia, a6 as RealtimeSessionRoomSinks, a7 as ReconnectPolicy, a8 as ReconnectingEvent, a9 as RecoveryState, aa as RetryStep, ab as SendTurnOptions, ac as SessionBehavior, ad as SessionClip, ae as SessionClocks, af as SessionEndReason, ag as SessionLifecycleApi, ah as SessionLifecyclePhase, ai as SessionLifecyclePhaseKind, aj as SessionLifecycleRoomBridge, ak as SessionLifecycleRoomBridgeProps, al as SessionReadinessFailure, am as SurfaceLayers, an as TranscriptSender, ao as TranscriptSenderOptions, ap as TurnState, aq as TurnTimeoutEvent, ar as UseAvatarQualityGovernorInput, as as UseLiveKitAvatarGrantInput, at as UseRealtimeSessionInput, au as UseSessionLifecycleInput, av as VoiceSpec, aw as VoiceSpecInput, ax as capacityErrorFromBusy, ay as capacityStateFromGrant, az as createProxyClient, aA as isNativeLiveTrackSubscribed, aB as knownBehaviorStates, aC as mapTurnState, aD as readInboundRtp, aE as sessionBehaviorSchema, aF as sessionClipSchema, aG as splitCallTranscript, aH as useAvatarAdaptivePlayoutDelay, aI as useAvatarCamera, aJ as useAvatarPlayoutDelay, aK as useAvatarQualityGovernor, aL as useCallTranscript, aM as useLiveKitAvatarGrant, aN as useLiveTrackProducing, aO as useMicLease, aP as useRealtimeSession, aQ as useReleaseMicLeaseOnTrackEnded, aR as useSessionLifecycle } from './proxy-client-BAY77sJZ.js';
3
+ import { L as LiveKitSessionGrant, A as AvatarVideoFit } from './proxy-client-B7BAxMyL.js';
4
+ export { a as AdaptivePlayoutController, b as AdaptivePlayoutDecision, c as AdaptivePlayoutOptions, d as AdaptivePlayoutSample, e as ApproachingEndEvent, f as ApproachingEndReason, g as AvatarConnectionDetails, h as AvatarSessionClient, B as BehaviorSnapshot, C as CallTranscript, i as CallTranscriptSegment, j as CartesiaTtsModel, k as ClipResult, l as ClosingTurnResult, m as CreditsLowEvent, D as DEFAULT_APPROACHING_END_LEAD_SECONDS, n as DEFAULT_CREDITS_LOW_LEAD_SECONDS, o as DEFAULT_GOVERNOR_CONFIG, p as DEFAULT_GRACE_CEILING_SECONDS, q as DEFAULT_GRACE_WINDOW_LEAD_SECONDS, r as DEFAULT_IDLE_SECONDS, s as DEFAULT_IDLE_WARN_LEAD_SECONDS, t as DEFAULT_READY_TIMEOUT_SECONDS, u as DEFAULT_TURN_TIMEOUT_SECONDS, v as DeclaredInputSource, E as EndReason, w as EndedEvent, x as ExtendResult, F as FishTtsModel, y as FreezeReadingFn, G as Governor, z as GovernorAction, H as GovernorConfig, I as GovernorSignal, J as GovernorState, K as GraceWindowClosedEvent, M as GraceWindowOpenEvent, N as GraceWindowState, O as IdleWarningEvent, P as InboundRtpCursor, Q as InboundRtpReading, R as KnownBehaviorState, S as LLMProvider, T as LLMSelection, U as LiveKitAvatarGrantState, V as LiveKitAvatarGrantStatus, W as LiveKitCapacityState, X as LiveKitConnectionStatus, Y as LiveKitSessionRequest, Z as LiveKitSessionStartResult, _ as MAX_RECONNECT_ATTEMPTS, $ as MAX_SESSION_INSTRUCTIONS_CHARS, a0 as ProxyClientOptions, a1 as QualityCap, a2 as RECONNECT_BACKOFF_MS, a3 as RealtimeAvatarRequestOptions, a4 as RealtimeSessionApi, a5 as RealtimeSessionMedia, a6 as RealtimeSessionRoomSinks, a7 as ReconnectPolicy, a8 as ReconnectingEvent, a9 as RecoveryState, aa as RetryStep, ab as SendTurnOptions, ac as SessionBehavior, ad as SessionClip, ae as SessionClocks, af as SessionEndReason, ag as SessionLifecycleApi, ah as SessionLifecyclePhase, ai as SessionLifecyclePhaseKind, aj as SessionLifecycleRoomBridge, ak as SessionLifecycleRoomBridgeProps, al as SessionReadinessFailure, am as SurfaceLayers, an as TranscriptSender, ao as TranscriptSenderOptions, ap as TurnState, aq as TurnTimeoutEvent, ar as UseAvatarQualityGovernorInput, as as UseLiveKitAvatarGrantInput, at as UseRealtimeSessionInput, au as UseSessionLifecycleInput, av as VoiceSpec, aw as VoiceSpecInput, ax as capacityErrorFromBusy, ay as capacityStateFromGrant, az as createProxyClient, aA as isNativeLiveTrackSubscribed, aB as knownBehaviorStates, aC as mapTurnState, aD as readInboundRtp, aE as sessionBehaviorSchema, aF as sessionClipSchema, aG as splitCallTranscript, aH as useAvatarAdaptivePlayoutDelay, aI as useAvatarCamera, aJ as useAvatarPlayoutDelay, aK as useAvatarQualityGovernor, aL as useCallTranscript, aM as useLiveKitAvatarGrant, aN as useLiveTrackProducing, aO as useMicLease, aP as useRealtimeSession, aQ as useReleaseMicLeaseOnTrackEnded, aR as useSessionLifecycle } from './proxy-client-B7BAxMyL.js';
5
5
  import { ReactNode, ReactElement } from 'react';
6
6
  import { StyleProp, ViewStyle } from 'react-native';
7
7
  export { useChat, useConnectionState, useLocalParticipant, useRoomContext, useTrackToggle, useTranscriptions, useVoiceAssistant } from '@livekit/components-react';
@@ -293,6 +293,9 @@ function playoutDelayTarget(track) {
293
293
 
294
294
  // ../http-client/src/generated/error-semantics.ts
295
295
  var ERROR_SEMANTICS = {
296
+ "capacity_full": { statuses: [429], message: "All session seats are busy. Keep your queue ticket and retry shortly.", retryable: true },
297
+ "capacity_no_workers": { statuses: [429], message: "No session workers are available. Keep your queue ticket and retry shortly.", retryable: true },
298
+ "capacity_draining": { statuses: [429], message: "Session workers are restarting or draining. Keep your queue ticket and retry shortly.", retryable: true },
296
299
  "bad_request": { statuses: [400], message: "Check the request and try again.", retryable: false },
297
300
  "unauthorized": { statuses: [401], message: "Authentication is required to use Realtime Avatar.", retryable: false },
298
301
  "payment_required": { statuses: [402], message: "Add credits to continue using realtime avatars.", retryable: false },
@@ -1720,7 +1723,7 @@ var transcriptionOptionsSchema = z.object({
1720
1723
  languageCodes: transcriptionWireSchema.shape.language_codes,
1721
1724
  customVocabulary: transcriptionWireSchema.shape.custom_vocabulary
1722
1725
  }).strict();
1723
- var schema02 = z.enum(["minor-sexual-content-v1"]);
1726
+ var schema02 = z.enum(["minor-sexual-content-v1", "safe-content-v1"]);
1724
1727
  var contentPolicySchema = schema02;
1725
1728
 
1726
1729
  // ../client/src/wire.ts
package/dist/react.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ToolRegistration, RegisteredTool } from './tools.js';
2
- import { ak as SessionLifecycleRoomBridgeProps, h as AvatarSessionClient, A as AvatarVideoFit, aS as CallMicrophone, aT as CallAudioPlayback, aU as CallMicrophoneProblem } from './proxy-client-BAY77sJZ.js';
3
- export { a as AdaptivePlayoutController, b as AdaptivePlayoutDecision, c as AdaptivePlayoutOptions, d as AdaptivePlayoutSample, e as ApproachingEndEvent, f as ApproachingEndReason, g as AvatarConnectionDetails, aV as AvatarVideoSurface, aW as AvatarVideoSurfaceProps, B as BehaviorSnapshot, C as CallTranscript, i as CallTranscriptSegment, j as CartesiaTtsModel, k as ClipResult, l as ClosingTurnResult, m as CreditsLowEvent, D as DEFAULT_APPROACHING_END_LEAD_SECONDS, n as DEFAULT_CREDITS_LOW_LEAD_SECONDS, o as DEFAULT_GOVERNOR_CONFIG, p as DEFAULT_GRACE_CEILING_SECONDS, q as DEFAULT_GRACE_WINDOW_LEAD_SECONDS, r as DEFAULT_IDLE_SECONDS, s as DEFAULT_IDLE_WARN_LEAD_SECONDS, t as DEFAULT_READY_TIMEOUT_SECONDS, u as DEFAULT_TURN_TIMEOUT_SECONDS, v as DeclaredInputSource, E as EndReason, w as EndedEvent, x as ExtendResult, F as FishTtsModel, y as FreezeReadingFn, G as Governor, z as GovernorAction, H as GovernorConfig, I as GovernorSignal, J as GovernorState, K as GraceWindowClosedEvent, M as GraceWindowOpenEvent, N as GraceWindowState, O as IdleWarningEvent, P as InboundRtpCursor, Q as InboundRtpReading, R as KnownBehaviorState, S as LLMProvider, T as LLMSelection, U as LiveKitAvatarGrantState, V as LiveKitAvatarGrantStatus, W as LiveKitCapacityState, X as LiveKitConnectionStatus, Y as LiveKitSessionRequest, Z as LiveKitSessionStartResult, aX as LivePlaybackKeeper, _ as MAX_RECONNECT_ATTEMPTS, $ as MAX_SESSION_INSTRUCTIONS_CHARS, aY as MIC_LEASE_ENDED_TIMEOUT_MS, aZ as MicLease, a_ as NETWORK_QUALITY_POLICY, a$ as NetworkQualityStatus, b0 as PlayableVideoElement, a0 as ProxyClientOptions, a1 as QualityCap, a2 as RECONNECT_BACKOFF_MS, b1 as RealtimeAvatarCapacityError, b2 as RealtimeAvatarLiveKitRoom, b3 as RealtimeAvatarLiveKitRoomProps, a3 as RealtimeAvatarRequestOptions, a4 as RealtimeSessionApi, a5 as RealtimeSessionMedia, a6 as RealtimeSessionRoomSinks, a7 as ReconnectPolicy, a8 as ReconnectingEvent, a9 as RecoveryState, aa as RetryStep, ab as SendTurnOptions, ac as SessionBehavior, ad as SessionClip, ae as SessionClocks, af as SessionEndReason, ag as SessionLifecycleApi, ah as SessionLifecyclePhase, ai as SessionLifecyclePhaseKind, aj as SessionLifecycleRoomBridge, al as SessionReadinessFailure, am as SurfaceLayers, an as TranscriptSender, ao as TranscriptSenderOptions, ap as TurnState, aq as TurnTimeoutEvent, ar as UseAvatarQualityGovernorInput, as as UseLiveKitAvatarGrantInput, at as UseRealtimeSessionInput, au as UseSessionLifecycleInput, av as VoiceSpec, aw as VoiceSpecInput, ax as capacityErrorFromBusy, ay as capacityStateFromGrant, az as createProxyClient, aB as knownBehaviorStates, aC as mapTurnState, aD as readInboundRtp, aE as sessionBehaviorSchema, aF as sessionClipSchema, b4 as shouldReplayPendingTurn, aG as splitCallTranscript, aH as useAvatarAdaptivePlayoutDelay, aI as useAvatarCamera, aJ as useAvatarPlayoutDelay, aK as useAvatarQualityGovernor, aL as useCallTranscript, aM as useLiveKitAvatarGrant, aO as useMicLease, aP as useRealtimeSession, aQ as useReleaseMicLeaseOnTrackEnded, aR as useSessionLifecycle } from './proxy-client-BAY77sJZ.js';
2
+ import { ak as SessionLifecycleRoomBridgeProps, h as AvatarSessionClient, A as AvatarVideoFit, aS as CallMicrophone, aT as CallAudioPlayback, aU as CallMicrophoneProblem } from './proxy-client-B7BAxMyL.js';
3
+ export { a as AdaptivePlayoutController, b as AdaptivePlayoutDecision, c as AdaptivePlayoutOptions, d as AdaptivePlayoutSample, e as ApproachingEndEvent, f as ApproachingEndReason, g as AvatarConnectionDetails, aV as AvatarVideoSurface, aW as AvatarVideoSurfaceProps, B as BehaviorSnapshot, C as CallTranscript, i as CallTranscriptSegment, j as CartesiaTtsModel, k as ClipResult, l as ClosingTurnResult, m as CreditsLowEvent, D as DEFAULT_APPROACHING_END_LEAD_SECONDS, n as DEFAULT_CREDITS_LOW_LEAD_SECONDS, o as DEFAULT_GOVERNOR_CONFIG, p as DEFAULT_GRACE_CEILING_SECONDS, q as DEFAULT_GRACE_WINDOW_LEAD_SECONDS, r as DEFAULT_IDLE_SECONDS, s as DEFAULT_IDLE_WARN_LEAD_SECONDS, t as DEFAULT_READY_TIMEOUT_SECONDS, u as DEFAULT_TURN_TIMEOUT_SECONDS, v as DeclaredInputSource, E as EndReason, w as EndedEvent, x as ExtendResult, F as FishTtsModel, y as FreezeReadingFn, G as Governor, z as GovernorAction, H as GovernorConfig, I as GovernorSignal, J as GovernorState, K as GraceWindowClosedEvent, M as GraceWindowOpenEvent, N as GraceWindowState, O as IdleWarningEvent, P as InboundRtpCursor, Q as InboundRtpReading, R as KnownBehaviorState, S as LLMProvider, T as LLMSelection, U as LiveKitAvatarGrantState, V as LiveKitAvatarGrantStatus, W as LiveKitCapacityState, X as LiveKitConnectionStatus, Y as LiveKitSessionRequest, Z as LiveKitSessionStartResult, aX as LivePlaybackKeeper, _ as MAX_RECONNECT_ATTEMPTS, $ as MAX_SESSION_INSTRUCTIONS_CHARS, aY as MIC_LEASE_ENDED_TIMEOUT_MS, aZ as MicLease, a_ as NETWORK_QUALITY_POLICY, a$ as NetworkQualityStatus, b0 as PlayableVideoElement, a0 as ProxyClientOptions, a1 as QualityCap, a2 as RECONNECT_BACKOFF_MS, b1 as RealtimeAvatarCapacityError, b2 as RealtimeAvatarLiveKitRoom, b3 as RealtimeAvatarLiveKitRoomProps, a3 as RealtimeAvatarRequestOptions, a4 as RealtimeSessionApi, a5 as RealtimeSessionMedia, a6 as RealtimeSessionRoomSinks, a7 as ReconnectPolicy, a8 as ReconnectingEvent, a9 as RecoveryState, aa as RetryStep, ab as SendTurnOptions, ac as SessionBehavior, ad as SessionClip, ae as SessionClocks, af as SessionEndReason, ag as SessionLifecycleApi, ah as SessionLifecyclePhase, ai as SessionLifecyclePhaseKind, aj as SessionLifecycleRoomBridge, al as SessionReadinessFailure, am as SurfaceLayers, an as TranscriptSender, ao as TranscriptSenderOptions, ap as TurnState, aq as TurnTimeoutEvent, ar as UseAvatarQualityGovernorInput, as as UseLiveKitAvatarGrantInput, at as UseRealtimeSessionInput, au as UseSessionLifecycleInput, av as VoiceSpec, aw as VoiceSpecInput, ax as capacityErrorFromBusy, ay as capacityStateFromGrant, az as createProxyClient, aB as knownBehaviorStates, aC as mapTurnState, aD as readInboundRtp, aE as sessionBehaviorSchema, aF as sessionClipSchema, b4 as shouldReplayPendingTurn, aG as splitCallTranscript, aH as useAvatarAdaptivePlayoutDelay, aI as useAvatarCamera, aJ as useAvatarPlayoutDelay, aK as useAvatarQualityGovernor, aL as useCallTranscript, aM as useLiveKitAvatarGrant, aO as useMicLease, aP as useRealtimeSession, aQ as useReleaseMicLeaseOnTrackEnded, aR as useSessionLifecycle } from './proxy-client-B7BAxMyL.js';
4
4
  import { CSSProperties, ReactNode } from 'react';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import { R as RecordingArtifact } from './recording-ydFVySSd.js';
package/dist/react.js CHANGED
@@ -499,6 +499,9 @@ function playoutDelayTarget(track) {
499
499
 
500
500
  // ../http-client/src/generated/error-semantics.ts
501
501
  var ERROR_SEMANTICS = {
502
+ "capacity_full": { statuses: [429], message: "All session seats are busy. Keep your queue ticket and retry shortly.", retryable: true },
503
+ "capacity_no_workers": { statuses: [429], message: "No session workers are available. Keep your queue ticket and retry shortly.", retryable: true },
504
+ "capacity_draining": { statuses: [429], message: "Session workers are restarting or draining. Keep your queue ticket and retry shortly.", retryable: true },
502
505
  "bad_request": { statuses: [400], message: "Check the request and try again.", retryable: false },
503
506
  "unauthorized": { statuses: [401], message: "Authentication is required to use Realtime Avatar.", retryable: false },
504
507
  "payment_required": { statuses: [402], message: "Add credits to continue using realtime avatars.", retryable: false },
@@ -2339,7 +2342,7 @@ var transcriptionOptionsSchema = z.object({
2339
2342
  languageCodes: transcriptionWireSchema.shape.language_codes,
2340
2343
  customVocabulary: transcriptionWireSchema.shape.custom_vocabulary
2341
2344
  }).strict();
2342
- var schema02 = z.enum(["minor-sexual-content-v1"]);
2345
+ var schema02 = z.enum(["minor-sexual-content-v1", "safe-content-v1"]);
2343
2346
  var contentPolicySchema = schema02;
2344
2347
 
2345
2348
  // ../client/src/wire.ts
package/dist/server.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, RealtimeAvatarOptions, StartCallOptions, clipLibraryDeclarationSchema, verifyTranscript } from './index.js';
2
- export { h as Asset, g as AssetKind, A as Avatar, o as AvatarClip, c as AvatarSourceSwap, b as AvatarUpdate, p as CallConnection, C as CallMode, a as CallPolicy, q as CallQueued, r as ClipDeclaration, f as ClipLibrary, d as ClipLibraryDeclaration, s as ClipLibraryPlan, e as ClipLibraryUpdate, t as ClipSource, u as ContextMessage, n as CreditBalance, E as EndCallOptions, v as EndCallReason, w as ExternalLlm, k as ListRecordingsQuery, l as ListRecordingsResponse, i as ListSessionsOptions, L as LoopRedirect, m as RecordingAccessResponse, R as RecordingArtifact, x as RecordingArtifactStatus, y as RecordingMode, S as StartCallResult, T as TranscriptPayload, j as UsageSession, U as UsageSessionPage, V as VideoPolicy, z as isQueued, B as listRecordingsResponseSchema, D as recordingAccessResponseSchema, F as recordingArtifactSchema, G as recordingModeSchema } from './types-kgmS7ECd.js';
2
+ export { h as Asset, g as AssetKind, A as Avatar, o as AvatarClip, c as AvatarSourceSwap, b as AvatarUpdate, p as CallConnection, C as CallMode, a as CallPolicy, q as CallQueued, r as ClipDeclaration, f as ClipLibrary, d as ClipLibraryDeclaration, s as ClipLibraryPlan, e as ClipLibraryUpdate, t as ClipSource, u as ContextMessage, n as CreditBalance, E as EndCallOptions, v as EndCallReason, w as ExternalLlm, k as ListRecordingsQuery, l as ListRecordingsResponse, i as ListSessionsOptions, L as LoopRedirect, m as RecordingAccessResponse, R as RecordingArtifact, x as RecordingArtifactStatus, y as RecordingMode, S as StartCallResult, T as TranscriptPayload, j as UsageSession, U as UsageSessionPage, V as VideoPolicy, z as isQueued, B as listRecordingsResponseSchema, D as recordingAccessResponseSchema, F as recordingArtifactSchema, G as recordingModeSchema } from './types-C8X50QT9.js';
3
3
  import './connection-history.js';
4
4
  import 'zod';
package/dist/server.js CHANGED
@@ -1,2 +1,2 @@
1
- export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-W4DGBG4Z.js';
1
+ export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-6E3SZH35.js';
2
2
  import './chunk-MCIXU6XP.js';
@@ -1,5 +1,5 @@
1
- import { P as ProxyConfig } from './types-lgS4Z9rd.js';
2
- import './types-kgmS7ECd.js';
1
+ import { P as ProxyConfig } from './types-B1IR4EaJ.js';
2
+ import './types-C8X50QT9.js';
3
3
  import 'zod';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { createProxyHandler } from './chunk-QBOIOZ3O.js';
2
- import './chunk-W4DGBG4Z.js';
1
+ import { createProxyHandler } from './chunk-IJHM44YT.js';
2
+ import './chunk-6E3SZH35.js';
3
3
  import './chunk-MCIXU6XP.js';
4
4
 
5
5
  // src/tanstack-start.ts
@@ -1,4 +1,4 @@
1
- import { C as CallMode, a as CallPolicy } from './types-kgmS7ECd.js';
1
+ import { C as CallMode, a as CallPolicy } from './types-C8X50QT9.js';
2
2
 
3
3
  /** The three things a caller can ask the proxy to do. Gate on these, not on URLs. */
4
4
  type ProxyOperation = "connect" | "end" | "avatars" | "credits";