@wazo/sdk 0.40.9 → 0.41.1
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/wazo-sdk.js +526 -598
- package/esm/__tests__/api-client.test.js +0 -1
- package/esm/domain/Phone/WebRTCPhone.js +6 -5
- package/esm/domain/__tests__/Session.test.js +1 -5
- package/esm/domain/types.js +2 -1
- package/esm/index.js +1 -0
- package/esm/service/IssueReporter.js +1 -2
- package/esm/service/__tests__/IssueReporter.test.js +4 -7
- package/esm/simple/Auth.js +16 -2
- package/esm/simple/Configuration.js +5 -4
- package/esm/simple/Directory.js +2 -1
- package/esm/simple/Phone.js +2 -1
- package/esm/simple/Websocket.js +2 -1
- package/esm/simple/__tests__/Auth.test.js +111 -0
- package/esm/simple/index.js +1 -0
- package/esm/simple/room/Participant.js +1 -0
- package/esm/simple/room/Room.js +2 -1
- package/esm/types/domain/Phone/WebRTCPhone.d.ts +1 -1
- package/esm/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
- package/esm/types/domain/types.d.ts +80 -0
- 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/service/IssueReporter.d.ts.map +1 -1
- package/esm/types/simple/Auth.d.ts +51 -1
- package/esm/types/simple/Auth.d.ts.map +1 -1
- package/esm/types/simple/Configuration.d.ts +5 -1
- package/esm/types/simple/Configuration.d.ts.map +1 -1
- package/esm/types/simple/Directory.d.ts +5 -1
- package/esm/types/simple/Directory.d.ts.map +1 -1
- package/esm/types/simple/Phone.d.ts +117 -1
- package/esm/types/simple/Phone.d.ts.map +1 -1
- package/esm/types/simple/Websocket.d.ts +19 -1
- package/esm/types/simple/Websocket.d.ts.map +1 -1
- package/esm/types/simple/__tests__/Auth.test.d.ts +2 -0
- package/esm/types/simple/__tests__/Auth.test.d.ts.map +1 -0
- package/esm/types/simple/index.d.ts +5 -5
- package/esm/types/simple/index.d.ts.map +1 -1
- package/esm/types/simple/room/Participant.d.ts.map +1 -1
- package/esm/types/simple/room/Room.d.ts +11 -11
- package/esm/types/simple/room/Room.d.ts.map +1 -1
- package/esm/types/simple/room/SipRoom.d.ts +1 -1
- package/esm/types/utils/api-requester.d.ts +0 -1
- package/esm/types/utils/api-requester.d.ts.map +1 -1
- package/esm/types/web-rtc-client.d.ts +1 -1
- package/esm/types/web-rtc-client.d.ts.map +1 -1
- package/esm/types/websocket-client.d.ts +6 -6
- package/esm/types/websocket-client.d.ts.map +1 -1
- package/esm/utils/__tests__/api-requester.test.js +0 -2
- package/esm/utils/api-requester.js +2 -31
- package/esm/web-rtc-client.js +3 -1
- package/lib/__tests__/api-client.test.js +0 -1
- package/lib/domain/Phone/WebRTCPhone.js +6 -5
- package/lib/domain/__tests__/Session.test.js +1 -5
- package/lib/domain/types.js +36 -0
- package/lib/index.js +3 -0
- package/lib/service/IssueReporter.js +1 -2
- package/lib/service/__tests__/IssueReporter.test.js +4 -7
- package/lib/simple/Auth.js +16 -2
- package/lib/simple/Configuration.js +6 -3
- package/lib/simple/Directory.js +3 -0
- package/lib/simple/Phone.js +3 -0
- package/lib/simple/Websocket.js +3 -0
- package/lib/simple/__tests__/Auth.test.js +145 -0
- package/lib/simple/index.js +1 -0
- package/lib/simple/room/Participant.js +1 -0
- package/lib/simple/room/Room.js +2 -1
- package/lib/types/domain/Phone/WebRTCPhone.d.ts +1 -1
- package/lib/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
- package/lib/types/domain/types.d.ts +80 -0
- 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/service/IssueReporter.d.ts.map +1 -1
- package/lib/types/simple/Auth.d.ts +51 -1
- package/lib/types/simple/Auth.d.ts.map +1 -1
- package/lib/types/simple/Configuration.d.ts +5 -1
- package/lib/types/simple/Configuration.d.ts.map +1 -1
- package/lib/types/simple/Directory.d.ts +5 -1
- package/lib/types/simple/Directory.d.ts.map +1 -1
- package/lib/types/simple/Phone.d.ts +117 -1
- package/lib/types/simple/Phone.d.ts.map +1 -1
- package/lib/types/simple/Websocket.d.ts +19 -1
- package/lib/types/simple/Websocket.d.ts.map +1 -1
- package/lib/types/simple/__tests__/Auth.test.d.ts +2 -0
- package/lib/types/simple/__tests__/Auth.test.d.ts.map +1 -0
- package/lib/types/simple/index.d.ts +5 -5
- package/lib/types/simple/index.d.ts.map +1 -1
- package/lib/types/simple/room/Participant.d.ts.map +1 -1
- package/lib/types/simple/room/Room.d.ts +11 -11
- package/lib/types/simple/room/Room.d.ts.map +1 -1
- package/lib/types/simple/room/SipRoom.d.ts +1 -1
- package/lib/types/utils/api-requester.d.ts +0 -1
- package/lib/types/utils/api-requester.d.ts.map +1 -1
- package/lib/types/web-rtc-client.d.ts +1 -1
- package/lib/types/web-rtc-client.d.ts.map +1 -1
- package/lib/types/websocket-client.d.ts +6 -6
- package/lib/types/websocket-client.d.ts.map +1 -1
- package/lib/utils/__tests__/api-requester.test.js +0 -2
- package/lib/utils/api-requester.js +2 -33
- package/lib/web-rtc-client.js +3 -1
- package/package.json +2 -7
- package/src/__tests__/api-client.test.ts +0 -1
- package/src/domain/Phone/WebRTCPhone.ts +9 -8
- package/src/domain/__tests__/Session.test.ts +1 -6
- package/src/domain/types.ts +9 -0
- package/src/index.ts +1 -0
- package/src/service/IssueReporter.ts +1 -2
- package/src/service/__tests__/IssueReporter.test.ts +4 -7
- package/src/simple/Auth.ts +25 -7
- package/src/simple/Configuration.ts +5 -4
- package/src/simple/Directory.ts +2 -1
- package/src/simple/Phone.ts +2 -1
- package/src/simple/Websocket.ts +4 -2
- package/src/simple/__tests__/Auth.test.ts +123 -0
- package/src/simple/index.ts +1 -0
- package/src/simple/room/Participant.ts +3 -1
- package/src/simple/room/Room.ts +4 -3
- package/src/types/global.d.ts +11 -5
- package/src/utils/__tests__/api-requester.test.ts +0 -3
- package/src/utils/api-requester.ts +2 -33
- package/src/web-rtc-client.ts +3 -1
- package/src/websocket-client.ts +1 -1
|
@@ -1,39 +1,10 @@
|
|
|
1
|
-
/* global window */
|
|
2
|
-
/* eslint-disable global-require */
|
|
3
|
-
/* eslint-disable import/no-dynamic-require */
|
|
4
1
|
import { Base64 } from 'js-base64';
|
|
5
|
-
import { AbortController as NodeAbortController } from 'node-abort-controller';
|
|
6
2
|
import BadResponse from '../domain/BadResponse';
|
|
7
3
|
import ServerError from '../domain/ServerError';
|
|
8
|
-
import isMobile from './isMobile';
|
|
9
4
|
import IssueReporter from '../service/IssueReporter';
|
|
10
5
|
const methods = ['head', 'get', 'post', 'put', 'delete', 'options'];
|
|
11
6
|
const logger = IssueReporter ? IssueReporter.loggerFor('api') : console;
|
|
12
7
|
const REQUEST_TIMEOUT_MS = 300 * 1000; // 300s like the Chrome engine default value.
|
|
13
|
-
// Use a function here to be able to mock it in tests
|
|
14
|
-
export const realFetch = () => {
|
|
15
|
-
if (typeof fetch !== 'undefined') {
|
|
16
|
-
return fetch;
|
|
17
|
-
}
|
|
18
|
-
if (typeof document !== 'undefined' && window.fetch) {
|
|
19
|
-
// Browser
|
|
20
|
-
return window.fetch;
|
|
21
|
-
}
|
|
22
|
-
if (isMobile()) {
|
|
23
|
-
// React native
|
|
24
|
-
return fetch;
|
|
25
|
-
}
|
|
26
|
-
// nodejs
|
|
27
|
-
// this package is disabled for react-native in package.json because it requires nodejs modules
|
|
28
|
-
// Used to trick the optimizer to avoid requiring `node-fetch/lib/index` directly
|
|
29
|
-
// It causes to require it on browsers when delivered by a nodejs engine (cf: vitejs).
|
|
30
|
-
try {
|
|
31
|
-
return require(Math.random() >= 0 ? 'node-fetch/lib/index' : '');
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
return fetch;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
8
|
export default class ApiRequester {
|
|
38
9
|
server;
|
|
39
10
|
agent;
|
|
@@ -115,7 +86,7 @@ export default class ApiRequester {
|
|
|
115
86
|
const hasEmptyResponse = method === 'delete' || isHead;
|
|
116
87
|
const newParse = hasEmptyResponse && parse === ApiRequester.defaultParser ? ApiRequester.successResponseParser : parse;
|
|
117
88
|
const fetchOptions = { ...(this.fetchOptions || {}) };
|
|
118
|
-
const controller =
|
|
89
|
+
const controller = new AbortController();
|
|
119
90
|
const extraHeaders = fetchOptions.headers || {};
|
|
120
91
|
delete fetchOptions.headers;
|
|
121
92
|
const options = {
|
|
@@ -136,7 +107,7 @@ export default class ApiRequester {
|
|
|
136
107
|
await this.refreshTokenPromise;
|
|
137
108
|
}
|
|
138
109
|
const start = new Date();
|
|
139
|
-
const requestPromise =
|
|
110
|
+
const requestPromise = fetch(url, options).then((response) => {
|
|
140
111
|
const contentType = response.headers.get('content-type') || '';
|
|
141
112
|
const isJson = contentType.indexOf('application/json') !== -1;
|
|
142
113
|
IssueReporter.logRequest(url, options, response, start);
|
package/esm/web-rtc-client.js
CHANGED
|
@@ -425,13 +425,14 @@ export default class WebRTCClient extends Emitter {
|
|
|
425
425
|
});
|
|
426
426
|
});
|
|
427
427
|
}
|
|
428
|
-
call(number, enableVideo, audioOnly = false, conference = false) {
|
|
428
|
+
call(number, enableVideo, audioOnly = false, conference = false, options = {}) {
|
|
429
429
|
logger.info('sdk webrtc creating call', {
|
|
430
430
|
clientId: this.clientId,
|
|
431
431
|
number,
|
|
432
432
|
enableVideo,
|
|
433
433
|
audioOnly,
|
|
434
434
|
conference,
|
|
435
|
+
options,
|
|
435
436
|
});
|
|
436
437
|
const inviterOptions = {
|
|
437
438
|
sessionDescriptionHandlerOptionsReInvite: {
|
|
@@ -439,6 +440,7 @@ export default class WebRTCClient extends Emitter {
|
|
|
439
440
|
audioOnly,
|
|
440
441
|
},
|
|
441
442
|
earlyMedia: true,
|
|
443
|
+
options,
|
|
442
444
|
};
|
|
443
445
|
if (audioOnly) {
|
|
444
446
|
inviterOptions.sessionDescriptionHandlerModifiersReInvite = [stripVideo];
|
|
@@ -956,7 +956,7 @@ class WebRTCPhone extends Emitter_1.default {
|
|
|
956
956
|
}
|
|
957
957
|
// Should be async to match CTIPhone definition
|
|
958
958
|
// @TODO: line is not used here
|
|
959
|
-
makeCall(number, line, cameraEnabled, audioOnly = false, conference = false) {
|
|
959
|
+
makeCall(number, line, cameraEnabled, audioOnly = false, conference = false, options = {}) {
|
|
960
960
|
return __awaiter(this, void 0, void 0, function* () {
|
|
961
961
|
logger.info('make WebRTC call', {
|
|
962
962
|
number,
|
|
@@ -964,6 +964,7 @@ class WebRTCPhone extends Emitter_1.default {
|
|
|
964
964
|
cameraEnabled,
|
|
965
965
|
audioOnly,
|
|
966
966
|
conference,
|
|
967
|
+
options,
|
|
967
968
|
});
|
|
968
969
|
if (!number) {
|
|
969
970
|
return Promise.resolve(null);
|
|
@@ -978,7 +979,7 @@ class WebRTCPhone extends Emitter_1.default {
|
|
|
978
979
|
}
|
|
979
980
|
let sipSession;
|
|
980
981
|
try {
|
|
981
|
-
sipSession = this.client.call(number, this.allowVideo ? cameraEnabled : false, audioOnly, conference);
|
|
982
|
+
sipSession = this.client.call(number, this.allowVideo ? cameraEnabled : false, audioOnly, conference, options);
|
|
982
983
|
this._bindEvents(sipSession);
|
|
983
984
|
}
|
|
984
985
|
catch (error) {
|
|
@@ -1222,6 +1223,9 @@ class WebRTCPhone extends Emitter_1.default {
|
|
|
1222
1223
|
this.incomingSessions.push(callSession.getId());
|
|
1223
1224
|
this._bindEvents(sipSession);
|
|
1224
1225
|
this.client.storeSipSession(sipSession);
|
|
1226
|
+
callSession.creationTime = new Date();
|
|
1227
|
+
this._updateCallSession(callSession);
|
|
1228
|
+
this.eventEmitter.emit(exports.ON_CALL_INCOMING, callSession, wantsToDoVideo);
|
|
1225
1229
|
if (!this.currentSipSession) {
|
|
1226
1230
|
if (this.ringingEnabled) {
|
|
1227
1231
|
this.eventEmitter.emit(exports.ON_PLAY_RING_SOUND, this.audioRingDeviceId, this.audioRingVolume, callSession);
|
|
@@ -1230,9 +1234,6 @@ class WebRTCPhone extends Emitter_1.default {
|
|
|
1230
1234
|
else {
|
|
1231
1235
|
this.eventEmitter.emit(exports.ON_PLAY_INBOUND_CALL_SIGNAL_SOUND, this.audioOutputDeviceId, this.audioOutputVolume, callSession);
|
|
1232
1236
|
}
|
|
1233
|
-
callSession.creationTime = new Date();
|
|
1234
|
-
this._updateCallSession(callSession);
|
|
1235
|
-
this.eventEmitter.emit(exports.ON_CALL_INCOMING, callSession, wantsToDoVideo);
|
|
1236
1237
|
});
|
|
1237
1238
|
this.client.on(this.client.ON_REINVITE, (...args) => {
|
|
1238
1239
|
logger.info('WebRTC on reinvite', {
|
|
@@ -17,12 +17,8 @@ const Profile_1 = __importDefault(require("../Profile"));
|
|
|
17
17
|
const Line_1 = __importDefault(require("../Line"));
|
|
18
18
|
describe('Session domain', () => {
|
|
19
19
|
it('can parse a plain session to domain', () => {
|
|
20
|
-
// Can't use `new Headers` because it's not supported on node 16.
|
|
21
|
-
const headers = {
|
|
22
|
-
get: () => 'new-stack',
|
|
23
|
-
};
|
|
24
20
|
const plain = {
|
|
25
|
-
_headers:
|
|
21
|
+
_headers: new Headers({ 'wazo-stack-host': 'new-stack' }),
|
|
26
22
|
data: {
|
|
27
23
|
token: 'b93ae6bd-08d7-4001-9e61-057e72bbc4b3',
|
|
28
24
|
acl: ['calld.lines.*.presences.read', 'calld.switchboards.#', 'calld.transfers.*.complete.update', 'calld.transfers.*.delete', 'calld.transfers.*.read', 'calld.users.*.presences.read', 'calld.users.me.#', 'confd.infos.read', 'confd.users.me.#.read', 'confd.users.me.forwards.*.*', 'confd.users.me.funckeys.*', 'confd.users.me.funckeys.*.*', 'confd.users.me.read', 'confd.users.me.services.*.*', 'confd.users.me.update', 'dird.#.me.read', 'dird.directories.favorites.#', 'dird.directories.lookup.*.headers.read', 'dird.directories.lookup.*.read', 'dird.directories.personal.*.read', 'dird.personal.#', 'events.calls.me', 'events.chat.message.*.me', 'events.config.users.me.#', 'events.statuses.*', 'events.switchboards.#', 'events.transfers.me', 'events.users.me.#', 'events.directory.me.#', 'websocketd', 'call-logd.users.me.cdr.read'],
|
package/lib/domain/types.js
CHANGED
|
@@ -1,2 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
26
|
+
var t = {};
|
|
27
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
28
|
+
t[p] = s[p];
|
|
29
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
30
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
31
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
32
|
+
t[p[i]] = s[p[i]];
|
|
33
|
+
}
|
|
34
|
+
return t;
|
|
35
|
+
};
|
|
2
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const WebSocketClient = __importStar(require("../websocket-client"));
|
|
38
|
+
const { SOCKET_EVENTS } = WebSocketClient, OTHER_EVENTS = __rest(WebSocketClient, ["SOCKET_EVENTS"]);
|
package/lib/index.js
CHANGED
|
@@ -18,6 +18,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
20
|
exports.ExternalApp = exports.Agent = exports.WazoApiClient = exports.WebRTCClient = exports.SOCKET_EVENTS = exports.WebSocketClient = exports.AdHocAPIConference = exports.CallApi = exports.setIsMobile = exports.setOnRefreshTokenError = exports.setOnRefreshToken = exports.setCurrentServer = exports.setApiToken = exports.getApiClient = exports.SipLine = exports.MeetingAuthorization = exports.MeetingStatus = exports.ApiRequester = exports.Checker = exports.DebugDevice = exports.Meeting = exports.CTIPhone = exports.WebRTCPhone = exports.SwitchboardCall = exports.IndirectTransfer = exports.CallSession = exports.Room = exports.Relocation = exports.Voicemail = exports.Session = exports.LINE_STATE = exports.PROFILE_STATE = exports.Profile = exports.NotificationOptions = exports.Line = exports.FORWARD_KEYS = exports.ForwardOption = exports.Features = exports.COUNTRIES = exports.Contact = exports.ChatRoom = exports.ChatMessage = exports.Recording = exports.CallLog = exports.Call = exports.SFUNotAvailableError = exports.ServerError = exports.BadResponse = exports.IssueReporter = exports.Emitter = void 0;
|
|
21
|
+
exports.SessionDescriptionHandler = void 0;
|
|
21
22
|
const index_1 = __importDefault(require("./simple/index"));
|
|
22
23
|
var Emitter_1 = require("./utils/Emitter");
|
|
23
24
|
Object.defineProperty(exports, "Emitter", { enumerable: true, get: function () { return __importDefault(Emitter_1).default; } });
|
|
@@ -110,6 +111,8 @@ var Agent_1 = require("./domain/Agent");
|
|
|
110
111
|
Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return __importDefault(Agent_1).default; } });
|
|
111
112
|
var ExternalApp_1 = require("./domain/ExternalApp");
|
|
112
113
|
Object.defineProperty(exports, "ExternalApp", { enumerable: true, get: function () { return __importDefault(ExternalApp_1).default; } });
|
|
114
|
+
var WazoSessionDescriptionHandler_1 = require("./lib/WazoSessionDescriptionHandler");
|
|
115
|
+
Object.defineProperty(exports, "SessionDescriptionHandler", { enumerable: true, get: function () { return __importDefault(WazoSessionDescriptionHandler_1).default; } });
|
|
113
116
|
__exportStar(require("./types/WebSocketMessage"), exports);
|
|
114
117
|
__exportStar(require("./utils/PhoneNumberUtil"), exports);
|
|
115
118
|
__exportStar(require("./domain/types"), exports);
|
|
@@ -6,7 +6,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
/* eslint-disable prefer-destructuring, no-param-reassign, no-underscore-dangle */
|
|
8
8
|
const moment_1 = __importDefault(require("moment"));
|
|
9
|
-
const api_requester_1 = require("../utils/api-requester");
|
|
10
9
|
const isMobile_1 = __importDefault(require("../utils/isMobile"));
|
|
11
10
|
const string_1 = require("../utils/string");
|
|
12
11
|
const TRACE = 'trace';
|
|
@@ -274,7 +273,7 @@ class IssueReporter {
|
|
|
274
273
|
const isSecure = +port === 443;
|
|
275
274
|
const url = `http${isSecure ? 's' : ''}://${host}${isSecure ? '' : `:${port}`}/${tag}`;
|
|
276
275
|
const body = Array.isArray(payload) ? `[${payload.map(this._boundParseLoggerBody).join(',')}]` : this._parseLoggerBody(payload);
|
|
277
|
-
(
|
|
276
|
+
fetch(url, {
|
|
278
277
|
method: 'POST',
|
|
279
278
|
headers: {
|
|
280
279
|
Accept: 'application/json',
|
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
/* eslint-disable no-useless-escape */
|
|
8
8
|
/* eslint-disable no-console */
|
|
9
9
|
const IssueReporter_1 = __importDefault(require("../IssueReporter"));
|
|
10
|
-
const api_requester_1 = require("../../utils/api-requester");
|
|
11
10
|
jest.mock('../../utils/api-requester');
|
|
12
11
|
let oldLog;
|
|
13
12
|
let oldError;
|
|
@@ -23,9 +22,7 @@ describe('IssueReporter', () => {
|
|
|
23
22
|
});
|
|
24
23
|
beforeEach(() => {
|
|
25
24
|
jest.resetAllMocks();
|
|
26
|
-
|
|
27
|
-
catch: () => { },
|
|
28
|
-
}));
|
|
25
|
+
jest.spyOn(global, 'fetch');
|
|
29
26
|
});
|
|
30
27
|
afterAll(() => {
|
|
31
28
|
console.log = oldLog;
|
|
@@ -46,7 +43,7 @@ describe('IssueReporter', () => {
|
|
|
46
43
|
level: 'trace',
|
|
47
44
|
});
|
|
48
45
|
IssueReporter_1.default._sendToRemoteLogger('info');
|
|
49
|
-
expect(
|
|
46
|
+
expect(fetch).toHaveBeenCalled();
|
|
50
47
|
});
|
|
51
48
|
it('should send if verbosity is equal than required', () => {
|
|
52
49
|
// Same level
|
|
@@ -54,7 +51,7 @@ describe('IssueReporter', () => {
|
|
|
54
51
|
level: 'trace',
|
|
55
52
|
});
|
|
56
53
|
IssueReporter_1.default._sendToRemoteLogger('trace');
|
|
57
|
-
expect(
|
|
54
|
+
expect(fetch).toHaveBeenCalled();
|
|
58
55
|
});
|
|
59
56
|
it('should not send if verbosity is lower than required', () => {
|
|
60
57
|
// Lower level
|
|
@@ -62,7 +59,7 @@ describe('IssueReporter', () => {
|
|
|
62
59
|
level: 'info',
|
|
63
60
|
});
|
|
64
61
|
IssueReporter_1.default._sendToRemoteLogger('trace');
|
|
65
|
-
expect(
|
|
62
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
66
63
|
});
|
|
67
64
|
it('should log extra data', () => {
|
|
68
65
|
jest.spyOn(IssueReporter_1.default, '_sendToRemoteLogger').mockImplementation(() => { });
|
package/lib/simple/Auth.js
CHANGED
|
@@ -35,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.NoDomainNameError = exports.NoTenantIdError = exports.InvalidAuthorization = exports.InvalidSubscription = void 0;
|
|
38
|
+
exports.Auth = exports.NoDomainNameError = exports.NoTenantIdError = exports.InvalidAuthorization = exports.InvalidSubscription = void 0;
|
|
39
39
|
const auth_1 = require("../api/auth");
|
|
40
40
|
const getApiClient_1 = __importStar(require("../service/getApiClient"));
|
|
41
41
|
const IssueReporter_1 = __importDefault(require("../service/IssueReporter"));
|
|
@@ -148,11 +148,15 @@ class Auth {
|
|
|
148
148
|
return this._onAuthenticated(rawSession);
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
|
-
validateToken(token, refreshToken) {
|
|
151
|
+
validateToken(token, refreshToken, headerUserUuid) {
|
|
152
152
|
return __awaiter(this, void 0, void 0, function* () {
|
|
153
153
|
if (!token) {
|
|
154
154
|
return;
|
|
155
155
|
}
|
|
156
|
+
if (this.usingEdgeServer && typeof headerUserUuid === 'string') {
|
|
157
|
+
logger.info('using edge server, setting user UUID header', { headerUserUuid });
|
|
158
|
+
this.setHttpUserUuidHeader(headerUserUuid);
|
|
159
|
+
}
|
|
156
160
|
if (refreshToken) {
|
|
157
161
|
(0, getApiClient_1.setRefreshToken)(refreshToken);
|
|
158
162
|
}
|
|
@@ -203,6 +207,10 @@ class Auth {
|
|
|
203
207
|
setOnHostFromHeaders(callback) {
|
|
204
208
|
this.onHostFromHeadersCallback = callback;
|
|
205
209
|
}
|
|
210
|
+
setOnSetUsingEdgeServer(callback) {
|
|
211
|
+
logger.info('setting onSetUsingEdgeServer callback', { callback: typeof callback === 'function' });
|
|
212
|
+
this.onSetUsingEdgeServer = callback;
|
|
213
|
+
}
|
|
206
214
|
setOnRefreshToken(callback) {
|
|
207
215
|
this.onRefreshTokenCallback = callback;
|
|
208
216
|
}
|
|
@@ -316,6 +324,10 @@ class Auth {
|
|
|
316
324
|
this.usingEdgeServer = false;
|
|
317
325
|
logger.info('Setting usingEdgeServer to FALSE', { justification: e });
|
|
318
326
|
}
|
|
327
|
+
if (typeof this.onSetUsingEdgeServer === 'function') {
|
|
328
|
+
logger.info('calling onSetUsingEdgeServer', { usingEdgeServer: this.usingEdgeServer });
|
|
329
|
+
this.onSetUsingEdgeServer(this.usingEdgeServer);
|
|
330
|
+
}
|
|
319
331
|
});
|
|
320
332
|
}
|
|
321
333
|
_onAuthenticated(rawSession) {
|
|
@@ -372,7 +384,9 @@ class Auth {
|
|
|
372
384
|
});
|
|
373
385
|
}
|
|
374
386
|
}
|
|
387
|
+
exports.Auth = Auth;
|
|
375
388
|
if (!global.wazoAuthInstance) {
|
|
376
389
|
global.wazoAuthInstance = new Auth();
|
|
377
390
|
}
|
|
391
|
+
// @ts-ignore: Circular definition of import alias 'default'.
|
|
378
392
|
exports.default = global.wazoAuthInstance;
|
|
@@ -12,17 +12,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
|
|
15
|
+
exports.Configuration = void 0;
|
|
16
|
+
const _1 = __importDefault(require("."));
|
|
16
17
|
const getApiClient_1 = __importDefault(require("../service/getApiClient"));
|
|
17
18
|
class Configuration {
|
|
18
19
|
getCurrentUser() {
|
|
19
20
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
const session =
|
|
21
|
-
return (0, getApiClient_1.default)().confd.getUser(session ? session.uuid : '');
|
|
21
|
+
const session = _1.default.Auth.getSession();
|
|
22
|
+
return (0, getApiClient_1.default)().confd.getUser(`${session ? session.uuid : ''}`);
|
|
22
23
|
});
|
|
23
24
|
}
|
|
24
25
|
}
|
|
26
|
+
exports.Configuration = Configuration;
|
|
25
27
|
if (!global.wazoConfigurationInstance) {
|
|
26
28
|
global.wazoConfigurationInstance = new Configuration();
|
|
27
29
|
}
|
|
30
|
+
// @ts-ignore: Circular definition of import alias 'default'.
|
|
28
31
|
exports.default = global.wazoConfigurationInstance;
|
package/lib/simple/Directory.js
CHANGED
|
@@ -12,6 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.Directory = void 0;
|
|
15
16
|
const getApiClient_1 = __importDefault(require("../service/getApiClient"));
|
|
16
17
|
class Directory {
|
|
17
18
|
findMultipleContactsByNumber(numbers, fields) {
|
|
@@ -20,7 +21,9 @@ class Directory {
|
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
}
|
|
24
|
+
exports.Directory = Directory;
|
|
23
25
|
if (!global.wazoDirectoryInstance) {
|
|
24
26
|
global.wazoDirectoryInstance = new Directory();
|
|
25
27
|
}
|
|
28
|
+
// @ts-ignore: Circular definition of import alias 'default'.
|
|
26
29
|
exports.default = global.wazoDirectoryInstance;
|
package/lib/simple/Phone.js
CHANGED
|
@@ -35,6 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.Phone = void 0;
|
|
38
39
|
const session_state_1 = require("sip.js/lib/api/session-state");
|
|
39
40
|
const AdHocAPIConference_1 = __importDefault(require("../domain/AdHocAPIConference"));
|
|
40
41
|
const WebRTCPhone_1 = __importStar(require("../domain/Phone/WebRTCPhone")), PHONE_EVENTS = WebRTCPhone_1;
|
|
@@ -409,7 +410,9 @@ class Phone extends Emitter_1.default {
|
|
|
409
410
|
}
|
|
410
411
|
}
|
|
411
412
|
}
|
|
413
|
+
exports.Phone = Phone;
|
|
412
414
|
if (!global.wazoTelephonyInstance) {
|
|
413
415
|
global.wazoTelephonyInstance = new Phone();
|
|
414
416
|
}
|
|
417
|
+
// @ts-ignore: Circular definition of import alias 'default'.
|
|
415
418
|
exports.default = global.wazoTelephonyInstance;
|
package/lib/simple/Websocket.js
CHANGED
|
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
38
|
};
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.Websocket = void 0;
|
|
40
41
|
const websocket_client_1 = __importStar(require("../websocket-client")), WebSocketClient = websocket_client_1;
|
|
41
42
|
const Emitter_1 = __importDefault(require("../utils/Emitter"));
|
|
42
43
|
const IssueReporter_1 = __importDefault(require("../service/IssueReporter"));
|
|
@@ -107,7 +108,9 @@ class Websocket extends Emitter_1.default {
|
|
|
107
108
|
this.unbind();
|
|
108
109
|
}
|
|
109
110
|
}
|
|
111
|
+
exports.Websocket = Websocket;
|
|
110
112
|
if (!global.wazoWebsocketInstance) {
|
|
111
113
|
global.wazoWebsocketInstance = new Websocket();
|
|
112
114
|
}
|
|
115
|
+
// @ts-ignore: Circular definition of import alias 'default'.
|
|
113
116
|
exports.default = global.wazoWebsocketInstance;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
const getApiClient_1 = __importStar(require("../../service/getApiClient"));
|
|
36
|
+
const Auth_1 = require("../Auth");
|
|
37
|
+
const Auth = new Auth_1.Auth();
|
|
38
|
+
const TOKEN = 'some-token';
|
|
39
|
+
const REFRESH_TOKEN = 'some-refresh-token';
|
|
40
|
+
const USER_UUID = 'some-user-uuid';
|
|
41
|
+
jest.mock('../../service/getApiClient');
|
|
42
|
+
describe('simple/Auth', () => {
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
const authenticate = jest.fn();
|
|
45
|
+
getApiClient_1.default.mockImplementation(() => ({
|
|
46
|
+
auth: {
|
|
47
|
+
authenticate,
|
|
48
|
+
},
|
|
49
|
+
}));
|
|
50
|
+
});
|
|
51
|
+
afterEach(() => {
|
|
52
|
+
jest.restoreAllMocks();
|
|
53
|
+
});
|
|
54
|
+
describe('validateToken', () => {
|
|
55
|
+
it('should return undefined if nullish', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
|
+
// @ts-expect-error
|
|
57
|
+
const result = yield Auth.validateToken(null);
|
|
58
|
+
expect(result).toEqual(undefined);
|
|
59
|
+
}));
|
|
60
|
+
it('should set refresh token if provided', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
|
+
yield Auth.validateToken(TOKEN, REFRESH_TOKEN);
|
|
62
|
+
expect(getApiClient_1.setRefreshToken).toHaveBeenCalledWith(REFRESH_TOKEN);
|
|
63
|
+
}));
|
|
64
|
+
it('should set user uuid header when using edge server', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
Auth.usingEdgeServer = true;
|
|
66
|
+
const setHttpUserUuidHeader = jest.spyOn(Auth, 'setHttpUserUuidHeader');
|
|
67
|
+
yield Auth.validateToken(TOKEN, undefined, USER_UUID);
|
|
68
|
+
expect(setHttpUserUuidHeader).toHaveBeenCalledWith(USER_UUID);
|
|
69
|
+
}));
|
|
70
|
+
it('should NOT set user uuid header when NOT using edge server', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
|
+
Auth.usingEdgeServer = false;
|
|
72
|
+
const setHttpUserUuidHeader = jest.spyOn(Auth, 'setHttpUserUuidHeader');
|
|
73
|
+
yield Auth.validateToken(TOKEN, undefined, USER_UUID);
|
|
74
|
+
expect(setHttpUserUuidHeader).not.toHaveBeenCalled();
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
describe('checkHttpUserUuidHeader', () => {
|
|
78
|
+
it('should return undefined if UUID is null', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
const result = yield Auth.checkHttpUserUuidHeader(null);
|
|
80
|
+
expect(result).toEqual(undefined);
|
|
81
|
+
}));
|
|
82
|
+
it('should set user UUID header on successful HEAD call', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
+
const head = jest.fn(() => Promise.resolve({ headers: { get: () => null } }));
|
|
84
|
+
const setHttpUserUuidHeader = jest.spyOn(Auth, 'setHttpUserUuidHeader');
|
|
85
|
+
Auth.onSetUsingEdgeServer = jest.fn();
|
|
86
|
+
getApiClient_1.default.mockImplementation(() => ({
|
|
87
|
+
client: {
|
|
88
|
+
head,
|
|
89
|
+
},
|
|
90
|
+
}));
|
|
91
|
+
yield Auth.checkHttpUserUuidHeader(USER_UUID);
|
|
92
|
+
expect(head).toHaveBeenCalled();
|
|
93
|
+
expect(setHttpUserUuidHeader).toHaveBeenCalledWith(USER_UUID);
|
|
94
|
+
expect(Auth.usingEdgeServer).toEqual(true);
|
|
95
|
+
expect(Auth.onSetUsingEdgeServer).toHaveBeenCalledWith(true);
|
|
96
|
+
}));
|
|
97
|
+
it('should NOT set user UUID header on failed HEAD call', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
98
|
+
const head = jest.fn(() => Promise.reject());
|
|
99
|
+
const setHttpUserUuidHeader = jest.spyOn(Auth, 'setHttpUserUuidHeader');
|
|
100
|
+
Auth.onSetUsingEdgeServer = jest.fn();
|
|
101
|
+
getApiClient_1.default.mockImplementation(() => ({
|
|
102
|
+
client: {
|
|
103
|
+
head,
|
|
104
|
+
},
|
|
105
|
+
}));
|
|
106
|
+
yield Auth.checkHttpUserUuidHeader(USER_UUID);
|
|
107
|
+
expect(head).toHaveBeenCalled();
|
|
108
|
+
expect(setHttpUserUuidHeader).not.toHaveBeenCalled();
|
|
109
|
+
expect(Auth.usingEdgeServer).toEqual(false);
|
|
110
|
+
expect(Auth.onSetUsingEdgeServer).toHaveBeenCalledWith(false);
|
|
111
|
+
}));
|
|
112
|
+
it('should set user UUID header on mobile when header is present', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
113
|
+
Auth.mobile = true;
|
|
114
|
+
const head = jest.fn(() => Promise.resolve({ headers: { get: () => 'X-User-UUID: something' } }));
|
|
115
|
+
const setHttpUserUuidHeader = jest.spyOn(Auth, 'setHttpUserUuidHeader');
|
|
116
|
+
Auth.onSetUsingEdgeServer = jest.fn();
|
|
117
|
+
getApiClient_1.default.mockImplementation(() => ({
|
|
118
|
+
client: {
|
|
119
|
+
head,
|
|
120
|
+
},
|
|
121
|
+
}));
|
|
122
|
+
yield Auth.checkHttpUserUuidHeader(USER_UUID);
|
|
123
|
+
expect(head).toHaveBeenCalled();
|
|
124
|
+
expect(setHttpUserUuidHeader).toHaveBeenCalledWith(USER_UUID);
|
|
125
|
+
expect(Auth.usingEdgeServer).toEqual(true);
|
|
126
|
+
expect(Auth.onSetUsingEdgeServer).toHaveBeenCalledWith(true);
|
|
127
|
+
}));
|
|
128
|
+
it('should NOT set user UUID header on mobile when header is NOT present', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
129
|
+
Auth.mobile = true;
|
|
130
|
+
const head = jest.fn(() => Promise.resolve({ headers: { get: () => 'something' } }));
|
|
131
|
+
const setHttpUserUuidHeader = jest.spyOn(Auth, 'setHttpUserUuidHeader');
|
|
132
|
+
Auth.onSetUsingEdgeServer = jest.fn();
|
|
133
|
+
getApiClient_1.default.mockImplementation(() => ({
|
|
134
|
+
client: {
|
|
135
|
+
head,
|
|
136
|
+
},
|
|
137
|
+
}));
|
|
138
|
+
yield Auth.checkHttpUserUuidHeader(USER_UUID);
|
|
139
|
+
expect(head).toHaveBeenCalled();
|
|
140
|
+
expect(setHttpUserUuidHeader).not.toHaveBeenCalled();
|
|
141
|
+
expect(Auth.usingEdgeServer).toEqual(false);
|
|
142
|
+
expect(Auth.onSetUsingEdgeServer).toHaveBeenCalledWith(false);
|
|
143
|
+
}));
|
|
144
|
+
});
|
|
145
|
+
});
|
package/lib/simple/index.js
CHANGED
|
@@ -26,6 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
/* eslint-disable import/no-named-as-default */
|
|
29
30
|
/* global window */
|
|
30
31
|
const Auth_1 = __importStar(require("./Auth"));
|
|
31
32
|
const Phone_1 = __importDefault(require("./Phone"));
|
|
@@ -14,6 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const Emitter_1 = __importDefault(require("../../utils/Emitter"));
|
|
16
16
|
const IssueReporter_1 = __importDefault(require("../../service/IssueReporter"));
|
|
17
|
+
// eslint-disable-next-line import/no-named-as-default
|
|
17
18
|
const Phone_1 = __importDefault(require("../Phone"));
|
|
18
19
|
const Room_1 = require("./Room");
|
|
19
20
|
const Contact_1 = __importDefault(require("../../domain/Contact"));
|
package/lib/simple/room/Room.js
CHANGED
|
@@ -104,6 +104,7 @@ class Room extends Emitter_1.default {
|
|
|
104
104
|
});
|
|
105
105
|
if (!room) {
|
|
106
106
|
yield index_1.default.Phone.connect({
|
|
107
|
+
// @ts-ignore: Property 'audio' is missing
|
|
107
108
|
media: constraints,
|
|
108
109
|
});
|
|
109
110
|
const withCamera = constraints && !!constraints.video;
|
|
@@ -168,7 +169,7 @@ class Room extends Emitter_1.default {
|
|
|
168
169
|
return __awaiter(this, void 0, void 0, function* () {
|
|
169
170
|
logger.info('disconnection to room called');
|
|
170
171
|
yield index_1.default.Phone.hangup(this.callSession);
|
|
171
|
-
this.callSession =
|
|
172
|
+
this.callSession = undefined;
|
|
172
173
|
this.eventEmitter.emit(this.ON_DISCONNECTED, this);
|
|
173
174
|
this.connected = false;
|
|
174
175
|
this.unbind();
|
|
@@ -128,7 +128,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
|
|
|
128
128
|
turnCameraOn(callSession?: CallSession): void;
|
|
129
129
|
turnCameraOff(callSession?: CallSession): void;
|
|
130
130
|
sendKey(callSession: CallSession | undefined, tone: string): void;
|
|
131
|
-
makeCall(number: string, line: any, cameraEnabled?: boolean, audioOnly?: boolean, conference?: boolean): Promise<CallSession | null | undefined>;
|
|
131
|
+
makeCall(number: string, line: any, cameraEnabled?: boolean, audioOnly?: boolean, conference?: boolean, options?: {}): Promise<CallSession | null | undefined>;
|
|
132
132
|
transfer(callSession: CallSession, target: string): void;
|
|
133
133
|
indirectTransfer(source: CallSession, destination: CallSession): Promise<boolean>;
|
|
134
134
|
initiateCTIIndirectTransfer(): Promise<null>;
|