ringcentral-softphone 1.3.4 → 1.3.6
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.cjs +41 -83
- package/dist/call-session/inbound.d.cts +2 -0
- package/dist/call-session/inbound.d.mts +2 -0
- package/dist/call-session/inbound.mjs +51 -0
- package/dist/call-session/index.cjs +212 -273
- package/dist/call-session/index.d.cts +2 -0
- package/dist/call-session/index.d.mts +2 -0
- package/dist/call-session/index.mjs +209 -0
- package/dist/call-session/outbound.cjs +56 -99
- package/dist/call-session/outbound.d.cts +2 -0
- package/dist/call-session/outbound.d.mts +2 -0
- package/dist/call-session/outbound.mjs +57 -0
- package/dist/call-session/streamer.cjs +66 -111
- package/dist/call-session/streamer.d.cts +2 -0
- package/dist/call-session/streamer.d.mts +2 -0
- package/dist/call-session/streamer.mjs +65 -0
- package/dist/chunk-CKQMccvm.cjs +28 -0
- package/dist/codec-Bh7v8J-S.d.mts +18 -0
- package/dist/codec-C-VrtVkq.d.cts +18 -0
- package/dist/codec.cjs +68 -84
- package/dist/codec.d.cts +2 -0
- package/dist/codec.d.mts +2 -0
- package/dist/codec.mjs +68 -0
- package/dist/dtmf-B13Fz2VR.d.mts +10 -0
- package/dist/dtmf-DcQ-5vSG.d.cts +10 -0
- package/dist/dtmf.cjs +37 -60
- package/dist/dtmf.d.cts +2 -0
- package/dist/dtmf.d.mts +2 -0
- package/dist/dtmf.mjs +42 -0
- package/dist/inbound--wGoGqLS.d.mts +103 -0
- package/dist/inbound-DquvTSj1.d.cts +103 -0
- package/dist/index--UjWgLK-.d.mts +8 -0
- package/dist/index-BhN2W8AV.d.mts +8 -0
- package/dist/index-CEgs-Dz2.d.cts +1 -0
- package/dist/index-Cf2Cev52.d.cts +8 -0
- package/dist/index-XMDop59x.d.cts +8 -0
- package/dist/index-q_LXL61M.d.mts +1 -0
- package/dist/index.cjs +166 -250
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.mjs +172 -0
- package/dist/request-B_auLSJn.d.cts +10 -0
- package/dist/request-pBe7_mYv.d.mts +10 -0
- package/dist/response-LRRpY8lX.d.mts +9 -0
- package/dist/response-ReKvb5x9.d.cts +9 -0
- package/dist/sip-message/inbound/index.cjs +16 -50
- package/dist/sip-message/inbound/index.d.cts +2 -0
- package/dist/sip-message/inbound/index.d.mts +2 -0
- package/dist/sip-message/inbound/index.mjs +17 -0
- package/dist/sip-message/index.cjs +11 -49
- package/dist/sip-message/index.d.cts +6 -0
- package/dist/sip-message/index.d.mts +6 -0
- package/dist/sip-message/index.mjs +6 -0
- package/dist/sip-message/outbound/index.cjs +10 -40
- package/dist/sip-message/outbound/index.d.cts +2 -0
- package/dist/sip-message/outbound/index.d.mts +2 -0
- package/dist/sip-message/outbound/index.mjs +11 -0
- package/dist/sip-message/outbound/request.cjs +20 -61
- package/dist/sip-message/outbound/request.d.cts +2 -0
- package/dist/sip-message/outbound/request.d.mts +2 -0
- package/dist/sip-message/outbound/request.mjs +21 -0
- package/dist/sip-message/outbound/response.cjs +25 -54
- package/dist/sip-message/outbound/response.d.cts +2 -0
- package/dist/sip-message/outbound/response.d.mts +2 -0
- package/dist/sip-message/outbound/response.mjs +26 -0
- package/dist/sip-message/response-codes.cjs +80 -100
- package/dist/sip-message/response-codes.d.cts +5 -0
- package/dist/sip-message/response-codes.d.mts +6 -0
- package/dist/sip-message/response-codes.mjs +82 -0
- package/dist/sip-message/sip-message.cjs +25 -52
- package/dist/sip-message/sip-message.d.cts +2 -0
- package/dist/sip-message/sip-message.d.mts +2 -0
- package/dist/sip-message/sip-message.mjs +26 -0
- package/dist/sip-message-B2D5MPBI.d.cts +13 -0
- package/dist/sip-message-PaPho4qU.d.mts +13 -0
- package/dist/types-DOQ9wmX6.d.mts +12 -0
- package/dist/types-DZxCsbZE.d.cts +12 -0
- package/dist/types.cjs +0 -15
- package/dist/types.d.cts +2 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.mjs +1 -0
- package/dist/utils.cjs +27 -73
- package/dist/utils.d.cts +12 -0
- package/dist/utils.d.mts +12 -0
- package/dist/utils.mjs +25 -0
- package/package.json +14 -14
- package/dist/call-session/inbound.d.ts +0 -8
- package/dist/call-session/inbound.js +0 -64
- package/dist/call-session/index.d.ts +0 -46
- package/dist/call-session/index.js +0 -248
- package/dist/call-session/outbound.d.ts +0 -11
- package/dist/call-session/outbound.js +0 -71
- package/dist/call-session/streamer.d.ts +0 -17
- package/dist/call-session/streamer.js +0 -83
- package/dist/codec.d.ts +0 -15
- package/dist/codec.js +0 -66
- package/dist/dtmf.d.ts +0 -7
- package/dist/dtmf.js +0 -47
- package/dist/index.d.ts +0 -28
- package/dist/index.js +0 -242
- package/dist/sip-message/inbound/index.d.ts +0 -5
- package/dist/sip-message/inbound/index.js +0 -22
- package/dist/sip-message/index.d.ts +0 -5
- package/dist/sip-message/index.js +0 -12
- package/dist/sip-message/outbound/index.d.ts +0 -5
- package/dist/sip-message/outbound/index.js +0 -12
- package/dist/sip-message/outbound/request.d.ts +0 -7
- package/dist/sip-message/outbound/request.js +0 -33
- package/dist/sip-message/outbound/response.d.ts +0 -6
- package/dist/sip-message/outbound/response.js +0 -26
- package/dist/sip-message/response-codes.d.ts +0 -4
- package/dist/sip-message/response-codes.js +0 -83
- package/dist/sip-message/sip-message.d.ts +0 -11
- package/dist/sip-message/sip-message.js +0 -34
- package/dist/types.d.ts +0 -9
- package/dist/types.js +0 -0
- package/dist/utils.d.ts +0 -8
- package/dist/utils.js +0 -41
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import Codec from "./codec.mjs";
|
|
2
|
+
import { branch, generateAuthorization, localKey, randomInt, uuid } from "./utils.mjs";
|
|
3
|
+
import InboundMessage from "./sip-message/inbound/index.mjs";
|
|
4
|
+
import OutboundMessage from "./sip-message/outbound/index.mjs";
|
|
5
|
+
import RequestMessage from "./sip-message/outbound/request.mjs";
|
|
6
|
+
import ResponseMessage from "./sip-message/outbound/response.mjs";
|
|
7
|
+
import "./sip-message/index.mjs";
|
|
8
|
+
import InboundCallSession from "./call-session/inbound.mjs";
|
|
9
|
+
import OutboundCallSession from "./call-session/outbound.mjs";
|
|
10
|
+
import EventEmitter from "node:events";
|
|
11
|
+
import tls from "node:tls";
|
|
12
|
+
import waitFor from "wait-for-async";
|
|
13
|
+
//#region src/index.ts
|
|
14
|
+
var Softphone = class extends EventEmitter {
|
|
15
|
+
sipInfo;
|
|
16
|
+
client;
|
|
17
|
+
codec;
|
|
18
|
+
fakeDomain = `${uuid()}.invalid`;
|
|
19
|
+
fakeEmail = `${uuid()}@${this.fakeDomain}`;
|
|
20
|
+
intervalHandle;
|
|
21
|
+
connected = false;
|
|
22
|
+
constructor(sipInfo) {
|
|
23
|
+
super();
|
|
24
|
+
if (sipInfo.codec === void 0) sipInfo.codec = "OPUS/16000";
|
|
25
|
+
this.codec = new Codec(sipInfo.codec);
|
|
26
|
+
this.sipInfo = sipInfo;
|
|
27
|
+
if (this.sipInfo.domain === void 0) this.sipInfo.domain = "sip.ringcentral.com";
|
|
28
|
+
if (this.sipInfo.outboundProxy === void 0) this.sipInfo.outboundProxy = "sip10.ringcentral.com:5096";
|
|
29
|
+
const tokens = this.sipInfo.outboundProxy.split(":");
|
|
30
|
+
this.client = tls.connect({
|
|
31
|
+
host: tokens[0],
|
|
32
|
+
port: parseInt(tokens[1], 10),
|
|
33
|
+
rejectUnauthorized: !this.sipInfo.ignoreTlsCertErrors
|
|
34
|
+
}, () => {
|
|
35
|
+
this.connected = true;
|
|
36
|
+
});
|
|
37
|
+
let cache = "";
|
|
38
|
+
this.client.on("data", (data) => {
|
|
39
|
+
cache += data.toString("utf-8");
|
|
40
|
+
if (!cache.endsWith("\r\n")) return;
|
|
41
|
+
const tempMessages = cache.split("\r\nContent-Length: 0\r\n\r\n").filter((message) => message.trim() !== "");
|
|
42
|
+
cache = "";
|
|
43
|
+
for (let i = 0; i < tempMessages.length; i++) if (!tempMessages[i].includes("Content-Length: ")) tempMessages[i] = `${tempMessages[i]}\r\nContent-Length: 0`;
|
|
44
|
+
for (const message of tempMessages) this.emit("message", InboundMessage.fromString(message));
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
instanceId = uuid();
|
|
48
|
+
registerCallId = uuid();
|
|
49
|
+
async register() {
|
|
50
|
+
if (!this.connected) {
|
|
51
|
+
await waitFor({
|
|
52
|
+
interval: 100,
|
|
53
|
+
times: 100,
|
|
54
|
+
condition: () => this.connected
|
|
55
|
+
});
|
|
56
|
+
if (!this.connected) throw new Error("Failed to register: connect to TLS timeout");
|
|
57
|
+
}
|
|
58
|
+
const sipRegister = async () => {
|
|
59
|
+
const fromTag = uuid();
|
|
60
|
+
const requestMessage = new RequestMessage(`REGISTER sip:${this.sipInfo.domain} SIP/2.0`, {
|
|
61
|
+
Via: `SIP/2.0/TLS ${this.client.localAddress}:${this.client.localPort};rport;branch=${branch()};alias`,
|
|
62
|
+
"Max-Forwards": "70",
|
|
63
|
+
From: `<sip:${this.sipInfo.username}@${this.sipInfo.domain}>;tag=${fromTag}`,
|
|
64
|
+
To: `<sip:${this.sipInfo.username}@${this.sipInfo.domain}>`,
|
|
65
|
+
"Call-ID": this.registerCallId,
|
|
66
|
+
Contact: `<sip:${this.sipInfo.username}@${this.client.localAddress}:${this.client.localPort};transport=TLS;ob>;reg-id=1;+sip.instance="<urn:uuid:${this.instanceId}>"`,
|
|
67
|
+
Expires: 3600,
|
|
68
|
+
Allow: "PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS"
|
|
69
|
+
});
|
|
70
|
+
const inboundMessage = await this.send(requestMessage, true);
|
|
71
|
+
if (inboundMessage.subject.startsWith("SIP/2.0 200 ")) return;
|
|
72
|
+
const nonce = inboundMessage.getHeader("Www-Authenticate").match(/, nonce="(.+?)"/)[1];
|
|
73
|
+
const newMessage = requestMessage.fork();
|
|
74
|
+
newMessage.headers.Authorization = generateAuthorization(this.sipInfo, nonce, "REGISTER");
|
|
75
|
+
const message = await this.send(newMessage, true);
|
|
76
|
+
if (!message.subject.startsWith("SIP/2.0 200 ")) throw new Error(`Failed to register: ${message.subject}`);
|
|
77
|
+
};
|
|
78
|
+
await sipRegister();
|
|
79
|
+
this.intervalHandle = setInterval(() => {
|
|
80
|
+
sipRegister().catch((error) => {
|
|
81
|
+
this.emit("registrationError", error);
|
|
82
|
+
});
|
|
83
|
+
}, 30 * 1e3);
|
|
84
|
+
this.on("message", (inboundMessage) => {
|
|
85
|
+
if (!inboundMessage.subject.startsWith("INVITE sip:")) return;
|
|
86
|
+
const outboundMessage = new OutboundMessage("SIP/2.0 100 Trying", {
|
|
87
|
+
Via: inboundMessage.headers.Via,
|
|
88
|
+
"Call-ID": inboundMessage.getHeader("Call-ID"),
|
|
89
|
+
From: inboundMessage.headers.From,
|
|
90
|
+
To: inboundMessage.headers.To,
|
|
91
|
+
CSeq: inboundMessage.headers.CSeq,
|
|
92
|
+
"Content-Length": "0"
|
|
93
|
+
});
|
|
94
|
+
this.send(outboundMessage);
|
|
95
|
+
this.emit("invite", inboundMessage);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
enableDebugMode() {
|
|
99
|
+
this.on("message", (message) => console.log(`Receiving...(${/* @__PURE__ */ new Date()})\n${message.toString()}`));
|
|
100
|
+
const tlsWrite = this.client.write.bind(this.client);
|
|
101
|
+
this.client.write = (message) => {
|
|
102
|
+
console.log(`Sending...(${/* @__PURE__ */ new Date()})\n${message}`);
|
|
103
|
+
return tlsWrite(message);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
revoke() {
|
|
107
|
+
clearInterval(this.intervalHandle);
|
|
108
|
+
this.removeAllListeners();
|
|
109
|
+
this.client.removeAllListeners();
|
|
110
|
+
this.client.destroy();
|
|
111
|
+
}
|
|
112
|
+
send(message, waitForReply = false) {
|
|
113
|
+
this.client.write(message.toString());
|
|
114
|
+
if (!waitForReply) return Promise.resolve(void 0);
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
const messageListerner = (inboundMessage) => {
|
|
117
|
+
if (inboundMessage.headers.CSeq.trim().split(/\s+/)[0] !== message.headers.CSeq.trim().split(/\s+/)[0]) return;
|
|
118
|
+
if (inboundMessage.subject.startsWith("SIP/2.0 100 ")) return;
|
|
119
|
+
this.off("message", messageListerner);
|
|
120
|
+
resolve(inboundMessage);
|
|
121
|
+
};
|
|
122
|
+
this.on("message", messageListerner);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async answer(inviteMessage) {
|
|
126
|
+
const inboundCallSession = new InboundCallSession(this, inviteMessage);
|
|
127
|
+
await inboundCallSession.answer();
|
|
128
|
+
return inboundCallSession;
|
|
129
|
+
}
|
|
130
|
+
async decline(inviteMessage) {
|
|
131
|
+
const newMessage = new ResponseMessage(inviteMessage, 603);
|
|
132
|
+
await this.send(newMessage);
|
|
133
|
+
}
|
|
134
|
+
async call(callee) {
|
|
135
|
+
const offerSDP = `
|
|
136
|
+
v=0
|
|
137
|
+
o=- ${Date.now()} 0 IN IP4 ${this.client.localAddress}
|
|
138
|
+
s=rc-softphone-ts
|
|
139
|
+
c=IN IP4 ${this.client.localAddress}
|
|
140
|
+
t=0 0
|
|
141
|
+
m=audio ${randomInt()} RTP/SAVP ${this.codec.id} 101
|
|
142
|
+
a=rtpmap:${this.codec.id} ${this.codec.name}
|
|
143
|
+
a=rtpmap:101 telephone-event/8000
|
|
144
|
+
a=fmtp:101 0-15
|
|
145
|
+
a=sendrecv
|
|
146
|
+
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:${localKey}
|
|
147
|
+
`.trim();
|
|
148
|
+
const inviteMessage = new RequestMessage(`INVITE sip:${callee}@${this.sipInfo.domain} SIP/2.0`, {
|
|
149
|
+
Via: `SIP/2.0/TLS ${this.client.localAddress}:${this.client.localPort};rport;branch=${branch()};alias`,
|
|
150
|
+
"Max-Forwards": 70,
|
|
151
|
+
From: `<sip:${this.sipInfo.username}@${this.sipInfo.domain}>;tag=${uuid()}`,
|
|
152
|
+
To: `<sip:${callee}@${this.sipInfo.domain}>`,
|
|
153
|
+
Contact: ` <sip:${this.sipInfo.username}@${this.client.localAddress}:${this.client.localPort};transport=TLS;ob>`,
|
|
154
|
+
"Call-ID": uuid(),
|
|
155
|
+
Route: `<sip:${this.sipInfo.outboundProxy};transport=tls;lr>`,
|
|
156
|
+
Allow: `PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS`,
|
|
157
|
+
Supported: `replaces, 100rel, timer, norefersub`,
|
|
158
|
+
"Session-Expires": 1800,
|
|
159
|
+
"Min-SE": 90,
|
|
160
|
+
"Content-Type": "application/sdp"
|
|
161
|
+
}, offerSDP);
|
|
162
|
+
const nonce = (await this.send(inviteMessage, true)).getHeader("Proxy-Authenticate").match(/, nonce="(.+?)"/)[1];
|
|
163
|
+
const newMessage = inviteMessage.fork();
|
|
164
|
+
newMessage.headers["Proxy-Authorization"] = generateAuthorization(this.sipInfo, nonce, "INVITE");
|
|
165
|
+
const progressMessage = await this.send(newMessage, true);
|
|
166
|
+
const outboundCallSession = new OutboundCallSession(this, progressMessage);
|
|
167
|
+
outboundCallSession.sdp = offerSDP;
|
|
168
|
+
return outboundCallSession;
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
//#endregion
|
|
172
|
+
export { Softphone as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { t as OutboundMessage } from "./index-XMDop59x.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/sip-message/outbound/request.d.ts
|
|
4
|
+
declare class RequestMessage extends OutboundMessage {
|
|
5
|
+
constructor(subject?: string, headers?: {}, body?: string);
|
|
6
|
+
newCseq(): void;
|
|
7
|
+
fork(): RequestMessage;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { RequestMessage as t };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { t as OutboundMessage } from "./index--UjWgLK-.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/sip-message/outbound/request.d.ts
|
|
4
|
+
declare class RequestMessage extends OutboundMessage {
|
|
5
|
+
constructor(subject?: string, headers?: {}, body?: string);
|
|
6
|
+
newCseq(): void;
|
|
7
|
+
fork(): RequestMessage;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { RequestMessage as t };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { t as InboundMessage } from "./index-BhN2W8AV.mjs";
|
|
2
|
+
import { t as OutboundMessage } from "./index--UjWgLK-.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/sip-message/outbound/response.d.ts
|
|
5
|
+
declare class ResponseMessage extends OutboundMessage {
|
|
6
|
+
constructor(inboundMessage: InboundMessage, responseCode: number, headers?: {}, body?: string);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { ResponseMessage as t };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { t as InboundMessage } from "./index-Cf2Cev52.cjs";
|
|
2
|
+
import { t as OutboundMessage } from "./index-XMDop59x.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/sip-message/outbound/response.d.ts
|
|
5
|
+
declare class ResponseMessage extends OutboundMessage {
|
|
6
|
+
constructor(inboundMessage: InboundMessage, responseCode: number, headers?: {}, body?: string);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { ResponseMessage as t };
|
|
@@ -1,51 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
const require_utils = require("../../utils.cjs");
|
|
2
|
+
const require_sip_message_sip_message = require("../sip-message.cjs");
|
|
3
|
+
//#region src/sip-message/inbound/index.ts
|
|
4
|
+
var InboundMessage = class extends require_sip_message_sip_message {
|
|
5
|
+
static fromString(str) {
|
|
6
|
+
const sipMessage = new require_sip_message_sip_message();
|
|
7
|
+
const [init, ...body] = str.split("\r\n\r\n");
|
|
8
|
+
sipMessage.body = body.join("\r\n\r\n");
|
|
9
|
+
const [subject, ...headers] = init.split("\r\n");
|
|
10
|
+
sipMessage.subject = subject;
|
|
11
|
+
sipMessage.headers = Object.fromEntries(headers.map((line) => line.split(": ")));
|
|
12
|
+
if (sipMessage.headers.To && !sipMessage.headers.To.includes(";tag=")) sipMessage.headers.To += `;tag=${require_utils.uuid()}`;
|
|
13
|
+
return sipMessage;
|
|
14
|
+
}
|
|
10
15
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var inbound_exports = {};
|
|
29
|
-
__export(inbound_exports, {
|
|
30
|
-
default: () => inbound_default
|
|
31
|
-
});
|
|
32
|
-
module.exports = __toCommonJS(inbound_exports);
|
|
33
|
-
var import_utils = require("../../utils.js");
|
|
34
|
-
var import_sip_message = __toESM(require("../sip-message.js"), 1);
|
|
35
|
-
class InboundMessage extends import_sip_message.default {
|
|
36
|
-
static fromString(str) {
|
|
37
|
-
const sipMessage = new import_sip_message.default();
|
|
38
|
-
const [init, ...body] = str.split("\r\n\r\n");
|
|
39
|
-
sipMessage.body = body.join("\r\n\r\n");
|
|
40
|
-
const [subject, ...headers] = init.split("\r\n");
|
|
41
|
-
sipMessage.subject = subject;
|
|
42
|
-
sipMessage.headers = Object.fromEntries(
|
|
43
|
-
headers.map((line) => line.split(": "))
|
|
44
|
-
);
|
|
45
|
-
if (sipMessage.headers.To && !sipMessage.headers.To.includes(";tag=")) {
|
|
46
|
-
sipMessage.headers.To += `;tag=${(0, import_utils.uuid)()}`;
|
|
47
|
-
}
|
|
48
|
-
return sipMessage;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
var inbound_default = InboundMessage;
|
|
16
|
+
//#endregion
|
|
17
|
+
module.exports = InboundMessage;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { uuid } from "../../utils.mjs";
|
|
2
|
+
import SipMessage from "../sip-message.mjs";
|
|
3
|
+
//#region src/sip-message/inbound/index.ts
|
|
4
|
+
var InboundMessage = class extends SipMessage {
|
|
5
|
+
static fromString(str) {
|
|
6
|
+
const sipMessage = new SipMessage();
|
|
7
|
+
const [init, ...body] = str.split("\r\n\r\n");
|
|
8
|
+
sipMessage.body = body.join("\r\n\r\n");
|
|
9
|
+
const [subject, ...headers] = init.split("\r\n");
|
|
10
|
+
sipMessage.subject = subject;
|
|
11
|
+
sipMessage.headers = Object.fromEntries(headers.map((line) => line.split(": ")));
|
|
12
|
+
if (sipMessage.headers.To && !sipMessage.headers.To.includes(";tag=")) sipMessage.headers.To += `;tag=${uuid()}`;
|
|
13
|
+
return sipMessage;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
export { InboundMessage as default };
|
|
@@ -1,49 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var sip_message_exports = {};
|
|
29
|
-
__export(sip_message_exports, {
|
|
30
|
-
InboundMessage: () => import_inbound.default,
|
|
31
|
-
OutboundMessage: () => import_outbound.default,
|
|
32
|
-
RequestMessage: () => import_request.default,
|
|
33
|
-
ResponseMessage: () => import_response.default,
|
|
34
|
-
SipMessage: () => import_sip_message.default
|
|
35
|
-
});
|
|
36
|
-
module.exports = __toCommonJS(sip_message_exports);
|
|
37
|
-
var import_inbound = __toESM(require("./inbound/index.js"), 1);
|
|
38
|
-
var import_outbound = __toESM(require("./outbound/index.js"), 1);
|
|
39
|
-
var import_request = __toESM(require("./outbound/request.js"), 1);
|
|
40
|
-
var import_response = __toESM(require("./outbound/response.js"), 1);
|
|
41
|
-
var import_sip_message = __toESM(require("./sip-message.js"), 1);
|
|
42
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
43
|
-
0 && (module.exports = {
|
|
44
|
-
InboundMessage,
|
|
45
|
-
OutboundMessage,
|
|
46
|
-
RequestMessage,
|
|
47
|
-
ResponseMessage,
|
|
48
|
-
SipMessage
|
|
49
|
-
});
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_sip_message_sip_message = require("./sip-message.cjs");
|
|
3
|
+
const require_sip_message_inbound_index = require("./inbound/index.cjs");
|
|
4
|
+
const require_sip_message_outbound_index = require("./outbound/index.cjs");
|
|
5
|
+
const require_sip_message_outbound_request = require("./outbound/request.cjs");
|
|
6
|
+
const require_sip_message_outbound_response = require("./outbound/response.cjs");
|
|
7
|
+
exports.InboundMessage = require_sip_message_inbound_index;
|
|
8
|
+
exports.OutboundMessage = require_sip_message_outbound_index;
|
|
9
|
+
exports.RequestMessage = require_sip_message_outbound_request;
|
|
10
|
+
exports.ResponseMessage = require_sip_message_outbound_response;
|
|
11
|
+
exports.SipMessage = require_sip_message_sip_message;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { t as SipMessage } from "../sip-message-B2D5MPBI.cjs";
|
|
2
|
+
import { t as InboundMessage } from "../index-Cf2Cev52.cjs";
|
|
3
|
+
import { t as OutboundMessage } from "../index-XMDop59x.cjs";
|
|
4
|
+
import { t as RequestMessage } from "../request-B_auLSJn.cjs";
|
|
5
|
+
import { t as ResponseMessage } from "../response-ReKvb5x9.cjs";
|
|
6
|
+
export { InboundMessage, OutboundMessage, RequestMessage, ResponseMessage, SipMessage };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { t as SipMessage } from "../sip-message-PaPho4qU.mjs";
|
|
2
|
+
import { t as InboundMessage } from "../index-BhN2W8AV.mjs";
|
|
3
|
+
import { t as OutboundMessage } from "../index--UjWgLK-.mjs";
|
|
4
|
+
import { t as RequestMessage } from "../request-pBe7_mYv.mjs";
|
|
5
|
+
import { t as ResponseMessage } from "../response-LRRpY8lX.mjs";
|
|
6
|
+
export { InboundMessage, OutboundMessage, RequestMessage, ResponseMessage, SipMessage };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import SipMessage from "./sip-message.mjs";
|
|
2
|
+
import InboundMessage from "./inbound/index.mjs";
|
|
3
|
+
import OutboundMessage from "./outbound/index.mjs";
|
|
4
|
+
import RequestMessage from "./outbound/request.mjs";
|
|
5
|
+
import ResponseMessage from "./outbound/response.mjs";
|
|
6
|
+
export { InboundMessage, OutboundMessage, RequestMessage, ResponseMessage, SipMessage };
|
|
@@ -1,41 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
1
|
+
const require_sip_message_sip_message = require("../sip-message.cjs");
|
|
2
|
+
//#region src/sip-message/outbound/index.ts
|
|
3
|
+
var OutboundMessage = class extends require_sip_message_sip_message {
|
|
4
|
+
constructor(subject = "", headers = {}, body = "") {
|
|
5
|
+
super(subject, headers, body);
|
|
6
|
+
this.headers["Content-Length"] = this.body.length.toString();
|
|
7
|
+
this.headers["User-Agent"] = "ringcentral-softphone-ts";
|
|
8
|
+
}
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var outbound_exports = {};
|
|
29
|
-
__export(outbound_exports, {
|
|
30
|
-
default: () => outbound_default
|
|
31
|
-
});
|
|
32
|
-
module.exports = __toCommonJS(outbound_exports);
|
|
33
|
-
var import_sip_message = __toESM(require("../sip-message.js"), 1);
|
|
34
|
-
class OutboundMessage extends import_sip_message.default {
|
|
35
|
-
constructor(subject = "", headers = {}, body = "") {
|
|
36
|
-
super(subject, headers, body);
|
|
37
|
-
this.headers["Content-Length"] = this.body.length.toString();
|
|
38
|
-
this.headers["User-Agent"] = "ringcentral-softphone-ts";
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
var outbound_default = OutboundMessage;
|
|
10
|
+
//#endregion
|
|
11
|
+
module.exports = OutboundMessage;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import SipMessage from "../sip-message.mjs";
|
|
2
|
+
//#region src/sip-message/outbound/index.ts
|
|
3
|
+
var OutboundMessage = class extends SipMessage {
|
|
4
|
+
constructor(subject = "", headers = {}, body = "") {
|
|
5
|
+
super(subject, headers, body);
|
|
6
|
+
this.headers["Content-Length"] = this.body.length.toString();
|
|
7
|
+
this.headers["User-Agent"] = "ringcentral-softphone-ts";
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { OutboundMessage as default };
|
|
@@ -1,62 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var request_exports = {};
|
|
29
|
-
__export(request_exports, {
|
|
30
|
-
default: () => request_default
|
|
31
|
-
});
|
|
32
|
-
module.exports = __toCommonJS(request_exports);
|
|
33
|
-
var import_utils = require("../../utils.js");
|
|
34
|
-
var import_index = __toESM(require("./index.js"), 1);
|
|
1
|
+
const require_utils = require("../../utils.cjs");
|
|
2
|
+
const require_sip_message_outbound_index = require("./index.cjs");
|
|
3
|
+
//#region src/sip-message/outbound/request.ts
|
|
35
4
|
let cseq = Math.floor(Math.random() * 1e4);
|
|
36
|
-
class RequestMessage extends
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (newMessage.headers.Via) {
|
|
54
|
-
newMessage.headers.Via = newMessage.headers.Via.replace(
|
|
55
|
-
/;branch=.+?$/,
|
|
56
|
-
`;branch=${(0, import_utils.branch)()}`
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
return newMessage;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
var request_default = RequestMessage;
|
|
5
|
+
var RequestMessage = class RequestMessage extends require_sip_message_outbound_index {
|
|
6
|
+
constructor(subject = "", headers = {}, body = "") {
|
|
7
|
+
super(subject, headers, body);
|
|
8
|
+
if (this.headers.CSeq === void 0) this.newCseq();
|
|
9
|
+
}
|
|
10
|
+
newCseq() {
|
|
11
|
+
this.headers.CSeq = `${++cseq} ${this.subject.split(" ")[0]}`;
|
|
12
|
+
}
|
|
13
|
+
fork() {
|
|
14
|
+
const newMessage = new RequestMessage(this.subject, { ...this.headers }, this.body);
|
|
15
|
+
newMessage.newCseq();
|
|
16
|
+
if (newMessage.headers.Via) newMessage.headers.Via = newMessage.headers.Via.replace(/;branch=.+?$/, `;branch=${require_utils.branch()}`);
|
|
17
|
+
return newMessage;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//#endregion
|
|
21
|
+
module.exports = RequestMessage;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { branch } from "../../utils.mjs";
|
|
2
|
+
import OutboundMessage from "./index.mjs";
|
|
3
|
+
//#region src/sip-message/outbound/request.ts
|
|
4
|
+
let cseq = Math.floor(Math.random() * 1e4);
|
|
5
|
+
var RequestMessage = class RequestMessage extends OutboundMessage {
|
|
6
|
+
constructor(subject = "", headers = {}, body = "") {
|
|
7
|
+
super(subject, headers, body);
|
|
8
|
+
if (this.headers.CSeq === void 0) this.newCseq();
|
|
9
|
+
}
|
|
10
|
+
newCseq() {
|
|
11
|
+
this.headers.CSeq = `${++cseq} ${this.subject.split(" ")[0]}`;
|
|
12
|
+
}
|
|
13
|
+
fork() {
|
|
14
|
+
const newMessage = new RequestMessage(this.subject, { ...this.headers }, this.body);
|
|
15
|
+
newMessage.newCseq();
|
|
16
|
+
if (newMessage.headers.Via) newMessage.headers.Via = newMessage.headers.Via.replace(/;branch=.+?$/, `;branch=${branch()}`);
|
|
17
|
+
return newMessage;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//#endregion
|
|
21
|
+
export { RequestMessage as default };
|