@wazo/sdk 0.37.20 → 0.37.24
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 +6 -6
- package/esm/__tests__/api-client.test.js +91 -21
- package/esm/__tests__/web-rtc-client.test.js +214 -165
- package/esm/api/agentd.js +25 -2
- package/esm/api/amid.js +26 -3
- package/esm/api/application.js +25 -2
- package/esm/api/auth.js +25 -2
- package/esm/api/call-logd.js +34 -4
- package/esm/api/calld.js +35 -2
- package/esm/api/chatd.js +32 -2
- package/esm/api/confd.js +56 -9
- package/esm/api/ctid-ng.js +38 -5
- package/esm/api/dird.js +29 -3
- package/esm/api/webhookd.js +26 -3
- package/esm/api-client.js +91 -21
- package/esm/checker/Checker.js +241 -190
- package/esm/checker/checks/aor.js +91 -21
- package/esm/checker/checks/api.js +91 -21
- package/esm/checker/checks/index.js +231 -180
- package/esm/checker/checks/wazo-websocket.js +42 -17
- package/esm/checker/checks/webrtc-transport.js +214 -165
- package/esm/checker/checks/webrtc.js +214 -165
- package/esm/domain/AdHocAPIConference.js +91 -21
- package/esm/domain/Call.js +3 -0
- package/esm/domain/CallLog.js +8 -1
- package/esm/domain/ChatMessage.js +4 -0
- package/esm/domain/ChatRoom.js +3 -0
- package/esm/domain/Contact.js +4 -1
- package/esm/domain/Features.js +91 -21
- package/esm/domain/Meeting.js +28 -5
- package/esm/domain/Phone/CTIPhone.js +109 -35
- package/esm/domain/Phone/WebRTCPhone.js +159 -102
- package/esm/domain/Recording.js +3 -0
- package/esm/domain/Voicemail.js +3 -0
- package/esm/domain/__tests__/Call.test.js +3 -0
- package/esm/domain/__tests__/CallLog.test.js +8 -1
- package/esm/domain/__tests__/Contact.test.js +4 -1
- package/esm/domain/__tests__/Meeting.test.js +144 -0
- package/esm/domain/__tests__/Voicemail.test.js +3 -0
- package/esm/index.js +509 -414
- package/esm/lib/WazoSessionDescriptionHandler.js +26 -41
- package/esm/service/CallApi.js +91 -21
- package/esm/service/IssueReporter.js +26 -3
- package/esm/service/__tests__/IssueReporter.test.js +26 -3
- package/esm/service/getApiClient.js +91 -21
- package/esm/simple/Auth.js +499 -404
- package/esm/simple/Configuration.js +499 -404
- package/esm/simple/Directory.js +91 -21
- package/esm/simple/Phone.js +499 -404
- package/esm/simple/Websocket.js +45 -19
- package/esm/simple/index.js +503 -408
- package/esm/simple/room/LocalParticipant.js +503 -408
- package/esm/simple/room/Participant.js +503 -408
- package/esm/simple/room/RemoteParticipant.js +503 -408
- package/esm/simple/room/Room.js +504 -409
- package/esm/simple/room/SipRoom.js +503 -408
- package/esm/simple/room/Stream.js +503 -408
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +503 -408
- package/esm/simple/utils.js +503 -408
- package/esm/types/WebSocketMessage.js +1 -1
- package/esm/utils/__tests__/api-requester.test.js +25 -2
- package/esm/utils/api-requester.js +25 -2
- package/esm/web-rtc-client.js +214 -165
- package/esm/websocket-client.js +43 -18
- package/lib/__tests__/api-client.test.js +91 -21
- package/lib/__tests__/web-rtc-client.test.js +214 -165
- package/lib/api/agentd.js +25 -2
- package/lib/api/amid.js +26 -3
- package/lib/api/application.js +25 -2
- package/lib/api/auth.js +25 -2
- package/lib/api/call-logd.js +34 -4
- package/lib/api/calld.js +35 -2
- package/lib/api/chatd.js +32 -2
- package/lib/api/confd.js +56 -9
- package/lib/api/ctid-ng.js +38 -5
- package/lib/api/dird.js +29 -3
- package/lib/api/webhookd.js +26 -3
- package/lib/api-client.js +91 -21
- package/lib/checker/Checker.js +241 -190
- package/lib/checker/checks/aor.js +91 -21
- package/lib/checker/checks/api.js +91 -21
- package/lib/checker/checks/index.js +231 -180
- package/lib/checker/checks/wazo-websocket.js +42 -17
- package/lib/checker/checks/webrtc-transport.js +214 -165
- package/lib/checker/checks/webrtc.js +214 -165
- package/lib/domain/AdHocAPIConference.js +91 -21
- package/lib/domain/Call.js +3 -0
- package/lib/domain/CallLog.js +8 -1
- package/lib/domain/ChatMessage.js +4 -0
- package/lib/domain/ChatRoom.js +3 -0
- package/lib/domain/Contact.js +4 -1
- package/lib/domain/Features.js +91 -21
- package/lib/domain/Meeting.js +32 -5
- package/lib/domain/Phone/CTIPhone.js +109 -35
- package/lib/domain/Phone/WebRTCPhone.js +159 -102
- package/lib/domain/Recording.js +3 -0
- package/lib/domain/Voicemail.js +3 -0
- package/lib/domain/__tests__/Call.test.js +3 -0
- package/lib/domain/__tests__/CallLog.test.js +8 -1
- package/lib/domain/__tests__/Contact.test.js +4 -1
- package/lib/domain/__tests__/Meeting.test.js +150 -0
- package/lib/domain/__tests__/Voicemail.test.js +3 -0
- package/lib/index.js +509 -414
- package/lib/lib/WazoSessionDescriptionHandler.js +26 -41
- package/lib/service/CallApi.js +91 -21
- package/lib/service/IssueReporter.js +26 -3
- package/lib/service/__tests__/IssueReporter.test.js +26 -3
- package/lib/service/getApiClient.js +91 -21
- package/lib/simple/Auth.js +499 -404
- package/lib/simple/Configuration.js +499 -404
- package/lib/simple/Directory.js +91 -21
- package/lib/simple/Phone.js +499 -404
- package/lib/simple/Websocket.js +45 -19
- package/lib/simple/index.js +503 -408
- package/lib/simple/room/LocalParticipant.js +503 -408
- package/lib/simple/room/Participant.js +503 -408
- package/lib/simple/room/RemoteParticipant.js +503 -408
- package/lib/simple/room/Room.js +504 -409
- package/lib/simple/room/SipRoom.js +503 -408
- package/lib/simple/room/Stream.js +503 -408
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +503 -408
- package/lib/simple/utils.js +503 -408
- package/lib/types/WebSocketMessage.js +2 -0
- package/lib/utils/__tests__/api-requester.test.js +25 -2
- package/lib/utils/api-requester.js +25 -2
- package/lib/web-rtc-client.js +214 -165
- package/lib/websocket-client.js +43 -17
- package/package.json +1 -1
- package/src/api/confd.js +5 -2
- package/src/domain/Call.js +3 -0
- package/src/domain/CallLog.js +4 -0
- package/src/domain/ChatMessage.js +4 -0
- package/src/domain/ChatRoom.js +3 -0
- package/src/domain/Contact.js +3 -0
- package/src/domain/Meeting.js +28 -5
- package/src/domain/Phone/CTIPhone.js +4 -0
- package/src/domain/Phone/Phone.js +2 -0
- package/src/domain/Phone/WebRTCPhone.js +49 -15
- package/src/domain/Recording.js +3 -0
- package/src/domain/Voicemail.js +3 -0
- package/src/domain/__tests__/Meeting.test.js +50 -0
- package/src/lib/WazoSessionDescriptionHandler.js +1 -35
- package/src/service/IssueReporter.js +25 -2
- package/src/simple/Phone.js +5 -0
- package/src/types/WebSocketMessage.js +5 -1
- package/src/web-rtc-client.js +41 -24
- package/src/websocket-client.js +2 -0
package/esm/websocket-client.js
CHANGED
|
@@ -35,7 +35,7 @@ const isMobile = () => typeof navigator !== 'undefined' && navigator.product ===
|
|
|
35
35
|
|
|
36
36
|
/* */
|
|
37
37
|
|
|
38
|
-
IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
38
|
+
const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
39
39
|
|
|
40
40
|
// Use a function here to be able to mock it in tests
|
|
41
41
|
const realFetch = () => {
|
|
@@ -121,6 +121,7 @@ class IssueReporter {
|
|
|
121
121
|
|
|
122
122
|
|
|
123
123
|
|
|
124
|
+
|
|
124
125
|
|
|
125
126
|
constructor() {
|
|
126
127
|
addLevelsTo(this);
|
|
@@ -132,12 +133,17 @@ class IssueReporter {
|
|
|
132
133
|
this.bufferTimeout = null;
|
|
133
134
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
134
135
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
136
|
+
this._callback = null;
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
init() {
|
|
138
140
|
this._catchConsole();
|
|
139
141
|
}
|
|
140
142
|
|
|
143
|
+
setCallback(cb ) {
|
|
144
|
+
this._callback = cb;
|
|
145
|
+
}
|
|
146
|
+
|
|
141
147
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
142
148
|
this.remoteClientConfiguration = configuration;
|
|
143
149
|
}
|
|
@@ -173,6 +179,7 @@ class IssueReporter {
|
|
|
173
179
|
|
|
174
180
|
// Handle category label
|
|
175
181
|
let category = null;
|
|
182
|
+
let skipSendToRemote = false;
|
|
176
183
|
let extra = {};
|
|
177
184
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
178
185
|
category = args[0].split('=')[1];
|
|
@@ -188,6 +195,7 @@ class IssueReporter {
|
|
|
188
195
|
errorMessage: lastArg.message,
|
|
189
196
|
errorStack: lastArg.stack,
|
|
190
197
|
errorType: lastArg.constructor.name,
|
|
198
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
191
199
|
};
|
|
192
200
|
} else {
|
|
193
201
|
extra = lastArg;
|
|
@@ -196,6 +204,11 @@ class IssueReporter {
|
|
|
196
204
|
args.splice(1, 1);
|
|
197
205
|
}
|
|
198
206
|
|
|
207
|
+
if (extra.skipSendToRemote) {
|
|
208
|
+
skipSendToRemote = true;
|
|
209
|
+
delete extra.skipSendToRemote;
|
|
210
|
+
}
|
|
211
|
+
|
|
199
212
|
const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
200
213
|
const message = args.join(', ');
|
|
201
214
|
let consoleMessage = message;
|
|
@@ -216,7 +229,13 @@ class IssueReporter {
|
|
|
216
229
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
217
230
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
218
231
|
|
|
219
|
-
this.
|
|
232
|
+
if (this._callback) {
|
|
233
|
+
this._callback(level, consoleMessage);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (!skipSendToRemote) {
|
|
237
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
238
|
+
}
|
|
220
239
|
}
|
|
221
240
|
|
|
222
241
|
logRequest(url , options , response , start ) {
|
|
@@ -361,7 +380,11 @@ class IssueReporter {
|
|
|
361
380
|
},
|
|
362
381
|
// $FlowFixMe
|
|
363
382
|
body,
|
|
364
|
-
}).catch(() => {
|
|
383
|
+
}).catch((e ) => {
|
|
384
|
+
// $FlowFixMe
|
|
385
|
+
e.skipSendToRemote = true;
|
|
386
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
387
|
+
|
|
365
388
|
setTimeout(() => {
|
|
366
389
|
if (isArray) {
|
|
367
390
|
payload = payload.map(message => {
|
|
@@ -578,6 +601,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
578
601
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
579
602
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
580
603
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
604
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
581
605
|
|
|
582
606
|
const BLACKLIST_EVENTS = [
|
|
583
607
|
CHAT_MESSAGE_SENT,
|
|
@@ -587,7 +611,7 @@ const BLACKLIST_EVENTS = [
|
|
|
587
611
|
];
|
|
588
612
|
|
|
589
613
|
const HEARTBEAT_ENGINE_VERSION = '20.09';
|
|
590
|
-
const logger = IssueReporter$1.loggerFor('wazo-ws');
|
|
614
|
+
const logger$1 = IssueReporter$1.loggerFor('wazo-ws');
|
|
591
615
|
const messageLogger = IssueReporter$1.loggerFor('wazo-ws-message');
|
|
592
616
|
|
|
593
617
|
class WebSocketClient extends Emitter {
|
|
@@ -636,19 +660,19 @@ class WebSocketClient extends Emitter {
|
|
|
636
660
|
}
|
|
637
661
|
|
|
638
662
|
connect() {
|
|
639
|
-
logger.info('connect method started', { host: this.host, token: this.token });
|
|
663
|
+
logger$1.info('connect method started', { host: this.host, token: this.token });
|
|
640
664
|
this.socket = new ReconnectingWebSocket(this._getUrl.bind(this), [], this.options);
|
|
641
665
|
if (this.options.binaryType) {
|
|
642
666
|
this.socket.binaryType = this.options.binaryType;
|
|
643
667
|
}
|
|
644
668
|
|
|
645
669
|
this.socket.onopen = () => {
|
|
646
|
-
logger.info('on Wazo WS open', { method: 'connect', host: this.host });
|
|
670
|
+
logger$1.info('on Wazo WS open', { method: 'connect', host: this.host });
|
|
647
671
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_OPEN);
|
|
648
672
|
};
|
|
649
673
|
|
|
650
674
|
this.socket.onerror = event => {
|
|
651
|
-
logger.error('on Wazo WS error', event.target);
|
|
675
|
+
logger$1.error('on Wazo WS error', event.target);
|
|
652
676
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_ERROR, event);
|
|
653
677
|
};
|
|
654
678
|
|
|
@@ -678,7 +702,7 @@ class WebSocketClient extends Emitter {
|
|
|
678
702
|
|
|
679
703
|
this.socket.onclose = event => {
|
|
680
704
|
// Can't be converted to JSON (circular structure)
|
|
681
|
-
logger.info('on Wazo WS close', {
|
|
705
|
+
logger$1.info('on Wazo WS close', {
|
|
682
706
|
reason: event.reason,
|
|
683
707
|
code: event.code,
|
|
684
708
|
readyState: event.target.readyState,
|
|
@@ -696,12 +720,12 @@ class WebSocketClient extends Emitter {
|
|
|
696
720
|
};
|
|
697
721
|
|
|
698
722
|
this.socket.onerror = event => {
|
|
699
|
-
logger.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
|
|
723
|
+
logger$1.info('Wazo WS error', { message: event.message, code: event.code, readyState: event.target.readyState });
|
|
700
724
|
};
|
|
701
725
|
}
|
|
702
726
|
|
|
703
727
|
close(force = false) {
|
|
704
|
-
logger.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
|
|
728
|
+
logger$1.info('Wazo WS close', { socket: !!this.socket, host: this.host, token: this.token });
|
|
705
729
|
|
|
706
730
|
if (!this.socket) {
|
|
707
731
|
return;
|
|
@@ -719,7 +743,7 @@ class WebSocketClient extends Emitter {
|
|
|
719
743
|
|
|
720
744
|
updateToken(token ) {
|
|
721
745
|
this.token = token;
|
|
722
|
-
logger.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
|
|
746
|
+
logger$1.info('Wazo WS updating token', { url: this._getUrl(), token, socket: !!this.socket });
|
|
723
747
|
|
|
724
748
|
if (this.socket) {
|
|
725
749
|
// If still connected, send the token to the WS
|
|
@@ -737,7 +761,7 @@ class WebSocketClient extends Emitter {
|
|
|
737
761
|
}
|
|
738
762
|
|
|
739
763
|
startHeartbeat() {
|
|
740
|
-
logger.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
|
|
764
|
+
logger$1.info('Wazo WS start heartbeat', { host: this.host, token: this.token });
|
|
741
765
|
|
|
742
766
|
if (!this.socket) {
|
|
743
767
|
this.heartbeat.stop();
|
|
@@ -751,7 +775,7 @@ class WebSocketClient extends Emitter {
|
|
|
751
775
|
}
|
|
752
776
|
|
|
753
777
|
stopHeartbeat() {
|
|
754
|
-
logger.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
|
|
778
|
+
logger$1.info('Wazo WS stop heartbeat', { host: this.host, token: this.token });
|
|
755
779
|
|
|
756
780
|
this.heartbeat.stop();
|
|
757
781
|
}
|
|
@@ -781,7 +805,7 @@ class WebSocketClient extends Emitter {
|
|
|
781
805
|
}
|
|
782
806
|
|
|
783
807
|
reconnect(reason ) {
|
|
784
|
-
logger.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
|
|
808
|
+
logger$1.info('Wazo WS reconnect', { reason, socket: !!this.socket, host: this.host, token: this.token });
|
|
785
809
|
if (!this.socket) {
|
|
786
810
|
return;
|
|
787
811
|
}
|
|
@@ -837,7 +861,7 @@ class WebSocketClient extends Emitter {
|
|
|
837
861
|
this.close();
|
|
838
862
|
}
|
|
839
863
|
const url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
|
|
840
|
-
logger.log('Wazo WS url computed to reconnect', { url });
|
|
864
|
+
logger$1.log('Wazo WS url computed to reconnect', { url });
|
|
841
865
|
|
|
842
866
|
return url;
|
|
843
867
|
}
|
|
@@ -845,12 +869,12 @@ class WebSocketClient extends Emitter {
|
|
|
845
869
|
_onHeartbeat(message ) {
|
|
846
870
|
if (message.payload === 'pong') {
|
|
847
871
|
this.heartbeat.onHeartbeat();
|
|
848
|
-
logger.log('on heartbeat received from Wazo WS');
|
|
872
|
+
logger$1.log('on heartbeat received from Wazo WS');
|
|
849
873
|
}
|
|
850
874
|
}
|
|
851
875
|
|
|
852
876
|
async _onHeartbeatTimeout() {
|
|
853
|
-
logger.log('heartbeat timed out', { host: this.host, token: this.token });
|
|
877
|
+
logger$1.log('heartbeat timed out', { host: this.host, token: this.token });
|
|
854
878
|
|
|
855
879
|
this.close();
|
|
856
880
|
this.eventEmitter.emit(SOCKET_EVENTS.ON_CLOSE, new Error('Websocket ping failure.'));
|
|
@@ -928,7 +952,8 @@ WebSocketClient.eventLists = [
|
|
|
928
952
|
AGENT_UNPAUSED,
|
|
929
953
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
930
954
|
CONFERENCE_ADHOC_DELETED,
|
|
955
|
+
MEETING_USER_PROGRESS,
|
|
931
956
|
];
|
|
932
957
|
|
|
933
958
|
export default WebSocketClient;
|
|
934
|
-
export { AGENT_PAUSED, AGENT_STATUS_UPDATE, AGENT_UNPAUSED, APPLICATION_CALL_ANSWERED, APPLICATION_CALL_DELETED, APPLICATION_CALL_DTMF_RECEIVED, APPLICATION_CALL_ENTERED, APPLICATION_CALL_INITIATED, APPLICATION_CALL_UPDATED, APPLICATION_DESTINATION_NODE_CREATED, APPLICATION_NODE_CREATED, APPLICATION_NODE_DELETED, APPLICATION_NODE_UPDATED, APPLICATION_PLAYBACK_CREATED, APPLICATION_PLAYBACK_DELETED, APPLICATION_PROGRESS_STARTED, APPLICATION_PROGRESS_STOPPED, APPLICATION_SNOOP_CREATED, APPLICATION_SNOOP_DELETED, APPLICATION_SNOOP_UPDATED, APPLICATION_USER_OUTGOING_CALL_CREATED, AUTH_SESSION_EXPIRE_SOON, AUTH_USER_EXTERNAL_AUTH_ADDED, AUTH_USER_EXTERNAL_AUTH_DELETED, CALL_ANSWERED, CALL_CREATED, CALL_DTMF_CREATED, CALL_ENDED, CALL_HELD, CALL_LOG_USER_CREATED, CALL_RESUMED, CALL_UPDATED, CHATD_PRESENCE_UPDATED, CHATD_USER_ROOM_CREATED, CHATD_USER_ROOM_MESSAGE_CREATED, CHAT_MESSAGE_RECEIVED, CHAT_MESSAGE_SENT, CONFERENCE_ADHOC_DELETED, CONFERENCE_ADHOC_PARTICIPANT_LEFT, CONFERENCE_USER_PARTICIPANT_JOINED, CONFERENCE_USER_PARTICIPANT_LEFT, CONFERENCE_USER_PARTICIPANT_TALK_STARTED, CONFERENCE_USER_PARTICIPANT_TALK_STOPPED, ENDPOINT_STATUS_UPDATE, FAVORITE_ADDED, FAVORITE_DELETED, FAX_OUTBOUND_USER_CREATED, FAX_OUTBOUND_USER_FAILED, FAX_OUTBOUND_USER_SUCCEEDED, HEARTBEAT_ENGINE_VERSION, LINE_STATUS_UPDATED, MEETING_USER_PARTICIPANT_JOINED, MEETING_USER_PARTICIPANT_LEFT, SOCKET_EVENTS, SWITCHBOARD_HELD_CALLS_UPDATED, SWITCHBOARD_HELD_CALL_ANSWERED, SWITCHBOARD_QUEUED_CALLS_UPDATED, SWITCHBOARD_QUEUED_CALL_ANSWERED, TRUNK_STATUS_UPDATED, USERS_FORWARDS_BUSY_UPDATED, USERS_FORWARDS_NOANSWER_UPDATED, USERS_FORWARDS_UNCONDITIONAL_UPDATED, USERS_SERVICES_DND_UPDATED, USER_STATUS_UPDATE, USER_VOICEMAIL_MESSAGE_CREATED, USER_VOICEMAIL_MESSAGE_DELETED, USER_VOICEMAIL_MESSAGE_UPDATED };
|
|
959
|
+
export { AGENT_PAUSED, AGENT_STATUS_UPDATE, AGENT_UNPAUSED, APPLICATION_CALL_ANSWERED, APPLICATION_CALL_DELETED, APPLICATION_CALL_DTMF_RECEIVED, APPLICATION_CALL_ENTERED, APPLICATION_CALL_INITIATED, APPLICATION_CALL_UPDATED, APPLICATION_DESTINATION_NODE_CREATED, APPLICATION_NODE_CREATED, APPLICATION_NODE_DELETED, APPLICATION_NODE_UPDATED, APPLICATION_PLAYBACK_CREATED, APPLICATION_PLAYBACK_DELETED, APPLICATION_PROGRESS_STARTED, APPLICATION_PROGRESS_STOPPED, APPLICATION_SNOOP_CREATED, APPLICATION_SNOOP_DELETED, APPLICATION_SNOOP_UPDATED, APPLICATION_USER_OUTGOING_CALL_CREATED, AUTH_SESSION_EXPIRE_SOON, AUTH_USER_EXTERNAL_AUTH_ADDED, AUTH_USER_EXTERNAL_AUTH_DELETED, CALL_ANSWERED, CALL_CREATED, CALL_DTMF_CREATED, CALL_ENDED, CALL_HELD, CALL_LOG_USER_CREATED, CALL_RESUMED, CALL_UPDATED, CHATD_PRESENCE_UPDATED, CHATD_USER_ROOM_CREATED, CHATD_USER_ROOM_MESSAGE_CREATED, CHAT_MESSAGE_RECEIVED, CHAT_MESSAGE_SENT, CONFERENCE_ADHOC_DELETED, CONFERENCE_ADHOC_PARTICIPANT_LEFT, CONFERENCE_USER_PARTICIPANT_JOINED, CONFERENCE_USER_PARTICIPANT_LEFT, CONFERENCE_USER_PARTICIPANT_TALK_STARTED, CONFERENCE_USER_PARTICIPANT_TALK_STOPPED, ENDPOINT_STATUS_UPDATE, FAVORITE_ADDED, FAVORITE_DELETED, FAX_OUTBOUND_USER_CREATED, FAX_OUTBOUND_USER_FAILED, FAX_OUTBOUND_USER_SUCCEEDED, HEARTBEAT_ENGINE_VERSION, LINE_STATUS_UPDATED, MEETING_USER_PARTICIPANT_JOINED, MEETING_USER_PARTICIPANT_LEFT, MEETING_USER_PROGRESS, SOCKET_EVENTS, SWITCHBOARD_HELD_CALLS_UPDATED, SWITCHBOARD_HELD_CALL_ANSWERED, SWITCHBOARD_QUEUED_CALLS_UPDATED, SWITCHBOARD_QUEUED_CALL_ANSWERED, TRUNK_STATUS_UPDATED, USERS_FORWARDS_BUSY_UPDATED, USERS_FORWARDS_NOANSWER_UPDATED, USERS_FORWARDS_UNCONDITIONAL_UPDATED, USERS_SERVICES_DND_UPDATED, USER_STATUS_UPDATE, USER_VOICEMAIL_MESSAGE_CREATED, USER_VOICEMAIL_MESSAGE_DELETED, USER_VOICEMAIL_MESSAGE_UPDATED };
|
|
@@ -136,6 +136,7 @@ class IssueReporter {
|
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
|
|
139
|
+
|
|
139
140
|
|
|
140
141
|
constructor() {
|
|
141
142
|
addLevelsTo(this);
|
|
@@ -147,12 +148,17 @@ class IssueReporter {
|
|
|
147
148
|
this.bufferTimeout = null;
|
|
148
149
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
149
150
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
151
|
+
this._callback = null;
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
init() {
|
|
153
155
|
this._catchConsole();
|
|
154
156
|
}
|
|
155
157
|
|
|
158
|
+
setCallback(cb ) {
|
|
159
|
+
this._callback = cb;
|
|
160
|
+
}
|
|
161
|
+
|
|
156
162
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
157
163
|
this.remoteClientConfiguration = configuration;
|
|
158
164
|
}
|
|
@@ -188,6 +194,7 @@ class IssueReporter {
|
|
|
188
194
|
|
|
189
195
|
// Handle category label
|
|
190
196
|
let category = null;
|
|
197
|
+
let skipSendToRemote = false;
|
|
191
198
|
let extra = {};
|
|
192
199
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
193
200
|
category = args[0].split('=')[1];
|
|
@@ -203,6 +210,7 @@ class IssueReporter {
|
|
|
203
210
|
errorMessage: lastArg.message,
|
|
204
211
|
errorStack: lastArg.stack,
|
|
205
212
|
errorType: lastArg.constructor.name,
|
|
213
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
206
214
|
};
|
|
207
215
|
} else {
|
|
208
216
|
extra = lastArg;
|
|
@@ -211,6 +219,11 @@ class IssueReporter {
|
|
|
211
219
|
args.splice(1, 1);
|
|
212
220
|
}
|
|
213
221
|
|
|
222
|
+
if (extra.skipSendToRemote) {
|
|
223
|
+
skipSendToRemote = true;
|
|
224
|
+
delete extra.skipSendToRemote;
|
|
225
|
+
}
|
|
226
|
+
|
|
214
227
|
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
215
228
|
const message = args.join(', ');
|
|
216
229
|
let consoleMessage = message;
|
|
@@ -231,7 +244,13 @@ class IssueReporter {
|
|
|
231
244
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
232
245
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
233
246
|
|
|
234
|
-
this.
|
|
247
|
+
if (this._callback) {
|
|
248
|
+
this._callback(level, consoleMessage);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if (!skipSendToRemote) {
|
|
252
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
253
|
+
}
|
|
235
254
|
}
|
|
236
255
|
|
|
237
256
|
logRequest(url , options , response , start ) {
|
|
@@ -376,7 +395,11 @@ class IssueReporter {
|
|
|
376
395
|
},
|
|
377
396
|
// $FlowFixMe
|
|
378
397
|
body,
|
|
379
|
-
}).catch(() => {
|
|
398
|
+
}).catch((e ) => {
|
|
399
|
+
// $FlowFixMe
|
|
400
|
+
e.skipSendToRemote = true;
|
|
401
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
402
|
+
|
|
380
403
|
setTimeout(() => {
|
|
381
404
|
if (isArray) {
|
|
382
405
|
payload = payload.map(message => {
|
|
@@ -423,7 +446,7 @@ var IssueReporter$1 = new IssueReporter();
|
|
|
423
446
|
|
|
424
447
|
const methods = ['head', 'get', 'post', 'put', 'delete'];
|
|
425
448
|
|
|
426
|
-
const logger
|
|
449
|
+
const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
427
450
|
|
|
428
451
|
// Use a function here to be able to mock it in tests
|
|
429
452
|
const realFetch = () => {
|
|
@@ -562,7 +585,7 @@ class ApiRequester {
|
|
|
562
585
|
};
|
|
563
586
|
|
|
564
587
|
if (this.refreshTokenPromise) {
|
|
565
|
-
logger
|
|
588
|
+
logger.info('A token is already refreshing, waiting ...', { url });
|
|
566
589
|
await this.refreshTokenPromise;
|
|
567
590
|
}
|
|
568
591
|
|
|
@@ -582,7 +605,7 @@ class ApiRequester {
|
|
|
582
605
|
return promise.then(async (err ) => {
|
|
583
606
|
// Check if the token is still valid
|
|
584
607
|
if (firstCall && this._checkTokenExpired(response, err)) {
|
|
585
|
-
logger
|
|
608
|
+
logger.warn('token expired', { error: err.reason });
|
|
586
609
|
// Replay the call after refreshing the token
|
|
587
610
|
return this._replayWithNewToken(err, path, method, body, headers, parse);
|
|
588
611
|
}
|
|
@@ -592,7 +615,7 @@ class ApiRequester {
|
|
|
592
615
|
: exceptionClass.fromResponse(err, response.status);
|
|
593
616
|
|
|
594
617
|
if (this.shouldLogErrors) {
|
|
595
|
-
logger
|
|
618
|
+
logger.error('API error', error);
|
|
596
619
|
}
|
|
597
620
|
|
|
598
621
|
throw error;
|
|
@@ -602,7 +625,7 @@ class ApiRequester {
|
|
|
602
625
|
return newParse(response, isJson);
|
|
603
626
|
}).catch(error => {
|
|
604
627
|
if (this.shouldLogErrors) {
|
|
605
|
-
logger
|
|
628
|
+
logger.error('Fetch failed', { url, options, message: error.message, stack: error.stack });
|
|
606
629
|
}
|
|
607
630
|
|
|
608
631
|
throw error;
|
|
@@ -630,13 +653,13 @@ class ApiRequester {
|
|
|
630
653
|
) {
|
|
631
654
|
const isTokenNotFound = this._isTokenNotFound(err);
|
|
632
655
|
let newPath = path;
|
|
633
|
-
logger
|
|
656
|
+
logger.info('refreshing token', { inProgress: !!this.refreshTokenPromise });
|
|
634
657
|
|
|
635
658
|
this.refreshTokenPromise = this.refreshTokenPromise || this.refreshTokenCallback();
|
|
636
659
|
|
|
637
660
|
return this.refreshTokenPromise.then(() => {
|
|
638
661
|
this.refreshTokenPromise = null;
|
|
639
|
-
logger
|
|
662
|
+
logger.info('token refreshed', { isTokenNotFound });
|
|
640
663
|
if (isTokenNotFound) {
|
|
641
664
|
const pathParts = path.split('/');
|
|
642
665
|
pathParts.pop();
|
|
@@ -1514,6 +1537,9 @@ class Contact {
|
|
|
1514
1537
|
}
|
|
1515
1538
|
|
|
1516
1539
|
static parseMany(response ) {
|
|
1540
|
+
if (!response || !response.results) {
|
|
1541
|
+
return [];
|
|
1542
|
+
}
|
|
1517
1543
|
return response.results.map(r => Contact.parse(r, response.column_types));
|
|
1518
1544
|
}
|
|
1519
1545
|
|
|
@@ -2591,8 +2617,9 @@ class ExternalApp {
|
|
|
2591
2617
|
|
|
2592
2618
|
|
|
2593
2619
|
|
|
2594
|
-
|
|
2620
|
+
|
|
2595
2621
|
|
|
2622
|
+
|
|
2596
2623
|
|
|
2597
2624
|
|
|
2598
2625
|
class Meeting {
|
|
@@ -2603,9 +2630,10 @@ class Meeting {
|
|
|
2603
2630
|
|
|
2604
2631
|
|
|
2605
2632
|
|
|
2606
|
-
|
|
2633
|
+
|
|
2607
2634
|
|
|
2608
2635
|
|
|
2636
|
+
|
|
2609
2637
|
|
|
2610
2638
|
static parse(plain ) {
|
|
2611
2639
|
return new Meeting({
|
|
@@ -2615,24 +2643,43 @@ class Meeting {
|
|
|
2615
2643
|
ownerUuids: plain.owner_uuids,
|
|
2616
2644
|
port: plain.port,
|
|
2617
2645
|
uuid: plain.uuid,
|
|
2618
|
-
|
|
2646
|
+
extension: plain.exten,
|
|
2619
2647
|
persistent: plain.persistent,
|
|
2648
|
+
creationTime: moment__default['default'](plain.creation_time).toDate(),
|
|
2620
2649
|
});
|
|
2621
2650
|
}
|
|
2622
2651
|
|
|
2652
|
+
static parseMany(items ) {
|
|
2653
|
+
if (!items) {
|
|
2654
|
+
return [];
|
|
2655
|
+
}
|
|
2656
|
+
return items.map(plain => Meeting.parse(plain));
|
|
2657
|
+
}
|
|
2658
|
+
|
|
2623
2659
|
static newFrom(meeting ) {
|
|
2624
2660
|
return newFrom(meeting, Meeting);
|
|
2625
2661
|
}
|
|
2626
2662
|
|
|
2627
|
-
constructor({
|
|
2663
|
+
constructor({
|
|
2664
|
+
uuid,
|
|
2665
|
+
name,
|
|
2666
|
+
guestSipAuthorization,
|
|
2667
|
+
ownerUuids,
|
|
2668
|
+
port,
|
|
2669
|
+
uri,
|
|
2670
|
+
extension,
|
|
2671
|
+
persistent,
|
|
2672
|
+
creationTime,
|
|
2673
|
+
} = {}) {
|
|
2628
2674
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2629
2675
|
this.uri = uri;
|
|
2630
2676
|
this.name = name;
|
|
2631
2677
|
this.ownerUuids = ownerUuids;
|
|
2632
2678
|
this.port = port;
|
|
2633
2679
|
this.uuid = uuid;
|
|
2634
|
-
this.
|
|
2680
|
+
this.extension = extension;
|
|
2635
2681
|
this.persistent = persistent;
|
|
2682
|
+
this.creationTime = creationTime;
|
|
2636
2683
|
|
|
2637
2684
|
// Useful to compare instead of instanceof with minified code
|
|
2638
2685
|
this.type = 'Meeting';
|
|
@@ -2710,8 +2757,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2710
2757
|
}
|
|
2711
2758
|
},
|
|
2712
2759
|
|
|
2713
|
-
|
|
2714
|
-
client.
|
|
2760
|
+
getMyMeetings: () =>
|
|
2761
|
+
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2762
|
+
|
|
2763
|
+
createMyMeeting: (name , persistent ) =>
|
|
2764
|
+
client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
|
|
2715
2765
|
|
|
2716
2766
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2717
2767
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2807,6 +2857,10 @@ class ChatMessage {
|
|
|
2807
2857
|
|
|
2808
2858
|
|
|
2809
2859
|
static parseMany(plain ) {
|
|
2860
|
+
if (!plain || !plain.items) {
|
|
2861
|
+
return [];
|
|
2862
|
+
}
|
|
2863
|
+
|
|
2810
2864
|
return plain.items.map(item => ChatMessage.parse(item));
|
|
2811
2865
|
}
|
|
2812
2866
|
|
|
@@ -2916,6 +2970,9 @@ class Voicemail {
|
|
|
2916
2970
|
}
|
|
2917
2971
|
|
|
2918
2972
|
static parseMany(plain ) {
|
|
2973
|
+
if (!plain) {
|
|
2974
|
+
return [];
|
|
2975
|
+
}
|
|
2919
2976
|
const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
|
|
2920
2977
|
const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
|
|
2921
2978
|
|
|
@@ -3025,6 +3082,9 @@ class Call {
|
|
|
3025
3082
|
|
|
3026
3083
|
|
|
3027
3084
|
static parseMany(plain ) {
|
|
3085
|
+
if (!plain) {
|
|
3086
|
+
return [];
|
|
3087
|
+
}
|
|
3028
3088
|
return plain.map((plainCall ) => Call.parse(plainCall));
|
|
3029
3089
|
}
|
|
3030
3090
|
|
|
@@ -3197,6 +3257,9 @@ class Recording {
|
|
|
3197
3257
|
|
|
3198
3258
|
|
|
3199
3259
|
static parseMany(recordings = []) {
|
|
3260
|
+
if (!recordings) {
|
|
3261
|
+
return [];
|
|
3262
|
+
}
|
|
3200
3263
|
return recordings.map(item => Recording.parse(item));
|
|
3201
3264
|
}
|
|
3202
3265
|
|
|
@@ -3298,6 +3361,10 @@ class CallLog {
|
|
|
3298
3361
|
}
|
|
3299
3362
|
|
|
3300
3363
|
static parseMany(plain ) {
|
|
3364
|
+
if (!plain || !plain.items) {
|
|
3365
|
+
return [];
|
|
3366
|
+
}
|
|
3367
|
+
|
|
3301
3368
|
return plain.items.map(item => CallLog.parse(item));
|
|
3302
3369
|
}
|
|
3303
3370
|
|
|
@@ -3534,7 +3601,7 @@ const TRANSFER_FLOW_BLIND = 'blind';
|
|
|
3534
3601
|
|
|
3535
3602
|
// const MINIMUM_WAZO_ENGINE_VERSION_FOR_CTI_HOLD = '20.11';
|
|
3536
3603
|
|
|
3537
|
-
IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
|
|
3604
|
+
const logger$1 = IssueReporter$1 ? IssueReporter$1.loggerFor('cti-phone') : console;
|
|
3538
3605
|
|
|
3539
3606
|
/* */
|
|
3540
3607
|
|
|
@@ -3870,6 +3937,9 @@ class ChatRoom {
|
|
|
3870
3937
|
|
|
3871
3938
|
|
|
3872
3939
|
static parseMany(plain ) {
|
|
3940
|
+
if (!plain || !plain.items) {
|
|
3941
|
+
return [];
|
|
3942
|
+
}
|
|
3873
3943
|
return plain.items.map(item => ChatRoom.parse(item));
|
|
3874
3944
|
}
|
|
3875
3945
|
|
|
@@ -4450,7 +4520,7 @@ const AGENTD_VERSION = '1.0';
|
|
|
4450
4520
|
const WEBHOOKD_VERSION = '1.0';
|
|
4451
4521
|
const AMID_VERSION = '1.0';
|
|
4452
4522
|
|
|
4453
|
-
const logger = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
4523
|
+
const logger$2 = IssueReporter$1 ? IssueReporter$1.loggerFor('api') : console;
|
|
4454
4524
|
|
|
4455
4525
|
class ApiClient {
|
|
4456
4526
|
|
|
@@ -4502,12 +4572,12 @@ class ApiClient {
|
|
|
4502
4572
|
}
|
|
4503
4573
|
|
|
4504
4574
|
async forceRefreshToken() {
|
|
4505
|
-
logger.info('forcing refresh token, calling callback');
|
|
4575
|
+
logger$2.info('forcing refresh token, calling callback');
|
|
4506
4576
|
return this.refreshTokenCallback();
|
|
4507
4577
|
}
|
|
4508
4578
|
|
|
4509
4579
|
async refreshTokenCallback() {
|
|
4510
|
-
logger.info('refresh token callback called', {
|
|
4580
|
+
logger$2.info('refresh token callback called', {
|
|
4511
4581
|
refreshToken: this.refreshToken,
|
|
4512
4582
|
refreshBackend: this.refreshBackend,
|
|
4513
4583
|
refreshExpiration: this.refreshExpiration,
|
|
@@ -4525,7 +4595,7 @@ class ApiClient {
|
|
|
4525
4595
|
this.isMobile,
|
|
4526
4596
|
);
|
|
4527
4597
|
|
|
4528
|
-
logger.info('token refreshed', { token: session.token });
|
|
4598
|
+
logger$2.info('token refreshed', { token: session.token });
|
|
4529
4599
|
|
|
4530
4600
|
if (this.onRefreshToken) {
|
|
4531
4601
|
this.onRefreshToken(session.token, session);
|