livekit-server-sdk 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/package.json +1 -1
  2. package/dist/AccessToken.d.ts +0 -56
  3. package/dist/AccessToken.js +0 -118
  4. package/dist/AccessToken.js.map +0 -1
  5. package/dist/AccessToken.test.d.ts +0 -1
  6. package/dist/AccessToken.test.js +0 -72
  7. package/dist/AccessToken.test.js.map +0 -1
  8. package/dist/EgressClient.d.ts +0 -128
  9. package/dist/EgressClient.js +0 -263
  10. package/dist/EgressClient.js.map +0 -1
  11. package/dist/IngressClient.d.ts +0 -84
  12. package/dist/IngressClient.js +0 -112
  13. package/dist/IngressClient.js.map +0 -1
  14. package/dist/RoomServiceClient.d.ts +0 -132
  15. package/dist/RoomServiceClient.js +0 -189
  16. package/dist/RoomServiceClient.js.map +0 -1
  17. package/dist/ServiceBase.d.ts +0 -16
  18. package/dist/ServiceBase.js +0 -27
  19. package/dist/ServiceBase.js.map +0 -1
  20. package/dist/TwirpRPC.d.ts +0 -16
  21. package/dist/TwirpRPC.js +0 -37
  22. package/dist/TwirpRPC.js.map +0 -1
  23. package/dist/WebhookReceiver.d.ts +0 -14
  24. package/dist/WebhookReceiver.js +0 -40
  25. package/dist/WebhookReceiver.js.map +0 -1
  26. package/dist/WebhookReceiver.test.d.ts +0 -1
  27. package/dist/WebhookReceiver.test.js +0 -39
  28. package/dist/WebhookReceiver.test.js.map +0 -1
  29. package/dist/grants.d.ts +0 -38
  30. package/dist/grants.js +0 -3
  31. package/dist/grants.js.map +0 -1
  32. package/dist/index.d.ts +0 -9
  33. package/dist/index.js +0 -45
  34. package/dist/index.js.map +0 -1
  35. package/dist/proto/google/protobuf/timestamp.d.ts +0 -132
  36. package/dist/proto/google/protobuf/timestamp.js +0 -92
  37. package/dist/proto/google/protobuf/timestamp.js.map +0 -1
  38. package/dist/proto/livekit_egress.d.ts +0 -11266
  39. package/dist/proto/livekit_egress.js +0 -2869
  40. package/dist/proto/livekit_egress.js.map +0 -1
  41. package/dist/proto/livekit_ingress.d.ts +0 -2163
  42. package/dist/proto/livekit_ingress.js +0 -1264
  43. package/dist/proto/livekit_ingress.js.map +0 -1
  44. package/dist/proto/livekit_models.d.ts +0 -1356
  45. package/dist/proto/livekit_models.js +0 -2893
  46. package/dist/proto/livekit_models.js.map +0 -1
  47. package/dist/proto/livekit_room.d.ts +0 -3273
  48. package/dist/proto/livekit_room.js +0 -1057
  49. package/dist/proto/livekit_room.js.map +0 -1
  50. package/dist/proto/livekit_webhook.d.ts +0 -4837
  51. package/dist/proto/livekit_webhook.js +0 -169
  52. package/dist/proto/livekit_webhook.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livekit-server-sdk",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "Server-side SDK for LiveKit",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,56 +0,0 @@
1
- import { ClaimGrants, VideoGrant } from './grants';
2
- export interface AccessTokenOptions {
3
- /**
4
- * amount of time before expiration
5
- * expressed in seconds or a string describing a time span zeit/ms.
6
- * eg: '2 days', '10h', or seconds as numeric value
7
- */
8
- ttl?: number | string;
9
- /**
10
- * display name for the participant, available as `Participant.name`
11
- */
12
- name?: string;
13
- /**
14
- * identity of the user, required for room join tokens
15
- */
16
- identity?: string;
17
- /**
18
- * custom metadata to be passed to participants
19
- */
20
- metadata?: string;
21
- }
22
- export declare class AccessToken {
23
- private apiKey;
24
- private apiSecret;
25
- private grants;
26
- identity?: string;
27
- ttl?: number | string;
28
- /**
29
- * Creates a new AccessToken
30
- * @param apiKey API Key, can be set in env LIVEKIT_API_KEY
31
- * @param apiSecret Secret, can be set in env LIVEKIT_API_SECRET
32
- */
33
- constructor(apiKey?: string, apiSecret?: string, options?: AccessTokenOptions);
34
- /**
35
- * Adds a video grant to this token.
36
- * @param grant
37
- */
38
- addGrant(grant: VideoGrant): void;
39
- /**
40
- * Set metadata to be passed to the Participant, used only when joining the room
41
- */
42
- set metadata(md: string);
43
- set name(name: string);
44
- get sha256(): string | undefined;
45
- set sha256(sha: string | undefined);
46
- /**
47
- * @returns JWT encoded token
48
- */
49
- toJwt(): string;
50
- }
51
- export declare class TokenVerifier {
52
- private apiKey;
53
- private apiSecret;
54
- constructor(apiKey: string, apiSecret: string);
55
- verify(token: string): ClaimGrants;
56
- }
@@ -1,118 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.TokenVerifier = exports.AccessToken = void 0;
23
- const jwt = __importStar(require("jsonwebtoken"));
24
- // 6 hours
25
- const defaultTTL = 6 * 60 * 60;
26
- class AccessToken {
27
- /**
28
- * Creates a new AccessToken
29
- * @param apiKey API Key, can be set in env LIVEKIT_API_KEY
30
- * @param apiSecret Secret, can be set in env LIVEKIT_API_SECRET
31
- */
32
- constructor(apiKey, apiSecret, options) {
33
- if (!apiKey) {
34
- apiKey = process.env.LIVEKIT_API_KEY;
35
- }
36
- if (!apiSecret) {
37
- apiSecret = process.env.LIVEKIT_API_SECRET;
38
- }
39
- if (!apiKey || !apiSecret) {
40
- throw Error('api-key and api-secret must be set');
41
- }
42
- else if (typeof document !== 'undefined') {
43
- // check against document rather than window because deno provides window
44
- console.error('You should not include your API secret in your web client bundle.\n\n' +
45
- 'Your web client should request a token from your backend server which should then use ' +
46
- 'the API secret to generate a token. See https://docs.livekit.io/client/connect/');
47
- }
48
- this.apiKey = apiKey;
49
- this.apiSecret = apiSecret;
50
- this.grants = {};
51
- this.identity = options === null || options === void 0 ? void 0 : options.identity;
52
- this.ttl = (options === null || options === void 0 ? void 0 : options.ttl) || defaultTTL;
53
- if (options === null || options === void 0 ? void 0 : options.metadata) {
54
- this.metadata = options.metadata;
55
- }
56
- if (options === null || options === void 0 ? void 0 : options.name) {
57
- this.name = options.name;
58
- }
59
- }
60
- /**
61
- * Adds a video grant to this token.
62
- * @param grant
63
- */
64
- addGrant(grant) {
65
- this.grants.video = grant;
66
- }
67
- /**
68
- * Set metadata to be passed to the Participant, used only when joining the room
69
- */
70
- set metadata(md) {
71
- this.grants.metadata = md;
72
- }
73
- set name(name) {
74
- this.grants.name = name;
75
- }
76
- get sha256() {
77
- return this.grants.sha256;
78
- }
79
- set sha256(sha) {
80
- this.grants.sha256 = sha;
81
- }
82
- /**
83
- * @returns JWT encoded token
84
- */
85
- toJwt() {
86
- // TODO: check for video grant validity
87
- var _a;
88
- const opts = {
89
- issuer: this.apiKey,
90
- expiresIn: this.ttl,
91
- notBefore: 0,
92
- };
93
- if (this.identity) {
94
- opts.subject = this.identity;
95
- opts.jwtid = this.identity;
96
- }
97
- else if ((_a = this.grants.video) === null || _a === void 0 ? void 0 : _a.roomJoin) {
98
- throw Error('identity is required for join but not set');
99
- }
100
- return jwt.sign(this.grants, this.apiSecret, opts);
101
- }
102
- }
103
- exports.AccessToken = AccessToken;
104
- class TokenVerifier {
105
- constructor(apiKey, apiSecret) {
106
- this.apiKey = apiKey;
107
- this.apiSecret = apiSecret;
108
- }
109
- verify(token) {
110
- const decoded = jwt.verify(token, this.apiSecret, { issuer: this.apiKey });
111
- if (!decoded) {
112
- throw Error('invalid token');
113
- }
114
- return decoded;
115
- }
116
- }
117
- exports.TokenVerifier = TokenVerifier;
118
- //# sourceMappingURL=AccessToken.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessToken.js","sourceRoot":"","sources":["../src/AccessToken.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- const jwt = __importStar(require("jsonwebtoken"));
23
- const AccessToken_1 = require("./AccessToken");
24
- const testApiKey = 'abcdefg';
25
- const testSecret = 'abababa';
26
- describe('encoded tokens are valid', () => {
27
- const t = new AccessToken_1.AccessToken(testApiKey, testSecret, {
28
- identity: 'me',
29
- name: 'myname',
30
- });
31
- t.addGrant({ room: 'myroom' });
32
- const token = t.toJwt();
33
- const decoded = jwt.verify(token, testSecret, { jwtid: 'me' });
34
- it('can be decoded', () => {
35
- expect(decoded).not.toBe(undefined);
36
- });
37
- it('has name set', () => {
38
- expect(decoded.name).toBe('myname');
39
- });
40
- it('has video grants set', () => {
41
- expect(decoded.video).toBeTruthy();
42
- expect(decoded.video.room).toEqual('myroom');
43
- });
44
- });
45
- describe('identity is required for only join grants', () => {
46
- it('allows empty identity for create', () => {
47
- const t = new AccessToken_1.AccessToken(testApiKey, testSecret);
48
- t.addGrant({ roomCreate: true });
49
- expect(t.toJwt()).toBeTruthy();
50
- });
51
- it('throws error when identity is not provided for join', () => {
52
- const t = new AccessToken_1.AccessToken(testApiKey, testSecret);
53
- t.addGrant({ roomJoin: true });
54
- expect(() => {
55
- t.toJwt();
56
- }).toThrow();
57
- });
58
- });
59
- describe('verify token is valid', () => {
60
- it('can decode encoded token', () => {
61
- var _a;
62
- const t = new AccessToken_1.AccessToken(testApiKey, testSecret);
63
- t.sha256 = 'abcdefg';
64
- t.addGrant({ roomCreate: true });
65
- const v = new AccessToken_1.TokenVerifier(testApiKey, testSecret);
66
- const decoded = v.verify(t.toJwt());
67
- expect(decoded).not.toBe(undefined);
68
- expect(decoded.sha256).toEqual('abcdefg');
69
- expect((_a = decoded.video) === null || _a === void 0 ? void 0 : _a.roomCreate).toBeTruthy();
70
- });
71
- });
72
- //# sourceMappingURL=AccessToken.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessToken.test.js","sourceRoot":"","sources":["../src/AccessToken.test.ts"],"names":[],"mappings":"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"}
@@ -1,128 +0,0 @@
1
- import { DirectFileOutput, EgressInfo, EncodedFileOutput, EncodingOptions, EncodingOptionsPreset, SegmentedFileOutput, StreamOutput } from './proto/livekit_egress';
2
- import ServiceBase from './ServiceBase';
3
- export interface RoomCompositeOptions {
4
- /**
5
- * egress layout. optional
6
- */
7
- layout?: string;
8
- /**
9
- * encoding options or preset. optional
10
- */
11
- encodingOptions?: EncodingOptionsPreset | EncodingOptions;
12
- /**
13
- * record audio only. optional
14
- */
15
- audioOnly?: boolean;
16
- /**
17
- * record video only. optional
18
- */
19
- videoOnly?: boolean;
20
- /**
21
- * custom template url. optional
22
- */
23
- customBaseUrl?: string;
24
- }
25
- export interface WebOptions {
26
- /**
27
- * encoding options or preset. optional
28
- */
29
- encodingOptions?: EncodingOptionsPreset | EncodingOptions;
30
- /**
31
- * record audio only. optional
32
- */
33
- audioOnly?: boolean;
34
- /**
35
- * record video only. optional
36
- */
37
- videoOnly?: boolean;
38
- }
39
- export interface TrackCompositeOptions {
40
- /**
41
- * audio track ID
42
- */
43
- audioTrackId?: string;
44
- /**
45
- * video track ID
46
- */
47
- videoTrackId?: string;
48
- /**
49
- * encoding options or preset. optional
50
- */
51
- encodingOptions?: EncodingOptionsPreset | EncodingOptions;
52
- }
53
- /**
54
- * Used to supply multiple outputs with an egress request
55
- */
56
- export interface EncodedOutputs {
57
- file?: EncodedFileOutput | undefined;
58
- stream?: StreamOutput | undefined;
59
- segments?: SegmentedFileOutput | undefined;
60
- }
61
- /**
62
- * Client to access Egress APIs
63
- */
64
- export declare class EgressClient extends ServiceBase {
65
- private readonly rpc;
66
- /**
67
- * @param host hostname including protocol. i.e. 'https://cluster.livekit.io'
68
- * @param apiKey API Key, can be set in env var LIVEKIT_API_KEY
69
- * @param secret API Secret, can be set in env var LIVEKIT_API_SECRET
70
- */
71
- constructor(host: string, apiKey?: string, secret?: string);
72
- /**
73
- * @param roomName room name
74
- * @param output file or stream output
75
- * @param opts RoomCompositeOptions
76
- */
77
- startRoomCompositeEgress(roomName: string, output: EncodedOutputs | EncodedFileOutput | StreamOutput | SegmentedFileOutput, opts?: RoomCompositeOptions): Promise<EgressInfo>;
78
- /**
79
- * @deprecated use RoomCompositeOptions instead
80
- */
81
- startRoomCompositeEgress(roomName: string, output: EncodedOutputs | EncodedFileOutput | StreamOutput | SegmentedFileOutput, layout?: string, options?: EncodingOptionsPreset | EncodingOptions, audioOnly?: boolean, videoOnly?: boolean, customBaseUrl?: string): Promise<EgressInfo>;
82
- /**
83
- * @param url url
84
- * @param output file or stream output
85
- * @param opts WebOptions
86
- */
87
- startWebEgress(url: string, output: EncodedOutputs | EncodedFileOutput | StreamOutput | SegmentedFileOutput, opts?: WebOptions): Promise<EgressInfo>;
88
- /**
89
- * @param roomName room name
90
- * @param output file or stream output
91
- * @param opts TrackCompositeOptions
92
- */
93
- startTrackCompositeEgress(roomName: string, output: EncodedOutputs | EncodedFileOutput | StreamOutput | SegmentedFileOutput, opts?: TrackCompositeOptions): Promise<EgressInfo>;
94
- /**
95
- * @deprecated use TrackCompositeOptions instead
96
- */
97
- startTrackCompositeEgress(roomName: string, output: EncodedOutputs | EncodedFileOutput | StreamOutput | SegmentedFileOutput, audioTrackId?: string, videoTrackId?: string, options?: EncodingOptionsPreset | EncodingOptions): Promise<EgressInfo>;
98
- private isEncodedOutputs;
99
- private isEncodedFileOutput;
100
- private isSegmentedFileOutput;
101
- private isStreamOutput;
102
- private getOutputParams;
103
- /**
104
- * @param roomName room name
105
- * @param output file or websocket output
106
- * @param trackId track Id
107
- */
108
- startTrackEgress(roomName: string, output: DirectFileOutput | string, trackId: string): Promise<EgressInfo>;
109
- /**
110
- * @param egressId
111
- * @param layout
112
- */
113
- updateLayout(egressId: string, layout: string): Promise<EgressInfo>;
114
- /**
115
- * @param egressId
116
- * @param addOutputUrls
117
- * @param removeOutputUrls
118
- */
119
- updateStream(egressId: string, addOutputUrls?: string[], removeOutputUrls?: string[]): Promise<EgressInfo>;
120
- /**
121
- * @param roomName list egress for one room only
122
- */
123
- listEgress(roomName?: string): Promise<Array<EgressInfo>>;
124
- /**
125
- * @param egressId
126
- */
127
- stopEgress(egressId: string): Promise<EgressInfo>;
128
- }
@@ -1,263 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.EgressClient = void 0;
16
- const livekit_egress_1 = require("./proto/livekit_egress");
17
- const ServiceBase_1 = __importDefault(require("./ServiceBase"));
18
- const TwirpRPC_1 = require("./TwirpRPC");
19
- const svc = 'Egress';
20
- /**
21
- * Client to access Egress APIs
22
- */
23
- class EgressClient extends ServiceBase_1.default {
24
- /**
25
- * @param host hostname including protocol. i.e. 'https://cluster.livekit.io'
26
- * @param apiKey API Key, can be set in env var LIVEKIT_API_KEY
27
- * @param secret API Secret, can be set in env var LIVEKIT_API_SECRET
28
- */
29
- constructor(host, apiKey, secret) {
30
- super(apiKey, secret);
31
- this.rpc = new TwirpRPC_1.TwirpRpc(host, TwirpRPC_1.livekitPackage);
32
- }
33
- startRoomCompositeEgress(roomName, output, optsOrLayout, options, audioOnly, videoOnly, customBaseUrl) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- let layout;
36
- if (optsOrLayout !== undefined) {
37
- if (typeof optsOrLayout === 'string') {
38
- layout = optsOrLayout;
39
- }
40
- else {
41
- const opts = optsOrLayout;
42
- layout = opts.layout;
43
- options = opts.encodingOptions;
44
- audioOnly = opts.audioOnly;
45
- videoOnly = opts.videoOnly;
46
- customBaseUrl = opts.customBaseUrl;
47
- }
48
- }
49
- layout !== null && layout !== void 0 ? layout : (layout = '');
50
- audioOnly !== null && audioOnly !== void 0 ? audioOnly : (audioOnly = false);
51
- videoOnly !== null && videoOnly !== void 0 ? videoOnly : (videoOnly = false);
52
- customBaseUrl !== null && customBaseUrl !== void 0 ? customBaseUrl : (customBaseUrl = '');
53
- const { file, stream, segments, preset, advanced, fileOutputs, streamOutputs, segmentOutputs } = this.getOutputParams(output, options);
54
- const req = livekit_egress_1.RoomCompositeEgressRequest.toJSON({
55
- roomName,
56
- layout,
57
- audioOnly,
58
- videoOnly,
59
- customBaseUrl,
60
- file,
61
- stream,
62
- segments,
63
- preset,
64
- advanced,
65
- fileOutputs,
66
- streamOutputs,
67
- segmentOutputs,
68
- });
69
- const data = yield this.rpc.request(svc, 'StartRoomCompositeEgress', req, this.authHeader({ roomRecord: true }));
70
- return livekit_egress_1.EgressInfo.fromJSON(data);
71
- });
72
- }
73
- /**
74
- * @param url url
75
- * @param output file or stream output
76
- * @param opts WebOptions
77
- */
78
- startWebEgress(url, output, opts) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- const audioOnly = (opts === null || opts === void 0 ? void 0 : opts.audioOnly) || false;
81
- const videoOnly = (opts === null || opts === void 0 ? void 0 : opts.videoOnly) || false;
82
- const { file, stream, segments, preset, advanced, fileOutputs, streamOutputs, segmentOutputs } = this.getOutputParams(output, opts === null || opts === void 0 ? void 0 : opts.encodingOptions);
83
- const req = livekit_egress_1.WebEgressRequest.toJSON({
84
- url,
85
- audioOnly,
86
- videoOnly,
87
- file,
88
- stream,
89
- segments,
90
- preset,
91
- advanced,
92
- fileOutputs,
93
- streamOutputs,
94
- segmentOutputs,
95
- });
96
- const data = yield this.rpc.request(svc, 'StartWebEgress', req, this.authHeader({ roomRecord: true }));
97
- return livekit_egress_1.EgressInfo.fromJSON(data);
98
- });
99
- }
100
- startTrackCompositeEgress(roomName, output, optsOrAudioTrackId, videoTrackId, options) {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- let audioTrackId;
103
- if (optsOrAudioTrackId !== undefined) {
104
- if (typeof optsOrAudioTrackId === 'string') {
105
- audioTrackId = optsOrAudioTrackId;
106
- }
107
- else {
108
- const opts = optsOrAudioTrackId;
109
- audioTrackId = opts.audioTrackId;
110
- videoTrackId = opts.videoTrackId;
111
- options = opts.encodingOptions;
112
- }
113
- }
114
- audioTrackId !== null && audioTrackId !== void 0 ? audioTrackId : (audioTrackId = '');
115
- videoTrackId !== null && videoTrackId !== void 0 ? videoTrackId : (videoTrackId = '');
116
- const { file, stream, segments, preset, advanced, fileOutputs, streamOutputs, segmentOutputs } = this.getOutputParams(output, options);
117
- const req = livekit_egress_1.TrackCompositeEgressRequest.toJSON({
118
- roomName,
119
- audioTrackId,
120
- videoTrackId,
121
- file,
122
- stream,
123
- segments,
124
- preset,
125
- advanced,
126
- fileOutputs,
127
- streamOutputs,
128
- segmentOutputs,
129
- });
130
- const data = yield this.rpc.request(svc, 'StartTrackCompositeEgress', req, this.authHeader({ roomRecord: true }));
131
- return livekit_egress_1.EgressInfo.fromJSON(data);
132
- });
133
- }
134
- isEncodedOutputs(output) {
135
- return (output.file !== undefined ||
136
- output.stream !== undefined ||
137
- output.segments !== undefined);
138
- }
139
- isEncodedFileOutput(output) {
140
- return (output.filepath !== undefined ||
141
- output.fileType !== undefined);
142
- }
143
- isSegmentedFileOutput(output) {
144
- return (output.filenamePrefix !== undefined ||
145
- output.playlistName !== undefined ||
146
- output.filenameSuffix !== undefined);
147
- }
148
- isStreamOutput(output) {
149
- return (output.protocol !== undefined || output.urls !== undefined);
150
- }
151
- getOutputParams(output, options) {
152
- let file;
153
- let fileOutputs;
154
- let stream;
155
- let streamOutputs;
156
- let segments;
157
- let segmentOutputs;
158
- let preset;
159
- let advanced;
160
- if (this.isEncodedOutputs(output)) {
161
- if (output.file !== undefined) {
162
- fileOutputs = [output.file];
163
- }
164
- if (output.stream !== undefined) {
165
- streamOutputs = [output.stream];
166
- }
167
- if (output.segments !== undefined) {
168
- segmentOutputs = [output.segments];
169
- }
170
- }
171
- else if (this.isEncodedFileOutput(output)) {
172
- file = output;
173
- fileOutputs = [file];
174
- }
175
- else if (this.isSegmentedFileOutput(output)) {
176
- segments = output;
177
- segmentOutputs = [segments];
178
- }
179
- else if (this.isStreamOutput(output)) {
180
- stream = output;
181
- streamOutputs = [stream];
182
- }
183
- if (options) {
184
- if (typeof options === 'number') {
185
- preset = options;
186
- }
187
- else {
188
- advanced = options;
189
- }
190
- }
191
- return { file, stream, segments, preset, advanced, fileOutputs, streamOutputs, segmentOutputs };
192
- }
193
- /**
194
- * @param roomName room name
195
- * @param output file or websocket output
196
- * @param trackId track Id
197
- */
198
- startTrackEgress(roomName, output, trackId) {
199
- return __awaiter(this, void 0, void 0, function* () {
200
- let file;
201
- let websocketUrl;
202
- if (typeof output === 'string') {
203
- websocketUrl = output;
204
- }
205
- else {
206
- file = output;
207
- }
208
- const req = livekit_egress_1.TrackEgressRequest.toJSON({
209
- roomName,
210
- trackId,
211
- file,
212
- websocketUrl,
213
- });
214
- const data = yield this.rpc.request(svc, 'StartTrackEgress', req, this.authHeader({ roomRecord: true }));
215
- return livekit_egress_1.EgressInfo.fromJSON(data);
216
- });
217
- }
218
- /**
219
- * @param egressId
220
- * @param layout
221
- */
222
- updateLayout(egressId, layout) {
223
- return __awaiter(this, void 0, void 0, function* () {
224
- const data = yield this.rpc.request(svc, 'UpdateLayout', livekit_egress_1.UpdateLayoutRequest.toJSON({ egressId, layout }), this.authHeader({ roomRecord: true }));
225
- return livekit_egress_1.EgressInfo.fromJSON(data);
226
- });
227
- }
228
- /**
229
- * @param egressId
230
- * @param addOutputUrls
231
- * @param removeOutputUrls
232
- */
233
- updateStream(egressId, addOutputUrls, removeOutputUrls) {
234
- return __awaiter(this, void 0, void 0, function* () {
235
- addOutputUrls !== null && addOutputUrls !== void 0 ? addOutputUrls : (addOutputUrls = []);
236
- removeOutputUrls !== null && removeOutputUrls !== void 0 ? removeOutputUrls : (removeOutputUrls = []);
237
- const data = yield this.rpc.request(svc, 'UpdateStream', livekit_egress_1.UpdateStreamRequest.toJSON({ egressId, addOutputUrls, removeOutputUrls }), this.authHeader({ roomRecord: true }));
238
- return livekit_egress_1.EgressInfo.fromJSON(data);
239
- });
240
- }
241
- /**
242
- * @param roomName list egress for one room only
243
- */
244
- listEgress(roomName) {
245
- var _a;
246
- return __awaiter(this, void 0, void 0, function* () {
247
- roomName !== null && roomName !== void 0 ? roomName : (roomName = '');
248
- const data = yield this.rpc.request(svc, 'ListEgress', livekit_egress_1.ListEgressRequest.toJSON({ roomName }), this.authHeader({ roomRecord: true }));
249
- return (_a = livekit_egress_1.ListEgressResponse.fromJSON(data).items) !== null && _a !== void 0 ? _a : [];
250
- });
251
- }
252
- /**
253
- * @param egressId
254
- */
255
- stopEgress(egressId) {
256
- return __awaiter(this, void 0, void 0, function* () {
257
- const data = yield this.rpc.request(svc, 'StopEgress', livekit_egress_1.StopEgressRequest.toJSON({ egressId }), this.authHeader({ roomRecord: true }));
258
- return livekit_egress_1.EgressInfo.fromJSON(data);
259
- });
260
- }
261
- }
262
- exports.EgressClient = EgressClient;
263
- //# sourceMappingURL=EgressClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EgressClient.js","sourceRoot":"","sources":["../src/EgressClient.ts"],"names":[],"mappings":"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"}