ringcentral-softphone 1.3.5 → 1.3.7
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/call-session/inbound.d.cts +1 -9
- package/dist/call-session/inbound.d.mts +2 -0
- package/dist/call-session/{inbound.js → inbound.mjs} +6 -4
- package/dist/call-session/inbound.mjs.map +1 -0
- package/dist/call-session/index.cjs +4 -4
- package/dist/call-session/index.d.cts +1 -47
- package/dist/call-session/index.d.mts +2 -0
- package/dist/call-session/{index.js → index.mjs} +8 -6
- package/dist/call-session/index.mjs.map +1 -0
- package/dist/call-session/outbound.d.cts +1 -12
- package/dist/call-session/outbound.d.mts +2 -0
- package/dist/call-session/{outbound.js → outbound.mjs} +6 -4
- package/dist/call-session/outbound.mjs.map +1 -0
- package/dist/call-session/streamer.cjs +2 -2
- package/dist/call-session/streamer.d.cts +1 -18
- package/dist/call-session/streamer.d.mts +2 -0
- package/dist/call-session/{streamer.js → streamer.mjs} +2 -0
- package/dist/call-session/streamer.mjs.map +1 -0
- package/dist/{_virtual/_rolldown/runtime.cjs → chunk-CKQMccvm.cjs} +6 -1
- package/dist/{codec.d.ts → codec-Bh7v8J-S.d.mts} +2 -1
- package/dist/codec-Bh7v8J-S.d.mts.map +1 -0
- package/dist/codec-C-VrtVkq.d.cts +19 -0
- package/dist/codec-C-VrtVkq.d.cts.map +1 -0
- package/dist/codec.cjs +1 -1
- package/dist/codec.d.cts +1 -16
- package/dist/codec.d.mts +2 -0
- package/dist/{codec.js → codec.mjs} +2 -0
- package/dist/codec.mjs.map +1 -0
- package/dist/{dtmf.d.ts → dtmf-B13Fz2VR.d.mts} +2 -1
- package/dist/dtmf-B13Fz2VR.d.mts.map +1 -0
- package/dist/dtmf-DcQ-5vSG.d.cts +11 -0
- package/dist/dtmf-DcQ-5vSG.d.cts.map +1 -0
- package/dist/dtmf.cjs +1 -1
- package/dist/dtmf.d.cts +1 -8
- package/dist/dtmf.d.mts +2 -0
- package/dist/{dtmf.js → dtmf.mjs} +2 -0
- package/dist/dtmf.mjs.map +1 -0
- package/dist/inbound--wGoGqLS.d.mts +104 -0
- package/dist/inbound--wGoGqLS.d.mts.map +1 -0
- package/dist/inbound-DquvTSj1.d.cts +104 -0
- package/dist/inbound-DquvTSj1.d.cts.map +1 -0
- package/dist/{sip-message/outbound/index.d.ts → index--UjWgLK-.d.mts} +3 -2
- package/dist/index--UjWgLK-.d.mts.map +1 -0
- package/dist/{sip-message/inbound/index.d.ts → index-BhN2W8AV.d.mts} +3 -2
- package/dist/index-BhN2W8AV.d.mts.map +1 -0
- package/dist/index-CEgs-Dz2.d.cts +1 -0
- package/dist/index-Cf2Cev52.d.cts +9 -0
- package/dist/index-Cf2Cev52.d.cts.map +1 -0
- package/dist/index-XMDop59x.d.cts +9 -0
- package/dist/index-XMDop59x.d.cts.map +1 -0
- package/dist/index-q_LXL61M.d.mts +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.d.cts +1 -30
- package/dist/index.d.mts +2 -0
- package/dist/{index.js → index.mjs} +11 -9
- package/dist/index.mjs.map +1 -0
- package/dist/{sip-message/outbound/request.d.ts → request-B_auLSJn.d.cts} +3 -2
- package/dist/request-B_auLSJn.d.cts.map +1 -0
- package/dist/request-pBe7_mYv.d.mts +11 -0
- package/dist/request-pBe7_mYv.d.mts.map +1 -0
- package/dist/{sip-message/outbound/response.d.ts → response-LRRpY8lX.d.mts} +4 -3
- package/dist/response-LRRpY8lX.d.mts.map +1 -0
- package/dist/response-ReKvb5x9.d.cts +10 -0
- package/dist/response-ReKvb5x9.d.cts.map +1 -0
- package/dist/sip-message/inbound/index.d.cts +1 -6
- package/dist/sip-message/inbound/index.d.mts +2 -0
- package/dist/sip-message/inbound/{index.js → index.mjs} +4 -2
- package/dist/sip-message/inbound/index.mjs.map +1 -0
- package/dist/sip-message/index.d.cts +5 -5
- package/dist/sip-message/index.d.mts +6 -0
- package/dist/sip-message/index.mjs +6 -0
- package/dist/sip-message/outbound/index.d.cts +1 -6
- package/dist/sip-message/outbound/index.d.mts +2 -0
- package/dist/sip-message/outbound/{index.js → index.mjs} +3 -1
- package/dist/sip-message/outbound/index.mjs.map +1 -0
- package/dist/sip-message/outbound/request.d.cts +1 -8
- package/dist/sip-message/outbound/request.d.mts +2 -0
- package/dist/sip-message/outbound/{request.js → request.mjs} +4 -2
- package/dist/sip-message/outbound/request.mjs.map +1 -0
- package/dist/sip-message/outbound/response.d.cts +1 -7
- package/dist/sip-message/outbound/response.d.mts +2 -0
- package/dist/sip-message/outbound/{response.js → response.mjs} +4 -2
- package/dist/sip-message/outbound/response.mjs.map +1 -0
- package/dist/sip-message/response-codes.d.cts +2 -1
- package/dist/sip-message/response-codes.d.cts.map +1 -0
- package/dist/sip-message/{response-codes.d.ts → response-codes.d.mts} +2 -1
- package/dist/sip-message/response-codes.d.mts.map +1 -0
- package/dist/sip-message/{response-codes.js → response-codes.mjs} +2 -0
- package/dist/sip-message/response-codes.mjs.map +1 -0
- package/dist/sip-message/sip-message.d.cts +1 -11
- package/dist/sip-message/sip-message.d.mts +2 -0
- package/dist/sip-message/{sip-message.js → sip-message.mjs} +2 -0
- package/dist/sip-message/sip-message.mjs.map +1 -0
- package/dist/{sip-message/sip-message.d.ts → sip-message-B2D5MPBI.d.cts} +2 -1
- package/dist/sip-message-B2D5MPBI.d.cts.map +1 -0
- package/dist/sip-message-PaPho4qU.d.mts +14 -0
- package/dist/sip-message-PaPho4qU.d.mts.map +1 -0
- package/dist/{types.d.ts → types-DOQ9wmX6.d.mts} +2 -1
- package/dist/types-DOQ9wmX6.d.mts.map +1 -0
- package/dist/types-DZxCsbZE.d.cts +13 -0
- package/dist/types-DZxCsbZE.d.cts.map +1 -0
- package/dist/types.d.cts +1 -11
- package/dist/types.d.mts +2 -0
- package/dist/utils.cjs +2 -2
- package/dist/utils.d.cts +3 -2
- package/dist/utils.d.cts.map +1 -0
- package/dist/{utils.d.ts → utils.d.mts} +3 -2
- package/dist/utils.d.mts.map +1 -0
- package/dist/{utils.js → utils.mjs} +2 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +10 -10
- package/dist/call-session/inbound.d.ts +0 -11
- package/dist/call-session/index.d.ts +0 -49
- package/dist/call-session/outbound.d.ts +0 -14
- package/dist/call-session/streamer.d.ts +0 -20
- package/dist/index.d.ts +0 -32
- package/dist/sip-message/index.d.ts +0 -6
- package/dist/sip-message/index.js +0 -6
- /package/dist/{types.js → types.mjs} +0 -0
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import CallSession from "./index.cjs";
|
|
3
|
-
import Softphone from "../index.cjs";
|
|
4
|
-
|
|
5
|
-
//#region src/call-session/inbound.d.ts
|
|
6
|
-
declare class InboundCallSession extends CallSession {
|
|
7
|
-
constructor(softphone: Softphone, inviteMessage: InboundMessage);
|
|
8
|
-
answer(): Promise<void>;
|
|
9
|
-
}
|
|
1
|
+
import { t as InboundCallSession } from "../inbound-DquvTSj1.cjs";
|
|
10
2
|
export = InboundCallSession;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { localKey, randomInt } from "../utils.
|
|
2
|
-
import OutboundMessage from "../sip-message/outbound/index.
|
|
3
|
-
import "../sip-message/index.
|
|
4
|
-
import CallSession from "./index.
|
|
1
|
+
import { localKey, randomInt } from "../utils.mjs";
|
|
2
|
+
import OutboundMessage from "../sip-message/outbound/index.mjs";
|
|
3
|
+
import "../sip-message/index.mjs";
|
|
4
|
+
import CallSession from "./index.mjs";
|
|
5
5
|
//#region src/call-session/inbound.ts
|
|
6
6
|
var InboundCallSession = class extends CallSession {
|
|
7
7
|
constructor(softphone, inviteMessage) {
|
|
@@ -49,3 +49,5 @@ a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:${localKey}
|
|
|
49
49
|
};
|
|
50
50
|
//#endregion
|
|
51
51
|
export { InboundCallSession as default };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=inbound.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound.mjs","names":[],"sources":["../../src/call-session/inbound.ts"],"sourcesContent":["import type Softphone from \"../index.js\";\nimport { type InboundMessage, OutboundMessage } from \"../sip-message/index.js\";\nimport { localKey, randomInt } from \"../utils.js\";\nimport CallSession from \"./index.js\";\n\nclass InboundCallSession extends CallSession {\n public constructor(softphone: Softphone, inviteMessage: InboundMessage) {\n super(softphone, inviteMessage);\n this.localPeer = inviteMessage.headers.To;\n this.remotePeer = inviteMessage.headers.From;\n // inbound call from call queue, invite message may not have body\n if (inviteMessage.body.length > 0) {\n this.remoteKey = inviteMessage.body.match(\n /AES_CM_128_HMAC_SHA1_80 inline:([\\w+/]+)/,\n )![1];\n }\n }\n\n public async answer() {\n const answerSDP = `\nv=0\no=- ${Date.now()} 0 IN IP4 ${this.softphone.client.localAddress}\ns=rc-softphone-ts\nc=IN IP4 ${this.softphone.client.localAddress}\nt=0 0\nm=audio ${randomInt()} RTP/SAVP ${this.softphone.codec.id} 101\na=rtpmap:${this.softphone.codec.id} ${this.softphone.codec.name}\na=rtpmap:101 telephone-event/8000\na=fmtp:101 0-15\na=sendrecv\na=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:${localKey}\n`.trim();\n this.sdp = answerSDP;\n const newMessage = new OutboundMessage(\n \"SIP/2.0 200 OK\",\n {\n Via: this.sipMessage.headers.Via,\n \"Call-ID\": this.sipMessage.getHeader(\"Call-ID\"),\n From: this.sipMessage.headers.From,\n To: this.sipMessage.headers.To,\n CSeq: this.sipMessage.headers.CSeq,\n Contact: `<sip:${this.softphone.sipInfo.username}@${this.softphone.client.localAddress}:${this.softphone.client.localPort};transport=TLS;ob>`,\n Allow:\n \"PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS\",\n Supported: \"replaces, 100rel, timer, norefersub\",\n \"Session-Expires\": \"14400;refresher=uac\",\n Require: \"timer\",\n \"Content-Type\": \"application/sdp\",\n },\n answerSDP,\n );\n const ackMessage = await this.softphone.send(newMessage, true);\n\n // for inbound call from call queue, ack message may HAVE body (while invite message has no body)\n if (ackMessage.body.length > 0) {\n this.remoteIP = ackMessage.body.match(/c=IN IP4 ([\\d.]+)/)![1];\n this.remotePort = parseInt(\n ackMessage.body.match(/m=audio (\\d+) /)![1],\n 10,\n );\n this.remoteKey = ackMessage.body.match(\n /AES_CM_128_HMAC_SHA1_80 inline:([\\w+/]+)/,\n )![1];\n }\n\n this.startLocalServices();\n }\n}\n\nexport default InboundCallSession;\n"],"mappings":";;;;;AAKA,IAAM,qBAAN,cAAiC,YAAY;CAC3C,YAAmB,WAAsB,eAA+B;AACtE,QAAM,WAAW,cAAc;AAC/B,OAAK,YAAY,cAAc,QAAQ;AACvC,OAAK,aAAa,cAAc,QAAQ;AAExC,MAAI,cAAc,KAAK,SAAS,EAC9B,MAAK,YAAY,cAAc,KAAK,MAClC,2CACD,CAAE;;CAIP,MAAa,SAAS;EACpB,MAAM,YAAY;;MAEhB,KAAK,KAAK,CAAC,YAAY,KAAK,UAAU,OAAO,aAAa;;WAErD,KAAK,UAAU,OAAO,aAAa;;UAEpC,WAAW,CAAC,YAAY,KAAK,UAAU,MAAM,GAAG;WAC/C,KAAK,UAAU,MAAM,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK;;;;4CAIpB,SAAS;EACnD,MAAM;AACJ,OAAK,MAAM;EACX,MAAM,aAAa,IAAI,gBACrB,kBACA;GACE,KAAK,KAAK,WAAW,QAAQ;GAC7B,WAAW,KAAK,WAAW,UAAU,UAAU;GAC/C,MAAM,KAAK,WAAW,QAAQ;GAC9B,IAAI,KAAK,WAAW,QAAQ;GAC5B,MAAM,KAAK,WAAW,QAAQ;GAC9B,SAAS,QAAQ,KAAK,UAAU,QAAQ,SAAS,GAAG,KAAK,UAAU,OAAO,aAAa,GAAG,KAAK,UAAU,OAAO,UAAU;GAC1H,OACE;GACF,WAAW;GACX,mBAAmB;GACnB,SAAS;GACT,gBAAgB;GACjB,EACD,UACD;EACD,MAAM,aAAa,MAAM,KAAK,UAAU,KAAK,YAAY,KAAK;AAG9D,MAAI,WAAW,KAAK,SAAS,GAAG;AAC9B,QAAK,WAAW,WAAW,KAAK,MAAM,oBAAoB,CAAE;AAC5D,QAAK,aAAa,SAChB,WAAW,KAAK,MAAM,iBAAiB,CAAE,IACzC,GACD;AACD,QAAK,YAAY,WAAW,KAAK,MAC/B,2CACD,CAAE;;AAGL,OAAK,oBAAoB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_chunk = require("../chunk-CKQMccvm.cjs");
|
|
2
2
|
const require_dtmf = require("../dtmf.cjs");
|
|
3
3
|
const require_utils = require("../utils.cjs");
|
|
4
4
|
const require_sip_message_outbound_request = require("../sip-message/outbound/request.cjs");
|
|
@@ -7,11 +7,11 @@ require("../sip-message/index.cjs");
|
|
|
7
7
|
const require_call_session_streamer = require("./streamer.cjs");
|
|
8
8
|
let node_buffer = require("node:buffer");
|
|
9
9
|
let node_events = require("node:events");
|
|
10
|
-
node_events =
|
|
10
|
+
node_events = require_chunk.__toESM(node_events, 1);
|
|
11
11
|
let wait_for_async = require("wait-for-async");
|
|
12
|
-
wait_for_async =
|
|
12
|
+
wait_for_async = require_chunk.__toESM(wait_for_async, 1);
|
|
13
13
|
let node_dgram = require("node:dgram");
|
|
14
|
-
node_dgram =
|
|
14
|
+
node_dgram = require_chunk.__toESM(node_dgram, 1);
|
|
15
15
|
let werift_rtp = require("werift-rtp");
|
|
16
16
|
//#region src/call-session/index.ts
|
|
17
17
|
const isDtmfChar = (value) => require_dtmf.phoneChars.includes(value);
|
|
@@ -1,48 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import DTMF from "../dtmf.cjs";
|
|
3
|
-
import Streamer from "./streamer.cjs";
|
|
4
|
-
import Softphone from "../index.cjs";
|
|
5
|
-
import EventEmitter from "node:events";
|
|
6
|
-
import { Buffer } from "node:buffer";
|
|
7
|
-
import dgram from "node:dgram";
|
|
8
|
-
import { RtpPacket, SrtpSession } from "werift-rtp";
|
|
9
|
-
|
|
10
|
-
//#region src/call-session/index.d.ts
|
|
11
|
-
type DtmfChar = (typeof DTMF.phoneChars)[number];
|
|
12
|
-
declare abstract class CallSession extends EventEmitter {
|
|
13
|
-
softphone: Softphone;
|
|
14
|
-
sipMessage: InboundMessage;
|
|
15
|
-
socket: dgram.Socket;
|
|
16
|
-
localPeer: string;
|
|
17
|
-
remotePeer: string;
|
|
18
|
-
remoteIP: string;
|
|
19
|
-
remotePort: number;
|
|
20
|
-
disposed: boolean;
|
|
21
|
-
srtpSession: SrtpSession;
|
|
22
|
-
encoder: {
|
|
23
|
-
encode: (pcm: Buffer) => Buffer;
|
|
24
|
-
};
|
|
25
|
-
decoder: {
|
|
26
|
-
decode: (audio: Buffer) => Buffer;
|
|
27
|
-
};
|
|
28
|
-
sdp: string;
|
|
29
|
-
ssrc: number;
|
|
30
|
-
sequenceNumber: number;
|
|
31
|
-
timestamp: number;
|
|
32
|
-
constructor(softphone: Softphone, sipMessage: InboundMessage);
|
|
33
|
-
set remoteKey(key: string);
|
|
34
|
-
get callId(): string | undefined;
|
|
35
|
-
send(data: string | Buffer): void;
|
|
36
|
-
hangup(): Promise<void>;
|
|
37
|
-
sendDTMF(char: DtmfChar): void;
|
|
38
|
-
sendDTMFs(s: string, delay?: number): Promise<void>;
|
|
39
|
-
streamAudio(input: Buffer): Streamer;
|
|
40
|
-
sendPacket(rtpPacket: RtpPacket): void;
|
|
41
|
-
protected startLocalServices(): void;
|
|
42
|
-
protected dispose(): void;
|
|
43
|
-
transfer(transferTo: string): Promise<void>;
|
|
44
|
-
toggleReceive(toReceive: boolean): Promise<void>;
|
|
45
|
-
hold(): Promise<void>;
|
|
46
|
-
unhold(): Promise<void>;
|
|
47
|
-
}
|
|
1
|
+
import { i as CallSession } from "../inbound-DquvTSj1.cjs";
|
|
48
2
|
export = CallSession;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import DTMF from "../dtmf.
|
|
2
|
-
import { branch, extractAddress, localKey, randomInt } from "../utils.
|
|
3
|
-
import RequestMessage from "../sip-message/outbound/request.
|
|
4
|
-
import ResponseMessage from "../sip-message/outbound/response.
|
|
5
|
-
import "../sip-message/index.
|
|
6
|
-
import Streamer from "./streamer.
|
|
1
|
+
import DTMF from "../dtmf.mjs";
|
|
2
|
+
import { branch, extractAddress, localKey, randomInt } from "../utils.mjs";
|
|
3
|
+
import RequestMessage from "../sip-message/outbound/request.mjs";
|
|
4
|
+
import ResponseMessage from "../sip-message/outbound/response.mjs";
|
|
5
|
+
import "../sip-message/index.mjs";
|
|
6
|
+
import Streamer from "./streamer.mjs";
|
|
7
7
|
import { Buffer } from "node:buffer";
|
|
8
8
|
import EventEmitter from "node:events";
|
|
9
9
|
import waitFor from "wait-for-async";
|
|
@@ -207,3 +207,5 @@ var CallSession = class extends EventEmitter {
|
|
|
207
207
|
};
|
|
208
208
|
//#endregion
|
|
209
209
|
export { CallSession as default };
|
|
210
|
+
|
|
211
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/call-session/index.ts"],"sourcesContent":["import { Buffer } from \"node:buffer\";\nimport dgram from \"node:dgram\";\nimport EventEmitter from \"node:events\";\nimport waitFor from \"wait-for-async\";\nimport { RtpHeader, RtpPacket, SrtpSession } from \"werift-rtp\";\nimport DTMF from \"../dtmf.js\";\nimport type Softphone from \"../index.js\";\nimport {\n type InboundMessage,\n RequestMessage,\n ResponseMessage,\n} from \"../sip-message/index.js\";\nimport { branch, extractAddress, localKey, randomInt } from \"../utils.js\";\nimport Streamer from \"./streamer.js\";\n\ntype DtmfChar = (typeof DTMF.phoneChars)[number];\n\nconst isDtmfChar = (value: string): value is DtmfChar =>\n (DTMF.phoneChars as readonly string[]).includes(value);\n\nabstract class CallSession extends EventEmitter {\n public softphone: Softphone;\n public sipMessage: InboundMessage;\n public socket!: dgram.Socket;\n public localPeer!: string;\n public remotePeer!: string;\n public remoteIP!: string;\n public remotePort!: number;\n public disposed = false;\n public srtpSession!: SrtpSession;\n public encoder: { encode: (pcm: Buffer) => Buffer };\n public decoder: { decode: (audio: Buffer) => Buffer };\n public sdp!: string;\n\n // for audio streaming\n public ssrc = randomInt();\n public sequenceNumber = randomInt();\n public timestamp = randomInt();\n\n public constructor(softphone: Softphone, sipMessage: InboundMessage) {\n super();\n this.softphone = softphone;\n this.encoder = softphone.codec.createEncoder();\n this.decoder = softphone.codec.createDecoder();\n this.sipMessage = sipMessage;\n // inbound call from call queue, invite message may not have body\n if (this.sipMessage.body.length > 0) {\n this.remoteIP = this.sipMessage.body.match(/c=IN IP4 ([\\d.]+)/)![1];\n this.remotePort = parseInt(\n this.sipMessage.body.match(/m=audio (\\d+) /)![1],\n 10,\n );\n }\n }\n\n public set remoteKey(key: string) {\n const localKeyBuffer = Buffer.from(localKey, \"base64\");\n const remoteKeyBuffer = Buffer.from(key, \"base64\");\n this.srtpSession = new SrtpSession({\n profile: 0x0001,\n keys: {\n localMasterKey: localKeyBuffer.subarray(0, 16),\n localMasterSalt: localKeyBuffer.subarray(16, 30),\n remoteMasterKey: remoteKeyBuffer.subarray(0, 16),\n remoteMasterSalt: remoteKeyBuffer.subarray(16, 30),\n },\n });\n }\n\n public get callId() {\n return this.sipMessage.getHeader(\"Call-ID\");\n }\n\n public send(data: string | Buffer) {\n this.socket.send(data, this.remotePort, this.remoteIP);\n }\n\n public async hangup() {\n const requestMessage = new RequestMessage(\n `BYE sip:${this.softphone.sipInfo.domain} SIP/2.0`,\n {\n \"Call-ID\": this.callId,\n From: this.localPeer,\n To: this.remotePeer,\n Via: `SIP/2.0/TLS ${this.softphone.fakeDomain};branch=${branch()}`,\n },\n );\n await this.softphone.send(requestMessage);\n }\n\n public sendDTMF(char: DtmfChar) {\n const payloads = DTMF.charToPayloads(char);\n const timestamp = this.timestamp;\n let first = true;\n for (const payload of payloads) {\n const rtpHeader = new RtpHeader({\n version: 2,\n padding: false,\n paddingSize: 0,\n extension: false,\n marker: first,\n payloadOffset: 12,\n payloadType: 101,\n sequenceNumber: this.sequenceNumber,\n timestamp,\n ssrc: this.ssrc,\n csrcLength: 0,\n csrc: [],\n extensionProfile: 48862,\n extensionLength: undefined,\n extensions: [],\n });\n const rtpPacket = new RtpPacket(rtpHeader, payload);\n this.send(this.srtpSession.encrypt(rtpPacket.payload, rtpPacket.header));\n this.sequenceNumber = (this.sequenceNumber + 1) % 65536;\n first = false;\n }\n this.timestamp += 800;\n }\n\n public async sendDTMFs(s: string, delay = 500) {\n for (const c of s) {\n if (!isDtmfChar(c)) {\n throw new Error(`invalid phone char: ${c}`);\n }\n this.sendDTMF(c);\n await waitFor({ interval: delay });\n }\n }\n\n // buffer is the content of a audio file, it is supposed to be uncompressed PCM data\n // The audio should be playable by command: play -t raw -b 16 -r 16000 -e signed-integer test.wav\n public streamAudio(input: Buffer) {\n const streamer = new Streamer(this, input);\n streamer.start();\n return streamer;\n }\n\n // send a single rtp packet\n public sendPacket(rtpPacket: RtpPacket) {\n if (this.disposed) {\n return;\n }\n this.send(this.srtpSession.encrypt(rtpPacket.payload, rtpPacket.header));\n }\n\n protected startLocalServices() {\n this.socket = dgram.createSocket(\"udp4\");\n this.socket.on(\"message\", (message) => {\n const rtpPacket = RtpPacket.deSerialize(\n this.srtpSession.decrypt(message),\n );\n this.emit(\"rtpPacket\", rtpPacket);\n if (rtpPacket.header.payloadType === 101) {\n this.emit(\"dtmfPacket\", rtpPacket);\n const char = DTMF.payloadToChar(rtpPacket.payload);\n if (char) {\n this.emit(\"dtmf\", char);\n }\n } else if (rtpPacket.header.payloadType === this.softphone.codec.id) {\n if (\n rtpPacket.payload.length === 4 &&\n rtpPacket.payload[0] >= 0x00 &&\n rtpPacket.payload[0] < 0x0c &&\n rtpPacket.payload[1] === 0x8a &&\n rtpPacket.payload[2] === 0x03 &&\n rtpPacket.payload[3] === 0xc0\n ) {\n // special DTMF packet in audio format\n // first byte 0x00 to 0x0c means DTMF 0 to 9, *, #\n // we ignore it since DTMF is handled by `if (rtpPacket.header.payloadType === 101) {`\n return; // ignore it\n }\n try {\n rtpPacket.payload = this.decoder.decode(rtpPacket.payload);\n this.emit(\"audioPacket\", rtpPacket);\n } catch {\n console.error(\"Audio packet decode failed\", rtpPacket);\n }\n }\n });\n\n // as I tested, we can use a random port here and it still works\n // but it seems that in SDP we need to tell remote our local IP Address, not 127.0.0.1\n this.socket.bind(); // random port\n // send a message to remote server so that it knows where to reply\n this.send(\"hello\");\n\n const byeHandler = (inboundMessage: InboundMessage) => {\n if (inboundMessage.getHeader(\"Call-ID\") !== this.callId) {\n return;\n }\n if (inboundMessage.headers.CSeq.endsWith(\" BYE\")) {\n this.softphone.off(\"message\", byeHandler);\n this.dispose();\n }\n };\n this.softphone.on(\"message\", byeHandler);\n }\n\n protected dispose() {\n this.disposed = true;\n this.emit(\"disposed\");\n this.removeAllListeners();\n this.socket?.removeAllListeners();\n this.socket?.close();\n }\n\n public async transfer(transferTo: string) {\n const requestMessage = new RequestMessage(\n `REFER sip:${this.softphone.sipInfo.username}@${this.softphone.sipInfo.outboundProxy};transport=tls SIP/2.0`,\n {\n Via: `SIP/2.0/TLS ${this.softphone.client.localAddress}:${this.softphone.client.localPort};rport;branch=${branch()};alias`,\n \"Max-Forwards\": 70,\n From: this.localPeer,\n To: this.remotePeer,\n Contact: `<sip:${this.softphone.sipInfo.username}@${this.softphone.client.localAddress}:${this.softphone.client.localPort};transport=TLS;ob>`,\n \"Call-ID\": this.callId,\n Event: \"refer\",\n Expires: 600,\n Supported: \"replaces, 100rel, timer, norefersub\",\n Accept: \"message/sipfrag;version=2.0\",\n \"Allow-Events\": \"presence, message-summary, refer\",\n \"Refer-To\": `sip:${transferTo}@${this.softphone.sipInfo.domain}`,\n \"Referred-By\": `<sip:${this.softphone.sipInfo.username}@${this.softphone.sipInfo.domain}>`,\n },\n );\n await this.softphone.send(requestMessage);\n\n return new Promise<void>((resolve) => {\n const notifyHandler = (inboundMessage: InboundMessage) => {\n if (!inboundMessage.subject.startsWith(\"NOTIFY \")) {\n return;\n }\n const responseMessage = new ResponseMessage(inboundMessage, 200);\n this.softphone.send(responseMessage);\n if (inboundMessage.body.trim() === \"SIP/2.0 200 OK\") {\n this.softphone.off(\"message\", notifyHandler);\n resolve();\n }\n };\n this.softphone.on(\"message\", notifyHandler);\n });\n }\n\n public async toggleReceive(toReceive: boolean) {\n let newSDP = this.sdp;\n if (!toReceive) {\n newSDP = newSDP.replace(/a=sendrecv/, \"a=sendonly\");\n }\n const requestMessage = new RequestMessage(\n `INVITE ${extractAddress(this.remotePeer)} SIP/2.0`,\n {\n \"Call-Id\": this.callId,\n From: this.localPeer,\n To: this.remotePeer,\n Via: `SIP/2.0/TLS ${this.softphone.client.localAddress}:${this.softphone.client.localPort};rport;branch=${branch()};alias`,\n \"Content-Type\": \"application/sdp\",\n Contact: ` <sip:${this.softphone.sipInfo.username}@${this.softphone.client.localAddress}:${this.softphone.client.localPort};transport=TLS;ob>`,\n },\n newSDP,\n );\n const replyMessage = await this.softphone.send(requestMessage, true);\n const ackMessage = new RequestMessage(\n `ACK ${extractAddress(this.remotePeer)} SIP/2.0`,\n {\n \"Call-Id\": this.callId,\n From: this.localPeer,\n To: this.remotePeer,\n Via: replyMessage.headers.Via,\n CSeq: replyMessage.headers.CSeq.replace(\" INVITE\", \" ACK\"),\n },\n );\n await this.softphone.send(ackMessage);\n }\n\n public async hold() {\n return this.toggleReceive(false);\n }\n\n public async unhold() {\n return this.toggleReceive(true);\n }\n}\n\nexport default CallSession;\n"],"mappings":"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"}
|
|
@@ -1,13 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import CallSession from "./index.cjs";
|
|
3
|
-
import Softphone from "../index.cjs";
|
|
4
|
-
|
|
5
|
-
//#region src/call-session/outbound.d.ts
|
|
6
|
-
declare class OutboundCallSession extends CallSession {
|
|
7
|
-
constructor(softphone: Softphone, answerMessage: InboundMessage);
|
|
8
|
-
init(): void;
|
|
9
|
-
cancel(): Promise<void>;
|
|
10
|
-
get sessionId(): string;
|
|
11
|
-
get partyId(): string;
|
|
12
|
-
}
|
|
1
|
+
import { r as OutboundCallSession } from "../inbound-DquvTSj1.cjs";
|
|
13
2
|
export = OutboundCallSession;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { extractAddress, withoutTag } from "../utils.
|
|
2
|
-
import RequestMessage from "../sip-message/outbound/request.
|
|
3
|
-
import "../sip-message/index.
|
|
4
|
-
import CallSession from "./index.
|
|
1
|
+
import { extractAddress, withoutTag } from "../utils.mjs";
|
|
2
|
+
import RequestMessage from "../sip-message/outbound/request.mjs";
|
|
3
|
+
import "../sip-message/index.mjs";
|
|
4
|
+
import CallSession from "./index.mjs";
|
|
5
5
|
//#region src/call-session/outbound.ts
|
|
6
6
|
var OutboundCallSession = class extends CallSession {
|
|
7
7
|
constructor(softphone, answerMessage) {
|
|
@@ -55,3 +55,5 @@ var OutboundCallSession = class extends CallSession {
|
|
|
55
55
|
};
|
|
56
56
|
//#endregion
|
|
57
57
|
export { OutboundCallSession as default };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=outbound.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound.mjs","names":[],"sources":["../../src/call-session/outbound.ts"],"sourcesContent":["import type Softphone from \"../index.js\";\nimport { type InboundMessage, RequestMessage } from \"../sip-message/index.js\";\nimport { extractAddress, withoutTag } from \"../utils.js\";\nimport CallSession from \"./index.js\";\n\nclass OutboundCallSession extends CallSession {\n public constructor(softphone: Softphone, answerMessage: InboundMessage) {\n super(softphone, answerMessage);\n this.localPeer = answerMessage.headers.From;\n this.remotePeer = answerMessage.headers.To;\n this.remoteKey = answerMessage.body.match(\n /AES_CM_128_HMAC_SHA1_80 inline:([\\w+/]+)/,\n )![1];\n this.init();\n }\n\n public init() {\n // wait for user to answer the call\n const answerHandler = (message: InboundMessage) => {\n if (message.headers.CSeq !== this.sipMessage.headers.CSeq) {\n return;\n }\n if (message.subject.startsWith(\"SIP/2.0 486\")) {\n this.softphone.off(\"message\", answerHandler);\n this.emit(\"busy\");\n this.dispose();\n return;\n }\n if (message.subject.startsWith(\"SIP/2.0 200\")) {\n this.softphone.off(\"message\", answerHandler);\n this.emit(\"answered\");\n\n const ackMessage = new RequestMessage(\n `ACK ${extractAddress(this.remotePeer)} SIP/2.0`,\n {\n \"Call-ID\": this.callId,\n From: this.localPeer,\n To: this.remotePeer,\n Via: this.sipMessage.headers.Via,\n CSeq: this.sipMessage.headers.CSeq.replace(\" INVITE\", \" ACK\"),\n },\n );\n this.softphone.send(ackMessage);\n }\n };\n this.softphone.on(\"message\", answerHandler);\n this.once(\"answered\", () => this.startLocalServices());\n }\n\n public async cancel() {\n const requestMessage = new RequestMessage(\n `CANCEL ${extractAddress(this.remotePeer)} SIP/2.0`,\n {\n \"Call-ID\": this.callId,\n From: this.localPeer,\n To: withoutTag(this.remotePeer),\n Via: this.sipMessage.headers.Via,\n CSeq: this.sipMessage.headers.CSeq.replace(\" INVITE\", \" CANCEL\"),\n },\n );\n await this.softphone.send(requestMessage);\n }\n\n public get sessionId() {\n const header = this.sipMessage.headers[\"p-rc-api-ids\"];\n const match = header.match(/party-id=([^;]+);session-id=([^;]+)/)!;\n return match[2];\n }\n public get partyId() {\n const header = this.sipMessage.headers[\"p-rc-api-ids\"];\n const match = header.match(/party-id=([^;]+);session-id=([^;]+)/)!;\n return match[1];\n }\n}\n\nexport default OutboundCallSession;\n"],"mappings":";;;;;AAKA,IAAM,sBAAN,cAAkC,YAAY;CAC5C,YAAmB,WAAsB,eAA+B;AACtE,QAAM,WAAW,cAAc;AAC/B,OAAK,YAAY,cAAc,QAAQ;AACvC,OAAK,aAAa,cAAc,QAAQ;AACxC,OAAK,YAAY,cAAc,KAAK,MAClC,2CACD,CAAE;AACH,OAAK,MAAM;;CAGb,OAAc;EAEZ,MAAM,iBAAiB,YAA4B;AACjD,OAAI,QAAQ,QAAQ,SAAS,KAAK,WAAW,QAAQ,KACnD;AAEF,OAAI,QAAQ,QAAQ,WAAW,cAAc,EAAE;AAC7C,SAAK,UAAU,IAAI,WAAW,cAAc;AAC5C,SAAK,KAAK,OAAO;AACjB,SAAK,SAAS;AACd;;AAEF,OAAI,QAAQ,QAAQ,WAAW,cAAc,EAAE;AAC7C,SAAK,UAAU,IAAI,WAAW,cAAc;AAC5C,SAAK,KAAK,WAAW;IAErB,MAAM,aAAa,IAAI,eACrB,OAAO,eAAe,KAAK,WAAW,CAAC,WACvC;KACE,WAAW,KAAK;KAChB,MAAM,KAAK;KACX,IAAI,KAAK;KACT,KAAK,KAAK,WAAW,QAAQ;KAC7B,MAAM,KAAK,WAAW,QAAQ,KAAK,QAAQ,WAAW,OAAO;KAC9D,CACF;AACD,SAAK,UAAU,KAAK,WAAW;;;AAGnC,OAAK,UAAU,GAAG,WAAW,cAAc;AAC3C,OAAK,KAAK,kBAAkB,KAAK,oBAAoB,CAAC;;CAGxD,MAAa,SAAS;EACpB,MAAM,iBAAiB,IAAI,eACzB,UAAU,eAAe,KAAK,WAAW,CAAC,WAC1C;GACE,WAAW,KAAK;GAChB,MAAM,KAAK;GACX,IAAI,WAAW,KAAK,WAAW;GAC/B,KAAK,KAAK,WAAW,QAAQ;GAC7B,MAAM,KAAK,WAAW,QAAQ,KAAK,QAAQ,WAAW,UAAU;GACjE,CACF;AACD,QAAM,KAAK,UAAU,KAAK,eAAe;;CAG3C,IAAW,YAAY;AAGrB,SAFe,KAAK,WAAW,QAAQ,gBAClB,MAAM,sCACf,CAAC;;CAEf,IAAW,UAAU;AAGnB,SAFe,KAAK,WAAW,QAAQ,gBAClB,MAAM,sCACf,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_chunk = require("../chunk-CKQMccvm.cjs");
|
|
2
2
|
let node_buffer = require("node:buffer");
|
|
3
3
|
let node_events = require("node:events");
|
|
4
|
-
node_events =
|
|
4
|
+
node_events = require_chunk.__toESM(node_events, 1);
|
|
5
5
|
let werift_rtp = require("werift-rtp");
|
|
6
6
|
//#region src/call-session/streamer.ts
|
|
7
7
|
var Streamer = class extends node_events.default {
|
|
@@ -1,19 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import EventEmitter from "node:events";
|
|
3
|
-
import { Buffer } from "node:buffer";
|
|
4
|
-
|
|
5
|
-
//#region src/call-session/streamer.d.ts
|
|
6
|
-
declare class Streamer extends EventEmitter {
|
|
7
|
-
paused: boolean;
|
|
8
|
-
private callSession;
|
|
9
|
-
private buffer;
|
|
10
|
-
private originalBuffer;
|
|
11
|
-
constructor(callSession: CallSession, buffer: Buffer);
|
|
12
|
-
start(): void;
|
|
13
|
-
stop(): void;
|
|
14
|
-
pause(): void;
|
|
15
|
-
resume(): void;
|
|
16
|
-
get finished(): boolean;
|
|
17
|
-
private sendPacket;
|
|
18
|
-
}
|
|
1
|
+
import { a as Streamer } from "../inbound-DquvTSj1.cjs";
|
|
19
2
|
export = Streamer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamer.mjs","names":[],"sources":["../../src/call-session/streamer.ts"],"sourcesContent":["import { Buffer } from \"node:buffer\";\nimport EventEmitter from \"node:events\";\n\nimport { RtpHeader, RtpPacket } from \"werift-rtp\";\n\nimport type CallSession from \"./index.js\";\n\nclass Streamer extends EventEmitter {\n public paused = false;\n private callSession: CallSession;\n private buffer: Buffer;\n private originalBuffer: Buffer;\n\n public constructor(callSession: CallSession, buffer: Buffer) {\n super();\n this.callSession = callSession;\n this.buffer = buffer;\n this.originalBuffer = buffer;\n }\n\n public start() {\n this.buffer = this.originalBuffer;\n this.paused = false;\n this.sendPacket();\n }\n\n public stop() {\n this.buffer = Buffer.alloc(0);\n }\n\n public pause() {\n this.paused = true;\n }\n\n public resume() {\n this.paused = false;\n this.sendPacket();\n }\n\n public get finished() {\n return (\n this.callSession.disposed ||\n this.buffer.length < this.callSession.softphone.codec.packetSize\n );\n }\n\n private sendPacket() {\n if (!this.paused && !this.finished) {\n const temp = this.callSession.encoder.encode(\n this.buffer.subarray(0, this.callSession.softphone.codec.packetSize),\n );\n const rtpPacket = new RtpPacket(\n new RtpHeader({\n version: 2,\n padding: false,\n paddingSize: 0,\n extension: false,\n marker: false,\n payloadOffset: 12,\n payloadType: this.callSession.softphone.codec.id,\n sequenceNumber: this.callSession.sequenceNumber,\n timestamp: this.callSession.timestamp,\n ssrc: this.callSession.ssrc,\n csrcLength: 0,\n csrc: [],\n extensionProfile: 48862,\n extensionLength: undefined,\n extensions: [],\n }),\n temp,\n );\n this.callSession.send(\n this.callSession.srtpSession.encrypt(\n rtpPacket.payload,\n rtpPacket.header,\n ),\n );\n this.callSession.sequenceNumber += 1;\n if (this.callSession.sequenceNumber > 65535) {\n this.callSession.sequenceNumber = 0;\n }\n this.callSession.timestamp +=\n this.callSession.softphone.codec.timestampInterval;\n this.buffer = this.buffer.subarray(\n this.callSession.softphone.codec.packetSize,\n );\n if (this.finished) {\n this.emit(\"finished\");\n } else {\n setTimeout(() => this.sendPacket(), 20);\n }\n }\n }\n}\n\nexport default Streamer;\n"],"mappings":";;;;AAOA,IAAM,WAAN,cAAuB,aAAa;CAClC,SAAgB;CAChB;CACA;CACA;CAEA,YAAmB,aAA0B,QAAgB;AAC3D,SAAO;AACP,OAAK,cAAc;AACnB,OAAK,SAAS;AACd,OAAK,iBAAiB;;CAGxB,QAAe;AACb,OAAK,SAAS,KAAK;AACnB,OAAK,SAAS;AACd,OAAK,YAAY;;CAGnB,OAAc;AACZ,OAAK,SAAS,OAAO,MAAM,EAAE;;CAG/B,QAAe;AACb,OAAK,SAAS;;CAGhB,SAAgB;AACd,OAAK,SAAS;AACd,OAAK,YAAY;;CAGnB,IAAW,WAAW;AACpB,SACE,KAAK,YAAY,YACjB,KAAK,OAAO,SAAS,KAAK,YAAY,UAAU,MAAM;;CAI1D,aAAqB;AACnB,MAAI,CAAC,KAAK,UAAU,CAAC,KAAK,UAAU;GAClC,MAAM,OAAO,KAAK,YAAY,QAAQ,OACpC,KAAK,OAAO,SAAS,GAAG,KAAK,YAAY,UAAU,MAAM,WAAW,CACrE;GACD,MAAM,YAAY,IAAI,UACpB,IAAI,UAAU;IACZ,SAAS;IACT,SAAS;IACT,aAAa;IACb,WAAW;IACX,QAAQ;IACR,eAAe;IACf,aAAa,KAAK,YAAY,UAAU,MAAM;IAC9C,gBAAgB,KAAK,YAAY;IACjC,WAAW,KAAK,YAAY;IAC5B,MAAM,KAAK,YAAY;IACvB,YAAY;IACZ,MAAM,EAAE;IACR,kBAAkB;IAClB,iBAAiB,KAAA;IACjB,YAAY,EAAE;IACf,CAAC,EACF,KACD;AACD,QAAK,YAAY,KACf,KAAK,YAAY,YAAY,QAC3B,UAAU,SACV,UAAU,OACX,CACF;AACD,QAAK,YAAY,kBAAkB;AACnC,OAAI,KAAK,YAAY,iBAAiB,MACpC,MAAK,YAAY,iBAAiB;AAEpC,QAAK,YAAY,aACf,KAAK,YAAY,UAAU,MAAM;AACnC,QAAK,SAAS,KAAK,OAAO,SACxB,KAAK,YAAY,UAAU,MAAM,WAClC;AACD,OAAI,KAAK,SACP,MAAK,KAAK,WAAW;OAErB,kBAAiB,KAAK,YAAY,EAAE,GAAG"}
|
|
@@ -20,4 +20,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
20
20
|
enumerable: true
|
|
21
21
|
}) : target, mod));
|
|
22
22
|
//#endregion
|
|
23
|
-
exports
|
|
23
|
+
Object.defineProperty(exports, "__toESM", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function() {
|
|
26
|
+
return __toESM;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-Bh7v8J-S.d.mts","names":[],"sources":["../src/codec.ts"],"mappings":";;;cAGM,KAAA;EACJ,EAAA;EACA,IAAA;EACA,UAAA;EACA,iBAAA;EACA,aAAA;IAAuB,MAAA,GAAS,GAAA,EAAK,MAAA,KAAW,MAAA;EAAA;EAChD,aAAA;IAAuB,MAAA,GAAS,KAAA,EAAO,MAAA,KAAW,MAAA;EAAA;cACtC,IAAA;AAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
|
|
3
|
+
//#region src/codec.d.ts
|
|
4
|
+
declare class Codec {
|
|
5
|
+
id: number;
|
|
6
|
+
name: "OPUS/16000" | "OPUS/48000/2" | "PCMU/8000";
|
|
7
|
+
packetSize: number;
|
|
8
|
+
timestampInterval: number;
|
|
9
|
+
createEncoder: () => {
|
|
10
|
+
encode: (pcm: Buffer) => Buffer;
|
|
11
|
+
};
|
|
12
|
+
createDecoder: () => {
|
|
13
|
+
decode: (audio: Buffer) => Buffer;
|
|
14
|
+
};
|
|
15
|
+
constructor(name: "OPUS/16000" | "OPUS/48000/2" | "PCMU/8000");
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { Codec as t };
|
|
19
|
+
//# sourceMappingURL=codec-C-VrtVkq.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-C-VrtVkq.d.cts","names":[],"sources":["../src/codec.ts"],"mappings":";;;cAGM,KAAA;EACJ,EAAA;EACA,IAAA;EACA,UAAA;EACA,iBAAA;EACA,aAAA;IAAuB,MAAA,GAAS,GAAA,EAAK,MAAA,KAAW,MAAA;EAAA;EAChD,aAAA;IAAuB,MAAA,GAAS,KAAA,EAAO,MAAA,KAAW,MAAA;EAAA;cACtC,IAAA;AAAA"}
|
package/dist/codec.cjs
CHANGED
package/dist/codec.d.cts
CHANGED
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
//#region src/codec.d.ts
|
|
4
|
-
declare class Codec {
|
|
5
|
-
id: number;
|
|
6
|
-
name: "OPUS/16000" | "OPUS/48000/2" | "PCMU/8000";
|
|
7
|
-
packetSize: number;
|
|
8
|
-
timestampInterval: number;
|
|
9
|
-
createEncoder: () => {
|
|
10
|
-
encode: (pcm: Buffer) => Buffer;
|
|
11
|
-
};
|
|
12
|
-
createDecoder: () => {
|
|
13
|
-
decode: (audio: Buffer) => Buffer;
|
|
14
|
-
};
|
|
15
|
-
constructor(name: "OPUS/16000" | "OPUS/48000/2" | "PCMU/8000");
|
|
16
|
-
}
|
|
1
|
+
import { t as Codec } from "./codec-C-VrtVkq.cjs";
|
|
17
2
|
export = Codec;
|
package/dist/codec.d.mts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.mjs","names":[],"sources":["../src/codec.ts"],"sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { Decoder, Encoder } from \"@evan/opus\";\n\nclass Codec {\n id: number;\n name: \"OPUS/16000\" | \"OPUS/48000/2\" | \"PCMU/8000\";\n packetSize: number;\n timestampInterval: number;\n createEncoder: () => { encode: (pcm: Buffer) => Buffer };\n createDecoder: () => { decode: (audio: Buffer) => Buffer };\n constructor(name: \"OPUS/16000\" | \"OPUS/48000/2\" | \"PCMU/8000\") {\n this.name = name;\n switch (name) {\n case \"OPUS/16000\": {\n this.createEncoder = () => {\n const encoder = new Encoder({ channels: 1, sample_rate: 16000 });\n return { encode: (pcm: Buffer) => Buffer.from(encoder.encode(pcm)) };\n };\n this.createDecoder = () => {\n const decoder = new Decoder({ channels: 1, sample_rate: 16000 });\n return {\n decode: (opus: Buffer) => Buffer.from(decoder.decode(opus)),\n };\n };\n this.id = 109;\n this.packetSize = 640;\n this.timestampInterval = 320;\n break;\n }\n case \"OPUS/48000/2\": {\n this.createEncoder = () => {\n const encoder = new Encoder({ channels: 2, sample_rate: 48000 });\n return { encode: (pcm: Buffer) => Buffer.from(encoder.encode(pcm)) };\n };\n this.createDecoder = () => {\n const decoder = new Decoder({ channels: 2, sample_rate: 48000 });\n return {\n decode: (opus: Buffer) => Buffer.from(decoder.decode(opus)),\n };\n };\n this.id = 111;\n this.packetSize = 3840;\n this.timestampInterval = 960;\n break;\n }\n case \"PCMU/8000\": {\n this.createEncoder = () => {\n return { encode: (pcm: Buffer) => pcm };\n };\n this.createDecoder = () => {\n return { decode: (audio: Buffer) => audio };\n };\n this.id = 0;\n this.packetSize = 160;\n this.timestampInterval = 160;\n break;\n }\n default: {\n throw new Error(`unsupported codec: ${name}`);\n }\n }\n }\n}\n\nexport default Codec;\n"],"mappings":";;;AAGA,IAAM,QAAN,MAAY;CACV;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,MAAmD;AAC7D,OAAK,OAAO;AACZ,UAAQ,MAAR;GACE,KAAK;AACH,SAAK,sBAAsB;KACzB,MAAM,UAAU,IAAI,QAAQ;MAAE,UAAU;MAAG,aAAa;MAAO,CAAC;AAChE,YAAO,EAAE,SAAS,QAAgB,OAAO,KAAK,QAAQ,OAAO,IAAI,CAAC,EAAE;;AAEtE,SAAK,sBAAsB;KACzB,MAAM,UAAU,IAAI,QAAQ;MAAE,UAAU;MAAG,aAAa;MAAO,CAAC;AAChE,YAAO,EACL,SAAS,SAAiB,OAAO,KAAK,QAAQ,OAAO,KAAK,CAAC,EAC5D;;AAEH,SAAK,KAAK;AACV,SAAK,aAAa;AAClB,SAAK,oBAAoB;AACzB;GAEF,KAAK;AACH,SAAK,sBAAsB;KACzB,MAAM,UAAU,IAAI,QAAQ;MAAE,UAAU;MAAG,aAAa;MAAO,CAAC;AAChE,YAAO,EAAE,SAAS,QAAgB,OAAO,KAAK,QAAQ,OAAO,IAAI,CAAC,EAAE;;AAEtE,SAAK,sBAAsB;KACzB,MAAM,UAAU,IAAI,QAAQ;MAAE,UAAU;MAAG,aAAa;MAAO,CAAC;AAChE,YAAO,EACL,SAAS,SAAiB,OAAO,KAAK,QAAQ,OAAO,KAAK,CAAC,EAC5D;;AAEH,SAAK,KAAK;AACV,SAAK,aAAa;AAClB,SAAK,oBAAoB;AACzB;GAEF,KAAK;AACH,SAAK,sBAAsB;AACzB,YAAO,EAAE,SAAS,QAAgB,KAAK;;AAEzC,SAAK,sBAAsB;AACzB,YAAO,EAAE,SAAS,UAAkB,OAAO;;AAE7C,SAAK,KAAK;AACV,SAAK,aAAa;AAClB,SAAK,oBAAoB;AACzB;GAEF,QACE,OAAM,IAAI,MAAM,sBAAsB,OAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dtmf-B13Fz2VR.d.mts","names":[],"sources":["../src/dtmf.ts"],"mappings":";;;cAoBM,IAAA;;gCAEuB,MAAA,CAAA,WAAA;yBAYJ,MAAA;AAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
|
|
3
|
+
//#region src/dtmf.d.ts
|
|
4
|
+
declare const DTMF: {
|
|
5
|
+
phoneChars: readonly ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "#"];
|
|
6
|
+
charToPayloads(char: string): Buffer<ArrayBuffer>[];
|
|
7
|
+
payloadToChar(payload: Buffer): "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "*" | "#";
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { DTMF as t };
|
|
11
|
+
//# sourceMappingURL=dtmf-DcQ-5vSG.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dtmf-DcQ-5vSG.d.cts","names":[],"sources":["../src/dtmf.ts"],"mappings":";;;cAoBM,IAAA;;gCAEuB,MAAA,CAAA,WAAA;yBAYJ,MAAA;AAAA"}
|
package/dist/dtmf.cjs
CHANGED
package/dist/dtmf.d.cts
CHANGED
|
@@ -1,9 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
//#region src/dtmf.d.ts
|
|
4
|
-
declare const DTMF: {
|
|
5
|
-
phoneChars: readonly ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "#"];
|
|
6
|
-
charToPayloads(char: string): Buffer<ArrayBuffer>[];
|
|
7
|
-
payloadToChar(payload: Buffer): "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "*" | "#";
|
|
8
|
-
};
|
|
1
|
+
import { t as DTMF } from "./dtmf-DcQ-5vSG.cjs";
|
|
9
2
|
export = DTMF;
|
package/dist/dtmf.d.mts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dtmf.mjs","names":[],"sources":["../src/dtmf.ts"],"sourcesContent":["import { Buffer } from \"node:buffer\";\n\nconst phoneChars = [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"*\",\n \"#\",\n] as const;\nconst payloads = [\n 0x00060000, 0x000600a0, 0x00060140, 0x00860320, 0x00860320, 0x00860320,\n];\n\nconst DTMF = {\n phoneChars,\n charToPayloads(char: string) {\n const index = phoneChars.indexOf(char[0] as (typeof phoneChars)[number]);\n if (index === -1) {\n throw new Error(\"invalid phone char\");\n }\n return payloads.map((payload) => {\n const temp = payload + index * 0x01000000;\n const buffer = Buffer.alloc(4);\n buffer.writeIntBE(temp, 0, 4);\n return buffer;\n });\n },\n payloadToChar(payload: Buffer) {\n const intBE = payload.readIntBE(0, 4);\n const index = (intBE - 0x00060000) / 0x01000000;\n return phoneChars[index];\n },\n};\n\nexport default DTMF;\n"],"mappings":";;AAEA,MAAM,aAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAM,WAAW;CACf;CAAY;CAAY;CAAY;CAAY;CAAY;CAC7D;AAED,MAAM,OAAO;CACX;CACA,eAAe,MAAc;EAC3B,MAAM,QAAQ,WAAW,QAAQ,KAAK,GAAkC;AACxE,MAAI,UAAU,GACZ,OAAM,IAAI,MAAM,qBAAqB;AAEvC,SAAO,SAAS,KAAK,YAAY;GAC/B,MAAM,OAAO,UAAU,QAAQ;GAC/B,MAAM,SAAS,OAAO,MAAM,EAAE;AAC9B,UAAO,WAAW,MAAM,GAAG,EAAE;AAC7B,UAAO;IACP;;CAEJ,cAAc,SAAiB;AAG7B,SAAO,YAFO,QAAQ,UAAU,GAAG,EACf,GAAG,UAAc;;CAGxC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { t as InboundMessage } from "./index-BhN2W8AV.mjs";
|
|
2
|
+
import { t as OutboundMessage } from "./index--UjWgLK-.mjs";
|
|
3
|
+
import { t as DTMF } from "./dtmf-B13Fz2VR.mjs";
|
|
4
|
+
import { t as Codec } from "./codec-Bh7v8J-S.mjs";
|
|
5
|
+
import { t as SoftPhoneOptions } from "./types-DOQ9wmX6.mjs";
|
|
6
|
+
import { Buffer } from "node:buffer";
|
|
7
|
+
import EventEmitter from "node:events";
|
|
8
|
+
import { TLSSocket } from "node:tls";
|
|
9
|
+
import dgram from "node:dgram";
|
|
10
|
+
import { RtpPacket, SrtpSession } from "werift-rtp";
|
|
11
|
+
|
|
12
|
+
//#region src/call-session/streamer.d.ts
|
|
13
|
+
declare class Streamer extends EventEmitter {
|
|
14
|
+
paused: boolean;
|
|
15
|
+
private callSession;
|
|
16
|
+
private buffer;
|
|
17
|
+
private originalBuffer;
|
|
18
|
+
constructor(callSession: CallSession, buffer: Buffer);
|
|
19
|
+
start(): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
pause(): void;
|
|
22
|
+
resume(): void;
|
|
23
|
+
get finished(): boolean;
|
|
24
|
+
private sendPacket;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/call-session/index.d.ts
|
|
28
|
+
type DtmfChar = (typeof DTMF.phoneChars)[number];
|
|
29
|
+
declare abstract class CallSession extends EventEmitter {
|
|
30
|
+
softphone: Softphone;
|
|
31
|
+
sipMessage: InboundMessage;
|
|
32
|
+
socket: dgram.Socket;
|
|
33
|
+
localPeer: string;
|
|
34
|
+
remotePeer: string;
|
|
35
|
+
remoteIP: string;
|
|
36
|
+
remotePort: number;
|
|
37
|
+
disposed: boolean;
|
|
38
|
+
srtpSession: SrtpSession;
|
|
39
|
+
encoder: {
|
|
40
|
+
encode: (pcm: Buffer) => Buffer;
|
|
41
|
+
};
|
|
42
|
+
decoder: {
|
|
43
|
+
decode: (audio: Buffer) => Buffer;
|
|
44
|
+
};
|
|
45
|
+
sdp: string;
|
|
46
|
+
ssrc: number;
|
|
47
|
+
sequenceNumber: number;
|
|
48
|
+
timestamp: number;
|
|
49
|
+
constructor(softphone: Softphone, sipMessage: InboundMessage);
|
|
50
|
+
set remoteKey(key: string);
|
|
51
|
+
get callId(): string | undefined;
|
|
52
|
+
send(data: string | Buffer): void;
|
|
53
|
+
hangup(): Promise<void>;
|
|
54
|
+
sendDTMF(char: DtmfChar): void;
|
|
55
|
+
sendDTMFs(s: string, delay?: number): Promise<void>;
|
|
56
|
+
streamAudio(input: Buffer): Streamer;
|
|
57
|
+
sendPacket(rtpPacket: RtpPacket): void;
|
|
58
|
+
protected startLocalServices(): void;
|
|
59
|
+
protected dispose(): void;
|
|
60
|
+
transfer(transferTo: string): Promise<void>;
|
|
61
|
+
toggleReceive(toReceive: boolean): Promise<void>;
|
|
62
|
+
hold(): Promise<void>;
|
|
63
|
+
unhold(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/call-session/outbound.d.ts
|
|
67
|
+
declare class OutboundCallSession extends CallSession {
|
|
68
|
+
constructor(softphone: Softphone, answerMessage: InboundMessage);
|
|
69
|
+
init(): void;
|
|
70
|
+
cancel(): Promise<void>;
|
|
71
|
+
get sessionId(): string;
|
|
72
|
+
get partyId(): string;
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region src/index.d.ts
|
|
76
|
+
declare class Softphone extends EventEmitter {
|
|
77
|
+
sipInfo: SoftPhoneOptions;
|
|
78
|
+
client: TLSSocket;
|
|
79
|
+
codec: Codec;
|
|
80
|
+
fakeDomain: string;
|
|
81
|
+
fakeEmail: string;
|
|
82
|
+
private intervalHandle?;
|
|
83
|
+
private connected;
|
|
84
|
+
constructor(sipInfo: SoftPhoneOptions);
|
|
85
|
+
private instanceId;
|
|
86
|
+
private registerCallId;
|
|
87
|
+
register(): Promise<void>;
|
|
88
|
+
enableDebugMode(): void;
|
|
89
|
+
revoke(): void;
|
|
90
|
+
send(message: OutboundMessage, waitForReply?: true): Promise<InboundMessage>;
|
|
91
|
+
send(message: OutboundMessage, waitForReply?: false): Promise<undefined>;
|
|
92
|
+
answer(inviteMessage: InboundMessage): Promise<InboundCallSession>;
|
|
93
|
+
decline(inviteMessage: InboundMessage): Promise<void>;
|
|
94
|
+
call(callee: string): Promise<OutboundCallSession>;
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
//#region src/call-session/inbound.d.ts
|
|
98
|
+
declare class InboundCallSession extends CallSession {
|
|
99
|
+
constructor(softphone: Softphone, inviteMessage: InboundMessage);
|
|
100
|
+
answer(): Promise<void>;
|
|
101
|
+
}
|
|
102
|
+
//#endregion
|
|
103
|
+
export { Streamer as a, CallSession as i, Softphone as n, OutboundCallSession as r, InboundCallSession as t };
|
|
104
|
+
//# sourceMappingURL=inbound--wGoGqLS.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound--wGoGqLS.d.mts","names":[],"sources":["../src/call-session/streamer.ts","../src/call-session/index.ts","../src/call-session/outbound.ts","../src/index.ts","../src/call-session/inbound.ts"],"mappings":";;;;;;;;;;;;cAOM,QAAA,SAAiB,YAAA;EACd,MAAA;EAAA,QACC,WAAA;EAAA,QACA,MAAA;EAAA,QACA,cAAA;cAEW,WAAA,EAAa,WAAA,EAAa,MAAA,EAAQ,MAAA;EAO9C,KAAA,CAAA;EAMA,IAAA,CAAA;EAIA,KAAA,CAAA;EAIA,MAAA,CAAA;EAAA,IAKI,QAAA,CAAA;EAAA,QAOH,UAAA;AAAA;;;KC/BL,QAAA,WAAmB,IAAA,CAAK,UAAA;AAAA,uBAKd,WAAA,SAAoB,YAAA;EAC1B,SAAA,EAAW,SAAA;EACX,UAAA,EAAY,cAAA;EACZ,MAAA,EAAS,KAAA,CAAM,MAAA;EACf,SAAA;EACA,UAAA;EACA,QAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA,EAAc,WAAA;EACd,OAAA;IAAW,MAAA,GAAS,GAAA,EAAK,MAAA,KAAW,MAAA;EAAA;EACpC,OAAA;IAAW,MAAA,GAAS,KAAA,EAAO,MAAA,KAAW,MAAA;EAAA;EACtC,GAAA;EAGA,IAAA;EACA,cAAA;EACA,SAAA;cAEY,SAAA,EAAW,SAAA,EAAW,UAAA,EAAY,cAAA;EAAA,IAgB1C,SAAA,CAAU,GAAA;EAAA,IAcV,MAAA,CAAA;EAIJ,IAAA,CAAK,IAAA,WAAe,MAAA;EAId,MAAA,CAAA,GAAM,OAAA;EAaZ,QAAA,CAAS,IAAA,EAAM,QAAA;EA8BT,SAAA,CAAU,CAAA,UAAW,KAAA,YAAW,OAAA;EAYtC,WAAA,CAAY,KAAA,EAAO,MAAA,GAAM,QAAA;EAOzB,UAAA,CAAW,SAAA,EAAW,SAAA;EAAA,UAOnB,kBAAA,CAAA;EAAA,UAsDA,OAAA,CAAA;EAQG,QAAA,CAAS,UAAA,WAAkB,OAAA;EAqC3B,aAAA,CAAc,SAAA,YAAkB,OAAA;EA+BhC,IAAA,CAAA,GAAI,OAAA;EAIJ,MAAA,CAAA,GAAM,OAAA;AAAA;;;cCnRf,mBAAA,SAA4B,WAAA;cACb,SAAA,EAAW,SAAA,EAAW,aAAA,EAAe,cAAA;EAUjD,IAAA,CAAA;EAiCM,MAAA,CAAA,GAAM,OAAA;EAAA,IAcR,SAAA,CAAA;EAAA,IAKA,OAAA,CAAA;AAAA;;;cC7CP,SAAA,SAAkB,YAAA;EACf,OAAA,EAAS,gBAAA;EACT,MAAA,EAAQ,SAAA;EACR,KAAA,EAAO,KAAA;EAEP,UAAA;EACA,SAAA;EAAA,QAEC,cAAA;EAAA,QACA,SAAA;cAEW,OAAA,EAAS,gBAAA;EAAA,QA+CpB,UAAA;EAAA,QACA,cAAA;EAEK,QAAA,CAAA,GAAQ,OAAA;EAuEd,eAAA,CAAA;EAWA,MAAA,CAAA;EAOA,IAAA,CACL,OAAA,EAAS,eAAA,EACT,YAAA,UACC,OAAA,CAAQ,cAAA;EACJ,IAAA,CACL,OAAA,EAAS,eAAA,EACT,YAAA,WACC,OAAA;EAyBU,MAAA,CAAO,aAAA,EAAe,cAAA,GAAc,OAAA,CAAA,kBAAA;EAOpC,OAAA,CAAQ,aAAA,EAAe,cAAA,GAAc,OAAA;EAKrC,IAAA,CAAK,MAAA,WAAc,OAAA,CAAA,mBAAA;AAAA;;;cCpN5B,kBAAA,SAA2B,WAAA;cACZ,SAAA,EAAW,SAAA,EAAW,aAAA,EAAe,cAAA;EAY3C,MAAA,CAAA,GAAM,OAAA;AAAA"}
|