@wazo/sdk 0.39.0-beta.11 → 0.39.0-beta.13
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 +3 -3
- package/esm/domain/Session.js +23 -0
- package/esm/service/getApiClient.js +1 -0
- package/esm/simple/Auth.js +30 -4
- package/esm/simple/Websocket.js +1 -0
- package/esm/types/domain/Session.d.ts +2 -0
- package/esm/types/domain/Session.d.ts.map +1 -1
- package/esm/types/service/getApiClient.d.ts +1 -0
- package/esm/types/service/getApiClient.d.ts.map +1 -1
- package/esm/types/simple/Auth.d.ts.map +1 -1
- package/esm/types/simple/Websocket.d.ts.map +1 -1
- package/esm/types/utils/api-requester.d.ts +1 -0
- package/esm/types/utils/api-requester.d.ts.map +1 -1
- package/esm/types/websocket-client.d.ts +5 -1
- package/esm/types/websocket-client.d.ts.map +1 -1
- package/esm/utils/api-requester.js +4 -2
- package/esm/websocket-client.js +9 -2
- package/lib/domain/Session.js +22 -0
- package/lib/service/getApiClient.js +3 -1
- package/lib/simple/Auth.js +26 -3
- package/lib/simple/Websocket.js +1 -0
- package/lib/types/domain/Session.d.ts +2 -0
- package/lib/types/domain/Session.d.ts.map +1 -1
- package/lib/types/service/getApiClient.d.ts +1 -0
- package/lib/types/service/getApiClient.d.ts.map +1 -1
- package/lib/types/simple/Auth.d.ts.map +1 -1
- package/lib/types/simple/Websocket.d.ts.map +1 -1
- package/lib/types/utils/api-requester.d.ts +1 -0
- package/lib/types/utils/api-requester.d.ts.map +1 -1
- package/lib/types/websocket-client.d.ts +5 -1
- package/lib/types/websocket-client.d.ts.map +1 -1
- package/lib/utils/api-requester.js +1 -1
- package/lib/websocket-client.js +8 -2
- package/package.json +1 -1
- package/src/domain/Session.ts +27 -0
- package/src/service/getApiClient.ts +2 -0
- package/src/simple/Auth.ts +44 -4
- package/src/simple/Websocket.ts +1 -0
- package/src/utils/api-requester.ts +5 -2
- package/src/websocket-client.ts +14 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/websocket-client.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/websocket-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ const BadResponse_1 = __importDefault(require("../domain/BadResponse"));
|
|
|
22
22
|
const ServerError_1 = __importDefault(require("../domain/ServerError"));
|
|
23
23
|
const isMobile_1 = __importDefault(require("./isMobile"));
|
|
24
24
|
const IssueReporter_1 = __importDefault(require("../service/IssueReporter"));
|
|
25
|
-
const methods = ['head', 'get', 'post', 'put', 'delete'];
|
|
25
|
+
const methods = ['head', 'get', 'post', 'put', 'delete', 'options'];
|
|
26
26
|
const logger = IssueReporter_1.default ? IssueReporter_1.default.loggerFor('api') : console;
|
|
27
27
|
// Use a function here to be able to mock it in tests
|
|
28
28
|
const realFetch = () => {
|
package/lib/websocket-client.js
CHANGED
|
@@ -106,14 +106,16 @@ class WebSocketClient extends Emitter_1.default {
|
|
|
106
106
|
* @param events
|
|
107
107
|
* @param version
|
|
108
108
|
* @param heartbeat
|
|
109
|
+
* @param session
|
|
109
110
|
* @param options @see https://github.com/pladaria/reconnecting-websocket#available-options
|
|
110
111
|
*/
|
|
111
|
-
constructor({ host, token, version, events, heartbeat, }, options = {
|
|
112
|
+
constructor({ host, token, version, events, heartbeat, session, }, options = {
|
|
112
113
|
host,
|
|
113
114
|
token,
|
|
114
115
|
version: 1,
|
|
115
116
|
events: [],
|
|
116
117
|
heartbeat: {},
|
|
118
|
+
session: null,
|
|
117
119
|
}) {
|
|
118
120
|
super();
|
|
119
121
|
this.initialized = false;
|
|
@@ -123,6 +125,7 @@ class WebSocketClient extends Emitter_1.default {
|
|
|
123
125
|
this.events = events;
|
|
124
126
|
this.options = options;
|
|
125
127
|
this.version = version;
|
|
128
|
+
this.session = session;
|
|
126
129
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
127
130
|
const { delay, timeout, max, } = heartbeat || {};
|
|
128
131
|
this.heartbeat = new Heartbeat_1.default(delay, timeout, max);
|
|
@@ -350,7 +353,10 @@ class WebSocketClient extends Emitter_1.default {
|
|
|
350
353
|
if (!this.host || !this.token) {
|
|
351
354
|
this.close();
|
|
352
355
|
}
|
|
353
|
-
|
|
356
|
+
let url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
|
|
357
|
+
if (this.session) {
|
|
358
|
+
url += `&userUuid=${this.session.uuid}`;
|
|
359
|
+
}
|
|
354
360
|
logger.info('Wazo WS url computed to reconnect', {
|
|
355
361
|
url,
|
|
356
362
|
});
|
package/package.json
CHANGED
package/src/domain/Session.ts
CHANGED
|
@@ -72,6 +72,8 @@ type SessionArguments = {
|
|
|
72
72
|
export default class Session {
|
|
73
73
|
acl: string[];
|
|
74
74
|
|
|
75
|
+
contact?: Contact;
|
|
76
|
+
|
|
75
77
|
token: string;
|
|
76
78
|
|
|
77
79
|
refreshToken: string | null | undefined;
|
|
@@ -198,6 +200,31 @@ export default class Session {
|
|
|
198
200
|
return this.profile && (this.profile.sipLines || []).find(sipLine => sipLine && !sipLine.isWebRtc());
|
|
199
201
|
}
|
|
200
202
|
|
|
203
|
+
getContact(): Contact {
|
|
204
|
+
if (this.contact) {
|
|
205
|
+
return this.contact;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const { email, firstName, lastName, mobileNumber, state, status } = this.profile || {};
|
|
209
|
+
const number = this.primaryNumber() || '';
|
|
210
|
+
const numbers = [{ label: 'primary', number }];
|
|
211
|
+
|
|
212
|
+
if (mobileNumber) {
|
|
213
|
+
numbers.push({ label: 'mobile', number: mobileNumber });
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return new Contact({
|
|
217
|
+
uuid: this.uuid || '',
|
|
218
|
+
email,
|
|
219
|
+
name: `${firstName} ${lastName}`,
|
|
220
|
+
number,
|
|
221
|
+
numbers,
|
|
222
|
+
state: state || '',
|
|
223
|
+
status,
|
|
224
|
+
backend: 'wazo',
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
|
|
201
228
|
primaryContext(): string {
|
|
202
229
|
if (this.engineVersion) {
|
|
203
230
|
if (this.hasEngineVersionGte(MINIMUM_WAZO_ENGINE_VERSION_FOR_DEFAULT_CONTEXT)) {
|
|
@@ -53,6 +53,8 @@ export const setIsMobile = (isMobile: boolean, forServer: string | null | undefi
|
|
|
53
53
|
export const setFetchOptions = (fetchOptions: Record<string, any>, forServer: string | null | undefined = null) => {
|
|
54
54
|
global.wazoFetchOptions[String(forServer)] = fetchOptions;
|
|
55
55
|
};
|
|
56
|
+
export const getFetchOptions = (forServer: string | null | undefined = null) =>
|
|
57
|
+
(forServer ? global.wazoFetchOptions[forServer] : global.wazoFetchOptions.null) || global.wazoFetchOptions.null;
|
|
56
58
|
|
|
57
59
|
const fillClient = (apiClient: WazoApiClient) => {
|
|
58
60
|
const {
|
package/src/simple/Auth.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
/* eslint-disable max-classes-per-file */
|
|
2
2
|
import Session from '../domain/Session';
|
|
3
3
|
import { BACKEND_LDAP_USER, DEFAULT_BACKEND_USER, DETAULT_EXPIRATION } from '../api/auth';
|
|
4
|
-
import getApiClient, {
|
|
4
|
+
import getApiClient, {
|
|
5
|
+
setCurrentServer,
|
|
6
|
+
setApiToken,
|
|
7
|
+
setRefreshToken,
|
|
8
|
+
setApiClientId,
|
|
9
|
+
setRefreshExpiration,
|
|
10
|
+
setOnRefreshToken,
|
|
11
|
+
setFetchOptions,
|
|
12
|
+
setRefreshTenantId,
|
|
13
|
+
setRefreshDomainName,
|
|
14
|
+
setOnRefreshTokenError,
|
|
15
|
+
getFetchOptions,
|
|
16
|
+
} from '../service/getApiClient';
|
|
5
17
|
import IssueReporter from '../service/IssueReporter';
|
|
6
18
|
import Wazo from './index';
|
|
7
19
|
import SipLine from '../domain/SipLine';
|
|
@@ -203,18 +215,23 @@ class Auth implements IAuth {
|
|
|
203
215
|
if (this.clientId && deleteRefreshToken) {
|
|
204
216
|
await getApiClient().auth.deleteRefreshToken(this.clientId);
|
|
205
217
|
}
|
|
206
|
-
} catch (e: any) {
|
|
218
|
+
} catch (e: any) {
|
|
219
|
+
// Nothing to
|
|
207
220
|
}
|
|
208
221
|
|
|
209
222
|
try {
|
|
210
|
-
|
|
211
|
-
|
|
223
|
+
if (this.session?.token) {
|
|
224
|
+
await getApiClient().auth.logOut(this.session.token);
|
|
225
|
+
}
|
|
226
|
+
} catch (e: any) {
|
|
227
|
+
// Nothing to
|
|
212
228
|
}
|
|
213
229
|
|
|
214
230
|
setApiToken(null);
|
|
215
231
|
setRefreshToken(null);
|
|
216
232
|
this.session = null;
|
|
217
233
|
this.authenticated = false;
|
|
234
|
+
setFetchOptions({});
|
|
218
235
|
}
|
|
219
236
|
|
|
220
237
|
setOnRefreshToken(callback: (...args: Array<any>) => any) {
|
|
@@ -313,12 +330,35 @@ class Auth implements IAuth {
|
|
|
313
330
|
return `${this.getFirstName()} ${this.getLastName()}`;
|
|
314
331
|
}
|
|
315
332
|
|
|
333
|
+
async setHttpUserUuidHeader(uuid: string | null | undefined) {
|
|
334
|
+
if (!uuid) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
const headers = {
|
|
338
|
+
...(getFetchOptions()?.headers || {}),
|
|
339
|
+
'X-User-UUID': uuid,
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
try {
|
|
343
|
+
await getApiClient().client.head('auth/0.1/status', null, headers);
|
|
344
|
+
|
|
345
|
+
// If the previous request went well, it means that the header is accepted
|
|
346
|
+
setFetchOptions({
|
|
347
|
+
...getFetchOptions(),
|
|
348
|
+
headers,
|
|
349
|
+
});
|
|
350
|
+
} catch (_) {
|
|
351
|
+
// Nothing to do
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
316
355
|
async _onAuthenticated(rawSession: Session): Promise<Session | null> {
|
|
317
356
|
if (this.authenticated && this.session) {
|
|
318
357
|
return this.session;
|
|
319
358
|
}
|
|
320
359
|
|
|
321
360
|
const session = rawSession;
|
|
361
|
+
await this.setHttpUserUuidHeader(session.uuid);
|
|
322
362
|
|
|
323
363
|
if (!session) {
|
|
324
364
|
return null;
|
package/src/simple/Websocket.ts
CHANGED
|
@@ -19,7 +19,7 @@ type ConstructorParams = {
|
|
|
19
19
|
token?: string | null;
|
|
20
20
|
fetchOptions: Record<string, any> | null | undefined;
|
|
21
21
|
};
|
|
22
|
-
const methods = ['head', 'get', 'post', 'put', 'delete'];
|
|
22
|
+
const methods = ['head', 'get', 'post', 'put', 'delete', 'options'];
|
|
23
23
|
const logger = IssueReporter ? IssueReporter.loggerFor('api') : console;
|
|
24
24
|
// Use a function here to be able to mock it in tests
|
|
25
25
|
export const realFetch = () => {
|
|
@@ -76,6 +76,8 @@ export default class ApiRequester {
|
|
|
76
76
|
|
|
77
77
|
delete: (...args: Array<any>) => any;
|
|
78
78
|
|
|
79
|
+
options: (...args: Array<any>) => any;
|
|
80
|
+
|
|
79
81
|
static successResponseParser(response: Record<string, any>): boolean {
|
|
80
82
|
return response.status === 204 || response.status === 201 || response.status === 200;
|
|
81
83
|
}
|
|
@@ -163,7 +165,8 @@ export default class ApiRequester {
|
|
|
163
165
|
const options = {
|
|
164
166
|
method,
|
|
165
167
|
body: newBody,
|
|
166
|
-
headers: {
|
|
168
|
+
headers: {
|
|
169
|
+
...this.getHeaders(headers),
|
|
167
170
|
...extraHeaders,
|
|
168
171
|
},
|
|
169
172
|
agent: this.agent,
|
package/src/websocket-client.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/* eslint-disable no-underscore-dangle */
|
|
2
2
|
import ReconnectingWebSocket from 'reconnecting-websocket';
|
|
3
|
+
|
|
4
|
+
import Session from './domain/Session';
|
|
3
5
|
import Emitter from './utils/Emitter';
|
|
4
6
|
import type { WebSocketMessage } from './types/WebSocketMessage';
|
|
5
7
|
import IssueReporter from './service/IssueReporter';
|
|
@@ -18,6 +20,7 @@ type Arguments = {
|
|
|
18
20
|
token: string;
|
|
19
21
|
events?: Array<string>;
|
|
20
22
|
version?: number;
|
|
23
|
+
session?: Session,
|
|
21
24
|
heartbeat?: {
|
|
22
25
|
delay: number;
|
|
23
26
|
timeout: number;
|
|
@@ -99,6 +102,8 @@ const messageLogger = IssueReporter.loggerFor('wazo-ws-message');
|
|
|
99
102
|
class WebSocketClient extends Emitter {
|
|
100
103
|
initialized: boolean;
|
|
101
104
|
|
|
105
|
+
session?: Session;
|
|
106
|
+
|
|
102
107
|
host: string | null | undefined;
|
|
103
108
|
|
|
104
109
|
version: number | undefined;
|
|
@@ -130,6 +135,7 @@ class WebSocketClient extends Emitter {
|
|
|
130
135
|
* @param events
|
|
131
136
|
* @param version
|
|
132
137
|
* @param heartbeat
|
|
138
|
+
* @param session
|
|
133
139
|
* @param options @see https://github.com/pladaria/reconnecting-websocket#available-options
|
|
134
140
|
*/
|
|
135
141
|
constructor({
|
|
@@ -138,12 +144,14 @@ class WebSocketClient extends Emitter {
|
|
|
138
144
|
version,
|
|
139
145
|
events,
|
|
140
146
|
heartbeat,
|
|
147
|
+
session,
|
|
141
148
|
}: Arguments, options: Record<string, any> = {
|
|
142
149
|
host,
|
|
143
150
|
token,
|
|
144
151
|
version: 1,
|
|
145
152
|
events: [],
|
|
146
153
|
heartbeat: {},
|
|
154
|
+
session: null,
|
|
147
155
|
}) {
|
|
148
156
|
super();
|
|
149
157
|
this.initialized = false;
|
|
@@ -153,6 +161,7 @@ class WebSocketClient extends Emitter {
|
|
|
153
161
|
this.events = events;
|
|
154
162
|
this.options = options;
|
|
155
163
|
this.version = version;
|
|
164
|
+
this.session = session;
|
|
156
165
|
this._boundOnHeartbeat = this._onHeartbeat.bind(this);
|
|
157
166
|
const {
|
|
158
167
|
delay,
|
|
@@ -424,7 +433,11 @@ class WebSocketClient extends Emitter {
|
|
|
424
433
|
this.close();
|
|
425
434
|
}
|
|
426
435
|
|
|
427
|
-
|
|
436
|
+
let url = `wss://${this.host || ''}/api/websocketd/?token=${this.token || ''}&version=${this.version}`;
|
|
437
|
+
if (this.session) {
|
|
438
|
+
url += `&userUuid=${this.session.uuid}`;
|
|
439
|
+
}
|
|
440
|
+
|
|
428
441
|
logger.info('Wazo WS url computed to reconnect', {
|
|
429
442
|
url,
|
|
430
443
|
});
|