@sprucelabs/mercury-client 42.0.527 → 42.0.529
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/build/clients/MercuryClientFactory.js +5 -6
- package/build/clients/MercurySocketIoClient.js +38 -56
- package/build/clients/MercuryTestClient.js +15 -22
- package/build/clients/MutableContractClient.js +3 -5
- package/build/errors/SpruceError.js +2 -3
- package/build/tests/AbstractClientTest.js +1 -2
- package/build/tests/constants.js +9 -10
- package/package.json +16 -16
|
@@ -10,9 +10,8 @@ const SpruceError_1 = __importDefault(require("../errors/SpruceError"));
|
|
|
10
10
|
const MutableContractClient_1 = __importDefault(require("./MutableContractClient"));
|
|
11
11
|
class MercuryClientFactory {
|
|
12
12
|
static async Client(connectionOptions) {
|
|
13
|
-
var _a;
|
|
14
13
|
const { host: hostOption, contracts, reconnectDelayMs, allowSelfSignedCrt, emitTimeoutMs = this.timeoutMs, shouldReconnect, maxEmitRetries, connectionRetries, } = connectionOptions || {};
|
|
15
|
-
const host = hostOption
|
|
14
|
+
const host = hostOption ?? constants_1.DEFAULT_HOST;
|
|
16
15
|
if (host.substr(0, 4) !== 'http') {
|
|
17
16
|
throw new SpruceError_1.default({ code: 'INVALID_PROTOCOL', uri: host });
|
|
18
17
|
}
|
|
@@ -25,15 +24,15 @@ class MercuryClientFactory {
|
|
|
25
24
|
const eventContract = !contracts && this.defaultContract
|
|
26
25
|
? this.defaultContract
|
|
27
26
|
: //@ts-ignore
|
|
28
|
-
spruce_event_utils_1.eventContractUtil.unifyContracts(contracts
|
|
27
|
+
spruce_event_utils_1.eventContractUtil.unifyContracts(contracts ?? []);
|
|
29
28
|
let Client = MutableContractClient_1.default;
|
|
30
29
|
if (this.isTestMode) {
|
|
31
30
|
//TODO, make this something fitxures sets to make the test client available
|
|
32
31
|
Client = require('../clients/MercuryTestClient').default;
|
|
33
32
|
}
|
|
34
|
-
const client = new (
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const client = new (MercuryClientFactory.ClientClass ??
|
|
34
|
+
//@ts-ignore
|
|
35
|
+
Client)({
|
|
37
36
|
host,
|
|
38
37
|
reconnection: false,
|
|
39
38
|
reconnectDelayMs,
|
|
@@ -36,28 +36,26 @@ class MercurySocketIoClient {
|
|
|
36
36
|
this.host = host;
|
|
37
37
|
this.ioOptions = { ...ioOptions, withCredentials: false };
|
|
38
38
|
this.eventContract = eventContract;
|
|
39
|
-
this.emitTimeoutMs = emitTimeoutMs
|
|
40
|
-
this.reconnectDelayMs = reconnectDelayMs
|
|
41
|
-
this.shouldReconnect = shouldReconnect
|
|
39
|
+
this.emitTimeoutMs = emitTimeoutMs ?? 30000;
|
|
40
|
+
this.reconnectDelayMs = reconnectDelayMs ?? 5000;
|
|
41
|
+
this.shouldReconnect = shouldReconnect ?? true;
|
|
42
42
|
this.id = new Date().getTime().toString();
|
|
43
43
|
this.maxEmitRetries = maxEmitRetries;
|
|
44
|
-
this.connectionRetriesRemaining = connectionRetries
|
|
45
|
-
this.connectionRetries = connectionRetries
|
|
44
|
+
this.connectionRetriesRemaining = connectionRetries ?? 5;
|
|
45
|
+
this.connectionRetries = connectionRetries ?? 5;
|
|
46
46
|
}
|
|
47
47
|
async connect() {
|
|
48
48
|
this.socket = MercurySocketIoClient.io(this.host, this.ioOptions);
|
|
49
49
|
this.emitStatusChange('connecting');
|
|
50
50
|
await new Promise((resolve, reject) => {
|
|
51
|
-
|
|
52
|
-
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.on('connect', () => {
|
|
53
|
-
var _a, _b;
|
|
51
|
+
this.socket?.on('connect', () => {
|
|
54
52
|
this.connectionRetriesRemaining = this.connectionRetries;
|
|
55
|
-
|
|
53
|
+
this.socket?.removeAllListeners();
|
|
56
54
|
if (!this.isReconnecting) {
|
|
57
55
|
this.emitStatusChange('connected');
|
|
58
56
|
}
|
|
59
57
|
if (this.shouldReconnect) {
|
|
60
|
-
|
|
58
|
+
this.socket?.once('disconnect', async (opts) => {
|
|
61
59
|
this.log.error('Mercury disconnected, reason:', opts);
|
|
62
60
|
await this.attemptReconnectAfterDelay();
|
|
63
61
|
});
|
|
@@ -65,7 +63,7 @@ class MercurySocketIoClient {
|
|
|
65
63
|
this.attachConnectError();
|
|
66
64
|
resolve(undefined);
|
|
67
65
|
});
|
|
68
|
-
|
|
66
|
+
this.socket?.on('timeout', () => {
|
|
69
67
|
reject(new SpruceError_1.default({
|
|
70
68
|
code: 'TIMEOUT',
|
|
71
69
|
eventName: 'connect',
|
|
@@ -85,26 +83,24 @@ class MercurySocketIoClient {
|
|
|
85
83
|
});
|
|
86
84
|
}
|
|
87
85
|
attachConnectError(reject, resolve) {
|
|
88
|
-
|
|
89
|
-
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.on('connect_error', async (err) => {
|
|
90
|
-
var _a;
|
|
86
|
+
this.socket?.on('connect_error', async (err) => {
|
|
91
87
|
const error = this.mapSocketErrorToSpruceError(err);
|
|
92
88
|
//@ts-ignore
|
|
93
|
-
|
|
89
|
+
this.socket?.removeAllListeners();
|
|
94
90
|
this.log.error('Failed to connect to Mercury', error.message);
|
|
95
91
|
this.log.error('Connection retries left', `${this.connectionRetriesRemaining}`);
|
|
96
92
|
if (this.connectionRetriesRemaining === 0) {
|
|
97
|
-
reject
|
|
93
|
+
reject?.(error);
|
|
98
94
|
return;
|
|
99
95
|
}
|
|
100
96
|
try {
|
|
101
97
|
this.isReconnecting = false;
|
|
102
98
|
await this.attemptReconnectAfterDelay();
|
|
103
|
-
resolve
|
|
99
|
+
resolve?.();
|
|
104
100
|
}
|
|
105
101
|
catch (err) {
|
|
106
102
|
//@ts-ignore
|
|
107
|
-
reject
|
|
103
|
+
reject?.(err);
|
|
108
104
|
}
|
|
109
105
|
});
|
|
110
106
|
}
|
|
@@ -131,7 +127,6 @@ class MercurySocketIoClient {
|
|
|
131
127
|
return this.reconnectPromise;
|
|
132
128
|
}
|
|
133
129
|
async reconnect(resolve, reject, retriesLeft) {
|
|
134
|
-
var _a;
|
|
135
130
|
try {
|
|
136
131
|
this.connectionRetriesRemaining--;
|
|
137
132
|
const key = new Date().getTime();
|
|
@@ -168,7 +163,7 @@ class MercurySocketIoClient {
|
|
|
168
163
|
}
|
|
169
164
|
catch (err) {
|
|
170
165
|
;
|
|
171
|
-
(
|
|
166
|
+
(console.error ?? console.log)(err.message);
|
|
172
167
|
this.isReconnecting = false;
|
|
173
168
|
this.skipWaitIfReconnecting = false;
|
|
174
169
|
retriesLeft = retriesLeft - 1;
|
|
@@ -195,8 +190,7 @@ class MercurySocketIoClient {
|
|
|
195
190
|
await all;
|
|
196
191
|
}
|
|
197
192
|
mapSocketErrorToSpruceError(err) {
|
|
198
|
-
|
|
199
|
-
const originalError = new Error((_a = err.message) !== null && _a !== void 0 ? _a : err);
|
|
193
|
+
const originalError = new Error(err.message ?? err);
|
|
200
194
|
if (err.stack) {
|
|
201
195
|
originalError.stack = err.stack;
|
|
202
196
|
}
|
|
@@ -234,10 +228,10 @@ class MercurySocketIoClient {
|
|
|
234
228
|
handleLocalEmit(eventName, targetAndPayload) {
|
|
235
229
|
const listeners = this.registeredListeners.filter((r) => r[0] === eventName);
|
|
236
230
|
for (const listener of listeners) {
|
|
237
|
-
const cb = listener
|
|
238
|
-
cb
|
|
231
|
+
const cb = listener?.[1];
|
|
232
|
+
cb?.({
|
|
239
233
|
//@ts-ignore
|
|
240
|
-
payload: targetAndPayload
|
|
234
|
+
payload: targetAndPayload?.payload,
|
|
241
235
|
});
|
|
242
236
|
}
|
|
243
237
|
return {
|
|
@@ -250,13 +244,12 @@ class MercurySocketIoClient {
|
|
|
250
244
|
async emitAndFlattenResponses(eventName, payload, cb) {
|
|
251
245
|
const results = await this.emit(eventName, payload, cb);
|
|
252
246
|
const { payloads, errors } = spruce_event_utils_1.eventResponseUtil.getAllResponsePayloadsAndErrors(results, SpruceError_1.default);
|
|
253
|
-
if (errors
|
|
247
|
+
if (errors?.[0]) {
|
|
254
248
|
throw errors[0];
|
|
255
249
|
}
|
|
256
250
|
return payloads;
|
|
257
251
|
}
|
|
258
252
|
async _emit(retriesRemaining, eventName, payload, cb) {
|
|
259
|
-
var _a;
|
|
260
253
|
if (!this.skipWaitIfReconnecting) {
|
|
261
254
|
await this.waitIfReconnecting();
|
|
262
255
|
}
|
|
@@ -293,7 +286,7 @@ class MercurySocketIoClient {
|
|
|
293
286
|
}
|
|
294
287
|
};
|
|
295
288
|
if (cb) {
|
|
296
|
-
|
|
289
|
+
this.socket?.on(responseEventName, singleResponseHandler);
|
|
297
290
|
}
|
|
298
291
|
const args = [];
|
|
299
292
|
if (payload || this.proxyToken) {
|
|
@@ -310,11 +303,9 @@ class MercurySocketIoClient {
|
|
|
310
303
|
args.push(p);
|
|
311
304
|
}
|
|
312
305
|
const results = await new Promise((resolve, reject) => {
|
|
313
|
-
var _a;
|
|
314
306
|
try {
|
|
315
307
|
const emitTimeout = setTimeout(async () => {
|
|
316
|
-
|
|
317
|
-
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.off(responseEventName, singleResponseHandler);
|
|
308
|
+
this.socket?.off(responseEventName, singleResponseHandler);
|
|
318
309
|
if (retriesRemaining == 0) {
|
|
319
310
|
const err = new SpruceError_1.default({
|
|
320
311
|
code: 'TIMEOUT',
|
|
@@ -344,14 +335,13 @@ class MercurySocketIoClient {
|
|
|
344
335
|
}
|
|
345
336
|
}, this.emitTimeoutMs);
|
|
346
337
|
args.push((results) => {
|
|
347
|
-
var _a;
|
|
348
338
|
clearTimeout(emitTimeout);
|
|
349
339
|
this.handleConfirmPinResponse(eventName, results);
|
|
350
|
-
|
|
340
|
+
this.socket?.off(responseEventName, singleResponseHandler);
|
|
351
341
|
resolve(results);
|
|
352
342
|
});
|
|
353
343
|
const ioName = socketIoEventUtil_utility_1.default.toSocketName(eventName);
|
|
354
|
-
|
|
344
|
+
this.socket?.emit(ioName, ...args);
|
|
355
345
|
}
|
|
356
346
|
catch (err) {
|
|
357
347
|
reject(err);
|
|
@@ -364,7 +354,7 @@ class MercurySocketIoClient {
|
|
|
364
354
|
const signature = this.getEventSignatureByName(eventName);
|
|
365
355
|
if (signature.emitPayloadSchema) {
|
|
366
356
|
try {
|
|
367
|
-
(0, schema_1.validateSchemaValues)(signature.emitPayloadSchema, payload
|
|
357
|
+
(0, schema_1.validateSchemaValues)(signature.emitPayloadSchema, payload ?? {});
|
|
368
358
|
}
|
|
369
359
|
catch (err) {
|
|
370
360
|
throw new SpruceError_1.default({
|
|
@@ -382,9 +372,8 @@ class MercurySocketIoClient {
|
|
|
382
372
|
}
|
|
383
373
|
}
|
|
384
374
|
handleConfirmPinResponse(eventName, results) {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
if (eventName.search('confirm-pin') === 0 && (payload === null || payload === void 0 ? void 0 : payload.person)) {
|
|
375
|
+
const payload = results?.responses?.[0]?.payload;
|
|
376
|
+
if (eventName.search('confirm-pin') === 0 && payload?.person) {
|
|
388
377
|
this.lastAuthOptions = { token: payload.token };
|
|
389
378
|
this.auth = {
|
|
390
379
|
person: payload.person,
|
|
@@ -401,7 +390,6 @@ class MercurySocketIoClient {
|
|
|
401
390
|
this.shouldAutoRegisterListeners = should;
|
|
402
391
|
}
|
|
403
392
|
async on(eventName, cb) {
|
|
404
|
-
var _a, _b, _c;
|
|
405
393
|
this.registeredListeners.push([eventName, cb]);
|
|
406
394
|
const isLocalEvent = this.isEventLocal(eventName);
|
|
407
395
|
if (isLocalEvent) {
|
|
@@ -413,7 +401,7 @@ class MercurySocketIoClient {
|
|
|
413
401
|
payload: { events: [{ eventName }] },
|
|
414
402
|
});
|
|
415
403
|
if (results.totalErrors > 0) {
|
|
416
|
-
const options =
|
|
404
|
+
const options = results.responses[0].errors?.[0] ?? 'UNKNOWN_ERROR';
|
|
417
405
|
throw error_1.default.parse(options, SpruceError_1.default);
|
|
418
406
|
}
|
|
419
407
|
}
|
|
@@ -443,7 +431,7 @@ class MercurySocketIoClient {
|
|
|
443
431
|
}
|
|
444
432
|
};
|
|
445
433
|
this.listenerMap.set(cb, listener);
|
|
446
|
-
|
|
434
|
+
this.socket?.on(eventName,
|
|
447
435
|
//@ts-ignore
|
|
448
436
|
listener);
|
|
449
437
|
}
|
|
@@ -453,12 +441,11 @@ class MercurySocketIoClient {
|
|
|
453
441
|
async off(eventName, cb) {
|
|
454
442
|
this.removeLocalListener(cb, eventName);
|
|
455
443
|
return new Promise((resolve, reject) => {
|
|
456
|
-
var _a;
|
|
457
444
|
if (!this.socket || !this.auth || this.isEventLocal(eventName)) {
|
|
458
445
|
resolve(0);
|
|
459
446
|
return;
|
|
460
447
|
}
|
|
461
|
-
|
|
448
|
+
this.socket?.emit('unregister-listeners::v2020_12_25', {
|
|
462
449
|
payload: {
|
|
463
450
|
fullyQualifiedEventNames: [eventName],
|
|
464
451
|
},
|
|
@@ -474,44 +461,40 @@ class MercurySocketIoClient {
|
|
|
474
461
|
});
|
|
475
462
|
}
|
|
476
463
|
removeLocalListener(cb, eventName) {
|
|
477
|
-
var _a, _b;
|
|
478
464
|
const listener = this.listenerMap.get(cb);
|
|
479
465
|
if (listener) {
|
|
480
466
|
this.listenerMap.delete(cb);
|
|
481
|
-
|
|
467
|
+
this.socket?.off(eventName, listener);
|
|
482
468
|
}
|
|
483
469
|
else {
|
|
484
|
-
|
|
470
|
+
this.socket?.removeAllListeners(eventName);
|
|
485
471
|
}
|
|
486
472
|
}
|
|
487
473
|
getId() {
|
|
488
474
|
return this.id;
|
|
489
475
|
}
|
|
490
476
|
async disconnect() {
|
|
491
|
-
var _a;
|
|
492
477
|
this.isManuallyDisconnected = true;
|
|
493
478
|
if (this.isSocketConnected()) {
|
|
494
479
|
//@ts-ignore
|
|
495
|
-
|
|
480
|
+
this.socket?.removeAllListeners();
|
|
496
481
|
await new Promise((resolve) => {
|
|
497
|
-
|
|
498
|
-
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.once('disconnect', () => {
|
|
482
|
+
this.socket?.once('disconnect', () => {
|
|
499
483
|
this.socket = undefined;
|
|
500
484
|
resolve(undefined);
|
|
501
485
|
});
|
|
502
|
-
|
|
486
|
+
this.socket?.disconnect();
|
|
503
487
|
});
|
|
504
488
|
}
|
|
505
489
|
return;
|
|
506
490
|
}
|
|
507
491
|
async authenticate(options) {
|
|
508
|
-
var _a, _b;
|
|
509
492
|
const { skillId, apiKey, token } = options;
|
|
510
493
|
if (this.authPromise) {
|
|
511
494
|
await this.authPromise;
|
|
512
495
|
return {
|
|
513
|
-
skill:
|
|
514
|
-
person:
|
|
496
|
+
skill: this.auth?.skill,
|
|
497
|
+
person: this.auth?.person,
|
|
515
498
|
};
|
|
516
499
|
}
|
|
517
500
|
this.lastAuthOptions = options;
|
|
@@ -541,8 +524,7 @@ class MercurySocketIoClient {
|
|
|
541
524
|
return !this.isReAuthing && this.isSocketConnected();
|
|
542
525
|
}
|
|
543
526
|
isSocketConnected() {
|
|
544
|
-
|
|
545
|
-
return (_b = (_a = this.socket) === null || _a === void 0 ? void 0 : _a.connected) !== null && _b !== void 0 ? _b : false;
|
|
527
|
+
return this.socket?.connected ?? false;
|
|
546
528
|
}
|
|
547
529
|
getProxyToken() {
|
|
548
530
|
return this.proxyToken;
|
|
@@ -89,9 +89,8 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
89
89
|
return MercuryTestClient.emitter;
|
|
90
90
|
}
|
|
91
91
|
async off(eventName, cb) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (((_b = MercuryTestClient.emitter) === null || _b === void 0 ? void 0 : _b.listenCount(eventName)) === 0) {
|
|
92
|
+
await MercuryTestClient.emitter?.off(eventName, cb);
|
|
93
|
+
if (MercuryTestClient.emitter?.listenCount(eventName) === 0) {
|
|
95
94
|
return super.off(eventName);
|
|
96
95
|
}
|
|
97
96
|
else {
|
|
@@ -107,16 +106,14 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
107
106
|
MercuryTestClient.emitter.mixinContract(contract);
|
|
108
107
|
}
|
|
109
108
|
doesHandleEvent(eventName) {
|
|
110
|
-
var _a;
|
|
111
109
|
return (super.doesHandleEvent(eventName) ||
|
|
112
|
-
|
|
110
|
+
MercuryTestClient.emitter?.doesHandleEvent(eventName));
|
|
113
111
|
}
|
|
114
112
|
async on(...args) {
|
|
115
113
|
//@ts-ignore
|
|
116
114
|
return MercuryTestClient.emitter.on(...args);
|
|
117
115
|
}
|
|
118
116
|
async emit(...args) {
|
|
119
|
-
var _a, _b, _c, _d, _e;
|
|
120
117
|
const fqen = args[0];
|
|
121
118
|
try {
|
|
122
119
|
if (this.shouldHandleEventLocally(fqen)) {
|
|
@@ -134,16 +131,16 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
134
131
|
await this.connectIfNotConnected(fqen);
|
|
135
132
|
//@ts-ignore
|
|
136
133
|
const results = await super.emit(...args);
|
|
137
|
-
const firstError =
|
|
134
|
+
const firstError = results.responses?.[0]?.errors?.[0];
|
|
138
135
|
if (firstError &&
|
|
139
|
-
|
|
136
|
+
firstError.options?.code === 'INVALID_EVENT_NAME') {
|
|
140
137
|
firstError.message = `Event not found! Make sure you are booting your skill in your test with \`await this.bootSkill()\`. If you haven't, you'll need to create a listener with \`spruce create.listener\`.\n\nOriginal Error:\n\n${firstError.options.friendlyMessage}`;
|
|
141
138
|
}
|
|
142
139
|
return results;
|
|
143
140
|
}
|
|
144
141
|
}
|
|
145
142
|
catch (err) {
|
|
146
|
-
if (
|
|
143
|
+
if (err.options?.code === 'INVALID_EVENT_NAME') {
|
|
147
144
|
err.message = `${err.message} Double check it's spelled correctly (types are passing) and that you've run \`spruce create.event\` to create the event.`;
|
|
148
145
|
}
|
|
149
146
|
throw err;
|
|
@@ -166,7 +163,6 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
166
163
|
return emitter.listenCount(fqen) > 0;
|
|
167
164
|
}
|
|
168
165
|
async handleEventLocally(args) {
|
|
169
|
-
var _a;
|
|
170
166
|
const emitter = MercuryTestClient.emitter;
|
|
171
167
|
const fqen = args[0];
|
|
172
168
|
const payload = args[1];
|
|
@@ -216,7 +212,7 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
216
212
|
code: 'UNAUTHORIZED_ACCESS',
|
|
217
213
|
fqen,
|
|
218
214
|
action: 'emit',
|
|
219
|
-
target:
|
|
215
|
+
target: args[1] ?? {},
|
|
220
216
|
permissionContractId: sig.emitPermissionContract.id,
|
|
221
217
|
}),
|
|
222
218
|
],
|
|
@@ -230,8 +226,7 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
230
226
|
return (0, just_clone_1.default)(results);
|
|
231
227
|
}
|
|
232
228
|
assertValidEventSignature(sig, fqen) {
|
|
233
|
-
|
|
234
|
-
if (!sig.isGlobal && !((_b = (_a = sig.emitPayloadSchema) === null || _a === void 0 ? void 0 : _a.fields) === null || _b === void 0 ? void 0 : _b.target)) {
|
|
229
|
+
if (!sig.isGlobal && !sig.emitPayloadSchema?.fields?.target) {
|
|
235
230
|
throw new SpruceError_1.default({
|
|
236
231
|
code: 'INVALID_EVENT_SIGNATURE',
|
|
237
232
|
fqen,
|
|
@@ -240,16 +235,15 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
240
235
|
}
|
|
241
236
|
}
|
|
242
237
|
async optionallyCheckPermissions(args, permissionContractId, fqen) {
|
|
243
|
-
var _a;
|
|
244
238
|
if (!MercuryTestClient.shouldCheckPermissionsOnLocalEvents) {
|
|
245
239
|
return true;
|
|
246
240
|
}
|
|
247
|
-
let { target } =
|
|
241
|
+
let { target } = args[1] ?? {};
|
|
248
242
|
const permTarget = {};
|
|
249
|
-
if (target
|
|
243
|
+
if (target?.organizationId) {
|
|
250
244
|
permTarget.organizationId = target.organizationId;
|
|
251
245
|
}
|
|
252
|
-
if (target
|
|
246
|
+
if (target?.locationId) {
|
|
253
247
|
throw new Error('checking permissions against a location is not supported. Add to mercury-workspace -> mercury-client');
|
|
254
248
|
}
|
|
255
249
|
const results = await this.emit('does-honor-permission-contract::v2020_12_25', {
|
|
@@ -266,14 +260,13 @@ class MercuryTestClient extends MutableContractClient_1.default {
|
|
|
266
260
|
return doesHonor;
|
|
267
261
|
}
|
|
268
262
|
buildSource(args) {
|
|
269
|
-
var _a, _b, _c;
|
|
270
263
|
let source = {
|
|
271
|
-
...
|
|
264
|
+
...args[1]?.source,
|
|
272
265
|
};
|
|
273
|
-
if (
|
|
266
|
+
if (this.auth?.person) {
|
|
274
267
|
source.personId = this.auth.person.id;
|
|
275
268
|
}
|
|
276
|
-
if (
|
|
269
|
+
if (this.auth?.skill) {
|
|
277
270
|
source.skillId = this.auth.skill.id;
|
|
278
271
|
}
|
|
279
272
|
if (args[0] !== 'authenticate::v2020_12_25' &&
|
|
@@ -351,7 +344,7 @@ MercuryTestClient.shouldRequireLocalListeners = true;
|
|
|
351
344
|
exports.default = MercuryTestClient;
|
|
352
345
|
function mixinConnectionEvents(contract) {
|
|
353
346
|
return spruce_event_utils_1.eventContractUtil.unifyContracts([
|
|
354
|
-
contract
|
|
347
|
+
contract ?? { eventSignatures: {} },
|
|
355
348
|
statusChangePayloadSchema_1.connectionStatusContract,
|
|
356
349
|
]);
|
|
357
350
|
}
|
|
@@ -7,9 +7,8 @@ const spruce_event_utils_1 = require("@sprucelabs/spruce-event-utils");
|
|
|
7
7
|
const MercurySocketIoClient_1 = __importDefault(require("./MercurySocketIoClient"));
|
|
8
8
|
class MutableContractClient extends MercurySocketIoClient_1.default {
|
|
9
9
|
static mixinContract(contract) {
|
|
10
|
-
var _a;
|
|
11
10
|
this.inMemoryContract = spruce_event_utils_1.eventContractUtil.unifyContracts([
|
|
12
|
-
|
|
11
|
+
this.inMemoryContract ?? { eventSignatures: {} },
|
|
13
12
|
contract,
|
|
14
13
|
]);
|
|
15
14
|
}
|
|
@@ -31,15 +30,14 @@ class MutableContractClient extends MercurySocketIoClient_1.default {
|
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
getEventSignatureByName(eventName) {
|
|
34
|
-
var _a, _b;
|
|
35
33
|
try {
|
|
36
34
|
const sig = this.eventContract || MutableContractClient.inMemoryContract
|
|
37
|
-
? spruce_event_utils_1.eventContractUtil.getSignatureByName(
|
|
35
|
+
? spruce_event_utils_1.eventContractUtil.getSignatureByName(this.eventContract ?? { eventSignatures: {} }, eventName)
|
|
38
36
|
: {};
|
|
39
37
|
return sig;
|
|
40
38
|
}
|
|
41
39
|
catch (err) {
|
|
42
|
-
const inMemorySig = spruce_event_utils_1.eventContractUtil.getSignatureByName(
|
|
40
|
+
const inMemorySig = spruce_event_utils_1.eventContractUtil.getSignatureByName(MutableContractClient.inMemoryContract ?? {
|
|
43
41
|
eventSignatures: {},
|
|
44
42
|
}, eventName);
|
|
45
43
|
return inMemorySig;
|
|
@@ -6,10 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const error_1 = __importDefault(require("@sprucelabs/error"));
|
|
7
7
|
class SpruceError extends error_1.default {
|
|
8
8
|
friendlyMessage() {
|
|
9
|
-
var _a;
|
|
10
9
|
const { options } = this;
|
|
11
10
|
let message;
|
|
12
|
-
switch (options
|
|
11
|
+
switch (options?.code) {
|
|
13
12
|
case 'INVALID_PROTOCOL':
|
|
14
13
|
message = `You must connect via the https protocol. The uri you used was ${options.uri}!`;
|
|
15
14
|
break;
|
|
@@ -65,7 +64,7 @@ class SpruceError extends error_1.default {
|
|
|
65
64
|
default:
|
|
66
65
|
message = super.friendlyMessage();
|
|
67
66
|
}
|
|
68
|
-
message =
|
|
67
|
+
message = options.friendlyMessage ?? message;
|
|
69
68
|
return message;
|
|
70
69
|
}
|
|
71
70
|
}
|
|
@@ -126,13 +126,12 @@ class AbstractClientTest extends test_1.default {
|
|
|
126
126
|
return skill;
|
|
127
127
|
}
|
|
128
128
|
static async seedDemoSkill(client) {
|
|
129
|
-
var _a;
|
|
130
129
|
const skill1Results = await client.emit('register-skill::v2020_12_25', {
|
|
131
130
|
payload: {
|
|
132
131
|
name: `${this.skillName} ${++this.dummySkillCount} ${new Date().getTime() * Math.random()}`,
|
|
133
132
|
},
|
|
134
133
|
});
|
|
135
|
-
const skill =
|
|
134
|
+
const skill = skill1Results.responses[0].payload?.skill;
|
|
136
135
|
test_1.assert.isTruthy(skill);
|
|
137
136
|
return skill;
|
|
138
137
|
}
|
package/build/tests/constants.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.DEMO_PHONE_RECONNECT = exports.DEMO_PHONE_FLATTEN_2 = exports.DEMO_PHONE_FLATTEN_1 = exports.DEMO_PHONE_PROXY = exports.DEMO_PHONE_TEAMMATE = exports.DEMO_PHONE_GUEST = exports.DEMO_PHONE_REAUTH = exports.DEMO_PHONE = exports.TEST_HOST = void 0;
|
|
5
4
|
require('dotenv').config();
|
|
6
|
-
exports.TEST_HOST =
|
|
7
|
-
exports.DEMO_PHONE =
|
|
8
|
-
exports.DEMO_PHONE_REAUTH =
|
|
9
|
-
exports.DEMO_PHONE_GUEST =
|
|
10
|
-
exports.DEMO_PHONE_TEAMMATE =
|
|
11
|
-
exports.DEMO_PHONE_PROXY =
|
|
12
|
-
exports.DEMO_PHONE_FLATTEN_1 =
|
|
13
|
-
exports.DEMO_PHONE_FLATTEN_2 =
|
|
14
|
-
exports.DEMO_PHONE_RECONNECT =
|
|
5
|
+
exports.TEST_HOST = process.env.TEST_HOST ?? 'https://localhost:8081';
|
|
6
|
+
exports.DEMO_PHONE = process.env.DEMO_PHONE ?? '';
|
|
7
|
+
exports.DEMO_PHONE_REAUTH = process.env.DEMO_PHONE_REAUTH ?? '**MISSING**';
|
|
8
|
+
exports.DEMO_PHONE_GUEST = process.env.DEMO_PHONE_GUEST ?? '**MISSING**';
|
|
9
|
+
exports.DEMO_PHONE_TEAMMATE = process.env.DEMO_PHONE_TEAMMATE ?? '**MISSING**';
|
|
10
|
+
exports.DEMO_PHONE_PROXY = process.env.DEMO_PHONE_PROXY ?? '**MISSING**';
|
|
11
|
+
exports.DEMO_PHONE_FLATTEN_1 = process.env.DEMO_PHONE_FLATTEN_1 ?? '**MISSING**';
|
|
12
|
+
exports.DEMO_PHONE_FLATTEN_2 = process.env.DEMO_PHONE_FLATTEN_2 ?? '**MISSING**';
|
|
13
|
+
exports.DEMO_PHONE_RECONNECT = process.env.DEMO_PHONE_RECONNECT ?? '**MISSING**';
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "42.0.
|
|
6
|
+
"version": "42.0.529",
|
|
7
7
|
"files": [
|
|
8
8
|
"build"
|
|
9
9
|
],
|
|
@@ -59,26 +59,26 @@
|
|
|
59
59
|
"watch.tsc": "tsc -w"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@sprucelabs/error": "^6.0.
|
|
63
|
-
"@sprucelabs/schema": "^30.0.
|
|
64
|
-
"@sprucelabs/spruce-core-schemas": "^40.1.
|
|
65
|
-
"@sprucelabs/spruce-event-utils": "^40.1.
|
|
66
|
-
"@sprucelabs/spruce-skill-utils": "^31.0.
|
|
62
|
+
"@sprucelabs/error": "^6.0.480",
|
|
63
|
+
"@sprucelabs/schema": "^30.0.489",
|
|
64
|
+
"@sprucelabs/spruce-core-schemas": "^40.1.475",
|
|
65
|
+
"@sprucelabs/spruce-event-utils": "^40.1.250",
|
|
66
|
+
"@sprucelabs/spruce-skill-utils": "^31.0.548",
|
|
67
67
|
"dotenv": "^16.4.5",
|
|
68
68
|
"just-clone": "^6.2.0",
|
|
69
69
|
"socket.io-client": "^4.8.0"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
"@sprucelabs/esm-postbuild": "^6.0.
|
|
73
|
-
"@sprucelabs/jest-json-reporter": "^8.0.
|
|
74
|
-
"@sprucelabs/mercury-core-events": "^24.3.
|
|
75
|
-
"@sprucelabs/mercury-event-emitter": "^42.0.
|
|
76
|
-
"@sprucelabs/mercury-types": "^47.0.
|
|
77
|
-
"@sprucelabs/resolve-path-aliases": "^2.0.
|
|
72
|
+
"@sprucelabs/esm-postbuild": "^6.0.463",
|
|
73
|
+
"@sprucelabs/jest-json-reporter": "^8.0.481",
|
|
74
|
+
"@sprucelabs/mercury-core-events": "^24.3.291",
|
|
75
|
+
"@sprucelabs/mercury-event-emitter": "^42.0.529",
|
|
76
|
+
"@sprucelabs/mercury-types": "^47.0.530",
|
|
77
|
+
"@sprucelabs/resolve-path-aliases": "^2.0.458",
|
|
78
78
|
"@sprucelabs/semantic-release": "^5.0.2",
|
|
79
|
-
"@sprucelabs/test": "^9.0.
|
|
80
|
-
"@sprucelabs/test-utils": "^5.1.
|
|
81
|
-
"@types/node": "^22.7.
|
|
79
|
+
"@sprucelabs/test": "^9.0.51",
|
|
80
|
+
"@sprucelabs/test-utils": "^5.1.433",
|
|
81
|
+
"@types/node": "^22.7.6",
|
|
82
82
|
"chokidar-cli": "^3.0.0",
|
|
83
83
|
"eslint": "^9.12.0",
|
|
84
84
|
"eslint-config-spruce": "^11.2.26",
|
|
@@ -108,5 +108,5 @@
|
|
|
108
108
|
"^#spruce/(.*)$": "<rootDir>/build/.spruce/$1"
|
|
109
109
|
}
|
|
110
110
|
},
|
|
111
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "c74e1698a15022645d6dcd223046bdb38ce6ef5b"
|
|
112
112
|
}
|