livekit-server-sdk 1.1.0 → 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 -112
  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 -116
  9. package/dist/EgressClient.js +0 -220
  10. package/dist/EgressClient.js.map +0 -1
  11. package/dist/IngressClient.d.ts +0 -84
  12. package/dist/IngressClient.js +0 -113
  13. package/dist/IngressClient.js.map +0 -1
  14. package/dist/RoomServiceClient.d.ts +0 -115
  15. package/dist/RoomServiceClient.js +0 -193
  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 -6053
  39. package/dist/proto/livekit_egress.js +0 -2670
  40. package/dist/proto/livekit_egress.js.map +0 -1
  41. package/dist/proto/livekit_ingress.d.ts +0 -1845
  42. package/dist/proto/livekit_ingress.js +0 -1041
  43. package/dist/proto/livekit_ingress.js.map +0 -1
  44. package/dist/proto/livekit_models.d.ts +0 -1280
  45. package/dist/proto/livekit_models.js +0 -2606
  46. package/dist/proto/livekit_models.js.map +0 -1
  47. package/dist/proto/livekit_room.d.ts +0 -2188
  48. package/dist/proto/livekit_room.js +0 -1048
  49. package/dist/proto/livekit_room.js.map +0 -1
  50. package/dist/proto/livekit_webhook.d.ts +0 -2926
  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.0",
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,112 +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
- this.apiKey = apiKey;
43
- this.apiSecret = apiSecret;
44
- this.grants = {};
45
- this.identity = options === null || options === void 0 ? void 0 : options.identity;
46
- this.ttl = (options === null || options === void 0 ? void 0 : options.ttl) || defaultTTL;
47
- if (options === null || options === void 0 ? void 0 : options.metadata) {
48
- this.metadata = options.metadata;
49
- }
50
- if (options === null || options === void 0 ? void 0 : options.name) {
51
- this.name = options.name;
52
- }
53
- }
54
- /**
55
- * Adds a video grant to this token.
56
- * @param grant
57
- */
58
- addGrant(grant) {
59
- this.grants.video = grant;
60
- }
61
- /**
62
- * Set metadata to be passed to the Participant, used only when joining the room
63
- */
64
- set metadata(md) {
65
- this.grants.metadata = md;
66
- }
67
- set name(name) {
68
- this.grants.name = name;
69
- }
70
- get sha256() {
71
- return this.grants.sha256;
72
- }
73
- set sha256(sha) {
74
- this.grants.sha256 = sha;
75
- }
76
- /**
77
- * @returns JWT encoded token
78
- */
79
- toJwt() {
80
- // TODO: check for video grant validity
81
- var _a;
82
- const opts = {
83
- issuer: this.apiKey,
84
- expiresIn: this.ttl,
85
- notBefore: 0,
86
- };
87
- if (this.identity) {
88
- opts.subject = this.identity;
89
- opts.jwtid = this.identity;
90
- }
91
- else if ((_a = this.grants.video) === null || _a === void 0 ? void 0 : _a.roomJoin) {
92
- throw Error('identity is required for join but not set');
93
- }
94
- return jwt.sign(this.grants, this.apiSecret, opts);
95
- }
96
- }
97
- exports.AccessToken = AccessToken;
98
- class TokenVerifier {
99
- constructor(apiKey, apiSecret) {
100
- this.apiKey = apiKey;
101
- this.apiSecret = apiSecret;
102
- }
103
- verify(token) {
104
- const decoded = jwt.verify(token, this.apiSecret, { issuer: this.apiKey });
105
- if (!decoded) {
106
- throw Error('invalid token');
107
- }
108
- return decoded;
109
- }
110
- }
111
- exports.TokenVerifier = TokenVerifier;
112
- //# 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,116 +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
- * Client to access Egress APIs
55
- */
56
- export declare class EgressClient extends ServiceBase {
57
- private readonly rpc;
58
- /**
59
- * @param host hostname including protocol. i.e. 'https://cluster.livekit.io'
60
- * @param apiKey API Key, can be set in env var LIVEKIT_API_KEY
61
- * @param secret API Secret, can be set in env var LIVEKIT_API_SECRET
62
- */
63
- constructor(host: string, apiKey?: string, secret?: string);
64
- /**
65
- * @param roomName room name
66
- * @param output file or stream output
67
- * @param opts RoomCompositeOptions
68
- */
69
- startRoomCompositeEgress(roomName: string, output: EncodedFileOutput | SegmentedFileOutput | StreamOutput, opts?: RoomCompositeOptions): Promise<EgressInfo>;
70
- /**
71
- * @deprecated use RoomCompositeOptions instead
72
- */
73
- startRoomCompositeEgress(roomName: string, output: EncodedFileOutput | SegmentedFileOutput | StreamOutput, layout?: string, options?: EncodingOptionsPreset | EncodingOptions, audioOnly?: boolean, videoOnly?: boolean, customBaseUrl?: string): Promise<EgressInfo>;
74
- /**
75
- * @param url url
76
- * @param output file or stream output
77
- * @param opts WebOptions
78
- */
79
- startWebEgress(url: string, output: EncodedFileOutput | SegmentedFileOutput | StreamOutput, opts?: WebOptions): Promise<EgressInfo>;
80
- /**
81
- * @param roomName room name
82
- * @param output file or stream output
83
- * @param opts TrackCompositeOptions
84
- */
85
- startTrackCompositeEgress(roomName: string, output: EncodedFileOutput | SegmentedFileOutput | StreamOutput, opts?: TrackCompositeOptions): Promise<EgressInfo>;
86
- /**
87
- * @deprecated use TrackCompositeOptions instead
88
- */
89
- startTrackCompositeEgress(roomName: string, output: EncodedFileOutput | SegmentedFileOutput | StreamOutput, audioTrackId?: string, videoTrackId?: string, options?: EncodingOptionsPreset | EncodingOptions): Promise<EgressInfo>;
90
- private getOutputParams;
91
- /**
92
- * @param roomName room name
93
- * @param output file or websocket output
94
- * @param trackId track Id
95
- */
96
- startTrackEgress(roomName: string, output: DirectFileOutput | string, trackId: string): Promise<EgressInfo>;
97
- /**
98
- * @param egressId
99
- * @param layout
100
- */
101
- updateLayout(egressId: string, layout: string): Promise<EgressInfo>;
102
- /**
103
- * @param egressId
104
- * @param addOutputUrls
105
- * @param removeOutputUrls
106
- */
107
- updateStream(egressId: string, addOutputUrls?: string[], removeOutputUrls?: string[]): Promise<EgressInfo>;
108
- /**
109
- * @param roomName list egress for one room only
110
- */
111
- listEgress(roomName?: string): Promise<Array<EgressInfo>>;
112
- /**
113
- * @param egressId
114
- */
115
- stopEgress(egressId: string): Promise<EgressInfo>;
116
- }
@@ -1,220 +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, segments, stream, preset, advanced } = 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
- });
66
- const data = yield this.rpc.request(svc, 'StartRoomCompositeEgress', req, this.authHeader({ roomRecord: true }));
67
- return livekit_egress_1.EgressInfo.fromJSON(data);
68
- });
69
- }
70
- /**
71
- * @param url url
72
- * @param output file or stream output
73
- * @param opts WebOptions
74
- */
75
- startWebEgress(url, output, opts) {
76
- return __awaiter(this, void 0, void 0, function* () {
77
- const audioOnly = (opts === null || opts === void 0 ? void 0 : opts.audioOnly) || false;
78
- const videoOnly = (opts === null || opts === void 0 ? void 0 : opts.videoOnly) || false;
79
- const { file, segments, stream, preset, advanced } = this.getOutputParams(output, opts === null || opts === void 0 ? void 0 : opts.encodingOptions);
80
- const req = livekit_egress_1.WebEgressRequest.toJSON({
81
- url,
82
- audioOnly,
83
- videoOnly,
84
- file,
85
- stream,
86
- segments,
87
- preset,
88
- advanced,
89
- });
90
- const data = yield this.rpc.request(svc, 'StartWebEgress', req, this.authHeader({ roomRecord: true }));
91
- return livekit_egress_1.EgressInfo.fromJSON(data);
92
- });
93
- }
94
- startTrackCompositeEgress(roomName, output, optsOrAudioTrackId, videoTrackId, options) {
95
- return __awaiter(this, void 0, void 0, function* () {
96
- let audioTrackId;
97
- if (optsOrAudioTrackId !== undefined) {
98
- if (typeof optsOrAudioTrackId === 'string') {
99
- audioTrackId = optsOrAudioTrackId;
100
- }
101
- else {
102
- const opts = optsOrAudioTrackId;
103
- audioTrackId = opts.audioTrackId;
104
- videoTrackId = opts.videoTrackId;
105
- options = opts.encodingOptions;
106
- }
107
- }
108
- audioTrackId !== null && audioTrackId !== void 0 ? audioTrackId : (audioTrackId = '');
109
- videoTrackId !== null && videoTrackId !== void 0 ? videoTrackId : (videoTrackId = '');
110
- const { file, segments, stream, preset, advanced } = this.getOutputParams(output, options);
111
- const req = livekit_egress_1.TrackCompositeEgressRequest.toJSON({
112
- roomName,
113
- audioTrackId,
114
- videoTrackId,
115
- file,
116
- stream,
117
- segments,
118
- preset,
119
- advanced,
120
- });
121
- const data = yield this.rpc.request(svc, 'StartTrackCompositeEgress', req, this.authHeader({ roomRecord: true }));
122
- return livekit_egress_1.EgressInfo.fromJSON(data);
123
- });
124
- }
125
- getOutputParams(output, options) {
126
- let file;
127
- let stream;
128
- let segments;
129
- let preset;
130
- let advanced;
131
- if (output.filepath !== undefined) {
132
- file = output;
133
- }
134
- else if (output.filenamePrefix !== undefined) {
135
- segments = output;
136
- }
137
- else {
138
- stream = output;
139
- }
140
- if (options) {
141
- if (typeof options === 'number') {
142
- preset = options;
143
- }
144
- else {
145
- advanced = options;
146
- }
147
- }
148
- return { file, segments, stream, preset, advanced };
149
- }
150
- /**
151
- * @param roomName room name
152
- * @param output file or websocket output
153
- * @param trackId track Id
154
- */
155
- startTrackEgress(roomName, output, trackId) {
156
- return __awaiter(this, void 0, void 0, function* () {
157
- let file;
158
- let websocketUrl;
159
- if (output.filepath !== undefined) {
160
- file = output;
161
- }
162
- else {
163
- websocketUrl = output;
164
- }
165
- const req = livekit_egress_1.TrackEgressRequest.toJSON({
166
- roomName,
167
- trackId,
168
- file,
169
- websocketUrl,
170
- });
171
- const data = yield this.rpc.request(svc, 'StartTrackEgress', req, this.authHeader({ roomRecord: true }));
172
- return livekit_egress_1.EgressInfo.fromJSON(data);
173
- });
174
- }
175
- /**
176
- * @param egressId
177
- * @param layout
178
- */
179
- updateLayout(egressId, layout) {
180
- return __awaiter(this, void 0, void 0, function* () {
181
- const data = yield this.rpc.request(svc, 'UpdateLayout', livekit_egress_1.UpdateLayoutRequest.toJSON({ egressId, layout }), this.authHeader({ roomRecord: true }));
182
- return livekit_egress_1.EgressInfo.fromJSON(data);
183
- });
184
- }
185
- /**
186
- * @param egressId
187
- * @param addOutputUrls
188
- * @param removeOutputUrls
189
- */
190
- updateStream(egressId, addOutputUrls, removeOutputUrls) {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- addOutputUrls !== null && addOutputUrls !== void 0 ? addOutputUrls : (addOutputUrls = []);
193
- removeOutputUrls !== null && removeOutputUrls !== void 0 ? removeOutputUrls : (removeOutputUrls = []);
194
- const data = yield this.rpc.request(svc, 'UpdateStream', livekit_egress_1.UpdateStreamRequest.toJSON({ egressId, addOutputUrls, removeOutputUrls }), this.authHeader({ roomRecord: true }));
195
- return livekit_egress_1.EgressInfo.fromJSON(data);
196
- });
197
- }
198
- /**
199
- * @param roomName list egress for one room only
200
- */
201
- listEgress(roomName) {
202
- var _a;
203
- return __awaiter(this, void 0, void 0, function* () {
204
- roomName !== null && roomName !== void 0 ? roomName : (roomName = '');
205
- const data = yield this.rpc.request(svc, 'ListEgress', livekit_egress_1.ListEgressRequest.toJSON({ roomName }), this.authHeader({ roomRecord: true }));
206
- return (_a = livekit_egress_1.ListEgressResponse.fromJSON(data).items) !== null && _a !== void 0 ? _a : [];
207
- });
208
- }
209
- /**
210
- * @param egressId
211
- */
212
- stopEgress(egressId) {
213
- return __awaiter(this, void 0, void 0, function* () {
214
- const data = yield this.rpc.request(svc, 'StopEgress', livekit_egress_1.StopEgressRequest.toJSON({ egressId }), this.authHeader({ roomRecord: true }));
215
- return livekit_egress_1.EgressInfo.fromJSON(data);
216
- });
217
- }
218
- }
219
- exports.EgressClient = EgressClient;
220
- //# sourceMappingURL=EgressClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EgressClient.js","sourceRoot":"","sources":["../src/EgressClient.ts"],"names":[],"mappings":"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"}