@wazo/sdk 0.42.0 → 0.43.0
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/README.md +32 -21
- package/dist/wazo-sdk.js +2 -2
- package/esm/__tests__/api-client.test.js +19 -0
- package/esm/__tests__/web-rtc-client.test.js +1 -1
- package/esm/api/auth.js +6 -0
- package/esm/domain/Incall.js +28 -0
- package/esm/domain/Phone/CTIPhone.js +1 -1
- package/esm/domain/Phone/WebRTCPhone.js +4 -4
- package/esm/domain/Profile.js +5 -1
- package/esm/domain/__tests__/Profile.test.js +32 -0
- package/esm/index.js +1 -0
- package/esm/simple/Auth.js +4 -0
- package/esm/simple/Phone.js +1 -1
- package/esm/simple/room/Room.js +2 -2
- package/esm/types/api/auth.d.ts +1 -0
- package/esm/types/api/auth.d.ts.map +1 -1
- package/esm/types/domain/Incall.d.ts +21 -0
- package/esm/types/domain/Incall.d.ts.map +1 -0
- package/esm/types/domain/Line.d.ts +5 -16
- package/esm/types/domain/Line.d.ts.map +1 -1
- package/esm/types/domain/Phone/CTIPhone.d.ts +1 -1
- package/esm/types/domain/Phone/Phone.d.ts +1 -1
- package/esm/types/domain/Phone/Phone.d.ts.map +1 -1
- package/esm/types/domain/Phone/WebRTCPhone.d.ts +2 -2
- package/esm/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
- package/esm/types/domain/Profile.d.ts +5 -1
- package/esm/types/domain/Profile.d.ts.map +1 -1
- package/esm/types/domain/types.d.ts +17 -19
- package/esm/types/domain/types.d.ts.map +1 -1
- package/esm/types/index.d.ts +1 -0
- package/esm/types/index.d.ts.map +1 -1
- package/esm/types/simple/Auth.d.ts +1 -0
- package/esm/types/simple/Auth.d.ts.map +1 -1
- package/esm/types/simple/Phone.d.ts +3 -3
- package/esm/types/simple/Phone.d.ts.map +1 -1
- package/esm/types/web-rtc-client.d.ts +8 -10
- package/esm/types/web-rtc-client.d.ts.map +1 -1
- package/esm/web-rtc-client.js +18 -24
- package/lib/__tests__/api-client.test.js +19 -0
- package/lib/__tests__/web-rtc-client.test.js +1 -1
- package/lib/api/auth.js +15 -0
- package/lib/domain/Incall.js +32 -0
- package/lib/domain/Phone/CTIPhone.js +1 -1
- package/lib/domain/Phone/WebRTCPhone.js +9 -7
- package/lib/domain/Profile.js +4 -1
- package/lib/domain/__tests__/Profile.test.js +32 -0
- package/lib/index.js +4 -2
- package/lib/simple/Auth.js +6 -0
- package/lib/simple/Phone.js +1 -1
- package/lib/simple/room/Room.js +5 -5
- package/lib/types/api/auth.d.ts +1 -0
- package/lib/types/api/auth.d.ts.map +1 -1
- package/lib/types/domain/Incall.d.ts +21 -0
- package/lib/types/domain/Incall.d.ts.map +1 -0
- package/lib/types/domain/Line.d.ts +5 -16
- package/lib/types/domain/Line.d.ts.map +1 -1
- package/lib/types/domain/Phone/CTIPhone.d.ts +1 -1
- package/lib/types/domain/Phone/Phone.d.ts +1 -1
- package/lib/types/domain/Phone/Phone.d.ts.map +1 -1
- package/lib/types/domain/Phone/WebRTCPhone.d.ts +2 -2
- package/lib/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
- package/lib/types/domain/Profile.d.ts +5 -1
- package/lib/types/domain/Profile.d.ts.map +1 -1
- package/lib/types/domain/types.d.ts +17 -19
- package/lib/types/domain/types.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/simple/Auth.d.ts +1 -0
- package/lib/types/simple/Auth.d.ts.map +1 -1
- package/lib/types/simple/Phone.d.ts +3 -3
- package/lib/types/simple/Phone.d.ts.map +1 -1
- package/lib/types/web-rtc-client.d.ts +8 -10
- package/lib/types/web-rtc-client.d.ts.map +1 -1
- package/lib/web-rtc-client.js +147 -141
- package/package.json +3 -2
- package/src/__tests__/api-client.test.ts +21 -0
- package/src/__tests__/web-rtc-client.test.ts +1 -1
- package/src/api/auth.ts +8 -0
- package/src/domain/Incall.ts +50 -0
- package/src/domain/Line.ts +5 -17
- package/src/domain/Phone/CTIPhone.ts +1 -1
- package/src/domain/Phone/Phone.ts +1 -1
- package/src/domain/Phone/WebRTCPhone.ts +4 -4
- package/src/domain/Profile.ts +8 -0
- package/src/domain/__tests__/Profile.test.ts +32 -0
- package/src/domain/types.ts +52 -44
- package/src/index.ts +1 -0
- package/src/simple/Auth.ts +5 -0
- package/src/simple/Phone.ts +4 -4
- package/src/simple/room/Room.ts +2 -2
- package/src/web-rtc-client.ts +20 -26
|
@@ -25,9 +25,7 @@ export default class WebRTCClient extends Emitter {
|
|
|
25
25
|
registerer: Registerer | null;
|
|
26
26
|
hasAudio: boolean;
|
|
27
27
|
audio: MediaTrackConstraintSet | boolean | undefined;
|
|
28
|
-
audioElements: Record<string, HTMLAudioElement
|
|
29
|
-
setSinkId?: (id: string) => void;
|
|
30
|
-
}>;
|
|
28
|
+
audioElements: Record<string, HTMLAudioElement>;
|
|
31
29
|
video: MediaTrackConstraintSet | boolean | undefined;
|
|
32
30
|
audioStreams: Record<string, any>;
|
|
33
31
|
audioOutputDeviceId: string | null | undefined;
|
|
@@ -68,7 +66,7 @@ export default class WebRTCClient extends Emitter {
|
|
|
68
66
|
static getIceServers(ip: string): Array<{
|
|
69
67
|
urls: Array<string>;
|
|
70
68
|
}>;
|
|
71
|
-
constructor(config: WebRtcConfig, session
|
|
69
|
+
constructor(config: WebRtcConfig, session?: WazoSession, uaConfigOverrides?: UserAgentConfigOverrides);
|
|
72
70
|
configureMedia(media: MediaConfig): void;
|
|
73
71
|
setMediaConstraints(media: MediaStreamConstraints): void;
|
|
74
72
|
createUserAgent(uaConfigOverrides?: UserAgentConfigOverrides): UserAgent;
|
|
@@ -113,7 +111,7 @@ export default class WebRTCClient extends Emitter {
|
|
|
113
111
|
getContactIdentifier(): string | null;
|
|
114
112
|
isFirefox(): boolean;
|
|
115
113
|
changeAudioOutputVolume(volume: number): void;
|
|
116
|
-
changeAudioOutputDevice(id: string): void
|
|
114
|
+
changeAudioOutputDevice(id: string): Promise<void>;
|
|
117
115
|
changeAudioInputDevice(id: string, session: WazoSession | null | undefined, force?: boolean): Promise<MediaStream | null>;
|
|
118
116
|
changeVideoInputDevice(id: string, session?: WazoSession): Promise<MediaStream | void>;
|
|
119
117
|
setVideoInputDevice(id: string): null | undefined;
|
|
@@ -150,11 +148,11 @@ export default class WebRTCClient extends Emitter {
|
|
|
150
148
|
getSipSession(id: string): WazoSession | null | undefined;
|
|
151
149
|
getSipSessionIds(): string[];
|
|
152
150
|
setLocalMediaStream(sipSessionId: string, newStream: MediaStream): void;
|
|
153
|
-
updateLocalStream(sipSessionId: string, newStream: MediaStream): void
|
|
151
|
+
updateLocalStream(sipSessionId: string, newStream: MediaStream): Promise<void>;
|
|
154
152
|
updateRemoteStream(sessionId: string, allTracks?: boolean): void;
|
|
155
153
|
getMediaConfiguration(enableVideo: boolean, conference?: boolean, constraints?: Record<string, any> | null | undefined): Record<string, any>;
|
|
156
154
|
isConference(sessionId: string): boolean;
|
|
157
|
-
createAudioElementFor(sessionId: string): HTMLAudioElement
|
|
155
|
+
createAudioElementFor(sessionId: string): Promise<HTMLAudioElement>;
|
|
158
156
|
_onTransportError(): void;
|
|
159
157
|
enableLogger(logConnector: (level: any, className: string, label: any, content: string) => void): void;
|
|
160
158
|
_onHeartbeat(message: string | Record<string, any>): void;
|
|
@@ -174,10 +172,10 @@ export default class WebRTCClient extends Emitter {
|
|
|
174
172
|
};
|
|
175
173
|
};
|
|
176
174
|
_setupSession(session: WazoSession): void;
|
|
177
|
-
_onProgress(session: WazoSession, early?: boolean): void
|
|
178
|
-
_onAccepted(session: WazoSession, sessionDialog?: SessionDialog, withEvent?: boolean, initAllTracks?: boolean): void
|
|
175
|
+
_onProgress(session: WazoSession, early?: boolean): Promise<void>;
|
|
176
|
+
_onAccepted(session: WazoSession, sessionDialog?: SessionDialog, withEvent?: boolean, initAllTracks?: boolean): Promise<void>;
|
|
179
177
|
_isAudioOnly(session: WazoSession): boolean;
|
|
180
|
-
_setupMedias(session: WazoSession, newStream?: MediaStream | null | undefined): void
|
|
178
|
+
_setupMedias(session: WazoSession, newStream?: MediaStream | null | undefined): Promise<void>;
|
|
181
179
|
_cleanupMedia(session?: WazoSession): void;
|
|
182
180
|
_cleanupStream(stream: MediaStream): void;
|
|
183
181
|
_toggleAudio(session: WazoSession, muteAudio: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-rtc-client.d.ts","sourceRoot":"","sources":["../../src/web-rtc-client.ts"],"names":[],"mappings":"AAGA,OAAO,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAK5E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAUtD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAA6C,MAAM,gBAAgB,CAAC;AAE5G,OAAO,OAAO,MAAM,iBAAiB,CAAC;AAGtC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAG1C,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,YAAY,EAAE,gBAAgB,EAAoB,cAAc,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AAG1K,eAAO,MAAM,sBAAsB,gBAAiB,OAAO,MAAM,EAAE,GAAG,CAAC,iBAGrE,CAAC;AA0BH,eAAO,MAAM,MAAM,UAA0D,CAAC;AAC9E,eAAO,MAAM,eAAe,UAAsD,CAAC;AACnF,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAM/C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,EAAE,YAAY,CAAC;IAErB,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAE5B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAE9B,QAAQ,EAAE,OAAO,CAAC;IAElB,KAAK,EAAE,uBAAuB,GAAG,OAAO,GAAG,SAAS,CAAC;IAErD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"web-rtc-client.d.ts","sourceRoot":"","sources":["../../src/web-rtc-client.ts"],"names":[],"mappings":"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"}
|
package/lib/web-rtc-client.js
CHANGED
|
@@ -131,7 +131,7 @@ class WebRTCClient extends Emitter_1.default {
|
|
|
131
131
|
this.config = newConfig;
|
|
132
132
|
this.userAgent = this.createUserAgent(uaConfigOverrides);
|
|
133
133
|
});
|
|
134
|
-
this.audioOutputDeviceId = config.
|
|
134
|
+
this.audioOutputDeviceId = config.audioDeviceOutput;
|
|
135
135
|
this.audioOutputVolume = config.audioOutputVolume || 1;
|
|
136
136
|
if (config.media) {
|
|
137
137
|
this.configureMedia(config.media);
|
|
@@ -1038,18 +1038,14 @@ class WebRTCClient extends Emitter_1.default {
|
|
|
1038
1038
|
this.audioOutputVolume = volume;
|
|
1039
1039
|
}
|
|
1040
1040
|
changeAudioOutputDevice(id) {
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId
|
|
1050
|
-
if (audioElement.setSinkId) {
|
|
1051
|
-
audioElement.setSinkId(id);
|
|
1052
|
-
}
|
|
1041
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1042
|
+
logger.info('Changing audio output device', {
|
|
1043
|
+
id,
|
|
1044
|
+
});
|
|
1045
|
+
this.audioOutputDeviceId = id;
|
|
1046
|
+
const promises = [];
|
|
1047
|
+
Object.values(this.audioElements).forEach(audioElement => promises.push(audioElement.setSinkId(id)));
|
|
1048
|
+
yield Promise.allSettled(promises);
|
|
1053
1049
|
});
|
|
1054
1050
|
}
|
|
1055
1051
|
changeAudioInputDevice(id, session, force) {
|
|
@@ -1440,22 +1436,24 @@ class WebRTCClient extends Emitter_1.default {
|
|
|
1440
1436
|
}
|
|
1441
1437
|
}
|
|
1442
1438
|
updateLocalStream(sipSessionId, newStream) {
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1439
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1440
|
+
const sipSession = this.sipSessions[sipSessionId];
|
|
1441
|
+
if (!sipSession) {
|
|
1442
|
+
return;
|
|
1443
|
+
}
|
|
1444
|
+
const oldStream = this.getLocalStream(sipSessionId);
|
|
1445
|
+
logger.info('updating local stream', {
|
|
1446
|
+
sipSessionId,
|
|
1447
|
+
oldStream: !!oldStream,
|
|
1448
|
+
tracks: newStream.getTracks(),
|
|
1449
|
+
});
|
|
1450
|
+
if (oldStream) {
|
|
1451
|
+
this._cleanupStream(oldStream);
|
|
1452
|
+
}
|
|
1453
|
+
this.setLocalMediaStream(sipSessionId, newStream);
|
|
1454
|
+
// Update the local video element
|
|
1455
|
+
yield this._setupMedias(sipSession, newStream);
|
|
1452
1456
|
});
|
|
1453
|
-
if (oldStream) {
|
|
1454
|
-
this._cleanupStream(oldStream);
|
|
1455
|
-
}
|
|
1456
|
-
this.setLocalMediaStream(sipSessionId, newStream);
|
|
1457
|
-
// Update the local video element
|
|
1458
|
-
this._setupMedias(sipSession, newStream);
|
|
1459
1457
|
}
|
|
1460
1458
|
updateRemoteStream(sessionId, allTracks = true) {
|
|
1461
1459
|
const remoteStream = this.getRemoteStream(sessionId);
|
|
@@ -1522,19 +1520,21 @@ class WebRTCClient extends Emitter_1.default {
|
|
|
1522
1520
|
return sessionId in this.conferences;
|
|
1523
1521
|
}
|
|
1524
1522
|
createAudioElementFor(sessionId) {
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
document.body
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1523
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1524
|
+
const audio = document.createElement('audio');
|
|
1525
|
+
audio.setAttribute('id', `audio-${sessionId}`);
|
|
1526
|
+
logger.info('creating audio element', { sessionId, audioOutputDeviceId: this.audioOutputDeviceId });
|
|
1527
|
+
if (this.audioOutputDeviceId) {
|
|
1528
|
+
yield audio.setSinkId(this.audioOutputDeviceId);
|
|
1529
|
+
}
|
|
1530
|
+
if (document.body) {
|
|
1531
|
+
document.body.appendChild(audio);
|
|
1532
|
+
}
|
|
1533
|
+
this.audioElements[sessionId] = audio;
|
|
1534
|
+
audio.volume = this.audioOutputVolume;
|
|
1535
|
+
audio.autoplay = true;
|
|
1536
|
+
return audio;
|
|
1537
|
+
});
|
|
1538
1538
|
}
|
|
1539
1539
|
_onTransportError() {
|
|
1540
1540
|
logger.error('on transport error');
|
|
@@ -1758,7 +1758,7 @@ class WebRTCClient extends Emitter_1.default {
|
|
|
1758
1758
|
hadRemoteVideo = this.hasARemoteVideoTrack(sipSessionId);
|
|
1759
1759
|
oldInviteRequest(request);
|
|
1760
1760
|
};
|
|
1761
|
-
session.delegate.onInvite = (request) => {
|
|
1761
|
+
session.delegate.onInvite = (request) => __awaiter(this, void 0, void 0, function* () {
|
|
1762
1762
|
let updatedCalleeName = null;
|
|
1763
1763
|
let updatedNumber = null;
|
|
1764
1764
|
if (session.assertedIdentity) {
|
|
@@ -1784,120 +1784,126 @@ class WebRTCClient extends Emitter_1.default {
|
|
|
1784
1784
|
session.outgoingInviteRequest.message.body.body = request.body;
|
|
1785
1785
|
}
|
|
1786
1786
|
this.updateRemoteStream(sipSessionId, false);
|
|
1787
|
-
this._setupMedias(session);
|
|
1787
|
+
yield this._setupMedias(session);
|
|
1788
1788
|
return this.eventEmitter.emit(ON_REINVITE, session, request, updatedCalleeName, updatedNumber, hadRemoteVideo);
|
|
1789
|
-
};
|
|
1790
|
-
}
|
|
1791
|
-
_onProgress(session, early = false) {
|
|
1792
|
-
this._setupMedias(session);
|
|
1793
|
-
const sessionId = this.getSipSessionId(session).substr(0, 20);
|
|
1794
|
-
this.updateRemoteStream(sessionId);
|
|
1795
|
-
logger.info('progress received', {
|
|
1796
|
-
sessionId,
|
|
1797
|
-
early,
|
|
1798
1789
|
});
|
|
1799
|
-
this.eventEmitter.emit(early ? ON_EARLY_MEDIA : ON_PROGRESS, session);
|
|
1800
1790
|
}
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1791
|
+
_onProgress(session_1) {
|
|
1792
|
+
return __awaiter(this, arguments, void 0, function* (session, early = false) {
|
|
1793
|
+
yield this._setupMedias(session);
|
|
1794
|
+
const sessionId = this.getSipSessionId(session).substr(0, 20);
|
|
1795
|
+
this.updateRemoteStream(sessionId);
|
|
1796
|
+
logger.info('progress received', {
|
|
1797
|
+
sessionId,
|
|
1798
|
+
early,
|
|
1799
|
+
});
|
|
1800
|
+
this.eventEmitter.emit(early ? ON_EARLY_MEDIA : ON_PROGRESS, session);
|
|
1807
1801
|
});
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
isAudioOnly,
|
|
1817
|
-
kind,
|
|
1818
|
-
label,
|
|
1819
|
-
readyState,
|
|
1820
|
-
id,
|
|
1821
|
-
muted,
|
|
1802
|
+
}
|
|
1803
|
+
_onAccepted(session_1, sessionDialog_1) {
|
|
1804
|
+
return __awaiter(this, arguments, void 0, function* (session, sessionDialog, withEvent = true, initAllTracks = true) {
|
|
1805
|
+
var _a;
|
|
1806
|
+
logger.info('on call accepted', {
|
|
1807
|
+
id: session.id,
|
|
1808
|
+
clientId: this.clientId,
|
|
1809
|
+
remoteTag: session.remoteTag,
|
|
1822
1810
|
});
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
state: pc.iceConnectionState,
|
|
1811
|
+
this.storeSipSession(session);
|
|
1812
|
+
yield this._setupMedias(session);
|
|
1813
|
+
this.updateRemoteStream(this.getSipSessionId(session), initAllTracks);
|
|
1814
|
+
const pc = (_a = session.sessionDescriptionHandler) === null || _a === void 0 ? void 0 : _a.peerConnection;
|
|
1815
|
+
const onTrack = (event) => {
|
|
1816
|
+
const isAudioOnly = this._isAudioOnly(session);
|
|
1817
|
+
const { kind, label, readyState, id, muted, } = event.track;
|
|
1818
|
+
logger.info('on track event', {
|
|
1819
|
+
isAudioOnly,
|
|
1820
|
+
kind,
|
|
1821
|
+
label,
|
|
1822
|
+
readyState,
|
|
1823
|
+
id,
|
|
1824
|
+
muted,
|
|
1838
1825
|
});
|
|
1839
|
-
|
|
1840
|
-
|
|
1826
|
+
// Stop video track in audio only mode
|
|
1827
|
+
if (isAudioOnly && kind === 'video') {
|
|
1828
|
+
event.track.stop();
|
|
1841
1829
|
}
|
|
1830
|
+
this.eventEmitter.emit(ON_TRACK, session, event);
|
|
1842
1831
|
};
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1832
|
+
const sessionDescriptionHandler = session.sessionDescriptionHandler;
|
|
1833
|
+
if (sessionDescriptionHandler === null || sessionDescriptionHandler === void 0 ? void 0 : sessionDescriptionHandler.peerConnection) {
|
|
1834
|
+
sessionDescriptionHandler.peerConnection.addEventListener('track', onTrack);
|
|
1835
|
+
}
|
|
1836
|
+
sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
1837
|
+
if (pc) {
|
|
1838
|
+
pc.oniceconnectionstatechange = () => {
|
|
1839
|
+
logger.info('on ice connection state changed', {
|
|
1840
|
+
state: pc.iceConnectionState,
|
|
1841
|
+
});
|
|
1842
|
+
if (pc.iceConnectionState === 'disconnected') {
|
|
1843
|
+
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
1844
|
+
}
|
|
1845
|
+
};
|
|
1846
|
+
}
|
|
1847
|
+
if (withEvent) {
|
|
1848
|
+
this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
|
|
1849
|
+
}
|
|
1850
|
+
this._startSendingStats(session);
|
|
1851
|
+
});
|
|
1848
1852
|
}
|
|
1849
1853
|
_isAudioOnly(session) {
|
|
1850
1854
|
return Boolean(session.sessionDescriptionHandlerModifiersReInvite.find(modifier => modifier === modifiers_1.stripVideo));
|
|
1851
1855
|
}
|
|
1852
|
-
_setupMedias(
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1856
|
+
_setupMedias(session_1) {
|
|
1857
|
+
return __awaiter(this, arguments, void 0, function* (session, newStream = null) {
|
|
1858
|
+
if (!this._isWeb()) {
|
|
1859
|
+
logger.info('Setup media on mobile, no need to setup html element, bailing');
|
|
1860
|
+
return;
|
|
1861
|
+
}
|
|
1862
|
+
// Safari hack, because you cannot call .play() from a non user action
|
|
1863
|
+
const sessionId = this.getSipSessionId(session);
|
|
1864
|
+
const isConference = this.isConference(sessionId);
|
|
1865
|
+
if (sessionId in this.audioElements) {
|
|
1866
|
+
logger.info('html element already exists for session', {
|
|
1867
|
+
sessionId,
|
|
1868
|
+
});
|
|
1869
|
+
return;
|
|
1870
|
+
}
|
|
1871
|
+
if (this._hasAudio() && this._isWeb() && !(sessionId in this.audioElements)) {
|
|
1872
|
+
yield this.createAudioElementFor(sessionId);
|
|
1873
|
+
}
|
|
1874
|
+
const audioElement = this.audioElements[sessionId];
|
|
1875
|
+
const sipSession = this.sipSessions[session.callId];
|
|
1876
|
+
const removeStream = this.getRemoteStream(sessionId);
|
|
1877
|
+
const sdh = sipSession === null || sipSession === void 0 ? void 0 : sipSession.sessionDescriptionHandler;
|
|
1878
|
+
const earlyStream = sdh ? sdh.remoteMediaStream : null;
|
|
1879
|
+
const stream = newStream || removeStream || earlyStream;
|
|
1880
|
+
if (!stream) {
|
|
1881
|
+
logger.info('Setup media no stream to attach, bailing');
|
|
1882
|
+
return;
|
|
1883
|
+
}
|
|
1884
|
+
const shouldPause = audioElement.currentTime > 0 && !audioElement.paused && !audioElement.ended && audioElement.readyState > 2;
|
|
1885
|
+
logger.info('setting up media', {
|
|
1862
1886
|
sessionId,
|
|
1887
|
+
streams: {
|
|
1888
|
+
new: !!newStream,
|
|
1889
|
+
remove: !!removeStream,
|
|
1890
|
+
early: !!earlyStream,
|
|
1891
|
+
},
|
|
1892
|
+
hasAudio: this._hasAudio(),
|
|
1893
|
+
isConference,
|
|
1894
|
+
shouldPause,
|
|
1863
1895
|
});
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
const stream = newStream || removeStream || earlyStream;
|
|
1875
|
-
if (!stream) {
|
|
1876
|
-
logger.info('Setup media no stream to attach, bailing');
|
|
1877
|
-
return;
|
|
1878
|
-
}
|
|
1879
|
-
const shouldPause = audioElement.currentTime > 0 && !audioElement.paused && !audioElement.ended && audioElement.readyState > 2;
|
|
1880
|
-
logger.info('setting up media', {
|
|
1881
|
-
sessionId,
|
|
1882
|
-
streams: {
|
|
1883
|
-
new: !!newStream,
|
|
1884
|
-
remove: !!removeStream,
|
|
1885
|
-
early: !!earlyStream,
|
|
1886
|
-
},
|
|
1887
|
-
hasAudio: this._hasAudio(),
|
|
1888
|
-
isConference,
|
|
1889
|
-
shouldPause,
|
|
1896
|
+
if (isConference) {
|
|
1897
|
+
// Conference local stream is handled in Room
|
|
1898
|
+
return;
|
|
1899
|
+
}
|
|
1900
|
+
if (shouldPause) {
|
|
1901
|
+
audioElement.pause();
|
|
1902
|
+
}
|
|
1903
|
+
audioElement.srcObject = stream;
|
|
1904
|
+
audioElement.volume = this.audioOutputVolume;
|
|
1905
|
+
audioElement.play().catch(() => { });
|
|
1890
1906
|
});
|
|
1891
|
-
if (isConference) {
|
|
1892
|
-
// Conference local stream is handled in Room
|
|
1893
|
-
return;
|
|
1894
|
-
}
|
|
1895
|
-
if (shouldPause) {
|
|
1896
|
-
audioElement.pause();
|
|
1897
|
-
}
|
|
1898
|
-
audioElement.srcObject = stream;
|
|
1899
|
-
audioElement.volume = this.audioOutputVolume;
|
|
1900
|
-
audioElement.play().catch(() => { });
|
|
1901
1907
|
}
|
|
1902
1908
|
_cleanupMedia(session) {
|
|
1903
1909
|
const sessionId = this.getSipSessionId(session);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wazo/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"description": "Wazo's JavaScript Software Development Kit.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "lib/types/index.d.ts",
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
"lint": "./node_modules/.bin/eslint src/",
|
|
43
43
|
"jest": "./node_modules/.bin/jest src/",
|
|
44
44
|
"checkbuild": "yarn build && node dist/wazo-sdk.js",
|
|
45
|
-
"format": "
|
|
45
|
+
"format": "yarn format:file \"src/**/*.(ts|js)\" \"__tests__/**/*.(ts|js)\"",
|
|
46
|
+
"format:file": "./node_modules/.bin/prettier-eslint --write --single-quote --trailing-comma=es5 --arrow-parens=avoid",
|
|
46
47
|
"typecheck": "./node_modules/.bin/tsc --noEmit",
|
|
47
48
|
"prepublishOnly": "yarn build"
|
|
48
49
|
},
|
|
@@ -119,6 +119,27 @@ describe('With correct API results', () => {
|
|
|
119
119
|
});
|
|
120
120
|
});
|
|
121
121
|
|
|
122
|
+
describe('samlLogIn test', () => {
|
|
123
|
+
it('should retrieve user token', async () => {
|
|
124
|
+
const samlSessionId = 'a1b2C3d4';
|
|
125
|
+
const result = await client.auth.samlLogIn(samlSessionId);
|
|
126
|
+
|
|
127
|
+
expect(result).toBeInstanceOf(Session);
|
|
128
|
+
expect(result?.token).toBe(1);
|
|
129
|
+
expect(global.fetch).toBeCalledWith(`https://${server}/api/auth/${authVersion}/token`, {
|
|
130
|
+
method: 'post',
|
|
131
|
+
body: JSON.stringify({ saml_session_id: samlSessionId }),
|
|
132
|
+
signal: expect.any(Object),
|
|
133
|
+
headers: {
|
|
134
|
+
'X-Auth-Token': token,
|
|
135
|
+
'Content-Type': 'application/json',
|
|
136
|
+
Accept: 'application/json',
|
|
137
|
+
},
|
|
138
|
+
agent: null,
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
|
|
122
143
|
describe('logOut test', () => {
|
|
123
144
|
it('should delete the specified token', async () => {
|
|
124
145
|
const oldToken = 123;
|
|
@@ -12,7 +12,7 @@ jest.mock('sip.js/lib/api/user-agent', () => ({
|
|
|
12
12
|
},
|
|
13
13
|
}));
|
|
14
14
|
|
|
15
|
-
const client = new WebRTCClient({} as any,
|
|
15
|
+
const client = new WebRTCClient({} as any, undefined, undefined);
|
|
16
16
|
|
|
17
17
|
describe('WebRTC client', () => {
|
|
18
18
|
it('should compute muted/unmuted state', async () => {
|
package/src/api/auth.ts
CHANGED
|
@@ -26,6 +26,7 @@ export interface AuthD {
|
|
|
26
26
|
authenticate: (token: Token) => Promise<Session | null | undefined>;
|
|
27
27
|
logIn(params: LoginParams): Promise<Session | null | undefined> ;
|
|
28
28
|
logOut: (token: Token) => Promise<LogoutResponse>;
|
|
29
|
+
samlLogIn: (samlSessionId: string) => Promise<Session | null | undefined>;
|
|
29
30
|
refreshToken: (refreshToken: string, backend: string, expiration: number, isMobile?: boolean, tenantId?: string, domainName?: string) => Promise<Session | null | undefined>;
|
|
30
31
|
deleteRefreshToken: (clientId: string) => Promise<boolean>;
|
|
31
32
|
updatePassword: (userUuid: UUID, oldPassword: string, newPassword: string) => Promise<boolean>;
|
|
@@ -108,6 +109,13 @@ export default ((client: ApiRequester, baseUrl: string): AuthD => ({
|
|
|
108
109
|
},
|
|
109
110
|
|
|
110
111
|
logOut: (token: Token): Promise<LogoutResponse> => client.delete(`${baseUrl}/token/${token}`, null, {}, ApiRequester.successResponseParser),
|
|
112
|
+
samlLogIn: async (samlSessionId: string): Promise<Session | null | undefined> => {
|
|
113
|
+
const body = {
|
|
114
|
+
saml_session_id: samlSessionId,
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
return client.post(`${baseUrl}/token`, body).then(Session.parse);
|
|
118
|
+
},
|
|
111
119
|
refreshToken: (refreshToken: string, backend: string, expiration: number, isMobile?: boolean, tenantId?: string, domainName?: string): Promise<Session | null | undefined> => {
|
|
112
120
|
const body: Record<string, any> = {
|
|
113
121
|
backend: backend || DEFAULT_BACKEND_USER,
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import newFrom from '../utils/new-from';
|
|
2
|
+
import { ExtensionRelation } from './types';
|
|
3
|
+
|
|
4
|
+
// Generic based on incall and user's incall payload
|
|
5
|
+
export type GenericIncall = {
|
|
6
|
+
id: number;
|
|
7
|
+
extensions: ExtensionRelation[];
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export type IncallArguments = {
|
|
12
|
+
id?: number;
|
|
13
|
+
extensions?: ExtensionRelation[];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default class Incall {
|
|
17
|
+
id: number | undefined;
|
|
18
|
+
|
|
19
|
+
extensions: ExtensionRelation[] | undefined;
|
|
20
|
+
|
|
21
|
+
extension: string | undefined;
|
|
22
|
+
|
|
23
|
+
// Useful to compare instead of instanceof with minified code
|
|
24
|
+
readonly type: string = 'Incall';
|
|
25
|
+
|
|
26
|
+
constructor({ id, extensions }: IncallArguments = {}) {
|
|
27
|
+
this.id = id;
|
|
28
|
+
this.extensions = extensions;
|
|
29
|
+
this.extension = extensions?.[0]?.exten;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static parse(plain: GenericIncall): Incall {
|
|
33
|
+
return new Incall({
|
|
34
|
+
id: plain.id,
|
|
35
|
+
extensions: plain.extensions,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static newFrom(profile: Incall) {
|
|
40
|
+
return newFrom(profile, Incall);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
hasExtension(extension: string) {
|
|
44
|
+
if (!this.extensions) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return this.extensions.some(ext => ext.exten === extension);
|
|
49
|
+
}
|
|
50
|
+
}
|
package/src/domain/Line.ts
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
1
|
import newFrom from '../utils/new-from';
|
|
2
|
+
import type { ExtensionRelation, Link } from './types';
|
|
2
3
|
|
|
3
|
-
type Extension = {
|
|
4
|
-
context: string;
|
|
5
|
-
exten: string;
|
|
6
|
-
id: number;
|
|
7
|
-
links?: Array<{
|
|
8
|
-
href: string;
|
|
9
|
-
rel: string;
|
|
10
|
-
}>;
|
|
11
|
-
};
|
|
12
4
|
export type Endpoint = {
|
|
13
5
|
id: number;
|
|
14
|
-
links:
|
|
15
|
-
href: string;
|
|
16
|
-
rel: string;
|
|
17
|
-
}>;
|
|
6
|
+
links: Link[];
|
|
18
7
|
username?: string;
|
|
19
8
|
};
|
|
20
9
|
|
|
@@ -22,13 +11,13 @@ export type LineResponse = {
|
|
|
22
11
|
endpoint_custom: Endpoint | null | undefined;
|
|
23
12
|
endpoint_sccp: Endpoint | null | undefined;
|
|
24
13
|
endpoint_sip: Endpoint | null | undefined;
|
|
25
|
-
extensions:
|
|
14
|
+
extensions: ExtensionRelation[];
|
|
26
15
|
id: number;
|
|
27
16
|
};
|
|
28
17
|
|
|
29
18
|
type LineArguments = {
|
|
30
19
|
id?: number;
|
|
31
|
-
extensions?:
|
|
20
|
+
extensions?: ExtensionRelation[];
|
|
32
21
|
endpointCustom?: Endpoint | null;
|
|
33
22
|
endpointSccp?: Endpoint | null;
|
|
34
23
|
endpointSip?: Endpoint | null;
|
|
@@ -38,7 +27,7 @@ export default class Line {
|
|
|
38
27
|
|
|
39
28
|
id: number | undefined;
|
|
40
29
|
|
|
41
|
-
extensions:
|
|
30
|
+
extensions: ExtensionRelation[] | undefined;
|
|
42
31
|
|
|
43
32
|
endpointCustom: Endpoint | null;
|
|
44
33
|
|
|
@@ -87,5 +76,4 @@ export default class Line {
|
|
|
87
76
|
// Useful to compare instead of instanceof with minified code
|
|
88
77
|
this.type = 'Line';
|
|
89
78
|
}
|
|
90
|
-
|
|
91
79
|
}
|