@wazo/sdk 0.41.0 → 0.41.2

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 (119) hide show
  1. package/dist/wazo-sdk.js +4 -4
  2. package/esm/__tests__/api-client.test.js +15 -5
  3. package/esm/domain/Phone/WebRTCPhone.js +6 -5
  4. package/esm/domain/types.js +2 -1
  5. package/esm/index.js +1 -0
  6. package/esm/service/__tests__/IssueReporter.test.js +5 -1
  7. package/esm/simple/Auth.js +16 -2
  8. package/esm/simple/Configuration.js +5 -4
  9. package/esm/simple/Directory.js +2 -1
  10. package/esm/simple/Phone.js +2 -1
  11. package/esm/simple/Websocket.js +2 -1
  12. package/esm/simple/__tests__/Auth.test.js +111 -0
  13. package/esm/simple/index.js +1 -0
  14. package/esm/simple/room/Participant.js +1 -0
  15. package/esm/simple/room/Room.js +2 -1
  16. package/esm/types/domain/Phone/WebRTCPhone.d.ts +1 -1
  17. package/esm/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
  18. package/esm/types/domain/types.d.ts +80 -0
  19. package/esm/types/domain/types.d.ts.map +1 -1
  20. package/esm/types/index.d.ts +1 -0
  21. package/esm/types/index.d.ts.map +1 -1
  22. package/esm/types/service/getApiClient.d.ts.map +1 -1
  23. package/esm/types/simple/Auth.d.ts +51 -1
  24. package/esm/types/simple/Auth.d.ts.map +1 -1
  25. package/esm/types/simple/Configuration.d.ts +5 -1
  26. package/esm/types/simple/Configuration.d.ts.map +1 -1
  27. package/esm/types/simple/Directory.d.ts +5 -1
  28. package/esm/types/simple/Directory.d.ts.map +1 -1
  29. package/esm/types/simple/Phone.d.ts +117 -1
  30. package/esm/types/simple/Phone.d.ts.map +1 -1
  31. package/esm/types/simple/Websocket.d.ts +19 -1
  32. package/esm/types/simple/Websocket.d.ts.map +1 -1
  33. package/esm/types/simple/__tests__/Auth.test.d.ts +2 -0
  34. package/esm/types/simple/__tests__/Auth.test.d.ts.map +1 -0
  35. package/esm/types/simple/index.d.ts +5 -5
  36. package/esm/types/simple/index.d.ts.map +1 -1
  37. package/esm/types/simple/room/Participant.d.ts.map +1 -1
  38. package/esm/types/simple/room/Room.d.ts +11 -11
  39. package/esm/types/simple/room/Room.d.ts.map +1 -1
  40. package/esm/types/simple/room/SipRoom.d.ts +1 -1
  41. package/esm/types/utils/array.d.ts.map +1 -1
  42. package/esm/types/web-rtc-client.d.ts +1 -1
  43. package/esm/types/web-rtc-client.d.ts.map +1 -1
  44. package/esm/types/websocket-client.d.ts +6 -6
  45. package/esm/types/websocket-client.d.ts.map +1 -1
  46. package/esm/utils/__tests__/api-requester.test.js +19 -15
  47. package/esm/web-rtc-client.js +3 -1
  48. package/esm/websocket-client.js +1 -1
  49. package/lib/__tests__/api-client.test.js +15 -5
  50. package/lib/checker/Checker.js +2 -2
  51. package/lib/domain/Phone/WebRTCPhone.js +17 -16
  52. package/lib/domain/types.js +36 -0
  53. package/lib/index.js +3 -0
  54. package/lib/service/CallApi.js +4 -4
  55. package/lib/service/__tests__/IssueReporter.test.js +5 -1
  56. package/lib/simple/Auth.js +21 -7
  57. package/lib/simple/Configuration.js +6 -3
  58. package/lib/simple/Directory.js +3 -0
  59. package/lib/simple/Phone.js +12 -9
  60. package/lib/simple/Websocket.js +3 -0
  61. package/lib/simple/__tests__/Auth.test.js +145 -0
  62. package/lib/simple/index.js +1 -0
  63. package/lib/simple/room/Participant.js +3 -2
  64. package/lib/simple/room/Room.js +10 -9
  65. package/lib/simple/room/SipRoom.js +2 -2
  66. package/lib/simple/utils.js +1 -1
  67. package/lib/types/domain/Phone/WebRTCPhone.d.ts +1 -1
  68. package/lib/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
  69. package/lib/types/domain/types.d.ts +80 -0
  70. package/lib/types/domain/types.d.ts.map +1 -1
  71. package/lib/types/index.d.ts +1 -0
  72. package/lib/types/index.d.ts.map +1 -1
  73. package/lib/types/service/getApiClient.d.ts.map +1 -1
  74. package/lib/types/simple/Auth.d.ts +51 -1
  75. package/lib/types/simple/Auth.d.ts.map +1 -1
  76. package/lib/types/simple/Configuration.d.ts +5 -1
  77. package/lib/types/simple/Configuration.d.ts.map +1 -1
  78. package/lib/types/simple/Directory.d.ts +5 -1
  79. package/lib/types/simple/Directory.d.ts.map +1 -1
  80. package/lib/types/simple/Phone.d.ts +117 -1
  81. package/lib/types/simple/Phone.d.ts.map +1 -1
  82. package/lib/types/simple/Websocket.d.ts +19 -1
  83. package/lib/types/simple/Websocket.d.ts.map +1 -1
  84. package/lib/types/simple/__tests__/Auth.test.d.ts +2 -0
  85. package/lib/types/simple/__tests__/Auth.test.d.ts.map +1 -0
  86. package/lib/types/simple/index.d.ts +5 -5
  87. package/lib/types/simple/index.d.ts.map +1 -1
  88. package/lib/types/simple/room/Participant.d.ts.map +1 -1
  89. package/lib/types/simple/room/Room.d.ts +11 -11
  90. package/lib/types/simple/room/Room.d.ts.map +1 -1
  91. package/lib/types/simple/room/SipRoom.d.ts +1 -1
  92. package/lib/types/utils/array.d.ts.map +1 -1
  93. package/lib/types/web-rtc-client.d.ts +1 -1
  94. package/lib/types/web-rtc-client.d.ts.map +1 -1
  95. package/lib/types/websocket-client.d.ts +6 -6
  96. package/lib/types/websocket-client.d.ts.map +1 -1
  97. package/lib/utils/__tests__/api-requester.test.js +19 -15
  98. package/lib/utils/api-requester.js +2 -2
  99. package/lib/web-rtc-client.js +25 -27
  100. package/lib/websocket-client.js +1 -1
  101. package/package.json +23 -20
  102. package/src/__tests__/api-client.test.ts +15 -5
  103. package/src/domain/Phone/WebRTCPhone.ts +9 -8
  104. package/src/domain/types.ts +9 -0
  105. package/src/index.ts +1 -0
  106. package/src/service/__tests__/IssueReporter.test.ts +5 -1
  107. package/src/simple/Auth.ts +25 -6
  108. package/src/simple/Configuration.ts +5 -4
  109. package/src/simple/Directory.ts +2 -1
  110. package/src/simple/Phone.ts +2 -1
  111. package/src/simple/Websocket.ts +4 -2
  112. package/src/simple/__tests__/Auth.test.ts +123 -0
  113. package/src/simple/index.ts +1 -0
  114. package/src/simple/room/Participant.ts +3 -1
  115. package/src/simple/room/Room.ts +4 -3
  116. package/src/types/global.d.ts +11 -5
  117. package/src/utils/__tests__/api-requester.test.ts +20 -16
  118. package/src/web-rtc-client.ts +3 -1
  119. package/src/websocket-client.ts +2 -2
@@ -87,7 +87,9 @@ client.setToken(token);
87
87
  describe('With correct API results', () => {
88
88
  beforeEach(() => {
89
89
  jest.resetModules();
90
- global.fetch = jest.fn(() => Promise.resolve(mockedJson));
90
+ Object.defineProperty(global, 'fetch', {
91
+ value: jest.fn(() => Promise.resolve(mockedJson)),
92
+ });
91
93
  });
92
94
  describe('logIn test', () => {
93
95
  it('should retrieve user token', () => __awaiter(void 0, void 0, void 0, function* () {
@@ -131,7 +133,9 @@ describe('With correct API results', () => {
131
133
  describe('With unAuthorized API results', () => {
132
134
  beforeEach(() => {
133
135
  jest.resetModules();
134
- global.fetch = jest.fn(() => Promise.resolve(mockedUnAuthorized));
136
+ Object.defineProperty(global, 'fetch', {
137
+ value: jest.fn(() => Promise.resolve(mockedUnAuthorized)),
138
+ });
135
139
  });
136
140
  describe('checkLogin test', () => {
137
141
  it('should return false on 401 status', () => __awaiter(void 0, void 0, void 0, function* () {
@@ -151,7 +155,9 @@ describe('With unAuthorized API results', () => {
151
155
  describe('With not found API results', () => {
152
156
  beforeEach(() => {
153
157
  jest.resetModules();
154
- global.fetch = jest.fn(() => Promise.resolve(mockedNotFound));
158
+ Object.defineProperty(global, 'fetch', {
159
+ value: jest.fn(() => Promise.resolve(mockedNotFound)),
160
+ });
155
161
  });
156
162
  describe('fetchVoicemail test', () => {
157
163
  it('should throw a BadResponse instance on 404 status', () => __awaiter(void 0, void 0, void 0, function* () {
@@ -183,7 +189,9 @@ describe('With not found API results', () => {
183
189
  describe('With erroneous text API results', () => {
184
190
  beforeEach(() => {
185
191
  jest.resetModules();
186
- global.fetch = jest.fn(() => Promise.resolve(mockedTextError));
192
+ Object.defineProperty(global, 'fetch', {
193
+ value: jest.fn(() => Promise.resolve(mockedTextError)),
194
+ });
187
195
  });
188
196
  it('throw an exception when the response is >= 500', () => __awaiter(void 0, void 0, void 0, function* () {
189
197
  let error = null;
@@ -205,7 +213,9 @@ describe('With erroneous text API results', () => {
205
213
  describe('With erroneous json API results', () => {
206
214
  beforeEach(() => {
207
215
  jest.resetModules();
208
- global.fetch = jest.fn(() => Promise.resolve(mockedJsonError));
216
+ Object.defineProperty(global, 'fetch', {
217
+ value: jest.fn(() => Promise.resolve(mockedJsonError)),
218
+ });
209
219
  });
210
220
  it('throw an exception when the response is >= 500', () => __awaiter(void 0, void 0, void 0, function* () {
211
221
  let error = null;
@@ -23,8 +23,8 @@ class Checker {
23
23
  this.externalAppConfig = externalAppConfig;
24
24
  this.checks = [...index_1.default];
25
25
  }
26
- check(onCheckBegin = () => { }, onCheckResult = () => { }) {
27
- return __awaiter(this, void 0, void 0, function* () {
26
+ check() {
27
+ return __awaiter(this, arguments, void 0, function* (onCheckBegin = () => { }, onCheckResult = () => { }) {
28
28
  yield this._addEngineVersion();
29
29
  logger.info('Engine check starting');
30
30
  for (let i = 0; i < this.checks.length; i++) {
@@ -118,8 +118,8 @@ class WebRTCPhone extends Emitter_1.default {
118
118
  isWebRTC() {
119
119
  return true;
120
120
  }
121
- sendReinvite(callSession, constraints = null, conference = false, audioOnly = false, iceRestart = false) {
122
- return __awaiter(this, void 0, void 0, function* () {
121
+ sendReinvite(callSession_1) {
122
+ return __awaiter(this, arguments, void 0, function* (callSession, constraints = null, conference = false, audioOnly = false, iceRestart = false) {
123
123
  const sipSession = this.findSipSession(callSession);
124
124
  logger.info('WebRTC phone - send reinvite', {
125
125
  sessionId: sipSession ? sipSession.id : null,
@@ -394,8 +394,8 @@ class WebRTCPhone extends Emitter_1.default {
394
394
  return screenShareStream;
395
395
  });
396
396
  }
397
- stopScreenSharing(restoreLocalStream = true, callSession) {
398
- return __awaiter(this, void 0, void 0, function* () {
397
+ stopScreenSharing() {
398
+ return __awaiter(this, arguments, void 0, function* (restoreLocalStream = true, callSession) {
399
399
  if (!this.currentScreenShare) {
400
400
  return;
401
401
  }
@@ -792,8 +792,8 @@ class WebRTCPhone extends Emitter_1.default {
792
792
  }
793
793
  return promise;
794
794
  }
795
- holdSipSession(sipSession, callSession, withEvent = true) {
796
- return __awaiter(this, void 0, void 0, function* () {
795
+ holdSipSession(sipSession_1, callSession_1) {
796
+ return __awaiter(this, arguments, void 0, function* (sipSession, callSession, withEvent = true) {
797
797
  if (!sipSession) {
798
798
  return new Promise((resolve, reject) => reject(new Error('No session to hold')));
799
799
  }
@@ -820,8 +820,8 @@ class WebRTCPhone extends Emitter_1.default {
820
820
  return promise;
821
821
  });
822
822
  }
823
- unholdSipSession(sipSession, callSession, withEvent = true) {
824
- return __awaiter(this, void 0, void 0, function* () {
823
+ unholdSipSession(sipSession_1, callSession_1) {
824
+ return __awaiter(this, arguments, void 0, function* (sipSession, callSession, withEvent = true) {
825
825
  if (!sipSession) {
826
826
  return new Promise((resolve, reject) => reject(new Error('No session to unhold')));
827
827
  }
@@ -956,14 +956,15 @@ 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) {
960
- return __awaiter(this, void 0, void 0, function* () {
959
+ makeCall(number_1, line_1, cameraEnabled_1) {
960
+ return __awaiter(this, arguments, void 0, function* (number, line, cameraEnabled, audioOnly = false, conference = false, options = {}) {
961
961
  logger.info('make WebRTC call', {
962
962
  number,
963
963
  lineId: line ? line.id : null,
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) {
@@ -1117,8 +1118,8 @@ class WebRTCPhone extends Emitter_1.default {
1117
1118
  }
1118
1119
  return this.client && this.client.isConference(callSession.sipCallId);
1119
1120
  }
1120
- close(force = false) {
1121
- return __awaiter(this, void 0, void 0, function* () {
1121
+ close() {
1122
+ return __awaiter(this, arguments, void 0, function* (force = false) {
1122
1123
  logger.info('WebRTC close');
1123
1124
  try {
1124
1125
  yield Promise.race([
@@ -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', {
@@ -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);
@@ -20,8 +20,8 @@ class CallApi {
20
20
  return (0, getApiClient_1.default)().callLogd.listCallLogs(offset, limit);
21
21
  });
22
22
  }
23
- static fetchDistinctCallLogs(offset, limit, distinct = 'peer_exten') {
24
- return __awaiter(this, void 0, void 0, function* () {
23
+ static fetchDistinctCallLogs(offset_1, limit_1) {
24
+ return __awaiter(this, arguments, void 0, function* (offset, limit, distinct = 'peer_exten') {
25
25
  return (0, getApiClient_1.default)().callLogd.listDistinctCallLogs(offset, limit, distinct);
26
26
  });
27
27
  }
@@ -56,8 +56,8 @@ class CallApi {
56
56
  return (0, getApiClient_1.default)().calld.cancelCall(callSession.callId);
57
57
  });
58
58
  }
59
- static makeCall(callFromLine, extension, isMobile = false, callbackAllLines = false) {
60
- return __awaiter(this, void 0, void 0, function* () {
59
+ static makeCall(callFromLine_1, extension_1) {
60
+ return __awaiter(this, arguments, void 0, function* (callFromLine, extension, isMobile = false, callbackAllLines = false) {
61
61
  const lineId = callFromLine ? callFromLine.id : null;
62
62
  const response = yield (0, getApiClient_1.default)().calld.makeCall(extension, isMobile, lineId, callbackAllLines);
63
63
  return Call_1.default.parse(response);
@@ -22,7 +22,11 @@ describe('IssueReporter', () => {
22
22
  });
23
23
  beforeEach(() => {
24
24
  jest.resetAllMocks();
25
- jest.spyOn(global, 'fetch');
25
+ Object.defineProperty(global, 'fetch', {
26
+ value: jest.fn(() => ({
27
+ catch: () => { },
28
+ })),
29
+ });
26
30
  });
27
31
  afterAll(() => {
28
32
  console.log = oldLog;
@@ -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
  }
@@ -172,9 +176,9 @@ class Auth {
172
176
  return (0, getApiClient_1.default)().auth.refreshToken(refreshToken, '', this.expiration);
173
177
  });
174
178
  }
175
- logout(deleteRefreshToken = true) {
176
- var _a;
177
- return __awaiter(this, void 0, void 0, function* () {
179
+ logout() {
180
+ return __awaiter(this, arguments, void 0, function* (deleteRefreshToken = true) {
181
+ var _a;
178
182
  try {
179
183
  index_1.default.Websocket.close(true);
180
184
  if (this.clientId && deleteRefreshToken) {
@@ -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
  }
@@ -294,8 +302,8 @@ class Auth {
294
302
  (0, getApiClient_1.setFetchOptions)(Object.assign(Object.assign({}, (0, getApiClient_1.getFetchOptions)()), { headers }));
295
303
  }
296
304
  checkHttpUserUuidHeader(uuid) {
297
- var _a;
298
305
  return __awaiter(this, void 0, void 0, function* () {
306
+ var _a;
299
307
  logger.info('Checking user uuid http header', { uuid });
300
308
  if (!uuid) {
301
309
  return;
@@ -316,11 +324,15 @@ 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) {
322
- var _a;
323
334
  return __awaiter(this, void 0, void 0, function* () {
335
+ var _a;
324
336
  if (this.authenticated && this.session) {
325
337
  return this.session;
326
338
  }
@@ -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;
@@ -58,8 +59,8 @@ class Phone extends Emitter_1.default {
58
59
  });
59
60
  this.SessionState = session_state_1.SessionState;
60
61
  }
61
- connect(rawOptions = {}, sipLine = null) {
62
- return __awaiter(this, void 0, void 0, function* () {
62
+ connect() {
63
+ return __awaiter(this, arguments, void 0, function* (rawOptions = {}, sipLine = null) {
63
64
  const options = rawOptions;
64
65
  if (this.phone) {
65
66
  // Already connected
@@ -119,8 +120,8 @@ class Phone extends Emitter_1.default {
119
120
  });
120
121
  }
121
122
  // If audioOnly is set to true, all video stream will be deactivated, even remotes ones.
122
- call(extension, withCamera = false, rawSipLine = null, audioOnly = false, conference = false) {
123
- return __awaiter(this, void 0, void 0, function* () {
123
+ call(extension_1) {
124
+ return __awaiter(this, arguments, void 0, function* (extension, withCamera = false, rawSipLine = null, audioOnly = false, conference = false) {
124
125
  if (!this.phone) {
125
126
  return;
126
127
  }
@@ -195,14 +196,14 @@ class Phone extends Emitter_1.default {
195
196
  return (_a = this.phone) === null || _a === void 0 ? void 0 : _a.hold(callSession, true);
196
197
  }
197
198
  unhold(callSession) {
198
- var _a;
199
199
  return __awaiter(this, void 0, void 0, function* () {
200
+ var _a;
200
201
  return (_a = this.phone) === null || _a === void 0 ? void 0 : _a.unhold(callSession, true);
201
202
  });
202
203
  }
203
204
  resume(callSession) {
204
- var _a;
205
205
  return __awaiter(this, void 0, void 0, function* () {
206
+ var _a;
206
207
  return ((_a = this.phone) === null || _a === void 0 ? void 0 : _a.resume(callSession)) || null;
207
208
  });
208
209
  }
@@ -218,8 +219,8 @@ class Phone extends Emitter_1.default {
218
219
  var _a;
219
220
  return ((_a = this.phone) === null || _a === void 0 ? void 0 : _a.atxfer(callSession)) || null;
220
221
  }
221
- reinvite(callSession, constraints = null, conference = false) {
222
- return __awaiter(this, void 0, void 0, function* () {
222
+ reinvite(callSession_1) {
223
+ return __awaiter(this, arguments, void 0, function* (callSession, constraints = null, conference = false) {
223
224
  return this.phone ? this.phone.sendReinvite(callSession, constraints, conference) : null;
224
225
  });
225
226
  }
@@ -268,8 +269,8 @@ class Phone extends Emitter_1.default {
268
269
  (_a = this.phone) === null || _a === void 0 ? void 0 : _a.turnCameraOn(callSession);
269
270
  }
270
271
  startScreenSharing(constraints, callSession) {
271
- var _a;
272
272
  return __awaiter(this, void 0, void 0, function* () {
273
+ var _a;
273
274
  return ((_a = this.phone) === null || _a === void 0 ? void 0 : _a.startScreenSharing(constraints, callSession)) || null;
274
275
  });
275
276
  }
@@ -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"));