sip-connector 14.1.0-alpha.10 → 14.1.0-alpha.11
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/{@SipConnector-D4tn0Ep5.js → @SipConnector-C-ThpS1P.js} +4 -1
- package/dist/@SipConnector-Xh6_JpUI.cjs +1 -0
- package/dist/ApiManager/eventNames.d.ts +1 -1
- package/dist/CallManager/eventNames.d.ts +1 -1
- package/dist/ConnectionManager/@ConnectionManager.d.ts +1 -1
- package/dist/ConnectionManager/ConnectionFlow.d.ts +1 -1
- package/dist/ConnectionManager/ConnectionStateMachine.d.ts +1 -1
- package/dist/ConnectionManager/RegistrationManager.d.ts +1 -1
- package/dist/ConnectionManager/eventNames.d.ts +1 -1
- package/dist/IncomingCallManager/@IncomingCallManager.d.ts +1 -1
- package/dist/PresentationManager/eventNames.d.ts +1 -1
- package/dist/SipConnector/@SipConnector.d.ts +1 -1
- package/dist/SipConnector/eventNames.d.ts +1 -1
- package/dist/__fixtures__/BaseSession.mock.d.ts +5 -5
- package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +6 -0
- package/dist/__fixtures__/RTCSessionMock.d.ts +5 -5
- package/dist/__fixtures__/UA.mock.d.ts +1 -1
- package/dist/doMock.cjs +1 -1
- package/dist/doMock.js +122 -122
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/package.json +3 -3
- package/dist/@SipConnector-Bkm1XX-8.cjs +0 -1
package/dist/doMock.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { O as
|
|
1
|
+
import { O as D, S as L } from "./@SipConnector-C-ThpS1P.js";
|
|
2
2
|
import y from "@krivega/jssip/lib/NameAddrHeader";
|
|
3
|
-
import
|
|
4
|
-
import { EventEmitter as
|
|
5
|
-
import { IncomingRequest as
|
|
6
|
-
import { NameAddrHeader as
|
|
7
|
-
import { createAudioMediaStreamTrackMock as
|
|
8
|
-
import
|
|
9
|
-
class
|
|
3
|
+
import F from "@krivega/jssip/lib/URI";
|
|
4
|
+
import { EventEmitter as b } from "node:events";
|
|
5
|
+
import { IncomingRequest as V } from "@krivega/jssip/lib/SIPMessage";
|
|
6
|
+
import { NameAddrHeader as k, URI as E, C as N } from "@krivega/jssip";
|
|
7
|
+
import { createAudioMediaStreamTrackMock as W, createVideoMediaStreamTrackMock as U } from "webrtc-mock";
|
|
8
|
+
import { Events as _ } from "events-constructor";
|
|
9
|
+
class T extends V {
|
|
10
10
|
headers;
|
|
11
11
|
constructor(e) {
|
|
12
12
|
super(), this.headers = new Headers(e);
|
|
@@ -15,34 +15,33 @@ class _ extends b {
|
|
|
15
15
|
return this.headers.get(e) ?? "";
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
const
|
|
19
|
-
U,
|
|
18
|
+
const G = "incomingCall", H = "declinedIncomingCall", x = "failedIncomingCall", q = "terminatedIncomingCall", A = "connecting", Y = "connected", j = "disconnected", z = "newRTCSession", B = "registered", $ = "unregistered", J = "registrationFailed", K = "newMessage", Q = "sipEvent", X = "availableSecondRemoteStream", Z = "notAvailableSecondRemoteStream", ee = "mustStopPresentation", te = "shareState", re = "enterRoom", ne = "useLicense", oe = "peerconnection:confirmed", se = "peerconnection:ontrack", ie = "channels", ae = "channels:notify", ce = "ended:fromserver", de = "main-cam-control", Ee = "admin-stop-main-cam", he = "admin-start-main-cam", me = "admin-stop-mic", le = "admin-start-mic", ue = "admin-force-sync-media-state", pe = "participant:added-to-list-moderators", ge = "participant:removed-from-list-moderators", _e = "participant:move-request-to-stream", Te = "participant:move-request-to-spectators", Ie = "participant:move-request-to-participants", we = "participation:accepting-word-request", Se = "participation:cancelling-word-request", Ne = "webcast:started", fe = "webcast:stopped", Ce = "account:changed", Re = "account:deleted", Me = "conference:participant-token-issued", Ae = "ended", Oe = "sending", Pe = "reinvite", ve = "replaces", De = "refer", Le = "progress", ye = "accepted", Fe = "confirmed", be = "peerconnection", Ve = "failed", ke = "muted", We = "unmuted", Ue = "newDTMF", Ge = "newInfo", He = "hold", xe = "unhold", qe = "update", Ye = "sdp", je = "icecandidate", ze = "getusermediafailed", Be = "peerconnection:createofferfailed", $e = "peerconnection:createanswerfailed", Je = "peerconnection:setlocaldescriptionfailed", Ke = "peerconnection:setremotedescriptionfailed", Qe = "presentation:start", Xe = "presentation:started", Ze = "presentation:end", et = "presentation:ended", tt = "presentation:failed", rt = [
|
|
20
19
|
G,
|
|
21
|
-
x,
|
|
22
20
|
H,
|
|
23
|
-
|
|
21
|
+
q,
|
|
22
|
+
x,
|
|
24
23
|
we,
|
|
25
|
-
ge,
|
|
26
|
-
ie,
|
|
27
|
-
Re,
|
|
28
|
-
fe,
|
|
29
|
-
Ce,
|
|
30
24
|
Se,
|
|
25
|
+
_e,
|
|
26
|
+
ae,
|
|
27
|
+
Me,
|
|
28
|
+
Ce,
|
|
29
|
+
Re,
|
|
31
30
|
Ne,
|
|
32
|
-
|
|
33
|
-
pe
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
fe,
|
|
32
|
+
pe,
|
|
33
|
+
ge
|
|
34
|
+
], O = [
|
|
35
|
+
A,
|
|
37
36
|
Y,
|
|
38
37
|
j,
|
|
39
38
|
z,
|
|
40
39
|
B,
|
|
40
|
+
$,
|
|
41
41
|
J,
|
|
42
42
|
K,
|
|
43
|
-
|
|
44
|
-
],
|
|
45
|
-
Q,
|
|
43
|
+
Q
|
|
44
|
+
], nt = [
|
|
46
45
|
X,
|
|
47
46
|
Z,
|
|
48
47
|
ee,
|
|
@@ -51,25 +50,25 @@ const U = "incomingCall", G = "declinedIncomingCall", H = "failedIncomingCall",
|
|
|
51
50
|
ne,
|
|
52
51
|
oe,
|
|
53
52
|
se,
|
|
54
|
-
|
|
53
|
+
ie,
|
|
55
54
|
ce,
|
|
56
|
-
Ee,
|
|
57
55
|
de,
|
|
58
56
|
he,
|
|
57
|
+
Ee,
|
|
59
58
|
me,
|
|
60
59
|
le,
|
|
61
|
-
|
|
62
|
-
Te
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
M,
|
|
60
|
+
ue,
|
|
61
|
+
Te,
|
|
62
|
+
Ie
|
|
63
|
+
], p = [
|
|
66
64
|
Ae,
|
|
65
|
+
A,
|
|
67
66
|
Oe,
|
|
68
67
|
Pe,
|
|
69
68
|
ve,
|
|
70
69
|
De,
|
|
71
|
-
ye,
|
|
72
70
|
Le,
|
|
71
|
+
ye,
|
|
73
72
|
Fe,
|
|
74
73
|
be,
|
|
75
74
|
Ve,
|
|
@@ -84,20 +83,21 @@ const U = "incomingCall", G = "declinedIncomingCall", H = "failedIncomingCall",
|
|
|
84
83
|
je,
|
|
85
84
|
ze,
|
|
86
85
|
Be,
|
|
86
|
+
$e,
|
|
87
87
|
Je,
|
|
88
88
|
Ke,
|
|
89
|
-
$e,
|
|
90
89
|
Qe,
|
|
91
90
|
Xe,
|
|
92
91
|
Ze,
|
|
93
|
-
et
|
|
92
|
+
et,
|
|
93
|
+
tt
|
|
94
94
|
];
|
|
95
|
-
[...
|
|
96
|
-
|
|
97
|
-
...
|
|
98
|
-
...
|
|
95
|
+
[...O, ...rt];
|
|
96
|
+
[
|
|
97
|
+
...p,
|
|
98
|
+
...nt
|
|
99
99
|
];
|
|
100
|
-
class
|
|
100
|
+
class ot {
|
|
101
101
|
originator;
|
|
102
102
|
connection;
|
|
103
103
|
events;
|
|
@@ -108,7 +108,7 @@ class st {
|
|
|
108
108
|
eventHandlers: t,
|
|
109
109
|
remoteIdentity: r
|
|
110
110
|
}) {
|
|
111
|
-
this.originator = e, this.events = new
|
|
111
|
+
this.originator = e, this.events = new _(p), this.initEvents(t), this.remote_identity = r;
|
|
112
112
|
}
|
|
113
113
|
get contact() {
|
|
114
114
|
throw new Error("Method not implemented.");
|
|
@@ -236,12 +236,14 @@ class st {
|
|
|
236
236
|
throw new Error("Method not implemented.");
|
|
237
237
|
}
|
|
238
238
|
initEvents(e) {
|
|
239
|
-
e && Object.entries(e).forEach(([t, r]) =>
|
|
239
|
+
e && Object.entries(e).forEach(([t, r]) => {
|
|
240
|
+
this.on(t, r);
|
|
241
|
+
});
|
|
240
242
|
}
|
|
241
243
|
// @ts-expect-error
|
|
242
244
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
|
|
243
245
|
on(e, t) {
|
|
244
|
-
return this.events.on(e, t), this;
|
|
246
|
+
return p.includes(e) && this.events.on(e, t), this;
|
|
245
247
|
}
|
|
246
248
|
trigger(e, t) {
|
|
247
249
|
this.events.trigger(e, t);
|
|
@@ -266,7 +268,7 @@ class st {
|
|
|
266
268
|
return !0;
|
|
267
269
|
}
|
|
268
270
|
}
|
|
269
|
-
class
|
|
271
|
+
class st {
|
|
270
272
|
dtmf = null;
|
|
271
273
|
track = null;
|
|
272
274
|
transport = null;
|
|
@@ -309,6 +311,7 @@ class it {
|
|
|
309
311
|
throw new Error("Method not implemented.");
|
|
310
312
|
}
|
|
311
313
|
}
|
|
314
|
+
const it = ["track"];
|
|
312
315
|
class at {
|
|
313
316
|
senders = [];
|
|
314
317
|
receivers = [];
|
|
@@ -338,8 +341,9 @@ class at {
|
|
|
338
341
|
// eslint-disable-next-line unicorn/no-null
|
|
339
342
|
sctp = null;
|
|
340
343
|
signalingState;
|
|
344
|
+
events;
|
|
341
345
|
constructor(e, t) {
|
|
342
|
-
this.receivers = t.map((r) => ({ track: r }));
|
|
346
|
+
this.events = new _(it), this.receivers = t.map((r) => ({ track: r }));
|
|
343
347
|
}
|
|
344
348
|
getRemoteStreams() {
|
|
345
349
|
throw new Error("Method not implemented.");
|
|
@@ -390,10 +394,10 @@ class at {
|
|
|
390
394
|
throw new Error("Method not implemented.");
|
|
391
395
|
}
|
|
392
396
|
addEventListener(e, t, r) {
|
|
393
|
-
|
|
397
|
+
this.events.on(e, t);
|
|
394
398
|
}
|
|
395
399
|
removeEventListener(e, t, r) {
|
|
396
|
-
|
|
400
|
+
this.events.off(e, t);
|
|
397
401
|
}
|
|
398
402
|
dispatchEvent(e) {
|
|
399
403
|
throw new Error("Method not implemented.");
|
|
@@ -401,8 +405,8 @@ class at {
|
|
|
401
405
|
getReceivers = () => this.receivers;
|
|
402
406
|
getSenders = () => this.senders;
|
|
403
407
|
addTrack = (e) => {
|
|
404
|
-
const t = new
|
|
405
|
-
return this.senders.push(t), t;
|
|
408
|
+
const t = new st({ track: e });
|
|
409
|
+
return this.senders.push(t), this.events.trigger("track", { track: e }), t;
|
|
406
410
|
};
|
|
407
411
|
}
|
|
408
412
|
function ct(n) {
|
|
@@ -411,8 +415,8 @@ function ct(n) {
|
|
|
411
415
|
throw new Error("wrong sip url");
|
|
412
416
|
return e[0];
|
|
413
417
|
}
|
|
414
|
-
const
|
|
415
|
-
class
|
|
418
|
+
const f = 400, dt = "777", Et = (n) => n.getVideoTracks().length > 0;
|
|
419
|
+
class i extends ot {
|
|
416
420
|
static presentationError;
|
|
417
421
|
static startPresentationError;
|
|
418
422
|
static countStartPresentationError = Number.POSITIVE_INFINITY;
|
|
@@ -437,23 +441,21 @@ class s extends st {
|
|
|
437
441
|
}, 100), setTimeout(() => {
|
|
438
442
|
this.trigger("confirmed");
|
|
439
443
|
}, 200);
|
|
440
|
-
},
|
|
444
|
+
}, f);
|
|
441
445
|
});
|
|
442
446
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
443
447
|
replaceMediaStream = jest.fn(async (e) => {
|
|
444
448
|
});
|
|
445
449
|
isEndedInner = !1;
|
|
446
450
|
constructor({
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
originator: i,
|
|
451
|
-
remoteIdentity: a = new V(
|
|
451
|
+
eventHandlers: e,
|
|
452
|
+
originator: t,
|
|
453
|
+
remoteIdentity: r = new k(
|
|
452
454
|
new E("sip", "caller1", "test1.com", 5060),
|
|
453
455
|
"Test Caller 1"
|
|
454
456
|
)
|
|
455
457
|
}) {
|
|
456
|
-
super({ originator:
|
|
458
|
+
super({ originator: t, eventHandlers: e, remoteIdentity: r });
|
|
457
459
|
}
|
|
458
460
|
static setPresentationError(e) {
|
|
459
461
|
this.presentationError = e;
|
|
@@ -468,45 +470,43 @@ class s extends st {
|
|
|
468
470
|
this.startPresentationError = void 0, this.countStartPresentationError = Number.POSITIVE_INFINITY, this.countStartsPresentation = 0;
|
|
469
471
|
}
|
|
470
472
|
startPresentation = async (e) => {
|
|
471
|
-
if (
|
|
472
|
-
throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e),
|
|
473
|
-
if (
|
|
474
|
-
throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e),
|
|
473
|
+
if (i.countStartsPresentation += 1, i.presentationError)
|
|
474
|
+
throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e), i.presentationError;
|
|
475
|
+
if (i.startPresentationError && i.countStartsPresentation < i.countStartPresentationError)
|
|
476
|
+
throw this.trigger("presentation:start", e), this.trigger("presentation:failed", e), i.startPresentationError;
|
|
475
477
|
return super.startPresentation(e);
|
|
476
478
|
};
|
|
477
479
|
stopPresentation = async (e) => {
|
|
478
|
-
if (
|
|
479
|
-
throw this.trigger("presentation:end", e), this.trigger("presentation:failed", e),
|
|
480
|
+
if (i.presentationError)
|
|
481
|
+
throw this.trigger("presentation:end", e), this.trigger("presentation:failed", e), i.presentationError;
|
|
480
482
|
return super.stopPresentation(e);
|
|
481
483
|
};
|
|
482
484
|
initPeerconnection(e) {
|
|
483
485
|
return e ? (this.createPeerconnection(e), !0) : !1;
|
|
484
486
|
}
|
|
485
487
|
createPeerconnection(e) {
|
|
486
|
-
const t =
|
|
488
|
+
const t = W();
|
|
487
489
|
t.id = "mainaudio1";
|
|
488
490
|
const r = [t];
|
|
489
491
|
if (Et(e)) {
|
|
490
|
-
const a =
|
|
492
|
+
const a = U();
|
|
491
493
|
a.id = "mainvideo1", r.push(a);
|
|
492
494
|
}
|
|
493
|
-
this.connection = new at(void 0, r), this.addStream(e),
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
setTimeout(() => {
|
|
500
|
-
this.url.includes(dt) ? this.trigger("failed", {
|
|
495
|
+
this.connection = new at(void 0, r), this.addStream(e), this.trigger("peerconnection", { peerconnection: this.connection });
|
|
496
|
+
}
|
|
497
|
+
connect(e, { mediaStream: t } = {}) {
|
|
498
|
+
const r = ct(e);
|
|
499
|
+
return this.initPeerconnection(t), setTimeout(() => {
|
|
500
|
+
e.includes(dt) ? this.trigger("failed", {
|
|
501
501
|
originator: "remote",
|
|
502
502
|
message: "IncomingResponse",
|
|
503
503
|
cause: "Rejected"
|
|
504
504
|
}) : (this.trigger("connecting"), setTimeout(() => {
|
|
505
505
|
this.newInfo({
|
|
506
|
-
originator:
|
|
506
|
+
originator: D.REMOTE,
|
|
507
507
|
// @ts-expect-error
|
|
508
508
|
request: {
|
|
509
|
-
getHeader: (
|
|
509
|
+
getHeader: (s) => s === "content-type" ? "application/vinteo.webrtc.roomname" : s === "x-webrtc-enter-room" ? r : s === "x-webrtc-participant-name" ? "Test Caller 1" : ""
|
|
510
510
|
}
|
|
511
511
|
});
|
|
512
512
|
}, 100), setTimeout(() => {
|
|
@@ -514,7 +514,7 @@ class s extends st {
|
|
|
514
514
|
}, 200), setTimeout(() => {
|
|
515
515
|
this.trigger("confirmed");
|
|
516
516
|
}, 300));
|
|
517
|
-
},
|
|
517
|
+
}, f), this.connection;
|
|
518
518
|
}
|
|
519
519
|
terminate({ status_code: e, cause: t } = {}) {
|
|
520
520
|
return this.status_code = e, this.trigger("ended", { status_code: e, cause: t, originator: "local" }), this.isEndedInner = !1, this;
|
|
@@ -585,14 +585,14 @@ class ht {
|
|
|
585
585
|
setExtraContactParams() {
|
|
586
586
|
}
|
|
587
587
|
}
|
|
588
|
-
const c = "PASSWORD_CORRECT",
|
|
588
|
+
const c = "PASSWORD_CORRECT", C = "PASSWORD_CORRECT_2", mt = "NAME_INCORRECT", d = 400, u = {
|
|
589
589
|
url: "wss://sipServerUrl/webrtc/wss/",
|
|
590
590
|
sip_uri: "sip:sipServerUrl;transport=ws",
|
|
591
591
|
via_transport: "WSS"
|
|
592
|
-
},
|
|
592
|
+
}, R = {
|
|
593
593
|
status_code: 200,
|
|
594
594
|
reason_phrase: "OK"
|
|
595
|
-
},
|
|
595
|
+
}, M = {
|
|
596
596
|
status_code: 401,
|
|
597
597
|
reason_phrase: "Unauthorized"
|
|
598
598
|
};
|
|
@@ -606,8 +606,8 @@ class o {
|
|
|
606
606
|
// @ts-expect-error – Jest создаёт функцию-замок.
|
|
607
607
|
call = jest.fn(
|
|
608
608
|
(e, t) => {
|
|
609
|
-
const { mediaStream: r, eventHandlers:
|
|
610
|
-
return this.session = new
|
|
609
|
+
const { mediaStream: r, eventHandlers: s } = t;
|
|
610
|
+
return this.session = new i({ eventHandlers: s, originator: "local" }), this.session.connect(e, { mediaStream: r }), this.session;
|
|
611
611
|
}
|
|
612
612
|
);
|
|
613
613
|
sendOptions = jest.fn(
|
|
@@ -630,8 +630,8 @@ class o {
|
|
|
630
630
|
*/
|
|
631
631
|
stop = jest.fn(() => {
|
|
632
632
|
this.startedTimeout && clearTimeout(this.startedTimeout), this.stopedTimeout && clearTimeout(this.stopedTimeout), this.unregister(), this.isStarted() ? this.stopedTimeout = setTimeout(() => {
|
|
633
|
-
this.trigger("disconnected", { error: !0, socket:
|
|
634
|
-
}, d) : this.trigger("disconnected", { error: !0, socket:
|
|
633
|
+
this.trigger("disconnected", { error: !0, socket: u });
|
|
634
|
+
}, d) : this.trigger("disconnected", { error: !0, socket: u });
|
|
635
635
|
});
|
|
636
636
|
removeAllListeners = jest.fn(() => (this.events.removeEventHandlers(), this));
|
|
637
637
|
once = jest.fn((e, t) => (this.events.once(e, t), this));
|
|
@@ -642,10 +642,10 @@ class o {
|
|
|
642
642
|
isConnectedInner;
|
|
643
643
|
configuration;
|
|
644
644
|
constructor(e) {
|
|
645
|
-
this.events = new
|
|
646
|
-
const [t, r] = e.uri.split(":"), [
|
|
645
|
+
this.events = new _(O);
|
|
646
|
+
const [t, r] = e.uri.split(":"), [s, a] = r.split("@"), l = {
|
|
647
647
|
...e,
|
|
648
|
-
uri: new E(t,
|
|
648
|
+
uri: new E(t, s, a)
|
|
649
649
|
};
|
|
650
650
|
this.configuration = l, this.registratorInner = new ht();
|
|
651
651
|
}
|
|
@@ -693,12 +693,12 @@ class o {
|
|
|
693
693
|
this.startedTimeout && clearTimeout(this.startedTimeout);
|
|
694
694
|
const { password: e, register: t, uri: r } = this.configuration;
|
|
695
695
|
t === !0 && r.user.includes(mt) ? (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
|
|
696
|
-
this.trigger("registrationFailed", { response:
|
|
697
|
-
}, d)) : !this.isRegistered() && t === !0 && (e === c || e ===
|
|
698
|
-
this.trigger("registered", { response:
|
|
699
|
-
}, d)) : t === !0 && e !== c && e !==
|
|
700
|
-
this.trigger("registrationFailed", { response:
|
|
701
|
-
}, d)), o.isAvailableTelephony ? (this.trigger("connected", { socket:
|
|
696
|
+
this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
|
|
697
|
+
}, d)) : !this.isRegistered() && t === !0 && (e === c || e === C) ? (this.isRegisteredInner = !0, this.startedTimeout = setTimeout(() => {
|
|
698
|
+
this.trigger("registered", { response: R });
|
|
699
|
+
}, d)) : t === !0 && e !== c && e !== C && (this.isRegisteredInner = !1, this.isConnectedInner = !1, this.startedTimeout = setTimeout(() => {
|
|
700
|
+
this.trigger("registrationFailed", { response: M, cause: N.causes.REJECTED });
|
|
701
|
+
}, d)), o.isAvailableTelephony ? (this.trigger("connected", { socket: u }), this.isConnectedInner = !0) : this.stop();
|
|
702
702
|
}
|
|
703
703
|
/**
|
|
704
704
|
* unregister
|
|
@@ -706,7 +706,7 @@ class o {
|
|
|
706
706
|
* @returns {undefined}
|
|
707
707
|
*/
|
|
708
708
|
unregister() {
|
|
709
|
-
this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response:
|
|
709
|
+
this.isRegisteredInner = !1, this.isConnectedInner = !1, this.trigger("unregistered", { response: R });
|
|
710
710
|
}
|
|
711
711
|
isRegistered() {
|
|
712
712
|
return this.isRegisteredInner === !0;
|
|
@@ -735,7 +735,7 @@ class lt {
|
|
|
735
735
|
this.url = e;
|
|
736
736
|
}
|
|
737
737
|
}
|
|
738
|
-
class ut extends
|
|
738
|
+
class ut extends b {
|
|
739
739
|
contentType;
|
|
740
740
|
body;
|
|
741
741
|
constructor(e, t) {
|
|
@@ -743,31 +743,31 @@ class ut extends F {
|
|
|
743
743
|
}
|
|
744
744
|
}
|
|
745
745
|
const g = "remote", pt = (n, e) => {
|
|
746
|
-
const t = new
|
|
746
|
+
const t = new T(e), r = {
|
|
747
747
|
originator: g,
|
|
748
748
|
request: t,
|
|
749
749
|
info: new ut("", "")
|
|
750
750
|
};
|
|
751
751
|
n.newInfo(r);
|
|
752
752
|
}, gt = (n, e) => {
|
|
753
|
-
const r = { event: "sipEvent", request: new
|
|
753
|
+
const r = { event: "sipEvent", request: new T(e) };
|
|
754
754
|
n.newSipEvent(r);
|
|
755
755
|
}, _t = (n, {
|
|
756
756
|
incomingNumber: e = "1234",
|
|
757
757
|
displayName: t,
|
|
758
758
|
host: r
|
|
759
759
|
}) => {
|
|
760
|
-
const
|
|
761
|
-
|
|
762
|
-
const l = new
|
|
760
|
+
const s = new i({ originator: g, eventHandlers: {} }), a = new F("sip", e, r);
|
|
761
|
+
s.remote_identity = new y(a, t);
|
|
762
|
+
const l = new T([]);
|
|
763
763
|
n.trigger("newRTCSession", {
|
|
764
764
|
originator: g,
|
|
765
|
-
session:
|
|
765
|
+
session: s,
|
|
766
766
|
request: l
|
|
767
767
|
});
|
|
768
768
|
}, Tt = (n, e) => {
|
|
769
769
|
e ? n.trigger("failed", e) : n.trigger("failed", n);
|
|
770
|
-
},
|
|
770
|
+
}, P = {
|
|
771
771
|
triggerNewInfo: pt,
|
|
772
772
|
triggerNewSipEvent: gt,
|
|
773
773
|
triggerIncomingSession: _t,
|
|
@@ -777,22 +777,22 @@ const g = "remote", pt = (n, e) => {
|
|
|
777
777
|
C: {
|
|
778
778
|
INVITE: "INVITE"
|
|
779
779
|
}
|
|
780
|
-
},
|
|
780
|
+
}, I = "user", h = "displayName", w = "SIP_SERVER_URL", v = "SIP_WEB_SOCKET_SERVER_URL", It = new P.WebSocketInterface(v), S = {
|
|
781
781
|
userAgent: "Chrome",
|
|
782
|
-
sipServerUrl:
|
|
783
|
-
sipWebSocketServerURL:
|
|
782
|
+
sipServerUrl: w,
|
|
783
|
+
sipWebSocketServerURL: v
|
|
784
784
|
}, vt = {
|
|
785
|
-
...
|
|
785
|
+
...S
|
|
786
786
|
}, wt = {
|
|
787
|
-
...
|
|
788
|
-
user:
|
|
787
|
+
...S,
|
|
788
|
+
user: I,
|
|
789
789
|
password: c,
|
|
790
790
|
register: !0
|
|
791
791
|
}, Dt = {
|
|
792
792
|
...wt,
|
|
793
793
|
displayName: h
|
|
794
|
-
},
|
|
795
|
-
...
|
|
794
|
+
}, Lt = {
|
|
795
|
+
...S,
|
|
796
796
|
displayName: h,
|
|
797
797
|
register: !1
|
|
798
798
|
}, m = {
|
|
@@ -803,16 +803,16 @@ const g = "remote", pt = (n, e) => {
|
|
|
803
803
|
register_expires: 300,
|
|
804
804
|
connection_recovery_max_interval: 6,
|
|
805
805
|
connection_recovery_min_interval: 2
|
|
806
|
-
},
|
|
806
|
+
}, yt = {
|
|
807
807
|
...m,
|
|
808
808
|
password: c,
|
|
809
|
-
uri: new E("sip",
|
|
809
|
+
uri: new E("sip", I, w),
|
|
810
810
|
display_name: "",
|
|
811
811
|
register: !0
|
|
812
812
|
}, Ft = {
|
|
813
813
|
...m,
|
|
814
814
|
password: c,
|
|
815
|
-
uri: new E("sip",
|
|
815
|
+
uri: new E("sip", I, w),
|
|
816
816
|
display_name: h,
|
|
817
817
|
register: !0
|
|
818
818
|
}, bt = {
|
|
@@ -823,28 +823,28 @@ const g = "remote", pt = (n, e) => {
|
|
|
823
823
|
...m,
|
|
824
824
|
display_name: "",
|
|
825
825
|
register: !1
|
|
826
|
-
}, St = "10.10.10.10", kt = [`X-Vinteo-Remote: ${St}`], Wt = () => new
|
|
827
|
-
JsSIP:
|
|
826
|
+
}, St = "10.10.10.10", kt = [`X-Vinteo-Remote: ${St}`], Wt = () => new L({
|
|
827
|
+
JsSIP: P
|
|
828
828
|
});
|
|
829
829
|
export {
|
|
830
830
|
dt as FAILED_CONFERENCE_NUMBER,
|
|
831
|
-
|
|
831
|
+
P as JsSIP,
|
|
832
832
|
mt as NAME_INCORRECT,
|
|
833
833
|
c as PASSWORD_CORRECT,
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
834
|
+
C as PASSWORD_CORRECT_2,
|
|
835
|
+
w as SIP_SERVER_URL,
|
|
836
|
+
v as SIP_WEB_SOCKET_SERVER_URL,
|
|
837
837
|
wt as dataForConnectionWithAuthorization,
|
|
838
838
|
Dt as dataForConnectionWithAuthorizationWithDisplayName,
|
|
839
|
-
|
|
839
|
+
Lt as dataForConnectionWithoutAuthorization,
|
|
840
840
|
vt as dataForConnectionWithoutAuthorizationWithoutDisplayName,
|
|
841
841
|
h as displayName,
|
|
842
842
|
Wt as doMockSipConnector,
|
|
843
843
|
kt as extraHeadersRemoteAddress,
|
|
844
844
|
St as remoteAddress,
|
|
845
|
-
|
|
845
|
+
yt as uaConfigurationWithAuthorization,
|
|
846
846
|
Ft as uaConfigurationWithAuthorizationWithDisplayName,
|
|
847
847
|
bt as uaConfigurationWithoutAuthorization,
|
|
848
848
|
Vt as uaConfigurationWithoutAuthorizationWithoutDisplayName,
|
|
849
|
-
|
|
849
|
+
I as user
|
|
850
850
|
};
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Bkm1XX-8.cjs"),W=require("@krivega/cancelable-promise"),ce=require("repeated-calls"),ae=require("ts-debounce"),_=require("debug"),le=require("sequent-promises"),ue=require("stack-promises"),de=e=>e instanceof Object&&("originator"in e||"cause"in e),ge=e=>{if(W.isCanceledError(e))return!0;if(!de(e))return!1;const{originator:n,cause:t}=e;return typeof t=="string"?t===i.ECallCause.REQUEST_TIMEOUT||t===i.ECallCause.REJECTED||n===i.Originator.LOCAL&&(t===i.ECallCause.CANCELED||t===i.ECallCause.BYE):!1},fe=(e,n)=>(e.degradationPreference=n.degradationPreference,e),Ce=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},G=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,he=G(),Se=(e,n)=>{if(he(e,n))return e},me=(e,n)=>{const t=e.maxBitrate,o=Se(n,t);return o!==void 0&&(e.maxBitrate=o),e},K=1,Re=G(K),ye=(e,n)=>{const t=e===void 0?void 0:Math.max(e,K);if(t!==void 0&&Re(t,n))return t},pe=(e,n)=>{const t=e.scaleResolutionDownBy,o=ye(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Ee=(e,n)=>{const t=n.encodings?.length??0;return Ce(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;me(o,c),pe(o,a)}),e},Te=(e,n)=>{if(e.codecs?.length!==n.codecs?.length)return!0;for(let t=0;t<(e.codecs?.length??0);t++)if(JSON.stringify(e.codecs[t])!==JSON.stringify(n.codecs[t]))return!0;if(e.headerExtensions?.length!==n.headerExtensions?.length)return!0;for(let t=0;t<(e.headerExtensions?.length??0);t++)if(JSON.stringify(e.headerExtensions[t])!==JSON.stringify(n.headerExtensions[t]))return!0;if(e.encodings?.length!==n.encodings?.length)return!0;for(let t=0;t<(e.encodings.length??0);t++)if(JSON.stringify(e.encodings[t])!==JSON.stringify(n.encodings[t]))return!0;return e.rtcp?.cname!==n.rtcp?.cname||e.rtcp?.reducedSize!==n.rtcp?.reducedSize||e.degradationPreference!==n.degradationPreference},q=async(e,n)=>{const t=e.getParameters(),o=JSON.parse(JSON.stringify(t));Ee(t,n),fe(t,n);const r=Te(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},Me=e=>e.getVideoTracks()[0],ve=1e6,m=e=>e*ve,Y=m(.06),be=m(4),_e=e=>e<=64?Y:e<=128?m(.12):e<=256?m(.25):e<=384?m(.32):e<=426?m(.38):e<=640?m(.5):e<=848?m(.7):e<=1280?m(1):e<=1920?m(2):be,z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>z(e,Ae),Ne=.6,Q=(e,n)=>Oe(n)?e*Ne:e,Be=e=>Q(Y,e),Z=(e,n)=>{const t=_e(e);return Q(t,n)},H=1,ee=({videoTrack:e,targetSize:n,codec:t})=>{const o=e.getSettings(),r=o.width,s=o.height,c=r===void 0?H:r/n.width,a=s===void 0?H:s/n.height,l=Math.max(c,a,H),d=Z(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=Me(e);if(r===void 0)throw new Error("No video track");return n.forEach((s,c)=>{const a=o[c]??{};a.active=!0,s.rid!==void 0&&(a.rid=s.rid),s.scalabilityMode!==void 0&&(a.scalabilityMode=s.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:d}=ee({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},ne="purgatory",P=e=>e===ne,we=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),De=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return we(o,r)},Pe=(e,n)=>n===void 0||n.length===0?e:e.sort((t,o)=>{const r=n.indexOf(t.mimeType),s=n.indexOf(o.mimeType),c=r===-1?Number.MAX_VALUE:r,a=s===-1?Number.MAX_VALUE:s;return c-a}),Ie=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{if(typeof o.setCodecPreferences=="function"&&o.sender.track?.kind==="video"&&(n!==void 0&&n.length>0||t!==void 0&&t.length>0)){const r=De("video"),s=Ie(r,t),c=Pe(s,n);o.setCodecPreferences(c)}Object.keys(e).length>0&&await q(o.sender,e)}catch(r){i.logger("updateTransceiver error",r)}},$=e=>{if(!W.isCanceledError(e)&&!ce.hasCanceledError(e))throw e;return{isSuccessful:!1}},xe=({kind:e,readyState:n})=>e==="video"&&n==="live",Fe=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class ke{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(n,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:o}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=o,this.sipConnector=n,new Proxy(this,{get:(r,s,c)=>{if(typeof s=="string"&&Fe.has(s)&&s in this.sipConnector){const l=Reflect.get(this.sipConnector,s,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,s,c);return typeof a=="function"?a.bind(r):a}})}connectToServer=async n=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,name:a,password:l,isRegisteredUser:d,isDisconnectOnFail:f}=n;return i.logger("connectToServer",n),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,password:l,user:a,register:d}).then(g=>(i.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(i.logger("connectToServer catch: error",g),f===!0?this.sipConnector.disconnect().then(()=>$(g)).catch(()=>$(g)):$(g)))};callToServer=async n=>{const{conference:t,mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,setRemoteStreams:C,onBeforeProgressCall:R,onSuccessProgressCall:h,onEnterPurgatory:S,onEnterConference:y,onFailProgressCall:p,onFinishProgressCall:E,onEndedCall:T}=n,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),A=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(_)}}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("callToServer",n);const N=async()=>(i.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,sendEncodings:w({mediaStream:o,simulcastEncodings:a,sendEncodings:d}),number:t,onAddedTransceiver:O,ontrack:A}));let M=!1,v;const B=(i.logger("subscribeEnterConference: onEnterConference",y),S??y?this.sipConnector.on("api:enterRoom",({room:u})=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:M}),v=u,P(v)?S&&S():y&&y({isSuccessProgressCall:M})}):()=>{}),U=u=>(i.logger("onSuccess"),M=!0,b().catch(_),h&&h({isPurgatory:P(v)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),T&&T()}),u),V=u=>{throw i.logger("onFail"),p&&p(),B(),u},L=()=>{i.logger("onFinish"),E&&E()};return i.logger("onBeforeProgressCall"),R&&R(t),N().then(U).catch(u=>V(u)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(i.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(i.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,setRemoteStreams:x,onBeforeProgressCall:C,onSuccessProgressCall:R,onEnterPurgatory:h,onEnterConference:S,onFailProgressCall:y,onFinishProgressCall:p,onEndedCall:E}=n,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:x}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(_)}}),A=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("answerToIncomingCall",n);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,sendEncodings:w({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:A,ontrack:b}),N=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let M=!1,v;const B=(i.logger("subscribeEnterConference: onEnterConference",S),h??S?this.sipConnector.on("api:enterRoom",u=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:M}),v=u,P(v)?h&&h():S&&S({isSuccessProgressCall:M})}):()=>{}),U=u=>(i.logger("onSuccess"),M=!0,T().catch(_),R&&R({isPurgatory:P(v)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),E&&E()}),u),V=u=>{throw i.logger("onFail"),y&&y(),B(),u},L=()=>{i.logger("onFinish"),p&&p()};if(i.logger("onBeforeProgressCall"),C){const u=N();C(u)}return O().then(U).catch(u=>V(u)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d})=>{const f=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:f})};startPresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d,callLimit:f})=>{const g=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,callLimit:f,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:g})};stopShareSipConnector=async({isP2P:n=!1}={})=>(i.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(t=>{i.logger(t)}));sendRefusalToTurnOnMic=async()=>{i.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{i.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{i.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{i.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:t})=>{i.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:t})};replaceMediaStream=async(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const d=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return i.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,sendEncodings:w({mediaStream:n,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:d})};askPermissionToEnableCam=async()=>{i.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>ae.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{xe(t)&&n()};getRemoteStreams=()=>(i.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(i.logger("onUseLicense"),this.sipConnector.on("api:useLicense",n));onMustStopPresentation=n=>(i.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",n));onMoveToSpectators=n=>(i.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(i.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n))}const k=e=>{const{url:n,cause:t}=e;let o=n;return(t===i.ECallCause.BAD_MEDIA_DESCRIPTION||t===i.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var te=(e=>(e.CONNECT_SERVER_FAILED="CONNECT_SERVER_FAILED",e.WRONG_USER_OR_PASSWORD="WRONG_USER_OR_PASSWORD",e.BAD_MEDIA_ERROR="BAD_MEDIA_ERROR",e.NOT_FOUND_ERROR="NOT_FOUND_ERROR",e.WS_CONNECTION_FAILED="WS_CONNECTION_FAILED",e.CONNECT_SERVER_FAILED_BY_LINK="CONNECT_SERVER_FAILED_BY_LINK",e))(te||{});const Ue=new Error("Unknown error"),Ve=(e=Ue)=>{const{cause:n,socket:t}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case i.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case i.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":k(e)!==void 0&&k(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},Le=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},He=new Error("Unknown error"),$e=(e=He)=>{const{code:n,cause:t,message:o}=e,r=k(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=Le(o):o&&(s.message=String(o)),r!==void 0&&r!==""&&(s.link=r),n!==void 0&&n!==""&&(s.code=n),t!==void 0&&t!==""&&(s.cause=t),s},qe=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:te,getLinkError:k,getTypeFromError:Ve,getValuesFromError:$e},Symbol.toStringTag,{value:"Module"})),Je=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:o,isRegistered:r,isPresentationCall:s})=>{const c=[],a=t?"0":"1",l=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),(r===!1||r===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},Xe="[@*!|]",je="_",We=e=>{let n=e;return n=n.replaceAll(new RegExp(Xe,"g"),je),n},Ge=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${We(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},Ke=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ge({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",Ye=e=>n=>[...n].map(o=>async()=>e(o)),ze=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=Ye(n)(e);return le.sequentPromises(r,t)},Qe=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),Ze=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),en=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),nn=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),tn=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=Qe(e),o=en(e),r=Ze(e),s=nn(e);let c,a,l,d;const f=({onStartMainCamForced:C,onStartMainCamNotForced:R,onStopMainCamForced:h,onStopMainCamNotForced:S,onStartMicForced:y,onStartMicNotForced:p,onStopMicForced:E,onStopMicNotForced:T})=>{const b=n(C,R);c=t(b);const A=n(h,S);a=o(A);const O=n(y,p);l=r(O);const N=n(E,T);d=s(N)},g=()=>{c?.(),a?.(),l?.(),d?.()};return{start:C=>{f(C)},stop:()=>{g()}}},on=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:ne,createSyncMediaState:tn,error:qe,getExtraHeaders:Je,getUserAgent:Ke,hasPurgatory:P,sendDtmfAccumulated:ze},Symbol.toStringTag,{value:"Module"}));var oe=(e=>(e.VP8="video/VP8",e.VP9="video/VP9",e.H264="video/H264",e.AV1="video/AV1",e.rtx="video/rtx",e.red="video/red",e.flexfec03="video/flexfec-03",e))(oe||{});const rn=e=>[...e.keys()].map(n=>e.get(n)),sn=(e,n)=>rn(e).find(t=>t?.type===n),re=async e=>e.getStats().then(n=>sn(n,"codec")?.mimeType),cn=e=>e.find(n=>n.track?.kind==="video"),an=async(e,n,t)=>{const{isChanged:o,parameters:r}=await q(e,{encodings:[{scaleResolutionDownBy:n.scaleResolutionDownBy,maxBitrate:n.maxBitrate}]});return o&&t&&t(r),{isChanged:o,parameters:r}},se=ue.createStackPromises(),ln=async()=>se().catch(e=>{i.logger("videoSendingBalancer: error",e)}),un=async e=>(se.add(e),ln()),J=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>un(async()=>an(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),dn=async({sender:e,codec:n},t)=>{const r=Be(n);return J({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=Z(c??0,t);return J({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},gn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ee({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return J({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},fn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return dn({sender:t,codec:r},s);case i.EEventsMainCAM.RESUME_MAIN_CAM:return F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?gn({sender:t,videoTrack:o,codec:r,resolution:n},s):F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case i.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return F({sender:t,videoTrack:o,codec:r},s);default:return F({sender:t,videoTrack:o,codec:r},s)}},X={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},j=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=cn(s);if(!c?.track)return X;const a=await re(c);return z(a,r)?X:fn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},Cn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return j({connection:l,onSetParameters:t,ignoreForCodec:n})};let r=o;const s=l=>{r=async()=>{const{mainCam:d,resolutionMainCam:f}=l,{connection:g}=e;if(!g)throw new Error("connection is not exist");return j({mainCam:d,resolutionMainCam:f,connection:g,onSetParameters:t,ignoreForCodec:n})},r().catch(_)};return{subscribe:()=>{e.on("api:main-cam-control",s)},unsubscribe:()=>{e.off("api:main-cam-control",s)},balanceByTrack:o,resetMainCamControl(){r=o},async reBalance(){return r()}}};exports.ECallCause=i.ECallCause;exports.EUseLicense=i.EUseLicense;exports.SipConnector=i.SipConnector;exports.disableDebug=i.disableDebug;exports.enableDebug=i.enableDebug;exports.hasCanceledStartPresentationError=i.hasCanceledStartPresentationError;exports.debug=_;exports.EMimeTypesVideoCodecs=oe;exports.SipConnectorFacade=ke;exports.getCodecFromSender=re;exports.hasCanceledCallError=ge;exports.resolveVideoSendingBalancer=Cn;exports.setParametersToSender=q;exports.tools=on;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("events-constructor");const i=require("./@SipConnector-Xh6_JpUI.cjs"),W=require("@krivega/cancelable-promise"),ce=require("repeated-calls"),ae=require("ts-debounce"),_=require("debug"),le=require("sequent-promises"),ue=require("stack-promises"),de=e=>e instanceof Object&&("originator"in e||"cause"in e),ge=e=>{if(W.isCanceledError(e))return!0;if(!de(e))return!1;const{originator:n,cause:t}=e;return typeof t=="string"?t===i.ECallCause.REQUEST_TIMEOUT||t===i.ECallCause.REJECTED||n===i.Originator.LOCAL&&(t===i.ECallCause.CANCELED||t===i.ECallCause.BYE):!1},fe=(e,n)=>(e.degradationPreference=n.degradationPreference,e),Ce=(e,n)=>{e.encodings??=[];for(let t=e.encodings.length;t<n;t+=1)e.encodings.push({});return e},G=e=>(n,t)=>t!==void 0&&n!==t||t===void 0&&n!==e,he=G(),Se=(e,n)=>{if(he(e,n))return e},me=(e,n)=>{const t=e.maxBitrate,o=Se(n,t);return o!==void 0&&(e.maxBitrate=o),e},K=1,Re=G(K),ye=(e,n)=>{const t=e===void 0?void 0:Math.max(e,K);if(t!==void 0&&Re(t,n))return t},pe=(e,n)=>{const t=e.scaleResolutionDownBy,o=ye(n,t);return o!==void 0&&(e.scaleResolutionDownBy=o),e},Ee=(e,n)=>{const t=n.encodings?.length??0;return Ce(e,t),e.encodings.forEach((o,r)=>{const s=(n?.encodings??[])[r],c=s?.maxBitrate,a=s?.scaleResolutionDownBy;me(o,c),pe(o,a)}),e},Te=(e,n)=>{if(e.codecs?.length!==n.codecs?.length)return!0;for(let t=0;t<(e.codecs?.length??0);t++)if(JSON.stringify(e.codecs[t])!==JSON.stringify(n.codecs[t]))return!0;if(e.headerExtensions?.length!==n.headerExtensions?.length)return!0;for(let t=0;t<(e.headerExtensions?.length??0);t++)if(JSON.stringify(e.headerExtensions[t])!==JSON.stringify(n.headerExtensions[t]))return!0;if(e.encodings?.length!==n.encodings?.length)return!0;for(let t=0;t<(e.encodings.length??0);t++)if(JSON.stringify(e.encodings[t])!==JSON.stringify(n.encodings[t]))return!0;return e.rtcp?.cname!==n.rtcp?.cname||e.rtcp?.reducedSize!==n.rtcp?.reducedSize||e.degradationPreference!==n.degradationPreference},q=async(e,n)=>{const t=e.getParameters(),o=JSON.parse(JSON.stringify(t));Ee(t,n),fe(t,n);const r=Te(o,t);return r&&await e.setParameters(t),{parameters:t,isChanged:r}},Me=e=>e.getVideoTracks()[0],ve=1e6,m=e=>e*ve,Y=m(.06),be=m(4),_e=e=>e<=64?Y:e<=128?m(.12):e<=256?m(.25):e<=384?m(.32):e<=426?m(.38):e<=640?m(.5):e<=848?m(.7):e<=1280?m(1):e<=1920?m(2):be,z=(e,n)=>e!==void 0&&n!==void 0&&e.toLowerCase().includes(n.toLowerCase()),Ae="av1",Oe=e=>z(e,Ae),Ne=.6,Q=(e,n)=>Oe(n)?e*Ne:e,Be=e=>Q(Y,e),Z=(e,n)=>{const t=_e(e);return Q(t,n)},H=1,ee=({videoTrack:e,targetSize:n,codec:t})=>{const o=e.getSettings(),r=o.width,s=o.height,c=r===void 0?H:r/n.width,a=s===void 0?H:s/n.height,l=Math.max(c,a,H),d=Z(n.width,t);return{scaleResolutionDownBy:l,maxBitrate:d}},w=({mediaStream:e,simulcastEncodings:n,sendEncodings:t})=>{if(n&&n.length>0){const o=t??[],r=Me(e);if(r===void 0)throw new Error("No video track");return n.forEach((s,c)=>{const a=o[c]??{};a.active=!0,s.rid!==void 0&&(a.rid=s.rid),s.scalabilityMode!==void 0&&(a.scalabilityMode=s.scalabilityMode);const{maxBitrate:l,scaleResolutionDownBy:d}=ee({videoTrack:r,targetSize:{width:s.width,height:s.height}});a.maxBitrate=l,a.scaleResolutionDownBy=d,o[c]=a}),o}return t},ne="purgatory",P=e=>e===ne,we=(e,n)=>e.filter(o=>n.some(r=>r.clockRate===o.clockRate&&r.mimeType===o.mimeType&&r.channels===o.channels&&r.sdpFmtpLine===o.sdpFmtpLine)),De=e=>{const n=RTCRtpSender.getCapabilities(e),t=RTCRtpReceiver.getCapabilities(e),o=n===null?[]:n.codecs,r=t===null?[]:t.codecs;return we(o,r)},Pe=(e,n)=>n===void 0||n.length===0?e:e.sort((t,o)=>{const r=n.indexOf(t.mimeType),s=n.indexOf(o.mimeType),c=r===-1?Number.MAX_VALUE:r,a=s===-1?Number.MAX_VALUE:s;return c-a}),Ie=(e,n)=>n===void 0||n.length===0?e:e.filter(t=>!n.includes(t.mimeType)),D=(e,{preferredMimeTypesVideoCodecs:n,excludeMimeTypesVideoCodecs:t})=>async o=>{try{if(typeof o.setCodecPreferences=="function"&&o.sender.track?.kind==="video"&&(n!==void 0&&n.length>0||t!==void 0&&t.length>0)){const r=De("video"),s=Ie(r,t),c=Pe(s,n);o.setCodecPreferences(c)}Object.keys(e).length>0&&await q(o.sender,e)}catch(r){i.logger("updateTransceiver error",r)}},$=e=>{if(!W.isCanceledError(e)&&!ce.hasCanceledError(e))throw e;return{isSuccessful:!1}},xe=({kind:e,readyState:n})=>e==="video"&&n==="live",Fe=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","connection","isConfigured","isRegistered"]);class ke{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;connection;isConfigured;isRegistered;sipConnector;preferredMimeTypesVideoCodecs;excludeMimeTypesVideoCodecs;constructor(n,{preferredMimeTypesVideoCodecs:t,excludeMimeTypesVideoCodecs:o}={}){return this.preferredMimeTypesVideoCodecs=t,this.excludeMimeTypesVideoCodecs=o,this.sipConnector=n,new Proxy(this,{get:(r,s,c)=>{if(typeof s=="string"&&Fe.has(s)&&s in this.sipConnector){const l=Reflect.get(this.sipConnector,s,this.sipConnector);return typeof l=="function"?l.bind(this.sipConnector):l}const a=Reflect.get(r,s,c);return typeof a=="function"?a.bind(r):a}})}connectToServer=async n=>{const{userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,name:a,password:l,isRegisteredUser:d,isDisconnectOnFail:f}=n;return i.logger("connectToServer",n),this.sipConnector.connect({userAgent:t,sipWebSocketServerURL:o,sipServerUrl:r,remoteAddress:s,displayName:c,password:l,user:a,register:d}).then(g=>(i.logger("connectToServer then"),{ua:g,isSuccessful:!0})).catch(async g=>(i.logger("connectToServer catch: error",g),f===!0?this.sipConnector.disconnect().then(()=>$(g)).catch(()=>$(g)):$(g)))};callToServer=async n=>{const{conference:t,mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,simulcastEncodings:a,degradationPreference:l,sendEncodings:d,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,setRemoteStreams:C,onBeforeProgressCall:R,onSuccessProgressCall:h,onEnterPurgatory:S,onEnterConference:y,onFailProgressCall:p,onFinishProgressCall:E,onEndedCall:T}=n,b=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:C}),A=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{b().catch(_)}}),O=D({degradationPreference:l},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("callToServer",n);const N=async()=>(i.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:r,iceServers:s,contentHint:c,offerToReceiveAudio:f,offerToReceiveVideo:g,directionVideo:I,directionAudio:x,sendEncodings:w({mediaStream:o,simulcastEncodings:a,sendEncodings:d}),number:t,onAddedTransceiver:O,ontrack:A}));let M=!1,v;const B=(i.logger("subscribeEnterConference: onEnterConference",y),S??y?this.sipConnector.on("api:enterRoom",({room:u})=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:M}),v=u,P(v)?S&&S():y&&y({isSuccessProgressCall:M})}):()=>{}),U=u=>(i.logger("onSuccess"),M=!0,b().catch(_),h&&h({isPurgatory:P(v)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),T&&T()}),u),V=u=>{throw i.logger("onFail"),p&&p(),B(),u},L=()=>{i.logger("onFinish"),E&&E()};return i.logger("onBeforeProgressCall"),R&&R(t),N().then(U).catch(u=>V(u)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(i.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(i.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,setRemoteStreams:x,onBeforeProgressCall:C,onSuccessProgressCall:R,onEnterPurgatory:h,onEnterConference:S,onFailProgressCall:y,onFinishProgressCall:p,onEndedCall:E}=n,T=this.resolveHandleReadyRemoteStreamsDebounced({onReadyRemoteStreams:x}),b=this.resolveHandleReadyRemoteStreams({onReadyRemoteStreams:()=>{T().catch(_)}}),A=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});i.logger("answerToIncomingCall",n);const O=async()=>this.sipConnector.answerToIncomingCall({mediaStream:t,extraHeaders:o,iceServers:r,contentHint:s,offerToReceiveAudio:d,offerToReceiveVideo:f,directionVideo:g,directionAudio:I,sendEncodings:w({mediaStream:t,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:A,ontrack:b}),N=()=>{const{remoteCallerData:u}=this.sipConnector;return u.incomingNumber};let M=!1,v;const B=(i.logger("subscribeEnterConference: onEnterConference",S),h??S?this.sipConnector.on("api:enterRoom",u=>{i.logger("enterRoom",{_room:u,isSuccessProgressCall:M}),v=u,P(v)?h&&h():S&&S({isSuccessProgressCall:M})}):()=>{}),U=u=>(i.logger("onSuccess"),M=!0,T().catch(_),R&&R({isPurgatory:P(v)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{B(),E&&E()}),u),V=u=>{throw i.logger("onFail"),y&&y(),B(),u},L=()=>{i.logger("onFinish"),p&&p()};if(i.logger("onBeforeProgressCall"),C){const u=N();C(u)}return O().then(U).catch(u=>V(u)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d})=>{const f=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:f})};startPresentation=async({mediaStream:n,isP2P:t,maxBitrate:o,contentHint:r,simulcastEncodings:s,degradationPreference:c,sendEncodings:a,preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d,callLimit:f})=>{const g=D({degradationPreference:c},{preferredMimeTypesVideoCodecs:l,excludeMimeTypesVideoCodecs:d});return i.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:t,maxBitrate:o,contentHint:r,callLimit:f,sendEncodings:w({mediaStream:n,simulcastEncodings:s,sendEncodings:a}),onAddedTransceiver:g})};stopShareSipConnector=async({isP2P:n=!1}={})=>(i.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(t=>{i.logger(t)}));sendRefusalToTurnOnMic=async()=>{i.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{i.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{i.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{i.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:t})=>{i.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:t})};replaceMediaStream=async(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,simulcastEncodings:c,degradationPreference:a,sendEncodings:l}={})=>{const d=D({degradationPreference:a},{preferredMimeTypesVideoCodecs:this.preferredMimeTypesVideoCodecs,excludeMimeTypesVideoCodecs:this.excludeMimeTypesVideoCodecs});return i.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:t,addMissing:o,forceRenegotiation:r,contentHint:s,sendEncodings:w({mediaStream:n,simulcastEncodings:c,sendEncodings:l}),onAddedTransceiver:d})};askPermissionToEnableCam=async()=>{i.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>ae.debounce(()=>{const t=this.sipConnector.getRemoteStreams();i.logger("remoteStreams",t),t&&n(t)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:t})=>{xe(t)&&n()};getRemoteStreams=()=>(i.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(i.logger("onUseLicense"),this.sipConnector.on("api:useLicense",n));onMustStopPresentation=n=>(i.logger("onMustStopPresentation"),this.sipConnector.on("api:mustStopPresentation",n));onMoveToSpectators=n=>(i.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(i.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n))}const k=e=>{const{url:n,cause:t}=e;let o=n;return(t===i.ECallCause.BAD_MEDIA_DESCRIPTION||t===i.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var te=(e=>(e.CONNECT_SERVER_FAILED="CONNECT_SERVER_FAILED",e.WRONG_USER_OR_PASSWORD="WRONG_USER_OR_PASSWORD",e.BAD_MEDIA_ERROR="BAD_MEDIA_ERROR",e.NOT_FOUND_ERROR="NOT_FOUND_ERROR",e.WS_CONNECTION_FAILED="WS_CONNECTION_FAILED",e.CONNECT_SERVER_FAILED_BY_LINK="CONNECT_SERVER_FAILED_BY_LINK",e))(te||{});const Ue=new Error("Unknown error"),Ve=(e=Ue)=>{const{cause:n,socket:t}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case i.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case i.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:t!==void 0&&t._ws?.readyState===3?o="WS_CONNECTION_FAILED":k(e)!==void 0&&k(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},Le=e=>{let n="";try{n=JSON.stringify(e)}catch(t){i.logger("failed to stringify message",t)}return n},He=new Error("Unknown error"),$e=(e=He)=>{const{code:n,cause:t,message:o}=e,r=k(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=Le(o):o&&(s.message=String(o)),r!==void 0&&r!==""&&(s.link=r),n!==void 0&&n!==""&&(s.code=n),t!==void 0&&t!==""&&(s.cause=t),s},qe=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:te,getLinkError:k,getTypeFromError:Ve,getValuesFromError:$e},Symbol.toStringTag,{value:"Module"})),Je=({sessionId:e,remoteAddress:n,isMutedAudio:t,isMutedVideo:o,isRegistered:r,isPresentationCall:s})=>{const c=[],a=t?"0":"1",l=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${a}`,`X-Vinteo-MainCam-State: ${l}`),(r===!1||r===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},Xe="[@*!|]",je="_",We=e=>{let n=e;return n=n.replaceAll(new RegExp(Xe,"g"),je),n},Ge=({appName:e,appVersion:n,browserName:t,browserVersion:o})=>{const s=`${We(e)} ${n}`;return`ChromeNew - ${t===void 0?s:`${t} ${o}, ${s}`}`},Ke=({isUnifiedSdpSemantic:e,appVersion:n,browserName:t,browserVersion:o,appName:r})=>e?Ge({appVersion:n,browserName:t,browserVersion:o,appName:r}):"Chrome",Ye=e=>n=>[...n].map(o=>async()=>e(o)),ze=async({accumulatedKeys:e,sendKey:n,canRunTask:t})=>{const r=Ye(n)(e);return le.sequentPromises(r,t)},Qe=e=>t=>(i.logger("onStartMainCam"),e.on("api:admin-start-main-cam",t)),Ze=e=>t=>(i.logger("onStartMic"),e.on("api:admin-start-mic",t)),en=e=>t=>(i.logger("onStopMainCam"),e.on("api:admin-stop-main-cam",t)),nn=e=>t=>(i.logger("onStopMic"),e.on("api:admin-stop-mic",t)),tn=({sipConnector:e})=>{const n=(C,R)=>({isSyncForced:h})=>{if(h===!0){C();return}R()},t=Qe(e),o=en(e),r=Ze(e),s=nn(e);let c,a,l,d;const f=({onStartMainCamForced:C,onStartMainCamNotForced:R,onStopMainCamForced:h,onStopMainCamNotForced:S,onStartMicForced:y,onStartMicNotForced:p,onStopMicForced:E,onStopMicNotForced:T})=>{const b=n(C,R);c=t(b);const A=n(h,S);a=o(A);const O=n(y,p);l=r(O);const N=n(E,T);d=s(N)},g=()=>{c?.(),a?.(),l?.(),d?.()};return{start:C=>{f(C)},stop:()=>{g()}}},on=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:ne,createSyncMediaState:tn,error:qe,getExtraHeaders:Je,getUserAgent:Ke,hasPurgatory:P,sendDtmfAccumulated:ze},Symbol.toStringTag,{value:"Module"}));var oe=(e=>(e.VP8="video/VP8",e.VP9="video/VP9",e.H264="video/H264",e.AV1="video/AV1",e.rtx="video/rtx",e.red="video/red",e.flexfec03="video/flexfec-03",e))(oe||{});const rn=e=>[...e.keys()].map(n=>e.get(n)),sn=(e,n)=>rn(e).find(t=>t?.type===n),re=async e=>e.getStats().then(n=>sn(n,"codec")?.mimeType),cn=e=>e.find(n=>n.track?.kind==="video"),an=async(e,n,t)=>{const{isChanged:o,parameters:r}=await q(e,{encodings:[{scaleResolutionDownBy:n.scaleResolutionDownBy,maxBitrate:n.maxBitrate}]});return o&&t&&t(r),{isChanged:o,parameters:r}},se=ue.createStackPromises(),ln=async()=>se().catch(e=>{i.logger("videoSendingBalancer: error",e)}),un=async e=>(se.add(e),ln()),J=async({sender:e,scaleResolutionDownBy:n,maxBitrate:t,onSetParameters:o})=>un(async()=>an(e,{scaleResolutionDownBy:n,maxBitrate:t},o)),dn=async({sender:e,codec:n},t)=>{const r=Be(n);return J({sender:e,maxBitrate:r,onSetParameters:t,scaleResolutionDownBy:200})},F=async({sender:e,videoTrack:n,codec:t},o)=>{const c=n.getSettings().width,a=Z(c??0,t);return J({sender:e,maxBitrate:a,onSetParameters:o,scaleResolutionDownBy:1})},gn=async({sender:e,videoTrack:n,resolution:t,codec:o},r)=>{const[s,c]=t.split("x"),{maxBitrate:a,scaleResolutionDownBy:l}=ee({videoTrack:n,codec:o,targetSize:{width:Number(s),height:Number(c)}});return J({sender:e,maxBitrate:a,onSetParameters:r,scaleResolutionDownBy:l})},fn=async({mainCam:e,resolutionMainCam:n,sender:t,videoTrack:o,codec:r},s)=>{switch(e){case i.EEventsMainCAM.PAUSE_MAIN_CAM:return dn({sender:t,codec:r},s);case i.EEventsMainCAM.RESUME_MAIN_CAM:return F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.MAX_MAIN_CAM_RESOLUTION:return n!==void 0?gn({sender:t,videoTrack:o,codec:r,resolution:n},s):F({sender:t,videoTrack:o,codec:r},s);case i.EEventsMainCAM.ADMIN_STOP_MAIN_CAM:case i.EEventsMainCAM.ADMIN_START_MAIN_CAM:case void 0:return F({sender:t,videoTrack:o,codec:r},s);default:return F({sender:t,videoTrack:o,codec:r},s)}},X={isChanged:!1,parameters:{encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}}},j=async({mainCam:e,resolutionMainCam:n,connection:t,onSetParameters:o,ignoreForCodec:r})=>{const s=t.getSenders(),c=cn(s);if(!c?.track)return X;const a=await re(c);return z(a,r)?X:fn({mainCam:e,resolutionMainCam:n,sender:c,codec:a,videoTrack:c.track},o)},Cn=(e,{ignoreForCodec:n,onSetParameters:t}={})=>{const o=async()=>{const{connection:l}=e;if(!l)throw new Error("connection is not exist");return j({connection:l,onSetParameters:t,ignoreForCodec:n})};let r=o;const s=l=>{r=async()=>{const{mainCam:d,resolutionMainCam:f}=l,{connection:g}=e;if(!g)throw new Error("connection is not exist");return j({mainCam:d,resolutionMainCam:f,connection:g,onSetParameters:t,ignoreForCodec:n})},r().catch(_)};return{subscribe:()=>{e.on("api:main-cam-control",s)},unsubscribe:()=>{e.off("api:main-cam-control",s)},balanceByTrack:o,resetMainCamControl(){r=o},async reBalance(){return r()}}};exports.ECallCause=i.ECallCause;exports.EUseLicense=i.EUseLicense;exports.SipConnector=i.SipConnector;exports.disableDebug=i.disableDebug;exports.enableDebug=i.enableDebug;exports.hasCanceledStartPresentationError=i.hasCanceledStartPresentationError;exports.debug=_;exports.EMimeTypesVideoCodecs=oe;exports.SipConnectorFacade=ke;exports.getCodecFromSender=re;exports.hasCanceledCallError=ge;exports.resolveVideoSendingBalancer=Cn;exports.setParametersToSender=q;exports.tools=on;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "events-constructor";
|
|
2
|
-
import { E as y, O as ce, l as c, a as w } from "./@SipConnector-
|
|
3
|
-
import { b as On, S as Nn, d as Bn, e as wn, h as Dn } from "./@SipConnector-
|
|
2
|
+
import { E as y, O as ce, l as c, a as w } from "./@SipConnector-C-ThpS1P.js";
|
|
3
|
+
import { b as On, S as Nn, d as Bn, e as wn, h as Dn } from "./@SipConnector-C-ThpS1P.js";
|
|
4
4
|
import { isCanceledError as K } from "@krivega/cancelable-promise";
|
|
5
5
|
import { hasCanceledError as ae } from "repeated-calls";
|
|
6
6
|
import { debounce as ue } from "ts-debounce";
|