@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.
Files changed (123) hide show
  1. package/dist/wazo-sdk.js +526 -598
  2. package/esm/__tests__/api-client.test.js +0 -1
  3. package/esm/domain/Phone/WebRTCPhone.js +6 -5
  4. package/esm/domain/__tests__/Session.test.js +1 -5
  5. package/esm/domain/types.js +2 -1
  6. package/esm/index.js +1 -0
  7. package/esm/service/IssueReporter.js +1 -2
  8. package/esm/service/__tests__/IssueReporter.test.js +4 -7
  9. package/esm/simple/Auth.js +16 -2
  10. package/esm/simple/Configuration.js +5 -4
  11. package/esm/simple/Directory.js +2 -1
  12. package/esm/simple/Phone.js +2 -1
  13. package/esm/simple/Websocket.js +2 -1
  14. package/esm/simple/__tests__/Auth.test.js +111 -0
  15. package/esm/simple/index.js +1 -0
  16. package/esm/simple/room/Participant.js +1 -0
  17. package/esm/simple/room/Room.js +2 -1
  18. package/esm/types/domain/Phone/WebRTCPhone.d.ts +1 -1
  19. package/esm/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
  20. package/esm/types/domain/types.d.ts +80 -0
  21. package/esm/types/domain/types.d.ts.map +1 -1
  22. package/esm/types/index.d.ts +1 -0
  23. package/esm/types/index.d.ts.map +1 -1
  24. package/esm/types/service/IssueReporter.d.ts.map +1 -1
  25. package/esm/types/simple/Auth.d.ts +51 -1
  26. package/esm/types/simple/Auth.d.ts.map +1 -1
  27. package/esm/types/simple/Configuration.d.ts +5 -1
  28. package/esm/types/simple/Configuration.d.ts.map +1 -1
  29. package/esm/types/simple/Directory.d.ts +5 -1
  30. package/esm/types/simple/Directory.d.ts.map +1 -1
  31. package/esm/types/simple/Phone.d.ts +117 -1
  32. package/esm/types/simple/Phone.d.ts.map +1 -1
  33. package/esm/types/simple/Websocket.d.ts +19 -1
  34. package/esm/types/simple/Websocket.d.ts.map +1 -1
  35. package/esm/types/simple/__tests__/Auth.test.d.ts +2 -0
  36. package/esm/types/simple/__tests__/Auth.test.d.ts.map +1 -0
  37. package/esm/types/simple/index.d.ts +5 -5
  38. package/esm/types/simple/index.d.ts.map +1 -1
  39. package/esm/types/simple/room/Participant.d.ts.map +1 -1
  40. package/esm/types/simple/room/Room.d.ts +11 -11
  41. package/esm/types/simple/room/Room.d.ts.map +1 -1
  42. package/esm/types/simple/room/SipRoom.d.ts +1 -1
  43. package/esm/types/utils/api-requester.d.ts +0 -1
  44. package/esm/types/utils/api-requester.d.ts.map +1 -1
  45. package/esm/types/web-rtc-client.d.ts +1 -1
  46. package/esm/types/web-rtc-client.d.ts.map +1 -1
  47. package/esm/types/websocket-client.d.ts +6 -6
  48. package/esm/types/websocket-client.d.ts.map +1 -1
  49. package/esm/utils/__tests__/api-requester.test.js +0 -2
  50. package/esm/utils/api-requester.js +2 -31
  51. package/esm/web-rtc-client.js +3 -1
  52. package/lib/__tests__/api-client.test.js +0 -1
  53. package/lib/domain/Phone/WebRTCPhone.js +6 -5
  54. package/lib/domain/__tests__/Session.test.js +1 -5
  55. package/lib/domain/types.js +36 -0
  56. package/lib/index.js +3 -0
  57. package/lib/service/IssueReporter.js +1 -2
  58. package/lib/service/__tests__/IssueReporter.test.js +4 -7
  59. package/lib/simple/Auth.js +16 -2
  60. package/lib/simple/Configuration.js +6 -3
  61. package/lib/simple/Directory.js +3 -0
  62. package/lib/simple/Phone.js +3 -0
  63. package/lib/simple/Websocket.js +3 -0
  64. package/lib/simple/__tests__/Auth.test.js +145 -0
  65. package/lib/simple/index.js +1 -0
  66. package/lib/simple/room/Participant.js +1 -0
  67. package/lib/simple/room/Room.js +2 -1
  68. package/lib/types/domain/Phone/WebRTCPhone.d.ts +1 -1
  69. package/lib/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
  70. package/lib/types/domain/types.d.ts +80 -0
  71. package/lib/types/domain/types.d.ts.map +1 -1
  72. package/lib/types/index.d.ts +1 -0
  73. package/lib/types/index.d.ts.map +1 -1
  74. package/lib/types/service/IssueReporter.d.ts.map +1 -1
  75. package/lib/types/simple/Auth.d.ts +51 -1
  76. package/lib/types/simple/Auth.d.ts.map +1 -1
  77. package/lib/types/simple/Configuration.d.ts +5 -1
  78. package/lib/types/simple/Configuration.d.ts.map +1 -1
  79. package/lib/types/simple/Directory.d.ts +5 -1
  80. package/lib/types/simple/Directory.d.ts.map +1 -1
  81. package/lib/types/simple/Phone.d.ts +117 -1
  82. package/lib/types/simple/Phone.d.ts.map +1 -1
  83. package/lib/types/simple/Websocket.d.ts +19 -1
  84. package/lib/types/simple/Websocket.d.ts.map +1 -1
  85. package/lib/types/simple/__tests__/Auth.test.d.ts +2 -0
  86. package/lib/types/simple/__tests__/Auth.test.d.ts.map +1 -0
  87. package/lib/types/simple/index.d.ts +5 -5
  88. package/lib/types/simple/index.d.ts.map +1 -1
  89. package/lib/types/simple/room/Participant.d.ts.map +1 -1
  90. package/lib/types/simple/room/Room.d.ts +11 -11
  91. package/lib/types/simple/room/Room.d.ts.map +1 -1
  92. package/lib/types/simple/room/SipRoom.d.ts +1 -1
  93. package/lib/types/utils/api-requester.d.ts +0 -1
  94. package/lib/types/utils/api-requester.d.ts.map +1 -1
  95. package/lib/types/web-rtc-client.d.ts +1 -1
  96. package/lib/types/web-rtc-client.d.ts.map +1 -1
  97. package/lib/types/websocket-client.d.ts +6 -6
  98. package/lib/types/websocket-client.d.ts.map +1 -1
  99. package/lib/utils/__tests__/api-requester.test.js +0 -2
  100. package/lib/utils/api-requester.js +2 -33
  101. package/lib/web-rtc-client.js +3 -1
  102. package/package.json +2 -7
  103. package/src/__tests__/api-client.test.ts +0 -1
  104. package/src/domain/Phone/WebRTCPhone.ts +9 -8
  105. package/src/domain/__tests__/Session.test.ts +1 -6
  106. package/src/domain/types.ts +9 -0
  107. package/src/index.ts +1 -0
  108. package/src/service/IssueReporter.ts +1 -2
  109. package/src/service/__tests__/IssueReporter.test.ts +4 -7
  110. package/src/simple/Auth.ts +25 -7
  111. package/src/simple/Configuration.ts +5 -4
  112. package/src/simple/Directory.ts +2 -1
  113. package/src/simple/Phone.ts +2 -1
  114. package/src/simple/Websocket.ts +4 -2
  115. package/src/simple/__tests__/Auth.test.ts +123 -0
  116. package/src/simple/index.ts +1 -0
  117. package/src/simple/room/Participant.ts +3 -1
  118. package/src/simple/room/Room.ts +4 -3
  119. package/src/types/global.d.ts +11 -5
  120. package/src/utils/__tests__/api-requester.test.ts +0 -3
  121. package/src/utils/api-requester.ts +2 -33
  122. package/src/web-rtc-client.ts +3 -1
  123. 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 = typeof AbortController !== 'undefined' ? new AbortController() : new NodeAbortController();
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 = realFetch()(url, options).then((response) => {
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);
@@ -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];
@@ -79,7 +79,6 @@ const server = 'localhost';
79
79
  const authVersion = '0.1';
80
80
  const username = 'wazo';
81
81
  const password = 'zowa';
82
- jest.mock('node-fetch/src/index', () => { });
83
82
  const token = '1234';
84
83
  const client = new api_client_1.default({
85
84
  server,
@@ -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: 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'],
@@ -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
- (0, api_requester_1.realFetch)()(url, {
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
- api_requester_1.realFetch.mockImplementation(() => () => ({
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(api_requester_1.realFetch).toHaveBeenCalled();
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(api_requester_1.realFetch).toHaveBeenCalled();
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(api_requester_1.realFetch).not.toHaveBeenCalled();
62
+ expect(fetch).not.toHaveBeenCalled();
66
63
  });
67
64
  it('should log extra data', () => {
68
65
  jest.spyOn(IssueReporter_1.default, '_sendToRemoteLogger').mockImplementation(() => { });
@@ -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
- const Auth_1 = __importDefault(require("./Auth"));
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 = Auth_1.default.getSession();
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;
@@ -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;
@@ -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;
@@ -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
+ });
@@ -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"));
@@ -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 = null;
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>;