livekit-server-sdk 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AccessToken.d.ts +56 -0
- package/dist/AccessToken.js +118 -0
- package/dist/AccessToken.js.map +1 -0
- package/dist/AccessToken.test.d.ts +1 -0
- package/dist/AccessToken.test.js +72 -0
- package/dist/AccessToken.test.js.map +1 -0
- package/dist/EgressClient.d.ts +128 -0
- package/dist/EgressClient.js +263 -0
- package/dist/EgressClient.js.map +1 -0
- package/dist/IngressClient.d.ts +84 -0
- package/dist/IngressClient.js +112 -0
- package/dist/IngressClient.js.map +1 -0
- package/dist/RoomServiceClient.d.ts +132 -0
- package/dist/RoomServiceClient.js +189 -0
- package/dist/RoomServiceClient.js.map +1 -0
- package/dist/ServiceBase.d.ts +16 -0
- package/dist/ServiceBase.js +27 -0
- package/dist/ServiceBase.js.map +1 -0
- package/dist/TwirpRPC.d.ts +16 -0
- package/dist/TwirpRPC.js +37 -0
- package/dist/TwirpRPC.js.map +1 -0
- package/dist/WebhookReceiver.d.ts +14 -0
- package/dist/WebhookReceiver.js +40 -0
- package/dist/WebhookReceiver.js.map +1 -0
- package/dist/WebhookReceiver.test.d.ts +1 -0
- package/dist/WebhookReceiver.test.js +39 -0
- package/dist/WebhookReceiver.test.js.map +1 -0
- package/dist/grants.d.ts +38 -0
- package/dist/grants.js +3 -0
- package/dist/grants.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/proto/google/protobuf/timestamp.d.ts +132 -0
- package/dist/proto/google/protobuf/timestamp.js +92 -0
- package/dist/proto/google/protobuf/timestamp.js.map +1 -0
- package/dist/proto/livekit_egress.d.ts +11266 -0
- package/dist/proto/livekit_egress.js +2869 -0
- package/dist/proto/livekit_egress.js.map +1 -0
- package/dist/proto/livekit_ingress.d.ts +2163 -0
- package/dist/proto/livekit_ingress.js +1264 -0
- package/dist/proto/livekit_ingress.js.map +1 -0
- package/dist/proto/livekit_models.d.ts +1356 -0
- package/dist/proto/livekit_models.js +2893 -0
- package/dist/proto/livekit_models.js.map +1 -0
- package/dist/proto/livekit_room.d.ts +3273 -0
- package/dist/proto/livekit_room.js +1057 -0
- package/dist/proto/livekit_room.js.map +1 -0
- package/dist/proto/livekit_webhook.d.ts +4837 -0
- package/dist/proto/livekit_webhook.js +169 -0
- package/dist/proto/livekit_webhook.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccessToken.js","sourceRoot":"","sources":["../src/AccessToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccessToken.test.js","sourceRoot":"","sources":["../src/AccessToken.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,kDAAoC;AACpC,+CAA2D;AAE3D,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,CAAC,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,EAAE;QAChD,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IACH,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAExB,MAAM,OAAO,GAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/B,MAAM,CAAC,GAAG,EAAE;YACV,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;;QAClC,MAAM,CAAC,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjC,MAAM,CAAC,GAAG,IAAI,2BAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAA,OAAO,CAAC,KAAK,0CAAE,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EgressClient.js","sourceRoot":"","sources":["../src/EgressClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2DAiBgC;AAChC,gEAAwC;AACxC,yCAA2D;AAE3D,MAAM,GAAG,GAAG,QAAQ,CAAC;AAgErB;;GAEG;AACH,MAAa,YAAa,SAAQ,qBAAW;IAG3C;;;;OAIG;IACH,YAAY,IAAY,EAAE,MAAe,EAAE,MAAe;QACxD,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,mBAAQ,CAAC,IAAI,EAAE,yBAAc,CAAC,CAAC;IAChD,CAAC;IAwBK,wBAAwB,CAC5B,QAAgB,EAChB,MAA+E,EAC/E,YAA4C,EAC5C,OAAiD,EACjD,SAAmB,EACnB,SAAmB,EACnB,aAAsB;;YAEtB,IAAI,MAA0B,CAAC;YAC/B,IAAI,YAAY,KAAK,SAAS,EAAE;gBAC9B,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;oBACpC,MAAM,GAAG,YAAY,CAAC;iBACvB;qBAAM;oBACL,MAAM,IAAI,GAAyB,YAAY,CAAC;oBAChD,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACrB,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;oBAC/B,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;iBACpC;aACF;YAED,MAAM,aAAN,MAAM,cAAN,MAAM,IAAN,MAAM,GAAK,EAAE,EAAC;YACd,SAAS,aAAT,SAAS,cAAT,SAAS,IAAT,SAAS,GAAK,KAAK,EAAC;YACpB,SAAS,aAAT,SAAS,cAAT,SAAS,IAAT,SAAS,GAAK,KAAK,EAAC;YACpB,aAAa,aAAb,aAAa,cAAb,aAAa,IAAb,aAAa,GAAK,EAAE,EAAC;YAErB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,GAC5F,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,2CAA0B,CAAC,MAAM,CAAC;gBAC5C,QAAQ;gBACR,MAAM;gBACN,SAAS;gBACT,SAAS;gBACT,aAAa;gBACb,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,QAAQ;gBACR,WAAW;gBACX,aAAa;gBACb,cAAc;aACf,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,0BAA0B,EAC1B,GAAG,EACH,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,2BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;IAED;;;;OAIG;IACG,cAAc,CAClB,GAAW,EACX,MAA+E,EAC/E,IAAiB;;YAEjB,MAAM,SAAS,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,KAAI,KAAK,CAAC;YAC3C,MAAM,SAAS,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,KAAI,KAAK,CAAC;YAC3C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,GAC5F,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,iCAAgB,CAAC,MAAM,CAAC;gBAClC,GAAG;gBACH,SAAS;gBACT,SAAS;gBACT,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,QAAQ;gBACR,WAAW;gBACX,aAAa;gBACb,cAAc;aACf,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,gBAAgB,EAChB,GAAG,EACH,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,2BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;IAsBK,yBAAyB,CAC7B,QAAgB,EAChB,MAA+E,EAC/E,kBAAmD,EACnD,YAAqB,EACrB,OAAiD;;YAEjD,IAAI,YAAgC,CAAC;YACrC,IAAI,kBAAkB,KAAK,SAAS,EAAE;gBACpC,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE;oBAC1C,YAAY,GAAG,kBAAkB,CAAC;iBACnC;qBAAM;oBACL,MAAM,IAAI,GAA0B,kBAAkB,CAAC;oBACvD,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;oBACjC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;oBACjC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;iBAChC;aACF;YAED,YAAY,aAAZ,YAAY,cAAZ,YAAY,IAAZ,YAAY,GAAK,EAAE,EAAC;YACpB,YAAY,aAAZ,YAAY,cAAZ,YAAY,IAAZ,YAAY,GAAK,EAAE,EAAC;YAEpB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,GAC5F,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,4CAA2B,CAAC,MAAM,CAAC;gBAC7C,QAAQ;gBACR,YAAY;gBACZ,YAAY;gBACZ,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,QAAQ;gBACR,WAAW;gBACX,aAAa;gBACb,cAAc;aACf,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,2BAA2B,EAC3B,GAAG,EACH,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,2BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;IAEO,gBAAgB,CAAC,MAAW;QAClC,OAAO,CACY,MAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,MAAO,CAAC,MAAM,KAAK,SAAS;YAC5B,MAAO,CAAC,QAAQ,KAAK,SAAS,CAChD,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,MAAW;QACrC,OAAO,CACe,MAAO,CAAC,QAAQ,KAAK,SAAS;YAC9B,MAAO,CAAC,QAAQ,KAAK,SAAS,CACnD,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,MAAW;QACvC,OAAO,CACiB,MAAO,CAAC,cAAc,KAAK,SAAS;YACpC,MAAO,CAAC,YAAY,KAAK,SAAS;YAClC,MAAO,CAAC,cAAc,KAAK,SAAS,CAC3D,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,MAAW;QAChC,OAAO,CACU,MAAO,CAAC,QAAQ,KAAK,SAAS,IAAmB,MAAO,CAAC,IAAI,KAAK,SAAS,CAC3F,CAAC;IACJ,CAAC;IAEO,eAAe,CACrB,MAA+E,EAC/E,OAAiD;QAEjD,IAAI,IAAmC,CAAC;QACxC,IAAI,WAAiD,CAAC;QACtD,IAAI,MAAgC,CAAC;QACrC,IAAI,aAA8C,CAAC;QACnD,IAAI,QAAyC,CAAC;QAC9C,IAAI,cAAsD,CAAC;QAC3D,IAAI,MAAyC,CAAC;QAC9C,IAAI,QAAqC,CAAC;QAE1C,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACjC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC7B,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC/B,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACjC;YACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;gBACjC,cAAc,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACpC;SACF;aAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;YAC3C,IAAI,GAAG,MAAM,CAAC;YACd,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;SACtB;aAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;YAC7C,QAAQ,GAAG,MAAM,CAAC;YAClB,cAAc,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC7B;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YACtC,MAAM,GAAG,MAAM,CAAC;YAChB,aAAa,GAAG,CAAC,MAAM,CAAC,CAAC;SAC1B;QAED,IAAI,OAAO,EAAE;YACX,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,MAAM,GAA0B,OAAO,CAAC;aACzC;iBAAM;gBACL,QAAQ,GAAoB,OAAO,CAAC;aACrC;SACF;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;IAClG,CAAC;IAED;;;;OAIG;IACG,gBAAgB,CACpB,QAAgB,EAChB,MAAiC,EACjC,OAAe;;YAEf,IAAI,IAAkC,CAAC;YACvC,IAAI,YAAgC,CAAC;YAErC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,YAAY,GAAG,MAAM,CAAC;aACvB;iBAAM;gBACL,IAAI,GAAqB,MAAM,CAAC;aACjC;YAED,MAAM,GAAG,GAAG,mCAAkB,CAAC,MAAM,CAAC;gBACpC,QAAQ;gBACR,OAAO;gBACP,IAAI;gBACJ,YAAY;aACb,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,kBAAkB,EAClB,GAAG,EACH,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,2BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;IAED;;;OAGG;IACG,YAAY,CAAC,QAAgB,EAAE,MAAc;;YACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,cAAc,EACd,oCAAmB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAChD,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,2BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;IAED;;;;OAIG;IACG,YAAY,CAChB,QAAgB,EAChB,aAAwB,EACxB,gBAA2B;;YAE3B,aAAa,aAAb,aAAa,cAAb,aAAa,IAAb,aAAa,GAAK,EAAE,EAAC;YACrB,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,IAAhB,gBAAgB,GAAK,EAAE,EAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,cAAc,EACd,oCAAmB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,EACzE,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,2BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;IAED;;OAEG;IACG,UAAU,CAAC,QAAiB;;;YAChC,QAAQ,aAAR,QAAQ,cAAR,QAAQ,IAAR,QAAQ,GAAK,EAAE,EAAC;YAEhB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,YAAY,EACZ,kCAAiB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,EACtC,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,MAAA,mCAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,mCAAI,EAAE,CAAC;;KACtD;IAED;;OAEG;IACG,UAAU,CAAC,QAAgB;;YAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CACjC,GAAG,EACH,YAAY,EACZ,kCAAiB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,EACtC,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CACtC,CAAC;YACF,OAAO,2BAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;CACF;AA9WD,oCA8WC"}
|