@fastybird/smart-panel-backend 1.1.0-alpha.8 → 1.1.0-alpha.9

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.
@@ -0,0 +1,523 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var CommandAcknowledgementTraceService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CommandAcknowledgementTraceService = exports.CommandAcknowledgementSnapshotWriter = exports.COMMAND_ACKNOWLEDGEMENT_TRACE_OPTIONS = void 0;
17
+ const node_crypto_1 = require("node:crypto");
18
+ const node_fs_1 = require("node:fs");
19
+ const promises_1 = require("node:fs/promises");
20
+ const node_path_1 = require("node:path");
21
+ const node_perf_hooks_1 = require("node:perf_hooks");
22
+ const common_1 = require("@nestjs/common");
23
+ const COMMAND_EVENT = 'command';
24
+ const PROPERTY_SET_EVENT = 'DevicesModule.ChannelProperty.Set';
25
+ const MAX_CONFIGURATION_BYTES = 8 * 1024;
26
+ const MAX_CAPTURE_DURATION_MS = 30_000;
27
+ const MAX_RECORDS = 256;
28
+ const MAX_SNAPSHOT_BYTES = 256 * 1024;
29
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
30
+ exports.COMMAND_ACKNOWLEDGEMENT_TRACE_OPTIONS = Symbol('COMMAND_ACKNOWLEDGEMENT_TRACE_OPTIONS');
31
+ const commandAcknowledgementTraceFileSystem = { lstat: promises_1.lstat, link: promises_1.link, open: promises_1.open, rename: promises_1.rename, rm: promises_1.rm };
32
+ class CommandAcknowledgementSnapshotWriter {
33
+ constructor(destination, onFailure, fileSystem = commandAcknowledgementTraceFileSystem) {
34
+ this.destination = destination;
35
+ this.onFailure = onFailure;
36
+ this.fileSystem = fileSystem;
37
+ this.writing = false;
38
+ this.pending = null;
39
+ this.ownedDestination = false;
40
+ this.idleWaiters = new Set();
41
+ }
42
+ queue(snapshot) {
43
+ this.pending = snapshot;
44
+ if (!this.writing) {
45
+ void this.drain();
46
+ }
47
+ }
48
+ async waitForIdle() {
49
+ if (!this.writing && this.pending === null) {
50
+ return;
51
+ }
52
+ await new Promise((resolve) => this.idleWaiters.add(resolve));
53
+ }
54
+ async drain() {
55
+ this.writing = true;
56
+ try {
57
+ while (this.pending !== null) {
58
+ const snapshot = this.pending;
59
+ this.pending = null;
60
+ try {
61
+ await this.write(snapshot);
62
+ }
63
+ catch {
64
+ this.pending = null;
65
+ this.onFailure();
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ finally {
71
+ this.writing = false;
72
+ for (const resolve of this.idleWaiters) {
73
+ resolve();
74
+ }
75
+ this.idleWaiters.clear();
76
+ }
77
+ }
78
+ async write(snapshot) {
79
+ if (!this.ownedDestination) {
80
+ await this.assertDestinationIsAbsent();
81
+ }
82
+ const temporaryPath = (0, node_path_1.join)((0, node_path_1.dirname)(this.destination), `.${(0, node_path_1.basename)(this.destination)}.${(0, node_crypto_1.randomUUID)()}.tmp`);
83
+ try {
84
+ const file = await this.fileSystem.open(temporaryPath, 'wx', 0o600);
85
+ try {
86
+ await file.writeFile(`${JSON.stringify(snapshot)}\n`, 'utf8');
87
+ await file.chmod(0o600);
88
+ await file.sync();
89
+ }
90
+ finally {
91
+ await file.close();
92
+ }
93
+ if (this.ownedDestination) {
94
+ await this.fileSystem.rename(temporaryPath, this.destination);
95
+ }
96
+ else {
97
+ await this.fileSystem.link(temporaryPath, this.destination);
98
+ }
99
+ this.ownedDestination = true;
100
+ await this.syncParentDirectory();
101
+ }
102
+ finally {
103
+ await this.fileSystem.rm(temporaryPath, { force: true }).catch(() => undefined);
104
+ }
105
+ }
106
+ async assertDestinationIsAbsent() {
107
+ try {
108
+ await this.fileSystem.lstat(this.destination);
109
+ throw new Error('The acknowledgement trace destination already exists.');
110
+ }
111
+ catch (error) {
112
+ if (error.code !== 'ENOENT') {
113
+ throw error;
114
+ }
115
+ }
116
+ }
117
+ async syncParentDirectory() {
118
+ const directory = await this.fileSystem.open((0, node_path_1.dirname)(this.destination), 'r');
119
+ try {
120
+ await directory.sync();
121
+ }
122
+ finally {
123
+ await directory.close();
124
+ }
125
+ }
126
+ }
127
+ exports.CommandAcknowledgementSnapshotWriter = CommandAcknowledgementSnapshotWriter;
128
+ let CommandAcknowledgementTraceService = CommandAcknowledgementTraceService_1 = class CommandAcknowledgementTraceService {
129
+ constructor(options) {
130
+ this.runtimeSourceHash = CommandAcknowledgementTraceService_1.getSourceHash();
131
+ this.processInstanceId = (0, node_crypto_1.randomUUID)();
132
+ this.requests = new Map();
133
+ this.attachedSockets = new WeakSet();
134
+ this.disconnectListeners = new WeakMap();
135
+ this.socketContext = null;
136
+ this.state = 'armed';
137
+ this.cutoffReason = null;
138
+ this.records = [];
139
+ this.nextSequence = 1;
140
+ this.nextSnapshotSequence = 1;
141
+ this.timer = null;
142
+ this.exportFailed = false;
143
+ this.config = normalizeConfig(options ?? parseEnvironmentConfig());
144
+ this.configFingerprint = this.config === null ? null : fingerprintConfig(this.config);
145
+ this.writer =
146
+ this.config === null
147
+ ? null
148
+ : new CommandAcknowledgementSnapshotWriter(this.config.exportPath, () => this.handleExportFailure());
149
+ for (const request of this.config?.requests ?? []) {
150
+ this.requests.set(request.requestId, { ...request, seen: false, ackCalls: 0 });
151
+ }
152
+ }
153
+ static getSourceHash() {
154
+ try {
155
+ return (0, node_crypto_1.createHash)('sha256').update((0, node_fs_1.readFileSync)(__filename, 'utf8')).digest('hex');
156
+ }
157
+ catch {
158
+ return (0, node_crypto_1.createHash)('sha256').update(CommandAcknowledgementTraceService_1.toString()).digest('hex');
159
+ }
160
+ }
161
+ onModuleInit() {
162
+ this.scheduleSnapshot();
163
+ }
164
+ onModuleDestroy() {
165
+ if (!this.isEnabled()) {
166
+ return;
167
+ }
168
+ if (this.state !== 'invalid') {
169
+ this.close('backend-shutdown');
170
+ }
171
+ this.removeObservedSocketListener();
172
+ }
173
+ isEnabled() {
174
+ return this.config !== null;
175
+ }
176
+ async waitForExports() {
177
+ await this.writer?.waitForIdle();
178
+ }
179
+ attachSocket(socket) {
180
+ if (!this.isEnabled() || this.attachedSockets.has(socket)) {
181
+ return;
182
+ }
183
+ this.attachedSockets.add(socket);
184
+ if (typeof socket.use === 'function') {
185
+ socket.use((packet, next) => {
186
+ try {
187
+ this.observeSocketPacket(socket, packet);
188
+ }
189
+ catch {
190
+ }
191
+ next();
192
+ });
193
+ }
194
+ if (typeof socket.on === 'function') {
195
+ const disconnectListener = (reason) => {
196
+ this.recordSocketClose(socket, toBoundedReason(reason));
197
+ };
198
+ socket.on('disconnect', disconnectListener);
199
+ this.disconnectListeners.set(socket, disconnectListener);
200
+ }
201
+ }
202
+ recordGatewayEntry(socket, message) {
203
+ this.recordForGateway(socket, message, 'gateway-entry');
204
+ }
205
+ recordHandlerStart(socket, message, handlerName) {
206
+ this.recordForGateway(socket, message, 'handler-start', { handler: boundedHandlerName(handlerName) });
207
+ }
208
+ recordHandlerSettled(socket, message, handlerName, outcome) {
209
+ this.recordForGateway(socket, message, 'handler-settled', { handler: boundedHandlerName(handlerName), outcome });
210
+ }
211
+ recordHandlerSkipped(socket, message, handlerName) {
212
+ this.recordForGateway(socket, message, 'handler-skipped', {
213
+ handler: boundedHandlerName(handlerName),
214
+ reason: 'authorization',
215
+ });
216
+ }
217
+ recordGatewayReturn(socket, message, status) {
218
+ this.recordForGateway(socket, message, 'gateway-return', { status });
219
+ }
220
+ recordGatewayThrow(socket, message) {
221
+ this.recordForGateway(socket, message, 'gateway-throw');
222
+ }
223
+ recordSocketClose(socket, reason) {
224
+ if (!this.isCurrentSocket(socket) || this.state === 'invalid') {
225
+ return;
226
+ }
227
+ for (const request of this.requests.values()) {
228
+ if (request.seen) {
229
+ this.record(request, 'socket-close', { reason });
230
+ }
231
+ }
232
+ this.close('socket-closed');
233
+ this.removeObservedSocketListener();
234
+ }
235
+ getSnapshot() {
236
+ return this.config === null ? null : this.createSnapshot();
237
+ }
238
+ observeSocketPacket(socket, packet) {
239
+ if (this.state === 'closed' || this.state === 'invalid') {
240
+ return;
241
+ }
242
+ if (packet[0] !== COMMAND_EVENT || !isPlainObject(packet[1])) {
243
+ return;
244
+ }
245
+ const message = packet[1];
246
+ if (!isPlainObject(message.payload)) {
247
+ return;
248
+ }
249
+ const request = this.findRequest(message.payload.request_id);
250
+ if (request === null) {
251
+ return;
252
+ }
253
+ if (message.event !== PROPERTY_SET_EVENT || !this.matchesTarget(request, message.payload)) {
254
+ this.invalidate('scope-mismatch');
255
+ return;
256
+ }
257
+ if (!this.bindSocket(socket)) {
258
+ return;
259
+ }
260
+ if (request.seen) {
261
+ this.invalidate('duplicate-request');
262
+ return;
263
+ }
264
+ request.seen = true;
265
+ this.record(request, 'socket-receipt');
266
+ this.startTimer();
267
+ const acknowledgement = packet.at(-1);
268
+ if (isAcknowledgementFunction(acknowledgement)) {
269
+ packet[packet.length - 1] = this.wrapAcknowledgement(request, acknowledgement);
270
+ }
271
+ }
272
+ wrapAcknowledgement(request, acknowledgement) {
273
+ return CommandAcknowledgementTraceService_1.createAcknowledgementWrapper(this, request, acknowledgement);
274
+ }
275
+ static createAcknowledgementWrapper(trace, request, acknowledgement) {
276
+ return function acknowledgementTraceWrapper(...args) {
277
+ request.ackCalls++;
278
+ trace.record(request, 'ack-invoked', { callCount: request.ackCalls });
279
+ try {
280
+ const result = acknowledgement.call(this, ...args);
281
+ trace.record(request, 'ack-returned', { callCount: request.ackCalls });
282
+ return result;
283
+ }
284
+ catch (error) {
285
+ trace.record(request, 'ack-threw', { callCount: request.ackCalls });
286
+ throw error;
287
+ }
288
+ };
289
+ }
290
+ recordForGateway(socket, message, stage, metadata) {
291
+ if (this.state === 'invalid' || !this.isCurrentSocket(socket) || !isPlainObject(message)) {
292
+ return;
293
+ }
294
+ const request = this.findRequestFromGatewayMessage(message);
295
+ if (request !== null && request.seen) {
296
+ this.record(request, stage, metadata);
297
+ }
298
+ }
299
+ findRequestFromGatewayMessage(message) {
300
+ if (message.event !== PROPERTY_SET_EVENT || !isPlainObject(message.payload)) {
301
+ return null;
302
+ }
303
+ const request = this.findRequest(message.payload.request_id);
304
+ return request !== null && this.matchesTarget(request, message.payload) ? request : null;
305
+ }
306
+ findRequest(value) {
307
+ return typeof value === 'string' ? (this.requests.get(value) ?? null) : null;
308
+ }
309
+ matchesTarget(request, payload) {
310
+ if (this.config === null || !isPlainObject(payload)) {
311
+ return false;
312
+ }
313
+ const properties = payload.properties;
314
+ if (!Array.isArray(properties) || properties.length !== 1 || !isPlainObject(properties[0])) {
315
+ return false;
316
+ }
317
+ const property = properties[0];
318
+ return (property.device === this.config.target.deviceId &&
319
+ property.channel === this.config.target.channelId &&
320
+ property.property === this.config.target.propertyId &&
321
+ property.value === request.value);
322
+ }
323
+ bindSocket(socket) {
324
+ if (this.socketContext === null) {
325
+ const disconnectListener = this.disconnectListeners.get(socket);
326
+ if (disconnectListener === undefined) {
327
+ this.invalidate('socket-listener-unavailable');
328
+ return false;
329
+ }
330
+ this.socketContext = { socket, socketTraceId: (0, node_crypto_1.randomUUID)(), disconnectListener };
331
+ return true;
332
+ }
333
+ if (this.socketContext.socket !== socket) {
334
+ this.invalidate('socket-mismatch');
335
+ return false;
336
+ }
337
+ return true;
338
+ }
339
+ isCurrentSocket(socket) {
340
+ return this.socketContext?.socket === socket;
341
+ }
342
+ removeObservedSocketListener() {
343
+ if (this.socketContext === null || typeof this.socketContext.socket.off !== 'function') {
344
+ return;
345
+ }
346
+ this.socketContext.socket.off('disconnect', this.socketContext.disconnectListener);
347
+ }
348
+ startTimer() {
349
+ if (this.timer !== null || this.config === null) {
350
+ return;
351
+ }
352
+ this.timer = setTimeout(() => this.close('capture-duration-elapsed'), this.config.captureDurationMs);
353
+ this.timer.unref();
354
+ }
355
+ close(reason) {
356
+ if (this.state === 'invalid' || this.state === 'closed') {
357
+ return;
358
+ }
359
+ this.state = 'closed';
360
+ this.cutoffReason = reason;
361
+ if (this.timer !== null) {
362
+ clearTimeout(this.timer);
363
+ this.timer = null;
364
+ }
365
+ this.scheduleSnapshot();
366
+ }
367
+ invalidate(reason) {
368
+ if (this.state === 'invalid') {
369
+ return;
370
+ }
371
+ this.state = 'invalid';
372
+ this.cutoffReason = reason;
373
+ if (this.timer !== null) {
374
+ clearTimeout(this.timer);
375
+ this.timer = null;
376
+ }
377
+ this.scheduleSnapshot();
378
+ }
379
+ record(request, stage, metadata) {
380
+ if (this.state === 'closed' || this.state === 'invalid' || this.config === null) {
381
+ return;
382
+ }
383
+ if (this.records.length >= this.config.maxRecords) {
384
+ this.invalidate('record-limit-exceeded');
385
+ return;
386
+ }
387
+ this.state = 'recording';
388
+ this.records.push(Object.freeze({
389
+ sequence: this.nextSequence++,
390
+ monotonicMs: node_perf_hooks_1.performance.now(),
391
+ stage,
392
+ phase: request.phase,
393
+ requestId: request.requestId,
394
+ metadata: metadata === undefined ? undefined : Object.freeze({ ...metadata }),
395
+ }));
396
+ this.scheduleSnapshot();
397
+ }
398
+ scheduleSnapshot() {
399
+ if (this.config === null || this.writer === null || this.exportFailed) {
400
+ return;
401
+ }
402
+ const snapshot = this.createSnapshot();
403
+ if (Buffer.byteLength(JSON.stringify(snapshot), 'utf8') > MAX_SNAPSHOT_BYTES) {
404
+ this.records = [];
405
+ this.invalidate('snapshot-size-exceeded');
406
+ return;
407
+ }
408
+ this.writer.queue(snapshot);
409
+ }
410
+ createSnapshot() {
411
+ if (this.config === null || this.configFingerprint === null) {
412
+ throw new Error('Acknowledgement tracing is disabled.');
413
+ }
414
+ return Object.freeze({
415
+ schemaVersion: 1,
416
+ snapshotSequence: this.nextSnapshotSequence++,
417
+ snapshotMonotonicMs: node_perf_hooks_1.performance.now(),
418
+ configFingerprint: this.configFingerprint,
419
+ process: Object.freeze({
420
+ id: process.pid,
421
+ instanceId: this.processInstanceId,
422
+ runtimeSourceHash: this.runtimeSourceHash,
423
+ }),
424
+ runId: this.config.runId,
425
+ target: Object.freeze({ ...this.config.target }),
426
+ state: this.state,
427
+ cutoffReason: this.cutoffReason,
428
+ socketTraceId: this.socketContext?.socketTraceId ?? null,
429
+ requests: Object.freeze([...this.requests.values()].map((request) => Object.freeze({
430
+ phase: request.phase,
431
+ requestId: request.requestId,
432
+ value: request.value,
433
+ status: request.seen ? 'received' : 'not-observed',
434
+ acknowledgementCalls: request.ackCalls,
435
+ }))),
436
+ records: Object.freeze([...this.records]),
437
+ });
438
+ }
439
+ handleExportFailure() {
440
+ if (this.exportFailed) {
441
+ return;
442
+ }
443
+ this.exportFailed = true;
444
+ this.invalidate('export-failed');
445
+ }
446
+ };
447
+ exports.CommandAcknowledgementTraceService = CommandAcknowledgementTraceService;
448
+ exports.CommandAcknowledgementTraceService = CommandAcknowledgementTraceService = CommandAcknowledgementTraceService_1 = __decorate([
449
+ (0, common_1.Injectable)(),
450
+ __param(0, (0, common_1.Optional)()),
451
+ __param(0, (0, common_1.Inject)(exports.COMMAND_ACKNOWLEDGEMENT_TRACE_OPTIONS)),
452
+ __metadata("design:paramtypes", [Object])
453
+ ], CommandAcknowledgementTraceService);
454
+ function parseEnvironmentConfig() {
455
+ const raw = process.env.FB_COMMAND_ACK_TRACE;
456
+ if (!raw || Buffer.byteLength(raw, 'utf8') > MAX_CONFIGURATION_BYTES) {
457
+ return null;
458
+ }
459
+ try {
460
+ return JSON.parse(raw);
461
+ }
462
+ catch {
463
+ return null;
464
+ }
465
+ }
466
+ function normalizeConfig(config) {
467
+ if (config === null ||
468
+ !isPlainObject(config) ||
469
+ config.schemaVersion !== 1 ||
470
+ !isUuid(config.runId) ||
471
+ !isUuid(config.target?.deviceId) ||
472
+ !isUuid(config.target?.channelId) ||
473
+ !isUuid(config.target?.propertyId) ||
474
+ typeof config.exportPath !== 'string' ||
475
+ !(0, node_path_1.isAbsolute)(config.exportPath) ||
476
+ !Array.isArray(config.requests) ||
477
+ config.requests.length !== 2) {
478
+ return null;
479
+ }
480
+ const [first, second] = config.requests;
481
+ if (!isPlainObject(first) ||
482
+ !isPlainObject(second) ||
483
+ first.phase !== 'trial' ||
484
+ second.phase !== 'restoration' ||
485
+ !isUuid(first.requestId) ||
486
+ !isUuid(second.requestId) ||
487
+ first.requestId === second.requestId ||
488
+ typeof first.value !== 'boolean' ||
489
+ typeof second.value !== 'boolean' ||
490
+ first.value === second.value) {
491
+ return null;
492
+ }
493
+ const captureDurationMs = config.captureDurationMs ?? MAX_CAPTURE_DURATION_MS;
494
+ const maxRecords = config.maxRecords ?? MAX_RECORDS;
495
+ if (!Number.isInteger(captureDurationMs) ||
496
+ captureDurationMs <= 0 ||
497
+ captureDurationMs > MAX_CAPTURE_DURATION_MS ||
498
+ !Number.isInteger(maxRecords) ||
499
+ maxRecords <= 0 ||
500
+ maxRecords > MAX_RECORDS) {
501
+ return null;
502
+ }
503
+ return Object.freeze({ ...config, captureDurationMs, maxRecords });
504
+ }
505
+ function isUuid(value) {
506
+ return typeof value === 'string' && UUID_PATTERN.test(value);
507
+ }
508
+ function isPlainObject(value) {
509
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
510
+ }
511
+ function isAcknowledgementFunction(value) {
512
+ return typeof value === 'function';
513
+ }
514
+ function fingerprintConfig(config) {
515
+ return (0, node_crypto_1.createHash)('sha256').update(JSON.stringify(config)).digest('hex');
516
+ }
517
+ function boundedHandlerName(handlerName) {
518
+ return handlerName.slice(0, 160);
519
+ }
520
+ function toBoundedReason(reason) {
521
+ return typeof reason === 'string' && reason.length > 0 ? reason.slice(0, 160) : 'unknown';
522
+ }
523
+ //# sourceMappingURL=command-acknowledgement-trace.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-acknowledgement-trace.service.js","sourceRoot":"","sources":["../../../../src/modules/websocket/services/command-acknowledgement-trace.service.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ const swagger_models_registry_service_1 = require("../swagger/services/swagger-m
25
25
  const users_module_1 = require("../users/users.module");
26
26
  const websocket_gateway_1 = require("./gateway/websocket.gateway");
27
27
  const ws_stats_provider_1 = require("./providers/ws-stats.provider");
28
+ const command_acknowledgement_trace_service_1 = require("./services/command-acknowledgement-trace.service");
28
29
  const command_event_registry_service_1 = require("./services/command-event-registry.service");
29
30
  const ws_auth_service_1 = require("./services/ws-auth.service");
30
31
  const ws_metrics_service_1 = require("./services/ws-metrics.service");
@@ -66,7 +67,14 @@ exports.WebsocketModule = WebsocketModule = __decorate([
66
67
  stats_module_1.StatsModule,
67
68
  api_module_1.ApiModule,
68
69
  ],
69
- providers: [websocket_gateway_1.WebsocketGateway, command_event_registry_service_1.CommandEventRegistryService, ws_auth_service_1.WsAuthService, ws_metrics_service_1.WsMetricsService, ws_stats_provider_1.WsStatsProvider],
70
+ providers: [
71
+ websocket_gateway_1.WebsocketGateway,
72
+ command_acknowledgement_trace_service_1.CommandAcknowledgementTraceService,
73
+ command_event_registry_service_1.CommandEventRegistryService,
74
+ ws_auth_service_1.WsAuthService,
75
+ ws_metrics_service_1.WsMetricsService,
76
+ ws_stats_provider_1.WsStatsProvider,
77
+ ],
70
78
  exports: [websocket_gateway_1.WebsocketGateway, command_event_registry_service_1.CommandEventRegistryService],
71
79
  }),
72
80
  __metadata("design:paramtypes", [ws_stats_provider_1.WsStatsProvider,
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.module.js","sourceRoot":"","sources":["../../../src/modules/websocket/websocket.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwC;AACxC,2CAAsG;AACtG,qCAAwC;AAExC,uDAAqF;AACrF,kEAA8D;AAC9D,kDAA8C;AAC9C,qDAAiD;AACjD,qFAAgF;AAChF,wDAAoD;AACpD,yEAAqE;AACrE,8DAA0D;AAC1D,yGAAmG;AACnG,wDAAoD;AAEpD,mEAA+D;AAC/D,qEAAgE;AAChE,8FAAwF;AACxF,gEAA2D;AAC3D,sEAAiE;AACjE,+DAAyG;AACzG,2DAAqE;AAuB9D,IAAM,eAAe,GAArB,MAAM,eAAe;IAC3B,YACkB,eAAgC,EAChC,oBAA0C,EAC1C,cAA8B,EAC9B,eAA6C;QAH7C,oBAAe,GAAf,eAAe,CAAiB;QAChC,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,mBAAc,GAAd,cAAc,CAAgB;QAC9B,oBAAe,GAAf,eAAe,CAA8B;IAC5D,CAAC;IAEJ,YAAY;QACX,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,0CAAoB,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,yCAAmB,CAAC,CAAC;QAExD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,2CAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEhF,KAAK,MAAM,KAAK,IAAI,kDAA8B,EAAE,CAAC;YACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;CACD,CAAA;AAlBY,0CAAe;0BAAf,eAAe;IArB3B,IAAA,eAAM,EAAC;QACP,OAAO,EAAE;YACR,eAAS,CAAC,aAAa,CAAC;gBACvB,OAAO,EAAE,CAAC,qBAAgB,CAAC;gBAC3B,MAAM,EAAE,CAAC,sBAAiB,CAAC;gBAC3B,UAAU,EAAE,CAAC,aAAgC,EAAE,EAAE;oBAChD,OAAO;wBACN,MAAM,EAAE,IAAA,0BAAW,EAAqB,aAAa,EAAE,iBAAiB,EAAE,oCAAoB,CAAC;wBAC/F,WAAW,EAAE,EAAE,SAAS,EAAE,wCAAwB,EAAE;qBACpD,CAAC;gBACH,CAAC;aACD,CAAC;YACF,wBAAU;YACV,0BAAW;YACX,8BAAa;YACb,0BAAW;YACX,sBAAS;SACT;QACD,SAAS,EAAE,CAAC,oCAAgB,EAAE,4DAA2B,EAAE,+BAAa,EAAE,qCAAgB,EAAE,mCAAe,CAAC;QAC5G,OAAO,EAAE,CAAC,oCAAgB,EAAE,4DAA2B,CAAC;KACxD,CAAC;qCAGkC,mCAAe;QACV,6CAAoB;QAC1B,gCAAc;QACb,8DAA4B;GALnD,eAAe,CAkB3B"}
1
+ {"version":3,"file":"websocket.module.js","sourceRoot":"","sources":["../../../src/modules/websocket/websocket.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwC;AACxC,2CAAsG;AACtG,qCAAwC;AAExC,uDAAqF;AACrF,kEAA8D;AAC9D,kDAA8C;AAC9C,qDAAiD;AACjD,qFAAgF;AAChF,wDAAoD;AACpD,yEAAqE;AACrE,8DAA0D;AAC1D,yGAAmG;AACnG,wDAAoD;AAEpD,mEAA+D;AAC/D,qEAAgE;AAChE,4GAAsG;AACtG,8FAAwF;AACxF,gEAA2D;AAC3D,sEAAiE;AACjE,+DAAyG;AACzG,2DAAqE;AA8B9D,IAAM,eAAe,GAArB,MAAM,eAAe;IAC3B,YACkB,eAAgC,EAChC,oBAA0C,EAC1C,cAA8B,EAC9B,eAA6C;QAH7C,oBAAe,GAAf,eAAe,CAAiB;QAChC,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,mBAAc,GAAd,cAAc,CAAgB;QAC9B,oBAAe,GAAf,eAAe,CAA8B;IAC5D,CAAC;IAEJ,YAAY;QACX,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,0CAAoB,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,yCAAmB,CAAC,CAAC;QAExD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,2CAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEhF,KAAK,MAAM,KAAK,IAAI,kDAA8B,EAAE,CAAC;YACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;CACD,CAAA;AAlBY,0CAAe;0BAAf,eAAe;IA5B3B,IAAA,eAAM,EAAC;QACP,OAAO,EAAE;YACR,eAAS,CAAC,aAAa,CAAC;gBACvB,OAAO,EAAE,CAAC,qBAAgB,CAAC;gBAC3B,MAAM,EAAE,CAAC,sBAAiB,CAAC;gBAC3B,UAAU,EAAE,CAAC,aAAgC,EAAE,EAAE;oBAChD,OAAO;wBACN,MAAM,EAAE,IAAA,0BAAW,EAAqB,aAAa,EAAE,iBAAiB,EAAE,oCAAoB,CAAC;wBAC/F,WAAW,EAAE,EAAE,SAAS,EAAE,wCAAwB,EAAE;qBACpD,CAAC;gBACH,CAAC;aACD,CAAC;YACF,wBAAU;YACV,0BAAW;YACX,8BAAa;YACb,0BAAW;YACX,sBAAS;SACT;QACD,SAAS,EAAE;YACV,oCAAgB;YAChB,0EAAkC;YAClC,4DAA2B;YAC3B,+BAAa;YACb,qCAAgB;YAChB,mCAAe;SACf;QACD,OAAO,EAAE,CAAC,oCAAgB,EAAE,4DAA2B,CAAC;KACxD,CAAC;qCAGkC,mCAAe;QACV,6CAAoB;QAC1B,gCAAc;QACb,8DAA4B;GALnD,eAAe,CAkB3B"}