realtime-avatar 0.27.1 → 0.27.3
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 +28 -2
- package/dist/{chunk-DOHZ365B.js → chunk-QBOIOZ3O.js} +1 -1
- package/dist/{chunk-4IEGR75H.js → chunk-W4DGBG4Z.js} +17 -6
- package/dist/express.d.ts +2 -2
- package/dist/express.js +2 -2
- package/dist/hono.d.ts +2 -2
- package/dist/hono.js +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/nextjs.d.ts +2 -2
- package/dist/nextjs.js +2 -2
- package/dist/{proxy-client-Cs2azqD1.d.ts → proxy-client-BAY77sJZ.d.ts} +38 -0
- package/dist/react-native.d.ts +2 -2
- package/dist/react-native.js +15 -5
- package/dist/react.d.ts +4 -4
- package/dist/react.js +76 -26
- package/dist/{recording-DjswTx5B.d.ts → recording-ydFVySSd.d.ts} +35 -0
- package/dist/recording.d.ts +9 -3
- package/dist/recording.js +23 -8
- package/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/tanstack-start.d.ts +2 -2
- package/dist/tanstack-start.js +2 -2
- package/dist/{types-6MUqx800.d.ts → types-kgmS7ECd.d.ts} +134 -8
- package/dist/{types-JtCwa0Ip.d.ts → types-lgS4Z9rd.d.ts} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -86,8 +86,12 @@ if (recording.status === "ready") {
|
|
|
86
86
|
|
|
87
87
|
Omitted or `"off"` disables recording. `"audio"` records published user and avatar audio;
|
|
88
88
|
`"video"` records published video without audio; `"audio_video"` keeps both on one media timeline.
|
|
89
|
+
`"participants"` keeps each participant's voice and camera in its own continuous file.
|
|
90
|
+
`"tracks"` saves separate published audio/video tracks and replacement-camera segments;
|
|
91
|
+
use `listRecordings({ sessionId: call.sessionId })` because its initial grant omits recording
|
|
92
|
+
metadata so older installed clients remain compatible.
|
|
89
93
|
Recording does not enable the microphone, camera, or screen sharing. Only tracks that participants
|
|
90
|
-
authorize and publish can be recorded.
|
|
94
|
+
authorize and publish can be recorded.
|
|
91
95
|
|
|
92
96
|
Recordings may finish processing after a call ends. Use `listRecordings({ sessionId })` to find
|
|
93
97
|
them, or refresh `getRecording(recordingId)` while processing. These methods and
|
|
@@ -98,6 +102,15 @@ default); each URL expires at `expiresAt` (up to one hour, capped by retention).
|
|
|
98
102
|
access before replaying or seeking after expiry. An expired URL does not delete the file.
|
|
99
103
|
Treat the URL as private: anyone who has it can play that file until it expires.
|
|
100
104
|
|
|
105
|
+
For participant replay, pass every ready `{ recording, url }` asset to `RecordingPlayer`
|
|
106
|
+
from `realtime-avatar/react`. It accepts combined participant MP4s and separate audio/video
|
|
107
|
+
segments, including camera republication. Follow `nextCursor` when listing a session's recordings.
|
|
108
|
+
The optional `mediaStartOffsetMs` preserves a file's first native media timestamp; it delays
|
|
109
|
+
that track's visibility without shifting its playback clock. The player preserves native
|
|
110
|
+
timestamps across gaps and uses the artifact's duration instead of an initially truncated
|
|
111
|
+
WebM container duration. `mediaMutedIntervalsMs` hides a muted camera while keeping media
|
|
112
|
+
clocks and audio running, including audio carried by a legacy combined file.
|
|
113
|
+
|
|
101
114
|
## Optional connection history
|
|
102
115
|
|
|
103
116
|
Set `connectionHistory: true` in the server's `startCall` policy when the caller needs a
|
|
@@ -220,9 +233,22 @@ the top of that file with the reason for each: two are gaps in the contract itse
|
|
|
220
233
|
query parameters for `GET /v1/usage/sessions`, and the transcript webhook body is not in it at
|
|
221
234
|
all), and the `video` policy types are deliberately not one-to-one with the wire.
|
|
222
235
|
|
|
236
|
+
`contentPolicy: "minor-sexual-content-v1"` is an optional **server-owned** call policy,
|
|
237
|
+
serialized as `content_policy`. Omission sends no policy field and preserves existing behavior.
|
|
238
|
+
Unknown values, `null`, and disable values are refused before the request is sent. Set it in
|
|
239
|
+
`startCall` or a proxy `session` callback, never from browser input: the proxy strips both
|
|
240
|
+
`contentPolicy` and `content_policy` from incoming client bodies.
|
|
241
|
+
|
|
242
|
+
Pre-release contract provenance: this field was generated with
|
|
243
|
+
`node scripts/generate-clip-schema.mjs --sync <absolute sibling realtime-policy-platform root>`
|
|
244
|
+
from `packages/realtime-avatar-contracts/openapi/realtime-avatar.openapi.json`, then
|
|
245
|
+
`npm run spec:types`. The checked-in snapshot is that reviewed platform artifact, not the
|
|
246
|
+
older deployed spec. **Before release, deploy the platform and regenerate with `npm run spec`
|
|
247
|
+
against its deployed OpenAPI, then run `npm run check`.** Do not hand-edit the generated enum.
|
|
248
|
+
|
|
223
249
|
```ts
|
|
224
250
|
// calls
|
|
225
|
-
rta.startCall({ avatarId, mode?, instructions?, context?, maxSeconds?, video?, recording?, connectionHistory?, transcript?, metadata?, llm? })
|
|
251
|
+
rta.startCall({ avatarId, mode?, instructions?, context?, maxSeconds?, video?, recording?, connectionHistory?, contentPolicy?, transcript?, metadata?, llm? })
|
|
226
252
|
rta.endCall(sessionId, { reason? }) // free an abandoned call's slot; idempotent, never throws
|
|
227
253
|
rta.leaveQueue(queueTicketId, { reason? }) // give up a queued call's place in line; idempotent, never throws
|
|
228
254
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sessionModeSchema, liveKitSessionReleaseReasonSchema, RealtimeAvatar, ROUTE_TIMEOUT_MS, isQueued, RealtimeAvatarHttpError, RealtimeAvatarError } from './chunk-
|
|
1
|
+
import { sessionModeSchema, liveKitSessionReleaseReasonSchema, RealtimeAvatar, ROUTE_TIMEOUT_MS, isQueued, RealtimeAvatarHttpError, RealtimeAvatarError } from './chunk-W4DGBG4Z.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
// ../http-client/src/generated/error-semantics.ts
|
|
@@ -239,13 +239,17 @@ var schema26 = z.strictObject({
|
|
|
239
239
|
var clipLibraryResponseSchema = schema24;
|
|
240
240
|
var clipLibraryUpdateSchema = schema26;
|
|
241
241
|
var RECORDED_MEDIA_MODES = ["audio", "video", "audio_video"];
|
|
242
|
-
var recordingModeSchema = z.enum(["off", ...RECORDED_MEDIA_MODES, "participants"]).describe("Server-owned recording policy; omitted means off. Legacy audio includes user and avatar audio. participants saves one continuous audio/video file per participant, without mixing their voices.");
|
|
242
|
+
var recordingModeSchema = z.enum(["off", ...RECORDED_MEDIA_MODES, "participants", "tracks"]).describe("Server-owned recording policy; omitted means off. Legacy audio includes user and avatar audio. participants saves one continuous audio/video file per participant, without mixing their voices. tracks saves each published participant audio/video track separately; list recordings by session after capture.");
|
|
243
243
|
var RECORDING_STATUSES = ["pending", "recording", "processing", "ready", "failed", "expired"];
|
|
244
244
|
z.enum(RECORDING_STATUSES);
|
|
245
245
|
var recordingParticipantSchema = z.object({
|
|
246
246
|
participantIdentity: z.string().min(1).max(160),
|
|
247
247
|
role: z.enum(["user", "avatar"])
|
|
248
248
|
}).strict();
|
|
249
|
+
var recordingMutedIntervalSchema = z.object({
|
|
250
|
+
startMs: z.number().int().min(0),
|
|
251
|
+
endMs: z.number().int().positive()
|
|
252
|
+
}).strict().refine((interval) => interval.endMs > interval.startMs, "Muted interval must end after it starts");
|
|
249
253
|
var recordingMetadataSchema = z.object({
|
|
250
254
|
sessionId: z.string().min(1),
|
|
251
255
|
recordingId: z.string().min(1),
|
|
@@ -254,13 +258,15 @@ var recordingMetadataSchema = z.object({
|
|
|
254
258
|
retainedUntil: z.string().datetime({ offset: true }),
|
|
255
259
|
participant: recordingParticipantSchema.optional(),
|
|
256
260
|
mediaStartedAt: z.string().datetime({ offset: true }).optional(),
|
|
257
|
-
mediaEndedAt: z.string().datetime({ offset: true }).optional()
|
|
261
|
+
mediaEndedAt: z.string().datetime({ offset: true }).optional(),
|
|
262
|
+
mediaStartOffsetMs: z.number().int().min(0).optional().describe("First playable native media timestamp relative to mediaStartedAt. Playback retains this offset; it does not reset the file clock to zero."),
|
|
263
|
+
mediaMutedIntervalsMs: z.array(recordingMutedIntervalSchema).optional().describe("Intervals of hidden camera video relative to mediaStartedAt, using native media timestamps. Audio playback continues through these intervals.")
|
|
258
264
|
});
|
|
259
265
|
var recordingArtifactSchema = z.discriminatedUnion("status", [
|
|
260
266
|
recordingMetadataSchema.extend({ status: z.enum(["pending", "recording", "processing", "expired"]) }).strict(),
|
|
261
267
|
recordingMetadataSchema.extend({
|
|
262
268
|
status: z.literal("ready"),
|
|
263
|
-
mediaType: z.enum(["audio/mp4", "video/mp4"]),
|
|
269
|
+
mediaType: z.enum(["audio/mp4", "video/mp4", "audio/ogg", "video/webm"]),
|
|
264
270
|
sizeBytes: z.number().int().positive(),
|
|
265
271
|
durationMs: z.number().int().nonnegative().nullable()
|
|
266
272
|
}).strict(),
|
|
@@ -328,6 +334,8 @@ function transcriptionToWire(input) {
|
|
|
328
334
|
...options.customVocabulary !== void 0 ? { custom_vocabulary: options.customVocabulary } : {}
|
|
329
335
|
};
|
|
330
336
|
}
|
|
337
|
+
var schema03 = z.enum(["minor-sexual-content-v1"]);
|
|
338
|
+
var contentPolicySchema = schema03;
|
|
331
339
|
|
|
332
340
|
// ../client/src/wire.ts
|
|
333
341
|
var DEFAULT_AVATAR_ID = "maria";
|
|
@@ -494,7 +502,8 @@ z.object({
|
|
|
494
502
|
support_edits: sessionSupportEditsSchema.optional(),
|
|
495
503
|
transcript_webhook: transcriptWebhookSchema.optional(),
|
|
496
504
|
client_metadata: clientMetadataSchema.optional(),
|
|
497
|
-
connection_history: z.boolean().optional()
|
|
505
|
+
connection_history: z.boolean().optional(),
|
|
506
|
+
content_policy: contentPolicySchema.optional()
|
|
498
507
|
}).strict().superRefine((value, ctx) => {
|
|
499
508
|
if (value.support_edits && value.render_backend === "generative") {
|
|
500
509
|
ctx.addIssue({
|
|
@@ -562,7 +571,8 @@ z.object({
|
|
|
562
571
|
supportEdits: sessionSupportEditsSchema.optional(),
|
|
563
572
|
transcriptWebhook: transcriptWebhookSchema.optional(),
|
|
564
573
|
clientMetadata: clientMetadataSchema.optional(),
|
|
565
|
-
connectionHistory: z.boolean().optional()
|
|
574
|
+
connectionHistory: z.boolean().optional(),
|
|
575
|
+
contentPolicy: contentPolicySchema.optional()
|
|
566
576
|
}).strict();
|
|
567
577
|
var liveKitSessionGrantSchema = z.object({
|
|
568
578
|
recording: recordingArtifactSchema.optional(),
|
|
@@ -665,7 +675,7 @@ var liveKitSessionReleaseReasonSchema = z.enum([
|
|
|
665
675
|
|
|
666
676
|
// ../http-client/src/client.ts
|
|
667
677
|
var DEFAULT_BASE_URL = "https://realtimeavatar.ai/api/v1";
|
|
668
|
-
var SDK_VERSION = "0.27.
|
|
678
|
+
var SDK_VERSION = "0.27.3";
|
|
669
679
|
var RealtimeAvatar = class {
|
|
670
680
|
#apiKey;
|
|
671
681
|
#baseUrl;
|
|
@@ -716,6 +726,7 @@ var RealtimeAvatar = class {
|
|
|
716
726
|
if (options.metadata !== void 0) body.client_metadata = options.metadata;
|
|
717
727
|
if (options.recording !== void 0) body.recording = recordingModeSchema.parse(options.recording);
|
|
718
728
|
if (options.connectionHistory !== void 0) body.connection_history = options.connectionHistory;
|
|
729
|
+
if (options.contentPolicy !== void 0) body.content_policy = contentPolicySchema.parse(options.contentPolicy);
|
|
719
730
|
if (options.clientTools) body.capabilities = ["client_tools"];
|
|
720
731
|
if (options.llm !== void 0) {
|
|
721
732
|
const { backend, model, baseUrl, token } = options.llm;
|
package/dist/express.d.ts
CHANGED
package/dist/express.js
CHANGED
package/dist/hono.d.ts
CHANGED
package/dist/hono.js
CHANGED
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-
|
|
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-
|
|
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';
|
|
3
3
|
import { ConnectionHistoryResponse } from './connection-history.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-
|
|
1
|
+
export { RealtimeAvatar, RealtimeAvatarError, RealtimeAvatarHttpError, clipLibraryDeclarationSchema, isQueued, listRecordingsResponseSchema, recordingAccessResponseSchema, recordingArtifactSchema, recordingModeSchema, verifyTranscript } from './chunk-W4DGBG4Z.js';
|
|
2
2
|
import './chunk-MCIXU6XP.js';
|
package/dist/nextjs.d.ts
CHANGED
package/dist/nextjs.js
CHANGED
|
@@ -242,6 +242,9 @@ declare const liveKitSessionRequestSchema: z.ZodObject<{
|
|
|
242
242
|
}, z.core.$strict>>;
|
|
243
243
|
clientMetadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
244
244
|
connectionHistory: z.ZodOptional<z.ZodBoolean>;
|
|
245
|
+
contentPolicy: z.ZodOptional<z.ZodEnum<{
|
|
246
|
+
"minor-sexual-content-v1": "minor-sexual-content-v1";
|
|
247
|
+
}>>;
|
|
245
248
|
}, z.core.$strict>;
|
|
246
249
|
declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
247
250
|
recording: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -263,6 +266,11 @@ declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
|
263
266
|
}, z.core.$strict>>;
|
|
264
267
|
mediaStartedAt: z.ZodOptional<z.ZodString>;
|
|
265
268
|
mediaEndedAt: z.ZodOptional<z.ZodString>;
|
|
269
|
+
mediaStartOffsetMs: z.ZodOptional<z.ZodNumber>;
|
|
270
|
+
mediaMutedIntervalsMs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
271
|
+
startMs: z.ZodNumber;
|
|
272
|
+
endMs: z.ZodNumber;
|
|
273
|
+
}, z.core.$strict>>>;
|
|
266
274
|
status: z.ZodEnum<{
|
|
267
275
|
pending: "pending";
|
|
268
276
|
recording: "recording";
|
|
@@ -288,10 +296,17 @@ declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
|
288
296
|
}, z.core.$strict>>;
|
|
289
297
|
mediaStartedAt: z.ZodOptional<z.ZodString>;
|
|
290
298
|
mediaEndedAt: z.ZodOptional<z.ZodString>;
|
|
299
|
+
mediaStartOffsetMs: z.ZodOptional<z.ZodNumber>;
|
|
300
|
+
mediaMutedIntervalsMs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
301
|
+
startMs: z.ZodNumber;
|
|
302
|
+
endMs: z.ZodNumber;
|
|
303
|
+
}, z.core.$strict>>>;
|
|
291
304
|
status: z.ZodLiteral<"ready">;
|
|
292
305
|
mediaType: z.ZodEnum<{
|
|
293
306
|
"audio/mp4": "audio/mp4";
|
|
294
307
|
"video/mp4": "video/mp4";
|
|
308
|
+
"audio/ogg": "audio/ogg";
|
|
309
|
+
"video/webm": "video/webm";
|
|
295
310
|
}>;
|
|
296
311
|
sizeBytes: z.ZodNumber;
|
|
297
312
|
durationMs: z.ZodNullable<z.ZodNumber>;
|
|
@@ -314,6 +329,11 @@ declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
|
314
329
|
}, z.core.$strict>>;
|
|
315
330
|
mediaStartedAt: z.ZodOptional<z.ZodString>;
|
|
316
331
|
mediaEndedAt: z.ZodOptional<z.ZodString>;
|
|
332
|
+
mediaStartOffsetMs: z.ZodOptional<z.ZodNumber>;
|
|
333
|
+
mediaMutedIntervalsMs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
334
|
+
startMs: z.ZodNumber;
|
|
335
|
+
endMs: z.ZodNumber;
|
|
336
|
+
}, z.core.$strict>>>;
|
|
317
337
|
status: z.ZodLiteral<"failed">;
|
|
318
338
|
errorCode: z.ZodEnum<{
|
|
319
339
|
recording_failed: "recording_failed";
|
|
@@ -326,6 +346,7 @@ declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
|
326
346
|
audio_video: "audio_video";
|
|
327
347
|
off: "off";
|
|
328
348
|
participants: "participants";
|
|
349
|
+
tracks: "tracks";
|
|
329
350
|
}>>;
|
|
330
351
|
recordings: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
331
352
|
sessionId: z.ZodString;
|
|
@@ -346,6 +367,11 @@ declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
|
346
367
|
}, z.core.$strict>>;
|
|
347
368
|
mediaStartedAt: z.ZodOptional<z.ZodString>;
|
|
348
369
|
mediaEndedAt: z.ZodOptional<z.ZodString>;
|
|
370
|
+
mediaStartOffsetMs: z.ZodOptional<z.ZodNumber>;
|
|
371
|
+
mediaMutedIntervalsMs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
372
|
+
startMs: z.ZodNumber;
|
|
373
|
+
endMs: z.ZodNumber;
|
|
374
|
+
}, z.core.$strict>>>;
|
|
349
375
|
status: z.ZodEnum<{
|
|
350
376
|
pending: "pending";
|
|
351
377
|
recording: "recording";
|
|
@@ -371,10 +397,17 @@ declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
|
371
397
|
}, z.core.$strict>>;
|
|
372
398
|
mediaStartedAt: z.ZodOptional<z.ZodString>;
|
|
373
399
|
mediaEndedAt: z.ZodOptional<z.ZodString>;
|
|
400
|
+
mediaStartOffsetMs: z.ZodOptional<z.ZodNumber>;
|
|
401
|
+
mediaMutedIntervalsMs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
402
|
+
startMs: z.ZodNumber;
|
|
403
|
+
endMs: z.ZodNumber;
|
|
404
|
+
}, z.core.$strict>>>;
|
|
374
405
|
status: z.ZodLiteral<"ready">;
|
|
375
406
|
mediaType: z.ZodEnum<{
|
|
376
407
|
"audio/mp4": "audio/mp4";
|
|
377
408
|
"video/mp4": "video/mp4";
|
|
409
|
+
"audio/ogg": "audio/ogg";
|
|
410
|
+
"video/webm": "video/webm";
|
|
378
411
|
}>;
|
|
379
412
|
sizeBytes: z.ZodNumber;
|
|
380
413
|
durationMs: z.ZodNullable<z.ZodNumber>;
|
|
@@ -397,6 +430,11 @@ declare const liveKitSessionGrantSchema: z.ZodObject<{
|
|
|
397
430
|
}, z.core.$strict>>;
|
|
398
431
|
mediaStartedAt: z.ZodOptional<z.ZodString>;
|
|
399
432
|
mediaEndedAt: z.ZodOptional<z.ZodString>;
|
|
433
|
+
mediaStartOffsetMs: z.ZodOptional<z.ZodNumber>;
|
|
434
|
+
mediaMutedIntervalsMs: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
435
|
+
startMs: z.ZodNumber;
|
|
436
|
+
endMs: z.ZodNumber;
|
|
437
|
+
}, z.core.$strict>>>;
|
|
400
438
|
status: z.ZodLiteral<"failed">;
|
|
401
439
|
errorCode: z.ZodEnum<{
|
|
402
440
|
recording_failed: "recording_failed";
|
package/dist/react-native.d.ts
CHANGED
|
@@ -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-
|
|
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-
|
|
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';
|
|
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';
|
package/dist/react-native.js
CHANGED
|
@@ -1630,13 +1630,17 @@ var styles = StyleSheet.create({
|
|
|
1630
1630
|
}
|
|
1631
1631
|
});
|
|
1632
1632
|
var RECORDED_MEDIA_MODES = ["audio", "video", "audio_video"];
|
|
1633
|
-
var recordingModeSchema = z.enum(["off", ...RECORDED_MEDIA_MODES, "participants"]).describe("Server-owned recording policy; omitted means off. Legacy audio includes user and avatar audio. participants saves one continuous audio/video file per participant, without mixing their voices.");
|
|
1633
|
+
var recordingModeSchema = z.enum(["off", ...RECORDED_MEDIA_MODES, "participants", "tracks"]).describe("Server-owned recording policy; omitted means off. Legacy audio includes user and avatar audio. participants saves one continuous audio/video file per participant, without mixing their voices. tracks saves each published participant audio/video track separately; list recordings by session after capture.");
|
|
1634
1634
|
var RECORDING_STATUSES = ["pending", "recording", "processing", "ready", "failed", "expired"];
|
|
1635
1635
|
z.enum(RECORDING_STATUSES);
|
|
1636
1636
|
var recordingParticipantSchema = z.object({
|
|
1637
1637
|
participantIdentity: z.string().min(1).max(160),
|
|
1638
1638
|
role: z.enum(["user", "avatar"])
|
|
1639
1639
|
}).strict();
|
|
1640
|
+
var recordingMutedIntervalSchema = z.object({
|
|
1641
|
+
startMs: z.number().int().min(0),
|
|
1642
|
+
endMs: z.number().int().positive()
|
|
1643
|
+
}).strict().refine((interval) => interval.endMs > interval.startMs, "Muted interval must end after it starts");
|
|
1640
1644
|
var recordingMetadataSchema = z.object({
|
|
1641
1645
|
sessionId: z.string().min(1),
|
|
1642
1646
|
recordingId: z.string().min(1),
|
|
@@ -1645,13 +1649,15 @@ var recordingMetadataSchema = z.object({
|
|
|
1645
1649
|
retainedUntil: z.string().datetime({ offset: true }),
|
|
1646
1650
|
participant: recordingParticipantSchema.optional(),
|
|
1647
1651
|
mediaStartedAt: z.string().datetime({ offset: true }).optional(),
|
|
1648
|
-
mediaEndedAt: z.string().datetime({ offset: true }).optional()
|
|
1652
|
+
mediaEndedAt: z.string().datetime({ offset: true }).optional(),
|
|
1653
|
+
mediaStartOffsetMs: z.number().int().min(0).optional().describe("First playable native media timestamp relative to mediaStartedAt. Playback retains this offset; it does not reset the file clock to zero."),
|
|
1654
|
+
mediaMutedIntervalsMs: z.array(recordingMutedIntervalSchema).optional().describe("Intervals of hidden camera video relative to mediaStartedAt, using native media timestamps. Audio playback continues through these intervals.")
|
|
1649
1655
|
});
|
|
1650
1656
|
var recordingArtifactSchema = z.discriminatedUnion("status", [
|
|
1651
1657
|
recordingMetadataSchema.extend({ status: z.enum(["pending", "recording", "processing", "expired"]) }).strict(),
|
|
1652
1658
|
recordingMetadataSchema.extend({
|
|
1653
1659
|
status: z.literal("ready"),
|
|
1654
|
-
mediaType: z.enum(["audio/mp4", "video/mp4"]),
|
|
1660
|
+
mediaType: z.enum(["audio/mp4", "video/mp4", "audio/ogg", "video/webm"]),
|
|
1655
1661
|
sizeBytes: z.number().int().positive(),
|
|
1656
1662
|
durationMs: z.number().int().nonnegative().nullable()
|
|
1657
1663
|
}).strict(),
|
|
@@ -1714,6 +1720,8 @@ var transcriptionOptionsSchema = z.object({
|
|
|
1714
1720
|
languageCodes: transcriptionWireSchema.shape.language_codes,
|
|
1715
1721
|
customVocabulary: transcriptionWireSchema.shape.custom_vocabulary
|
|
1716
1722
|
}).strict();
|
|
1723
|
+
var schema02 = z.enum(["minor-sexual-content-v1"]);
|
|
1724
|
+
var contentPolicySchema = schema02;
|
|
1717
1725
|
|
|
1718
1726
|
// ../client/src/wire.ts
|
|
1719
1727
|
var DEFAULT_AVATAR_ID = "maria";
|
|
@@ -1880,7 +1888,8 @@ z.object({
|
|
|
1880
1888
|
support_edits: sessionSupportEditsSchema.optional(),
|
|
1881
1889
|
transcript_webhook: transcriptWebhookSchema.optional(),
|
|
1882
1890
|
client_metadata: clientMetadataSchema.optional(),
|
|
1883
|
-
connection_history: z.boolean().optional()
|
|
1891
|
+
connection_history: z.boolean().optional(),
|
|
1892
|
+
content_policy: contentPolicySchema.optional()
|
|
1884
1893
|
}).strict().superRefine((value, ctx) => {
|
|
1885
1894
|
if (value.support_edits && value.render_backend === "generative") {
|
|
1886
1895
|
ctx.addIssue({
|
|
@@ -1948,7 +1957,8 @@ z.object({
|
|
|
1948
1957
|
supportEdits: sessionSupportEditsSchema.optional(),
|
|
1949
1958
|
transcriptWebhook: transcriptWebhookSchema.optional(),
|
|
1950
1959
|
clientMetadata: clientMetadataSchema.optional(),
|
|
1951
|
-
connectionHistory: z.boolean().optional()
|
|
1960
|
+
connectionHistory: z.boolean().optional(),
|
|
1961
|
+
contentPolicy: contentPolicySchema.optional()
|
|
1952
1962
|
}).strict();
|
|
1953
1963
|
z.object({
|
|
1954
1964
|
recording: recordingArtifactSchema.optional(),
|
package/dist/react.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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-
|
|
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-
|
|
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';
|
|
4
4
|
import { CSSProperties, ReactNode } from 'react';
|
|
5
5
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
6
|
-
import { R as RecordingArtifact } from './recording-
|
|
6
|
+
import { R as RecordingArtifact } from './recording-ydFVySSd.js';
|
|
7
7
|
export { D as DEFAULT_AVATAR_PLAYOUT_DELAY_SECONDS } from './playout-delay-CtRZdtsj.js';
|
|
8
8
|
import 'zod';
|
|
9
9
|
import 'livekit-client';
|
|
@@ -201,7 +201,7 @@ type RecordingPlaybackAsset = {
|
|
|
201
201
|
recording: RecordingArtifact;
|
|
202
202
|
url: string;
|
|
203
203
|
};
|
|
204
|
-
/**
|
|
204
|
+
/** Participant files and separate track segments share one clock without mixing voices. */
|
|
205
205
|
declare function RecordingPlayer({ assets, className }: {
|
|
206
206
|
assets: readonly RecordingPlaybackAsset[];
|
|
207
207
|
className?: string;
|