@nsshunt/stssocketioutils 2.0.5 → 2.0.7

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.
@@ -1,1169 +0,0 @@
1
- import { io } from "socket.io-client";
2
- import { Sleep } from "@nsshunt/stsutils";
3
- import { Server } from "socket.io";
4
- import { Redis } from "ioredis";
5
- import require$$0 from "node:cluster";
6
- import require$$1 from "socket.io-adapter";
7
- import { createAdapter } from "@socket.io/redis-streams-adapter";
8
- var STSNamespace = /* @__PURE__ */ ((STSNamespace2) => {
9
- STSNamespace2["STSMonitor"] = "stsinstrumentmanager/stsmonitor";
10
- STSNamespace2["STSControl"] = "stsinstrumentmanager/stscontrol";
11
- STSNamespace2["STSTestingNamespace"] = "ststestingnamespace/ststesting";
12
- return STSNamespace2;
13
- })(STSNamespace || {});
14
- var STSRoom = /* @__PURE__ */ ((STSRoom2) => {
15
- STSRoom2["STSInstrumentDataRoom"] = "stsinstrumentdataroom";
16
- STSRoom2["STSInstrumentDataSubscriptionRoom"] = "stsinstrumentdatasubscriptionroom";
17
- STSRoom2["STSRunnerRoom"] = "stsrunnerroom";
18
- STSRoom2["STSNodeRunnerRoom"] = "stsnoderunnerroom";
19
- return STSRoom2;
20
- })(STSRoom || {});
21
- var STSEvent = /* @__PURE__ */ ((STSEvent2) => {
22
- STSEvent2["STSInstrumentData"] = "stsinstrumentdata";
23
- STSEvent2["STSSubInstrumentData"] = "stssubinstrumentdata";
24
- STSEvent2["STSResetInstrumentData"] = "stsresetinstrumentdata";
25
- STSEvent2["STSStartLoggingInstrumentData"] = "stsStartLoggingInstrumentData";
26
- STSEvent2["STSStopLoggingInstrumentData"] = "stsStopLoggingInstrumentData";
27
- STSEvent2["STSStart"] = "stsstart";
28
- STSEvent2["STSStop"] = "stsstop";
29
- STSEvent2["STSPause"] = "stspause";
30
- STSEvent2["STSResume"] = "stsresume";
31
- STSEvent2["STSTerminate"] = "ststerminate";
32
- STSEvent2["STSUpdateStaticConfig"] = "stsupdatestaticconfig";
33
- STSEvent2["STSUpdateDynamicConfig"] = "stsupdatedynamicconfig";
34
- STSEvent2["STSSendToRoom"] = "sendToRoom";
35
- STSEvent2["connect"] = "connect";
36
- return STSEvent2;
37
- })(STSEvent || {});
38
- const isNode = Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]";
39
- var tinyEmitter = { exports: {} };
40
- var hasRequiredTinyEmitter;
41
- function requireTinyEmitter() {
42
- if (hasRequiredTinyEmitter) return tinyEmitter.exports;
43
- hasRequiredTinyEmitter = 1;
44
- function E() {
45
- }
46
- E.prototype = {
47
- on: function(name, callback, ctx) {
48
- var e = this.e || (this.e = {});
49
- (e[name] || (e[name] = [])).push({
50
- fn: callback,
51
- ctx
52
- });
53
- return this;
54
- },
55
- once: function(name, callback, ctx) {
56
- var self = this;
57
- function listener() {
58
- self.off(name, listener);
59
- callback.apply(ctx, arguments);
60
- }
61
- listener._ = callback;
62
- return this.on(name, listener, ctx);
63
- },
64
- emit: function(name) {
65
- var data = [].slice.call(arguments, 1);
66
- var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
67
- var i = 0;
68
- var len = evtArr.length;
69
- for (i; i < len; i++) {
70
- evtArr[i].fn.apply(evtArr[i].ctx, data);
71
- }
72
- return this;
73
- },
74
- off: function(name, callback) {
75
- var e = this.e || (this.e = {});
76
- var evts = e[name];
77
- var liveEvents = [];
78
- if (evts && callback) {
79
- for (var i = 0, len = evts.length; i < len; i++) {
80
- if (evts[i].fn !== callback && evts[i].fn._ !== callback)
81
- liveEvents.push(evts[i]);
82
- }
83
- }
84
- liveEvents.length ? e[name] = liveEvents : delete e[name];
85
- return this;
86
- }
87
- };
88
- tinyEmitter.exports = E;
89
- tinyEmitter.exports.TinyEmitter = E;
90
- return tinyEmitter.exports;
91
- }
92
- var tinyEmitterExports = requireTinyEmitter();
93
- class SocketIoClient extends tinyEmitterExports.TinyEmitter {
94
- #agentManager;
95
- #logger;
96
- #name;
97
- #address;
98
- #socketIoCustomPath;
99
- #authToken;
100
- #socket;
101
- constructor(name) {
102
- super();
103
- this.#name = name;
104
- }
105
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
- LogDebugMessage(message) {
107
- if (this.#logger) this.#logger.debug(message);
108
- }
109
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
- LogErrorMessage(message) {
111
- if (this.#logger) this.#logger.error(message);
112
- }
113
- get name() {
114
- return this.#name;
115
- }
116
- get agentManager() {
117
- return this.#agentManager;
118
- }
119
- get logger() {
120
- return this.#logger;
121
- }
122
- get address() {
123
- return this.#address;
124
- }
125
- get authToken() {
126
- return this.#authToken;
127
- }
128
- get socketIoCustomPath() {
129
- return this.#socketIoCustomPath;
130
- }
131
- get socket() {
132
- return this.#socket;
133
- }
134
- WithAddress(address) {
135
- this.#address = address;
136
- return this;
137
- }
138
- WithAuthToken(authToken) {
139
- this.#authToken = authToken;
140
- return this;
141
- }
142
- WithSocketIoCustomPath(socketIoCustomPath) {
143
- this.#socketIoCustomPath = socketIoCustomPath;
144
- return this;
145
- }
146
- WithLogger(logger) {
147
- this.#logger = logger;
148
- return this;
149
- }
150
- WithAgentManager(agentManager) {
151
- this.#agentManager = agentManager;
152
- return this;
153
- }
154
- SetupSocket() {
155
- if (!this.#address) {
156
- throw new Error(`SocketIoClientHelper:SetupSocket(): Error: [address not provided]`);
157
- }
158
- this.#EstablishSocketConnect();
159
- return this;
160
- }
161
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
162
- ConnectCallBack(socket) {
163
- }
164
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
165
- SocketEventsCallBack(socket) {
166
- }
167
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
168
- ErrorCallBack(error) {
169
- }
170
- /*
171
- emit<Ev extends EventNames<ClientToServerEvents>>(ev: Ev, ...args: EventParams<ClientToServerEvents, Ev>): Socket<ServerToClientEvents, ClientToServerEvents> {
172
- if (this.#socket) {
173
- return this.#socket!.emit(ev, ...args);
174
- } else {
175
- throw new Error('SocketIoClient:emit(): Error: [socket instance not defined.]');
176
- }
177
- }
178
- */
179
- #EstablishSocketConnect() {
180
- if (this.#socket !== void 0) {
181
- if (this.#socket.connected === true) {
182
- this.#socket.disconnect();
183
- }
184
- this.#socket = void 0;
185
- if (isNode) {
186
- setTimeout(() => this.#EstablishSocketConnect(), 100).unref();
187
- } else {
188
- setTimeout(() => this.#EstablishSocketConnect(), 100);
189
- }
190
- return;
191
- }
192
- let socketOptions;
193
- if (isNode) {
194
- socketOptions = {
195
- transports: ["websocket"]
196
- };
197
- if (this.#agentManager) {
198
- if (!this.#address) {
199
- throw new Error(`SocketIoClientHelper:SetupSocket(): Error: [address not provided when using agentManager]`);
200
- }
201
- socketOptions.agent = this.#agentManager.GetAgent(this.#address);
202
- }
203
- } else {
204
- socketOptions = {
205
- transports: ["websocket"]
206
- };
207
- }
208
- if (this.#authToken) {
209
- socketOptions.auth = (cb) => {
210
- cb({
211
- token: this.#authToken
212
- });
213
- };
214
- }
215
- if (this.#socketIoCustomPath && this.#socketIoCustomPath.localeCompare("") !== 0) {
216
- socketOptions.path = this.#socketIoCustomPath;
217
- }
218
- this.#socket = io(this.#address, socketOptions);
219
- this.#socket.io.on("error", (err) => {
220
- this.LogErrorMessage(`SocketIoClientHelper(): socketDetail.socket.io.on('error'): [${err}] Address: [${this.#address}]`);
221
- });
222
- this.#socket.io.on("reconnect_error", (err) => {
223
- this.LogErrorMessage(`SocketIoClientHelper(): socketDetail.socket.io.on('reconnect_error'): [${err}] Address: [${this.#address}]`);
224
- });
225
- this.#socket.on("connect_error", (err) => {
226
- this.LogErrorMessage(`SocketIoClientHelper(): socketDetail.socket.on('connect_error'): [${err}] Address: [${this.#address}]`);
227
- });
228
- this.#socket.io.on("reconnect", (attempt) => {
229
- this.LogErrorMessage(`SocketIoClientHelper(): socketDetail.socket.io.on('reconnect'): Number: [${attempt}] Address: [${this.#address}]`);
230
- });
231
- this.#socket.on("connect", () => {
232
- if (this.#socket) {
233
- this.LogDebugMessage(`SocketIoClientHelper(): Socket: [${this.#socket.id}]: connected, Address: [${this.#address}]`);
234
- setTimeout(() => {
235
- this.ConnectCallBack(this.#socket);
236
- }, 0);
237
- this.SocketEventsCallBack(this.#socket);
238
- } else {
239
- const errorMessage = "SocketIoClientHelper(): Could not get socket object from socket.io, Address: [${socketDetail.address}]";
240
- this.LogErrorMessage(errorMessage);
241
- this.ErrorCallBack(new Error(errorMessage));
242
- }
243
- });
244
- this.#socket.on("disconnect", (reason) => {
245
- this.LogDebugMessage("SocketIoClientHelper(): socket disconnect: " + reason);
246
- switch (reason) {
247
- case "io server disconnect":
248
- {
249
- this.LogDebugMessage("SocketIoClientHelper(): The server disconnected using disconnectSockets, i.e. normal safe shutdown from explicit disconnection by the server.");
250
- this.LogDebugMessage("SocketIoClientHelper(): The connection will be re-established when the server becomes available.");
251
- this.#socket = void 0;
252
- if (isNode) {
253
- if (this.#agentManager) {
254
- this.#agentManager.ResetAgent();
255
- }
256
- setTimeout(() => this.#EstablishSocketConnect(), 100).unref();
257
- } else {
258
- setTimeout(() => this.#EstablishSocketConnect(), 100);
259
- }
260
- }
261
- break;
262
- case "io client disconnect":
263
- this.LogDebugMessage("SocketIoClientHelper(): The client disconnected using disconnectSockets, i.e. normal safe disconnection from explicit disconnection by the client.");
264
- this.LogDebugMessage("SocketIoClientHelper(): The connection will not be re-established automatically.");
265
- break;
266
- case "transport close":
267
- case "ping timeout":
268
- case "transport error":
269
- {
270
- this.LogDebugMessage(`SocketIoClientHelper(): Server unexpectedly disconnected. Reason: [${reason}]`);
271
- this.LogDebugMessage("SocketIoClientHelper(): The connection will be re-established when the server becomes available.");
272
- if (this.#socket) {
273
- this.#socket.disconnect();
274
- }
275
- this.#socket = void 0;
276
- if (isNode) {
277
- if (this.#agentManager) {
278
- this.#agentManager?.ResetAgent();
279
- }
280
- setTimeout(() => this.#EstablishSocketConnect(), 100).unref();
281
- } else {
282
- setTimeout(() => this.#EstablishSocketConnect(), 100);
283
- }
284
- }
285
- break;
286
- }
287
- });
288
- }
289
- }
290
- var dist = {};
291
- var browser = { exports: {} };
292
- var ms;
293
- var hasRequiredMs;
294
- function requireMs() {
295
- if (hasRequiredMs) return ms;
296
- hasRequiredMs = 1;
297
- var s = 1e3;
298
- var m = s * 60;
299
- var h = m * 60;
300
- var d = h * 24;
301
- var w = d * 7;
302
- var y = d * 365.25;
303
- ms = function(val, options) {
304
- options = options || {};
305
- var type = typeof val;
306
- if (type === "string" && val.length > 0) {
307
- return parse(val);
308
- } else if (type === "number" && isFinite(val)) {
309
- return options.long ? fmtLong(val) : fmtShort(val);
310
- }
311
- throw new Error(
312
- "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
313
- );
314
- };
315
- function parse(str) {
316
- str = String(str);
317
- if (str.length > 100) {
318
- return;
319
- }
320
- var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
321
- str
322
- );
323
- if (!match) {
324
- return;
325
- }
326
- var n = parseFloat(match[1]);
327
- var type = (match[2] || "ms").toLowerCase();
328
- switch (type) {
329
- case "years":
330
- case "year":
331
- case "yrs":
332
- case "yr":
333
- case "y":
334
- return n * y;
335
- case "weeks":
336
- case "week":
337
- case "w":
338
- return n * w;
339
- case "days":
340
- case "day":
341
- case "d":
342
- return n * d;
343
- case "hours":
344
- case "hour":
345
- case "hrs":
346
- case "hr":
347
- case "h":
348
- return n * h;
349
- case "minutes":
350
- case "minute":
351
- case "mins":
352
- case "min":
353
- case "m":
354
- return n * m;
355
- case "seconds":
356
- case "second":
357
- case "secs":
358
- case "sec":
359
- case "s":
360
- return n * s;
361
- case "milliseconds":
362
- case "millisecond":
363
- case "msecs":
364
- case "msec":
365
- case "ms":
366
- return n;
367
- default:
368
- return void 0;
369
- }
370
- }
371
- function fmtShort(ms2) {
372
- var msAbs = Math.abs(ms2);
373
- if (msAbs >= d) {
374
- return Math.round(ms2 / d) + "d";
375
- }
376
- if (msAbs >= h) {
377
- return Math.round(ms2 / h) + "h";
378
- }
379
- if (msAbs >= m) {
380
- return Math.round(ms2 / m) + "m";
381
- }
382
- if (msAbs >= s) {
383
- return Math.round(ms2 / s) + "s";
384
- }
385
- return ms2 + "ms";
386
- }
387
- function fmtLong(ms2) {
388
- var msAbs = Math.abs(ms2);
389
- if (msAbs >= d) {
390
- return plural(ms2, msAbs, d, "day");
391
- }
392
- if (msAbs >= h) {
393
- return plural(ms2, msAbs, h, "hour");
394
- }
395
- if (msAbs >= m) {
396
- return plural(ms2, msAbs, m, "minute");
397
- }
398
- if (msAbs >= s) {
399
- return plural(ms2, msAbs, s, "second");
400
- }
401
- return ms2 + " ms";
402
- }
403
- function plural(ms2, msAbs, n, name) {
404
- var isPlural = msAbs >= n * 1.5;
405
- return Math.round(ms2 / n) + " " + name + (isPlural ? "s" : "");
406
- }
407
- return ms;
408
- }
409
- var common;
410
- var hasRequiredCommon;
411
- function requireCommon() {
412
- if (hasRequiredCommon) return common;
413
- hasRequiredCommon = 1;
414
- function setup(env) {
415
- createDebug.debug = createDebug;
416
- createDebug.default = createDebug;
417
- createDebug.coerce = coerce;
418
- createDebug.disable = disable;
419
- createDebug.enable = enable;
420
- createDebug.enabled = enabled;
421
- createDebug.humanize = requireMs();
422
- createDebug.destroy = destroy;
423
- Object.keys(env).forEach((key) => {
424
- createDebug[key] = env[key];
425
- });
426
- createDebug.names = [];
427
- createDebug.skips = [];
428
- createDebug.formatters = {};
429
- function selectColor(namespace) {
430
- let hash = 0;
431
- for (let i = 0; i < namespace.length; i++) {
432
- hash = (hash << 5) - hash + namespace.charCodeAt(i);
433
- hash |= 0;
434
- }
435
- return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
436
- }
437
- createDebug.selectColor = selectColor;
438
- function createDebug(namespace) {
439
- let prevTime;
440
- let enableOverride = null;
441
- let namespacesCache;
442
- let enabledCache;
443
- function debug(...args) {
444
- if (!debug.enabled) {
445
- return;
446
- }
447
- const self = debug;
448
- const curr = Number(/* @__PURE__ */ new Date());
449
- const ms2 = curr - (prevTime || curr);
450
- self.diff = ms2;
451
- self.prev = prevTime;
452
- self.curr = curr;
453
- prevTime = curr;
454
- args[0] = createDebug.coerce(args[0]);
455
- if (typeof args[0] !== "string") {
456
- args.unshift("%O");
457
- }
458
- let index = 0;
459
- args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
460
- if (match === "%%") {
461
- return "%";
462
- }
463
- index++;
464
- const formatter = createDebug.formatters[format];
465
- if (typeof formatter === "function") {
466
- const val = args[index];
467
- match = formatter.call(self, val);
468
- args.splice(index, 1);
469
- index--;
470
- }
471
- return match;
472
- });
473
- createDebug.formatArgs.call(self, args);
474
- const logFn = self.log || createDebug.log;
475
- logFn.apply(self, args);
476
- }
477
- debug.namespace = namespace;
478
- debug.useColors = createDebug.useColors();
479
- debug.color = createDebug.selectColor(namespace);
480
- debug.extend = extend;
481
- debug.destroy = createDebug.destroy;
482
- Object.defineProperty(debug, "enabled", {
483
- enumerable: true,
484
- configurable: false,
485
- get: () => {
486
- if (enableOverride !== null) {
487
- return enableOverride;
488
- }
489
- if (namespacesCache !== createDebug.namespaces) {
490
- namespacesCache = createDebug.namespaces;
491
- enabledCache = createDebug.enabled(namespace);
492
- }
493
- return enabledCache;
494
- },
495
- set: (v) => {
496
- enableOverride = v;
497
- }
498
- });
499
- if (typeof createDebug.init === "function") {
500
- createDebug.init(debug);
501
- }
502
- return debug;
503
- }
504
- function extend(namespace, delimiter) {
505
- const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
506
- newDebug.log = this.log;
507
- return newDebug;
508
- }
509
- function enable(namespaces) {
510
- createDebug.save(namespaces);
511
- createDebug.namespaces = namespaces;
512
- createDebug.names = [];
513
- createDebug.skips = [];
514
- const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
515
- for (const ns of split) {
516
- if (ns[0] === "-") {
517
- createDebug.skips.push(ns.slice(1));
518
- } else {
519
- createDebug.names.push(ns);
520
- }
521
- }
522
- }
523
- function matchesTemplate(search, template) {
524
- let searchIndex = 0;
525
- let templateIndex = 0;
526
- let starIndex = -1;
527
- let matchIndex = 0;
528
- while (searchIndex < search.length) {
529
- if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
530
- if (template[templateIndex] === "*") {
531
- starIndex = templateIndex;
532
- matchIndex = searchIndex;
533
- templateIndex++;
534
- } else {
535
- searchIndex++;
536
- templateIndex++;
537
- }
538
- } else if (starIndex !== -1) {
539
- templateIndex = starIndex + 1;
540
- matchIndex++;
541
- searchIndex = matchIndex;
542
- } else {
543
- return false;
544
- }
545
- }
546
- while (templateIndex < template.length && template[templateIndex] === "*") {
547
- templateIndex++;
548
- }
549
- return templateIndex === template.length;
550
- }
551
- function disable() {
552
- const namespaces = [
553
- ...createDebug.names,
554
- ...createDebug.skips.map((namespace) => "-" + namespace)
555
- ].join(",");
556
- createDebug.enable("");
557
- return namespaces;
558
- }
559
- function enabled(name) {
560
- for (const skip of createDebug.skips) {
561
- if (matchesTemplate(name, skip)) {
562
- return false;
563
- }
564
- }
565
- for (const ns of createDebug.names) {
566
- if (matchesTemplate(name, ns)) {
567
- return true;
568
- }
569
- }
570
- return false;
571
- }
572
- function coerce(val) {
573
- if (val instanceof Error) {
574
- return val.stack || val.message;
575
- }
576
- return val;
577
- }
578
- function destroy() {
579
- console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
580
- }
581
- createDebug.enable(createDebug.load());
582
- return createDebug;
583
- }
584
- common = setup;
585
- return common;
586
- }
587
- var hasRequiredBrowser;
588
- function requireBrowser() {
589
- if (hasRequiredBrowser) return browser.exports;
590
- hasRequiredBrowser = 1;
591
- (function(module, exports) {
592
- exports.formatArgs = formatArgs;
593
- exports.save = save;
594
- exports.load = load;
595
- exports.useColors = useColors;
596
- exports.storage = localstorage();
597
- exports.destroy = /* @__PURE__ */ (() => {
598
- let warned = false;
599
- return () => {
600
- if (!warned) {
601
- warned = true;
602
- console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
603
- }
604
- };
605
- })();
606
- exports.colors = [
607
- "#0000CC",
608
- "#0000FF",
609
- "#0033CC",
610
- "#0033FF",
611
- "#0066CC",
612
- "#0066FF",
613
- "#0099CC",
614
- "#0099FF",
615
- "#00CC00",
616
- "#00CC33",
617
- "#00CC66",
618
- "#00CC99",
619
- "#00CCCC",
620
- "#00CCFF",
621
- "#3300CC",
622
- "#3300FF",
623
- "#3333CC",
624
- "#3333FF",
625
- "#3366CC",
626
- "#3366FF",
627
- "#3399CC",
628
- "#3399FF",
629
- "#33CC00",
630
- "#33CC33",
631
- "#33CC66",
632
- "#33CC99",
633
- "#33CCCC",
634
- "#33CCFF",
635
- "#6600CC",
636
- "#6600FF",
637
- "#6633CC",
638
- "#6633FF",
639
- "#66CC00",
640
- "#66CC33",
641
- "#9900CC",
642
- "#9900FF",
643
- "#9933CC",
644
- "#9933FF",
645
- "#99CC00",
646
- "#99CC33",
647
- "#CC0000",
648
- "#CC0033",
649
- "#CC0066",
650
- "#CC0099",
651
- "#CC00CC",
652
- "#CC00FF",
653
- "#CC3300",
654
- "#CC3333",
655
- "#CC3366",
656
- "#CC3399",
657
- "#CC33CC",
658
- "#CC33FF",
659
- "#CC6600",
660
- "#CC6633",
661
- "#CC9900",
662
- "#CC9933",
663
- "#CCCC00",
664
- "#CCCC33",
665
- "#FF0000",
666
- "#FF0033",
667
- "#FF0066",
668
- "#FF0099",
669
- "#FF00CC",
670
- "#FF00FF",
671
- "#FF3300",
672
- "#FF3333",
673
- "#FF3366",
674
- "#FF3399",
675
- "#FF33CC",
676
- "#FF33FF",
677
- "#FF6600",
678
- "#FF6633",
679
- "#FF9900",
680
- "#FF9933",
681
- "#FFCC00",
682
- "#FFCC33"
683
- ];
684
- function useColors() {
685
- if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
686
- return true;
687
- }
688
- if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
689
- return false;
690
- }
691
- let m;
692
- return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
693
- typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
694
- // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
695
- typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
696
- typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
697
- }
698
- function formatArgs(args) {
699
- args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module.exports.humanize(this.diff);
700
- if (!this.useColors) {
701
- return;
702
- }
703
- const c = "color: " + this.color;
704
- args.splice(1, 0, c, "color: inherit");
705
- let index = 0;
706
- let lastC = 0;
707
- args[0].replace(/%[a-zA-Z%]/g, (match) => {
708
- if (match === "%%") {
709
- return;
710
- }
711
- index++;
712
- if (match === "%c") {
713
- lastC = index;
714
- }
715
- });
716
- args.splice(lastC, 0, c);
717
- }
718
- exports.log = console.debug || console.log || (() => {
719
- });
720
- function save(namespaces) {
721
- try {
722
- if (namespaces) {
723
- exports.storage.setItem("debug", namespaces);
724
- } else {
725
- exports.storage.removeItem("debug");
726
- }
727
- } catch (error) {
728
- }
729
- }
730
- function load() {
731
- let r;
732
- try {
733
- r = exports.storage.getItem("debug") || exports.storage.getItem("DEBUG");
734
- } catch (error) {
735
- }
736
- if (!r && typeof process !== "undefined" && "env" in process) {
737
- r = process.env.DEBUG;
738
- }
739
- return r;
740
- }
741
- function localstorage() {
742
- try {
743
- return localStorage;
744
- } catch (error) {
745
- }
746
- }
747
- module.exports = requireCommon()(exports);
748
- const { formatters } = module.exports;
749
- formatters.j = function(v) {
750
- try {
751
- return JSON.stringify(v);
752
- } catch (error) {
753
- return "[UnexpectedJSONParseError]: " + error.message;
754
- }
755
- };
756
- })(browser, browser.exports);
757
- return browser.exports;
758
- }
759
- var hasRequiredDist;
760
- function requireDist() {
761
- if (hasRequiredDist) return dist;
762
- hasRequiredDist = 1;
763
- var __importDefault = dist && dist.__importDefault || function(mod) {
764
- return mod && mod.__esModule ? mod : { "default": mod };
765
- };
766
- Object.defineProperty(dist, "__esModule", { value: true });
767
- dist.NodeClusterAdapter = void 0;
768
- dist.createAdapter = createAdapter2;
769
- dist.setupPrimary = setupPrimary;
770
- const node_cluster_1 = __importDefault(require$$0);
771
- const socket_io_adapter_1 = require$$1;
772
- const debug_1 = __importDefault(requireBrowser());
773
- const debug = (0, debug_1.default)("socket.io-cluster-adapter");
774
- const MESSAGE_SOURCE = "_sio_adapter";
775
- const hasOwnProperty = Object.prototype.hasOwnProperty;
776
- function ignoreError() {
777
- }
778
- function createAdapter2(opts = {}) {
779
- return function(nsp) {
780
- return new NodeClusterAdapter(nsp, opts);
781
- };
782
- }
783
- class NodeClusterAdapter extends socket_io_adapter_1.ClusterAdapterWithHeartbeat {
784
- constructor(nsp, opts = {}) {
785
- super(nsp, opts);
786
- process.on("message", (message) => {
787
- const isValidSource = (message === null || message === void 0 ? void 0 : message.source) === MESSAGE_SOURCE;
788
- if (!isValidSource) {
789
- debug("[%s] ignore unknown source", this.uid);
790
- return;
791
- }
792
- if (message.nsp !== this.nsp.name) {
793
- debug("[%s] ignore other namespace", this.uid);
794
- return;
795
- }
796
- this.onMessage(message);
797
- });
798
- this.init();
799
- }
800
- doPublish(message) {
801
- message.source = MESSAGE_SOURCE;
802
- process.send(message, null, {}, ignoreError);
803
- return Promise.resolve("");
804
- }
805
- doPublishResponse(requesterUid, response) {
806
- response.source = MESSAGE_SOURCE;
807
- response.requesterUid = requesterUid;
808
- process.send(response, null, {}, ignoreError);
809
- return Promise.resolve();
810
- }
811
- }
812
- dist.NodeClusterAdapter = NodeClusterAdapter;
813
- const UIDS = /* @__PURE__ */ Symbol("uids");
814
- function setupPrimary() {
815
- node_cluster_1.default.on("message", (worker, message) => {
816
- var _a;
817
- const isValidSource = (message === null || message === void 0 ? void 0 : message.source) === MESSAGE_SOURCE;
818
- if (!isValidSource) {
819
- return;
820
- }
821
- worker[UIDS] = worker[UIDS] || /* @__PURE__ */ new Set();
822
- worker[UIDS].add(message.uid);
823
- switch (message.type) {
824
- case socket_io_adapter_1.MessageType.FETCH_SOCKETS_RESPONSE:
825
- case socket_io_adapter_1.MessageType.SERVER_SIDE_EMIT_RESPONSE:
826
- const requesterUid = message.requesterUid;
827
- for (const workerId in node_cluster_1.default.workers) {
828
- if (hasOwnProperty.call(node_cluster_1.default.workers, workerId) && ((_a = node_cluster_1.default.workers[workerId][UIDS]) === null || _a === void 0 ? void 0 : _a.has(requesterUid))) {
829
- node_cluster_1.default.workers[workerId].send(message, null, ignoreError);
830
- break;
831
- }
832
- }
833
- break;
834
- default:
835
- const emitterIdAsString = String(worker.id);
836
- for (const workerId in node_cluster_1.default.workers) {
837
- if (hasOwnProperty.call(node_cluster_1.default.workers, workerId) && workerId !== emitterIdAsString) {
838
- node_cluster_1.default.workers[workerId].send(message, null, ignoreError);
839
- }
840
- }
841
- }
842
- });
843
- }
844
- return dist;
845
- }
846
- var distExports = requireDist();
847
- class SocketIoServer extends tinyEmitterExports.TinyEmitter {
848
- namespace;
849
- socketionamespace;
850
- //protected socketionamespace?: Namespace<ClientToServerEvents, ServerToClientEvents, InterServerEvents>
851
- logger;
852
- io;
853
- //#redisClient: RedisClientType | Redis | null = null;
854
- redisClient;
855
- listenPort;
856
- socketIoCustomPath;
857
- ioRedisMessageProcessorUrl;
858
- serverClusterMode;
859
- rooms;
860
- constructor() {
861
- super();
862
- }
863
- LogErrorMessage(message) {
864
- if (this.logger) {
865
- this.logger.error(`${this.namespace}: ${message}`);
866
- }
867
- }
868
- LogDebugMessage(message) {
869
- if (this.logger) {
870
- this.logger.debug(`${this.namespace}: ${message}`);
871
- }
872
- }
873
- LogInfoMessage(message) {
874
- if (this.logger) {
875
- this.logger.info(`${this.namespace}: ${message}`);
876
- }
877
- }
878
- LogWarnMessage(message) {
879
- if (this.logger) {
880
- this.logger.warn(`${this.namespace}: ${message}`);
881
- }
882
- }
883
- // https://socket.io/docs/v4/middlewares/
884
- // https://socket.io/docs/v4/server-socket-instance/#sockethandshake
885
- // https://socket.io/docs/v4/server-socket-instance/#socket-middlewares
886
- // Use this middleward to check every incomming connection
887
- SetupConnectionMiddleware = () => {
888
- };
889
- // Use this middleware to check every packet being received
890
- SetupMessageMiddleware = (socket) => {
891
- };
892
- SocketConnectCallBack = (socket) => {
893
- };
894
- SocketEventsCallBack = (socket) => {
895
- };
896
- GetConfig = (socketIoServeroptions) => {
897
- const options = {
898
- transports: ["websocket"]
899
- // or [ "websocket", "polling" ] (to use long-poolling. Note that the order matters)
900
- };
901
- if (socketIoServeroptions.ioRedisMessageProcessorUrl && socketIoServeroptions.ioRedisMessageProcessorUrl !== "") {
902
- this.redisClient = new Redis(socketIoServeroptions.ioRedisMessageProcessorUrl);
903
- options.adapter = createAdapter(this.redisClient);
904
- } else if (socketIoServeroptions.serverClusterMode && socketIoServeroptions.serverClusterMode === true) {
905
- options.adapter = distExports.createAdapter();
906
- }
907
- if (socketIoServeroptions.wssCustomPath && socketIoServeroptions.wssCustomPath.localeCompare("") !== 0) {
908
- options.path = socketIoServeroptions.wssCustomPath;
909
- }
910
- return options;
911
- };
912
- SetEngineEvents = () => {
913
- if (this.io) {
914
- this.io.engine.on("connection_error", (err) => {
915
- this.LogInfoMessage(err.req);
916
- this.LogInfoMessage(err.code);
917
- this.LogInfoMessage(err.message);
918
- this.LogInfoMessage(err.context);
919
- });
920
- }
921
- };
922
- WithLogger = (logger) => {
923
- this.logger = logger;
924
- return this;
925
- };
926
- WithExistingServer = (server) => {
927
- if (this.io) {
928
- throw new Error(`SocketIoServer:AttachServer(): Error: [Server already attached]`);
929
- }
930
- this.io = server;
931
- return this;
932
- };
933
- WithListenPort = (listenPort) => {
934
- this.listenPort = listenPort;
935
- return this;
936
- };
937
- WithSocketIoCustomPath = (socketIoCustomPath) => {
938
- this.socketIoCustomPath = socketIoCustomPath;
939
- return this;
940
- };
941
- WithIoRedisMessageProcessorUrl = (ioRedisMessageProcessorUrl) => {
942
- this.ioRedisMessageProcessorUrl = ioRedisMessageProcessorUrl;
943
- return this;
944
- };
945
- WithClusterMode = (serverClusterMode) => {
946
- this.serverClusterMode = serverClusterMode;
947
- return this;
948
- };
949
- WithRooms = (rooms) => {
950
- this.rooms = rooms;
951
- return this;
952
- };
953
- WithNamespace = (namespace) => {
954
- this.namespace = namespace;
955
- return this;
956
- };
957
- StartServer = async () => {
958
- if (!this.namespace) {
959
- throw new Error(`SocketIoServer:StartServer(): Error: [namespace not specified]`);
960
- }
961
- if (!this.io) {
962
- if (!this.listenPort) {
963
- throw new Error(`SocketIoServer:StartServer(): Error: [listenPort not specified]`);
964
- }
965
- const options = {
966
- transports: ["websocket"]
967
- // or [ "websocket", "polling" ] (to use long-poolling. Note that the order matters)
968
- };
969
- if (this.ioRedisMessageProcessorUrl && this.ioRedisMessageProcessorUrl !== "") {
970
- this.redisClient = new Redis(this.ioRedisMessageProcessorUrl);
971
- options.adapter = createAdapter(this.redisClient);
972
- } else if (this.serverClusterMode && this.serverClusterMode === true) {
973
- options.adapter = distExports.createAdapter();
974
- }
975
- if (this.socketIoCustomPath && this.socketIoCustomPath.localeCompare("") !== 0) {
976
- options.path = this.socketIoCustomPath;
977
- }
978
- this.io = new Server(this.listenPort, options);
979
- this.SetEngineEvents();
980
- await Sleep(500);
981
- }
982
- let autoJoinRooms;
983
- let rooms;
984
- if (this.rooms && this.rooms.length > 0) {
985
- autoJoinRooms = true;
986
- rooms = [...this.rooms];
987
- } else {
988
- autoJoinRooms = false;
989
- rooms = [];
990
- }
991
- this.SetupNamespace(rooms, autoJoinRooms);
992
- return this;
993
- };
994
- AttachServer = async (server) => {
995
- if (this.io) {
996
- throw new Error(`SocketIoServer:AttachServer(): Error: [Server already attached]`);
997
- }
998
- this.io = server;
999
- };
1000
- StopServer = async () => {
1001
- if (this.io) {
1002
- await this.CloseNamespaceAdaptors();
1003
- this.DisconnectNamespaceSockets();
1004
- await this.io.of("/").adapter.close();
1005
- if (this.redisClient) {
1006
- await this.redisClient.disconnect();
1007
- await Sleep(50);
1008
- }
1009
- this.io.disconnectSockets();
1010
- this.io = void 0;
1011
- }
1012
- };
1013
- LeaveRoom = (socket, room) => {
1014
- this.LogDebugMessage(`Leaving room [${room}]`);
1015
- socket.leave(room);
1016
- };
1017
- JoinRoom = (socket, room) => {
1018
- this.LogDebugMessage(`Socket joining room [${room}], ID: [${socket.id}]`);
1019
- socket.join(room);
1020
- };
1021
- SetupStandardEvents = (socket) => {
1022
- socket.on("disconnect", (reason) => {
1023
- this.LogDebugMessage(`socket disconnect, ID: [${socket.id}] [${reason}]`);
1024
- });
1025
- socket.on("disconnecting", (reason) => {
1026
- this.LogDebugMessage(`socket disconnecting, ID: [${socket.id}] [${reason}]`);
1027
- });
1028
- socket.on("error", (error) => {
1029
- this.LogDebugMessage(`socket error, ID: [${socket.id}] [${error}]`);
1030
- });
1031
- socket.on("__STSdisconnect", (reason) => {
1032
- this.LogDebugMessage(`__STSdisconnect: socket disconnect, ID: [${socket.id}] [${reason}]`);
1033
- });
1034
- socket.on("__STSdisconnecting", (reason, callBackResult) => {
1035
- this.LogDebugMessage(`__STSdisconnecting: socket disconnecting, ID: [${socket.id}] [${reason}]`);
1036
- callBackResult("__STSdisconnecting accepted by server.");
1037
- });
1038
- socket.on("__STSjoinRoom", (rooms) => {
1039
- rooms.forEach((room) => {
1040
- this.JoinRoom(socket, room);
1041
- });
1042
- });
1043
- socket.on("__STSleaveRoom", (rooms) => {
1044
- rooms.forEach((room) => {
1045
- this.LeaveRoom(socket, room);
1046
- });
1047
- });
1048
- socket.on("__STSsendToRoom", (rooms, payload) => {
1049
- rooms.forEach((room) => {
1050
- if (this.socketionamespace) {
1051
- this.LogDebugMessage(`socket.on: __STSsendToRoom: Sending to room [${room}], ID: [${socket.id}]`);
1052
- this.socketionamespace.to(room).emit(payload.command, payload);
1053
- }
1054
- });
1055
- });
1056
- socket.on("__STSsendToRoomWithCallback", (room, timeout, payload, cb) => {
1057
- if (this.socketionamespace) {
1058
- this.socketionamespace.to(room).timeout(timeout).emit(payload.command, payload, (err, dataResponse) => {
1059
- if (err) {
1060
- console.error(err);
1061
- const errorResponse = {
1062
- error: true,
1063
- errorName: err.name,
1064
- errorMessage: err.message
1065
- //errorCause: err.cause,
1066
- //errorStack: err.stack
1067
- };
1068
- this.LogErrorMessage(`__STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`);
1069
- cb(errorResponse);
1070
- } else {
1071
- this.LogDebugMessage(`__STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`);
1072
- cb(dataResponse);
1073
- }
1074
- });
1075
- }
1076
- });
1077
- socket.on("__STSsendToRoomsWithCallback", (rooms, timeout, payload, cb) => {
1078
- const responses = [];
1079
- const timeoutForComplete = setTimeout(() => {
1080
- responses.push({
1081
- room: "",
1082
- responses: {
1083
- error: true,
1084
- errorName: "timeout",
1085
- errorMessage: `__STSsendToRoomsWithCallback timeout: [${timeout}] before all responses received`
1086
- }
1087
- });
1088
- cb(responses);
1089
- }, timeout).unref();
1090
- rooms.forEach((room) => {
1091
- if (this.socketionamespace) {
1092
- this.socketionamespace.to(room).timeout(timeout).emit(payload.command, payload, (err, dataResponse) => {
1093
- if (err) {
1094
- console.error(err);
1095
- const errorResponse = {
1096
- error: true,
1097
- errorName: err.name,
1098
- errorMessage: err.message
1099
- //errorCause: err.cause,
1100
- //errorStack: err.stack
1101
- };
1102
- this.LogErrorMessage(`__STSsendToRoomWithCallback broadcast (error): [${JSON.stringify(errorResponse)}]`);
1103
- responses.push({
1104
- room,
1105
- responses: errorResponse
1106
- });
1107
- } else {
1108
- this.LogDebugMessage(`__STSsendToRoomWithCallback broadcast: [${JSON.stringify(dataResponse)}]`);
1109
- responses.push({
1110
- room,
1111
- responses: dataResponse
1112
- });
1113
- }
1114
- if (responses.length === rooms.length) {
1115
- clearTimeout(timeoutForComplete);
1116
- cb(responses);
1117
- }
1118
- });
1119
- }
1120
- });
1121
- });
1122
- };
1123
- SetupNamespace = (rooms, autoJoinRooms) => {
1124
- if (this.io) {
1125
- this.socketionamespace = this.io.of(`/${this.namespace}/`);
1126
- this.SetupConnectionMiddleware();
1127
- this.socketionamespace.on("connection", (socket) => {
1128
- this.LogDebugMessage(`Socket connected, ID: [${socket.id}]`);
1129
- this.LogDebugMessage(`Authentication Handshake (auth): [${JSON.stringify(socket.handshake.auth)}]`);
1130
- this.LogDebugMessage(`Authentication Handshake (host): [${JSON.stringify(socket.handshake.headers.host)}]`);
1131
- this.LogDebugMessage(`Authentication Handshake (url): [${JSON.stringify(socket.handshake.url)}]`);
1132
- this.LogDebugMessage(`Authentication Handshake: [${JSON.stringify(socket.handshake)}]`);
1133
- this.SetupMessageMiddleware(socket);
1134
- if (autoJoinRooms) {
1135
- rooms.map((room) => {
1136
- this.JoinRoom(socket, room);
1137
- });
1138
- }
1139
- this.SetupStandardEvents(socket);
1140
- setTimeout(() => {
1141
- this.SocketConnectCallBack(socket);
1142
- }, 0);
1143
- this.SocketEventsCallBack(socket);
1144
- });
1145
- } else {
1146
- throw new Error("SocketIoServer:SetupNamespace(): Error: [No server attached");
1147
- }
1148
- return this;
1149
- };
1150
- CloseNamespaceAdaptors = async () => {
1151
- if (this.socketionamespace) {
1152
- await this.socketionamespace.adapter.close();
1153
- }
1154
- };
1155
- DisconnectNamespaceSockets = () => {
1156
- if (this.socketionamespace) {
1157
- this.socketionamespace.disconnectSockets();
1158
- this.socketionamespace = void 0;
1159
- }
1160
- };
1161
- }
1162
- export {
1163
- STSEvent,
1164
- STSNamespace,
1165
- STSRoom,
1166
- SocketIoClient,
1167
- SocketIoServer
1168
- };
1169
- //# sourceMappingURL=stssocketioutils.mjs.map