From 7a52b8bfe919c3f44d2acc5315d905cae113d20e Mon Sep 17 00:00:00 2001 From: lukasIO Date: Tue, 17 Dec 2024 15:41:33 +0100 Subject: [PATCH 01/18] Add data stream receiving --- examples/data-streams/.env.example | 6 + examples/data-streams/README.md | 39 ++ examples/data-streams/index.ts | 48 +++ examples/data-streams/package.json | 23 ++ packages/livekit-rtc/generate_proto.sh | 3 +- packages/livekit-rtc/package.json | 5 +- packages/livekit-rtc/rust-sdks | 2 +- .../livekit-rtc/src/data_streams/index.ts | 3 + .../src/data_streams/stream_reader.ts | 170 +++++++++ .../src/data_streams/stream_writer.ts | 29 ++ .../livekit-rtc/src/data_streams/types.ts | 38 ++ packages/livekit-rtc/src/index.ts | 1 + packages/livekit-rtc/src/log.ts | 24 ++ packages/livekit-rtc/src/proto/ffi_pb.ts | 32 +- .../livekit-rtc/src/proto/participant_pb.ts | 114 +++++- packages/livekit-rtc/src/proto/room_pb.ts | 346 +++++++++++++----- packages/livekit-rtc/src/proto/stats_pb.ts | 58 ++- .../src/proto/track_publication_pb.ts | 107 ++++++ packages/livekit-rtc/src/room.ts | 108 +++++- packages/livekit-rtc/src/utils.ts | 13 + pnpm-lock.yaml | 255 +++++++++++++ turbo.json | 2 +- 22 files changed, 1327 insertions(+), 99 deletions(-) create mode 100644 examples/data-streams/.env.example create mode 100644 examples/data-streams/README.md create mode 100644 examples/data-streams/index.ts create mode 100644 examples/data-streams/package.json create mode 100644 packages/livekit-rtc/src/data_streams/index.ts create mode 100644 packages/livekit-rtc/src/data_streams/stream_reader.ts create mode 100644 packages/livekit-rtc/src/data_streams/stream_writer.ts create mode 100644 packages/livekit-rtc/src/data_streams/types.ts create mode 100644 packages/livekit-rtc/src/log.ts create mode 100644 packages/livekit-rtc/src/proto/track_publication_pb.ts create mode 100644 packages/livekit-rtc/src/utils.ts diff --git a/examples/data-streams/.env.example b/examples/data-streams/.env.example new file mode 100644 index 00000000..0e56d427 --- /dev/null +++ b/examples/data-streams/.env.example @@ -0,0 +1,6 @@ +# 1. Copy this file and rename it to .env +# 2. Update the enviroment variables below. + +LIVEKIT_API_KEY=mykey +LIVEKIT_API_SECRET=mysecret +LIVEKIT_URL=wss://myproject.livekit.cloud diff --git a/examples/data-streams/README.md b/examples/data-streams/README.md new file mode 100644 index 00000000..3545580c --- /dev/null +++ b/examples/data-streams/README.md @@ -0,0 +1,39 @@ +# RPC Example + +This example demonstrates how to use RPC between two participants with LiveKit. + +The example includes two scenarios: +1. A simple greeting exchange. +2. A contrived function-calling service with JSON data payloads and multiple method types. + +## Prerequisites + +Before running this example, make sure you have: + +1. Node.js installed on your machine. +2. A LiveKit server running (either locally or remotely). +3. LiveKit API key and secret. + +## Setup + +1. Install dependencies: + ``` + pnpm install + ``` + +2. Create a `.env.local` file in the example directory with your LiveKit credentials: + ``` + LIVEKIT_API_KEY=your_api_key + LIVEKIT_API_SECRET=your_api_secret + LIVEKIT_URL=your_livekit_url + ``` + +## Running the Example + +To run the example, use the following command: + +``` +pnpm run start +``` + +The example will log to your terminal. diff --git a/examples/data-streams/index.ts b/examples/data-streams/index.ts new file mode 100644 index 00000000..64b5f827 --- /dev/null +++ b/examples/data-streams/index.ts @@ -0,0 +1,48 @@ +import { Room, RoomEvent, type TextStreamReader } from '@livekit/rtc-node'; +import { config } from 'dotenv'; +import { AccessToken } from 'livekit-server-sdk'; + +config({ path: '.env.local', override: false }); +const LIVEKIT_API_KEY = process.env.LIVEKIT_API_KEY; +const LIVEKIT_API_SECRET = process.env.LIVEKIT_API_SECRET; +const LIVEKIT_URL = process.env.LIVEKIT_URL; +if (!LIVEKIT_API_KEY || !LIVEKIT_API_SECRET || !LIVEKIT_URL) { + throw new Error('Missing required environment variables. Please check your .env.local file.'); +} + +const main = async () => { + const roomName = `dev`; + const identity = 'tester'; + const token = await createToken(identity, roomName); + + const room = new Room(); + + const finishedPromise = new Promise((resolve) => { + room.on(RoomEvent.ParticipantDisconnected, resolve); + }); + + room.on(RoomEvent.TextStreamReceived, async (reader: TextStreamReader) => { + for await (const { collected } of reader) { + console.log(collected); + } + }); + + await room.connect(LIVEKIT_URL, token); + + await finishedPromise; +}; + +const createToken = async (identity: string, roomName: string) => { + const token = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET, { + identity, + }); + token.addGrant({ + room: roomName, + roomJoin: true, + canPublish: true, + canSubscribe: true, + }); + return await token.toJwt(); +}; + +main(); diff --git a/examples/data-streams/package.json b/examples/data-streams/package.json new file mode 100644 index 00000000..1f76a36a --- /dev/null +++ b/examples/data-streams/package.json @@ -0,0 +1,23 @@ +{ + "name": "example-data-streams", + "author": "LiveKit", + "private": "true", + "description": "Example of using data streams in LiveKit", + "type": "module", + "main": "index.ts", + "scripts": { + "lint": "eslint -f unix \"**/*.ts\"", + "start": "tsx index.ts" + }, + "keywords": [], + "license": "Apache-2.0", + "dependencies": { + "@livekit/rtc-node": "workspace:*", + "dotenv": "^16.4.5", + "livekit-server-sdk": "workspace:*" + }, + "devDependencies": { + "@types/node": "^20.10.4", + "tsx": "^4.7.1" + } +} diff --git a/packages/livekit-rtc/generate_proto.sh b/packages/livekit-rtc/generate_proto.sh index a50ddad2..ee27c8c5 100755 --- a/packages/livekit-rtc/generate_proto.sh +++ b/packages/livekit-rtc/generate_proto.sh @@ -26,4 +26,5 @@ PATH=$PATH:$(pwd)/node_modules/.bin \ $FFI_PROTOCOL/video_frame.proto \ $FFI_PROTOCOL/e2ee.proto \ $FFI_PROTOCOL/stats.proto \ - $FFI_PROTOCOL/rpc.proto + $FFI_PROTOCOL/rpc.proto \ + $FFI_PROTOCOL/track_publication.proto diff --git a/packages/livekit-rtc/package.json b/packages/livekit-rtc/package.json index 6018f8d5..60a4e1de 100644 --- a/packages/livekit-rtc/package.json +++ b/packages/livekit-rtc/package.json @@ -48,7 +48,10 @@ "dependencies": { "@bufbuild/protobuf": "^2.2.0", "@livekit/mutex": "^1.0.0", - "@livekit/typed-emitter": "^3.0.0" + "@livekit/protocol": "^1.29.4", + "@livekit/typed-emitter": "^3.0.0", + "pino": "^8.19.0", + "pino-pretty": "^11.0.0" }, "devDependencies": { "@bufbuild/protoc-gen-es": "^2.2.0", diff --git a/packages/livekit-rtc/rust-sdks b/packages/livekit-rtc/rust-sdks index 06997356..7e01c918 160000 --- a/packages/livekit-rtc/rust-sdks +++ b/packages/livekit-rtc/rust-sdks @@ -1 +1 @@ -Subproject commit 06997356c083b01da766c4c93e8c4e8354d871ce +Subproject commit 7e01c918546daff87b9f52e39923f7a2c47d2a78 diff --git a/packages/livekit-rtc/src/data_streams/index.ts b/packages/livekit-rtc/src/data_streams/index.ts new file mode 100644 index 00000000..cd33642b --- /dev/null +++ b/packages/livekit-rtc/src/data_streams/index.ts @@ -0,0 +1,3 @@ +export * from './stream_reader.js'; +export * from './stream_writer.js'; +export type * from './types.js'; diff --git a/packages/livekit-rtc/src/data_streams/stream_reader.ts b/packages/livekit-rtc/src/data_streams/stream_reader.ts new file mode 100644 index 00000000..52b8670d --- /dev/null +++ b/packages/livekit-rtc/src/data_streams/stream_reader.ts @@ -0,0 +1,170 @@ +import type { DataStream_Chunk } from '@livekit/protocol'; +import type { ReadableStream } from 'node:stream/web'; +import { log } from '../log.js'; +import { bigIntToNumber } from '../utils.js'; +import type { BaseStreamInfo, FileStreamInfo, TextStreamChunk, TextStreamInfo } from './types.js'; + +abstract class BaseStreamReader { + protected reader: ReadableStream; + + protected totalChunkCount?: number; + + protected _info: T; + + get info() { + return this._info; + } + + constructor(info: T, stream: ReadableStream, totalChunkCount?: number) { + this.reader = stream; + this.totalChunkCount = totalChunkCount; + this._info = info; + } + + protected abstract handleChunkReceived(chunk: DataStream_Chunk): void; + + onProgress?: (progress: number | undefined) => void; + + abstract readAll(): Promise>; +} + +export class BinaryStreamReader extends BaseStreamReader { + private chunksReceived: Set; + + constructor( + info: FileStreamInfo, + stream: ReadableStream, + totalChunkCount?: number, + ) { + super(info, stream, totalChunkCount); + this.chunksReceived = new Set(); + } + + protected handleChunkReceived(chunk: DataStream_Chunk) { + this.chunksReceived.add(bigIntToNumber(chunk.chunkIndex)); + const currentProgress = this.totalChunkCount + ? this.chunksReceived.size / this.totalChunkCount + : undefined; + this.onProgress?.(currentProgress); + } + + [Symbol.asyncIterator]() { + const reader = this.reader.getReader(); + + return { + next: async (): Promise> => { + try { + const { done, value } = await reader.read(); + if (done) { + return { done: true, value: undefined as any }; + } else { + this.handleChunkReceived(value); + return { done: false, value: value.content }; + } + } catch (error) { + // TODO handle errors + log.error('error processing stream update', error); + return { done: true, value: undefined }; + } + }, + + return(): IteratorResult { + reader.releaseLock(); + return { done: true, value: undefined }; + }, + }; + } + + async readAll(): Promise> { + const chunks: Set = new Set(); + for await (const chunk of this) { + chunks.add(chunk); + } + return Array.from(chunks); + } +} + +/** + * A class to read chunks from a ReadableStream and provide them in a structured format. + */ +export class TextStreamReader extends BaseStreamReader { + private receivedChunks: Map; + + /** + * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string + * that has been received up to the current point in time. + */ + constructor( + info: TextStreamInfo, + stream: ReadableStream, + totalChunkCount?: number, + ) { + super(info, stream, totalChunkCount); + this.receivedChunks = new Map(); + } + + protected handleChunkReceived(chunk: DataStream_Chunk) { + const index = bigIntToNumber(chunk.chunkIndex); + const previousChunkAtIndex = this.receivedChunks.get(index); + if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) { + // we have a newer version already, dropping the old one + return; + } + this.receivedChunks.set(index, chunk); + const currentProgress = this.totalChunkCount + ? this.receivedChunks.size / this.totalChunkCount + : undefined; + this.onProgress?.(currentProgress); + } + + /** + * Async iterator implementation to allow usage of `for await...of` syntax. + * Yields structured chunks from the stream. + * + */ + [Symbol.asyncIterator]() { + const reader = this.reader.getReader(); + const decoder = new TextDecoder(); + + return { + next: async (): Promise> => { + try { + const { done, value } = await reader.read(); + if (done) { + return { done: true, value: undefined }; + } else { + this.handleChunkReceived(value); + return { + done: false, + value: { + index: bigIntToNumber(value.chunkIndex), + current: decoder.decode(value.content), + collected: Array.from(this.receivedChunks.values()) + .sort((a, b) => bigIntToNumber(a.chunkIndex) - bigIntToNumber(b.chunkIndex)) + .map((chunk) => decoder.decode(chunk.content)) + .join(''), + }, + }; + } + } catch (error) { + // TODO handle errors + log.error('error processing stream update', error); + return { done: true, value: undefined }; + } + }, + + return(): IteratorResult { + reader.releaseLock(); + return { done: true, value: undefined }; + }, + }; + } + + async readAll(): Promise { + let latestString: string = ''; + for await (const { collected } of this) { + latestString = collected; + } + return latestString; + } +} diff --git a/packages/livekit-rtc/src/data_streams/stream_writer.ts b/packages/livekit-rtc/src/data_streams/stream_writer.ts new file mode 100644 index 00000000..58e385f5 --- /dev/null +++ b/packages/livekit-rtc/src/data_streams/stream_writer.ts @@ -0,0 +1,29 @@ +import type { WritableStream } from 'node:stream/web'; + +class BaseStreamWriter { + protected writableStream: WritableStream; + + protected defaultWriter: WritableStreamDefaultWriter; + + protected onClose?: () => void; + + constructor(writableStream: WritableStream, onClose?: () => void) { + this.writableStream = writableStream; + this.defaultWriter = writableStream.getWriter(); + this.onClose = onClose; + } + + write(chunk: T): Promise { + return this.defaultWriter.write(chunk); + } + + async close() { + await this.defaultWriter.close(); + this.defaultWriter.releaseLock(); + this.onClose?.(); + } +} + +export class TextStreamWriter extends BaseStreamWriter {} + +export class BinaryStreamWriter extends BaseStreamWriter {} diff --git a/packages/livekit-rtc/src/data_streams/types.ts b/packages/livekit-rtc/src/data_streams/types.ts new file mode 100644 index 00000000..9e6b8cd5 --- /dev/null +++ b/packages/livekit-rtc/src/data_streams/types.ts @@ -0,0 +1,38 @@ +import type { DataStream_Chunk, DataStream_Header } from '@livekit/protocol'; + +export interface StreamController { + header: DataStream_Header; + controller: ReadableStreamDefaultController; + startTime: number; + endTime?: number; +} + +export interface BaseStreamInfo { + id: string; + mimeType: string; + topic: string; + timestamp: number; + /** total size in bytes for finite streams and undefined for streams of unknown size */ + size?: number; + extensions?: Record; +} + +export type FileStreamInfo = BaseStreamInfo & { + fileName: string; +}; + +export type TextStreamInfo = BaseStreamInfo; + +export type TextStreamChunk = { + index: number; + current: string; + collected: string; +}; + +export interface SendTextOptions { + topic?: string; + // replyToMessageId?: string; + destinationIdentities?: Array; + attachments?: Array; + onProgress?: (progress: number) => void; +} diff --git a/packages/livekit-rtc/src/index.ts b/packages/livekit-rtc/src/index.ts index dba1821c..dea0e612 100644 --- a/packages/livekit-rtc/src/index.ts +++ b/packages/livekit-rtc/src/index.ts @@ -62,6 +62,7 @@ export { VideoBufferType, VideoRotation, VideoCodec } from './proto/video_frame_ export { ParticipantKind } from './proto/participant_pb.js'; export { dispose } from './ffi_client.js'; export type { ChatMessage } from './types.js'; +export * from './data_streams/index.js'; // exposing helpers for API compatibility with 1.x version of protobuf-es where these were class instances diff --git a/packages/livekit-rtc/src/log.ts b/packages/livekit-rtc/src/log.ts new file mode 100644 index 00000000..2ea0041b --- /dev/null +++ b/packages/livekit-rtc/src/log.ts @@ -0,0 +1,24 @@ +import type { LevelWithSilent, LoggerOptions } from 'pino'; +import { pino } from 'pino'; + +const isProduction = process.env.NODE_ENV === 'production'; + +console.log({ isProduction }); + +const defaultOptions: LoggerOptions = { name: 'lk-rtc' }; + +const devOptions: LoggerOptions = { + ...defaultOptions, + transport: { + target: 'pino-pretty', + options: { + colorize: true, + }, + }, +}; + +const log = pino(isProduction ? defaultOptions : devOptions); +log.level = isProduction ? 'info' : 'debug'; + +export type LogLevel = LevelWithSilent; +export { log }; diff --git a/packages/livekit-rtc/src/proto/ffi_pb.ts b/packages/livekit-rtc/src/proto/ffi_pb.ts index 49e1c071..c445cec4 100644 --- a/packages/livekit-rtc/src/proto/ffi_pb.ts +++ b/packages/livekit-rtc/src/proto/ffi_pb.ts @@ -22,6 +22,8 @@ import type { E2eeRequest, E2eeResponse } from "./e2ee_pb.js"; import { file_e2ee } from "./e2ee_pb.js"; import type { CreateAudioTrackRequest, CreateAudioTrackResponse, CreateVideoTrackRequest, CreateVideoTrackResponse, EnableRemoteTrackRequest, EnableRemoteTrackResponse, GetStatsCallback, GetStatsRequest, GetStatsResponse, LocalTrackMuteRequest, LocalTrackMuteResponse, TrackEvent } from "./track_pb.js"; import { file_track } from "./track_pb.js"; +import type { EnableRemoteTrackPublicationRequest, EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionRequest, UpdateRemoteTrackPublicationDimensionResponse } from "./track_publication_pb.js"; +import { file_track_publication } from "./track_publication_pb.js"; import type { ConnectCallback, ConnectRequest, ConnectResponse, DisconnectCallback, DisconnectRequest, DisconnectResponse, EditChatMessageRequest, GetSessionStatsCallback, GetSessionStatsRequest, GetSessionStatsResponse, PublishDataCallback, PublishDataRequest, PublishDataResponse, PublishSipDtmfCallback, PublishSipDtmfRequest, PublishSipDtmfResponse, PublishTrackCallback, PublishTrackRequest, PublishTrackResponse, PublishTranscriptionCallback, PublishTranscriptionRequest, PublishTranscriptionResponse, RoomEvent, SendChatMessageCallback, SendChatMessageRequest, SendChatMessageResponse, SetLocalAttributesCallback, SetLocalAttributesRequest, SetLocalAttributesResponse, SetLocalMetadataCallback, SetLocalMetadataRequest, SetLocalMetadataResponse, SetLocalNameCallback, SetLocalNameRequest, SetLocalNameResponse, SetSubscribedRequest, SetSubscribedResponse, UnpublishTrackCallback, UnpublishTrackRequest, UnpublishTrackResponse } from "./room_pb.js"; import { file_room } from "./room_pb.js"; import type { CaptureVideoFrameRequest, CaptureVideoFrameResponse, NewVideoSourceRequest, NewVideoSourceResponse, NewVideoStreamRequest, NewVideoStreamResponse, VideoConvertRequest, VideoConvertResponse, VideoStreamEvent, VideoStreamFromParticipantRequest, VideoStreamFromParticipantResponse } from "./video_frame_pb.js"; @@ -36,7 +38,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file ffi.proto. */ export const file_ffi: GenFile = /*@__PURE__*/ - fileDesc("CglmZmkucHJvdG8SDWxpdmVraXQucHJvdG8iphUKCkZmaVJlcXVlc3QSMAoHZGlzcG9zZRgCIAEoCzIdLmxpdmVraXQucHJvdG8uRGlzcG9zZVJlcXVlc3RIABIwCgdjb25uZWN0GAMgASgLMh0ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVxdWVzdEgAEjYKCmRpc2Nvbm5lY3QYBCABKAsyIC5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZXF1ZXN0SAASOwoNcHVibGlzaF90cmFjaxgFIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrUmVxdWVzdEgAEj8KD3VucHVibGlzaF90cmFjaxgGIAEoCzIkLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXF1ZXN0SAASOQoMcHVibGlzaF9kYXRhGAcgASgLMiEubGl2ZWtpdC5wcm90by5QdWJsaXNoRGF0YVJlcXVlc3RIABI9Cg5zZXRfc3Vic2NyaWJlZBgIIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0U3Vic2NyaWJlZFJlcXVlc3RIABJEChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJi5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXF1ZXN0SAASPAoOc2V0X2xvY2FsX25hbWUYCiABKAsyIi5saXZla2l0LnByb3RvLlNldExvY2FsTmFtZVJlcXVlc3RIABJIChRzZXRfbG9jYWxfYXR0cmlidXRlcxgLIAEoCzIoLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzUmVxdWVzdEgAEkIKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiUubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXF1ZXN0SAASSwoVcHVibGlzaF90cmFuc2NyaXB0aW9uGA0gASgLMioubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3RIABJAChBwdWJsaXNoX3NpcF9kdG1mGA4gASgLMiQubGl2ZWtpdC5wcm90by5QdWJsaXNoU2lwRHRtZlJlcXVlc3RIABJEChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJi5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXF1ZXN0SAASRAoSY3JlYXRlX2F1ZGlvX3RyYWNrGBAgASgLMiYubGl2ZWtpdC5wcm90by5DcmVhdGVBdWRpb1RyYWNrUmVxdWVzdEgAEkAKEGxvY2FsX3RyYWNrX211dGUYESABKAsyJC5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tNdXRlUmVxdWVzdEgAEkYKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyJy5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVxdWVzdEgAEjMKCWdldF9zdGF0cxgTIAEoCzIeLmxpdmVraXQucHJvdG8uR2V0U3RhdHNSZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3N0cmVhbRgUIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9TdHJlYW1SZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXF1ZXN0SAASRgoTY2FwdHVyZV92aWRlb19mcmFtZRgWIAEoCzInLmxpdmVraXQucHJvdG8uQ2FwdHVyZVZpZGVvRnJhbWVSZXF1ZXN0SAASOwoNdmlkZW9fY29udmVydBgXIAEoCzIiLmxpdmVraXQucHJvdG8uVmlkZW9Db252ZXJ0UmVxdWVzdEgAElkKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjAubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlcXVlc3RIABJAChBuZXdfYXVkaW9fc3RyZWFtGBkgASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1N0cmVhbVJlcXVlc3RIABJAChBuZXdfYXVkaW9fc291cmNlGBogASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1NvdXJjZVJlcXVlc3RIABJGChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMicubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlcXVlc3RIABJEChJjbGVhcl9hdWRpb19idWZmZXIYHCABKAsyJi5saXZla2l0LnByb3RvLkNsZWFyQXVkaW9CdWZmZXJSZXF1ZXN0SAASRgoTbmV3X2F1ZGlvX3Jlc2FtcGxlchgdIAEoCzInLmxpdmVraXQucHJvdG8uTmV3QXVkaW9SZXNhbXBsZXJSZXF1ZXN0SAASRAoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMiYubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVxdWVzdEgAEioKBGUyZWUYHyABKAsyGi5saXZla2l0LnByb3RvLkUyZWVSZXF1ZXN0SAASWQodYXVkaW9fc3RyZWFtX2Zyb21fcGFydGljaXBhbnQYICABKAsyMC5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRnJvbVBhcnRpY2lwYW50UmVxdWVzdEgAEkIKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiUubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXF1ZXN0SAASRAoScHVzaF9zb3hfcmVzYW1wbGVyGCIgASgLMiYubGl2ZWtpdC5wcm90by5QdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkYKE2ZsdXNoX3NveF9yZXNhbXBsZXIYIyABKAsyJy5saXZla2l0LnByb3RvLkZsdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkIKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiUubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0SAASQgoRZWRpdF9jaGF0X21lc3NhZ2UYJSABKAsyJS5saXZla2l0LnByb3RvLkVkaXRDaGF0TWVzc2FnZVJlcXVlc3RIABI3CgtwZXJmb3JtX3JwYxgmIAEoCzIgLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY1JlcXVlc3RIABJGChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMicubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlcXVlc3RIABJKChV1bnJlZ2lzdGVyX3JwY19tZXRob2QYKCABKAsyKS5saXZla2l0LnByb3RvLlVucmVnaXN0ZXJScGNNZXRob2RSZXF1ZXN0SAASWwoecnBjX21ldGhvZF9pbnZvY2F0aW9uX3Jlc3BvbnNlGCkgASgLMjEubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uUmVzcG9uc2VSZXF1ZXN0SABCCQoHbWVzc2FnZSKKFQoLRmZpUmVzcG9uc2USMQoHZGlzcG9zZRgCIAEoCzIeLmxpdmVraXQucHJvdG8uRGlzcG9zZVJlc3BvbnNlSAASMQoHY29ubmVjdBgDIAEoCzIeLmxpdmVraXQucHJvdG8uQ29ubmVjdFJlc3BvbnNlSAASNwoKZGlzY29ubmVjdBgEIAEoCzIhLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdFJlc3BvbnNlSAASPAoNcHVibGlzaF90cmFjaxgFIAEoCzIjLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrUmVzcG9uc2VIABJACg91bnB1Ymxpc2hfdHJhY2sYBiABKAsyJS5saXZla2l0LnByb3RvLlVucHVibGlzaFRyYWNrUmVzcG9uc2VIABI6CgxwdWJsaXNoX2RhdGEYByABKAsyIi5saXZla2l0LnByb3RvLlB1Ymxpc2hEYXRhUmVzcG9uc2VIABI+Cg5zZXRfc3Vic2NyaWJlZBgIIAEoCzIkLmxpdmVraXQucHJvdG8uU2V0U3Vic2NyaWJlZFJlc3BvbnNlSAASRQoSc2V0X2xvY2FsX21ldGFkYXRhGAkgASgLMicubGl2ZWtpdC5wcm90by5TZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2VIABI9Cg5zZXRfbG9jYWxfbmFtZRgKIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0TG9jYWxOYW1lUmVzcG9uc2VIABJJChRzZXRfbG9jYWxfYXR0cmlidXRlcxgLIAEoCzIpLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzUmVzcG9uc2VIABJDChFnZXRfc2Vzc2lvbl9zdGF0cxgMIAEoCzImLmxpdmVraXQucHJvdG8uR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2VIABJMChVwdWJsaXNoX3RyYW5zY3JpcHRpb24YDSABKAsyKy5saXZla2l0LnByb3RvLlB1Ymxpc2hUcmFuc2NyaXB0aW9uUmVzcG9uc2VIABJBChBwdWJsaXNoX3NpcF9kdG1mGA4gASgLMiUubGl2ZWtpdC5wcm90by5QdWJsaXNoU2lwRHRtZlJlc3BvbnNlSAASRQoSY3JlYXRlX3ZpZGVvX3RyYWNrGA8gASgLMicubGl2ZWtpdC5wcm90by5DcmVhdGVWaWRlb1RyYWNrUmVzcG9uc2VIABJFChJjcmVhdGVfYXVkaW9fdHJhY2sYECABKAsyJy5saXZla2l0LnByb3RvLkNyZWF0ZUF1ZGlvVHJhY2tSZXNwb25zZUgAEkEKEGxvY2FsX3RyYWNrX211dGUYESABKAsyJS5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tNdXRlUmVzcG9uc2VIABJHChNlbmFibGVfcmVtb3RlX3RyYWNrGBIgASgLMigubGl2ZWtpdC5wcm90by5FbmFibGVSZW1vdGVUcmFja1Jlc3BvbnNlSAASNAoJZ2V0X3N0YXRzGBMgASgLMh8ubGl2ZWtpdC5wcm90by5HZXRTdGF0c1Jlc3BvbnNlSAASQQoQbmV3X3ZpZGVvX3N0cmVhbRgUIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3VmlkZW9TdHJlYW1SZXNwb25zZUgAEkEKEG5ld192aWRlb19zb3VyY2UYFSABKAsyJS5saXZla2l0LnByb3RvLk5ld1ZpZGVvU291cmNlUmVzcG9uc2VIABJHChNjYXB0dXJlX3ZpZGVvX2ZyYW1lGBYgASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlVmlkZW9GcmFtZVJlc3BvbnNlSAASPAoNdmlkZW9fY29udmVydBgXIAEoCzIjLmxpdmVraXQucHJvdG8uVmlkZW9Db252ZXJ0UmVzcG9uc2VIABJaCh12aWRlb19zdHJlYW1fZnJvbV9wYXJ0aWNpcGFudBgYIAEoCzIxLmxpdmVraXQucHJvdG8uVmlkZW9TdHJlYW1Gcm9tUGFydGljaXBhbnRSZXNwb25zZUgAEkEKEG5ld19hdWRpb19zdHJlYW0YGSABKAsyJS5saXZla2l0LnByb3RvLk5ld0F1ZGlvU3RyZWFtUmVzcG9uc2VIABJBChBuZXdfYXVkaW9fc291cmNlGBogASgLMiUubGl2ZWtpdC5wcm90by5OZXdBdWRpb1NvdXJjZVJlc3BvbnNlSAASRwoTY2FwdHVyZV9hdWRpb19mcmFtZRgbIAEoCzIoLmxpdmVraXQucHJvdG8uQ2FwdHVyZUF1ZGlvRnJhbWVSZXNwb25zZUgAEkUKEmNsZWFyX2F1ZGlvX2J1ZmZlchgcIAEoCzInLmxpdmVraXQucHJvdG8uQ2xlYXJBdWRpb0J1ZmZlclJlc3BvbnNlSAASRwoTbmV3X2F1ZGlvX3Jlc2FtcGxlchgdIAEoCzIoLmxpdmVraXQucHJvdG8uTmV3QXVkaW9SZXNhbXBsZXJSZXNwb25zZUgAEkUKEnJlbWl4X2FuZF9yZXNhbXBsZRgeIAEoCzInLmxpdmVraXQucHJvdG8uUmVtaXhBbmRSZXNhbXBsZVJlc3BvbnNlSAASWgodYXVkaW9fc3RyZWFtX2Zyb21fcGFydGljaXBhbnQYHyABKAsyMS5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRnJvbVBhcnRpY2lwYW50UmVzcG9uc2VIABIrCgRlMmVlGCAgASgLMhsubGl2ZWtpdC5wcm90by5FMmVlUmVzcG9uc2VIABJDChFuZXdfc294X3Jlc2FtcGxlchghIAEoCzImLmxpdmVraXQucHJvdG8uTmV3U294UmVzYW1wbGVyUmVzcG9uc2VIABJFChJwdXNoX3NveF9yZXNhbXBsZXIYIiABKAsyJy5saXZla2l0LnByb3RvLlB1c2hTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkcKE2ZsdXNoX3NveF9yZXNhbXBsZXIYIyABKAsyKC5saXZla2l0LnByb3RvLkZsdXNoU294UmVzYW1wbGVyUmVzcG9uc2VIABJDChFzZW5kX2NoYXRfbWVzc2FnZRgkIAEoCzImLmxpdmVraXQucHJvdG8uU2VuZENoYXRNZXNzYWdlUmVzcG9uc2VIABI4CgtwZXJmb3JtX3JwYxglIAEoCzIhLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY1Jlc3BvbnNlSAASRwoTcmVnaXN0ZXJfcnBjX21ldGhvZBgmIAEoCzIoLmxpdmVraXQucHJvdG8uUmVnaXN0ZXJScGNNZXRob2RSZXNwb25zZUgAEksKFXVucmVnaXN0ZXJfcnBjX21ldGhvZBgnIAEoCzIqLmxpdmVraXQucHJvdG8uVW5yZWdpc3RlclJwY01ldGhvZFJlc3BvbnNlSAASXAoecnBjX21ldGhvZF9pbnZvY2F0aW9uX3Jlc3BvbnNlGCggASgLMjIubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uUmVzcG9uc2VSZXNwb25zZUgAQgkKB21lc3NhZ2UiigsKCEZmaUV2ZW50Ei4KCnJvb21fZXZlbnQYASABKAsyGC5saXZla2l0LnByb3RvLlJvb21FdmVudEgAEjAKC3RyYWNrX2V2ZW50GAIgASgLMhkubGl2ZWtpdC5wcm90by5UcmFja0V2ZW50SAASPQoSdmlkZW9fc3RyZWFtX2V2ZW50GAMgASgLMh8ubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUV2ZW50SAASPQoSYXVkaW9fc3RyZWFtX2V2ZW50GAQgASgLMh8ubGl2ZWtpdC5wcm90by5BdWRpb1N0cmVhbUV2ZW50SAASMQoHY29ubmVjdBgFIAEoCzIeLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrSAASNwoKZGlzY29ubmVjdBgHIAEoCzIhLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdENhbGxiYWNrSAASMQoHZGlzcG9zZRgIIAEoCzIeLmxpdmVraXQucHJvdG8uRGlzcG9zZUNhbGxiYWNrSAASPAoNcHVibGlzaF90cmFjaxgJIAEoCzIjLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrQ2FsbGJhY2tIABJACg91bnB1Ymxpc2hfdHJhY2sYCiABKAsyJS5saXZla2l0LnByb3RvLlVucHVibGlzaFRyYWNrQ2FsbGJhY2tIABI6CgxwdWJsaXNoX2RhdGEYCyABKAsyIi5saXZla2l0LnByb3RvLlB1Ymxpc2hEYXRhQ2FsbGJhY2tIABJMChVwdWJsaXNoX3RyYW5zY3JpcHRpb24YDCABKAsyKy5saXZla2l0LnByb3RvLlB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2tIABJHChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGA0gASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZUNhbGxiYWNrSAASRQoSc2V0X2xvY2FsX21ldGFkYXRhGA4gASgLMicubGl2ZWtpdC5wcm90by5TZXRMb2NhbE1ldGFkYXRhQ2FsbGJhY2tIABI9Cg5zZXRfbG9jYWxfbmFtZRgPIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0TG9jYWxOYW1lQ2FsbGJhY2tIABJJChRzZXRfbG9jYWxfYXR0cmlidXRlcxgQIAEoCzIpLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzQ2FsbGJhY2tIABI0CglnZXRfc3RhdHMYESABKAsyHy5saXZla2l0LnByb3RvLkdldFN0YXRzQ2FsbGJhY2tIABInCgRsb2dzGBIgASgLMhcubGl2ZWtpdC5wcm90by5Mb2dCYXRjaEgAEkMKEWdldF9zZXNzaW9uX3N0YXRzGBMgASgLMiYubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFja0gAEiUKBXBhbmljGBQgASgLMhQubGl2ZWtpdC5wcm90by5QYW5pY0gAEkEKEHB1Ymxpc2hfc2lwX2R0bWYYFSABKAsyJS5saXZla2l0LnByb3RvLlB1Ymxpc2hTaXBEdG1mQ2FsbGJhY2tIABI+CgxjaGF0X21lc3NhZ2UYFiABKAsyJi5saXZla2l0LnByb3RvLlNlbmRDaGF0TWVzc2FnZUNhbGxiYWNrSAASOAoLcGVyZm9ybV9ycGMYFyABKAsyIS5saXZla2l0LnByb3RvLlBlcmZvcm1ScGNDYWxsYmFja0gAEkgKFXJwY19tZXRob2RfaW52b2NhdGlvbhgYIAEoCzInLmxpdmVraXQucHJvdG8uUnBjTWV0aG9kSW52b2NhdGlvbkV2ZW50SABCCQoHbWVzc2FnZSIfCg5EaXNwb3NlUmVxdWVzdBINCgVhc3luYxgBIAIoCCIjCg9EaXNwb3NlUmVzcG9uc2USEAoIYXN5bmNfaWQYASABKAQiIwoPRGlzcG9zZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEIoUBCglMb2dSZWNvcmQSJgoFbGV2ZWwYASACKA4yFy5saXZla2l0LnByb3RvLkxvZ0xldmVsEg4KBnRhcmdldBgCIAIoCRITCgttb2R1bGVfcGF0aBgDIAEoCRIMCgRmaWxlGAQgASgJEgwKBGxpbmUYBSABKA0SDwoHbWVzc2FnZRgGIAIoCSI1CghMb2dCYXRjaBIpCgdyZWNvcmRzGAEgAygLMhgubGl2ZWtpdC5wcm90by5Mb2dSZWNvcmQiGAoFUGFuaWMSDwoHbWVzc2FnZRgBIAIoCSpTCghMb2dMZXZlbBINCglMT0dfRVJST1IQABIMCghMT0dfV0FSThABEgwKCExPR19JTkZPEAISDQoJTE9HX0RFQlVHEAMSDQoJTE9HX1RSQUNFEARCEKoCDUxpdmVLaXQuUHJvdG8", [file_e2ee, file_track, file_room, file_video_frame, file_audio_frame, file_rpc]); + fileDesc("CglmZmkucHJvdG8SDWxpdmVraXQucHJvdG8i9xYKCkZmaVJlcXVlc3QSMAoHZGlzcG9zZRgCIAEoCzIdLmxpdmVraXQucHJvdG8uRGlzcG9zZVJlcXVlc3RIABIwCgdjb25uZWN0GAMgASgLMh0ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVxdWVzdEgAEjYKCmRpc2Nvbm5lY3QYBCABKAsyIC5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZXF1ZXN0SAASOwoNcHVibGlzaF90cmFjaxgFIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrUmVxdWVzdEgAEj8KD3VucHVibGlzaF90cmFjaxgGIAEoCzIkLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXF1ZXN0SAASOQoMcHVibGlzaF9kYXRhGAcgASgLMiEubGl2ZWtpdC5wcm90by5QdWJsaXNoRGF0YVJlcXVlc3RIABI9Cg5zZXRfc3Vic2NyaWJlZBgIIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0U3Vic2NyaWJlZFJlcXVlc3RIABJEChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJi5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXF1ZXN0SAASPAoOc2V0X2xvY2FsX25hbWUYCiABKAsyIi5saXZla2l0LnByb3RvLlNldExvY2FsTmFtZVJlcXVlc3RIABJIChRzZXRfbG9jYWxfYXR0cmlidXRlcxgLIAEoCzIoLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzUmVxdWVzdEgAEkIKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiUubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXF1ZXN0SAASSwoVcHVibGlzaF90cmFuc2NyaXB0aW9uGA0gASgLMioubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3RIABJAChBwdWJsaXNoX3NpcF9kdG1mGA4gASgLMiQubGl2ZWtpdC5wcm90by5QdWJsaXNoU2lwRHRtZlJlcXVlc3RIABJEChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJi5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXF1ZXN0SAASRAoSY3JlYXRlX2F1ZGlvX3RyYWNrGBAgASgLMiYubGl2ZWtpdC5wcm90by5DcmVhdGVBdWRpb1RyYWNrUmVxdWVzdEgAEkAKEGxvY2FsX3RyYWNrX211dGUYESABKAsyJC5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tNdXRlUmVxdWVzdEgAEkYKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyJy5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVxdWVzdEgAEjMKCWdldF9zdGF0cxgTIAEoCzIeLmxpdmVraXQucHJvdG8uR2V0U3RhdHNSZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3N0cmVhbRgUIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9TdHJlYW1SZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXF1ZXN0SAASRgoTY2FwdHVyZV92aWRlb19mcmFtZRgWIAEoCzInLmxpdmVraXQucHJvdG8uQ2FwdHVyZVZpZGVvRnJhbWVSZXF1ZXN0SAASOwoNdmlkZW9fY29udmVydBgXIAEoCzIiLmxpdmVraXQucHJvdG8uVmlkZW9Db252ZXJ0UmVxdWVzdEgAElkKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjAubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlcXVlc3RIABJAChBuZXdfYXVkaW9fc3RyZWFtGBkgASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1N0cmVhbVJlcXVlc3RIABJAChBuZXdfYXVkaW9fc291cmNlGBogASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1NvdXJjZVJlcXVlc3RIABJGChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMicubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlcXVlc3RIABJEChJjbGVhcl9hdWRpb19idWZmZXIYHCABKAsyJi5saXZla2l0LnByb3RvLkNsZWFyQXVkaW9CdWZmZXJSZXF1ZXN0SAASRgoTbmV3X2F1ZGlvX3Jlc2FtcGxlchgdIAEoCzInLmxpdmVraXQucHJvdG8uTmV3QXVkaW9SZXNhbXBsZXJSZXF1ZXN0SAASRAoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMiYubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVxdWVzdEgAEioKBGUyZWUYHyABKAsyGi5saXZla2l0LnByb3RvLkUyZWVSZXF1ZXN0SAASWQodYXVkaW9fc3RyZWFtX2Zyb21fcGFydGljaXBhbnQYICABKAsyMC5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRnJvbVBhcnRpY2lwYW50UmVxdWVzdEgAEkIKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiUubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXF1ZXN0SAASRAoScHVzaF9zb3hfcmVzYW1wbGVyGCIgASgLMiYubGl2ZWtpdC5wcm90by5QdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkYKE2ZsdXNoX3NveF9yZXNhbXBsZXIYIyABKAsyJy5saXZla2l0LnByb3RvLkZsdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkIKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiUubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0SAASQgoRZWRpdF9jaGF0X21lc3NhZ2UYJSABKAsyJS5saXZla2l0LnByb3RvLkVkaXRDaGF0TWVzc2FnZVJlcXVlc3RIABI3CgtwZXJmb3JtX3JwYxgmIAEoCzIgLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY1JlcXVlc3RIABJGChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMicubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlcXVlc3RIABJKChV1bnJlZ2lzdGVyX3JwY19tZXRob2QYKCABKAsyKS5saXZla2l0LnByb3RvLlVucmVnaXN0ZXJScGNNZXRob2RSZXF1ZXN0SAASWwoecnBjX21ldGhvZF9pbnZvY2F0aW9uX3Jlc3BvbnNlGCkgASgLMjEubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uUmVzcG9uc2VSZXF1ZXN0SAASXQofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgqIAEoCzIyLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlcXVlc3RIABJwCil1cGRhdGVfcmVtb3RlX3RyYWNrX3B1YmxpY2F0aW9uX2RpbWVuc2lvbhgrIAEoCzI7LmxpdmVraXQucHJvdG8uVXBkYXRlUmVtb3RlVHJhY2tQdWJsaWNhdGlvbkRpbWVuc2lvblJlcXVlc3RIAEIJCgdtZXNzYWdlIt0WCgtGZmlSZXNwb25zZRIxCgdkaXNwb3NlGAIgASgLMh4ubGl2ZWtpdC5wcm90by5EaXNwb3NlUmVzcG9uc2VIABIxCgdjb25uZWN0GAMgASgLMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVzcG9uc2VIABI3CgpkaXNjb25uZWN0GAQgASgLMiEubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVzcG9uc2VIABI8Cg1wdWJsaXNoX3RyYWNrGAUgASgLMiMubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhY2tSZXNwb25zZUgAEkAKD3VucHVibGlzaF90cmFjaxgGIAEoCzIlLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXNwb25zZUgAEjoKDHB1Ymxpc2hfZGF0YRgHIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaERhdGFSZXNwb25zZUgAEj4KDnNldF9zdWJzY3JpYmVkGAggASgLMiQubGl2ZWtpdC5wcm90by5TZXRTdWJzY3JpYmVkUmVzcG9uc2VIABJFChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJy5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXNwb25zZUgAEj0KDnNldF9sb2NhbF9uYW1lGAogASgLMiMubGl2ZWtpdC5wcm90by5TZXRMb2NhbE5hbWVSZXNwb25zZUgAEkkKFHNldF9sb2NhbF9hdHRyaWJ1dGVzGAsgASgLMikubGl2ZWtpdC5wcm90by5TZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZUgAEkMKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiYubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXNwb25zZUgAEkwKFXB1Ymxpc2hfdHJhbnNjcmlwdGlvbhgNIAEoCzIrLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYW5zY3JpcHRpb25SZXNwb25zZUgAEkEKEHB1Ymxpc2hfc2lwX2R0bWYYDiABKAsyJS5saXZla2l0LnByb3RvLlB1Ymxpc2hTaXBEdG1mUmVzcG9uc2VIABJFChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJy5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXNwb25zZUgAEkUKEmNyZWF0ZV9hdWRpb190cmFjaxgQIAEoCzInLmxpdmVraXQucHJvdG8uQ3JlYXRlQXVkaW9UcmFja1Jlc3BvbnNlSAASQQoQbG9jYWxfdHJhY2tfbXV0ZRgRIAEoCzIlLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja011dGVSZXNwb25zZUgAEkcKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyKC5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVzcG9uc2VIABI0CglnZXRfc3RhdHMYEyABKAsyHy5saXZla2l0LnByb3RvLkdldFN0YXRzUmVzcG9uc2VIABJBChBuZXdfdmlkZW9fc3RyZWFtGBQgASgLMiUubGl2ZWtpdC5wcm90by5OZXdWaWRlb1N0cmVhbVJlc3BvbnNlSAASQQoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXNwb25zZUgAEkcKE2NhcHR1cmVfdmlkZW9fZnJhbWUYFiABKAsyKC5saXZla2l0LnByb3RvLkNhcHR1cmVWaWRlb0ZyYW1lUmVzcG9uc2VIABI8Cg12aWRlb19jb252ZXJ0GBcgASgLMiMubGl2ZWtpdC5wcm90by5WaWRlb0NvbnZlcnRSZXNwb25zZUgAEloKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjEubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlc3BvbnNlSAASQQoQbmV3X2F1ZGlvX3N0cmVhbRgZIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3QXVkaW9TdHJlYW1SZXNwb25zZUgAEkEKEG5ld19hdWRpb19zb3VyY2UYGiABKAsyJS5saXZla2l0LnByb3RvLk5ld0F1ZGlvU291cmNlUmVzcG9uc2VIABJHChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlc3BvbnNlSAASRQoSY2xlYXJfYXVkaW9fYnVmZmVyGBwgASgLMicubGl2ZWtpdC5wcm90by5DbGVhckF1ZGlvQnVmZmVyUmVzcG9uc2VIABJHChNuZXdfYXVkaW9fcmVzYW1wbGVyGB0gASgLMigubGl2ZWtpdC5wcm90by5OZXdBdWRpb1Jlc2FtcGxlclJlc3BvbnNlSAASRQoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMicubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVzcG9uc2VIABJaCh1hdWRpb19zdHJlYW1fZnJvbV9wYXJ0aWNpcGFudBgfIAEoCzIxLmxpdmVraXQucHJvdG8uQXVkaW9TdHJlYW1Gcm9tUGFydGljaXBhbnRSZXNwb25zZUgAEisKBGUyZWUYICABKAsyGy5saXZla2l0LnByb3RvLkUyZWVSZXNwb25zZUgAEkMKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiYubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkUKEnB1c2hfc294X3Jlc2FtcGxlchgiIAEoCzInLmxpdmVraXQucHJvdG8uUHVzaFNveFJlc2FtcGxlclJlc3BvbnNlSAASRwoTZmx1c2hfc294X3Jlc2FtcGxlchgjIAEoCzIoLmxpdmVraXQucHJvdG8uRmx1c2hTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkMKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiYubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXNwb25zZUgAEjgKC3BlcmZvcm1fcnBjGCUgASgLMiEubGl2ZWtpdC5wcm90by5QZXJmb3JtUnBjUmVzcG9uc2VIABJHChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCYgASgLMigubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlc3BvbnNlSAASSwoVdW5yZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMioubGl2ZWtpdC5wcm90by5VbnJlZ2lzdGVyUnBjTWV0aG9kUmVzcG9uc2VIABJcCh5ycGNfbWV0aG9kX2ludm9jYXRpb25fcmVzcG9uc2UYKCABKAsyMi5saXZla2l0LnByb3RvLlJwY01ldGhvZEludm9jYXRpb25SZXNwb25zZVJlc3BvbnNlSAASXgofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgpIAEoCzIzLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlc3BvbnNlSAAScQopdXBkYXRlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbl9kaW1lbnNpb24YKiABKAsyPC5saXZla2l0LnByb3RvLlVwZGF0ZVJlbW90ZVRyYWNrUHVibGljYXRpb25EaW1lbnNpb25SZXNwb25zZUgAQgkKB21lc3NhZ2UiigsKCEZmaUV2ZW50Ei4KCnJvb21fZXZlbnQYASABKAsyGC5saXZla2l0LnByb3RvLlJvb21FdmVudEgAEjAKC3RyYWNrX2V2ZW50GAIgASgLMhkubGl2ZWtpdC5wcm90by5UcmFja0V2ZW50SAASPQoSdmlkZW9fc3RyZWFtX2V2ZW50GAMgASgLMh8ubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUV2ZW50SAASPQoSYXVkaW9fc3RyZWFtX2V2ZW50GAQgASgLMh8ubGl2ZWtpdC5wcm90by5BdWRpb1N0cmVhbUV2ZW50SAASMQoHY29ubmVjdBgFIAEoCzIeLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrSAASNwoKZGlzY29ubmVjdBgHIAEoCzIhLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdENhbGxiYWNrSAASMQoHZGlzcG9zZRgIIAEoCzIeLmxpdmVraXQucHJvdG8uRGlzcG9zZUNhbGxiYWNrSAASPAoNcHVibGlzaF90cmFjaxgJIAEoCzIjLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrQ2FsbGJhY2tIABJACg91bnB1Ymxpc2hfdHJhY2sYCiABKAsyJS5saXZla2l0LnByb3RvLlVucHVibGlzaFRyYWNrQ2FsbGJhY2tIABI6CgxwdWJsaXNoX2RhdGEYCyABKAsyIi5saXZla2l0LnByb3RvLlB1Ymxpc2hEYXRhQ2FsbGJhY2tIABJMChVwdWJsaXNoX3RyYW5zY3JpcHRpb24YDCABKAsyKy5saXZla2l0LnByb3RvLlB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2tIABJHChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGA0gASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZUNhbGxiYWNrSAASRQoSc2V0X2xvY2FsX21ldGFkYXRhGA4gASgLMicubGl2ZWtpdC5wcm90by5TZXRMb2NhbE1ldGFkYXRhQ2FsbGJhY2tIABI9Cg5zZXRfbG9jYWxfbmFtZRgPIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0TG9jYWxOYW1lQ2FsbGJhY2tIABJJChRzZXRfbG9jYWxfYXR0cmlidXRlcxgQIAEoCzIpLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzQ2FsbGJhY2tIABI0CglnZXRfc3RhdHMYESABKAsyHy5saXZla2l0LnByb3RvLkdldFN0YXRzQ2FsbGJhY2tIABInCgRsb2dzGBIgASgLMhcubGl2ZWtpdC5wcm90by5Mb2dCYXRjaEgAEkMKEWdldF9zZXNzaW9uX3N0YXRzGBMgASgLMiYubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFja0gAEiUKBXBhbmljGBQgASgLMhQubGl2ZWtpdC5wcm90by5QYW5pY0gAEkEKEHB1Ymxpc2hfc2lwX2R0bWYYFSABKAsyJS5saXZla2l0LnByb3RvLlB1Ymxpc2hTaXBEdG1mQ2FsbGJhY2tIABI+CgxjaGF0X21lc3NhZ2UYFiABKAsyJi5saXZla2l0LnByb3RvLlNlbmRDaGF0TWVzc2FnZUNhbGxiYWNrSAASOAoLcGVyZm9ybV9ycGMYFyABKAsyIS5saXZla2l0LnByb3RvLlBlcmZvcm1ScGNDYWxsYmFja0gAEkgKFXJwY19tZXRob2RfaW52b2NhdGlvbhgYIAEoCzInLmxpdmVraXQucHJvdG8uUnBjTWV0aG9kSW52b2NhdGlvbkV2ZW50SABCCQoHbWVzc2FnZSIfCg5EaXNwb3NlUmVxdWVzdBINCgVhc3luYxgBIAIoCCIjCg9EaXNwb3NlUmVzcG9uc2USEAoIYXN5bmNfaWQYASABKAQiIwoPRGlzcG9zZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEIoUBCglMb2dSZWNvcmQSJgoFbGV2ZWwYASACKA4yFy5saXZla2l0LnByb3RvLkxvZ0xldmVsEg4KBnRhcmdldBgCIAIoCRITCgttb2R1bGVfcGF0aBgDIAEoCRIMCgRmaWxlGAQgASgJEgwKBGxpbmUYBSABKA0SDwoHbWVzc2FnZRgGIAIoCSI1CghMb2dCYXRjaBIpCgdyZWNvcmRzGAEgAygLMhgubGl2ZWtpdC5wcm90by5Mb2dSZWNvcmQiGAoFUGFuaWMSDwoHbWVzc2FnZRgBIAIoCSpTCghMb2dMZXZlbBINCglMT0dfRVJST1IQABIMCghMT0dfV0FSThABEgwKCExPR19JTkZPEAISDQoJTE9HX0RFQlVHEAMSDQoJTE9HX1RSQUNFEARCEKoCDUxpdmVLaXQuUHJvdG8", [file_e2ee, file_track, file_track_publication, file_room, file_video_frame, file_audio_frame, file_rpc]); /** * This is the input of livekit_ffi_request function @@ -298,6 +300,20 @@ export type FfiRequest = Message<"livekit.proto.FfiRequest"> & { */ value: RpcMethodInvocationResponseRequest; case: "rpcMethodInvocationResponse"; + } | { + /** + * Track Publication + * + * @generated from field: livekit.proto.EnableRemoteTrackPublicationRequest enable_remote_track_publication = 42; + */ + value: EnableRemoteTrackPublicationRequest; + case: "enableRemoteTrackPublication"; + } | { + /** + * @generated from field: livekit.proto.UpdateRemoteTrackPublicationDimensionRequest update_remote_track_publication_dimension = 43; + */ + value: UpdateRemoteTrackPublicationDimensionRequest; + case: "updateRemoteTrackPublicationDimension"; } | { case: undefined; value?: undefined }; }; @@ -561,6 +577,20 @@ export type FfiResponse = Message<"livekit.proto.FfiResponse"> & { */ value: RpcMethodInvocationResponseResponse; case: "rpcMethodInvocationResponse"; + } | { + /** + * Track Publication + * + * @generated from field: livekit.proto.EnableRemoteTrackPublicationResponse enable_remote_track_publication = 41; + */ + value: EnableRemoteTrackPublicationResponse; + case: "enableRemoteTrackPublication"; + } | { + /** + * @generated from field: livekit.proto.UpdateRemoteTrackPublicationDimensionResponse update_remote_track_publication_dimension = 42; + */ + value: UpdateRemoteTrackPublicationDimensionResponse; + case: "updateRemoteTrackPublicationDimension"; } | { case: undefined; value?: undefined }; }; diff --git a/packages/livekit-rtc/src/proto/participant_pb.ts b/packages/livekit-rtc/src/proto/participant_pb.ts index e6035297..a1a7cd1b 100644 --- a/packages/livekit-rtc/src/proto/participant_pb.ts +++ b/packages/livekit-rtc/src/proto/participant_pb.ts @@ -26,7 +26,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file participant.proto. */ export const file_participant: GenFile = /*@__PURE__*/ - fileDesc("ChFwYXJ0aWNpcGFudC5wcm90bxINbGl2ZWtpdC5wcm90byL1AQoPUGFydGljaXBhbnRJbmZvEgsKA3NpZBgBIAIoCRIMCgRuYW1lGAIgAigJEhAKCGlkZW50aXR5GAMgAigJEhAKCG1ldGFkYXRhGAQgAigJEkIKCmF0dHJpYnV0ZXMYBSADKAsyLi5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50SW5mby5BdHRyaWJ1dGVzRW50cnkSLAoEa2luZBgGIAIoDjIeLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnRLaW5kGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIm8KEE93bmVkUGFydGljaXBhbnQSLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIsCgRpbmZvGAIgAigLMh4ubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEluZm8qoQEKD1BhcnRpY2lwYW50S2luZBIdChlQQVJUSUNJUEFOVF9LSU5EX1NUQU5EQVJEEAASHAoYUEFSVElDSVBBTlRfS0lORF9JTkdSRVNTEAESGwoXUEFSVElDSVBBTlRfS0lORF9FR1JFU1MQAhIYChRQQVJUSUNJUEFOVF9LSU5EX1NJUBADEhoKFlBBUlRJQ0lQQU5UX0tJTkRfQUdFTlQQBEIQqgINTGl2ZUtpdC5Qcm90bw", [file_handle]); + fileDesc("ChFwYXJ0aWNpcGFudC5wcm90bxINbGl2ZWtpdC5wcm90byKxAgoPUGFydGljaXBhbnRJbmZvEgsKA3NpZBgBIAIoCRIMCgRuYW1lGAIgAigJEhAKCGlkZW50aXR5GAMgAigJEhAKCG1ldGFkYXRhGAQgAigJEkIKCmF0dHJpYnV0ZXMYBSADKAsyLi5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50SW5mby5BdHRyaWJ1dGVzRW50cnkSLAoEa2luZBgGIAIoDjIeLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnRLaW5kEjoKEWRpc2Nvbm5lY3RfcmVhc29uGAcgAigOMh8ubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVhc29uGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIm8KEE93bmVkUGFydGljaXBhbnQSLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIsCgRpbmZvGAIgAigLMh4ubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEluZm8qoQEKD1BhcnRpY2lwYW50S2luZBIdChlQQVJUSUNJUEFOVF9LSU5EX1NUQU5EQVJEEAASHAoYUEFSVElDSVBBTlRfS0lORF9JTkdSRVNTEAESGwoXUEFSVElDSVBBTlRfS0lORF9FR1JFU1MQAhIYChRQQVJUSUNJUEFOVF9LSU5EX1NJUBADEhoKFlBBUlRJQ0lQQU5UX0tJTkRfQUdFTlQQBCqsAgoQRGlzY29ubmVjdFJlYXNvbhISCg5VTktOT1dOX1JFQVNPThAAEhQKEENMSUVOVF9JTklUSUFURUQQARIWChJEVVBMSUNBVEVfSURFTlRJVFkQAhITCg9TRVJWRVJfU0hVVERPV04QAxIXChNQQVJUSUNJUEFOVF9SRU1PVkVEEAQSEAoMUk9PTV9ERUxFVEVEEAUSEgoOU1RBVEVfTUlTTUFUQ0gQBhIQCgxKT0lOX0ZBSUxVUkUQBxINCglNSUdSQVRJT04QCBIQCgxTSUdOQUxfQ0xPU0UQCRIPCgtST09NX0NMT1NFRBAKEhQKEFVTRVJfVU5BVkFJTEFCTEUQCxIRCg1VU0VSX1JFSkVDVEVEEAwSFQoRU0lQX1RSVU5LX0ZBSUxVUkUQDUIQqgINTGl2ZUtpdC5Qcm90bw", [file_handle]); /** * @generated from message livekit.proto.ParticipantInfo @@ -61,6 +61,11 @@ export type ParticipantInfo = Message<"livekit.proto.ParticipantInfo"> & { * @generated from field: required livekit.proto.ParticipantKind kind = 6; */ kind: ParticipantKind; + + /** + * @generated from field: required livekit.proto.DisconnectReason disconnect_reason = 7; + */ + disconnectReason: DisconnectReason; }; /** @@ -128,3 +133,110 @@ export enum ParticipantKind { export const ParticipantKindSchema: GenEnum = /*@__PURE__*/ enumDesc(file_participant, 0); +/** + * @generated from enum livekit.proto.DisconnectReason + */ +export enum DisconnectReason { + /** + * @generated from enum value: UNKNOWN_REASON = 0; + */ + UNKNOWN_REASON = 0, + + /** + * the client initiated the disconnect + * + * @generated from enum value: CLIENT_INITIATED = 1; + */ + CLIENT_INITIATED = 1, + + /** + * another participant with the same identity has joined the room + * + * @generated from enum value: DUPLICATE_IDENTITY = 2; + */ + DUPLICATE_IDENTITY = 2, + + /** + * the server instance is shutting down + * + * @generated from enum value: SERVER_SHUTDOWN = 3; + */ + SERVER_SHUTDOWN = 3, + + /** + * RoomService.RemoveParticipant was called + * + * @generated from enum value: PARTICIPANT_REMOVED = 4; + */ + PARTICIPANT_REMOVED = 4, + + /** + * RoomService.DeleteRoom was called + * + * @generated from enum value: ROOM_DELETED = 5; + */ + ROOM_DELETED = 5, + + /** + * the client is attempting to resume a session, but server is not aware of it + * + * @generated from enum value: STATE_MISMATCH = 6; + */ + STATE_MISMATCH = 6, + + /** + * client was unable to connect fully + * + * @generated from enum value: JOIN_FAILURE = 7; + */ + JOIN_FAILURE = 7, + + /** + * Cloud-only, the server requested Participant to migrate the connection elsewhere + * + * @generated from enum value: MIGRATION = 8; + */ + MIGRATION = 8, + + /** + * the signal websocket was closed unexpectedly + * + * @generated from enum value: SIGNAL_CLOSE = 9; + */ + SIGNAL_CLOSE = 9, + + /** + * the room was closed, due to all Standard and Ingress participants having left + * + * @generated from enum value: ROOM_CLOSED = 10; + */ + ROOM_CLOSED = 10, + + /** + * SIP callee did not respond in time + * + * @generated from enum value: USER_UNAVAILABLE = 11; + */ + USER_UNAVAILABLE = 11, + + /** + * SIP callee rejected the call (busy) + * + * @generated from enum value: USER_REJECTED = 12; + */ + USER_REJECTED = 12, + + /** + * SIP protocol failure or unexpected response + * + * @generated from enum value: SIP_TRUNK_FAILURE = 13; + */ + SIP_TRUNK_FAILURE = 13, +} + +/** + * Describes the enum livekit.proto.DisconnectReason. + */ +export const DisconnectReasonSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_participant, 1); + diff --git a/packages/livekit-rtc/src/proto/room_pb.ts b/packages/livekit-rtc/src/proto/room_pb.ts index a40e98f2..8d361dc1 100644 --- a/packages/livekit-rtc/src/proto/room_pb.ts +++ b/packages/livekit-rtc/src/proto/room_pb.ts @@ -22,7 +22,7 @@ import type { E2eeOptions, EncryptionState } from "./e2ee_pb.js"; import { file_e2ee } from "./e2ee_pb.js"; import type { FfiOwnedHandle } from "./handle_pb.js"; import { file_handle } from "./handle_pb.js"; -import type { OwnedParticipant } from "./participant_pb.js"; +import type { DisconnectReason, OwnedParticipant } from "./participant_pb.js"; import { file_participant } from "./participant_pb.js"; import type { OwnedTrack, OwnedTrackPublication, TrackSource } from "./track_pb.js"; import { file_track } from "./track_pb.js"; @@ -36,7 +36,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file room.proto. */ export const file_room: GenFile = /*@__PURE__*/ - fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvIt0OCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSABCCQoHbWVzc2FnZSI3CghSb29tSW5mbxILCgNzaWQYASABKAkSDAoEbmFtZRgCIAIoCRIQCghtZXRhZGF0YRgDIAIoCSJhCglPd25lZFJvb20SLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIlCgRpbmZvGAIgAigLMhcubGl2ZWtpdC5wcm90by5Sb29tSW5mbyJFChRQYXJ0aWNpcGFudENvbm5lY3RlZBItCgRpbmZvGAEgAigLMh8ubGl2ZWtpdC5wcm90by5Pd25lZFBhcnRpY2lwYW50IjcKF1BhcnRpY2lwYW50RGlzY29ubmVjdGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJIigKE0xvY2FsVHJhY2tQdWJsaXNoZWQSEQoJdHJhY2tfc2lkGAEgAigJIjAKFUxvY2FsVHJhY2tVbnB1Ymxpc2hlZBIXCg9wdWJsaWNhdGlvbl9zaWQYASACKAkiKQoUTG9jYWxUcmFja1N1YnNjcmliZWQSEQoJdHJhY2tfc2lkGAIgAigJImkKDlRyYWNrUHVibGlzaGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjkKC3B1YmxpY2F0aW9uGAIgAigLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24iSQoQVHJhY2tVbnB1Ymxpc2hlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIXCg9wdWJsaWNhdGlvbl9zaWQYAiACKAkiWQoPVHJhY2tTdWJzY3JpYmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEigKBXRyYWNrGAIgAigLMhkubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrIkQKEVRyYWNrVW5zdWJzY3JpYmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhEKCXRyYWNrX3NpZBgCIAIoCSJZChdUcmFja1N1YnNjcmlwdGlvbkZhaWxlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkSDQoFZXJyb3IYAyACKAkiPQoKVHJhY2tNdXRlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiPwoMVHJhY2tVbm11dGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhEKCXRyYWNrX3NpZBgCIAIoCSJfChBFMmVlU3RhdGVDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEi0KBXN0YXRlGAIgAigOMh4ubGl2ZWtpdC5wcm90by5FbmNyeXB0aW9uU3RhdGUiNwoVQWN0aXZlU3BlYWtlcnNDaGFuZ2VkEh4KFnBhcnRpY2lwYW50X2lkZW50aXRpZXMYASADKAkiJwoTUm9vbU1ldGFkYXRhQ2hhbmdlZBIQCghtZXRhZGF0YRgBIAIoCSIdCg5Sb29tU2lkQ2hhbmdlZBILCgNzaWQYASACKAkiTAoaUGFydGljaXBhbnRNZXRhZGF0YUNoYW5nZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEAoIbWV0YWRhdGEYAiACKAkirAEKHFBhcnRpY2lwYW50QXR0cmlidXRlc0NoYW5nZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSMgoKYXR0cmlidXRlcxgCIAMoCzIeLmxpdmVraXQucHJvdG8uQXR0cmlidXRlc0VudHJ5EjoKEmNoYW5nZWRfYXR0cmlidXRlcxgDIAMoCzIeLmxpdmVraXQucHJvdG8uQXR0cmlidXRlc0VudHJ5IkQKFlBhcnRpY2lwYW50TmFtZUNoYW5nZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSDAoEbmFtZRgCIAIoCSJrChhDb25uZWN0aW9uUXVhbGl0eUNoYW5nZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSMQoHcXVhbGl0eRgCIAIoDjIgLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblF1YWxpdHkiRQoKVXNlclBhY2tldBIoCgRkYXRhGAEgAigLMhoubGl2ZWtpdC5wcm90by5Pd25lZEJ1ZmZlchINCgV0b3BpYxgCIAEoCSJ5CgtDaGF0TWVzc2FnZRIKCgJpZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMSDwoHbWVzc2FnZRgDIAIoCRIWCg5lZGl0X3RpbWVzdGFtcBgEIAEoAxIPCgdkZWxldGVkGAUgASgIEhEKCWdlbmVyYXRlZBgGIAEoCCJgChNDaGF0TWVzc2FnZVJlY2VpdmVkEisKB21lc3NhZ2UYASACKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJIiYKB1NpcERUTUYSDAoEY29kZRgBIAIoDRINCgVkaWdpdBgCIAEoCSK/AQoSRGF0YVBhY2tldFJlY2VpdmVkEisKBGtpbmQYASACKA4yHS5saXZla2l0LnByb3RvLkRhdGFQYWNrZXRLaW5kEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEikKBHVzZXIYBCABKAsyGS5saXZla2l0LnByb3RvLlVzZXJQYWNrZXRIABIqCghzaXBfZHRtZhgFIAEoCzIWLmxpdmVraXQucHJvdG8uU2lwRFRNRkgAQgcKBXZhbHVlIn8KFVRyYW5zY3JpcHRpb25SZWNlaXZlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAEoCRIRCgl0cmFja19zaWQYAiABKAkSNQoIc2VnbWVudHMYAyADKAsyIy5saXZla2l0LnByb3RvLlRyYW5zY3JpcHRpb25TZWdtZW50IkcKFkNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQSLQoFc3RhdGUYASACKA4yHi5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25TdGF0ZSILCglDb25uZWN0ZWQiPwoMRGlzY29ubmVjdGVkEi8KBnJlYXNvbhgBIAIoDjIfLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdFJlYXNvbiIOCgxSZWNvbm5lY3RpbmciDQoLUmVjb25uZWN0ZWQiCQoHUm9vbUVPUypQChBJY2VUcmFuc3BvcnRUeXBlEhMKD1RSQU5TUE9SVF9SRUxBWRAAEhQKEFRSQU5TUE9SVF9OT0hPU1QQARIRCg1UUkFOU1BPUlRfQUxMEAIqQwoYQ29udGludWFsR2F0aGVyaW5nUG9saWN5Eg8KC0dBVEhFUl9PTkNFEAASFgoSR0FUSEVSX0NPTlRJTlVBTExZEAEqYAoRQ29ubmVjdGlvblF1YWxpdHkSEAoMUVVBTElUWV9QT09SEAASEAoMUVVBTElUWV9HT09EEAESFQoRUVVBTElUWV9FWENFTExFTlQQAhIQCgxRVUFMSVRZX0xPU1QQAypTCg9Db25uZWN0aW9uU3RhdGUSFQoRQ09OTl9ESVNDT05ORUNURUQQABISCg5DT05OX0NPTk5FQ1RFRBABEhUKEUNPTk5fUkVDT05ORUNUSU5HEAIqMwoORGF0YVBhY2tldEtpbmQSDgoKS0lORF9MT1NTWRAAEhEKDUtJTkRfUkVMSUFCTEUQASrsAQoQRGlzY29ubmVjdFJlYXNvbhISCg5VTktOT1dOX1JFQVNPThAAEhQKEENMSUVOVF9JTklUSUFURUQQARIWChJEVVBMSUNBVEVfSURFTlRJVFkQAhITCg9TRVJWRVJfU0hVVERPV04QAxIXChNQQVJUSUNJUEFOVF9SRU1PVkVEEAQSEAoMUk9PTV9ERUxFVEVEEAUSEgoOU1RBVEVfTUlTTUFUQ0gQBhIQCgxKT0lOX0ZBSUxVUkUQBxINCglNSUdSQVRJT04QCBIQCgxTSUdOQUxfQ0xPU0UQCRIPCgtST09NX0NMT1NFRBAKQhCqAg1MaXZlS2l0LlByb3Rv", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); + fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvItEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASOQoNc3RyZWFtX2hlYWRlchgeIAEoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXJIABI3CgxzdHJlYW1fY2h1bmsYHyABKAsyHy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uQ2h1bmtIAEIJCgdtZXNzYWdlIjcKCFJvb21JbmZvEgsKA3NpZBgBIAEoCRIMCgRuYW1lGAIgAigJEhAKCG1ldGFkYXRhGAMgAigJImEKCU93bmVkUm9vbRItCgZoYW5kbGUYASACKAsyHS5saXZla2l0LnByb3RvLkZmaU93bmVkSGFuZGxlEiUKBGluZm8YAiACKAsyFy5saXZla2l0LnByb3RvLlJvb21JbmZvIkUKFFBhcnRpY2lwYW50Q29ubmVjdGVkEi0KBGluZm8YASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQiNwoXUGFydGljaXBhbnREaXNjb25uZWN0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkiKAoTTG9jYWxUcmFja1B1Ymxpc2hlZBIRCgl0cmFja19zaWQYASACKAkiMAoVTG9jYWxUcmFja1VucHVibGlzaGVkEhcKD3B1YmxpY2F0aW9uX3NpZBgBIAIoCSIpChRMb2NhbFRyYWNrU3Vic2NyaWJlZBIRCgl0cmFja19zaWQYAiACKAkiaQoOVHJhY2tQdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSOQoLcHVibGljYXRpb24YAiACKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbiJJChBUcmFja1VucHVibGlzaGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhcKD3B1YmxpY2F0aW9uX3NpZBgCIAIoCSJZCg9UcmFja1N1YnNjcmliZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSKAoFdHJhY2sYAiACKAsyGS5saXZla2l0LnByb3RvLk93bmVkVHJhY2siRAoRVHJhY2tVbnN1YnNjcmliZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIlkKF1RyYWNrU3Vic2NyaXB0aW9uRmFpbGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhEKCXRyYWNrX3NpZBgCIAIoCRINCgVlcnJvchgDIAIoCSI9CgpUcmFja011dGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhEKCXRyYWNrX3NpZBgCIAIoCSI/CgxUcmFja1VubXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIl8KEEUyZWVTdGF0ZUNoYW5nZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSLQoFc3RhdGUYAiACKA4yHi5saXZla2l0LnByb3RvLkVuY3J5cHRpb25TdGF0ZSI3ChVBY3RpdmVTcGVha2Vyc0NoYW5nZWQSHgoWcGFydGljaXBhbnRfaWRlbnRpdGllcxgBIAMoCSInChNSb29tTWV0YWRhdGFDaGFuZ2VkEhAKCG1ldGFkYXRhGAEgAigJIh0KDlJvb21TaWRDaGFuZ2VkEgsKA3NpZBgBIAIoCSJMChpQYXJ0aWNpcGFudE1ldGFkYXRhQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIQCghtZXRhZGF0YRgCIAIoCSKsAQocUGFydGljaXBhbnRBdHRyaWJ1dGVzQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkSOgoSY2hhbmdlZF9hdHRyaWJ1dGVzGAMgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiRAoWUGFydGljaXBhbnROYW1lQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIMCgRuYW1lGAIgAigJImsKGENvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIxCgdxdWFsaXR5GAIgAigOMiAubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uUXVhbGl0eSJFCgpVc2VyUGFja2V0EigKBGRhdGEYASACKAsyGi5saXZla2l0LnByb3RvLk93bmVkQnVmZmVyEg0KBXRvcGljGAIgASgJInkKC0NoYXRNZXNzYWdlEgoKAmlkGAEgAigJEhEKCXRpbWVzdGFtcBgCIAIoAxIPCgdtZXNzYWdlGAMgAigJEhYKDmVkaXRfdGltZXN0YW1wGAQgASgDEg8KB2RlbGV0ZWQYBSABKAgSEQoJZ2VuZXJhdGVkGAYgASgIImAKE0NoYXRNZXNzYWdlUmVjZWl2ZWQSKwoHbWVzc2FnZRgBIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYAiACKAkiJgoHU2lwRFRNRhIMCgRjb2RlGAEgAigNEg0KBWRpZ2l0GAIgASgJIr8BChJEYXRhUGFja2V0UmVjZWl2ZWQSKwoEa2luZBgBIAIoDjIdLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldEtpbmQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYAiACKAkSKQoEdXNlchgEIAEoCzIZLmxpdmVraXQucHJvdG8uVXNlclBhY2tldEgAEioKCHNpcF9kdG1mGAUgASgLMhYubGl2ZWtpdC5wcm90by5TaXBEVE1GSABCBwoFdmFsdWUifwoVVHJhbnNjcmlwdGlvblJlY2VpdmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgASgJEhEKCXRyYWNrX3NpZBgCIAEoCRI1CghzZWdtZW50cxgDIAMoCzIjLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblNlZ21lbnQiRwoWQ29ubmVjdGlvblN0YXRlQ2hhbmdlZBItCgVzdGF0ZRgBIAIoDjIeLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlIgsKCUNvbm5lY3RlZCI/CgxEaXNjb25uZWN0ZWQSLwoGcmVhc29uGAEgAigOMh8ubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVhc29uIg4KDFJlY29ubmVjdGluZyINCgtSZWNvbm5lY3RlZCIJCgdSb29tRU9TIpIGCgpEYXRhU3RyZWFtGqoBCgpUZXh0SGVhZGVyEj8KDm9wZXJhdGlvbl90eXBlGAEgAigOMicubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLk9wZXJhdGlvblR5cGUSDwoHdmVyc2lvbhgCIAIoBRIaChJyZXBseV90b19zdHJlYW1faWQYAyACKAkSGwoTYXR0YWNoZWRfc3RyZWFtX2lkcxgEIAMoCRIRCglnZW5lcmF0ZWQYBSACKAgaHwoKRmlsZUhlYWRlchIRCglmaWxlX25hbWUYASACKAkagQMKBkhlYWRlchIRCglzdHJlYW1faWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg0KBXRvcGljGAMgAigJEhEKCW1pbWVfdHlwZRgEIAIoCRIUCgx0b3RhbF9sZW5ndGgYBSABKAQSFAoMdG90YWxfY2h1bmtzGAYgASgEEkQKCmV4dGVuc2lvbnMYByADKAsyMC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uSGVhZGVyLkV4dGVuc2lvbnNFbnRyeRI7Cgt0ZXh0X2hlYWRlchgIIAEoCzIkLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5UZXh0SGVhZGVySAASOwoLZmlsZV9oZWFkZXIYCSABKAsyJC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uRmlsZUhlYWRlckgAGjEKD0V4dGVuc2lvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQhAKDmNvbnRlbnRfaGVhZGVyGm8KBUNodW5rEhEKCXN0cmVhbV9pZBgBIAIoCRITCgtjaHVua19pbmRleBgCIAIoBBIPCgdjb250ZW50GAMgAigMEhAKCGNvbXBsZXRlGAQgAigIEg8KB3ZlcnNpb24YBSACKAUSCgoCaXYYBiABKAwiQQoNT3BlcmF0aW9uVHlwZRIKCgZDUkVBVEUQABIKCgZVUERBVEUQARIKCgZERUxFVEUQAhIMCghSRUFDVElPThADKlAKEEljZVRyYW5zcG9ydFR5cGUSEwoPVFJBTlNQT1JUX1JFTEFZEAASFAoQVFJBTlNQT1JUX05PSE9TVBABEhEKDVRSQU5TUE9SVF9BTEwQAipDChhDb250aW51YWxHYXRoZXJpbmdQb2xpY3kSDwoLR0FUSEVSX09OQ0UQABIWChJHQVRIRVJfQ09OVElOVUFMTFkQASpgChFDb25uZWN0aW9uUXVhbGl0eRIQCgxRVUFMSVRZX1BPT1IQABIQCgxRVUFMSVRZX0dPT0QQARIVChFRVUFMSVRZX0VYQ0VMTEVOVBACEhAKDFFVQUxJVFlfTE9TVBADKlMKD0Nvbm5lY3Rpb25TdGF0ZRIVChFDT05OX0RJU0NPTk5FQ1RFRBAAEhIKDkNPTk5fQ09OTkVDVEVEEAESFQoRQ09OTl9SRUNPTk5FQ1RJTkcQAiozCg5EYXRhUGFja2V0S2luZBIOCgpLSU5EX0xPU1NZEAASEQoNS0lORF9SRUxJQUJMRRABQhCqAg1MaXZlS2l0LlByb3Rv", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); /** * Connect to a new LiveKit room @@ -1527,6 +1527,18 @@ export type RoomEvent = Message<"livekit.proto.RoomEvent"> & { */ value: ChatMessageReceived; case: "chatMessage"; + } | { + /** + * @generated from field: livekit.proto.DataStream.Header stream_header = 30; + */ + value: DataStream_Header; + case: "streamHeader"; + } | { + /** + * @generated from field: livekit.proto.DataStream.Chunk stream_chunk = 31; + */ + value: DataStream_Chunk; + case: "streamChunk"; } | { case: undefined; value?: undefined }; }; @@ -2268,6 +2280,250 @@ export type RoomEOS = Message<"livekit.proto.RoomEOS"> & { export const RoomEOSSchema: GenMessage = /*@__PURE__*/ messageDesc(file_room, 83); +/** + * @generated from message livekit.proto.DataStream + */ +export type DataStream = Message<"livekit.proto.DataStream"> & { +}; + +/** + * Describes the message livekit.proto.DataStream. + * Use `create(DataStreamSchema)` to create a new message. + */ +export const DataStreamSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 84); + +/** + * header properties specific to text streams + * + * @generated from message livekit.proto.DataStream.TextHeader + */ +export type DataStream_TextHeader = Message<"livekit.proto.DataStream.TextHeader"> & { + /** + * @generated from field: required livekit.proto.DataStream.OperationType operation_type = 1; + */ + operationType: DataStream_OperationType; + + /** + * Optional: Version for updates/edits + * + * @generated from field: required int32 version = 2; + */ + version: number; + + /** + * Optional: Reply to specific message + * + * @generated from field: required string reply_to_stream_id = 3; + */ + replyToStreamId: string; + + /** + * file attachments for text streams + * + * @generated from field: repeated string attached_stream_ids = 4; + */ + attachedStreamIds: string[]; + + /** + * true if the text has been generated by an agent from a participant's audio transcription + * + * @generated from field: required bool generated = 5; + */ + generated: boolean; +}; + +/** + * Describes the message livekit.proto.DataStream.TextHeader. + * Use `create(DataStream_TextHeaderSchema)` to create a new message. + */ +export const DataStream_TextHeaderSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 84, 0); + +/** + * header properties specific to file or image streams + * + * @generated from message livekit.proto.DataStream.FileHeader + */ +export type DataStream_FileHeader = Message<"livekit.proto.DataStream.FileHeader"> & { + /** + * name of the file + * + * @generated from field: required string file_name = 1; + */ + fileName: string; +}; + +/** + * Describes the message livekit.proto.DataStream.FileHeader. + * Use `create(DataStream_FileHeaderSchema)` to create a new message. + */ +export const DataStream_FileHeaderSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 84, 1); + +/** + * main DataStream.Header that contains a oneof for specific headers + * + * @generated from message livekit.proto.DataStream.Header + */ +export type DataStream_Header = Message<"livekit.proto.DataStream.Header"> & { + /** + * unique identifier for this data stream + * + * @generated from field: required string stream_id = 1; + */ + streamId: string; + + /** + * using int64 for Unix timestamp + * + * @generated from field: required int64 timestamp = 2; + */ + timestamp: bigint; + + /** + * @generated from field: required string topic = 3; + */ + topic: string; + + /** + * @generated from field: required string mime_type = 4; + */ + mimeType: string; + + /** + * only populated for finite streams, if it's a stream of unknown size this stays empty + * + * @generated from field: optional uint64 total_length = 5; + */ + totalLength: bigint; + + /** + * only populated for finite streams, if it's a stream of unknown size this stays empty + * + * @generated from field: optional uint64 total_chunks = 6; + */ + totalChunks: bigint; + + /** + * user defined extensions map that can carry additional info + * + * @generated from field: map extensions = 7; + */ + extensions: { [key: string]: string }; + + /** + * oneof to choose between specific header types + * + * @generated from oneof livekit.proto.DataStream.Header.content_header + */ + contentHeader: { + /** + * @generated from field: livekit.proto.DataStream.TextHeader text_header = 8; + */ + value: DataStream_TextHeader; + case: "textHeader"; + } | { + /** + * @generated from field: livekit.proto.DataStream.FileHeader file_header = 9; + */ + value: DataStream_FileHeader; + case: "fileHeader"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message livekit.proto.DataStream.Header. + * Use `create(DataStream_HeaderSchema)` to create a new message. + */ +export const DataStream_HeaderSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 84, 2); + +/** + * @generated from message livekit.proto.DataStream.Chunk + */ +export type DataStream_Chunk = Message<"livekit.proto.DataStream.Chunk"> & { + /** + * unique identifier for this data stream to map it to the correct header + * + * @generated from field: required string stream_id = 1; + */ + streamId: string; + + /** + * @generated from field: required uint64 chunk_index = 2; + */ + chunkIndex: bigint; + + /** + * content as binary (bytes) + * + * @generated from field: required bytes content = 3; + */ + content: Uint8Array; + + /** + * true only if this is the last chunk of this stream - can also be sent with empty content + * + * @generated from field: required bool complete = 4; + */ + complete: boolean; + + /** + * a version indicating that this chunk_index has been retroactively modified and the original one needs to be replaced + * + * @generated from field: required int32 version = 5; + */ + version: number; + + /** + * optional, initialization vector for AES-GCM encryption + * + * @generated from field: optional bytes iv = 6; + */ + iv: Uint8Array; +}; + +/** + * Describes the message livekit.proto.DataStream.Chunk. + * Use `create(DataStream_ChunkSchema)` to create a new message. + */ +export const DataStream_ChunkSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 84, 3); + +/** + * enum for operation types (specific to TextHeader) + * + * @generated from enum livekit.proto.DataStream.OperationType + */ +export enum DataStream_OperationType { + /** + * @generated from enum value: CREATE = 0; + */ + CREATE = 0, + + /** + * @generated from enum value: UPDATE = 1; + */ + UPDATE = 1, + + /** + * @generated from enum value: DELETE = 2; + */ + DELETE = 2, + + /** + * @generated from enum value: REACTION = 3; + */ + REACTION = 3, +} + +/** + * Describes the enum livekit.proto.DataStream.OperationType. + */ +export const DataStream_OperationTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_room, 84, 0); + /** * @generated from enum livekit.proto.IceTransportType */ @@ -2393,89 +2649,3 @@ export enum DataPacketKind { export const DataPacketKindSchema: GenEnum = /*@__PURE__*/ enumDesc(file_room, 4); -/** - * @generated from enum livekit.proto.DisconnectReason - */ -export enum DisconnectReason { - /** - * @generated from enum value: UNKNOWN_REASON = 0; - */ - UNKNOWN_REASON = 0, - - /** - * the client initiated the disconnect - * - * @generated from enum value: CLIENT_INITIATED = 1; - */ - CLIENT_INITIATED = 1, - - /** - * another participant with the same identity has joined the room - * - * @generated from enum value: DUPLICATE_IDENTITY = 2; - */ - DUPLICATE_IDENTITY = 2, - - /** - * the server instance is shutting down - * - * @generated from enum value: SERVER_SHUTDOWN = 3; - */ - SERVER_SHUTDOWN = 3, - - /** - * RoomService.RemoveParticipant was called - * - * @generated from enum value: PARTICIPANT_REMOVED = 4; - */ - PARTICIPANT_REMOVED = 4, - - /** - * RoomService.DeleteRoom was called - * - * @generated from enum value: ROOM_DELETED = 5; - */ - ROOM_DELETED = 5, - - /** - * the client is attempting to resume a session, but server is not aware of it - * - * @generated from enum value: STATE_MISMATCH = 6; - */ - STATE_MISMATCH = 6, - - /** - * client was unable to connect fully - * - * @generated from enum value: JOIN_FAILURE = 7; - */ - JOIN_FAILURE = 7, - - /** - * Cloud-only, the server requested Participant to migrate the connection elsewhere - * - * @generated from enum value: MIGRATION = 8; - */ - MIGRATION = 8, - - /** - * the signal websocket was closed unexpectedly - * - * @generated from enum value: SIGNAL_CLOSE = 9; - */ - SIGNAL_CLOSE = 9, - - /** - * the room was closed, due to all Standard and Ingress participants having left - * - * @generated from enum value: ROOM_CLOSED = 10; - */ - ROOM_CLOSED = 10, -} - -/** - * Describes the enum livekit.proto.DisconnectReason. - */ -export const DisconnectReasonSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_room, 5); - diff --git a/packages/livekit-rtc/src/proto/stats_pb.ts b/packages/livekit-rtc/src/proto/stats_pb.ts index 11c2cd9f..539e6684 100644 --- a/packages/livekit-rtc/src/proto/stats_pb.ts +++ b/packages/livekit-rtc/src/proto/stats_pb.ts @@ -24,7 +24,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file stats.proto. */ export const file_stats: GenFile = /*@__PURE__*/ - fileDesc("CgtzdGF0cy5wcm90bxINbGl2ZWtpdC5wcm90byLZFwoIUnRjU3RhdHMSLgoFY29kZWMYAyABKAsyHS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLkNvZGVjSAASOQoLaW5ib3VuZF9ydHAYBCABKAsyIi5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLkluYm91bmRSdHBIABI7CgxvdXRib3VuZF9ydHAYBSABKAsyIy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLk91dGJvdW5kUnRwSAASRgoScmVtb3RlX2luYm91bmRfcnRwGAYgASgLMigubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5SZW1vdGVJbmJvdW5kUnRwSAASSAoTcmVtb3RlX291dGJvdW5kX3J0cBgHIAEoCzIpLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuUmVtb3RlT3V0Ym91bmRSdHBIABI7CgxtZWRpYV9zb3VyY2UYCCABKAsyIy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLk1lZGlhU291cmNlSAASPQoNbWVkaWFfcGxheW91dBgJIAEoCzIkLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuTWVkaWFQbGF5b3V0SAASQQoPcGVlcl9jb25uZWN0aW9uGAogASgLMiYubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5QZWVyQ29ubmVjdGlvbkgAEjsKDGRhdGFfY2hhbm5lbBgLIAEoCzIjLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuRGF0YUNoYW5uZWxIABI2Cgl0cmFuc3BvcnQYDCABKAsyIS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlRyYW5zcG9ydEgAEj8KDmNhbmRpZGF0ZV9wYWlyGA0gASgLMiUubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5DYW5kaWRhdGVQYWlySAASQQoPbG9jYWxfY2FuZGlkYXRlGA4gASgLMiYubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5Mb2NhbENhbmRpZGF0ZUgAEkMKEHJlbW90ZV9jYW5kaWRhdGUYDyABKAsyJy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlJlbW90ZUNhbmRpZGF0ZUgAEjoKC2NlcnRpZmljYXRlGBAgASgLMiMubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5DZXJ0aWZpY2F0ZUgAEi4KBXRyYWNrGBEgASgLMh0ubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5UcmFja0gAGlsKBUNvZGVjEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEigKBWNvZGVjGAIgAigLMhkubGl2ZWtpdC5wcm90by5Db2RlY1N0YXRzGtUBCgpJbmJvdW5kUnRwEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi0KBnN0cmVhbRgCIAIoCzIdLmxpdmVraXQucHJvdG8uUnRwU3RyZWFtU3RhdHMSNwoIcmVjZWl2ZWQYAyACKAsyJS5saXZla2l0LnByb3RvLlJlY2VpdmVkUnRwU3RyZWFtU3RhdHMSNQoHaW5ib3VuZBgEIAIoCzIkLmxpdmVraXQucHJvdG8uSW5ib3VuZFJ0cFN0cmVhbVN0YXRzGtABCgtPdXRib3VuZFJ0cBIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRItCgZzdHJlYW0YAiACKAsyHS5saXZla2l0LnByb3RvLlJ0cFN0cmVhbVN0YXRzEi8KBHNlbnQYAyACKAsyIS5saXZla2l0LnByb3RvLlNlbnRSdHBTdHJlYW1TdGF0cxI3CghvdXRib3VuZBgEIAIoCzIlLmxpdmVraXQucHJvdG8uT3V0Ym91bmRSdHBTdHJlYW1TdGF0cxroAQoQUmVtb3RlSW5ib3VuZFJ0cBIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRItCgZzdHJlYW0YAiACKAsyHS5saXZla2l0LnByb3RvLlJ0cFN0cmVhbVN0YXRzEjcKCHJlY2VpdmVkGAMgAigLMiUubGl2ZWtpdC5wcm90by5SZWNlaXZlZFJ0cFN0cmVhbVN0YXRzEkIKDnJlbW90ZV9pbmJvdW5kGAQgAigLMioubGl2ZWtpdC5wcm90by5SZW1vdGVJbmJvdW5kUnRwU3RyZWFtU3RhdHMa4wEKEVJlbW90ZU91dGJvdW5kUnRwEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi0KBnN0cmVhbRgCIAIoCzIdLmxpdmVraXQucHJvdG8uUnRwU3RyZWFtU3RhdHMSLwoEc2VudBgDIAIoCzIhLmxpdmVraXQucHJvdG8uU2VudFJ0cFN0cmVhbVN0YXRzEkQKD3JlbW90ZV9vdXRib3VuZBgEIAIoCzIrLmxpdmVraXQucHJvdG8uUmVtb3RlT3V0Ym91bmRSdHBTdHJlYW1TdGF0cxrIAQoLTWVkaWFTb3VyY2USKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESLwoGc291cmNlGAIgAigLMh8ubGl2ZWtpdC5wcm90by5NZWRpYVNvdXJjZVN0YXRzEi4KBWF1ZGlvGAMgAigLMh8ubGl2ZWtpdC5wcm90by5BdWRpb1NvdXJjZVN0YXRzEi4KBXZpZGVvGAQgAigLMh8ubGl2ZWtpdC5wcm90by5WaWRlb1NvdXJjZVN0YXRzGnEKDE1lZGlhUGxheW91dBIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRI3Cg1hdWRpb19wbGF5b3V0GAIgAigLMiAubGl2ZWtpdC5wcm90by5BdWRpb1BsYXlvdXRTdGF0cxpqCg5QZWVyQ29ubmVjdGlvbhIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIuCgJwYxgCIAIoCzIiLmxpdmVraXQucHJvdG8uUGVlckNvbm5lY3Rpb25TdGF0cxpkCgtEYXRhQ2hhbm5lbBIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIrCgJkYxgCIAIoCzIfLmxpdmVraXQucHJvdG8uRGF0YUNoYW5uZWxTdGF0cxpnCglUcmFuc3BvcnQSKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESMAoJdHJhbnNwb3J0GAIgAigLMh0ubGl2ZWtpdC5wcm90by5UcmFuc3BvcnRTdGF0cxp0Cg1DYW5kaWRhdGVQYWlyEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEjkKDmNhbmRpZGF0ZV9wYWlyGAIgAigLMiEubGl2ZWtpdC5wcm90by5DYW5kaWRhdGVQYWlyU3RhdHMabwoOTG9jYWxDYW5kaWRhdGUSKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESMwoJY2FuZGlkYXRlGAIgAigLMiAubGl2ZWtpdC5wcm90by5JY2VDYW5kaWRhdGVTdGF0cxpwCg9SZW1vdGVDYW5kaWRhdGUSKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESMwoJY2FuZGlkYXRlGAIgAigLMiAubGl2ZWtpdC5wcm90by5JY2VDYW5kaWRhdGVTdGF0cxptCgtDZXJ0aWZpY2F0ZRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRI0CgtjZXJ0aWZpY2F0ZRgCIAIoCzIfLmxpdmVraXQucHJvdG8uQ2VydGlmaWNhdGVTdGF0cxoHCgVUcmFja0IHCgVzdGF0cyItCgxSdGNTdGF0c0RhdGESCgoCaWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDIogBCgpDb2RlY1N0YXRzEhQKDHBheWxvYWRfdHlwZRgBIAIoDRIUCgx0cmFuc3BvcnRfaWQYAiACKAkSEQoJbWltZV90eXBlGAMgAigJEhIKCmNsb2NrX3JhdGUYBCACKA0SEAoIY2hhbm5lbHMYBSACKA0SFQoNc2RwX2ZtdHBfbGluZRgGIAIoCSJUCg5SdHBTdHJlYW1TdGF0cxIMCgRzc3JjGAEgAigNEgwKBGtpbmQYAiACKAkSFAoMdHJhbnNwb3J0X2lkGAMgAigJEhAKCGNvZGVjX2lkGAQgAigJIlgKFlJlY2VpdmVkUnRwU3RyZWFtU3RhdHMSGAoQcGFja2V0c19yZWNlaXZlZBgBIAIoBBIUCgxwYWNrZXRzX2xvc3QYAiACKAMSDgoGaml0dGVyGAMgAigBIoIMChVJbmJvdW5kUnRwU3RyZWFtU3RhdHMSGAoQdHJhY2tfaWRlbnRpZmllchgBIAIoCRILCgNtaWQYAiACKAkSEQoJcmVtb3RlX2lkGAMgAigJEhYKDmZyYW1lc19kZWNvZGVkGAQgAigNEhoKEmtleV9mcmFtZXNfZGVjb2RlZBgFIAIoDRIXCg9mcmFtZXNfcmVuZGVyZWQYBiACKA0SFgoOZnJhbWVzX2Ryb3BwZWQYByACKA0SEwoLZnJhbWVfd2lkdGgYCCACKA0SFAoMZnJhbWVfaGVpZ2h0GAkgAigNEhkKEWZyYW1lc19wZXJfc2Vjb25kGAogAigBEg4KBnFwX3N1bRgLIAIoBBIZChF0b3RhbF9kZWNvZGVfdGltZRgMIAIoARIfChd0b3RhbF9pbnRlcl9mcmFtZV9kZWxheRgNIAIoARInCh90b3RhbF9zcXVhcmVkX2ludGVyX2ZyYW1lX2RlbGF5GA4gAigBEhMKC3BhdXNlX2NvdW50GA8gAigNEhwKFHRvdGFsX3BhdXNlX2R1cmF0aW9uGBAgAigBEhQKDGZyZWV6ZV9jb3VudBgRIAIoDRIdChV0b3RhbF9mcmVlemVfZHVyYXRpb24YEiACKAESJgoebGFzdF9wYWNrZXRfcmVjZWl2ZWRfdGltZXN0YW1wGBMgAigBEh0KFWhlYWRlcl9ieXRlc19yZWNlaXZlZBgUIAIoBBIZChFwYWNrZXRzX2Rpc2NhcmRlZBgVIAIoBBIaChJmZWNfYnl0ZXNfcmVjZWl2ZWQYFiACKAQSHAoUZmVjX3BhY2tldHNfcmVjZWl2ZWQYFyACKAQSHQoVZmVjX3BhY2tldHNfZGlzY2FyZGVkGBggAigEEhYKDmJ5dGVzX3JlY2VpdmVkGBkgAigEEhIKCm5hY2tfY291bnQYGiACKA0SEQoJZmlyX2NvdW50GBsgAigNEhEKCXBsaV9jb3VudBgcIAIoDRIeChZ0b3RhbF9wcm9jZXNzaW5nX2RlbGF5GB0gAigBEiMKG2VzdGltYXRlZF9wbGF5b3V0X3RpbWVzdGFtcBgeIAIoARIbChNqaXR0ZXJfYnVmZmVyX2RlbGF5GB8gAigBEiIKGmppdHRlcl9idWZmZXJfdGFyZ2V0X2RlbGF5GCAgAigBEiMKG2ppdHRlcl9idWZmZXJfZW1pdHRlZF9jb3VudBghIAIoBBIjChtqaXR0ZXJfYnVmZmVyX21pbmltdW1fZGVsYXkYIiACKAESHgoWdG90YWxfc2FtcGxlc19yZWNlaXZlZBgjIAIoBBIZChFjb25jZWFsZWRfc2FtcGxlcxgkIAIoBBIgChhzaWxlbnRfY29uY2VhbGVkX3NhbXBsZXMYJSACKAQSGgoSY29uY2VhbG1lbnRfZXZlbnRzGCYgAigEEikKIWluc2VydGVkX3NhbXBsZXNfZm9yX2RlY2VsZXJhdGlvbhgnIAIoBBIoCiByZW1vdmVkX3NhbXBsZXNfZm9yX2FjY2VsZXJhdGlvbhgoIAIoBBITCgthdWRpb19sZXZlbBgpIAIoARIaChJ0b3RhbF9hdWRpb19lbmVyZ3kYKiACKAESHgoWdG90YWxfc2FtcGxlc19kdXJhdGlvbhgrIAIoARIXCg9mcmFtZXNfcmVjZWl2ZWQYLCACKAQSHgoWZGVjb2Rlcl9pbXBsZW1lbnRhdGlvbhgtIAIoCRISCgpwbGF5b3V0X2lkGC4gAigJEh8KF3Bvd2VyX2VmZmljaWVudF9kZWNvZGVyGC8gAigIEi4KJmZyYW1lc19hc3NlbWJsZWRfZnJvbV9tdWx0aXBsZV9wYWNrZXRzGDAgAigEEhsKE3RvdGFsX2Fzc2VtYmx5X3RpbWUYMSACKAESJgoecmV0cmFuc21pdHRlZF9wYWNrZXRzX3JlY2VpdmVkGDIgAigEEiQKHHJldHJhbnNtaXR0ZWRfYnl0ZXNfcmVjZWl2ZWQYMyACKAQSEAoIcnR4X3NzcmMYNCACKA0SEAoIZmVjX3NzcmMYNSACKA0iPgoSU2VudFJ0cFN0cmVhbVN0YXRzEhQKDHBhY2tldHNfc2VudBgBIAIoBBISCgpieXRlc19zZW50GAIgAigEItEHChZPdXRib3VuZFJ0cFN0cmVhbVN0YXRzEgsKA21pZBgBIAIoCRIXCg9tZWRpYV9zb3VyY2VfaWQYAiACKAkSEQoJcmVtb3RlX2lkGAMgAigJEgsKA3JpZBgEIAIoCRIZChFoZWFkZXJfYnl0ZXNfc2VudBgFIAIoBBIiChpyZXRyYW5zbWl0dGVkX3BhY2tldHNfc2VudBgGIAIoBBIgChhyZXRyYW5zbWl0dGVkX2J5dGVzX3NlbnQYByACKAQSEAoIcnR4X3NzcmMYCCACKA0SFgoOdGFyZ2V0X2JpdHJhdGUYCSACKAESIgoadG90YWxfZW5jb2RlZF9ieXRlc190YXJnZXQYCiACKAQSEwoLZnJhbWVfd2lkdGgYCyACKA0SFAoMZnJhbWVfaGVpZ2h0GAwgAigNEhkKEWZyYW1lc19wZXJfc2Vjb25kGA0gAigBEhMKC2ZyYW1lc19zZW50GA4gAigNEhgKEGh1Z2VfZnJhbWVzX3NlbnQYDyACKA0SFgoOZnJhbWVzX2VuY29kZWQYECACKA0SGgoSa2V5X2ZyYW1lc19lbmNvZGVkGBEgAigNEg4KBnFwX3N1bRgSIAIoBBIZChF0b3RhbF9lbmNvZGVfdGltZRgTIAIoARIfChd0b3RhbF9wYWNrZXRfc2VuZF9kZWxheRgUIAIoARJJChlxdWFsaXR5X2xpbWl0YXRpb25fcmVhc29uGBUgAigOMiYubGl2ZWtpdC5wcm90by5RdWFsaXR5TGltaXRhdGlvblJlYXNvbhJrChxxdWFsaXR5X2xpbWl0YXRpb25fZHVyYXRpb25zGBYgAygLMkUubGl2ZWtpdC5wcm90by5PdXRib3VuZFJ0cFN0cmVhbVN0YXRzLlF1YWxpdHlMaW1pdGF0aW9uRHVyYXRpb25zRW50cnkSLQolcXVhbGl0eV9saW1pdGF0aW9uX3Jlc29sdXRpb25fY2hhbmdlcxgXIAIoDRISCgpuYWNrX2NvdW50GBggAigNEhEKCWZpcl9jb3VudBgZIAIoDRIRCglwbGlfY291bnQYGiACKA0SHgoWZW5jb2Rlcl9pbXBsZW1lbnRhdGlvbhgbIAIoCRIfChdwb3dlcl9lZmZpY2llbnRfZW5jb2RlchgcIAIoCBIOCgZhY3RpdmUYHSACKAgSGAoQc2NhbGFiaWxpdHlfbW9kZRgeIAIoCRpBCh9RdWFsaXR5TGltaXRhdGlvbkR1cmF0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAToCOAEipAEKG1JlbW90ZUluYm91bmRSdHBTdHJlYW1TdGF0cxIQCghsb2NhbF9pZBgBIAIoCRIXCg9yb3VuZF90cmlwX3RpbWUYAiACKAESHQoVdG90YWxfcm91bmRfdHJpcF90aW1lGAMgAigBEhUKDWZyYWN0aW9uX2xvc3QYBCACKAESJAoccm91bmRfdHJpcF90aW1lX21lYXN1cmVtZW50cxgFIAIoBCK+AQocUmVtb3RlT3V0Ym91bmRSdHBTdHJlYW1TdGF0cxIQCghsb2NhbF9pZBgBIAIoCRIYChByZW1vdGVfdGltZXN0YW1wGAIgAigBEhQKDHJlcG9ydHNfc2VudBgDIAIoBBIXCg9yb3VuZF90cmlwX3RpbWUYBCACKAESHQoVdG90YWxfcm91bmRfdHJpcF90aW1lGAUgAigBEiQKHHJvdW5kX3RyaXBfdGltZV9tZWFzdXJlbWVudHMYBiACKAQiOgoQTWVkaWFTb3VyY2VTdGF0cxIYChB0cmFja19pZGVudGlmaWVyGAEgAigJEgwKBGtpbmQYAiACKAkiogIKEEF1ZGlvU291cmNlU3RhdHMSEwoLYXVkaW9fbGV2ZWwYASACKAESGgoSdG90YWxfYXVkaW9fZW5lcmd5GAIgAigBEh4KFnRvdGFsX3NhbXBsZXNfZHVyYXRpb24YAyACKAESGAoQZWNob19yZXR1cm5fbG9zcxgEIAIoARIkChxlY2hvX3JldHVybl9sb3NzX2VuaGFuY2VtZW50GAUgAigBEiAKGGRyb3BwZWRfc2FtcGxlc19kdXJhdGlvbhgGIAIoARIeChZkcm9wcGVkX3NhbXBsZXNfZXZlbnRzGAcgAigNEhsKE3RvdGFsX2NhcHR1cmVfZGVsYXkYCCACKAESHgoWdG90YWxfc2FtcGxlc19jYXB0dXJlZBgJIAIoBCJcChBWaWRlb1NvdXJjZVN0YXRzEg0KBXdpZHRoGAEgAigNEg4KBmhlaWdodBgCIAIoDRIOCgZmcmFtZXMYAyACKA0SGQoRZnJhbWVzX3Blcl9zZWNvbmQYBCACKAEixQEKEUF1ZGlvUGxheW91dFN0YXRzEgwKBGtpbmQYASACKAkSJAocc3ludGhlc2l6ZWRfc2FtcGxlc19kdXJhdGlvbhgCIAIoARIiChpzeW50aGVzaXplZF9zYW1wbGVzX2V2ZW50cxgDIAIoDRIeChZ0b3RhbF9zYW1wbGVzX2R1cmF0aW9uGAQgAigBEhsKE3RvdGFsX3BsYXlvdXRfZGVsYXkYBSACKAESGwoTdG90YWxfc2FtcGxlc19jb3VudBgGIAIoBCJRChNQZWVyQ29ubmVjdGlvblN0YXRzEhwKFGRhdGFfY2hhbm5lbHNfb3BlbmVkGAEgAigNEhwKFGRhdGFfY2hhbm5lbHNfY2xvc2VkGAIgAigNIuIBChBEYXRhQ2hhbm5lbFN0YXRzEg0KBWxhYmVsGAEgAigJEhAKCHByb3RvY29sGAIgAigJEh8KF2RhdGFfY2hhbm5lbF9pZGVudGlmaWVyGAMgAigFEi4KBXN0YXRlGAQgASgOMh8ubGl2ZWtpdC5wcm90by5EYXRhQ2hhbm5lbFN0YXRlEhUKDW1lc3NhZ2VzX3NlbnQYBSACKA0SEgoKYnl0ZXNfc2VudBgGIAIoBBIZChFtZXNzYWdlc19yZWNlaXZlZBgHIAIoDRIWCg5ieXRlc19yZWNlaXZlZBgIIAIoBCKcBAoOVHJhbnNwb3J0U3RhdHMSFAoMcGFja2V0c19zZW50GAEgAigEEhgKEHBhY2tldHNfcmVjZWl2ZWQYAiACKAQSEgoKYnl0ZXNfc2VudBgDIAIoBBIWCg5ieXRlc19yZWNlaXZlZBgEIAIoBBIoCghpY2Vfcm9sZRgFIAIoDjIWLmxpdmVraXQucHJvdG8uSWNlUm9sZRIjChtpY2VfbG9jYWxfdXNlcm5hbWVfZnJhZ21lbnQYBiACKAkSNQoKZHRsc19zdGF0ZRgHIAEoDjIhLmxpdmVraXQucHJvdG8uRHRsc1RyYW5zcG9ydFN0YXRlEjMKCWljZV9zdGF0ZRgIIAEoDjIgLmxpdmVraXQucHJvdG8uSWNlVHJhbnNwb3J0U3RhdGUSIgoac2VsZWN0ZWRfY2FuZGlkYXRlX3BhaXJfaWQYCSACKAkSHAoUbG9jYWxfY2VydGlmaWNhdGVfaWQYCiACKAkSHQoVcmVtb3RlX2NlcnRpZmljYXRlX2lkGAsgAigJEhMKC3Rsc192ZXJzaW9uGAwgAigJEhMKC2R0bHNfY2lwaGVyGA0gAigJEioKCWR0bHNfcm9sZRgOIAIoDjIXLmxpdmVraXQucHJvdG8uRHRsc1JvbGUSEwoLc3J0cF9jaXBoZXIYDyACKAkSJwofc2VsZWN0ZWRfY2FuZGlkYXRlX3BhaXJfY2hhbmdlcxgQIAIoDSKkBQoSQ2FuZGlkYXRlUGFpclN0YXRzEhQKDHRyYW5zcG9ydF9pZBgBIAIoCRIaChJsb2NhbF9jYW5kaWRhdGVfaWQYAiACKAkSGwoTcmVtb3RlX2NhbmRpZGF0ZV9pZBgDIAIoCRIzCgVzdGF0ZRgEIAEoDjIkLmxpdmVraXQucHJvdG8uSWNlQ2FuZGlkYXRlUGFpclN0YXRlEhEKCW5vbWluYXRlZBgFIAIoCBIUCgxwYWNrZXRzX3NlbnQYBiACKAQSGAoQcGFja2V0c19yZWNlaXZlZBgHIAIoBBISCgpieXRlc19zZW50GAggAigEEhYKDmJ5dGVzX3JlY2VpdmVkGAkgAigEEiIKGmxhc3RfcGFja2V0X3NlbnRfdGltZXN0YW1wGAogAigBEiYKHmxhc3RfcGFja2V0X3JlY2VpdmVkX3RpbWVzdGFtcBgLIAIoARIdChV0b3RhbF9yb3VuZF90cmlwX3RpbWUYDCACKAESHwoXY3VycmVudF9yb3VuZF90cmlwX3RpbWUYDSACKAESIgoaYXZhaWxhYmxlX291dGdvaW5nX2JpdHJhdGUYDiACKAESIgoaYXZhaWxhYmxlX2luY29taW5nX2JpdHJhdGUYDyACKAESGQoRcmVxdWVzdHNfcmVjZWl2ZWQYECACKAQSFQoNcmVxdWVzdHNfc2VudBgRIAIoBBIaChJyZXNwb25zZXNfcmVjZWl2ZWQYEiACKAQSFgoOcmVzcG9uc2VzX3NlbnQYEyACKAQSHQoVY29uc2VudF9yZXF1ZXN0c19zZW50GBQgAigEEiEKGXBhY2tldHNfZGlzY2FyZGVkX29uX3NlbmQYFSACKA0SHwoXYnl0ZXNfZGlzY2FyZGVkX29uX3NlbmQYFiACKAQiiQMKEUljZUNhbmRpZGF0ZVN0YXRzEhQKDHRyYW5zcG9ydF9pZBgBIAIoCRIPCgdhZGRyZXNzGAIgAigJEgwKBHBvcnQYAyACKAUSEAoIcHJvdG9jb2wYBCACKAkSNwoOY2FuZGlkYXRlX3R5cGUYBSABKA4yHy5saXZla2l0LnByb3RvLkljZUNhbmRpZGF0ZVR5cGUSEAoIcHJpb3JpdHkYBiACKAUSCwoDdXJsGAcgAigJEkEKDnJlbGF5X3Byb3RvY29sGAggASgOMikubGl2ZWtpdC5wcm90by5JY2VTZXJ2ZXJUcmFuc3BvcnRQcm90b2NvbBISCgpmb3VuZGF0aW9uGAkgAigJEhcKD3JlbGF0ZWRfYWRkcmVzcxgKIAIoCRIUCgxyZWxhdGVkX3BvcnQYCyACKAUSGQoRdXNlcm5hbWVfZnJhZ21lbnQYDCACKAkSNAoIdGNwX3R5cGUYDSABKA4yIi5saXZla2l0LnByb3RvLkljZVRjcENhbmRpZGF0ZVR5cGUigQEKEENlcnRpZmljYXRlU3RhdHMSEwoLZmluZ2VycHJpbnQYASACKAkSHQoVZmluZ2VycHJpbnRfYWxnb3JpdGhtGAIgAigJEhoKEmJhc2U2NF9jZXJ0aWZpY2F0ZRgDIAIoCRIdChVpc3N1ZXJfY2VydGlmaWNhdGVfaWQYBCACKAkqUQoQRGF0YUNoYW5uZWxTdGF0ZRIRCg1EQ19DT05ORUNUSU5HEAASCwoHRENfT1BFThABEg4KCkRDX0NMT1NJTkcQAhINCglEQ19DTE9TRUQQAypyChdRdWFsaXR5TGltaXRhdGlvblJlYXNvbhITCg9MSU1JVEFUSU9OX05PTkUQABISCg5MSU1JVEFUSU9OX0NQVRABEhgKFExJTUlUQVRJT05fQkFORFdJRFRIEAISFAoQTElNSVRBVElPTl9PVEhFUhADKkMKB0ljZVJvbGUSDwoLSUNFX1VOS05PV04QABITCg9JQ0VfQ09OVFJPTExJTkcQARISCg5JQ0VfQ09OVFJPTExFRBACKp8BChJEdGxzVHJhbnNwb3J0U3RhdGUSFgoSRFRMU19UUkFOU1BPUlRfTkVXEAASHQoZRFRMU19UUkFOU1BPUlRfQ09OTkVDVElORxABEhwKGERUTFNfVFJBTlNQT1JUX0NPTk5FQ1RFRBACEhkKFURUTFNfVFJBTlNQT1JUX0NMT1NFRBADEhkKFURUTFNfVFJBTlNQT1JUX0ZBSUxFRBAEKtQBChFJY2VUcmFuc3BvcnRTdGF0ZRIVChFJQ0VfVFJBTlNQT1JUX05FVxAAEhoKFklDRV9UUkFOU1BPUlRfQ0hFQ0tJTkcQARIbChdJQ0VfVFJBTlNQT1JUX0NPTk5FQ1RFRBACEhsKF0lDRV9UUkFOU1BPUlRfQ09NUExFVEVEEAMSHgoaSUNFX1RSQU5TUE9SVF9ESVNDT05ORUNURUQQBBIYChRJQ0VfVFJBTlNQT1JUX0ZBSUxFRBAFEhgKFElDRV9UUkFOU1BPUlRfQ0xPU0VEEAYqPgoIRHRsc1JvbGUSDwoLRFRMU19DTElFTlQQABIPCgtEVExTX1NFUlZFUhABEhAKDERUTFNfVU5LTk9XThACKnUKFUljZUNhbmRpZGF0ZVBhaXJTdGF0ZRIPCgtQQUlSX0ZST1pFThAAEhAKDFBBSVJfV0FJVElORxABEhQKEFBBSVJfSU5fUFJPR1JFU1MQAhIPCgtQQUlSX0ZBSUxFRBADEhIKDlBBSVJfU1VDQ0VFREVEEAQqPQoQSWNlQ2FuZGlkYXRlVHlwZRIICgRIT1NUEAASCQoFU1JGTFgQARIJCgVQUkZMWBACEgkKBVJFTEFZEAMqVQoaSWNlU2VydmVyVHJhbnNwb3J0UHJvdG9jb2wSEQoNVFJBTlNQT1JUX1VEUBAAEhEKDVRSQU5TUE9SVF9UQ1AQARIRCg1UUkFOU1BPUlRfVExTEAIqVAoTSWNlVGNwQ2FuZGlkYXRlVHlwZRIUChBDQU5ESURBVEVfQUNUSVZFEAASFQoRQ0FORElEQVRFX1BBU1NJVkUQARIQCgxDQU5ESURBVEVfU08QAkIQqgINTGl2ZUtpdC5Qcm90bw"); + fileDesc("CgtzdGF0cy5wcm90bxINbGl2ZWtpdC5wcm90byLrGAoIUnRjU3RhdHMSLgoFY29kZWMYAyABKAsyHS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLkNvZGVjSAASOQoLaW5ib3VuZF9ydHAYBCABKAsyIi5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLkluYm91bmRSdHBIABI7CgxvdXRib3VuZF9ydHAYBSABKAsyIy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLk91dGJvdW5kUnRwSAASRgoScmVtb3RlX2luYm91bmRfcnRwGAYgASgLMigubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5SZW1vdGVJbmJvdW5kUnRwSAASSAoTcmVtb3RlX291dGJvdW5kX3J0cBgHIAEoCzIpLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuUmVtb3RlT3V0Ym91bmRSdHBIABI7CgxtZWRpYV9zb3VyY2UYCCABKAsyIy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLk1lZGlhU291cmNlSAASPQoNbWVkaWFfcGxheW91dBgJIAEoCzIkLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuTWVkaWFQbGF5b3V0SAASQQoPcGVlcl9jb25uZWN0aW9uGAogASgLMiYubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5QZWVyQ29ubmVjdGlvbkgAEjsKDGRhdGFfY2hhbm5lbBgLIAEoCzIjLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuRGF0YUNoYW5uZWxIABI2Cgl0cmFuc3BvcnQYDCABKAsyIS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlRyYW5zcG9ydEgAEj8KDmNhbmRpZGF0ZV9wYWlyGA0gASgLMiUubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5DYW5kaWRhdGVQYWlySAASQQoPbG9jYWxfY2FuZGlkYXRlGA4gASgLMiYubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5Mb2NhbENhbmRpZGF0ZUgAEkMKEHJlbW90ZV9jYW5kaWRhdGUYDyABKAsyJy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlJlbW90ZUNhbmRpZGF0ZUgAEjoKC2NlcnRpZmljYXRlGBAgASgLMiMubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5DZXJ0aWZpY2F0ZUgAEjAKBnN0cmVhbRgRIAEoCzIeLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuU3RyZWFtSAASLgoFdHJhY2sYEiABKAsyHS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlRyYWNrSAAaWwoFQ29kZWMSKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESKAoFY29kZWMYAiACKAsyGS5saXZla2l0LnByb3RvLkNvZGVjU3RhdHMa1QEKCkluYm91bmRSdHASKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESLQoGc3RyZWFtGAIgAigLMh0ubGl2ZWtpdC5wcm90by5SdHBTdHJlYW1TdGF0cxI3CghyZWNlaXZlZBgDIAIoCzIlLmxpdmVraXQucHJvdG8uUmVjZWl2ZWRSdHBTdHJlYW1TdGF0cxI1CgdpbmJvdW5kGAQgAigLMiQubGl2ZWtpdC5wcm90by5JbmJvdW5kUnRwU3RyZWFtU3RhdHMa0AEKC091dGJvdW5kUnRwEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi0KBnN0cmVhbRgCIAIoCzIdLmxpdmVraXQucHJvdG8uUnRwU3RyZWFtU3RhdHMSLwoEc2VudBgDIAIoCzIhLmxpdmVraXQucHJvdG8uU2VudFJ0cFN0cmVhbVN0YXRzEjcKCG91dGJvdW5kGAQgAigLMiUubGl2ZWtpdC5wcm90by5PdXRib3VuZFJ0cFN0cmVhbVN0YXRzGugBChBSZW1vdGVJbmJvdW5kUnRwEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi0KBnN0cmVhbRgCIAIoCzIdLmxpdmVraXQucHJvdG8uUnRwU3RyZWFtU3RhdHMSNwoIcmVjZWl2ZWQYAyACKAsyJS5saXZla2l0LnByb3RvLlJlY2VpdmVkUnRwU3RyZWFtU3RhdHMSQgoOcmVtb3RlX2luYm91bmQYBCACKAsyKi5saXZla2l0LnByb3RvLlJlbW90ZUluYm91bmRSdHBTdHJlYW1TdGF0cxrjAQoRUmVtb3RlT3V0Ym91bmRSdHASKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESLQoGc3RyZWFtGAIgAigLMh0ubGl2ZWtpdC5wcm90by5SdHBTdHJlYW1TdGF0cxIvCgRzZW50GAMgAigLMiEubGl2ZWtpdC5wcm90by5TZW50UnRwU3RyZWFtU3RhdHMSRAoPcmVtb3RlX291dGJvdW5kGAQgAigLMisubGl2ZWtpdC5wcm90by5SZW1vdGVPdXRib3VuZFJ0cFN0cmVhbVN0YXRzGsgBCgtNZWRpYVNvdXJjZRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIvCgZzb3VyY2UYAiACKAsyHy5saXZla2l0LnByb3RvLk1lZGlhU291cmNlU3RhdHMSLgoFYXVkaW8YAyACKAsyHy5saXZla2l0LnByb3RvLkF1ZGlvU291cmNlU3RhdHMSLgoFdmlkZW8YBCACKAsyHy5saXZla2l0LnByb3RvLlZpZGVvU291cmNlU3RhdHMacQoMTWVkaWFQbGF5b3V0EigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEjcKDWF1ZGlvX3BsYXlvdXQYAiACKAsyIC5saXZla2l0LnByb3RvLkF1ZGlvUGxheW91dFN0YXRzGmoKDlBlZXJDb25uZWN0aW9uEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi4KAnBjGAIgAigLMiIubGl2ZWtpdC5wcm90by5QZWVyQ29ubmVjdGlvblN0YXRzGmQKC0RhdGFDaGFubmVsEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEisKAmRjGAIgAigLMh8ubGl2ZWtpdC5wcm90by5EYXRhQ2hhbm5lbFN0YXRzGmcKCVRyYW5zcG9ydBIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIwCgl0cmFuc3BvcnQYAiACKAsyHS5saXZla2l0LnByb3RvLlRyYW5zcG9ydFN0YXRzGnQKDUNhbmRpZGF0ZVBhaXISKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESOQoOY2FuZGlkYXRlX3BhaXIYAiACKAsyIS5saXZla2l0LnByb3RvLkNhbmRpZGF0ZVBhaXJTdGF0cxpvCg5Mb2NhbENhbmRpZGF0ZRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIzCgljYW5kaWRhdGUYAiACKAsyIC5saXZla2l0LnByb3RvLkljZUNhbmRpZGF0ZVN0YXRzGnAKD1JlbW90ZUNhbmRpZGF0ZRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIzCgljYW5kaWRhdGUYAiACKAsyIC5saXZla2l0LnByb3RvLkljZUNhbmRpZGF0ZVN0YXRzGm0KC0NlcnRpZmljYXRlEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEjQKC2NlcnRpZmljYXRlGAIgAigLMh8ubGl2ZWtpdC5wcm90by5DZXJ0aWZpY2F0ZVN0YXRzGl4KBlN0cmVhbRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIqCgZzdHJlYW0YAiACKAsyGi5saXZla2l0LnByb3RvLlN0cmVhbVN0YXRzGgcKBVRyYWNrQgcKBXN0YXRzIi0KDFJ0Y1N0YXRzRGF0YRIKCgJpZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMiiAEKCkNvZGVjU3RhdHMSFAoMcGF5bG9hZF90eXBlGAEgAigNEhQKDHRyYW5zcG9ydF9pZBgCIAIoCRIRCgltaW1lX3R5cGUYAyACKAkSEgoKY2xvY2tfcmF0ZRgEIAIoDRIQCghjaGFubmVscxgFIAIoDRIVCg1zZHBfZm10cF9saW5lGAYgAigJIlQKDlJ0cFN0cmVhbVN0YXRzEgwKBHNzcmMYASACKA0SDAoEa2luZBgCIAIoCRIUCgx0cmFuc3BvcnRfaWQYAyACKAkSEAoIY29kZWNfaWQYBCACKAkiWAoWUmVjZWl2ZWRSdHBTdHJlYW1TdGF0cxIYChBwYWNrZXRzX3JlY2VpdmVkGAEgAigEEhQKDHBhY2tldHNfbG9zdBgCIAIoAxIOCgZqaXR0ZXIYAyACKAEiggwKFUluYm91bmRSdHBTdHJlYW1TdGF0cxIYChB0cmFja19pZGVudGlmaWVyGAEgAigJEgsKA21pZBgCIAIoCRIRCglyZW1vdGVfaWQYAyACKAkSFgoOZnJhbWVzX2RlY29kZWQYBCACKA0SGgoSa2V5X2ZyYW1lc19kZWNvZGVkGAUgAigNEhcKD2ZyYW1lc19yZW5kZXJlZBgGIAIoDRIWCg5mcmFtZXNfZHJvcHBlZBgHIAIoDRITCgtmcmFtZV93aWR0aBgIIAIoDRIUCgxmcmFtZV9oZWlnaHQYCSACKA0SGQoRZnJhbWVzX3Blcl9zZWNvbmQYCiACKAESDgoGcXBfc3VtGAsgAigEEhkKEXRvdGFsX2RlY29kZV90aW1lGAwgAigBEh8KF3RvdGFsX2ludGVyX2ZyYW1lX2RlbGF5GA0gAigBEicKH3RvdGFsX3NxdWFyZWRfaW50ZXJfZnJhbWVfZGVsYXkYDiACKAESEwoLcGF1c2VfY291bnQYDyACKA0SHAoUdG90YWxfcGF1c2VfZHVyYXRpb24YECACKAESFAoMZnJlZXplX2NvdW50GBEgAigNEh0KFXRvdGFsX2ZyZWV6ZV9kdXJhdGlvbhgSIAIoARImCh5sYXN0X3BhY2tldF9yZWNlaXZlZF90aW1lc3RhbXAYEyACKAESHQoVaGVhZGVyX2J5dGVzX3JlY2VpdmVkGBQgAigEEhkKEXBhY2tldHNfZGlzY2FyZGVkGBUgAigEEhoKEmZlY19ieXRlc19yZWNlaXZlZBgWIAIoBBIcChRmZWNfcGFja2V0c19yZWNlaXZlZBgXIAIoBBIdChVmZWNfcGFja2V0c19kaXNjYXJkZWQYGCACKAQSFgoOYnl0ZXNfcmVjZWl2ZWQYGSACKAQSEgoKbmFja19jb3VudBgaIAIoDRIRCglmaXJfY291bnQYGyACKA0SEQoJcGxpX2NvdW50GBwgAigNEh4KFnRvdGFsX3Byb2Nlc3NpbmdfZGVsYXkYHSACKAESIwobZXN0aW1hdGVkX3BsYXlvdXRfdGltZXN0YW1wGB4gAigBEhsKE2ppdHRlcl9idWZmZXJfZGVsYXkYHyACKAESIgoaaml0dGVyX2J1ZmZlcl90YXJnZXRfZGVsYXkYICACKAESIwobaml0dGVyX2J1ZmZlcl9lbWl0dGVkX2NvdW50GCEgAigEEiMKG2ppdHRlcl9idWZmZXJfbWluaW11bV9kZWxheRgiIAIoARIeChZ0b3RhbF9zYW1wbGVzX3JlY2VpdmVkGCMgAigEEhkKEWNvbmNlYWxlZF9zYW1wbGVzGCQgAigEEiAKGHNpbGVudF9jb25jZWFsZWRfc2FtcGxlcxglIAIoBBIaChJjb25jZWFsbWVudF9ldmVudHMYJiACKAQSKQohaW5zZXJ0ZWRfc2FtcGxlc19mb3JfZGVjZWxlcmF0aW9uGCcgAigEEigKIHJlbW92ZWRfc2FtcGxlc19mb3JfYWNjZWxlcmF0aW9uGCggAigEEhMKC2F1ZGlvX2xldmVsGCkgAigBEhoKEnRvdGFsX2F1ZGlvX2VuZXJneRgqIAIoARIeChZ0b3RhbF9zYW1wbGVzX2R1cmF0aW9uGCsgAigBEhcKD2ZyYW1lc19yZWNlaXZlZBgsIAIoBBIeChZkZWNvZGVyX2ltcGxlbWVudGF0aW9uGC0gAigJEhIKCnBsYXlvdXRfaWQYLiACKAkSHwoXcG93ZXJfZWZmaWNpZW50X2RlY29kZXIYLyACKAgSLgomZnJhbWVzX2Fzc2VtYmxlZF9mcm9tX211bHRpcGxlX3BhY2tldHMYMCACKAQSGwoTdG90YWxfYXNzZW1ibHlfdGltZRgxIAIoARImCh5yZXRyYW5zbWl0dGVkX3BhY2tldHNfcmVjZWl2ZWQYMiACKAQSJAoccmV0cmFuc21pdHRlZF9ieXRlc19yZWNlaXZlZBgzIAIoBBIQCghydHhfc3NyYxg0IAIoDRIQCghmZWNfc3NyYxg1IAIoDSI+ChJTZW50UnRwU3RyZWFtU3RhdHMSFAoMcGFja2V0c19zZW50GAEgAigEEhIKCmJ5dGVzX3NlbnQYAiACKAQi0QcKFk91dGJvdW5kUnRwU3RyZWFtU3RhdHMSCwoDbWlkGAEgAigJEhcKD21lZGlhX3NvdXJjZV9pZBgCIAIoCRIRCglyZW1vdGVfaWQYAyACKAkSCwoDcmlkGAQgAigJEhkKEWhlYWRlcl9ieXRlc19zZW50GAUgAigEEiIKGnJldHJhbnNtaXR0ZWRfcGFja2V0c19zZW50GAYgAigEEiAKGHJldHJhbnNtaXR0ZWRfYnl0ZXNfc2VudBgHIAIoBBIQCghydHhfc3NyYxgIIAIoDRIWCg50YXJnZXRfYml0cmF0ZRgJIAIoARIiChp0b3RhbF9lbmNvZGVkX2J5dGVzX3RhcmdldBgKIAIoBBITCgtmcmFtZV93aWR0aBgLIAIoDRIUCgxmcmFtZV9oZWlnaHQYDCACKA0SGQoRZnJhbWVzX3Blcl9zZWNvbmQYDSACKAESEwoLZnJhbWVzX3NlbnQYDiACKA0SGAoQaHVnZV9mcmFtZXNfc2VudBgPIAIoDRIWCg5mcmFtZXNfZW5jb2RlZBgQIAIoDRIaChJrZXlfZnJhbWVzX2VuY29kZWQYESACKA0SDgoGcXBfc3VtGBIgAigEEhkKEXRvdGFsX2VuY29kZV90aW1lGBMgAigBEh8KF3RvdGFsX3BhY2tldF9zZW5kX2RlbGF5GBQgAigBEkkKGXF1YWxpdHlfbGltaXRhdGlvbl9yZWFzb24YFSACKA4yJi5saXZla2l0LnByb3RvLlF1YWxpdHlMaW1pdGF0aW9uUmVhc29uEmsKHHF1YWxpdHlfbGltaXRhdGlvbl9kdXJhdGlvbnMYFiADKAsyRS5saXZla2l0LnByb3RvLk91dGJvdW5kUnRwU3RyZWFtU3RhdHMuUXVhbGl0eUxpbWl0YXRpb25EdXJhdGlvbnNFbnRyeRItCiVxdWFsaXR5X2xpbWl0YXRpb25fcmVzb2x1dGlvbl9jaGFuZ2VzGBcgAigNEhIKCm5hY2tfY291bnQYGCACKA0SEQoJZmlyX2NvdW50GBkgAigNEhEKCXBsaV9jb3VudBgaIAIoDRIeChZlbmNvZGVyX2ltcGxlbWVudGF0aW9uGBsgAigJEh8KF3Bvd2VyX2VmZmljaWVudF9lbmNvZGVyGBwgAigIEg4KBmFjdGl2ZRgdIAIoCBIYChBzY2FsYWJpbGl0eV9tb2RlGB4gAigJGkEKH1F1YWxpdHlMaW1pdGF0aW9uRHVyYXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgBOgI4ASKkAQobUmVtb3RlSW5ib3VuZFJ0cFN0cmVhbVN0YXRzEhAKCGxvY2FsX2lkGAEgAigJEhcKD3JvdW5kX3RyaXBfdGltZRgCIAIoARIdChV0b3RhbF9yb3VuZF90cmlwX3RpbWUYAyACKAESFQoNZnJhY3Rpb25fbG9zdBgEIAIoARIkChxyb3VuZF90cmlwX3RpbWVfbWVhc3VyZW1lbnRzGAUgAigEIr4BChxSZW1vdGVPdXRib3VuZFJ0cFN0cmVhbVN0YXRzEhAKCGxvY2FsX2lkGAEgAigJEhgKEHJlbW90ZV90aW1lc3RhbXAYAiACKAESFAoMcmVwb3J0c19zZW50GAMgAigEEhcKD3JvdW5kX3RyaXBfdGltZRgEIAIoARIdChV0b3RhbF9yb3VuZF90cmlwX3RpbWUYBSACKAESJAoccm91bmRfdHJpcF90aW1lX21lYXN1cmVtZW50cxgGIAIoBCI6ChBNZWRpYVNvdXJjZVN0YXRzEhgKEHRyYWNrX2lkZW50aWZpZXIYASACKAkSDAoEa2luZBgCIAIoCSKiAgoQQXVkaW9Tb3VyY2VTdGF0cxITCgthdWRpb19sZXZlbBgBIAIoARIaChJ0b3RhbF9hdWRpb19lbmVyZ3kYAiACKAESHgoWdG90YWxfc2FtcGxlc19kdXJhdGlvbhgDIAIoARIYChBlY2hvX3JldHVybl9sb3NzGAQgAigBEiQKHGVjaG9fcmV0dXJuX2xvc3NfZW5oYW5jZW1lbnQYBSACKAESIAoYZHJvcHBlZF9zYW1wbGVzX2R1cmF0aW9uGAYgAigBEh4KFmRyb3BwZWRfc2FtcGxlc19ldmVudHMYByACKA0SGwoTdG90YWxfY2FwdHVyZV9kZWxheRgIIAIoARIeChZ0b3RhbF9zYW1wbGVzX2NhcHR1cmVkGAkgAigEIlwKEFZpZGVvU291cmNlU3RhdHMSDQoFd2lkdGgYASACKA0SDgoGaGVpZ2h0GAIgAigNEg4KBmZyYW1lcxgDIAIoDRIZChFmcmFtZXNfcGVyX3NlY29uZBgEIAIoASLFAQoRQXVkaW9QbGF5b3V0U3RhdHMSDAoEa2luZBgBIAIoCRIkChxzeW50aGVzaXplZF9zYW1wbGVzX2R1cmF0aW9uGAIgAigBEiIKGnN5bnRoZXNpemVkX3NhbXBsZXNfZXZlbnRzGAMgAigNEh4KFnRvdGFsX3NhbXBsZXNfZHVyYXRpb24YBCACKAESGwoTdG90YWxfcGxheW91dF9kZWxheRgFIAIoARIbChN0b3RhbF9zYW1wbGVzX2NvdW50GAYgAigEIlEKE1BlZXJDb25uZWN0aW9uU3RhdHMSHAoUZGF0YV9jaGFubmVsc19vcGVuZWQYASACKA0SHAoUZGF0YV9jaGFubmVsc19jbG9zZWQYAiACKA0i4gEKEERhdGFDaGFubmVsU3RhdHMSDQoFbGFiZWwYASACKAkSEAoIcHJvdG9jb2wYAiACKAkSHwoXZGF0YV9jaGFubmVsX2lkZW50aWZpZXIYAyACKAUSLgoFc3RhdGUYBCABKA4yHy5saXZla2l0LnByb3RvLkRhdGFDaGFubmVsU3RhdGUSFQoNbWVzc2FnZXNfc2VudBgFIAIoDRISCgpieXRlc19zZW50GAYgAigEEhkKEW1lc3NhZ2VzX3JlY2VpdmVkGAcgAigNEhYKDmJ5dGVzX3JlY2VpdmVkGAggAigEIpwECg5UcmFuc3BvcnRTdGF0cxIUCgxwYWNrZXRzX3NlbnQYASACKAQSGAoQcGFja2V0c19yZWNlaXZlZBgCIAIoBBISCgpieXRlc19zZW50GAMgAigEEhYKDmJ5dGVzX3JlY2VpdmVkGAQgAigEEigKCGljZV9yb2xlGAUgAigOMhYubGl2ZWtpdC5wcm90by5JY2VSb2xlEiMKG2ljZV9sb2NhbF91c2VybmFtZV9mcmFnbWVudBgGIAIoCRI1CgpkdGxzX3N0YXRlGAcgASgOMiEubGl2ZWtpdC5wcm90by5EdGxzVHJhbnNwb3J0U3RhdGUSMwoJaWNlX3N0YXRlGAggASgOMiAubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRTdGF0ZRIiChpzZWxlY3RlZF9jYW5kaWRhdGVfcGFpcl9pZBgJIAIoCRIcChRsb2NhbF9jZXJ0aWZpY2F0ZV9pZBgKIAIoCRIdChVyZW1vdGVfY2VydGlmaWNhdGVfaWQYCyACKAkSEwoLdGxzX3ZlcnNpb24YDCACKAkSEwoLZHRsc19jaXBoZXIYDSACKAkSKgoJZHRsc19yb2xlGA4gAigOMhcubGl2ZWtpdC5wcm90by5EdGxzUm9sZRITCgtzcnRwX2NpcGhlchgPIAIoCRInCh9zZWxlY3RlZF9jYW5kaWRhdGVfcGFpcl9jaGFuZ2VzGBAgAigNIqQFChJDYW5kaWRhdGVQYWlyU3RhdHMSFAoMdHJhbnNwb3J0X2lkGAEgAigJEhoKEmxvY2FsX2NhbmRpZGF0ZV9pZBgCIAIoCRIbChNyZW1vdGVfY2FuZGlkYXRlX2lkGAMgAigJEjMKBXN0YXRlGAQgASgOMiQubGl2ZWtpdC5wcm90by5JY2VDYW5kaWRhdGVQYWlyU3RhdGUSEQoJbm9taW5hdGVkGAUgAigIEhQKDHBhY2tldHNfc2VudBgGIAIoBBIYChBwYWNrZXRzX3JlY2VpdmVkGAcgAigEEhIKCmJ5dGVzX3NlbnQYCCACKAQSFgoOYnl0ZXNfcmVjZWl2ZWQYCSACKAQSIgoabGFzdF9wYWNrZXRfc2VudF90aW1lc3RhbXAYCiACKAESJgoebGFzdF9wYWNrZXRfcmVjZWl2ZWRfdGltZXN0YW1wGAsgAigBEh0KFXRvdGFsX3JvdW5kX3RyaXBfdGltZRgMIAIoARIfChdjdXJyZW50X3JvdW5kX3RyaXBfdGltZRgNIAIoARIiChphdmFpbGFibGVfb3V0Z29pbmdfYml0cmF0ZRgOIAIoARIiChphdmFpbGFibGVfaW5jb21pbmdfYml0cmF0ZRgPIAIoARIZChFyZXF1ZXN0c19yZWNlaXZlZBgQIAIoBBIVCg1yZXF1ZXN0c19zZW50GBEgAigEEhoKEnJlc3BvbnNlc19yZWNlaXZlZBgSIAIoBBIWCg5yZXNwb25zZXNfc2VudBgTIAIoBBIdChVjb25zZW50X3JlcXVlc3RzX3NlbnQYFCACKAQSIQoZcGFja2V0c19kaXNjYXJkZWRfb25fc2VuZBgVIAIoDRIfChdieXRlc19kaXNjYXJkZWRfb25fc2VuZBgWIAIoBCKJAwoRSWNlQ2FuZGlkYXRlU3RhdHMSFAoMdHJhbnNwb3J0X2lkGAEgAigJEg8KB2FkZHJlc3MYAiACKAkSDAoEcG9ydBgDIAIoBRIQCghwcm90b2NvbBgEIAIoCRI3Cg5jYW5kaWRhdGVfdHlwZRgFIAEoDjIfLmxpdmVraXQucHJvdG8uSWNlQ2FuZGlkYXRlVHlwZRIQCghwcmlvcml0eRgGIAIoBRILCgN1cmwYByACKAkSQQoOcmVsYXlfcHJvdG9jb2wYCCABKA4yKS5saXZla2l0LnByb3RvLkljZVNlcnZlclRyYW5zcG9ydFByb3RvY29sEhIKCmZvdW5kYXRpb24YCSACKAkSFwoPcmVsYXRlZF9hZGRyZXNzGAogAigJEhQKDHJlbGF0ZWRfcG9ydBgLIAIoBRIZChF1c2VybmFtZV9mcmFnbWVudBgMIAIoCRI0Cgh0Y3BfdHlwZRgNIAEoDjIiLmxpdmVraXQucHJvdG8uSWNlVGNwQ2FuZGlkYXRlVHlwZSKBAQoQQ2VydGlmaWNhdGVTdGF0cxITCgtmaW5nZXJwcmludBgBIAIoCRIdChVmaW5nZXJwcmludF9hbGdvcml0aG0YAiACKAkSGgoSYmFzZTY0X2NlcnRpZmljYXRlGAMgAigJEh0KFWlzc3Vlcl9jZXJ0aWZpY2F0ZV9pZBgEIAIoCSI0CgtTdHJlYW1TdGF0cxIKCgJpZBgBIAIoCRIZChFzdHJlYW1faWRlbnRpZmllchgCIAIoCSpRChBEYXRhQ2hhbm5lbFN0YXRlEhEKDURDX0NPTk5FQ1RJTkcQABILCgdEQ19PUEVOEAESDgoKRENfQ0xPU0lORxACEg0KCURDX0NMT1NFRBADKnIKF1F1YWxpdHlMaW1pdGF0aW9uUmVhc29uEhMKD0xJTUlUQVRJT05fTk9ORRAAEhIKDkxJTUlUQVRJT05fQ1BVEAESGAoUTElNSVRBVElPTl9CQU5EV0lEVEgQAhIUChBMSU1JVEFUSU9OX09USEVSEAMqQwoHSWNlUm9sZRIPCgtJQ0VfVU5LTk9XThAAEhMKD0lDRV9DT05UUk9MTElORxABEhIKDklDRV9DT05UUk9MTEVEEAIqnwEKEkR0bHNUcmFuc3BvcnRTdGF0ZRIWChJEVExTX1RSQU5TUE9SVF9ORVcQABIdChlEVExTX1RSQU5TUE9SVF9DT05ORUNUSU5HEAESHAoYRFRMU19UUkFOU1BPUlRfQ09OTkVDVEVEEAISGQoVRFRMU19UUkFOU1BPUlRfQ0xPU0VEEAMSGQoVRFRMU19UUkFOU1BPUlRfRkFJTEVEEAQq1AEKEUljZVRyYW5zcG9ydFN0YXRlEhUKEUlDRV9UUkFOU1BPUlRfTkVXEAASGgoWSUNFX1RSQU5TUE9SVF9DSEVDS0lORxABEhsKF0lDRV9UUkFOU1BPUlRfQ09OTkVDVEVEEAISGwoXSUNFX1RSQU5TUE9SVF9DT01QTEVURUQQAxIeChpJQ0VfVFJBTlNQT1JUX0RJU0NPTk5FQ1RFRBAEEhgKFElDRV9UUkFOU1BPUlRfRkFJTEVEEAUSGAoUSUNFX1RSQU5TUE9SVF9DTE9TRUQQBio+CghEdGxzUm9sZRIPCgtEVExTX0NMSUVOVBAAEg8KC0RUTFNfU0VSVkVSEAESEAoMRFRMU19VTktOT1dOEAIqdQoVSWNlQ2FuZGlkYXRlUGFpclN0YXRlEg8KC1BBSVJfRlJPWkVOEAASEAoMUEFJUl9XQUlUSU5HEAESFAoQUEFJUl9JTl9QUk9HUkVTUxACEg8KC1BBSVJfRkFJTEVEEAMSEgoOUEFJUl9TVUNDRUVERUQQBCo9ChBJY2VDYW5kaWRhdGVUeXBlEggKBEhPU1QQABIJCgVTUkZMWBABEgkKBVBSRkxYEAISCQoFUkVMQVkQAypVChpJY2VTZXJ2ZXJUcmFuc3BvcnRQcm90b2NvbBIRCg1UUkFOU1BPUlRfVURQEAASEQoNVFJBTlNQT1JUX1RDUBABEhEKDVRSQU5TUE9SVF9UTFMQAipUChNJY2VUY3BDYW5kaWRhdGVUeXBlEhQKEENBTkRJREFURV9BQ1RJVkUQABIVChFDQU5ESURBVEVfUEFTU0lWRRABEhAKDENBTkRJREFURV9TTxACQhCqAg1MaXZlS2l0LlByb3Rv"); /** * @generated from message livekit.proto.RtcStats @@ -119,7 +119,13 @@ export type RtcStats = Message<"livekit.proto.RtcStats"> & { case: "certificate"; } | { /** - * @generated from field: livekit.proto.RtcStats.Track track = 17; + * @generated from field: livekit.proto.RtcStats.Stream stream = 17; + */ + value: RtcStats_Stream; + case: "stream"; + } | { + /** + * @generated from field: livekit.proto.RtcStats.Track track = 18; */ value: RtcStats_Track; case: "track"; @@ -491,6 +497,28 @@ export type RtcStats_Certificate = Message<"livekit.proto.RtcStats.Certificate"> export const RtcStats_CertificateSchema: GenMessage = /*@__PURE__*/ messageDesc(file_stats, 0, 13); +/** + * @generated from message livekit.proto.RtcStats.Stream + */ +export type RtcStats_Stream = Message<"livekit.proto.RtcStats.Stream"> & { + /** + * @generated from field: required livekit.proto.RtcStatsData rtc = 1; + */ + rtc?: RtcStatsData; + + /** + * @generated from field: required livekit.proto.StreamStats stream = 2; + */ + stream?: StreamStats; +}; + +/** + * Describes the message livekit.proto.RtcStats.Stream. + * Use `create(RtcStats_StreamSchema)` to create a new message. + */ +export const RtcStats_StreamSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_stats, 0, 14); + /** * Deprecated * @@ -504,7 +532,7 @@ export type RtcStats_Track = Message<"livekit.proto.RtcStats.Track"> & { * Use `create(RtcStats_TrackSchema)` to create a new message. */ export const RtcStats_TrackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 14); + messageDesc(file_stats, 0, 15); /** * @generated from message livekit.proto.RtcStatsData @@ -1719,6 +1747,30 @@ export type CertificateStats = Message<"livekit.proto.CertificateStats"> & { export const CertificateStatsSchema: GenMessage = /*@__PURE__*/ messageDesc(file_stats, 19); +/** + * @generated from message livekit.proto.StreamStats + */ +export type StreamStats = Message<"livekit.proto.StreamStats"> & { + /** + * @generated from field: required string id = 1; + */ + id: string; + + /** + * required int64 timestamp = 3; + * + * @generated from field: required string stream_identifier = 2; + */ + streamIdentifier: string; +}; + +/** + * Describes the message livekit.proto.StreamStats. + * Use `create(StreamStatsSchema)` to create a new message. + */ +export const StreamStatsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_stats, 20); + /** * @generated from enum livekit.proto.DataChannelState */ diff --git a/packages/livekit-rtc/src/proto/track_publication_pb.ts b/packages/livekit-rtc/src/proto/track_publication_pb.ts new file mode 100644 index 00000000..85ed5478 --- /dev/null +++ b/packages/livekit-rtc/src/proto/track_publication_pb.ts @@ -0,0 +1,107 @@ +// Copyright 2023 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated from file track_publication.proto (package livekit.proto, syntax proto2) +/* eslint-disable */ + +import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; +import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file track_publication.proto. + */ +export const file_track_publication: GenFile = /*@__PURE__*/ + fileDesc("Chd0cmFja19wdWJsaWNhdGlvbi5wcm90bxINbGl2ZWtpdC5wcm90byJYCiNFbmFibGVSZW1vdGVUcmFja1B1YmxpY2F0aW9uUmVxdWVzdBIgChh0cmFja19wdWJsaWNhdGlvbl9oYW5kbGUYASACKAQSDwoHZW5hYmxlZBgCIAIoCCImCiRFbmFibGVSZW1vdGVUcmFja1B1YmxpY2F0aW9uUmVzcG9uc2UibwosVXBkYXRlUmVtb3RlVHJhY2tQdWJsaWNhdGlvbkRpbWVuc2lvblJlcXVlc3QSIAoYdHJhY2tfcHVibGljYXRpb25faGFuZGxlGAEgAigEEg0KBXdpZHRoGAIgAigNEg4KBmhlaWdodBgDIAIoDSIvCi1VcGRhdGVSZW1vdGVUcmFja1B1YmxpY2F0aW9uRGltZW5zaW9uUmVzcG9uc2VCEKoCDUxpdmVLaXQuUHJvdG8"); + +/** + * Enable/Disable a remote track publication + * + * @generated from message livekit.proto.EnableRemoteTrackPublicationRequest + */ +export type EnableRemoteTrackPublicationRequest = Message<"livekit.proto.EnableRemoteTrackPublicationRequest"> & { + /** + * @generated from field: required uint64 track_publication_handle = 1; + */ + trackPublicationHandle: bigint; + + /** + * @generated from field: required bool enabled = 2; + */ + enabled: boolean; +}; + +/** + * Describes the message livekit.proto.EnableRemoteTrackPublicationRequest. + * Use `create(EnableRemoteTrackPublicationRequestSchema)` to create a new message. + */ +export const EnableRemoteTrackPublicationRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_track_publication, 0); + +/** + * @generated from message livekit.proto.EnableRemoteTrackPublicationResponse + */ +export type EnableRemoteTrackPublicationResponse = Message<"livekit.proto.EnableRemoteTrackPublicationResponse"> & { +}; + +/** + * Describes the message livekit.proto.EnableRemoteTrackPublicationResponse. + * Use `create(EnableRemoteTrackPublicationResponseSchema)` to create a new message. + */ +export const EnableRemoteTrackPublicationResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_track_publication, 1); + +/** + * update a remote track publication dimension + * + * @generated from message livekit.proto.UpdateRemoteTrackPublicationDimensionRequest + */ +export type UpdateRemoteTrackPublicationDimensionRequest = Message<"livekit.proto.UpdateRemoteTrackPublicationDimensionRequest"> & { + /** + * @generated from field: required uint64 track_publication_handle = 1; + */ + trackPublicationHandle: bigint; + + /** + * @generated from field: required uint32 width = 2; + */ + width: number; + + /** + * @generated from field: required uint32 height = 3; + */ + height: number; +}; + +/** + * Describes the message livekit.proto.UpdateRemoteTrackPublicationDimensionRequest. + * Use `create(UpdateRemoteTrackPublicationDimensionRequestSchema)` to create a new message. + */ +export const UpdateRemoteTrackPublicationDimensionRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_track_publication, 2); + +/** + * @generated from message livekit.proto.UpdateRemoteTrackPublicationDimensionResponse + */ +export type UpdateRemoteTrackPublicationDimensionResponse = Message<"livekit.proto.UpdateRemoteTrackPublicationDimensionResponse"> & { +}; + +/** + * Describes the message livekit.proto.UpdateRemoteTrackPublicationDimensionResponse. + * Use `create(UpdateRemoteTrackPublicationDimensionResponseSchema)` to create a new message. + */ +export const UpdateRemoteTrackPublicationDimensionResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_track_publication, 3); + diff --git a/packages/livekit-rtc/src/room.ts b/packages/livekit-rtc/src/room.ts index 281ed4b0..83d2dc6a 100644 --- a/packages/livekit-rtc/src/room.ts +++ b/packages/livekit-rtc/src/room.ts @@ -2,22 +2,26 @@ // // SPDX-License-Identifier: Apache-2.0 import { create } from '@bufbuild/protobuf'; +import { DataStream_Chunk, DataStream_Header } from '@livekit/protocol'; import type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter'; import EventEmitter from 'events'; +import { ReadableStream } from 'node:stream/web'; +import { BinaryStreamReader, TextStreamReader } from './data_streams/stream_reader.js'; +import type { FileStreamInfo, StreamController, TextStreamInfo } from './data_streams/types.js'; import type { E2EEOptions } from './e2ee.js'; import { E2EEManager } from './e2ee.js'; import { FfiClient, FfiClientEvent, FfiHandle } from './ffi_client.js'; +import { log } from './log.js'; import type { Participant } from './participant.js'; import { LocalParticipant, RemoteParticipant } from './participant.js'; import { EncryptionState } from './proto/e2ee_pb.js'; import type { FfiEvent } from './proto/ffi_pb.js'; -import type { OwnedParticipant } from './proto/participant_pb.js'; +import type { DisconnectReason, OwnedParticipant } from './proto/participant_pb.js'; import type { ConnectCallback, ConnectResponse, ConnectionQuality, DataPacketKind, - DisconnectReason, DisconnectResponse, RoomOptions as FfiRoomOptions, IceServer, @@ -35,6 +39,7 @@ import { RemoteAudioTrack, RemoteVideoTrack } from './track.js'; import type { LocalTrackPublication, TrackPublication } from './track_publication.js'; import { RemoteTrackPublication } from './track_publication.js'; import type { ChatMessage } from './types.js'; +import { bigIntToNumber } from './utils.js'; export interface RtcConfiguration { iceTransportType: IceTransportType; @@ -383,6 +388,11 @@ export class Room extends (EventEmitter as new () => TypedEmitter this.emit(RoomEvent.Reconnected); } else if (ev.case == 'roomSidChanged') { this.emit(RoomEvent.RoomSidChanged, ev.value.sid); + } else if (ev.case === 'streamHeader') { + // FIXME this needs proper participant info passed + this.handleStreamHeader(new DataStream_Header(ev.value), 'todo'); + } else if (ev.case === 'streamChunk') { + this.handleStreamChunk(new DataStream_Chunk(ev.value)); } }; @@ -439,6 +449,96 @@ export class Room extends (EventEmitter as new () => TypedEmitter this.remoteParticipants.set(ownedInfo.info!.identity, participant); return participant; } + + fileStreamControllers = new Map>(); + + textStreamControllers = new Map>(); + + private handleStreamHeader(streamHeader: DataStream_Header, participantIdentity: string) { + if (streamHeader.contentHeader.case === 'fileHeader') { + if (this.listeners(RoomEvent.FileStreamReceived).length === 0) { + log.debug('ignoring incoming file stream due to no listeners'); + return; + } + let streamController: ReadableStreamDefaultController; + const stream = new ReadableStream({ + start: (controller) => { + streamController = controller; + this.fileStreamControllers.set(streamHeader.streamId, { + header: streamHeader, + controller: streamController, + startTime: Date.now(), + }); + }, + }); + const info: FileStreamInfo = { + id: streamHeader.streamId, + fileName: streamHeader.contentHeader.value.fileName ?? 'unknown', + mimeType: streamHeader.mimeType, + size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined, + topic: streamHeader.topic, + timestamp: bigIntToNumber(streamHeader.timestamp), + extensions: streamHeader.extensions, + }; + this.emit( + RoomEvent.FileStreamReceived, + new BinaryStreamReader(info, stream, bigIntToNumber(streamHeader.totalChunks)), + { identity: participantIdentity }, + ); + } else if (streamHeader.contentHeader.case === 'textHeader') { + if (this.listeners(RoomEvent.TextStreamReceived).length === 0) { + log.debug('ignoring incoming text stream due to no listeners'); + return; + } + let streamController: ReadableStreamDefaultController; + const stream = new ReadableStream({ + start: (controller) => { + streamController = controller; + this.textStreamControllers.set(streamHeader.streamId, { + header: streamHeader, + controller: streamController, + startTime: Date.now(), + }); + }, + }); + const info: TextStreamInfo = { + id: streamHeader.streamId, + mimeType: streamHeader.mimeType, + size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined, + topic: streamHeader.topic, + timestamp: Number(streamHeader.timestamp), + extensions: streamHeader.extensions, + }; + this.emit( + RoomEvent.TextStreamReceived, + new TextStreamReader(info, stream, bigIntToNumber(streamHeader.totalChunks)), + { identity: participantIdentity }, + ); + } + } + + private handleStreamChunk(chunk: DataStream_Chunk) { + const fileBuffer = this.fileStreamControllers.get(chunk.streamId); + if (fileBuffer) { + if (chunk.content.length > 0) { + fileBuffer.controller.enqueue(chunk); + } + if (chunk.complete === true) { + fileBuffer.controller.close(); + this.fileStreamControllers.delete(chunk.streamId); + } + } + const textBuffer = this.textStreamControllers.get(chunk.streamId); + if (textBuffer) { + if (chunk.content.length > 0) { + textBuffer.controller.enqueue(chunk); + } + if (chunk.complete === true) { + textBuffer.controller.close(); + this.fileStreamControllers.delete(chunk.streamId); + } + } + } } export class ConnectError extends Error { @@ -500,6 +600,8 @@ export type RoomCallbacks = { reconnecting: () => void; reconnected: () => void; roomSidChanged: (sid: string) => void; + textStreamReceived: (reader: TextStreamReader, participantInfo: { identity: string }) => void; + fileStreamReceived: (reader: BinaryStreamReader, participantInfo: { identity: string }) => void; }; export enum RoomEvent { @@ -531,4 +633,6 @@ export enum RoomEvent { Disconnected = 'disconnected', Reconnecting = 'reconnecting', Reconnected = 'reconnected', + TextStreamReceived = 'textStreamReceived', + FileStreamReceived = 'fileStreamReceived', } diff --git a/packages/livekit-rtc/src/utils.ts b/packages/livekit-rtc/src/utils.ts new file mode 100644 index 00000000..7d230b07 --- /dev/null +++ b/packages/livekit-rtc/src/utils.ts @@ -0,0 +1,13 @@ +/** convert bigints to numbers preserving undefined values */ +export function bigIntToNumber( + value: T, +): T extends bigint ? number : undefined { + return (value !== undefined ? Number(value) : undefined) as T extends bigint ? number : undefined; +} + +/** convert numbers to bigints preserving undefined values */ +export function numberToBigInt( + value: T, +): T extends number ? bigint : undefined { + return (value !== undefined ? BigInt(value) : undefined) as T extends number ? bigint : undefined; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3459c017..8dcfc0b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -190,9 +190,18 @@ importers: '@livekit/mutex': specifier: ^1.0.0 version: 1.1.0 + '@livekit/protocol': + specifier: ^1.29.4 + version: 1.29.4 '@livekit/typed-emitter': specifier: ^3.0.0 version: 3.0.0 + pino: + specifier: ^8.19.0 + version: 8.21.0 + pino-pretty: + specifier: ^11.0.0 + version: 11.3.0 optionalDependencies: '@livekit/rtc-node-darwin-arm64': specifier: workspace:* @@ -934,6 +943,9 @@ packages: '@livekit/protocol@1.29.1': resolution: {integrity: sha512-OhxXTZlyM5f4ydnAq1p5azzzOtKWmIoCSVtyVj9rgE42zQI5JM1rR9pubVRZovouGSvEDSJx9yL4Js2IlIyM1Q==} + '@livekit/protocol@1.29.4': + resolution: {integrity: sha512-dsqxvABHilrMA0BU5m1w8cMWSVeDjV2ZUIUDClNQZju3c30DLMfEYDHU5nmXDfaaHjNIgoRbYR7upJMozG8JJg==} + '@livekit/typed-emitter@3.0.0': resolution: {integrity: sha512-9bl0k4MgBPZu3Qu3R3xy12rmbW17e3bE9yf4YY85gJIQ3ezLEj/uzpKHWBsLaDoL5Mozz8QCgggwIBudYQWeQg==} @@ -1354,6 +1366,10 @@ packages: '@vitest/utils@2.1.2': resolution: {integrity: sha512-zMO2KdYy6mx56btx9JvAqAZ6EyS3g49krMPPrgOp1yxGZiA93HumGk+bZ5jIZtOg5/VBYl5eBmGRQHqq4FG6uQ==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1468,6 +1484,10 @@ packages: ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1483,6 +1503,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -1497,6 +1520,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bundle-require@5.0.0: resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1575,6 +1601,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -1617,6 +1646,9 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -1697,6 +1729,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -1948,6 +1983,14 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -1955,6 +1998,9 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1971,6 +2017,13 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -2145,6 +2198,9 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -2155,6 +2211,9 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.1.9: resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} engines: {node: '>= 4'} @@ -2584,6 +2643,10 @@ packages: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2684,6 +2747,23 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-pretty@11.3.0: + resolution: {integrity: sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==} + hasBin: true + + pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + + pino@8.21.0: + resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} + hasBin: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -2736,6 +2816,13 @@ packages: engines: {node: '>=14'} hasBin: true + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -2745,6 +2832,9 @@ packages: pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -2756,6 +2846,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@6.1.2: resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} engines: {node: '>=12'} @@ -2776,10 +2869,18 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdirp@4.0.2: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + reflect.getprototypeof@1.0.6: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} @@ -2838,16 +2939,26 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2907,6 +3018,12 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -2929,6 +3046,10 @@ packages: spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -2975,6 +3096,9 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -3054,6 +3178,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thread-stream@2.7.0: + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -3971,6 +4098,10 @@ snapshots: dependencies: '@bufbuild/protobuf': 1.10.0 + '@livekit/protocol@1.29.4': + dependencies: + '@bufbuild/protobuf': 1.10.0 + '@livekit/typed-emitter@3.0.0': {} '@manypkg/find-root@1.1.0': @@ -4401,6 +4532,10 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 @@ -4535,6 +4670,8 @@ snapshots: ast-types-flow@0.0.8: {} + atomic-sleep@1.0.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 @@ -4545,6 +4682,8 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -4562,6 +4701,11 @@ snapshots: dependencies: fill-range: 7.1.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-require@5.0.0(esbuild@0.24.0): dependencies: esbuild: 0.24.0 @@ -4637,6 +4781,8 @@ snapshots: color-name@1.1.4: {} + colorette@2.0.20: {} + comma-separated-tokens@2.0.3: {} commander@4.1.1: {} @@ -4681,6 +4827,8 @@ snapshots: dataloader@1.4.0: {} + dateformat@4.6.3: {} + debug@3.2.7: dependencies: ms: 2.1.3 @@ -4758,6 +4906,10 @@ snapshots: emoji-regex@9.2.2: {} + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -5228,6 +5380,10 @@ snapshots: esutils@2.0.3: {} + event-target-shim@5.0.1: {} + + events@3.3.0: {} + extendable-error@0.1.7: {} external-editor@3.1.0: @@ -5236,6 +5392,8 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + fast-copy@3.0.2: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -5252,6 +5410,10 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -5450,6 +5612,8 @@ snapshots: dependencies: '@types/hast': 3.0.4 + help-me@5.0.0: {} + html-void-elements@3.0.0: {} human-id@1.0.2: {} @@ -5458,6 +5622,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.1.9: {} ignore@5.3.2: {} @@ -5876,6 +6042,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + on-exit-leak-free@2.1.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -5956,6 +6124,48 @@ snapshots: pify@4.0.1: {} + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-pretty@11.3.0: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 3.0.2 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pump: 3.0.2 + readable-stream: 4.5.2 + secure-json-parse: 2.7.0 + sonic-boom: 4.2.0 + strip-json-comments: 3.1.1 + + pino-std-serializers@6.2.2: {} + + pino@8.21.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 6.2.2 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 3.8.1 + thread-stream: 2.7.0 + pirates@4.0.6: {} possible-typed-array-names@1.0.0: {} @@ -5990,6 +6200,10 @@ snapshots: prettier@3.3.3: {} + process-warning@3.0.0: {} + + process@0.11.10: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -6000,12 +6214,19 @@ snapshots: pseudomap@1.0.2: {} + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode.js@2.3.1: {} punycode@2.3.1: {} queue-microtask@1.2.3: {} + quick-format-unescaped@4.0.4: {} + quick-lru@6.1.2: {} react-dom@18.2.0(react@18.2.0): @@ -6027,8 +6248,18 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + readdirp@4.0.2: {} + real-require@0.2.0: {} + reflect.getprototypeof@1.0.6: dependencies: call-bind: 1.0.7 @@ -6109,18 +6340,24 @@ snapshots: has-symbols: 1.0.3 isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} scheduler@0.23.2: dependencies: loose-envify: 1.4.0 + secure-json-parse@2.7.0: {} + semver@6.3.1: {} semver@7.5.4: @@ -6181,6 +6418,14 @@ snapshots: slash@3.0.0: {} + sonic-boom@3.8.1: + dependencies: + atomic-sleep: 1.0.0 + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + source-map-js@1.2.0: {} source-map-js@1.2.1: {} @@ -6198,6 +6443,8 @@ snapshots: cross-spawn: 5.1.0 signal-exit: 3.0.7 + split2@4.2.0: {} + sprintf-js@1.0.3: {} stackback@0.0.2: {} @@ -6266,6 +6513,10 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -6332,6 +6583,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thread-stream@2.7.0: + dependencies: + real-require: 0.2.0 + tinybench@2.9.0: {} tinyexec@0.3.0: {} diff --git a/turbo.json b/turbo.json index fe87e7fe..6d7d87f7 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,6 @@ { "$schema": "https://turborepo.org/schema.json", - "globalEnv": ["LIVEKIT_URL", "LIVEKIT_API_KEY", "LIVEKIT_API_SECRET"], + "globalEnv": ["LIVEKIT_URL", "LIVEKIT_API_KEY", "LIVEKIT_API_SECRET", "NODE_ENV"], "tasks": { "build": { "dependsOn": ["^build"], From e50cfa10a3587f9d8f4d8a6a3577f387f1362670 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Tue, 17 Dec 2024 16:09:09 +0100 Subject: [PATCH 02/18] updat lock file --- pnpm-lock.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8dcfc0b2..e96f395f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -91,6 +91,25 @@ importers: specifier: ^4.7.1 version: 4.17.0 + examples/data-streams: + dependencies: + '@livekit/rtc-node': + specifier: workspace:* + version: link:../../packages/livekit-rtc + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + livekit-server-sdk: + specifier: workspace:* + version: link:../../packages/livekit-server-sdk + devDependencies: + '@types/node': + specifier: ^20.10.4 + version: 20.16.11 + tsx: + specifier: ^4.7.1 + version: 4.17.0 + examples/publish-wav: dependencies: '@livekit/rtc-node': From ee17e312a661760f20e62128f7bec48a4e1ada4f Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 20 Dec 2024 14:21:30 +0100 Subject: [PATCH 03/18] pass participant identity --- packages/livekit-rtc/src/proto/room_pb.ts | 156 +++++++++++++++++++++- packages/livekit-rtc/src/room.ts | 9 +- 2 files changed, 153 insertions(+), 12 deletions(-) diff --git a/packages/livekit-rtc/src/proto/room_pb.ts b/packages/livekit-rtc/src/proto/room_pb.ts index 8d361dc1..36f8657b 100644 --- a/packages/livekit-rtc/src/proto/room_pb.ts +++ b/packages/livekit-rtc/src/proto/room_pb.ts @@ -36,7 +36,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file room.proto. */ export const file_room: GenFile = /*@__PURE__*/ - fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvItEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASOQoNc3RyZWFtX2hlYWRlchgeIAEoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXJIABI3CgxzdHJlYW1fY2h1bmsYHyABKAsyHy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uQ2h1bmtIAEIJCgdtZXNzYWdlIjcKCFJvb21JbmZvEgsKA3NpZBgBIAEoCRIMCgRuYW1lGAIgAigJEhAKCG1ldGFkYXRhGAMgAigJImEKCU93bmVkUm9vbRItCgZoYW5kbGUYASACKAsyHS5saXZla2l0LnByb3RvLkZmaU93bmVkSGFuZGxlEiUKBGluZm8YAiACKAsyFy5saXZla2l0LnByb3RvLlJvb21JbmZvIkUKFFBhcnRpY2lwYW50Q29ubmVjdGVkEi0KBGluZm8YASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQiNwoXUGFydGljaXBhbnREaXNjb25uZWN0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkiKAoTTG9jYWxUcmFja1B1Ymxpc2hlZBIRCgl0cmFja19zaWQYASACKAkiMAoVTG9jYWxUcmFja1VucHVibGlzaGVkEhcKD3B1YmxpY2F0aW9uX3NpZBgBIAIoCSIpChRMb2NhbFRyYWNrU3Vic2NyaWJlZBIRCgl0cmFja19zaWQYAiACKAkiaQoOVHJhY2tQdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSOQoLcHVibGljYXRpb24YAiACKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbiJJChBUcmFja1VucHVibGlzaGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhcKD3B1YmxpY2F0aW9uX3NpZBgCIAIoCSJZCg9UcmFja1N1YnNjcmliZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSKAoFdHJhY2sYAiACKAsyGS5saXZla2l0LnByb3RvLk93bmVkVHJhY2siRAoRVHJhY2tVbnN1YnNjcmliZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIlkKF1RyYWNrU3Vic2NyaXB0aW9uRmFpbGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhEKCXRyYWNrX3NpZBgCIAIoCRINCgVlcnJvchgDIAIoCSI9CgpUcmFja011dGVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhEKCXRyYWNrX3NpZBgCIAIoCSI/CgxUcmFja1VubXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIl8KEEUyZWVTdGF0ZUNoYW5nZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSLQoFc3RhdGUYAiACKA4yHi5saXZla2l0LnByb3RvLkVuY3J5cHRpb25TdGF0ZSI3ChVBY3RpdmVTcGVha2Vyc0NoYW5nZWQSHgoWcGFydGljaXBhbnRfaWRlbnRpdGllcxgBIAMoCSInChNSb29tTWV0YWRhdGFDaGFuZ2VkEhAKCG1ldGFkYXRhGAEgAigJIh0KDlJvb21TaWRDaGFuZ2VkEgsKA3NpZBgBIAIoCSJMChpQYXJ0aWNpcGFudE1ldGFkYXRhQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIQCghtZXRhZGF0YRgCIAIoCSKsAQocUGFydGljaXBhbnRBdHRyaWJ1dGVzQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkSOgoSY2hhbmdlZF9hdHRyaWJ1dGVzGAMgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiRAoWUGFydGljaXBhbnROYW1lQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIMCgRuYW1lGAIgAigJImsKGENvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIxCgdxdWFsaXR5GAIgAigOMiAubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uUXVhbGl0eSJFCgpVc2VyUGFja2V0EigKBGRhdGEYASACKAsyGi5saXZla2l0LnByb3RvLk93bmVkQnVmZmVyEg0KBXRvcGljGAIgASgJInkKC0NoYXRNZXNzYWdlEgoKAmlkGAEgAigJEhEKCXRpbWVzdGFtcBgCIAIoAxIPCgdtZXNzYWdlGAMgAigJEhYKDmVkaXRfdGltZXN0YW1wGAQgASgDEg8KB2RlbGV0ZWQYBSABKAgSEQoJZ2VuZXJhdGVkGAYgASgIImAKE0NoYXRNZXNzYWdlUmVjZWl2ZWQSKwoHbWVzc2FnZRgBIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYAiACKAkiJgoHU2lwRFRNRhIMCgRjb2RlGAEgAigNEg0KBWRpZ2l0GAIgASgJIr8BChJEYXRhUGFja2V0UmVjZWl2ZWQSKwoEa2luZBgBIAIoDjIdLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldEtpbmQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYAiACKAkSKQoEdXNlchgEIAEoCzIZLmxpdmVraXQucHJvdG8uVXNlclBhY2tldEgAEioKCHNpcF9kdG1mGAUgASgLMhYubGl2ZWtpdC5wcm90by5TaXBEVE1GSABCBwoFdmFsdWUifwoVVHJhbnNjcmlwdGlvblJlY2VpdmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgASgJEhEKCXRyYWNrX3NpZBgCIAEoCRI1CghzZWdtZW50cxgDIAMoCzIjLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblNlZ21lbnQiRwoWQ29ubmVjdGlvblN0YXRlQ2hhbmdlZBItCgVzdGF0ZRgBIAIoDjIeLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlIgsKCUNvbm5lY3RlZCI/CgxEaXNjb25uZWN0ZWQSLwoGcmVhc29uGAEgAigOMh8ubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVhc29uIg4KDFJlY29ubmVjdGluZyINCgtSZWNvbm5lY3RlZCIJCgdSb29tRU9TIpIGCgpEYXRhU3RyZWFtGqoBCgpUZXh0SGVhZGVyEj8KDm9wZXJhdGlvbl90eXBlGAEgAigOMicubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLk9wZXJhdGlvblR5cGUSDwoHdmVyc2lvbhgCIAIoBRIaChJyZXBseV90b19zdHJlYW1faWQYAyACKAkSGwoTYXR0YWNoZWRfc3RyZWFtX2lkcxgEIAMoCRIRCglnZW5lcmF0ZWQYBSACKAgaHwoKRmlsZUhlYWRlchIRCglmaWxlX25hbWUYASACKAkagQMKBkhlYWRlchIRCglzdHJlYW1faWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg0KBXRvcGljGAMgAigJEhEKCW1pbWVfdHlwZRgEIAIoCRIUCgx0b3RhbF9sZW5ndGgYBSABKAQSFAoMdG90YWxfY2h1bmtzGAYgASgEEkQKCmV4dGVuc2lvbnMYByADKAsyMC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uSGVhZGVyLkV4dGVuc2lvbnNFbnRyeRI7Cgt0ZXh0X2hlYWRlchgIIAEoCzIkLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5UZXh0SGVhZGVySAASOwoLZmlsZV9oZWFkZXIYCSABKAsyJC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uRmlsZUhlYWRlckgAGjEKD0V4dGVuc2lvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQhAKDmNvbnRlbnRfaGVhZGVyGm8KBUNodW5rEhEKCXN0cmVhbV9pZBgBIAIoCRITCgtjaHVua19pbmRleBgCIAIoBBIPCgdjb250ZW50GAMgAigMEhAKCGNvbXBsZXRlGAQgAigIEg8KB3ZlcnNpb24YBSACKAUSCgoCaXYYBiABKAwiQQoNT3BlcmF0aW9uVHlwZRIKCgZDUkVBVEUQABIKCgZVUERBVEUQARIKCgZERUxFVEUQAhIMCghSRUFDVElPThADKlAKEEljZVRyYW5zcG9ydFR5cGUSEwoPVFJBTlNQT1JUX1JFTEFZEAASFAoQVFJBTlNQT1JUX05PSE9TVBABEhEKDVRSQU5TUE9SVF9BTEwQAipDChhDb250aW51YWxHYXRoZXJpbmdQb2xpY3kSDwoLR0FUSEVSX09OQ0UQABIWChJHQVRIRVJfQ09OVElOVUFMTFkQASpgChFDb25uZWN0aW9uUXVhbGl0eRIQCgxRVUFMSVRZX1BPT1IQABIQCgxRVUFMSVRZX0dPT0QQARIVChFRVUFMSVRZX0VYQ0VMTEVOVBACEhAKDFFVQUxJVFlfTE9TVBADKlMKD0Nvbm5lY3Rpb25TdGF0ZRIVChFDT05OX0RJU0NPTk5FQ1RFRBAAEhIKDkNPTk5fQ09OTkVDVEVEEAESFQoRQ09OTl9SRUNPTk5FQ1RJTkcQAiozCg5EYXRhUGFja2V0S2luZBIOCgpLSU5EX0xPU1NZEAASEQoNS0lORF9SRUxJQUJMRRABQhCqAg1MaXZlS2l0LlByb3Rv", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); + fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvIvEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASSQoWc3RyZWFtX2hlYWRlcl9yZWNlaXZlZBgeIAEoCzInLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkSAASRwoVc3RyZWFtX2NodW5rX3JlY2VpdmVkGB8gASgLMiYubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZEgAQgkKB21lc3NhZ2UiNwoIUm9vbUluZm8SCwoDc2lkGAEgASgJEgwKBG5hbWUYAiACKAkSEAoIbWV0YWRhdGEYAyACKAkiYQoJT3duZWRSb29tEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSJQoEaW5mbxgCIAIoCzIXLmxpdmVraXQucHJvdG8uUm9vbUluZm8iRQoUUGFydGljaXBhbnRDb25uZWN0ZWQSLQoEaW5mbxgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRQYXJ0aWNpcGFudCI3ChdQYXJ0aWNpcGFudERpc2Nvbm5lY3RlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCSIoChNMb2NhbFRyYWNrUHVibGlzaGVkEhEKCXRyYWNrX3NpZBgBIAIoCSIwChVMb2NhbFRyYWNrVW5wdWJsaXNoZWQSFwoPcHVibGljYXRpb25fc2lkGAEgAigJIikKFExvY2FsVHJhY2tTdWJzY3JpYmVkEhEKCXRyYWNrX3NpZBgCIAIoCSJpCg5UcmFja1B1Ymxpc2hlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRI5CgtwdWJsaWNhdGlvbhgCIAIoCzIkLmxpdmVraXQucHJvdG8uT3duZWRUcmFja1B1YmxpY2F0aW9uIkkKEFRyYWNrVW5wdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSFwoPcHVibGljYXRpb25fc2lkGAIgAigJIlkKD1RyYWNrU3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIoCgV0cmFjaxgCIAIoCzIZLmxpdmVraXQucHJvdG8uT3duZWRUcmFjayJEChFUcmFja1Vuc3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiWQoXVHJhY2tTdWJzY3JpcHRpb25GYWlsZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJEg0KBWVycm9yGAMgAigJIj0KClRyYWNrTXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIj8KDFRyYWNrVW5tdXRlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiXwoQRTJlZVN0YXRlQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRItCgVzdGF0ZRgCIAIoDjIeLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblN0YXRlIjcKFUFjdGl2ZVNwZWFrZXJzQ2hhbmdlZBIeChZwYXJ0aWNpcGFudF9pZGVudGl0aWVzGAEgAygJIicKE1Jvb21NZXRhZGF0YUNoYW5nZWQSEAoIbWV0YWRhdGEYASACKAkiHQoOUm9vbVNpZENoYW5nZWQSCwoDc2lkGAEgAigJIkwKGlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhAKCG1ldGFkYXRhGAIgAigJIqwBChxQYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeRI6ChJjaGFuZ2VkX2F0dHJpYnV0ZXMYAyADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeSJEChZQYXJ0aWNpcGFudE5hbWVDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEgwKBG5hbWUYAiACKAkiawoYQ29ubmVjdGlvblF1YWxpdHlDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjEKB3F1YWxpdHkYAiACKA4yIC5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5IkUKClVzZXJQYWNrZXQSKAoEZGF0YRgBIAIoCzIaLmxpdmVraXQucHJvdG8uT3duZWRCdWZmZXISDQoFdG9waWMYAiABKAkieQoLQ2hhdE1lc3NhZ2USCgoCaWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg8KB21lc3NhZ2UYAyACKAkSFgoOZWRpdF90aW1lc3RhbXAYBCABKAMSDwoHZGVsZXRlZBgFIAEoCBIRCglnZW5lcmF0ZWQYBiABKAgiYAoTQ2hhdE1lc3NhZ2VSZWNlaXZlZBIrCgdtZXNzYWdlGAEgAigLMhoubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZRIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCSImCgdTaXBEVE1GEgwKBGNvZGUYASACKA0SDQoFZGlnaXQYAiABKAkivwEKEkRhdGFQYWNrZXRSZWNlaXZlZBIrCgRraW5kGAEgAigOMh0ubGl2ZWtpdC5wcm90by5EYXRhUGFja2V0S2luZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCRIpCgR1c2VyGAQgASgLMhkubGl2ZWtpdC5wcm90by5Vc2VyUGFja2V0SAASKgoIc2lwX2R0bWYYBSABKAsyFi5saXZla2l0LnByb3RvLlNpcERUTUZIAEIHCgV2YWx1ZSJ/ChVUcmFuc2NyaXB0aW9uUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASABKAkSEQoJdHJhY2tfc2lkGAIgASgJEjUKCHNlZ21lbnRzGAMgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCJHChZDb25uZWN0aW9uU3RhdGVDaGFuZ2VkEi0KBXN0YXRlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uU3RhdGUiCwoJQ29ubmVjdGVkIj8KDERpc2Nvbm5lY3RlZBIvCgZyZWFzb24YASACKA4yHy5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZWFzb24iDgoMUmVjb25uZWN0aW5nIg0KC1JlY29ubmVjdGVkIgkKB1Jvb21FT1MikgYKCkRhdGFTdHJlYW0aqgEKClRleHRIZWFkZXISPwoOb3BlcmF0aW9uX3R5cGUYASACKA4yJy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uT3BlcmF0aW9uVHlwZRIPCgd2ZXJzaW9uGAIgAigFEhoKEnJlcGx5X3RvX3N0cmVhbV9pZBgDIAIoCRIbChNhdHRhY2hlZF9zdHJlYW1faWRzGAQgAygJEhEKCWdlbmVyYXRlZBgFIAIoCBofCgpGaWxlSGVhZGVyEhEKCWZpbGVfbmFtZRgBIAIoCRqBAwoGSGVhZGVyEhEKCXN0cmVhbV9pZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMSDQoFdG9waWMYAyACKAkSEQoJbWltZV90eXBlGAQgAigJEhQKDHRvdGFsX2xlbmd0aBgFIAEoBBIUCgx0b3RhbF9jaHVua3MYBiABKAQSRAoKZXh0ZW5zaW9ucxgHIAMoCzIwLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIuRXh0ZW5zaW9uc0VudHJ5EjsKC3RleHRfaGVhZGVyGAggASgLMiQubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLlRleHRIZWFkZXJIABI7CgtmaWxlX2hlYWRlchgJIAEoCzIkLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5GaWxlSGVhZGVySAAaMQoPRXh0ZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCEAoOY29udGVudF9oZWFkZXIabwoFQ2h1bmsSEQoJc3RyZWFtX2lkGAEgAigJEhMKC2NodW5rX2luZGV4GAIgAigEEg8KB2NvbnRlbnQYAyACKAwSEAoIY29tcGxldGUYBCACKAgSDwoHdmVyc2lvbhgFIAIoBRIKCgJpdhgGIAEoDCJBCg1PcGVyYXRpb25UeXBlEgoKBkNSRUFURRAAEgoKBlVQREFURRABEgoKBkRFTEVURRACEgwKCFJFQUNUSU9OEAMiagoYRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjAKBmhlYWRlchgCIAIoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIiZwoXRGF0YVN0cmVhbUNodW5rUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSLgoFY2h1bmsYAiACKAsyHy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uQ2h1bmsipgEKF1NlbmRTdHJlYW1IZWFkZXJSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIwCgZoZWFkZXIYAiACKAsyIC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uSGVhZGVyEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIqMBChZTZW5kU3RyZWFtQ2h1bmtSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIuCgVjaHVuaxgCIAIoCzIfLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5DaHVuaxIeChZkZXN0aW5hdGlvbl9pZGVudGl0aWVzGAMgAygJEhcKD3NlbmRlcl9pZGVudGl0eRgEIAEoCSIsChhTZW5kU3RyZWFtSGVhZGVyUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiKwoXU2VuZFN0cmVhbUNodW5rUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQqUAoQSWNlVHJhbnNwb3J0VHlwZRITCg9UUkFOU1BPUlRfUkVMQVkQABIUChBUUkFOU1BPUlRfTk9IT1NUEAESEQoNVFJBTlNQT1JUX0FMTBACKkMKGENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeRIPCgtHQVRIRVJfT05DRRAAEhYKEkdBVEhFUl9DT05USU5VQUxMWRABKmAKEUNvbm5lY3Rpb25RdWFsaXR5EhAKDFFVQUxJVFlfUE9PUhAAEhAKDFFVQUxJVFlfR09PRBABEhUKEVFVQUxJVFlfRVhDRUxMRU5UEAISEAoMUVVBTElUWV9MT1NUEAMqUwoPQ29ubmVjdGlvblN0YXRlEhUKEUNPTk5fRElTQ09OTkVDVEVEEAASEgoOQ09OTl9DT05ORUNURUQQARIVChFDT05OX1JFQ09OTkVDVElORxACKjMKDkRhdGFQYWNrZXRLaW5kEg4KCktJTkRfTE9TU1kQABIRCg1LSU5EX1JFTElBQkxFEAFCEKoCDUxpdmVLaXQuUHJvdG8", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); /** * Connect to a new LiveKit room @@ -1529,16 +1529,16 @@ export type RoomEvent = Message<"livekit.proto.RoomEvent"> & { case: "chatMessage"; } | { /** - * @generated from field: livekit.proto.DataStream.Header stream_header = 30; + * @generated from field: livekit.proto.DataStreamHeaderReceived stream_header_received = 30; */ - value: DataStream_Header; - case: "streamHeader"; + value: DataStreamHeaderReceived; + case: "streamHeaderReceived"; } | { /** - * @generated from field: livekit.proto.DataStream.Chunk stream_chunk = 31; + * @generated from field: livekit.proto.DataStreamChunkReceived stream_chunk_received = 31; */ - value: DataStream_Chunk; - case: "streamChunk"; + value: DataStreamChunkReceived; + case: "streamChunkReceived"; } | { case: undefined; value?: undefined }; }; @@ -2524,6 +2524,148 @@ export enum DataStream_OperationType { export const DataStream_OperationTypeSchema: GenEnum = /*@__PURE__*/ enumDesc(file_room, 84, 0); +/** + * @generated from message livekit.proto.DataStreamHeaderReceived + */ +export type DataStreamHeaderReceived = Message<"livekit.proto.DataStreamHeaderReceived"> & { + /** + * @generated from field: required string participant_identity = 1; + */ + participantIdentity: string; + + /** + * @generated from field: required livekit.proto.DataStream.Header header = 2; + */ + header?: DataStream_Header; +}; + +/** + * Describes the message livekit.proto.DataStreamHeaderReceived. + * Use `create(DataStreamHeaderReceivedSchema)` to create a new message. + */ +export const DataStreamHeaderReceivedSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 85); + +/** + * @generated from message livekit.proto.DataStreamChunkReceived + */ +export type DataStreamChunkReceived = Message<"livekit.proto.DataStreamChunkReceived"> & { + /** + * @generated from field: required string participant_identity = 1; + */ + participantIdentity: string; + + /** + * @generated from field: required livekit.proto.DataStream.Chunk chunk = 2; + */ + chunk?: DataStream_Chunk; +}; + +/** + * Describes the message livekit.proto.DataStreamChunkReceived. + * Use `create(DataStreamChunkReceivedSchema)` to create a new message. + */ +export const DataStreamChunkReceivedSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 86); + +/** + * @generated from message livekit.proto.SendStreamHeaderRequest + */ +export type SendStreamHeaderRequest = Message<"livekit.proto.SendStreamHeaderRequest"> & { + /** + * @generated from field: required uint64 local_participant_handle = 1; + */ + localParticipantHandle: bigint; + + /** + * @generated from field: required livekit.proto.DataStream.Header header = 2; + */ + header?: DataStream_Header; + + /** + * @generated from field: repeated string destination_identities = 3; + */ + destinationIdentities: string[]; + + /** + * @generated from field: optional string sender_identity = 4; + */ + senderIdentity: string; +}; + +/** + * Describes the message livekit.proto.SendStreamHeaderRequest. + * Use `create(SendStreamHeaderRequestSchema)` to create a new message. + */ +export const SendStreamHeaderRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 87); + +/** + * @generated from message livekit.proto.SendStreamChunkRequest + */ +export type SendStreamChunkRequest = Message<"livekit.proto.SendStreamChunkRequest"> & { + /** + * @generated from field: required uint64 local_participant_handle = 1; + */ + localParticipantHandle: bigint; + + /** + * @generated from field: required livekit.proto.DataStream.Chunk chunk = 2; + */ + chunk?: DataStream_Chunk; + + /** + * @generated from field: repeated string destination_identities = 3; + */ + destinationIdentities: string[]; + + /** + * @generated from field: optional string sender_identity = 4; + */ + senderIdentity: string; +}; + +/** + * Describes the message livekit.proto.SendStreamChunkRequest. + * Use `create(SendStreamChunkRequestSchema)` to create a new message. + */ +export const SendStreamChunkRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 88); + +/** + * @generated from message livekit.proto.SendStreamHeaderResponse + */ +export type SendStreamHeaderResponse = Message<"livekit.proto.SendStreamHeaderResponse"> & { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId: bigint; +}; + +/** + * Describes the message livekit.proto.SendStreamHeaderResponse. + * Use `create(SendStreamHeaderResponseSchema)` to create a new message. + */ +export const SendStreamHeaderResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 89); + +/** + * @generated from message livekit.proto.SendStreamChunkResponse + */ +export type SendStreamChunkResponse = Message<"livekit.proto.SendStreamChunkResponse"> & { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId: bigint; +}; + +/** + * Describes the message livekit.proto.SendStreamChunkResponse. + * Use `create(SendStreamChunkResponseSchema)` to create a new message. + */ +export const SendStreamChunkResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 90); + /** * @generated from enum livekit.proto.IceTransportType */ diff --git a/packages/livekit-rtc/src/room.ts b/packages/livekit-rtc/src/room.ts index 83d2dc6a..5661b3d8 100644 --- a/packages/livekit-rtc/src/room.ts +++ b/packages/livekit-rtc/src/room.ts @@ -388,11 +388,10 @@ export class Room extends (EventEmitter as new () => TypedEmitter this.emit(RoomEvent.Reconnected); } else if (ev.case == 'roomSidChanged') { this.emit(RoomEvent.RoomSidChanged, ev.value.sid); - } else if (ev.case === 'streamHeader') { - // FIXME this needs proper participant info passed - this.handleStreamHeader(new DataStream_Header(ev.value), 'todo'); - } else if (ev.case === 'streamChunk') { - this.handleStreamChunk(new DataStream_Chunk(ev.value)); + } else if (ev.case === 'streamHeaderReceived') { + this.handleStreamHeader(new DataStream_Header(ev.value.header), ev.value.participantIdentity); + } else if (ev.case === 'streamChunkReceived') { + this.handleStreamChunk(new DataStream_Chunk(ev.value.chunk)); } }; From c97a7934ec8c138b27a5e902c32ff7b90310891c Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 20 Dec 2024 15:53:53 +0100 Subject: [PATCH 04/18] streams in both directions --- examples/data-streams/index.ts | 19 +++- packages/livekit-rtc/src/participant.ts | 133 ++++++++++++++++++++++ packages/livekit-rtc/src/proto/ffi_pb.ts | 44 ++++++- packages/livekit-rtc/src/proto/room_pb.ts | 52 ++++++++- 4 files changed, 241 insertions(+), 7 deletions(-) diff --git a/examples/data-streams/index.ts b/examples/data-streams/index.ts index 64b5f827..38a696cc 100644 --- a/examples/data-streams/index.ts +++ b/examples/data-streams/index.ts @@ -1,4 +1,4 @@ -import { Room, RoomEvent, type TextStreamReader } from '@livekit/rtc-node'; +import { RemoteParticipant, Room, RoomEvent, type TextStreamReader } from '@livekit/rtc-node'; import { config } from 'dotenv'; import { AccessToken } from 'livekit-server-sdk'; @@ -10,6 +10,19 @@ if (!LIVEKIT_API_KEY || !LIVEKIT_API_SECRET || !LIVEKIT_URL) { throw new Error('Missing required environment variables. Please check your .env.local file.'); } +const greetParticipant = async (room: Room, recipient: RemoteParticipant) => { + const greeting = 'Hi this is just a text sample'; + const streamWriter = await room.localParticipant?.streamText({ + destinationIdentities: [recipient.identity], + }); + + for (const c of greeting) { + await streamWriter?.write(c); + } + + await streamWriter?.close(); +}; + const main = async () => { const roomName = `dev`; const identity = 'tester'; @@ -27,6 +40,10 @@ const main = async () => { } }); + room.on(RoomEvent.ParticipantConnected, async (participant) => { + await greetParticipant(room, participant); + }); + await room.connect(LIVEKIT_URL, token); await finishedPromise; diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index 88b7e120..8c3d43e7 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: Apache-2.0 import { create } from '@bufbuild/protobuf'; +import { TextStreamWriter } from './data_streams/index.js'; import { FfiClient, FfiHandle } from './ffi_client.js'; import type { OwnedParticipant, ParticipantInfo, ParticipantKind } from './proto/participant_pb.js'; import type { @@ -15,6 +16,10 @@ import type { PublishTranscriptionResponse, SendChatMessageCallback, SendChatMessageResponse, + SendStreamChunkCallback, + SendStreamChunkResponse, + SendStreamHeaderCallback, + SendStreamHeaderResponse, SetLocalAttributesCallback, SetLocalAttributesResponse, SetLocalMetadataCallback, @@ -27,12 +32,15 @@ import type { } from './proto/room_pb.js'; import { ChatMessageSchema, + DataStream_OperationType, EditChatMessageRequestSchema, PublishDataRequestSchema, PublishSipDtmfRequestSchema, PublishTrackRequestSchema, PublishTranscriptionRequestSchema, SendChatMessageRequestSchema, + SendStreamChunkRequestSchema, + SendStreamHeaderRequestSchema, SetLocalAttributesRequestSchema, SetLocalMetadataRequestSchema, SetLocalNameRequestSchema, @@ -58,6 +66,9 @@ import type { RemoteTrackPublication, TrackPublication } from './track_publicati import { LocalTrackPublication } from './track_publication.js'; import type { Transcription } from './transcription.js'; import type { ChatMessage } from './types.js'; +import { numberToBigInt } from './utils.js'; + +const STREAM_CHUNK_SIZE = 15_000; export abstract class Participant { /** @internal */ @@ -207,6 +218,128 @@ export class LocalParticipant extends Participant { }); } + async streamText(options?: { + topic?: string; + extensions?: Record; + destinationIdentities?: Array; + }): Promise { + const senderIdentity = this.identity; + const streamId = crypto.randomUUID(); + const headerReq = create(SendStreamHeaderRequestSchema, { + senderIdentity, + localParticipantHandle: this.ffi_handle.handle, + header: { + streamId, + mimeType: 'text/plain', + topic: options?.topic ?? 'test', + timestamp: numberToBigInt(Date.now()), + extensions: options?.extensions, + contentHeader: { + case: 'textHeader', + value: { + operationType: DataStream_OperationType.CREATE, + version: 0, + replyToStreamId: '', + generated: false, + }, + }, + }, + }); + + const destinationIdentities = options?.destinationIdentities; + + const res = FfiClient.instance.request({ + message: { case: 'sendStreamHeader', value: headerReq }, + }); + + const cb = await FfiClient.instance.waitFor((ev) => { + return ev.message.case == 'sendStreamHeader' && ev.message.value.asyncId == res.asyncId; + }); + + if (cb.error) { + throw new Error(cb.error); + } + + let chunkId = 0; + // eslint-disable-next-line @typescript-eslint/no-this-alias + const localP = this; + + const writableStream = new WritableStream({ + // Implement the sink + write(textChunk) { + const textInBytes = new TextEncoder().encode(textChunk); + + if (textInBytes.byteLength > STREAM_CHUNK_SIZE) { + this.abort?.(); + throw new Error('chunk size too large'); + } + + return new Promise(async (resolve) => { + // FIXME we need an equivalent for this on the rust layer + // await localP.engine.waitForBufferStatusLow(DataPacket_Kind.RELIABLE); + + const chunkRequest = create(SendStreamChunkRequestSchema, { + senderIdentity, + localParticipantHandle: localP.ffi_handle.handle, + destinationIdentities, + chunk: { + content: textInBytes, + streamId, + chunkIndex: numberToBigInt(chunkId), + }, + }); + + const res = FfiClient.instance.request({ + message: { case: 'sendStreamChunk', value: chunkRequest }, + }); + + const cb = await FfiClient.instance.waitFor((ev) => { + return ev.message.case == 'sendStreamChunk' && ev.message.value.asyncId == res.asyncId; + }); + + if (cb.error) { + throw new Error(cb.error); + } + + chunkId += 1; + resolve(); + }); + }, + async close() { + const chunkReq = create(SendStreamChunkRequestSchema, { + senderIdentity, + localParticipantHandle: localP.ffi_handle.handle, + destinationIdentities, + chunk: { + streamId, + chunkIndex: numberToBigInt(chunkId), + complete: true, + content: Uint8Array.from([]), + }, + }); + const res = FfiClient.instance.request({ + message: { case: 'sendStreamChunk', value: chunkReq }, + }); + + const cb = await FfiClient.instance.waitFor((ev) => { + return ev.message.case == 'sendStreamHeader' && ev.message.value.asyncId == res.asyncId; + }); + + if (cb.error) { + throw new Error(cb.error); + } + }, + abort(err) { + console.log('Sink error:', err); + // TODO handle aborts to signal something to receiver side + }, + }); + + const writer = new TextStreamWriter(writableStream); + + return writer; + } + /** * Sends a chat message to participants in the room * diff --git a/packages/livekit-rtc/src/proto/ffi_pb.ts b/packages/livekit-rtc/src/proto/ffi_pb.ts index c445cec4..520b0e74 100644 --- a/packages/livekit-rtc/src/proto/ffi_pb.ts +++ b/packages/livekit-rtc/src/proto/ffi_pb.ts @@ -24,7 +24,7 @@ import type { CreateAudioTrackRequest, CreateAudioTrackResponse, CreateVideoTrac import { file_track } from "./track_pb.js"; import type { EnableRemoteTrackPublicationRequest, EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionRequest, UpdateRemoteTrackPublicationDimensionResponse } from "./track_publication_pb.js"; import { file_track_publication } from "./track_publication_pb.js"; -import type { ConnectCallback, ConnectRequest, ConnectResponse, DisconnectCallback, DisconnectRequest, DisconnectResponse, EditChatMessageRequest, GetSessionStatsCallback, GetSessionStatsRequest, GetSessionStatsResponse, PublishDataCallback, PublishDataRequest, PublishDataResponse, PublishSipDtmfCallback, PublishSipDtmfRequest, PublishSipDtmfResponse, PublishTrackCallback, PublishTrackRequest, PublishTrackResponse, PublishTranscriptionCallback, PublishTranscriptionRequest, PublishTranscriptionResponse, RoomEvent, SendChatMessageCallback, SendChatMessageRequest, SendChatMessageResponse, SetLocalAttributesCallback, SetLocalAttributesRequest, SetLocalAttributesResponse, SetLocalMetadataCallback, SetLocalMetadataRequest, SetLocalMetadataResponse, SetLocalNameCallback, SetLocalNameRequest, SetLocalNameResponse, SetSubscribedRequest, SetSubscribedResponse, UnpublishTrackCallback, UnpublishTrackRequest, UnpublishTrackResponse } from "./room_pb.js"; +import type { ConnectCallback, ConnectRequest, ConnectResponse, DisconnectCallback, DisconnectRequest, DisconnectResponse, EditChatMessageRequest, GetSessionStatsCallback, GetSessionStatsRequest, GetSessionStatsResponse, PublishDataCallback, PublishDataRequest, PublishDataResponse, PublishSipDtmfCallback, PublishSipDtmfRequest, PublishSipDtmfResponse, PublishTrackCallback, PublishTrackRequest, PublishTrackResponse, PublishTranscriptionCallback, PublishTranscriptionRequest, PublishTranscriptionResponse, RoomEvent, SendChatMessageCallback, SendChatMessageRequest, SendChatMessageResponse, SendStreamChunkCallback, SendStreamChunkRequest, SendStreamChunkResponse, SendStreamHeaderCallback, SendStreamHeaderRequest, SendStreamHeaderResponse, SetLocalAttributesCallback, SetLocalAttributesRequest, SetLocalAttributesResponse, SetLocalMetadataCallback, SetLocalMetadataRequest, SetLocalMetadataResponse, SetLocalNameCallback, SetLocalNameRequest, SetLocalNameResponse, SetSubscribedRequest, SetSubscribedResponse, UnpublishTrackCallback, UnpublishTrackRequest, UnpublishTrackResponse } from "./room_pb.js"; import { file_room } from "./room_pb.js"; import type { CaptureVideoFrameRequest, CaptureVideoFrameResponse, NewVideoSourceRequest, NewVideoSourceResponse, NewVideoStreamRequest, NewVideoStreamResponse, VideoConvertRequest, VideoConvertResponse, VideoStreamEvent, VideoStreamFromParticipantRequest, VideoStreamFromParticipantResponse } from "./video_frame_pb.js"; import { file_video_frame } from "./video_frame_pb.js"; @@ -38,7 +38,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file ffi.proto. */ export const file_ffi: GenFile = /*@__PURE__*/ - fileDesc("CglmZmkucHJvdG8SDWxpdmVraXQucHJvdG8i9xYKCkZmaVJlcXVlc3QSMAoHZGlzcG9zZRgCIAEoCzIdLmxpdmVraXQucHJvdG8uRGlzcG9zZVJlcXVlc3RIABIwCgdjb25uZWN0GAMgASgLMh0ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVxdWVzdEgAEjYKCmRpc2Nvbm5lY3QYBCABKAsyIC5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZXF1ZXN0SAASOwoNcHVibGlzaF90cmFjaxgFIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrUmVxdWVzdEgAEj8KD3VucHVibGlzaF90cmFjaxgGIAEoCzIkLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXF1ZXN0SAASOQoMcHVibGlzaF9kYXRhGAcgASgLMiEubGl2ZWtpdC5wcm90by5QdWJsaXNoRGF0YVJlcXVlc3RIABI9Cg5zZXRfc3Vic2NyaWJlZBgIIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0U3Vic2NyaWJlZFJlcXVlc3RIABJEChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJi5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXF1ZXN0SAASPAoOc2V0X2xvY2FsX25hbWUYCiABKAsyIi5saXZla2l0LnByb3RvLlNldExvY2FsTmFtZVJlcXVlc3RIABJIChRzZXRfbG9jYWxfYXR0cmlidXRlcxgLIAEoCzIoLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzUmVxdWVzdEgAEkIKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiUubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXF1ZXN0SAASSwoVcHVibGlzaF90cmFuc2NyaXB0aW9uGA0gASgLMioubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3RIABJAChBwdWJsaXNoX3NpcF9kdG1mGA4gASgLMiQubGl2ZWtpdC5wcm90by5QdWJsaXNoU2lwRHRtZlJlcXVlc3RIABJEChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJi5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXF1ZXN0SAASRAoSY3JlYXRlX2F1ZGlvX3RyYWNrGBAgASgLMiYubGl2ZWtpdC5wcm90by5DcmVhdGVBdWRpb1RyYWNrUmVxdWVzdEgAEkAKEGxvY2FsX3RyYWNrX211dGUYESABKAsyJC5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tNdXRlUmVxdWVzdEgAEkYKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyJy5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVxdWVzdEgAEjMKCWdldF9zdGF0cxgTIAEoCzIeLmxpdmVraXQucHJvdG8uR2V0U3RhdHNSZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3N0cmVhbRgUIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9TdHJlYW1SZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXF1ZXN0SAASRgoTY2FwdHVyZV92aWRlb19mcmFtZRgWIAEoCzInLmxpdmVraXQucHJvdG8uQ2FwdHVyZVZpZGVvRnJhbWVSZXF1ZXN0SAASOwoNdmlkZW9fY29udmVydBgXIAEoCzIiLmxpdmVraXQucHJvdG8uVmlkZW9Db252ZXJ0UmVxdWVzdEgAElkKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjAubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlcXVlc3RIABJAChBuZXdfYXVkaW9fc3RyZWFtGBkgASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1N0cmVhbVJlcXVlc3RIABJAChBuZXdfYXVkaW9fc291cmNlGBogASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1NvdXJjZVJlcXVlc3RIABJGChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMicubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlcXVlc3RIABJEChJjbGVhcl9hdWRpb19idWZmZXIYHCABKAsyJi5saXZla2l0LnByb3RvLkNsZWFyQXVkaW9CdWZmZXJSZXF1ZXN0SAASRgoTbmV3X2F1ZGlvX3Jlc2FtcGxlchgdIAEoCzInLmxpdmVraXQucHJvdG8uTmV3QXVkaW9SZXNhbXBsZXJSZXF1ZXN0SAASRAoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMiYubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVxdWVzdEgAEioKBGUyZWUYHyABKAsyGi5saXZla2l0LnByb3RvLkUyZWVSZXF1ZXN0SAASWQodYXVkaW9fc3RyZWFtX2Zyb21fcGFydGljaXBhbnQYICABKAsyMC5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRnJvbVBhcnRpY2lwYW50UmVxdWVzdEgAEkIKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiUubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXF1ZXN0SAASRAoScHVzaF9zb3hfcmVzYW1wbGVyGCIgASgLMiYubGl2ZWtpdC5wcm90by5QdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkYKE2ZsdXNoX3NveF9yZXNhbXBsZXIYIyABKAsyJy5saXZla2l0LnByb3RvLkZsdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkIKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiUubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0SAASQgoRZWRpdF9jaGF0X21lc3NhZ2UYJSABKAsyJS5saXZla2l0LnByb3RvLkVkaXRDaGF0TWVzc2FnZVJlcXVlc3RIABI3CgtwZXJmb3JtX3JwYxgmIAEoCzIgLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY1JlcXVlc3RIABJGChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMicubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlcXVlc3RIABJKChV1bnJlZ2lzdGVyX3JwY19tZXRob2QYKCABKAsyKS5saXZla2l0LnByb3RvLlVucmVnaXN0ZXJScGNNZXRob2RSZXF1ZXN0SAASWwoecnBjX21ldGhvZF9pbnZvY2F0aW9uX3Jlc3BvbnNlGCkgASgLMjEubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uUmVzcG9uc2VSZXF1ZXN0SAASXQofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgqIAEoCzIyLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlcXVlc3RIABJwCil1cGRhdGVfcmVtb3RlX3RyYWNrX3B1YmxpY2F0aW9uX2RpbWVuc2lvbhgrIAEoCzI7LmxpdmVraXQucHJvdG8uVXBkYXRlUmVtb3RlVHJhY2tQdWJsaWNhdGlvbkRpbWVuc2lvblJlcXVlc3RIAEIJCgdtZXNzYWdlIt0WCgtGZmlSZXNwb25zZRIxCgdkaXNwb3NlGAIgASgLMh4ubGl2ZWtpdC5wcm90by5EaXNwb3NlUmVzcG9uc2VIABIxCgdjb25uZWN0GAMgASgLMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVzcG9uc2VIABI3CgpkaXNjb25uZWN0GAQgASgLMiEubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVzcG9uc2VIABI8Cg1wdWJsaXNoX3RyYWNrGAUgASgLMiMubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhY2tSZXNwb25zZUgAEkAKD3VucHVibGlzaF90cmFjaxgGIAEoCzIlLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXNwb25zZUgAEjoKDHB1Ymxpc2hfZGF0YRgHIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaERhdGFSZXNwb25zZUgAEj4KDnNldF9zdWJzY3JpYmVkGAggASgLMiQubGl2ZWtpdC5wcm90by5TZXRTdWJzY3JpYmVkUmVzcG9uc2VIABJFChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJy5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXNwb25zZUgAEj0KDnNldF9sb2NhbF9uYW1lGAogASgLMiMubGl2ZWtpdC5wcm90by5TZXRMb2NhbE5hbWVSZXNwb25zZUgAEkkKFHNldF9sb2NhbF9hdHRyaWJ1dGVzGAsgASgLMikubGl2ZWtpdC5wcm90by5TZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZUgAEkMKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiYubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXNwb25zZUgAEkwKFXB1Ymxpc2hfdHJhbnNjcmlwdGlvbhgNIAEoCzIrLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYW5zY3JpcHRpb25SZXNwb25zZUgAEkEKEHB1Ymxpc2hfc2lwX2R0bWYYDiABKAsyJS5saXZla2l0LnByb3RvLlB1Ymxpc2hTaXBEdG1mUmVzcG9uc2VIABJFChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJy5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXNwb25zZUgAEkUKEmNyZWF0ZV9hdWRpb190cmFjaxgQIAEoCzInLmxpdmVraXQucHJvdG8uQ3JlYXRlQXVkaW9UcmFja1Jlc3BvbnNlSAASQQoQbG9jYWxfdHJhY2tfbXV0ZRgRIAEoCzIlLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja011dGVSZXNwb25zZUgAEkcKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyKC5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVzcG9uc2VIABI0CglnZXRfc3RhdHMYEyABKAsyHy5saXZla2l0LnByb3RvLkdldFN0YXRzUmVzcG9uc2VIABJBChBuZXdfdmlkZW9fc3RyZWFtGBQgASgLMiUubGl2ZWtpdC5wcm90by5OZXdWaWRlb1N0cmVhbVJlc3BvbnNlSAASQQoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXNwb25zZUgAEkcKE2NhcHR1cmVfdmlkZW9fZnJhbWUYFiABKAsyKC5saXZla2l0LnByb3RvLkNhcHR1cmVWaWRlb0ZyYW1lUmVzcG9uc2VIABI8Cg12aWRlb19jb252ZXJ0GBcgASgLMiMubGl2ZWtpdC5wcm90by5WaWRlb0NvbnZlcnRSZXNwb25zZUgAEloKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjEubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlc3BvbnNlSAASQQoQbmV3X2F1ZGlvX3N0cmVhbRgZIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3QXVkaW9TdHJlYW1SZXNwb25zZUgAEkEKEG5ld19hdWRpb19zb3VyY2UYGiABKAsyJS5saXZla2l0LnByb3RvLk5ld0F1ZGlvU291cmNlUmVzcG9uc2VIABJHChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlc3BvbnNlSAASRQoSY2xlYXJfYXVkaW9fYnVmZmVyGBwgASgLMicubGl2ZWtpdC5wcm90by5DbGVhckF1ZGlvQnVmZmVyUmVzcG9uc2VIABJHChNuZXdfYXVkaW9fcmVzYW1wbGVyGB0gASgLMigubGl2ZWtpdC5wcm90by5OZXdBdWRpb1Jlc2FtcGxlclJlc3BvbnNlSAASRQoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMicubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVzcG9uc2VIABJaCh1hdWRpb19zdHJlYW1fZnJvbV9wYXJ0aWNpcGFudBgfIAEoCzIxLmxpdmVraXQucHJvdG8uQXVkaW9TdHJlYW1Gcm9tUGFydGljaXBhbnRSZXNwb25zZUgAEisKBGUyZWUYICABKAsyGy5saXZla2l0LnByb3RvLkUyZWVSZXNwb25zZUgAEkMKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiYubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkUKEnB1c2hfc294X3Jlc2FtcGxlchgiIAEoCzInLmxpdmVraXQucHJvdG8uUHVzaFNveFJlc2FtcGxlclJlc3BvbnNlSAASRwoTZmx1c2hfc294X3Jlc2FtcGxlchgjIAEoCzIoLmxpdmVraXQucHJvdG8uRmx1c2hTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkMKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiYubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXNwb25zZUgAEjgKC3BlcmZvcm1fcnBjGCUgASgLMiEubGl2ZWtpdC5wcm90by5QZXJmb3JtUnBjUmVzcG9uc2VIABJHChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCYgASgLMigubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlc3BvbnNlSAASSwoVdW5yZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMioubGl2ZWtpdC5wcm90by5VbnJlZ2lzdGVyUnBjTWV0aG9kUmVzcG9uc2VIABJcCh5ycGNfbWV0aG9kX2ludm9jYXRpb25fcmVzcG9uc2UYKCABKAsyMi5saXZla2l0LnByb3RvLlJwY01ldGhvZEludm9jYXRpb25SZXNwb25zZVJlc3BvbnNlSAASXgofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgpIAEoCzIzLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlc3BvbnNlSAAScQopdXBkYXRlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbl9kaW1lbnNpb24YKiABKAsyPC5saXZla2l0LnByb3RvLlVwZGF0ZVJlbW90ZVRyYWNrUHVibGljYXRpb25EaW1lbnNpb25SZXNwb25zZUgAQgkKB21lc3NhZ2UiigsKCEZmaUV2ZW50Ei4KCnJvb21fZXZlbnQYASABKAsyGC5saXZla2l0LnByb3RvLlJvb21FdmVudEgAEjAKC3RyYWNrX2V2ZW50GAIgASgLMhkubGl2ZWtpdC5wcm90by5UcmFja0V2ZW50SAASPQoSdmlkZW9fc3RyZWFtX2V2ZW50GAMgASgLMh8ubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUV2ZW50SAASPQoSYXVkaW9fc3RyZWFtX2V2ZW50GAQgASgLMh8ubGl2ZWtpdC5wcm90by5BdWRpb1N0cmVhbUV2ZW50SAASMQoHY29ubmVjdBgFIAEoCzIeLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrSAASNwoKZGlzY29ubmVjdBgHIAEoCzIhLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdENhbGxiYWNrSAASMQoHZGlzcG9zZRgIIAEoCzIeLmxpdmVraXQucHJvdG8uRGlzcG9zZUNhbGxiYWNrSAASPAoNcHVibGlzaF90cmFjaxgJIAEoCzIjLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrQ2FsbGJhY2tIABJACg91bnB1Ymxpc2hfdHJhY2sYCiABKAsyJS5saXZla2l0LnByb3RvLlVucHVibGlzaFRyYWNrQ2FsbGJhY2tIABI6CgxwdWJsaXNoX2RhdGEYCyABKAsyIi5saXZla2l0LnByb3RvLlB1Ymxpc2hEYXRhQ2FsbGJhY2tIABJMChVwdWJsaXNoX3RyYW5zY3JpcHRpb24YDCABKAsyKy5saXZla2l0LnByb3RvLlB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2tIABJHChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGA0gASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZUNhbGxiYWNrSAASRQoSc2V0X2xvY2FsX21ldGFkYXRhGA4gASgLMicubGl2ZWtpdC5wcm90by5TZXRMb2NhbE1ldGFkYXRhQ2FsbGJhY2tIABI9Cg5zZXRfbG9jYWxfbmFtZRgPIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0TG9jYWxOYW1lQ2FsbGJhY2tIABJJChRzZXRfbG9jYWxfYXR0cmlidXRlcxgQIAEoCzIpLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzQ2FsbGJhY2tIABI0CglnZXRfc3RhdHMYESABKAsyHy5saXZla2l0LnByb3RvLkdldFN0YXRzQ2FsbGJhY2tIABInCgRsb2dzGBIgASgLMhcubGl2ZWtpdC5wcm90by5Mb2dCYXRjaEgAEkMKEWdldF9zZXNzaW9uX3N0YXRzGBMgASgLMiYubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFja0gAEiUKBXBhbmljGBQgASgLMhQubGl2ZWtpdC5wcm90by5QYW5pY0gAEkEKEHB1Ymxpc2hfc2lwX2R0bWYYFSABKAsyJS5saXZla2l0LnByb3RvLlB1Ymxpc2hTaXBEdG1mQ2FsbGJhY2tIABI+CgxjaGF0X21lc3NhZ2UYFiABKAsyJi5saXZla2l0LnByb3RvLlNlbmRDaGF0TWVzc2FnZUNhbGxiYWNrSAASOAoLcGVyZm9ybV9ycGMYFyABKAsyIS5saXZla2l0LnByb3RvLlBlcmZvcm1ScGNDYWxsYmFja0gAEkgKFXJwY19tZXRob2RfaW52b2NhdGlvbhgYIAEoCzInLmxpdmVraXQucHJvdG8uUnBjTWV0aG9kSW52b2NhdGlvbkV2ZW50SABCCQoHbWVzc2FnZSIfCg5EaXNwb3NlUmVxdWVzdBINCgVhc3luYxgBIAIoCCIjCg9EaXNwb3NlUmVzcG9uc2USEAoIYXN5bmNfaWQYASABKAQiIwoPRGlzcG9zZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEIoUBCglMb2dSZWNvcmQSJgoFbGV2ZWwYASACKA4yFy5saXZla2l0LnByb3RvLkxvZ0xldmVsEg4KBnRhcmdldBgCIAIoCRITCgttb2R1bGVfcGF0aBgDIAEoCRIMCgRmaWxlGAQgASgJEgwKBGxpbmUYBSABKA0SDwoHbWVzc2FnZRgGIAIoCSI1CghMb2dCYXRjaBIpCgdyZWNvcmRzGAEgAygLMhgubGl2ZWtpdC5wcm90by5Mb2dSZWNvcmQiGAoFUGFuaWMSDwoHbWVzc2FnZRgBIAIoCSpTCghMb2dMZXZlbBINCglMT0dfRVJST1IQABIMCghMT0dfV0FSThABEgwKCExPR19JTkZPEAISDQoJTE9HX0RFQlVHEAMSDQoJTE9HX1RSQUNFEARCEKoCDUxpdmVLaXQuUHJvdG8", [file_e2ee, file_track, file_track_publication, file_room, file_video_frame, file_audio_frame, file_rpc]); + fileDesc("CglmZmkucHJvdG8SDWxpdmVraXQucHJvdG8igRgKCkZmaVJlcXVlc3QSMAoHZGlzcG9zZRgCIAEoCzIdLmxpdmVraXQucHJvdG8uRGlzcG9zZVJlcXVlc3RIABIwCgdjb25uZWN0GAMgASgLMh0ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVxdWVzdEgAEjYKCmRpc2Nvbm5lY3QYBCABKAsyIC5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZXF1ZXN0SAASOwoNcHVibGlzaF90cmFjaxgFIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrUmVxdWVzdEgAEj8KD3VucHVibGlzaF90cmFjaxgGIAEoCzIkLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXF1ZXN0SAASOQoMcHVibGlzaF9kYXRhGAcgASgLMiEubGl2ZWtpdC5wcm90by5QdWJsaXNoRGF0YVJlcXVlc3RIABI9Cg5zZXRfc3Vic2NyaWJlZBgIIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0U3Vic2NyaWJlZFJlcXVlc3RIABJEChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJi5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXF1ZXN0SAASPAoOc2V0X2xvY2FsX25hbWUYCiABKAsyIi5saXZla2l0LnByb3RvLlNldExvY2FsTmFtZVJlcXVlc3RIABJIChRzZXRfbG9jYWxfYXR0cmlidXRlcxgLIAEoCzIoLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzUmVxdWVzdEgAEkIKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiUubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXF1ZXN0SAASSwoVcHVibGlzaF90cmFuc2NyaXB0aW9uGA0gASgLMioubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3RIABJAChBwdWJsaXNoX3NpcF9kdG1mGA4gASgLMiQubGl2ZWtpdC5wcm90by5QdWJsaXNoU2lwRHRtZlJlcXVlc3RIABJEChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJi5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXF1ZXN0SAASRAoSY3JlYXRlX2F1ZGlvX3RyYWNrGBAgASgLMiYubGl2ZWtpdC5wcm90by5DcmVhdGVBdWRpb1RyYWNrUmVxdWVzdEgAEkAKEGxvY2FsX3RyYWNrX211dGUYESABKAsyJC5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tNdXRlUmVxdWVzdEgAEkYKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyJy5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVxdWVzdEgAEjMKCWdldF9zdGF0cxgTIAEoCzIeLmxpdmVraXQucHJvdG8uR2V0U3RhdHNSZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3N0cmVhbRgUIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9TdHJlYW1SZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXF1ZXN0SAASRgoTY2FwdHVyZV92aWRlb19mcmFtZRgWIAEoCzInLmxpdmVraXQucHJvdG8uQ2FwdHVyZVZpZGVvRnJhbWVSZXF1ZXN0SAASOwoNdmlkZW9fY29udmVydBgXIAEoCzIiLmxpdmVraXQucHJvdG8uVmlkZW9Db252ZXJ0UmVxdWVzdEgAElkKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjAubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlcXVlc3RIABJAChBuZXdfYXVkaW9fc3RyZWFtGBkgASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1N0cmVhbVJlcXVlc3RIABJAChBuZXdfYXVkaW9fc291cmNlGBogASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1NvdXJjZVJlcXVlc3RIABJGChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMicubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlcXVlc3RIABJEChJjbGVhcl9hdWRpb19idWZmZXIYHCABKAsyJi5saXZla2l0LnByb3RvLkNsZWFyQXVkaW9CdWZmZXJSZXF1ZXN0SAASRgoTbmV3X2F1ZGlvX3Jlc2FtcGxlchgdIAEoCzInLmxpdmVraXQucHJvdG8uTmV3QXVkaW9SZXNhbXBsZXJSZXF1ZXN0SAASRAoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMiYubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVxdWVzdEgAEioKBGUyZWUYHyABKAsyGi5saXZla2l0LnByb3RvLkUyZWVSZXF1ZXN0SAASWQodYXVkaW9fc3RyZWFtX2Zyb21fcGFydGljaXBhbnQYICABKAsyMC5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRnJvbVBhcnRpY2lwYW50UmVxdWVzdEgAEkIKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiUubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXF1ZXN0SAASRAoScHVzaF9zb3hfcmVzYW1wbGVyGCIgASgLMiYubGl2ZWtpdC5wcm90by5QdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkYKE2ZsdXNoX3NveF9yZXNhbXBsZXIYIyABKAsyJy5saXZla2l0LnByb3RvLkZsdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkIKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiUubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0SAASQgoRZWRpdF9jaGF0X21lc3NhZ2UYJSABKAsyJS5saXZla2l0LnByb3RvLkVkaXRDaGF0TWVzc2FnZVJlcXVlc3RIABI3CgtwZXJmb3JtX3JwYxgmIAEoCzIgLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY1JlcXVlc3RIABJGChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMicubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlcXVlc3RIABJKChV1bnJlZ2lzdGVyX3JwY19tZXRob2QYKCABKAsyKS5saXZla2l0LnByb3RvLlVucmVnaXN0ZXJScGNNZXRob2RSZXF1ZXN0SAASWwoecnBjX21ldGhvZF9pbnZvY2F0aW9uX3Jlc3BvbnNlGCkgASgLMjEubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uUmVzcG9uc2VSZXF1ZXN0SAASXQofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgqIAEoCzIyLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlcXVlc3RIABJwCil1cGRhdGVfcmVtb3RlX3RyYWNrX3B1YmxpY2F0aW9uX2RpbWVuc2lvbhgrIAEoCzI7LmxpdmVraXQucHJvdG8uVXBkYXRlUmVtb3RlVHJhY2tQdWJsaWNhdGlvbkRpbWVuc2lvblJlcXVlc3RIABJEChJzZW5kX3N0cmVhbV9oZWFkZXIYLCABKAsyJi5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1IZWFkZXJSZXF1ZXN0SAASQgoRc2VuZF9zdHJlYW1fY2h1bmsYLSABKAsyJS5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1DaHVua1JlcXVlc3RIAEIJCgdtZXNzYWdlIukXCgtGZmlSZXNwb25zZRIxCgdkaXNwb3NlGAIgASgLMh4ubGl2ZWtpdC5wcm90by5EaXNwb3NlUmVzcG9uc2VIABIxCgdjb25uZWN0GAMgASgLMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVzcG9uc2VIABI3CgpkaXNjb25uZWN0GAQgASgLMiEubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVzcG9uc2VIABI8Cg1wdWJsaXNoX3RyYWNrGAUgASgLMiMubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhY2tSZXNwb25zZUgAEkAKD3VucHVibGlzaF90cmFjaxgGIAEoCzIlLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXNwb25zZUgAEjoKDHB1Ymxpc2hfZGF0YRgHIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaERhdGFSZXNwb25zZUgAEj4KDnNldF9zdWJzY3JpYmVkGAggASgLMiQubGl2ZWtpdC5wcm90by5TZXRTdWJzY3JpYmVkUmVzcG9uc2VIABJFChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJy5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXNwb25zZUgAEj0KDnNldF9sb2NhbF9uYW1lGAogASgLMiMubGl2ZWtpdC5wcm90by5TZXRMb2NhbE5hbWVSZXNwb25zZUgAEkkKFHNldF9sb2NhbF9hdHRyaWJ1dGVzGAsgASgLMikubGl2ZWtpdC5wcm90by5TZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZUgAEkMKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiYubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXNwb25zZUgAEkwKFXB1Ymxpc2hfdHJhbnNjcmlwdGlvbhgNIAEoCzIrLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYW5zY3JpcHRpb25SZXNwb25zZUgAEkEKEHB1Ymxpc2hfc2lwX2R0bWYYDiABKAsyJS5saXZla2l0LnByb3RvLlB1Ymxpc2hTaXBEdG1mUmVzcG9uc2VIABJFChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJy5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXNwb25zZUgAEkUKEmNyZWF0ZV9hdWRpb190cmFjaxgQIAEoCzInLmxpdmVraXQucHJvdG8uQ3JlYXRlQXVkaW9UcmFja1Jlc3BvbnNlSAASQQoQbG9jYWxfdHJhY2tfbXV0ZRgRIAEoCzIlLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja011dGVSZXNwb25zZUgAEkcKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyKC5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVzcG9uc2VIABI0CglnZXRfc3RhdHMYEyABKAsyHy5saXZla2l0LnByb3RvLkdldFN0YXRzUmVzcG9uc2VIABJBChBuZXdfdmlkZW9fc3RyZWFtGBQgASgLMiUubGl2ZWtpdC5wcm90by5OZXdWaWRlb1N0cmVhbVJlc3BvbnNlSAASQQoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXNwb25zZUgAEkcKE2NhcHR1cmVfdmlkZW9fZnJhbWUYFiABKAsyKC5saXZla2l0LnByb3RvLkNhcHR1cmVWaWRlb0ZyYW1lUmVzcG9uc2VIABI8Cg12aWRlb19jb252ZXJ0GBcgASgLMiMubGl2ZWtpdC5wcm90by5WaWRlb0NvbnZlcnRSZXNwb25zZUgAEloKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjEubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlc3BvbnNlSAASQQoQbmV3X2F1ZGlvX3N0cmVhbRgZIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3QXVkaW9TdHJlYW1SZXNwb25zZUgAEkEKEG5ld19hdWRpb19zb3VyY2UYGiABKAsyJS5saXZla2l0LnByb3RvLk5ld0F1ZGlvU291cmNlUmVzcG9uc2VIABJHChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlc3BvbnNlSAASRQoSY2xlYXJfYXVkaW9fYnVmZmVyGBwgASgLMicubGl2ZWtpdC5wcm90by5DbGVhckF1ZGlvQnVmZmVyUmVzcG9uc2VIABJHChNuZXdfYXVkaW9fcmVzYW1wbGVyGB0gASgLMigubGl2ZWtpdC5wcm90by5OZXdBdWRpb1Jlc2FtcGxlclJlc3BvbnNlSAASRQoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMicubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVzcG9uc2VIABJaCh1hdWRpb19zdHJlYW1fZnJvbV9wYXJ0aWNpcGFudBgfIAEoCzIxLmxpdmVraXQucHJvdG8uQXVkaW9TdHJlYW1Gcm9tUGFydGljaXBhbnRSZXNwb25zZUgAEisKBGUyZWUYICABKAsyGy5saXZla2l0LnByb3RvLkUyZWVSZXNwb25zZUgAEkMKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiYubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkUKEnB1c2hfc294X3Jlc2FtcGxlchgiIAEoCzInLmxpdmVraXQucHJvdG8uUHVzaFNveFJlc2FtcGxlclJlc3BvbnNlSAASRwoTZmx1c2hfc294X3Jlc2FtcGxlchgjIAEoCzIoLmxpdmVraXQucHJvdG8uRmx1c2hTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkMKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiYubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXNwb25zZUgAEjgKC3BlcmZvcm1fcnBjGCUgASgLMiEubGl2ZWtpdC5wcm90by5QZXJmb3JtUnBjUmVzcG9uc2VIABJHChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCYgASgLMigubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlc3BvbnNlSAASSwoVdW5yZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMioubGl2ZWtpdC5wcm90by5VbnJlZ2lzdGVyUnBjTWV0aG9kUmVzcG9uc2VIABJcCh5ycGNfbWV0aG9kX2ludm9jYXRpb25fcmVzcG9uc2UYKCABKAsyMi5saXZla2l0LnByb3RvLlJwY01ldGhvZEludm9jYXRpb25SZXNwb25zZVJlc3BvbnNlSAASXgofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgpIAEoCzIzLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlc3BvbnNlSAAScQopdXBkYXRlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbl9kaW1lbnNpb24YKiABKAsyPC5saXZla2l0LnByb3RvLlVwZGF0ZVJlbW90ZVRyYWNrUHVibGljYXRpb25EaW1lbnNpb25SZXNwb25zZUgAEkUKEnNlbmRfc3RyZWFtX2hlYWRlchgrIAEoCzInLmxpdmVraXQucHJvdG8uU2VuZFN0cmVhbUhlYWRlclJlc3BvbnNlSAASQwoRc2VuZF9zdHJlYW1fY2h1bmsYLCABKAsyJi5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1DaHVua1Jlc3BvbnNlSABCCQoHbWVzc2FnZSKWDAoIRmZpRXZlbnQSLgoKcm9vbV9ldmVudBgBIAEoCzIYLmxpdmVraXQucHJvdG8uUm9vbUV2ZW50SAASMAoLdHJhY2tfZXZlbnQYAiABKAsyGS5saXZla2l0LnByb3RvLlRyYWNrRXZlbnRIABI9ChJ2aWRlb19zdHJlYW1fZXZlbnQYAyABKAsyHy5saXZla2l0LnByb3RvLlZpZGVvU3RyZWFtRXZlbnRIABI9ChJhdWRpb19zdHJlYW1fZXZlbnQYBCABKAsyHy5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRXZlbnRIABIxCgdjb25uZWN0GAUgASgLMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2tIABI3CgpkaXNjb25uZWN0GAcgASgLMiEubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0Q2FsbGJhY2tIABIxCgdkaXNwb3NlGAggASgLMh4ubGl2ZWtpdC5wcm90by5EaXNwb3NlQ2FsbGJhY2tIABI8Cg1wdWJsaXNoX3RyYWNrGAkgASgLMiMubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhY2tDYWxsYmFja0gAEkAKD3VucHVibGlzaF90cmFjaxgKIAEoCzIlLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tDYWxsYmFja0gAEjoKDHB1Ymxpc2hfZGF0YRgLIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaERhdGFDYWxsYmFja0gAEkwKFXB1Ymxpc2hfdHJhbnNjcmlwdGlvbhgMIAEoCzIrLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYW5zY3JpcHRpb25DYWxsYmFja0gAEkcKE2NhcHR1cmVfYXVkaW9fZnJhbWUYDSABKAsyKC5saXZla2l0LnByb3RvLkNhcHR1cmVBdWRpb0ZyYW1lQ2FsbGJhY2tIABJFChJzZXRfbG9jYWxfbWV0YWRhdGEYDiABKAsyJy5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFDYWxsYmFja0gAEj0KDnNldF9sb2NhbF9uYW1lGA8gASgLMiMubGl2ZWtpdC5wcm90by5TZXRMb2NhbE5hbWVDYWxsYmFja0gAEkkKFHNldF9sb2NhbF9hdHRyaWJ1dGVzGBAgASgLMikubGl2ZWtpdC5wcm90by5TZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFja0gAEjQKCWdldF9zdGF0cxgRIAEoCzIfLmxpdmVraXQucHJvdG8uR2V0U3RhdHNDYWxsYmFja0gAEicKBGxvZ3MYEiABKAsyFy5saXZla2l0LnByb3RvLkxvZ0JhdGNoSAASQwoRZ2V0X3Nlc3Npb25fc3RhdHMYEyABKAsyJi5saXZla2l0LnByb3RvLkdldFNlc3Npb25TdGF0c0NhbGxiYWNrSAASJQoFcGFuaWMYFCABKAsyFC5saXZla2l0LnByb3RvLlBhbmljSAASQQoQcHVibGlzaF9zaXBfZHRtZhgVIAEoCzIlLmxpdmVraXQucHJvdG8uUHVibGlzaFNpcER0bWZDYWxsYmFja0gAEj4KDGNoYXRfbWVzc2FnZRgWIAEoCzImLmxpdmVraXQucHJvdG8uU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2tIABI4CgtwZXJmb3JtX3JwYxgXIAEoCzIhLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY0NhbGxiYWNrSAASSAoVcnBjX21ldGhvZF9pbnZvY2F0aW9uGBggASgLMicubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uRXZlbnRIABJFChJzZW5kX3N0cmVhbV9oZWFkZXIYGSABKAsyJy5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1IZWFkZXJDYWxsYmFja0gAEkMKEXNlbmRfc3RyZWFtX2NodW5rGBogASgLMiYubGl2ZWtpdC5wcm90by5TZW5kU3RyZWFtQ2h1bmtDYWxsYmFja0gAQgkKB21lc3NhZ2UiHwoORGlzcG9zZVJlcXVlc3QSDQoFYXN5bmMYASACKAgiIwoPRGlzcG9zZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgASgEIiMKD0Rpc3Bvc2VDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKFAQoJTG9nUmVjb3JkEiYKBWxldmVsGAEgAigOMhcubGl2ZWtpdC5wcm90by5Mb2dMZXZlbBIOCgZ0YXJnZXQYAiACKAkSEwoLbW9kdWxlX3BhdGgYAyABKAkSDAoEZmlsZRgEIAEoCRIMCgRsaW5lGAUgASgNEg8KB21lc3NhZ2UYBiACKAkiNQoITG9nQmF0Y2gSKQoHcmVjb3JkcxgBIAMoCzIYLmxpdmVraXQucHJvdG8uTG9nUmVjb3JkIhgKBVBhbmljEg8KB21lc3NhZ2UYASACKAkqUwoITG9nTGV2ZWwSDQoJTE9HX0VSUk9SEAASDAoITE9HX1dBUk4QARIMCghMT0dfSU5GTxACEg0KCUxPR19ERUJVRxADEg0KCUxPR19UUkFDRRAEQhCqAg1MaXZlS2l0LlByb3Rv", [file_e2ee, file_track, file_track_publication, file_room, file_video_frame, file_audio_frame, file_rpc]); /** * This is the input of livekit_ffi_request function @@ -314,6 +314,20 @@ export type FfiRequest = Message<"livekit.proto.FfiRequest"> & { */ value: UpdateRemoteTrackPublicationDimensionRequest; case: "updateRemoteTrackPublicationDimension"; + } | { + /** + * Data Streams + * + * @generated from field: livekit.proto.SendStreamHeaderRequest send_stream_header = 44; + */ + value: SendStreamHeaderRequest; + case: "sendStreamHeader"; + } | { + /** + * @generated from field: livekit.proto.SendStreamChunkRequest send_stream_chunk = 45; + */ + value: SendStreamChunkRequest; + case: "sendStreamChunk"; } | { case: undefined; value?: undefined }; }; @@ -591,6 +605,20 @@ export type FfiResponse = Message<"livekit.proto.FfiResponse"> & { */ value: UpdateRemoteTrackPublicationDimensionResponse; case: "updateRemoteTrackPublicationDimension"; + } | { + /** + * Data Streams + * + * @generated from field: livekit.proto.SendStreamHeaderResponse send_stream_header = 43; + */ + value: SendStreamHeaderResponse; + case: "sendStreamHeader"; + } | { + /** + * @generated from field: livekit.proto.SendStreamChunkResponse send_stream_chunk = 44; + */ + value: SendStreamChunkResponse; + case: "sendStreamChunk"; } | { case: undefined; value?: undefined }; }; @@ -750,6 +778,18 @@ export type FfiEvent = Message<"livekit.proto.FfiEvent"> & { */ value: RpcMethodInvocationEvent; case: "rpcMethodInvocation"; + } | { + /** + * @generated from field: livekit.proto.SendStreamHeaderCallback send_stream_header = 25; + */ + value: SendStreamHeaderCallback; + case: "sendStreamHeader"; + } | { + /** + * @generated from field: livekit.proto.SendStreamChunkCallback send_stream_chunk = 26; + */ + value: SendStreamChunkCallback; + case: "sendStreamChunk"; } | { case: undefined; value?: undefined }; }; diff --git a/packages/livekit-rtc/src/proto/room_pb.ts b/packages/livekit-rtc/src/proto/room_pb.ts index 36f8657b..189a9411 100644 --- a/packages/livekit-rtc/src/proto/room_pb.ts +++ b/packages/livekit-rtc/src/proto/room_pb.ts @@ -36,7 +36,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file room.proto. */ export const file_room: GenFile = /*@__PURE__*/ - fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvIvEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASSQoWc3RyZWFtX2hlYWRlcl9yZWNlaXZlZBgeIAEoCzInLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkSAASRwoVc3RyZWFtX2NodW5rX3JlY2VpdmVkGB8gASgLMiYubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZEgAQgkKB21lc3NhZ2UiNwoIUm9vbUluZm8SCwoDc2lkGAEgASgJEgwKBG5hbWUYAiACKAkSEAoIbWV0YWRhdGEYAyACKAkiYQoJT3duZWRSb29tEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSJQoEaW5mbxgCIAIoCzIXLmxpdmVraXQucHJvdG8uUm9vbUluZm8iRQoUUGFydGljaXBhbnRDb25uZWN0ZWQSLQoEaW5mbxgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRQYXJ0aWNpcGFudCI3ChdQYXJ0aWNpcGFudERpc2Nvbm5lY3RlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCSIoChNMb2NhbFRyYWNrUHVibGlzaGVkEhEKCXRyYWNrX3NpZBgBIAIoCSIwChVMb2NhbFRyYWNrVW5wdWJsaXNoZWQSFwoPcHVibGljYXRpb25fc2lkGAEgAigJIikKFExvY2FsVHJhY2tTdWJzY3JpYmVkEhEKCXRyYWNrX3NpZBgCIAIoCSJpCg5UcmFja1B1Ymxpc2hlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRI5CgtwdWJsaWNhdGlvbhgCIAIoCzIkLmxpdmVraXQucHJvdG8uT3duZWRUcmFja1B1YmxpY2F0aW9uIkkKEFRyYWNrVW5wdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSFwoPcHVibGljYXRpb25fc2lkGAIgAigJIlkKD1RyYWNrU3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIoCgV0cmFjaxgCIAIoCzIZLmxpdmVraXQucHJvdG8uT3duZWRUcmFjayJEChFUcmFja1Vuc3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiWQoXVHJhY2tTdWJzY3JpcHRpb25GYWlsZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJEg0KBWVycm9yGAMgAigJIj0KClRyYWNrTXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIj8KDFRyYWNrVW5tdXRlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiXwoQRTJlZVN0YXRlQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRItCgVzdGF0ZRgCIAIoDjIeLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblN0YXRlIjcKFUFjdGl2ZVNwZWFrZXJzQ2hhbmdlZBIeChZwYXJ0aWNpcGFudF9pZGVudGl0aWVzGAEgAygJIicKE1Jvb21NZXRhZGF0YUNoYW5nZWQSEAoIbWV0YWRhdGEYASACKAkiHQoOUm9vbVNpZENoYW5nZWQSCwoDc2lkGAEgAigJIkwKGlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhAKCG1ldGFkYXRhGAIgAigJIqwBChxQYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeRI6ChJjaGFuZ2VkX2F0dHJpYnV0ZXMYAyADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeSJEChZQYXJ0aWNpcGFudE5hbWVDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEgwKBG5hbWUYAiACKAkiawoYQ29ubmVjdGlvblF1YWxpdHlDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjEKB3F1YWxpdHkYAiACKA4yIC5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5IkUKClVzZXJQYWNrZXQSKAoEZGF0YRgBIAIoCzIaLmxpdmVraXQucHJvdG8uT3duZWRCdWZmZXISDQoFdG9waWMYAiABKAkieQoLQ2hhdE1lc3NhZ2USCgoCaWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg8KB21lc3NhZ2UYAyACKAkSFgoOZWRpdF90aW1lc3RhbXAYBCABKAMSDwoHZGVsZXRlZBgFIAEoCBIRCglnZW5lcmF0ZWQYBiABKAgiYAoTQ2hhdE1lc3NhZ2VSZWNlaXZlZBIrCgdtZXNzYWdlGAEgAigLMhoubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZRIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCSImCgdTaXBEVE1GEgwKBGNvZGUYASACKA0SDQoFZGlnaXQYAiABKAkivwEKEkRhdGFQYWNrZXRSZWNlaXZlZBIrCgRraW5kGAEgAigOMh0ubGl2ZWtpdC5wcm90by5EYXRhUGFja2V0S2luZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCRIpCgR1c2VyGAQgASgLMhkubGl2ZWtpdC5wcm90by5Vc2VyUGFja2V0SAASKgoIc2lwX2R0bWYYBSABKAsyFi5saXZla2l0LnByb3RvLlNpcERUTUZIAEIHCgV2YWx1ZSJ/ChVUcmFuc2NyaXB0aW9uUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASABKAkSEQoJdHJhY2tfc2lkGAIgASgJEjUKCHNlZ21lbnRzGAMgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCJHChZDb25uZWN0aW9uU3RhdGVDaGFuZ2VkEi0KBXN0YXRlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uU3RhdGUiCwoJQ29ubmVjdGVkIj8KDERpc2Nvbm5lY3RlZBIvCgZyZWFzb24YASACKA4yHy5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZWFzb24iDgoMUmVjb25uZWN0aW5nIg0KC1JlY29ubmVjdGVkIgkKB1Jvb21FT1MikgYKCkRhdGFTdHJlYW0aqgEKClRleHRIZWFkZXISPwoOb3BlcmF0aW9uX3R5cGUYASACKA4yJy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uT3BlcmF0aW9uVHlwZRIPCgd2ZXJzaW9uGAIgAigFEhoKEnJlcGx5X3RvX3N0cmVhbV9pZBgDIAIoCRIbChNhdHRhY2hlZF9zdHJlYW1faWRzGAQgAygJEhEKCWdlbmVyYXRlZBgFIAIoCBofCgpGaWxlSGVhZGVyEhEKCWZpbGVfbmFtZRgBIAIoCRqBAwoGSGVhZGVyEhEKCXN0cmVhbV9pZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMSDQoFdG9waWMYAyACKAkSEQoJbWltZV90eXBlGAQgAigJEhQKDHRvdGFsX2xlbmd0aBgFIAEoBBIUCgx0b3RhbF9jaHVua3MYBiABKAQSRAoKZXh0ZW5zaW9ucxgHIAMoCzIwLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIuRXh0ZW5zaW9uc0VudHJ5EjsKC3RleHRfaGVhZGVyGAggASgLMiQubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLlRleHRIZWFkZXJIABI7CgtmaWxlX2hlYWRlchgJIAEoCzIkLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5GaWxlSGVhZGVySAAaMQoPRXh0ZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCEAoOY29udGVudF9oZWFkZXIabwoFQ2h1bmsSEQoJc3RyZWFtX2lkGAEgAigJEhMKC2NodW5rX2luZGV4GAIgAigEEg8KB2NvbnRlbnQYAyACKAwSEAoIY29tcGxldGUYBCACKAgSDwoHdmVyc2lvbhgFIAIoBRIKCgJpdhgGIAEoDCJBCg1PcGVyYXRpb25UeXBlEgoKBkNSRUFURRAAEgoKBlVQREFURRABEgoKBkRFTEVURRACEgwKCFJFQUNUSU9OEAMiagoYRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjAKBmhlYWRlchgCIAIoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIiZwoXRGF0YVN0cmVhbUNodW5rUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSLgoFY2h1bmsYAiACKAsyHy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uQ2h1bmsipgEKF1NlbmRTdHJlYW1IZWFkZXJSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIwCgZoZWFkZXIYAiACKAsyIC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uSGVhZGVyEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIqMBChZTZW5kU3RyZWFtQ2h1bmtSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIuCgVjaHVuaxgCIAIoCzIfLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5DaHVuaxIeChZkZXN0aW5hdGlvbl9pZGVudGl0aWVzGAMgAygJEhcKD3NlbmRlcl9pZGVudGl0eRgEIAEoCSIsChhTZW5kU3RyZWFtSGVhZGVyUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiKwoXU2VuZFN0cmVhbUNodW5rUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQqUAoQSWNlVHJhbnNwb3J0VHlwZRITCg9UUkFOU1BPUlRfUkVMQVkQABIUChBUUkFOU1BPUlRfTk9IT1NUEAESEQoNVFJBTlNQT1JUX0FMTBACKkMKGENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeRIPCgtHQVRIRVJfT05DRRAAEhYKEkdBVEhFUl9DT05USU5VQUxMWRABKmAKEUNvbm5lY3Rpb25RdWFsaXR5EhAKDFFVQUxJVFlfUE9PUhAAEhAKDFFVQUxJVFlfR09PRBABEhUKEVFVQUxJVFlfRVhDRUxMRU5UEAISEAoMUVVBTElUWV9MT1NUEAMqUwoPQ29ubmVjdGlvblN0YXRlEhUKEUNPTk5fRElTQ09OTkVDVEVEEAASEgoOQ09OTl9DT05ORUNURUQQARIVChFDT05OX1JFQ09OTkVDVElORxACKjMKDkRhdGFQYWNrZXRLaW5kEg4KCktJTkRfTE9TU1kQABIRCg1LSU5EX1JFTElBQkxFEAFCEKoCDUxpdmVLaXQuUHJvdG8", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); + fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvIvEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASSQoWc3RyZWFtX2hlYWRlcl9yZWNlaXZlZBgeIAEoCzInLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkSAASRwoVc3RyZWFtX2NodW5rX3JlY2VpdmVkGB8gASgLMiYubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZEgAQgkKB21lc3NhZ2UiNwoIUm9vbUluZm8SCwoDc2lkGAEgASgJEgwKBG5hbWUYAiACKAkSEAoIbWV0YWRhdGEYAyACKAkiYQoJT3duZWRSb29tEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSJQoEaW5mbxgCIAIoCzIXLmxpdmVraXQucHJvdG8uUm9vbUluZm8iRQoUUGFydGljaXBhbnRDb25uZWN0ZWQSLQoEaW5mbxgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRQYXJ0aWNpcGFudCI3ChdQYXJ0aWNpcGFudERpc2Nvbm5lY3RlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCSIoChNMb2NhbFRyYWNrUHVibGlzaGVkEhEKCXRyYWNrX3NpZBgBIAIoCSIwChVMb2NhbFRyYWNrVW5wdWJsaXNoZWQSFwoPcHVibGljYXRpb25fc2lkGAEgAigJIikKFExvY2FsVHJhY2tTdWJzY3JpYmVkEhEKCXRyYWNrX3NpZBgCIAIoCSJpCg5UcmFja1B1Ymxpc2hlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRI5CgtwdWJsaWNhdGlvbhgCIAIoCzIkLmxpdmVraXQucHJvdG8uT3duZWRUcmFja1B1YmxpY2F0aW9uIkkKEFRyYWNrVW5wdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSFwoPcHVibGljYXRpb25fc2lkGAIgAigJIlkKD1RyYWNrU3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIoCgV0cmFjaxgCIAIoCzIZLmxpdmVraXQucHJvdG8uT3duZWRUcmFjayJEChFUcmFja1Vuc3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiWQoXVHJhY2tTdWJzY3JpcHRpb25GYWlsZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJEg0KBWVycm9yGAMgAigJIj0KClRyYWNrTXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIj8KDFRyYWNrVW5tdXRlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiXwoQRTJlZVN0YXRlQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRItCgVzdGF0ZRgCIAIoDjIeLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblN0YXRlIjcKFUFjdGl2ZVNwZWFrZXJzQ2hhbmdlZBIeChZwYXJ0aWNpcGFudF9pZGVudGl0aWVzGAEgAygJIicKE1Jvb21NZXRhZGF0YUNoYW5nZWQSEAoIbWV0YWRhdGEYASACKAkiHQoOUm9vbVNpZENoYW5nZWQSCwoDc2lkGAEgAigJIkwKGlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhAKCG1ldGFkYXRhGAIgAigJIqwBChxQYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeRI6ChJjaGFuZ2VkX2F0dHJpYnV0ZXMYAyADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeSJEChZQYXJ0aWNpcGFudE5hbWVDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEgwKBG5hbWUYAiACKAkiawoYQ29ubmVjdGlvblF1YWxpdHlDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjEKB3F1YWxpdHkYAiACKA4yIC5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5IkUKClVzZXJQYWNrZXQSKAoEZGF0YRgBIAIoCzIaLmxpdmVraXQucHJvdG8uT3duZWRCdWZmZXISDQoFdG9waWMYAiABKAkieQoLQ2hhdE1lc3NhZ2USCgoCaWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg8KB21lc3NhZ2UYAyACKAkSFgoOZWRpdF90aW1lc3RhbXAYBCABKAMSDwoHZGVsZXRlZBgFIAEoCBIRCglnZW5lcmF0ZWQYBiABKAgiYAoTQ2hhdE1lc3NhZ2VSZWNlaXZlZBIrCgdtZXNzYWdlGAEgAigLMhoubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZRIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCSImCgdTaXBEVE1GEgwKBGNvZGUYASACKA0SDQoFZGlnaXQYAiABKAkivwEKEkRhdGFQYWNrZXRSZWNlaXZlZBIrCgRraW5kGAEgAigOMh0ubGl2ZWtpdC5wcm90by5EYXRhUGFja2V0S2luZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCRIpCgR1c2VyGAQgASgLMhkubGl2ZWtpdC5wcm90by5Vc2VyUGFja2V0SAASKgoIc2lwX2R0bWYYBSABKAsyFi5saXZla2l0LnByb3RvLlNpcERUTUZIAEIHCgV2YWx1ZSJ/ChVUcmFuc2NyaXB0aW9uUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASABKAkSEQoJdHJhY2tfc2lkGAIgASgJEjUKCHNlZ21lbnRzGAMgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCJHChZDb25uZWN0aW9uU3RhdGVDaGFuZ2VkEi0KBXN0YXRlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uU3RhdGUiCwoJQ29ubmVjdGVkIj8KDERpc2Nvbm5lY3RlZBIvCgZyZWFzb24YASACKA4yHy5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZWFzb24iDgoMUmVjb25uZWN0aW5nIg0KC1JlY29ubmVjdGVkIgkKB1Jvb21FT1MikgYKCkRhdGFTdHJlYW0aqgEKClRleHRIZWFkZXISPwoOb3BlcmF0aW9uX3R5cGUYASACKA4yJy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uT3BlcmF0aW9uVHlwZRIPCgd2ZXJzaW9uGAIgAigFEhoKEnJlcGx5X3RvX3N0cmVhbV9pZBgDIAIoCRIbChNhdHRhY2hlZF9zdHJlYW1faWRzGAQgAygJEhEKCWdlbmVyYXRlZBgFIAIoCBofCgpGaWxlSGVhZGVyEhEKCWZpbGVfbmFtZRgBIAIoCRqBAwoGSGVhZGVyEhEKCXN0cmVhbV9pZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMSDQoFdG9waWMYAyABKAkSEQoJbWltZV90eXBlGAQgAigJEhQKDHRvdGFsX2xlbmd0aBgFIAEoBBIUCgx0b3RhbF9jaHVua3MYBiABKAQSRAoKZXh0ZW5zaW9ucxgHIAMoCzIwLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIuRXh0ZW5zaW9uc0VudHJ5EjsKC3RleHRfaGVhZGVyGAggASgLMiQubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLlRleHRIZWFkZXJIABI7CgtmaWxlX2hlYWRlchgJIAEoCzIkLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5GaWxlSGVhZGVySAAaMQoPRXh0ZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCEAoOY29udGVudF9oZWFkZXIabwoFQ2h1bmsSEQoJc3RyZWFtX2lkGAEgAigJEhMKC2NodW5rX2luZGV4GAIgAigEEg8KB2NvbnRlbnQYAyACKAwSEAoIY29tcGxldGUYBCABKAgSDwoHdmVyc2lvbhgFIAEoBRIKCgJpdhgGIAEoDCJBCg1PcGVyYXRpb25UeXBlEgoKBkNSRUFURRAAEgoKBlVQREFURRABEgoKBkRFTEVURRACEgwKCFJFQUNUSU9OEAMiagoYRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjAKBmhlYWRlchgCIAIoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIiZwoXRGF0YVN0cmVhbUNodW5rUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSLgoFY2h1bmsYAiACKAsyHy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uQ2h1bmsipgEKF1NlbmRTdHJlYW1IZWFkZXJSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIwCgZoZWFkZXIYAiACKAsyIC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uSGVhZGVyEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIqMBChZTZW5kU3RyZWFtQ2h1bmtSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIuCgVjaHVuaxgCIAIoCzIfLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5DaHVuaxIeChZkZXN0aW5hdGlvbl9pZGVudGl0aWVzGAMgAygJEhcKD3NlbmRlcl9pZGVudGl0eRgEIAEoCSIsChhTZW5kU3RyZWFtSGVhZGVyUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiKwoXU2VuZFN0cmVhbUNodW5rUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2VuZFN0cmVhbUhlYWRlckNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIjoKF1NlbmRTdHJlYW1DaHVua0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJKlAKEEljZVRyYW5zcG9ydFR5cGUSEwoPVFJBTlNQT1JUX1JFTEFZEAASFAoQVFJBTlNQT1JUX05PSE9TVBABEhEKDVRSQU5TUE9SVF9BTEwQAipDChhDb250aW51YWxHYXRoZXJpbmdQb2xpY3kSDwoLR0FUSEVSX09OQ0UQABIWChJHQVRIRVJfQ09OVElOVUFMTFkQASpgChFDb25uZWN0aW9uUXVhbGl0eRIQCgxRVUFMSVRZX1BPT1IQABIQCgxRVUFMSVRZX0dPT0QQARIVChFRVUFMSVRZX0VYQ0VMTEVOVBACEhAKDFFVQUxJVFlfTE9TVBADKlMKD0Nvbm5lY3Rpb25TdGF0ZRIVChFDT05OX0RJU0NPTk5FQ1RFRBAAEhIKDkNPTk5fQ09OTkVDVEVEEAESFQoRQ09OTl9SRUNPTk5FQ1RJTkcQAiozCg5EYXRhUGFja2V0S2luZBIOCgpLSU5EX0xPU1NZEAASEQoNS0lORF9SRUxJQUJMRRABQhCqAg1MaXZlS2l0LlByb3Rv", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); /** * Connect to a new LiveKit room @@ -2382,7 +2382,7 @@ export type DataStream_Header = Message<"livekit.proto.DataStream.Header"> & { timestamp: bigint; /** - * @generated from field: required string topic = 3; + * @generated from field: optional string topic = 3; */ topic: string; @@ -2465,14 +2465,14 @@ export type DataStream_Chunk = Message<"livekit.proto.DataStream.Chunk"> & { /** * true only if this is the last chunk of this stream - can also be sent with empty content * - * @generated from field: required bool complete = 4; + * @generated from field: optional bool complete = 4; */ complete: boolean; /** * a version indicating that this chunk_index has been retroactively modified and the original one needs to be replaced * - * @generated from field: required int32 version = 5; + * @generated from field: optional int32 version = 5; */ version: number; @@ -2666,6 +2666,50 @@ export type SendStreamChunkResponse = Message<"livekit.proto.SendStreamChunkResp export const SendStreamChunkResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_room, 90); +/** + * @generated from message livekit.proto.SendStreamHeaderCallback + */ +export type SendStreamHeaderCallback = Message<"livekit.proto.SendStreamHeaderCallback"> & { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId: bigint; + + /** + * @generated from field: optional string error = 2; + */ + error: string; +}; + +/** + * Describes the message livekit.proto.SendStreamHeaderCallback. + * Use `create(SendStreamHeaderCallbackSchema)` to create a new message. + */ +export const SendStreamHeaderCallbackSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 91); + +/** + * @generated from message livekit.proto.SendStreamChunkCallback + */ +export type SendStreamChunkCallback = Message<"livekit.proto.SendStreamChunkCallback"> & { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId: bigint; + + /** + * @generated from field: optional string error = 2; + */ + error: string; +}; + +/** + * Describes the message livekit.proto.SendStreamChunkCallback. + * Use `create(SendStreamChunkCallbackSchema)` to create a new message. + */ +export const SendStreamChunkCallbackSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_room, 92); + /** * @generated from enum livekit.proto.IceTransportType */ From 84c0c21ef9972001a10491f20768dbbc33a0f8ff Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 20 Dec 2024 16:15:25 +0100 Subject: [PATCH 05/18] add optional override chunk id --- examples/data-streams/index.ts | 2 +- packages/livekit-rtc/src/data_streams/stream_writer.ts | 2 +- packages/livekit-rtc/src/participant.ts | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/data-streams/index.ts b/examples/data-streams/index.ts index 38a696cc..f1241073 100644 --- a/examples/data-streams/index.ts +++ b/examples/data-streams/index.ts @@ -17,7 +17,7 @@ const greetParticipant = async (room: Room, recipient: RemoteParticipant) => { }); for (const c of greeting) { - await streamWriter?.write(c); + await streamWriter?.write([c]); } await streamWriter?.close(); diff --git a/packages/livekit-rtc/src/data_streams/stream_writer.ts b/packages/livekit-rtc/src/data_streams/stream_writer.ts index 58e385f5..cf270c7a 100644 --- a/packages/livekit-rtc/src/data_streams/stream_writer.ts +++ b/packages/livekit-rtc/src/data_streams/stream_writer.ts @@ -24,6 +24,6 @@ class BaseStreamWriter { } } -export class TextStreamWriter extends BaseStreamWriter {} +export class TextStreamWriter extends BaseStreamWriter<[string, number?]> {} export class BinaryStreamWriter extends BaseStreamWriter {} diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index 8c3d43e7..c028e029 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -264,9 +264,9 @@ export class LocalParticipant extends Participant { // eslint-disable-next-line @typescript-eslint/no-this-alias const localP = this; - const writableStream = new WritableStream({ + const writableStream = new WritableStream<[string, number?]>({ // Implement the sink - write(textChunk) { + write([textChunk, overrideChunkId]) { const textInBytes = new TextEncoder().encode(textChunk); if (textInBytes.byteLength > STREAM_CHUNK_SIZE) { @@ -285,7 +285,7 @@ export class LocalParticipant extends Participant { chunk: { content: textInBytes, streamId, - chunkIndex: numberToBigInt(chunkId), + chunkIndex: numberToBigInt(overrideChunkId ?? chunkId), }, }); From 2f6a75aa2d70be7acfd5d85fd2459841cd875fc9 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 20 Dec 2024 16:45:47 +0100 Subject: [PATCH 06/18] remove test fallback --- packages/livekit-rtc/rust-sdks | 2 +- packages/livekit-rtc/src/participant.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/livekit-rtc/rust-sdks b/packages/livekit-rtc/rust-sdks index 7e01c918..fd8819a6 160000 --- a/packages/livekit-rtc/rust-sdks +++ b/packages/livekit-rtc/rust-sdks @@ -1 +1 @@ -Subproject commit 7e01c918546daff87b9f52e39923f7a2c47d2a78 +Subproject commit fd8819a622f6461c33033365efd2715e200dcd1a diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index c028e029..c96de72d 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -231,7 +231,7 @@ export class LocalParticipant extends Participant { header: { streamId, mimeType: 'text/plain', - topic: options?.topic ?? 'test', + topic: options?.topic ?? '', timestamp: numberToBigInt(Date.now()), extensions: options?.extensions, contentHeader: { From 71c48d396da9013b0b59f99624266fb5908f0711 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Sun, 22 Dec 2024 10:29:38 +0100 Subject: [PATCH 07/18] Add file send API --- examples/data-streams/index.ts | 20 ++- .../livekit-rtc/src/data_streams/types.ts | 15 +- packages/livekit-rtc/src/log.ts | 2 - packages/livekit-rtc/src/participant.ts | 157 ++++++++++++++---- 4 files changed, 156 insertions(+), 38 deletions(-) diff --git a/examples/data-streams/index.ts b/examples/data-streams/index.ts index f1241073..e8b14166 100644 --- a/examples/data-streams/index.ts +++ b/examples/data-streams/index.ts @@ -20,7 +20,17 @@ const greetParticipant = async (room: Room, recipient: RemoteParticipant) => { await streamWriter?.write([c]); } - await streamWriter?.close(); + streamWriter?.close(); +}; + +const sendFile = async (room: Room, recipient: RemoteParticipant) => { + console.log('sending file'); + await room.localParticipant?.sendFile('./assets/maybemexico.png', { + destinationIdentities: [recipient.identity], + fileName: 'mex', + mimeType: 'image/png', + }); + console.log('done sending file'); }; const main = async () => { @@ -35,12 +45,14 @@ const main = async () => { }); room.on(RoomEvent.TextStreamReceived, async (reader: TextStreamReader) => { - for await (const { collected } of reader) { - console.log(collected); - } + console.log(await reader.readAll()); + // for await (const { collected } of reader) { + // console.log(collected); + // } }); room.on(RoomEvent.ParticipantConnected, async (participant) => { + await sendFile(room, participant); await greetParticipant(room, participant); }); diff --git a/packages/livekit-rtc/src/data_streams/types.ts b/packages/livekit-rtc/src/data_streams/types.ts index 9e6b8cd5..a092dc0c 100644 --- a/packages/livekit-rtc/src/data_streams/types.ts +++ b/packages/livekit-rtc/src/data_streams/types.ts @@ -29,10 +29,19 @@ export type TextStreamChunk = { collected: string; }; -export interface SendTextOptions { +export interface DataStreamOptions { topic?: string; - // replyToMessageId?: string; destinationIdentities?: Array; - attachments?: Array; + extensions?: Record; + mimeType?: string; +} + +export interface TextStreamOptions extends DataStreamOptions { + // replyToMessageId?: string; + attachments?: []; +} + +export interface FileStreamOptions extends DataStreamOptions { + fileName?: string; onProgress?: (progress: number) => void; } diff --git a/packages/livekit-rtc/src/log.ts b/packages/livekit-rtc/src/log.ts index 2ea0041b..c3f86c5b 100644 --- a/packages/livekit-rtc/src/log.ts +++ b/packages/livekit-rtc/src/log.ts @@ -3,8 +3,6 @@ import { pino } from 'pino'; const isProduction = process.env.NODE_ENV === 'production'; -console.log({ isProduction }); - const defaultOptions: LoggerOptions = { name: 'lk-rtc' }; const devOptions: LoggerOptions = { diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index c96de72d..623ca29a 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -2,8 +2,11 @@ // // SPDX-License-Identifier: Apache-2.0 import { create } from '@bufbuild/protobuf'; -import { TextStreamWriter } from './data_streams/index.js'; +import type { PathLike } from 'node:fs'; +import { open, stat } from 'node:fs/promises'; +import { type FileStreamOptions, TextStreamWriter } from './data_streams/index.js'; import { FfiClient, FfiHandle } from './ffi_client.js'; +import { log } from './log.js'; import type { OwnedParticipant, ParticipantInfo, ParticipantKind } from './proto/participant_pb.js'; import type { PublishDataCallback, @@ -17,8 +20,10 @@ import type { SendChatMessageCallback, SendChatMessageResponse, SendStreamChunkCallback, + SendStreamChunkRequest, SendStreamChunkResponse, SendStreamHeaderCallback, + SendStreamHeaderRequest, SendStreamHeaderResponse, SetLocalAttributesCallback, SetLocalAttributesResponse, @@ -218,6 +223,10 @@ export class LocalParticipant extends Participant { }); } + /** + * Returns a `StreamWriter` instance that allows to write individual chunks of text to a stream. + * Well suited for TTS and/or streaming LLM output. + */ async streamText(options?: { topic?: string; extensions?: Record; @@ -225,8 +234,11 @@ export class LocalParticipant extends Participant { }): Promise { const senderIdentity = this.identity; const streamId = crypto.randomUUID(); + const destinationIdentities = options?.destinationIdentities; + const headerReq = create(SendStreamHeaderRequestSchema, { senderIdentity, + destinationIdentities, localParticipantHandle: this.ffi_handle.handle, header: { streamId, @@ -246,23 +258,11 @@ export class LocalParticipant extends Participant { }, }); - const destinationIdentities = options?.destinationIdentities; - - const res = FfiClient.instance.request({ - message: { case: 'sendStreamHeader', value: headerReq }, - }); - - const cb = await FfiClient.instance.waitFor((ev) => { - return ev.message.case == 'sendStreamHeader' && ev.message.value.asyncId == res.asyncId; - }); - - if (cb.error) { - throw new Error(cb.error); - } + await this.sendStreamHeader(headerReq); let chunkId = 0; - // eslint-disable-next-line @typescript-eslint/no-this-alias - const localP = this; + const localHandle = this.ffi_handle.handle; + const sendChunk = this.sendStreamChunk; const writableStream = new WritableStream<[string, number?]>({ // Implement the sink @@ -280,7 +280,7 @@ export class LocalParticipant extends Participant { const chunkRequest = create(SendStreamChunkRequestSchema, { senderIdentity, - localParticipantHandle: localP.ffi_handle.handle, + localParticipantHandle: localHandle, destinationIdentities, chunk: { content: textInBytes, @@ -308,7 +308,7 @@ export class LocalParticipant extends Participant { async close() { const chunkReq = create(SendStreamChunkRequestSchema, { senderIdentity, - localParticipantHandle: localP.ffi_handle.handle, + localParticipantHandle: localHandle, destinationIdentities, chunk: { streamId, @@ -317,17 +317,7 @@ export class LocalParticipant extends Participant { content: Uint8Array.from([]), }, }); - const res = FfiClient.instance.request({ - message: { case: 'sendStreamChunk', value: chunkReq }, - }); - - const cb = await FfiClient.instance.waitFor((ev) => { - return ev.message.case == 'sendStreamHeader' && ev.message.value.asyncId == res.asyncId; - }); - - if (cb.error) { - throw new Error(cb.error); - } + await sendChunk(chunkReq); }, abort(err) { console.log('Sink error:', err); @@ -340,6 +330,115 @@ export class LocalParticipant extends Participant { return writer; } + async sendFile(path: PathLike, options?: FileStreamOptions) { + const fileStats = await stat(path); + const file = await open(path); + try { + const stream: ReadableStream = file.readableWebStream({ type: 'bytes' }); + + const senderIdentity = this.identity; + const streamId = crypto.randomUUID(); + const destinationIdentities = options?.destinationIdentities; + const totalLength = numberToBigInt(fileStats.size); + const totalChunks = numberToBigInt(Math.ceil(fileStats.size / STREAM_CHUNK_SIZE)); + + const headerReq = create(SendStreamHeaderRequestSchema, { + senderIdentity, + destinationIdentities, + localParticipantHandle: this.ffi_handle.handle, + header: { + streamId, + mimeType: options?.mimeType ?? 'application/octet-stream', + topic: options?.topic ?? '', + timestamp: numberToBigInt(Date.now()), + extensions: options?.extensions, + totalLength, + totalChunks, + contentHeader: { + case: 'fileHeader', + value: { + fileName: options?.fileName ?? 'unknown', + }, + }, + }, + }); + + await this.sendStreamHeader(headerReq); + + let chunkId = 0; + for await (const chunk of stream) { + const biteSizeChunks = Math.ceil(chunk.byteLength / STREAM_CHUNK_SIZE); + + for (let i = 0; i < biteSizeChunks; i++) { + const offset = i * STREAM_CHUNK_SIZE; + const chunkyChunk = chunk.slice( + offset, + Math.min(offset + STREAM_CHUNK_SIZE, chunk.byteLength), + ); + const chunkReq = create(SendStreamChunkRequestSchema, { + senderIdentity, + localParticipantHandle: this.ffi_handle.handle, + destinationIdentities, + chunk: { + streamId, + chunkIndex: numberToBigInt(chunkId), + complete: false, + content: chunkyChunk, + }, + }); + await this.sendStreamChunk(chunkReq); + chunkId += 1; + } + } + + // close stream + const chunkReq = create(SendStreamChunkRequestSchema, { + senderIdentity, + localParticipantHandle: this.ffi_handle.handle, + destinationIdentities, + chunk: { + streamId, + chunkIndex: numberToBigInt(chunkId), + complete: true, + content: Uint8Array.from([]), + }, + }); + await this.sendStreamChunk(chunkReq); + } finally { + await file.close(); + } + } + + private async sendStreamHeader(req: SendStreamHeaderRequest) { + const type = 'sendStreamHeader'; + const res = FfiClient.instance.request({ + message: { case: type, value: req }, + }); + + const cb = await FfiClient.instance.waitFor((ev) => { + return ev.message.case == type && ev.message.value.asyncId == res.asyncId; + }); + + if (cb.error) { + throw new Error(cb.error); + } + } + + private async sendStreamChunk(req: SendStreamChunkRequest) { + const type = 'sendStreamChunk'; + const res = FfiClient.instance.request({ + message: { case: type, value: req }, + }); + + const cb = await FfiClient.instance.waitFor((ev) => { + return ev.message.case == type && ev.message.value.asyncId == res.asyncId; + }); + + if (cb.error) { + throw new Error(cb.error); + } + } + /** * Sends a chat message to participants in the room * From ddcec0edf2a9b337ad91df00f1e4a1fac5af9666 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Sun, 22 Dec 2024 10:31:30 +0100 Subject: [PATCH 08/18] add docs --- packages/livekit-rtc/src/data_streams/stream_reader.ts | 3 +++ packages/livekit-rtc/src/participant.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/packages/livekit-rtc/src/data_streams/stream_reader.ts b/packages/livekit-rtc/src/data_streams/stream_reader.ts index 52b8670d..cb1b1c42 100644 --- a/packages/livekit-rtc/src/data_streams/stream_reader.ts +++ b/packages/livekit-rtc/src/data_streams/stream_reader.ts @@ -28,6 +28,9 @@ abstract class BaseStreamReader { abstract readAll(): Promise>; } +/** + * A class to read chunks from a ReadableStream and provide them in a structured format. + */ export class BinaryStreamReader extends BaseStreamReader { private chunksReceived: Set; diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index 623ca29a..cea9dc75 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -330,6 +330,7 @@ export class LocalParticipant extends Participant { return writer; } + /** Sends a file provided as PathLike to specified recipients */ async sendFile(path: PathLike, options?: FileStreamOptions) { const fileStats = await stat(path); const file = await open(path); From a1d607a7f12c300b4fee314b3cf9e45783189973 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Sun, 22 Dec 2024 10:33:14 +0100 Subject: [PATCH 09/18] update README --- examples/data-streams/README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/examples/data-streams/README.md b/examples/data-streams/README.md index 3545580c..ad067bd4 100644 --- a/examples/data-streams/README.md +++ b/examples/data-streams/README.md @@ -1,10 +1,6 @@ -# RPC Example +# Data Streams Example -This example demonstrates how to use RPC between two participants with LiveKit. - -The example includes two scenarios: -1. A simple greeting exchange. -2. A contrived function-calling service with JSON data payloads and multiple method types. +This example demonstrates how to use DataStreams to stream and receive both text and files from other LiveKit participants. ## Prerequisites @@ -17,6 +13,7 @@ Before running this example, make sure you have: ## Setup 1. Install dependencies: + ``` pnpm install ``` From 6a35c9f453190e2a6571c215e93a093d354835d4 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Sun, 22 Dec 2024 10:37:58 +0100 Subject: [PATCH 10/18] remove todos --- packages/livekit-rtc/src/data_streams/stream_reader.ts | 2 -- packages/livekit-rtc/src/participant.ts | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/livekit-rtc/src/data_streams/stream_reader.ts b/packages/livekit-rtc/src/data_streams/stream_reader.ts index cb1b1c42..98e4b53d 100644 --- a/packages/livekit-rtc/src/data_streams/stream_reader.ts +++ b/packages/livekit-rtc/src/data_streams/stream_reader.ts @@ -65,7 +65,6 @@ export class BinaryStreamReader extends BaseStreamReader { return { done: false, value: value.content }; } } catch (error) { - // TODO handle errors log.error('error processing stream update', error); return { done: true, value: undefined }; } @@ -150,7 +149,6 @@ export class TextStreamReader extends BaseStreamReader { }; } } catch (error) { - // TODO handle errors log.error('error processing stream update', error); return { done: true, value: undefined }; } diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index cea9dc75..8144aae2 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -320,8 +320,7 @@ export class LocalParticipant extends Participant { await sendChunk(chunkReq); }, abort(err) { - console.log('Sink error:', err); - // TODO handle aborts to signal something to receiver side + log.error('Sink error:', err); }, }); From 4eee6a07d1a8848a3b1910ea60ef01d4b710b8eb Mon Sep 17 00:00:00 2001 From: lukasIO Date: Sun, 22 Dec 2024 11:04:43 +0100 Subject: [PATCH 11/18] remove totalChunks --- .../src/data_streams/stream_reader.ts | 30 +++++++------------ packages/livekit-rtc/src/participant.ts | 2 -- packages/livekit-rtc/src/room.ts | 4 +-- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/packages/livekit-rtc/src/data_streams/stream_reader.ts b/packages/livekit-rtc/src/data_streams/stream_reader.ts index 98e4b53d..1d476da5 100644 --- a/packages/livekit-rtc/src/data_streams/stream_reader.ts +++ b/packages/livekit-rtc/src/data_streams/stream_reader.ts @@ -7,18 +7,21 @@ import type { BaseStreamInfo, FileStreamInfo, TextStreamChunk, TextStreamInfo } abstract class BaseStreamReader { protected reader: ReadableStream; - protected totalChunkCount?: number; + protected totalByteSize?: number; protected _info: T; + protected bytesReceived: number; + get info() { return this._info; } - constructor(info: T, stream: ReadableStream, totalChunkCount?: number) { + constructor(info: T, stream: ReadableStream, totalByteSize?: number) { this.reader = stream; - this.totalChunkCount = totalChunkCount; + this.totalByteSize = totalByteSize; this._info = info; + this.bytesReceived = 0; } protected abstract handleChunkReceived(chunk: DataStream_Chunk): void; @@ -32,21 +35,10 @@ abstract class BaseStreamReader { * A class to read chunks from a ReadableStream and provide them in a structured format. */ export class BinaryStreamReader extends BaseStreamReader { - private chunksReceived: Set; - - constructor( - info: FileStreamInfo, - stream: ReadableStream, - totalChunkCount?: number, - ) { - super(info, stream, totalChunkCount); - this.chunksReceived = new Set(); - } - protected handleChunkReceived(chunk: DataStream_Chunk) { - this.chunksReceived.add(bigIntToNumber(chunk.chunkIndex)); - const currentProgress = this.totalChunkCount - ? this.chunksReceived.size / this.totalChunkCount + this.bytesReceived += chunk.content.byteLength; + const currentProgress = this.totalByteSize + ? this.bytesReceived / this.totalByteSize : undefined; this.onProgress?.(currentProgress); } @@ -113,8 +105,8 @@ export class TextStreamReader extends BaseStreamReader { return; } this.receivedChunks.set(index, chunk); - const currentProgress = this.totalChunkCount - ? this.receivedChunks.size / this.totalChunkCount + const currentProgress = this.totalByteSize + ? this.receivedChunks.size / this.totalByteSize : undefined; this.onProgress?.(currentProgress); } diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index 8144aae2..c92502d0 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -340,7 +340,6 @@ export class LocalParticipant extends Participant { const streamId = crypto.randomUUID(); const destinationIdentities = options?.destinationIdentities; const totalLength = numberToBigInt(fileStats.size); - const totalChunks = numberToBigInt(Math.ceil(fileStats.size / STREAM_CHUNK_SIZE)); const headerReq = create(SendStreamHeaderRequestSchema, { senderIdentity, @@ -353,7 +352,6 @@ export class LocalParticipant extends Participant { timestamp: numberToBigInt(Date.now()), extensions: options?.extensions, totalLength, - totalChunks, contentHeader: { case: 'fileHeader', value: { diff --git a/packages/livekit-rtc/src/room.ts b/packages/livekit-rtc/src/room.ts index 5661b3d8..48c2aeaf 100644 --- a/packages/livekit-rtc/src/room.ts +++ b/packages/livekit-rtc/src/room.ts @@ -481,7 +481,7 @@ export class Room extends (EventEmitter as new () => TypedEmitter }; this.emit( RoomEvent.FileStreamReceived, - new BinaryStreamReader(info, stream, bigIntToNumber(streamHeader.totalChunks)), + new BinaryStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength)), { identity: participantIdentity }, ); } else if (streamHeader.contentHeader.case === 'textHeader') { @@ -510,7 +510,7 @@ export class Room extends (EventEmitter as new () => TypedEmitter }; this.emit( RoomEvent.TextStreamReceived, - new TextStreamReader(info, stream, bigIntToNumber(streamHeader.totalChunks)), + new TextStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength)), { identity: participantIdentity }, ); } From 957b941ad68213ce6d6410e08ee994e63547050b Mon Sep 17 00:00:00 2001 From: lukasIO Date: Sun, 22 Dec 2024 11:17:10 +0100 Subject: [PATCH 12/18] update ffi protocol --- packages/livekit-rtc/src/proto/room_pb.ts | 29 +++++++++-------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/packages/livekit-rtc/src/proto/room_pb.ts b/packages/livekit-rtc/src/proto/room_pb.ts index 189a9411..a7da91cc 100644 --- a/packages/livekit-rtc/src/proto/room_pb.ts +++ b/packages/livekit-rtc/src/proto/room_pb.ts @@ -36,7 +36,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file room.proto. */ export const file_room: GenFile = /*@__PURE__*/ - fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvIvEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASSQoWc3RyZWFtX2hlYWRlcl9yZWNlaXZlZBgeIAEoCzInLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkSAASRwoVc3RyZWFtX2NodW5rX3JlY2VpdmVkGB8gASgLMiYubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZEgAQgkKB21lc3NhZ2UiNwoIUm9vbUluZm8SCwoDc2lkGAEgASgJEgwKBG5hbWUYAiACKAkSEAoIbWV0YWRhdGEYAyACKAkiYQoJT3duZWRSb29tEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSJQoEaW5mbxgCIAIoCzIXLmxpdmVraXQucHJvdG8uUm9vbUluZm8iRQoUUGFydGljaXBhbnRDb25uZWN0ZWQSLQoEaW5mbxgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRQYXJ0aWNpcGFudCI3ChdQYXJ0aWNpcGFudERpc2Nvbm5lY3RlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCSIoChNMb2NhbFRyYWNrUHVibGlzaGVkEhEKCXRyYWNrX3NpZBgBIAIoCSIwChVMb2NhbFRyYWNrVW5wdWJsaXNoZWQSFwoPcHVibGljYXRpb25fc2lkGAEgAigJIikKFExvY2FsVHJhY2tTdWJzY3JpYmVkEhEKCXRyYWNrX3NpZBgCIAIoCSJpCg5UcmFja1B1Ymxpc2hlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRI5CgtwdWJsaWNhdGlvbhgCIAIoCzIkLmxpdmVraXQucHJvdG8uT3duZWRUcmFja1B1YmxpY2F0aW9uIkkKEFRyYWNrVW5wdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSFwoPcHVibGljYXRpb25fc2lkGAIgAigJIlkKD1RyYWNrU3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIoCgV0cmFjaxgCIAIoCzIZLmxpdmVraXQucHJvdG8uT3duZWRUcmFjayJEChFUcmFja1Vuc3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiWQoXVHJhY2tTdWJzY3JpcHRpb25GYWlsZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJEg0KBWVycm9yGAMgAigJIj0KClRyYWNrTXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIj8KDFRyYWNrVW5tdXRlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiXwoQRTJlZVN0YXRlQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRItCgVzdGF0ZRgCIAIoDjIeLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblN0YXRlIjcKFUFjdGl2ZVNwZWFrZXJzQ2hhbmdlZBIeChZwYXJ0aWNpcGFudF9pZGVudGl0aWVzGAEgAygJIicKE1Jvb21NZXRhZGF0YUNoYW5nZWQSEAoIbWV0YWRhdGEYASACKAkiHQoOUm9vbVNpZENoYW5nZWQSCwoDc2lkGAEgAigJIkwKGlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhAKCG1ldGFkYXRhGAIgAigJIqwBChxQYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeRI6ChJjaGFuZ2VkX2F0dHJpYnV0ZXMYAyADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeSJEChZQYXJ0aWNpcGFudE5hbWVDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEgwKBG5hbWUYAiACKAkiawoYQ29ubmVjdGlvblF1YWxpdHlDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjEKB3F1YWxpdHkYAiACKA4yIC5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5IkUKClVzZXJQYWNrZXQSKAoEZGF0YRgBIAIoCzIaLmxpdmVraXQucHJvdG8uT3duZWRCdWZmZXISDQoFdG9waWMYAiABKAkieQoLQ2hhdE1lc3NhZ2USCgoCaWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg8KB21lc3NhZ2UYAyACKAkSFgoOZWRpdF90aW1lc3RhbXAYBCABKAMSDwoHZGVsZXRlZBgFIAEoCBIRCglnZW5lcmF0ZWQYBiABKAgiYAoTQ2hhdE1lc3NhZ2VSZWNlaXZlZBIrCgdtZXNzYWdlGAEgAigLMhoubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZRIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCSImCgdTaXBEVE1GEgwKBGNvZGUYASACKA0SDQoFZGlnaXQYAiABKAkivwEKEkRhdGFQYWNrZXRSZWNlaXZlZBIrCgRraW5kGAEgAigOMh0ubGl2ZWtpdC5wcm90by5EYXRhUGFja2V0S2luZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCRIpCgR1c2VyGAQgASgLMhkubGl2ZWtpdC5wcm90by5Vc2VyUGFja2V0SAASKgoIc2lwX2R0bWYYBSABKAsyFi5saXZla2l0LnByb3RvLlNpcERUTUZIAEIHCgV2YWx1ZSJ/ChVUcmFuc2NyaXB0aW9uUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASABKAkSEQoJdHJhY2tfc2lkGAIgASgJEjUKCHNlZ21lbnRzGAMgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCJHChZDb25uZWN0aW9uU3RhdGVDaGFuZ2VkEi0KBXN0YXRlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uU3RhdGUiCwoJQ29ubmVjdGVkIj8KDERpc2Nvbm5lY3RlZBIvCgZyZWFzb24YASACKA4yHy5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZWFzb24iDgoMUmVjb25uZWN0aW5nIg0KC1JlY29ubmVjdGVkIgkKB1Jvb21FT1MikgYKCkRhdGFTdHJlYW0aqgEKClRleHRIZWFkZXISPwoOb3BlcmF0aW9uX3R5cGUYASACKA4yJy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uT3BlcmF0aW9uVHlwZRIPCgd2ZXJzaW9uGAIgAigFEhoKEnJlcGx5X3RvX3N0cmVhbV9pZBgDIAIoCRIbChNhdHRhY2hlZF9zdHJlYW1faWRzGAQgAygJEhEKCWdlbmVyYXRlZBgFIAIoCBofCgpGaWxlSGVhZGVyEhEKCWZpbGVfbmFtZRgBIAIoCRqBAwoGSGVhZGVyEhEKCXN0cmVhbV9pZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMSDQoFdG9waWMYAyABKAkSEQoJbWltZV90eXBlGAQgAigJEhQKDHRvdGFsX2xlbmd0aBgFIAEoBBIUCgx0b3RhbF9jaHVua3MYBiABKAQSRAoKZXh0ZW5zaW9ucxgHIAMoCzIwLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIuRXh0ZW5zaW9uc0VudHJ5EjsKC3RleHRfaGVhZGVyGAggASgLMiQubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLlRleHRIZWFkZXJIABI7CgtmaWxlX2hlYWRlchgJIAEoCzIkLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5GaWxlSGVhZGVySAAaMQoPRXh0ZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCEAoOY29udGVudF9oZWFkZXIabwoFQ2h1bmsSEQoJc3RyZWFtX2lkGAEgAigJEhMKC2NodW5rX2luZGV4GAIgAigEEg8KB2NvbnRlbnQYAyACKAwSEAoIY29tcGxldGUYBCABKAgSDwoHdmVyc2lvbhgFIAEoBRIKCgJpdhgGIAEoDCJBCg1PcGVyYXRpb25UeXBlEgoKBkNSRUFURRAAEgoKBlVQREFURRABEgoKBkRFTEVURRACEgwKCFJFQUNUSU9OEAMiagoYRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjAKBmhlYWRlchgCIAIoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXIiZwoXRGF0YVN0cmVhbUNodW5rUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSLgoFY2h1bmsYAiACKAsyHy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uQ2h1bmsipgEKF1NlbmRTdHJlYW1IZWFkZXJSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIwCgZoZWFkZXIYAiACKAsyIC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uSGVhZGVyEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIqMBChZTZW5kU3RyZWFtQ2h1bmtSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIuCgVjaHVuaxgCIAIoCzIfLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5DaHVuaxIeChZkZXN0aW5hdGlvbl9pZGVudGl0aWVzGAMgAygJEhcKD3NlbmRlcl9pZGVudGl0eRgEIAEoCSIsChhTZW5kU3RyZWFtSGVhZGVyUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiKwoXU2VuZFN0cmVhbUNodW5rUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2VuZFN0cmVhbUhlYWRlckNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIjoKF1NlbmRTdHJlYW1DaHVua0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJKlAKEEljZVRyYW5zcG9ydFR5cGUSEwoPVFJBTlNQT1JUX1JFTEFZEAASFAoQVFJBTlNQT1JUX05PSE9TVBABEhEKDVRSQU5TUE9SVF9BTEwQAipDChhDb250aW51YWxHYXRoZXJpbmdQb2xpY3kSDwoLR0FUSEVSX09OQ0UQABIWChJHQVRIRVJfQ09OVElOVUFMTFkQASpgChFDb25uZWN0aW9uUXVhbGl0eRIQCgxRVUFMSVRZX1BPT1IQABIQCgxRVUFMSVRZX0dPT0QQARIVChFRVUFMSVRZX0VYQ0VMTEVOVBACEhAKDFFVQUxJVFlfTE9TVBADKlMKD0Nvbm5lY3Rpb25TdGF0ZRIVChFDT05OX0RJU0NPTk5FQ1RFRBAAEhIKDkNPTk5fQ09OTkVDVEVEEAESFQoRQ09OTl9SRUNPTk5FQ1RJTkcQAiozCg5EYXRhUGFja2V0S2luZBIOCgpLSU5EX0xPU1NZEAASEQoNS0lORF9SRUxJQUJMRRABQhCqAg1MaXZlS2l0LlByb3Rv", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); + fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvIvEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASSQoWc3RyZWFtX2hlYWRlcl9yZWNlaXZlZBgeIAEoCzInLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkSAASRwoVc3RyZWFtX2NodW5rX3JlY2VpdmVkGB8gASgLMiYubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZEgAQgkKB21lc3NhZ2UiNwoIUm9vbUluZm8SCwoDc2lkGAEgASgJEgwKBG5hbWUYAiACKAkSEAoIbWV0YWRhdGEYAyACKAkiYQoJT3duZWRSb29tEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSJQoEaW5mbxgCIAIoCzIXLmxpdmVraXQucHJvdG8uUm9vbUluZm8iRQoUUGFydGljaXBhbnRDb25uZWN0ZWQSLQoEaW5mbxgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRQYXJ0aWNpcGFudCI3ChdQYXJ0aWNpcGFudERpc2Nvbm5lY3RlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCSIoChNMb2NhbFRyYWNrUHVibGlzaGVkEhEKCXRyYWNrX3NpZBgBIAIoCSIwChVMb2NhbFRyYWNrVW5wdWJsaXNoZWQSFwoPcHVibGljYXRpb25fc2lkGAEgAigJIikKFExvY2FsVHJhY2tTdWJzY3JpYmVkEhEKCXRyYWNrX3NpZBgCIAIoCSJpCg5UcmFja1B1Ymxpc2hlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRI5CgtwdWJsaWNhdGlvbhgCIAIoCzIkLmxpdmVraXQucHJvdG8uT3duZWRUcmFja1B1YmxpY2F0aW9uIkkKEFRyYWNrVW5wdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSFwoPcHVibGljYXRpb25fc2lkGAIgAigJIlkKD1RyYWNrU3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIoCgV0cmFjaxgCIAIoCzIZLmxpdmVraXQucHJvdG8uT3duZWRUcmFjayJEChFUcmFja1Vuc3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiWQoXVHJhY2tTdWJzY3JpcHRpb25GYWlsZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJEg0KBWVycm9yGAMgAigJIj0KClRyYWNrTXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIj8KDFRyYWNrVW5tdXRlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiXwoQRTJlZVN0YXRlQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRItCgVzdGF0ZRgCIAIoDjIeLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblN0YXRlIjcKFUFjdGl2ZVNwZWFrZXJzQ2hhbmdlZBIeChZwYXJ0aWNpcGFudF9pZGVudGl0aWVzGAEgAygJIicKE1Jvb21NZXRhZGF0YUNoYW5nZWQSEAoIbWV0YWRhdGEYASACKAkiHQoOUm9vbVNpZENoYW5nZWQSCwoDc2lkGAEgAigJIkwKGlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhAKCG1ldGFkYXRhGAIgAigJIqwBChxQYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeRI6ChJjaGFuZ2VkX2F0dHJpYnV0ZXMYAyADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeSJEChZQYXJ0aWNpcGFudE5hbWVDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEgwKBG5hbWUYAiACKAkiawoYQ29ubmVjdGlvblF1YWxpdHlDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjEKB3F1YWxpdHkYAiACKA4yIC5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5IkUKClVzZXJQYWNrZXQSKAoEZGF0YRgBIAIoCzIaLmxpdmVraXQucHJvdG8uT3duZWRCdWZmZXISDQoFdG9waWMYAiABKAkieQoLQ2hhdE1lc3NhZ2USCgoCaWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg8KB21lc3NhZ2UYAyACKAkSFgoOZWRpdF90aW1lc3RhbXAYBCABKAMSDwoHZGVsZXRlZBgFIAEoCBIRCglnZW5lcmF0ZWQYBiABKAgiYAoTQ2hhdE1lc3NhZ2VSZWNlaXZlZBIrCgdtZXNzYWdlGAEgAigLMhoubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZRIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCSImCgdTaXBEVE1GEgwKBGNvZGUYASACKA0SDQoFZGlnaXQYAiABKAkivwEKEkRhdGFQYWNrZXRSZWNlaXZlZBIrCgRraW5kGAEgAigOMh0ubGl2ZWtpdC5wcm90by5EYXRhUGFja2V0S2luZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCRIpCgR1c2VyGAQgASgLMhkubGl2ZWtpdC5wcm90by5Vc2VyUGFja2V0SAASKgoIc2lwX2R0bWYYBSABKAsyFi5saXZla2l0LnByb3RvLlNpcERUTUZIAEIHCgV2YWx1ZSJ/ChVUcmFuc2NyaXB0aW9uUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASABKAkSEQoJdHJhY2tfc2lkGAIgASgJEjUKCHNlZ21lbnRzGAMgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCJHChZDb25uZWN0aW9uU3RhdGVDaGFuZ2VkEi0KBXN0YXRlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uU3RhdGUiCwoJQ29ubmVjdGVkIj8KDERpc2Nvbm5lY3RlZBIvCgZyZWFzb24YASACKA4yHy5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZWFzb24iDgoMUmVjb25uZWN0aW5nIg0KC1JlY29ubmVjdGVkIgkKB1Jvb21FT1Mi/AUKCkRhdGFTdHJlYW0aqgEKClRleHRIZWFkZXISPwoOb3BlcmF0aW9uX3R5cGUYASACKA4yJy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uT3BlcmF0aW9uVHlwZRIPCgd2ZXJzaW9uGAIgASgFEhoKEnJlcGx5X3RvX3N0cmVhbV9pZBgDIAEoCRIbChNhdHRhY2hlZF9zdHJlYW1faWRzGAQgAygJEhEKCWdlbmVyYXRlZBgFIAEoCBofCgpGaWxlSGVhZGVyEhEKCWZpbGVfbmFtZRgBIAIoCRrrAgoGSGVhZGVyEhEKCXN0cmVhbV9pZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMSEQoJbWltZV90eXBlGAMgAigJEg0KBXRvcGljGAQgAigJEhQKDHRvdGFsX2xlbmd0aBgFIAEoBBJECgpleHRlbnNpb25zGAYgAygLMjAubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkhlYWRlci5FeHRlbnNpb25zRW50cnkSOwoLdGV4dF9oZWFkZXIYByABKAsyJC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uVGV4dEhlYWRlckgAEjsKC2ZpbGVfaGVhZGVyGAggASgLMiQubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkZpbGVIZWFkZXJIABoxCg9FeHRlbnNpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIQCg5jb250ZW50X2hlYWRlchpvCgVDaHVuaxIRCglzdHJlYW1faWQYASACKAkSEwoLY2h1bmtfaW5kZXgYAiACKAQSDwoHY29udGVudBgDIAIoDBIQCghjb21wbGV0ZRgEIAEoCBIPCgd2ZXJzaW9uGAUgASgFEgoKAml2GAYgASgMIkEKDU9wZXJhdGlvblR5cGUSCgoGQ1JFQVRFEAASCgoGVVBEQVRFEAESCgoGREVMRVRFEAISDAoIUkVBQ1RJT04QAyJqChhEYXRhU3RyZWFtSGVhZGVyUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSMAoGaGVhZGVyGAIgAigLMiAubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkhlYWRlciJnChdEYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIuCgVjaHVuaxgCIAIoCzIfLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5DaHVuayKmAQoXU2VuZFN0cmVhbUhlYWRlclJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEjAKBmhlYWRlchgCIAIoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXISHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgDIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBCABKAkiowEKFlNlbmRTdHJlYW1DaHVua1JlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEi4KBWNodW5rGAIgAigLMh8ubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkNodW5rEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIiwKGFNlbmRTdHJlYW1IZWFkZXJSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCIrChdTZW5kU3RyZWFtQ2h1bmtSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI7ChhTZW5kU3RyZWFtSGVhZGVyQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkiOgoXU2VuZFN0cmVhbUNodW5rQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkqUAoQSWNlVHJhbnNwb3J0VHlwZRITCg9UUkFOU1BPUlRfUkVMQVkQABIUChBUUkFOU1BPUlRfTk9IT1NUEAESEQoNVFJBTlNQT1JUX0FMTBACKkMKGENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeRIPCgtHQVRIRVJfT05DRRAAEhYKEkdBVEhFUl9DT05USU5VQUxMWRABKmAKEUNvbm5lY3Rpb25RdWFsaXR5EhAKDFFVQUxJVFlfUE9PUhAAEhAKDFFVQUxJVFlfR09PRBABEhUKEVFVQUxJVFlfRVhDRUxMRU5UEAISEAoMUVVBTElUWV9MT1NUEAMqUwoPQ29ubmVjdGlvblN0YXRlEhUKEUNPTk5fRElTQ09OTkVDVEVEEAASEgoOQ09OTl9DT05ORUNURUQQARIVChFDT05OX1JFQ09OTkVDVElORxACKjMKDkRhdGFQYWNrZXRLaW5kEg4KCktJTkRfTE9TU1kQABIRCg1LSU5EX1JFTElBQkxFEAFCEKoCDUxpdmVLaXQuUHJvdG8", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); /** * Connect to a new LiveKit room @@ -2307,14 +2307,14 @@ export type DataStream_TextHeader = Message<"livekit.proto.DataStream.TextHeader /** * Optional: Version for updates/edits * - * @generated from field: required int32 version = 2; + * @generated from field: optional int32 version = 2; */ version: number; /** * Optional: Reply to specific message * - * @generated from field: required string reply_to_stream_id = 3; + * @generated from field: optional string reply_to_stream_id = 3; */ replyToStreamId: string; @@ -2328,7 +2328,7 @@ export type DataStream_TextHeader = Message<"livekit.proto.DataStream.TextHeader /** * true if the text has been generated by an agent from a participant's audio transcription * - * @generated from field: required bool generated = 5; + * @generated from field: optional bool generated = 5; */ generated: boolean; }; @@ -2382,14 +2382,14 @@ export type DataStream_Header = Message<"livekit.proto.DataStream.Header"> & { timestamp: bigint; /** - * @generated from field: optional string topic = 3; + * @generated from field: required string mime_type = 3; */ - topic: string; + mimeType: string; /** - * @generated from field: required string mime_type = 4; + * @generated from field: required string topic = 4; */ - mimeType: string; + topic: string; /** * only populated for finite streams, if it's a stream of unknown size this stays empty @@ -2398,17 +2398,10 @@ export type DataStream_Header = Message<"livekit.proto.DataStream.Header"> & { */ totalLength: bigint; - /** - * only populated for finite streams, if it's a stream of unknown size this stays empty - * - * @generated from field: optional uint64 total_chunks = 6; - */ - totalChunks: bigint; - /** * user defined extensions map that can carry additional info * - * @generated from field: map extensions = 7; + * @generated from field: map extensions = 6; */ extensions: { [key: string]: string }; @@ -2419,13 +2412,13 @@ export type DataStream_Header = Message<"livekit.proto.DataStream.Header"> & { */ contentHeader: { /** - * @generated from field: livekit.proto.DataStream.TextHeader text_header = 8; + * @generated from field: livekit.proto.DataStream.TextHeader text_header = 7; */ value: DataStream_TextHeader; case: "textHeader"; } | { /** - * @generated from field: livekit.proto.DataStream.FileHeader file_header = 9; + * @generated from field: livekit.proto.DataStream.FileHeader file_header = 8; */ value: DataStream_FileHeader; case: "fileHeader"; From 885eb2c040a456b42fec56f734f90652d45cf9e2 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Wed, 8 Jan 2025 10:16:06 +0100 Subject: [PATCH 13/18] update rust --- packages/livekit-rtc/rust-sdks | 2 +- packages/livekit-rtc/src/napi/native.d.ts | 10 +- packages/livekit-rtc/src/proto/ffi_pb.ts | 48 ++- packages/livekit-rtc/src/proto/room_pb.ts | 424 ++++++++++++++++++++-- 4 files changed, 439 insertions(+), 45 deletions(-) diff --git a/packages/livekit-rtc/rust-sdks b/packages/livekit-rtc/rust-sdks index cc889daa..5047dae4 160000 --- a/packages/livekit-rtc/rust-sdks +++ b/packages/livekit-rtc/rust-sdks @@ -1 +1 @@ -Subproject commit cc889daa26c2ea50258932708a24e095dcc850cc +Subproject commit 5047dae4066e219e4cc33699fbaba5abd52bda28 diff --git a/packages/livekit-rtc/src/napi/native.d.ts b/packages/livekit-rtc/src/napi/native.d.ts index 983654dc..2483dafa 100644 --- a/packages/livekit-rtc/src/napi/native.d.ts +++ b/packages/livekit-rtc/src/napi/native.d.ts @@ -3,15 +3,15 @@ /* auto-generated by NAPI-RS */ -export function livekitInitialize( +export declare function livekitInitialize( callback: (data: Uint8Array) => void, captureLogs: boolean, sdkVersion: string, ): void; -export function livekitFfiRequest(data: Uint8Array): Uint8Array; -export function livekitRetrievePtr(handle: Uint8Array): bigint; -export function livekitCopyBuffer(ptr: bigint, len: number): Uint8Array; -export function livekitDispose(): Promise; +export declare function livekitFfiRequest(data: Uint8Array): Uint8Array; +export declare function livekitRetrievePtr(handle: Uint8Array): bigint; +export declare function livekitCopyBuffer(ptr: bigint, len: number): Uint8Array; +export declare function livekitDispose(): Promise; export declare class FfiHandle { constructor(handle: bigint); dispose(): void; diff --git a/packages/livekit-rtc/src/proto/ffi_pb.ts b/packages/livekit-rtc/src/proto/ffi_pb.ts index f3c26f62..cd73b64f 100644 --- a/packages/livekit-rtc/src/proto/ffi_pb.ts +++ b/packages/livekit-rtc/src/proto/ffi_pb.ts @@ -19,7 +19,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; import { Message, proto2 } from "@bufbuild/protobuf"; -import { ConnectCallback, ConnectRequest, ConnectResponse, DisconnectCallback, DisconnectRequest, DisconnectResponse, EditChatMessageRequest, GetSessionStatsCallback, GetSessionStatsRequest, GetSessionStatsResponse, PublishDataCallback, PublishDataRequest, PublishDataResponse, PublishSipDtmfCallback, PublishSipDtmfRequest, PublishSipDtmfResponse, PublishTrackCallback, PublishTrackRequest, PublishTrackResponse, PublishTranscriptionCallback, PublishTranscriptionRequest, PublishTranscriptionResponse, RoomEvent, SendChatMessageCallback, SendChatMessageRequest, SendChatMessageResponse, SetLocalAttributesCallback, SetLocalAttributesRequest, SetLocalAttributesResponse, SetLocalMetadataCallback, SetLocalMetadataRequest, SetLocalMetadataResponse, SetLocalNameCallback, SetLocalNameRequest, SetLocalNameResponse, SetSubscribedRequest, SetSubscribedResponse, UnpublishTrackCallback, UnpublishTrackRequest, UnpublishTrackResponse } from "./room_pb.js"; +import { ConnectCallback, ConnectRequest, ConnectResponse, DisconnectCallback, DisconnectRequest, DisconnectResponse, EditChatMessageRequest, GetSessionStatsCallback, GetSessionStatsRequest, GetSessionStatsResponse, PublishDataCallback, PublishDataRequest, PublishDataResponse, PublishSipDtmfCallback, PublishSipDtmfRequest, PublishSipDtmfResponse, PublishTrackCallback, PublishTrackRequest, PublishTrackResponse, PublishTranscriptionCallback, PublishTranscriptionRequest, PublishTranscriptionResponse, RoomEvent, SendChatMessageCallback, SendChatMessageRequest, SendChatMessageResponse, SendStreamChunkCallback, SendStreamChunkRequest, SendStreamChunkResponse, SendStreamHeaderCallback, SendStreamHeaderRequest, SendStreamHeaderResponse, SetLocalAttributesCallback, SetLocalAttributesRequest, SetLocalAttributesResponse, SetLocalMetadataCallback, SetLocalMetadataRequest, SetLocalMetadataResponse, SetLocalNameCallback, SetLocalNameRequest, SetLocalNameResponse, SetSubscribedRequest, SetSubscribedResponse, UnpublishTrackCallback, UnpublishTrackRequest, UnpublishTrackResponse } from "./room_pb.js"; import { CreateAudioTrackRequest, CreateAudioTrackResponse, CreateVideoTrackRequest, CreateVideoTrackResponse, EnableRemoteTrackRequest, EnableRemoteTrackResponse, GetStatsCallback, GetStatsRequest, GetStatsResponse, LocalTrackMuteRequest, LocalTrackMuteResponse, TrackEvent } from "./track_pb.js"; import { CaptureVideoFrameRequest, CaptureVideoFrameResponse, NewVideoSourceRequest, NewVideoSourceResponse, NewVideoStreamRequest, NewVideoStreamResponse, VideoConvertRequest, VideoConvertResponse, VideoStreamEvent, VideoStreamFromParticipantRequest, VideoStreamFromParticipantResponse } from "./video_frame_pb.js"; import { AudioStreamEvent, AudioStreamFromParticipantRequest, AudioStreamFromParticipantResponse, CaptureAudioFrameCallback, CaptureAudioFrameRequest, CaptureAudioFrameResponse, ClearAudioBufferRequest, ClearAudioBufferResponse, FlushSoxResamplerRequest, FlushSoxResamplerResponse, NewAudioResamplerRequest, NewAudioResamplerResponse, NewAudioSourceRequest, NewAudioSourceResponse, NewAudioStreamRequest, NewAudioStreamResponse, NewSoxResamplerRequest, NewSoxResamplerResponse, PushSoxResamplerRequest, PushSoxResamplerResponse, RemixAndResampleRequest, RemixAndResampleResponse } from "./audio_frame_pb.js"; @@ -339,6 +339,20 @@ export class FfiRequest extends Message { */ value: UpdateRemoteTrackPublicationDimensionRequest; case: "updateRemoteTrackPublicationDimension"; + } | { + /** + * Data Streams + * + * @generated from field: livekit.proto.SendStreamHeaderRequest send_stream_header = 44; + */ + value: SendStreamHeaderRequest; + case: "sendStreamHeader"; + } | { + /** + * @generated from field: livekit.proto.SendStreamChunkRequest send_stream_chunk = 45; + */ + value: SendStreamChunkRequest; + case: "sendStreamChunk"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -391,6 +405,8 @@ export class FfiRequest extends Message { { no: 41, name: "rpc_method_invocation_response", kind: "message", T: RpcMethodInvocationResponseRequest, oneof: "message" }, { no: 42, name: "enable_remote_track_publication", kind: "message", T: EnableRemoteTrackPublicationRequest, oneof: "message" }, { no: 43, name: "update_remote_track_publication_dimension", kind: "message", T: UpdateRemoteTrackPublicationDimensionRequest, oneof: "message" }, + { no: 44, name: "send_stream_header", kind: "message", T: SendStreamHeaderRequest, oneof: "message" }, + { no: 45, name: "send_stream_chunk", kind: "message", T: SendStreamChunkRequest, oneof: "message" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): FfiRequest { @@ -677,6 +693,20 @@ export class FfiResponse extends Message { */ value: UpdateRemoteTrackPublicationDimensionResponse; case: "updateRemoteTrackPublicationDimension"; + } | { + /** + * Data Streams + * + * @generated from field: livekit.proto.SendStreamHeaderResponse send_stream_header = 43; + */ + value: SendStreamHeaderResponse; + case: "sendStreamHeader"; + } | { + /** + * @generated from field: livekit.proto.SendStreamChunkResponse send_stream_chunk = 44; + */ + value: SendStreamChunkResponse; + case: "sendStreamChunk"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -728,6 +758,8 @@ export class FfiResponse extends Message { { no: 40, name: "rpc_method_invocation_response", kind: "message", T: RpcMethodInvocationResponseResponse, oneof: "message" }, { no: 41, name: "enable_remote_track_publication", kind: "message", T: EnableRemoteTrackPublicationResponse, oneof: "message" }, { no: 42, name: "update_remote_track_publication_dimension", kind: "message", T: UpdateRemoteTrackPublicationDimensionResponse, oneof: "message" }, + { no: 43, name: "send_stream_header", kind: "message", T: SendStreamHeaderResponse, oneof: "message" }, + { no: 44, name: "send_stream_chunk", kind: "message", T: SendStreamChunkResponse, oneof: "message" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): FfiResponse { @@ -896,6 +928,18 @@ export class FfiEvent extends Message { */ value: RpcMethodInvocationEvent; case: "rpcMethodInvocation"; + } | { + /** + * @generated from field: livekit.proto.SendStreamHeaderCallback send_stream_header = 25; + */ + value: SendStreamHeaderCallback; + case: "sendStreamHeader"; + } | { + /** + * @generated from field: livekit.proto.SendStreamChunkCallback send_stream_chunk = 26; + */ + value: SendStreamChunkCallback; + case: "sendStreamChunk"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -929,6 +973,8 @@ export class FfiEvent extends Message { { no: 22, name: "chat_message", kind: "message", T: SendChatMessageCallback, oneof: "message" }, { no: 23, name: "perform_rpc", kind: "message", T: PerformRpcCallback, oneof: "message" }, { no: 24, name: "rpc_method_invocation", kind: "message", T: RpcMethodInvocationEvent, oneof: "message" }, + { no: 25, name: "send_stream_header", kind: "message", T: SendStreamHeaderCallback, oneof: "message" }, + { no: 26, name: "send_stream_chunk", kind: "message", T: SendStreamChunkCallback, oneof: "message" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): FfiEvent { diff --git a/packages/livekit-rtc/src/proto/room_pb.ts b/packages/livekit-rtc/src/proto/room_pb.ts index 5eae7899..7c9cf264 100644 --- a/packages/livekit-rtc/src/proto/room_pb.ts +++ b/packages/livekit-rtc/src/proto/room_pb.ts @@ -2752,16 +2752,16 @@ export class RoomEvent extends Message { case: "chatMessage"; } | { /** - * @generated from field: livekit.proto.DataStream.Header stream_header = 30; + * @generated from field: livekit.proto.DataStreamHeaderReceived stream_header_received = 30; */ - value: DataStream_Header; - case: "streamHeader"; + value: DataStreamHeaderReceived; + case: "streamHeaderReceived"; } | { /** - * @generated from field: livekit.proto.DataStream.Chunk stream_chunk = 31; + * @generated from field: livekit.proto.DataStreamChunkReceived stream_chunk_received = 31; */ - value: DataStream_Chunk; - case: "streamChunk"; + value: DataStreamChunkReceived; + case: "streamChunkReceived"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -2801,8 +2801,8 @@ export class RoomEvent extends Message { { no: 27, name: "data_packet_received", kind: "message", T: DataPacketReceived, oneof: "message" }, { no: 28, name: "transcription_received", kind: "message", T: TranscriptionReceived, oneof: "message" }, { no: 29, name: "chat_message", kind: "message", T: ChatMessageReceived, oneof: "message" }, - { no: 30, name: "stream_header", kind: "message", T: DataStream_Header, oneof: "message" }, - { no: 31, name: "stream_chunk", kind: "message", T: DataStream_Chunk, oneof: "message" }, + { no: 30, name: "stream_header_received", kind: "message", T: DataStreamHeaderReceived, oneof: "message" }, + { no: 31, name: "stream_chunk_received", kind: "message", T: DataStreamChunkReceived, oneof: "message" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): RoomEvent { @@ -4334,14 +4334,14 @@ export class DataStream_TextHeader extends Message { /** * Optional: Version for updates/edits * - * @generated from field: required int32 version = 2; + * @generated from field: optional int32 version = 2; */ version?: number; /** * Optional: Reply to specific message * - * @generated from field: required string reply_to_stream_id = 3; + * @generated from field: optional string reply_to_stream_id = 3; */ replyToStreamId?: string; @@ -4355,7 +4355,7 @@ export class DataStream_TextHeader extends Message { /** * true if the text has been generated by an agent from a participant's audio transcription * - * @generated from field: required bool generated = 5; + * @generated from field: optional bool generated = 5; */ generated?: boolean; @@ -4368,10 +4368,10 @@ export class DataStream_TextHeader extends Message { static readonly typeName = "livekit.proto.DataStream.TextHeader"; static readonly fields: FieldList = proto2.util.newFieldList(() => [ { no: 1, name: "operation_type", kind: "enum", T: proto2.getEnumType(DataStream_OperationType), req: true }, - { no: 2, name: "version", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, - { no: 3, name: "reply_to_stream_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "version", kind: "scalar", T: 5 /* ScalarType.INT32 */, opt: true }, + { no: 3, name: "reply_to_stream_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 4, name: "attached_stream_ids", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, - { no: 5, name: "generated", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 5, name: "generated", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DataStream_TextHeader { @@ -4453,14 +4453,14 @@ export class DataStream_Header extends Message { timestamp?: bigint; /** - * @generated from field: required string topic = 3; + * @generated from field: required string mime_type = 3; */ - topic?: string; + mimeType?: string; /** - * @generated from field: required string mime_type = 4; + * @generated from field: required string topic = 4; */ - mimeType?: string; + topic?: string; /** * only populated for finite streams, if it's a stream of unknown size this stays empty @@ -4469,17 +4469,10 @@ export class DataStream_Header extends Message { */ totalLength?: bigint; - /** - * only populated for finite streams, if it's a stream of unknown size this stays empty - * - * @generated from field: optional uint64 total_chunks = 6; - */ - totalChunks?: bigint; - /** * user defined extensions map that can carry additional info * - * @generated from field: map extensions = 7; + * @generated from field: map extensions = 6; */ extensions: { [key: string]: string } = {}; @@ -4490,13 +4483,13 @@ export class DataStream_Header extends Message { */ contentHeader: { /** - * @generated from field: livekit.proto.DataStream.TextHeader text_header = 8; + * @generated from field: livekit.proto.DataStream.TextHeader text_header = 7; */ value: DataStream_TextHeader; case: "textHeader"; } | { /** - * @generated from field: livekit.proto.DataStream.FileHeader file_header = 9; + * @generated from field: livekit.proto.DataStream.FileHeader file_header = 8; */ value: DataStream_FileHeader; case: "fileHeader"; @@ -4512,13 +4505,12 @@ export class DataStream_Header extends Message { static readonly fields: FieldList = proto2.util.newFieldList(() => [ { no: 1, name: "stream_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, { no: 2, name: "timestamp", kind: "scalar", T: 3 /* ScalarType.INT64 */, req: true }, - { no: 3, name: "topic", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, - { no: 4, name: "mime_type", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "mime_type", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "topic", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, { no: 5, name: "total_length", kind: "scalar", T: 4 /* ScalarType.UINT64 */, opt: true }, - { no: 6, name: "total_chunks", kind: "scalar", T: 4 /* ScalarType.UINT64 */, opt: true }, - { no: 7, name: "extensions", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, - { no: 8, name: "text_header", kind: "message", T: DataStream_TextHeader, oneof: "content_header" }, - { no: 9, name: "file_header", kind: "message", T: DataStream_FileHeader, oneof: "content_header" }, + { no: 6, name: "extensions", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, + { no: 7, name: "text_header", kind: "message", T: DataStream_TextHeader, oneof: "content_header" }, + { no: 8, name: "file_header", kind: "message", T: DataStream_FileHeader, oneof: "content_header" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DataStream_Header { @@ -4564,14 +4556,14 @@ export class DataStream_Chunk extends Message { /** * true only if this is the last chunk of this stream - can also be sent with empty content * - * @generated from field: required bool complete = 4; + * @generated from field: optional bool complete = 4; */ complete?: boolean; /** * a version indicating that this chunk_index has been retroactively modified and the original one needs to be replaced * - * @generated from field: required int32 version = 5; + * @generated from field: optional int32 version = 5; */ version?: number; @@ -4593,8 +4585,8 @@ export class DataStream_Chunk extends Message { { no: 1, name: "stream_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, { no: 2, name: "chunk_index", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, { no: 3, name: "content", kind: "scalar", T: 12 /* ScalarType.BYTES */, req: true }, - { no: 4, name: "complete", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, - { no: 5, name: "version", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + { no: 4, name: "complete", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 5, name: "version", kind: "scalar", T: 5 /* ScalarType.INT32 */, opt: true }, { no: 6, name: "iv", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, ]); @@ -4615,3 +4607,359 @@ export class DataStream_Chunk extends Message { } } +/** + * @generated from message livekit.proto.DataStreamHeaderReceived + */ +export class DataStreamHeaderReceived extends Message { + /** + * @generated from field: required string participant_identity = 1; + */ + participantIdentity?: string; + + /** + * @generated from field: required livekit.proto.DataStream.Header header = 2; + */ + header?: DataStream_Header; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStreamHeaderReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "header", kind: "message", T: DataStream_Header, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStreamHeaderReceived { + return new DataStreamHeaderReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStreamHeaderReceived { + return new DataStreamHeaderReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStreamHeaderReceived { + return new DataStreamHeaderReceived().fromJsonString(jsonString, options); + } + + static equals(a: DataStreamHeaderReceived | PlainMessage | undefined, b: DataStreamHeaderReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStreamHeaderReceived, a, b); + } +} + +/** + * @generated from message livekit.proto.DataStreamChunkReceived + */ +export class DataStreamChunkReceived extends Message { + /** + * @generated from field: required string participant_identity = 1; + */ + participantIdentity?: string; + + /** + * @generated from field: required livekit.proto.DataStream.Chunk chunk = 2; + */ + chunk?: DataStream_Chunk; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStreamChunkReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "chunk", kind: "message", T: DataStream_Chunk, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStreamChunkReceived { + return new DataStreamChunkReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStreamChunkReceived { + return new DataStreamChunkReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStreamChunkReceived { + return new DataStreamChunkReceived().fromJsonString(jsonString, options); + } + + static equals(a: DataStreamChunkReceived | PlainMessage | undefined, b: DataStreamChunkReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStreamChunkReceived, a, b); + } +} + +/** + * @generated from message livekit.proto.SendStreamHeaderRequest + */ +export class SendStreamHeaderRequest extends Message { + /** + * @generated from field: required uint64 local_participant_handle = 1; + */ + localParticipantHandle?: bigint; + + /** + * @generated from field: required livekit.proto.DataStream.Header header = 2; + */ + header?: DataStream_Header; + + /** + * @generated from field: repeated string destination_identities = 3; + */ + destinationIdentities: string[] = []; + + /** + * @generated from field: optional string sender_identity = 4; + */ + senderIdentity?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamHeaderRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "header", kind: "message", T: DataStream_Header, req: true }, + { no: 3, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 4, name: "sender_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamHeaderRequest { + return new SendStreamHeaderRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamHeaderRequest { + return new SendStreamHeaderRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamHeaderRequest { + return new SendStreamHeaderRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamHeaderRequest | PlainMessage | undefined, b: SendStreamHeaderRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamHeaderRequest, a, b); + } +} + +/** + * @generated from message livekit.proto.SendStreamChunkRequest + */ +export class SendStreamChunkRequest extends Message { + /** + * @generated from field: required uint64 local_participant_handle = 1; + */ + localParticipantHandle?: bigint; + + /** + * @generated from field: required livekit.proto.DataStream.Chunk chunk = 2; + */ + chunk?: DataStream_Chunk; + + /** + * @generated from field: repeated string destination_identities = 3; + */ + destinationIdentities: string[] = []; + + /** + * @generated from field: optional string sender_identity = 4; + */ + senderIdentity?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamChunkRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "chunk", kind: "message", T: DataStream_Chunk, req: true }, + { no: 3, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 4, name: "sender_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamChunkRequest { + return new SendStreamChunkRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamChunkRequest { + return new SendStreamChunkRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamChunkRequest { + return new SendStreamChunkRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamChunkRequest | PlainMessage | undefined, b: SendStreamChunkRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamChunkRequest, a, b); + } +} + +/** + * @generated from message livekit.proto.SendStreamHeaderResponse + */ +export class SendStreamHeaderResponse extends Message { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamHeaderResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamHeaderResponse { + return new SendStreamHeaderResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamHeaderResponse { + return new SendStreamHeaderResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamHeaderResponse { + return new SendStreamHeaderResponse().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamHeaderResponse | PlainMessage | undefined, b: SendStreamHeaderResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamHeaderResponse, a, b); + } +} + +/** + * @generated from message livekit.proto.SendStreamChunkResponse + */ +export class SendStreamChunkResponse extends Message { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamChunkResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamChunkResponse { + return new SendStreamChunkResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamChunkResponse { + return new SendStreamChunkResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamChunkResponse { + return new SendStreamChunkResponse().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamChunkResponse | PlainMessage | undefined, b: SendStreamChunkResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamChunkResponse, a, b); + } +} + +/** + * @generated from message livekit.proto.SendStreamHeaderCallback + */ +export class SendStreamHeaderCallback extends Message { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId?: bigint; + + /** + * @generated from field: optional string error = 2; + */ + error?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamHeaderCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamHeaderCallback { + return new SendStreamHeaderCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamHeaderCallback { + return new SendStreamHeaderCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamHeaderCallback { + return new SendStreamHeaderCallback().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamHeaderCallback | PlainMessage | undefined, b: SendStreamHeaderCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamHeaderCallback, a, b); + } +} + +/** + * @generated from message livekit.proto.SendStreamChunkCallback + */ +export class SendStreamChunkCallback extends Message { + /** + * @generated from field: required uint64 async_id = 1; + */ + asyncId?: bigint; + + /** + * @generated from field: optional string error = 2; + */ + error?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamChunkCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamChunkCallback { + return new SendStreamChunkCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamChunkCallback { + return new SendStreamChunkCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamChunkCallback { + return new SendStreamChunkCallback().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamChunkCallback | PlainMessage | undefined, b: SendStreamChunkCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamChunkCallback, a, b); + } +} + From 0fd1316da56cd21636b4766813ddbda2e0fe0ff9 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Wed, 8 Jan 2025 10:18:12 +0100 Subject: [PATCH 14/18] update proto --- .../livekit-rtc/src/proto/audio_frame_pb.ts | 1716 +++++-- packages/livekit-rtc/src/proto/e2ee_pb.ts | 1195 +++-- packages/livekit-rtc/src/proto/ffi_pb.ts | 557 +- packages/livekit-rtc/src/proto/handle_pb.ts | 52 +- .../livekit-rtc/src/proto/participant_pb.ts | 233 +- packages/livekit-rtc/src/proto/room_pb.ts | 4491 ++++++++++++----- packages/livekit-rtc/src/proto/rpc_pb.ts | 487 +- packages/livekit-rtc/src/proto/stats_pb.ts | 2770 ++++++---- packages/livekit-rtc/src/proto/track_pb.ts | 840 ++- .../src/proto/track_publication_pb.ts | 167 +- .../livekit-rtc/src/proto/video_frame_pb.ts | 1255 +++-- 11 files changed, 9779 insertions(+), 3984 deletions(-) diff --git a/packages/livekit-rtc/src/proto/audio_frame_pb.ts b/packages/livekit-rtc/src/proto/audio_frame_pb.ts index ef6d5609..d83352e6 100644 --- a/packages/livekit-rtc/src/proto/audio_frame_pb.ts +++ b/packages/livekit-rtc/src/proto/audio_frame_pb.ts @@ -12,23 +12,165 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file audio_frame.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { FfiOwnedHandle } from "./handle_pb.js"; -import { file_handle } from "./handle_pb.js"; -import type { TrackSource } from "./track_pb.js"; -import { file_track } from "./track_pb.js"; -import type { Message } from "@bufbuild/protobuf"; +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; +import { TrackSource } from "./track_pbjs"; +import { FfiOwnedHandle } from "./handle_pbjs"; /** - * Describes the file audio_frame.proto. + * @generated from enum livekit.proto.SoxResamplerDataType + */ +export enum SoxResamplerDataType { + /** + * TODO(theomonnom): support other datatypes (shouldn't really be needed) + * + * @generated from enum value: SOXR_DATATYPE_INT16I = 0; + */ + SOXR_DATATYPE_INT16I = 0, + + /** + * @generated from enum value: SOXR_DATATYPE_INT16S = 1; + */ + SOXR_DATATYPE_INT16S = 1, +} +// Retrieve enum metadata with: proto2.getEnumType(SoxResamplerDataType) +proto2.util.setEnumType(SoxResamplerDataType, "livekit.proto.SoxResamplerDataType", [ + { no: 0, name: "SOXR_DATATYPE_INT16I" }, + { no: 1, name: "SOXR_DATATYPE_INT16S" }, +]); + +/** + * @generated from enum livekit.proto.SoxQualityRecipe + */ +export enum SoxQualityRecipe { + /** + * @generated from enum value: SOXR_QUALITY_QUICK = 0; + */ + SOXR_QUALITY_QUICK = 0, + + /** + * @generated from enum value: SOXR_QUALITY_LOW = 1; + */ + SOXR_QUALITY_LOW = 1, + + /** + * @generated from enum value: SOXR_QUALITY_MEDIUM = 2; + */ + SOXR_QUALITY_MEDIUM = 2, + + /** + * @generated from enum value: SOXR_QUALITY_HIGH = 3; + */ + SOXR_QUALITY_HIGH = 3, + + /** + * @generated from enum value: SOXR_QUALITY_VERYHIGH = 4; + */ + SOXR_QUALITY_VERYHIGH = 4, +} +// Retrieve enum metadata with: proto2.getEnumType(SoxQualityRecipe) +proto2.util.setEnumType(SoxQualityRecipe, "livekit.proto.SoxQualityRecipe", [ + { no: 0, name: "SOXR_QUALITY_QUICK" }, + { no: 1, name: "SOXR_QUALITY_LOW" }, + { no: 2, name: "SOXR_QUALITY_MEDIUM" }, + { no: 3, name: "SOXR_QUALITY_HIGH" }, + { no: 4, name: "SOXR_QUALITY_VERYHIGH" }, +]); + +/** + * @generated from enum livekit.proto.SoxFlagBits */ -export const file_audio_frame: GenFile = /*@__PURE__*/ - fileDesc("ChFhdWRpb19mcmFtZS5wcm90bxINbGl2ZWtpdC5wcm90byKGAQoVTmV3QXVkaW9TdHJlYW1SZXF1ZXN0EhQKDHRyYWNrX2hhbmRsZRgBIAIoBBIsCgR0eXBlGAIgAigOMh4ubGl2ZWtpdC5wcm90by5BdWRpb1N0cmVhbVR5cGUSEwoLc2FtcGxlX3JhdGUYAyABKA0SFAoMbnVtX2NoYW5uZWxzGAQgASgNIkkKFk5ld0F1ZGlvU3RyZWFtUmVzcG9uc2USLwoGc3RyZWFtGAEgAigLMh8ubGl2ZWtpdC5wcm90by5Pd25lZEF1ZGlvU3RyZWFtIsoBCiFBdWRpb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlcXVlc3QSGgoScGFydGljaXBhbnRfaGFuZGxlGAEgAigEEiwKBHR5cGUYAiACKA4yHi5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtVHlwZRIwCgx0cmFja19zb3VyY2UYAyABKA4yGi5saXZla2l0LnByb3RvLlRyYWNrU291cmNlEhMKC3NhbXBsZV9yYXRlGAUgASgNEhQKDG51bV9jaGFubmVscxgGIAEoDSJVCiJBdWRpb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlc3BvbnNlEi8KBnN0cmVhbRgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRBdWRpb1N0cmVhbSK7AQoVTmV3QXVkaW9Tb3VyY2VSZXF1ZXN0EiwKBHR5cGUYASACKA4yHi5saXZla2l0LnByb3RvLkF1ZGlvU291cmNlVHlwZRIyCgdvcHRpb25zGAIgASgLMiEubGl2ZWtpdC5wcm90by5BdWRpb1NvdXJjZU9wdGlvbnMSEwoLc2FtcGxlX3JhdGUYAyACKA0SFAoMbnVtX2NoYW5uZWxzGAQgAigNEhUKDXF1ZXVlX3NpemVfbXMYBSABKA0iSQoWTmV3QXVkaW9Tb3VyY2VSZXNwb25zZRIvCgZzb3VyY2UYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkQXVkaW9Tb3VyY2UiZgoYQ2FwdHVyZUF1ZGlvRnJhbWVSZXF1ZXN0EhUKDXNvdXJjZV9oYW5kbGUYASACKAQSMwoGYnVmZmVyGAIgAigLMiMubGl2ZWtpdC5wcm90by5BdWRpb0ZyYW1lQnVmZmVySW5mbyItChlDYXB0dXJlQXVkaW9GcmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjwKGUNhcHR1cmVBdWRpb0ZyYW1lQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkiMAoXQ2xlYXJBdWRpb0J1ZmZlclJlcXVlc3QSFQoNc291cmNlX2hhbmRsZRgBIAIoBCIaChhDbGVhckF1ZGlvQnVmZmVyUmVzcG9uc2UiGgoYTmV3QXVkaW9SZXNhbXBsZXJSZXF1ZXN0IlIKGU5ld0F1ZGlvUmVzYW1wbGVyUmVzcG9uc2USNQoJcmVzYW1wbGVyGAEgAigLMiIubGl2ZWtpdC5wcm90by5Pd25lZEF1ZGlvUmVzYW1wbGVyIpMBChdSZW1peEFuZFJlc2FtcGxlUmVxdWVzdBIYChByZXNhbXBsZXJfaGFuZGxlGAEgAigEEjMKBmJ1ZmZlchgCIAIoCzIjLmxpdmVraXQucHJvdG8uQXVkaW9GcmFtZUJ1ZmZlckluZm8SFAoMbnVtX2NoYW5uZWxzGAMgAigNEhMKC3NhbXBsZV9yYXRlGAQgAigNIlAKGFJlbWl4QW5kUmVzYW1wbGVSZXNwb25zZRI0CgZidWZmZXIYASACKAsyJC5saXZla2l0LnByb3RvLk93bmVkQXVkaW9GcmFtZUJ1ZmZlciKcAgoWTmV3U294UmVzYW1wbGVyUmVxdWVzdBISCgppbnB1dF9yYXRlGAEgAigBEhMKC291dHB1dF9yYXRlGAIgAigBEhQKDG51bV9jaGFubmVscxgDIAIoDRI8Cg9pbnB1dF9kYXRhX3R5cGUYBCACKA4yIy5saXZla2l0LnByb3RvLlNveFJlc2FtcGxlckRhdGFUeXBlEj0KEG91dHB1dF9kYXRhX3R5cGUYBSACKA4yIy5saXZla2l0LnByb3RvLlNveFJlc2FtcGxlckRhdGFUeXBlEjcKDnF1YWxpdHlfcmVjaXBlGAYgAigOMh8ubGl2ZWtpdC5wcm90by5Tb3hRdWFsaXR5UmVjaXBlEg0KBWZsYWdzGAcgASgNImwKF05ld1NveFJlc2FtcGxlclJlc3BvbnNlEjUKCXJlc2FtcGxlchgBIAEoCzIgLmxpdmVraXQucHJvdG8uT3duZWRTb3hSZXNhbXBsZXJIABIPCgVlcnJvchgCIAEoCUgAQgkKB21lc3NhZ2UiUwoXUHVzaFNveFJlc2FtcGxlclJlcXVlc3QSGAoQcmVzYW1wbGVyX2hhbmRsZRgBIAIoBBIQCghkYXRhX3B0chgCIAIoBBIMCgRzaXplGAMgAigNIksKGFB1c2hTb3hSZXNhbXBsZXJSZXNwb25zZRISCgpvdXRwdXRfcHRyGAEgAigEEgwKBHNpemUYAiACKA0SDQoFZXJyb3IYAyABKAkiNAoYRmx1c2hTb3hSZXNhbXBsZXJSZXF1ZXN0EhgKEHJlc2FtcGxlcl9oYW5kbGUYASACKAQiTAoZRmx1c2hTb3hSZXNhbXBsZXJSZXNwb25zZRISCgpvdXRwdXRfcHRyGAEgAigEEgwKBHNpemUYAiACKA0SDQoFZXJyb3IYAyABKAkicAoUQXVkaW9GcmFtZUJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSFAoMbnVtX2NoYW5uZWxzGAIgAigNEhMKC3NhbXBsZV9yYXRlGAMgAigNEhsKE3NhbXBsZXNfcGVyX2NoYW5uZWwYBCACKA0ieQoVT3duZWRBdWRpb0ZyYW1lQnVmZmVyEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSMQoEaW5mbxgCIAIoCzIjLmxpdmVraXQucHJvdG8uQXVkaW9GcmFtZUJ1ZmZlckluZm8iPwoPQXVkaW9TdHJlYW1JbmZvEiwKBHR5cGUYASACKA4yHi5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtVHlwZSJvChBPd25lZEF1ZGlvU3RyZWFtEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSLAoEaW5mbxgCIAIoCzIeLmxpdmVraXQucHJvdG8uQXVkaW9TdHJlYW1JbmZvIp8BChBBdWRpb1N0cmVhbUV2ZW50EhUKDXN0cmVhbV9oYW5kbGUYASACKAQSOwoOZnJhbWVfcmVjZWl2ZWQYAiABKAsyIS5saXZla2l0LnByb3RvLkF1ZGlvRnJhbWVSZWNlaXZlZEgAEiwKA2VvcxgDIAEoCzIdLmxpdmVraXQucHJvdG8uQXVkaW9TdHJlYW1FT1NIAEIJCgdtZXNzYWdlIkkKEkF1ZGlvRnJhbWVSZWNlaXZlZBIzCgVmcmFtZRgBIAIoCzIkLmxpdmVraXQucHJvdG8uT3duZWRBdWRpb0ZyYW1lQnVmZmVyIhAKDkF1ZGlvU3RyZWFtRU9TImUKEkF1ZGlvU291cmNlT3B0aW9ucxIZChFlY2hvX2NhbmNlbGxhdGlvbhgBIAIoCBIZChFub2lzZV9zdXBwcmVzc2lvbhgCIAIoCBIZChFhdXRvX2dhaW5fY29udHJvbBgDIAIoCCI/Cg9BdWRpb1NvdXJjZUluZm8SLAoEdHlwZRgCIAIoDjIeLmxpdmVraXQucHJvdG8uQXVkaW9Tb3VyY2VUeXBlIm8KEE93bmVkQXVkaW9Tb3VyY2USLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIsCgRpbmZvGAIgAigLMh4ubGl2ZWtpdC5wcm90by5BdWRpb1NvdXJjZUluZm8iFAoSQXVkaW9SZXNhbXBsZXJJbmZvInUKE093bmVkQXVkaW9SZXNhbXBsZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIvCgRpbmZvGAIgAigLMiEubGl2ZWtpdC5wcm90by5BdWRpb1Jlc2FtcGxlckluZm8iEgoQU294UmVzYW1wbGVySW5mbyJxChFPd25lZFNveFJlc2FtcGxlchItCgZoYW5kbGUYASACKAsyHS5saXZla2l0LnByb3RvLkZmaU93bmVkSGFuZGxlEi0KBGluZm8YAiACKAsyHy5saXZla2l0LnByb3RvLlNveFJlc2FtcGxlckluZm8qSgoUU294UmVzYW1wbGVyRGF0YVR5cGUSGAoUU09YUl9EQVRBVFlQRV9JTlQxNkkQABIYChRTT1hSX0RBVEFUWVBFX0lOVDE2UxABKosBChBTb3hRdWFsaXR5UmVjaXBlEhYKElNPWFJfUVVBTElUWV9RVUlDSxAAEhQKEFNPWFJfUVVBTElUWV9MT1cQARIXChNTT1hSX1FVQUxJVFlfTUVESVVNEAISFQoRU09YUl9RVUFMSVRZX0hJR0gQAxIZChVTT1hSX1FVQUxJVFlfVkVSWUhJR0gQBCqXAQoLU294RmxhZ0JpdHMSFgoSU09YUl9ST0xMT0ZGX1NNQUxMEAASFwoTU09YUl9ST0xMT0ZGX01FRElVTRABEhUKEVNPWFJfUk9MTE9GRl9OT05FEAISGAoUU09YUl9ISUdIX1BSRUNfQ0xPQ0sQAxIZChVTT1hSX0RPVUJMRV9QUkVDSVNJT04QBBILCgdTT1hSX1ZSEAUqQQoPQXVkaW9TdHJlYW1UeXBlEhcKE0FVRElPX1NUUkVBTV9OQVRJVkUQABIVChFBVURJT19TVFJFQU1fSFRNTBABKioKD0F1ZGlvU291cmNlVHlwZRIXChNBVURJT19TT1VSQ0VfTkFUSVZFEABCEKoCDUxpdmVLaXQuUHJvdG8", [file_handle, file_track]); +export enum SoxFlagBits { + /** + * 1 << 0 + * + * @generated from enum value: SOXR_ROLLOFF_SMALL = 0; + */ + SOXR_ROLLOFF_SMALL = 0, + + /** + * 1 << 1 + * + * @generated from enum value: SOXR_ROLLOFF_MEDIUM = 1; + */ + SOXR_ROLLOFF_MEDIUM = 1, + + /** + * 1 << 2 + * + * @generated from enum value: SOXR_ROLLOFF_NONE = 2; + */ + SOXR_ROLLOFF_NONE = 2, + + /** + * 1 << 3 + * + * @generated from enum value: SOXR_HIGH_PREC_CLOCK = 3; + */ + SOXR_HIGH_PREC_CLOCK = 3, + + /** + * 1 << 4 + * + * @generated from enum value: SOXR_DOUBLE_PRECISION = 4; + */ + SOXR_DOUBLE_PRECISION = 4, + + /** + * 1 << 5 + * + * @generated from enum value: SOXR_VR = 5; + */ + SOXR_VR = 5, +} +// Retrieve enum metadata with: proto2.getEnumType(SoxFlagBits) +proto2.util.setEnumType(SoxFlagBits, "livekit.proto.SoxFlagBits", [ + { no: 0, name: "SOXR_ROLLOFF_SMALL" }, + { no: 1, name: "SOXR_ROLLOFF_MEDIUM" }, + { no: 2, name: "SOXR_ROLLOFF_NONE" }, + { no: 3, name: "SOXR_HIGH_PREC_CLOCK" }, + { no: 4, name: "SOXR_DOUBLE_PRECISION" }, + { no: 5, name: "SOXR_VR" }, +]); + +/** + * @generated from enum livekit.proto.AudioStreamType + */ +export enum AudioStreamType { + /** + * @generated from enum value: AUDIO_STREAM_NATIVE = 0; + */ + AUDIO_STREAM_NATIVE = 0, + + /** + * @generated from enum value: AUDIO_STREAM_HTML = 1; + */ + AUDIO_STREAM_HTML = 1, +} +// Retrieve enum metadata with: proto2.getEnumType(AudioStreamType) +proto2.util.setEnumType(AudioStreamType, "livekit.proto.AudioStreamType", [ + { no: 0, name: "AUDIO_STREAM_NATIVE" }, + { no: 1, name: "AUDIO_STREAM_HTML" }, +]); + +/** + * @generated from enum livekit.proto.AudioSourceType + */ +export enum AudioSourceType { + /** + * @generated from enum value: AUDIO_SOURCE_NATIVE = 0; + */ + AUDIO_SOURCE_NATIVE = 0, +} +// Retrieve enum metadata with: proto2.getEnumType(AudioSourceType) +proto2.util.setEnumType(AudioSourceType, "livekit.proto.AudioSourceType", [ + { no: 0, name: "AUDIO_SOURCE_NATIVE" }, +]); /** * Create a new AudioStream @@ -36,116 +178,203 @@ export const file_audio_frame: GenFile = /*@__PURE__*/ * * @generated from message livekit.proto.NewAudioStreamRequest */ -export type NewAudioStreamRequest = Message<"livekit.proto.NewAudioStreamRequest"> & { +export class NewAudioStreamRequest extends Message { /** * @generated from field: required uint64 track_handle = 1; */ - trackHandle: bigint; + trackHandle?: bigint; /** * @generated from field: required livekit.proto.AudioStreamType type = 2; */ - type: AudioStreamType; + type?: AudioStreamType; /** * @generated from field: optional uint32 sample_rate = 3; */ - sampleRate: number; + sampleRate?: number; /** * @generated from field: optional uint32 num_channels = 4; */ - numChannels: number; -}; - -/** - * Describes the message livekit.proto.NewAudioStreamRequest. - * Use `create(NewAudioStreamRequestSchema)` to create a new message. - */ -export const NewAudioStreamRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 0); + numChannels?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewAudioStreamRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "type", kind: "enum", T: proto2.getEnumType(AudioStreamType), req: true }, + { no: 3, name: "sample_rate", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + { no: 4, name: "num_channels", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewAudioStreamRequest { + return new NewAudioStreamRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewAudioStreamRequest { + return new NewAudioStreamRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewAudioStreamRequest { + return new NewAudioStreamRequest().fromJsonString(jsonString, options); + } + + static equals(a: NewAudioStreamRequest | PlainMessage | undefined, b: NewAudioStreamRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(NewAudioStreamRequest, a, b); + } +} /** * @generated from message livekit.proto.NewAudioStreamResponse */ -export type NewAudioStreamResponse = Message<"livekit.proto.NewAudioStreamResponse"> & { +export class NewAudioStreamResponse extends Message { /** * @generated from field: required livekit.proto.OwnedAudioStream stream = 1; */ stream?: OwnedAudioStream; -}; -/** - * Describes the message livekit.proto.NewAudioStreamResponse. - * Use `create(NewAudioStreamResponseSchema)` to create a new message. - */ -export const NewAudioStreamResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewAudioStreamResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream", kind: "message", T: OwnedAudioStream, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewAudioStreamResponse { + return new NewAudioStreamResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewAudioStreamResponse { + return new NewAudioStreamResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewAudioStreamResponse { + return new NewAudioStreamResponse().fromJsonString(jsonString, options); + } + + static equals(a: NewAudioStreamResponse | PlainMessage | undefined, b: NewAudioStreamResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(NewAudioStreamResponse, a, b); + } +} /** * @generated from message livekit.proto.AudioStreamFromParticipantRequest */ -export type AudioStreamFromParticipantRequest = Message<"livekit.proto.AudioStreamFromParticipantRequest"> & { +export class AudioStreamFromParticipantRequest extends Message { /** * @generated from field: required uint64 participant_handle = 1; */ - participantHandle: bigint; + participantHandle?: bigint; /** * @generated from field: required livekit.proto.AudioStreamType type = 2; */ - type: AudioStreamType; + type?: AudioStreamType; /** * @generated from field: optional livekit.proto.TrackSource track_source = 3; */ - trackSource: TrackSource; + trackSource?: TrackSource; /** * @generated from field: optional uint32 sample_rate = 5; */ - sampleRate: number; + sampleRate?: number; /** * @generated from field: optional uint32 num_channels = 6; */ - numChannels: number; -}; - -/** - * Describes the message livekit.proto.AudioStreamFromParticipantRequest. - * Use `create(AudioStreamFromParticipantRequestSchema)` to create a new message. - */ -export const AudioStreamFromParticipantRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 2); + numChannels?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioStreamFromParticipantRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "type", kind: "enum", T: proto2.getEnumType(AudioStreamType), req: true }, + { no: 3, name: "track_source", kind: "enum", T: proto2.getEnumType(TrackSource), opt: true }, + { no: 5, name: "sample_rate", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + { no: 6, name: "num_channels", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioStreamFromParticipantRequest { + return new AudioStreamFromParticipantRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioStreamFromParticipantRequest { + return new AudioStreamFromParticipantRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioStreamFromParticipantRequest { + return new AudioStreamFromParticipantRequest().fromJsonString(jsonString, options); + } + + static equals(a: AudioStreamFromParticipantRequest | PlainMessage | undefined, b: AudioStreamFromParticipantRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioStreamFromParticipantRequest, a, b); + } +} /** * @generated from message livekit.proto.AudioStreamFromParticipantResponse */ -export type AudioStreamFromParticipantResponse = Message<"livekit.proto.AudioStreamFromParticipantResponse"> & { +export class AudioStreamFromParticipantResponse extends Message { /** * @generated from field: required livekit.proto.OwnedAudioStream stream = 1; */ stream?: OwnedAudioStream; -}; -/** - * Describes the message livekit.proto.AudioStreamFromParticipantResponse. - * Use `create(AudioStreamFromParticipantResponseSchema)` to create a new message. - */ -export const AudioStreamFromParticipantResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 3); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioStreamFromParticipantResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream", kind: "message", T: OwnedAudioStream, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioStreamFromParticipantResponse { + return new AudioStreamFromParticipantResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioStreamFromParticipantResponse { + return new AudioStreamFromParticipantResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioStreamFromParticipantResponse { + return new AudioStreamFromParticipantResponse().fromJsonString(jsonString, options); + } + + static equals(a: AudioStreamFromParticipantResponse | PlainMessage | undefined, b: AudioStreamFromParticipantResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioStreamFromParticipantResponse, a, b); + } +} /** * Create a new AudioSource * * @generated from message livekit.proto.NewAudioSourceRequest */ -export type NewAudioSourceRequest = Message<"livekit.proto.NewAudioSourceRequest"> & { +export class NewAudioSourceRequest extends Message { /** * @generated from field: required livekit.proto.AudioSourceType type = 1; */ - type: AudioSourceType; + type?: AudioSourceType; /** * @generated from field: optional livekit.proto.AudioSourceOptions options = 2; @@ -155,42 +384,86 @@ export type NewAudioSourceRequest = Message<"livekit.proto.NewAudioSourceRequest /** * @generated from field: required uint32 sample_rate = 3; */ - sampleRate: number; + sampleRate?: number; /** * @generated from field: required uint32 num_channels = 4; */ - numChannels: number; + numChannels?: number; /** * @generated from field: optional uint32 queue_size_ms = 5; */ - queueSizeMs: number; -}; - -/** - * Describes the message livekit.proto.NewAudioSourceRequest. - * Use `create(NewAudioSourceRequestSchema)` to create a new message. - */ -export const NewAudioSourceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 4); + queueSizeMs?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewAudioSourceRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "type", kind: "enum", T: proto2.getEnumType(AudioSourceType), req: true }, + { no: 2, name: "options", kind: "message", T: AudioSourceOptions, opt: true }, + { no: 3, name: "sample_rate", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 4, name: "num_channels", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 5, name: "queue_size_ms", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewAudioSourceRequest { + return new NewAudioSourceRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewAudioSourceRequest { + return new NewAudioSourceRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewAudioSourceRequest { + return new NewAudioSourceRequest().fromJsonString(jsonString, options); + } + + static equals(a: NewAudioSourceRequest | PlainMessage | undefined, b: NewAudioSourceRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(NewAudioSourceRequest, a, b); + } +} /** * @generated from message livekit.proto.NewAudioSourceResponse */ -export type NewAudioSourceResponse = Message<"livekit.proto.NewAudioSourceResponse"> & { +export class NewAudioSourceResponse extends Message { /** * @generated from field: required livekit.proto.OwnedAudioSource source = 1; */ source?: OwnedAudioSource; -}; -/** - * Describes the message livekit.proto.NewAudioSourceResponse. - * Use `create(NewAudioSourceResponseSchema)` to create a new message. - */ -export const NewAudioSourceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 5); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewAudioSourceResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "source", kind: "message", T: OwnedAudioSource, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewAudioSourceResponse { + return new NewAudioSourceResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewAudioSourceResponse { + return new NewAudioSourceResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewAudioSourceResponse { + return new NewAudioSourceResponse().fromJsonString(jsonString, options); + } + + static equals(a: NewAudioSourceResponse | PlainMessage | undefined, b: NewAudioSourceResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(NewAudioSourceResponse, a, b); + } +} /** * Push a frame to an AudioSource @@ -198,136 +471,274 @@ export const NewAudioSourceResponseSchema: GenMessage = * * @generated from message livekit.proto.CaptureAudioFrameRequest */ -export type CaptureAudioFrameRequest = Message<"livekit.proto.CaptureAudioFrameRequest"> & { +export class CaptureAudioFrameRequest extends Message { /** * @generated from field: required uint64 source_handle = 1; */ - sourceHandle: bigint; + sourceHandle?: bigint; /** * @generated from field: required livekit.proto.AudioFrameBufferInfo buffer = 2; */ buffer?: AudioFrameBufferInfo; -}; -/** - * Describes the message livekit.proto.CaptureAudioFrameRequest. - * Use `create(CaptureAudioFrameRequestSchema)` to create a new message. - */ -export const CaptureAudioFrameRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 6); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CaptureAudioFrameRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "source_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "buffer", kind: "message", T: AudioFrameBufferInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CaptureAudioFrameRequest { + return new CaptureAudioFrameRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CaptureAudioFrameRequest { + return new CaptureAudioFrameRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CaptureAudioFrameRequest { + return new CaptureAudioFrameRequest().fromJsonString(jsonString, options); + } + + static equals(a: CaptureAudioFrameRequest | PlainMessage | undefined, b: CaptureAudioFrameRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(CaptureAudioFrameRequest, a, b); + } +} /** * @generated from message livekit.proto.CaptureAudioFrameResponse */ -export type CaptureAudioFrameResponse = Message<"livekit.proto.CaptureAudioFrameResponse"> & { +export class CaptureAudioFrameResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.CaptureAudioFrameResponse. - * Use `create(CaptureAudioFrameResponseSchema)` to create a new message. - */ -export const CaptureAudioFrameResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 7); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CaptureAudioFrameResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CaptureAudioFrameResponse { + return new CaptureAudioFrameResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CaptureAudioFrameResponse { + return new CaptureAudioFrameResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CaptureAudioFrameResponse { + return new CaptureAudioFrameResponse().fromJsonString(jsonString, options); + } + + static equals(a: CaptureAudioFrameResponse | PlainMessage | undefined, b: CaptureAudioFrameResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(CaptureAudioFrameResponse, a, b); + } +} /** * @generated from message livekit.proto.CaptureAudioFrameCallback */ -export type CaptureAudioFrameCallback = Message<"livekit.proto.CaptureAudioFrameCallback"> & { +export class CaptureAudioFrameCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.CaptureAudioFrameCallback. - * Use `create(CaptureAudioFrameCallbackSchema)` to create a new message. - */ -export const CaptureAudioFrameCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 8); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CaptureAudioFrameCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CaptureAudioFrameCallback { + return new CaptureAudioFrameCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CaptureAudioFrameCallback { + return new CaptureAudioFrameCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CaptureAudioFrameCallback { + return new CaptureAudioFrameCallback().fromJsonString(jsonString, options); + } + + static equals(a: CaptureAudioFrameCallback | PlainMessage | undefined, b: CaptureAudioFrameCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(CaptureAudioFrameCallback, a, b); + } +} /** * @generated from message livekit.proto.ClearAudioBufferRequest */ -export type ClearAudioBufferRequest = Message<"livekit.proto.ClearAudioBufferRequest"> & { +export class ClearAudioBufferRequest extends Message { /** * @generated from field: required uint64 source_handle = 1; */ - sourceHandle: bigint; -}; + sourceHandle?: bigint; -/** - * Describes the message livekit.proto.ClearAudioBufferRequest. - * Use `create(ClearAudioBufferRequestSchema)` to create a new message. - */ -export const ClearAudioBufferRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 9); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ClearAudioBufferRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "source_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ClearAudioBufferRequest { + return new ClearAudioBufferRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ClearAudioBufferRequest { + return new ClearAudioBufferRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ClearAudioBufferRequest { + return new ClearAudioBufferRequest().fromJsonString(jsonString, options); + } + + static equals(a: ClearAudioBufferRequest | PlainMessage | undefined, b: ClearAudioBufferRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(ClearAudioBufferRequest, a, b); + } +} /** * @generated from message livekit.proto.ClearAudioBufferResponse */ -export type ClearAudioBufferResponse = Message<"livekit.proto.ClearAudioBufferResponse"> & { -}; +export class ClearAudioBufferResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.ClearAudioBufferResponse. - * Use `create(ClearAudioBufferResponseSchema)` to create a new message. - */ -export const ClearAudioBufferResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 10); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ClearAudioBufferResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ClearAudioBufferResponse { + return new ClearAudioBufferResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ClearAudioBufferResponse { + return new ClearAudioBufferResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ClearAudioBufferResponse { + return new ClearAudioBufferResponse().fromJsonString(jsonString, options); + } + + static equals(a: ClearAudioBufferResponse | PlainMessage | undefined, b: ClearAudioBufferResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(ClearAudioBufferResponse, a, b); + } +} /** * Create a new AudioResampler * * @generated from message livekit.proto.NewAudioResamplerRequest */ -export type NewAudioResamplerRequest = Message<"livekit.proto.NewAudioResamplerRequest"> & { -}; +export class NewAudioResamplerRequest extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.NewAudioResamplerRequest. - * Use `create(NewAudioResamplerRequestSchema)` to create a new message. - */ -export const NewAudioResamplerRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 11); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewAudioResamplerRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewAudioResamplerRequest { + return new NewAudioResamplerRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewAudioResamplerRequest { + return new NewAudioResamplerRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewAudioResamplerRequest { + return new NewAudioResamplerRequest().fromJsonString(jsonString, options); + } + + static equals(a: NewAudioResamplerRequest | PlainMessage | undefined, b: NewAudioResamplerRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(NewAudioResamplerRequest, a, b); + } +} /** * @generated from message livekit.proto.NewAudioResamplerResponse */ -export type NewAudioResamplerResponse = Message<"livekit.proto.NewAudioResamplerResponse"> & { +export class NewAudioResamplerResponse extends Message { /** * @generated from field: required livekit.proto.OwnedAudioResampler resampler = 1; */ resampler?: OwnedAudioResampler; -}; -/** - * Describes the message livekit.proto.NewAudioResamplerResponse. - * Use `create(NewAudioResamplerResponseSchema)` to create a new message. - */ -export const NewAudioResamplerResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 12); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewAudioResamplerResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "resampler", kind: "message", T: OwnedAudioResampler, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewAudioResamplerResponse { + return new NewAudioResamplerResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewAudioResamplerResponse { + return new NewAudioResamplerResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewAudioResamplerResponse { + return new NewAudioResamplerResponse().fromJsonString(jsonString, options); + } + + static equals(a: NewAudioResamplerResponse | PlainMessage | undefined, b: NewAudioResamplerResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(NewAudioResamplerResponse, a, b); + } +} /** * Remix and resample an audio frame * * @generated from message livekit.proto.RemixAndResampleRequest */ -export type RemixAndResampleRequest = Message<"livekit.proto.RemixAndResampleRequest"> & { +export class RemixAndResampleRequest extends Message { /** * @generated from field: required uint64 resampler_handle = 1; */ - resamplerHandle: bigint; + resamplerHandle?: bigint; /** * @generated from field: required livekit.proto.AudioFrameBufferInfo buffer = 2; @@ -337,89 +748,158 @@ export type RemixAndResampleRequest = Message<"livekit.proto.RemixAndResampleReq /** * @generated from field: required uint32 num_channels = 3; */ - numChannels: number; + numChannels?: number; /** * @generated from field: required uint32 sample_rate = 4; */ - sampleRate: number; -}; - -/** - * Describes the message livekit.proto.RemixAndResampleRequest. - * Use `create(RemixAndResampleRequestSchema)` to create a new message. - */ -export const RemixAndResampleRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 13); + sampleRate?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RemixAndResampleRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "resampler_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "buffer", kind: "message", T: AudioFrameBufferInfo, req: true }, + { no: 3, name: "num_channels", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 4, name: "sample_rate", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RemixAndResampleRequest { + return new RemixAndResampleRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RemixAndResampleRequest { + return new RemixAndResampleRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RemixAndResampleRequest { + return new RemixAndResampleRequest().fromJsonString(jsonString, options); + } + + static equals(a: RemixAndResampleRequest | PlainMessage | undefined, b: RemixAndResampleRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(RemixAndResampleRequest, a, b); + } +} /** * @generated from message livekit.proto.RemixAndResampleResponse */ -export type RemixAndResampleResponse = Message<"livekit.proto.RemixAndResampleResponse"> & { +export class RemixAndResampleResponse extends Message { /** * @generated from field: required livekit.proto.OwnedAudioFrameBuffer buffer = 1; */ buffer?: OwnedAudioFrameBuffer; -}; -/** - * Describes the message livekit.proto.RemixAndResampleResponse. - * Use `create(RemixAndResampleResponseSchema)` to create a new message. - */ -export const RemixAndResampleResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 14); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RemixAndResampleResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "buffer", kind: "message", T: OwnedAudioFrameBuffer, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RemixAndResampleResponse { + return new RemixAndResampleResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RemixAndResampleResponse { + return new RemixAndResampleResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RemixAndResampleResponse { + return new RemixAndResampleResponse().fromJsonString(jsonString, options); + } + + static equals(a: RemixAndResampleResponse | PlainMessage | undefined, b: RemixAndResampleResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(RemixAndResampleResponse, a, b); + } +} /** * @generated from message livekit.proto.NewSoxResamplerRequest */ -export type NewSoxResamplerRequest = Message<"livekit.proto.NewSoxResamplerRequest"> & { +export class NewSoxResamplerRequest extends Message { /** * @generated from field: required double input_rate = 1; */ - inputRate: number; + inputRate?: number; /** * @generated from field: required double output_rate = 2; */ - outputRate: number; + outputRate?: number; /** * @generated from field: required uint32 num_channels = 3; */ - numChannels: number; + numChannels?: number; /** * @generated from field: required livekit.proto.SoxResamplerDataType input_data_type = 4; */ - inputDataType: SoxResamplerDataType; + inputDataType?: SoxResamplerDataType; /** * @generated from field: required livekit.proto.SoxResamplerDataType output_data_type = 5; */ - outputDataType: SoxResamplerDataType; + outputDataType?: SoxResamplerDataType; /** * @generated from field: required livekit.proto.SoxQualityRecipe quality_recipe = 6; */ - qualityRecipe: SoxQualityRecipe; + qualityRecipe?: SoxQualityRecipe; /** * @generated from field: optional uint32 flags = 7; */ - flags: number; -}; - -/** - * Describes the message livekit.proto.NewSoxResamplerRequest. - * Use `create(NewSoxResamplerRequestSchema)` to create a new message. - */ -export const NewSoxResamplerRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 15); + flags?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewSoxResamplerRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "input_rate", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 2, name: "output_rate", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 3, name: "num_channels", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 4, name: "input_data_type", kind: "enum", T: proto2.getEnumType(SoxResamplerDataType), req: true }, + { no: 5, name: "output_data_type", kind: "enum", T: proto2.getEnumType(SoxResamplerDataType), req: true }, + { no: 6, name: "quality_recipe", kind: "enum", T: proto2.getEnumType(SoxQualityRecipe), req: true }, + { no: 7, name: "flags", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewSoxResamplerRequest { + return new NewSoxResamplerRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewSoxResamplerRequest { + return new NewSoxResamplerRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewSoxResamplerRequest { + return new NewSoxResamplerRequest().fromJsonString(jsonString, options); + } + + static equals(a: NewSoxResamplerRequest | PlainMessage | undefined, b: NewSoxResamplerRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(NewSoxResamplerRequest, a, b); + } +} /** * @generated from message livekit.proto.NewSoxResamplerResponse */ -export type NewSoxResamplerResponse = Message<"livekit.proto.NewSoxResamplerResponse"> & { +export class NewSoxResamplerResponse extends Message { /** * @generated from oneof livekit.proto.NewSoxResamplerResponse.message */ @@ -435,164 +915,294 @@ export type NewSoxResamplerResponse = Message<"livekit.proto.NewSoxResamplerResp */ value: string; case: "error"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.NewSoxResamplerResponse. - * Use `create(NewSoxResamplerResponseSchema)` to create a new message. - */ -export const NewSoxResamplerResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 16); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewSoxResamplerResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "resampler", kind: "message", T: OwnedSoxResampler, oneof: "message" }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewSoxResamplerResponse { + return new NewSoxResamplerResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewSoxResamplerResponse { + return new NewSoxResamplerResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewSoxResamplerResponse { + return new NewSoxResamplerResponse().fromJsonString(jsonString, options); + } + + static equals(a: NewSoxResamplerResponse | PlainMessage | undefined, b: NewSoxResamplerResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(NewSoxResamplerResponse, a, b); + } +} /** * @generated from message livekit.proto.PushSoxResamplerRequest */ -export type PushSoxResamplerRequest = Message<"livekit.proto.PushSoxResamplerRequest"> & { +export class PushSoxResamplerRequest extends Message { /** * @generated from field: required uint64 resampler_handle = 1; */ - resamplerHandle: bigint; + resamplerHandle?: bigint; /** * *const i16 * * @generated from field: required uint64 data_ptr = 2; */ - dataPtr: bigint; + dataPtr?: bigint; /** * in bytes * * @generated from field: required uint32 size = 3; */ - size: number; -}; + size?: number; -/** - * Describes the message livekit.proto.PushSoxResamplerRequest. - * Use `create(PushSoxResamplerRequestSchema)` to create a new message. - */ -export const PushSoxResamplerRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 17); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PushSoxResamplerRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "resampler_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "data_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 3, name: "size", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PushSoxResamplerRequest { + return new PushSoxResamplerRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PushSoxResamplerRequest { + return new PushSoxResamplerRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PushSoxResamplerRequest { + return new PushSoxResamplerRequest().fromJsonString(jsonString, options); + } + + static equals(a: PushSoxResamplerRequest | PlainMessage | undefined, b: PushSoxResamplerRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(PushSoxResamplerRequest, a, b); + } +} /** * @generated from message livekit.proto.PushSoxResamplerResponse */ -export type PushSoxResamplerResponse = Message<"livekit.proto.PushSoxResamplerResponse"> & { +export class PushSoxResamplerResponse extends Message { /** * *const i16 (could be null) * * @generated from field: required uint64 output_ptr = 1; */ - outputPtr: bigint; + outputPtr?: bigint; /** * in bytes * * @generated from field: required uint32 size = 2; */ - size: number; + size?: number; /** * @generated from field: optional string error = 3; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.PushSoxResamplerResponse. - * Use `create(PushSoxResamplerResponseSchema)` to create a new message. - */ -export const PushSoxResamplerResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 18); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PushSoxResamplerResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "output_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "size", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PushSoxResamplerResponse { + return new PushSoxResamplerResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PushSoxResamplerResponse { + return new PushSoxResamplerResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PushSoxResamplerResponse { + return new PushSoxResamplerResponse().fromJsonString(jsonString, options); + } + + static equals(a: PushSoxResamplerResponse | PlainMessage | undefined, b: PushSoxResamplerResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(PushSoxResamplerResponse, a, b); + } +} /** * @generated from message livekit.proto.FlushSoxResamplerRequest */ -export type FlushSoxResamplerRequest = Message<"livekit.proto.FlushSoxResamplerRequest"> & { +export class FlushSoxResamplerRequest extends Message { /** * @generated from field: required uint64 resampler_handle = 1; */ - resamplerHandle: bigint; -}; + resamplerHandle?: bigint; -/** - * Describes the message livekit.proto.FlushSoxResamplerRequest. - * Use `create(FlushSoxResamplerRequestSchema)` to create a new message. - */ -export const FlushSoxResamplerRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 19); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FlushSoxResamplerRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "resampler_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FlushSoxResamplerRequest { + return new FlushSoxResamplerRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FlushSoxResamplerRequest { + return new FlushSoxResamplerRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FlushSoxResamplerRequest { + return new FlushSoxResamplerRequest().fromJsonString(jsonString, options); + } + + static equals(a: FlushSoxResamplerRequest | PlainMessage | undefined, b: FlushSoxResamplerRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(FlushSoxResamplerRequest, a, b); + } +} /** * @generated from message livekit.proto.FlushSoxResamplerResponse */ -export type FlushSoxResamplerResponse = Message<"livekit.proto.FlushSoxResamplerResponse"> & { +export class FlushSoxResamplerResponse extends Message { /** * *const i16 (could be null) * * @generated from field: required uint64 output_ptr = 1; */ - outputPtr: bigint; + outputPtr?: bigint; /** * in bytes * * @generated from field: required uint32 size = 2; */ - size: number; + size?: number; /** * @generated from field: optional string error = 3; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.FlushSoxResamplerResponse. - * Use `create(FlushSoxResamplerResponseSchema)` to create a new message. - */ -export const FlushSoxResamplerResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 20); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FlushSoxResamplerResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "output_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "size", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FlushSoxResamplerResponse { + return new FlushSoxResamplerResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FlushSoxResamplerResponse { + return new FlushSoxResamplerResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FlushSoxResamplerResponse { + return new FlushSoxResamplerResponse().fromJsonString(jsonString, options); + } + + static equals(a: FlushSoxResamplerResponse | PlainMessage | undefined, b: FlushSoxResamplerResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(FlushSoxResamplerResponse, a, b); + } +} /** * @generated from message livekit.proto.AudioFrameBufferInfo */ -export type AudioFrameBufferInfo = Message<"livekit.proto.AudioFrameBufferInfo"> & { +export class AudioFrameBufferInfo extends Message { /** * *const i16 * * @generated from field: required uint64 data_ptr = 1; */ - dataPtr: bigint; + dataPtr?: bigint; /** * @generated from field: required uint32 num_channels = 2; */ - numChannels: number; + numChannels?: number; /** * @generated from field: required uint32 sample_rate = 3; */ - sampleRate: number; + sampleRate?: number; /** * @generated from field: required uint32 samples_per_channel = 4; */ - samplesPerChannel: number; -}; - -/** - * Describes the message livekit.proto.AudioFrameBufferInfo. - * Use `create(AudioFrameBufferInfoSchema)` to create a new message. - */ -export const AudioFrameBufferInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 21); + samplesPerChannel?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioFrameBufferInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "data_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "num_channels", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "sample_rate", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 4, name: "samples_per_channel", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioFrameBufferInfo { + return new AudioFrameBufferInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioFrameBufferInfo { + return new AudioFrameBufferInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioFrameBufferInfo { + return new AudioFrameBufferInfo().fromJsonString(jsonString, options); + } + + static equals(a: AudioFrameBufferInfo | PlainMessage | undefined, b: AudioFrameBufferInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioFrameBufferInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedAudioFrameBuffer */ -export type OwnedAudioFrameBuffer = Message<"livekit.proto.OwnedAudioFrameBuffer"> & { +export class OwnedAudioFrameBuffer extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -602,36 +1212,77 @@ export type OwnedAudioFrameBuffer = Message<"livekit.proto.OwnedAudioFrameBuffer * @generated from field: required livekit.proto.AudioFrameBufferInfo info = 2; */ info?: AudioFrameBufferInfo; -}; -/** - * Describes the message livekit.proto.OwnedAudioFrameBuffer. - * Use `create(OwnedAudioFrameBufferSchema)` to create a new message. - */ -export const OwnedAudioFrameBufferSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 22); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedAudioFrameBuffer"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: AudioFrameBufferInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedAudioFrameBuffer { + return new OwnedAudioFrameBuffer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedAudioFrameBuffer { + return new OwnedAudioFrameBuffer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedAudioFrameBuffer { + return new OwnedAudioFrameBuffer().fromJsonString(jsonString, options); + } + + static equals(a: OwnedAudioFrameBuffer | PlainMessage | undefined, b: OwnedAudioFrameBuffer | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedAudioFrameBuffer, a, b); + } +} /** * @generated from message livekit.proto.AudioStreamInfo */ -export type AudioStreamInfo = Message<"livekit.proto.AudioStreamInfo"> & { +export class AudioStreamInfo extends Message { /** * @generated from field: required livekit.proto.AudioStreamType type = 1; */ - type: AudioStreamType; -}; + type?: AudioStreamType; -/** - * Describes the message livekit.proto.AudioStreamInfo. - * Use `create(AudioStreamInfoSchema)` to create a new message. - */ -export const AudioStreamInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 23); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioStreamInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "type", kind: "enum", T: proto2.getEnumType(AudioStreamType), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioStreamInfo { + return new AudioStreamInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioStreamInfo { + return new AudioStreamInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioStreamInfo { + return new AudioStreamInfo().fromJsonString(jsonString, options); + } + + static equals(a: AudioStreamInfo | PlainMessage | undefined, b: AudioStreamInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioStreamInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedAudioStream */ -export type OwnedAudioStream = Message<"livekit.proto.OwnedAudioStream"> & { +export class OwnedAudioStream extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -641,23 +1292,44 @@ export type OwnedAudioStream = Message<"livekit.proto.OwnedAudioStream"> & { * @generated from field: required livekit.proto.AudioStreamInfo info = 2; */ info?: AudioStreamInfo; -}; -/** - * Describes the message livekit.proto.OwnedAudioStream. - * Use `create(OwnedAudioStreamSchema)` to create a new message. - */ -export const OwnedAudioStreamSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 24); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedAudioStream"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: AudioStreamInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedAudioStream { + return new OwnedAudioStream().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedAudioStream { + return new OwnedAudioStream().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedAudioStream { + return new OwnedAudioStream().fromJsonString(jsonString, options); + } + + static equals(a: OwnedAudioStream | PlainMessage | undefined, b: OwnedAudioStream | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedAudioStream, a, b); + } +} /** * @generated from message livekit.proto.AudioStreamEvent */ -export type AudioStreamEvent = Message<"livekit.proto.AudioStreamEvent"> & { +export class AudioStreamEvent extends Message { /** * @generated from field: required uint64 stream_handle = 1; */ - streamHandle: bigint; + streamHandle?: bigint; /** * @generated from oneof livekit.proto.AudioStreamEvent.message @@ -674,328 +1346,380 @@ export type AudioStreamEvent = Message<"livekit.proto.AudioStreamEvent"> & { */ value: AudioStreamEOS; case: "eos"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.AudioStreamEvent. - * Use `create(AudioStreamEventSchema)` to create a new message. - */ -export const AudioStreamEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 25); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioStreamEvent"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "frame_received", kind: "message", T: AudioFrameReceived, oneof: "message" }, + { no: 3, name: "eos", kind: "message", T: AudioStreamEOS, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioStreamEvent { + return new AudioStreamEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioStreamEvent { + return new AudioStreamEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioStreamEvent { + return new AudioStreamEvent().fromJsonString(jsonString, options); + } + + static equals(a: AudioStreamEvent | PlainMessage | undefined, b: AudioStreamEvent | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioStreamEvent, a, b); + } +} /** * @generated from message livekit.proto.AudioFrameReceived */ -export type AudioFrameReceived = Message<"livekit.proto.AudioFrameReceived"> & { +export class AudioFrameReceived extends Message { /** * @generated from field: required livekit.proto.OwnedAudioFrameBuffer frame = 1; */ frame?: OwnedAudioFrameBuffer; -}; -/** - * Describes the message livekit.proto.AudioFrameReceived. - * Use `create(AudioFrameReceivedSchema)` to create a new message. - */ -export const AudioFrameReceivedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 26); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioFrameReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "frame", kind: "message", T: OwnedAudioFrameBuffer, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioFrameReceived { + return new AudioFrameReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioFrameReceived { + return new AudioFrameReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioFrameReceived { + return new AudioFrameReceived().fromJsonString(jsonString, options); + } + + static equals(a: AudioFrameReceived | PlainMessage | undefined, b: AudioFrameReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioFrameReceived, a, b); + } +} /** * @generated from message livekit.proto.AudioStreamEOS */ -export type AudioStreamEOS = Message<"livekit.proto.AudioStreamEOS"> & { -}; +export class AudioStreamEOS extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.AudioStreamEOS. - * Use `create(AudioStreamEOSSchema)` to create a new message. - */ -export const AudioStreamEOSSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 27); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioStreamEOS"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioStreamEOS { + return new AudioStreamEOS().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioStreamEOS { + return new AudioStreamEOS().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioStreamEOS { + return new AudioStreamEOS().fromJsonString(jsonString, options); + } + + static equals(a: AudioStreamEOS | PlainMessage | undefined, b: AudioStreamEOS | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioStreamEOS, a, b); + } +} /** * @generated from message livekit.proto.AudioSourceOptions */ -export type AudioSourceOptions = Message<"livekit.proto.AudioSourceOptions"> & { +export class AudioSourceOptions extends Message { /** * @generated from field: required bool echo_cancellation = 1; */ - echoCancellation: boolean; + echoCancellation?: boolean; /** * @generated from field: required bool noise_suppression = 2; */ - noiseSuppression: boolean; + noiseSuppression?: boolean; /** * @generated from field: required bool auto_gain_control = 3; */ - autoGainControl: boolean; -}; + autoGainControl?: boolean; -/** - * Describes the message livekit.proto.AudioSourceOptions. - * Use `create(AudioSourceOptionsSchema)` to create a new message. - */ -export const AudioSourceOptionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 28); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioSourceOptions"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "echo_cancellation", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 2, name: "noise_suppression", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 3, name: "auto_gain_control", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioSourceOptions { + return new AudioSourceOptions().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioSourceOptions { + return new AudioSourceOptions().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioSourceOptions { + return new AudioSourceOptions().fromJsonString(jsonString, options); + } + + static equals(a: AudioSourceOptions | PlainMessage | undefined, b: AudioSourceOptions | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioSourceOptions, a, b); + } +} /** * @generated from message livekit.proto.AudioSourceInfo */ -export type AudioSourceInfo = Message<"livekit.proto.AudioSourceInfo"> & { +export class AudioSourceInfo extends Message { /** * @generated from field: required livekit.proto.AudioSourceType type = 2; */ - type: AudioSourceType; -}; + type?: AudioSourceType; -/** - * Describes the message livekit.proto.AudioSourceInfo. - * Use `create(AudioSourceInfoSchema)` to create a new message. - */ -export const AudioSourceInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 29); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * @generated from message livekit.proto.OwnedAudioSource - */ -export type OwnedAudioSource = Message<"livekit.proto.OwnedAudioSource"> & { - /** - * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; - */ - handle?: FfiOwnedHandle; + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioSourceInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 2, name: "type", kind: "enum", T: proto2.getEnumType(AudioSourceType), req: true }, + ]); - /** - * @generated from field: required livekit.proto.AudioSourceInfo info = 2; - */ - info?: AudioSourceInfo; -}; + static fromBinary(bytes: Uint8Array, options?: Partial): AudioSourceInfo { + return new AudioSourceInfo().fromBinary(bytes, options); + } -/** - * Describes the message livekit.proto.OwnedAudioSource. - * Use `create(OwnedAudioSourceSchema)` to create a new message. - */ -export const OwnedAudioSourceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 30); + static fromJson(jsonValue: JsonValue, options?: Partial): AudioSourceInfo { + return new AudioSourceInfo().fromJson(jsonValue, options); + } -/** - * @generated from message livekit.proto.AudioResamplerInfo - */ -export type AudioResamplerInfo = Message<"livekit.proto.AudioResamplerInfo"> & { -}; + static fromJsonString(jsonString: string, options?: Partial): AudioSourceInfo { + return new AudioSourceInfo().fromJsonString(jsonString, options); + } -/** - * Describes the message livekit.proto.AudioResamplerInfo. - * Use `create(AudioResamplerInfoSchema)` to create a new message. - */ -export const AudioResamplerInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 31); + static equals(a: AudioSourceInfo | PlainMessage | undefined, b: AudioSourceInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioSourceInfo, a, b); + } +} /** - * @generated from message livekit.proto.OwnedAudioResampler + * @generated from message livekit.proto.OwnedAudioSource */ -export type OwnedAudioResampler = Message<"livekit.proto.OwnedAudioResampler"> & { +export class OwnedAudioSource extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ handle?: FfiOwnedHandle; /** - * @generated from field: required livekit.proto.AudioResamplerInfo info = 2; + * @generated from field: required livekit.proto.AudioSourceInfo info = 2; */ - info?: AudioResamplerInfo; -}; + info?: AudioSourceInfo; -/** - * Describes the message livekit.proto.OwnedAudioResampler. - * Use `create(OwnedAudioResamplerSchema)` to create a new message. - */ -export const OwnedAudioResamplerSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 32); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedAudioSource"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: AudioSourceInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedAudioSource { + return new OwnedAudioSource().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedAudioSource { + return new OwnedAudioSource().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedAudioSource { + return new OwnedAudioSource().fromJsonString(jsonString, options); + } + + static equals(a: OwnedAudioSource | PlainMessage | undefined, b: OwnedAudioSource | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedAudioSource, a, b); + } +} /** - * @generated from message livekit.proto.SoxResamplerInfo + * @generated from message livekit.proto.AudioResamplerInfo */ -export type SoxResamplerInfo = Message<"livekit.proto.SoxResamplerInfo"> & { -}; +export class AudioResamplerInfo extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.SoxResamplerInfo. - * Use `create(SoxResamplerInfoSchema)` to create a new message. - */ -export const SoxResamplerInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 33); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioResamplerInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); -/** - * @generated from message livekit.proto.OwnedSoxResampler - */ -export type OwnedSoxResampler = Message<"livekit.proto.OwnedSoxResampler"> & { - /** - * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; - */ - handle?: FfiOwnedHandle; + static fromBinary(bytes: Uint8Array, options?: Partial): AudioResamplerInfo { + return new AudioResamplerInfo().fromBinary(bytes, options); + } - /** - * @generated from field: required livekit.proto.SoxResamplerInfo info = 2; - */ - info?: SoxResamplerInfo; -}; + static fromJson(jsonValue: JsonValue, options?: Partial): AudioResamplerInfo { + return new AudioResamplerInfo().fromJson(jsonValue, options); + } -/** - * Describes the message livekit.proto.OwnedSoxResampler. - * Use `create(OwnedSoxResamplerSchema)` to create a new message. - */ -export const OwnedSoxResamplerSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_audio_frame, 34); + static fromJsonString(jsonString: string, options?: Partial): AudioResamplerInfo { + return new AudioResamplerInfo().fromJsonString(jsonString, options); + } -/** - * @generated from enum livekit.proto.SoxResamplerDataType - */ -export enum SoxResamplerDataType { - /** - * TODO(theomonnom): support other datatypes (shouldn't really be needed) - * - * @generated from enum value: SOXR_DATATYPE_INT16I = 0; - */ - SOXR_DATATYPE_INT16I = 0, - - /** - * @generated from enum value: SOXR_DATATYPE_INT16S = 1; - */ - SOXR_DATATYPE_INT16S = 1, + static equals(a: AudioResamplerInfo | PlainMessage | undefined, b: AudioResamplerInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioResamplerInfo, a, b); + } } /** - * Describes the enum livekit.proto.SoxResamplerDataType. - */ -export const SoxResamplerDataTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_audio_frame, 0); - -/** - * @generated from enum livekit.proto.SoxQualityRecipe + * @generated from message livekit.proto.OwnedAudioResampler */ -export enum SoxQualityRecipe { - /** - * @generated from enum value: SOXR_QUALITY_QUICK = 0; - */ - SOXR_QUALITY_QUICK = 0, - +export class OwnedAudioResampler extends Message { /** - * @generated from enum value: SOXR_QUALITY_LOW = 1; - */ - SOXR_QUALITY_LOW = 1, - - /** - * @generated from enum value: SOXR_QUALITY_MEDIUM = 2; + * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ - SOXR_QUALITY_MEDIUM = 2, + handle?: FfiOwnedHandle; /** - * @generated from enum value: SOXR_QUALITY_HIGH = 3; + * @generated from field: required livekit.proto.AudioResamplerInfo info = 2; */ - SOXR_QUALITY_HIGH = 3, + info?: AudioResamplerInfo; - /** - * @generated from enum value: SOXR_QUALITY_VERYHIGH = 4; - */ - SOXR_QUALITY_VERYHIGH = 4, + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedAudioResampler"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: AudioResamplerInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedAudioResampler { + return new OwnedAudioResampler().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedAudioResampler { + return new OwnedAudioResampler().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedAudioResampler { + return new OwnedAudioResampler().fromJsonString(jsonString, options); + } + + static equals(a: OwnedAudioResampler | PlainMessage | undefined, b: OwnedAudioResampler | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedAudioResampler, a, b); + } } /** - * Describes the enum livekit.proto.SoxQualityRecipe. - */ -export const SoxQualityRecipeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_audio_frame, 1); - -/** - * @generated from enum livekit.proto.SoxFlagBits + * @generated from message livekit.proto.SoxResamplerInfo */ -export enum SoxFlagBits { - /** - * 1 << 0 - * - * @generated from enum value: SOXR_ROLLOFF_SMALL = 0; - */ - SOXR_ROLLOFF_SMALL = 0, +export class SoxResamplerInfo extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } - /** - * 1 << 1 - * - * @generated from enum value: SOXR_ROLLOFF_MEDIUM = 1; - */ - SOXR_ROLLOFF_MEDIUM = 1, + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SoxResamplerInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); - /** - * 1 << 2 - * - * @generated from enum value: SOXR_ROLLOFF_NONE = 2; - */ - SOXR_ROLLOFF_NONE = 2, + static fromBinary(bytes: Uint8Array, options?: Partial): SoxResamplerInfo { + return new SoxResamplerInfo().fromBinary(bytes, options); + } - /** - * 1 << 3 - * - * @generated from enum value: SOXR_HIGH_PREC_CLOCK = 3; - */ - SOXR_HIGH_PREC_CLOCK = 3, + static fromJson(jsonValue: JsonValue, options?: Partial): SoxResamplerInfo { + return new SoxResamplerInfo().fromJson(jsonValue, options); + } - /** - * 1 << 4 - * - * @generated from enum value: SOXR_DOUBLE_PRECISION = 4; - */ - SOXR_DOUBLE_PRECISION = 4, + static fromJsonString(jsonString: string, options?: Partial): SoxResamplerInfo { + return new SoxResamplerInfo().fromJsonString(jsonString, options); + } - /** - * 1 << 5 - * - * @generated from enum value: SOXR_VR = 5; - */ - SOXR_VR = 5, + static equals(a: SoxResamplerInfo | PlainMessage | undefined, b: SoxResamplerInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(SoxResamplerInfo, a, b); + } } /** - * Describes the enum livekit.proto.SoxFlagBits. - */ -export const SoxFlagBitsSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_audio_frame, 2); - -/** - * @generated from enum livekit.proto.AudioStreamType + * @generated from message livekit.proto.OwnedSoxResampler */ -export enum AudioStreamType { +export class OwnedSoxResampler extends Message { /** - * @generated from enum value: AUDIO_STREAM_NATIVE = 0; + * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ - AUDIO_STREAM_NATIVE = 0, + handle?: FfiOwnedHandle; /** - * @generated from enum value: AUDIO_STREAM_HTML = 1; + * @generated from field: required livekit.proto.SoxResamplerInfo info = 2; */ - AUDIO_STREAM_HTML = 1, -} - -/** - * Describes the enum livekit.proto.AudioStreamType. - */ -export const AudioStreamTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_audio_frame, 3); + info?: SoxResamplerInfo; -/** - * @generated from enum livekit.proto.AudioSourceType - */ -export enum AudioSourceType { - /** - * @generated from enum value: AUDIO_SOURCE_NATIVE = 0; - */ - AUDIO_SOURCE_NATIVE = 0, + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedSoxResampler"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: SoxResamplerInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedSoxResampler { + return new OwnedSoxResampler().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedSoxResampler { + return new OwnedSoxResampler().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedSoxResampler { + return new OwnedSoxResampler().fromJsonString(jsonString, options); + } + + static equals(a: OwnedSoxResampler | PlainMessage | undefined, b: OwnedSoxResampler | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedSoxResampler, a, b); + } } -/** - * Describes the enum livekit.proto.AudioSourceType. - */ -export const AudioSourceTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_audio_frame, 4); - diff --git a/packages/livekit-rtc/src/proto/e2ee_pb.ts b/packages/livekit-rtc/src/proto/e2ee_pb.ts index 53ca92e0..0f80fdcc 100644 --- a/packages/livekit-rtc/src/proto/e2ee_pb.ts +++ b/packages/livekit-rtc/src/proto/e2ee_pb.ts @@ -12,479 +12,1013 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file e2ee.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { Message } from "@bufbuild/protobuf"; +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; /** - * Describes the file e2ee.proto. + * @generated from enum livekit.proto.EncryptionType + */ +export enum EncryptionType { + /** + * @generated from enum value: NONE = 0; + */ + NONE = 0, + + /** + * @generated from enum value: GCM = 1; + */ + GCM = 1, + + /** + * @generated from enum value: CUSTOM = 2; + */ + CUSTOM = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(EncryptionType) +proto2.util.setEnumType(EncryptionType, "livekit.proto.EncryptionType", [ + { no: 0, name: "NONE" }, + { no: 1, name: "GCM" }, + { no: 2, name: "CUSTOM" }, +]); + +/** + * @generated from enum livekit.proto.EncryptionState */ -export const file_e2ee: GenFile = /*@__PURE__*/ - fileDesc("CgplMmVlLnByb3RvEg1saXZla2l0LnByb3RvImMKDEZyYW1lQ3J5cHRvchIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkSEQoJa2V5X2luZGV4GAMgAigFEg8KB2VuYWJsZWQYBCACKAgidgoSS2V5UHJvdmlkZXJPcHRpb25zEhIKCnNoYXJlZF9rZXkYASABKAwSGwoTcmF0Y2hldF93aW5kb3dfc2l6ZRgCIAIoBRIUCgxyYXRjaGV0X3NhbHQYAyACKAwSGQoRZmFpbHVyZV90b2xlcmFuY2UYBCACKAUihgEKC0UyZWVPcHRpb25zEjYKD2VuY3J5cHRpb25fdHlwZRgBIAIoDjIdLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblR5cGUSPwoUa2V5X3Byb3ZpZGVyX29wdGlvbnMYAiACKAsyIS5saXZla2l0LnByb3RvLktleVByb3ZpZGVyT3B0aW9ucyIvChxFMmVlTWFuYWdlclNldEVuYWJsZWRSZXF1ZXN0Eg8KB2VuYWJsZWQYASACKAgiHwodRTJlZU1hbmFnZXJTZXRFbmFibGVkUmVzcG9uc2UiJAoiRTJlZU1hbmFnZXJHZXRGcmFtZUNyeXB0b3JzUmVxdWVzdCJaCiNFMmVlTWFuYWdlckdldEZyYW1lQ3J5cHRvcnNSZXNwb25zZRIzCg5mcmFtZV9jcnlwdG9ycxgBIAMoCzIbLmxpdmVraXQucHJvdG8uRnJhbWVDcnlwdG9yImEKHUZyYW1lQ3J5cHRvclNldEVuYWJsZWRSZXF1ZXN0EhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhEKCXRyYWNrX3NpZBgCIAIoCRIPCgdlbmFibGVkGAMgAigIIiAKHkZyYW1lQ3J5cHRvclNldEVuYWJsZWRSZXNwb25zZSJkCh5GcmFtZUNyeXB0b3JTZXRLZXlJbmRleFJlcXVlc3QSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJEhEKCWtleV9pbmRleBgDIAIoBSIhCh9GcmFtZUNyeXB0b3JTZXRLZXlJbmRleFJlc3BvbnNlIjwKE1NldFNoYXJlZEtleVJlcXVlc3QSEgoKc2hhcmVkX2tleRgBIAIoDBIRCglrZXlfaW5kZXgYAiACKAUiFgoUU2V0U2hhcmVkS2V5UmVzcG9uc2UiLAoXUmF0Y2hldFNoYXJlZEtleVJlcXVlc3QSEQoJa2V5X2luZGV4GAEgAigFIisKGFJhdGNoZXRTaGFyZWRLZXlSZXNwb25zZRIPCgduZXdfa2V5GAEgASgMIigKE0dldFNoYXJlZEtleVJlcXVlc3QSEQoJa2V5X2luZGV4GAEgAigFIiMKFEdldFNoYXJlZEtleVJlc3BvbnNlEgsKA2tleRgBIAEoDCJNCg1TZXRLZXlSZXF1ZXN0EhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEgsKA2tleRgCIAIoDBIRCglrZXlfaW5kZXgYAyACKAUiEAoOU2V0S2V5UmVzcG9uc2UiRAoRUmF0Y2hldEtleVJlcXVlc3QSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJa2V5X2luZGV4GAIgAigFIiUKElJhdGNoZXRLZXlSZXNwb25zZRIPCgduZXdfa2V5GAEgASgMIkAKDUdldEtleVJlcXVlc3QSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJa2V5X2luZGV4GAIgAigFIh0KDkdldEtleVJlc3BvbnNlEgsKA2tleRgBIAEoDCLMBQoLRTJlZVJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQSSgoTbWFuYWdlcl9zZXRfZW5hYmxlZBgCIAEoCzIrLmxpdmVraXQucHJvdG8uRTJlZU1hbmFnZXJTZXRFbmFibGVkUmVxdWVzdEgAElcKGm1hbmFnZXJfZ2V0X2ZyYW1lX2NyeXB0b3JzGAMgASgLMjEubGl2ZWtpdC5wcm90by5FMmVlTWFuYWdlckdldEZyYW1lQ3J5cHRvcnNSZXF1ZXN0SAASSwoTY3J5cHRvcl9zZXRfZW5hYmxlZBgEIAEoCzIsLmxpdmVraXQucHJvdG8uRnJhbWVDcnlwdG9yU2V0RW5hYmxlZFJlcXVlc3RIABJOChVjcnlwdG9yX3NldF9rZXlfaW5kZXgYBSABKAsyLS5saXZla2l0LnByb3RvLkZyYW1lQ3J5cHRvclNldEtleUluZGV4UmVxdWVzdEgAEjwKDnNldF9zaGFyZWRfa2V5GAYgASgLMiIubGl2ZWtpdC5wcm90by5TZXRTaGFyZWRLZXlSZXF1ZXN0SAASRAoScmF0Y2hldF9zaGFyZWRfa2V5GAcgASgLMiYubGl2ZWtpdC5wcm90by5SYXRjaGV0U2hhcmVkS2V5UmVxdWVzdEgAEjwKDmdldF9zaGFyZWRfa2V5GAggASgLMiIubGl2ZWtpdC5wcm90by5HZXRTaGFyZWRLZXlSZXF1ZXN0SAASLwoHc2V0X2tleRgJIAEoCzIcLmxpdmVraXQucHJvdG8uU2V0S2V5UmVxdWVzdEgAEjcKC3JhdGNoZXRfa2V5GAogASgLMiAubGl2ZWtpdC5wcm90by5SYXRjaGV0S2V5UmVxdWVzdEgAEi8KB2dldF9rZXkYCyABKAsyHC5saXZla2l0LnByb3RvLkdldEtleVJlcXVlc3RIAEIJCgdtZXNzYWdlIsIFCgxFMmVlUmVzcG9uc2USSwoTbWFuYWdlcl9zZXRfZW5hYmxlZBgBIAEoCzIsLmxpdmVraXQucHJvdG8uRTJlZU1hbmFnZXJTZXRFbmFibGVkUmVzcG9uc2VIABJYChptYW5hZ2VyX2dldF9mcmFtZV9jcnlwdG9ycxgCIAEoCzIyLmxpdmVraXQucHJvdG8uRTJlZU1hbmFnZXJHZXRGcmFtZUNyeXB0b3JzUmVzcG9uc2VIABJMChNjcnlwdG9yX3NldF9lbmFibGVkGAMgASgLMi0ubGl2ZWtpdC5wcm90by5GcmFtZUNyeXB0b3JTZXRFbmFibGVkUmVzcG9uc2VIABJPChVjcnlwdG9yX3NldF9rZXlfaW5kZXgYBCABKAsyLi5saXZla2l0LnByb3RvLkZyYW1lQ3J5cHRvclNldEtleUluZGV4UmVzcG9uc2VIABI9Cg5zZXRfc2hhcmVkX2tleRgFIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0U2hhcmVkS2V5UmVzcG9uc2VIABJFChJyYXRjaGV0X3NoYXJlZF9rZXkYBiABKAsyJy5saXZla2l0LnByb3RvLlJhdGNoZXRTaGFyZWRLZXlSZXNwb25zZUgAEj0KDmdldF9zaGFyZWRfa2V5GAcgASgLMiMubGl2ZWtpdC5wcm90by5HZXRTaGFyZWRLZXlSZXNwb25zZUgAEjAKB3NldF9rZXkYCCABKAsyHS5saXZla2l0LnByb3RvLlNldEtleVJlc3BvbnNlSAASOAoLcmF0Y2hldF9rZXkYCSABKAsyIS5saXZla2l0LnByb3RvLlJhdGNoZXRLZXlSZXNwb25zZUgAEjAKB2dldF9rZXkYCiABKAsyHS5saXZla2l0LnByb3RvLkdldEtleVJlc3BvbnNlSABCCQoHbWVzc2FnZSovCg5FbmNyeXB0aW9uVHlwZRIICgROT05FEAASBwoDR0NNEAESCgoGQ1VTVE9NEAIqiAEKD0VuY3J5cHRpb25TdGF0ZRIHCgNORVcQABIGCgJPSxABEhUKEUVOQ1JZUFRJT05fRkFJTEVEEAISFQoRREVDUllQVElPTl9GQUlMRUQQAxIPCgtNSVNTSU5HX0tFWRAEEhEKDUtFWV9SQVRDSEVURUQQBRISCg5JTlRFUk5BTF9FUlJPUhAGQhCqAg1MaXZlS2l0LlByb3Rv"); +export enum EncryptionState { + /** + * @generated from enum value: NEW = 0; + */ + NEW = 0, + + /** + * @generated from enum value: OK = 1; + */ + OK = 1, + + /** + * @generated from enum value: ENCRYPTION_FAILED = 2; + */ + ENCRYPTION_FAILED = 2, + + /** + * @generated from enum value: DECRYPTION_FAILED = 3; + */ + DECRYPTION_FAILED = 3, + + /** + * @generated from enum value: MISSING_KEY = 4; + */ + MISSING_KEY = 4, + + /** + * @generated from enum value: KEY_RATCHETED = 5; + */ + KEY_RATCHETED = 5, + + /** + * @generated from enum value: INTERNAL_ERROR = 6; + */ + INTERNAL_ERROR = 6, +} +// Retrieve enum metadata with: proto2.getEnumType(EncryptionState) +proto2.util.setEnumType(EncryptionState, "livekit.proto.EncryptionState", [ + { no: 0, name: "NEW" }, + { no: 1, name: "OK" }, + { no: 2, name: "ENCRYPTION_FAILED" }, + { no: 3, name: "DECRYPTION_FAILED" }, + { no: 4, name: "MISSING_KEY" }, + { no: 5, name: "KEY_RATCHETED" }, + { no: 6, name: "INTERNAL_ERROR" }, +]); /** * @generated from message livekit.proto.FrameCryptor */ -export type FrameCryptor = Message<"livekit.proto.FrameCryptor"> & { +export class FrameCryptor extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; + trackSid?: string; /** * @generated from field: required int32 key_index = 3; */ - keyIndex: number; + keyIndex?: number; /** * @generated from field: required bool enabled = 4; */ - enabled: boolean; -}; - -/** - * Describes the message livekit.proto.FrameCryptor. - * Use `create(FrameCryptorSchema)` to create a new message. - */ -export const FrameCryptorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 0); + enabled?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FrameCryptor"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + { no: 4, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FrameCryptor { + return new FrameCryptor().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FrameCryptor { + return new FrameCryptor().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FrameCryptor { + return new FrameCryptor().fromJsonString(jsonString, options); + } + + static equals(a: FrameCryptor | PlainMessage | undefined, b: FrameCryptor | PlainMessage | undefined): boolean { + return proto2.util.equals(FrameCryptor, a, b); + } +} /** * @generated from message livekit.proto.KeyProviderOptions */ -export type KeyProviderOptions = Message<"livekit.proto.KeyProviderOptions"> & { +export class KeyProviderOptions extends Message { /** * Only specify if you want to use a shared_key * * @generated from field: optional bytes shared_key = 1; */ - sharedKey: Uint8Array; + sharedKey?: Uint8Array; /** * @generated from field: required int32 ratchet_window_size = 2; */ - ratchetWindowSize: number; + ratchetWindowSize?: number; /** * @generated from field: required bytes ratchet_salt = 3; */ - ratchetSalt: Uint8Array; + ratchetSalt?: Uint8Array; /** * -1 = no tolerance * * @generated from field: required int32 failure_tolerance = 4; */ - failureTolerance: number; -}; - -/** - * Describes the message livekit.proto.KeyProviderOptions. - * Use `create(KeyProviderOptionsSchema)` to create a new message. - */ -export const KeyProviderOptionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 1); + failureTolerance?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.KeyProviderOptions"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "shared_key", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + { no: 2, name: "ratchet_window_size", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + { no: 3, name: "ratchet_salt", kind: "scalar", T: 12 /* ScalarType.BYTES */, req: true }, + { no: 4, name: "failure_tolerance", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): KeyProviderOptions { + return new KeyProviderOptions().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): KeyProviderOptions { + return new KeyProviderOptions().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): KeyProviderOptions { + return new KeyProviderOptions().fromJsonString(jsonString, options); + } + + static equals(a: KeyProviderOptions | PlainMessage | undefined, b: KeyProviderOptions | PlainMessage | undefined): boolean { + return proto2.util.equals(KeyProviderOptions, a, b); + } +} /** * @generated from message livekit.proto.E2eeOptions */ -export type E2eeOptions = Message<"livekit.proto.E2eeOptions"> & { +export class E2eeOptions extends Message { /** * @generated from field: required livekit.proto.EncryptionType encryption_type = 1; */ - encryptionType: EncryptionType; + encryptionType?: EncryptionType; /** * @generated from field: required livekit.proto.KeyProviderOptions key_provider_options = 2; */ keyProviderOptions?: KeyProviderOptions; -}; -/** - * Describes the message livekit.proto.E2eeOptions. - * Use `create(E2eeOptionsSchema)` to create a new message. - */ -export const E2eeOptionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 2); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeOptions"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "encryption_type", kind: "enum", T: proto2.getEnumType(EncryptionType), req: true }, + { no: 2, name: "key_provider_options", kind: "message", T: KeyProviderOptions, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeOptions { + return new E2eeOptions().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeOptions { + return new E2eeOptions().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeOptions { + return new E2eeOptions().fromJsonString(jsonString, options); + } + + static equals(a: E2eeOptions | PlainMessage | undefined, b: E2eeOptions | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeOptions, a, b); + } +} /** * @generated from message livekit.proto.E2eeManagerSetEnabledRequest */ -export type E2eeManagerSetEnabledRequest = Message<"livekit.proto.E2eeManagerSetEnabledRequest"> & { +export class E2eeManagerSetEnabledRequest extends Message { /** * @generated from field: required bool enabled = 1; */ - enabled: boolean; -}; - -/** - * Describes the message livekit.proto.E2eeManagerSetEnabledRequest. - * Use `create(E2eeManagerSetEnabledRequestSchema)` to create a new message. - */ -export const E2eeManagerSetEnabledRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 3); + enabled?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeManagerSetEnabledRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeManagerSetEnabledRequest { + return new E2eeManagerSetEnabledRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeManagerSetEnabledRequest { + return new E2eeManagerSetEnabledRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeManagerSetEnabledRequest { + return new E2eeManagerSetEnabledRequest().fromJsonString(jsonString, options); + } + + static equals(a: E2eeManagerSetEnabledRequest | PlainMessage | undefined, b: E2eeManagerSetEnabledRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeManagerSetEnabledRequest, a, b); + } +} /** * @generated from message livekit.proto.E2eeManagerSetEnabledResponse */ -export type E2eeManagerSetEnabledResponse = Message<"livekit.proto.E2eeManagerSetEnabledResponse"> & { -}; - -/** - * Describes the message livekit.proto.E2eeManagerSetEnabledResponse. - * Use `create(E2eeManagerSetEnabledResponseSchema)` to create a new message. - */ -export const E2eeManagerSetEnabledResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 4); +export class E2eeManagerSetEnabledResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeManagerSetEnabledResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeManagerSetEnabledResponse { + return new E2eeManagerSetEnabledResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeManagerSetEnabledResponse { + return new E2eeManagerSetEnabledResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeManagerSetEnabledResponse { + return new E2eeManagerSetEnabledResponse().fromJsonString(jsonString, options); + } + + static equals(a: E2eeManagerSetEnabledResponse | PlainMessage | undefined, b: E2eeManagerSetEnabledResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeManagerSetEnabledResponse, a, b); + } +} /** * @generated from message livekit.proto.E2eeManagerGetFrameCryptorsRequest */ -export type E2eeManagerGetFrameCryptorsRequest = Message<"livekit.proto.E2eeManagerGetFrameCryptorsRequest"> & { -}; - -/** - * Describes the message livekit.proto.E2eeManagerGetFrameCryptorsRequest. - * Use `create(E2eeManagerGetFrameCryptorsRequestSchema)` to create a new message. - */ -export const E2eeManagerGetFrameCryptorsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 5); +export class E2eeManagerGetFrameCryptorsRequest extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeManagerGetFrameCryptorsRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeManagerGetFrameCryptorsRequest { + return new E2eeManagerGetFrameCryptorsRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeManagerGetFrameCryptorsRequest { + return new E2eeManagerGetFrameCryptorsRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeManagerGetFrameCryptorsRequest { + return new E2eeManagerGetFrameCryptorsRequest().fromJsonString(jsonString, options); + } + + static equals(a: E2eeManagerGetFrameCryptorsRequest | PlainMessage | undefined, b: E2eeManagerGetFrameCryptorsRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeManagerGetFrameCryptorsRequest, a, b); + } +} /** * @generated from message livekit.proto.E2eeManagerGetFrameCryptorsResponse */ -export type E2eeManagerGetFrameCryptorsResponse = Message<"livekit.proto.E2eeManagerGetFrameCryptorsResponse"> & { +export class E2eeManagerGetFrameCryptorsResponse extends Message { /** * @generated from field: repeated livekit.proto.FrameCryptor frame_cryptors = 1; */ - frameCryptors: FrameCryptor[]; -}; - -/** - * Describes the message livekit.proto.E2eeManagerGetFrameCryptorsResponse. - * Use `create(E2eeManagerGetFrameCryptorsResponseSchema)` to create a new message. - */ -export const E2eeManagerGetFrameCryptorsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 6); + frameCryptors: FrameCryptor[] = []; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeManagerGetFrameCryptorsResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "frame_cryptors", kind: "message", T: FrameCryptor, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeManagerGetFrameCryptorsResponse { + return new E2eeManagerGetFrameCryptorsResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeManagerGetFrameCryptorsResponse { + return new E2eeManagerGetFrameCryptorsResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeManagerGetFrameCryptorsResponse { + return new E2eeManagerGetFrameCryptorsResponse().fromJsonString(jsonString, options); + } + + static equals(a: E2eeManagerGetFrameCryptorsResponse | PlainMessage | undefined, b: E2eeManagerGetFrameCryptorsResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeManagerGetFrameCryptorsResponse, a, b); + } +} /** * @generated from message livekit.proto.FrameCryptorSetEnabledRequest */ -export type FrameCryptorSetEnabledRequest = Message<"livekit.proto.FrameCryptorSetEnabledRequest"> & { +export class FrameCryptorSetEnabledRequest extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; + trackSid?: string; /** * @generated from field: required bool enabled = 3; */ - enabled: boolean; -}; - -/** - * Describes the message livekit.proto.FrameCryptorSetEnabledRequest. - * Use `create(FrameCryptorSetEnabledRequestSchema)` to create a new message. - */ -export const FrameCryptorSetEnabledRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 7); + enabled?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FrameCryptorSetEnabledRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FrameCryptorSetEnabledRequest { + return new FrameCryptorSetEnabledRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FrameCryptorSetEnabledRequest { + return new FrameCryptorSetEnabledRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FrameCryptorSetEnabledRequest { + return new FrameCryptorSetEnabledRequest().fromJsonString(jsonString, options); + } + + static equals(a: FrameCryptorSetEnabledRequest | PlainMessage | undefined, b: FrameCryptorSetEnabledRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(FrameCryptorSetEnabledRequest, a, b); + } +} /** * @generated from message livekit.proto.FrameCryptorSetEnabledResponse */ -export type FrameCryptorSetEnabledResponse = Message<"livekit.proto.FrameCryptorSetEnabledResponse"> & { -}; - -/** - * Describes the message livekit.proto.FrameCryptorSetEnabledResponse. - * Use `create(FrameCryptorSetEnabledResponseSchema)` to create a new message. - */ -export const FrameCryptorSetEnabledResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 8); +export class FrameCryptorSetEnabledResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FrameCryptorSetEnabledResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FrameCryptorSetEnabledResponse { + return new FrameCryptorSetEnabledResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FrameCryptorSetEnabledResponse { + return new FrameCryptorSetEnabledResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FrameCryptorSetEnabledResponse { + return new FrameCryptorSetEnabledResponse().fromJsonString(jsonString, options); + } + + static equals(a: FrameCryptorSetEnabledResponse | PlainMessage | undefined, b: FrameCryptorSetEnabledResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(FrameCryptorSetEnabledResponse, a, b); + } +} /** * @generated from message livekit.proto.FrameCryptorSetKeyIndexRequest */ -export type FrameCryptorSetKeyIndexRequest = Message<"livekit.proto.FrameCryptorSetKeyIndexRequest"> & { +export class FrameCryptorSetKeyIndexRequest extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; + trackSid?: string; /** * @generated from field: required int32 key_index = 3; */ - keyIndex: number; -}; - -/** - * Describes the message livekit.proto.FrameCryptorSetKeyIndexRequest. - * Use `create(FrameCryptorSetKeyIndexRequestSchema)` to create a new message. - */ -export const FrameCryptorSetKeyIndexRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 9); + keyIndex?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FrameCryptorSetKeyIndexRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FrameCryptorSetKeyIndexRequest { + return new FrameCryptorSetKeyIndexRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FrameCryptorSetKeyIndexRequest { + return new FrameCryptorSetKeyIndexRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FrameCryptorSetKeyIndexRequest { + return new FrameCryptorSetKeyIndexRequest().fromJsonString(jsonString, options); + } + + static equals(a: FrameCryptorSetKeyIndexRequest | PlainMessage | undefined, b: FrameCryptorSetKeyIndexRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(FrameCryptorSetKeyIndexRequest, a, b); + } +} /** * @generated from message livekit.proto.FrameCryptorSetKeyIndexResponse */ -export type FrameCryptorSetKeyIndexResponse = Message<"livekit.proto.FrameCryptorSetKeyIndexResponse"> & { -}; - -/** - * Describes the message livekit.proto.FrameCryptorSetKeyIndexResponse. - * Use `create(FrameCryptorSetKeyIndexResponseSchema)` to create a new message. - */ -export const FrameCryptorSetKeyIndexResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 10); +export class FrameCryptorSetKeyIndexResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FrameCryptorSetKeyIndexResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FrameCryptorSetKeyIndexResponse { + return new FrameCryptorSetKeyIndexResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FrameCryptorSetKeyIndexResponse { + return new FrameCryptorSetKeyIndexResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FrameCryptorSetKeyIndexResponse { + return new FrameCryptorSetKeyIndexResponse().fromJsonString(jsonString, options); + } + + static equals(a: FrameCryptorSetKeyIndexResponse | PlainMessage | undefined, b: FrameCryptorSetKeyIndexResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(FrameCryptorSetKeyIndexResponse, a, b); + } +} /** * @generated from message livekit.proto.SetSharedKeyRequest */ -export type SetSharedKeyRequest = Message<"livekit.proto.SetSharedKeyRequest"> & { +export class SetSharedKeyRequest extends Message { /** * @generated from field: required bytes shared_key = 1; */ - sharedKey: Uint8Array; + sharedKey?: Uint8Array; /** * @generated from field: required int32 key_index = 2; */ - keyIndex: number; -}; - -/** - * Describes the message livekit.proto.SetSharedKeyRequest. - * Use `create(SetSharedKeyRequestSchema)` to create a new message. - */ -export const SetSharedKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 11); + keyIndex?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetSharedKeyRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "shared_key", kind: "scalar", T: 12 /* ScalarType.BYTES */, req: true }, + { no: 2, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetSharedKeyRequest { + return new SetSharedKeyRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetSharedKeyRequest { + return new SetSharedKeyRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetSharedKeyRequest { + return new SetSharedKeyRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetSharedKeyRequest | PlainMessage | undefined, b: SetSharedKeyRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SetSharedKeyRequest, a, b); + } +} /** * @generated from message livekit.proto.SetSharedKeyResponse */ -export type SetSharedKeyResponse = Message<"livekit.proto.SetSharedKeyResponse"> & { -}; - -/** - * Describes the message livekit.proto.SetSharedKeyResponse. - * Use `create(SetSharedKeyResponseSchema)` to create a new message. - */ -export const SetSharedKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 12); +export class SetSharedKeyResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetSharedKeyResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetSharedKeyResponse { + return new SetSharedKeyResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetSharedKeyResponse { + return new SetSharedKeyResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetSharedKeyResponse { + return new SetSharedKeyResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetSharedKeyResponse | PlainMessage | undefined, b: SetSharedKeyResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SetSharedKeyResponse, a, b); + } +} /** * @generated from message livekit.proto.RatchetSharedKeyRequest */ -export type RatchetSharedKeyRequest = Message<"livekit.proto.RatchetSharedKeyRequest"> & { +export class RatchetSharedKeyRequest extends Message { /** * @generated from field: required int32 key_index = 1; */ - keyIndex: number; -}; - -/** - * Describes the message livekit.proto.RatchetSharedKeyRequest. - * Use `create(RatchetSharedKeyRequestSchema)` to create a new message. - */ -export const RatchetSharedKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 13); + keyIndex?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RatchetSharedKeyRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RatchetSharedKeyRequest { + return new RatchetSharedKeyRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RatchetSharedKeyRequest { + return new RatchetSharedKeyRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RatchetSharedKeyRequest { + return new RatchetSharedKeyRequest().fromJsonString(jsonString, options); + } + + static equals(a: RatchetSharedKeyRequest | PlainMessage | undefined, b: RatchetSharedKeyRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(RatchetSharedKeyRequest, a, b); + } +} /** * @generated from message livekit.proto.RatchetSharedKeyResponse */ -export type RatchetSharedKeyResponse = Message<"livekit.proto.RatchetSharedKeyResponse"> & { +export class RatchetSharedKeyResponse extends Message { /** * @generated from field: optional bytes new_key = 1; */ - newKey: Uint8Array; -}; - -/** - * Describes the message livekit.proto.RatchetSharedKeyResponse. - * Use `create(RatchetSharedKeyResponseSchema)` to create a new message. - */ -export const RatchetSharedKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 14); + newKey?: Uint8Array; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RatchetSharedKeyResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "new_key", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RatchetSharedKeyResponse { + return new RatchetSharedKeyResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RatchetSharedKeyResponse { + return new RatchetSharedKeyResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RatchetSharedKeyResponse { + return new RatchetSharedKeyResponse().fromJsonString(jsonString, options); + } + + static equals(a: RatchetSharedKeyResponse | PlainMessage | undefined, b: RatchetSharedKeyResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(RatchetSharedKeyResponse, a, b); + } +} /** * @generated from message livekit.proto.GetSharedKeyRequest */ -export type GetSharedKeyRequest = Message<"livekit.proto.GetSharedKeyRequest"> & { +export class GetSharedKeyRequest extends Message { /** * @generated from field: required int32 key_index = 1; */ - keyIndex: number; -}; - -/** - * Describes the message livekit.proto.GetSharedKeyRequest. - * Use `create(GetSharedKeyRequestSchema)` to create a new message. - */ -export const GetSharedKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 15); + keyIndex?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetSharedKeyRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSharedKeyRequest { + return new GetSharedKeyRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSharedKeyRequest { + return new GetSharedKeyRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSharedKeyRequest { + return new GetSharedKeyRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetSharedKeyRequest | PlainMessage | undefined, b: GetSharedKeyRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(GetSharedKeyRequest, a, b); + } +} /** * @generated from message livekit.proto.GetSharedKeyResponse */ -export type GetSharedKeyResponse = Message<"livekit.proto.GetSharedKeyResponse"> & { +export class GetSharedKeyResponse extends Message { /** * @generated from field: optional bytes key = 1; */ - key: Uint8Array; -}; - -/** - * Describes the message livekit.proto.GetSharedKeyResponse. - * Use `create(GetSharedKeyResponseSchema)` to create a new message. - */ -export const GetSharedKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 16); + key?: Uint8Array; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetSharedKeyResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSharedKeyResponse { + return new GetSharedKeyResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSharedKeyResponse { + return new GetSharedKeyResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSharedKeyResponse { + return new GetSharedKeyResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetSharedKeyResponse | PlainMessage | undefined, b: GetSharedKeyResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(GetSharedKeyResponse, a, b); + } +} /** * @generated from message livekit.proto.SetKeyRequest */ -export type SetKeyRequest = Message<"livekit.proto.SetKeyRequest"> & { +export class SetKeyRequest extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required bytes key = 2; */ - key: Uint8Array; + key?: Uint8Array; /** * @generated from field: required int32 key_index = 3; */ - keyIndex: number; -}; - -/** - * Describes the message livekit.proto.SetKeyRequest. - * Use `create(SetKeyRequestSchema)` to create a new message. - */ -export const SetKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 17); + keyIndex?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetKeyRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "key", kind: "scalar", T: 12 /* ScalarType.BYTES */, req: true }, + { no: 3, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetKeyRequest { + return new SetKeyRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetKeyRequest { + return new SetKeyRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetKeyRequest { + return new SetKeyRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetKeyRequest | PlainMessage | undefined, b: SetKeyRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SetKeyRequest, a, b); + } +} /** * @generated from message livekit.proto.SetKeyResponse */ -export type SetKeyResponse = Message<"livekit.proto.SetKeyResponse"> & { -}; - -/** - * Describes the message livekit.proto.SetKeyResponse. - * Use `create(SetKeyResponseSchema)` to create a new message. - */ -export const SetKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 18); +export class SetKeyResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetKeyResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetKeyResponse { + return new SetKeyResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetKeyResponse { + return new SetKeyResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetKeyResponse { + return new SetKeyResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetKeyResponse | PlainMessage | undefined, b: SetKeyResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SetKeyResponse, a, b); + } +} /** * @generated from message livekit.proto.RatchetKeyRequest */ -export type RatchetKeyRequest = Message<"livekit.proto.RatchetKeyRequest"> & { +export class RatchetKeyRequest extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required int32 key_index = 2; */ - keyIndex: number; -}; - -/** - * Describes the message livekit.proto.RatchetKeyRequest. - * Use `create(RatchetKeyRequestSchema)` to create a new message. - */ -export const RatchetKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 19); + keyIndex?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RatchetKeyRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RatchetKeyRequest { + return new RatchetKeyRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RatchetKeyRequest { + return new RatchetKeyRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RatchetKeyRequest { + return new RatchetKeyRequest().fromJsonString(jsonString, options); + } + + static equals(a: RatchetKeyRequest | PlainMessage | undefined, b: RatchetKeyRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(RatchetKeyRequest, a, b); + } +} /** * @generated from message livekit.proto.RatchetKeyResponse */ -export type RatchetKeyResponse = Message<"livekit.proto.RatchetKeyResponse"> & { +export class RatchetKeyResponse extends Message { /** * @generated from field: optional bytes new_key = 1; */ - newKey: Uint8Array; -}; - -/** - * Describes the message livekit.proto.RatchetKeyResponse. - * Use `create(RatchetKeyResponseSchema)` to create a new message. - */ -export const RatchetKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 20); + newKey?: Uint8Array; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RatchetKeyResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "new_key", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RatchetKeyResponse { + return new RatchetKeyResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RatchetKeyResponse { + return new RatchetKeyResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RatchetKeyResponse { + return new RatchetKeyResponse().fromJsonString(jsonString, options); + } + + static equals(a: RatchetKeyResponse | PlainMessage | undefined, b: RatchetKeyResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(RatchetKeyResponse, a, b); + } +} /** * @generated from message livekit.proto.GetKeyRequest */ -export type GetKeyRequest = Message<"livekit.proto.GetKeyRequest"> & { +export class GetKeyRequest extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required int32 key_index = 2; */ - keyIndex: number; -}; - -/** - * Describes the message livekit.proto.GetKeyRequest. - * Use `create(GetKeyRequestSchema)` to create a new message. - */ -export const GetKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 21); + keyIndex?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetKeyRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "key_index", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetKeyRequest { + return new GetKeyRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetKeyRequest { + return new GetKeyRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetKeyRequest { + return new GetKeyRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetKeyRequest | PlainMessage | undefined, b: GetKeyRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(GetKeyRequest, a, b); + } +} /** * @generated from message livekit.proto.GetKeyResponse */ -export type GetKeyResponse = Message<"livekit.proto.GetKeyResponse"> & { +export class GetKeyResponse extends Message { /** * @generated from field: optional bytes key = 1; */ - key: Uint8Array; -}; - -/** - * Describes the message livekit.proto.GetKeyResponse. - * Use `create(GetKeyResponseSchema)` to create a new message. - */ -export const GetKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 22); + key?: Uint8Array; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetKeyResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetKeyResponse { + return new GetKeyResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetKeyResponse { + return new GetKeyResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetKeyResponse { + return new GetKeyResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetKeyResponse | PlainMessage | undefined, b: GetKeyResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(GetKeyResponse, a, b); + } +} /** * @generated from message livekit.proto.E2eeRequest */ -export type E2eeRequest = Message<"livekit.proto.E2eeRequest"> & { +export class E2eeRequest extends Message { /** * @generated from field: required uint64 room_handle = 1; */ - roomHandle: bigint; + roomHandle?: bigint; /** * @generated from oneof livekit.proto.E2eeRequest.message @@ -549,20 +1083,50 @@ export type E2eeRequest = Message<"livekit.proto.E2eeRequest"> & { */ value: GetKeyRequest; case: "getKey"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.E2eeRequest. - * Use `create(E2eeRequestSchema)` to create a new message. - */ -export const E2eeRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 23); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "room_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "manager_set_enabled", kind: "message", T: E2eeManagerSetEnabledRequest, oneof: "message" }, + { no: 3, name: "manager_get_frame_cryptors", kind: "message", T: E2eeManagerGetFrameCryptorsRequest, oneof: "message" }, + { no: 4, name: "cryptor_set_enabled", kind: "message", T: FrameCryptorSetEnabledRequest, oneof: "message" }, + { no: 5, name: "cryptor_set_key_index", kind: "message", T: FrameCryptorSetKeyIndexRequest, oneof: "message" }, + { no: 6, name: "set_shared_key", kind: "message", T: SetSharedKeyRequest, oneof: "message" }, + { no: 7, name: "ratchet_shared_key", kind: "message", T: RatchetSharedKeyRequest, oneof: "message" }, + { no: 8, name: "get_shared_key", kind: "message", T: GetSharedKeyRequest, oneof: "message" }, + { no: 9, name: "set_key", kind: "message", T: SetKeyRequest, oneof: "message" }, + { no: 10, name: "ratchet_key", kind: "message", T: RatchetKeyRequest, oneof: "message" }, + { no: 11, name: "get_key", kind: "message", T: GetKeyRequest, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeRequest { + return new E2eeRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeRequest { + return new E2eeRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeRequest { + return new E2eeRequest().fromJsonString(jsonString, options); + } + + static equals(a: E2eeRequest | PlainMessage | undefined, b: E2eeRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeRequest, a, b); + } +} /** * @generated from message livekit.proto.E2eeResponse */ -export type E2eeResponse = Message<"livekit.proto.E2eeResponse"> & { +export class E2eeResponse extends Message { /** * @generated from oneof livekit.proto.E2eeResponse.message */ @@ -626,85 +1190,42 @@ export type E2eeResponse = Message<"livekit.proto.E2eeResponse"> & { */ value: GetKeyResponse; case: "getKey"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.E2eeResponse. - * Use `create(E2eeResponseSchema)` to create a new message. - */ -export const E2eeResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_e2ee, 24); - -/** - * @generated from enum livekit.proto.EncryptionType - */ -export enum EncryptionType { - /** - * @generated from enum value: NONE = 0; - */ - NONE = 0, - - /** - * @generated from enum value: GCM = 1; - */ - GCM = 1, - - /** - * @generated from enum value: CUSTOM = 2; - */ - CUSTOM = 2, + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "manager_set_enabled", kind: "message", T: E2eeManagerSetEnabledResponse, oneof: "message" }, + { no: 2, name: "manager_get_frame_cryptors", kind: "message", T: E2eeManagerGetFrameCryptorsResponse, oneof: "message" }, + { no: 3, name: "cryptor_set_enabled", kind: "message", T: FrameCryptorSetEnabledResponse, oneof: "message" }, + { no: 4, name: "cryptor_set_key_index", kind: "message", T: FrameCryptorSetKeyIndexResponse, oneof: "message" }, + { no: 5, name: "set_shared_key", kind: "message", T: SetSharedKeyResponse, oneof: "message" }, + { no: 6, name: "ratchet_shared_key", kind: "message", T: RatchetSharedKeyResponse, oneof: "message" }, + { no: 7, name: "get_shared_key", kind: "message", T: GetSharedKeyResponse, oneof: "message" }, + { no: 8, name: "set_key", kind: "message", T: SetKeyResponse, oneof: "message" }, + { no: 9, name: "ratchet_key", kind: "message", T: RatchetKeyResponse, oneof: "message" }, + { no: 10, name: "get_key", kind: "message", T: GetKeyResponse, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeResponse { + return new E2eeResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeResponse { + return new E2eeResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeResponse { + return new E2eeResponse().fromJsonString(jsonString, options); + } + + static equals(a: E2eeResponse | PlainMessage | undefined, b: E2eeResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeResponse, a, b); + } } -/** - * Describes the enum livekit.proto.EncryptionType. - */ -export const EncryptionTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_e2ee, 0); - -/** - * @generated from enum livekit.proto.EncryptionState - */ -export enum EncryptionState { - /** - * @generated from enum value: NEW = 0; - */ - NEW = 0, - - /** - * @generated from enum value: OK = 1; - */ - OK = 1, - - /** - * @generated from enum value: ENCRYPTION_FAILED = 2; - */ - ENCRYPTION_FAILED = 2, - - /** - * @generated from enum value: DECRYPTION_FAILED = 3; - */ - DECRYPTION_FAILED = 3, - - /** - * @generated from enum value: MISSING_KEY = 4; - */ - MISSING_KEY = 4, - - /** - * @generated from enum value: KEY_RATCHETED = 5; - */ - KEY_RATCHETED = 5, - - /** - * @generated from enum value: INTERNAL_ERROR = 6; - */ - INTERNAL_ERROR = 6, -} - -/** - * Describes the enum livekit.proto.EncryptionState. - */ -export const EncryptionStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_e2ee, 1); - diff --git a/packages/livekit-rtc/src/proto/ffi_pb.ts b/packages/livekit-rtc/src/proto/ffi_pb.ts index 520b0e74..44685db0 100644 --- a/packages/livekit-rtc/src/proto/ffi_pb.ts +++ b/packages/livekit-rtc/src/proto/ffi_pb.ts @@ -12,33 +12,58 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file ffi.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { E2eeRequest, E2eeResponse } from "./e2ee_pb.js"; -import { file_e2ee } from "./e2ee_pb.js"; -import type { CreateAudioTrackRequest, CreateAudioTrackResponse, CreateVideoTrackRequest, CreateVideoTrackResponse, EnableRemoteTrackRequest, EnableRemoteTrackResponse, GetStatsCallback, GetStatsRequest, GetStatsResponse, LocalTrackMuteRequest, LocalTrackMuteResponse, TrackEvent } from "./track_pb.js"; -import { file_track } from "./track_pb.js"; -import type { EnableRemoteTrackPublicationRequest, EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionRequest, UpdateRemoteTrackPublicationDimensionResponse } from "./track_publication_pb.js"; -import { file_track_publication } from "./track_publication_pb.js"; -import type { ConnectCallback, ConnectRequest, ConnectResponse, DisconnectCallback, DisconnectRequest, DisconnectResponse, EditChatMessageRequest, GetSessionStatsCallback, GetSessionStatsRequest, GetSessionStatsResponse, PublishDataCallback, PublishDataRequest, PublishDataResponse, PublishSipDtmfCallback, PublishSipDtmfRequest, PublishSipDtmfResponse, PublishTrackCallback, PublishTrackRequest, PublishTrackResponse, PublishTranscriptionCallback, PublishTranscriptionRequest, PublishTranscriptionResponse, RoomEvent, SendChatMessageCallback, SendChatMessageRequest, SendChatMessageResponse, SendStreamChunkCallback, SendStreamChunkRequest, SendStreamChunkResponse, SendStreamHeaderCallback, SendStreamHeaderRequest, SendStreamHeaderResponse, SetLocalAttributesCallback, SetLocalAttributesRequest, SetLocalAttributesResponse, SetLocalMetadataCallback, SetLocalMetadataRequest, SetLocalMetadataResponse, SetLocalNameCallback, SetLocalNameRequest, SetLocalNameResponse, SetSubscribedRequest, SetSubscribedResponse, UnpublishTrackCallback, UnpublishTrackRequest, UnpublishTrackResponse } from "./room_pb.js"; -import { file_room } from "./room_pb.js"; -import type { CaptureVideoFrameRequest, CaptureVideoFrameResponse, NewVideoSourceRequest, NewVideoSourceResponse, NewVideoStreamRequest, NewVideoStreamResponse, VideoConvertRequest, VideoConvertResponse, VideoStreamEvent, VideoStreamFromParticipantRequest, VideoStreamFromParticipantResponse } from "./video_frame_pb.js"; -import { file_video_frame } from "./video_frame_pb.js"; -import type { AudioStreamEvent, AudioStreamFromParticipantRequest, AudioStreamFromParticipantResponse, CaptureAudioFrameCallback, CaptureAudioFrameRequest, CaptureAudioFrameResponse, ClearAudioBufferRequest, ClearAudioBufferResponse, FlushSoxResamplerRequest, FlushSoxResamplerResponse, NewAudioResamplerRequest, NewAudioResamplerResponse, NewAudioSourceRequest, NewAudioSourceResponse, NewAudioStreamRequest, NewAudioStreamResponse, NewSoxResamplerRequest, NewSoxResamplerResponse, PushSoxResamplerRequest, PushSoxResamplerResponse, RemixAndResampleRequest, RemixAndResampleResponse } from "./audio_frame_pb.js"; -import { file_audio_frame } from "./audio_frame_pb.js"; -import type { PerformRpcCallback, PerformRpcRequest, PerformRpcResponse, RegisterRpcMethodRequest, RegisterRpcMethodResponse, RpcMethodInvocationEvent, RpcMethodInvocationResponseRequest, RpcMethodInvocationResponseResponse, UnregisterRpcMethodRequest, UnregisterRpcMethodResponse } from "./rpc_pb.js"; -import { file_rpc } from "./rpc_pb.js"; -import type { Message } from "@bufbuild/protobuf"; +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; +import { ConnectCallback, ConnectRequest, ConnectResponse, DisconnectCallback, DisconnectRequest, DisconnectResponse, EditChatMessageRequest, GetSessionStatsCallback, GetSessionStatsRequest, GetSessionStatsResponse, PublishDataCallback, PublishDataRequest, PublishDataResponse, PublishSipDtmfCallback, PublishSipDtmfRequest, PublishSipDtmfResponse, PublishTrackCallback, PublishTrackRequest, PublishTrackResponse, PublishTranscriptionCallback, PublishTranscriptionRequest, PublishTranscriptionResponse, RoomEvent, SendChatMessageCallback, SendChatMessageRequest, SendChatMessageResponse, SendStreamChunkCallback, SendStreamChunkRequest, SendStreamChunkResponse, SendStreamHeaderCallback, SendStreamHeaderRequest, SendStreamHeaderResponse, SetLocalAttributesCallback, SetLocalAttributesRequest, SetLocalAttributesResponse, SetLocalMetadataCallback, SetLocalMetadataRequest, SetLocalMetadataResponse, SetLocalNameCallback, SetLocalNameRequest, SetLocalNameResponse, SetSubscribedRequest, SetSubscribedResponse, UnpublishTrackCallback, UnpublishTrackRequest, UnpublishTrackResponse } from "./room_pbjs"; +import { CreateAudioTrackRequest, CreateAudioTrackResponse, CreateVideoTrackRequest, CreateVideoTrackResponse, EnableRemoteTrackRequest, EnableRemoteTrackResponse, GetStatsCallback, GetStatsRequest, GetStatsResponse, LocalTrackMuteRequest, LocalTrackMuteResponse, TrackEvent } from "./track_pbjs"; +import { CaptureVideoFrameRequest, CaptureVideoFrameResponse, NewVideoSourceRequest, NewVideoSourceResponse, NewVideoStreamRequest, NewVideoStreamResponse, VideoConvertRequest, VideoConvertResponse, VideoStreamEvent, VideoStreamFromParticipantRequest, VideoStreamFromParticipantResponse } from "./video_frame_pbjs"; +import { AudioStreamEvent, AudioStreamFromParticipantRequest, AudioStreamFromParticipantResponse, CaptureAudioFrameCallback, CaptureAudioFrameRequest, CaptureAudioFrameResponse, ClearAudioBufferRequest, ClearAudioBufferResponse, FlushSoxResamplerRequest, FlushSoxResamplerResponse, NewAudioResamplerRequest, NewAudioResamplerResponse, NewAudioSourceRequest, NewAudioSourceResponse, NewAudioStreamRequest, NewAudioStreamResponse, NewSoxResamplerRequest, NewSoxResamplerResponse, PushSoxResamplerRequest, PushSoxResamplerResponse, RemixAndResampleRequest, RemixAndResampleResponse } from "./audio_frame_pbjs"; +import { E2eeRequest, E2eeResponse } from "./e2ee_pbjs"; +import { PerformRpcCallback, PerformRpcRequest, PerformRpcResponse, RegisterRpcMethodRequest, RegisterRpcMethodResponse, RpcMethodInvocationEvent, RpcMethodInvocationResponseRequest, RpcMethodInvocationResponseResponse, UnregisterRpcMethodRequest, UnregisterRpcMethodResponse } from "./rpc_pbjs"; +import { EnableRemoteTrackPublicationRequest, EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionRequest, UpdateRemoteTrackPublicationDimensionResponse } from "./track_publication_pbjs"; /** - * Describes the file ffi.proto. + * @generated from enum livekit.proto.LogLevel */ -export const file_ffi: GenFile = /*@__PURE__*/ - fileDesc("CglmZmkucHJvdG8SDWxpdmVraXQucHJvdG8igRgKCkZmaVJlcXVlc3QSMAoHZGlzcG9zZRgCIAEoCzIdLmxpdmVraXQucHJvdG8uRGlzcG9zZVJlcXVlc3RIABIwCgdjb25uZWN0GAMgASgLMh0ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVxdWVzdEgAEjYKCmRpc2Nvbm5lY3QYBCABKAsyIC5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZXF1ZXN0SAASOwoNcHVibGlzaF90cmFjaxgFIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYWNrUmVxdWVzdEgAEj8KD3VucHVibGlzaF90cmFjaxgGIAEoCzIkLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXF1ZXN0SAASOQoMcHVibGlzaF9kYXRhGAcgASgLMiEubGl2ZWtpdC5wcm90by5QdWJsaXNoRGF0YVJlcXVlc3RIABI9Cg5zZXRfc3Vic2NyaWJlZBgIIAEoCzIjLmxpdmVraXQucHJvdG8uU2V0U3Vic2NyaWJlZFJlcXVlc3RIABJEChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJi5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXF1ZXN0SAASPAoOc2V0X2xvY2FsX25hbWUYCiABKAsyIi5saXZla2l0LnByb3RvLlNldExvY2FsTmFtZVJlcXVlc3RIABJIChRzZXRfbG9jYWxfYXR0cmlidXRlcxgLIAEoCzIoLmxpdmVraXQucHJvdG8uU2V0TG9jYWxBdHRyaWJ1dGVzUmVxdWVzdEgAEkIKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiUubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXF1ZXN0SAASSwoVcHVibGlzaF90cmFuc2NyaXB0aW9uGA0gASgLMioubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3RIABJAChBwdWJsaXNoX3NpcF9kdG1mGA4gASgLMiQubGl2ZWtpdC5wcm90by5QdWJsaXNoU2lwRHRtZlJlcXVlc3RIABJEChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJi5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXF1ZXN0SAASRAoSY3JlYXRlX2F1ZGlvX3RyYWNrGBAgASgLMiYubGl2ZWtpdC5wcm90by5DcmVhdGVBdWRpb1RyYWNrUmVxdWVzdEgAEkAKEGxvY2FsX3RyYWNrX211dGUYESABKAsyJC5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tNdXRlUmVxdWVzdEgAEkYKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyJy5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVxdWVzdEgAEjMKCWdldF9zdGF0cxgTIAEoCzIeLmxpdmVraXQucHJvdG8uR2V0U3RhdHNSZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3N0cmVhbRgUIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9TdHJlYW1SZXF1ZXN0SAASQAoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIkLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXF1ZXN0SAASRgoTY2FwdHVyZV92aWRlb19mcmFtZRgWIAEoCzInLmxpdmVraXQucHJvdG8uQ2FwdHVyZVZpZGVvRnJhbWVSZXF1ZXN0SAASOwoNdmlkZW9fY29udmVydBgXIAEoCzIiLmxpdmVraXQucHJvdG8uVmlkZW9Db252ZXJ0UmVxdWVzdEgAElkKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjAubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlcXVlc3RIABJAChBuZXdfYXVkaW9fc3RyZWFtGBkgASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1N0cmVhbVJlcXVlc3RIABJAChBuZXdfYXVkaW9fc291cmNlGBogASgLMiQubGl2ZWtpdC5wcm90by5OZXdBdWRpb1NvdXJjZVJlcXVlc3RIABJGChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMicubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlcXVlc3RIABJEChJjbGVhcl9hdWRpb19idWZmZXIYHCABKAsyJi5saXZla2l0LnByb3RvLkNsZWFyQXVkaW9CdWZmZXJSZXF1ZXN0SAASRgoTbmV3X2F1ZGlvX3Jlc2FtcGxlchgdIAEoCzInLmxpdmVraXQucHJvdG8uTmV3QXVkaW9SZXNhbXBsZXJSZXF1ZXN0SAASRAoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMiYubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVxdWVzdEgAEioKBGUyZWUYHyABKAsyGi5saXZla2l0LnByb3RvLkUyZWVSZXF1ZXN0SAASWQodYXVkaW9fc3RyZWFtX2Zyb21fcGFydGljaXBhbnQYICABKAsyMC5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRnJvbVBhcnRpY2lwYW50UmVxdWVzdEgAEkIKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiUubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXF1ZXN0SAASRAoScHVzaF9zb3hfcmVzYW1wbGVyGCIgASgLMiYubGl2ZWtpdC5wcm90by5QdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkYKE2ZsdXNoX3NveF9yZXNhbXBsZXIYIyABKAsyJy5saXZla2l0LnByb3RvLkZsdXNoU294UmVzYW1wbGVyUmVxdWVzdEgAEkIKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiUubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0SAASQgoRZWRpdF9jaGF0X21lc3NhZ2UYJSABKAsyJS5saXZla2l0LnByb3RvLkVkaXRDaGF0TWVzc2FnZVJlcXVlc3RIABI3CgtwZXJmb3JtX3JwYxgmIAEoCzIgLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY1JlcXVlc3RIABJGChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMicubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlcXVlc3RIABJKChV1bnJlZ2lzdGVyX3JwY19tZXRob2QYKCABKAsyKS5saXZla2l0LnByb3RvLlVucmVnaXN0ZXJScGNNZXRob2RSZXF1ZXN0SAASWwoecnBjX21ldGhvZF9pbnZvY2F0aW9uX3Jlc3BvbnNlGCkgASgLMjEubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uUmVzcG9uc2VSZXF1ZXN0SAASXQofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgqIAEoCzIyLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlcXVlc3RIABJwCil1cGRhdGVfcmVtb3RlX3RyYWNrX3B1YmxpY2F0aW9uX2RpbWVuc2lvbhgrIAEoCzI7LmxpdmVraXQucHJvdG8uVXBkYXRlUmVtb3RlVHJhY2tQdWJsaWNhdGlvbkRpbWVuc2lvblJlcXVlc3RIABJEChJzZW5kX3N0cmVhbV9oZWFkZXIYLCABKAsyJi5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1IZWFkZXJSZXF1ZXN0SAASQgoRc2VuZF9zdHJlYW1fY2h1bmsYLSABKAsyJS5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1DaHVua1JlcXVlc3RIAEIJCgdtZXNzYWdlIukXCgtGZmlSZXNwb25zZRIxCgdkaXNwb3NlGAIgASgLMh4ubGl2ZWtpdC5wcm90by5EaXNwb3NlUmVzcG9uc2VIABIxCgdjb25uZWN0GAMgASgLMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0UmVzcG9uc2VIABI3CgpkaXNjb25uZWN0GAQgASgLMiEubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVzcG9uc2VIABI8Cg1wdWJsaXNoX3RyYWNrGAUgASgLMiMubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhY2tSZXNwb25zZUgAEkAKD3VucHVibGlzaF90cmFjaxgGIAEoCzIlLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tSZXNwb25zZUgAEjoKDHB1Ymxpc2hfZGF0YRgHIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaERhdGFSZXNwb25zZUgAEj4KDnNldF9zdWJzY3JpYmVkGAggASgLMiQubGl2ZWtpdC5wcm90by5TZXRTdWJzY3JpYmVkUmVzcG9uc2VIABJFChJzZXRfbG9jYWxfbWV0YWRhdGEYCSABKAsyJy5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFSZXNwb25zZUgAEj0KDnNldF9sb2NhbF9uYW1lGAogASgLMiMubGl2ZWtpdC5wcm90by5TZXRMb2NhbE5hbWVSZXNwb25zZUgAEkkKFHNldF9sb2NhbF9hdHRyaWJ1dGVzGAsgASgLMikubGl2ZWtpdC5wcm90by5TZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZUgAEkMKEWdldF9zZXNzaW9uX3N0YXRzGAwgASgLMiYubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNSZXNwb25zZUgAEkwKFXB1Ymxpc2hfdHJhbnNjcmlwdGlvbhgNIAEoCzIrLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYW5zY3JpcHRpb25SZXNwb25zZUgAEkEKEHB1Ymxpc2hfc2lwX2R0bWYYDiABKAsyJS5saXZla2l0LnByb3RvLlB1Ymxpc2hTaXBEdG1mUmVzcG9uc2VIABJFChJjcmVhdGVfdmlkZW9fdHJhY2sYDyABKAsyJy5saXZla2l0LnByb3RvLkNyZWF0ZVZpZGVvVHJhY2tSZXNwb25zZUgAEkUKEmNyZWF0ZV9hdWRpb190cmFjaxgQIAEoCzInLmxpdmVraXQucHJvdG8uQ3JlYXRlQXVkaW9UcmFja1Jlc3BvbnNlSAASQQoQbG9jYWxfdHJhY2tfbXV0ZRgRIAEoCzIlLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja011dGVSZXNwb25zZUgAEkcKE2VuYWJsZV9yZW1vdGVfdHJhY2sYEiABKAsyKC5saXZla2l0LnByb3RvLkVuYWJsZVJlbW90ZVRyYWNrUmVzcG9uc2VIABI0CglnZXRfc3RhdHMYEyABKAsyHy5saXZla2l0LnByb3RvLkdldFN0YXRzUmVzcG9uc2VIABJBChBuZXdfdmlkZW9fc3RyZWFtGBQgASgLMiUubGl2ZWtpdC5wcm90by5OZXdWaWRlb1N0cmVhbVJlc3BvbnNlSAASQQoQbmV3X3ZpZGVvX3NvdXJjZRgVIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3VmlkZW9Tb3VyY2VSZXNwb25zZUgAEkcKE2NhcHR1cmVfdmlkZW9fZnJhbWUYFiABKAsyKC5saXZla2l0LnByb3RvLkNhcHR1cmVWaWRlb0ZyYW1lUmVzcG9uc2VIABI8Cg12aWRlb19jb252ZXJ0GBcgASgLMiMubGl2ZWtpdC5wcm90by5WaWRlb0NvbnZlcnRSZXNwb25zZUgAEloKHXZpZGVvX3N0cmVhbV9mcm9tX3BhcnRpY2lwYW50GBggASgLMjEubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbUZyb21QYXJ0aWNpcGFudFJlc3BvbnNlSAASQQoQbmV3X2F1ZGlvX3N0cmVhbRgZIAEoCzIlLmxpdmVraXQucHJvdG8uTmV3QXVkaW9TdHJlYW1SZXNwb25zZUgAEkEKEG5ld19hdWRpb19zb3VyY2UYGiABKAsyJS5saXZla2l0LnByb3RvLk5ld0F1ZGlvU291cmNlUmVzcG9uc2VIABJHChNjYXB0dXJlX2F1ZGlvX2ZyYW1lGBsgASgLMigubGl2ZWtpdC5wcm90by5DYXB0dXJlQXVkaW9GcmFtZVJlc3BvbnNlSAASRQoSY2xlYXJfYXVkaW9fYnVmZmVyGBwgASgLMicubGl2ZWtpdC5wcm90by5DbGVhckF1ZGlvQnVmZmVyUmVzcG9uc2VIABJHChNuZXdfYXVkaW9fcmVzYW1wbGVyGB0gASgLMigubGl2ZWtpdC5wcm90by5OZXdBdWRpb1Jlc2FtcGxlclJlc3BvbnNlSAASRQoScmVtaXhfYW5kX3Jlc2FtcGxlGB4gASgLMicubGl2ZWtpdC5wcm90by5SZW1peEFuZFJlc2FtcGxlUmVzcG9uc2VIABJaCh1hdWRpb19zdHJlYW1fZnJvbV9wYXJ0aWNpcGFudBgfIAEoCzIxLmxpdmVraXQucHJvdG8uQXVkaW9TdHJlYW1Gcm9tUGFydGljaXBhbnRSZXNwb25zZUgAEisKBGUyZWUYICABKAsyGy5saXZla2l0LnByb3RvLkUyZWVSZXNwb25zZUgAEkMKEW5ld19zb3hfcmVzYW1wbGVyGCEgASgLMiYubGl2ZWtpdC5wcm90by5OZXdTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkUKEnB1c2hfc294X3Jlc2FtcGxlchgiIAEoCzInLmxpdmVraXQucHJvdG8uUHVzaFNveFJlc2FtcGxlclJlc3BvbnNlSAASRwoTZmx1c2hfc294X3Jlc2FtcGxlchgjIAEoCzIoLmxpdmVraXQucHJvdG8uRmx1c2hTb3hSZXNhbXBsZXJSZXNwb25zZUgAEkMKEXNlbmRfY2hhdF9tZXNzYWdlGCQgASgLMiYubGl2ZWtpdC5wcm90by5TZW5kQ2hhdE1lc3NhZ2VSZXNwb25zZUgAEjgKC3BlcmZvcm1fcnBjGCUgASgLMiEubGl2ZWtpdC5wcm90by5QZXJmb3JtUnBjUmVzcG9uc2VIABJHChNyZWdpc3Rlcl9ycGNfbWV0aG9kGCYgASgLMigubGl2ZWtpdC5wcm90by5SZWdpc3RlclJwY01ldGhvZFJlc3BvbnNlSAASSwoVdW5yZWdpc3Rlcl9ycGNfbWV0aG9kGCcgASgLMioubGl2ZWtpdC5wcm90by5VbnJlZ2lzdGVyUnBjTWV0aG9kUmVzcG9uc2VIABJcCh5ycGNfbWV0aG9kX2ludm9jYXRpb25fcmVzcG9uc2UYKCABKAsyMi5saXZla2l0LnByb3RvLlJwY01ldGhvZEludm9jYXRpb25SZXNwb25zZVJlc3BvbnNlSAASXgofZW5hYmxlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbhgpIAEoCzIzLmxpdmVraXQucHJvdG8uRW5hYmxlUmVtb3RlVHJhY2tQdWJsaWNhdGlvblJlc3BvbnNlSAAScQopdXBkYXRlX3JlbW90ZV90cmFja19wdWJsaWNhdGlvbl9kaW1lbnNpb24YKiABKAsyPC5saXZla2l0LnByb3RvLlVwZGF0ZVJlbW90ZVRyYWNrUHVibGljYXRpb25EaW1lbnNpb25SZXNwb25zZUgAEkUKEnNlbmRfc3RyZWFtX2hlYWRlchgrIAEoCzInLmxpdmVraXQucHJvdG8uU2VuZFN0cmVhbUhlYWRlclJlc3BvbnNlSAASQwoRc2VuZF9zdHJlYW1fY2h1bmsYLCABKAsyJi5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1DaHVua1Jlc3BvbnNlSABCCQoHbWVzc2FnZSKWDAoIRmZpRXZlbnQSLgoKcm9vbV9ldmVudBgBIAEoCzIYLmxpdmVraXQucHJvdG8uUm9vbUV2ZW50SAASMAoLdHJhY2tfZXZlbnQYAiABKAsyGS5saXZla2l0LnByb3RvLlRyYWNrRXZlbnRIABI9ChJ2aWRlb19zdHJlYW1fZXZlbnQYAyABKAsyHy5saXZla2l0LnByb3RvLlZpZGVvU3RyZWFtRXZlbnRIABI9ChJhdWRpb19zdHJlYW1fZXZlbnQYBCABKAsyHy5saXZla2l0LnByb3RvLkF1ZGlvU3RyZWFtRXZlbnRIABIxCgdjb25uZWN0GAUgASgLMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2tIABI3CgpkaXNjb25uZWN0GAcgASgLMiEubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0Q2FsbGJhY2tIABIxCgdkaXNwb3NlGAggASgLMh4ubGl2ZWtpdC5wcm90by5EaXNwb3NlQ2FsbGJhY2tIABI8Cg1wdWJsaXNoX3RyYWNrGAkgASgLMiMubGl2ZWtpdC5wcm90by5QdWJsaXNoVHJhY2tDYWxsYmFja0gAEkAKD3VucHVibGlzaF90cmFjaxgKIAEoCzIlLmxpdmVraXQucHJvdG8uVW5wdWJsaXNoVHJhY2tDYWxsYmFja0gAEjoKDHB1Ymxpc2hfZGF0YRgLIAEoCzIiLmxpdmVraXQucHJvdG8uUHVibGlzaERhdGFDYWxsYmFja0gAEkwKFXB1Ymxpc2hfdHJhbnNjcmlwdGlvbhgMIAEoCzIrLmxpdmVraXQucHJvdG8uUHVibGlzaFRyYW5zY3JpcHRpb25DYWxsYmFja0gAEkcKE2NhcHR1cmVfYXVkaW9fZnJhbWUYDSABKAsyKC5saXZla2l0LnByb3RvLkNhcHR1cmVBdWRpb0ZyYW1lQ2FsbGJhY2tIABJFChJzZXRfbG9jYWxfbWV0YWRhdGEYDiABKAsyJy5saXZla2l0LnByb3RvLlNldExvY2FsTWV0YWRhdGFDYWxsYmFja0gAEj0KDnNldF9sb2NhbF9uYW1lGA8gASgLMiMubGl2ZWtpdC5wcm90by5TZXRMb2NhbE5hbWVDYWxsYmFja0gAEkkKFHNldF9sb2NhbF9hdHRyaWJ1dGVzGBAgASgLMikubGl2ZWtpdC5wcm90by5TZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFja0gAEjQKCWdldF9zdGF0cxgRIAEoCzIfLmxpdmVraXQucHJvdG8uR2V0U3RhdHNDYWxsYmFja0gAEicKBGxvZ3MYEiABKAsyFy5saXZla2l0LnByb3RvLkxvZ0JhdGNoSAASQwoRZ2V0X3Nlc3Npb25fc3RhdHMYEyABKAsyJi5saXZla2l0LnByb3RvLkdldFNlc3Npb25TdGF0c0NhbGxiYWNrSAASJQoFcGFuaWMYFCABKAsyFC5saXZla2l0LnByb3RvLlBhbmljSAASQQoQcHVibGlzaF9zaXBfZHRtZhgVIAEoCzIlLmxpdmVraXQucHJvdG8uUHVibGlzaFNpcER0bWZDYWxsYmFja0gAEj4KDGNoYXRfbWVzc2FnZRgWIAEoCzImLmxpdmVraXQucHJvdG8uU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2tIABI4CgtwZXJmb3JtX3JwYxgXIAEoCzIhLmxpdmVraXQucHJvdG8uUGVyZm9ybVJwY0NhbGxiYWNrSAASSAoVcnBjX21ldGhvZF9pbnZvY2F0aW9uGBggASgLMicubGl2ZWtpdC5wcm90by5ScGNNZXRob2RJbnZvY2F0aW9uRXZlbnRIABJFChJzZW5kX3N0cmVhbV9oZWFkZXIYGSABKAsyJy5saXZla2l0LnByb3RvLlNlbmRTdHJlYW1IZWFkZXJDYWxsYmFja0gAEkMKEXNlbmRfc3RyZWFtX2NodW5rGBogASgLMiYubGl2ZWtpdC5wcm90by5TZW5kU3RyZWFtQ2h1bmtDYWxsYmFja0gAQgkKB21lc3NhZ2UiHwoORGlzcG9zZVJlcXVlc3QSDQoFYXN5bmMYASACKAgiIwoPRGlzcG9zZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgASgEIiMKD0Rpc3Bvc2VDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKFAQoJTG9nUmVjb3JkEiYKBWxldmVsGAEgAigOMhcubGl2ZWtpdC5wcm90by5Mb2dMZXZlbBIOCgZ0YXJnZXQYAiACKAkSEwoLbW9kdWxlX3BhdGgYAyABKAkSDAoEZmlsZRgEIAEoCRIMCgRsaW5lGAUgASgNEg8KB21lc3NhZ2UYBiACKAkiNQoITG9nQmF0Y2gSKQoHcmVjb3JkcxgBIAMoCzIYLmxpdmVraXQucHJvdG8uTG9nUmVjb3JkIhgKBVBhbmljEg8KB21lc3NhZ2UYASACKAkqUwoITG9nTGV2ZWwSDQoJTE9HX0VSUk9SEAASDAoITE9HX1dBUk4QARIMCghMT0dfSU5GTxACEg0KCUxPR19ERUJVRxADEg0KCUxPR19UUkFDRRAEQhCqAg1MaXZlS2l0LlByb3Rv", [file_e2ee, file_track, file_track_publication, file_room, file_video_frame, file_audio_frame, file_rpc]); +export enum LogLevel { + /** + * @generated from enum value: LOG_ERROR = 0; + */ + LOG_ERROR = 0, + + /** + * @generated from enum value: LOG_WARN = 1; + */ + LOG_WARN = 1, + + /** + * @generated from enum value: LOG_INFO = 2; + */ + LOG_INFO = 2, + + /** + * @generated from enum value: LOG_DEBUG = 3; + */ + LOG_DEBUG = 3, + + /** + * @generated from enum value: LOG_TRACE = 4; + */ + LOG_TRACE = 4, +} +// Retrieve enum metadata with: proto2.getEnumType(LogLevel) +proto2.util.setEnumType(LogLevel, "livekit.proto.LogLevel", [ + { no: 0, name: "LOG_ERROR" }, + { no: 1, name: "LOG_WARN" }, + { no: 2, name: "LOG_INFO" }, + { no: 3, name: "LOG_DEBUG" }, + { no: 4, name: "LOG_TRACE" }, +]); /** * This is the input of livekit_ffi_request function @@ -46,7 +71,7 @@ export const file_ffi: GenFile = /*@__PURE__*/ * * @generated from message livekit.proto.FfiRequest */ -export type FfiRequest = Message<"livekit.proto.FfiRequest"> & { +export class FfiRequest extends Message { /** * @generated from oneof livekit.proto.FfiRequest.message */ @@ -328,22 +353,85 @@ export type FfiRequest = Message<"livekit.proto.FfiRequest"> & { */ value: SendStreamChunkRequest; case: "sendStreamChunk"; - } | { case: undefined; value?: undefined }; -}; + } | { case: undefined; value?: undefined } = { case: undefined }; -/** - * Describes the message livekit.proto.FfiRequest. - * Use `create(FfiRequestSchema)` to create a new message. - */ -export const FfiRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FfiRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 2, name: "dispose", kind: "message", T: DisposeRequest, oneof: "message" }, + { no: 3, name: "connect", kind: "message", T: ConnectRequest, oneof: "message" }, + { no: 4, name: "disconnect", kind: "message", T: DisconnectRequest, oneof: "message" }, + { no: 5, name: "publish_track", kind: "message", T: PublishTrackRequest, oneof: "message" }, + { no: 6, name: "unpublish_track", kind: "message", T: UnpublishTrackRequest, oneof: "message" }, + { no: 7, name: "publish_data", kind: "message", T: PublishDataRequest, oneof: "message" }, + { no: 8, name: "set_subscribed", kind: "message", T: SetSubscribedRequest, oneof: "message" }, + { no: 9, name: "set_local_metadata", kind: "message", T: SetLocalMetadataRequest, oneof: "message" }, + { no: 10, name: "set_local_name", kind: "message", T: SetLocalNameRequest, oneof: "message" }, + { no: 11, name: "set_local_attributes", kind: "message", T: SetLocalAttributesRequest, oneof: "message" }, + { no: 12, name: "get_session_stats", kind: "message", T: GetSessionStatsRequest, oneof: "message" }, + { no: 13, name: "publish_transcription", kind: "message", T: PublishTranscriptionRequest, oneof: "message" }, + { no: 14, name: "publish_sip_dtmf", kind: "message", T: PublishSipDtmfRequest, oneof: "message" }, + { no: 15, name: "create_video_track", kind: "message", T: CreateVideoTrackRequest, oneof: "message" }, + { no: 16, name: "create_audio_track", kind: "message", T: CreateAudioTrackRequest, oneof: "message" }, + { no: 17, name: "local_track_mute", kind: "message", T: LocalTrackMuteRequest, oneof: "message" }, + { no: 18, name: "enable_remote_track", kind: "message", T: EnableRemoteTrackRequest, oneof: "message" }, + { no: 19, name: "get_stats", kind: "message", T: GetStatsRequest, oneof: "message" }, + { no: 20, name: "new_video_stream", kind: "message", T: NewVideoStreamRequest, oneof: "message" }, + { no: 21, name: "new_video_source", kind: "message", T: NewVideoSourceRequest, oneof: "message" }, + { no: 22, name: "capture_video_frame", kind: "message", T: CaptureVideoFrameRequest, oneof: "message" }, + { no: 23, name: "video_convert", kind: "message", T: VideoConvertRequest, oneof: "message" }, + { no: 24, name: "video_stream_from_participant", kind: "message", T: VideoStreamFromParticipantRequest, oneof: "message" }, + { no: 25, name: "new_audio_stream", kind: "message", T: NewAudioStreamRequest, oneof: "message" }, + { no: 26, name: "new_audio_source", kind: "message", T: NewAudioSourceRequest, oneof: "message" }, + { no: 27, name: "capture_audio_frame", kind: "message", T: CaptureAudioFrameRequest, oneof: "message" }, + { no: 28, name: "clear_audio_buffer", kind: "message", T: ClearAudioBufferRequest, oneof: "message" }, + { no: 29, name: "new_audio_resampler", kind: "message", T: NewAudioResamplerRequest, oneof: "message" }, + { no: 30, name: "remix_and_resample", kind: "message", T: RemixAndResampleRequest, oneof: "message" }, + { no: 31, name: "e2ee", kind: "message", T: E2eeRequest, oneof: "message" }, + { no: 32, name: "audio_stream_from_participant", kind: "message", T: AudioStreamFromParticipantRequest, oneof: "message" }, + { no: 33, name: "new_sox_resampler", kind: "message", T: NewSoxResamplerRequest, oneof: "message" }, + { no: 34, name: "push_sox_resampler", kind: "message", T: PushSoxResamplerRequest, oneof: "message" }, + { no: 35, name: "flush_sox_resampler", kind: "message", T: FlushSoxResamplerRequest, oneof: "message" }, + { no: 36, name: "send_chat_message", kind: "message", T: SendChatMessageRequest, oneof: "message" }, + { no: 37, name: "edit_chat_message", kind: "message", T: EditChatMessageRequest, oneof: "message" }, + { no: 38, name: "perform_rpc", kind: "message", T: PerformRpcRequest, oneof: "message" }, + { no: 39, name: "register_rpc_method", kind: "message", T: RegisterRpcMethodRequest, oneof: "message" }, + { no: 40, name: "unregister_rpc_method", kind: "message", T: UnregisterRpcMethodRequest, oneof: "message" }, + { no: 41, name: "rpc_method_invocation_response", kind: "message", T: RpcMethodInvocationResponseRequest, oneof: "message" }, + { no: 42, name: "enable_remote_track_publication", kind: "message", T: EnableRemoteTrackPublicationRequest, oneof: "message" }, + { no: 43, name: "update_remote_track_publication_dimension", kind: "message", T: UpdateRemoteTrackPublicationDimensionRequest, oneof: "message" }, + { no: 44, name: "send_stream_header", kind: "message", T: SendStreamHeaderRequest, oneof: "message" }, + { no: 45, name: "send_stream_chunk", kind: "message", T: SendStreamChunkRequest, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FfiRequest { + return new FfiRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FfiRequest { + return new FfiRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FfiRequest { + return new FfiRequest().fromJsonString(jsonString, options); + } + + static equals(a: FfiRequest | PlainMessage | undefined, b: FfiRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(FfiRequest, a, b); + } +} /** * This is the output of livekit_ffi_request function. * * @generated from message livekit.proto.FfiResponse */ -export type FfiResponse = Message<"livekit.proto.FfiResponse"> & { +export class FfiResponse extends Message { /** * @generated from oneof livekit.proto.FfiResponse.message */ @@ -619,15 +707,77 @@ export type FfiResponse = Message<"livekit.proto.FfiResponse"> & { */ value: SendStreamChunkResponse; case: "sendStreamChunk"; - } | { case: undefined; value?: undefined }; -}; + } | { case: undefined; value?: undefined } = { case: undefined }; -/** - * Describes the message livekit.proto.FfiResponse. - * Use `create(FfiResponseSchema)` to create a new message. - */ -export const FfiResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FfiResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 2, name: "dispose", kind: "message", T: DisposeResponse, oneof: "message" }, + { no: 3, name: "connect", kind: "message", T: ConnectResponse, oneof: "message" }, + { no: 4, name: "disconnect", kind: "message", T: DisconnectResponse, oneof: "message" }, + { no: 5, name: "publish_track", kind: "message", T: PublishTrackResponse, oneof: "message" }, + { no: 6, name: "unpublish_track", kind: "message", T: UnpublishTrackResponse, oneof: "message" }, + { no: 7, name: "publish_data", kind: "message", T: PublishDataResponse, oneof: "message" }, + { no: 8, name: "set_subscribed", kind: "message", T: SetSubscribedResponse, oneof: "message" }, + { no: 9, name: "set_local_metadata", kind: "message", T: SetLocalMetadataResponse, oneof: "message" }, + { no: 10, name: "set_local_name", kind: "message", T: SetLocalNameResponse, oneof: "message" }, + { no: 11, name: "set_local_attributes", kind: "message", T: SetLocalAttributesResponse, oneof: "message" }, + { no: 12, name: "get_session_stats", kind: "message", T: GetSessionStatsResponse, oneof: "message" }, + { no: 13, name: "publish_transcription", kind: "message", T: PublishTranscriptionResponse, oneof: "message" }, + { no: 14, name: "publish_sip_dtmf", kind: "message", T: PublishSipDtmfResponse, oneof: "message" }, + { no: 15, name: "create_video_track", kind: "message", T: CreateVideoTrackResponse, oneof: "message" }, + { no: 16, name: "create_audio_track", kind: "message", T: CreateAudioTrackResponse, oneof: "message" }, + { no: 17, name: "local_track_mute", kind: "message", T: LocalTrackMuteResponse, oneof: "message" }, + { no: 18, name: "enable_remote_track", kind: "message", T: EnableRemoteTrackResponse, oneof: "message" }, + { no: 19, name: "get_stats", kind: "message", T: GetStatsResponse, oneof: "message" }, + { no: 20, name: "new_video_stream", kind: "message", T: NewVideoStreamResponse, oneof: "message" }, + { no: 21, name: "new_video_source", kind: "message", T: NewVideoSourceResponse, oneof: "message" }, + { no: 22, name: "capture_video_frame", kind: "message", T: CaptureVideoFrameResponse, oneof: "message" }, + { no: 23, name: "video_convert", kind: "message", T: VideoConvertResponse, oneof: "message" }, + { no: 24, name: "video_stream_from_participant", kind: "message", T: VideoStreamFromParticipantResponse, oneof: "message" }, + { no: 25, name: "new_audio_stream", kind: "message", T: NewAudioStreamResponse, oneof: "message" }, + { no: 26, name: "new_audio_source", kind: "message", T: NewAudioSourceResponse, oneof: "message" }, + { no: 27, name: "capture_audio_frame", kind: "message", T: CaptureAudioFrameResponse, oneof: "message" }, + { no: 28, name: "clear_audio_buffer", kind: "message", T: ClearAudioBufferResponse, oneof: "message" }, + { no: 29, name: "new_audio_resampler", kind: "message", T: NewAudioResamplerResponse, oneof: "message" }, + { no: 30, name: "remix_and_resample", kind: "message", T: RemixAndResampleResponse, oneof: "message" }, + { no: 31, name: "audio_stream_from_participant", kind: "message", T: AudioStreamFromParticipantResponse, oneof: "message" }, + { no: 32, name: "e2ee", kind: "message", T: E2eeResponse, oneof: "message" }, + { no: 33, name: "new_sox_resampler", kind: "message", T: NewSoxResamplerResponse, oneof: "message" }, + { no: 34, name: "push_sox_resampler", kind: "message", T: PushSoxResamplerResponse, oneof: "message" }, + { no: 35, name: "flush_sox_resampler", kind: "message", T: FlushSoxResamplerResponse, oneof: "message" }, + { no: 36, name: "send_chat_message", kind: "message", T: SendChatMessageResponse, oneof: "message" }, + { no: 37, name: "perform_rpc", kind: "message", T: PerformRpcResponse, oneof: "message" }, + { no: 38, name: "register_rpc_method", kind: "message", T: RegisterRpcMethodResponse, oneof: "message" }, + { no: 39, name: "unregister_rpc_method", kind: "message", T: UnregisterRpcMethodResponse, oneof: "message" }, + { no: 40, name: "rpc_method_invocation_response", kind: "message", T: RpcMethodInvocationResponseResponse, oneof: "message" }, + { no: 41, name: "enable_remote_track_publication", kind: "message", T: EnableRemoteTrackPublicationResponse, oneof: "message" }, + { no: 42, name: "update_remote_track_publication_dimension", kind: "message", T: UpdateRemoteTrackPublicationDimensionResponse, oneof: "message" }, + { no: 43, name: "send_stream_header", kind: "message", T: SendStreamHeaderResponse, oneof: "message" }, + { no: 44, name: "send_stream_chunk", kind: "message", T: SendStreamChunkResponse, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FfiResponse { + return new FfiResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FfiResponse { + return new FfiResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FfiResponse { + return new FfiResponse().fromJsonString(jsonString, options); + } + + static equals(a: FfiResponse | PlainMessage | undefined, b: FfiResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(FfiResponse, a, b); + } +} /** * To minimize complexity, participant events are not included in the protocol. @@ -636,7 +786,7 @@ export const FfiResponseSchema: GenMessage = /*@__PURE__*/ * * @generated from message livekit.proto.FfiEvent */ -export type FfiEvent = Message<"livekit.proto.FfiEvent"> & { +export class FfiEvent extends Message { /** * @generated from oneof livekit.proto.FfiEvent.message */ @@ -790,15 +940,59 @@ export type FfiEvent = Message<"livekit.proto.FfiEvent"> & { */ value: SendStreamChunkCallback; case: "sendStreamChunk"; - } | { case: undefined; value?: undefined }; -}; + } | { case: undefined; value?: undefined } = { case: undefined }; -/** - * Describes the message livekit.proto.FfiEvent. - * Use `create(FfiEventSchema)` to create a new message. - */ -export const FfiEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 2); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FfiEvent"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "room_event", kind: "message", T: RoomEvent, oneof: "message" }, + { no: 2, name: "track_event", kind: "message", T: TrackEvent, oneof: "message" }, + { no: 3, name: "video_stream_event", kind: "message", T: VideoStreamEvent, oneof: "message" }, + { no: 4, name: "audio_stream_event", kind: "message", T: AudioStreamEvent, oneof: "message" }, + { no: 5, name: "connect", kind: "message", T: ConnectCallback, oneof: "message" }, + { no: 7, name: "disconnect", kind: "message", T: DisconnectCallback, oneof: "message" }, + { no: 8, name: "dispose", kind: "message", T: DisposeCallback, oneof: "message" }, + { no: 9, name: "publish_track", kind: "message", T: PublishTrackCallback, oneof: "message" }, + { no: 10, name: "unpublish_track", kind: "message", T: UnpublishTrackCallback, oneof: "message" }, + { no: 11, name: "publish_data", kind: "message", T: PublishDataCallback, oneof: "message" }, + { no: 12, name: "publish_transcription", kind: "message", T: PublishTranscriptionCallback, oneof: "message" }, + { no: 13, name: "capture_audio_frame", kind: "message", T: CaptureAudioFrameCallback, oneof: "message" }, + { no: 14, name: "set_local_metadata", kind: "message", T: SetLocalMetadataCallback, oneof: "message" }, + { no: 15, name: "set_local_name", kind: "message", T: SetLocalNameCallback, oneof: "message" }, + { no: 16, name: "set_local_attributes", kind: "message", T: SetLocalAttributesCallback, oneof: "message" }, + { no: 17, name: "get_stats", kind: "message", T: GetStatsCallback, oneof: "message" }, + { no: 18, name: "logs", kind: "message", T: LogBatch, oneof: "message" }, + { no: 19, name: "get_session_stats", kind: "message", T: GetSessionStatsCallback, oneof: "message" }, + { no: 20, name: "panic", kind: "message", T: Panic, oneof: "message" }, + { no: 21, name: "publish_sip_dtmf", kind: "message", T: PublishSipDtmfCallback, oneof: "message" }, + { no: 22, name: "chat_message", kind: "message", T: SendChatMessageCallback, oneof: "message" }, + { no: 23, name: "perform_rpc", kind: "message", T: PerformRpcCallback, oneof: "message" }, + { no: 24, name: "rpc_method_invocation", kind: "message", T: RpcMethodInvocationEvent, oneof: "message" }, + { no: 25, name: "send_stream_header", kind: "message", T: SendStreamHeaderCallback, oneof: "message" }, + { no: 26, name: "send_stream_chunk", kind: "message", T: SendStreamChunkCallback, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FfiEvent { + return new FfiEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FfiEvent { + return new FfiEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FfiEvent { + return new FfiEvent().fromJsonString(jsonString, options); + } + + static equals(a: FfiEvent | PlainMessage | undefined, b: FfiEvent | PlainMessage | undefined): boolean { + return proto2.util.equals(FfiEvent, a, b); + } +} /** * Stop all rooms synchronously (Do we need async here?). @@ -807,167 +1001,256 @@ export const FfiEventSchema: GenMessage = /*@__PURE__*/ * * @generated from message livekit.proto.DisposeRequest */ -export type DisposeRequest = Message<"livekit.proto.DisposeRequest"> & { +export class DisposeRequest extends Message { /** * @generated from field: required bool async = 1; */ - async: boolean; -}; + async?: boolean; -/** - * Describes the message livekit.proto.DisposeRequest. - * Use `create(DisposeRequestSchema)` to create a new message. - */ -export const DisposeRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 3); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DisposeRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DisposeRequest { + return new DisposeRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DisposeRequest { + return new DisposeRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DisposeRequest { + return new DisposeRequest().fromJsonString(jsonString, options); + } + + static equals(a: DisposeRequest | PlainMessage | undefined, b: DisposeRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(DisposeRequest, a, b); + } +} /** * @generated from message livekit.proto.DisposeResponse */ -export type DisposeResponse = Message<"livekit.proto.DisposeResponse"> & { +export class DisposeResponse extends Message { /** * None if sync * * @generated from field: optional uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.DisposeResponse. - * Use `create(DisposeResponseSchema)` to create a new message. - */ -export const DisposeResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 4); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DisposeResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DisposeResponse { + return new DisposeResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DisposeResponse { + return new DisposeResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DisposeResponse { + return new DisposeResponse().fromJsonString(jsonString, options); + } + + static equals(a: DisposeResponse | PlainMessage | undefined, b: DisposeResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(DisposeResponse, a, b); + } +} /** * @generated from message livekit.proto.DisposeCallback */ -export type DisposeCallback = Message<"livekit.proto.DisposeCallback"> & { +export class DisposeCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.DisposeCallback. - * Use `create(DisposeCallbackSchema)` to create a new message. - */ -export const DisposeCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 5); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DisposeCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DisposeCallback { + return new DisposeCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DisposeCallback { + return new DisposeCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DisposeCallback { + return new DisposeCallback().fromJsonString(jsonString, options); + } + + static equals(a: DisposeCallback | PlainMessage | undefined, b: DisposeCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(DisposeCallback, a, b); + } +} /** * @generated from message livekit.proto.LogRecord */ -export type LogRecord = Message<"livekit.proto.LogRecord"> & { +export class LogRecord extends Message { /** * @generated from field: required livekit.proto.LogLevel level = 1; */ - level: LogLevel; + level?: LogLevel; /** * e.g "livekit", "libwebrtc", "tokio-tungstenite", etc... * * @generated from field: required string target = 2; */ - target: string; + target?: string; /** * @generated from field: optional string module_path = 3; */ - modulePath: string; + modulePath?: string; /** * @generated from field: optional string file = 4; */ - file: string; + file?: string; /** * @generated from field: optional uint32 line = 5; */ - line: number; + line?: number; /** * @generated from field: required string message = 6; */ - message: string; -}; + message?: string; -/** - * Describes the message livekit.proto.LogRecord. - * Use `create(LogRecordSchema)` to create a new message. - */ -export const LogRecordSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 6); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.LogRecord"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "level", kind: "enum", T: proto2.getEnumType(LogLevel), req: true }, + { no: 2, name: "target", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "module_path", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 4, name: "file", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 5, name: "line", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + { no: 6, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LogRecord { + return new LogRecord().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LogRecord { + return new LogRecord().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LogRecord { + return new LogRecord().fromJsonString(jsonString, options); + } + + static equals(a: LogRecord | PlainMessage | undefined, b: LogRecord | PlainMessage | undefined): boolean { + return proto2.util.equals(LogRecord, a, b); + } +} /** * @generated from message livekit.proto.LogBatch */ -export type LogBatch = Message<"livekit.proto.LogBatch"> & { +export class LogBatch extends Message { /** * @generated from field: repeated livekit.proto.LogRecord records = 1; */ - records: LogRecord[]; -}; + records: LogRecord[] = []; -/** - * Describes the message livekit.proto.LogBatch. - * Use `create(LogBatchSchema)` to create a new message. - */ -export const LogBatchSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 7); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.LogBatch"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "records", kind: "message", T: LogRecord, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LogBatch { + return new LogBatch().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LogBatch { + return new LogBatch().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LogBatch { + return new LogBatch().fromJsonString(jsonString, options); + } + + static equals(a: LogBatch | PlainMessage | undefined, b: LogBatch | PlainMessage | undefined): boolean { + return proto2.util.equals(LogBatch, a, b); + } +} /** * @generated from message livekit.proto.Panic */ -export type Panic = Message<"livekit.proto.Panic"> & { +export class Panic extends Message { /** * @generated from field: required string message = 1; */ - message: string; -}; + message?: string; -/** - * Describes the message livekit.proto.Panic. - * Use `create(PanicSchema)` to create a new message. - */ -export const PanicSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_ffi, 8); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * @generated from enum livekit.proto.LogLevel - */ -export enum LogLevel { - /** - * @generated from enum value: LOG_ERROR = 0; - */ - LOG_ERROR = 0, + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.Panic"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); - /** - * @generated from enum value: LOG_WARN = 1; - */ - LOG_WARN = 1, + static fromBinary(bytes: Uint8Array, options?: Partial): Panic { + return new Panic().fromBinary(bytes, options); + } - /** - * @generated from enum value: LOG_INFO = 2; - */ - LOG_INFO = 2, + static fromJson(jsonValue: JsonValue, options?: Partial): Panic { + return new Panic().fromJson(jsonValue, options); + } - /** - * @generated from enum value: LOG_DEBUG = 3; - */ - LOG_DEBUG = 3, + static fromJsonString(jsonString: string, options?: Partial): Panic { + return new Panic().fromJsonString(jsonString, options); + } - /** - * @generated from enum value: LOG_TRACE = 4; - */ - LOG_TRACE = 4, + static equals(a: Panic | PlainMessage | undefined, b: Panic | PlainMessage | undefined): boolean { + return proto2.util.equals(Panic, a, b); + } } -/** - * Describes the enum livekit.proto.LogLevel. - */ -export const LogLevelSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_ffi, 0); - diff --git a/packages/livekit-rtc/src/proto/handle_pb.ts b/packages/livekit-rtc/src/proto/handle_pb.ts index 061f9988..3141a6ca 100644 --- a/packages/livekit-rtc/src/proto/handle_pb.ts +++ b/packages/livekit-rtc/src/proto/handle_pb.ts @@ -12,19 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file handle.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file handle.proto. - */ -export const file_handle: GenFile = /*@__PURE__*/ - fileDesc("CgxoYW5kbGUucHJvdG8SDWxpdmVraXQucHJvdG8iHAoORmZpT3duZWRIYW5kbGUSCgoCaWQYASACKARCEKoCDUxpdmVLaXQuUHJvdG8"); +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; /** * # Safety @@ -39,17 +33,37 @@ export const file_handle: GenFile = /*@__PURE__*/ * * @generated from message livekit.proto.FfiOwnedHandle */ -export type FfiOwnedHandle = Message<"livekit.proto.FfiOwnedHandle"> & { +export class FfiOwnedHandle extends Message { /** * @generated from field: required uint64 id = 1; */ - id: bigint; -}; + id?: bigint; -/** - * Describes the message livekit.proto.FfiOwnedHandle. - * Use `create(FfiOwnedHandleSchema)` to create a new message. - */ -export const FfiOwnedHandleSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_handle, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.FfiOwnedHandle"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FfiOwnedHandle { + return new FfiOwnedHandle().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FfiOwnedHandle { + return new FfiOwnedHandle().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FfiOwnedHandle { + return new FfiOwnedHandle().fromJsonString(jsonString, options); + } + + static equals(a: FfiOwnedHandle | PlainMessage | undefined, b: FfiOwnedHandle | PlainMessage | undefined): boolean { + return proto2.util.equals(FfiOwnedHandle, a, b); + } +} diff --git a/packages/livekit-rtc/src/proto/participant_pb.ts b/packages/livekit-rtc/src/proto/participant_pb.ts index a1a7cd1b..0dd39b1b 100644 --- a/packages/livekit-rtc/src/proto/participant_pb.ts +++ b/packages/livekit-rtc/src/proto/participant_pb.ts @@ -12,90 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file participant.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { FfiOwnedHandle } from "./handle_pb.js"; -import { file_handle } from "./handle_pb.js"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file participant.proto. - */ -export const file_participant: GenFile = /*@__PURE__*/ - fileDesc("ChFwYXJ0aWNpcGFudC5wcm90bxINbGl2ZWtpdC5wcm90byKxAgoPUGFydGljaXBhbnRJbmZvEgsKA3NpZBgBIAIoCRIMCgRuYW1lGAIgAigJEhAKCGlkZW50aXR5GAMgAigJEhAKCG1ldGFkYXRhGAQgAigJEkIKCmF0dHJpYnV0ZXMYBSADKAsyLi5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50SW5mby5BdHRyaWJ1dGVzRW50cnkSLAoEa2luZBgGIAIoDjIeLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnRLaW5kEjoKEWRpc2Nvbm5lY3RfcmVhc29uGAcgAigOMh8ubGl2ZWtpdC5wcm90by5EaXNjb25uZWN0UmVhc29uGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIm8KEE93bmVkUGFydGljaXBhbnQSLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIsCgRpbmZvGAIgAigLMh4ubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEluZm8qoQEKD1BhcnRpY2lwYW50S2luZBIdChlQQVJUSUNJUEFOVF9LSU5EX1NUQU5EQVJEEAASHAoYUEFSVElDSVBBTlRfS0lORF9JTkdSRVNTEAESGwoXUEFSVElDSVBBTlRfS0lORF9FR1JFU1MQAhIYChRQQVJUSUNJUEFOVF9LSU5EX1NJUBADEhoKFlBBUlRJQ0lQQU5UX0tJTkRfQUdFTlQQBCqsAgoQRGlzY29ubmVjdFJlYXNvbhISCg5VTktOT1dOX1JFQVNPThAAEhQKEENMSUVOVF9JTklUSUFURUQQARIWChJEVVBMSUNBVEVfSURFTlRJVFkQAhITCg9TRVJWRVJfU0hVVERPV04QAxIXChNQQVJUSUNJUEFOVF9SRU1PVkVEEAQSEAoMUk9PTV9ERUxFVEVEEAUSEgoOU1RBVEVfTUlTTUFUQ0gQBhIQCgxKT0lOX0ZBSUxVUkUQBxINCglNSUdSQVRJT04QCBIQCgxTSUdOQUxfQ0xPU0UQCRIPCgtST09NX0NMT1NFRBAKEhQKEFVTRVJfVU5BVkFJTEFCTEUQCxIRCg1VU0VSX1JFSkVDVEVEEAwSFQoRU0lQX1RSVU5LX0ZBSUxVUkUQDUIQqgINTGl2ZUtpdC5Qcm90bw", [file_handle]); - -/** - * @generated from message livekit.proto.ParticipantInfo - */ -export type ParticipantInfo = Message<"livekit.proto.ParticipantInfo"> & { - /** - * @generated from field: required string sid = 1; - */ - sid: string; - - /** - * @generated from field: required string name = 2; - */ - name: string; - - /** - * @generated from field: required string identity = 3; - */ - identity: string; - - /** - * @generated from field: required string metadata = 4; - */ - metadata: string; - - /** - * @generated from field: map attributes = 5; - */ - attributes: { [key: string]: string }; - - /** - * @generated from field: required livekit.proto.ParticipantKind kind = 6; - */ - kind: ParticipantKind; - - /** - * @generated from field: required livekit.proto.DisconnectReason disconnect_reason = 7; - */ - disconnectReason: DisconnectReason; -}; - -/** - * Describes the message livekit.proto.ParticipantInfo. - * Use `create(ParticipantInfoSchema)` to create a new message. - */ -export const ParticipantInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_participant, 0); - -/** - * @generated from message livekit.proto.OwnedParticipant - */ -export type OwnedParticipant = Message<"livekit.proto.OwnedParticipant"> & { - /** - * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; - */ - handle?: FfiOwnedHandle; - - /** - * @generated from field: required livekit.proto.ParticipantInfo info = 2; - */ - info?: ParticipantInfo; -}; - -/** - * Describes the message livekit.proto.OwnedParticipant. - * Use `create(OwnedParticipantSchema)` to create a new message. - */ -export const OwnedParticipantSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_participant, 1); +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; +import { FfiOwnedHandle } from "./handle_pbjs"; /** * @generated from enum livekit.proto.ParticipantKind @@ -126,12 +50,14 @@ export enum ParticipantKind { */ AGENT = 4, } - -/** - * Describes the enum livekit.proto.ParticipantKind. - */ -export const ParticipantKindSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_participant, 0); +// Retrieve enum metadata with: proto2.getEnumType(ParticipantKind) +proto2.util.setEnumType(ParticipantKind, "livekit.proto.ParticipantKind", [ + { no: 0, name: "PARTICIPANT_KIND_STANDARD" }, + { no: 1, name: "PARTICIPANT_KIND_INGRESS" }, + { no: 2, name: "PARTICIPANT_KIND_EGRESS" }, + { no: 3, name: "PARTICIPANT_KIND_SIP" }, + { no: 4, name: "PARTICIPANT_KIND_AGENT" }, +]); /** * @generated from enum livekit.proto.DisconnectReason @@ -233,10 +159,137 @@ export enum DisconnectReason { */ SIP_TRUNK_FAILURE = 13, } +// Retrieve enum metadata with: proto2.getEnumType(DisconnectReason) +proto2.util.setEnumType(DisconnectReason, "livekit.proto.DisconnectReason", [ + { no: 0, name: "UNKNOWN_REASON" }, + { no: 1, name: "CLIENT_INITIATED" }, + { no: 2, name: "DUPLICATE_IDENTITY" }, + { no: 3, name: "SERVER_SHUTDOWN" }, + { no: 4, name: "PARTICIPANT_REMOVED" }, + { no: 5, name: "ROOM_DELETED" }, + { no: 6, name: "STATE_MISMATCH" }, + { no: 7, name: "JOIN_FAILURE" }, + { no: 8, name: "MIGRATION" }, + { no: 9, name: "SIGNAL_CLOSE" }, + { no: 10, name: "ROOM_CLOSED" }, + { no: 11, name: "USER_UNAVAILABLE" }, + { no: 12, name: "USER_REJECTED" }, + { no: 13, name: "SIP_TRUNK_FAILURE" }, +]); + +/** + * @generated from message livekit.proto.ParticipantInfo + */ +export class ParticipantInfo extends Message { + /** + * @generated from field: required string sid = 1; + */ + sid?: string; + + /** + * @generated from field: required string name = 2; + */ + name?: string; + + /** + * @generated from field: required string identity = 3; + */ + identity?: string; + + /** + * @generated from field: required string metadata = 4; + */ + metadata?: string; + + /** + * @generated from field: map attributes = 5; + */ + attributes: { [key: string]: string } = {}; + + /** + * @generated from field: required livekit.proto.ParticipantKind kind = 6; + */ + kind?: ParticipantKind; + + /** + * @generated from field: required livekit.proto.DisconnectReason disconnect_reason = 7; + */ + disconnectReason?: DisconnectReason; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ParticipantInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "metadata", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 5, name: "attributes", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, + { no: 6, name: "kind", kind: "enum", T: proto2.getEnumType(ParticipantKind), req: true }, + { no: 7, name: "disconnect_reason", kind: "enum", T: proto2.getEnumType(DisconnectReason), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ParticipantInfo { + return new ParticipantInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ParticipantInfo { + return new ParticipantInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ParticipantInfo { + return new ParticipantInfo().fromJsonString(jsonString, options); + } + + static equals(a: ParticipantInfo | PlainMessage | undefined, b: ParticipantInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(ParticipantInfo, a, b); + } +} /** - * Describes the enum livekit.proto.DisconnectReason. + * @generated from message livekit.proto.OwnedParticipant */ -export const DisconnectReasonSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_participant, 1); +export class OwnedParticipant extends Message { + /** + * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; + */ + handle?: FfiOwnedHandle; + + /** + * @generated from field: required livekit.proto.ParticipantInfo info = 2; + */ + info?: ParticipantInfo; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedParticipant"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: ParticipantInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedParticipant { + return new OwnedParticipant().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedParticipant { + return new OwnedParticipant().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedParticipant { + return new OwnedParticipant().fromJsonString(jsonString, options); + } + + static equals(a: OwnedParticipant | PlainMessage | undefined, b: OwnedParticipant | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedParticipant, a, b); + } +} diff --git a/packages/livekit-rtc/src/proto/room_pb.ts b/packages/livekit-rtc/src/proto/room_pb.ts index a7da91cc..a1131847 100644 --- a/packages/livekit-rtc/src/proto/room_pb.ts +++ b/packages/livekit-rtc/src/proto/room_pb.ts @@ -12,86 +12,240 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file room.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { E2eeOptions, EncryptionState } from "./e2ee_pb.js"; -import { file_e2ee } from "./e2ee_pb.js"; -import type { FfiOwnedHandle } from "./handle_pb.js"; -import { file_handle } from "./handle_pb.js"; -import type { DisconnectReason, OwnedParticipant } from "./participant_pb.js"; -import { file_participant } from "./participant_pb.js"; -import type { OwnedTrack, OwnedTrackPublication, TrackSource } from "./track_pb.js"; -import { file_track } from "./track_pb.js"; -import type { VideoCodec } from "./video_frame_pb.js"; -import { file_video_frame } from "./video_frame_pb.js"; -import type { RtcStats } from "./stats_pb.js"; -import { file_stats } from "./stats_pb.js"; -import type { Message } from "@bufbuild/protobuf"; +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; +import { DisconnectReason, OwnedParticipant } from "./participant_pbjs"; +import { OwnedTrack, OwnedTrackPublication, TrackSource } from "./track_pbjs"; +import { RtcStats } from "./stats_pbjs"; +import { VideoCodec } from "./video_frame_pbjs"; +import { E2eeOptions, EncryptionState } from "./e2ee_pbjs"; +import { FfiOwnedHandle } from "./handle_pbjs"; /** - * Describes the file room.proto. + * @generated from enum livekit.proto.IceTransportType + */ +export enum IceTransportType { + /** + * @generated from enum value: TRANSPORT_RELAY = 0; + */ + TRANSPORT_RELAY = 0, + + /** + * @generated from enum value: TRANSPORT_NOHOST = 1; + */ + TRANSPORT_NOHOST = 1, + + /** + * @generated from enum value: TRANSPORT_ALL = 2; + */ + TRANSPORT_ALL = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(IceTransportType) +proto2.util.setEnumType(IceTransportType, "livekit.proto.IceTransportType", [ + { no: 0, name: "TRANSPORT_RELAY" }, + { no: 1, name: "TRANSPORT_NOHOST" }, + { no: 2, name: "TRANSPORT_ALL" }, +]); + +/** + * @generated from enum livekit.proto.ContinualGatheringPolicy + */ +export enum ContinualGatheringPolicy { + /** + * @generated from enum value: GATHER_ONCE = 0; + */ + GATHER_ONCE = 0, + + /** + * @generated from enum value: GATHER_CONTINUALLY = 1; + */ + GATHER_CONTINUALLY = 1, +} +// Retrieve enum metadata with: proto2.getEnumType(ContinualGatheringPolicy) +proto2.util.setEnumType(ContinualGatheringPolicy, "livekit.proto.ContinualGatheringPolicy", [ + { no: 0, name: "GATHER_ONCE" }, + { no: 1, name: "GATHER_CONTINUALLY" }, +]); + +/** + * @generated from enum livekit.proto.ConnectionQuality + */ +export enum ConnectionQuality { + /** + * @generated from enum value: QUALITY_POOR = 0; + */ + QUALITY_POOR = 0, + + /** + * @generated from enum value: QUALITY_GOOD = 1; + */ + QUALITY_GOOD = 1, + + /** + * @generated from enum value: QUALITY_EXCELLENT = 2; + */ + QUALITY_EXCELLENT = 2, + + /** + * @generated from enum value: QUALITY_LOST = 3; + */ + QUALITY_LOST = 3, +} +// Retrieve enum metadata with: proto2.getEnumType(ConnectionQuality) +proto2.util.setEnumType(ConnectionQuality, "livekit.proto.ConnectionQuality", [ + { no: 0, name: "QUALITY_POOR" }, + { no: 1, name: "QUALITY_GOOD" }, + { no: 2, name: "QUALITY_EXCELLENT" }, + { no: 3, name: "QUALITY_LOST" }, +]); + +/** + * @generated from enum livekit.proto.ConnectionState + */ +export enum ConnectionState { + /** + * @generated from enum value: CONN_DISCONNECTED = 0; + */ + CONN_DISCONNECTED = 0, + + /** + * @generated from enum value: CONN_CONNECTED = 1; + */ + CONN_CONNECTED = 1, + + /** + * @generated from enum value: CONN_RECONNECTING = 2; + */ + CONN_RECONNECTING = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(ConnectionState) +proto2.util.setEnumType(ConnectionState, "livekit.proto.ConnectionState", [ + { no: 0, name: "CONN_DISCONNECTED" }, + { no: 1, name: "CONN_CONNECTED" }, + { no: 2, name: "CONN_RECONNECTING" }, +]); + +/** + * @generated from enum livekit.proto.DataPacketKind */ -export const file_room: GenFile = /*@__PURE__*/ - fileDesc("Cgpyb29tLnByb3RvEg1saXZla2l0LnByb3RvIlkKDkNvbm5lY3RSZXF1ZXN0EgsKA3VybBgBIAIoCRINCgV0b2tlbhgCIAIoCRIrCgdvcHRpb25zGAMgAigLMhoubGl2ZWtpdC5wcm90by5Sb29tT3B0aW9ucyIjCg9Db25uZWN0UmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQivwMKD0Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgVlcnJvchgCIAEoCUgAEjcKBnJlc3VsdBgDIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdENhbGxiYWNrLlJlc3VsdEgAGokBChVQYXJ0aWNpcGFudFdpdGhUcmFja3MSNAoLcGFydGljaXBhbnQYASACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSOgoMcHVibGljYXRpb25zGAIgAygLMiQubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrUHVibGljYXRpb24auAEKBlJlc3VsdBImCgRyb29tGAEgAigLMhgubGl2ZWtpdC5wcm90by5Pd25lZFJvb20SOgoRbG9jYWxfcGFydGljaXBhbnQYAiACKAsyHy5saXZla2l0LnByb3RvLk93bmVkUGFydGljaXBhbnQSSgoMcGFydGljaXBhbnRzGAMgAygLMjQubGl2ZWtpdC5wcm90by5Db25uZWN0Q2FsbGJhY2suUGFydGljaXBhbnRXaXRoVHJhY2tzQgkKB21lc3NhZ2UiKAoRRGlzY29ubmVjdFJlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiJgoSRGlzY29ubmVjdFJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIiYKEkRpc2Nvbm5lY3RDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBCKCAQoTUHVibGlzaFRyYWNrUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSFAoMdHJhY2tfaGFuZGxlGAIgAigEEjMKB29wdGlvbnMYAyACKAsyIi5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaE9wdGlvbnMiKAoUUHVibGlzaFRyYWNrUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQigQEKFFB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASOwoLcHVibGljYXRpb24YAyABKAsyJC5saXZla2l0LnByb3RvLk93bmVkVHJhY2tQdWJsaWNhdGlvbkgAQgkKB21lc3NhZ2UiZwoVVW5wdWJsaXNoVHJhY2tSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgl0cmFja19zaWQYAiACKAkSGQoRc3RvcF9vbl91bnB1Ymxpc2gYAyACKAgiKgoWVW5wdWJsaXNoVHJhY2tSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZVbnB1Ymxpc2hUcmFja0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIrkBChJQdWJsaXNoRGF0YVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhAKCGRhdGFfcHRyGAIgAigEEhAKCGRhdGFfbGVuGAMgAigEEhAKCHJlbGlhYmxlGAQgAigIEhwKEGRlc3RpbmF0aW9uX3NpZHMYBSADKAlCAhgBEg0KBXRvcGljGAYgASgJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYByADKAkiJwoTUHVibGlzaERhdGFSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI2ChNQdWJsaXNoRGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIqYBChtQdWJsaXNoVHJhbnNjcmlwdGlvblJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAIgAigJEhAKCHRyYWNrX2lkGAMgAigJEjUKCHNlZ21lbnRzGAQgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCIwChxQdWJsaXNoVHJhbnNjcmlwdGlvblJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIj8KHFB1Ymxpc2hUcmFuc2NyaXB0aW9uQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkidgoVUHVibGlzaFNpcER0bWZSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRjb2RlGAIgAigNEg0KBWRpZ2l0GAMgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYBCADKAkiKgoWUHVibGlzaFNpcER0bWZSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI5ChZQdWJsaXNoU2lwRHRtZkNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIk0KF1NldExvY2FsTWV0YWRhdGFSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIQCghtZXRhZGF0YRgCIAIoCSIsChhTZXRMb2NhbE1ldGFkYXRhUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiOwoYU2V0TG9jYWxNZXRhZGF0YUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIoQBChZTZW5kQ2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIPCgdtZXNzYWdlGAIgAigJEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIrwBChZFZGl0Q2hhdE1lc3NhZ2VSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIRCgllZGl0X3RleHQYAiACKAkSNAoQb3JpZ2luYWxfbWVzc2FnZRgDIAIoCzIaLmxpdmVraXQucHJvdG8uQ2hhdE1lc3NhZ2USHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgEIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBSABKAkiKwoXU2VuZENoYXRNZXNzYWdlUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQiewoXU2VuZENoYXRNZXNzYWdlQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDwoFZXJyb3IYAiABKAlIABIyCgxjaGF0X21lc3NhZ2UYAyABKAsyGi5saXZla2l0LnByb3RvLkNoYXRNZXNzYWdlSABCCQoHbWVzc2FnZSJxChlTZXRMb2NhbEF0dHJpYnV0ZXNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubGl2ZWtpdC5wcm90by5BdHRyaWJ1dGVzRW50cnkiLQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAIoCRINCgV2YWx1ZRgCIAIoCSIuChpTZXRMb2NhbEF0dHJpYnV0ZXNSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI9ChpTZXRMb2NhbEF0dHJpYnV0ZXNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBINCgVlcnJvchgCIAEoCSJFChNTZXRMb2NhbE5hbWVSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIMCgRuYW1lGAIgAigJIigKFFNldExvY2FsTmFtZVJlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIjcKFFNldExvY2FsTmFtZUNhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg0KBWVycm9yGAIgASgJIkUKFFNldFN1YnNjcmliZWRSZXF1ZXN0EhEKCXN1YnNjcmliZRgBIAIoCBIaChJwdWJsaWNhdGlvbl9oYW5kbGUYAiACKAQiFwoVU2V0U3Vic2NyaWJlZFJlc3BvbnNlIi0KFkdldFNlc3Npb25TdGF0c1JlcXVlc3QSEwoLcm9vbV9oYW5kbGUYASACKAQiKwoXR2V0U2Vzc2lvblN0YXRzUmVzcG9uc2USEAoIYXN5bmNfaWQYASACKAQi9wEKF0dldFNlc3Npb25TdGF0c0NhbGxiYWNrEhAKCGFzeW5jX2lkGAEgAigEEg8KBWVycm9yGAIgASgJSAASPwoGcmVzdWx0GAMgASgLMi0ubGl2ZWtpdC5wcm90by5HZXRTZXNzaW9uU3RhdHNDYWxsYmFjay5SZXN1bHRIABptCgZSZXN1bHQSMAoPcHVibGlzaGVyX3N0YXRzGAEgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0cxIxChBzdWJzY3JpYmVyX3N0YXRzGAIgAygLMhcubGl2ZWtpdC5wcm90by5SdGNTdGF0c0IJCgdtZXNzYWdlIjsKDVZpZGVvRW5jb2RpbmcSEwoLbWF4X2JpdHJhdGUYASACKAQSFQoNbWF4X2ZyYW1lcmF0ZRgCIAIoASIkCg1BdWRpb0VuY29kaW5nEhMKC21heF9iaXRyYXRlGAEgAigEIpoCChNUcmFja1B1Ymxpc2hPcHRpb25zEjQKDnZpZGVvX2VuY29kaW5nGAEgASgLMhwubGl2ZWtpdC5wcm90by5WaWRlb0VuY29kaW5nEjQKDmF1ZGlvX2VuY29kaW5nGAIgASgLMhwubGl2ZWtpdC5wcm90by5BdWRpb0VuY29kaW5nEi4KC3ZpZGVvX2NvZGVjGAMgASgOMhkubGl2ZWtpdC5wcm90by5WaWRlb0NvZGVjEgsKA2R0eBgEIAEoCBILCgNyZWQYBSABKAgSEQoJc2ltdWxjYXN0GAYgASgIEioKBnNvdXJjZRgHIAEoDjIaLmxpdmVraXQucHJvdG8uVHJhY2tTb3VyY2USDgoGc3RyZWFtGAggASgJIj0KCUljZVNlcnZlchIMCgR1cmxzGAEgAygJEhAKCHVzZXJuYW1lGAIgASgJEhAKCHBhc3N3b3JkGAMgASgJIsQBCglSdGNDb25maWcSOwoSaWNlX3RyYW5zcG9ydF90eXBlGAEgASgOMh8ubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRUeXBlEksKGmNvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5GAIgASgOMicubGl2ZWtpdC5wcm90by5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kSLQoLaWNlX3NlcnZlcnMYAyADKAsyGC5saXZla2l0LnByb3RvLkljZVNlcnZlciK+AQoLUm9vbU9wdGlvbnMSFgoOYXV0b19zdWJzY3JpYmUYASABKAgSFwoPYWRhcHRpdmVfc3RyZWFtGAIgASgIEhAKCGR5bmFjYXN0GAMgASgIEigKBGUyZWUYBCABKAsyGi5saXZla2l0LnByb3RvLkUyZWVPcHRpb25zEiwKCnJ0Y19jb25maWcYBSABKAsyGC5saXZla2l0LnByb3RvLlJ0Y0NvbmZpZxIUCgxqb2luX3JldHJpZXMYBiABKA0idwoUVHJhbnNjcmlwdGlvblNlZ21lbnQSCgoCaWQYASACKAkSDAoEdGV4dBgCIAIoCRISCgpzdGFydF90aW1lGAMgAigEEhAKCGVuZF90aW1lGAQgAigEEg0KBWZpbmFsGAUgAigIEhAKCGxhbmd1YWdlGAYgAigJIjAKCkJ1ZmZlckluZm8SEAoIZGF0YV9wdHIYASACKAQSEAoIZGF0YV9sZW4YAiACKAQiZQoLT3duZWRCdWZmZXISLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRInCgRkYXRhGAIgAigLMhkubGl2ZWtpdC5wcm90by5CdWZmZXJJbmZvIvEPCglSb29tRXZlbnQSEwoLcm9vbV9oYW5kbGUYASACKAQSRAoVcGFydGljaXBhbnRfY29ubmVjdGVkGAIgASgLMiMubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudENvbm5lY3RlZEgAEkoKGHBhcnRpY2lwYW50X2Rpc2Nvbm5lY3RlZBgDIAEoCzImLmxpdmVraXQucHJvdG8uUGFydGljaXBhbnREaXNjb25uZWN0ZWRIABJDChVsb2NhbF90cmFja19wdWJsaXNoZWQYBCABKAsyIi5saXZla2l0LnByb3RvLkxvY2FsVHJhY2tQdWJsaXNoZWRIABJHChdsb2NhbF90cmFja191bnB1Ymxpc2hlZBgFIAEoCzIkLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1VucHVibGlzaGVkSAASRQoWbG9jYWxfdHJhY2tfc3Vic2NyaWJlZBgGIAEoCzIjLmxpdmVraXQucHJvdG8uTG9jYWxUcmFja1N1YnNjcmliZWRIABI4Cg90cmFja19wdWJsaXNoZWQYByABKAsyHS5saXZla2l0LnByb3RvLlRyYWNrUHVibGlzaGVkSAASPAoRdHJhY2tfdW5wdWJsaXNoZWQYCCABKAsyHy5saXZla2l0LnByb3RvLlRyYWNrVW5wdWJsaXNoZWRIABI6ChB0cmFja19zdWJzY3JpYmVkGAkgASgLMh4ubGl2ZWtpdC5wcm90by5UcmFja1N1YnNjcmliZWRIABI+ChJ0cmFja191bnN1YnNjcmliZWQYCiABKAsyIC5saXZla2l0LnByb3RvLlRyYWNrVW5zdWJzY3JpYmVkSAASSwoZdHJhY2tfc3Vic2NyaXB0aW9uX2ZhaWxlZBgLIAEoCzImLmxpdmVraXQucHJvdG8uVHJhY2tTdWJzY3JpcHRpb25GYWlsZWRIABIwCgt0cmFja19tdXRlZBgMIAEoCzIZLmxpdmVraXQucHJvdG8uVHJhY2tNdXRlZEgAEjQKDXRyYWNrX3VubXV0ZWQYDSABKAsyGy5saXZla2l0LnByb3RvLlRyYWNrVW5tdXRlZEgAEkcKF2FjdGl2ZV9zcGVha2Vyc19jaGFuZ2VkGA4gASgLMiQubGl2ZWtpdC5wcm90by5BY3RpdmVTcGVha2Vyc0NoYW5nZWRIABJDChVyb29tX21ldGFkYXRhX2NoYW5nZWQYDyABKAsyIi5saXZla2l0LnByb3RvLlJvb21NZXRhZGF0YUNoYW5nZWRIABI5ChByb29tX3NpZF9jaGFuZ2VkGBAgASgLMh0ubGl2ZWtpdC5wcm90by5Sb29tU2lkQ2hhbmdlZEgAElEKHHBhcnRpY2lwYW50X21ldGFkYXRhX2NoYW5nZWQYESABKAsyKS5saXZla2l0LnByb3RvLlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkSAASSQoYcGFydGljaXBhbnRfbmFtZV9jaGFuZ2VkGBIgASgLMiUubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudE5hbWVDaGFuZ2VkSAASVQoecGFydGljaXBhbnRfYXR0cmlidXRlc19jaGFuZ2VkGBMgASgLMisubGl2ZWtpdC5wcm90by5QYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkSAASTQoaY29ubmVjdGlvbl9xdWFsaXR5X2NoYW5nZWQYFCABKAsyJy5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5Q2hhbmdlZEgAEkkKGGNvbm5lY3Rpb25fc3RhdGVfY2hhbmdlZBgVIAEoCzIlLmxpdmVraXQucHJvdG8uQ29ubmVjdGlvblN0YXRlQ2hhbmdlZEgAEjMKDGRpc2Nvbm5lY3RlZBgWIAEoCzIbLmxpdmVraXQucHJvdG8uRGlzY29ubmVjdGVkSAASMwoMcmVjb25uZWN0aW5nGBcgASgLMhsubGl2ZWtpdC5wcm90by5SZWNvbm5lY3RpbmdIABIxCgtyZWNvbm5lY3RlZBgYIAEoCzIaLmxpdmVraXQucHJvdG8uUmVjb25uZWN0ZWRIABI9ChJlMmVlX3N0YXRlX2NoYW5nZWQYGSABKAsyHy5saXZla2l0LnByb3RvLkUyZWVTdGF0ZUNoYW5nZWRIABIlCgNlb3MYGiABKAsyFi5saXZla2l0LnByb3RvLlJvb21FT1NIABJBChRkYXRhX3BhY2tldF9yZWNlaXZlZBgbIAEoCzIhLmxpdmVraXQucHJvdG8uRGF0YVBhY2tldFJlY2VpdmVkSAASRgoWdHJhbnNjcmlwdGlvbl9yZWNlaXZlZBgcIAEoCzIkLmxpdmVraXQucHJvdG8uVHJhbnNjcmlwdGlvblJlY2VpdmVkSAASOgoMY2hhdF9tZXNzYWdlGB0gASgLMiIubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZVJlY2VpdmVkSAASSQoWc3RyZWFtX2hlYWRlcl9yZWNlaXZlZBgeIAEoCzInLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbUhlYWRlclJlY2VpdmVkSAASRwoVc3RyZWFtX2NodW5rX3JlY2VpdmVkGB8gASgLMiYubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZEgAQgkKB21lc3NhZ2UiNwoIUm9vbUluZm8SCwoDc2lkGAEgASgJEgwKBG5hbWUYAiACKAkSEAoIbWV0YWRhdGEYAyACKAkiYQoJT3duZWRSb29tEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSJQoEaW5mbxgCIAIoCzIXLmxpdmVraXQucHJvdG8uUm9vbUluZm8iRQoUUGFydGljaXBhbnRDb25uZWN0ZWQSLQoEaW5mbxgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRQYXJ0aWNpcGFudCI3ChdQYXJ0aWNpcGFudERpc2Nvbm5lY3RlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCSIoChNMb2NhbFRyYWNrUHVibGlzaGVkEhEKCXRyYWNrX3NpZBgBIAIoCSIwChVMb2NhbFRyYWNrVW5wdWJsaXNoZWQSFwoPcHVibGljYXRpb25fc2lkGAEgAigJIikKFExvY2FsVHJhY2tTdWJzY3JpYmVkEhEKCXRyYWNrX3NpZBgCIAIoCSJpCg5UcmFja1B1Ymxpc2hlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRI5CgtwdWJsaWNhdGlvbhgCIAIoCzIkLmxpdmVraXQucHJvdG8uT3duZWRUcmFja1B1YmxpY2F0aW9uIkkKEFRyYWNrVW5wdWJsaXNoZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSFwoPcHVibGljYXRpb25fc2lkGAIgAigJIlkKD1RyYWNrU3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIoCgV0cmFjaxgCIAIoCzIZLmxpdmVraXQucHJvdG8uT3duZWRUcmFjayJEChFUcmFja1Vuc3Vic2NyaWJlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiWQoXVHJhY2tTdWJzY3JpcHRpb25GYWlsZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJEg0KBWVycm9yGAMgAigJIj0KClRyYWNrTXV0ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSEQoJdHJhY2tfc2lkGAIgAigJIj8KDFRyYWNrVW5tdXRlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIRCgl0cmFja19zaWQYAiACKAkiXwoQRTJlZVN0YXRlQ2hhbmdlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRItCgVzdGF0ZRgCIAIoDjIeLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblN0YXRlIjcKFUFjdGl2ZVNwZWFrZXJzQ2hhbmdlZBIeChZwYXJ0aWNpcGFudF9pZGVudGl0aWVzGAEgAygJIicKE1Jvb21NZXRhZGF0YUNoYW5nZWQSEAoIbWV0YWRhdGEYASACKAkiHQoOUm9vbVNpZENoYW5nZWQSCwoDc2lkGAEgAigJIkwKGlBhcnRpY2lwYW50TWV0YWRhdGFDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEhAKCG1ldGFkYXRhGAIgAigJIqwBChxQYXJ0aWNpcGFudEF0dHJpYnV0ZXNDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeRI6ChJjaGFuZ2VkX2F0dHJpYnV0ZXMYAyADKAsyHi5saXZla2l0LnByb3RvLkF0dHJpYnV0ZXNFbnRyeSJEChZQYXJ0aWNpcGFudE5hbWVDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEgwKBG5hbWUYAiACKAkiawoYQ29ubmVjdGlvblF1YWxpdHlDaGFuZ2VkEhwKFHBhcnRpY2lwYW50X2lkZW50aXR5GAEgAigJEjEKB3F1YWxpdHkYAiACKA4yIC5saXZla2l0LnByb3RvLkNvbm5lY3Rpb25RdWFsaXR5IkUKClVzZXJQYWNrZXQSKAoEZGF0YRgBIAIoCzIaLmxpdmVraXQucHJvdG8uT3duZWRCdWZmZXISDQoFdG9waWMYAiABKAkieQoLQ2hhdE1lc3NhZ2USCgoCaWQYASACKAkSEQoJdGltZXN0YW1wGAIgAigDEg8KB21lc3NhZ2UYAyACKAkSFgoOZWRpdF90aW1lc3RhbXAYBCABKAMSDwoHZGVsZXRlZBgFIAEoCBIRCglnZW5lcmF0ZWQYBiABKAgiYAoTQ2hhdE1lc3NhZ2VSZWNlaXZlZBIrCgdtZXNzYWdlGAEgAigLMhoubGl2ZWtpdC5wcm90by5DaGF0TWVzc2FnZRIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCSImCgdTaXBEVE1GEgwKBGNvZGUYASACKA0SDQoFZGlnaXQYAiABKAkivwEKEkRhdGFQYWNrZXRSZWNlaXZlZBIrCgRraW5kGAEgAigOMh0ubGl2ZWtpdC5wcm90by5EYXRhUGFja2V0S2luZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgCIAIoCRIpCgR1c2VyGAQgASgLMhkubGl2ZWtpdC5wcm90by5Vc2VyUGFja2V0SAASKgoIc2lwX2R0bWYYBSABKAsyFi5saXZla2l0LnByb3RvLlNpcERUTUZIAEIHCgV2YWx1ZSJ/ChVUcmFuc2NyaXB0aW9uUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASABKAkSEQoJdHJhY2tfc2lkGAIgASgJEjUKCHNlZ21lbnRzGAMgAygLMiMubGl2ZWtpdC5wcm90by5UcmFuc2NyaXB0aW9uU2VnbWVudCJHChZDb25uZWN0aW9uU3RhdGVDaGFuZ2VkEi0KBXN0YXRlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5Db25uZWN0aW9uU3RhdGUiCwoJQ29ubmVjdGVkIj8KDERpc2Nvbm5lY3RlZBIvCgZyZWFzb24YASACKA4yHy5saXZla2l0LnByb3RvLkRpc2Nvbm5lY3RSZWFzb24iDgoMUmVjb25uZWN0aW5nIg0KC1JlY29ubmVjdGVkIgkKB1Jvb21FT1Mi/AUKCkRhdGFTdHJlYW0aqgEKClRleHRIZWFkZXISPwoOb3BlcmF0aW9uX3R5cGUYASACKA4yJy5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uT3BlcmF0aW9uVHlwZRIPCgd2ZXJzaW9uGAIgASgFEhoKEnJlcGx5X3RvX3N0cmVhbV9pZBgDIAEoCRIbChNhdHRhY2hlZF9zdHJlYW1faWRzGAQgAygJEhEKCWdlbmVyYXRlZBgFIAEoCBofCgpGaWxlSGVhZGVyEhEKCWZpbGVfbmFtZRgBIAIoCRrrAgoGSGVhZGVyEhEKCXN0cmVhbV9pZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMSEQoJbWltZV90eXBlGAMgAigJEg0KBXRvcGljGAQgAigJEhQKDHRvdGFsX2xlbmd0aBgFIAEoBBJECgpleHRlbnNpb25zGAYgAygLMjAubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkhlYWRlci5FeHRlbnNpb25zRW50cnkSOwoLdGV4dF9oZWFkZXIYByABKAsyJC5saXZla2l0LnByb3RvLkRhdGFTdHJlYW0uVGV4dEhlYWRlckgAEjsKC2ZpbGVfaGVhZGVyGAggASgLMiQubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkZpbGVIZWFkZXJIABoxCg9FeHRlbnNpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIQCg5jb250ZW50X2hlYWRlchpvCgVDaHVuaxIRCglzdHJlYW1faWQYASACKAkSEwoLY2h1bmtfaW5kZXgYAiACKAQSDwoHY29udGVudBgDIAIoDBIQCghjb21wbGV0ZRgEIAEoCBIPCgd2ZXJzaW9uGAUgASgFEgoKAml2GAYgASgMIkEKDU9wZXJhdGlvblR5cGUSCgoGQ1JFQVRFEAASCgoGVVBEQVRFEAESCgoGREVMRVRFEAISDAoIUkVBQ1RJT04QAyJqChhEYXRhU3RyZWFtSGVhZGVyUmVjZWl2ZWQSHAoUcGFydGljaXBhbnRfaWRlbnRpdHkYASACKAkSMAoGaGVhZGVyGAIgAigLMiAubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkhlYWRlciJnChdEYXRhU3RyZWFtQ2h1bmtSZWNlaXZlZBIcChRwYXJ0aWNpcGFudF9pZGVudGl0eRgBIAIoCRIuCgVjaHVuaxgCIAIoCzIfLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5DaHVuayKmAQoXU2VuZFN0cmVhbUhlYWRlclJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEjAKBmhlYWRlchgCIAIoCzIgLmxpdmVraXQucHJvdG8uRGF0YVN0cmVhbS5IZWFkZXISHgoWZGVzdGluYXRpb25faWRlbnRpdGllcxgDIAMoCRIXCg9zZW5kZXJfaWRlbnRpdHkYBCABKAkiowEKFlNlbmRTdHJlYW1DaHVua1JlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEi4KBWNodW5rGAIgAigLMh8ubGl2ZWtpdC5wcm90by5EYXRhU3RyZWFtLkNodW5rEh4KFmRlc3RpbmF0aW9uX2lkZW50aXRpZXMYAyADKAkSFwoPc2VuZGVyX2lkZW50aXR5GAQgASgJIiwKGFNlbmRTdHJlYW1IZWFkZXJSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCIrChdTZW5kU3RyZWFtQ2h1bmtSZXNwb25zZRIQCghhc3luY19pZBgBIAIoBCI7ChhTZW5kU3RyZWFtSGVhZGVyQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkiOgoXU2VuZFN0cmVhbUNodW5rQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkqUAoQSWNlVHJhbnNwb3J0VHlwZRITCg9UUkFOU1BPUlRfUkVMQVkQABIUChBUUkFOU1BPUlRfTk9IT1NUEAESEQoNVFJBTlNQT1JUX0FMTBACKkMKGENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeRIPCgtHQVRIRVJfT05DRRAAEhYKEkdBVEhFUl9DT05USU5VQUxMWRABKmAKEUNvbm5lY3Rpb25RdWFsaXR5EhAKDFFVQUxJVFlfUE9PUhAAEhAKDFFVQUxJVFlfR09PRBABEhUKEVFVQUxJVFlfRVhDRUxMRU5UEAISEAoMUVVBTElUWV9MT1NUEAMqUwoPQ29ubmVjdGlvblN0YXRlEhUKEUNPTk5fRElTQ09OTkVDVEVEEAASEgoOQ09OTl9DT05ORUNURUQQARIVChFDT05OX1JFQ09OTkVDVElORxACKjMKDkRhdGFQYWNrZXRLaW5kEg4KCktJTkRfTE9TU1kQABIRCg1LSU5EX1JFTElBQkxFEAFCEKoCDUxpdmVLaXQuUHJvdG8", [file_e2ee, file_handle, file_participant, file_track, file_video_frame, file_stats]); +export enum DataPacketKind { + /** + * @generated from enum value: KIND_LOSSY = 0; + */ + KIND_LOSSY = 0, + + /** + * @generated from enum value: KIND_RELIABLE = 1; + */ + KIND_RELIABLE = 1, +} +// Retrieve enum metadata with: proto2.getEnumType(DataPacketKind) +proto2.util.setEnumType(DataPacketKind, "livekit.proto.DataPacketKind", [ + { no: 0, name: "KIND_LOSSY" }, + { no: 1, name: "KIND_RELIABLE" }, +]); /** * Connect to a new LiveKit room * * @generated from message livekit.proto.ConnectRequest */ -export type ConnectRequest = Message<"livekit.proto.ConnectRequest"> & { +export class ConnectRequest extends Message { /** * @generated from field: required string url = 1; */ - url: string; + url?: string; /** * @generated from field: required string token = 2; */ - token: string; + token?: string; /** * @generated from field: required livekit.proto.RoomOptions options = 3; */ options?: RoomOptions; -}; -/** - * Describes the message livekit.proto.ConnectRequest. - * Use `create(ConnectRequestSchema)` to create a new message. - */ -export const ConnectRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ConnectRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "token", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "options", kind: "message", T: RoomOptions, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConnectRequest { + return new ConnectRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConnectRequest { + return new ConnectRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConnectRequest { + return new ConnectRequest().fromJsonString(jsonString, options); + } + + static equals(a: ConnectRequest | PlainMessage | undefined, b: ConnectRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(ConnectRequest, a, b); + } +} /** * @generated from message livekit.proto.ConnectResponse */ -export type ConnectResponse = Message<"livekit.proto.ConnectResponse"> & { +export class ConnectResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.ConnectResponse. - * Use `create(ConnectResponseSchema)` to create a new message. - */ -export const ConnectResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ConnectResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConnectResponse { + return new ConnectResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConnectResponse { + return new ConnectResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConnectResponse { + return new ConnectResponse().fromJsonString(jsonString, options); + } + + static equals(a: ConnectResponse | PlainMessage | undefined, b: ConnectResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(ConnectResponse, a, b); + } +} /** * @generated from message livekit.proto.ConnectCallback */ -export type ConnectCallback = Message<"livekit.proto.ConnectCallback"> & { +export class ConnectCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from oneof livekit.proto.ConnectCallback.message @@ -108,20 +262,42 @@ export type ConnectCallback = Message<"livekit.proto.ConnectCallback"> & { */ value: ConnectCallback_Result; case: "result"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.ConnectCallback. - * Use `create(ConnectCallbackSchema)` to create a new message. - */ -export const ConnectCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 2); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ConnectCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "message" }, + { no: 3, name: "result", kind: "message", T: ConnectCallback_Result, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConnectCallback { + return new ConnectCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConnectCallback { + return new ConnectCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConnectCallback { + return new ConnectCallback().fromJsonString(jsonString, options); + } + + static equals(a: ConnectCallback | PlainMessage | undefined, b: ConnectCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(ConnectCallback, a, b); + } +} /** * @generated from message livekit.proto.ConnectCallback.ParticipantWithTracks */ -export type ConnectCallback_ParticipantWithTracks = Message<"livekit.proto.ConnectCallback.ParticipantWithTracks"> & { +export class ConnectCallback_ParticipantWithTracks extends Message { /** * @generated from field: required livekit.proto.OwnedParticipant participant = 1; */ @@ -133,20 +309,41 @@ export type ConnectCallback_ParticipantWithTracks = Message<"livekit.proto.Conne * * @generated from field: repeated livekit.proto.OwnedTrackPublication publications = 2; */ - publications: OwnedTrackPublication[]; -}; + publications: OwnedTrackPublication[] = []; -/** - * Describes the message livekit.proto.ConnectCallback.ParticipantWithTracks. - * Use `create(ConnectCallback_ParticipantWithTracksSchema)` to create a new message. - */ -export const ConnectCallback_ParticipantWithTracksSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 2, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ConnectCallback.ParticipantWithTracks"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant", kind: "message", T: OwnedParticipant, req: true }, + { no: 2, name: "publications", kind: "message", T: OwnedTrackPublication, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConnectCallback_ParticipantWithTracks { + return new ConnectCallback_ParticipantWithTracks().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConnectCallback_ParticipantWithTracks { + return new ConnectCallback_ParticipantWithTracks().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConnectCallback_ParticipantWithTracks { + return new ConnectCallback_ParticipantWithTracks().fromJsonString(jsonString, options); + } + + static equals(a: ConnectCallback_ParticipantWithTracks | PlainMessage | undefined, b: ConnectCallback_ParticipantWithTracks | PlainMessage | undefined): boolean { + return proto2.util.equals(ConnectCallback_ParticipantWithTracks, a, b); + } +} /** * @generated from message livekit.proto.ConnectCallback.Result */ -export type ConnectCallback_Result = Message<"livekit.proto.ConnectCallback.Result"> & { +export class ConnectCallback_Result extends Message { /** * @generated from field: required livekit.proto.OwnedRoom room = 1; */ @@ -160,123 +357,247 @@ export type ConnectCallback_Result = Message<"livekit.proto.ConnectCallback.Resu /** * @generated from field: repeated livekit.proto.ConnectCallback.ParticipantWithTracks participants = 3; */ - participants: ConnectCallback_ParticipantWithTracks[]; -}; + participants: ConnectCallback_ParticipantWithTracks[] = []; -/** - * Describes the message livekit.proto.ConnectCallback.Result. - * Use `create(ConnectCallback_ResultSchema)` to create a new message. - */ -export const ConnectCallback_ResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 2, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ConnectCallback.Result"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "room", kind: "message", T: OwnedRoom, req: true }, + { no: 2, name: "local_participant", kind: "message", T: OwnedParticipant, req: true }, + { no: 3, name: "participants", kind: "message", T: ConnectCallback_ParticipantWithTracks, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConnectCallback_Result { + return new ConnectCallback_Result().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConnectCallback_Result { + return new ConnectCallback_Result().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConnectCallback_Result { + return new ConnectCallback_Result().fromJsonString(jsonString, options); + } + + static equals(a: ConnectCallback_Result | PlainMessage | undefined, b: ConnectCallback_Result | PlainMessage | undefined): boolean { + return proto2.util.equals(ConnectCallback_Result, a, b); + } +} /** * Disconnect from the a room * * @generated from message livekit.proto.DisconnectRequest */ -export type DisconnectRequest = Message<"livekit.proto.DisconnectRequest"> & { +export class DisconnectRequest extends Message { /** * @generated from field: required uint64 room_handle = 1; */ - roomHandle: bigint; -}; + roomHandle?: bigint; -/** - * Describes the message livekit.proto.DisconnectRequest. - * Use `create(DisconnectRequestSchema)` to create a new message. - */ -export const DisconnectRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 3); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DisconnectRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "room_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DisconnectRequest { + return new DisconnectRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DisconnectRequest { + return new DisconnectRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DisconnectRequest { + return new DisconnectRequest().fromJsonString(jsonString, options); + } + + static equals(a: DisconnectRequest | PlainMessage | undefined, b: DisconnectRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(DisconnectRequest, a, b); + } +} /** * @generated from message livekit.proto.DisconnectResponse */ -export type DisconnectResponse = Message<"livekit.proto.DisconnectResponse"> & { +export class DisconnectResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.DisconnectResponse. - * Use `create(DisconnectResponseSchema)` to create a new message. - */ -export const DisconnectResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 4); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DisconnectResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DisconnectResponse { + return new DisconnectResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DisconnectResponse { + return new DisconnectResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DisconnectResponse { + return new DisconnectResponse().fromJsonString(jsonString, options); + } + + static equals(a: DisconnectResponse | PlainMessage | undefined, b: DisconnectResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(DisconnectResponse, a, b); + } +} /** * @generated from message livekit.proto.DisconnectCallback */ -export type DisconnectCallback = Message<"livekit.proto.DisconnectCallback"> & { +export class DisconnectCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.DisconnectCallback. - * Use `create(DisconnectCallbackSchema)` to create a new message. - */ -export const DisconnectCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 5); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DisconnectCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DisconnectCallback { + return new DisconnectCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DisconnectCallback { + return new DisconnectCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DisconnectCallback { + return new DisconnectCallback().fromJsonString(jsonString, options); + } + + static equals(a: DisconnectCallback | PlainMessage | undefined, b: DisconnectCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(DisconnectCallback, a, b); + } +} /** * Publish a track to the room * * @generated from message livekit.proto.PublishTrackRequest */ -export type PublishTrackRequest = Message<"livekit.proto.PublishTrackRequest"> & { +export class PublishTrackRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required uint64 track_handle = 2; */ - trackHandle: bigint; + trackHandle?: bigint; /** * @generated from field: required livekit.proto.TrackPublishOptions options = 3; */ options?: TrackPublishOptions; -}; -/** - * Describes the message livekit.proto.PublishTrackRequest. - * Use `create(PublishTrackRequestSchema)` to create a new message. - */ -export const PublishTrackRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 6); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishTrackRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "track_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 3, name: "options", kind: "message", T: TrackPublishOptions, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishTrackRequest { + return new PublishTrackRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishTrackRequest { + return new PublishTrackRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishTrackRequest { + return new PublishTrackRequest().fromJsonString(jsonString, options); + } + + static equals(a: PublishTrackRequest | PlainMessage | undefined, b: PublishTrackRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishTrackRequest, a, b); + } +} /** * @generated from message livekit.proto.PublishTrackResponse */ -export type PublishTrackResponse = Message<"livekit.proto.PublishTrackResponse"> & { +export class PublishTrackResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.PublishTrackResponse. - * Use `create(PublishTrackResponseSchema)` to create a new message. - */ -export const PublishTrackResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 7); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishTrackResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishTrackResponse { + return new PublishTrackResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishTrackResponse { + return new PublishTrackResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishTrackResponse { + return new PublishTrackResponse().fromJsonString(jsonString, options); + } + + static equals(a: PublishTrackResponse | PlainMessage | undefined, b: PublishTrackResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishTrackResponse, a, b); + } +} /** * @generated from message livekit.proto.PublishTrackCallback */ -export type PublishTrackCallback = Message<"livekit.proto.PublishTrackCallback"> & { +export class PublishTrackCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from oneof livekit.proto.PublishTrackCallback.message @@ -293,427 +614,792 @@ export type PublishTrackCallback = Message<"livekit.proto.PublishTrackCallback"> */ value: OwnedTrackPublication; case: "publication"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.PublishTrackCallback. - * Use `create(PublishTrackCallbackSchema)` to create a new message. - */ -export const PublishTrackCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 8); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishTrackCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "message" }, + { no: 3, name: "publication", kind: "message", T: OwnedTrackPublication, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishTrackCallback { + return new PublishTrackCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishTrackCallback { + return new PublishTrackCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishTrackCallback { + return new PublishTrackCallback().fromJsonString(jsonString, options); + } + + static equals(a: PublishTrackCallback | PlainMessage | undefined, b: PublishTrackCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishTrackCallback, a, b); + } +} /** * Unpublish a track from the room * * @generated from message livekit.proto.UnpublishTrackRequest */ -export type UnpublishTrackRequest = Message<"livekit.proto.UnpublishTrackRequest"> & { +export class UnpublishTrackRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; + trackSid?: string; /** * @generated from field: required bool stop_on_unpublish = 3; */ - stopOnUnpublish: boolean; -}; + stopOnUnpublish?: boolean; -/** - * Describes the message livekit.proto.UnpublishTrackRequest. - * Use `create(UnpublishTrackRequestSchema)` to create a new message. - */ -export const UnpublishTrackRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 9); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UnpublishTrackRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "stop_on_unpublish", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnpublishTrackRequest { + return new UnpublishTrackRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnpublishTrackRequest { + return new UnpublishTrackRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnpublishTrackRequest { + return new UnpublishTrackRequest().fromJsonString(jsonString, options); + } + + static equals(a: UnpublishTrackRequest | PlainMessage | undefined, b: UnpublishTrackRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(UnpublishTrackRequest, a, b); + } +} /** * @generated from message livekit.proto.UnpublishTrackResponse */ -export type UnpublishTrackResponse = Message<"livekit.proto.UnpublishTrackResponse"> & { +export class UnpublishTrackResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.UnpublishTrackResponse. - * Use `create(UnpublishTrackResponseSchema)` to create a new message. - */ -export const UnpublishTrackResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 10); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UnpublishTrackResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnpublishTrackResponse { + return new UnpublishTrackResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnpublishTrackResponse { + return new UnpublishTrackResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnpublishTrackResponse { + return new UnpublishTrackResponse().fromJsonString(jsonString, options); + } + + static equals(a: UnpublishTrackResponse | PlainMessage | undefined, b: UnpublishTrackResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(UnpublishTrackResponse, a, b); + } +} /** * @generated from message livekit.proto.UnpublishTrackCallback */ -export type UnpublishTrackCallback = Message<"livekit.proto.UnpublishTrackCallback"> & { +export class UnpublishTrackCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.UnpublishTrackCallback. - * Use `create(UnpublishTrackCallbackSchema)` to create a new message. - */ -export const UnpublishTrackCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 11); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UnpublishTrackCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnpublishTrackCallback { + return new UnpublishTrackCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnpublishTrackCallback { + return new UnpublishTrackCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnpublishTrackCallback { + return new UnpublishTrackCallback().fromJsonString(jsonString, options); + } + + static equals(a: UnpublishTrackCallback | PlainMessage | undefined, b: UnpublishTrackCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(UnpublishTrackCallback, a, b); + } +} /** * Publish data to other participants * * @generated from message livekit.proto.PublishDataRequest */ -export type PublishDataRequest = Message<"livekit.proto.PublishDataRequest"> & { +export class PublishDataRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required uint64 data_ptr = 2; */ - dataPtr: bigint; + dataPtr?: bigint; /** * @generated from field: required uint64 data_len = 3; */ - dataLen: bigint; + dataLen?: bigint; /** * @generated from field: required bool reliable = 4; */ - reliable: boolean; + reliable?: boolean; /** * @generated from field: repeated string destination_sids = 5 [deprecated = true]; * @deprecated */ - destinationSids: string[]; + destinationSids: string[] = []; /** * @generated from field: optional string topic = 6; */ - topic: string; + topic?: string; /** * @generated from field: repeated string destination_identities = 7; */ - destinationIdentities: string[]; -}; - -/** - * Describes the message livekit.proto.PublishDataRequest. - * Use `create(PublishDataRequestSchema)` to create a new message. - */ -export const PublishDataRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 12); + destinationIdentities: string[] = []; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishDataRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "data_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 3, name: "data_len", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 4, name: "reliable", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 5, name: "destination_sids", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 6, name: "topic", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 7, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishDataRequest { + return new PublishDataRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishDataRequest { + return new PublishDataRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishDataRequest { + return new PublishDataRequest().fromJsonString(jsonString, options); + } + + static equals(a: PublishDataRequest | PlainMessage | undefined, b: PublishDataRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishDataRequest, a, b); + } +} /** * @generated from message livekit.proto.PublishDataResponse */ -export type PublishDataResponse = Message<"livekit.proto.PublishDataResponse"> & { +export class PublishDataResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.PublishDataResponse. - * Use `create(PublishDataResponseSchema)` to create a new message. - */ -export const PublishDataResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 13); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishDataResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishDataResponse { + return new PublishDataResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishDataResponse { + return new PublishDataResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishDataResponse { + return new PublishDataResponse().fromJsonString(jsonString, options); + } + + static equals(a: PublishDataResponse | PlainMessage | undefined, b: PublishDataResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishDataResponse, a, b); + } +} /** * @generated from message livekit.proto.PublishDataCallback */ -export type PublishDataCallback = Message<"livekit.proto.PublishDataCallback"> & { +export class PublishDataCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.PublishDataCallback. - * Use `create(PublishDataCallbackSchema)` to create a new message. - */ -export const PublishDataCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 14); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishDataCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishDataCallback { + return new PublishDataCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishDataCallback { + return new PublishDataCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishDataCallback { + return new PublishDataCallback().fromJsonString(jsonString, options); + } + + static equals(a: PublishDataCallback | PlainMessage | undefined, b: PublishDataCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishDataCallback, a, b); + } +} /** * Publish transcription messages to room * * @generated from message livekit.proto.PublishTranscriptionRequest */ -export type PublishTranscriptionRequest = Message<"livekit.proto.PublishTranscriptionRequest"> & { +export class PublishTranscriptionRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string participant_identity = 2; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_id = 3; */ - trackId: string; + trackId?: string; /** * @generated from field: repeated livekit.proto.TranscriptionSegment segments = 4; */ - segments: TranscriptionSegment[]; -}; - -/** - * Describes the message livekit.proto.PublishTranscriptionRequest. - * Use `create(PublishTranscriptionRequestSchema)` to create a new message. - */ -export const PublishTranscriptionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 15); + segments: TranscriptionSegment[] = []; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishTranscriptionRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "track_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "segments", kind: "message", T: TranscriptionSegment, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishTranscriptionRequest { + return new PublishTranscriptionRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishTranscriptionRequest { + return new PublishTranscriptionRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishTranscriptionRequest { + return new PublishTranscriptionRequest().fromJsonString(jsonString, options); + } + + static equals(a: PublishTranscriptionRequest | PlainMessage | undefined, b: PublishTranscriptionRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishTranscriptionRequest, a, b); + } +} /** * @generated from message livekit.proto.PublishTranscriptionResponse */ -export type PublishTranscriptionResponse = Message<"livekit.proto.PublishTranscriptionResponse"> & { +export class PublishTranscriptionResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.PublishTranscriptionResponse. - * Use `create(PublishTranscriptionResponseSchema)` to create a new message. - */ -export const PublishTranscriptionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 16); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishTranscriptionResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishTranscriptionResponse { + return new PublishTranscriptionResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishTranscriptionResponse { + return new PublishTranscriptionResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishTranscriptionResponse { + return new PublishTranscriptionResponse().fromJsonString(jsonString, options); + } + + static equals(a: PublishTranscriptionResponse | PlainMessage | undefined, b: PublishTranscriptionResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishTranscriptionResponse, a, b); + } +} /** * @generated from message livekit.proto.PublishTranscriptionCallback */ -export type PublishTranscriptionCallback = Message<"livekit.proto.PublishTranscriptionCallback"> & { +export class PublishTranscriptionCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.PublishTranscriptionCallback. - * Use `create(PublishTranscriptionCallbackSchema)` to create a new message. - */ -export const PublishTranscriptionCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 17); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishTranscriptionCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishTranscriptionCallback { + return new PublishTranscriptionCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishTranscriptionCallback { + return new PublishTranscriptionCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishTranscriptionCallback { + return new PublishTranscriptionCallback().fromJsonString(jsonString, options); + } + + static equals(a: PublishTranscriptionCallback | PlainMessage | undefined, b: PublishTranscriptionCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishTranscriptionCallback, a, b); + } +} /** * Publish Sip DTMF messages to other participants * * @generated from message livekit.proto.PublishSipDtmfRequest */ -export type PublishSipDtmfRequest = Message<"livekit.proto.PublishSipDtmfRequest"> & { +export class PublishSipDtmfRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required uint32 code = 2; */ - code: number; + code?: number; /** * @generated from field: required string digit = 3; */ - digit: string; + digit?: string; /** * @generated from field: repeated string destination_identities = 4; */ - destinationIdentities: string[]; -}; - -/** - * Describes the message livekit.proto.PublishSipDtmfRequest. - * Use `create(PublishSipDtmfRequestSchema)` to create a new message. - */ -export const PublishSipDtmfRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 18); + destinationIdentities: string[] = []; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishSipDtmfRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "code", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "digit", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishSipDtmfRequest { + return new PublishSipDtmfRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishSipDtmfRequest { + return new PublishSipDtmfRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishSipDtmfRequest { + return new PublishSipDtmfRequest().fromJsonString(jsonString, options); + } + + static equals(a: PublishSipDtmfRequest | PlainMessage | undefined, b: PublishSipDtmfRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishSipDtmfRequest, a, b); + } +} /** * @generated from message livekit.proto.PublishSipDtmfResponse */ -export type PublishSipDtmfResponse = Message<"livekit.proto.PublishSipDtmfResponse"> & { +export class PublishSipDtmfResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.PublishSipDtmfResponse. - * Use `create(PublishSipDtmfResponseSchema)` to create a new message. - */ -export const PublishSipDtmfResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 19); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishSipDtmfResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishSipDtmfResponse { + return new PublishSipDtmfResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishSipDtmfResponse { + return new PublishSipDtmfResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishSipDtmfResponse { + return new PublishSipDtmfResponse().fromJsonString(jsonString, options); + } + + static equals(a: PublishSipDtmfResponse | PlainMessage | undefined, b: PublishSipDtmfResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishSipDtmfResponse, a, b); + } +} /** * @generated from message livekit.proto.PublishSipDtmfCallback */ -export type PublishSipDtmfCallback = Message<"livekit.proto.PublishSipDtmfCallback"> & { +export class PublishSipDtmfCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.PublishSipDtmfCallback. - * Use `create(PublishSipDtmfCallbackSchema)` to create a new message. - */ -export const PublishSipDtmfCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 20); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PublishSipDtmfCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PublishSipDtmfCallback { + return new PublishSipDtmfCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PublishSipDtmfCallback { + return new PublishSipDtmfCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PublishSipDtmfCallback { + return new PublishSipDtmfCallback().fromJsonString(jsonString, options); + } + + static equals(a: PublishSipDtmfCallback | PlainMessage | undefined, b: PublishSipDtmfCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(PublishSipDtmfCallback, a, b); + } +} /** * Change the local participant's metadata * * @generated from message livekit.proto.SetLocalMetadataRequest */ -export type SetLocalMetadataRequest = Message<"livekit.proto.SetLocalMetadataRequest"> & { +export class SetLocalMetadataRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string metadata = 2; */ - metadata: string; -}; + metadata?: string; -/** - * Describes the message livekit.proto.SetLocalMetadataRequest. - * Use `create(SetLocalMetadataRequestSchema)` to create a new message. - */ -export const SetLocalMetadataRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 21); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalMetadataRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "metadata", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalMetadataRequest { + return new SetLocalMetadataRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalMetadataRequest { + return new SetLocalMetadataRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalMetadataRequest { + return new SetLocalMetadataRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalMetadataRequest | PlainMessage | undefined, b: SetLocalMetadataRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalMetadataRequest, a, b); + } +} /** * @generated from message livekit.proto.SetLocalMetadataResponse */ -export type SetLocalMetadataResponse = Message<"livekit.proto.SetLocalMetadataResponse"> & { +export class SetLocalMetadataResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.SetLocalMetadataResponse. - * Use `create(SetLocalMetadataResponseSchema)` to create a new message. - */ -export const SetLocalMetadataResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 22); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalMetadataResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalMetadataResponse { + return new SetLocalMetadataResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalMetadataResponse { + return new SetLocalMetadataResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalMetadataResponse { + return new SetLocalMetadataResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalMetadataResponse | PlainMessage | undefined, b: SetLocalMetadataResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalMetadataResponse, a, b); + } +} /** * @generated from message livekit.proto.SetLocalMetadataCallback */ -export type SetLocalMetadataCallback = Message<"livekit.proto.SetLocalMetadataCallback"> & { +export class SetLocalMetadataCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.SetLocalMetadataCallback. - * Use `create(SetLocalMetadataCallbackSchema)` to create a new message. - */ -export const SetLocalMetadataCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 23); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalMetadataCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalMetadataCallback { + return new SetLocalMetadataCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalMetadataCallback { + return new SetLocalMetadataCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalMetadataCallback { + return new SetLocalMetadataCallback().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalMetadataCallback | PlainMessage | undefined, b: SetLocalMetadataCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalMetadataCallback, a, b); + } +} /** * @generated from message livekit.proto.SendChatMessageRequest */ -export type SendChatMessageRequest = Message<"livekit.proto.SendChatMessageRequest"> & { +export class SendChatMessageRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string message = 2; */ - message: string; + message?: string; /** * @generated from field: repeated string destination_identities = 3; */ - destinationIdentities: string[]; + destinationIdentities: string[] = []; /** * @generated from field: optional string sender_identity = 4; */ - senderIdentity: string; -}; - -/** - * Describes the message livekit.proto.SendChatMessageRequest. - * Use `create(SendChatMessageRequestSchema)` to create a new message. - */ -export const SendChatMessageRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 24); + senderIdentity?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendChatMessageRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 4, name: "sender_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendChatMessageRequest { + return new SendChatMessageRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendChatMessageRequest { + return new SendChatMessageRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendChatMessageRequest { + return new SendChatMessageRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendChatMessageRequest | PlainMessage | undefined, b: SendChatMessageRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SendChatMessageRequest, a, b); + } +} /** * @generated from message livekit.proto.EditChatMessageRequest */ -export type EditChatMessageRequest = Message<"livekit.proto.EditChatMessageRequest"> & { +export class EditChatMessageRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string edit_text = 2; */ - editText: string; + editText?: string; /** * @generated from field: required livekit.proto.ChatMessage original_message = 3; @@ -723,46 +1409,90 @@ export type EditChatMessageRequest = Message<"livekit.proto.EditChatMessageReque /** * @generated from field: repeated string destination_identities = 4; */ - destinationIdentities: string[]; + destinationIdentities: string[] = []; /** * @generated from field: optional string sender_identity = 5; */ - senderIdentity: string; -}; - -/** - * Describes the message livekit.proto.EditChatMessageRequest. - * Use `create(EditChatMessageRequestSchema)` to create a new message. - */ -export const EditChatMessageRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 25); + senderIdentity?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.EditChatMessageRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "edit_text", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "original_message", kind: "message", T: ChatMessage, req: true }, + { no: 4, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 5, name: "sender_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): EditChatMessageRequest { + return new EditChatMessageRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): EditChatMessageRequest { + return new EditChatMessageRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): EditChatMessageRequest { + return new EditChatMessageRequest().fromJsonString(jsonString, options); + } + + static equals(a: EditChatMessageRequest | PlainMessage | undefined, b: EditChatMessageRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(EditChatMessageRequest, a, b); + } +} /** * @generated from message livekit.proto.SendChatMessageResponse */ -export type SendChatMessageResponse = Message<"livekit.proto.SendChatMessageResponse"> & { +export class SendChatMessageResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.SendChatMessageResponse. - * Use `create(SendChatMessageResponseSchema)` to create a new message. - */ -export const SendChatMessageResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 26); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendChatMessageResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendChatMessageResponse { + return new SendChatMessageResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendChatMessageResponse { + return new SendChatMessageResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendChatMessageResponse { + return new SendChatMessageResponse().fromJsonString(jsonString, options); + } + + static equals(a: SendChatMessageResponse | PlainMessage | undefined, b: SendChatMessageResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SendChatMessageResponse, a, b); + } +} /** * @generated from message livekit.proto.SendChatMessageCallback */ -export type SendChatMessageCallback = Message<"livekit.proto.SendChatMessageCallback"> & { +export class SendChatMessageCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from oneof livekit.proto.SendChatMessageCallback.message @@ -779,243 +1509,489 @@ export type SendChatMessageCallback = Message<"livekit.proto.SendChatMessageCall */ value: ChatMessage; case: "chatMessage"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.SendChatMessageCallback. - * Use `create(SendChatMessageCallbackSchema)` to create a new message. - */ -export const SendChatMessageCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 27); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendChatMessageCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "message" }, + { no: 3, name: "chat_message", kind: "message", T: ChatMessage, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendChatMessageCallback { + return new SendChatMessageCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendChatMessageCallback { + return new SendChatMessageCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendChatMessageCallback { + return new SendChatMessageCallback().fromJsonString(jsonString, options); + } + + static equals(a: SendChatMessageCallback | PlainMessage | undefined, b: SendChatMessageCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SendChatMessageCallback, a, b); + } +} /** * Change the local participant's attributes * * @generated from message livekit.proto.SetLocalAttributesRequest */ -export type SetLocalAttributesRequest = Message<"livekit.proto.SetLocalAttributesRequest"> & { +export class SetLocalAttributesRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: repeated livekit.proto.AttributesEntry attributes = 2; */ - attributes: AttributesEntry[]; -}; + attributes: AttributesEntry[] = []; -/** - * Describes the message livekit.proto.SetLocalAttributesRequest. - * Use `create(SetLocalAttributesRequestSchema)` to create a new message. - */ -export const SetLocalAttributesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 28); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalAttributesRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "attributes", kind: "message", T: AttributesEntry, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalAttributesRequest { + return new SetLocalAttributesRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalAttributesRequest { + return new SetLocalAttributesRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalAttributesRequest { + return new SetLocalAttributesRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalAttributesRequest | PlainMessage | undefined, b: SetLocalAttributesRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalAttributesRequest, a, b); + } +} /** * @generated from message livekit.proto.AttributesEntry */ -export type AttributesEntry = Message<"livekit.proto.AttributesEntry"> & { +export class AttributesEntry extends Message { /** * @generated from field: required string key = 1; */ - key: string; + key?: string; /** * @generated from field: required string value = 2; */ - value: string; -}; + value?: string; -/** - * Describes the message livekit.proto.AttributesEntry. - * Use `create(AttributesEntrySchema)` to create a new message. - */ -export const AttributesEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 29); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AttributesEntry"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "value", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AttributesEntry { + return new AttributesEntry().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AttributesEntry { + return new AttributesEntry().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AttributesEntry { + return new AttributesEntry().fromJsonString(jsonString, options); + } + + static equals(a: AttributesEntry | PlainMessage | undefined, b: AttributesEntry | PlainMessage | undefined): boolean { + return proto2.util.equals(AttributesEntry, a, b); + } +} /** * @generated from message livekit.proto.SetLocalAttributesResponse */ -export type SetLocalAttributesResponse = Message<"livekit.proto.SetLocalAttributesResponse"> & { +export class SetLocalAttributesResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.SetLocalAttributesResponse. - * Use `create(SetLocalAttributesResponseSchema)` to create a new message. - */ -export const SetLocalAttributesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 30); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalAttributesResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalAttributesResponse { + return new SetLocalAttributesResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalAttributesResponse { + return new SetLocalAttributesResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalAttributesResponse { + return new SetLocalAttributesResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalAttributesResponse | PlainMessage | undefined, b: SetLocalAttributesResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalAttributesResponse, a, b); + } +} /** * @generated from message livekit.proto.SetLocalAttributesCallback */ -export type SetLocalAttributesCallback = Message<"livekit.proto.SetLocalAttributesCallback"> & { +export class SetLocalAttributesCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.SetLocalAttributesCallback. - * Use `create(SetLocalAttributesCallbackSchema)` to create a new message. - */ -export const SetLocalAttributesCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 31); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalAttributesCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalAttributesCallback { + return new SetLocalAttributesCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalAttributesCallback { + return new SetLocalAttributesCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalAttributesCallback { + return new SetLocalAttributesCallback().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalAttributesCallback | PlainMessage | undefined, b: SetLocalAttributesCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalAttributesCallback, a, b); + } +} /** * Change the local participant's name * * @generated from message livekit.proto.SetLocalNameRequest */ -export type SetLocalNameRequest = Message<"livekit.proto.SetLocalNameRequest"> & { +export class SetLocalNameRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string name = 2; */ - name: string; -}; + name?: string; -/** - * Describes the message livekit.proto.SetLocalNameRequest. - * Use `create(SetLocalNameRequestSchema)` to create a new message. - */ -export const SetLocalNameRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 32); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalNameRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalNameRequest { + return new SetLocalNameRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalNameRequest { + return new SetLocalNameRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalNameRequest { + return new SetLocalNameRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalNameRequest | PlainMessage | undefined, b: SetLocalNameRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalNameRequest, a, b); + } +} /** * @generated from message livekit.proto.SetLocalNameResponse */ -export type SetLocalNameResponse = Message<"livekit.proto.SetLocalNameResponse"> & { +export class SetLocalNameResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.SetLocalNameResponse. - * Use `create(SetLocalNameResponseSchema)` to create a new message. - */ -export const SetLocalNameResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 33); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalNameResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalNameResponse { + return new SetLocalNameResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalNameResponse { + return new SetLocalNameResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalNameResponse { + return new SetLocalNameResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalNameResponse | PlainMessage | undefined, b: SetLocalNameResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalNameResponse, a, b); + } +} /** * @generated from message livekit.proto.SetLocalNameCallback */ -export type SetLocalNameCallback = Message<"livekit.proto.SetLocalNameCallback"> & { +export class SetLocalNameCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.SetLocalNameCallback. - * Use `create(SetLocalNameCallbackSchema)` to create a new message. - */ -export const SetLocalNameCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 34); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetLocalNameCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetLocalNameCallback { + return new SetLocalNameCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetLocalNameCallback { + return new SetLocalNameCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetLocalNameCallback { + return new SetLocalNameCallback().fromJsonString(jsonString, options); + } + + static equals(a: SetLocalNameCallback | PlainMessage | undefined, b: SetLocalNameCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SetLocalNameCallback, a, b); + } +} /** * Change the "desire" to subs2ribe to a track * * @generated from message livekit.proto.SetSubscribedRequest */ -export type SetSubscribedRequest = Message<"livekit.proto.SetSubscribedRequest"> & { +export class SetSubscribedRequest extends Message { /** * @generated from field: required bool subscribe = 1; */ - subscribe: boolean; + subscribe?: boolean; /** * @generated from field: required uint64 publication_handle = 2; */ - publicationHandle: bigint; -}; + publicationHandle?: bigint; -/** - * Describes the message livekit.proto.SetSubscribedRequest. - * Use `create(SetSubscribedRequestSchema)` to create a new message. - */ -export const SetSubscribedRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 35); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetSubscribedRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "subscribe", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 2, name: "publication_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetSubscribedRequest { + return new SetSubscribedRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetSubscribedRequest { + return new SetSubscribedRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetSubscribedRequest { + return new SetSubscribedRequest().fromJsonString(jsonString, options); + } + + static equals(a: SetSubscribedRequest | PlainMessage | undefined, b: SetSubscribedRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SetSubscribedRequest, a, b); + } +} /** * @generated from message livekit.proto.SetSubscribedResponse */ -export type SetSubscribedResponse = Message<"livekit.proto.SetSubscribedResponse"> & { -}; +export class SetSubscribedResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.SetSubscribedResponse. - * Use `create(SetSubscribedResponseSchema)` to create a new message. - */ -export const SetSubscribedResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 36); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SetSubscribedResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SetSubscribedResponse { + return new SetSubscribedResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SetSubscribedResponse { + return new SetSubscribedResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SetSubscribedResponse { + return new SetSubscribedResponse().fromJsonString(jsonString, options); + } + + static equals(a: SetSubscribedResponse | PlainMessage | undefined, b: SetSubscribedResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SetSubscribedResponse, a, b); + } +} /** * @generated from message livekit.proto.GetSessionStatsRequest */ -export type GetSessionStatsRequest = Message<"livekit.proto.GetSessionStatsRequest"> & { +export class GetSessionStatsRequest extends Message { /** * @generated from field: required uint64 room_handle = 1; */ - roomHandle: bigint; -}; + roomHandle?: bigint; -/** - * Describes the message livekit.proto.GetSessionStatsRequest. - * Use `create(GetSessionStatsRequestSchema)` to create a new message. - */ -export const GetSessionStatsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 37); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetSessionStatsRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "room_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSessionStatsRequest { + return new GetSessionStatsRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSessionStatsRequest { + return new GetSessionStatsRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSessionStatsRequest { + return new GetSessionStatsRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetSessionStatsRequest | PlainMessage | undefined, b: GetSessionStatsRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(GetSessionStatsRequest, a, b); + } +} /** * @generated from message livekit.proto.GetSessionStatsResponse */ -export type GetSessionStatsResponse = Message<"livekit.proto.GetSessionStatsResponse"> & { +export class GetSessionStatsResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.GetSessionStatsResponse. - * Use `create(GetSessionStatsResponseSchema)` to create a new message. - */ -export const GetSessionStatsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 38); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetSessionStatsResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSessionStatsResponse { + return new GetSessionStatsResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSessionStatsResponse { + return new GetSessionStatsResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSessionStatsResponse { + return new GetSessionStatsResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetSessionStatsResponse | PlainMessage | undefined, b: GetSessionStatsResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(GetSessionStatsResponse, a, b); + } +} /** * @generated from message livekit.proto.GetSessionStatsCallback */ -export type GetSessionStatsCallback = Message<"livekit.proto.GetSessionStatsCallback"> & { +export class GetSessionStatsCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from oneof livekit.proto.GetSessionStatsCallback.message @@ -1032,81 +2008,165 @@ export type GetSessionStatsCallback = Message<"livekit.proto.GetSessionStatsCall */ value: GetSessionStatsCallback_Result; case: "result"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.GetSessionStatsCallback. - * Use `create(GetSessionStatsCallbackSchema)` to create a new message. - */ -export const GetSessionStatsCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 39); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetSessionStatsCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "message" }, + { no: 3, name: "result", kind: "message", T: GetSessionStatsCallback_Result, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSessionStatsCallback { + return new GetSessionStatsCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSessionStatsCallback { + return new GetSessionStatsCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSessionStatsCallback { + return new GetSessionStatsCallback().fromJsonString(jsonString, options); + } + + static equals(a: GetSessionStatsCallback | PlainMessage | undefined, b: GetSessionStatsCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(GetSessionStatsCallback, a, b); + } +} /** * @generated from message livekit.proto.GetSessionStatsCallback.Result */ -export type GetSessionStatsCallback_Result = Message<"livekit.proto.GetSessionStatsCallback.Result"> & { +export class GetSessionStatsCallback_Result extends Message { /** * @generated from field: repeated livekit.proto.RtcStats publisher_stats = 1; */ - publisherStats: RtcStats[]; + publisherStats: RtcStats[] = []; /** * @generated from field: repeated livekit.proto.RtcStats subscriber_stats = 2; */ - subscriberStats: RtcStats[]; -}; + subscriberStats: RtcStats[] = []; -/** - * Describes the message livekit.proto.GetSessionStatsCallback.Result. - * Use `create(GetSessionStatsCallback_ResultSchema)` to create a new message. - */ -export const GetSessionStatsCallback_ResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 39, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetSessionStatsCallback.Result"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "publisher_stats", kind: "message", T: RtcStats, repeated: true }, + { no: 2, name: "subscriber_stats", kind: "message", T: RtcStats, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetSessionStatsCallback_Result { + return new GetSessionStatsCallback_Result().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetSessionStatsCallback_Result { + return new GetSessionStatsCallback_Result().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetSessionStatsCallback_Result { + return new GetSessionStatsCallback_Result().fromJsonString(jsonString, options); + } + + static equals(a: GetSessionStatsCallback_Result | PlainMessage | undefined, b: GetSessionStatsCallback_Result | PlainMessage | undefined): boolean { + return proto2.util.equals(GetSessionStatsCallback_Result, a, b); + } +} /** * @generated from message livekit.proto.VideoEncoding */ -export type VideoEncoding = Message<"livekit.proto.VideoEncoding"> & { +export class VideoEncoding extends Message { /** * @generated from field: required uint64 max_bitrate = 1; */ - maxBitrate: bigint; + maxBitrate?: bigint; /** * @generated from field: required double max_framerate = 2; */ - maxFramerate: number; -}; + maxFramerate?: number; -/** - * Describes the message livekit.proto.VideoEncoding. - * Use `create(VideoEncodingSchema)` to create a new message. - */ -export const VideoEncodingSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 40); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoEncoding"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "max_bitrate", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "max_framerate", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoEncoding { + return new VideoEncoding().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoEncoding { + return new VideoEncoding().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoEncoding { + return new VideoEncoding().fromJsonString(jsonString, options); + } + + static equals(a: VideoEncoding | PlainMessage | undefined, b: VideoEncoding | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoEncoding, a, b); + } +} /** * @generated from message livekit.proto.AudioEncoding */ -export type AudioEncoding = Message<"livekit.proto.AudioEncoding"> & { +export class AudioEncoding extends Message { /** * @generated from field: required uint64 max_bitrate = 1; */ - maxBitrate: bigint; -}; + maxBitrate?: bigint; -/** - * Describes the message livekit.proto.AudioEncoding. - * Use `create(AudioEncodingSchema)` to create a new message. - */ -export const AudioEncodingSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 41); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioEncoding"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "max_bitrate", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioEncoding { + return new AudioEncoding().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioEncoding { + return new AudioEncoding().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioEncoding { + return new AudioEncoding().fromJsonString(jsonString, options); + } + + static equals(a: AudioEncoding | PlainMessage | undefined, b: AudioEncoding | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioEncoding, a, b); + } +} /** * @generated from message livekit.proto.TrackPublishOptions */ -export type TrackPublishOptions = Message<"livekit.proto.TrackPublishOptions"> & { +export class TrackPublishOptions extends Message { /** * encodings are optional * @@ -1122,115 +2182,186 @@ export type TrackPublishOptions = Message<"livekit.proto.TrackPublishOptions"> & /** * @generated from field: optional livekit.proto.VideoCodec video_codec = 3; */ - videoCodec: VideoCodec; + videoCodec?: VideoCodec; /** * @generated from field: optional bool dtx = 4; */ - dtx: boolean; + dtx?: boolean; /** * @generated from field: optional bool red = 5; */ - red: boolean; + red?: boolean; /** * @generated from field: optional bool simulcast = 6; */ - simulcast: boolean; + simulcast?: boolean; /** * @generated from field: optional livekit.proto.TrackSource source = 7; */ - source: TrackSource; + source?: TrackSource; /** * @generated from field: optional string stream = 8; */ - stream: string; -}; - -/** - * Describes the message livekit.proto.TrackPublishOptions. - * Use `create(TrackPublishOptionsSchema)` to create a new message. - */ -export const TrackPublishOptionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 42); + stream?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackPublishOptions"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "video_encoding", kind: "message", T: VideoEncoding, opt: true }, + { no: 2, name: "audio_encoding", kind: "message", T: AudioEncoding, opt: true }, + { no: 3, name: "video_codec", kind: "enum", T: proto2.getEnumType(VideoCodec), opt: true }, + { no: 4, name: "dtx", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 5, name: "red", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 6, name: "simulcast", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 7, name: "source", kind: "enum", T: proto2.getEnumType(TrackSource), opt: true }, + { no: 8, name: "stream", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackPublishOptions { + return new TrackPublishOptions().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackPublishOptions { + return new TrackPublishOptions().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackPublishOptions { + return new TrackPublishOptions().fromJsonString(jsonString, options); + } + + static equals(a: TrackPublishOptions | PlainMessage | undefined, b: TrackPublishOptions | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackPublishOptions, a, b); + } +} /** * @generated from message livekit.proto.IceServer */ -export type IceServer = Message<"livekit.proto.IceServer"> & { +export class IceServer extends Message { /** * @generated from field: repeated string urls = 1; */ - urls: string[]; + urls: string[] = []; /** * @generated from field: optional string username = 2; */ - username: string; + username?: string; /** * @generated from field: optional string password = 3; */ - password: string; -}; + password?: string; -/** - * Describes the message livekit.proto.IceServer. - * Use `create(IceServerSchema)` to create a new message. - */ -export const IceServerSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 43); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.IceServer"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "urls", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 2, name: "username", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "password", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): IceServer { + return new IceServer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): IceServer { + return new IceServer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): IceServer { + return new IceServer().fromJsonString(jsonString, options); + } + + static equals(a: IceServer | PlainMessage | undefined, b: IceServer | PlainMessage | undefined): boolean { + return proto2.util.equals(IceServer, a, b); + } +} /** * @generated from message livekit.proto.RtcConfig */ -export type RtcConfig = Message<"livekit.proto.RtcConfig"> & { +export class RtcConfig extends Message { /** * @generated from field: optional livekit.proto.IceTransportType ice_transport_type = 1; */ - iceTransportType: IceTransportType; + iceTransportType?: IceTransportType; /** * @generated from field: optional livekit.proto.ContinualGatheringPolicy continual_gathering_policy = 2; */ - continualGatheringPolicy: ContinualGatheringPolicy; + continualGatheringPolicy?: ContinualGatheringPolicy; /** * empty fallback to default * * @generated from field: repeated livekit.proto.IceServer ice_servers = 3; */ - iceServers: IceServer[]; -}; + iceServers: IceServer[] = []; -/** - * Describes the message livekit.proto.RtcConfig. - * Use `create(RtcConfigSchema)` to create a new message. - */ -export const RtcConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 44); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcConfig"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "ice_transport_type", kind: "enum", T: proto2.getEnumType(IceTransportType), opt: true }, + { no: 2, name: "continual_gathering_policy", kind: "enum", T: proto2.getEnumType(ContinualGatheringPolicy), opt: true }, + { no: 3, name: "ice_servers", kind: "message", T: IceServer, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcConfig { + return new RtcConfig().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcConfig { + return new RtcConfig().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcConfig { + return new RtcConfig().fromJsonString(jsonString, options); + } + + static equals(a: RtcConfig | PlainMessage | undefined, b: RtcConfig | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcConfig, a, b); + } +} /** * @generated from message livekit.proto.RoomOptions */ -export type RoomOptions = Message<"livekit.proto.RoomOptions"> & { +export class RoomOptions extends Message { /** * @generated from field: optional bool auto_subscribe = 1; */ - autoSubscribe: boolean; + autoSubscribe?: boolean; /** * @generated from field: optional bool adaptive_stream = 2; */ - adaptiveStream: boolean; + adaptiveStream?: boolean; /** * @generated from field: optional bool dynacast = 3; */ - dynacast: boolean; + dynacast?: boolean; /** * @generated from field: optional livekit.proto.E2eeOptions e2ee = 4; @@ -1247,84 +2378,155 @@ export type RoomOptions = Message<"livekit.proto.RoomOptions"> & { /** * @generated from field: optional uint32 join_retries = 6; */ - joinRetries: number; -}; - -/** - * Describes the message livekit.proto.RoomOptions. - * Use `create(RoomOptionsSchema)` to create a new message. - */ -export const RoomOptionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 45); + joinRetries?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RoomOptions"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "auto_subscribe", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 2, name: "adaptive_stream", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 3, name: "dynacast", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 4, name: "e2ee", kind: "message", T: E2eeOptions, opt: true }, + { no: 5, name: "rtc_config", kind: "message", T: RtcConfig, opt: true }, + { no: 6, name: "join_retries", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RoomOptions { + return new RoomOptions().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RoomOptions { + return new RoomOptions().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RoomOptions { + return new RoomOptions().fromJsonString(jsonString, options); + } + + static equals(a: RoomOptions | PlainMessage | undefined, b: RoomOptions | PlainMessage | undefined): boolean { + return proto2.util.equals(RoomOptions, a, b); + } +} /** * @generated from message livekit.proto.TranscriptionSegment */ -export type TranscriptionSegment = Message<"livekit.proto.TranscriptionSegment"> & { +export class TranscriptionSegment extends Message { /** * @generated from field: required string id = 1; */ - id: string; + id?: string; /** * @generated from field: required string text = 2; */ - text: string; + text?: string; /** * @generated from field: required uint64 start_time = 3; */ - startTime: bigint; + startTime?: bigint; /** * @generated from field: required uint64 end_time = 4; */ - endTime: bigint; + endTime?: bigint; /** * @generated from field: required bool final = 5; */ - final: boolean; + final?: boolean; /** * @generated from field: required string language = 6; */ - language: string; -}; - -/** - * Describes the message livekit.proto.TranscriptionSegment. - * Use `create(TranscriptionSegmentSchema)` to create a new message. - */ -export const TranscriptionSegmentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 46); + language?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TranscriptionSegment"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "text", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "start_time", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 4, name: "end_time", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 5, name: "final", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 6, name: "language", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TranscriptionSegment { + return new TranscriptionSegment().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TranscriptionSegment { + return new TranscriptionSegment().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TranscriptionSegment { + return new TranscriptionSegment().fromJsonString(jsonString, options); + } + + static equals(a: TranscriptionSegment | PlainMessage | undefined, b: TranscriptionSegment | PlainMessage | undefined): boolean { + return proto2.util.equals(TranscriptionSegment, a, b); + } +} /** * @generated from message livekit.proto.BufferInfo */ -export type BufferInfo = Message<"livekit.proto.BufferInfo"> & { +export class BufferInfo extends Message { /** * @generated from field: required uint64 data_ptr = 1; */ - dataPtr: bigint; + dataPtr?: bigint; /** * @generated from field: required uint64 data_len = 2; */ - dataLen: bigint; -}; + dataLen?: bigint; -/** - * Describes the message livekit.proto.BufferInfo. - * Use `create(BufferInfoSchema)` to create a new message. - */ -export const BufferInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 47); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.BufferInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "data_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "data_len", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): BufferInfo { + return new BufferInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): BufferInfo { + return new BufferInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): BufferInfo { + return new BufferInfo().fromJsonString(jsonString, options); + } + + static equals(a: BufferInfo | PlainMessage | undefined, b: BufferInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(BufferInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedBuffer */ -export type OwnedBuffer = Message<"livekit.proto.OwnedBuffer"> & { +export class OwnedBuffer extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -1334,23 +2536,44 @@ export type OwnedBuffer = Message<"livekit.proto.OwnedBuffer"> & { * @generated from field: required livekit.proto.BufferInfo data = 2; */ data?: BufferInfo; -}; -/** - * Describes the message livekit.proto.OwnedBuffer. - * Use `create(OwnedBufferSchema)` to create a new message. - */ -export const OwnedBufferSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 48); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedBuffer"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "data", kind: "message", T: BufferInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedBuffer { + return new OwnedBuffer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedBuffer { + return new OwnedBuffer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedBuffer { + return new OwnedBuffer().fromJsonString(jsonString, options); + } + + static equals(a: OwnedBuffer | PlainMessage | undefined, b: OwnedBuffer | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedBuffer, a, b); + } +} /** * @generated from message livekit.proto.RoomEvent */ -export type RoomEvent = Message<"livekit.proto.RoomEvent"> & { +export class RoomEvent extends Message { /** * @generated from field: required uint64 room_handle = 1; */ - roomHandle: bigint; + roomHandle?: bigint; /** * @generated from oneof livekit.proto.RoomEvent.message @@ -1539,47 +2762,119 @@ export type RoomEvent = Message<"livekit.proto.RoomEvent"> & { */ value: DataStreamChunkReceived; case: "streamChunkReceived"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.RoomEvent. - * Use `create(RoomEventSchema)` to create a new message. - */ -export const RoomEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 49); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RoomEvent"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "room_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "participant_connected", kind: "message", T: ParticipantConnected, oneof: "message" }, + { no: 3, name: "participant_disconnected", kind: "message", T: ParticipantDisconnected, oneof: "message" }, + { no: 4, name: "local_track_published", kind: "message", T: LocalTrackPublished, oneof: "message" }, + { no: 5, name: "local_track_unpublished", kind: "message", T: LocalTrackUnpublished, oneof: "message" }, + { no: 6, name: "local_track_subscribed", kind: "message", T: LocalTrackSubscribed, oneof: "message" }, + { no: 7, name: "track_published", kind: "message", T: TrackPublished, oneof: "message" }, + { no: 8, name: "track_unpublished", kind: "message", T: TrackUnpublished, oneof: "message" }, + { no: 9, name: "track_subscribed", kind: "message", T: TrackSubscribed, oneof: "message" }, + { no: 10, name: "track_unsubscribed", kind: "message", T: TrackUnsubscribed, oneof: "message" }, + { no: 11, name: "track_subscription_failed", kind: "message", T: TrackSubscriptionFailed, oneof: "message" }, + { no: 12, name: "track_muted", kind: "message", T: TrackMuted, oneof: "message" }, + { no: 13, name: "track_unmuted", kind: "message", T: TrackUnmuted, oneof: "message" }, + { no: 14, name: "active_speakers_changed", kind: "message", T: ActiveSpeakersChanged, oneof: "message" }, + { no: 15, name: "room_metadata_changed", kind: "message", T: RoomMetadataChanged, oneof: "message" }, + { no: 16, name: "room_sid_changed", kind: "message", T: RoomSidChanged, oneof: "message" }, + { no: 17, name: "participant_metadata_changed", kind: "message", T: ParticipantMetadataChanged, oneof: "message" }, + { no: 18, name: "participant_name_changed", kind: "message", T: ParticipantNameChanged, oneof: "message" }, + { no: 19, name: "participant_attributes_changed", kind: "message", T: ParticipantAttributesChanged, oneof: "message" }, + { no: 20, name: "connection_quality_changed", kind: "message", T: ConnectionQualityChanged, oneof: "message" }, + { no: 21, name: "connection_state_changed", kind: "message", T: ConnectionStateChanged, oneof: "message" }, + { no: 22, name: "disconnected", kind: "message", T: Disconnected, oneof: "message" }, + { no: 23, name: "reconnecting", kind: "message", T: Reconnecting, oneof: "message" }, + { no: 24, name: "reconnected", kind: "message", T: Reconnected, oneof: "message" }, + { no: 25, name: "e2ee_state_changed", kind: "message", T: E2eeStateChanged, oneof: "message" }, + { no: 26, name: "eos", kind: "message", T: RoomEOS, oneof: "message" }, + { no: 27, name: "data_packet_received", kind: "message", T: DataPacketReceived, oneof: "message" }, + { no: 28, name: "transcription_received", kind: "message", T: TranscriptionReceived, oneof: "message" }, + { no: 29, name: "chat_message", kind: "message", T: ChatMessageReceived, oneof: "message" }, + { no: 30, name: "stream_header_received", kind: "message", T: DataStreamHeaderReceived, oneof: "message" }, + { no: 31, name: "stream_chunk_received", kind: "message", T: DataStreamChunkReceived, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RoomEvent { + return new RoomEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RoomEvent { + return new RoomEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RoomEvent { + return new RoomEvent().fromJsonString(jsonString, options); + } + + static equals(a: RoomEvent | PlainMessage | undefined, b: RoomEvent | PlainMessage | undefined): boolean { + return proto2.util.equals(RoomEvent, a, b); + } +} /** * @generated from message livekit.proto.RoomInfo */ -export type RoomInfo = Message<"livekit.proto.RoomInfo"> & { +export class RoomInfo extends Message { /** * @generated from field: optional string sid = 1; */ - sid: string; + sid?: string; /** * @generated from field: required string name = 2; */ - name: string; + name?: string; /** * @generated from field: required string metadata = 3; */ - metadata: string; -}; + metadata?: string; -/** - * Describes the message livekit.proto.RoomInfo. - * Use `create(RoomInfoSchema)` to create a new message. - */ -export const RoomInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 50); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RoomInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "sid", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "metadata", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RoomInfo { + return new RoomInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RoomInfo { + return new RoomInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RoomInfo { + return new RoomInfo().fromJsonString(jsonString, options); + } + + static equals(a: RoomInfo | PlainMessage | undefined, b: RoomInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(RoomInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedRoom */ -export type OwnedRoom = Message<"livekit.proto.OwnedRoom"> & { +export class OwnedRoom extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -1589,146 +2884,309 @@ export type OwnedRoom = Message<"livekit.proto.OwnedRoom"> & { * @generated from field: required livekit.proto.RoomInfo info = 2; */ info?: RoomInfo; -}; -/** - * Describes the message livekit.proto.OwnedRoom. - * Use `create(OwnedRoomSchema)` to create a new message. - */ -export const OwnedRoomSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 51); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedRoom"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: RoomInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedRoom { + return new OwnedRoom().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedRoom { + return new OwnedRoom().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedRoom { + return new OwnedRoom().fromJsonString(jsonString, options); + } + + static equals(a: OwnedRoom | PlainMessage | undefined, b: OwnedRoom | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedRoom, a, b); + } +} /** * @generated from message livekit.proto.ParticipantConnected */ -export type ParticipantConnected = Message<"livekit.proto.ParticipantConnected"> & { +export class ParticipantConnected extends Message { /** * @generated from field: required livekit.proto.OwnedParticipant info = 1; */ info?: OwnedParticipant; -}; -/** - * Describes the message livekit.proto.ParticipantConnected. - * Use `create(ParticipantConnectedSchema)` to create a new message. - */ -export const ParticipantConnectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 52); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ParticipantConnected"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "info", kind: "message", T: OwnedParticipant, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ParticipantConnected { + return new ParticipantConnected().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ParticipantConnected { + return new ParticipantConnected().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ParticipantConnected { + return new ParticipantConnected().fromJsonString(jsonString, options); + } + + static equals(a: ParticipantConnected | PlainMessage | undefined, b: ParticipantConnected | PlainMessage | undefined): boolean { + return proto2.util.equals(ParticipantConnected, a, b); + } +} /** * @generated from message livekit.proto.ParticipantDisconnected */ -export type ParticipantDisconnected = Message<"livekit.proto.ParticipantDisconnected"> & { +export class ParticipantDisconnected extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; -}; + participantIdentity?: string; -/** - * Describes the message livekit.proto.ParticipantDisconnected. - * Use `create(ParticipantDisconnectedSchema)` to create a new message. - */ -export const ParticipantDisconnectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 53); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ParticipantDisconnected"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ParticipantDisconnected { + return new ParticipantDisconnected().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ParticipantDisconnected { + return new ParticipantDisconnected().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ParticipantDisconnected { + return new ParticipantDisconnected().fromJsonString(jsonString, options); + } + + static equals(a: ParticipantDisconnected | PlainMessage | undefined, b: ParticipantDisconnected | PlainMessage | undefined): boolean { + return proto2.util.equals(ParticipantDisconnected, a, b); + } +} /** * @generated from message livekit.proto.LocalTrackPublished */ -export type LocalTrackPublished = Message<"livekit.proto.LocalTrackPublished"> & { +export class LocalTrackPublished extends Message { /** * The TrackPublicationInfo comes from the PublishTrack response * and the FfiClient musts wait for it before firing this event * * @generated from field: required string track_sid = 1; */ - trackSid: string; -}; + trackSid?: string; -/** - * Describes the message livekit.proto.LocalTrackPublished. - * Use `create(LocalTrackPublishedSchema)` to create a new message. - */ -export const LocalTrackPublishedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 54); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.LocalTrackPublished"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LocalTrackPublished { + return new LocalTrackPublished().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LocalTrackPublished { + return new LocalTrackPublished().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LocalTrackPublished { + return new LocalTrackPublished().fromJsonString(jsonString, options); + } + + static equals(a: LocalTrackPublished | PlainMessage | undefined, b: LocalTrackPublished | PlainMessage | undefined): boolean { + return proto2.util.equals(LocalTrackPublished, a, b); + } +} /** * @generated from message livekit.proto.LocalTrackUnpublished */ -export type LocalTrackUnpublished = Message<"livekit.proto.LocalTrackUnpublished"> & { +export class LocalTrackUnpublished extends Message { /** * @generated from field: required string publication_sid = 1; */ - publicationSid: string; -}; + publicationSid?: string; -/** - * Describes the message livekit.proto.LocalTrackUnpublished. - * Use `create(LocalTrackUnpublishedSchema)` to create a new message. - */ -export const LocalTrackUnpublishedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 55); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.LocalTrackUnpublished"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "publication_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LocalTrackUnpublished { + return new LocalTrackUnpublished().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LocalTrackUnpublished { + return new LocalTrackUnpublished().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LocalTrackUnpublished { + return new LocalTrackUnpublished().fromJsonString(jsonString, options); + } + + static equals(a: LocalTrackUnpublished | PlainMessage | undefined, b: LocalTrackUnpublished | PlainMessage | undefined): boolean { + return proto2.util.equals(LocalTrackUnpublished, a, b); + } +} /** * @generated from message livekit.proto.LocalTrackSubscribed */ -export type LocalTrackSubscribed = Message<"livekit.proto.LocalTrackSubscribed"> & { +export class LocalTrackSubscribed extends Message { /** * @generated from field: required string track_sid = 2; */ - trackSid: string; -}; + trackSid?: string; -/** - * Describes the message livekit.proto.LocalTrackSubscribed. - * Use `create(LocalTrackSubscribedSchema)` to create a new message. - */ -export const LocalTrackSubscribedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 56); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.LocalTrackSubscribed"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LocalTrackSubscribed { + return new LocalTrackSubscribed().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LocalTrackSubscribed { + return new LocalTrackSubscribed().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LocalTrackSubscribed { + return new LocalTrackSubscribed().fromJsonString(jsonString, options); + } + + static equals(a: LocalTrackSubscribed | PlainMessage | undefined, b: LocalTrackSubscribed | PlainMessage | undefined): boolean { + return proto2.util.equals(LocalTrackSubscribed, a, b); + } +} /** * @generated from message livekit.proto.TrackPublished */ -export type TrackPublished = Message<"livekit.proto.TrackPublished"> & { +export class TrackPublished extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required livekit.proto.OwnedTrackPublication publication = 2; */ publication?: OwnedTrackPublication; -}; -/** - * Describes the message livekit.proto.TrackPublished. - * Use `create(TrackPublishedSchema)` to create a new message. - */ -export const TrackPublishedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 57); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackPublished"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "publication", kind: "message", T: OwnedTrackPublication, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackPublished { + return new TrackPublished().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackPublished { + return new TrackPublished().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackPublished { + return new TrackPublished().fromJsonString(jsonString, options); + } + + static equals(a: TrackPublished | PlainMessage | undefined, b: TrackPublished | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackPublished, a, b); + } +} /** * @generated from message livekit.proto.TrackUnpublished */ -export type TrackUnpublished = Message<"livekit.proto.TrackUnpublished"> & { +export class TrackUnpublished extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string publication_sid = 2; */ - publicationSid: string; -}; + publicationSid?: string; -/** - * Describes the message livekit.proto.TrackUnpublished. - * Use `create(TrackUnpublishedSchema)` to create a new message. - */ -export const TrackUnpublishedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 58); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackUnpublished"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "publication_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackUnpublished { + return new TrackUnpublished().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackUnpublished { + return new TrackUnpublished().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackUnpublished { + return new TrackUnpublished().fromJsonString(jsonString, options); + } + + static equals(a: TrackUnpublished | PlainMessage | undefined, b: TrackUnpublished | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackUnpublished, a, b); + } +} /** * Publication isn't needed for subscription events on the FFI @@ -1736,292 +3194,564 @@ export const TrackUnpublishedSchema: GenMessage = /*@__PURE__* * * @generated from message livekit.proto.TrackSubscribed */ -export type TrackSubscribed = Message<"livekit.proto.TrackSubscribed"> & { +export class TrackSubscribed extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required livekit.proto.OwnedTrack track = 2; */ track?: OwnedTrack; -}; - -/** - * Describes the message livekit.proto.TrackSubscribed. - * Use `create(TrackSubscribedSchema)` to create a new message. - */ -export const TrackSubscribedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 59); + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackSubscribed"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track", kind: "message", T: OwnedTrack, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackSubscribed { + return new TrackSubscribed().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackSubscribed { + return new TrackSubscribed().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackSubscribed { + return new TrackSubscribed().fromJsonString(jsonString, options); + } + + static equals(a: TrackSubscribed | PlainMessage | undefined, b: TrackSubscribed | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackSubscribed, a, b); + } +} /** * @generated from message livekit.proto.TrackUnsubscribed */ -export type TrackUnsubscribed = Message<"livekit.proto.TrackUnsubscribed"> & { +export class TrackUnsubscribed extends Message { /** * The FFI language can dispose/remove the VideoSink here * * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; -}; + trackSid?: string; -/** - * Describes the message livekit.proto.TrackUnsubscribed. - * Use `create(TrackUnsubscribedSchema)` to create a new message. - */ -export const TrackUnsubscribedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 60); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackUnsubscribed"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackUnsubscribed { + return new TrackUnsubscribed().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackUnsubscribed { + return new TrackUnsubscribed().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackUnsubscribed { + return new TrackUnsubscribed().fromJsonString(jsonString, options); + } + + static equals(a: TrackUnsubscribed | PlainMessage | undefined, b: TrackUnsubscribed | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackUnsubscribed, a, b); + } +} /** * @generated from message livekit.proto.TrackSubscriptionFailed */ -export type TrackSubscriptionFailed = Message<"livekit.proto.TrackSubscriptionFailed"> & { +export class TrackSubscriptionFailed extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; + trackSid?: string; /** * @generated from field: required string error = 3; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.TrackSubscriptionFailed. - * Use `create(TrackSubscriptionFailedSchema)` to create a new message. - */ -export const TrackSubscriptionFailedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 61); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackSubscriptionFailed"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackSubscriptionFailed { + return new TrackSubscriptionFailed().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackSubscriptionFailed { + return new TrackSubscriptionFailed().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackSubscriptionFailed { + return new TrackSubscriptionFailed().fromJsonString(jsonString, options); + } + + static equals(a: TrackSubscriptionFailed | PlainMessage | undefined, b: TrackSubscriptionFailed | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackSubscriptionFailed, a, b); + } +} /** * @generated from message livekit.proto.TrackMuted */ -export type TrackMuted = Message<"livekit.proto.TrackMuted"> & { +export class TrackMuted extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; -}; + trackSid?: string; -/** - * Describes the message livekit.proto.TrackMuted. - * Use `create(TrackMutedSchema)` to create a new message. - */ -export const TrackMutedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 62); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackMuted"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackMuted { + return new TrackMuted().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackMuted { + return new TrackMuted().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackMuted { + return new TrackMuted().fromJsonString(jsonString, options); + } + + static equals(a: TrackMuted | PlainMessage | undefined, b: TrackMuted | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackMuted, a, b); + } +} /** * @generated from message livekit.proto.TrackUnmuted */ -export type TrackUnmuted = Message<"livekit.proto.TrackUnmuted"> & { +export class TrackUnmuted extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string track_sid = 2; */ - trackSid: string; -}; + trackSid?: string; -/** - * Describes the message livekit.proto.TrackUnmuted. - * Use `create(TrackUnmutedSchema)` to create a new message. - */ -export const TrackUnmutedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 63); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackUnmuted"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackUnmuted { + return new TrackUnmuted().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackUnmuted { + return new TrackUnmuted().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackUnmuted { + return new TrackUnmuted().fromJsonString(jsonString, options); + } + + static equals(a: TrackUnmuted | PlainMessage | undefined, b: TrackUnmuted | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackUnmuted, a, b); + } +} /** * @generated from message livekit.proto.E2eeStateChanged */ -export type E2eeStateChanged = Message<"livekit.proto.E2eeStateChanged"> & { +export class E2eeStateChanged extends Message { /** * Using sid instead of identity for ffi communication * * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required livekit.proto.EncryptionState state = 2; */ - state: EncryptionState; -}; + state?: EncryptionState; -/** - * Describes the message livekit.proto.E2eeStateChanged. - * Use `create(E2eeStateChangedSchema)` to create a new message. - */ -export const E2eeStateChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 64); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.E2eeStateChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "state", kind: "enum", T: proto2.getEnumType(EncryptionState), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): E2eeStateChanged { + return new E2eeStateChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): E2eeStateChanged { + return new E2eeStateChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): E2eeStateChanged { + return new E2eeStateChanged().fromJsonString(jsonString, options); + } + + static equals(a: E2eeStateChanged | PlainMessage | undefined, b: E2eeStateChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(E2eeStateChanged, a, b); + } +} /** * @generated from message livekit.proto.ActiveSpeakersChanged */ -export type ActiveSpeakersChanged = Message<"livekit.proto.ActiveSpeakersChanged"> & { +export class ActiveSpeakersChanged extends Message { /** * @generated from field: repeated string participant_identities = 1; */ - participantIdentities: string[]; -}; + participantIdentities: string[] = []; -/** - * Describes the message livekit.proto.ActiveSpeakersChanged. - * Use `create(ActiveSpeakersChangedSchema)` to create a new message. - */ -export const ActiveSpeakersChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 65); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ActiveSpeakersChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ActiveSpeakersChanged { + return new ActiveSpeakersChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ActiveSpeakersChanged { + return new ActiveSpeakersChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ActiveSpeakersChanged { + return new ActiveSpeakersChanged().fromJsonString(jsonString, options); + } + + static equals(a: ActiveSpeakersChanged | PlainMessage | undefined, b: ActiveSpeakersChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(ActiveSpeakersChanged, a, b); + } +} /** * @generated from message livekit.proto.RoomMetadataChanged */ -export type RoomMetadataChanged = Message<"livekit.proto.RoomMetadataChanged"> & { +export class RoomMetadataChanged extends Message { /** * @generated from field: required string metadata = 1; */ - metadata: string; -}; + metadata?: string; -/** - * Describes the message livekit.proto.RoomMetadataChanged. - * Use `create(RoomMetadataChangedSchema)` to create a new message. - */ -export const RoomMetadataChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 66); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RoomMetadataChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "metadata", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RoomMetadataChanged { + return new RoomMetadataChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RoomMetadataChanged { + return new RoomMetadataChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RoomMetadataChanged { + return new RoomMetadataChanged().fromJsonString(jsonString, options); + } + + static equals(a: RoomMetadataChanged | PlainMessage | undefined, b: RoomMetadataChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(RoomMetadataChanged, a, b); + } +} /** * @generated from message livekit.proto.RoomSidChanged */ -export type RoomSidChanged = Message<"livekit.proto.RoomSidChanged"> & { +export class RoomSidChanged extends Message { /** * @generated from field: required string sid = 1; */ - sid: string; -}; + sid?: string; -/** - * Describes the message livekit.proto.RoomSidChanged. - * Use `create(RoomSidChangedSchema)` to create a new message. - */ -export const RoomSidChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 67); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RoomSidChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RoomSidChanged { + return new RoomSidChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RoomSidChanged { + return new RoomSidChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RoomSidChanged { + return new RoomSidChanged().fromJsonString(jsonString, options); + } + + static equals(a: RoomSidChanged | PlainMessage | undefined, b: RoomSidChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(RoomSidChanged, a, b); + } +} /** * @generated from message livekit.proto.ParticipantMetadataChanged */ -export type ParticipantMetadataChanged = Message<"livekit.proto.ParticipantMetadataChanged"> & { +export class ParticipantMetadataChanged extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string metadata = 2; */ - metadata: string; -}; + metadata?: string; -/** - * Describes the message livekit.proto.ParticipantMetadataChanged. - * Use `create(ParticipantMetadataChangedSchema)` to create a new message. - */ -export const ParticipantMetadataChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 68); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ParticipantMetadataChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "metadata", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ParticipantMetadataChanged { + return new ParticipantMetadataChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ParticipantMetadataChanged { + return new ParticipantMetadataChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ParticipantMetadataChanged { + return new ParticipantMetadataChanged().fromJsonString(jsonString, options); + } + + static equals(a: ParticipantMetadataChanged | PlainMessage | undefined, b: ParticipantMetadataChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(ParticipantMetadataChanged, a, b); + } +} /** * @generated from message livekit.proto.ParticipantAttributesChanged */ -export type ParticipantAttributesChanged = Message<"livekit.proto.ParticipantAttributesChanged"> & { +export class ParticipantAttributesChanged extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: repeated livekit.proto.AttributesEntry attributes = 2; */ - attributes: AttributesEntry[]; + attributes: AttributesEntry[] = []; /** * @generated from field: repeated livekit.proto.AttributesEntry changed_attributes = 3; */ - changedAttributes: AttributesEntry[]; -}; + changedAttributes: AttributesEntry[] = []; -/** - * Describes the message livekit.proto.ParticipantAttributesChanged. - * Use `create(ParticipantAttributesChangedSchema)` to create a new message. - */ -export const ParticipantAttributesChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 69); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ParticipantAttributesChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "attributes", kind: "message", T: AttributesEntry, repeated: true }, + { no: 3, name: "changed_attributes", kind: "message", T: AttributesEntry, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ParticipantAttributesChanged { + return new ParticipantAttributesChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ParticipantAttributesChanged { + return new ParticipantAttributesChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ParticipantAttributesChanged { + return new ParticipantAttributesChanged().fromJsonString(jsonString, options); + } + + static equals(a: ParticipantAttributesChanged | PlainMessage | undefined, b: ParticipantAttributesChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(ParticipantAttributesChanged, a, b); + } +} /** * @generated from message livekit.proto.ParticipantNameChanged */ -export type ParticipantNameChanged = Message<"livekit.proto.ParticipantNameChanged"> & { +export class ParticipantNameChanged extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required string name = 2; */ - name: string; -}; + name?: string; -/** - * Describes the message livekit.proto.ParticipantNameChanged. - * Use `create(ParticipantNameChangedSchema)` to create a new message. - */ -export const ParticipantNameChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 70); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ParticipantNameChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ParticipantNameChanged { + return new ParticipantNameChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ParticipantNameChanged { + return new ParticipantNameChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ParticipantNameChanged { + return new ParticipantNameChanged().fromJsonString(jsonString, options); + } + + static equals(a: ParticipantNameChanged | PlainMessage | undefined, b: ParticipantNameChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(ParticipantNameChanged, a, b); + } +} /** * @generated from message livekit.proto.ConnectionQualityChanged */ -export type ConnectionQualityChanged = Message<"livekit.proto.ConnectionQualityChanged"> & { +export class ConnectionQualityChanged extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required livekit.proto.ConnectionQuality quality = 2; */ - quality: ConnectionQuality; -}; + quality?: ConnectionQuality; -/** - * Describes the message livekit.proto.ConnectionQualityChanged. - * Use `create(ConnectionQualityChangedSchema)` to create a new message. - */ -export const ConnectionQualityChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 71); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ConnectionQualityChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "quality", kind: "enum", T: proto2.getEnumType(ConnectionQuality), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConnectionQualityChanged { + return new ConnectionQualityChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConnectionQualityChanged { + return new ConnectionQualityChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConnectionQualityChanged { + return new ConnectionQualityChanged().fromJsonString(jsonString, options); + } + + static equals(a: ConnectionQualityChanged | PlainMessage | undefined, b: ConnectionQualityChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(ConnectionQualityChanged, a, b); + } +} /** * @generated from message livekit.proto.UserPacket */ -export type UserPacket = Message<"livekit.proto.UserPacket"> & { +export class UserPacket extends Message { /** * @generated from field: required livekit.proto.OwnedBuffer data = 1; */ @@ -2030,62 +3760,108 @@ export type UserPacket = Message<"livekit.proto.UserPacket"> & { /** * @generated from field: optional string topic = 2; */ - topic: string; -}; + topic?: string; -/** - * Describes the message livekit.proto.UserPacket. - * Use `create(UserPacketSchema)` to create a new message. - */ -export const UserPacketSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 72); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UserPacket"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "data", kind: "message", T: OwnedBuffer, req: true }, + { no: 2, name: "topic", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UserPacket { + return new UserPacket().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UserPacket { + return new UserPacket().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UserPacket { + return new UserPacket().fromJsonString(jsonString, options); + } + + static equals(a: UserPacket | PlainMessage | undefined, b: UserPacket | PlainMessage | undefined): boolean { + return proto2.util.equals(UserPacket, a, b); + } +} /** * @generated from message livekit.proto.ChatMessage */ -export type ChatMessage = Message<"livekit.proto.ChatMessage"> & { +export class ChatMessage extends Message { /** * @generated from field: required string id = 1; */ - id: string; + id?: string; /** * @generated from field: required int64 timestamp = 2; */ - timestamp: bigint; + timestamp?: bigint; /** * @generated from field: required string message = 3; */ - message: string; + message?: string; /** * @generated from field: optional int64 edit_timestamp = 4; */ - editTimestamp: bigint; + editTimestamp?: bigint; /** * @generated from field: optional bool deleted = 5; */ - deleted: boolean; + deleted?: boolean; /** * @generated from field: optional bool generated = 6; */ - generated: boolean; -}; - -/** - * Describes the message livekit.proto.ChatMessage. - * Use `create(ChatMessageSchema)` to create a new message. - */ -export const ChatMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 73); + generated?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ChatMessage"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "timestamp", kind: "scalar", T: 3 /* ScalarType.INT64 */, req: true }, + { no: 3, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "edit_timestamp", kind: "scalar", T: 3 /* ScalarType.INT64 */, opt: true }, + { no: 5, name: "deleted", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 6, name: "generated", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatMessage { + return new ChatMessage().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatMessage { + return new ChatMessage().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatMessage { + return new ChatMessage().fromJsonString(jsonString, options); + } + + static equals(a: ChatMessage | PlainMessage | undefined, b: ChatMessage | PlainMessage | undefined): boolean { + return proto2.util.equals(ChatMessage, a, b); + } +} /** * @generated from message livekit.proto.ChatMessageReceived */ -export type ChatMessageReceived = Message<"livekit.proto.ChatMessageReceived"> & { +export class ChatMessageReceived extends Message { /** * @generated from field: required livekit.proto.ChatMessage message = 1; */ @@ -2094,53 +3870,95 @@ export type ChatMessageReceived = Message<"livekit.proto.ChatMessageReceived"> & /** * @generated from field: required string participant_identity = 2; */ - participantIdentity: string; -}; + participantIdentity?: string; -/** - * Describes the message livekit.proto.ChatMessageReceived. - * Use `create(ChatMessageReceivedSchema)` to create a new message. - */ -export const ChatMessageReceivedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 74); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ChatMessageReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "message", kind: "message", T: ChatMessage, req: true }, + { no: 2, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatMessageReceived { + return new ChatMessageReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatMessageReceived { + return new ChatMessageReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatMessageReceived { + return new ChatMessageReceived().fromJsonString(jsonString, options); + } + + static equals(a: ChatMessageReceived | PlainMessage | undefined, b: ChatMessageReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(ChatMessageReceived, a, b); + } +} /** * @generated from message livekit.proto.SipDTMF */ -export type SipDTMF = Message<"livekit.proto.SipDTMF"> & { +export class SipDTMF extends Message { /** * @generated from field: required uint32 code = 1; */ - code: number; + code?: number; /** * @generated from field: optional string digit = 2; */ - digit: string; -}; + digit?: string; -/** - * Describes the message livekit.proto.SipDTMF. - * Use `create(SipDTMFSchema)` to create a new message. - */ -export const SipDTMFSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 75); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SipDTMF"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "code", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "digit", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SipDTMF { + return new SipDTMF().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SipDTMF { + return new SipDTMF().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SipDTMF { + return new SipDTMF().fromJsonString(jsonString, options); + } + + static equals(a: SipDTMF | PlainMessage | undefined, b: SipDTMF | PlainMessage | undefined): boolean { + return proto2.util.equals(SipDTMF, a, b); + } +} /** * @generated from message livekit.proto.DataPacketReceived */ -export type DataPacketReceived = Message<"livekit.proto.DataPacketReceived"> & { +export class DataPacketReceived extends Message { /** * @generated from field: required livekit.proto.DataPacketKind kind = 1; */ - kind: DataPacketKind; + kind?: DataPacketKind; /** * Can be empty if the data is sent a server SDK * * @generated from field: required string participant_identity = 2; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from oneof livekit.proto.DataPacketReceived.value @@ -2157,253 +3975,506 @@ export type DataPacketReceived = Message<"livekit.proto.DataPacketReceived"> & { */ value: SipDTMF; case: "sipDtmf"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.DataPacketReceived. - * Use `create(DataPacketReceivedSchema)` to create a new message. - */ -export const DataPacketReceivedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 76); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataPacketReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "kind", kind: "enum", T: proto2.getEnumType(DataPacketKind), req: true }, + { no: 2, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "user", kind: "message", T: UserPacket, oneof: "value" }, + { no: 5, name: "sip_dtmf", kind: "message", T: SipDTMF, oneof: "value" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataPacketReceived { + return new DataPacketReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataPacketReceived { + return new DataPacketReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataPacketReceived { + return new DataPacketReceived().fromJsonString(jsonString, options); + } + + static equals(a: DataPacketReceived | PlainMessage | undefined, b: DataPacketReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(DataPacketReceived, a, b); + } +} /** * @generated from message livekit.proto.TranscriptionReceived */ -export type TranscriptionReceived = Message<"livekit.proto.TranscriptionReceived"> & { +export class TranscriptionReceived extends Message { /** * @generated from field: optional string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: optional string track_sid = 2; */ - trackSid: string; + trackSid?: string; /** * @generated from field: repeated livekit.proto.TranscriptionSegment segments = 3; */ - segments: TranscriptionSegment[]; -}; + segments: TranscriptionSegment[] = []; -/** - * Describes the message livekit.proto.TranscriptionReceived. - * Use `create(TranscriptionReceivedSchema)` to create a new message. - */ -export const TranscriptionReceivedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 77); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TranscriptionReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "track_sid", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "segments", kind: "message", T: TranscriptionSegment, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TranscriptionReceived { + return new TranscriptionReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TranscriptionReceived { + return new TranscriptionReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TranscriptionReceived { + return new TranscriptionReceived().fromJsonString(jsonString, options); + } + + static equals(a: TranscriptionReceived | PlainMessage | undefined, b: TranscriptionReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(TranscriptionReceived, a, b); + } +} /** * @generated from message livekit.proto.ConnectionStateChanged */ -export type ConnectionStateChanged = Message<"livekit.proto.ConnectionStateChanged"> & { +export class ConnectionStateChanged extends Message { /** * @generated from field: required livekit.proto.ConnectionState state = 1; */ - state: ConnectionState; -}; + state?: ConnectionState; -/** - * Describes the message livekit.proto.ConnectionStateChanged. - * Use `create(ConnectionStateChangedSchema)` to create a new message. - */ -export const ConnectionStateChangedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 78); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ConnectionStateChanged"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "state", kind: "enum", T: proto2.getEnumType(ConnectionState), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ConnectionStateChanged { + return new ConnectionStateChanged().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ConnectionStateChanged { + return new ConnectionStateChanged().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ConnectionStateChanged { + return new ConnectionStateChanged().fromJsonString(jsonString, options); + } + + static equals(a: ConnectionStateChanged | PlainMessage | undefined, b: ConnectionStateChanged | PlainMessage | undefined): boolean { + return proto2.util.equals(ConnectionStateChanged, a, b); + } +} /** * @generated from message livekit.proto.Connected */ -export type Connected = Message<"livekit.proto.Connected"> & { -}; +export class Connected extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.Connected. - * Use `create(ConnectedSchema)` to create a new message. - */ -export const ConnectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 79); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.Connected"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Connected { + return new Connected().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Connected { + return new Connected().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Connected { + return new Connected().fromJsonString(jsonString, options); + } + + static equals(a: Connected | PlainMessage | undefined, b: Connected | PlainMessage | undefined): boolean { + return proto2.util.equals(Connected, a, b); + } +} /** * @generated from message livekit.proto.Disconnected */ -export type Disconnected = Message<"livekit.proto.Disconnected"> & { +export class Disconnected extends Message { /** * @generated from field: required livekit.proto.DisconnectReason reason = 1; */ - reason: DisconnectReason; -}; + reason?: DisconnectReason; -/** - * Describes the message livekit.proto.Disconnected. - * Use `create(DisconnectedSchema)` to create a new message. - */ -export const DisconnectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 80); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.Disconnected"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "reason", kind: "enum", T: proto2.getEnumType(DisconnectReason), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Disconnected { + return new Disconnected().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Disconnected { + return new Disconnected().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Disconnected { + return new Disconnected().fromJsonString(jsonString, options); + } + + static equals(a: Disconnected | PlainMessage | undefined, b: Disconnected | PlainMessage | undefined): boolean { + return proto2.util.equals(Disconnected, a, b); + } +} /** * @generated from message livekit.proto.Reconnecting */ -export type Reconnecting = Message<"livekit.proto.Reconnecting"> & { -}; +export class Reconnecting extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.Reconnecting. - * Use `create(ReconnectingSchema)` to create a new message. - */ -export const ReconnectingSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 81); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.Reconnecting"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Reconnecting { + return new Reconnecting().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Reconnecting { + return new Reconnecting().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Reconnecting { + return new Reconnecting().fromJsonString(jsonString, options); + } + + static equals(a: Reconnecting | PlainMessage | undefined, b: Reconnecting | PlainMessage | undefined): boolean { + return proto2.util.equals(Reconnecting, a, b); + } +} /** * @generated from message livekit.proto.Reconnected */ -export type Reconnected = Message<"livekit.proto.Reconnected"> & { -}; +export class Reconnected extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.Reconnected. - * Use `create(ReconnectedSchema)` to create a new message. - */ -export const ReconnectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 82); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.Reconnected"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Reconnected { + return new Reconnected().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Reconnected { + return new Reconnected().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Reconnected { + return new Reconnected().fromJsonString(jsonString, options); + } + + static equals(a: Reconnected | PlainMessage | undefined, b: Reconnected | PlainMessage | undefined): boolean { + return proto2.util.equals(Reconnected, a, b); + } +} /** * @generated from message livekit.proto.RoomEOS */ -export type RoomEOS = Message<"livekit.proto.RoomEOS"> & { -}; +export class RoomEOS extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.RoomEOS. - * Use `create(RoomEOSSchema)` to create a new message. - */ -export const RoomEOSSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 83); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RoomEOS"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RoomEOS { + return new RoomEOS().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RoomEOS { + return new RoomEOS().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RoomEOS { + return new RoomEOS().fromJsonString(jsonString, options); + } + + static equals(a: RoomEOS | PlainMessage | undefined, b: RoomEOS | PlainMessage | undefined): boolean { + return proto2.util.equals(RoomEOS, a, b); + } +} /** * @generated from message livekit.proto.DataStream */ -export type DataStream = Message<"livekit.proto.DataStream"> & { -}; +export class DataStream extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStream"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStream { + return new DataStream().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStream { + return new DataStream().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStream { + return new DataStream().fromJsonString(jsonString, options); + } + + static equals(a: DataStream | PlainMessage | undefined, b: DataStream | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStream, a, b); + } +} /** - * Describes the message livekit.proto.DataStream. - * Use `create(DataStreamSchema)` to create a new message. + * enum for operation types (specific to TextHeader) + * + * @generated from enum livekit.proto.DataStream.OperationType */ -export const DataStreamSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 84); +export enum DataStream_OperationType { + /** + * @generated from enum value: CREATE = 0; + */ + CREATE = 0, + + /** + * @generated from enum value: UPDATE = 1; + */ + UPDATE = 1, + + /** + * @generated from enum value: DELETE = 2; + */ + DELETE = 2, + + /** + * @generated from enum value: REACTION = 3; + */ + REACTION = 3, +} +// Retrieve enum metadata with: proto2.getEnumType(DataStream_OperationType) +proto2.util.setEnumType(DataStream_OperationType, "livekit.proto.DataStream.OperationType", [ + { no: 0, name: "CREATE" }, + { no: 1, name: "UPDATE" }, + { no: 2, name: "DELETE" }, + { no: 3, name: "REACTION" }, +]); /** * header properties specific to text streams * * @generated from message livekit.proto.DataStream.TextHeader */ -export type DataStream_TextHeader = Message<"livekit.proto.DataStream.TextHeader"> & { +export class DataStream_TextHeader extends Message { /** * @generated from field: required livekit.proto.DataStream.OperationType operation_type = 1; */ - operationType: DataStream_OperationType; + operationType?: DataStream_OperationType; /** * Optional: Version for updates/edits * * @generated from field: optional int32 version = 2; */ - version: number; + version?: number; /** * Optional: Reply to specific message * * @generated from field: optional string reply_to_stream_id = 3; */ - replyToStreamId: string; + replyToStreamId?: string; /** * file attachments for text streams * * @generated from field: repeated string attached_stream_ids = 4; */ - attachedStreamIds: string[]; + attachedStreamIds: string[] = []; /** * true if the text has been generated by an agent from a participant's audio transcription * * @generated from field: optional bool generated = 5; */ - generated: boolean; -}; - -/** - * Describes the message livekit.proto.DataStream.TextHeader. - * Use `create(DataStream_TextHeaderSchema)` to create a new message. - */ -export const DataStream_TextHeaderSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 84, 0); + generated?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStream.TextHeader"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "operation_type", kind: "enum", T: proto2.getEnumType(DataStream_OperationType), req: true }, + { no: 2, name: "version", kind: "scalar", T: 5 /* ScalarType.INT32 */, opt: true }, + { no: 3, name: "reply_to_stream_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 4, name: "attached_stream_ids", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 5, name: "generated", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStream_TextHeader { + return new DataStream_TextHeader().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStream_TextHeader { + return new DataStream_TextHeader().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStream_TextHeader { + return new DataStream_TextHeader().fromJsonString(jsonString, options); + } + + static equals(a: DataStream_TextHeader | PlainMessage | undefined, b: DataStream_TextHeader | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStream_TextHeader, a, b); + } +} /** * header properties specific to file or image streams * * @generated from message livekit.proto.DataStream.FileHeader */ -export type DataStream_FileHeader = Message<"livekit.proto.DataStream.FileHeader"> & { +export class DataStream_FileHeader extends Message { /** * name of the file * * @generated from field: required string file_name = 1; */ - fileName: string; -}; + fileName?: string; -/** - * Describes the message livekit.proto.DataStream.FileHeader. - * Use `create(DataStream_FileHeaderSchema)` to create a new message. - */ -export const DataStream_FileHeaderSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 84, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStream.FileHeader"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "file_name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStream_FileHeader { + return new DataStream_FileHeader().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStream_FileHeader { + return new DataStream_FileHeader().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStream_FileHeader { + return new DataStream_FileHeader().fromJsonString(jsonString, options); + } + + static equals(a: DataStream_FileHeader | PlainMessage | undefined, b: DataStream_FileHeader | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStream_FileHeader, a, b); + } +} /** * main DataStream.Header that contains a oneof for specific headers * * @generated from message livekit.proto.DataStream.Header */ -export type DataStream_Header = Message<"livekit.proto.DataStream.Header"> & { +export class DataStream_Header extends Message { /** * unique identifier for this data stream * * @generated from field: required string stream_id = 1; */ - streamId: string; + streamId?: string; /** * using int64 for Unix timestamp * * @generated from field: required int64 timestamp = 2; */ - timestamp: bigint; + timestamp?: bigint; /** * @generated from field: required string mime_type = 3; */ - mimeType: string; + mimeType?: string; /** * @generated from field: required string topic = 4; */ - topic: string; + topic?: string; /** * only populated for finite streams, if it's a stream of unknown size this stays empty * * @generated from field: optional uint64 total_length = 5; */ - totalLength: bigint; + totalLength?: bigint; /** * user defined extensions map that can carry additional info * * @generated from field: map extensions = 6; */ - extensions: { [key: string]: string }; + extensions: { [key: string]: string } = {}; /** * oneof to choose between specific header types @@ -2422,153 +4493,214 @@ export type DataStream_Header = Message<"livekit.proto.DataStream.Header"> & { */ value: DataStream_FileHeader; case: "fileHeader"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.DataStream.Header. - * Use `create(DataStream_HeaderSchema)` to create a new message. - */ -export const DataStream_HeaderSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 84, 2); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStream.Header"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "timestamp", kind: "scalar", T: 3 /* ScalarType.INT64 */, req: true }, + { no: 3, name: "mime_type", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "topic", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 5, name: "total_length", kind: "scalar", T: 4 /* ScalarType.UINT64 */, opt: true }, + { no: 6, name: "extensions", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} }, + { no: 7, name: "text_header", kind: "message", T: DataStream_TextHeader, oneof: "content_header" }, + { no: 8, name: "file_header", kind: "message", T: DataStream_FileHeader, oneof: "content_header" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStream_Header { + return new DataStream_Header().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStream_Header { + return new DataStream_Header().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStream_Header { + return new DataStream_Header().fromJsonString(jsonString, options); + } + + static equals(a: DataStream_Header | PlainMessage | undefined, b: DataStream_Header | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStream_Header, a, b); + } +} /** * @generated from message livekit.proto.DataStream.Chunk */ -export type DataStream_Chunk = Message<"livekit.proto.DataStream.Chunk"> & { +export class DataStream_Chunk extends Message { /** * unique identifier for this data stream to map it to the correct header * * @generated from field: required string stream_id = 1; */ - streamId: string; + streamId?: string; /** * @generated from field: required uint64 chunk_index = 2; */ - chunkIndex: bigint; + chunkIndex?: bigint; /** * content as binary (bytes) * * @generated from field: required bytes content = 3; */ - content: Uint8Array; + content?: Uint8Array; /** * true only if this is the last chunk of this stream - can also be sent with empty content * * @generated from field: optional bool complete = 4; */ - complete: boolean; + complete?: boolean; /** * a version indicating that this chunk_index has been retroactively modified and the original one needs to be replaced * * @generated from field: optional int32 version = 5; */ - version: number; + version?: number; /** * optional, initialization vector for AES-GCM encryption * * @generated from field: optional bytes iv = 6; */ - iv: Uint8Array; -}; - -/** - * Describes the message livekit.proto.DataStream.Chunk. - * Use `create(DataStream_ChunkSchema)` to create a new message. - */ -export const DataStream_ChunkSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 84, 3); - -/** - * enum for operation types (specific to TextHeader) - * - * @generated from enum livekit.proto.DataStream.OperationType - */ -export enum DataStream_OperationType { - /** - * @generated from enum value: CREATE = 0; - */ - CREATE = 0, - - /** - * @generated from enum value: UPDATE = 1; - */ - UPDATE = 1, - - /** - * @generated from enum value: DELETE = 2; - */ - DELETE = 2, - - /** - * @generated from enum value: REACTION = 3; - */ - REACTION = 3, + iv?: Uint8Array; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStream.Chunk"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "chunk_index", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 3, name: "content", kind: "scalar", T: 12 /* ScalarType.BYTES */, req: true }, + { no: 4, name: "complete", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 5, name: "version", kind: "scalar", T: 5 /* ScalarType.INT32 */, opt: true }, + { no: 6, name: "iv", kind: "scalar", T: 12 /* ScalarType.BYTES */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStream_Chunk { + return new DataStream_Chunk().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStream_Chunk { + return new DataStream_Chunk().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStream_Chunk { + return new DataStream_Chunk().fromJsonString(jsonString, options); + } + + static equals(a: DataStream_Chunk | PlainMessage | undefined, b: DataStream_Chunk | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStream_Chunk, a, b); + } } -/** - * Describes the enum livekit.proto.DataStream.OperationType. - */ -export const DataStream_OperationTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_room, 84, 0); - /** * @generated from message livekit.proto.DataStreamHeaderReceived */ -export type DataStreamHeaderReceived = Message<"livekit.proto.DataStreamHeaderReceived"> & { +export class DataStreamHeaderReceived extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required livekit.proto.DataStream.Header header = 2; */ header?: DataStream_Header; -}; -/** - * Describes the message livekit.proto.DataStreamHeaderReceived. - * Use `create(DataStreamHeaderReceivedSchema)` to create a new message. - */ -export const DataStreamHeaderReceivedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 85); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStreamHeaderReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "header", kind: "message", T: DataStream_Header, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStreamHeaderReceived { + return new DataStreamHeaderReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStreamHeaderReceived { + return new DataStreamHeaderReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStreamHeaderReceived { + return new DataStreamHeaderReceived().fromJsonString(jsonString, options); + } + + static equals(a: DataStreamHeaderReceived | PlainMessage | undefined, b: DataStreamHeaderReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStreamHeaderReceived, a, b); + } +} /** * @generated from message livekit.proto.DataStreamChunkReceived */ -export type DataStreamChunkReceived = Message<"livekit.proto.DataStreamChunkReceived"> & { +export class DataStreamChunkReceived extends Message { /** * @generated from field: required string participant_identity = 1; */ - participantIdentity: string; + participantIdentity?: string; /** * @generated from field: required livekit.proto.DataStream.Chunk chunk = 2; */ chunk?: DataStream_Chunk; -}; -/** - * Describes the message livekit.proto.DataStreamChunkReceived. - * Use `create(DataStreamChunkReceivedSchema)` to create a new message. - */ -export const DataStreamChunkReceivedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 86); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataStreamChunkReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "chunk", kind: "message", T: DataStream_Chunk, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataStreamChunkReceived { + return new DataStreamChunkReceived().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataStreamChunkReceived { + return new DataStreamChunkReceived().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataStreamChunkReceived { + return new DataStreamChunkReceived().fromJsonString(jsonString, options); + } + + static equals(a: DataStreamChunkReceived | PlainMessage | undefined, b: DataStreamChunkReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(DataStreamChunkReceived, a, b); + } +} /** * @generated from message livekit.proto.SendStreamHeaderRequest */ -export type SendStreamHeaderRequest = Message<"livekit.proto.SendStreamHeaderRequest"> & { +export class SendStreamHeaderRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required livekit.proto.DataStream.Header header = 2; @@ -2578,29 +4710,52 @@ export type SendStreamHeaderRequest = Message<"livekit.proto.SendStreamHeaderReq /** * @generated from field: repeated string destination_identities = 3; */ - destinationIdentities: string[]; + destinationIdentities: string[] = []; /** * @generated from field: optional string sender_identity = 4; */ - senderIdentity: string; -}; - -/** - * Describes the message livekit.proto.SendStreamHeaderRequest. - * Use `create(SendStreamHeaderRequestSchema)` to create a new message. - */ -export const SendStreamHeaderRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 87); + senderIdentity?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamHeaderRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "header", kind: "message", T: DataStream_Header, req: true }, + { no: 3, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 4, name: "sender_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamHeaderRequest { + return new SendStreamHeaderRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamHeaderRequest { + return new SendStreamHeaderRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamHeaderRequest { + return new SendStreamHeaderRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamHeaderRequest | PlainMessage | undefined, b: SendStreamHeaderRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamHeaderRequest, a, b); + } +} /** * @generated from message livekit.proto.SendStreamChunkRequest */ -export type SendStreamChunkRequest = Message<"livekit.proto.SendStreamChunkRequest"> & { +export class SendStreamChunkRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required livekit.proto.DataStream.Chunk chunk = 2; @@ -2610,221 +4765,201 @@ export type SendStreamChunkRequest = Message<"livekit.proto.SendStreamChunkReque /** * @generated from field: repeated string destination_identities = 3; */ - destinationIdentities: string[]; + destinationIdentities: string[] = []; /** * @generated from field: optional string sender_identity = 4; */ - senderIdentity: string; -}; - -/** - * Describes the message livekit.proto.SendStreamChunkRequest. - * Use `create(SendStreamChunkRequestSchema)` to create a new message. - */ -export const SendStreamChunkRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 88); + senderIdentity?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamChunkRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "chunk", kind: "message", T: DataStream_Chunk, req: true }, + { no: 3, name: "destination_identities", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 4, name: "sender_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamChunkRequest { + return new SendStreamChunkRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamChunkRequest { + return new SendStreamChunkRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendStreamChunkRequest { + return new SendStreamChunkRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamChunkRequest | PlainMessage | undefined, b: SendStreamChunkRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamChunkRequest, a, b); + } +} /** * @generated from message livekit.proto.SendStreamHeaderResponse */ -export type SendStreamHeaderResponse = Message<"livekit.proto.SendStreamHeaderResponse"> & { +export class SendStreamHeaderResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.SendStreamHeaderResponse. - * Use `create(SendStreamHeaderResponseSchema)` to create a new message. - */ -export const SendStreamHeaderResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 89); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * @generated from message livekit.proto.SendStreamChunkResponse - */ -export type SendStreamChunkResponse = Message<"livekit.proto.SendStreamChunkResponse"> & { - /** - * @generated from field: required uint64 async_id = 1; - */ - asyncId: bigint; -}; + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamHeaderResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); -/** - * Describes the message livekit.proto.SendStreamChunkResponse. - * Use `create(SendStreamChunkResponseSchema)` to create a new message. - */ -export const SendStreamChunkResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 90); + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamHeaderResponse { + return new SendStreamHeaderResponse().fromBinary(bytes, options); + } -/** - * @generated from message livekit.proto.SendStreamHeaderCallback - */ -export type SendStreamHeaderCallback = Message<"livekit.proto.SendStreamHeaderCallback"> & { - /** - * @generated from field: required uint64 async_id = 1; - */ - asyncId: bigint; + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamHeaderResponse { + return new SendStreamHeaderResponse().fromJson(jsonValue, options); + } - /** - * @generated from field: optional string error = 2; - */ - error: string; -}; + static fromJsonString(jsonString: string, options?: Partial): SendStreamHeaderResponse { + return new SendStreamHeaderResponse().fromJsonString(jsonString, options); + } -/** - * Describes the message livekit.proto.SendStreamHeaderCallback. - * Use `create(SendStreamHeaderCallbackSchema)` to create a new message. - */ -export const SendStreamHeaderCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 91); + static equals(a: SendStreamHeaderResponse | PlainMessage | undefined, b: SendStreamHeaderResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamHeaderResponse, a, b); + } +} /** - * @generated from message livekit.proto.SendStreamChunkCallback + * @generated from message livekit.proto.SendStreamChunkResponse */ -export type SendStreamChunkCallback = Message<"livekit.proto.SendStreamChunkCallback"> & { +export class SendStreamChunkResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; - /** - * @generated from field: optional string error = 2; - */ - error: string; -}; + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.SendStreamChunkCallback. - * Use `create(SendStreamChunkCallbackSchema)` to create a new message. - */ -export const SendStreamChunkCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_room, 92); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamChunkResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); -/** - * @generated from enum livekit.proto.IceTransportType - */ -export enum IceTransportType { - /** - * @generated from enum value: TRANSPORT_RELAY = 0; - */ - TRANSPORT_RELAY = 0, + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamChunkResponse { + return new SendStreamChunkResponse().fromBinary(bytes, options); + } - /** - * @generated from enum value: TRANSPORT_NOHOST = 1; - */ - TRANSPORT_NOHOST = 1, + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamChunkResponse { + return new SendStreamChunkResponse().fromJson(jsonValue, options); + } - /** - * @generated from enum value: TRANSPORT_ALL = 2; - */ - TRANSPORT_ALL = 2, -} + static fromJsonString(jsonString: string, options?: Partial): SendStreamChunkResponse { + return new SendStreamChunkResponse().fromJsonString(jsonString, options); + } -/** - * Describes the enum livekit.proto.IceTransportType. - */ -export const IceTransportTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_room, 0); + static equals(a: SendStreamChunkResponse | PlainMessage | undefined, b: SendStreamChunkResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamChunkResponse, a, b); + } +} /** - * @generated from enum livekit.proto.ContinualGatheringPolicy + * @generated from message livekit.proto.SendStreamHeaderCallback */ -export enum ContinualGatheringPolicy { +export class SendStreamHeaderCallback extends Message { /** - * @generated from enum value: GATHER_ONCE = 0; + * @generated from field: required uint64 async_id = 1; */ - GATHER_ONCE = 0, + asyncId?: bigint; /** - * @generated from enum value: GATHER_CONTINUALLY = 1; + * @generated from field: optional string error = 2; */ - GATHER_CONTINUALLY = 1, -} + error?: string; -/** - * Describes the enum livekit.proto.ContinualGatheringPolicy. - */ -export const ContinualGatheringPolicySchema: GenEnum = /*@__PURE__*/ - enumDesc(file_room, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * @generated from enum livekit.proto.ConnectionQuality - */ -export enum ConnectionQuality { - /** - * @generated from enum value: QUALITY_POOR = 0; - */ - QUALITY_POOR = 0, + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamHeaderCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); - /** - * @generated from enum value: QUALITY_GOOD = 1; - */ - QUALITY_GOOD = 1, + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamHeaderCallback { + return new SendStreamHeaderCallback().fromBinary(bytes, options); + } - /** - * @generated from enum value: QUALITY_EXCELLENT = 2; - */ - QUALITY_EXCELLENT = 2, + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamHeaderCallback { + return new SendStreamHeaderCallback().fromJson(jsonValue, options); + } - /** - * @generated from enum value: QUALITY_LOST = 3; - */ - QUALITY_LOST = 3, -} + static fromJsonString(jsonString: string, options?: Partial): SendStreamHeaderCallback { + return new SendStreamHeaderCallback().fromJsonString(jsonString, options); + } -/** - * Describes the enum livekit.proto.ConnectionQuality. - */ -export const ConnectionQualitySchema: GenEnum = /*@__PURE__*/ - enumDesc(file_room, 2); + static equals(a: SendStreamHeaderCallback | PlainMessage | undefined, b: SendStreamHeaderCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamHeaderCallback, a, b); + } +} /** - * @generated from enum livekit.proto.ConnectionState + * @generated from message livekit.proto.SendStreamChunkCallback */ -export enum ConnectionState { +export class SendStreamChunkCallback extends Message { /** - * @generated from enum value: CONN_DISCONNECTED = 0; + * @generated from field: required uint64 async_id = 1; */ - CONN_DISCONNECTED = 0, + asyncId?: bigint; /** - * @generated from enum value: CONN_CONNECTED = 1; + * @generated from field: optional string error = 2; */ - CONN_CONNECTED = 1, + error?: string; - /** - * @generated from enum value: CONN_RECONNECTING = 2; - */ - CONN_RECONNECTING = 2, -} + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the enum livekit.proto.ConnectionState. - */ -export const ConnectionStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_room, 3); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SendStreamChunkCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); -/** - * @generated from enum livekit.proto.DataPacketKind - */ -export enum DataPacketKind { - /** - * @generated from enum value: KIND_LOSSY = 0; - */ - KIND_LOSSY = 0, + static fromBinary(bytes: Uint8Array, options?: Partial): SendStreamChunkCallback { + return new SendStreamChunkCallback().fromBinary(bytes, options); + } - /** - * @generated from enum value: KIND_RELIABLE = 1; - */ - KIND_RELIABLE = 1, -} + static fromJson(jsonValue: JsonValue, options?: Partial): SendStreamChunkCallback { + return new SendStreamChunkCallback().fromJson(jsonValue, options); + } -/** - * Describes the enum livekit.proto.DataPacketKind. - */ -export const DataPacketKindSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_room, 4); + static fromJsonString(jsonString: string, options?: Partial): SendStreamChunkCallback { + return new SendStreamChunkCallback().fromJsonString(jsonString, options); + } + + static equals(a: SendStreamChunkCallback | PlainMessage | undefined, b: SendStreamChunkCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(SendStreamChunkCallback, a, b); + } +} diff --git a/packages/livekit-rtc/src/proto/rpc_pb.ts b/packages/livekit-rtc/src/proto/rpc_pb.ts index 14bf7e4f..146a6b86 100644 --- a/packages/livekit-rtc/src/proto/rpc_pb.ts +++ b/packages/livekit-rtc/src/proto/rpc_pb.ts @@ -12,299 +12,528 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file rpc.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file rpc.proto. - */ -export const file_rpc: GenFile = /*@__PURE__*/ - fileDesc("CglycGMucHJvdG8SDWxpdmVraXQucHJvdG8iNwoIUnBjRXJyb3ISDAoEY29kZRgBIAIoDRIPCgdtZXNzYWdlGAIgAigJEgwKBGRhdGEYAyABKAkikQEKEVBlcmZvcm1ScGNSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIcChRkZXN0aW5hdGlvbl9pZGVudGl0eRgCIAIoCRIOCgZtZXRob2QYAyACKAkSDwoHcGF5bG9hZBgEIAIoCRIbChNyZXNwb25zZV90aW1lb3V0X21zGAUgASgNIkwKGFJlZ2lzdGVyUnBjTWV0aG9kUmVxdWVzdBIgChhsb2NhbF9wYXJ0aWNpcGFudF9oYW5kbGUYASACKAQSDgoGbWV0aG9kGAIgAigJIk4KGlVucmVnaXN0ZXJScGNNZXRob2RSZXF1ZXN0EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIOCgZtZXRob2QYAiACKAkilgEKIlJwY01ldGhvZEludm9jYXRpb25SZXNwb25zZVJlcXVlc3QSIAoYbG9jYWxfcGFydGljaXBhbnRfaGFuZGxlGAEgAigEEhUKDWludm9jYXRpb25faWQYAiACKAQSDwoHcGF5bG9hZBgDIAEoCRImCgVlcnJvchgEIAEoCzIXLmxpdmVraXQucHJvdG8uUnBjRXJyb3IiJgoSUGVyZm9ybVJwY1Jlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIhsKGVJlZ2lzdGVyUnBjTWV0aG9kUmVzcG9uc2UiHQobVW5yZWdpc3RlclJwY01ldGhvZFJlc3BvbnNlIjQKI1JwY01ldGhvZEludm9jYXRpb25SZXNwb25zZVJlc3BvbnNlEg0KBWVycm9yGAEgASgJIl8KElBlcmZvcm1ScGNDYWxsYmFjaxIQCghhc3luY19pZBgBIAIoBBIPCgdwYXlsb2FkGAIgASgJEiYKBWVycm9yGAMgASgLMhcubGl2ZWtpdC5wcm90by5ScGNFcnJvciK+AQoYUnBjTWV0aG9kSW52b2NhdGlvbkV2ZW50EiAKGGxvY2FsX3BhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIVCg1pbnZvY2F0aW9uX2lkGAIgAigEEg4KBm1ldGhvZBgDIAIoCRISCgpyZXF1ZXN0X2lkGAQgAigJEhcKD2NhbGxlcl9pZGVudGl0eRgFIAIoCRIPCgdwYXlsb2FkGAYgAigJEhsKE3Jlc3BvbnNlX3RpbWVvdXRfbXMYByACKA1CEKoCDUxpdmVLaXQuUHJvdG8"); +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; /** * @generated from message livekit.proto.RpcError */ -export type RpcError = Message<"livekit.proto.RpcError"> & { +export class RpcError extends Message { /** * @generated from field: required uint32 code = 1; */ - code: number; + code?: number; /** * @generated from field: required string message = 2; */ - message: string; + message?: string; /** * @generated from field: optional string data = 3; */ - data: string; -}; - -/** - * Describes the message livekit.proto.RpcError. - * Use `create(RpcErrorSchema)` to create a new message. - */ -export const RpcErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 0); + data?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RpcError"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "code", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "message", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "data", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RpcError { + return new RpcError().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RpcError { + return new RpcError().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RpcError { + return new RpcError().fromJsonString(jsonString, options); + } + + static equals(a: RpcError | PlainMessage | undefined, b: RpcError | PlainMessage | undefined): boolean { + return proto2.util.equals(RpcError, a, b); + } +} /** * FFI Requests * * @generated from message livekit.proto.PerformRpcRequest */ -export type PerformRpcRequest = Message<"livekit.proto.PerformRpcRequest"> & { +export class PerformRpcRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string destination_identity = 2; */ - destinationIdentity: string; + destinationIdentity?: string; /** * @generated from field: required string method = 3; */ - method: string; + method?: string; /** * @generated from field: required string payload = 4; */ - payload: string; + payload?: string; /** * @generated from field: optional uint32 response_timeout_ms = 5; */ - responseTimeoutMs: number; -}; - -/** - * Describes the message livekit.proto.PerformRpcRequest. - * Use `create(PerformRpcRequestSchema)` to create a new message. - */ -export const PerformRpcRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 1); + responseTimeoutMs?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PerformRpcRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "destination_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "method", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "payload", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 5, name: "response_timeout_ms", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PerformRpcRequest { + return new PerformRpcRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PerformRpcRequest { + return new PerformRpcRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PerformRpcRequest { + return new PerformRpcRequest().fromJsonString(jsonString, options); + } + + static equals(a: PerformRpcRequest | PlainMessage | undefined, b: PerformRpcRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(PerformRpcRequest, a, b); + } +} /** * @generated from message livekit.proto.RegisterRpcMethodRequest */ -export type RegisterRpcMethodRequest = Message<"livekit.proto.RegisterRpcMethodRequest"> & { +export class RegisterRpcMethodRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string method = 2; */ - method: string; -}; + method?: string; -/** - * Describes the message livekit.proto.RegisterRpcMethodRequest. - * Use `create(RegisterRpcMethodRequestSchema)` to create a new message. - */ -export const RegisterRpcMethodRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 2); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RegisterRpcMethodRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "method", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RegisterRpcMethodRequest { + return new RegisterRpcMethodRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RegisterRpcMethodRequest { + return new RegisterRpcMethodRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RegisterRpcMethodRequest { + return new RegisterRpcMethodRequest().fromJsonString(jsonString, options); + } + + static equals(a: RegisterRpcMethodRequest | PlainMessage | undefined, b: RegisterRpcMethodRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(RegisterRpcMethodRequest, a, b); + } +} /** * @generated from message livekit.proto.UnregisterRpcMethodRequest */ -export type UnregisterRpcMethodRequest = Message<"livekit.proto.UnregisterRpcMethodRequest"> & { +export class UnregisterRpcMethodRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required string method = 2; */ - method: string; -}; + method?: string; -/** - * Describes the message livekit.proto.UnregisterRpcMethodRequest. - * Use `create(UnregisterRpcMethodRequestSchema)` to create a new message. - */ -export const UnregisterRpcMethodRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 3); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UnregisterRpcMethodRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "method", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnregisterRpcMethodRequest { + return new UnregisterRpcMethodRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnregisterRpcMethodRequest { + return new UnregisterRpcMethodRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnregisterRpcMethodRequest { + return new UnregisterRpcMethodRequest().fromJsonString(jsonString, options); + } + + static equals(a: UnregisterRpcMethodRequest | PlainMessage | undefined, b: UnregisterRpcMethodRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(UnregisterRpcMethodRequest, a, b); + } +} /** * @generated from message livekit.proto.RpcMethodInvocationResponseRequest */ -export type RpcMethodInvocationResponseRequest = Message<"livekit.proto.RpcMethodInvocationResponseRequest"> & { +export class RpcMethodInvocationResponseRequest extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required uint64 invocation_id = 2; */ - invocationId: bigint; + invocationId?: bigint; /** * @generated from field: optional string payload = 3; */ - payload: string; + payload?: string; /** * @generated from field: optional livekit.proto.RpcError error = 4; */ error?: RpcError; -}; -/** - * Describes the message livekit.proto.RpcMethodInvocationResponseRequest. - * Use `create(RpcMethodInvocationResponseRequestSchema)` to create a new message. - */ -export const RpcMethodInvocationResponseRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 4); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RpcMethodInvocationResponseRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "invocation_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 3, name: "payload", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 4, name: "error", kind: "message", T: RpcError, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RpcMethodInvocationResponseRequest { + return new RpcMethodInvocationResponseRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RpcMethodInvocationResponseRequest { + return new RpcMethodInvocationResponseRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RpcMethodInvocationResponseRequest { + return new RpcMethodInvocationResponseRequest().fromJsonString(jsonString, options); + } + + static equals(a: RpcMethodInvocationResponseRequest | PlainMessage | undefined, b: RpcMethodInvocationResponseRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(RpcMethodInvocationResponseRequest, a, b); + } +} /** * FFI Responses * * @generated from message livekit.proto.PerformRpcResponse */ -export type PerformRpcResponse = Message<"livekit.proto.PerformRpcResponse"> & { +export class PerformRpcResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.PerformRpcResponse. - * Use `create(PerformRpcResponseSchema)` to create a new message. - */ -export const PerformRpcResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 5); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * @generated from message livekit.proto.RegisterRpcMethodResponse - */ -export type RegisterRpcMethodResponse = Message<"livekit.proto.RegisterRpcMethodResponse"> & { -}; + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PerformRpcResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); -/** - * Describes the message livekit.proto.RegisterRpcMethodResponse. - * Use `create(RegisterRpcMethodResponseSchema)` to create a new message. - */ -export const RegisterRpcMethodResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 6); + static fromBinary(bytes: Uint8Array, options?: Partial): PerformRpcResponse { + return new PerformRpcResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PerformRpcResponse { + return new PerformRpcResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PerformRpcResponse { + return new PerformRpcResponse().fromJsonString(jsonString, options); + } + + static equals(a: PerformRpcResponse | PlainMessage | undefined, b: PerformRpcResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(PerformRpcResponse, a, b); + } +} /** - * @generated from message livekit.proto.UnregisterRpcMethodResponse + * @generated from message livekit.proto.RegisterRpcMethodResponse */ -export type UnregisterRpcMethodResponse = Message<"livekit.proto.UnregisterRpcMethodResponse"> & { -}; +export class RegisterRpcMethodResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RegisterRpcMethodResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RegisterRpcMethodResponse { + return new RegisterRpcMethodResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RegisterRpcMethodResponse { + return new RegisterRpcMethodResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RegisterRpcMethodResponse { + return new RegisterRpcMethodResponse().fromJsonString(jsonString, options); + } + + static equals(a: RegisterRpcMethodResponse | PlainMessage | undefined, b: RegisterRpcMethodResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(RegisterRpcMethodResponse, a, b); + } +} /** - * Describes the message livekit.proto.UnregisterRpcMethodResponse. - * Use `create(UnregisterRpcMethodResponseSchema)` to create a new message. + * @generated from message livekit.proto.UnregisterRpcMethodResponse */ -export const UnregisterRpcMethodResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 7); +export class UnregisterRpcMethodResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UnregisterRpcMethodResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UnregisterRpcMethodResponse { + return new UnregisterRpcMethodResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UnregisterRpcMethodResponse { + return new UnregisterRpcMethodResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UnregisterRpcMethodResponse { + return new UnregisterRpcMethodResponse().fromJsonString(jsonString, options); + } + + static equals(a: UnregisterRpcMethodResponse | PlainMessage | undefined, b: UnregisterRpcMethodResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(UnregisterRpcMethodResponse, a, b); + } +} /** * @generated from message livekit.proto.RpcMethodInvocationResponseResponse */ -export type RpcMethodInvocationResponseResponse = Message<"livekit.proto.RpcMethodInvocationResponseResponse"> & { +export class RpcMethodInvocationResponseResponse extends Message { /** * @generated from field: optional string error = 1; */ - error: string; -}; + error?: string; -/** - * Describes the message livekit.proto.RpcMethodInvocationResponseResponse. - * Use `create(RpcMethodInvocationResponseResponseSchema)` to create a new message. - */ -export const RpcMethodInvocationResponseResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 8); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RpcMethodInvocationResponseResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RpcMethodInvocationResponseResponse { + return new RpcMethodInvocationResponseResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RpcMethodInvocationResponseResponse { + return new RpcMethodInvocationResponseResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RpcMethodInvocationResponseResponse { + return new RpcMethodInvocationResponseResponse().fromJsonString(jsonString, options); + } + + static equals(a: RpcMethodInvocationResponseResponse | PlainMessage | undefined, b: RpcMethodInvocationResponseResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(RpcMethodInvocationResponseResponse, a, b); + } +} /** * FFI Callbacks * * @generated from message livekit.proto.PerformRpcCallback */ -export type PerformRpcCallback = Message<"livekit.proto.PerformRpcCallback"> & { +export class PerformRpcCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string payload = 2; */ - payload: string; + payload?: string; /** * @generated from field: optional livekit.proto.RpcError error = 3; */ error?: RpcError; -}; -/** - * Describes the message livekit.proto.PerformRpcCallback. - * Use `create(PerformRpcCallbackSchema)` to create a new message. - */ -export const PerformRpcCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 9); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PerformRpcCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "payload", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "error", kind: "message", T: RpcError, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PerformRpcCallback { + return new PerformRpcCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PerformRpcCallback { + return new PerformRpcCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PerformRpcCallback { + return new PerformRpcCallback().fromJsonString(jsonString, options); + } + + static equals(a: PerformRpcCallback | PlainMessage | undefined, b: PerformRpcCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(PerformRpcCallback, a, b); + } +} /** * FFI Events * * @generated from message livekit.proto.RpcMethodInvocationEvent */ -export type RpcMethodInvocationEvent = Message<"livekit.proto.RpcMethodInvocationEvent"> & { +export class RpcMethodInvocationEvent extends Message { /** * @generated from field: required uint64 local_participant_handle = 1; */ - localParticipantHandle: bigint; + localParticipantHandle?: bigint; /** * @generated from field: required uint64 invocation_id = 2; */ - invocationId: bigint; + invocationId?: bigint; /** * @generated from field: required string method = 3; */ - method: string; + method?: string; /** * @generated from field: required string request_id = 4; */ - requestId: string; + requestId?: string; /** * @generated from field: required string caller_identity = 5; */ - callerIdentity: string; + callerIdentity?: string; /** * @generated from field: required string payload = 6; */ - payload: string; + payload?: string; /** * @generated from field: required uint32 response_timeout_ms = 7; */ - responseTimeoutMs: number; -}; - -/** - * Describes the message livekit.proto.RpcMethodInvocationEvent. - * Use `create(RpcMethodInvocationEventSchema)` to create a new message. - */ -export const RpcMethodInvocationEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_rpc, 10); + responseTimeoutMs?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RpcMethodInvocationEvent"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "invocation_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 3, name: "method", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "request_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 5, name: "caller_identity", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 6, name: "payload", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 7, name: "response_timeout_ms", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RpcMethodInvocationEvent { + return new RpcMethodInvocationEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RpcMethodInvocationEvent { + return new RpcMethodInvocationEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RpcMethodInvocationEvent { + return new RpcMethodInvocationEvent().fromJsonString(jsonString, options); + } + + static equals(a: RpcMethodInvocationEvent | PlainMessage | undefined, b: RpcMethodInvocationEvent | PlainMessage | undefined): boolean { + return proto2.util.equals(RpcMethodInvocationEvent, a, b); + } +} diff --git a/packages/livekit-rtc/src/proto/stats_pb.ts b/packages/livekit-rtc/src/proto/stats_pb.ts index 539e6684..16c35a6e 100644 --- a/packages/livekit-rtc/src/proto/stats_pb.ts +++ b/packages/livekit-rtc/src/proto/stats_pb.ts @@ -12,24 +12,344 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file stats.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { Message } from "@bufbuild/protobuf"; +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; /** - * Describes the file stats.proto. + * @generated from enum livekit.proto.DataChannelState + */ +export enum DataChannelState { + /** + * @generated from enum value: DC_CONNECTING = 0; + */ + DC_CONNECTING = 0, + + /** + * @generated from enum value: DC_OPEN = 1; + */ + DC_OPEN = 1, + + /** + * @generated from enum value: DC_CLOSING = 2; + */ + DC_CLOSING = 2, + + /** + * @generated from enum value: DC_CLOSED = 3; + */ + DC_CLOSED = 3, +} +// Retrieve enum metadata with: proto2.getEnumType(DataChannelState) +proto2.util.setEnumType(DataChannelState, "livekit.proto.DataChannelState", [ + { no: 0, name: "DC_CONNECTING" }, + { no: 1, name: "DC_OPEN" }, + { no: 2, name: "DC_CLOSING" }, + { no: 3, name: "DC_CLOSED" }, +]); + +/** + * @generated from enum livekit.proto.QualityLimitationReason + */ +export enum QualityLimitationReason { + /** + * @generated from enum value: LIMITATION_NONE = 0; + */ + LIMITATION_NONE = 0, + + /** + * @generated from enum value: LIMITATION_CPU = 1; + */ + LIMITATION_CPU = 1, + + /** + * @generated from enum value: LIMITATION_BANDWIDTH = 2; + */ + LIMITATION_BANDWIDTH = 2, + + /** + * @generated from enum value: LIMITATION_OTHER = 3; + */ + LIMITATION_OTHER = 3, +} +// Retrieve enum metadata with: proto2.getEnumType(QualityLimitationReason) +proto2.util.setEnumType(QualityLimitationReason, "livekit.proto.QualityLimitationReason", [ + { no: 0, name: "LIMITATION_NONE" }, + { no: 1, name: "LIMITATION_CPU" }, + { no: 2, name: "LIMITATION_BANDWIDTH" }, + { no: 3, name: "LIMITATION_OTHER" }, +]); + +/** + * @generated from enum livekit.proto.IceRole + */ +export enum IceRole { + /** + * @generated from enum value: ICE_UNKNOWN = 0; + */ + ICE_UNKNOWN = 0, + + /** + * @generated from enum value: ICE_CONTROLLING = 1; + */ + ICE_CONTROLLING = 1, + + /** + * @generated from enum value: ICE_CONTROLLED = 2; + */ + ICE_CONTROLLED = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(IceRole) +proto2.util.setEnumType(IceRole, "livekit.proto.IceRole", [ + { no: 0, name: "ICE_UNKNOWN" }, + { no: 1, name: "ICE_CONTROLLING" }, + { no: 2, name: "ICE_CONTROLLED" }, +]); + +/** + * @generated from enum livekit.proto.DtlsTransportState + */ +export enum DtlsTransportState { + /** + * @generated from enum value: DTLS_TRANSPORT_NEW = 0; + */ + DTLS_TRANSPORT_NEW = 0, + + /** + * @generated from enum value: DTLS_TRANSPORT_CONNECTING = 1; + */ + DTLS_TRANSPORT_CONNECTING = 1, + + /** + * @generated from enum value: DTLS_TRANSPORT_CONNECTED = 2; + */ + DTLS_TRANSPORT_CONNECTED = 2, + + /** + * @generated from enum value: DTLS_TRANSPORT_CLOSED = 3; + */ + DTLS_TRANSPORT_CLOSED = 3, + + /** + * @generated from enum value: DTLS_TRANSPORT_FAILED = 4; + */ + DTLS_TRANSPORT_FAILED = 4, +} +// Retrieve enum metadata with: proto2.getEnumType(DtlsTransportState) +proto2.util.setEnumType(DtlsTransportState, "livekit.proto.DtlsTransportState", [ + { no: 0, name: "DTLS_TRANSPORT_NEW" }, + { no: 1, name: "DTLS_TRANSPORT_CONNECTING" }, + { no: 2, name: "DTLS_TRANSPORT_CONNECTED" }, + { no: 3, name: "DTLS_TRANSPORT_CLOSED" }, + { no: 4, name: "DTLS_TRANSPORT_FAILED" }, +]); + +/** + * @generated from enum livekit.proto.IceTransportState + */ +export enum IceTransportState { + /** + * @generated from enum value: ICE_TRANSPORT_NEW = 0; + */ + ICE_TRANSPORT_NEW = 0, + + /** + * @generated from enum value: ICE_TRANSPORT_CHECKING = 1; + */ + ICE_TRANSPORT_CHECKING = 1, + + /** + * @generated from enum value: ICE_TRANSPORT_CONNECTED = 2; + */ + ICE_TRANSPORT_CONNECTED = 2, + + /** + * @generated from enum value: ICE_TRANSPORT_COMPLETED = 3; + */ + ICE_TRANSPORT_COMPLETED = 3, + + /** + * @generated from enum value: ICE_TRANSPORT_DISCONNECTED = 4; + */ + ICE_TRANSPORT_DISCONNECTED = 4, + + /** + * @generated from enum value: ICE_TRANSPORT_FAILED = 5; + */ + ICE_TRANSPORT_FAILED = 5, + + /** + * @generated from enum value: ICE_TRANSPORT_CLOSED = 6; + */ + ICE_TRANSPORT_CLOSED = 6, +} +// Retrieve enum metadata with: proto2.getEnumType(IceTransportState) +proto2.util.setEnumType(IceTransportState, "livekit.proto.IceTransportState", [ + { no: 0, name: "ICE_TRANSPORT_NEW" }, + { no: 1, name: "ICE_TRANSPORT_CHECKING" }, + { no: 2, name: "ICE_TRANSPORT_CONNECTED" }, + { no: 3, name: "ICE_TRANSPORT_COMPLETED" }, + { no: 4, name: "ICE_TRANSPORT_DISCONNECTED" }, + { no: 5, name: "ICE_TRANSPORT_FAILED" }, + { no: 6, name: "ICE_TRANSPORT_CLOSED" }, +]); + +/** + * @generated from enum livekit.proto.DtlsRole */ -export const file_stats: GenFile = /*@__PURE__*/ - fileDesc("CgtzdGF0cy5wcm90bxINbGl2ZWtpdC5wcm90byLrGAoIUnRjU3RhdHMSLgoFY29kZWMYAyABKAsyHS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLkNvZGVjSAASOQoLaW5ib3VuZF9ydHAYBCABKAsyIi5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLkluYm91bmRSdHBIABI7CgxvdXRib3VuZF9ydHAYBSABKAsyIy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLk91dGJvdW5kUnRwSAASRgoScmVtb3RlX2luYm91bmRfcnRwGAYgASgLMigubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5SZW1vdGVJbmJvdW5kUnRwSAASSAoTcmVtb3RlX291dGJvdW5kX3J0cBgHIAEoCzIpLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuUmVtb3RlT3V0Ym91bmRSdHBIABI7CgxtZWRpYV9zb3VyY2UYCCABKAsyIy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLk1lZGlhU291cmNlSAASPQoNbWVkaWFfcGxheW91dBgJIAEoCzIkLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuTWVkaWFQbGF5b3V0SAASQQoPcGVlcl9jb25uZWN0aW9uGAogASgLMiYubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5QZWVyQ29ubmVjdGlvbkgAEjsKDGRhdGFfY2hhbm5lbBgLIAEoCzIjLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuRGF0YUNoYW5uZWxIABI2Cgl0cmFuc3BvcnQYDCABKAsyIS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlRyYW5zcG9ydEgAEj8KDmNhbmRpZGF0ZV9wYWlyGA0gASgLMiUubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5DYW5kaWRhdGVQYWlySAASQQoPbG9jYWxfY2FuZGlkYXRlGA4gASgLMiYubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5Mb2NhbENhbmRpZGF0ZUgAEkMKEHJlbW90ZV9jYW5kaWRhdGUYDyABKAsyJy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlJlbW90ZUNhbmRpZGF0ZUgAEjoKC2NlcnRpZmljYXRlGBAgASgLMiMubGl2ZWtpdC5wcm90by5SdGNTdGF0cy5DZXJ0aWZpY2F0ZUgAEjAKBnN0cmVhbRgRIAEoCzIeLmxpdmVraXQucHJvdG8uUnRjU3RhdHMuU3RyZWFtSAASLgoFdHJhY2sYEiABKAsyHS5saXZla2l0LnByb3RvLlJ0Y1N0YXRzLlRyYWNrSAAaWwoFQ29kZWMSKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESKAoFY29kZWMYAiACKAsyGS5saXZla2l0LnByb3RvLkNvZGVjU3RhdHMa1QEKCkluYm91bmRSdHASKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESLQoGc3RyZWFtGAIgAigLMh0ubGl2ZWtpdC5wcm90by5SdHBTdHJlYW1TdGF0cxI3CghyZWNlaXZlZBgDIAIoCzIlLmxpdmVraXQucHJvdG8uUmVjZWl2ZWRSdHBTdHJlYW1TdGF0cxI1CgdpbmJvdW5kGAQgAigLMiQubGl2ZWtpdC5wcm90by5JbmJvdW5kUnRwU3RyZWFtU3RhdHMa0AEKC091dGJvdW5kUnRwEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi0KBnN0cmVhbRgCIAIoCzIdLmxpdmVraXQucHJvdG8uUnRwU3RyZWFtU3RhdHMSLwoEc2VudBgDIAIoCzIhLmxpdmVraXQucHJvdG8uU2VudFJ0cFN0cmVhbVN0YXRzEjcKCG91dGJvdW5kGAQgAigLMiUubGl2ZWtpdC5wcm90by5PdXRib3VuZFJ0cFN0cmVhbVN0YXRzGugBChBSZW1vdGVJbmJvdW5kUnRwEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi0KBnN0cmVhbRgCIAIoCzIdLmxpdmVraXQucHJvdG8uUnRwU3RyZWFtU3RhdHMSNwoIcmVjZWl2ZWQYAyACKAsyJS5saXZla2l0LnByb3RvLlJlY2VpdmVkUnRwU3RyZWFtU3RhdHMSQgoOcmVtb3RlX2luYm91bmQYBCACKAsyKi5saXZla2l0LnByb3RvLlJlbW90ZUluYm91bmRSdHBTdHJlYW1TdGF0cxrjAQoRUmVtb3RlT3V0Ym91bmRSdHASKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESLQoGc3RyZWFtGAIgAigLMh0ubGl2ZWtpdC5wcm90by5SdHBTdHJlYW1TdGF0cxIvCgRzZW50GAMgAigLMiEubGl2ZWtpdC5wcm90by5TZW50UnRwU3RyZWFtU3RhdHMSRAoPcmVtb3RlX291dGJvdW5kGAQgAigLMisubGl2ZWtpdC5wcm90by5SZW1vdGVPdXRib3VuZFJ0cFN0cmVhbVN0YXRzGsgBCgtNZWRpYVNvdXJjZRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIvCgZzb3VyY2UYAiACKAsyHy5saXZla2l0LnByb3RvLk1lZGlhU291cmNlU3RhdHMSLgoFYXVkaW8YAyACKAsyHy5saXZla2l0LnByb3RvLkF1ZGlvU291cmNlU3RhdHMSLgoFdmlkZW8YBCACKAsyHy5saXZla2l0LnByb3RvLlZpZGVvU291cmNlU3RhdHMacQoMTWVkaWFQbGF5b3V0EigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEjcKDWF1ZGlvX3BsYXlvdXQYAiACKAsyIC5saXZla2l0LnByb3RvLkF1ZGlvUGxheW91dFN0YXRzGmoKDlBlZXJDb25uZWN0aW9uEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEi4KAnBjGAIgAigLMiIubGl2ZWtpdC5wcm90by5QZWVyQ29ubmVjdGlvblN0YXRzGmQKC0RhdGFDaGFubmVsEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEisKAmRjGAIgAigLMh8ubGl2ZWtpdC5wcm90by5EYXRhQ2hhbm5lbFN0YXRzGmcKCVRyYW5zcG9ydBIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIwCgl0cmFuc3BvcnQYAiACKAsyHS5saXZla2l0LnByb3RvLlRyYW5zcG9ydFN0YXRzGnQKDUNhbmRpZGF0ZVBhaXISKAoDcnRjGAEgAigLMhsubGl2ZWtpdC5wcm90by5SdGNTdGF0c0RhdGESOQoOY2FuZGlkYXRlX3BhaXIYAiACKAsyIS5saXZla2l0LnByb3RvLkNhbmRpZGF0ZVBhaXJTdGF0cxpvCg5Mb2NhbENhbmRpZGF0ZRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIzCgljYW5kaWRhdGUYAiACKAsyIC5saXZla2l0LnByb3RvLkljZUNhbmRpZGF0ZVN0YXRzGnAKD1JlbW90ZUNhbmRpZGF0ZRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIzCgljYW5kaWRhdGUYAiACKAsyIC5saXZla2l0LnByb3RvLkljZUNhbmRpZGF0ZVN0YXRzGm0KC0NlcnRpZmljYXRlEigKA3J0YxgBIAIoCzIbLmxpdmVraXQucHJvdG8uUnRjU3RhdHNEYXRhEjQKC2NlcnRpZmljYXRlGAIgAigLMh8ubGl2ZWtpdC5wcm90by5DZXJ0aWZpY2F0ZVN0YXRzGl4KBlN0cmVhbRIoCgNydGMYASACKAsyGy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzRGF0YRIqCgZzdHJlYW0YAiACKAsyGi5saXZla2l0LnByb3RvLlN0cmVhbVN0YXRzGgcKBVRyYWNrQgcKBXN0YXRzIi0KDFJ0Y1N0YXRzRGF0YRIKCgJpZBgBIAIoCRIRCgl0aW1lc3RhbXAYAiACKAMiiAEKCkNvZGVjU3RhdHMSFAoMcGF5bG9hZF90eXBlGAEgAigNEhQKDHRyYW5zcG9ydF9pZBgCIAIoCRIRCgltaW1lX3R5cGUYAyACKAkSEgoKY2xvY2tfcmF0ZRgEIAIoDRIQCghjaGFubmVscxgFIAIoDRIVCg1zZHBfZm10cF9saW5lGAYgAigJIlQKDlJ0cFN0cmVhbVN0YXRzEgwKBHNzcmMYASACKA0SDAoEa2luZBgCIAIoCRIUCgx0cmFuc3BvcnRfaWQYAyACKAkSEAoIY29kZWNfaWQYBCACKAkiWAoWUmVjZWl2ZWRSdHBTdHJlYW1TdGF0cxIYChBwYWNrZXRzX3JlY2VpdmVkGAEgAigEEhQKDHBhY2tldHNfbG9zdBgCIAIoAxIOCgZqaXR0ZXIYAyACKAEiggwKFUluYm91bmRSdHBTdHJlYW1TdGF0cxIYChB0cmFja19pZGVudGlmaWVyGAEgAigJEgsKA21pZBgCIAIoCRIRCglyZW1vdGVfaWQYAyACKAkSFgoOZnJhbWVzX2RlY29kZWQYBCACKA0SGgoSa2V5X2ZyYW1lc19kZWNvZGVkGAUgAigNEhcKD2ZyYW1lc19yZW5kZXJlZBgGIAIoDRIWCg5mcmFtZXNfZHJvcHBlZBgHIAIoDRITCgtmcmFtZV93aWR0aBgIIAIoDRIUCgxmcmFtZV9oZWlnaHQYCSACKA0SGQoRZnJhbWVzX3Blcl9zZWNvbmQYCiACKAESDgoGcXBfc3VtGAsgAigEEhkKEXRvdGFsX2RlY29kZV90aW1lGAwgAigBEh8KF3RvdGFsX2ludGVyX2ZyYW1lX2RlbGF5GA0gAigBEicKH3RvdGFsX3NxdWFyZWRfaW50ZXJfZnJhbWVfZGVsYXkYDiACKAESEwoLcGF1c2VfY291bnQYDyACKA0SHAoUdG90YWxfcGF1c2VfZHVyYXRpb24YECACKAESFAoMZnJlZXplX2NvdW50GBEgAigNEh0KFXRvdGFsX2ZyZWV6ZV9kdXJhdGlvbhgSIAIoARImCh5sYXN0X3BhY2tldF9yZWNlaXZlZF90aW1lc3RhbXAYEyACKAESHQoVaGVhZGVyX2J5dGVzX3JlY2VpdmVkGBQgAigEEhkKEXBhY2tldHNfZGlzY2FyZGVkGBUgAigEEhoKEmZlY19ieXRlc19yZWNlaXZlZBgWIAIoBBIcChRmZWNfcGFja2V0c19yZWNlaXZlZBgXIAIoBBIdChVmZWNfcGFja2V0c19kaXNjYXJkZWQYGCACKAQSFgoOYnl0ZXNfcmVjZWl2ZWQYGSACKAQSEgoKbmFja19jb3VudBgaIAIoDRIRCglmaXJfY291bnQYGyACKA0SEQoJcGxpX2NvdW50GBwgAigNEh4KFnRvdGFsX3Byb2Nlc3NpbmdfZGVsYXkYHSACKAESIwobZXN0aW1hdGVkX3BsYXlvdXRfdGltZXN0YW1wGB4gAigBEhsKE2ppdHRlcl9idWZmZXJfZGVsYXkYHyACKAESIgoaaml0dGVyX2J1ZmZlcl90YXJnZXRfZGVsYXkYICACKAESIwobaml0dGVyX2J1ZmZlcl9lbWl0dGVkX2NvdW50GCEgAigEEiMKG2ppdHRlcl9idWZmZXJfbWluaW11bV9kZWxheRgiIAIoARIeChZ0b3RhbF9zYW1wbGVzX3JlY2VpdmVkGCMgAigEEhkKEWNvbmNlYWxlZF9zYW1wbGVzGCQgAigEEiAKGHNpbGVudF9jb25jZWFsZWRfc2FtcGxlcxglIAIoBBIaChJjb25jZWFsbWVudF9ldmVudHMYJiACKAQSKQohaW5zZXJ0ZWRfc2FtcGxlc19mb3JfZGVjZWxlcmF0aW9uGCcgAigEEigKIHJlbW92ZWRfc2FtcGxlc19mb3JfYWNjZWxlcmF0aW9uGCggAigEEhMKC2F1ZGlvX2xldmVsGCkgAigBEhoKEnRvdGFsX2F1ZGlvX2VuZXJneRgqIAIoARIeChZ0b3RhbF9zYW1wbGVzX2R1cmF0aW9uGCsgAigBEhcKD2ZyYW1lc19yZWNlaXZlZBgsIAIoBBIeChZkZWNvZGVyX2ltcGxlbWVudGF0aW9uGC0gAigJEhIKCnBsYXlvdXRfaWQYLiACKAkSHwoXcG93ZXJfZWZmaWNpZW50X2RlY29kZXIYLyACKAgSLgomZnJhbWVzX2Fzc2VtYmxlZF9mcm9tX211bHRpcGxlX3BhY2tldHMYMCACKAQSGwoTdG90YWxfYXNzZW1ibHlfdGltZRgxIAIoARImCh5yZXRyYW5zbWl0dGVkX3BhY2tldHNfcmVjZWl2ZWQYMiACKAQSJAoccmV0cmFuc21pdHRlZF9ieXRlc19yZWNlaXZlZBgzIAIoBBIQCghydHhfc3NyYxg0IAIoDRIQCghmZWNfc3NyYxg1IAIoDSI+ChJTZW50UnRwU3RyZWFtU3RhdHMSFAoMcGFja2V0c19zZW50GAEgAigEEhIKCmJ5dGVzX3NlbnQYAiACKAQi0QcKFk91dGJvdW5kUnRwU3RyZWFtU3RhdHMSCwoDbWlkGAEgAigJEhcKD21lZGlhX3NvdXJjZV9pZBgCIAIoCRIRCglyZW1vdGVfaWQYAyACKAkSCwoDcmlkGAQgAigJEhkKEWhlYWRlcl9ieXRlc19zZW50GAUgAigEEiIKGnJldHJhbnNtaXR0ZWRfcGFja2V0c19zZW50GAYgAigEEiAKGHJldHJhbnNtaXR0ZWRfYnl0ZXNfc2VudBgHIAIoBBIQCghydHhfc3NyYxgIIAIoDRIWCg50YXJnZXRfYml0cmF0ZRgJIAIoARIiChp0b3RhbF9lbmNvZGVkX2J5dGVzX3RhcmdldBgKIAIoBBITCgtmcmFtZV93aWR0aBgLIAIoDRIUCgxmcmFtZV9oZWlnaHQYDCACKA0SGQoRZnJhbWVzX3Blcl9zZWNvbmQYDSACKAESEwoLZnJhbWVzX3NlbnQYDiACKA0SGAoQaHVnZV9mcmFtZXNfc2VudBgPIAIoDRIWCg5mcmFtZXNfZW5jb2RlZBgQIAIoDRIaChJrZXlfZnJhbWVzX2VuY29kZWQYESACKA0SDgoGcXBfc3VtGBIgAigEEhkKEXRvdGFsX2VuY29kZV90aW1lGBMgAigBEh8KF3RvdGFsX3BhY2tldF9zZW5kX2RlbGF5GBQgAigBEkkKGXF1YWxpdHlfbGltaXRhdGlvbl9yZWFzb24YFSACKA4yJi5saXZla2l0LnByb3RvLlF1YWxpdHlMaW1pdGF0aW9uUmVhc29uEmsKHHF1YWxpdHlfbGltaXRhdGlvbl9kdXJhdGlvbnMYFiADKAsyRS5saXZla2l0LnByb3RvLk91dGJvdW5kUnRwU3RyZWFtU3RhdHMuUXVhbGl0eUxpbWl0YXRpb25EdXJhdGlvbnNFbnRyeRItCiVxdWFsaXR5X2xpbWl0YXRpb25fcmVzb2x1dGlvbl9jaGFuZ2VzGBcgAigNEhIKCm5hY2tfY291bnQYGCACKA0SEQoJZmlyX2NvdW50GBkgAigNEhEKCXBsaV9jb3VudBgaIAIoDRIeChZlbmNvZGVyX2ltcGxlbWVudGF0aW9uGBsgAigJEh8KF3Bvd2VyX2VmZmljaWVudF9lbmNvZGVyGBwgAigIEg4KBmFjdGl2ZRgdIAIoCBIYChBzY2FsYWJpbGl0eV9tb2RlGB4gAigJGkEKH1F1YWxpdHlMaW1pdGF0aW9uRHVyYXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgBOgI4ASKkAQobUmVtb3RlSW5ib3VuZFJ0cFN0cmVhbVN0YXRzEhAKCGxvY2FsX2lkGAEgAigJEhcKD3JvdW5kX3RyaXBfdGltZRgCIAIoARIdChV0b3RhbF9yb3VuZF90cmlwX3RpbWUYAyACKAESFQoNZnJhY3Rpb25fbG9zdBgEIAIoARIkChxyb3VuZF90cmlwX3RpbWVfbWVhc3VyZW1lbnRzGAUgAigEIr4BChxSZW1vdGVPdXRib3VuZFJ0cFN0cmVhbVN0YXRzEhAKCGxvY2FsX2lkGAEgAigJEhgKEHJlbW90ZV90aW1lc3RhbXAYAiACKAESFAoMcmVwb3J0c19zZW50GAMgAigEEhcKD3JvdW5kX3RyaXBfdGltZRgEIAIoARIdChV0b3RhbF9yb3VuZF90cmlwX3RpbWUYBSACKAESJAoccm91bmRfdHJpcF90aW1lX21lYXN1cmVtZW50cxgGIAIoBCI6ChBNZWRpYVNvdXJjZVN0YXRzEhgKEHRyYWNrX2lkZW50aWZpZXIYASACKAkSDAoEa2luZBgCIAIoCSKiAgoQQXVkaW9Tb3VyY2VTdGF0cxITCgthdWRpb19sZXZlbBgBIAIoARIaChJ0b3RhbF9hdWRpb19lbmVyZ3kYAiACKAESHgoWdG90YWxfc2FtcGxlc19kdXJhdGlvbhgDIAIoARIYChBlY2hvX3JldHVybl9sb3NzGAQgAigBEiQKHGVjaG9fcmV0dXJuX2xvc3NfZW5oYW5jZW1lbnQYBSACKAESIAoYZHJvcHBlZF9zYW1wbGVzX2R1cmF0aW9uGAYgAigBEh4KFmRyb3BwZWRfc2FtcGxlc19ldmVudHMYByACKA0SGwoTdG90YWxfY2FwdHVyZV9kZWxheRgIIAIoARIeChZ0b3RhbF9zYW1wbGVzX2NhcHR1cmVkGAkgAigEIlwKEFZpZGVvU291cmNlU3RhdHMSDQoFd2lkdGgYASACKA0SDgoGaGVpZ2h0GAIgAigNEg4KBmZyYW1lcxgDIAIoDRIZChFmcmFtZXNfcGVyX3NlY29uZBgEIAIoASLFAQoRQXVkaW9QbGF5b3V0U3RhdHMSDAoEa2luZBgBIAIoCRIkChxzeW50aGVzaXplZF9zYW1wbGVzX2R1cmF0aW9uGAIgAigBEiIKGnN5bnRoZXNpemVkX3NhbXBsZXNfZXZlbnRzGAMgAigNEh4KFnRvdGFsX3NhbXBsZXNfZHVyYXRpb24YBCACKAESGwoTdG90YWxfcGxheW91dF9kZWxheRgFIAIoARIbChN0b3RhbF9zYW1wbGVzX2NvdW50GAYgAigEIlEKE1BlZXJDb25uZWN0aW9uU3RhdHMSHAoUZGF0YV9jaGFubmVsc19vcGVuZWQYASACKA0SHAoUZGF0YV9jaGFubmVsc19jbG9zZWQYAiACKA0i4gEKEERhdGFDaGFubmVsU3RhdHMSDQoFbGFiZWwYASACKAkSEAoIcHJvdG9jb2wYAiACKAkSHwoXZGF0YV9jaGFubmVsX2lkZW50aWZpZXIYAyACKAUSLgoFc3RhdGUYBCABKA4yHy5saXZla2l0LnByb3RvLkRhdGFDaGFubmVsU3RhdGUSFQoNbWVzc2FnZXNfc2VudBgFIAIoDRISCgpieXRlc19zZW50GAYgAigEEhkKEW1lc3NhZ2VzX3JlY2VpdmVkGAcgAigNEhYKDmJ5dGVzX3JlY2VpdmVkGAggAigEIpwECg5UcmFuc3BvcnRTdGF0cxIUCgxwYWNrZXRzX3NlbnQYASACKAQSGAoQcGFja2V0c19yZWNlaXZlZBgCIAIoBBISCgpieXRlc19zZW50GAMgAigEEhYKDmJ5dGVzX3JlY2VpdmVkGAQgAigEEigKCGljZV9yb2xlGAUgAigOMhYubGl2ZWtpdC5wcm90by5JY2VSb2xlEiMKG2ljZV9sb2NhbF91c2VybmFtZV9mcmFnbWVudBgGIAIoCRI1CgpkdGxzX3N0YXRlGAcgASgOMiEubGl2ZWtpdC5wcm90by5EdGxzVHJhbnNwb3J0U3RhdGUSMwoJaWNlX3N0YXRlGAggASgOMiAubGl2ZWtpdC5wcm90by5JY2VUcmFuc3BvcnRTdGF0ZRIiChpzZWxlY3RlZF9jYW5kaWRhdGVfcGFpcl9pZBgJIAIoCRIcChRsb2NhbF9jZXJ0aWZpY2F0ZV9pZBgKIAIoCRIdChVyZW1vdGVfY2VydGlmaWNhdGVfaWQYCyACKAkSEwoLdGxzX3ZlcnNpb24YDCACKAkSEwoLZHRsc19jaXBoZXIYDSACKAkSKgoJZHRsc19yb2xlGA4gAigOMhcubGl2ZWtpdC5wcm90by5EdGxzUm9sZRITCgtzcnRwX2NpcGhlchgPIAIoCRInCh9zZWxlY3RlZF9jYW5kaWRhdGVfcGFpcl9jaGFuZ2VzGBAgAigNIqQFChJDYW5kaWRhdGVQYWlyU3RhdHMSFAoMdHJhbnNwb3J0X2lkGAEgAigJEhoKEmxvY2FsX2NhbmRpZGF0ZV9pZBgCIAIoCRIbChNyZW1vdGVfY2FuZGlkYXRlX2lkGAMgAigJEjMKBXN0YXRlGAQgASgOMiQubGl2ZWtpdC5wcm90by5JY2VDYW5kaWRhdGVQYWlyU3RhdGUSEQoJbm9taW5hdGVkGAUgAigIEhQKDHBhY2tldHNfc2VudBgGIAIoBBIYChBwYWNrZXRzX3JlY2VpdmVkGAcgAigEEhIKCmJ5dGVzX3NlbnQYCCACKAQSFgoOYnl0ZXNfcmVjZWl2ZWQYCSACKAQSIgoabGFzdF9wYWNrZXRfc2VudF90aW1lc3RhbXAYCiACKAESJgoebGFzdF9wYWNrZXRfcmVjZWl2ZWRfdGltZXN0YW1wGAsgAigBEh0KFXRvdGFsX3JvdW5kX3RyaXBfdGltZRgMIAIoARIfChdjdXJyZW50X3JvdW5kX3RyaXBfdGltZRgNIAIoARIiChphdmFpbGFibGVfb3V0Z29pbmdfYml0cmF0ZRgOIAIoARIiChphdmFpbGFibGVfaW5jb21pbmdfYml0cmF0ZRgPIAIoARIZChFyZXF1ZXN0c19yZWNlaXZlZBgQIAIoBBIVCg1yZXF1ZXN0c19zZW50GBEgAigEEhoKEnJlc3BvbnNlc19yZWNlaXZlZBgSIAIoBBIWCg5yZXNwb25zZXNfc2VudBgTIAIoBBIdChVjb25zZW50X3JlcXVlc3RzX3NlbnQYFCACKAQSIQoZcGFja2V0c19kaXNjYXJkZWRfb25fc2VuZBgVIAIoDRIfChdieXRlc19kaXNjYXJkZWRfb25fc2VuZBgWIAIoBCKJAwoRSWNlQ2FuZGlkYXRlU3RhdHMSFAoMdHJhbnNwb3J0X2lkGAEgAigJEg8KB2FkZHJlc3MYAiACKAkSDAoEcG9ydBgDIAIoBRIQCghwcm90b2NvbBgEIAIoCRI3Cg5jYW5kaWRhdGVfdHlwZRgFIAEoDjIfLmxpdmVraXQucHJvdG8uSWNlQ2FuZGlkYXRlVHlwZRIQCghwcmlvcml0eRgGIAIoBRILCgN1cmwYByACKAkSQQoOcmVsYXlfcHJvdG9jb2wYCCABKA4yKS5saXZla2l0LnByb3RvLkljZVNlcnZlclRyYW5zcG9ydFByb3RvY29sEhIKCmZvdW5kYXRpb24YCSACKAkSFwoPcmVsYXRlZF9hZGRyZXNzGAogAigJEhQKDHJlbGF0ZWRfcG9ydBgLIAIoBRIZChF1c2VybmFtZV9mcmFnbWVudBgMIAIoCRI0Cgh0Y3BfdHlwZRgNIAEoDjIiLmxpdmVraXQucHJvdG8uSWNlVGNwQ2FuZGlkYXRlVHlwZSKBAQoQQ2VydGlmaWNhdGVTdGF0cxITCgtmaW5nZXJwcmludBgBIAIoCRIdChVmaW5nZXJwcmludF9hbGdvcml0aG0YAiACKAkSGgoSYmFzZTY0X2NlcnRpZmljYXRlGAMgAigJEh0KFWlzc3Vlcl9jZXJ0aWZpY2F0ZV9pZBgEIAIoCSI0CgtTdHJlYW1TdGF0cxIKCgJpZBgBIAIoCRIZChFzdHJlYW1faWRlbnRpZmllchgCIAIoCSpRChBEYXRhQ2hhbm5lbFN0YXRlEhEKDURDX0NPTk5FQ1RJTkcQABILCgdEQ19PUEVOEAESDgoKRENfQ0xPU0lORxACEg0KCURDX0NMT1NFRBADKnIKF1F1YWxpdHlMaW1pdGF0aW9uUmVhc29uEhMKD0xJTUlUQVRJT05fTk9ORRAAEhIKDkxJTUlUQVRJT05fQ1BVEAESGAoUTElNSVRBVElPTl9CQU5EV0lEVEgQAhIUChBMSU1JVEFUSU9OX09USEVSEAMqQwoHSWNlUm9sZRIPCgtJQ0VfVU5LTk9XThAAEhMKD0lDRV9DT05UUk9MTElORxABEhIKDklDRV9DT05UUk9MTEVEEAIqnwEKEkR0bHNUcmFuc3BvcnRTdGF0ZRIWChJEVExTX1RSQU5TUE9SVF9ORVcQABIdChlEVExTX1RSQU5TUE9SVF9DT05ORUNUSU5HEAESHAoYRFRMU19UUkFOU1BPUlRfQ09OTkVDVEVEEAISGQoVRFRMU19UUkFOU1BPUlRfQ0xPU0VEEAMSGQoVRFRMU19UUkFOU1BPUlRfRkFJTEVEEAQq1AEKEUljZVRyYW5zcG9ydFN0YXRlEhUKEUlDRV9UUkFOU1BPUlRfTkVXEAASGgoWSUNFX1RSQU5TUE9SVF9DSEVDS0lORxABEhsKF0lDRV9UUkFOU1BPUlRfQ09OTkVDVEVEEAISGwoXSUNFX1RSQU5TUE9SVF9DT01QTEVURUQQAxIeChpJQ0VfVFJBTlNQT1JUX0RJU0NPTk5FQ1RFRBAEEhgKFElDRV9UUkFOU1BPUlRfRkFJTEVEEAUSGAoUSUNFX1RSQU5TUE9SVF9DTE9TRUQQBio+CghEdGxzUm9sZRIPCgtEVExTX0NMSUVOVBAAEg8KC0RUTFNfU0VSVkVSEAESEAoMRFRMU19VTktOT1dOEAIqdQoVSWNlQ2FuZGlkYXRlUGFpclN0YXRlEg8KC1BBSVJfRlJPWkVOEAASEAoMUEFJUl9XQUlUSU5HEAESFAoQUEFJUl9JTl9QUk9HUkVTUxACEg8KC1BBSVJfRkFJTEVEEAMSEgoOUEFJUl9TVUNDRUVERUQQBCo9ChBJY2VDYW5kaWRhdGVUeXBlEggKBEhPU1QQABIJCgVTUkZMWBABEgkKBVBSRkxYEAISCQoFUkVMQVkQAypVChpJY2VTZXJ2ZXJUcmFuc3BvcnRQcm90b2NvbBIRCg1UUkFOU1BPUlRfVURQEAASEQoNVFJBTlNQT1JUX1RDUBABEhEKDVRSQU5TUE9SVF9UTFMQAipUChNJY2VUY3BDYW5kaWRhdGVUeXBlEhQKEENBTkRJREFURV9BQ1RJVkUQABIVChFDQU5ESURBVEVfUEFTU0lWRRABEhAKDENBTkRJREFURV9TTxACQhCqAg1MaXZlS2l0LlByb3Rv"); +export enum DtlsRole { + /** + * @generated from enum value: DTLS_CLIENT = 0; + */ + DTLS_CLIENT = 0, + + /** + * @generated from enum value: DTLS_SERVER = 1; + */ + DTLS_SERVER = 1, + + /** + * @generated from enum value: DTLS_UNKNOWN = 2; + */ + DTLS_UNKNOWN = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(DtlsRole) +proto2.util.setEnumType(DtlsRole, "livekit.proto.DtlsRole", [ + { no: 0, name: "DTLS_CLIENT" }, + { no: 1, name: "DTLS_SERVER" }, + { no: 2, name: "DTLS_UNKNOWN" }, +]); + +/** + * @generated from enum livekit.proto.IceCandidatePairState + */ +export enum IceCandidatePairState { + /** + * @generated from enum value: PAIR_FROZEN = 0; + */ + PAIR_FROZEN = 0, + + /** + * @generated from enum value: PAIR_WAITING = 1; + */ + PAIR_WAITING = 1, + + /** + * @generated from enum value: PAIR_IN_PROGRESS = 2; + */ + PAIR_IN_PROGRESS = 2, + + /** + * @generated from enum value: PAIR_FAILED = 3; + */ + PAIR_FAILED = 3, + + /** + * @generated from enum value: PAIR_SUCCEEDED = 4; + */ + PAIR_SUCCEEDED = 4, +} +// Retrieve enum metadata with: proto2.getEnumType(IceCandidatePairState) +proto2.util.setEnumType(IceCandidatePairState, "livekit.proto.IceCandidatePairState", [ + { no: 0, name: "PAIR_FROZEN" }, + { no: 1, name: "PAIR_WAITING" }, + { no: 2, name: "PAIR_IN_PROGRESS" }, + { no: 3, name: "PAIR_FAILED" }, + { no: 4, name: "PAIR_SUCCEEDED" }, +]); + +/** + * @generated from enum livekit.proto.IceCandidateType + */ +export enum IceCandidateType { + /** + * @generated from enum value: HOST = 0; + */ + HOST = 0, + + /** + * @generated from enum value: SRFLX = 1; + */ + SRFLX = 1, + + /** + * @generated from enum value: PRFLX = 2; + */ + PRFLX = 2, + + /** + * @generated from enum value: RELAY = 3; + */ + RELAY = 3, +} +// Retrieve enum metadata with: proto2.getEnumType(IceCandidateType) +proto2.util.setEnumType(IceCandidateType, "livekit.proto.IceCandidateType", [ + { no: 0, name: "HOST" }, + { no: 1, name: "SRFLX" }, + { no: 2, name: "PRFLX" }, + { no: 3, name: "RELAY" }, +]); + +/** + * @generated from enum livekit.proto.IceServerTransportProtocol + */ +export enum IceServerTransportProtocol { + /** + * @generated from enum value: TRANSPORT_UDP = 0; + */ + TRANSPORT_UDP = 0, + + /** + * @generated from enum value: TRANSPORT_TCP = 1; + */ + TRANSPORT_TCP = 1, + + /** + * @generated from enum value: TRANSPORT_TLS = 2; + */ + TRANSPORT_TLS = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(IceServerTransportProtocol) +proto2.util.setEnumType(IceServerTransportProtocol, "livekit.proto.IceServerTransportProtocol", [ + { no: 0, name: "TRANSPORT_UDP" }, + { no: 1, name: "TRANSPORT_TCP" }, + { no: 2, name: "TRANSPORT_TLS" }, +]); + +/** + * @generated from enum livekit.proto.IceTcpCandidateType + */ +export enum IceTcpCandidateType { + /** + * @generated from enum value: CANDIDATE_ACTIVE = 0; + */ + CANDIDATE_ACTIVE = 0, + + /** + * @generated from enum value: CANDIDATE_PASSIVE = 1; + */ + CANDIDATE_PASSIVE = 1, + + /** + * @generated from enum value: CANDIDATE_SO = 2; + */ + CANDIDATE_SO = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(IceTcpCandidateType) +proto2.util.setEnumType(IceTcpCandidateType, "livekit.proto.IceTcpCandidateType", [ + { no: 0, name: "CANDIDATE_ACTIVE" }, + { no: 1, name: "CANDIDATE_PASSIVE" }, + { no: 2, name: "CANDIDATE_SO" }, +]); /** * @generated from message livekit.proto.RtcStats */ -export type RtcStats = Message<"livekit.proto.RtcStats"> & { +export class RtcStats extends Message { /** * @generated from oneof livekit.proto.RtcStats.stats */ @@ -129,20 +449,55 @@ export type RtcStats = Message<"livekit.proto.RtcStats"> & { */ value: RtcStats_Track; case: "track"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.RtcStats. - * Use `create(RtcStatsSchema)` to create a new message. - */ -export const RtcStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 3, name: "codec", kind: "message", T: RtcStats_Codec, oneof: "stats" }, + { no: 4, name: "inbound_rtp", kind: "message", T: RtcStats_InboundRtp, oneof: "stats" }, + { no: 5, name: "outbound_rtp", kind: "message", T: RtcStats_OutboundRtp, oneof: "stats" }, + { no: 6, name: "remote_inbound_rtp", kind: "message", T: RtcStats_RemoteInboundRtp, oneof: "stats" }, + { no: 7, name: "remote_outbound_rtp", kind: "message", T: RtcStats_RemoteOutboundRtp, oneof: "stats" }, + { no: 8, name: "media_source", kind: "message", T: RtcStats_MediaSource, oneof: "stats" }, + { no: 9, name: "media_playout", kind: "message", T: RtcStats_MediaPlayout, oneof: "stats" }, + { no: 10, name: "peer_connection", kind: "message", T: RtcStats_PeerConnection, oneof: "stats" }, + { no: 11, name: "data_channel", kind: "message", T: RtcStats_DataChannel, oneof: "stats" }, + { no: 12, name: "transport", kind: "message", T: RtcStats_Transport, oneof: "stats" }, + { no: 13, name: "candidate_pair", kind: "message", T: RtcStats_CandidatePair, oneof: "stats" }, + { no: 14, name: "local_candidate", kind: "message", T: RtcStats_LocalCandidate, oneof: "stats" }, + { no: 15, name: "remote_candidate", kind: "message", T: RtcStats_RemoteCandidate, oneof: "stats" }, + { no: 16, name: "certificate", kind: "message", T: RtcStats_Certificate, oneof: "stats" }, + { no: 17, name: "stream", kind: "message", T: RtcStats_Stream, oneof: "stats" }, + { no: 18, name: "track", kind: "message", T: RtcStats_Track, oneof: "stats" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats { + return new RtcStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats { + return new RtcStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats { + return new RtcStats().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats | PlainMessage | undefined, b: RtcStats | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.Codec */ -export type RtcStats_Codec = Message<"livekit.proto.RtcStats.Codec"> & { +export class RtcStats_Codec extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -152,19 +507,40 @@ export type RtcStats_Codec = Message<"livekit.proto.RtcStats.Codec"> & { * @generated from field: required livekit.proto.CodecStats codec = 2; */ codec?: CodecStats; -}; -/** - * Describes the message livekit.proto.RtcStats.Codec. - * Use `create(RtcStats_CodecSchema)` to create a new message. - */ -export const RtcStats_CodecSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.Codec"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "codec", kind: "message", T: CodecStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_Codec { + return new RtcStats_Codec().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_Codec { + return new RtcStats_Codec().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_Codec { + return new RtcStats_Codec().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_Codec | PlainMessage | undefined, b: RtcStats_Codec | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_Codec, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.InboundRtp */ -export type RtcStats_InboundRtp = Message<"livekit.proto.RtcStats.InboundRtp"> & { +export class RtcStats_InboundRtp extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -184,19 +560,42 @@ export type RtcStats_InboundRtp = Message<"livekit.proto.RtcStats.InboundRtp"> & * @generated from field: required livekit.proto.InboundRtpStreamStats inbound = 4; */ inbound?: InboundRtpStreamStats; -}; -/** - * Describes the message livekit.proto.RtcStats.InboundRtp. - * Use `create(RtcStats_InboundRtpSchema)` to create a new message. - */ -export const RtcStats_InboundRtpSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.InboundRtp"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "stream", kind: "message", T: RtpStreamStats, req: true }, + { no: 3, name: "received", kind: "message", T: ReceivedRtpStreamStats, req: true }, + { no: 4, name: "inbound", kind: "message", T: InboundRtpStreamStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_InboundRtp { + return new RtcStats_InboundRtp().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_InboundRtp { + return new RtcStats_InboundRtp().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_InboundRtp { + return new RtcStats_InboundRtp().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_InboundRtp | PlainMessage | undefined, b: RtcStats_InboundRtp | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_InboundRtp, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.OutboundRtp */ -export type RtcStats_OutboundRtp = Message<"livekit.proto.RtcStats.OutboundRtp"> & { +export class RtcStats_OutboundRtp extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -216,19 +615,42 @@ export type RtcStats_OutboundRtp = Message<"livekit.proto.RtcStats.OutboundRtp"> * @generated from field: required livekit.proto.OutboundRtpStreamStats outbound = 4; */ outbound?: OutboundRtpStreamStats; -}; -/** - * Describes the message livekit.proto.RtcStats.OutboundRtp. - * Use `create(RtcStats_OutboundRtpSchema)` to create a new message. - */ -export const RtcStats_OutboundRtpSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 2); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.OutboundRtp"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "stream", kind: "message", T: RtpStreamStats, req: true }, + { no: 3, name: "sent", kind: "message", T: SentRtpStreamStats, req: true }, + { no: 4, name: "outbound", kind: "message", T: OutboundRtpStreamStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_OutboundRtp { + return new RtcStats_OutboundRtp().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_OutboundRtp { + return new RtcStats_OutboundRtp().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_OutboundRtp { + return new RtcStats_OutboundRtp().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_OutboundRtp | PlainMessage | undefined, b: RtcStats_OutboundRtp | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_OutboundRtp, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.RemoteInboundRtp */ -export type RtcStats_RemoteInboundRtp = Message<"livekit.proto.RtcStats.RemoteInboundRtp"> & { +export class RtcStats_RemoteInboundRtp extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -248,19 +670,42 @@ export type RtcStats_RemoteInboundRtp = Message<"livekit.proto.RtcStats.RemoteIn * @generated from field: required livekit.proto.RemoteInboundRtpStreamStats remote_inbound = 4; */ remoteInbound?: RemoteInboundRtpStreamStats; -}; -/** - * Describes the message livekit.proto.RtcStats.RemoteInboundRtp. - * Use `create(RtcStats_RemoteInboundRtpSchema)` to create a new message. - */ -export const RtcStats_RemoteInboundRtpSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 3); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.RemoteInboundRtp"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "stream", kind: "message", T: RtpStreamStats, req: true }, + { no: 3, name: "received", kind: "message", T: ReceivedRtpStreamStats, req: true }, + { no: 4, name: "remote_inbound", kind: "message", T: RemoteInboundRtpStreamStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_RemoteInboundRtp { + return new RtcStats_RemoteInboundRtp().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_RemoteInboundRtp { + return new RtcStats_RemoteInboundRtp().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_RemoteInboundRtp { + return new RtcStats_RemoteInboundRtp().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_RemoteInboundRtp | PlainMessage | undefined, b: RtcStats_RemoteInboundRtp | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_RemoteInboundRtp, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.RemoteOutboundRtp */ -export type RtcStats_RemoteOutboundRtp = Message<"livekit.proto.RtcStats.RemoteOutboundRtp"> & { +export class RtcStats_RemoteOutboundRtp extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -280,19 +725,42 @@ export type RtcStats_RemoteOutboundRtp = Message<"livekit.proto.RtcStats.RemoteO * @generated from field: required livekit.proto.RemoteOutboundRtpStreamStats remote_outbound = 4; */ remoteOutbound?: RemoteOutboundRtpStreamStats; -}; -/** - * Describes the message livekit.proto.RtcStats.RemoteOutboundRtp. - * Use `create(RtcStats_RemoteOutboundRtpSchema)` to create a new message. - */ -export const RtcStats_RemoteOutboundRtpSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 4); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.RemoteOutboundRtp"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "stream", kind: "message", T: RtpStreamStats, req: true }, + { no: 3, name: "sent", kind: "message", T: SentRtpStreamStats, req: true }, + { no: 4, name: "remote_outbound", kind: "message", T: RemoteOutboundRtpStreamStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_RemoteOutboundRtp { + return new RtcStats_RemoteOutboundRtp().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_RemoteOutboundRtp { + return new RtcStats_RemoteOutboundRtp().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_RemoteOutboundRtp { + return new RtcStats_RemoteOutboundRtp().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_RemoteOutboundRtp | PlainMessage | undefined, b: RtcStats_RemoteOutboundRtp | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_RemoteOutboundRtp, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.MediaSource */ -export type RtcStats_MediaSource = Message<"livekit.proto.RtcStats.MediaSource"> & { +export class RtcStats_MediaSource extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -312,19 +780,42 @@ export type RtcStats_MediaSource = Message<"livekit.proto.RtcStats.MediaSource"> * @generated from field: required livekit.proto.VideoSourceStats video = 4; */ video?: VideoSourceStats; -}; -/** - * Describes the message livekit.proto.RtcStats.MediaSource. - * Use `create(RtcStats_MediaSourceSchema)` to create a new message. - */ -export const RtcStats_MediaSourceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 5); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.MediaSource"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "source", kind: "message", T: MediaSourceStats, req: true }, + { no: 3, name: "audio", kind: "message", T: AudioSourceStats, req: true }, + { no: 4, name: "video", kind: "message", T: VideoSourceStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_MediaSource { + return new RtcStats_MediaSource().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_MediaSource { + return new RtcStats_MediaSource().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_MediaSource { + return new RtcStats_MediaSource().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_MediaSource | PlainMessage | undefined, b: RtcStats_MediaSource | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_MediaSource, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.MediaPlayout */ -export type RtcStats_MediaPlayout = Message<"livekit.proto.RtcStats.MediaPlayout"> & { +export class RtcStats_MediaPlayout extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -334,19 +825,40 @@ export type RtcStats_MediaPlayout = Message<"livekit.proto.RtcStats.MediaPlayout * @generated from field: required livekit.proto.AudioPlayoutStats audio_playout = 2; */ audioPlayout?: AudioPlayoutStats; -}; -/** - * Describes the message livekit.proto.RtcStats.MediaPlayout. - * Use `create(RtcStats_MediaPlayoutSchema)` to create a new message. - */ -export const RtcStats_MediaPlayoutSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 6); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.MediaPlayout"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "audio_playout", kind: "message", T: AudioPlayoutStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_MediaPlayout { + return new RtcStats_MediaPlayout().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_MediaPlayout { + return new RtcStats_MediaPlayout().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_MediaPlayout { + return new RtcStats_MediaPlayout().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_MediaPlayout | PlainMessage | undefined, b: RtcStats_MediaPlayout | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_MediaPlayout, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.PeerConnection */ -export type RtcStats_PeerConnection = Message<"livekit.proto.RtcStats.PeerConnection"> & { +export class RtcStats_PeerConnection extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -356,19 +868,40 @@ export type RtcStats_PeerConnection = Message<"livekit.proto.RtcStats.PeerConnec * @generated from field: required livekit.proto.PeerConnectionStats pc = 2; */ pc?: PeerConnectionStats; -}; -/** - * Describes the message livekit.proto.RtcStats.PeerConnection. - * Use `create(RtcStats_PeerConnectionSchema)` to create a new message. - */ -export const RtcStats_PeerConnectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 7); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.PeerConnection"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "pc", kind: "message", T: PeerConnectionStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_PeerConnection { + return new RtcStats_PeerConnection().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_PeerConnection { + return new RtcStats_PeerConnection().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_PeerConnection { + return new RtcStats_PeerConnection().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_PeerConnection | PlainMessage | undefined, b: RtcStats_PeerConnection | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_PeerConnection, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.DataChannel */ -export type RtcStats_DataChannel = Message<"livekit.proto.RtcStats.DataChannel"> & { +export class RtcStats_DataChannel extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -378,19 +911,40 @@ export type RtcStats_DataChannel = Message<"livekit.proto.RtcStats.DataChannel"> * @generated from field: required livekit.proto.DataChannelStats dc = 2; */ dc?: DataChannelStats; -}; -/** - * Describes the message livekit.proto.RtcStats.DataChannel. - * Use `create(RtcStats_DataChannelSchema)` to create a new message. - */ -export const RtcStats_DataChannelSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 8); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.DataChannel"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "dc", kind: "message", T: DataChannelStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_DataChannel { + return new RtcStats_DataChannel().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_DataChannel { + return new RtcStats_DataChannel().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_DataChannel { + return new RtcStats_DataChannel().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_DataChannel | PlainMessage | undefined, b: RtcStats_DataChannel | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_DataChannel, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.Transport */ -export type RtcStats_Transport = Message<"livekit.proto.RtcStats.Transport"> & { +export class RtcStats_Transport extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -400,19 +954,40 @@ export type RtcStats_Transport = Message<"livekit.proto.RtcStats.Transport"> & { * @generated from field: required livekit.proto.TransportStats transport = 2; */ transport?: TransportStats; -}; -/** - * Describes the message livekit.proto.RtcStats.Transport. - * Use `create(RtcStats_TransportSchema)` to create a new message. - */ -export const RtcStats_TransportSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 9); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.Transport"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "transport", kind: "message", T: TransportStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_Transport { + return new RtcStats_Transport().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_Transport { + return new RtcStats_Transport().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_Transport { + return new RtcStats_Transport().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_Transport | PlainMessage | undefined, b: RtcStats_Transport | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_Transport, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.CandidatePair */ -export type RtcStats_CandidatePair = Message<"livekit.proto.RtcStats.CandidatePair"> & { +export class RtcStats_CandidatePair extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -422,19 +997,40 @@ export type RtcStats_CandidatePair = Message<"livekit.proto.RtcStats.CandidatePa * @generated from field: required livekit.proto.CandidatePairStats candidate_pair = 2; */ candidatePair?: CandidatePairStats; -}; -/** - * Describes the message livekit.proto.RtcStats.CandidatePair. - * Use `create(RtcStats_CandidatePairSchema)` to create a new message. - */ -export const RtcStats_CandidatePairSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 10); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.CandidatePair"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "candidate_pair", kind: "message", T: CandidatePairStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_CandidatePair { + return new RtcStats_CandidatePair().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_CandidatePair { + return new RtcStats_CandidatePair().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_CandidatePair { + return new RtcStats_CandidatePair().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_CandidatePair | PlainMessage | undefined, b: RtcStats_CandidatePair | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_CandidatePair, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.LocalCandidate */ -export type RtcStats_LocalCandidate = Message<"livekit.proto.RtcStats.LocalCandidate"> & { +export class RtcStats_LocalCandidate extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -444,19 +1040,40 @@ export type RtcStats_LocalCandidate = Message<"livekit.proto.RtcStats.LocalCandi * @generated from field: required livekit.proto.IceCandidateStats candidate = 2; */ candidate?: IceCandidateStats; -}; -/** - * Describes the message livekit.proto.RtcStats.LocalCandidate. - * Use `create(RtcStats_LocalCandidateSchema)` to create a new message. - */ -export const RtcStats_LocalCandidateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 11); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.LocalCandidate"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "candidate", kind: "message", T: IceCandidateStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_LocalCandidate { + return new RtcStats_LocalCandidate().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_LocalCandidate { + return new RtcStats_LocalCandidate().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_LocalCandidate { + return new RtcStats_LocalCandidate().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_LocalCandidate | PlainMessage | undefined, b: RtcStats_LocalCandidate | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_LocalCandidate, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.RemoteCandidate */ -export type RtcStats_RemoteCandidate = Message<"livekit.proto.RtcStats.RemoteCandidate"> & { +export class RtcStats_RemoteCandidate extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -466,19 +1083,40 @@ export type RtcStats_RemoteCandidate = Message<"livekit.proto.RtcStats.RemoteCan * @generated from field: required livekit.proto.IceCandidateStats candidate = 2; */ candidate?: IceCandidateStats; -}; -/** - * Describes the message livekit.proto.RtcStats.RemoteCandidate. - * Use `create(RtcStats_RemoteCandidateSchema)` to create a new message. - */ -export const RtcStats_RemoteCandidateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 12); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.RemoteCandidate"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "candidate", kind: "message", T: IceCandidateStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_RemoteCandidate { + return new RtcStats_RemoteCandidate().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_RemoteCandidate { + return new RtcStats_RemoteCandidate().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_RemoteCandidate { + return new RtcStats_RemoteCandidate().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_RemoteCandidate | PlainMessage | undefined, b: RtcStats_RemoteCandidate | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_RemoteCandidate, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.Certificate */ -export type RtcStats_Certificate = Message<"livekit.proto.RtcStats.Certificate"> & { +export class RtcStats_Certificate extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -488,19 +1126,40 @@ export type RtcStats_Certificate = Message<"livekit.proto.RtcStats.Certificate"> * @generated from field: required livekit.proto.CertificateStats certificate = 2; */ certificate?: CertificateStats; -}; -/** - * Describes the message livekit.proto.RtcStats.Certificate. - * Use `create(RtcStats_CertificateSchema)` to create a new message. - */ -export const RtcStats_CertificateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 13); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.Certificate"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "certificate", kind: "message", T: CertificateStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_Certificate { + return new RtcStats_Certificate().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_Certificate { + return new RtcStats_Certificate().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_Certificate { + return new RtcStats_Certificate().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_Certificate | PlainMessage | undefined, b: RtcStats_Certificate | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_Certificate, a, b); + } +} /** * @generated from message livekit.proto.RtcStats.Stream */ -export type RtcStats_Stream = Message<"livekit.proto.RtcStats.Stream"> & { +export class RtcStats_Stream extends Message { /** * @generated from field: required livekit.proto.RtcStatsData rtc = 1; */ @@ -510,1579 +1169,1882 @@ export type RtcStats_Stream = Message<"livekit.proto.RtcStats.Stream"> & { * @generated from field: required livekit.proto.StreamStats stream = 2; */ stream?: StreamStats; -}; -/** - * Describes the message livekit.proto.RtcStats.Stream. - * Use `create(RtcStats_StreamSchema)` to create a new message. - */ -export const RtcStats_StreamSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 14); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.Stream"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "rtc", kind: "message", T: RtcStatsData, req: true }, + { no: 2, name: "stream", kind: "message", T: StreamStats, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_Stream { + return new RtcStats_Stream().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_Stream { + return new RtcStats_Stream().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_Stream { + return new RtcStats_Stream().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_Stream | PlainMessage | undefined, b: RtcStats_Stream | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_Stream, a, b); + } +} /** * Deprecated * * @generated from message livekit.proto.RtcStats.Track */ -export type RtcStats_Track = Message<"livekit.proto.RtcStats.Track"> & { -}; +export class RtcStats_Track extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.RtcStats.Track. - * Use `create(RtcStats_TrackSchema)` to create a new message. - */ -export const RtcStats_TrackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 0, 15); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStats.Track"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStats_Track { + return new RtcStats_Track().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStats_Track { + return new RtcStats_Track().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStats_Track { + return new RtcStats_Track().fromJsonString(jsonString, options); + } + + static equals(a: RtcStats_Track | PlainMessage | undefined, b: RtcStats_Track | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStats_Track, a, b); + } +} /** * @generated from message livekit.proto.RtcStatsData */ -export type RtcStatsData = Message<"livekit.proto.RtcStatsData"> & { +export class RtcStatsData extends Message { /** * @generated from field: required string id = 1; */ - id: string; + id?: string; /** * @generated from field: required int64 timestamp = 2; */ - timestamp: bigint; -}; + timestamp?: bigint; -/** - * Describes the message livekit.proto.RtcStatsData. - * Use `create(RtcStatsDataSchema)` to create a new message. - */ -export const RtcStatsDataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtcStatsData"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "timestamp", kind: "scalar", T: 3 /* ScalarType.INT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtcStatsData { + return new RtcStatsData().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtcStatsData { + return new RtcStatsData().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtcStatsData { + return new RtcStatsData().fromJsonString(jsonString, options); + } + + static equals(a: RtcStatsData | PlainMessage | undefined, b: RtcStatsData | PlainMessage | undefined): boolean { + return proto2.util.equals(RtcStatsData, a, b); + } +} /** * @generated from message livekit.proto.CodecStats */ -export type CodecStats = Message<"livekit.proto.CodecStats"> & { +export class CodecStats extends Message { /** * @generated from field: required uint32 payload_type = 1; */ - payloadType: number; + payloadType?: number; /** * @generated from field: required string transport_id = 2; */ - transportId: string; + transportId?: string; /** * @generated from field: required string mime_type = 3; */ - mimeType: string; + mimeType?: string; /** * @generated from field: required uint32 clock_rate = 4; */ - clockRate: number; + clockRate?: number; /** * @generated from field: required uint32 channels = 5; */ - channels: number; + channels?: number; /** * @generated from field: required string sdp_fmtp_line = 6; */ - sdpFmtpLine: string; -}; - -/** - * Describes the message livekit.proto.CodecStats. - * Use `create(CodecStatsSchema)` to create a new message. - */ -export const CodecStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 2); + sdpFmtpLine?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CodecStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "payload_type", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "transport_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "mime_type", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "clock_rate", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 5, name: "channels", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 6, name: "sdp_fmtp_line", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CodecStats { + return new CodecStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CodecStats { + return new CodecStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CodecStats { + return new CodecStats().fromJsonString(jsonString, options); + } + + static equals(a: CodecStats | PlainMessage | undefined, b: CodecStats | PlainMessage | undefined): boolean { + return proto2.util.equals(CodecStats, a, b); + } +} /** * @generated from message livekit.proto.RtpStreamStats */ -export type RtpStreamStats = Message<"livekit.proto.RtpStreamStats"> & { +export class RtpStreamStats extends Message { /** * @generated from field: required uint32 ssrc = 1; */ - ssrc: number; + ssrc?: number; /** * @generated from field: required string kind = 2; */ - kind: string; + kind?: string; /** * @generated from field: required string transport_id = 3; */ - transportId: string; + transportId?: string; /** * @generated from field: required string codec_id = 4; */ - codecId: string; -}; - -/** - * Describes the message livekit.proto.RtpStreamStats. - * Use `create(RtpStreamStatsSchema)` to create a new message. - */ -export const RtpStreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 3); + codecId?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RtpStreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "ssrc", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "kind", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "transport_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "codec_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RtpStreamStats { + return new RtpStreamStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RtpStreamStats { + return new RtpStreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RtpStreamStats { + return new RtpStreamStats().fromJsonString(jsonString, options); + } + + static equals(a: RtpStreamStats | PlainMessage | undefined, b: RtpStreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(RtpStreamStats, a, b); + } +} /** * @generated from message livekit.proto.ReceivedRtpStreamStats */ -export type ReceivedRtpStreamStats = Message<"livekit.proto.ReceivedRtpStreamStats"> & { +export class ReceivedRtpStreamStats extends Message { /** * @generated from field: required uint64 packets_received = 1; */ - packetsReceived: bigint; + packetsReceived?: bigint; /** * @generated from field: required int64 packets_lost = 2; */ - packetsLost: bigint; + packetsLost?: bigint; /** * @generated from field: required double jitter = 3; */ - jitter: number; -}; + jitter?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.ReceivedRtpStreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "packets_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "packets_lost", kind: "scalar", T: 3 /* ScalarType.INT64 */, req: true }, + { no: 3, name: "jitter", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ReceivedRtpStreamStats { + return new ReceivedRtpStreamStats().fromBinary(bytes, options); + } -/** - * Describes the message livekit.proto.ReceivedRtpStreamStats. - * Use `create(ReceivedRtpStreamStatsSchema)` to create a new message. - */ -export const ReceivedRtpStreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 4); + static fromJson(jsonValue: JsonValue, options?: Partial): ReceivedRtpStreamStats { + return new ReceivedRtpStreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ReceivedRtpStreamStats { + return new ReceivedRtpStreamStats().fromJsonString(jsonString, options); + } + + static equals(a: ReceivedRtpStreamStats | PlainMessage | undefined, b: ReceivedRtpStreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(ReceivedRtpStreamStats, a, b); + } +} /** * @generated from message livekit.proto.InboundRtpStreamStats */ -export type InboundRtpStreamStats = Message<"livekit.proto.InboundRtpStreamStats"> & { +export class InboundRtpStreamStats extends Message { /** * @generated from field: required string track_identifier = 1; */ - trackIdentifier: string; + trackIdentifier?: string; /** * @generated from field: required string mid = 2; */ - mid: string; + mid?: string; /** * @generated from field: required string remote_id = 3; */ - remoteId: string; + remoteId?: string; /** * @generated from field: required uint32 frames_decoded = 4; */ - framesDecoded: number; + framesDecoded?: number; /** * @generated from field: required uint32 key_frames_decoded = 5; */ - keyFramesDecoded: number; + keyFramesDecoded?: number; /** * @generated from field: required uint32 frames_rendered = 6; */ - framesRendered: number; + framesRendered?: number; /** * @generated from field: required uint32 frames_dropped = 7; */ - framesDropped: number; + framesDropped?: number; /** * @generated from field: required uint32 frame_width = 8; */ - frameWidth: number; + frameWidth?: number; /** * @generated from field: required uint32 frame_height = 9; */ - frameHeight: number; + frameHeight?: number; /** * @generated from field: required double frames_per_second = 10; */ - framesPerSecond: number; + framesPerSecond?: number; /** * @generated from field: required uint64 qp_sum = 11; */ - qpSum: bigint; + qpSum?: bigint; /** * @generated from field: required double total_decode_time = 12; */ - totalDecodeTime: number; + totalDecodeTime?: number; /** * @generated from field: required double total_inter_frame_delay = 13; */ - totalInterFrameDelay: number; + totalInterFrameDelay?: number; /** * @generated from field: required double total_squared_inter_frame_delay = 14; */ - totalSquaredInterFrameDelay: number; + totalSquaredInterFrameDelay?: number; /** * @generated from field: required uint32 pause_count = 15; */ - pauseCount: number; + pauseCount?: number; /** * @generated from field: required double total_pause_duration = 16; */ - totalPauseDuration: number; + totalPauseDuration?: number; /** * @generated from field: required uint32 freeze_count = 17; */ - freezeCount: number; + freezeCount?: number; /** * @generated from field: required double total_freeze_duration = 18; */ - totalFreezeDuration: number; + totalFreezeDuration?: number; /** * @generated from field: required double last_packet_received_timestamp = 19; */ - lastPacketReceivedTimestamp: number; + lastPacketReceivedTimestamp?: number; /** * @generated from field: required uint64 header_bytes_received = 20; */ - headerBytesReceived: bigint; + headerBytesReceived?: bigint; /** * @generated from field: required uint64 packets_discarded = 21; */ - packetsDiscarded: bigint; + packetsDiscarded?: bigint; /** * @generated from field: required uint64 fec_bytes_received = 22; */ - fecBytesReceived: bigint; + fecBytesReceived?: bigint; /** * @generated from field: required uint64 fec_packets_received = 23; */ - fecPacketsReceived: bigint; + fecPacketsReceived?: bigint; /** * @generated from field: required uint64 fec_packets_discarded = 24; */ - fecPacketsDiscarded: bigint; + fecPacketsDiscarded?: bigint; /** * @generated from field: required uint64 bytes_received = 25; */ - bytesReceived: bigint; + bytesReceived?: bigint; /** * @generated from field: required uint32 nack_count = 26; */ - nackCount: number; + nackCount?: number; /** * @generated from field: required uint32 fir_count = 27; */ - firCount: number; + firCount?: number; /** * @generated from field: required uint32 pli_count = 28; */ - pliCount: number; + pliCount?: number; /** * @generated from field: required double total_processing_delay = 29; */ - totalProcessingDelay: number; + totalProcessingDelay?: number; /** * @generated from field: required double estimated_playout_timestamp = 30; */ - estimatedPlayoutTimestamp: number; + estimatedPlayoutTimestamp?: number; /** * @generated from field: required double jitter_buffer_delay = 31; */ - jitterBufferDelay: number; + jitterBufferDelay?: number; /** * @generated from field: required double jitter_buffer_target_delay = 32; */ - jitterBufferTargetDelay: number; + jitterBufferTargetDelay?: number; /** * @generated from field: required uint64 jitter_buffer_emitted_count = 33; */ - jitterBufferEmittedCount: bigint; + jitterBufferEmittedCount?: bigint; /** * @generated from field: required double jitter_buffer_minimum_delay = 34; */ - jitterBufferMinimumDelay: number; + jitterBufferMinimumDelay?: number; /** * @generated from field: required uint64 total_samples_received = 35; */ - totalSamplesReceived: bigint; + totalSamplesReceived?: bigint; /** * @generated from field: required uint64 concealed_samples = 36; */ - concealedSamples: bigint; + concealedSamples?: bigint; /** * @generated from field: required uint64 silent_concealed_samples = 37; */ - silentConcealedSamples: bigint; + silentConcealedSamples?: bigint; /** * @generated from field: required uint64 concealment_events = 38; */ - concealmentEvents: bigint; + concealmentEvents?: bigint; /** * @generated from field: required uint64 inserted_samples_for_deceleration = 39; */ - insertedSamplesForDeceleration: bigint; + insertedSamplesForDeceleration?: bigint; /** * @generated from field: required uint64 removed_samples_for_acceleration = 40; */ - removedSamplesForAcceleration: bigint; + removedSamplesForAcceleration?: bigint; /** * @generated from field: required double audio_level = 41; */ - audioLevel: number; + audioLevel?: number; /** * @generated from field: required double total_audio_energy = 42; */ - totalAudioEnergy: number; + totalAudioEnergy?: number; /** * @generated from field: required double total_samples_duration = 43; */ - totalSamplesDuration: number; + totalSamplesDuration?: number; /** * @generated from field: required uint64 frames_received = 44; */ - framesReceived: bigint; + framesReceived?: bigint; /** * @generated from field: required string decoder_implementation = 45; */ - decoderImplementation: string; + decoderImplementation?: string; /** * @generated from field: required string playout_id = 46; */ - playoutId: string; + playoutId?: string; /** * @generated from field: required bool power_efficient_decoder = 47; */ - powerEfficientDecoder: boolean; + powerEfficientDecoder?: boolean; /** * @generated from field: required uint64 frames_assembled_from_multiple_packets = 48; */ - framesAssembledFromMultiplePackets: bigint; + framesAssembledFromMultiplePackets?: bigint; /** * @generated from field: required double total_assembly_time = 49; */ - totalAssemblyTime: number; + totalAssemblyTime?: number; /** * @generated from field: required uint64 retransmitted_packets_received = 50; */ - retransmittedPacketsReceived: bigint; + retransmittedPacketsReceived?: bigint; /** * @generated from field: required uint64 retransmitted_bytes_received = 51; */ - retransmittedBytesReceived: bigint; + retransmittedBytesReceived?: bigint; /** * @generated from field: required uint32 rtx_ssrc = 52; */ - rtxSsrc: number; + rtxSsrc?: number; /** * @generated from field: required uint32 fec_ssrc = 53; */ - fecSsrc: number; -}; - -/** - * Describes the message livekit.proto.InboundRtpStreamStats. - * Use `create(InboundRtpStreamStatsSchema)` to create a new message. - */ -export const InboundRtpStreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 5); + fecSsrc?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.InboundRtpStreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_identifier", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "mid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "remote_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "frames_decoded", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 5, name: "key_frames_decoded", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 6, name: "frames_rendered", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 7, name: "frames_dropped", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 8, name: "frame_width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 9, name: "frame_height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 10, name: "frames_per_second", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 11, name: "qp_sum", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 12, name: "total_decode_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 13, name: "total_inter_frame_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 14, name: "total_squared_inter_frame_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 15, name: "pause_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 16, name: "total_pause_duration", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 17, name: "freeze_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 18, name: "total_freeze_duration", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 19, name: "last_packet_received_timestamp", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 20, name: "header_bytes_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 21, name: "packets_discarded", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 22, name: "fec_bytes_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 23, name: "fec_packets_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 24, name: "fec_packets_discarded", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 25, name: "bytes_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 26, name: "nack_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 27, name: "fir_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 28, name: "pli_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 29, name: "total_processing_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 30, name: "estimated_playout_timestamp", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 31, name: "jitter_buffer_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 32, name: "jitter_buffer_target_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 33, name: "jitter_buffer_emitted_count", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 34, name: "jitter_buffer_minimum_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 35, name: "total_samples_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 36, name: "concealed_samples", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 37, name: "silent_concealed_samples", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 38, name: "concealment_events", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 39, name: "inserted_samples_for_deceleration", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 40, name: "removed_samples_for_acceleration", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 41, name: "audio_level", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 42, name: "total_audio_energy", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 43, name: "total_samples_duration", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 44, name: "frames_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 45, name: "decoder_implementation", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 46, name: "playout_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 47, name: "power_efficient_decoder", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 48, name: "frames_assembled_from_multiple_packets", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 49, name: "total_assembly_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 50, name: "retransmitted_packets_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 51, name: "retransmitted_bytes_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 52, name: "rtx_ssrc", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 53, name: "fec_ssrc", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): InboundRtpStreamStats { + return new InboundRtpStreamStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): InboundRtpStreamStats { + return new InboundRtpStreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): InboundRtpStreamStats { + return new InboundRtpStreamStats().fromJsonString(jsonString, options); + } + + static equals(a: InboundRtpStreamStats | PlainMessage | undefined, b: InboundRtpStreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(InboundRtpStreamStats, a, b); + } +} /** * @generated from message livekit.proto.SentRtpStreamStats */ -export type SentRtpStreamStats = Message<"livekit.proto.SentRtpStreamStats"> & { +export class SentRtpStreamStats extends Message { /** * @generated from field: required uint64 packets_sent = 1; */ - packetsSent: bigint; + packetsSent?: bigint; /** * @generated from field: required uint64 bytes_sent = 2; */ - bytesSent: bigint; -}; + bytesSent?: bigint; -/** - * Describes the message livekit.proto.SentRtpStreamStats. - * Use `create(SentRtpStreamStatsSchema)` to create a new message. - */ -export const SentRtpStreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 6); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.SentRtpStreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "packets_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "bytes_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SentRtpStreamStats { + return new SentRtpStreamStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SentRtpStreamStats { + return new SentRtpStreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SentRtpStreamStats { + return new SentRtpStreamStats().fromJsonString(jsonString, options); + } + + static equals(a: SentRtpStreamStats | PlainMessage | undefined, b: SentRtpStreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(SentRtpStreamStats, a, b); + } +} /** * @generated from message livekit.proto.OutboundRtpStreamStats */ -export type OutboundRtpStreamStats = Message<"livekit.proto.OutboundRtpStreamStats"> & { +export class OutboundRtpStreamStats extends Message { /** * @generated from field: required string mid = 1; */ - mid: string; + mid?: string; /** * @generated from field: required string media_source_id = 2; */ - mediaSourceId: string; + mediaSourceId?: string; /** * @generated from field: required string remote_id = 3; */ - remoteId: string; + remoteId?: string; /** * @generated from field: required string rid = 4; */ - rid: string; + rid?: string; /** * @generated from field: required uint64 header_bytes_sent = 5; */ - headerBytesSent: bigint; + headerBytesSent?: bigint; /** * @generated from field: required uint64 retransmitted_packets_sent = 6; */ - retransmittedPacketsSent: bigint; + retransmittedPacketsSent?: bigint; /** * @generated from field: required uint64 retransmitted_bytes_sent = 7; */ - retransmittedBytesSent: bigint; + retransmittedBytesSent?: bigint; /** * @generated from field: required uint32 rtx_ssrc = 8; */ - rtxSsrc: number; + rtxSsrc?: number; /** * @generated from field: required double target_bitrate = 9; */ - targetBitrate: number; + targetBitrate?: number; /** * @generated from field: required uint64 total_encoded_bytes_target = 10; */ - totalEncodedBytesTarget: bigint; + totalEncodedBytesTarget?: bigint; /** * @generated from field: required uint32 frame_width = 11; */ - frameWidth: number; + frameWidth?: number; /** * @generated from field: required uint32 frame_height = 12; */ - frameHeight: number; + frameHeight?: number; /** * @generated from field: required double frames_per_second = 13; */ - framesPerSecond: number; + framesPerSecond?: number; /** * @generated from field: required uint32 frames_sent = 14; */ - framesSent: number; + framesSent?: number; /** * @generated from field: required uint32 huge_frames_sent = 15; */ - hugeFramesSent: number; + hugeFramesSent?: number; /** * @generated from field: required uint32 frames_encoded = 16; */ - framesEncoded: number; + framesEncoded?: number; /** * @generated from field: required uint32 key_frames_encoded = 17; */ - keyFramesEncoded: number; + keyFramesEncoded?: number; /** * @generated from field: required uint64 qp_sum = 18; */ - qpSum: bigint; + qpSum?: bigint; /** * @generated from field: required double total_encode_time = 19; */ - totalEncodeTime: number; + totalEncodeTime?: number; /** * @generated from field: required double total_packet_send_delay = 20; */ - totalPacketSendDelay: number; + totalPacketSendDelay?: number; /** * @generated from field: required livekit.proto.QualityLimitationReason quality_limitation_reason = 21; */ - qualityLimitationReason: QualityLimitationReason; + qualityLimitationReason?: QualityLimitationReason; /** * @generated from field: map quality_limitation_durations = 22; */ - qualityLimitationDurations: { [key: string]: number }; + qualityLimitationDurations: { [key: string]: number } = {}; /** * @generated from field: required uint32 quality_limitation_resolution_changes = 23; */ - qualityLimitationResolutionChanges: number; + qualityLimitationResolutionChanges?: number; /** * @generated from field: required uint32 nack_count = 24; */ - nackCount: number; + nackCount?: number; /** * @generated from field: required uint32 fir_count = 25; */ - firCount: number; + firCount?: number; /** * @generated from field: required uint32 pli_count = 26; */ - pliCount: number; + pliCount?: number; /** * @generated from field: required string encoder_implementation = 27; */ - encoderImplementation: string; + encoderImplementation?: string; /** * @generated from field: required bool power_efficient_encoder = 28; */ - powerEfficientEncoder: boolean; + powerEfficientEncoder?: boolean; /** * @generated from field: required bool active = 29; */ - active: boolean; + active?: boolean; /** * @generated from field: required string scalability_mode = 30; */ - scalabilityMode: string; -}; - -/** - * Describes the message livekit.proto.OutboundRtpStreamStats. - * Use `create(OutboundRtpStreamStatsSchema)` to create a new message. - */ -export const OutboundRtpStreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 7); + scalabilityMode?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OutboundRtpStreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "mid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "media_source_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "remote_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "rid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 5, name: "header_bytes_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 6, name: "retransmitted_packets_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 7, name: "retransmitted_bytes_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 8, name: "rtx_ssrc", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 9, name: "target_bitrate", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 10, name: "total_encoded_bytes_target", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 11, name: "frame_width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 12, name: "frame_height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 13, name: "frames_per_second", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 14, name: "frames_sent", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 15, name: "huge_frames_sent", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 16, name: "frames_encoded", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 17, name: "key_frames_encoded", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 18, name: "qp_sum", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 19, name: "total_encode_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 20, name: "total_packet_send_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 21, name: "quality_limitation_reason", kind: "enum", T: proto2.getEnumType(QualityLimitationReason), req: true }, + { no: 22, name: "quality_limitation_durations", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 1 /* ScalarType.DOUBLE */} }, + { no: 23, name: "quality_limitation_resolution_changes", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 24, name: "nack_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 25, name: "fir_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 26, name: "pli_count", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 27, name: "encoder_implementation", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 28, name: "power_efficient_encoder", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 29, name: "active", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 30, name: "scalability_mode", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OutboundRtpStreamStats { + return new OutboundRtpStreamStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OutboundRtpStreamStats { + return new OutboundRtpStreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OutboundRtpStreamStats { + return new OutboundRtpStreamStats().fromJsonString(jsonString, options); + } + + static equals(a: OutboundRtpStreamStats | PlainMessage | undefined, b: OutboundRtpStreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(OutboundRtpStreamStats, a, b); + } +} /** * @generated from message livekit.proto.RemoteInboundRtpStreamStats */ -export type RemoteInboundRtpStreamStats = Message<"livekit.proto.RemoteInboundRtpStreamStats"> & { +export class RemoteInboundRtpStreamStats extends Message { /** * @generated from field: required string local_id = 1; */ - localId: string; + localId?: string; /** * @generated from field: required double round_trip_time = 2; */ - roundTripTime: number; + roundTripTime?: number; /** * @generated from field: required double total_round_trip_time = 3; */ - totalRoundTripTime: number; + totalRoundTripTime?: number; /** * @generated from field: required double fraction_lost = 4; */ - fractionLost: number; + fractionLost?: number; /** * @generated from field: required uint64 round_trip_time_measurements = 5; */ - roundTripTimeMeasurements: bigint; -}; - -/** - * Describes the message livekit.proto.RemoteInboundRtpStreamStats. - * Use `create(RemoteInboundRtpStreamStatsSchema)` to create a new message. - */ -export const RemoteInboundRtpStreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 8); + roundTripTimeMeasurements?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RemoteInboundRtpStreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "round_trip_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 3, name: "total_round_trip_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 4, name: "fraction_lost", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 5, name: "round_trip_time_measurements", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RemoteInboundRtpStreamStats { + return new RemoteInboundRtpStreamStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RemoteInboundRtpStreamStats { + return new RemoteInboundRtpStreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RemoteInboundRtpStreamStats { + return new RemoteInboundRtpStreamStats().fromJsonString(jsonString, options); + } + + static equals(a: RemoteInboundRtpStreamStats | PlainMessage | undefined, b: RemoteInboundRtpStreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(RemoteInboundRtpStreamStats, a, b); + } +} /** * @generated from message livekit.proto.RemoteOutboundRtpStreamStats */ -export type RemoteOutboundRtpStreamStats = Message<"livekit.proto.RemoteOutboundRtpStreamStats"> & { +export class RemoteOutboundRtpStreamStats extends Message { /** * @generated from field: required string local_id = 1; */ - localId: string; + localId?: string; /** * @generated from field: required double remote_timestamp = 2; */ - remoteTimestamp: number; + remoteTimestamp?: number; /** * @generated from field: required uint64 reports_sent = 3; */ - reportsSent: bigint; + reportsSent?: bigint; /** * @generated from field: required double round_trip_time = 4; */ - roundTripTime: number; + roundTripTime?: number; /** * @generated from field: required double total_round_trip_time = 5; */ - totalRoundTripTime: number; + totalRoundTripTime?: number; /** * @generated from field: required uint64 round_trip_time_measurements = 6; */ - roundTripTimeMeasurements: bigint; -}; - -/** - * Describes the message livekit.proto.RemoteOutboundRtpStreamStats. - * Use `create(RemoteOutboundRtpStreamStatsSchema)` to create a new message. - */ -export const RemoteOutboundRtpStreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 9); + roundTripTimeMeasurements?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.RemoteOutboundRtpStreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "local_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "remote_timestamp", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 3, name: "reports_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 4, name: "round_trip_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 5, name: "total_round_trip_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 6, name: "round_trip_time_measurements", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): RemoteOutboundRtpStreamStats { + return new RemoteOutboundRtpStreamStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): RemoteOutboundRtpStreamStats { + return new RemoteOutboundRtpStreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): RemoteOutboundRtpStreamStats { + return new RemoteOutboundRtpStreamStats().fromJsonString(jsonString, options); + } + + static equals(a: RemoteOutboundRtpStreamStats | PlainMessage | undefined, b: RemoteOutboundRtpStreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(RemoteOutboundRtpStreamStats, a, b); + } +} /** * @generated from message livekit.proto.MediaSourceStats */ -export type MediaSourceStats = Message<"livekit.proto.MediaSourceStats"> & { +export class MediaSourceStats extends Message { /** * @generated from field: required string track_identifier = 1; */ - trackIdentifier: string; + trackIdentifier?: string; /** * @generated from field: required string kind = 2; */ - kind: string; -}; + kind?: string; -/** - * Describes the message livekit.proto.MediaSourceStats. - * Use `create(MediaSourceStatsSchema)` to create a new message. - */ -export const MediaSourceStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 10); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.MediaSourceStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_identifier", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "kind", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): MediaSourceStats { + return new MediaSourceStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): MediaSourceStats { + return new MediaSourceStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): MediaSourceStats { + return new MediaSourceStats().fromJsonString(jsonString, options); + } + + static equals(a: MediaSourceStats | PlainMessage | undefined, b: MediaSourceStats | PlainMessage | undefined): boolean { + return proto2.util.equals(MediaSourceStats, a, b); + } +} /** * @generated from message livekit.proto.AudioSourceStats */ -export type AudioSourceStats = Message<"livekit.proto.AudioSourceStats"> & { +export class AudioSourceStats extends Message { /** * @generated from field: required double audio_level = 1; */ - audioLevel: number; + audioLevel?: number; /** * @generated from field: required double total_audio_energy = 2; */ - totalAudioEnergy: number; + totalAudioEnergy?: number; /** * @generated from field: required double total_samples_duration = 3; */ - totalSamplesDuration: number; + totalSamplesDuration?: number; /** * @generated from field: required double echo_return_loss = 4; */ - echoReturnLoss: number; + echoReturnLoss?: number; /** * @generated from field: required double echo_return_loss_enhancement = 5; */ - echoReturnLossEnhancement: number; + echoReturnLossEnhancement?: number; /** * @generated from field: required double dropped_samples_duration = 6; */ - droppedSamplesDuration: number; + droppedSamplesDuration?: number; /** * @generated from field: required uint32 dropped_samples_events = 7; */ - droppedSamplesEvents: number; + droppedSamplesEvents?: number; /** * @generated from field: required double total_capture_delay = 8; */ - totalCaptureDelay: number; + totalCaptureDelay?: number; /** * @generated from field: required uint64 total_samples_captured = 9; */ - totalSamplesCaptured: bigint; -}; - -/** - * Describes the message livekit.proto.AudioSourceStats. - * Use `create(AudioSourceStatsSchema)` to create a new message. - */ -export const AudioSourceStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 11); + totalSamplesCaptured?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioSourceStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "audio_level", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 2, name: "total_audio_energy", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 3, name: "total_samples_duration", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 4, name: "echo_return_loss", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 5, name: "echo_return_loss_enhancement", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 6, name: "dropped_samples_duration", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 7, name: "dropped_samples_events", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 8, name: "total_capture_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 9, name: "total_samples_captured", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioSourceStats { + return new AudioSourceStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioSourceStats { + return new AudioSourceStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioSourceStats { + return new AudioSourceStats().fromJsonString(jsonString, options); + } + + static equals(a: AudioSourceStats | PlainMessage | undefined, b: AudioSourceStats | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioSourceStats, a, b); + } +} /** * @generated from message livekit.proto.VideoSourceStats */ -export type VideoSourceStats = Message<"livekit.proto.VideoSourceStats"> & { +export class VideoSourceStats extends Message { /** * @generated from field: required uint32 width = 1; */ - width: number; + width?: number; /** * @generated from field: required uint32 height = 2; */ - height: number; + height?: number; /** * @generated from field: required uint32 frames = 3; */ - frames: number; + frames?: number; /** * @generated from field: required double frames_per_second = 4; */ - framesPerSecond: number; -}; - -/** - * Describes the message livekit.proto.VideoSourceStats. - * Use `create(VideoSourceStatsSchema)` to create a new message. - */ -export const VideoSourceStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 12); + framesPerSecond?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoSourceStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "frames", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 4, name: "frames_per_second", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoSourceStats { + return new VideoSourceStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoSourceStats { + return new VideoSourceStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoSourceStats { + return new VideoSourceStats().fromJsonString(jsonString, options); + } + + static equals(a: VideoSourceStats | PlainMessage | undefined, b: VideoSourceStats | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoSourceStats, a, b); + } +} /** * @generated from message livekit.proto.AudioPlayoutStats */ -export type AudioPlayoutStats = Message<"livekit.proto.AudioPlayoutStats"> & { +export class AudioPlayoutStats extends Message { /** * @generated from field: required string kind = 1; */ - kind: string; + kind?: string; /** * @generated from field: required double synthesized_samples_duration = 2; */ - synthesizedSamplesDuration: number; + synthesizedSamplesDuration?: number; /** * @generated from field: required uint32 synthesized_samples_events = 3; */ - synthesizedSamplesEvents: number; + synthesizedSamplesEvents?: number; /** * @generated from field: required double total_samples_duration = 4; */ - totalSamplesDuration: number; + totalSamplesDuration?: number; /** * @generated from field: required double total_playout_delay = 5; */ - totalPlayoutDelay: number; + totalPlayoutDelay?: number; /** * @generated from field: required uint64 total_samples_count = 6; */ - totalSamplesCount: bigint; -}; - -/** - * Describes the message livekit.proto.AudioPlayoutStats. - * Use `create(AudioPlayoutStatsSchema)` to create a new message. - */ -export const AudioPlayoutStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 13); + totalSamplesCount?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.AudioPlayoutStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "kind", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "synthesized_samples_duration", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 3, name: "synthesized_samples_events", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 4, name: "total_samples_duration", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 5, name: "total_playout_delay", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 6, name: "total_samples_count", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AudioPlayoutStats { + return new AudioPlayoutStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AudioPlayoutStats { + return new AudioPlayoutStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AudioPlayoutStats { + return new AudioPlayoutStats().fromJsonString(jsonString, options); + } + + static equals(a: AudioPlayoutStats | PlainMessage | undefined, b: AudioPlayoutStats | PlainMessage | undefined): boolean { + return proto2.util.equals(AudioPlayoutStats, a, b); + } +} /** * @generated from message livekit.proto.PeerConnectionStats */ -export type PeerConnectionStats = Message<"livekit.proto.PeerConnectionStats"> & { +export class PeerConnectionStats extends Message { /** * @generated from field: required uint32 data_channels_opened = 1; */ - dataChannelsOpened: number; + dataChannelsOpened?: number; /** * @generated from field: required uint32 data_channels_closed = 2; */ - dataChannelsClosed: number; -}; + dataChannelsClosed?: number; -/** - * Describes the message livekit.proto.PeerConnectionStats. - * Use `create(PeerConnectionStatsSchema)` to create a new message. - */ -export const PeerConnectionStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 14); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.PeerConnectionStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "data_channels_opened", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "data_channels_closed", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PeerConnectionStats { + return new PeerConnectionStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PeerConnectionStats { + return new PeerConnectionStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PeerConnectionStats { + return new PeerConnectionStats().fromJsonString(jsonString, options); + } + + static equals(a: PeerConnectionStats | PlainMessage | undefined, b: PeerConnectionStats | PlainMessage | undefined): boolean { + return proto2.util.equals(PeerConnectionStats, a, b); + } +} /** * @generated from message livekit.proto.DataChannelStats */ -export type DataChannelStats = Message<"livekit.proto.DataChannelStats"> & { +export class DataChannelStats extends Message { /** * @generated from field: required string label = 1; */ - label: string; + label?: string; /** * @generated from field: required string protocol = 2; */ - protocol: string; + protocol?: string; /** * @generated from field: required int32 data_channel_identifier = 3; */ - dataChannelIdentifier: number; + dataChannelIdentifier?: number; /** * @generated from field: optional livekit.proto.DataChannelState state = 4; */ - state: DataChannelState; + state?: DataChannelState; /** * @generated from field: required uint32 messages_sent = 5; */ - messagesSent: number; + messagesSent?: number; /** * @generated from field: required uint64 bytes_sent = 6; */ - bytesSent: bigint; + bytesSent?: bigint; /** * @generated from field: required uint32 messages_received = 7; */ - messagesReceived: number; + messagesReceived?: number; /** * @generated from field: required uint64 bytes_received = 8; */ - bytesReceived: bigint; -}; - -/** - * Describes the message livekit.proto.DataChannelStats. - * Use `create(DataChannelStatsSchema)` to create a new message. - */ -export const DataChannelStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 15); - -/** - * @generated from message livekit.proto.TransportStats - */ -export type TransportStats = Message<"livekit.proto.TransportStats"> & { - /** - * @generated from field: required uint64 packets_sent = 1; - */ - packetsSent: bigint; - - /** - * @generated from field: required uint64 packets_received = 2; - */ - packetsReceived: bigint; - - /** - * @generated from field: required uint64 bytes_sent = 3; - */ - bytesSent: bigint; - - /** - * @generated from field: required uint64 bytes_received = 4; - */ - bytesReceived: bigint; - - /** - * @generated from field: required livekit.proto.IceRole ice_role = 5; - */ - iceRole: IceRole; - - /** - * @generated from field: required string ice_local_username_fragment = 6; - */ - iceLocalUsernameFragment: string; - - /** - * @generated from field: optional livekit.proto.DtlsTransportState dtls_state = 7; - */ - dtlsState: DtlsTransportState; - - /** - * @generated from field: optional livekit.proto.IceTransportState ice_state = 8; - */ - iceState: IceTransportState; - - /** - * @generated from field: required string selected_candidate_pair_id = 9; - */ - selectedCandidatePairId: string; - - /** - * @generated from field: required string local_certificate_id = 10; - */ - localCertificateId: string; - - /** - * @generated from field: required string remote_certificate_id = 11; - */ - remoteCertificateId: string; - - /** - * @generated from field: required string tls_version = 12; - */ - tlsVersion: string; - - /** - * @generated from field: required string dtls_cipher = 13; - */ - dtlsCipher: string; - - /** - * @generated from field: required livekit.proto.DtlsRole dtls_role = 14; - */ - dtlsRole: DtlsRole; - - /** - * @generated from field: required string srtp_cipher = 15; - */ - srtpCipher: string; - - /** - * @generated from field: required uint32 selected_candidate_pair_changes = 16; - */ - selectedCandidatePairChanges: number; -}; - -/** - * Describes the message livekit.proto.TransportStats. - * Use `create(TransportStatsSchema)` to create a new message. - */ -export const TransportStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 16); - -/** - * @generated from message livekit.proto.CandidatePairStats - */ -export type CandidatePairStats = Message<"livekit.proto.CandidatePairStats"> & { - /** - * @generated from field: required string transport_id = 1; - */ - transportId: string; - - /** - * @generated from field: required string local_candidate_id = 2; - */ - localCandidateId: string; - - /** - * @generated from field: required string remote_candidate_id = 3; - */ - remoteCandidateId: string; - - /** - * @generated from field: optional livekit.proto.IceCandidatePairState state = 4; - */ - state: IceCandidatePairState; - - /** - * @generated from field: required bool nominated = 5; - */ - nominated: boolean; - - /** - * @generated from field: required uint64 packets_sent = 6; - */ - packetsSent: bigint; - - /** - * @generated from field: required uint64 packets_received = 7; - */ - packetsReceived: bigint; - - /** - * @generated from field: required uint64 bytes_sent = 8; - */ - bytesSent: bigint; - - /** - * @generated from field: required uint64 bytes_received = 9; - */ - bytesReceived: bigint; - - /** - * @generated from field: required double last_packet_sent_timestamp = 10; - */ - lastPacketSentTimestamp: number; - - /** - * @generated from field: required double last_packet_received_timestamp = 11; - */ - lastPacketReceivedTimestamp: number; - - /** - * @generated from field: required double total_round_trip_time = 12; - */ - totalRoundTripTime: number; - - /** - * @generated from field: required double current_round_trip_time = 13; - */ - currentRoundTripTime: number; - - /** - * @generated from field: required double available_outgoing_bitrate = 14; - */ - availableOutgoingBitrate: number; - - /** - * @generated from field: required double available_incoming_bitrate = 15; - */ - availableIncomingBitrate: number; - - /** - * @generated from field: required uint64 requests_received = 16; - */ - requestsReceived: bigint; - - /** - * @generated from field: required uint64 requests_sent = 17; - */ - requestsSent: bigint; - - /** - * @generated from field: required uint64 responses_received = 18; - */ - responsesReceived: bigint; - - /** - * @generated from field: required uint64 responses_sent = 19; - */ - responsesSent: bigint; - - /** - * @generated from field: required uint64 consent_requests_sent = 20; - */ - consentRequestsSent: bigint; - - /** - * @generated from field: required uint32 packets_discarded_on_send = 21; - */ - packetsDiscardedOnSend: number; - - /** - * @generated from field: required uint64 bytes_discarded_on_send = 22; - */ - bytesDiscardedOnSend: bigint; -}; - -/** - * Describes the message livekit.proto.CandidatePairStats. - * Use `create(CandidatePairStatsSchema)` to create a new message. - */ -export const CandidatePairStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 17); - -/** - * @generated from message livekit.proto.IceCandidateStats - */ -export type IceCandidateStats = Message<"livekit.proto.IceCandidateStats"> & { - /** - * @generated from field: required string transport_id = 1; - */ - transportId: string; - - /** - * @generated from field: required string address = 2; - */ - address: string; - - /** - * @generated from field: required int32 port = 3; - */ - port: number; - - /** - * @generated from field: required string protocol = 4; - */ - protocol: string; - - /** - * @generated from field: optional livekit.proto.IceCandidateType candidate_type = 5; - */ - candidateType: IceCandidateType; - - /** - * @generated from field: required int32 priority = 6; - */ - priority: number; - - /** - * @generated from field: required string url = 7; - */ - url: string; + bytesReceived?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.DataChannelStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "label", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "protocol", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "data_channel_identifier", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + { no: 4, name: "state", kind: "enum", T: proto2.getEnumType(DataChannelState), opt: true }, + { no: 5, name: "messages_sent", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 6, name: "bytes_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 7, name: "messages_received", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 8, name: "bytes_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataChannelStats { + return new DataChannelStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataChannelStats { + return new DataChannelStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataChannelStats { + return new DataChannelStats().fromJsonString(jsonString, options); + } + + static equals(a: DataChannelStats | PlainMessage | undefined, b: DataChannelStats | PlainMessage | undefined): boolean { + return proto2.util.equals(DataChannelStats, a, b); + } +} +/** + * @generated from message livekit.proto.TransportStats + */ +export class TransportStats extends Message { /** - * @generated from field: optional livekit.proto.IceServerTransportProtocol relay_protocol = 8; + * @generated from field: required uint64 packets_sent = 1; */ - relayProtocol: IceServerTransportProtocol; + packetsSent?: bigint; /** - * @generated from field: required string foundation = 9; + * @generated from field: required uint64 packets_received = 2; */ - foundation: string; + packetsReceived?: bigint; /** - * @generated from field: required string related_address = 10; + * @generated from field: required uint64 bytes_sent = 3; */ - relatedAddress: string; + bytesSent?: bigint; /** - * @generated from field: required int32 related_port = 11; + * @generated from field: required uint64 bytes_received = 4; */ - relatedPort: number; + bytesReceived?: bigint; /** - * @generated from field: required string username_fragment = 12; + * @generated from field: required livekit.proto.IceRole ice_role = 5; */ - usernameFragment: string; + iceRole?: IceRole; /** - * @generated from field: optional livekit.proto.IceTcpCandidateType tcp_type = 13; + * @generated from field: required string ice_local_username_fragment = 6; */ - tcpType: IceTcpCandidateType; -}; - -/** - * Describes the message livekit.proto.IceCandidateStats. - * Use `create(IceCandidateStatsSchema)` to create a new message. - */ -export const IceCandidateStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 18); + iceLocalUsernameFragment?: string; -/** - * @generated from message livekit.proto.CertificateStats - */ -export type CertificateStats = Message<"livekit.proto.CertificateStats"> & { /** - * @generated from field: required string fingerprint = 1; + * @generated from field: optional livekit.proto.DtlsTransportState dtls_state = 7; */ - fingerprint: string; + dtlsState?: DtlsTransportState; /** - * @generated from field: required string fingerprint_algorithm = 2; + * @generated from field: optional livekit.proto.IceTransportState ice_state = 8; */ - fingerprintAlgorithm: string; + iceState?: IceTransportState; /** - * @generated from field: required string base64_certificate = 3; + * @generated from field: required string selected_candidate_pair_id = 9; */ - base64Certificate: string; + selectedCandidatePairId?: string; /** - * @generated from field: required string issuer_certificate_id = 4; + * @generated from field: required string local_certificate_id = 10; */ - issuerCertificateId: string; -}; - -/** - * Describes the message livekit.proto.CertificateStats. - * Use `create(CertificateStatsSchema)` to create a new message. - */ -export const CertificateStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 19); + localCertificateId?: string; -/** - * @generated from message livekit.proto.StreamStats - */ -export type StreamStats = Message<"livekit.proto.StreamStats"> & { /** - * @generated from field: required string id = 1; + * @generated from field: required string remote_certificate_id = 11; */ - id: string; + remoteCertificateId?: string; /** - * required int64 timestamp = 3; - * - * @generated from field: required string stream_identifier = 2; + * @generated from field: required string tls_version = 12; */ - streamIdentifier: string; -}; - -/** - * Describes the message livekit.proto.StreamStats. - * Use `create(StreamStatsSchema)` to create a new message. - */ -export const StreamStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_stats, 20); + tlsVersion?: string; -/** - * @generated from enum livekit.proto.DataChannelState - */ -export enum DataChannelState { /** - * @generated from enum value: DC_CONNECTING = 0; + * @generated from field: required string dtls_cipher = 13; */ - DC_CONNECTING = 0, + dtlsCipher?: string; /** - * @generated from enum value: DC_OPEN = 1; + * @generated from field: required livekit.proto.DtlsRole dtls_role = 14; */ - DC_OPEN = 1, + dtlsRole?: DtlsRole; /** - * @generated from enum value: DC_CLOSING = 2; + * @generated from field: required string srtp_cipher = 15; */ - DC_CLOSING = 2, + srtpCipher?: string; /** - * @generated from enum value: DC_CLOSED = 3; + * @generated from field: required uint32 selected_candidate_pair_changes = 16; */ - DC_CLOSED = 3, + selectedCandidatePairChanges?: number; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TransportStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "packets_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "packets_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 3, name: "bytes_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 4, name: "bytes_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 5, name: "ice_role", kind: "enum", T: proto2.getEnumType(IceRole), req: true }, + { no: 6, name: "ice_local_username_fragment", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 7, name: "dtls_state", kind: "enum", T: proto2.getEnumType(DtlsTransportState), opt: true }, + { no: 8, name: "ice_state", kind: "enum", T: proto2.getEnumType(IceTransportState), opt: true }, + { no: 9, name: "selected_candidate_pair_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 10, name: "local_certificate_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 11, name: "remote_certificate_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 12, name: "tls_version", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 13, name: "dtls_cipher", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 14, name: "dtls_role", kind: "enum", T: proto2.getEnumType(DtlsRole), req: true }, + { no: 15, name: "srtp_cipher", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 16, name: "selected_candidate_pair_changes", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TransportStats { + return new TransportStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TransportStats { + return new TransportStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TransportStats { + return new TransportStats().fromJsonString(jsonString, options); + } + + static equals(a: TransportStats | PlainMessage | undefined, b: TransportStats | PlainMessage | undefined): boolean { + return proto2.util.equals(TransportStats, a, b); + } } /** - * Describes the enum livekit.proto.DataChannelState. - */ -export const DataChannelStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 0); - -/** - * @generated from enum livekit.proto.QualityLimitationReason + * @generated from message livekit.proto.CandidatePairStats */ -export enum QualityLimitationReason { +export class CandidatePairStats extends Message { /** - * @generated from enum value: LIMITATION_NONE = 0; + * @generated from field: required string transport_id = 1; */ - LIMITATION_NONE = 0, + transportId?: string; /** - * @generated from enum value: LIMITATION_CPU = 1; + * @generated from field: required string local_candidate_id = 2; */ - LIMITATION_CPU = 1, + localCandidateId?: string; /** - * @generated from enum value: LIMITATION_BANDWIDTH = 2; + * @generated from field: required string remote_candidate_id = 3; */ - LIMITATION_BANDWIDTH = 2, + remoteCandidateId?: string; /** - * @generated from enum value: LIMITATION_OTHER = 3; + * @generated from field: optional livekit.proto.IceCandidatePairState state = 4; */ - LIMITATION_OTHER = 3, -} + state?: IceCandidatePairState; -/** - * Describes the enum livekit.proto.QualityLimitationReason. - */ -export const QualityLimitationReasonSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 1); + /** + * @generated from field: required bool nominated = 5; + */ + nominated?: boolean; -/** - * @generated from enum livekit.proto.IceRole - */ -export enum IceRole { /** - * @generated from enum value: ICE_UNKNOWN = 0; + * @generated from field: required uint64 packets_sent = 6; */ - ICE_UNKNOWN = 0, + packetsSent?: bigint; /** - * @generated from enum value: ICE_CONTROLLING = 1; + * @generated from field: required uint64 packets_received = 7; */ - ICE_CONTROLLING = 1, + packetsReceived?: bigint; /** - * @generated from enum value: ICE_CONTROLLED = 2; + * @generated from field: required uint64 bytes_sent = 8; */ - ICE_CONTROLLED = 2, -} + bytesSent?: bigint; -/** - * Describes the enum livekit.proto.IceRole. - */ -export const IceRoleSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 2); + /** + * @generated from field: required uint64 bytes_received = 9; + */ + bytesReceived?: bigint; -/** - * @generated from enum livekit.proto.DtlsTransportState - */ -export enum DtlsTransportState { /** - * @generated from enum value: DTLS_TRANSPORT_NEW = 0; + * @generated from field: required double last_packet_sent_timestamp = 10; */ - DTLS_TRANSPORT_NEW = 0, + lastPacketSentTimestamp?: number; /** - * @generated from enum value: DTLS_TRANSPORT_CONNECTING = 1; + * @generated from field: required double last_packet_received_timestamp = 11; */ - DTLS_TRANSPORT_CONNECTING = 1, + lastPacketReceivedTimestamp?: number; /** - * @generated from enum value: DTLS_TRANSPORT_CONNECTED = 2; + * @generated from field: required double total_round_trip_time = 12; */ - DTLS_TRANSPORT_CONNECTED = 2, + totalRoundTripTime?: number; /** - * @generated from enum value: DTLS_TRANSPORT_CLOSED = 3; + * @generated from field: required double current_round_trip_time = 13; */ - DTLS_TRANSPORT_CLOSED = 3, + currentRoundTripTime?: number; /** - * @generated from enum value: DTLS_TRANSPORT_FAILED = 4; + * @generated from field: required double available_outgoing_bitrate = 14; */ - DTLS_TRANSPORT_FAILED = 4, -} + availableOutgoingBitrate?: number; -/** - * Describes the enum livekit.proto.DtlsTransportState. - */ -export const DtlsTransportStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 3); + /** + * @generated from field: required double available_incoming_bitrate = 15; + */ + availableIncomingBitrate?: number; -/** - * @generated from enum livekit.proto.IceTransportState - */ -export enum IceTransportState { /** - * @generated from enum value: ICE_TRANSPORT_NEW = 0; + * @generated from field: required uint64 requests_received = 16; */ - ICE_TRANSPORT_NEW = 0, + requestsReceived?: bigint; /** - * @generated from enum value: ICE_TRANSPORT_CHECKING = 1; + * @generated from field: required uint64 requests_sent = 17; */ - ICE_TRANSPORT_CHECKING = 1, + requestsSent?: bigint; /** - * @generated from enum value: ICE_TRANSPORT_CONNECTED = 2; + * @generated from field: required uint64 responses_received = 18; */ - ICE_TRANSPORT_CONNECTED = 2, + responsesReceived?: bigint; /** - * @generated from enum value: ICE_TRANSPORT_COMPLETED = 3; + * @generated from field: required uint64 responses_sent = 19; */ - ICE_TRANSPORT_COMPLETED = 3, + responsesSent?: bigint; /** - * @generated from enum value: ICE_TRANSPORT_DISCONNECTED = 4; + * @generated from field: required uint64 consent_requests_sent = 20; */ - ICE_TRANSPORT_DISCONNECTED = 4, + consentRequestsSent?: bigint; /** - * @generated from enum value: ICE_TRANSPORT_FAILED = 5; + * @generated from field: required uint32 packets_discarded_on_send = 21; */ - ICE_TRANSPORT_FAILED = 5, + packetsDiscardedOnSend?: number; /** - * @generated from enum value: ICE_TRANSPORT_CLOSED = 6; + * @generated from field: required uint64 bytes_discarded_on_send = 22; */ - ICE_TRANSPORT_CLOSED = 6, + bytesDiscardedOnSend?: bigint; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CandidatePairStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "transport_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "local_candidate_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "remote_candidate_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "state", kind: "enum", T: proto2.getEnumType(IceCandidatePairState), opt: true }, + { no: 5, name: "nominated", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 6, name: "packets_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 7, name: "packets_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 8, name: "bytes_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 9, name: "bytes_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 10, name: "last_packet_sent_timestamp", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 11, name: "last_packet_received_timestamp", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 12, name: "total_round_trip_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 13, name: "current_round_trip_time", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 14, name: "available_outgoing_bitrate", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 15, name: "available_incoming_bitrate", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + { no: 16, name: "requests_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 17, name: "requests_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 18, name: "responses_received", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 19, name: "responses_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 20, name: "consent_requests_sent", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 21, name: "packets_discarded_on_send", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 22, name: "bytes_discarded_on_send", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CandidatePairStats { + return new CandidatePairStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CandidatePairStats { + return new CandidatePairStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CandidatePairStats { + return new CandidatePairStats().fromJsonString(jsonString, options); + } + + static equals(a: CandidatePairStats | PlainMessage | undefined, b: CandidatePairStats | PlainMessage | undefined): boolean { + return proto2.util.equals(CandidatePairStats, a, b); + } } /** - * Describes the enum livekit.proto.IceTransportState. - */ -export const IceTransportStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 4); - -/** - * @generated from enum livekit.proto.DtlsRole + * @generated from message livekit.proto.IceCandidateStats */ -export enum DtlsRole { +export class IceCandidateStats extends Message { /** - * @generated from enum value: DTLS_CLIENT = 0; + * @generated from field: required string transport_id = 1; */ - DTLS_CLIENT = 0, + transportId?: string; /** - * @generated from enum value: DTLS_SERVER = 1; + * @generated from field: required string address = 2; */ - DTLS_SERVER = 1, + address?: string; /** - * @generated from enum value: DTLS_UNKNOWN = 2; + * @generated from field: required int32 port = 3; */ - DTLS_UNKNOWN = 2, -} - -/** - * Describes the enum livekit.proto.DtlsRole. - */ -export const DtlsRoleSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 5); + port?: number; -/** - * @generated from enum livekit.proto.IceCandidatePairState - */ -export enum IceCandidatePairState { /** - * @generated from enum value: PAIR_FROZEN = 0; + * @generated from field: required string protocol = 4; */ - PAIR_FROZEN = 0, + protocol?: string; /** - * @generated from enum value: PAIR_WAITING = 1; + * @generated from field: optional livekit.proto.IceCandidateType candidate_type = 5; */ - PAIR_WAITING = 1, + candidateType?: IceCandidateType; /** - * @generated from enum value: PAIR_IN_PROGRESS = 2; + * @generated from field: required int32 priority = 6; */ - PAIR_IN_PROGRESS = 2, + priority?: number; /** - * @generated from enum value: PAIR_FAILED = 3; + * @generated from field: required string url = 7; */ - PAIR_FAILED = 3, + url?: string; /** - * @generated from enum value: PAIR_SUCCEEDED = 4; + * @generated from field: optional livekit.proto.IceServerTransportProtocol relay_protocol = 8; */ - PAIR_SUCCEEDED = 4, -} + relayProtocol?: IceServerTransportProtocol; -/** - * Describes the enum livekit.proto.IceCandidatePairState. - */ -export const IceCandidatePairStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 6); + /** + * @generated from field: required string foundation = 9; + */ + foundation?: string; -/** - * @generated from enum livekit.proto.IceCandidateType - */ -export enum IceCandidateType { /** - * @generated from enum value: HOST = 0; + * @generated from field: required string related_address = 10; */ - HOST = 0, + relatedAddress?: string; /** - * @generated from enum value: SRFLX = 1; + * @generated from field: required int32 related_port = 11; */ - SRFLX = 1, + relatedPort?: number; /** - * @generated from enum value: PRFLX = 2; + * @generated from field: required string username_fragment = 12; */ - PRFLX = 2, + usernameFragment?: string; /** - * @generated from enum value: RELAY = 3; + * @generated from field: optional livekit.proto.IceTcpCandidateType tcp_type = 13; */ - RELAY = 3, + tcpType?: IceTcpCandidateType; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.IceCandidateStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "transport_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "address", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "port", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + { no: 4, name: "protocol", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 5, name: "candidate_type", kind: "enum", T: proto2.getEnumType(IceCandidateType), opt: true }, + { no: 6, name: "priority", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + { no: 7, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 8, name: "relay_protocol", kind: "enum", T: proto2.getEnumType(IceServerTransportProtocol), opt: true }, + { no: 9, name: "foundation", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 10, name: "related_address", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 11, name: "related_port", kind: "scalar", T: 5 /* ScalarType.INT32 */, req: true }, + { no: 12, name: "username_fragment", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 13, name: "tcp_type", kind: "enum", T: proto2.getEnumType(IceTcpCandidateType), opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): IceCandidateStats { + return new IceCandidateStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): IceCandidateStats { + return new IceCandidateStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): IceCandidateStats { + return new IceCandidateStats().fromJsonString(jsonString, options); + } + + static equals(a: IceCandidateStats | PlainMessage | undefined, b: IceCandidateStats | PlainMessage | undefined): boolean { + return proto2.util.equals(IceCandidateStats, a, b); + } } /** - * Describes the enum livekit.proto.IceCandidateType. + * @generated from message livekit.proto.CertificateStats */ -export const IceCandidateTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 7); +export class CertificateStats extends Message { + /** + * @generated from field: required string fingerprint = 1; + */ + fingerprint?: string; -/** - * @generated from enum livekit.proto.IceServerTransportProtocol - */ -export enum IceServerTransportProtocol { /** - * @generated from enum value: TRANSPORT_UDP = 0; + * @generated from field: required string fingerprint_algorithm = 2; */ - TRANSPORT_UDP = 0, + fingerprintAlgorithm?: string; /** - * @generated from enum value: TRANSPORT_TCP = 1; + * @generated from field: required string base64_certificate = 3; */ - TRANSPORT_TCP = 1, + base64Certificate?: string; /** - * @generated from enum value: TRANSPORT_TLS = 2; + * @generated from field: required string issuer_certificate_id = 4; */ - TRANSPORT_TLS = 2, + issuerCertificateId?: string; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CertificateStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "fingerprint", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "fingerprint_algorithm", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "base64_certificate", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 4, name: "issuer_certificate_id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CertificateStats { + return new CertificateStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CertificateStats { + return new CertificateStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CertificateStats { + return new CertificateStats().fromJsonString(jsonString, options); + } + + static equals(a: CertificateStats | PlainMessage | undefined, b: CertificateStats | PlainMessage | undefined): boolean { + return proto2.util.equals(CertificateStats, a, b); + } } /** - * Describes the enum livekit.proto.IceServerTransportProtocol. - */ -export const IceServerTransportProtocolSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 8); - -/** - * @generated from enum livekit.proto.IceTcpCandidateType + * @generated from message livekit.proto.StreamStats */ -export enum IceTcpCandidateType { +export class StreamStats extends Message { /** - * @generated from enum value: CANDIDATE_ACTIVE = 0; + * @generated from field: required string id = 1; */ - CANDIDATE_ACTIVE = 0, + id?: string; /** - * @generated from enum value: CANDIDATE_PASSIVE = 1; + * required int64 timestamp = 3; + * + * @generated from field: required string stream_identifier = 2; */ - CANDIDATE_PASSIVE = 1, + streamIdentifier?: string; - /** - * @generated from enum value: CANDIDATE_SO = 2; - */ - CANDIDATE_SO = 2, -} + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the enum livekit.proto.IceTcpCandidateType. - */ -export const IceTcpCandidateTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_stats, 9); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.StreamStats"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "stream_identifier", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamStats { + return new StreamStats().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamStats { + return new StreamStats().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamStats { + return new StreamStats().fromJsonString(jsonString, options); + } + + static equals(a: StreamStats | PlainMessage | undefined, b: StreamStats | PlainMessage | undefined): boolean { + return proto2.util.equals(StreamStats, a, b); + } +} diff --git a/packages/livekit-rtc/src/proto/track_pb.ts b/packages/livekit-rtc/src/proto/track_pb.ts index 50867ea6..a1a42423 100644 --- a/packages/livekit-rtc/src/proto/track_pb.ts +++ b/packages/livekit-rtc/src/proto/track_pb.ts @@ -12,253 +12,526 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file track.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { EncryptionType } from "./e2ee_pb.js"; -import { file_e2ee } from "./e2ee_pb.js"; -import type { FfiOwnedHandle } from "./handle_pb.js"; -import { file_handle } from "./handle_pb.js"; -import type { RtcStats } from "./stats_pb.js"; -import { file_stats } from "./stats_pb.js"; -import type { Message } from "@bufbuild/protobuf"; +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; +import { RtcStats } from "./stats_pbjs"; +import { EncryptionType } from "./e2ee_pbjs"; +import { FfiOwnedHandle } from "./handle_pbjs"; /** - * Describes the file track.proto. + * @generated from enum livekit.proto.TrackKind + */ +export enum TrackKind { + /** + * @generated from enum value: KIND_UNKNOWN = 0; + */ + KIND_UNKNOWN = 0, + + /** + * @generated from enum value: KIND_AUDIO = 1; + */ + KIND_AUDIO = 1, + + /** + * @generated from enum value: KIND_VIDEO = 2; + */ + KIND_VIDEO = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(TrackKind) +proto2.util.setEnumType(TrackKind, "livekit.proto.TrackKind", [ + { no: 0, name: "KIND_UNKNOWN" }, + { no: 1, name: "KIND_AUDIO" }, + { no: 2, name: "KIND_VIDEO" }, +]); + +/** + * @generated from enum livekit.proto.TrackSource */ -export const file_track: GenFile = /*@__PURE__*/ - fileDesc("Cgt0cmFjay5wcm90bxINbGl2ZWtpdC5wcm90byI+ChdDcmVhdGVWaWRlb1RyYWNrUmVxdWVzdBIMCgRuYW1lGAEgAigJEhUKDXNvdXJjZV9oYW5kbGUYAiACKAQiRAoYQ3JlYXRlVmlkZW9UcmFja1Jlc3BvbnNlEigKBXRyYWNrGAEgAigLMhkubGl2ZWtpdC5wcm90by5Pd25lZFRyYWNrIj4KF0NyZWF0ZUF1ZGlvVHJhY2tSZXF1ZXN0EgwKBG5hbWUYASACKAkSFQoNc291cmNlX2hhbmRsZRgCIAIoBCJEChhDcmVhdGVBdWRpb1RyYWNrUmVzcG9uc2USKAoFdHJhY2sYASACKAsyGS5saXZla2l0LnByb3RvLk93bmVkVHJhY2siJwoPR2V0U3RhdHNSZXF1ZXN0EhQKDHRyYWNrX2hhbmRsZRgBIAIoBCIkChBHZXRTdGF0c1Jlc3BvbnNlEhAKCGFzeW5jX2lkGAEgAigEIlsKEEdldFN0YXRzQ2FsbGJhY2sSEAoIYXN5bmNfaWQYASACKAQSDQoFZXJyb3IYAiABKAkSJgoFc3RhdHMYAyADKAsyFy5saXZla2l0LnByb3RvLlJ0Y1N0YXRzIgwKClRyYWNrRXZlbnQiowIKFFRyYWNrUHVibGljYXRpb25JbmZvEgsKA3NpZBgBIAIoCRIMCgRuYW1lGAIgAigJEiYKBGtpbmQYAyACKA4yGC5saXZla2l0LnByb3RvLlRyYWNrS2luZBIqCgZzb3VyY2UYBCACKA4yGi5saXZla2l0LnByb3RvLlRyYWNrU291cmNlEhMKC3NpbXVsY2FzdGVkGAUgAigIEg0KBXdpZHRoGAYgAigNEg4KBmhlaWdodBgHIAIoDRIRCgltaW1lX3R5cGUYCCACKAkSDQoFbXV0ZWQYCSACKAgSDgoGcmVtb3RlGAogAigIEjYKD2VuY3J5cHRpb25fdHlwZRgLIAIoDjIdLmxpdmVraXQucHJvdG8uRW5jcnlwdGlvblR5cGUieQoVT3duZWRUcmFja1B1YmxpY2F0aW9uEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSMQoEaW5mbxgCIAIoCzIjLmxpdmVraXQucHJvdG8uVHJhY2tQdWJsaWNhdGlvbkluZm8inwEKCVRyYWNrSW5mbxILCgNzaWQYASACKAkSDAoEbmFtZRgCIAIoCRImCgRraW5kGAMgAigOMhgubGl2ZWtpdC5wcm90by5UcmFja0tpbmQSMAoMc3RyZWFtX3N0YXRlGAQgAigOMhoubGl2ZWtpdC5wcm90by5TdHJlYW1TdGF0ZRINCgVtdXRlZBgFIAIoCBIOCgZyZW1vdGUYBiACKAgiYwoKT3duZWRUcmFjaxItCgZoYW5kbGUYASACKAsyHS5saXZla2l0LnByb3RvLkZmaU93bmVkSGFuZGxlEiYKBGluZm8YAiACKAsyGC5saXZla2l0LnByb3RvLlRyYWNrSW5mbyI7ChVMb2NhbFRyYWNrTXV0ZVJlcXVlc3QSFAoMdHJhY2tfaGFuZGxlGAEgAigEEgwKBG11dGUYAiACKAgiJwoWTG9jYWxUcmFja011dGVSZXNwb25zZRINCgVtdXRlZBgBIAIoCCJBChhFbmFibGVSZW1vdGVUcmFja1JlcXVlc3QSFAoMdHJhY2tfaGFuZGxlGAEgAigEEg8KB2VuYWJsZWQYAiACKAgiLAoZRW5hYmxlUmVtb3RlVHJhY2tSZXNwb25zZRIPCgdlbmFibGVkGAEgAigIKj0KCVRyYWNrS2luZBIQCgxLSU5EX1VOS05PV04QABIOCgpLSU5EX0FVRElPEAESDgoKS0lORF9WSURFTxACKoEBCgtUcmFja1NvdXJjZRISCg5TT1VSQ0VfVU5LTk9XThAAEhEKDVNPVVJDRV9DQU1FUkEQARIVChFTT1VSQ0VfTUlDUk9QSE9ORRACEhYKElNPVVJDRV9TQ1JFRU5TSEFSRRADEhwKGFNPVVJDRV9TQ1JFRU5TSEFSRV9BVURJTxAEKkQKC1N0cmVhbVN0YXRlEhEKDVNUQVRFX1VOS05PV04QABIQCgxTVEFURV9BQ1RJVkUQARIQCgxTVEFURV9QQVVTRUQQAkIQqgINTGl2ZUtpdC5Qcm90bw", [file_e2ee, file_handle, file_stats]); +export enum TrackSource { + /** + * @generated from enum value: SOURCE_UNKNOWN = 0; + */ + SOURCE_UNKNOWN = 0, + + /** + * @generated from enum value: SOURCE_CAMERA = 1; + */ + SOURCE_CAMERA = 1, + + /** + * @generated from enum value: SOURCE_MICROPHONE = 2; + */ + SOURCE_MICROPHONE = 2, + + /** + * @generated from enum value: SOURCE_SCREENSHARE = 3; + */ + SOURCE_SCREENSHARE = 3, + + /** + * @generated from enum value: SOURCE_SCREENSHARE_AUDIO = 4; + */ + SOURCE_SCREENSHARE_AUDIO = 4, +} +// Retrieve enum metadata with: proto2.getEnumType(TrackSource) +proto2.util.setEnumType(TrackSource, "livekit.proto.TrackSource", [ + { no: 0, name: "SOURCE_UNKNOWN" }, + { no: 1, name: "SOURCE_CAMERA" }, + { no: 2, name: "SOURCE_MICROPHONE" }, + { no: 3, name: "SOURCE_SCREENSHARE" }, + { no: 4, name: "SOURCE_SCREENSHARE_AUDIO" }, +]); + +/** + * @generated from enum livekit.proto.StreamState + */ +export enum StreamState { + /** + * @generated from enum value: STATE_UNKNOWN = 0; + */ + STATE_UNKNOWN = 0, + + /** + * @generated from enum value: STATE_ACTIVE = 1; + */ + STATE_ACTIVE = 1, + + /** + * @generated from enum value: STATE_PAUSED = 2; + */ + STATE_PAUSED = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(StreamState) +proto2.util.setEnumType(StreamState, "livekit.proto.StreamState", [ + { no: 0, name: "STATE_UNKNOWN" }, + { no: 1, name: "STATE_ACTIVE" }, + { no: 2, name: "STATE_PAUSED" }, +]); /** * Create a new VideoTrack from a VideoSource * * @generated from message livekit.proto.CreateVideoTrackRequest */ -export type CreateVideoTrackRequest = Message<"livekit.proto.CreateVideoTrackRequest"> & { +export class CreateVideoTrackRequest extends Message { /** * @generated from field: required string name = 1; */ - name: string; + name?: string; /** * @generated from field: required uint64 source_handle = 2; */ - sourceHandle: bigint; -}; + sourceHandle?: bigint; -/** - * Describes the message livekit.proto.CreateVideoTrackRequest. - * Use `create(CreateVideoTrackRequestSchema)` to create a new message. - */ -export const CreateVideoTrackRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CreateVideoTrackRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "source_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CreateVideoTrackRequest { + return new CreateVideoTrackRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CreateVideoTrackRequest { + return new CreateVideoTrackRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CreateVideoTrackRequest { + return new CreateVideoTrackRequest().fromJsonString(jsonString, options); + } + + static equals(a: CreateVideoTrackRequest | PlainMessage | undefined, b: CreateVideoTrackRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(CreateVideoTrackRequest, a, b); + } +} /** * @generated from message livekit.proto.CreateVideoTrackResponse */ -export type CreateVideoTrackResponse = Message<"livekit.proto.CreateVideoTrackResponse"> & { +export class CreateVideoTrackResponse extends Message { /** * @generated from field: required livekit.proto.OwnedTrack track = 1; */ track?: OwnedTrack; -}; -/** - * Describes the message livekit.proto.CreateVideoTrackResponse. - * Use `create(CreateVideoTrackResponseSchema)` to create a new message. - */ -export const CreateVideoTrackResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CreateVideoTrackResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track", kind: "message", T: OwnedTrack, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CreateVideoTrackResponse { + return new CreateVideoTrackResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CreateVideoTrackResponse { + return new CreateVideoTrackResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CreateVideoTrackResponse { + return new CreateVideoTrackResponse().fromJsonString(jsonString, options); + } + + static equals(a: CreateVideoTrackResponse | PlainMessage | undefined, b: CreateVideoTrackResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(CreateVideoTrackResponse, a, b); + } +} /** * Create a new AudioTrack from a AudioSource * * @generated from message livekit.proto.CreateAudioTrackRequest */ -export type CreateAudioTrackRequest = Message<"livekit.proto.CreateAudioTrackRequest"> & { +export class CreateAudioTrackRequest extends Message { /** * @generated from field: required string name = 1; */ - name: string; + name?: string; /** * @generated from field: required uint64 source_handle = 2; */ - sourceHandle: bigint; -}; + sourceHandle?: bigint; -/** - * Describes the message livekit.proto.CreateAudioTrackRequest. - * Use `create(CreateAudioTrackRequestSchema)` to create a new message. - */ -export const CreateAudioTrackRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 2); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CreateAudioTrackRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "source_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CreateAudioTrackRequest { + return new CreateAudioTrackRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CreateAudioTrackRequest { + return new CreateAudioTrackRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CreateAudioTrackRequest { + return new CreateAudioTrackRequest().fromJsonString(jsonString, options); + } + + static equals(a: CreateAudioTrackRequest | PlainMessage | undefined, b: CreateAudioTrackRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(CreateAudioTrackRequest, a, b); + } +} /** * @generated from message livekit.proto.CreateAudioTrackResponse */ -export type CreateAudioTrackResponse = Message<"livekit.proto.CreateAudioTrackResponse"> & { +export class CreateAudioTrackResponse extends Message { /** * @generated from field: required livekit.proto.OwnedTrack track = 1; */ track?: OwnedTrack; -}; -/** - * Describes the message livekit.proto.CreateAudioTrackResponse. - * Use `create(CreateAudioTrackResponseSchema)` to create a new message. - */ -export const CreateAudioTrackResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 3); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CreateAudioTrackResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track", kind: "message", T: OwnedTrack, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CreateAudioTrackResponse { + return new CreateAudioTrackResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CreateAudioTrackResponse { + return new CreateAudioTrackResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CreateAudioTrackResponse { + return new CreateAudioTrackResponse().fromJsonString(jsonString, options); + } + + static equals(a: CreateAudioTrackResponse | PlainMessage | undefined, b: CreateAudioTrackResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(CreateAudioTrackResponse, a, b); + } +} /** * @generated from message livekit.proto.GetStatsRequest */ -export type GetStatsRequest = Message<"livekit.proto.GetStatsRequest"> & { +export class GetStatsRequest extends Message { /** * @generated from field: required uint64 track_handle = 1; */ - trackHandle: bigint; -}; + trackHandle?: bigint; -/** - * Describes the message livekit.proto.GetStatsRequest. - * Use `create(GetStatsRequestSchema)` to create a new message. - */ -export const GetStatsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 4); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetStatsRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetStatsRequest { + return new GetStatsRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetStatsRequest { + return new GetStatsRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetStatsRequest { + return new GetStatsRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetStatsRequest | PlainMessage | undefined, b: GetStatsRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(GetStatsRequest, a, b); + } +} /** * @generated from message livekit.proto.GetStatsResponse */ -export type GetStatsResponse = Message<"livekit.proto.GetStatsResponse"> & { +export class GetStatsResponse extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; -}; + asyncId?: bigint; -/** - * Describes the message livekit.proto.GetStatsResponse. - * Use `create(GetStatsResponseSchema)` to create a new message. - */ -export const GetStatsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 5); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetStatsResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetStatsResponse { + return new GetStatsResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetStatsResponse { + return new GetStatsResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetStatsResponse { + return new GetStatsResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetStatsResponse | PlainMessage | undefined, b: GetStatsResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(GetStatsResponse, a, b); + } +} /** * @generated from message livekit.proto.GetStatsCallback */ -export type GetStatsCallback = Message<"livekit.proto.GetStatsCallback"> & { +export class GetStatsCallback extends Message { /** * @generated from field: required uint64 async_id = 1; */ - asyncId: bigint; + asyncId?: bigint; /** * @generated from field: optional string error = 2; */ - error: string; + error?: string; /** * @generated from field: repeated livekit.proto.RtcStats stats = 3; */ - stats: RtcStats[]; -}; + stats: RtcStats[] = []; -/** - * Describes the message livekit.proto.GetStatsCallback. - * Use `create(GetStatsCallbackSchema)` to create a new message. - */ -export const GetStatsCallbackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 6); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.GetStatsCallback"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "async_id", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "stats", kind: "message", T: RtcStats, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetStatsCallback { + return new GetStatsCallback().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetStatsCallback { + return new GetStatsCallback().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetStatsCallback { + return new GetStatsCallback().fromJsonString(jsonString, options); + } + + static equals(a: GetStatsCallback | PlainMessage | undefined, b: GetStatsCallback | PlainMessage | undefined): boolean { + return proto2.util.equals(GetStatsCallback, a, b); + } +} /** * @generated from message livekit.proto.TrackEvent */ -export type TrackEvent = Message<"livekit.proto.TrackEvent"> & { -}; +export class TrackEvent extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.TrackEvent. - * Use `create(TrackEventSchema)` to create a new message. - */ -export const TrackEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 7); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackEvent"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackEvent { + return new TrackEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackEvent { + return new TrackEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackEvent { + return new TrackEvent().fromJsonString(jsonString, options); + } + + static equals(a: TrackEvent | PlainMessage | undefined, b: TrackEvent | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackEvent, a, b); + } +} /** * @generated from message livekit.proto.TrackPublicationInfo */ -export type TrackPublicationInfo = Message<"livekit.proto.TrackPublicationInfo"> & { +export class TrackPublicationInfo extends Message { /** * @generated from field: required string sid = 1; */ - sid: string; + sid?: string; /** * @generated from field: required string name = 2; */ - name: string; + name?: string; /** * @generated from field: required livekit.proto.TrackKind kind = 3; */ - kind: TrackKind; + kind?: TrackKind; /** * @generated from field: required livekit.proto.TrackSource source = 4; */ - source: TrackSource; + source?: TrackSource; /** * @generated from field: required bool simulcasted = 5; */ - simulcasted: boolean; + simulcasted?: boolean; /** * @generated from field: required uint32 width = 6; */ - width: number; + width?: number; /** * @generated from field: required uint32 height = 7; */ - height: number; + height?: number; /** * @generated from field: required string mime_type = 8; */ - mimeType: string; + mimeType?: string; /** * @generated from field: required bool muted = 9; */ - muted: boolean; + muted?: boolean; /** * @generated from field: required bool remote = 10; */ - remote: boolean; + remote?: boolean; /** * @generated from field: required livekit.proto.EncryptionType encryption_type = 11; */ - encryptionType: EncryptionType; -}; - -/** - * Describes the message livekit.proto.TrackPublicationInfo. - * Use `create(TrackPublicationInfoSchema)` to create a new message. - */ -export const TrackPublicationInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 8); + encryptionType?: EncryptionType; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackPublicationInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "kind", kind: "enum", T: proto2.getEnumType(TrackKind), req: true }, + { no: 4, name: "source", kind: "enum", T: proto2.getEnumType(TrackSource), req: true }, + { no: 5, name: "simulcasted", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 6, name: "width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 7, name: "height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 8, name: "mime_type", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 9, name: "muted", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 10, name: "remote", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 11, name: "encryption_type", kind: "enum", T: proto2.getEnumType(EncryptionType), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackPublicationInfo { + return new TrackPublicationInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackPublicationInfo { + return new TrackPublicationInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackPublicationInfo { + return new TrackPublicationInfo().fromJsonString(jsonString, options); + } + + static equals(a: TrackPublicationInfo | PlainMessage | undefined, b: TrackPublicationInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackPublicationInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedTrackPublication */ -export type OwnedTrackPublication = Message<"livekit.proto.OwnedTrackPublication"> & { +export class OwnedTrackPublication extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -268,61 +541,107 @@ export type OwnedTrackPublication = Message<"livekit.proto.OwnedTrackPublication * @generated from field: required livekit.proto.TrackPublicationInfo info = 2; */ info?: TrackPublicationInfo; -}; -/** - * Describes the message livekit.proto.OwnedTrackPublication. - * Use `create(OwnedTrackPublicationSchema)` to create a new message. - */ -export const OwnedTrackPublicationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 9); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedTrackPublication"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: TrackPublicationInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedTrackPublication { + return new OwnedTrackPublication().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedTrackPublication { + return new OwnedTrackPublication().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedTrackPublication { + return new OwnedTrackPublication().fromJsonString(jsonString, options); + } + + static equals(a: OwnedTrackPublication | PlainMessage | undefined, b: OwnedTrackPublication | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedTrackPublication, a, b); + } +} /** * @generated from message livekit.proto.TrackInfo */ -export type TrackInfo = Message<"livekit.proto.TrackInfo"> & { +export class TrackInfo extends Message { /** * @generated from field: required string sid = 1; */ - sid: string; + sid?: string; /** * @generated from field: required string name = 2; */ - name: string; + name?: string; /** * @generated from field: required livekit.proto.TrackKind kind = 3; */ - kind: TrackKind; + kind?: TrackKind; /** * @generated from field: required livekit.proto.StreamState stream_state = 4; */ - streamState: StreamState; + streamState?: StreamState; /** * @generated from field: required bool muted = 5; */ - muted: boolean; + muted?: boolean; /** * @generated from field: required bool remote = 6; */ - remote: boolean; -}; - -/** - * Describes the message livekit.proto.TrackInfo. - * Use `create(TrackInfoSchema)` to create a new message. - */ -export const TrackInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 10); + remote?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.TrackInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "sid", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */, req: true }, + { no: 3, name: "kind", kind: "enum", T: proto2.getEnumType(TrackKind), req: true }, + { no: 4, name: "stream_state", kind: "enum", T: proto2.getEnumType(StreamState), req: true }, + { no: 5, name: "muted", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + { no: 6, name: "remote", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): TrackInfo { + return new TrackInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): TrackInfo { + return new TrackInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): TrackInfo { + return new TrackInfo().fromJsonString(jsonString, options); + } + + static equals(a: TrackInfo | PlainMessage | undefined, b: TrackInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(TrackInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedTrack */ -export type OwnedTrack = Message<"livekit.proto.OwnedTrack"> & { +export class OwnedTrack extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -332,182 +651,197 @@ export type OwnedTrack = Message<"livekit.proto.OwnedTrack"> & { * @generated from field: required livekit.proto.TrackInfo info = 2; */ info?: TrackInfo; -}; -/** - * Describes the message livekit.proto.OwnedTrack. - * Use `create(OwnedTrackSchema)` to create a new message. - */ -export const OwnedTrackSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 11); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedTrack"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: TrackInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedTrack { + return new OwnedTrack().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedTrack { + return new OwnedTrack().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedTrack { + return new OwnedTrack().fromJsonString(jsonString, options); + } + + static equals(a: OwnedTrack | PlainMessage | undefined, b: OwnedTrack | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedTrack, a, b); + } +} /** * Mute/UnMute a track * * @generated from message livekit.proto.LocalTrackMuteRequest */ -export type LocalTrackMuteRequest = Message<"livekit.proto.LocalTrackMuteRequest"> & { +export class LocalTrackMuteRequest extends Message { /** * @generated from field: required uint64 track_handle = 1; */ - trackHandle: bigint; + trackHandle?: bigint; /** * @generated from field: required bool mute = 2; */ - mute: boolean; -}; + mute?: boolean; -/** - * Describes the message livekit.proto.LocalTrackMuteRequest. - * Use `create(LocalTrackMuteRequestSchema)` to create a new message. - */ -export const LocalTrackMuteRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 12); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.LocalTrackMuteRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "mute", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LocalTrackMuteRequest { + return new LocalTrackMuteRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LocalTrackMuteRequest { + return new LocalTrackMuteRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LocalTrackMuteRequest { + return new LocalTrackMuteRequest().fromJsonString(jsonString, options); + } + + static equals(a: LocalTrackMuteRequest | PlainMessage | undefined, b: LocalTrackMuteRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(LocalTrackMuteRequest, a, b); + } +} /** * @generated from message livekit.proto.LocalTrackMuteResponse */ -export type LocalTrackMuteResponse = Message<"livekit.proto.LocalTrackMuteResponse"> & { +export class LocalTrackMuteResponse extends Message { /** * @generated from field: required bool muted = 1; */ - muted: boolean; -}; + muted?: boolean; -/** - * Describes the message livekit.proto.LocalTrackMuteResponse. - * Use `create(LocalTrackMuteResponseSchema)` to create a new message. - */ -export const LocalTrackMuteResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 13); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.LocalTrackMuteResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "muted", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): LocalTrackMuteResponse { + return new LocalTrackMuteResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): LocalTrackMuteResponse { + return new LocalTrackMuteResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): LocalTrackMuteResponse { + return new LocalTrackMuteResponse().fromJsonString(jsonString, options); + } + + static equals(a: LocalTrackMuteResponse | PlainMessage | undefined, b: LocalTrackMuteResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(LocalTrackMuteResponse, a, b); + } +} /** * Enable/Disable a remote track * * @generated from message livekit.proto.EnableRemoteTrackRequest */ -export type EnableRemoteTrackRequest = Message<"livekit.proto.EnableRemoteTrackRequest"> & { +export class EnableRemoteTrackRequest extends Message { /** * @generated from field: required uint64 track_handle = 1; */ - trackHandle: bigint; + trackHandle?: bigint; /** * @generated from field: required bool enabled = 2; */ - enabled: boolean; -}; + enabled?: boolean; -/** - * Describes the message livekit.proto.EnableRemoteTrackRequest. - * Use `create(EnableRemoteTrackRequestSchema)` to create a new message. - */ -export const EnableRemoteTrackRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 14); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * @generated from message livekit.proto.EnableRemoteTrackResponse - */ -export type EnableRemoteTrackResponse = Message<"livekit.proto.EnableRemoteTrackResponse"> & { - /** - * @generated from field: required bool enabled = 1; - */ - enabled: boolean; -}; + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.EnableRemoteTrackRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); -/** - * Describes the message livekit.proto.EnableRemoteTrackResponse. - * Use `create(EnableRemoteTrackResponseSchema)` to create a new message. - */ -export const EnableRemoteTrackResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track, 15); + static fromBinary(bytes: Uint8Array, options?: Partial): EnableRemoteTrackRequest { + return new EnableRemoteTrackRequest().fromBinary(bytes, options); + } -/** - * @generated from enum livekit.proto.TrackKind - */ -export enum TrackKind { - /** - * @generated from enum value: KIND_UNKNOWN = 0; - */ - KIND_UNKNOWN = 0, + static fromJson(jsonValue: JsonValue, options?: Partial): EnableRemoteTrackRequest { + return new EnableRemoteTrackRequest().fromJson(jsonValue, options); + } - /** - * @generated from enum value: KIND_AUDIO = 1; - */ - KIND_AUDIO = 1, + static fromJsonString(jsonString: string, options?: Partial): EnableRemoteTrackRequest { + return new EnableRemoteTrackRequest().fromJsonString(jsonString, options); + } - /** - * @generated from enum value: KIND_VIDEO = 2; - */ - KIND_VIDEO = 2, + static equals(a: EnableRemoteTrackRequest | PlainMessage | undefined, b: EnableRemoteTrackRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(EnableRemoteTrackRequest, a, b); + } } /** - * Describes the enum livekit.proto.TrackKind. - */ -export const TrackKindSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_track, 0); - -/** - * @generated from enum livekit.proto.TrackSource + * @generated from message livekit.proto.EnableRemoteTrackResponse */ -export enum TrackSource { +export class EnableRemoteTrackResponse extends Message { /** - * @generated from enum value: SOURCE_UNKNOWN = 0; - */ - SOURCE_UNKNOWN = 0, - - /** - * @generated from enum value: SOURCE_CAMERA = 1; - */ - SOURCE_CAMERA = 1, - - /** - * @generated from enum value: SOURCE_MICROPHONE = 2; + * @generated from field: required bool enabled = 1; */ - SOURCE_MICROPHONE = 2, + enabled?: boolean; - /** - * @generated from enum value: SOURCE_SCREENSHARE = 3; - */ - SOURCE_SCREENSHARE = 3, + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } - /** - * @generated from enum value: SOURCE_SCREENSHARE_AUDIO = 4; - */ - SOURCE_SCREENSHARE_AUDIO = 4, -} + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.EnableRemoteTrackResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); -/** - * Describes the enum livekit.proto.TrackSource. - */ -export const TrackSourceSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_track, 1); + static fromBinary(bytes: Uint8Array, options?: Partial): EnableRemoteTrackResponse { + return new EnableRemoteTrackResponse().fromBinary(bytes, options); + } -/** - * @generated from enum livekit.proto.StreamState - */ -export enum StreamState { - /** - * @generated from enum value: STATE_UNKNOWN = 0; - */ - STATE_UNKNOWN = 0, + static fromJson(jsonValue: JsonValue, options?: Partial): EnableRemoteTrackResponse { + return new EnableRemoteTrackResponse().fromJson(jsonValue, options); + } - /** - * @generated from enum value: STATE_ACTIVE = 1; - */ - STATE_ACTIVE = 1, + static fromJsonString(jsonString: string, options?: Partial): EnableRemoteTrackResponse { + return new EnableRemoteTrackResponse().fromJsonString(jsonString, options); + } - /** - * @generated from enum value: STATE_PAUSED = 2; - */ - STATE_PAUSED = 2, + static equals(a: EnableRemoteTrackResponse | PlainMessage | undefined, b: EnableRemoteTrackResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(EnableRemoteTrackResponse, a, b); + } } -/** - * Describes the enum livekit.proto.StreamState. - */ -export const StreamStateSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_track, 2); - diff --git a/packages/livekit-rtc/src/proto/track_publication_pb.ts b/packages/livekit-rtc/src/proto/track_publication_pb.ts index 85ed5478..2e32c215 100644 --- a/packages/livekit-rtc/src/proto/track_publication_pb.ts +++ b/packages/livekit-rtc/src/proto/track_publication_pb.ts @@ -12,96 +12,169 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file track_publication.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { Message } from "@bufbuild/protobuf"; - -/** - * Describes the file track_publication.proto. - */ -export const file_track_publication: GenFile = /*@__PURE__*/ - fileDesc("Chd0cmFja19wdWJsaWNhdGlvbi5wcm90bxINbGl2ZWtpdC5wcm90byJYCiNFbmFibGVSZW1vdGVUcmFja1B1YmxpY2F0aW9uUmVxdWVzdBIgChh0cmFja19wdWJsaWNhdGlvbl9oYW5kbGUYASACKAQSDwoHZW5hYmxlZBgCIAIoCCImCiRFbmFibGVSZW1vdGVUcmFja1B1YmxpY2F0aW9uUmVzcG9uc2UibwosVXBkYXRlUmVtb3RlVHJhY2tQdWJsaWNhdGlvbkRpbWVuc2lvblJlcXVlc3QSIAoYdHJhY2tfcHVibGljYXRpb25faGFuZGxlGAEgAigEEg0KBXdpZHRoGAIgAigNEg4KBmhlaWdodBgDIAIoDSIvCi1VcGRhdGVSZW1vdGVUcmFja1B1YmxpY2F0aW9uRGltZW5zaW9uUmVzcG9uc2VCEKoCDUxpdmVLaXQuUHJvdG8"); +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; /** * Enable/Disable a remote track publication * * @generated from message livekit.proto.EnableRemoteTrackPublicationRequest */ -export type EnableRemoteTrackPublicationRequest = Message<"livekit.proto.EnableRemoteTrackPublicationRequest"> & { +export class EnableRemoteTrackPublicationRequest extends Message { /** * @generated from field: required uint64 track_publication_handle = 1; */ - trackPublicationHandle: bigint; + trackPublicationHandle?: bigint; /** * @generated from field: required bool enabled = 2; */ - enabled: boolean; -}; + enabled?: boolean; -/** - * Describes the message livekit.proto.EnableRemoteTrackPublicationRequest. - * Use `create(EnableRemoteTrackPublicationRequestSchema)` to create a new message. - */ -export const EnableRemoteTrackPublicationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track_publication, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.EnableRemoteTrackPublicationRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_publication_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): EnableRemoteTrackPublicationRequest { + return new EnableRemoteTrackPublicationRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): EnableRemoteTrackPublicationRequest { + return new EnableRemoteTrackPublicationRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): EnableRemoteTrackPublicationRequest { + return new EnableRemoteTrackPublicationRequest().fromJsonString(jsonString, options); + } + + static equals(a: EnableRemoteTrackPublicationRequest | PlainMessage | undefined, b: EnableRemoteTrackPublicationRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(EnableRemoteTrackPublicationRequest, a, b); + } +} /** * @generated from message livekit.proto.EnableRemoteTrackPublicationResponse */ -export type EnableRemoteTrackPublicationResponse = Message<"livekit.proto.EnableRemoteTrackPublicationResponse"> & { -}; +export class EnableRemoteTrackPublicationResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.EnableRemoteTrackPublicationResponse. - * Use `create(EnableRemoteTrackPublicationResponseSchema)` to create a new message. - */ -export const EnableRemoteTrackPublicationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track_publication, 1); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.EnableRemoteTrackPublicationResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): EnableRemoteTrackPublicationResponse { + return new EnableRemoteTrackPublicationResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): EnableRemoteTrackPublicationResponse { + return new EnableRemoteTrackPublicationResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): EnableRemoteTrackPublicationResponse { + return new EnableRemoteTrackPublicationResponse().fromJsonString(jsonString, options); + } + + static equals(a: EnableRemoteTrackPublicationResponse | PlainMessage | undefined, b: EnableRemoteTrackPublicationResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(EnableRemoteTrackPublicationResponse, a, b); + } +} /** * update a remote track publication dimension * * @generated from message livekit.proto.UpdateRemoteTrackPublicationDimensionRequest */ -export type UpdateRemoteTrackPublicationDimensionRequest = Message<"livekit.proto.UpdateRemoteTrackPublicationDimensionRequest"> & { +export class UpdateRemoteTrackPublicationDimensionRequest extends Message { /** * @generated from field: required uint64 track_publication_handle = 1; */ - trackPublicationHandle: bigint; + trackPublicationHandle?: bigint; /** * @generated from field: required uint32 width = 2; */ - width: number; + width?: number; /** * @generated from field: required uint32 height = 3; */ - height: number; -}; + height?: number; -/** - * Describes the message livekit.proto.UpdateRemoteTrackPublicationDimensionRequest. - * Use `create(UpdateRemoteTrackPublicationDimensionRequestSchema)` to create a new message. - */ -export const UpdateRemoteTrackPublicationDimensionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track_publication, 2); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UpdateRemoteTrackPublicationDimensionRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_publication_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateRemoteTrackPublicationDimensionRequest { + return new UpdateRemoteTrackPublicationDimensionRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateRemoteTrackPublicationDimensionRequest { + return new UpdateRemoteTrackPublicationDimensionRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateRemoteTrackPublicationDimensionRequest { + return new UpdateRemoteTrackPublicationDimensionRequest().fromJsonString(jsonString, options); + } + + static equals(a: UpdateRemoteTrackPublicationDimensionRequest | PlainMessage | undefined, b: UpdateRemoteTrackPublicationDimensionRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(UpdateRemoteTrackPublicationDimensionRequest, a, b); + } +} /** * @generated from message livekit.proto.UpdateRemoteTrackPublicationDimensionResponse */ -export type UpdateRemoteTrackPublicationDimensionResponse = Message<"livekit.proto.UpdateRemoteTrackPublicationDimensionResponse"> & { -}; +export class UpdateRemoteTrackPublicationDimensionResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * Describes the message livekit.proto.UpdateRemoteTrackPublicationDimensionResponse. - * Use `create(UpdateRemoteTrackPublicationDimensionResponseSchema)` to create a new message. - */ -export const UpdateRemoteTrackPublicationDimensionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_track_publication, 3); + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.UpdateRemoteTrackPublicationDimensionResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UpdateRemoteTrackPublicationDimensionResponse { + return new UpdateRemoteTrackPublicationDimensionResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UpdateRemoteTrackPublicationDimensionResponse { + return new UpdateRemoteTrackPublicationDimensionResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UpdateRemoteTrackPublicationDimensionResponse { + return new UpdateRemoteTrackPublicationDimensionResponse().fromJsonString(jsonString, options); + } + + static equals(a: UpdateRemoteTrackPublicationDimensionResponse | PlainMessage | undefined, b: UpdateRemoteTrackPublicationDimensionResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(UpdateRemoteTrackPublicationDimensionResponse, a, b); + } +} diff --git a/packages/livekit-rtc/src/proto/video_frame_pb.ts b/packages/livekit-rtc/src/proto/video_frame_pb.ts index 50d71d5b..95279f63 100644 --- a/packages/livekit-rtc/src/proto/video_frame_pb.ts +++ b/packages/livekit-rtc/src/proto/video_frame_pb.ts @@ -12,23 +12,193 @@ // See the License for the specific language governing permissions and // limitations under the License. -// @generated by protoc-gen-es v2.2.0 with parameter "target=ts,import_extension=js" +// @generated by protoc-gen-es v1.10.0 with parameter "target=ts,import_extension=js" // @generated from file video_frame.proto (package livekit.proto, syntax proto2) /* eslint-disable */ +// @ts-nocheck -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { FfiOwnedHandle } from "./handle_pb.js"; -import { file_handle } from "./handle_pb.js"; -import type { TrackSource } from "./track_pb.js"; -import { file_track } from "./track_pb.js"; -import type { Message } from "@bufbuild/protobuf"; +import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; +import { Message, proto2 } from "@bufbuild/protobuf"; +import { TrackSource } from "./track_pbjs"; +import { FfiOwnedHandle } from "./handle_pbjs"; /** - * Describes the file video_frame.proto. + * @generated from enum livekit.proto.VideoCodec */ -export const file_video_frame: GenFile = /*@__PURE__*/ - fileDesc("ChF2aWRlb19mcmFtZS5wcm90bxINbGl2ZWtpdC5wcm90byKlAQoVTmV3VmlkZW9TdHJlYW1SZXF1ZXN0EhQKDHRyYWNrX2hhbmRsZRgBIAIoBBIsCgR0eXBlGAIgAigOMh4ubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbVR5cGUSLgoGZm9ybWF0GAMgASgOMh4ubGl2ZWtpdC5wcm90by5WaWRlb0J1ZmZlclR5cGUSGAoQbm9ybWFsaXplX3N0cmlkZRgEIAEoCCJJChZOZXdWaWRlb1N0cmVhbVJlc3BvbnNlEi8KBnN0cmVhbRgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRWaWRlb1N0cmVhbSLpAQohVmlkZW9TdHJlYW1Gcm9tUGFydGljaXBhbnRSZXF1ZXN0EhoKEnBhcnRpY2lwYW50X2hhbmRsZRgBIAIoBBIsCgR0eXBlGAIgAigOMh4ubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbVR5cGUSMAoMdHJhY2tfc291cmNlGAMgAigOMhoubGl2ZWtpdC5wcm90by5UcmFja1NvdXJjZRIuCgZmb3JtYXQYBCABKA4yHi5saXZla2l0LnByb3RvLlZpZGVvQnVmZmVyVHlwZRIYChBub3JtYWxpemVfc3RyaWRlGAUgASgIIlUKIlZpZGVvU3RyZWFtRnJvbVBhcnRpY2lwYW50UmVzcG9uc2USLwoGc3RyZWFtGAEgAigLMh8ubGl2ZWtpdC5wcm90by5Pd25lZFZpZGVvU3RyZWFtIn8KFU5ld1ZpZGVvU291cmNlUmVxdWVzdBIsCgR0eXBlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5WaWRlb1NvdXJjZVR5cGUSOAoKcmVzb2x1dGlvbhgCIAIoCzIkLmxpdmVraXQucHJvdG8uVmlkZW9Tb3VyY2VSZXNvbHV0aW9uIkkKFk5ld1ZpZGVvU291cmNlUmVzcG9uc2USLwoGc291cmNlGAEgAigLMh8ubGl2ZWtpdC5wcm90by5Pd25lZFZpZGVvU291cmNlIqcBChhDYXB0dXJlVmlkZW9GcmFtZVJlcXVlc3QSFQoNc291cmNlX2hhbmRsZRgBIAIoBBIuCgZidWZmZXIYAiACKAsyHi5saXZla2l0LnByb3RvLlZpZGVvQnVmZmVySW5mbxIUCgx0aW1lc3RhbXBfdXMYAyACKAMSLgoIcm90YXRpb24YBCACKA4yHC5saXZla2l0LnByb3RvLlZpZGVvUm90YXRpb24iGwoZQ2FwdHVyZVZpZGVvRnJhbWVSZXNwb25zZSKHAQoTVmlkZW9Db252ZXJ0UmVxdWVzdBIOCgZmbGlwX3kYASABKAgSLgoGYnVmZmVyGAIgAigLMh4ubGl2ZWtpdC5wcm90by5WaWRlb0J1ZmZlckluZm8SMAoIZHN0X3R5cGUYAyACKA4yHi5saXZla2l0LnByb3RvLlZpZGVvQnVmZmVyVHlwZSJlChRWaWRlb0NvbnZlcnRSZXNwb25zZRIPCgVlcnJvchgBIAEoCUgAEjEKBmJ1ZmZlchgCIAEoCzIfLmxpdmVraXQucHJvdG8uT3duZWRWaWRlb0J1ZmZlckgAQgkKB21lc3NhZ2UiRAoPVmlkZW9SZXNvbHV0aW9uEg0KBXdpZHRoGAEgAigNEg4KBmhlaWdodBgCIAIoDRISCgpmcmFtZV9yYXRlGAMgAigBIoMCCg9WaWRlb0J1ZmZlckluZm8SLAoEdHlwZRgBIAIoDjIeLmxpdmVraXQucHJvdG8uVmlkZW9CdWZmZXJUeXBlEg0KBXdpZHRoGAIgAigNEg4KBmhlaWdodBgDIAIoDRIQCghkYXRhX3B0chgEIAIoBBIOCgZzdHJpZGUYBiACKA0SQAoKY29tcG9uZW50cxgHIAMoCzIsLmxpdmVraXQucHJvdG8uVmlkZW9CdWZmZXJJbmZvLkNvbXBvbmVudEluZm8aPwoNQ29tcG9uZW50SW5mbxIQCghkYXRhX3B0chgBIAIoBBIOCgZzdHJpZGUYAiACKA0SDAoEc2l6ZRgDIAIoDSJvChBPd25lZFZpZGVvQnVmZmVyEi0KBmhhbmRsZRgBIAIoCzIdLmxpdmVraXQucHJvdG8uRmZpT3duZWRIYW5kbGUSLAoEaW5mbxgCIAIoCzIeLmxpdmVraXQucHJvdG8uVmlkZW9CdWZmZXJJbmZvIj8KD1ZpZGVvU3RyZWFtSW5mbxIsCgR0eXBlGAEgAigOMh4ubGl2ZWtpdC5wcm90by5WaWRlb1N0cmVhbVR5cGUibwoQT3duZWRWaWRlb1N0cmVhbRItCgZoYW5kbGUYASACKAsyHS5saXZla2l0LnByb3RvLkZmaU93bmVkSGFuZGxlEiwKBGluZm8YAiACKAsyHi5saXZla2l0LnByb3RvLlZpZGVvU3RyZWFtSW5mbyKfAQoQVmlkZW9TdHJlYW1FdmVudBIVCg1zdHJlYW1faGFuZGxlGAEgAigEEjsKDmZyYW1lX3JlY2VpdmVkGAIgASgLMiEubGl2ZWtpdC5wcm90by5WaWRlb0ZyYW1lUmVjZWl2ZWRIABIsCgNlb3MYAyABKAsyHS5saXZla2l0LnByb3RvLlZpZGVvU3RyZWFtRU9TSABCCQoHbWVzc2FnZSKLAQoSVmlkZW9GcmFtZVJlY2VpdmVkEi8KBmJ1ZmZlchgBIAIoCzIfLmxpdmVraXQucHJvdG8uT3duZWRWaWRlb0J1ZmZlchIUCgx0aW1lc3RhbXBfdXMYAiACKAMSLgoIcm90YXRpb24YAyACKA4yHC5saXZla2l0LnByb3RvLlZpZGVvUm90YXRpb24iEAoOVmlkZW9TdHJlYW1FT1MiNgoVVmlkZW9Tb3VyY2VSZXNvbHV0aW9uEg0KBXdpZHRoGAEgAigNEg4KBmhlaWdodBgCIAIoDSI/Cg9WaWRlb1NvdXJjZUluZm8SLAoEdHlwZRgBIAIoDjIeLmxpdmVraXQucHJvdG8uVmlkZW9Tb3VyY2VUeXBlIm8KEE93bmVkVmlkZW9Tb3VyY2USLQoGaGFuZGxlGAEgAigLMh0ubGl2ZWtpdC5wcm90by5GZmlPd25lZEhhbmRsZRIsCgRpbmZvGAIgAigLMh4ubGl2ZWtpdC5wcm90by5WaWRlb1NvdXJjZUluZm8qMQoKVmlkZW9Db2RlYxIHCgNWUDgQABIICgRIMjY0EAESBwoDQVYxEAISBwoDVlA5EAMqbAoNVmlkZW9Sb3RhdGlvbhIUChBWSURFT19ST1RBVElPTl8wEAASFQoRVklERU9fUk9UQVRJT05fOTAQARIWChJWSURFT19ST1RBVElPTl8xODAQAhIWChJWSURFT19ST1RBVElPTl8yNzAQAyqBAQoPVmlkZW9CdWZmZXJUeXBlEggKBFJHQkEQABIICgRBQkdSEAESCAoEQVJHQhACEggKBEJHUkEQAxIJCgVSR0IyNBAEEggKBEk0MjAQBRIJCgVJNDIwQRAGEggKBEk0MjIQBxIICgRJNDQ0EAgSCAoESTAxMBAJEggKBE5WMTIQCipZCg9WaWRlb1N0cmVhbVR5cGUSFwoTVklERU9fU1RSRUFNX05BVElWRRAAEhYKElZJREVPX1NUUkVBTV9XRUJHTBABEhUKEVZJREVPX1NUUkVBTV9IVE1MEAIqKgoPVmlkZW9Tb3VyY2VUeXBlEhcKE1ZJREVPX1NPVVJDRV9OQVRJVkUQAEIQqgINTGl2ZUtpdC5Qcm90bw", [file_handle, file_track]); +export enum VideoCodec { + /** + * @generated from enum value: VP8 = 0; + */ + VP8 = 0, + + /** + * @generated from enum value: H264 = 1; + */ + H264 = 1, + + /** + * @generated from enum value: AV1 = 2; + */ + AV1 = 2, + + /** + * @generated from enum value: VP9 = 3; + */ + VP9 = 3, +} +// Retrieve enum metadata with: proto2.getEnumType(VideoCodec) +proto2.util.setEnumType(VideoCodec, "livekit.proto.VideoCodec", [ + { no: 0, name: "VP8" }, + { no: 1, name: "H264" }, + { no: 2, name: "AV1" }, + { no: 3, name: "VP9" }, +]); + +/** + * @generated from enum livekit.proto.VideoRotation + */ +export enum VideoRotation { + /** + * @generated from enum value: VIDEO_ROTATION_0 = 0; + */ + VIDEO_ROTATION_0 = 0, + + /** + * @generated from enum value: VIDEO_ROTATION_90 = 1; + */ + VIDEO_ROTATION_90 = 1, + + /** + * @generated from enum value: VIDEO_ROTATION_180 = 2; + */ + VIDEO_ROTATION_180 = 2, + + /** + * @generated from enum value: VIDEO_ROTATION_270 = 3; + */ + VIDEO_ROTATION_270 = 3, +} +// Retrieve enum metadata with: proto2.getEnumType(VideoRotation) +proto2.util.setEnumType(VideoRotation, "livekit.proto.VideoRotation", [ + { no: 0, name: "VIDEO_ROTATION_0" }, + { no: 1, name: "VIDEO_ROTATION_90" }, + { no: 2, name: "VIDEO_ROTATION_180" }, + { no: 3, name: "VIDEO_ROTATION_270" }, +]); + +/** + * @generated from enum livekit.proto.VideoBufferType + */ +export enum VideoBufferType { + /** + * @generated from enum value: RGBA = 0; + */ + RGBA = 0, + + /** + * @generated from enum value: ABGR = 1; + */ + ABGR = 1, + + /** + * @generated from enum value: ARGB = 2; + */ + ARGB = 2, + + /** + * @generated from enum value: BGRA = 3; + */ + BGRA = 3, + + /** + * @generated from enum value: RGB24 = 4; + */ + RGB24 = 4, + + /** + * @generated from enum value: I420 = 5; + */ + I420 = 5, + + /** + * @generated from enum value: I420A = 6; + */ + I420A = 6, + + /** + * @generated from enum value: I422 = 7; + */ + I422 = 7, + + /** + * @generated from enum value: I444 = 8; + */ + I444 = 8, + + /** + * @generated from enum value: I010 = 9; + */ + I010 = 9, + + /** + * @generated from enum value: NV12 = 10; + */ + NV12 = 10, +} +// Retrieve enum metadata with: proto2.getEnumType(VideoBufferType) +proto2.util.setEnumType(VideoBufferType, "livekit.proto.VideoBufferType", [ + { no: 0, name: "RGBA" }, + { no: 1, name: "ABGR" }, + { no: 2, name: "ARGB" }, + { no: 3, name: "BGRA" }, + { no: 4, name: "RGB24" }, + { no: 5, name: "I420" }, + { no: 6, name: "I420A" }, + { no: 7, name: "I422" }, + { no: 8, name: "I444" }, + { no: 9, name: "I010" }, + { no: 10, name: "NV12" }, +]); + +/** + * @generated from enum livekit.proto.VideoStreamType + */ +export enum VideoStreamType { + /** + * @generated from enum value: VIDEO_STREAM_NATIVE = 0; + */ + VIDEO_STREAM_NATIVE = 0, + + /** + * @generated from enum value: VIDEO_STREAM_WEBGL = 1; + */ + VIDEO_STREAM_WEBGL = 1, + + /** + * @generated from enum value: VIDEO_STREAM_HTML = 2; + */ + VIDEO_STREAM_HTML = 2, +} +// Retrieve enum metadata with: proto2.getEnumType(VideoStreamType) +proto2.util.setEnumType(VideoStreamType, "livekit.proto.VideoStreamType", [ + { no: 0, name: "VIDEO_STREAM_NATIVE" }, + { no: 1, name: "VIDEO_STREAM_WEBGL" }, + { no: 2, name: "VIDEO_STREAM_HTML" }, +]); + +/** + * @generated from enum livekit.proto.VideoSourceType + */ +export enum VideoSourceType { + /** + * @generated from enum value: VIDEO_SOURCE_NATIVE = 0; + */ + VIDEO_SOURCE_NATIVE = 0, +} +// Retrieve enum metadata with: proto2.getEnumType(VideoSourceType) +proto2.util.setEnumType(VideoSourceType, "livekit.proto.VideoSourceType", [ + { no: 0, name: "VIDEO_SOURCE_NATIVE" }, +]); /** * Create a new VideoStream @@ -36,111 +206,198 @@ export const file_video_frame: GenFile = /*@__PURE__*/ * * @generated from message livekit.proto.NewVideoStreamRequest */ -export type NewVideoStreamRequest = Message<"livekit.proto.NewVideoStreamRequest"> & { +export class NewVideoStreamRequest extends Message { /** * @generated from field: required uint64 track_handle = 1; */ - trackHandle: bigint; + trackHandle?: bigint; /** * @generated from field: required livekit.proto.VideoStreamType type = 2; */ - type: VideoStreamType; + type?: VideoStreamType; /** * Get the frame on a specific format * * @generated from field: optional livekit.proto.VideoBufferType format = 3; */ - format: VideoBufferType; + format?: VideoBufferType; /** * if true, stride will be set to width/chroma_width * * @generated from field: optional bool normalize_stride = 4; */ - normalizeStride: boolean; -}; - -/** - * Describes the message livekit.proto.NewVideoStreamRequest. - * Use `create(NewVideoStreamRequestSchema)` to create a new message. - */ -export const NewVideoStreamRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 0); + normalizeStride?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewVideoStreamRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "track_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "type", kind: "enum", T: proto2.getEnumType(VideoStreamType), req: true }, + { no: 3, name: "format", kind: "enum", T: proto2.getEnumType(VideoBufferType), opt: true }, + { no: 4, name: "normalize_stride", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewVideoStreamRequest { + return new NewVideoStreamRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewVideoStreamRequest { + return new NewVideoStreamRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewVideoStreamRequest { + return new NewVideoStreamRequest().fromJsonString(jsonString, options); + } + + static equals(a: NewVideoStreamRequest | PlainMessage | undefined, b: NewVideoStreamRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(NewVideoStreamRequest, a, b); + } +} /** * @generated from message livekit.proto.NewVideoStreamResponse */ -export type NewVideoStreamResponse = Message<"livekit.proto.NewVideoStreamResponse"> & { +export class NewVideoStreamResponse extends Message { /** * @generated from field: required livekit.proto.OwnedVideoStream stream = 1; */ stream?: OwnedVideoStream; -}; -/** - * Describes the message livekit.proto.NewVideoStreamResponse. - * Use `create(NewVideoStreamResponseSchema)` to create a new message. - */ -export const NewVideoStreamResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 1); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewVideoStreamResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream", kind: "message", T: OwnedVideoStream, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewVideoStreamResponse { + return new NewVideoStreamResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewVideoStreamResponse { + return new NewVideoStreamResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewVideoStreamResponse { + return new NewVideoStreamResponse().fromJsonString(jsonString, options); + } + + static equals(a: NewVideoStreamResponse | PlainMessage | undefined, b: NewVideoStreamResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(NewVideoStreamResponse, a, b); + } +} /** * Request a video stream from a participant * * @generated from message livekit.proto.VideoStreamFromParticipantRequest */ -export type VideoStreamFromParticipantRequest = Message<"livekit.proto.VideoStreamFromParticipantRequest"> & { +export class VideoStreamFromParticipantRequest extends Message { /** * @generated from field: required uint64 participant_handle = 1; */ - participantHandle: bigint; + participantHandle?: bigint; /** * @generated from field: required livekit.proto.VideoStreamType type = 2; */ - type: VideoStreamType; + type?: VideoStreamType; /** * @generated from field: required livekit.proto.TrackSource track_source = 3; */ - trackSource: TrackSource; + trackSource?: TrackSource; /** * @generated from field: optional livekit.proto.VideoBufferType format = 4; */ - format: VideoBufferType; + format?: VideoBufferType; /** * @generated from field: optional bool normalize_stride = 5; */ - normalizeStride: boolean; -}; - -/** - * Describes the message livekit.proto.VideoStreamFromParticipantRequest. - * Use `create(VideoStreamFromParticipantRequestSchema)` to create a new message. - */ -export const VideoStreamFromParticipantRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 2); + normalizeStride?: boolean; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoStreamFromParticipantRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "participant_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "type", kind: "enum", T: proto2.getEnumType(VideoStreamType), req: true }, + { no: 3, name: "track_source", kind: "enum", T: proto2.getEnumType(TrackSource), req: true }, + { no: 4, name: "format", kind: "enum", T: proto2.getEnumType(VideoBufferType), opt: true }, + { no: 5, name: "normalize_stride", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoStreamFromParticipantRequest { + return new VideoStreamFromParticipantRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoStreamFromParticipantRequest { + return new VideoStreamFromParticipantRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoStreamFromParticipantRequest { + return new VideoStreamFromParticipantRequest().fromJsonString(jsonString, options); + } + + static equals(a: VideoStreamFromParticipantRequest | PlainMessage | undefined, b: VideoStreamFromParticipantRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoStreamFromParticipantRequest, a, b); + } +} /** * @generated from message livekit.proto.VideoStreamFromParticipantResponse */ -export type VideoStreamFromParticipantResponse = Message<"livekit.proto.VideoStreamFromParticipantResponse"> & { +export class VideoStreamFromParticipantResponse extends Message { /** * @generated from field: required livekit.proto.OwnedVideoStream stream = 1; */ stream?: OwnedVideoStream; -}; -/** - * Describes the message livekit.proto.VideoStreamFromParticipantResponse. - * Use `create(VideoStreamFromParticipantResponseSchema)` to create a new message. - */ -export const VideoStreamFromParticipantResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 3); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoStreamFromParticipantResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream", kind: "message", T: OwnedVideoStream, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoStreamFromParticipantResponse { + return new VideoStreamFromParticipantResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoStreamFromParticipantResponse { + return new VideoStreamFromParticipantResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoStreamFromParticipantResponse { + return new VideoStreamFromParticipantResponse().fromJsonString(jsonString, options); + } + + static equals(a: VideoStreamFromParticipantResponse | PlainMessage | undefined, b: VideoStreamFromParticipantResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoStreamFromParticipantResponse, a, b); + } +} /** * Create a new VideoSource @@ -148,11 +405,11 @@ export const VideoStreamFromParticipantResponseSchema: GenMessage & { +export class NewVideoSourceRequest extends Message { /** * @generated from field: required livekit.proto.VideoSourceType type = 1; */ - type: VideoSourceType; + type?: VideoSourceType; /** * Used to determine which encodings to use + simulcast layers @@ -161,42 +418,83 @@ export type NewVideoSourceRequest = Message<"livekit.proto.NewVideoSourceRequest * @generated from field: required livekit.proto.VideoSourceResolution resolution = 2; */ resolution?: VideoSourceResolution; -}; -/** - * Describes the message livekit.proto.NewVideoSourceRequest. - * Use `create(NewVideoSourceRequestSchema)` to create a new message. - */ -export const NewVideoSourceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 4); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewVideoSourceRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "type", kind: "enum", T: proto2.getEnumType(VideoSourceType), req: true }, + { no: 2, name: "resolution", kind: "message", T: VideoSourceResolution, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewVideoSourceRequest { + return new NewVideoSourceRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewVideoSourceRequest { + return new NewVideoSourceRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewVideoSourceRequest { + return new NewVideoSourceRequest().fromJsonString(jsonString, options); + } + + static equals(a: NewVideoSourceRequest | PlainMessage | undefined, b: NewVideoSourceRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(NewVideoSourceRequest, a, b); + } +} /** * @generated from message livekit.proto.NewVideoSourceResponse */ -export type NewVideoSourceResponse = Message<"livekit.proto.NewVideoSourceResponse"> & { +export class NewVideoSourceResponse extends Message { /** * @generated from field: required livekit.proto.OwnedVideoSource source = 1; */ source?: OwnedVideoSource; -}; -/** - * Describes the message livekit.proto.NewVideoSourceResponse. - * Use `create(NewVideoSourceResponseSchema)` to create a new message. - */ -export const NewVideoSourceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 5); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.NewVideoSourceResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "source", kind: "message", T: OwnedVideoSource, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): NewVideoSourceResponse { + return new NewVideoSourceResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): NewVideoSourceResponse { + return new NewVideoSourceResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): NewVideoSourceResponse { + return new NewVideoSourceResponse().fromJsonString(jsonString, options); + } + + static equals(a: NewVideoSourceResponse | PlainMessage | undefined, b: NewVideoSourceResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(NewVideoSourceResponse, a, b); + } +} /** * Push a frame to a VideoSource * * @generated from message livekit.proto.CaptureVideoFrameRequest */ -export type CaptureVideoFrameRequest = Message<"livekit.proto.CaptureVideoFrameRequest"> & { +export class CaptureVideoFrameRequest extends Message { /** * @generated from field: required uint64 source_handle = 1; */ - sourceHandle: bigint; + sourceHandle?: bigint; /** * @generated from field: required livekit.proto.VideoBufferInfo buffer = 2; @@ -208,42 +506,83 @@ export type CaptureVideoFrameRequest = Message<"livekit.proto.CaptureVideoFrameR * * @generated from field: required int64 timestamp_us = 3; */ - timestampUs: bigint; + timestampUs?: bigint; /** * @generated from field: required livekit.proto.VideoRotation rotation = 4; */ - rotation: VideoRotation; -}; - -/** - * Describes the message livekit.proto.CaptureVideoFrameRequest. - * Use `create(CaptureVideoFrameRequestSchema)` to create a new message. - */ -export const CaptureVideoFrameRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 6); + rotation?: VideoRotation; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CaptureVideoFrameRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "source_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "buffer", kind: "message", T: VideoBufferInfo, req: true }, + { no: 3, name: "timestamp_us", kind: "scalar", T: 3 /* ScalarType.INT64 */, req: true }, + { no: 4, name: "rotation", kind: "enum", T: proto2.getEnumType(VideoRotation), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CaptureVideoFrameRequest { + return new CaptureVideoFrameRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CaptureVideoFrameRequest { + return new CaptureVideoFrameRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CaptureVideoFrameRequest { + return new CaptureVideoFrameRequest().fromJsonString(jsonString, options); + } + + static equals(a: CaptureVideoFrameRequest | PlainMessage | undefined, b: CaptureVideoFrameRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(CaptureVideoFrameRequest, a, b); + } +} /** * @generated from message livekit.proto.CaptureVideoFrameResponse */ -export type CaptureVideoFrameResponse = Message<"livekit.proto.CaptureVideoFrameResponse"> & { -}; - -/** - * Describes the message livekit.proto.CaptureVideoFrameResponse. - * Use `create(CaptureVideoFrameResponseSchema)` to create a new message. - */ -export const CaptureVideoFrameResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 7); +export class CaptureVideoFrameResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.CaptureVideoFrameResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CaptureVideoFrameResponse { + return new CaptureVideoFrameResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CaptureVideoFrameResponse { + return new CaptureVideoFrameResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CaptureVideoFrameResponse { + return new CaptureVideoFrameResponse().fromJsonString(jsonString, options); + } + + static equals(a: CaptureVideoFrameResponse | PlainMessage | undefined, b: CaptureVideoFrameResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(CaptureVideoFrameResponse, a, b); + } +} /** * @generated from message livekit.proto.VideoConvertRequest */ -export type VideoConvertRequest = Message<"livekit.proto.VideoConvertRequest"> & { +export class VideoConvertRequest extends Message { /** * @generated from field: optional bool flip_y = 1; */ - flipY: boolean; + flipY?: boolean; /** * @generated from field: required livekit.proto.VideoBufferInfo buffer = 2; @@ -253,20 +592,42 @@ export type VideoConvertRequest = Message<"livekit.proto.VideoConvertRequest"> & /** * @generated from field: required livekit.proto.VideoBufferType dst_type = 3; */ - dstType: VideoBufferType; -}; + dstType?: VideoBufferType; -/** - * Describes the message livekit.proto.VideoConvertRequest. - * Use `create(VideoConvertRequestSchema)` to create a new message. - */ -export const VideoConvertRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 8); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoConvertRequest"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "flip_y", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, + { no: 2, name: "buffer", kind: "message", T: VideoBufferInfo, req: true }, + { no: 3, name: "dst_type", kind: "enum", T: proto2.getEnumType(VideoBufferType), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoConvertRequest { + return new VideoConvertRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoConvertRequest { + return new VideoConvertRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoConvertRequest { + return new VideoConvertRequest().fromJsonString(jsonString, options); + } + + static equals(a: VideoConvertRequest | PlainMessage | undefined, b: VideoConvertRequest | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoConvertRequest, a, b); + } +} /** * @generated from message livekit.proto.VideoConvertResponse */ -export type VideoConvertResponse = Message<"livekit.proto.VideoConvertResponse"> & { +export class VideoConvertResponse extends Message { /** * @generated from oneof livekit.proto.VideoConvertResponse.message */ @@ -282,118 +643,208 @@ export type VideoConvertResponse = Message<"livekit.proto.VideoConvertResponse"> */ value: OwnedVideoBuffer; case: "buffer"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.VideoConvertResponse. - * Use `create(VideoConvertResponseSchema)` to create a new message. - */ -export const VideoConvertResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 9); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoConvertResponse"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "message" }, + { no: 2, name: "buffer", kind: "message", T: OwnedVideoBuffer, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoConvertResponse { + return new VideoConvertResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoConvertResponse { + return new VideoConvertResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoConvertResponse { + return new VideoConvertResponse().fromJsonString(jsonString, options); + } + + static equals(a: VideoConvertResponse | PlainMessage | undefined, b: VideoConvertResponse | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoConvertResponse, a, b); + } +} /** * @generated from message livekit.proto.VideoResolution */ -export type VideoResolution = Message<"livekit.proto.VideoResolution"> & { +export class VideoResolution extends Message { /** * @generated from field: required uint32 width = 1; */ - width: number; + width?: number; /** * @generated from field: required uint32 height = 2; */ - height: number; + height?: number; /** * @generated from field: required double frame_rate = 3; */ - frameRate: number; -}; + frameRate?: number; -/** - * Describes the message livekit.proto.VideoResolution. - * Use `create(VideoResolutionSchema)` to create a new message. - */ -export const VideoResolutionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 10); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoResolution"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "frame_rate", kind: "scalar", T: 1 /* ScalarType.DOUBLE */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoResolution { + return new VideoResolution().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoResolution { + return new VideoResolution().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoResolution { + return new VideoResolution().fromJsonString(jsonString, options); + } + + static equals(a: VideoResolution | PlainMessage | undefined, b: VideoResolution | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoResolution, a, b); + } +} /** * @generated from message livekit.proto.VideoBufferInfo */ -export type VideoBufferInfo = Message<"livekit.proto.VideoBufferInfo"> & { +export class VideoBufferInfo extends Message { /** * @generated from field: required livekit.proto.VideoBufferType type = 1; */ - type: VideoBufferType; + type?: VideoBufferType; /** * @generated from field: required uint32 width = 2; */ - width: number; + width?: number; /** * @generated from field: required uint32 height = 3; */ - height: number; + height?: number; /** * @generated from field: required uint64 data_ptr = 4; */ - dataPtr: bigint; + dataPtr?: bigint; /** * only for packed formats * * @generated from field: required uint32 stride = 6; */ - stride: number; + stride?: number; /** * @generated from field: repeated livekit.proto.VideoBufferInfo.ComponentInfo components = 7; */ - components: VideoBufferInfo_ComponentInfo[]; -}; - -/** - * Describes the message livekit.proto.VideoBufferInfo. - * Use `create(VideoBufferInfoSchema)` to create a new message. - */ -export const VideoBufferInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 11); + components: VideoBufferInfo_ComponentInfo[] = []; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoBufferInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "type", kind: "enum", T: proto2.getEnumType(VideoBufferType), req: true }, + { no: 2, name: "width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 4, name: "data_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 6, name: "stride", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 7, name: "components", kind: "message", T: VideoBufferInfo_ComponentInfo, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoBufferInfo { + return new VideoBufferInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoBufferInfo { + return new VideoBufferInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoBufferInfo { + return new VideoBufferInfo().fromJsonString(jsonString, options); + } + + static equals(a: VideoBufferInfo | PlainMessage | undefined, b: VideoBufferInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoBufferInfo, a, b); + } +} /** * @generated from message livekit.proto.VideoBufferInfo.ComponentInfo */ -export type VideoBufferInfo_ComponentInfo = Message<"livekit.proto.VideoBufferInfo.ComponentInfo"> & { +export class VideoBufferInfo_ComponentInfo extends Message { /** * @generated from field: required uint64 data_ptr = 1; */ - dataPtr: bigint; + dataPtr?: bigint; /** * @generated from field: required uint32 stride = 2; */ - stride: number; + stride?: number; /** * @generated from field: required uint32 size = 3; */ - size: number; -}; + size?: number; -/** - * Describes the message livekit.proto.VideoBufferInfo.ComponentInfo. - * Use `create(VideoBufferInfo_ComponentInfoSchema)` to create a new message. - */ -export const VideoBufferInfo_ComponentInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 11, 0); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoBufferInfo.ComponentInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "data_ptr", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "stride", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 3, name: "size", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoBufferInfo_ComponentInfo { + return new VideoBufferInfo_ComponentInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoBufferInfo_ComponentInfo { + return new VideoBufferInfo_ComponentInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoBufferInfo_ComponentInfo { + return new VideoBufferInfo_ComponentInfo().fromJsonString(jsonString, options); + } + + static equals(a: VideoBufferInfo_ComponentInfo | PlainMessage | undefined, b: VideoBufferInfo_ComponentInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoBufferInfo_ComponentInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedVideoBuffer */ -export type OwnedVideoBuffer = Message<"livekit.proto.OwnedVideoBuffer"> & { +export class OwnedVideoBuffer extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -403,36 +854,77 @@ export type OwnedVideoBuffer = Message<"livekit.proto.OwnedVideoBuffer"> & { * @generated from field: required livekit.proto.VideoBufferInfo info = 2; */ info?: VideoBufferInfo; -}; -/** - * Describes the message livekit.proto.OwnedVideoBuffer. - * Use `create(OwnedVideoBufferSchema)` to create a new message. - */ -export const OwnedVideoBufferSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 12); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedVideoBuffer"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: VideoBufferInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedVideoBuffer { + return new OwnedVideoBuffer().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedVideoBuffer { + return new OwnedVideoBuffer().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedVideoBuffer { + return new OwnedVideoBuffer().fromJsonString(jsonString, options); + } + + static equals(a: OwnedVideoBuffer | PlainMessage | undefined, b: OwnedVideoBuffer | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedVideoBuffer, a, b); + } +} /** * @generated from message livekit.proto.VideoStreamInfo */ -export type VideoStreamInfo = Message<"livekit.proto.VideoStreamInfo"> & { +export class VideoStreamInfo extends Message { /** * @generated from field: required livekit.proto.VideoStreamType type = 1; */ - type: VideoStreamType; -}; + type?: VideoStreamType; -/** - * Describes the message livekit.proto.VideoStreamInfo. - * Use `create(VideoStreamInfoSchema)` to create a new message. - */ -export const VideoStreamInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 13); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoStreamInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "type", kind: "enum", T: proto2.getEnumType(VideoStreamType), req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoStreamInfo { + return new VideoStreamInfo().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoStreamInfo { + return new VideoStreamInfo().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoStreamInfo { + return new VideoStreamInfo().fromJsonString(jsonString, options); + } + + static equals(a: VideoStreamInfo | PlainMessage | undefined, b: VideoStreamInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoStreamInfo, a, b); + } +} /** * @generated from message livekit.proto.OwnedVideoStream */ -export type OwnedVideoStream = Message<"livekit.proto.OwnedVideoStream"> & { +export class OwnedVideoStream extends Message { /** * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ @@ -442,23 +934,44 @@ export type OwnedVideoStream = Message<"livekit.proto.OwnedVideoStream"> & { * @generated from field: required livekit.proto.VideoStreamInfo info = 2; */ info?: VideoStreamInfo; -}; -/** - * Describes the message livekit.proto.OwnedVideoStream. - * Use `create(OwnedVideoStreamSchema)` to create a new message. - */ -export const OwnedVideoStreamSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 14); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedVideoStream"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: VideoStreamInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedVideoStream { + return new OwnedVideoStream().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedVideoStream { + return new OwnedVideoStream().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedVideoStream { + return new OwnedVideoStream().fromJsonString(jsonString, options); + } + + static equals(a: OwnedVideoStream | PlainMessage | undefined, b: OwnedVideoStream | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedVideoStream, a, b); + } +} /** * @generated from message livekit.proto.VideoStreamEvent */ -export type VideoStreamEvent = Message<"livekit.proto.VideoStreamEvent"> & { +export class VideoStreamEvent extends Message { /** * @generated from field: required uint64 stream_handle = 1; */ - streamHandle: bigint; + streamHandle?: bigint; /** * @generated from oneof livekit.proto.VideoStreamEvent.message @@ -475,20 +988,42 @@ export type VideoStreamEvent = Message<"livekit.proto.VideoStreamEvent"> & { */ value: VideoStreamEOS; case: "eos"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message livekit.proto.VideoStreamEvent. - * Use `create(VideoStreamEventSchema)` to create a new message. - */ -export const VideoStreamEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 15); + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoStreamEvent"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "stream_handle", kind: "scalar", T: 4 /* ScalarType.UINT64 */, req: true }, + { no: 2, name: "frame_received", kind: "message", T: VideoFrameReceived, oneof: "message" }, + { no: 3, name: "eos", kind: "message", T: VideoStreamEOS, oneof: "message" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoStreamEvent { + return new VideoStreamEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoStreamEvent { + return new VideoStreamEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoStreamEvent { + return new VideoStreamEvent().fromJsonString(jsonString, options); + } + + static equals(a: VideoStreamEvent | PlainMessage | undefined, b: VideoStreamEvent | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoStreamEvent, a, b); + } +} /** * @generated from message livekit.proto.VideoFrameReceived */ -export type VideoFrameReceived = Message<"livekit.proto.VideoFrameReceived"> & { +export class VideoFrameReceived extends Message { /** * @generated from field: required livekit.proto.OwnedVideoBuffer buffer = 1; */ @@ -499,262 +1034,194 @@ export type VideoFrameReceived = Message<"livekit.proto.VideoFrameReceived"> & { * * @generated from field: required int64 timestamp_us = 2; */ - timestampUs: bigint; + timestampUs?: bigint; /** * @generated from field: required livekit.proto.VideoRotation rotation = 3; */ - rotation: VideoRotation; -}; + rotation?: VideoRotation; -/** - * Describes the message livekit.proto.VideoFrameReceived. - * Use `create(VideoFrameReceivedSchema)` to create a new message. - */ -export const VideoFrameReceivedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 16); + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } -/** - * @generated from message livekit.proto.VideoStreamEOS - */ -export type VideoStreamEOS = Message<"livekit.proto.VideoStreamEOS"> & { -}; + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoFrameReceived"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "buffer", kind: "message", T: OwnedVideoBuffer, req: true }, + { no: 2, name: "timestamp_us", kind: "scalar", T: 3 /* ScalarType.INT64 */, req: true }, + { no: 3, name: "rotation", kind: "enum", T: proto2.getEnumType(VideoRotation), req: true }, + ]); -/** - * Describes the message livekit.proto.VideoStreamEOS. - * Use `create(VideoStreamEOSSchema)` to create a new message. - */ -export const VideoStreamEOSSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 17); + static fromBinary(bytes: Uint8Array, options?: Partial): VideoFrameReceived { + return new VideoFrameReceived().fromBinary(bytes, options); + } -/** - * @generated from message livekit.proto.VideoSourceResolution - */ -export type VideoSourceResolution = Message<"livekit.proto.VideoSourceResolution"> & { - /** - * @generated from field: required uint32 width = 1; - */ - width: number; - - /** - * @generated from field: required uint32 height = 2; - */ - height: number; -}; + static fromJson(jsonValue: JsonValue, options?: Partial): VideoFrameReceived { + return new VideoFrameReceived().fromJson(jsonValue, options); + } -/** - * Describes the message livekit.proto.VideoSourceResolution. - * Use `create(VideoSourceResolutionSchema)` to create a new message. - */ -export const VideoSourceResolutionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 18); + static fromJsonString(jsonString: string, options?: Partial): VideoFrameReceived { + return new VideoFrameReceived().fromJsonString(jsonString, options); + } -/** - * @generated from message livekit.proto.VideoSourceInfo - */ -export type VideoSourceInfo = Message<"livekit.proto.VideoSourceInfo"> & { - /** - * @generated from field: required livekit.proto.VideoSourceType type = 1; - */ - type: VideoSourceType; -}; + static equals(a: VideoFrameReceived | PlainMessage | undefined, b: VideoFrameReceived | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoFrameReceived, a, b); + } +} /** - * Describes the message livekit.proto.VideoSourceInfo. - * Use `create(VideoSourceInfoSchema)` to create a new message. + * @generated from message livekit.proto.VideoStreamEOS */ -export const VideoSourceInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 19); +export class VideoStreamEOS extends Message { + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoStreamEOS"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VideoStreamEOS { + return new VideoStreamEOS().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VideoStreamEOS { + return new VideoStreamEOS().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VideoStreamEOS { + return new VideoStreamEOS().fromJsonString(jsonString, options); + } + + static equals(a: VideoStreamEOS | PlainMessage | undefined, b: VideoStreamEOS | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoStreamEOS, a, b); + } +} /** - * @generated from message livekit.proto.OwnedVideoSource + * @generated from message livekit.proto.VideoSourceResolution */ -export type OwnedVideoSource = Message<"livekit.proto.OwnedVideoSource"> & { - /** - * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; - */ - handle?: FfiOwnedHandle; - +export class VideoSourceResolution extends Message { /** - * @generated from field: required livekit.proto.VideoSourceInfo info = 2; + * @generated from field: required uint32 width = 1; */ - info?: VideoSourceInfo; -}; - -/** - * Describes the message livekit.proto.OwnedVideoSource. - * Use `create(OwnedVideoSourceSchema)` to create a new message. - */ -export const OwnedVideoSourceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_video_frame, 20); + width?: number; -/** - * @generated from enum livekit.proto.VideoCodec - */ -export enum VideoCodec { /** - * @generated from enum value: VP8 = 0; + * @generated from field: required uint32 height = 2; */ - VP8 = 0, + height?: number; - /** - * @generated from enum value: H264 = 1; - */ - H264 = 1, + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } - /** - * @generated from enum value: AV1 = 2; - */ - AV1 = 2, + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoSourceResolution"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "width", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + { no: 2, name: "height", kind: "scalar", T: 13 /* ScalarType.UINT32 */, req: true }, + ]); - /** - * @generated from enum value: VP9 = 3; - */ - VP9 = 3, -} + static fromBinary(bytes: Uint8Array, options?: Partial): VideoSourceResolution { + return new VideoSourceResolution().fromBinary(bytes, options); + } -/** - * Describes the enum livekit.proto.VideoCodec. - */ -export const VideoCodecSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_video_frame, 0); + static fromJson(jsonValue: JsonValue, options?: Partial): VideoSourceResolution { + return new VideoSourceResolution().fromJson(jsonValue, options); + } -/** - * @generated from enum livekit.proto.VideoRotation - */ -export enum VideoRotation { - /** - * @generated from enum value: VIDEO_ROTATION_0 = 0; - */ - VIDEO_ROTATION_0 = 0, + static fromJsonString(jsonString: string, options?: Partial): VideoSourceResolution { + return new VideoSourceResolution().fromJsonString(jsonString, options); + } - /** - * @generated from enum value: VIDEO_ROTATION_90 = 1; - */ - VIDEO_ROTATION_90 = 1, - - /** - * @generated from enum value: VIDEO_ROTATION_180 = 2; - */ - VIDEO_ROTATION_180 = 2, - - /** - * @generated from enum value: VIDEO_ROTATION_270 = 3; - */ - VIDEO_ROTATION_270 = 3, + static equals(a: VideoSourceResolution | PlainMessage | undefined, b: VideoSourceResolution | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoSourceResolution, a, b); + } } /** - * Describes the enum livekit.proto.VideoRotation. - */ -export const VideoRotationSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_video_frame, 1); - -/** - * @generated from enum livekit.proto.VideoBufferType + * @generated from message livekit.proto.VideoSourceInfo */ -export enum VideoBufferType { - /** - * @generated from enum value: RGBA = 0; - */ - RGBA = 0, - - /** - * @generated from enum value: ABGR = 1; - */ - ABGR = 1, - +export class VideoSourceInfo extends Message { /** - * @generated from enum value: ARGB = 2; - */ - ARGB = 2, - - /** - * @generated from enum value: BGRA = 3; - */ - BGRA = 3, - - /** - * @generated from enum value: RGB24 = 4; + * @generated from field: required livekit.proto.VideoSourceType type = 1; */ - RGB24 = 4, + type?: VideoSourceType; - /** - * @generated from enum value: I420 = 5; - */ - I420 = 5, + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } - /** - * @generated from enum value: I420A = 6; - */ - I420A = 6, + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.VideoSourceInfo"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "type", kind: "enum", T: proto2.getEnumType(VideoSourceType), req: true }, + ]); - /** - * @generated from enum value: I422 = 7; - */ - I422 = 7, + static fromBinary(bytes: Uint8Array, options?: Partial): VideoSourceInfo { + return new VideoSourceInfo().fromBinary(bytes, options); + } - /** - * @generated from enum value: I444 = 8; - */ - I444 = 8, + static fromJson(jsonValue: JsonValue, options?: Partial): VideoSourceInfo { + return new VideoSourceInfo().fromJson(jsonValue, options); + } - /** - * @generated from enum value: I010 = 9; - */ - I010 = 9, + static fromJsonString(jsonString: string, options?: Partial): VideoSourceInfo { + return new VideoSourceInfo().fromJsonString(jsonString, options); + } - /** - * @generated from enum value: NV12 = 10; - */ - NV12 = 10, + static equals(a: VideoSourceInfo | PlainMessage | undefined, b: VideoSourceInfo | PlainMessage | undefined): boolean { + return proto2.util.equals(VideoSourceInfo, a, b); + } } /** - * Describes the enum livekit.proto.VideoBufferType. - */ -export const VideoBufferTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_video_frame, 2); - -/** - * @generated from enum livekit.proto.VideoStreamType + * @generated from message livekit.proto.OwnedVideoSource */ -export enum VideoStreamType { - /** - * @generated from enum value: VIDEO_STREAM_NATIVE = 0; - */ - VIDEO_STREAM_NATIVE = 0, - +export class OwnedVideoSource extends Message { /** - * @generated from enum value: VIDEO_STREAM_WEBGL = 1; + * @generated from field: required livekit.proto.FfiOwnedHandle handle = 1; */ - VIDEO_STREAM_WEBGL = 1, + handle?: FfiOwnedHandle; /** - * @generated from enum value: VIDEO_STREAM_HTML = 2; + * @generated from field: required livekit.proto.VideoSourceInfo info = 2; */ - VIDEO_STREAM_HTML = 2, -} - -/** - * Describes the enum livekit.proto.VideoStreamType. - */ -export const VideoStreamTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_video_frame, 3); + info?: VideoSourceInfo; -/** - * @generated from enum livekit.proto.VideoSourceType - */ -export enum VideoSourceType { - /** - * @generated from enum value: VIDEO_SOURCE_NATIVE = 0; - */ - VIDEO_SOURCE_NATIVE = 0, + constructor(data?: PartialMessage) { + super(); + proto2.util.initPartial(data, this); + } + + static readonly runtime: typeof proto2 = proto2; + static readonly typeName = "livekit.proto.OwnedVideoSource"; + static readonly fields: FieldList = proto2.util.newFieldList(() => [ + { no: 1, name: "handle", kind: "message", T: FfiOwnedHandle, req: true }, + { no: 2, name: "info", kind: "message", T: VideoSourceInfo, req: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OwnedVideoSource { + return new OwnedVideoSource().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OwnedVideoSource { + return new OwnedVideoSource().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OwnedVideoSource { + return new OwnedVideoSource().fromJsonString(jsonString, options); + } + + static equals(a: OwnedVideoSource | PlainMessage | undefined, b: OwnedVideoSource | PlainMessage | undefined): boolean { + return proto2.util.equals(OwnedVideoSource, a, b); + } } -/** - * Describes the enum livekit.proto.VideoSourceType. - */ -export const VideoSourceTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_video_frame, 4); - From a42c9e36af25bad4f033576e12d20edc341b141b Mon Sep 17 00:00:00 2001 From: lukasIO Date: Wed, 8 Jan 2025 10:38:59 +0100 Subject: [PATCH 15/18] reuse --- packages/livekit-rtc/src/data_streams/index.ts | 4 ++++ .../livekit-rtc/src/data_streams/stream_reader.ts | 3 +++ .../livekit-rtc/src/data_streams/stream_writer.ts | 3 +++ packages/livekit-rtc/src/data_streams/types.ts | 3 +++ packages/livekit-rtc/src/log.ts | 3 +++ packages/livekit-rtc/src/utils.ts | 4 ++++ packages/livekit-server-sdk/build.config.js | 11 ----------- 7 files changed, 20 insertions(+), 11 deletions(-) delete mode 100644 packages/livekit-server-sdk/build.config.js diff --git a/packages/livekit-rtc/src/data_streams/index.ts b/packages/livekit-rtc/src/data_streams/index.ts index cd33642b..407d2436 100644 --- a/packages/livekit-rtc/src/data_streams/index.ts +++ b/packages/livekit-rtc/src/data_streams/index.ts @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + export * from './stream_reader.js'; export * from './stream_writer.js'; export type * from './types.js'; diff --git a/packages/livekit-rtc/src/data_streams/stream_reader.ts b/packages/livekit-rtc/src/data_streams/stream_reader.ts index 1d476da5..29ebb5f1 100644 --- a/packages/livekit-rtc/src/data_streams/stream_reader.ts +++ b/packages/livekit-rtc/src/data_streams/stream_reader.ts @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 import type { DataStream_Chunk } from '@livekit/protocol'; import type { ReadableStream } from 'node:stream/web'; import { log } from '../log.js'; diff --git a/packages/livekit-rtc/src/data_streams/stream_writer.ts b/packages/livekit-rtc/src/data_streams/stream_writer.ts index cf270c7a..a525ad30 100644 --- a/packages/livekit-rtc/src/data_streams/stream_writer.ts +++ b/packages/livekit-rtc/src/data_streams/stream_writer.ts @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 import type { WritableStream } from 'node:stream/web'; class BaseStreamWriter { diff --git a/packages/livekit-rtc/src/data_streams/types.ts b/packages/livekit-rtc/src/data_streams/types.ts index a092dc0c..a32091c0 100644 --- a/packages/livekit-rtc/src/data_streams/types.ts +++ b/packages/livekit-rtc/src/data_streams/types.ts @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 import type { DataStream_Chunk, DataStream_Header } from '@livekit/protocol'; export interface StreamController { diff --git a/packages/livekit-rtc/src/log.ts b/packages/livekit-rtc/src/log.ts index c3f86c5b..7f1d3645 100644 --- a/packages/livekit-rtc/src/log.ts +++ b/packages/livekit-rtc/src/log.ts @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 import type { LevelWithSilent, LoggerOptions } from 'pino'; import { pino } from 'pino'; diff --git a/packages/livekit-rtc/src/utils.ts b/packages/livekit-rtc/src/utils.ts index 7d230b07..fda452b9 100644 --- a/packages/livekit-rtc/src/utils.ts +++ b/packages/livekit-rtc/src/utils.ts @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2024 LiveKit, Inc. +// +// SPDX-License-Identifier: Apache-2.0 + /** convert bigints to numbers preserving undefined values */ export function bigIntToNumber( value: T, diff --git a/packages/livekit-server-sdk/build.config.js b/packages/livekit-server-sdk/build.config.js deleted file mode 100644 index 578b421a..00000000 --- a/packages/livekit-server-sdk/build.config.js +++ /dev/null @@ -1,11 +0,0 @@ -// @ts-check - -import { defineBuildConfig } from "unbuild"; - -export default defineBuildConfig({ - declaration: true, - sourcemap: true, - rollup: { - emitCJS: true, - }, -}); From 02e5839df6d9bea96026103ba27eed65fa8e8f58 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 10 Jan 2025 10:37:08 +0100 Subject: [PATCH 16/18] nicer stream API --- examples/data-streams/index.ts | 4 ++-- .../src/data_streams/stream_writer.ts | 12 ++++++------ packages/livekit-rtc/src/index.ts | 1 + packages/livekit-rtc/src/participant.ts | 18 +++++++++--------- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/examples/data-streams/index.ts b/examples/data-streams/index.ts index e8b14166..c22a5417 100644 --- a/examples/data-streams/index.ts +++ b/examples/data-streams/index.ts @@ -1,4 +1,4 @@ -import { RemoteParticipant, Room, RoomEvent, type TextStreamReader } from '@livekit/rtc-node'; +import { type RemoteParticipant, Room, RoomEvent, type TextStreamReader } from '@livekit/rtc-node'; import { config } from 'dotenv'; import { AccessToken } from 'livekit-server-sdk'; @@ -17,7 +17,7 @@ const greetParticipant = async (room: Room, recipient: RemoteParticipant) => { }); for (const c of greeting) { - await streamWriter?.write([c]); + await streamWriter?.write(c); } streamWriter?.close(); diff --git a/packages/livekit-rtc/src/data_streams/stream_writer.ts b/packages/livekit-rtc/src/data_streams/stream_writer.ts index a525ad30..f468b7e0 100644 --- a/packages/livekit-rtc/src/data_streams/stream_writer.ts +++ b/packages/livekit-rtc/src/data_streams/stream_writer.ts @@ -4,20 +4,20 @@ import type { WritableStream } from 'node:stream/web'; class BaseStreamWriter { - protected writableStream: WritableStream; + protected writableStream: WritableStream<[T, number?]>; - protected defaultWriter: WritableStreamDefaultWriter; + protected defaultWriter: WritableStreamDefaultWriter<[T, number?]>; protected onClose?: () => void; - constructor(writableStream: WritableStream, onClose?: () => void) { + constructor(writableStream: WritableStream<[T, number?]>, onClose?: () => void) { this.writableStream = writableStream; this.defaultWriter = writableStream.getWriter(); this.onClose = onClose; } - write(chunk: T): Promise { - return this.defaultWriter.write(chunk); + write(chunk: T, chunkIndex?: number): Promise { + return this.defaultWriter.write([chunk, chunkIndex]); } async close() { @@ -27,6 +27,6 @@ class BaseStreamWriter { } } -export class TextStreamWriter extends BaseStreamWriter<[string, number?]> {} +export class TextStreamWriter extends BaseStreamWriter {} export class BinaryStreamWriter extends BaseStreamWriter {} diff --git a/packages/livekit-rtc/src/index.ts b/packages/livekit-rtc/src/index.ts index 89299712..044a8d69 100644 --- a/packages/livekit-rtc/src/index.ts +++ b/packages/livekit-rtc/src/index.ts @@ -30,6 +30,7 @@ export { export type { Transcription, TranscriptionSegment } from './transcription.js'; export { E2EEManager, KeyProvider, FrameCryptor } from './e2ee.js'; export type { E2EEOptions, KeyProviderOptions } from './e2ee.js'; +export * from './data_streams/index.js'; export { ConnectionQuality, IceServer, diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index 387636e1..7786c230 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -11,7 +11,7 @@ import { DisconnectReason, type OwnedParticipant, type ParticipantInfo, - type ParticipantKind, + ParticipantKind, } from './proto/participant_pb.js'; import { DataStream_Chunk, @@ -103,20 +103,20 @@ export abstract class Participant { return this.info.name; } - get identity(): string | undefined { - return this.info.identity; + get identity(): string { + return this.info.identity ?? ''; } - get metadata(): string | undefined { - return this.info.metadata; + get metadata(): string { + return this.info.metadata ?? ''; } - get attributes(): Record | undefined { - return this.info.attributes; + get attributes(): Record { + return this.info.attributes ?? {}; } - get kind(): ParticipantKind | undefined { - return this.info.kind; + get kind(): ParticipantKind { + return this.info.kind ?? ParticipantKind.STANDARD; } get disconnectReason(): DisconnectReason | undefined { From cd2a07fe72b53eaa65ec21fb01e51e16c85a2d60 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Fri, 10 Jan 2025 10:54:54 +0100 Subject: [PATCH 17/18] include info in streamwriter --- .../src/data_streams/stream_writer.ts | 12 +++++++---- packages/livekit-rtc/src/participant.ts | 21 ++++++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/livekit-rtc/src/data_streams/stream_writer.ts b/packages/livekit-rtc/src/data_streams/stream_writer.ts index f468b7e0..caf883f0 100644 --- a/packages/livekit-rtc/src/data_streams/stream_writer.ts +++ b/packages/livekit-rtc/src/data_streams/stream_writer.ts @@ -2,18 +2,22 @@ // // SPDX-License-Identifier: Apache-2.0 import type { WritableStream } from 'node:stream/web'; +import type { BaseStreamInfo, FileStreamInfo, TextStreamInfo } from './types.js'; -class BaseStreamWriter { +class BaseStreamWriter { protected writableStream: WritableStream<[T, number?]>; protected defaultWriter: WritableStreamDefaultWriter<[T, number?]>; protected onClose?: () => void; - constructor(writableStream: WritableStream<[T, number?]>, onClose?: () => void) { + readonly info: InfoType; + + constructor(writableStream: WritableStream<[T, number?]>, info: InfoType, onClose?: () => void) { this.writableStream = writableStream; this.defaultWriter = writableStream.getWriter(); this.onClose = onClose; + this.info = info; } write(chunk: T, chunkIndex?: number): Promise { @@ -27,6 +31,6 @@ class BaseStreamWriter { } } -export class TextStreamWriter extends BaseStreamWriter {} +export class TextStreamWriter extends BaseStreamWriter {} -export class BinaryStreamWriter extends BaseStreamWriter {} +export class BinaryStreamWriter extends BaseStreamWriter {} diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index 7786c230..2d9cb5a0 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -4,7 +4,11 @@ import { DataStream_Header } from '@livekit/protocol'; import type { PathLike } from 'node:fs'; import { open, stat } from 'node:fs/promises'; -import { type FileStreamOptions, TextStreamWriter } from './data_streams/index.js'; +import { + type FileStreamOptions, + type TextStreamInfo, + TextStreamWriter, +} from './data_streams/index.js'; import { FfiClient, FfiHandle } from './ffi_client.js'; import { log } from './log.js'; import { @@ -250,15 +254,22 @@ export class LocalParticipant extends Participant { const streamId = crypto.randomUUID(); const destinationIdentities = options?.destinationIdentities; + const info: TextStreamInfo = { + id: streamId, + mimeType: 'text/plain', + topic: options?.topic ?? '', + timestamp: Date.now(), + }; + const headerReq = new SendStreamHeaderRequest({ senderIdentity, destinationIdentities, localParticipantHandle: this.ffi_handle.handle, header: new DataStream_Header({ streamId, - mimeType: 'text/plain', - topic: options?.topic ?? '', - timestamp: numberToBigInt(Date.now()), + mimeType: info.mimeType, + topic: info.topic, + timestamp: numberToBigInt(info.timestamp), extensions: options?.extensions, contentHeader: { case: 'textHeader', @@ -338,7 +349,7 @@ export class LocalParticipant extends Participant { }, }); - const writer = new TextStreamWriter(writableStream); + const writer = new TextStreamWriter(writableStream, info); return writer; } From 3760994dc46c6e83eaa257589c4f29a169a1a0d3 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Wed, 15 Jan 2025 12:23:22 +0100 Subject: [PATCH 18/18] allow to pass messageId --- packages/livekit-rtc/src/participant.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/livekit-rtc/src/participant.ts b/packages/livekit-rtc/src/participant.ts index 2d9cb5a0..a5b87c6b 100644 --- a/packages/livekit-rtc/src/participant.ts +++ b/packages/livekit-rtc/src/participant.ts @@ -249,9 +249,10 @@ export class LocalParticipant extends Participant { topic?: string; extensions?: Record; destinationIdentities?: Array; + messageId?: string }): Promise { const senderIdentity = this.identity; - const streamId = crypto.randomUUID(); + const streamId = options?.messageId ?? crypto.randomUUID(); const destinationIdentities = options?.destinationIdentities; const info: TextStreamInfo = {