@soundworks/core 5.5.0 → 5.6.0
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/README.md +6 -0
- package/package.json +17 -11
- package/src/client/Client.js +7 -4
- package/src/client/ClientSocket.js +2 -3
- package/src/common/BasePlugin.js +2 -2
- package/src/common/BasePluginManager.js +2 -2
- package/src/common/BaseStateManager.js +8 -3
- package/src/common/ParameterBag.js +14 -14
- package/src/common/SharedState.js +40 -8
- package/src/common/SharedStateCollection.js +3 -3
- package/src/common/constants.js +2 -0
- package/src/common/isomorphic/colored-logger.browser.js +17 -0
- package/src/common/isomorphic/colored-logger.node.js +19 -0
- package/src/common/isomorphic/web-socket.browser.js +1 -0
- package/src/common/isomorphic/web-socket.node.js +3 -0
- package/src/common/logs/gated-logger.js +30 -0
- package/src/common/logs/warnings.js +36 -0
- package/src/common/version.js +1 -1
- package/src/server/Server.js +23 -35
- package/src/server/ServerClient.js +7 -3
- package/src/server/ServerStateManager.js +10 -6
- package/src/server/SharedStatePrivate.js +19 -0
- package/src/server/create-http-server.js +81 -39
- package/src/server/crypto.js +2 -3
- package/types/client/Client.d.ts.map +1 -1
- package/types/client/ClientSocket.d.ts.map +1 -1
- package/types/common/BaseStateManager.d.ts.map +1 -1
- package/types/common/ParameterBag.d.ts +28 -6
- package/types/common/ParameterBag.d.ts.map +1 -1
- package/types/common/SharedState.d.ts +7 -0
- package/types/common/SharedState.d.ts.map +1 -1
- package/types/common/constants.d.ts +1 -0
- package/types/common/constants.d.ts.map +1 -1
- package/types/common/isomorphic/colored-logger.browser.d.ts +8 -0
- package/types/common/isomorphic/colored-logger.browser.d.ts.map +1 -0
- package/types/common/isomorphic/colored-logger.node.d.ts +8 -0
- package/types/common/isomorphic/colored-logger.node.d.ts.map +1 -0
- package/types/common/isomorphic/web-socket.browser.d.ts +10 -0
- package/types/common/isomorphic/web-socket.browser.d.ts.map +1 -0
- package/types/common/isomorphic/web-socket.node.d.ts +2 -0
- package/types/common/isomorphic/web-socket.node.d.ts.map +1 -0
- package/types/common/logs/gated-logger.d.ts +9 -0
- package/types/common/logs/gated-logger.d.ts.map +1 -0
- package/types/common/logs/warnings.d.ts +7 -0
- package/types/common/logs/warnings.d.ts.map +1 -0
- package/types/common/version.d.ts +1 -1
- package/types/server/Server.d.ts.map +1 -1
- package/types/server/ServerClient.d.ts.map +1 -1
- package/types/server/ServerStateManager.d.ts.map +1 -1
- package/types/server/SharedStatePrivate.d.ts.map +1 -1
- package/types/server/create-http-server.d.ts +1 -0
- package/types/server/create-http-server.d.ts.map +1 -1
- package/types/server/crypto.d.ts.map +1 -1
- package/src/common/logger.js +0 -150
- package/types/common/logger.d.ts +0 -19
- package/types/common/logger.d.ts.map +0 -1
package/src/server/Server.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import os from 'node:os';
|
|
5
|
-
|
|
6
4
|
|
|
7
5
|
import {
|
|
8
6
|
isPlainObject,
|
|
@@ -10,10 +8,12 @@ import {
|
|
|
10
8
|
counter,
|
|
11
9
|
getTime,
|
|
12
10
|
} from '@ircam/sc-utils';
|
|
13
|
-
import chalk from 'chalk';
|
|
14
11
|
import Keyv from 'keyv';
|
|
15
12
|
import { KeyvFile } from 'keyv-file';
|
|
16
|
-
import
|
|
13
|
+
import { defu } from 'defu';
|
|
14
|
+
|
|
15
|
+
import gatedLogger from '../common/logs/gated-logger.js';
|
|
16
|
+
import warnings from '../common/logs/warnings.js';
|
|
17
17
|
|
|
18
18
|
import auditClassDescription from './audit-state-class-description.js';
|
|
19
19
|
import {
|
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
} from './crypto.js';
|
|
23
23
|
import {
|
|
24
24
|
createHttpServer,
|
|
25
|
+
logServerInfos,
|
|
25
26
|
} from './create-http-server.js';
|
|
26
27
|
import ServerClient, {
|
|
27
28
|
kServerClientToken,
|
|
@@ -57,7 +58,6 @@ import ServerSockets, {
|
|
|
57
58
|
kSocketsStart,
|
|
58
59
|
kSocketsStop,
|
|
59
60
|
} from './ServerSockets.js';
|
|
60
|
-
import logger from '../common/logger.js';
|
|
61
61
|
import {
|
|
62
62
|
SERVER_ID,
|
|
63
63
|
CLIENT_HANDSHAKE_REQUEST,
|
|
@@ -159,7 +159,7 @@ class Server {
|
|
|
159
159
|
throw new TypeError(`Cannot construct 'Server': Parameter 1 must be an object`);
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
config =
|
|
162
|
+
config = defu(config, DEFAULT_CONFIG);
|
|
163
163
|
|
|
164
164
|
// ---------------------------------------------------------------------
|
|
165
165
|
// Deprecation checks for config
|
|
@@ -170,7 +170,7 @@ class Server {
|
|
|
170
170
|
const clientConfig = config.app.clients[role];
|
|
171
171
|
|
|
172
172
|
if (clientConfig.target) {
|
|
173
|
-
|
|
173
|
+
warnings.deprecated('ClientDescription#target', 'ClientDescription#runtime (or run `npx soundworks --upgrade-config` to upgrade your config files)', '4.0.0-alpha.29');
|
|
174
174
|
clientConfig.runtime = clientConfig.target;
|
|
175
175
|
delete clientConfig.target;
|
|
176
176
|
}
|
|
@@ -178,7 +178,7 @@ class Server {
|
|
|
178
178
|
|
|
179
179
|
// `env.subpath` to `env.baseUrl`
|
|
180
180
|
if ('subpath' in config.env) {
|
|
181
|
-
|
|
181
|
+
warnings.deprecated('ServerConfig#subpath', 'ServerConfig#baseUrl (or run `npx soundworks --upgrade-config` to upgrade your config files)', '4.0.0-alpha.29');
|
|
182
182
|
config.env.baseUrl = config.env.subpath;
|
|
183
183
|
delete config.env.subpath;
|
|
184
184
|
}
|
|
@@ -240,7 +240,7 @@ class Server {
|
|
|
240
240
|
// register audit state schema
|
|
241
241
|
this.#stateManager.defineClass(AUDIT_STATE_NAME, auditClassDescription);
|
|
242
242
|
|
|
243
|
-
|
|
243
|
+
gatedLogger.verbose = !!this.#config.env.verbose;
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
/**
|
|
@@ -506,7 +506,7 @@ class Server {
|
|
|
506
506
|
const { configureHttpRouter } = await import('@soundworks/helpers/server.js');
|
|
507
507
|
configureHttpRouter(this);
|
|
508
508
|
} catch (err) {
|
|
509
|
-
|
|
509
|
+
console.warn('Could not apply patch for deprecated `useDefaultApplicationTemplate` method. Please use `configureHttpRouter` from helpers instead.');
|
|
510
510
|
throw err;
|
|
511
511
|
}
|
|
512
512
|
}
|
|
@@ -516,7 +516,7 @@ class Server {
|
|
|
516
516
|
this.#httpServer = await createHttpServer(this);
|
|
517
517
|
await this.#dispatchStatus('http-server-ready');
|
|
518
518
|
} catch (err) {
|
|
519
|
-
|
|
519
|
+
console.error(err.message);
|
|
520
520
|
await this.#dispatchStatus('errored');
|
|
521
521
|
throw err;
|
|
522
522
|
}
|
|
@@ -564,31 +564,19 @@ class Server {
|
|
|
564
564
|
// start `SocketServer`
|
|
565
565
|
await this.#sockets[kSocketsStart]();
|
|
566
566
|
// start httpServer
|
|
567
|
-
|
|
568
|
-
const port = this.#config.env.port;
|
|
569
|
-
const protocol = this.#config.env.useHttps ? 'https' : 'http';
|
|
570
|
-
const interfaces = os.networkInterfaces();
|
|
571
|
-
|
|
572
|
-
this.#httpServer.listen(port, async () => {
|
|
573
|
-
logger.title(`${protocol} server listening on`);
|
|
574
|
-
|
|
575
|
-
Object.keys(interfaces).forEach(dev => {
|
|
576
|
-
interfaces[dev].forEach(details => {
|
|
577
|
-
if (details.family === 'IPv4') {
|
|
578
|
-
logger.ip(protocol, details.address, port);
|
|
579
|
-
}
|
|
580
|
-
});
|
|
581
|
-
});
|
|
567
|
+
const { promise, resolve } = Promise.withResolvers();
|
|
582
568
|
|
|
583
|
-
|
|
569
|
+
this.#httpServer.listen(this.#config.env.port, async () => {
|
|
570
|
+
if (this.#config.env.verbose) {
|
|
571
|
+
logServerInfos(this.#config.env);
|
|
572
|
+
}
|
|
584
573
|
|
|
585
|
-
|
|
586
|
-
logger.log(`\n> press "${chalk.bold('Ctrl + C')}" to exit`);
|
|
587
|
-
}
|
|
574
|
+
await this.#dispatchStatus('started');
|
|
588
575
|
|
|
589
|
-
|
|
590
|
-
});
|
|
576
|
+
resolve();
|
|
591
577
|
});
|
|
578
|
+
|
|
579
|
+
return promise;
|
|
592
580
|
}
|
|
593
581
|
|
|
594
582
|
/**
|
|
@@ -709,7 +697,7 @@ class Server {
|
|
|
709
697
|
}
|
|
710
698
|
|
|
711
699
|
if (version !== this.#version) {
|
|
712
|
-
|
|
700
|
+
warnings.versionDiscrepancies(role, version, this.#version);
|
|
713
701
|
}
|
|
714
702
|
|
|
715
703
|
try {
|
|
@@ -872,7 +860,7 @@ class Server {
|
|
|
872
860
|
// @note - keyv-file doesn't seems to works
|
|
873
861
|
const store = new KeyvFile({ filename });
|
|
874
862
|
const db = new Keyv({ namespace, store });
|
|
875
|
-
db.on('error', err =>
|
|
863
|
+
db.on('error', err => console.error(`namespaced db ("${namespace}") error:`, err));
|
|
876
864
|
|
|
877
865
|
return db;
|
|
878
866
|
}
|
|
@@ -881,7 +869,7 @@ class Server {
|
|
|
881
869
|
* @deprecated
|
|
882
870
|
*/
|
|
883
871
|
useDefaultApplicationTemplate() {
|
|
884
|
-
|
|
872
|
+
warnings.deprecated('Server#useDefaultApplicationTemplate', '`configureHttpRouter(server)` from the `@soundworks/helpers/server.js` package', '4.0.0-alpha.29');
|
|
885
873
|
this.#useDefaultApplicationTemplate = true;
|
|
886
874
|
}
|
|
887
875
|
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
counter,
|
|
5
|
+
} from '@ircam/sc-utils';
|
|
6
|
+
|
|
3
7
|
|
|
4
8
|
const generateId = counter();
|
|
5
9
|
|
|
@@ -24,7 +28,7 @@ class ServerClient {
|
|
|
24
28
|
constructor(role, socket) {
|
|
25
29
|
this.#role = role;
|
|
26
30
|
this.#id = generateId();
|
|
27
|
-
this.#uuid =
|
|
31
|
+
this.#uuid = crypto.randomUUID();
|
|
28
32
|
this.#socket = socket;
|
|
29
33
|
|
|
30
34
|
/**
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
counter,
|
|
3
|
+
isString,
|
|
4
|
+
isPlainObject,
|
|
5
|
+
isFunction,
|
|
6
|
+
} from '@ircam/sc-utils';
|
|
3
7
|
|
|
4
8
|
import BaseStateManager, {
|
|
5
9
|
kStateManagerInit,
|
|
@@ -32,7 +36,7 @@ import SharedStatePrivate, {
|
|
|
32
36
|
kSharedStatePrivateGetValues,
|
|
33
37
|
} from './SharedStatePrivate.js';
|
|
34
38
|
|
|
35
|
-
import
|
|
39
|
+
import warnings from '../common/logs/warnings.js';
|
|
36
40
|
|
|
37
41
|
|
|
38
42
|
const generateStateId = counter();
|
|
@@ -486,7 +490,7 @@ class ServerStateManager extends BaseStateManager {
|
|
|
486
490
|
throw new TypeError(`Cannot execute 'defineClass' (${className}) on ServerStateManager: ${err.message}`);
|
|
487
491
|
}
|
|
488
492
|
|
|
489
|
-
this.#classes.set(className,
|
|
493
|
+
this.#classes.set(className, structuredClone(classDescription));
|
|
490
494
|
// create hooks list
|
|
491
495
|
this.#createHooksByClassName.set(className, new Set());
|
|
492
496
|
this.#updateHooksByClassName.set(className, new Set());
|
|
@@ -497,7 +501,7 @@ class ServerStateManager extends BaseStateManager {
|
|
|
497
501
|
* @deprecated Use {@link ServerStateManager#defineClass} instead.
|
|
498
502
|
*/
|
|
499
503
|
registerSchema(className, classDescription) {
|
|
500
|
-
|
|
504
|
+
warnings.deprecated('ServerStateManager#registerSchema', 'ServerStateManager#defineClass', '4.0.0-alpha.29');
|
|
501
505
|
this.defineClass(className, classDescription);
|
|
502
506
|
}
|
|
503
507
|
|
|
@@ -543,7 +547,7 @@ class ServerStateManager extends BaseStateManager {
|
|
|
543
547
|
* @deprecated Use {@link ServerStateManager#defineClass} instead.
|
|
544
548
|
*/
|
|
545
549
|
deleteSchema(className) {
|
|
546
|
-
|
|
550
|
+
warnings.deprecated('ServerStateManager#deleteSchema', 'ServerStateManager#deleteClass', '4.0.0-alpha.29');
|
|
547
551
|
this.deleteClass(className);
|
|
548
552
|
}
|
|
549
553
|
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
UPDATE_RESPONSE,
|
|
10
10
|
UPDATE_ABORT,
|
|
11
11
|
UPDATE_NOTIFICATION,
|
|
12
|
+
HAS_SIBLINGS_NOTIFICATION,
|
|
12
13
|
} from '../common/constants.js';
|
|
13
14
|
import {
|
|
14
15
|
kServerStateManagerDeletePrivateState,
|
|
@@ -297,6 +298,8 @@ class SharedStatePrivate {
|
|
|
297
298
|
this[kSharedStatePrivateDetachClient](instanceId, client);
|
|
298
299
|
client.transport.emit(`${DETACH_RESPONSE}-${this.id}-${instanceId}`, reqId);
|
|
299
300
|
});
|
|
301
|
+
|
|
302
|
+
this.#updateHasSiblings();
|
|
300
303
|
}
|
|
301
304
|
}
|
|
302
305
|
|
|
@@ -306,6 +309,22 @@ class SharedStatePrivate {
|
|
|
306
309
|
client.transport.removeAllListeners(`${UPDATE_REQUEST}-${this.id}-${instanceId}`);
|
|
307
310
|
client.transport.removeAllListeners(`${DELETE_REQUEST}-${this.id}-${instanceId}`);
|
|
308
311
|
client.transport.removeAllListeners(`${DETACH_REQUEST}-${this.id}-${instanceId}`);
|
|
312
|
+
|
|
313
|
+
this.#updateHasSiblings();
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Update hasSiblings property on owner
|
|
318
|
+
*/
|
|
319
|
+
#updateHasSiblings() {
|
|
320
|
+
for (let [instanceId, clientInfos] of this.attachedClients) {
|
|
321
|
+
const { client, isOwner } = clientInfos;
|
|
322
|
+
|
|
323
|
+
if (isOwner) {
|
|
324
|
+
const hasSiblings = this.attachedClients.size > 1;
|
|
325
|
+
client.transport.emit(`${HAS_SIBLINGS_NOTIFICATION}-${this.id}-${instanceId}`, hasSiblings);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
309
328
|
}
|
|
310
329
|
}
|
|
311
330
|
|
|
@@ -1,32 +1,26 @@
|
|
|
1
|
-
import http from 'node:http';
|
|
2
|
-
import https from 'node:https';
|
|
3
|
-
import fs from 'node:fs';
|
|
4
1
|
import {
|
|
5
2
|
X509Certificate,
|
|
6
3
|
createPrivateKey,
|
|
7
4
|
} from 'node:crypto';
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import http from 'node:http';
|
|
7
|
+
import https from 'node:https';
|
|
8
|
+
import os from 'node:os';
|
|
9
|
+
import {
|
|
10
|
+
styleText,
|
|
11
|
+
} from 'node:util';
|
|
8
12
|
|
|
9
|
-
import
|
|
10
|
-
import equal from 'fast-deep-equal';
|
|
11
|
-
|
|
12
|
-
import logger from '../common/logger.js';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @private
|
|
16
|
-
* @return {HttpServer|HttpsServer}
|
|
17
|
-
*/
|
|
18
|
-
export async function createHttpServer(server) {
|
|
19
|
-
const serverConfig = server.config;
|
|
20
|
-
|
|
21
|
-
if (serverConfig.env.useHttps !== true) {
|
|
22
|
-
return http.createServer();
|
|
23
|
-
}
|
|
13
|
+
import selfsigned from 'selfsigned';
|
|
24
14
|
|
|
15
|
+
async function createHttpsServer(server) {
|
|
25
16
|
// https is more tricky
|
|
26
|
-
const httpsInfos =
|
|
17
|
+
const httpsInfos = server.config.env.httpsInfos;
|
|
27
18
|
let useSelfSigned = false;
|
|
28
19
|
|
|
29
|
-
if (!httpsInfos
|
|
20
|
+
if (!httpsInfos
|
|
21
|
+
|| !fs.existsSync(httpsInfos.cert)
|
|
22
|
+
|| !fs.existsSync(httpsInfos.key)
|
|
23
|
+
) {
|
|
30
24
|
useSelfSigned = true;
|
|
31
25
|
}
|
|
32
26
|
|
|
@@ -77,7 +71,7 @@ export async function createHttpServer(server) {
|
|
|
77
71
|
|
|
78
72
|
httpsServer = https.createServer({ key, cert });
|
|
79
73
|
} catch (err) {
|
|
80
|
-
|
|
74
|
+
console.error(`
|
|
81
75
|
Invalid certificate files, please check your:
|
|
82
76
|
- key file: ${httpsInfos.key}
|
|
83
77
|
- cert file: ${httpsInfos.cert}
|
|
@@ -86,33 +80,23 @@ Invalid certificate files, please check your:
|
|
|
86
80
|
throw err;
|
|
87
81
|
}
|
|
88
82
|
} else {
|
|
83
|
+
|
|
89
84
|
// generate self signed certs or reused already existing ones
|
|
90
85
|
let cert = await server.db.get('httpsCert');
|
|
91
86
|
let key = await server.db.get('httpsKey');
|
|
92
87
|
|
|
93
88
|
if (!cert || !key) {
|
|
94
89
|
try {
|
|
95
|
-
const result = await
|
|
96
|
-
pem.createCertificate({ days: 1, selfSigned: true }, async (err, keys) => {
|
|
97
|
-
if (err) {
|
|
98
|
-
reject(err);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
resolve({
|
|
103
|
-
cert: keys.certificate,
|
|
104
|
-
key: keys.serviceKey,
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
});
|
|
90
|
+
const result = await selfsigned.generate(null);
|
|
108
91
|
|
|
109
92
|
cert = result.cert;
|
|
110
|
-
key = result.
|
|
93
|
+
key = result.private;
|
|
94
|
+
|
|
111
95
|
// store the generated certs to reuse on next start
|
|
112
|
-
await server.db.set('httpsCert', cert);
|
|
113
|
-
await server.db.set('httpsKey', key);
|
|
96
|
+
await server.db.set('httpsCert', cert); // -----BEGIN CERTIFICATE-----
|
|
97
|
+
await server.db.set('httpsKey', key); // -----BEGIN RSA PRIVATE KEY-----
|
|
114
98
|
} catch (err) {
|
|
115
|
-
|
|
99
|
+
console.error(err.stack);
|
|
116
100
|
throw err;
|
|
117
101
|
}
|
|
118
102
|
}
|
|
@@ -121,7 +105,65 @@ Invalid certificate files, please check your:
|
|
|
121
105
|
httpsServer = https.createServer({ cert, key });
|
|
122
106
|
}
|
|
123
107
|
|
|
124
|
-
|
|
108
|
+
// Log certificate information, just be verbose
|
|
109
|
+
console.log(styleText('cyan', `https certificates infos`));
|
|
110
|
+
|
|
111
|
+
if (httpsCertsInfos.selfSigned) {
|
|
112
|
+
console.warn(styleText('yellow', ` -------------------------------------------`));
|
|
113
|
+
console.warn(styleText('yellow', ` > USING SELF-SIGNED CERTIFICATE. `));
|
|
114
|
+
console.warn(styleText('yellow', ` users will face a unsafe web page warning `));
|
|
115
|
+
console.warn(styleText('yellow', ` -------------------------------------------`));
|
|
116
|
+
} else {
|
|
117
|
+
console.log(` valid from: ${httpsCertsInfos.validFrom}`);
|
|
118
|
+
console.log(` valid to: ${httpsCertsInfos.validTo}`);
|
|
119
|
+
|
|
120
|
+
if (!httpsCertsInfos.isValid) {
|
|
121
|
+
console.error(styleText('red', ` -------------------------------------------`));
|
|
122
|
+
console.error(styleText('red', ` > INVALID CERTIFICATE `));
|
|
123
|
+
console.error(styleText('red', ` i.e. you pretend to be safe but you are not`));
|
|
124
|
+
console.error(styleText('red', ` -------------------------------------------`));
|
|
125
|
+
} else {
|
|
126
|
+
if (httpsCertsInfos.daysRemaining < 5) {
|
|
127
|
+
console.log(styleText('red', ` > CERTIFICATE IS VALID... BUT ONLY ${httpsCertsInfos.daysRemaining} DAYS LEFT, PLEASE CONSIDER UPDATING YOUR CERTS!`));
|
|
128
|
+
} else if (httpsCertsInfos.daysRemaining < 15) {
|
|
129
|
+
console.log(styleText('yellow', ` > CERTIFICATE IS VALID - only ${httpsCertsInfos.daysRemaining} days left, be careful...`));
|
|
130
|
+
} else {
|
|
131
|
+
console.log(styleText('green', ` > CERTIFICATE IS VALID (${httpsCertsInfos.daysRemaining} days left)`));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
125
135
|
|
|
126
136
|
return httpsServer;
|
|
127
137
|
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @private
|
|
141
|
+
* @return {HttpServer|HttpsServer}
|
|
142
|
+
*/
|
|
143
|
+
export async function createHttpServer(server) {
|
|
144
|
+
const serverConfig = server.config;
|
|
145
|
+
|
|
146
|
+
const httpServer = serverConfig.env.useHttps !== true
|
|
147
|
+
? http.createServer()
|
|
148
|
+
: await createHttpsServer(server);
|
|
149
|
+
|
|
150
|
+
return httpServer;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export function logServerInfos(envConfig) {
|
|
154
|
+
const protocol = envConfig.useHttps ? 'https' : 'http';
|
|
155
|
+
const port = envConfig.port;
|
|
156
|
+
const interfaces = os.networkInterfaces();
|
|
157
|
+
|
|
158
|
+
console.log(styleText('cyan', `${protocol} server listening on`));
|
|
159
|
+
|
|
160
|
+
Object.keys(interfaces).forEach(dev => {
|
|
161
|
+
interfaces[dev].forEach(details => {
|
|
162
|
+
if (details.family === 'IPv4') {
|
|
163
|
+
console.log(` ${protocol}://${details.address}:${styleText('green', `${port}`)}`);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
console.log(`\n> press "${styleText('bold', 'Ctrl + C')}" to exit`);
|
|
169
|
+
}
|
package/src/server/crypto.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import crypto from 'node:crypto';
|
|
2
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
3
2
|
|
|
4
3
|
// adapted from https://dev.to/jobizil/encrypt-and-decrypt-data-in-nodejs-using-aes-256-cbc-2l6d
|
|
5
4
|
// generate a new key and init vector each time the server restart, we don't need
|
|
6
5
|
// any persistency here
|
|
7
|
-
const secretKey =
|
|
8
|
-
const secretIv =
|
|
6
|
+
const secretKey = crypto.randomUUID();
|
|
7
|
+
const secretIv = crypto.randomUUID();
|
|
9
8
|
const encryptionMethod = 'aes-256-cbc';
|
|
10
9
|
|
|
11
10
|
const key = crypto
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/client/Client.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/client/Client.js"],"names":[],"mappings":"AAgCA,+CAA2E;AAC3E,2DAAqG;;AAErG;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IAeE;;;OAGG;IACH,oBAHW,YAAY,EA+DtB;IAED;;;;OAIG;IACH,eAFU,MAAM,CAIf;IAED;;;;OAIG;IACH,YAFU,MAAM,CAIf;IAED;;;;OAIG;IACH,cAFU,YAAY,CAIrB;IAED;;;;;;;OAOG;IACH,UAFU,MAAM,CAIf;IAED;;;;;OAKG;IACH,YAFU,MAAM,CAIf;IAED;;;;;;;OAOG;IACH,aAFU,MAAM,CAIf;IAED;;;;OAIG;IACH,eAFU,MAAM,GAAC,SAAS,CAIzB;IAED;;OAEG;IACH,iCAGC;IAED;;;;;OAKG;IACH,cAFU,YAAY,CAIrB;IAED;;;;;;;OAOG;IACH,sBAFU,oBAAoB,CAI7B;IAED;;;;;;;OAOG;IACH,8CAEC;IAED;;;;;;;OAOG;IACH,oBAFU,kBAAkB,CAI3B;IAED;;;;OAIG;IACH,cAFU,MAAM,GAAC,QAAQ,GAAC,SAAS,GAAC,SAAS,CAI5C;IAqBD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,sBA0DC;IAED;;;;;;;;;;;;;;;OAeG;IACH,uBAgBC;IAED;;;;;;;;;;;;;;;OAeG;IACH,sBAcC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,iBAPa,OAAO,CAAC,WAAW,CAAC,CAiBhC;IAED;;;;;OAKG;IACH,6CAGC;IA3VC,2CAAgD;;CA4VnD;yBAtdM,mBAAmB;iCARnB,2BAA2B;gCACF,0BAA0B;+BAQ3B,yBAAyB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientSocket.d.ts","sourceRoot":"","sources":["../../src/client/ClientSocket.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClientSocket.d.ts","sourceRoot":"","sources":["../../src/client/ClientSocket.js"],"names":[],"mappings":"AAYA,6CAAsE;;AAEtE;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAOE,wDAIC;IAED;;;;;;;OAOG;IACH,aA4HC;IAoCD;;;;;;OAMG;IACH,cAJW,MAAM,WACH,GAAC,EAAA,QAQd;IAED;;;;;;;OAOG;IACH,qBALW,MAAM,4BAYhB;IAED;;;;;OAKG;IACH,wBAHW,MAAM,4BAYhB;IAED;;;;OAIG;IACH,6BAFW,MAAM,QAQhB;IAED;;OAEG;IACH,cAEC;IApGD;;;;;;;;;OASG;IACH,2BAWC;;CAgFF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseStateManager.d.ts","sourceRoot":"","sources":["../../src/common/BaseStateManager.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseStateManager.d.ts","sourceRoot":"","sources":["../../src/common/BaseStateManager.js"],"names":[],"mappings":"AAgCA,8CAAyE;AACzE,qDAAwF;AAExF,gDAA6E;;;;;;;;;;;AAE7E;;;;;;;;GAQG;AACH;;;;;GAKG;AAEH,eAAe;AACf;IAuLE;;;;;;OAMG;IACH,2CAHW,GAAC,QAKX;IAED;;;;;;;;OAQG;IACH,+BANW,oBAAoB,GAEnB,2BAA2B,CAatC;IAED;;OAEG;IACH,wCAGC;IAED;;;;;;;;OAQG;IACH,kBANW,oBAAoB;;QAElB,OAAO,CAAC,WAAW,CAAC,CAahC;;;;;;;;;;;IAKE,kBACQ,oBAAoB,GAClB,OAAO,CAAC,WAAW,CAAC,CAE9B;;;;;;;;;;;;IAMA,kBACQ,oBAAoB,WACpB,MAAM,GACJ,OAAO,CAAC,WAAW,CAAC,CAE9B;;;;;;;;;;;;IAMA,kBACQ,oBAAoB,UACpB,MAAM,EAAE,GACN,OAAO,CAAC,WAAW,CAAC,CAE9B;;;;;;;;;;;;;IAMA,kBACQ,oBAAoB,WACpB,MAAM,UACN,MAAM,EAAE,GACN,OAAO,CAAC,WAAW,CAAC,CAE9B;;;;;;;;;;;;;;IAsEA,kBACQ,2BAA2B,OAEnC;;;;;;;;;;;;;;;IAWA,mBACQ,oBAAoB,YAEpB,2BAA2B,OAEnC;;;;;;;;;;;;;;;;;;IASA,kBACQ,2BAA2B,WAGnC;QAAyB,YAAY,EAA7B,OAAO;KAEf,OAAA;;;;;;;;;;;;;;;;;;IAWA,mBACQ,oBAAoB,YAEpB,2BAA2B,WAGnC;QAAyB,YAAY,EAA7B,OAAO;KAEf,OAAA;;;;;;;;;;;IAwJA,yBACQ,oBAAoB,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAExC;;;;;;;;;;;;;IAMA,yBACQ,oBAAoB,UACpB,wBAAwB,EAAE,GAExB,OAAO,CAAC,qBAAqB,CAAC,CAExC;;;;;;;;;;;;;;IAMA,yBACQ,oBAAoB,WAE5B;QAAyB,YAAY,EAA7B,OAAO;KAEf,GAAU,OAAO,CAAC,qBAAqB,CAAC,CAExC;;;;;;;;;;;;;;;;IAMA,yBACQ,oBAAoB,UACpB,wBAAwB,EAAE,WAGlC;QAAyB,YAAY,EAA7B,OAAO;KAEf,GAAU,OAAO,CAAC,qBAAqB,CAAC,CAExC;IA7jBH,eAAe;IACf,mCAEC;IAED;;;;;;;OAOG;IACH,4BA2IC;IA5KC,eAAe;IACf,8BAAgC;;CAupBnC;wBAjtBuB,kBAAkB;kCAGnC,4BAA4B"}
|
|
@@ -11,13 +11,13 @@ export namespace types {
|
|
|
11
11
|
export namespace boolean {
|
|
12
12
|
let required_1: string[];
|
|
13
13
|
export { required_1 as required };
|
|
14
|
-
export
|
|
14
|
+
export namespace defaultOptions { }
|
|
15
15
|
export function coerceFunction(name: any, def: any, value: any): value is true;
|
|
16
16
|
}
|
|
17
17
|
export namespace string {
|
|
18
18
|
let required_2: string[];
|
|
19
19
|
export { required_2 as required };
|
|
20
|
-
|
|
20
|
+
export namespace defaultOptions_1 { }
|
|
21
21
|
export { defaultOptions_1 as defaultOptions };
|
|
22
22
|
export function coerceFunction_1(name: any, def: any, value: any): string;
|
|
23
23
|
export { coerceFunction_1 as coerceFunction };
|
|
@@ -25,7 +25,18 @@ export namespace types {
|
|
|
25
25
|
export namespace integer {
|
|
26
26
|
let required_3: string[];
|
|
27
27
|
export { required_3 as required };
|
|
28
|
-
const defaultOptions_2:
|
|
28
|
+
const defaultOptions_2: {
|
|
29
|
+
nullable: boolean;
|
|
30
|
+
event: boolean;
|
|
31
|
+
required: boolean;
|
|
32
|
+
metas: {};
|
|
33
|
+
filterChange: boolean;
|
|
34
|
+
immediate: boolean;
|
|
35
|
+
acknowledge: boolean;
|
|
36
|
+
} & {
|
|
37
|
+
min: number;
|
|
38
|
+
max: number;
|
|
39
|
+
};
|
|
29
40
|
export { defaultOptions_2 as defaultOptions };
|
|
30
41
|
export function sanitizeDescription(def: any): any;
|
|
31
42
|
export function coerceFunction_2(name: any, def: any, value: any): number;
|
|
@@ -34,7 +45,18 @@ export namespace types {
|
|
|
34
45
|
export namespace float {
|
|
35
46
|
let required_4: string[];
|
|
36
47
|
export { required_4 as required };
|
|
37
|
-
const defaultOptions_3:
|
|
48
|
+
const defaultOptions_3: {
|
|
49
|
+
nullable: boolean;
|
|
50
|
+
event: boolean;
|
|
51
|
+
required: boolean;
|
|
52
|
+
metas: {};
|
|
53
|
+
filterChange: boolean;
|
|
54
|
+
immediate: boolean;
|
|
55
|
+
acknowledge: boolean;
|
|
56
|
+
} & {
|
|
57
|
+
min: number;
|
|
58
|
+
max: number;
|
|
59
|
+
};
|
|
38
60
|
export { defaultOptions_3 as defaultOptions };
|
|
39
61
|
export function sanitizeDescription_1(def: any): any;
|
|
40
62
|
export { sanitizeDescription_1 as sanitizeDescription };
|
|
@@ -44,7 +66,7 @@ export namespace types {
|
|
|
44
66
|
export namespace _enum {
|
|
45
67
|
let required_5: string[];
|
|
46
68
|
export { required_5 as required };
|
|
47
|
-
|
|
69
|
+
export namespace defaultOptions_4 { }
|
|
48
70
|
export { defaultOptions_4 as defaultOptions };
|
|
49
71
|
export function coerceFunction_4(name: any, def: any, value: any): any;
|
|
50
72
|
export { coerceFunction_4 as coerceFunction };
|
|
@@ -53,7 +75,7 @@ export namespace types {
|
|
|
53
75
|
export namespace any {
|
|
54
76
|
let required_6: string[];
|
|
55
77
|
export { required_6 as required };
|
|
56
|
-
|
|
78
|
+
export namespace defaultOptions_5 { }
|
|
57
79
|
export { defaultOptions_5 as defaultOptions };
|
|
58
80
|
export function coerceFunction_5(name: any, def: any, value: any): any;
|
|
59
81
|
export { coerceFunction_5 as coerceFunction };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParameterBag.d.ts","sourceRoot":"","sources":["../../src/common/ParameterBag.js"],"names":[],"mappings":";;;;;;;;;;;;;;QAuBoB,+EAMf;;;;;;;QAOe,0EAMf
|
|
1
|
+
{"version":3,"file":"ParameterBag.d.ts","sourceRoot":"","sources":["../../src/common/ParameterBag.js"],"names":[],"mappings":";;;;;;;;;;;;;;QAuBoB,+EAMf;;;;;;;QAOe,0EAMf;;;;;;;;;;;;;;;;;;;QAUoB,mDAgBpB;QACe,0EAMf;;;;;;;;;;;;;;;;;;;QAUoB,qDAgBpB;;QACe,0EAMf;;;;;;;;QAOe,uEAOf;;;;;;;;;QAOe,uEAGf;;;;;AAKL,eAAe;AACf;IACE,mDAoCC;IAED,iDAyBC;IAKD,+CAyCC;IAED;;;;;OAKG;IACH,UAHW,MAAM,WAKhB;IAED;;;;;OAKG;IACH,aAFY,MAAM,CAUjB;IAED;;;;;;;;OAQG;IACH,mBAFY,MAAM,CAUjB;IAED;;;;;;OAMG;IACH,UAHW,MAAM,GACL,KAAK,CAchB;IAED;;;;;;;;;OASG;IACH,gBAHW,MAAM,GACL,KAAK,CAQhB;IAED;;;;;OAKG;IACH,iCAFW,KAAK,SAmBf;IAED;;;;;;;;OAQG;IACH,UAJW,MAAM,SACN,KAAK,SAqBf;IAED;;;;;;OAMG;IAWH;;OAEG;IACH,6BAFY,MAAM,CAYjB;IAGD,oBAQC;IAGD,kBAQC;IAGD,8EAUC;;CACF"}
|
|
@@ -108,6 +108,13 @@ declare class SharedState {
|
|
|
108
108
|
* @type {Boolean}
|
|
109
109
|
*/
|
|
110
110
|
get isOwner(): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Indicates if the node as siblings, i.e. if several versions of the same state
|
|
113
|
+
* exists on the network
|
|
114
|
+
* Always return true if the state instance is attached
|
|
115
|
+
* @type {Boolean}
|
|
116
|
+
*/
|
|
117
|
+
get hasSiblings(): boolean;
|
|
111
118
|
/**
|
|
112
119
|
* Return the underlying {@link SharedStateClassDescription} or the
|
|
113
120
|
* {@link SharedStateParameterDescription} if `paramName` is given.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SharedState.d.ts","sourceRoot":"","sources":["../../src/common/SharedState.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SharedState.d.ts","sourceRoot":"","sources":["../../src/common/SharedState.js"],"names":[],"mappings":"AA2BA,qDAAwF;;;;;sDAM7E,MAAM,aAEN,MAAM;;;;;AANjB;;;;;;;;GAQG;AAEH;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH;IAiBE;;;;;;;;;OAkKC;IAED;;;OAGG;IACH,iBAEC;IAED;;;OAGG;IACH,wBAEC;IAED;;OAEG;IACH,yBAGC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;;OAKG;IACH,2BAUC;IAwED;;;;;;;;;;;OAWG;IACH,2BARW,MAAM,GAEL,2BAA2B,GAAC,+BAA+B,CAYtE;IAED;;OAEG;IACH,iCAGC;;;;;;;;;;;IAQE,aACQ,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAC3B;;;;;;;;;;;;IAOE,UACQ,wBAAwB,SACxB,GAAC,GACC,OAAO,CAAC,MAAM,CAAC,CAC3B;IA8KD;;;;;;;;;;;;;;OAcG;IACH,UANW,wBAAwB,GACvB,GAAG,CAiBd;IAED;;;;;;;;;;;;;;OAcG;IACH,gBANW,wBAAwB,GACvB,GAAG,CAiBd;IAED;;;;;;;;OAQG;IACH,aAJY,MAAM,CAgBjB;IAED;;;;;;;;;;;;OAYG;IACH,mBAJY,MAAM,CAgBjB;IAED;;;;;;;OAOG;IACH,iBAJY,MAAM,CAMjB;IAED;;;;;;OAMG;IACH,eAJY,MAAM,CAMjB;IAED;;;;;;;;OAQG;IACH,uBAiBC;IAED;;;;;;;;;;;;;;OAcG;IACH,uBAUC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,oDAba,iCAAiC,CAkC7C;IAED;;;;;;;OAOG;IACH,4CAGC;IAED;;;;;;OAMG;IACH,4CAOC;IAluBC,eAAe;IACf,mCAAwE;;CAkuB3E"}
|
|
@@ -29,6 +29,7 @@ export const DELETE_SHARED_STATE_CLASS: "s:d:s";
|
|
|
29
29
|
export const GET_CLASS_DESCRIPTION_REQUEST: "s:s:req";
|
|
30
30
|
export const GET_CLASS_DESCRIPTION_RESPONSE: "s:s:res";
|
|
31
31
|
export const GET_CLASS_DESCRIPTION_ERROR: "s:s:err";
|
|
32
|
+
export const HAS_SIBLINGS_NOTIFICATION: "s:hs:not";
|
|
32
33
|
export const CONTEXT_ENTER_REQUEST: "c:en:req";
|
|
33
34
|
export const CONTEXT_ENTER_RESPONSE: "c:en:res";
|
|
34
35
|
export const CONTEXT_ENTER_ERROR: "c:en:err";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/common/constants.js"],"names":[],"mappings":"AACA,wBAAyB,CAAC,CAAC,CAAC;AAE5B,mCAAuC;AACvC,2BAA4B,QAAQ,CAAC;AACrC,2BAA4B,QAAQ,CAAC;AAGrC,wCAAyC,KAAK,CAAC;AAG/C,6BAA8B,SAAS,CAAC;AACxC,8BAA+B,SAAS,CAAC;AACzC,2BAA4B,SAAS,CAAC;AAEtC,6BAA8B,UAAU,CAAC;AACzC,8BAA+B,UAAU,CAAC;AAC1C,2BAA4B,UAAU,CAAC;AACvC,kCAAmC,UAAU,CAAC;AAE9C,6BAA8B,SAAS,CAAC;AACxC,8BAA+B,SAAS,CAAC;AACzC,2BAA4B,SAAS,CAAC;AAEtC,6BAA8B,UAAU,CAAC;AACzC,8BAA+B,UAAU,CAAC;AAC1C,2BAA4B,UAAU,CAAC;AAEvC,8BAA+B,SAAS,CAAC;AACzC,+BAAgC,SAAS,CAAC;AAC1C,4BAA6B,SAAS,CAAC;AACvC,mCAAoC,SAAS,CAAC;AAE9C,qCAAsC,UAAU,CAAC;AAEjD,6BAA8B,SAAS,CAAC;AACxC,8BAA+B,SAAS,CAAC;AACzC,2BAA4B,QAAQ,CAAC;AACrC,kCAAmC,SAAS,CAAC;AAE7C,wCAAyC,OAAO,CAAC;AAEjD,4CAA6C,SAAS,CAAC;AACvD,6CAA8C,SAAS,CAAC;AACxD,0CAA2C,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/common/constants.js"],"names":[],"mappings":"AACA,wBAAyB,CAAC,CAAC,CAAC;AAE5B,mCAAuC;AACvC,2BAA4B,QAAQ,CAAC;AACrC,2BAA4B,QAAQ,CAAC;AAGrC,wCAAyC,KAAK,CAAC;AAG/C,6BAA8B,SAAS,CAAC;AACxC,8BAA+B,SAAS,CAAC;AACzC,2BAA4B,SAAS,CAAC;AAEtC,6BAA8B,UAAU,CAAC;AACzC,8BAA+B,UAAU,CAAC;AAC1C,2BAA4B,UAAU,CAAC;AACvC,kCAAmC,UAAU,CAAC;AAE9C,6BAA8B,SAAS,CAAC;AACxC,8BAA+B,SAAS,CAAC;AACzC,2BAA4B,SAAS,CAAC;AAEtC,6BAA8B,UAAU,CAAC;AACzC,8BAA+B,UAAU,CAAC;AAC1C,2BAA4B,UAAU,CAAC;AAEvC,8BAA+B,SAAS,CAAC;AACzC,+BAAgC,SAAS,CAAC;AAC1C,4BAA6B,SAAS,CAAC;AACvC,mCAAoC,SAAS,CAAC;AAE9C,qCAAsC,UAAU,CAAC;AAEjD,6BAA8B,SAAS,CAAC;AACxC,8BAA+B,SAAS,CAAC;AACzC,2BAA4B,QAAQ,CAAC;AACrC,kCAAmC,SAAS,CAAC;AAE7C,wCAAyC,OAAO,CAAC;AAEjD,4CAA6C,SAAS,CAAC;AACvD,6CAA8C,SAAS,CAAC;AACxD,0CAA2C,SAAS,CAAC;AAErD,wCAAyC,UAAU,CAAC;AAGpD,oCAAqC,UAAU,CAAC;AAChD,qCAAsC,UAAU,CAAC;AACjD,kCAAmC,UAAU,CAAC;AAE9C,mCAAoC,UAAU,CAAC;AAC/C,oCAAqC,UAAU,CAAC;AAChD,iCAAkC,UAAU,CAAC;AAG7C,uCAAwC,UAAU,CAAC;AACnD,wCAAyC,UAAU,CAAC;AACpD,qCAAsC,UAAU,CAAC;AAGjD,+BAAgC,WAAW,CAAC;AAC5C,sCAAiD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colored-logger.browser.d.ts","sourceRoot":"","sources":["../../../src/common/isomorphic/colored-logger.browser.js"],"names":[],"mappings":";IAIE,+BAEC;IACD,6BAEC;IACD,8BAEC;IACD,+BAEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colored-logger.node.d.ts","sourceRoot":"","sources":["../../../src/common/isomorphic/colored-logger.node.js"],"names":[],"mappings":";IAME,+BAEC;IACD,6BAEC;IACD,8BAEC;IACD,+BAEC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
new (url: string | URL, protocols?: string | string[]): WebSocket;
|
|
3
|
+
prototype: WebSocket;
|
|
4
|
+
readonly CONNECTING: 0;
|
|
5
|
+
readonly OPEN: 1;
|
|
6
|
+
readonly CLOSING: 2;
|
|
7
|
+
readonly CLOSED: 3;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
10
|
+
//# sourceMappingURL=web-socket.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-socket.browser.d.ts","sourceRoot":"","sources":["../../../src/common/isomorphic/web-socket.browser.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-socket.node.d.ts","sourceRoot":"","sources":["../../../src/common/isomorphic/web-socket.node.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gated-logger.d.ts","sourceRoot":"","sources":["../../../src/common/logs/gated-logger.js"],"names":[],"mappings":";;IASE,+BAIC;IACD,6BAIC;IACD,8BAIC;IACD,+BAIC"}
|