livekit-server-sdk 2.9.3 → 2.9.5

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 (40) hide show
  1. package/dist/AccessToken.d.cts +80 -0
  2. package/dist/AgentDispatchClient.d.cts +50 -0
  3. package/dist/EgressClient.cjs +1 -0
  4. package/dist/EgressClient.cjs.map +1 -1
  5. package/dist/EgressClient.d.cts +168 -0
  6. package/dist/EgressClient.d.ts.map +1 -1
  7. package/dist/EgressClient.js +1 -0
  8. package/dist/EgressClient.js.map +1 -1
  9. package/dist/IngressClient.d.cts +136 -0
  10. package/dist/RoomServiceClient.d.cts +173 -0
  11. package/dist/ServiceBase.d.cts +21 -0
  12. package/dist/SipClient.cjs +49 -90
  13. package/dist/SipClient.cjs.map +1 -1
  14. package/dist/SipClient.d.cts +172 -0
  15. package/dist/SipClient.d.ts +31 -0
  16. package/dist/SipClient.d.ts.map +1 -1
  17. package/dist/SipClient.js +49 -90
  18. package/dist/SipClient.js.map +1 -1
  19. package/dist/TwirpRPC.d.cts +18 -0
  20. package/dist/WebhookReceiver.d.cts +29 -0
  21. package/dist/digest.d.cts +3 -0
  22. package/dist/grants.d.cts +71 -0
  23. package/dist/index.d.cts +12 -0
  24. package/package.json +17 -9
  25. package/src/AccessToken.test.ts +6 -6
  26. package/src/EgressClient.ts +1 -0
  27. package/src/SipClient.ts +78 -98
  28. package/src/grants.test.ts +2 -2
  29. package/dist/AccessToken.test.cjs +0 -147
  30. package/dist/AccessToken.test.cjs.map +0 -1
  31. package/dist/AccessToken.test.js +0 -129
  32. package/dist/AccessToken.test.js.map +0 -1
  33. package/dist/WebhookReceiver.test.cjs +0 -38
  34. package/dist/WebhookReceiver.test.cjs.map +0 -1
  35. package/dist/WebhookReceiver.test.js +0 -37
  36. package/dist/WebhookReceiver.test.js.map +0 -1
  37. package/dist/grants.test.cjs +0 -27
  38. package/dist/grants.test.cjs.map +0 -1
  39. package/dist/grants.test.js +0 -26
  40. package/dist/grants.test.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ import { IngressAudioOptions, IngressVideoOptions, IngressInput, IngressInfo } from '@livekit/protocol';
2
+ import { ServiceBase } from './ServiceBase.cjs';
3
+ import './grants.cjs';
4
+ import 'jose';
5
+
6
+ interface CreateIngressOptions {
7
+ /**
8
+ * ingress name. optional
9
+ */
10
+ name?: string;
11
+ /**
12
+ * name of the room to send media to. required
13
+ */
14
+ roomName?: string;
15
+ /**
16
+ * unique identity of the participant. required
17
+ */
18
+ participantIdentity: string;
19
+ /**
20
+ * participant display name
21
+ */
22
+ participantName?: string;
23
+ /**
24
+ * metadata to attach to the participant
25
+ */
26
+ participantMetadata?: string;
27
+ /**
28
+ * @deprecated use `enableTranscoding` instead.
29
+ * whether to skip transcoding and forward the input media directly. Only supported by WHIP
30
+ */
31
+ bypassTranscoding?: boolean;
32
+ /**
33
+ * whether to enable transcoding or forward the input media directly.
34
+ * Transcoding is required for all input types except WHIP. For WHIP, the default is to not transcode.
35
+ */
36
+ enableTranscoding?: boolean | undefined;
37
+ /**
38
+ * url of the media to pull for ingresses of type URL
39
+ */
40
+ url?: string;
41
+ /**
42
+ * custom audio encoding parameters. optional
43
+ */
44
+ audio?: IngressAudioOptions;
45
+ /**
46
+ * custom video encoding parameters. optional
47
+ */
48
+ video?: IngressVideoOptions;
49
+ }
50
+ interface UpdateIngressOptions {
51
+ /**
52
+ * ingress name. optional
53
+ */
54
+ name: string;
55
+ /**
56
+ * name of the room to send media to.
57
+ */
58
+ roomName?: string;
59
+ /**
60
+ * unique identity of the participant.
61
+ */
62
+ participantIdentity?: string;
63
+ /**
64
+ * participant display name
65
+ */
66
+ participantName?: string;
67
+ /**
68
+ * metadata to attach to the participant
69
+ */
70
+ participantMetadata?: string;
71
+ /**
72
+ * @deprecated use `enableTranscoding` instead
73
+ * whether to skip transcoding and forward the input media directly. Only supported by WHIP
74
+ */
75
+ bypassTranscoding?: boolean | undefined;
76
+ /**
77
+ * whether to enable transcoding or forward the input media directly.
78
+ * Transcoding is required for all input types except WHIP. For WHIP, the default is to not transcode.
79
+ */
80
+ enableTranscoding?: boolean | undefined;
81
+ /**
82
+ * custom audio encoding parameters. optional
83
+ */
84
+ audio?: IngressAudioOptions;
85
+ /**
86
+ * custom video encoding parameters. optional
87
+ */
88
+ video?: IngressVideoOptions;
89
+ }
90
+ interface ListIngressOptions {
91
+ /**
92
+ * list ingress for one room only
93
+ */
94
+ roomName?: string;
95
+ /**
96
+ * list ingress by ID
97
+ */
98
+ ingressId?: string;
99
+ }
100
+ /**
101
+ * Client to access Ingress APIs
102
+ */
103
+ declare class IngressClient extends ServiceBase {
104
+ private readonly rpc;
105
+ /**
106
+ * @param host - hostname including protocol. i.e. 'https://<project>.livekit.cloud'
107
+ * @param apiKey - API Key, can be set in env var LIVEKIT_API_KEY
108
+ * @param secret - API Secret, can be set in env var LIVEKIT_API_SECRET
109
+ */
110
+ constructor(host: string, apiKey?: string, secret?: string);
111
+ /**
112
+ * @param inputType - protocol for the ingress
113
+ * @param opts - CreateIngressOptions
114
+ */
115
+ createIngress(inputType: IngressInput, opts: CreateIngressOptions): Promise<IngressInfo>;
116
+ /**
117
+ * @param ingressId - ID of the ingress to update
118
+ * @param opts - UpdateIngressOptions
119
+ */
120
+ updateIngress(ingressId: string, opts: UpdateIngressOptions): Promise<IngressInfo>;
121
+ /**
122
+ * @deprecated use `listIngress(opts)` or `listIngress(arg)` instead
123
+ * @param roomName - list ingress for one room only
124
+ */
125
+ listIngress(roomName?: string): Promise<Array<IngressInfo>>;
126
+ /**
127
+ * @param opts - list options
128
+ */
129
+ listIngress(opts?: ListIngressOptions): Promise<Array<IngressInfo>>;
130
+ /**
131
+ * @param ingressId - ingress to delete
132
+ */
133
+ deleteIngress(ingressId: string): Promise<IngressInfo>;
134
+ }
135
+
136
+ export { type CreateIngressOptions, IngressClient, type ListIngressOptions, type UpdateIngressOptions };
@@ -0,0 +1,173 @@
1
+ import { RoomEgress, ParticipantPermission, Room, ParticipantInfo, TrackInfo, DataPacket_Kind } from '@livekit/protocol';
2
+ import { ServiceBase } from './ServiceBase.cjs';
3
+ import './grants.cjs';
4
+ import 'jose';
5
+
6
+ /**
7
+ * Options for when creating a room
8
+ */
9
+ interface CreateOptions {
10
+ /**
11
+ * name of the room. required
12
+ */
13
+ name: string;
14
+ /**
15
+ * number of seconds to keep the room open before any participant joins
16
+ */
17
+ emptyTimeout?: number;
18
+ /**
19
+ * number of seconds to keep the room open after the last participant leaves
20
+ * this option is helpful to give a grace period for participants to re-join
21
+ */
22
+ departureTimeout?: number;
23
+ /**
24
+ * limit to the number of participants in a room at a time
25
+ */
26
+ maxParticipants?: number;
27
+ /**
28
+ * initial room metadata
29
+ */
30
+ metadata?: string;
31
+ /**
32
+ * add egress options
33
+ */
34
+ egress?: RoomEgress;
35
+ /**
36
+ * minimum playout delay in milliseconds
37
+ */
38
+ minPlayoutDelay?: number;
39
+ /**
40
+ * maximum playout delay in milliseconds
41
+ */
42
+ maxPlayoutDelay?: number;
43
+ /**
44
+ * improves A/V sync when min_playout_delay set to a value larger than 200ms.
45
+ * It will disables transceiver re-use -- this option is not recommended
46
+ * for rooms with frequent subscription changes
47
+ */
48
+ syncStreams?: boolean;
49
+ /**
50
+ * override the node room is allocated to, for debugging
51
+ * does not work with Cloud
52
+ */
53
+ nodeId?: string;
54
+ }
55
+ type SendDataOptions = {
56
+ /** If set, only deliver to listed participant identities */
57
+ destinationIdentities?: string[];
58
+ destinationSids?: string[];
59
+ topic?: string;
60
+ };
61
+ type UpdateParticipantOptions = {
62
+ /** only attributes you'd want to update should be set, set value to empty string to remove it */
63
+ attributes?: {
64
+ [key: string]: string;
65
+ };
66
+ metadata?: string;
67
+ /** permissions are updated atomically - all desired permissions would need to be set */
68
+ permission?: Partial<ParticipantPermission>;
69
+ name?: string;
70
+ };
71
+ /**
72
+ * Client to access Room APIs
73
+ */
74
+ declare class RoomServiceClient extends ServiceBase {
75
+ private readonly rpc;
76
+ /**
77
+ *
78
+ * @param host - hostname including protocol. i.e. 'https://<project>.livekit.cloud'
79
+ * @param apiKey - API Key, can be set in env var LIVEKIT_API_KEY
80
+ * @param secret - API Secret, can be set in env var LIVEKIT_API_SECRET
81
+ */
82
+ constructor(host: string, apiKey?: string, secret?: string);
83
+ /**
84
+ * Creates a new room. Explicit room creation is not required, since rooms will
85
+ * be automatically created when the first participant joins. This method can be
86
+ * used to customize room settings.
87
+ * @param options -
88
+ */
89
+ createRoom(options: CreateOptions): Promise<Room>;
90
+ /**
91
+ * List active rooms
92
+ * @param names - when undefined or empty, list all rooms.
93
+ * otherwise returns rooms with matching names
94
+ * @returns
95
+ */
96
+ listRooms(names?: string[]): Promise<Room[]>;
97
+ deleteRoom(room: string): Promise<void>;
98
+ /**
99
+ * Update metadata of a room
100
+ * @param room - name of the room
101
+ * @param metadata - the new metadata for the room
102
+ */
103
+ updateRoomMetadata(room: string, metadata: string): Promise<Room>;
104
+ /**
105
+ * List participants in a room
106
+ * @param room - name of the room
107
+ */
108
+ listParticipants(room: string): Promise<ParticipantInfo[]>;
109
+ /**
110
+ * Get information on a specific participant, including the tracks that participant
111
+ * has published
112
+ * @param room - name of the room
113
+ * @param identity - identity of the participant to return
114
+ */
115
+ getParticipant(room: string, identity: string): Promise<ParticipantInfo>;
116
+ /**
117
+ * Removes a participant in the room. This will disconnect the participant
118
+ * and will emit a Disconnected event for that participant.
119
+ * Even after being removed, the participant can still re-join the room.
120
+ * @param room -
121
+ * @param identity -
122
+ */
123
+ removeParticipant(room: string, identity: string): Promise<void>;
124
+ /**
125
+ * Mutes a track that the participant has published.
126
+ * @param room -
127
+ * @param identity -
128
+ * @param trackSid - sid of the track to be muted
129
+ * @param muted - true to mute, false to unmute
130
+ */
131
+ mutePublishedTrack(room: string, identity: string, trackSid: string, muted: boolean): Promise<TrackInfo>;
132
+ /**
133
+ * Updates a participant's state or permissions
134
+ * @param room - target room
135
+ * @param identity - participant identity
136
+ * @param options - participant fields to update
137
+ */
138
+ updateParticipant(room: string, identity: string, options: UpdateParticipantOptions): Promise<ParticipantInfo>;
139
+ /**
140
+ * Updates a participant's state or permissions
141
+ * @param room - target room
142
+ * @param identity - participant identity
143
+ * @param options - participant fields to update
144
+ */
145
+ updateParticipant(room: string, identity: string, metadata?: string, permission?: Partial<ParticipantPermission>, name?: string): Promise<ParticipantInfo>;
146
+ /**
147
+ * Updates a participant's subscription to tracks
148
+ * @param room -
149
+ * @param identity -
150
+ * @param trackSids -
151
+ * @param subscribe - true to subscribe, false to unsubscribe
152
+ */
153
+ updateSubscriptions(room: string, identity: string, trackSids: string[], subscribe: boolean): Promise<void>;
154
+ /**
155
+ * Sends data message to participants in the room
156
+ * @param room -
157
+ * @param data - opaque payload to send
158
+ * @param kind - delivery reliability
159
+ * @param options - optionally specify a topic and destinationSids (when destinationSids is empty, message is sent to everyone)
160
+ */
161
+ sendData(room: string, data: Uint8Array, kind: DataPacket_Kind, options: SendDataOptions): Promise<void>;
162
+ /**
163
+ * Sends data message to participants in the room
164
+ * @deprecated use sendData(room, data, kind, options) instead
165
+ * @param room -
166
+ * @param data - opaque payload to send
167
+ * @param kind - delivery reliability
168
+ * @param destinationSids - optional. when empty, message is sent to everyone
169
+ */
170
+ sendData(room: string, data: Uint8Array, kind: DataPacket_Kind, destinationSids?: string[]): Promise<void>;
171
+ }
172
+
173
+ export { type CreateOptions, RoomServiceClient, type SendDataOptions, type UpdateParticipantOptions };
@@ -0,0 +1,21 @@
1
+ import { VideoGrant, SIPGrant } from './grants.cjs';
2
+ import '@livekit/protocol';
3
+ import 'jose';
4
+
5
+ /**
6
+ * Utilities to handle authentication
7
+ */
8
+ declare class ServiceBase {
9
+ private readonly apiKey?;
10
+ private readonly secret?;
11
+ private readonly ttl;
12
+ /**
13
+ * @param apiKey - API Key.
14
+ * @param secret - API Secret.
15
+ * @param ttl - token TTL
16
+ */
17
+ constructor(apiKey?: string, secret?: string, ttl?: string);
18
+ authHeader(grant: VideoGrant, sip?: SIPGrant): Promise<Record<string, string>>;
19
+ }
20
+
21
+ export { ServiceBase };
@@ -88,33 +88,22 @@ class SipClient extends import_ServiceBase.ServiceBase {
88
88
  * @param opts - CreateSipTrunkOptions
89
89
  */
90
90
  async createSipInboundTrunk(name, numbers, opts) {
91
- let allowedAddresses;
92
- let allowedNumbers;
93
- let authUsername = "";
94
- let authPassword = "";
95
- let metadata = "";
96
- let headers = {};
97
- let headersToAttributes = {};
98
- if (opts !== void 0) {
99
- allowedAddresses = opts.allowed_addresses;
100
- allowedNumbers = opts.allowed_numbers;
101
- authUsername = opts.auth_username || "";
102
- authPassword = opts.auth_password || "";
103
- metadata = opts.metadata || "";
104
- headers = opts.headers || {};
105
- headersToAttributes = opts.headersToAttributes || {};
91
+ if (opts === void 0) {
92
+ opts = {};
106
93
  }
107
94
  const req = new import_protocol.CreateSIPInboundTrunkRequest({
108
95
  trunk: new import_protocol.SIPInboundTrunkInfo({
109
96
  name,
110
97
  numbers,
111
- metadata,
112
- allowedAddresses,
113
- allowedNumbers,
114
- authUsername,
115
- authPassword,
116
- headers,
117
- headersToAttributes
98
+ metadata: opts == null ? void 0 : opts.metadata,
99
+ allowedAddresses: opts.allowedAddresses ?? opts.allowed_addresses,
100
+ allowedNumbers: opts.allowedNumbers ?? opts.allowed_numbers,
101
+ authUsername: opts.authUsername ?? opts.auth_username,
102
+ authPassword: opts.authPassword ?? opts.auth_password,
103
+ headers: opts.headers,
104
+ headersToAttributes: opts.headersToAttributes,
105
+ includeHeaders: opts.includeHeaders,
106
+ krispEnabled: opts.krispEnabled
118
107
  })
119
108
  }).toJson();
120
109
  const data = await this.rpc.request(
@@ -132,31 +121,23 @@ class SipClient extends import_ServiceBase.ServiceBase {
132
121
  * @param opts - CreateSipTrunkOptions
133
122
  */
134
123
  async createSipOutboundTrunk(name, address, numbers, opts) {
135
- let authUsername = "";
136
- let authPassword = "";
137
- let transport = import_protocol.SIPTransport.SIP_TRANSPORT_AUTO;
138
- let metadata = "";
139
- let headers = {};
140
- let headersToAttributes = {};
141
- if (opts !== void 0) {
142
- authUsername = opts.auth_username || "";
143
- authPassword = opts.auth_password || "";
144
- transport = opts.transport || import_protocol.SIPTransport.SIP_TRANSPORT_AUTO;
145
- metadata = opts.metadata || "";
146
- headers = opts.headers || {};
147
- headersToAttributes = opts.headersToAttributes || {};
124
+ if (opts === void 0) {
125
+ opts = {
126
+ transport: import_protocol.SIPTransport.SIP_TRANSPORT_AUTO
127
+ };
148
128
  }
149
129
  const req = new import_protocol.CreateSIPOutboundTrunkRequest({
150
130
  trunk: new import_protocol.SIPOutboundTrunkInfo({
151
131
  name,
152
132
  address,
153
133
  numbers,
154
- metadata,
155
- transport,
156
- authUsername,
157
- authPassword,
158
- headers,
159
- headersToAttributes
134
+ metadata: opts.metadata,
135
+ transport: opts.transport,
136
+ authUsername: opts.authUsername ?? opts.auth_username,
137
+ authPassword: opts.authPassword ?? opts.auth_password,
138
+ headers: opts.headers,
139
+ headersToAttributes: opts.headersToAttributes,
140
+ includeHeaders: opts.includeHeaders
160
141
  })
161
142
  }).toJson();
162
143
  const data = await this.rpc.request(
@@ -217,17 +198,10 @@ class SipClient extends import_ServiceBase.ServiceBase {
217
198
  * @param opts - CreateSipDispatchRuleOptions
218
199
  */
219
200
  async createSipDispatchRule(rule, opts) {
220
- let trunkIds;
221
- let hidePhoneNumber = false;
222
- let name = "";
223
- let metadata = "";
224
- let ruleProto = void 0;
225
- if (opts !== void 0) {
226
- trunkIds = opts.trunkIds;
227
- hidePhoneNumber = opts.hidePhoneNumber || false;
228
- name = opts.name || "";
229
- metadata = opts.metadata || "";
201
+ if (opts === void 0) {
202
+ opts = {};
230
203
  }
204
+ let ruleProto = void 0;
231
205
  if (rule.type == "direct") {
232
206
  ruleProto = new import_protocol.SIPDispatchRule({
233
207
  rule: {
@@ -251,10 +225,13 @@ class SipClient extends import_ServiceBase.ServiceBase {
251
225
  }
252
226
  const req = new import_protocol.CreateSIPDispatchRuleRequest({
253
227
  rule: ruleProto,
254
- trunkIds,
255
- hidePhoneNumber,
256
- name,
257
- metadata
228
+ trunkIds: opts.trunkIds,
229
+ hidePhoneNumber: opts.hidePhoneNumber,
230
+ name: opts.name,
231
+ metadata: opts.metadata,
232
+ attributes: opts.attributes,
233
+ roomPreset: opts.roomPreset,
234
+ roomConfig: opts.roomConfig
258
235
  }).toJson();
259
236
  const data = await this.rpc.request(
260
237
  svc,
@@ -293,42 +270,24 @@ class SipClient extends import_ServiceBase.ServiceBase {
293
270
  * @param opts - CreateSipParticipantOptions
294
271
  */
295
272
  async createSipParticipant(sipTrunkId, number, roomName, opts) {
296
- let participantIdentity = "";
297
- let participantName = "";
298
- let participantMetadata = "";
299
- let dtmf = "";
300
- let playRingtone = false;
301
- let playDialtone = false;
302
- let hidePhoneNumber = false;
303
- let ringingTimeout = void 0;
304
- let maxCallDuration = void 0;
305
- let enableKrisp = void 0;
306
- if (opts !== void 0) {
307
- participantIdentity = opts.participantIdentity || "";
308
- participantName = opts.participantName || "";
309
- participantMetadata = opts.participantMetadata || "";
310
- dtmf = opts.dtmf || "";
311
- playRingtone = opts.playRingtone || false;
312
- playDialtone = opts.playDialtone || playRingtone;
313
- hidePhoneNumber = opts.hidePhoneNumber || false;
314
- ringingTimeout = opts.ringingTimeout || void 0;
315
- maxCallDuration = opts.maxCallDuration || void 0;
316
- enableKrisp = opts.enableKrisp || void 0;
273
+ if (opts === void 0) {
274
+ opts = {};
317
275
  }
318
276
  const req = new import_protocol.CreateSIPParticipantRequest({
319
277
  sipTrunkId,
320
278
  sipCallTo: number,
321
279
  roomName,
322
- participantIdentity,
323
- participantName,
324
- participantMetadata,
325
- dtmf,
326
- playRingtone: playDialtone,
327
- playDialtone,
328
- hidePhoneNumber,
329
- ringingTimeout: ringingTimeout ? new import_protobuf.Duration({ seconds: BigInt(ringingTimeout) }) : void 0,
330
- maxCallDuration: maxCallDuration ? new import_protobuf.Duration({ seconds: BigInt(maxCallDuration) }) : void 0,
331
- enableKrisp
280
+ participantIdentity: opts.participantIdentity || "sip-participant",
281
+ participantName: opts.participantName,
282
+ participantMetadata: opts.participantMetadata,
283
+ dtmf: opts.dtmf,
284
+ playDialtone: opts.playDialtone ?? opts.playRingtone,
285
+ headers: opts.headers,
286
+ hidePhoneNumber: opts.hidePhoneNumber,
287
+ includeHeaders: opts.includeHeaders,
288
+ ringingTimeout: opts.ringingTimeout ? new import_protobuf.Duration({ seconds: BigInt(opts.ringingTimeout) }) : void 0,
289
+ maxCallDuration: opts.maxCallDuration ? new import_protobuf.Duration({ seconds: BigInt(opts.maxCallDuration) }) : void 0,
290
+ enableKrisp: opts.enableKrisp
332
291
  }).toJson();
333
292
  const data = await this.rpc.request(
334
293
  svc,
@@ -344,15 +303,15 @@ class SipClient extends import_ServiceBase.ServiceBase {
344
303
  * @param transferTo - SIP URL to transfer the participant to
345
304
  */
346
305
  async transferSipParticipant(roomName, participantIdentity, transferTo, opts) {
347
- let playDialtone = false;
348
- if (opts !== void 0) {
349
- playDialtone = opts.playDialtone || false;
306
+ if (opts === void 0) {
307
+ opts = {};
350
308
  }
351
309
  const req = new import_protocol.TransferSIPParticipantRequest({
352
310
  participantIdentity,
353
311
  roomName,
354
312
  transferTo,
355
- playDialtone
313
+ playDialtone: opts.playDialtone,
314
+ headers: opts.headers
356
315
  }).toJson();
357
316
  await this.rpc.request(
358
317
  svc,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SipClient.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Duration } from '@bufbuild/protobuf';\nimport {\n CreateSIPDispatchRuleRequest,\n CreateSIPInboundTrunkRequest,\n CreateSIPOutboundTrunkRequest,\n CreateSIPParticipantRequest,\n CreateSIPTrunkRequest,\n DeleteSIPDispatchRuleRequest,\n DeleteSIPTrunkRequest,\n ListSIPDispatchRuleRequest,\n ListSIPDispatchRuleResponse,\n ListSIPInboundTrunkRequest,\n ListSIPInboundTrunkResponse,\n ListSIPOutboundTrunkRequest,\n ListSIPOutboundTrunkResponse,\n ListSIPTrunkRequest,\n ListSIPTrunkResponse,\n SIPDispatchRule,\n SIPDispatchRuleDirect,\n SIPDispatchRuleIndividual,\n SIPDispatchRuleInfo,\n SIPInboundTrunkInfo,\n SIPOutboundTrunkInfo,\n SIPParticipantInfo,\n SIPTransport,\n SIPTrunkInfo,\n TransferSIPParticipantRequest,\n} from '@livekit/protocol';\nimport { ServiceBase } from './ServiceBase.js';\nimport type { Rpc } from './TwirpRPC.js';\nimport { TwirpRpc, livekitPackage } from './TwirpRPC.js';\n\nconst svc = 'SIP';\n\n/**\n * @deprecated use CreateSipInboundTrunkOptions or CreateSipOutboundTrunkOptions\n */\nexport interface CreateSipTrunkOptions {\n name?: string;\n metadata?: string;\n inbound_addresses?: string[];\n inbound_numbers?: string[];\n inbound_username?: string;\n inbound_password?: string;\n outbound_address?: string;\n outbound_username?: string;\n outbound_password?: string;\n}\nexport interface CreateSipInboundTrunkOptions {\n metadata?: string;\n allowed_addresses?: string[];\n allowed_numbers?: string[];\n auth_username?: string;\n auth_password?: string;\n headers?: { [key: string]: string };\n headersToAttributes?: { [key: string]: string };\n}\nexport interface CreateSipOutboundTrunkOptions {\n metadata?: string;\n transport: SIPTransport;\n auth_username?: string;\n auth_password?: string;\n headers?: { [key: string]: string };\n headersToAttributes?: { [key: string]: string };\n}\n\nexport interface SipDispatchRuleDirect {\n type: 'direct';\n roomName: string;\n pin?: string;\n}\n\nexport interface SipDispatchRuleIndividual {\n type: 'individual';\n roomPrefix: string;\n pin?: string;\n}\n\nexport interface CreateSipDispatchRuleOptions {\n name?: string;\n metadata?: string;\n trunkIds?: string[];\n hidePhoneNumber?: boolean;\n}\n\nexport interface CreateSipParticipantOptions {\n participantIdentity?: string;\n participantName?: string;\n participantMetadata?: string;\n dtmf?: string;\n /** @deprecated - use `playDialtone` instead */\n playRingtone?: boolean; // Deprecated, use playDialtone instead\n playDialtone?: boolean;\n hidePhoneNumber?: boolean;\n ringingTimeout?: number; // Duration in seconds\n maxCallDuration?: number; // Duration in seconds\n enableKrisp?: boolean;\n}\n\nexport interface TransferSipParticipantOptions {\n playDialtone?: boolean;\n}\n\n/**\n * Client to access Egress APIs\n */\nexport class SipClient 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 */\n constructor(host: string, apiKey?: string, secret?: string) {\n super(apiKey, secret);\n this.rpc = new TwirpRpc(host, livekitPackage);\n }\n\n /**\n * @param number - phone number of the trunk\n * @param opts - CreateSipTrunkOptions\n * @deprecated use `createSipInboundTrunk` or `createSipOutboundTrunk`\n */\n async createSipTrunk(number: string, opts?: CreateSipTrunkOptions): Promise<SIPTrunkInfo> {\n let inboundAddresses: string[] | undefined;\n let inboundNumbers: string[] | undefined;\n let inboundUsername: string = '';\n let inboundPassword: string = '';\n let outboundAddress: string = '';\n let outboundUsername: string = '';\n let outboundPassword: string = '';\n let name: string = '';\n let metadata: string = '';\n\n if (opts !== undefined) {\n inboundAddresses = opts.inbound_addresses;\n inboundNumbers = opts.inbound_numbers;\n inboundUsername = opts.inbound_username || '';\n inboundPassword = opts.inbound_password || '';\n outboundAddress = opts.outbound_address || '';\n outboundUsername = opts.outbound_username || '';\n outboundPassword = opts.outbound_password || '';\n name = opts.name || '';\n metadata = opts.metadata || '';\n }\n\n const req = new CreateSIPTrunkRequest({\n name: name,\n metadata: metadata,\n inboundAddresses: inboundAddresses,\n inboundNumbers: inboundNumbers,\n inboundUsername: inboundUsername,\n inboundPassword: inboundPassword,\n outboundNumber: number,\n outboundAddress: outboundAddress,\n outboundUsername: outboundUsername,\n outboundPassword: outboundPassword,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPTrunk',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param name - human-readable name of the trunk\n * @param numbers - phone numbers of the trunk\n * @param opts - CreateSipTrunkOptions\n */\n async createSipInboundTrunk(\n name: string,\n numbers: string[],\n opts?: CreateSipInboundTrunkOptions,\n ): Promise<SIPInboundTrunkInfo> {\n let allowedAddresses: string[] | undefined;\n let allowedNumbers: string[] | undefined;\n let authUsername: string = '';\n let authPassword: string = '';\n let metadata: string = '';\n let headers: { [key: string]: string } = {};\n let headersToAttributes: { [key: string]: string } = {};\n\n if (opts !== undefined) {\n allowedAddresses = opts.allowed_addresses;\n allowedNumbers = opts.allowed_numbers;\n authUsername = opts.auth_username || '';\n authPassword = opts.auth_password || '';\n metadata = opts.metadata || '';\n headers = opts.headers || {};\n headersToAttributes = opts.headersToAttributes || {};\n }\n\n const req = new CreateSIPInboundTrunkRequest({\n trunk: new SIPInboundTrunkInfo({\n name: name,\n numbers: numbers,\n metadata: metadata,\n allowedAddresses: allowedAddresses,\n allowedNumbers: allowedNumbers,\n authUsername: authUsername,\n authPassword: authPassword,\n headers: headers,\n headersToAttributes: headersToAttributes,\n }),\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPInboundTrunk',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPInboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param name - human-readable name of the trunk\n * @param address - hostname and port of the SIP server to dial\n * @param numbers - phone numbers of the trunk\n * @param opts - CreateSipTrunkOptions\n */\n async createSipOutboundTrunk(\n name: string,\n address: string,\n numbers: string[],\n opts?: CreateSipOutboundTrunkOptions,\n ): Promise<SIPOutboundTrunkInfo> {\n let authUsername: string = '';\n let authPassword: string = '';\n let transport: SIPTransport = SIPTransport.SIP_TRANSPORT_AUTO;\n let metadata: string = '';\n let headers: { [key: string]: string } = {};\n let headersToAttributes: { [key: string]: string } = {};\n\n if (opts !== undefined) {\n authUsername = opts.auth_username || '';\n authPassword = opts.auth_password || '';\n transport = opts.transport || SIPTransport.SIP_TRANSPORT_AUTO;\n metadata = opts.metadata || '';\n headers = opts.headers || {};\n headersToAttributes = opts.headersToAttributes || {};\n }\n\n const req = new CreateSIPOutboundTrunkRequest({\n trunk: new SIPOutboundTrunkInfo({\n name: name,\n address: address,\n numbers: numbers,\n metadata: metadata,\n transport: transport,\n authUsername: authUsername,\n authPassword: authPassword,\n headers: headers,\n headersToAttributes: headersToAttributes,\n }),\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPOutboundTrunk',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPOutboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @deprecated use `listSipInboundTrunk` or `listSipOutboundTrunk`\n */\n async listSipTrunk(): Promise<Array<SIPTrunkInfo>> {\n const req: Partial<ListSIPTrunkRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPTrunk',\n new ListSIPTrunkRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n async listSipInboundTrunk(): Promise<Array<SIPInboundTrunkInfo>> {\n const req: Partial<ListSIPInboundTrunkRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPInboundTrunk',\n new ListSIPInboundTrunkRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPInboundTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n async listSipOutboundTrunk(): Promise<Array<SIPOutboundTrunkInfo>> {\n const req: Partial<ListSIPOutboundTrunkRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPOutboundTrunk',\n new ListSIPOutboundTrunkRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPOutboundTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n /**\n * @param sipTrunkId - sip trunk to delete\n */\n async deleteSipTrunk(sipTrunkId: string): Promise<SIPTrunkInfo> {\n const data = await this.rpc.request(\n svc,\n 'DeleteSIPTrunk',\n new DeleteSIPTrunkRequest({ sipTrunkId }).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return SIPTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param rule - sip dispatch rule\n * @param opts - CreateSipDispatchRuleOptions\n */\n async createSipDispatchRule(\n rule: SipDispatchRuleDirect | SipDispatchRuleIndividual,\n opts?: CreateSipDispatchRuleOptions,\n ): Promise<SIPDispatchRuleInfo> {\n let trunkIds: string[] | undefined;\n let hidePhoneNumber: boolean = false;\n let name: string = '';\n let metadata: string = '';\n let ruleProto: SIPDispatchRule | undefined = undefined;\n\n if (opts !== undefined) {\n trunkIds = opts.trunkIds;\n hidePhoneNumber = opts.hidePhoneNumber || false;\n name = opts.name || '';\n metadata = opts.metadata || '';\n }\n if (rule.type == 'direct') {\n ruleProto = new SIPDispatchRule({\n rule: {\n case: 'dispatchRuleDirect',\n value: new SIPDispatchRuleDirect({\n roomName: rule.roomName,\n pin: rule.pin || '',\n }),\n },\n });\n } else if (rule.type == 'individual') {\n ruleProto = new SIPDispatchRule({\n rule: {\n case: 'dispatchRuleIndividual',\n value: new SIPDispatchRuleIndividual({\n roomPrefix: rule.roomPrefix,\n pin: rule.pin || '',\n }),\n },\n });\n }\n\n const req = new CreateSIPDispatchRuleRequest({\n rule: ruleProto,\n trunkIds: trunkIds,\n hidePhoneNumber: hidePhoneNumber,\n name: name,\n metadata: metadata,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPDispatchRule',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n async listSipDispatchRule(): Promise<Array<SIPDispatchRuleInfo>> {\n const req: Partial<ListSIPDispatchRuleRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPDispatchRule',\n new ListSIPDispatchRuleRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPDispatchRuleResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n /**\n * @param sipDispatchRuleId - sip trunk to delete\n */\n async deleteSipDispatchRule(sipDispatchRuleId: string): Promise<SIPDispatchRuleInfo> {\n const data = await this.rpc.request(\n svc,\n 'DeleteSIPDispatchRule',\n new DeleteSIPDispatchRuleRequest({ sipDispatchRuleId }).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param sipTrunkId - sip trunk to use for the call\n * @param number - number to dial\n * @param roomName - room to attach the call to\n * @param opts - CreateSipParticipantOptions\n */\n async createSipParticipant(\n sipTrunkId: string,\n number: string,\n roomName: string,\n opts?: CreateSipParticipantOptions,\n ): Promise<SIPParticipantInfo> {\n let participantIdentity: string = '';\n let participantName: string = '';\n let participantMetadata: string = '';\n let dtmf: string = '';\n let playRingtone: boolean = false;\n let playDialtone: boolean = false;\n let hidePhoneNumber: boolean = false;\n let ringingTimeout: number | undefined = undefined;\n let maxCallDuration: number | undefined = undefined;\n let enableKrisp: boolean | undefined = undefined;\n\n if (opts !== undefined) {\n participantIdentity = opts.participantIdentity || '';\n participantName = opts.participantName || '';\n participantMetadata = opts.participantMetadata || '';\n dtmf = opts.dtmf || '';\n playRingtone = opts.playRingtone || false;\n playDialtone = opts.playDialtone || playRingtone; // Enable PlayDialtone if either PlayDialtone or playRingtone is set\n hidePhoneNumber = opts.hidePhoneNumber || false;\n ringingTimeout = opts.ringingTimeout || undefined;\n maxCallDuration = opts.maxCallDuration || undefined;\n enableKrisp = opts.enableKrisp || undefined;\n }\n\n const req = new CreateSIPParticipantRequest({\n sipTrunkId: sipTrunkId,\n sipCallTo: number,\n roomName: roomName,\n participantIdentity: participantIdentity,\n participantName: participantName,\n participantMetadata: participantMetadata,\n dtmf: dtmf,\n playRingtone: playDialtone,\n playDialtone: playDialtone,\n hidePhoneNumber: hidePhoneNumber,\n ringingTimeout: ringingTimeout\n ? new Duration({ seconds: BigInt(ringingTimeout) })\n : undefined,\n maxCallDuration: maxCallDuration\n ? new Duration({ seconds: BigInt(maxCallDuration) })\n : undefined,\n enableKrisp: enableKrisp,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPParticipant',\n req,\n await this.authHeader({}, { call: true }),\n );\n return SIPParticipantInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param roomName - room the SIP participant to transfer is connectd to\n * @param participantIdentity - identity of the SIP participant to transfer\n * @param transferTo - SIP URL to transfer the participant to\n */\n async transferSipParticipant(\n roomName: string,\n participantIdentity: string,\n transferTo: string,\n opts?: TransferSipParticipantOptions,\n ): Promise<void> {\n let playDialtone: boolean = false;\n\n if (opts !== undefined) {\n playDialtone = opts.playDialtone || false;\n }\n\n const req = new TransferSIPParticipantRequest({\n participantIdentity: participantIdentity,\n roomName: roomName,\n transferTo: transferTo,\n playDialtone: playDialtone,\n }).toJson();\n\n await this.rpc.request(\n svc,\n 'TransferSIPParticipant',\n req,\n await this.authHeader({ roomAdmin: true, room: roomName }, { call: true }),\n );\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/SipClient.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Duration } from '@bufbuild/protobuf';\nimport type { RoomConfiguration, SIPHeaderOptions } from '@livekit/protocol';\nimport {\n CreateSIPDispatchRuleRequest,\n CreateSIPInboundTrunkRequest,\n CreateSIPOutboundTrunkRequest,\n CreateSIPParticipantRequest,\n CreateSIPTrunkRequest,\n DeleteSIPDispatchRuleRequest,\n DeleteSIPTrunkRequest,\n ListSIPDispatchRuleRequest,\n ListSIPDispatchRuleResponse,\n ListSIPInboundTrunkRequest,\n ListSIPInboundTrunkResponse,\n ListSIPOutboundTrunkRequest,\n ListSIPOutboundTrunkResponse,\n ListSIPTrunkRequest,\n ListSIPTrunkResponse,\n SIPDispatchRule,\n SIPDispatchRuleDirect,\n SIPDispatchRuleIndividual,\n SIPDispatchRuleInfo,\n SIPInboundTrunkInfo,\n SIPOutboundTrunkInfo,\n SIPParticipantInfo,\n SIPTransport,\n SIPTrunkInfo,\n TransferSIPParticipantRequest,\n} from '@livekit/protocol';\nimport { ServiceBase } from './ServiceBase.js';\nimport type { Rpc } from './TwirpRPC.js';\nimport { TwirpRpc, livekitPackage } from './TwirpRPC.js';\n\nconst svc = 'SIP';\n\n/**\n * @deprecated use CreateSipInboundTrunkOptions or CreateSipOutboundTrunkOptions\n */\nexport interface CreateSipTrunkOptions {\n name?: string;\n metadata?: string;\n inbound_addresses?: string[];\n inbound_numbers?: string[];\n inbound_username?: string;\n inbound_password?: string;\n outbound_address?: string;\n outbound_username?: string;\n outbound_password?: string;\n}\nexport interface CreateSipInboundTrunkOptions {\n metadata?: string;\n /** @deprecated - use `allowedAddresses` instead */\n allowed_addresses?: string[];\n allowedAddresses?: string[];\n /** @deprecated - use `allowedNumbers` instead */\n allowed_numbers?: string[];\n allowedNumbers?: string[];\n /** @deprecated - use `authUsername` instead */\n auth_username?: string;\n authUsername?: string;\n /** @deprecated - use `authPassword` instead */\n auth_password?: string;\n authPassword?: string;\n headers?: { [key: string]: string };\n headersToAttributes?: { [key: string]: string };\n // Map SIP response headers from INVITE to sip.h.* participant attributes automatically.\n includeHeaders?: SIPHeaderOptions;\n krispEnabled?: boolean;\n}\nexport interface CreateSipOutboundTrunkOptions {\n metadata?: string;\n transport: SIPTransport;\n /** @deprecated - use `authUsername` instead */\n auth_username?: string;\n authUsername?: string;\n /** @deprecated - use `authPassword` instead */\n auth_password?: string;\n authPassword?: string;\n headers?: { [key: string]: string };\n headersToAttributes?: { [key: string]: string };\n // Map SIP response headers from INVITE to sip.h.* participant attributes automatically.\n includeHeaders?: SIPHeaderOptions;\n}\n\nexport interface SipDispatchRuleDirect {\n type: 'direct';\n roomName: string;\n pin?: string;\n}\n\nexport interface SipDispatchRuleIndividual {\n type: 'individual';\n roomPrefix: string;\n pin?: string;\n}\n\nexport interface CreateSipDispatchRuleOptions {\n name?: string;\n metadata?: string;\n trunkIds?: string[];\n hidePhoneNumber?: boolean;\n attributes?: { [key: string]: string };\n roomPreset?: string;\n roomConfig?: RoomConfiguration;\n}\n\nexport interface CreateSipParticipantOptions {\n participantIdentity?: string;\n participantName?: string;\n participantMetadata?: string;\n participantAttributes?: { [key: string]: string };\n dtmf?: string;\n /** @deprecated - use `playDialtone` instead */\n playRingtone?: boolean; // Deprecated, use playDialtone instead\n playDialtone?: boolean;\n // These headers are sent as-is and may help identify this call as coming from LiveKit for the other SIP endpoint.\n headers?: { [key: string]: string };\n // Map SIP response headers from INVITE to sip.h.* participant attributes automatically.\n includeHeaders?: SIPHeaderOptions;\n hidePhoneNumber?: boolean;\n ringingTimeout?: number; // Duration in seconds\n maxCallDuration?: number; // Duration in seconds\n enableKrisp?: boolean;\n}\n\nexport interface TransferSipParticipantOptions {\n playDialtone?: boolean;\n headers?: { [key: string]: string };\n}\n\n/**\n * Client to access Egress APIs\n */\nexport class SipClient 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 */\n constructor(host: string, apiKey?: string, secret?: string) {\n super(apiKey, secret);\n this.rpc = new TwirpRpc(host, livekitPackage);\n }\n\n /**\n * @param number - phone number of the trunk\n * @param opts - CreateSipTrunkOptions\n * @deprecated use `createSipInboundTrunk` or `createSipOutboundTrunk`\n */\n async createSipTrunk(number: string, opts?: CreateSipTrunkOptions): Promise<SIPTrunkInfo> {\n let inboundAddresses: string[] | undefined;\n let inboundNumbers: string[] | undefined;\n let inboundUsername: string = '';\n let inboundPassword: string = '';\n let outboundAddress: string = '';\n let outboundUsername: string = '';\n let outboundPassword: string = '';\n let name: string = '';\n let metadata: string = '';\n\n if (opts !== undefined) {\n inboundAddresses = opts.inbound_addresses;\n inboundNumbers = opts.inbound_numbers;\n inboundUsername = opts.inbound_username || '';\n inboundPassword = opts.inbound_password || '';\n outboundAddress = opts.outbound_address || '';\n outboundUsername = opts.outbound_username || '';\n outboundPassword = opts.outbound_password || '';\n name = opts.name || '';\n metadata = opts.metadata || '';\n }\n\n const req = new CreateSIPTrunkRequest({\n name: name,\n metadata: metadata,\n inboundAddresses: inboundAddresses,\n inboundNumbers: inboundNumbers,\n inboundUsername: inboundUsername,\n inboundPassword: inboundPassword,\n outboundNumber: number,\n outboundAddress: outboundAddress,\n outboundUsername: outboundUsername,\n outboundPassword: outboundPassword,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPTrunk',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param name - human-readable name of the trunk\n * @param numbers - phone numbers of the trunk\n * @param opts - CreateSipTrunkOptions\n */\n async createSipInboundTrunk(\n name: string,\n numbers: string[],\n opts?: CreateSipInboundTrunkOptions,\n ): Promise<SIPInboundTrunkInfo> {\n if (opts === undefined) {\n opts = {};\n }\n const req = new CreateSIPInboundTrunkRequest({\n trunk: new SIPInboundTrunkInfo({\n name: name,\n numbers: numbers,\n metadata: opts?.metadata,\n allowedAddresses: opts.allowedAddresses ?? opts.allowed_addresses,\n allowedNumbers: opts.allowedNumbers ?? opts.allowed_numbers,\n authUsername: opts.authUsername ?? opts.auth_username,\n authPassword: opts.authPassword ?? opts.auth_password,\n headers: opts.headers,\n headersToAttributes: opts.headersToAttributes,\n includeHeaders: opts.includeHeaders,\n krispEnabled: opts.krispEnabled,\n }),\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPInboundTrunk',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPInboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param name - human-readable name of the trunk\n * @param address - hostname and port of the SIP server to dial\n * @param numbers - phone numbers of the trunk\n * @param opts - CreateSipTrunkOptions\n */\n async createSipOutboundTrunk(\n name: string,\n address: string,\n numbers: string[],\n opts?: CreateSipOutboundTrunkOptions,\n ): Promise<SIPOutboundTrunkInfo> {\n if (opts === undefined) {\n opts = {\n transport: SIPTransport.SIP_TRANSPORT_AUTO,\n };\n }\n\n const req = new CreateSIPOutboundTrunkRequest({\n trunk: new SIPOutboundTrunkInfo({\n name: name,\n address: address,\n numbers: numbers,\n metadata: opts.metadata,\n transport: opts.transport,\n authUsername: opts.authUsername ?? opts.auth_username,\n authPassword: opts.authPassword ?? opts.auth_password,\n headers: opts.headers,\n headersToAttributes: opts.headersToAttributes,\n includeHeaders: opts.includeHeaders,\n }),\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPOutboundTrunk',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPOutboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @deprecated use `listSipInboundTrunk` or `listSipOutboundTrunk`\n */\n async listSipTrunk(): Promise<Array<SIPTrunkInfo>> {\n const req: Partial<ListSIPTrunkRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPTrunk',\n new ListSIPTrunkRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n async listSipInboundTrunk(): Promise<Array<SIPInboundTrunkInfo>> {\n const req: Partial<ListSIPInboundTrunkRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPInboundTrunk',\n new ListSIPInboundTrunkRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPInboundTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n async listSipOutboundTrunk(): Promise<Array<SIPOutboundTrunkInfo>> {\n const req: Partial<ListSIPOutboundTrunkRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPOutboundTrunk',\n new ListSIPOutboundTrunkRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPOutboundTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n /**\n * @param sipTrunkId - sip trunk to delete\n */\n async deleteSipTrunk(sipTrunkId: string): Promise<SIPTrunkInfo> {\n const data = await this.rpc.request(\n svc,\n 'DeleteSIPTrunk',\n new DeleteSIPTrunkRequest({ sipTrunkId }).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return SIPTrunkInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param rule - sip dispatch rule\n * @param opts - CreateSipDispatchRuleOptions\n */\n async createSipDispatchRule(\n rule: SipDispatchRuleDirect | SipDispatchRuleIndividual,\n opts?: CreateSipDispatchRuleOptions,\n ): Promise<SIPDispatchRuleInfo> {\n if (opts === undefined) {\n opts = {};\n }\n let ruleProto: SIPDispatchRule | undefined = undefined;\n if (rule.type == 'direct') {\n ruleProto = new SIPDispatchRule({\n rule: {\n case: 'dispatchRuleDirect',\n value: new SIPDispatchRuleDirect({\n roomName: rule.roomName,\n pin: rule.pin || '',\n }),\n },\n });\n } else if (rule.type == 'individual') {\n ruleProto = new SIPDispatchRule({\n rule: {\n case: 'dispatchRuleIndividual',\n value: new SIPDispatchRuleIndividual({\n roomPrefix: rule.roomPrefix,\n pin: rule.pin || '',\n }),\n },\n });\n }\n\n const req = new CreateSIPDispatchRuleRequest({\n rule: ruleProto,\n trunkIds: opts.trunkIds,\n hidePhoneNumber: opts.hidePhoneNumber,\n name: opts.name,\n metadata: opts.metadata,\n attributes: opts.attributes,\n roomPreset: opts.roomPreset,\n roomConfig: opts.roomConfig,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPDispatchRule',\n req,\n await this.authHeader({}, { admin: true }),\n );\n return SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n async listSipDispatchRule(): Promise<Array<SIPDispatchRuleInfo>> {\n const req: Partial<ListSIPDispatchRuleRequest> = {};\n const data = await this.rpc.request(\n svc,\n 'ListSIPDispatchRule',\n new ListSIPDispatchRuleRequest(req).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return ListSIPDispatchRuleResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];\n }\n\n /**\n * @param sipDispatchRuleId - sip trunk to delete\n */\n async deleteSipDispatchRule(sipDispatchRuleId: string): Promise<SIPDispatchRuleInfo> {\n const data = await this.rpc.request(\n svc,\n 'DeleteSIPDispatchRule',\n new DeleteSIPDispatchRuleRequest({ sipDispatchRuleId }).toJson(),\n await this.authHeader({}, { admin: true }),\n );\n return SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param sipTrunkId - sip trunk to use for the call\n * @param number - number to dial\n * @param roomName - room to attach the call to\n * @param opts - CreateSipParticipantOptions\n */\n async createSipParticipant(\n sipTrunkId: string,\n number: string,\n roomName: string,\n opts?: CreateSipParticipantOptions,\n ): Promise<SIPParticipantInfo> {\n if (opts === undefined) {\n opts = {};\n }\n\n const req = new CreateSIPParticipantRequest({\n sipTrunkId: sipTrunkId,\n sipCallTo: number,\n roomName: roomName,\n participantIdentity: opts.participantIdentity || 'sip-participant',\n participantName: opts.participantName,\n participantMetadata: opts.participantMetadata,\n dtmf: opts.dtmf,\n playDialtone: opts.playDialtone ?? opts.playRingtone,\n headers: opts.headers,\n hidePhoneNumber: opts.hidePhoneNumber,\n includeHeaders: opts.includeHeaders,\n ringingTimeout: opts.ringingTimeout\n ? new Duration({ seconds: BigInt(opts.ringingTimeout) })\n : undefined,\n maxCallDuration: opts.maxCallDuration\n ? new Duration({ seconds: BigInt(opts.maxCallDuration) })\n : undefined,\n enableKrisp: opts.enableKrisp,\n }).toJson();\n\n const data = await this.rpc.request(\n svc,\n 'CreateSIPParticipant',\n req,\n await this.authHeader({}, { call: true }),\n );\n return SIPParticipantInfo.fromJson(data, { ignoreUnknownFields: true });\n }\n\n /**\n * @param roomName - room the SIP participant to transfer is connectd to\n * @param participantIdentity - identity of the SIP participant to transfer\n * @param transferTo - SIP URL to transfer the participant to\n */\n async transferSipParticipant(\n roomName: string,\n participantIdentity: string,\n transferTo: string,\n opts?: TransferSipParticipantOptions,\n ): Promise<void> {\n if (opts === undefined) {\n opts = {};\n }\n\n const req = new TransferSIPParticipantRequest({\n participantIdentity: participantIdentity,\n roomName: roomName,\n transferTo: transferTo,\n playDialtone: opts.playDialtone,\n headers: opts.headers,\n }).toJson();\n\n await this.rpc.request(\n svc,\n 'TransferSIPParticipant',\n req,\n await this.authHeader({ roomAdmin: true, room: roomName }, { call: true }),\n );\n }\n}\n"],"mappings":"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","names":[]}