livekit-server-sdk
Version:
Server-side SDK for LiveKit
539 lines • 18.7 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var SipClient_exports = {};
__export(SipClient_exports, {
SipClient: () => SipClient
});
module.exports = __toCommonJS(SipClient_exports);
var import_protobuf = require("@bufbuild/protobuf");
var import_protocol = require("@livekit/protocol");
var import_ServiceBase = require("./ServiceBase.cjs");
var import_TwirpRPC = require("./TwirpRPC.cjs");
const svc = "SIP";
class SipClient extends import_ServiceBase.ServiceBase {
/**
* @param host - hostname including protocol. i.e. 'https://<project>.livekit.cloud'
* @param apiKey - API Key, can be set in env var LIVEKIT_API_KEY
* @param secret - API Secret, can be set in env var LIVEKIT_API_SECRET
* @param options - client options
*/
constructor(host, apiKey, secret, options) {
super(apiKey, secret);
const rpcOptions = (options == null ? void 0 : options.requestTimeout) ? { requestTimeout: options.requestTimeout } : void 0;
this.rpc = new import_TwirpRPC.TwirpRpc(host, import_TwirpRPC.livekitPackage, rpcOptions);
}
/**
* @param number - phone number of the trunk
* @param opts - CreateSipTrunkOptions
* @deprecated use `createSipInboundTrunk` or `createSipOutboundTrunk`
*/
async createSipTrunk(number, opts) {
let inboundAddresses;
let inboundNumbers;
let inboundUsername = "";
let inboundPassword = "";
let outboundAddress = "";
let outboundUsername = "";
let outboundPassword = "";
let name = "";
let metadata = "";
if (opts !== void 0) {
inboundAddresses = opts.inbound_addresses;
inboundNumbers = opts.inbound_numbers;
inboundUsername = opts.inbound_username || "";
inboundPassword = opts.inbound_password || "";
outboundAddress = opts.outbound_address || "";
outboundUsername = opts.outbound_username || "";
outboundPassword = opts.outbound_password || "";
name = opts.name || "";
metadata = opts.metadata || "";
}
const req = new import_protocol.CreateSIPTrunkRequest({
name,
metadata,
inboundAddresses,
inboundNumbers,
inboundUsername,
inboundPassword,
outboundNumber: number,
outboundAddress,
outboundUsername,
outboundPassword
}).toJson();
const data = await this.rpc.request(
svc,
"CreateSIPTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Create a new SIP inbound trunk.
*
* @param name - human-readable name of the trunk
* @param numbers - phone numbers of the trunk
* @param opts - CreateSipTrunkOptions
* @returns Created SIP inbound trunk
*/
async createSipInboundTrunk(name, numbers, opts) {
if (opts === void 0) {
opts = {};
}
const req = new import_protocol.CreateSIPInboundTrunkRequest({
trunk: new import_protocol.SIPInboundTrunkInfo({
name,
numbers,
metadata: opts == null ? void 0 : opts.metadata,
allowedAddresses: opts.allowedAddresses ?? opts.allowed_addresses,
allowedNumbers: opts.allowedNumbers ?? opts.allowed_numbers,
authUsername: opts.authUsername ?? opts.auth_username,
authPassword: opts.authPassword ?? opts.auth_password,
headers: opts.headers,
headersToAttributes: opts.headersToAttributes,
includeHeaders: opts.includeHeaders,
krispEnabled: opts.krispEnabled,
mediaEncryption: opts.mediaEncryption,
media: opts.media,
ringingTimeout: opts.ringingTimeout ? new import_protobuf.Duration({ seconds: BigInt(opts.ringingTimeout) }) : void 0
})
}).toJson();
const data = await this.rpc.request(
svc,
"CreateSIPInboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPInboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Create a new SIP outbound trunk.
*
* @param name - human-readable name of the trunk
* @param address - hostname and port of the SIP server to dial
* @param numbers - phone numbers of the trunk
* @param opts - CreateSipTrunkOptions
* @returns Created SIP outbound trunk
*/
async createSipOutboundTrunk(name, address, numbers, opts) {
if (opts === void 0) {
opts = {
transport: import_protocol.SIPTransport.SIP_TRANSPORT_AUTO
};
}
const req = new import_protocol.CreateSIPOutboundTrunkRequest({
trunk: new import_protocol.SIPOutboundTrunkInfo({
name,
address,
numbers,
metadata: opts.metadata,
transport: opts.transport,
authUsername: opts.authUsername ?? opts.auth_username,
authPassword: opts.authPassword ?? opts.auth_password,
headers: opts.headers,
headersToAttributes: opts.headersToAttributes,
includeHeaders: opts.includeHeaders,
destinationCountry: opts.destinationCountry,
mediaEncryption: opts.mediaEncryption,
media: opts.media
})
}).toJson();
const data = await this.rpc.request(
svc,
"CreateSIPOutboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPOutboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* @deprecated use `listSipInboundTrunk` or `listSipOutboundTrunk`
*/
async listSipTrunk() {
const req = {};
const data = await this.rpc.request(
svc,
"ListSIPTrunk",
new import_protocol.ListSIPTrunkRequest(req).toJson(),
await this.authHeader({}, { admin: true })
);
return import_protocol.ListSIPTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];
}
/**
* List SIP inbound trunks with optional filtering.
*
* @param list - Request with optional filtering parameters
* @returns Response containing list of SIP inbound trunks
*/
async listSipInboundTrunk(list = {}) {
const req = new import_protocol.ListSIPInboundTrunkRequest(list).toJson();
const data = await this.rpc.request(
svc,
"ListSIPInboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.ListSIPInboundTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];
}
/**
* List SIP outbound trunks with optional filtering.
*
* @param list - Request with optional filtering parameters
* @returns Response containing list of SIP outbound trunks
*/
async listSipOutboundTrunk(list = {}) {
const req = new import_protocol.ListSIPOutboundTrunkRequest(list).toJson();
const data = await this.rpc.request(
svc,
"ListSIPOutboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.ListSIPOutboundTrunkResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];
}
/**
* Delete a SIP trunk.
*
* @param sipTrunkId - ID of the SIP trunk to delete
* @returns Deleted trunk information
*/
async deleteSipTrunk(sipTrunkId) {
const data = await this.rpc.request(
svc,
"DeleteSIPTrunk",
new import_protocol.DeleteSIPTrunkRequest({ sipTrunkId }).toJson(),
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Create a new SIP dispatch rule.
*
* @param rule - SIP dispatch rule to create
* @param opts - CreateSipDispatchRuleOptions
* @returns Created SIP dispatch rule
*/
async createSipDispatchRule(rule, opts) {
if (opts === void 0) {
opts = {};
}
let ruleProto = void 0;
if (rule.type == "direct") {
ruleProto = new import_protocol.SIPDispatchRule({
rule: {
case: "dispatchRuleDirect",
value: new import_protocol.SIPDispatchRuleDirect({
roomName: rule.roomName,
pin: rule.pin || ""
})
}
});
} else if (rule.type == "individual") {
ruleProto = new import_protocol.SIPDispatchRule({
rule: {
case: "dispatchRuleIndividual",
value: new import_protocol.SIPDispatchRuleIndividual({
roomPrefix: rule.roomPrefix,
pin: rule.pin || ""
})
}
});
} else if (rule.type == "callee") {
ruleProto = new import_protocol.SIPDispatchRule({
rule: {
case: "dispatchRuleCallee",
value: new import_protocol.SIPDispatchRuleCallee({
roomPrefix: rule.roomPrefix,
pin: rule.pin || "",
randomize: rule.randomize || false
})
}
});
}
const req = new import_protocol.CreateSIPDispatchRuleRequest({
rule: ruleProto,
trunkIds: opts.trunkIds,
hidePhoneNumber: opts.hidePhoneNumber,
name: opts.name,
metadata: opts.metadata,
attributes: opts.attributes,
roomPreset: opts.roomPreset,
roomConfig: opts.roomConfig
}).toJson();
const data = await this.rpc.request(
svc,
"CreateSIPDispatchRule",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Updates an existing SIP dispatch rule by replacing it entirely.
*
* @param sipDispatchRuleId - ID of the SIP dispatch rule to update
* @param rule - new SIP dispatch rule
* @returns Updated SIP dispatch rule
*/
async updateSipDispatchRule(sipDispatchRuleId, rule) {
const req = new import_protocol.UpdateSIPDispatchRuleRequest({
sipDispatchRuleId,
action: {
case: "replace",
value: rule
}
}).toJson();
const data = await this.rpc.request(
svc,
"UpdateSIPDispatchRule",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Updates specific fields of an existing SIP dispatch rule.
* Only provided fields will be updated.
*
* @param sipDispatchRuleId - ID of the SIP dispatch rule to update
* @param fields - Fields of the dispatch rule to update
* @returns Updated SIP dispatch rule
*/
async updateSipDispatchRuleFields(sipDispatchRuleId, fields = {}) {
const req = new import_protocol.UpdateSIPDispatchRuleRequest({
sipDispatchRuleId,
action: {
case: "update",
value: fields
}
}).toJson();
const data = await this.rpc.request(
svc,
"UpdateSIPDispatchRule",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Updates an existing SIP inbound trunk by replacing it entirely.
*
* @param sipTrunkId - ID of the SIP inbound trunk to update
* @param trunk - SIP inbound trunk to update with
* @returns Updated SIP inbound trunk
*/
async updateSipInboundTrunk(sipTrunkId, trunk) {
const req = new import_protocol.UpdateSIPInboundTrunkRequest({
sipTrunkId,
action: {
case: "replace",
value: trunk
}
}).toJson();
const data = await this.rpc.request(
svc,
"UpdateSIPInboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPInboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Updates specific fields of an existing SIP inbound trunk.
* Only provided fields will be updated.
*
* @param sipTrunkId - ID of the SIP inbound trunk to update
* @param fields - Fields of the inbound trunk to update
* @returns Updated SIP inbound trunk
*/
async updateSipInboundTrunkFields(sipTrunkId, fields) {
const req = new import_protocol.UpdateSIPInboundTrunkRequest({
sipTrunkId,
action: {
case: "update",
value: fields
}
}).toJson();
const data = await this.rpc.request(
svc,
"UpdateSIPInboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPInboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Updates an existing SIP outbound trunk by replacing it entirely.
*
* @param sipTrunkId - ID of the SIP outbound trunk to update
* @param trunk - SIP outbound trunk to update with
* @returns Updated SIP outbound trunk
*/
async updateSipOutboundTrunk(sipTrunkId, trunk) {
const req = new import_protocol.UpdateSIPOutboundTrunkRequest({
sipTrunkId,
action: {
case: "replace",
value: trunk
}
}).toJson();
const data = await this.rpc.request(
svc,
"UpdateSIPOutboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPOutboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Updates specific fields of an existing SIP outbound trunk.
* Only provided fields will be updated.
*
* @param sipTrunkId - ID of the SIP outbound trunk to update
* @param fields - Fields of the outbound trunk to update
* @returns Updated SIP outbound trunk
*/
async updateSipOutboundTrunkFields(sipTrunkId, fields) {
const req = new import_protocol.UpdateSIPOutboundTrunkRequest({
sipTrunkId,
action: {
case: "update",
value: fields
}
}).toJson();
const data = await this.rpc.request(
svc,
"UpdateSIPOutboundTrunk",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPOutboundTrunkInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* List SIP dispatch rules with optional filtering.
*
* @param list - Request with optional filtering parameters
* @returns Response containing list of SIP dispatch rules
*/
async listSipDispatchRule(list = {}) {
const req = new import_protocol.ListSIPDispatchRuleRequest(list).toJson();
const data = await this.rpc.request(
svc,
"ListSIPDispatchRule",
req,
await this.authHeader({}, { admin: true })
);
return import_protocol.ListSIPDispatchRuleResponse.fromJson(data, { ignoreUnknownFields: true }).items ?? [];
}
/**
* Delete a SIP dispatch rule.
*
* @param sipDispatchRuleId - ID of the SIP dispatch rule to delete
* @returns Deleted rule information
*/
async deleteSipDispatchRule(sipDispatchRuleId) {
const data = await this.rpc.request(
svc,
"DeleteSIPDispatchRule",
new import_protocol.DeleteSIPDispatchRuleRequest({ sipDispatchRuleId }).toJson(),
await this.authHeader({}, { admin: true })
);
return import_protocol.SIPDispatchRuleInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Create a new SIP participant.
*
* @param sipTrunkId - sip trunk to use for the call
* @param number - number to dial
* @param roomName - room to attach the call to
* @param opts - CreateSipParticipantOptions
* @param outboundTrunkConfig - Optional outbound trunk configuration for sip participant.
* @returns Created SIP participant
*/
async createSipParticipant(sipTrunkId, number, roomName, opts, outboundTrunkConfig) {
if (opts === void 0) {
opts = {};
}
if (opts.timeout === void 0) {
opts.timeout = opts.waitUntilAnswered ? 60 : 10;
}
const req = new import_protocol.CreateSIPParticipantRequest({
sipTrunkId,
trunk: outboundTrunkConfig,
sipCallTo: number,
sipNumber: opts.fromNumber,
roomName,
participantIdentity: opts.participantIdentity || "sip-participant",
participantName: opts.participantName,
displayName: opts.displayName,
participantMetadata: opts.participantMetadata,
participantAttributes: opts.participantAttributes,
dtmf: opts.dtmf,
playDialtone: opts.playDialtone ?? opts.playRingtone,
headers: opts.headers,
hidePhoneNumber: opts.hidePhoneNumber,
includeHeaders: opts.includeHeaders,
ringingTimeout: opts.ringingTimeout ? new import_protobuf.Duration({ seconds: BigInt(opts.ringingTimeout) }) : void 0,
maxCallDuration: opts.maxCallDuration ? new import_protobuf.Duration({ seconds: BigInt(opts.maxCallDuration) }) : void 0,
krispEnabled: opts.krispEnabled,
waitUntilAnswered: opts.waitUntilAnswered,
media: opts.media
}).toJson();
const data = await this.rpc.request(
svc,
"CreateSIPParticipant",
req,
await this.authHeader({}, { call: true }),
opts.timeout
);
return import_protocol.SIPParticipantInfo.fromJson(data, { ignoreUnknownFields: true });
}
/**
* Transfer a SIP participant to a different room.
*
* @param roomName - room the SIP participant to transfer is connectd to
* @param participantIdentity - identity of the SIP participant to transfer
* @param transferTo - SIP URL to transfer the participant to
* @param opts - TransferSipParticipantOptions
*/
async transferSipParticipant(roomName, participantIdentity, transferTo, opts) {
if (opts === void 0) {
opts = {};
}
const req = new import_protocol.TransferSIPParticipantRequest({
participantIdentity,
roomName,
transferTo,
playDialtone: opts.playDialtone,
headers: opts.headers,
ringingTimeout: opts.ringingTimeout ? new import_protobuf.Duration({ seconds: BigInt(opts.ringingTimeout) }) : void 0
}).toJson();
await this.rpc.request(
svc,
"TransferSIPParticipant",
req,
await this.authHeader({ roomAdmin: true, room: roomName }, { call: true })
);
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
SipClient
});
//# sourceMappingURL=SipClient.cjs.map