UNPKG

livekit-server-sdk

Version:
1 lines 10.4 kB
{"version":3,"sources":["../src/IngressClient.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { IngressAudioOptions, IngressInput, IngressVideoOptions } from '@livekit/protocol';\nimport {\n CreateIngressRequest,\n DeleteIngressRequest,\n IngressInfo,\n ListIngressRequest,\n ListIngressResponse,\n UpdateIngressRequest,\n} from '@livekit/protocol';\nimport type { ClientOptions } from './ClientOptions.js';\nimport { ServiceBase } from './ServiceBase.js';\nimport type { Rpc } from './TwirpRPC.js';\nimport { TwirpRpc, livekitPackage } from './TwirpRPC.js';\n\nconst svc = 'Ingress';\n\nexport interface CreateIngressOptions {\n /**\n * ingress name. optional\n */\n name?: string;\n /**\n * name of the room to send media to. required\n */\n roomName?: string;\n /**\n * unique identity of the participant. required\n */\n participantIdentity: string;\n /**\n * participant display name\n */\n participantName?: string;\n /**\n * metadata to attach to the participant\n */\n participantMetadata?: string;\n /**\n * @deprecated use `enableTranscoding` instead.\n * whether to skip transcoding and forward the input media directly. Only supported by WHIP\n */\n bypassTranscoding?: boolean;\n /**\n * whether to enable transcoding or forward the input media directly.\n * Transcoding is required for all input types except WHIP. For WHIP, the default is to not transcode.\n */\n enableTranscoding?: boolean | undefined;\n /**\n * url of the media to pull for ingresses of type URL\n */\n url?: string;\n /**\n * custom audio encoding parameters. optional\n */\n audio?: IngressAudioOptions;\n /**\n * custom video encoding parameters. optional\n */\n video?: IngressVideoOptions;\n}\n\nexport interface UpdateIngressOptions {\n /**\n * ingress name. optional\n */\n name: string;\n /**\n * name of the room to send media to.\n */\n roomName?: string;\n /**\n * unique identity of the participant.\n */\n participantIdentity?: string;\n /**\n * participant display name\n */\n participantName?: string;\n /**\n * metadata to attach to the participant\n */\n participantMetadata?: string;\n /**\n * @deprecated use `enableTranscoding` instead\n * whether to skip transcoding and forward the input media directly. Only supported by WHIP\n */\n bypassTranscoding?: boolean | undefined;\n /**\n * whether to enable transcoding or forward the input media directly.\n * Transcoding is required for all input types except WHIP. For WHIP, the default is to not transcode.\n */\n enableTranscoding?: boolean | undefined;\n /**\n * custom audio encoding parameters. optional\n */\n audio?: IngressAudioOptions;\n /**\n * custom video encoding parameters. optional\n */\n video?: IngressVideoOptions;\n}\n\nexport interface ListIngressOptions {\n /**\n * list ingress for one room only\n */\n roomName?: string;\n\n /**\n * list ingress by ID\n */\n ingressId?: string;\n}\n\n/**\n * Client to access Ingress APIs\n */\nexport class IngressClient extends ServiceBase {\n private readonly rpc: Rpc;\n\n /**\n * @param host - hostname including protocol. i.e. 'https://<project>.livekit.cloud'\n * @param apiKey - API Key, can be set in env var LIVEKIT_API_KEY\n * @param secret - API Secret, can be set in env var LIVEKIT_API_SECRET\n * @param options - client options\n */\n constructor(host: string, apiKey?: string, secret?: string, options?: ClientOptions) {\n super(apiKey, secret);\n const rpcOptions = options?.requestTimeout\n ? { requestTimeout: options.requestTimeout }\n : undefined;\n this.rpc = new TwirpRpc(host, livekitPackage, rpcOptions);\n }\n\n /**\n * @param inputType - protocol for the ingress\n * @param opts - CreateIngressOptions\n */\n async createIngress(inputType: IngressInput, opts: CreateIngressOptions): Promise<IngressInfo> {\n let name: string = '';\n let participantName: string = '';\n let participantIdentity: string = '';\n let bypassTranscoding: boolean = false;\n let url: string = '';\n\n if (opts == null) {\n throw new Error('options dictionary is required');\n }\n\n const roomName: string | undefined = opts.roomName;\n const enableTranscoding: boolean | undefined = opts.enableTranscoding;\n const audio: IngressAudioOptions | undefined = opts.audio;\n const video: IngressVideoOptions | undefined = opts.video;\n const participantMetadata: string | undefined = opts.participantMetadata;\n\n name = opts.name || '';\n participantName = opts.participantName || '';\n participantIdentity = opts.participantIdentity || '';\n bypassTranscoding = opts.bypassTranscoding || false;\n url = opts.url || '';\n\n if (typeof roomName == 'undefined') {\n throw new Error('required roomName option not provided');\n }\n\n if (participantIdentity == '') {\n throw new Error('required participantIdentity option not provided');\n }\n\n const req = new CreateIngressRequest({\n inputType,\n name,\n roomName,\n participantIdentity,\n participantMetadata,\n participantName,\n bypassTranscoding,\n enableTranscoding,\n url,\n audio,\n video,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateIngress',\n req,\n await this.authHeader({ ingressAdmin: true }),\n );\n return IngressInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param ingressId - ID of the ingress to update\n * @param opts - UpdateIngressOptions\n */\n async updateIngress(ingressId: string, opts: UpdateIngressOptions): Promise<IngressInfo> {\n const name: string = opts.name || '';\n const roomName: string = opts.roomName || '';\n const participantName: string = opts.participantName || '';\n const participantIdentity: string = opts.participantIdentity || '';\n const { participantMetadata } = opts;\n const { audio, video, bypassTranscoding, enableTranscoding } = opts;\n\n const req = new UpdateIngressRequest({\n ingressId,\n name,\n roomName,\n participantIdentity,\n participantName,\n participantMetadata,\n bypassTranscoding,\n enableTranscoding,\n audio,\n video,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'UpdateIngress',\n req,\n await this.authHeader({ ingressAdmin: true }),\n );\n return IngressInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @deprecated use `listIngress(opts)` or `listIngress(arg)` instead\n * @param roomName - list ingress for one room only\n */\n async listIngress(roomName?: string): Promise<Array<IngressInfo>>;\n /**\n * @param opts - list options\n */\n async listIngress(opts?: ListIngressOptions): Promise<Array<IngressInfo>>;\n /**\n * @param arg - list room name or options\n */\n async listIngress(arg?: string | ListIngressOptions): Promise<Array<IngressInfo>> {\n let req: Partial<ListIngressRequest> = {};\n if (typeof arg === 'string') {\n req.roomName = arg;\n } else if (arg) {\n req = arg;\n }\n const data = await this.rpc.request(\n svc,\n 'ListIngress',\n new ListIngressRequest(req).toJson(),\n await this.authHeader({ ingressAdmin: true }),\n );\n return ListIngressResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n /**\n * @param ingressId - ingress to delete\n */\n async deleteIngress(ingressId: string): Promise<IngressInfo> {\n const data = await this.rpc.request(\n svc,\n 'DeleteIngress',\n new DeleteIngressRequest({ ingressId }).toJson(),\n await this.authHeader({ ingressAdmin: true }),\n );\n return IngressInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n}\n"],"mappings":"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","names":[]}