ringcentral-softphone 1.3.3 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/call-session/inbound.cjs +41 -83
- package/dist/call-session/inbound.d.cts +10 -0
- package/dist/call-session/inbound.d.ts +8 -5
- package/dist/call-session/inbound.js +36 -49
- package/dist/call-session/index.cjs +212 -269
- package/dist/call-session/index.d.cts +48 -0
- package/dist/call-session/index.d.ts +44 -39
- package/dist/call-session/index.js +204 -239
- package/dist/call-session/outbound.cjs +56 -99
- package/dist/call-session/outbound.d.cts +13 -0
- package/dist/call-session/outbound.d.ts +11 -8
- package/dist/call-session/outbound.js +54 -68
- package/dist/call-session/streamer.cjs +66 -111
- package/dist/call-session/streamer.d.cts +19 -0
- package/dist/call-session/streamer.d.ts +16 -13
- package/dist/call-session/streamer.js +61 -79
- package/dist/codec.cjs +68 -84
- package/dist/codec.d.cts +17 -0
- package/dist/codec.d.ts +15 -12
- package/dist/codec.js +65 -63
- package/dist/dtmf.cjs +42 -64
- package/dist/dtmf.d.cts +9 -0
- package/dist/dtmf.d.ts +9 -7
- package/dist/dtmf.js +40 -44
- package/dist/index.cjs +166 -248
- package/dist/index.d.cts +31 -0
- package/dist/index.d.ts +28 -24
- package/dist/index.js +156 -224
- package/dist/sip-message/inbound/index.cjs +16 -50
- package/dist/sip-message/inbound/index.d.cts +7 -0
- package/dist/sip-message/inbound/index.d.ts +5 -2
- package/dist/sip-message/inbound/index.js +14 -19
- package/dist/sip-message/index.cjs +11 -49
- package/dist/sip-message/index.d.cts +6 -0
- package/dist/sip-message/index.d.ts +6 -5
- package/dist/sip-message/index.js +6 -12
- package/dist/sip-message/outbound/index.cjs +10 -40
- package/dist/sip-message/outbound/index.d.cts +7 -0
- package/dist/sip-message/outbound/index.d.ts +5 -2
- package/dist/sip-message/outbound/index.js +9 -10
- package/dist/sip-message/outbound/request.cjs +20 -61
- package/dist/sip-message/outbound/request.d.cts +9 -0
- package/dist/sip-message/outbound/request.d.ts +7 -4
- package/dist/sip-message/outbound/request.js +17 -29
- package/dist/sip-message/outbound/response.cjs +25 -54
- package/dist/sip-message/outbound/response.d.cts +8 -0
- package/dist/sip-message/outbound/response.d.ts +6 -3
- package/dist/sip-message/outbound/response.js +24 -24
- 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.ts +4 -2
- package/dist/sip-message/response-codes.js +80 -81
- package/dist/sip-message/sip-message.cjs +25 -52
- package/dist/sip-message/sip-message.d.cts +12 -0
- package/dist/sip-message/sip-message.d.ts +11 -9
- package/dist/sip-message/sip-message.js +25 -33
- package/dist/types.cjs +0 -15
- package/dist/types.d.cts +12 -0
- package/dist/types.d.ts +11 -8
- package/dist/types.js +1 -0
- package/dist/utils.cjs +27 -73
- package/dist/utils.d.cts +12 -0
- package/dist/utils.d.ts +12 -8
- package/dist/utils.js +15 -31
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,194 +1,138 @@
|
|
|
1
|
+
import Codec from "./codec.js";
|
|
2
|
+
import { branch, generateAuthorization, localKey, randomInt, uuid } from "./utils.js";
|
|
3
|
+
import InboundMessage from "./sip-message/inbound/index.js";
|
|
4
|
+
import OutboundMessage from "./sip-message/outbound/index.js";
|
|
5
|
+
import RequestMessage from "./sip-message/outbound/request.js";
|
|
6
|
+
import ResponseMessage from "./sip-message/outbound/response.js";
|
|
7
|
+
import "./sip-message/index.js";
|
|
8
|
+
import InboundCallSession from "./call-session/inbound.js";
|
|
9
|
+
import OutboundCallSession from "./call-session/outbound.js";
|
|
1
10
|
import EventEmitter from "node:events";
|
|
2
11
|
import tls from "node:tls";
|
|
3
12
|
import waitFor from "wait-for-async";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
const outboundMessage = new OutboundMessage("SIP/2.0 100 Trying", {
|
|
129
|
-
Via: inboundMessage.headers.Via,
|
|
130
|
-
"Call-ID": inboundMessage.getHeader("Call-ID"),
|
|
131
|
-
From: inboundMessage.headers.From,
|
|
132
|
-
To: inboundMessage.headers.To,
|
|
133
|
-
CSeq: inboundMessage.headers.CSeq,
|
|
134
|
-
"Content-Length": "0"
|
|
135
|
-
});
|
|
136
|
-
this.send(outboundMessage);
|
|
137
|
-
this.emit("invite", inboundMessage);
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
enableDebugMode() {
|
|
141
|
-
this.on(
|
|
142
|
-
"message",
|
|
143
|
-
(message) => console.log(`Receiving...(${/* @__PURE__ */ new Date()})
|
|
144
|
-
${message.toString()}`)
|
|
145
|
-
);
|
|
146
|
-
const tlsWrite = this.client.write.bind(this.client);
|
|
147
|
-
this.client.write = (message) => {
|
|
148
|
-
console.log(`Sending...(${/* @__PURE__ */ new Date()})
|
|
149
|
-
${message}`);
|
|
150
|
-
return tlsWrite(message);
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
revoke() {
|
|
154
|
-
clearInterval(this.intervalHandle);
|
|
155
|
-
this.removeAllListeners();
|
|
156
|
-
this.client.removeAllListeners();
|
|
157
|
-
this.client.destroy();
|
|
158
|
-
}
|
|
159
|
-
send(message, waitForReply = false) {
|
|
160
|
-
this.client.write(message.toString());
|
|
161
|
-
if (!waitForReply) {
|
|
162
|
-
return new Promise((resolve) => {
|
|
163
|
-
resolve(void 0);
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
return new Promise((resolve) => {
|
|
167
|
-
const messageListerner = (inboundMessage) => {
|
|
168
|
-
if (inboundMessage.headers.CSeq.trim().split(/\s+/)[0] !== message.headers.CSeq.trim().split(/\s+/)[0]) {
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
if (inboundMessage.subject.startsWith("SIP/2.0 100 ")) {
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
this.off("message", messageListerner);
|
|
175
|
-
resolve(inboundMessage);
|
|
176
|
-
};
|
|
177
|
-
this.on("message", messageListerner);
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
async answer(inviteMessage) {
|
|
181
|
-
const inboundCallSession = new InboundCallSession(this, inviteMessage);
|
|
182
|
-
await inboundCallSession.answer();
|
|
183
|
-
return inboundCallSession;
|
|
184
|
-
}
|
|
185
|
-
// decline an inbound call
|
|
186
|
-
async decline(inviteMessage) {
|
|
187
|
-
const newMessage = new ResponseMessage(inviteMessage, 603);
|
|
188
|
-
await this.send(newMessage);
|
|
189
|
-
}
|
|
190
|
-
async call(callee) {
|
|
191
|
-
const offerSDP = `
|
|
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 = `
|
|
192
136
|
v=0
|
|
193
137
|
o=- ${Date.now()} 0 IN IP4 ${this.client.localAddress}
|
|
194
138
|
s=rc-softphone-ts
|
|
@@ -201,40 +145,28 @@ a=fmtp:101 0-15
|
|
|
201
145
|
a=sendrecv
|
|
202
146
|
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:${localKey}
|
|
203
147
|
`.trim();
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
newMessage.headers["Proxy-Authorization"] = generateAuthorization(
|
|
227
|
-
this.sipInfo,
|
|
228
|
-
nonce,
|
|
229
|
-
"INVITE"
|
|
230
|
-
);
|
|
231
|
-
const progressMessage = await this.send(newMessage, true);
|
|
232
|
-
const outboundCallSession = new OutboundCallSession(this, progressMessage);
|
|
233
|
-
outboundCallSession.sdp = offerSDP;
|
|
234
|
-
return outboundCallSession;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
var index_default = Softphone;
|
|
238
|
-
export {
|
|
239
|
-
index_default as default
|
|
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
|
+
}
|
|
240
170
|
};
|
|
171
|
+
//#endregion
|
|
172
|
+
export { Softphone as default };
|
|
@@ -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;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import SipMessage from "../sip-message.js";
|
|
2
|
+
|
|
3
|
+
//#region src/sip-message/inbound/index.d.ts
|
|
2
4
|
declare class InboundMessage extends SipMessage {
|
|
3
|
-
|
|
5
|
+
static fromString(str: string): SipMessage;
|
|
4
6
|
}
|
|
5
|
-
|
|
7
|
+
//#endregion
|
|
8
|
+
export { InboundMessage as default };
|
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
import { uuid } from "../../utils.js";
|
|
2
2
|
import SipMessage from "../sip-message.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
return sipMessage;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
var inbound_default = InboundMessage;
|
|
20
|
-
export {
|
|
21
|
-
inbound_default as default
|
|
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
|
+
}
|
|
22
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 SipMessage from "./sip-message.cjs";
|
|
2
|
+
import InboundMessage from "./inbound/index.cjs";
|
|
3
|
+
import OutboundMessage from "./outbound/index.cjs";
|
|
4
|
+
import RequestMessage from "./outbound/request.cjs";
|
|
5
|
+
import ResponseMessage from "./outbound/response.cjs";
|
|
6
|
+
export { InboundMessage, OutboundMessage, RequestMessage, ResponseMessage, SipMessage };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import SipMessage from "./sip-message.js";
|
|
2
|
+
import InboundMessage from "./inbound/index.js";
|
|
3
|
+
import OutboundMessage from "./outbound/index.js";
|
|
4
|
+
import RequestMessage from "./outbound/request.js";
|
|
5
|
+
import ResponseMessage from "./outbound/response.js";
|
|
6
|
+
export { InboundMessage, OutboundMessage, RequestMessage, ResponseMessage, SipMessage };
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
export {
|
|
7
|
-
default2 as InboundMessage,
|
|
8
|
-
default3 as OutboundMessage,
|
|
9
|
-
default4 as RequestMessage,
|
|
10
|
-
default5 as ResponseMessage,
|
|
11
|
-
default6 as SipMessage
|
|
12
|
-
};
|
|
1
|
+
import SipMessage from "./sip-message.js";
|
|
2
|
+
import InboundMessage from "./inbound/index.js";
|
|
3
|
+
import OutboundMessage from "./outbound/index.js";
|
|
4
|
+
import RequestMessage from "./outbound/request.js";
|
|
5
|
+
import ResponseMessage from "./outbound/response.js";
|
|
6
|
+
export { InboundMessage, OutboundMessage, RequestMessage, ResponseMessage, SipMessage };
|