@xibosignage/xibo-communication-framework 0.0.1 → 0.0.2

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.
@@ -47,274 +47,113 @@ function _defineProperty(e, r, t) {
47
47
  writable: true
48
48
  }) : e[r] = t, e;
49
49
  }
50
- function _regeneratorRuntime() {
51
- _regeneratorRuntime = function () {
52
- return r;
53
- };
54
- var t,
55
- r = {},
56
- e = Object.prototype,
57
- n = e.hasOwnProperty,
58
- o = "function" == typeof Symbol ? Symbol : {},
59
- i = o.iterator || "@@iterator",
60
- a = o.asyncIterator || "@@asyncIterator",
61
- u = o.toStringTag || "@@toStringTag";
62
- function c(t, r, e, n) {
63
- return Object.defineProperty(t, r, {
64
- value: e,
65
- enumerable: !n,
66
- configurable: !n,
67
- writable: !n
68
- });
69
- }
70
- try {
71
- c({}, "");
72
- } catch (t) {
73
- c = function (t, r, e) {
74
- return t[r] = e;
75
- };
76
- }
77
- function h(r, e, n, o) {
78
- var i = e && e.prototype instanceof Generator ? e : Generator,
79
- a = Object.create(i.prototype);
80
- return c(a, "_invoke", function (r, e, n) {
81
- var o = 1;
82
- return function (i, a) {
83
- if (3 === o) throw Error("Generator is already running");
84
- if (4 === o) {
85
- if ("throw" === i) throw a;
86
- return {
87
- value: t,
88
- done: true
89
- };
90
- }
91
- for (n.method = i, n.arg = a;;) {
92
- var u = n.delegate;
93
- if (u) {
94
- var c = d(u, n);
95
- if (c) {
96
- if (c === f) continue;
97
- return c;
98
- }
50
+ function _regenerator() {
51
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
52
+ var e,
53
+ t,
54
+ r = "function" == typeof Symbol ? Symbol : {},
55
+ n = r.iterator || "@@iterator",
56
+ o = r.toStringTag || "@@toStringTag";
57
+ function i(r, n, o, i) {
58
+ var c = n && n.prototype instanceof Generator ? n : Generator,
59
+ u = Object.create(c.prototype);
60
+ return _regeneratorDefine(u, "_invoke", function (r, n, o) {
61
+ var i,
62
+ c,
63
+ u,
64
+ f = 0,
65
+ p = o || [],
66
+ y = false,
67
+ G = {
68
+ p: 0,
69
+ n: 0,
70
+ v: e,
71
+ a: d,
72
+ f: d.bind(e, 4),
73
+ d: function (t, r) {
74
+ return i = t, c = 0, u = e, G.n = r, a;
99
75
  }
100
- if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
101
- if (1 === o) throw o = 4, n.arg;
102
- n.dispatchException(n.arg);
103
- } else "return" === n.method && n.abrupt("return", n.arg);
104
- o = 3;
105
- var h = s(r, e, n);
106
- if ("normal" === h.type) {
107
- if (o = n.done ? 4 : 2, h.arg === f) continue;
108
- return {
109
- value: h.arg,
110
- done: n.done
111
- };
76
+ };
77
+ function d(r, n) {
78
+ for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
79
+ var o,
80
+ i = p[t],
81
+ d = G.p,
82
+ l = i[2];
83
+ r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
84
+ }
85
+ if (o || r > 1) return a;
86
+ throw y = true, n;
87
+ }
88
+ return function (o, p, l) {
89
+ if (f > 1) throw TypeError("Generator is already running");
90
+ for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
91
+ i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
92
+ try {
93
+ if (f = 2, i) {
94
+ if (c || (o = "next"), t = i[o]) {
95
+ if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
96
+ if (!t.done) return t;
97
+ u = t.value, c < 2 && (c = 0);
98
+ } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
99
+ i = e;
100
+ } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
101
+ } catch (t) {
102
+ i = e, c = 1, u = t;
103
+ } finally {
104
+ f = 1;
112
105
  }
113
- "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg);
114
106
  }
107
+ return {
108
+ value: t,
109
+ done: y
110
+ };
115
111
  };
116
- }(r, n, new Context(o || [])), true), a;
117
- }
118
- function s(t, r, e) {
119
- try {
120
- return {
121
- type: "normal",
122
- arg: t.call(r, e)
123
- };
124
- } catch (t) {
125
- return {
126
- type: "throw",
127
- arg: t
128
- };
129
- }
112
+ }(r, o, i), true), u;
130
113
  }
131
- r.wrap = h;
132
- var f = {};
114
+ var a = {};
133
115
  function Generator() {}
134
116
  function GeneratorFunction() {}
135
117
  function GeneratorFunctionPrototype() {}
136
- var l = {};
137
- c(l, i, function () {
138
- return this;
139
- });
140
- var p = Object.getPrototypeOf,
141
- y = p && p(p(x([])));
142
- y && y !== e && n.call(y, i) && (l = y);
143
- var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l);
144
- function g(t) {
145
- ["next", "throw", "return"].forEach(function (r) {
146
- c(t, r, function (t) {
147
- return this._invoke(r, t);
148
- });
149
- });
118
+ t = Object.getPrototypeOf;
119
+ var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {
120
+ return this;
121
+ }), t),
122
+ u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
123
+ function f(e) {
124
+ return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
150
125
  }
151
- function AsyncIterator(t, r) {
152
- function e(o, i, a, u) {
153
- var c = s(t[o], t, i);
154
- if ("throw" !== c.type) {
155
- var h = c.arg,
156
- f = h.value;
157
- return f && "object" == typeof f && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) {
158
- e("next", t, a, u);
159
- }, function (t) {
160
- e("throw", t, a, u);
161
- }) : r.resolve(f).then(function (t) {
162
- h.value = t, a(h);
163
- }, function (t) {
164
- return e("throw", t, a, u);
165
- });
166
- }
167
- u(c.arg);
168
- }
169
- var o;
170
- c(this, "_invoke", function (t, n) {
171
- function i() {
172
- return new r(function (r, o) {
173
- e(t, n, r, o);
174
- });
175
- }
176
- return o = o ? o.then(i, i) : i();
177
- }, true);
178
- }
179
- function d(r, e) {
180
- var n = e.method,
181
- o = r.i[n];
182
- if (o === t) return e.delegate = null, "throw" === n && r.i.return && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f;
183
- var i = s(o, r.i, e.arg);
184
- if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f;
185
- var a = i.arg;
186
- return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f);
187
- }
188
- function w(t) {
189
- this.tryEntries.push(t);
190
- }
191
- function m(r) {
192
- var e = r[4] || {};
193
- e.type = "normal", e.arg = t, r[4] = e;
194
- }
195
- function Context(t) {
196
- this.tryEntries = [[-1]], t.forEach(w, this), this.reset(true);
197
- }
198
- function x(r) {
199
- if (null != r) {
200
- var e = r[i];
201
- if (e) return e.call(r);
202
- if ("function" == typeof r.next) return r;
203
- if (!isNaN(r.length)) {
204
- var o = -1,
205
- a = function e() {
206
- for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = false, e;
207
- return e.value = t, e.done = true, e;
208
- };
209
- return a.next = a;
210
- }
211
- }
212
- throw new TypeError(typeof r + " is not iterable");
213
- }
214
- return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, "GeneratorFunction"), r.isGeneratorFunction = function (t) {
215
- var r = "function" == typeof t && t.constructor;
216
- return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name));
217
- }, r.mark = function (t) {
218
- return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = Object.create(v), t;
219
- }, r.awrap = function (t) {
220
- return {
221
- __await: t
222
- };
223
- }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () {
126
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine(u), _regeneratorDefine(u, o, "Generator"), _regeneratorDefine(u, n, function () {
224
127
  return this;
225
- }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) {
226
- void 0 === i && (i = Promise);
227
- var a = new AsyncIterator(h(t, e, n, o), i);
228
- return r.isGeneratorFunction(e) ? a : a.next().then(function (t) {
229
- return t.done ? t.value : a.next();
230
- });
231
- }, g(v), c(v, u, "Generator"), c(v, i, function () {
232
- return this;
233
- }), c(v, "toString", function () {
128
+ }), _regeneratorDefine(u, "toString", function () {
234
129
  return "[object Generator]";
235
- }), r.keys = function (t) {
236
- var r = Object(t),
237
- e = [];
238
- for (var n in r) e.unshift(n);
239
- return function t() {
240
- for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = false, t;
241
- return t.done = true, t;
130
+ }), (_regenerator = function () {
131
+ return {
132
+ w: i,
133
+ m: f
242
134
  };
243
- }, r.values = x, Context.prototype = {
244
- constructor: Context,
245
- reset: function (r) {
246
- if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = false, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t);
247
- },
248
- stop: function () {
249
- this.done = true;
250
- var t = this.tryEntries[0][4];
251
- if ("throw" === t.type) throw t.arg;
252
- return this.rval;
253
- },
254
- dispatchException: function (r) {
255
- if (this.done) throw r;
256
- var e = this;
257
- function n(t) {
258
- a.type = "throw", a.arg = r, e.next = t;
259
- }
260
- for (var o = e.tryEntries.length - 1; o >= 0; --o) {
261
- var i = this.tryEntries[o],
262
- a = i[4],
263
- u = this.prev,
264
- c = i[1],
265
- h = i[2];
266
- if (-1 === i[0]) return n("end"), false;
267
- if (!c && !h) throw Error("try statement without catch or finally");
268
- if (null != i[0] && i[0] <= u) {
269
- if (u < c) return this.method = "next", this.arg = t, n(c), true;
270
- if (u < h) return n(h), false;
271
- }
272
- }
273
- },
274
- abrupt: function (t, r) {
275
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
276
- var n = this.tryEntries[e];
277
- if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) {
278
- var o = n;
279
- break;
280
- }
281
- }
282
- o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null);
283
- var i = o ? o[4] : {};
284
- return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i);
285
- },
286
- complete: function (t, r) {
287
- if ("throw" === t.type) throw t.arg;
288
- return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f;
289
- },
290
- finish: function (t) {
291
- for (var r = this.tryEntries.length - 1; r >= 0; --r) {
292
- var e = this.tryEntries[r];
293
- if (e[2] === t) return this.complete(e[4], e[3]), m(e), f;
294
- }
295
- },
296
- catch: function (t) {
297
- for (var r = this.tryEntries.length - 1; r >= 0; --r) {
298
- var e = this.tryEntries[r];
299
- if (e[0] === t) {
300
- var n = e[4];
301
- if ("throw" === n.type) {
302
- var o = n.arg;
303
- m(e);
304
- }
305
- return o;
306
- }
307
- }
308
- throw Error("illegal catch attempt");
309
- },
310
- delegateYield: function (r, e, n) {
311
- return this.delegate = {
312
- i: x(r),
313
- r: e,
314
- n: n
315
- }, "next" === this.method && (this.arg = t), f;
135
+ })();
136
+ }
137
+ function _regeneratorDefine(e, r, n, t) {
138
+ var i = Object.defineProperty;
139
+ try {
140
+ i({}, "", {});
141
+ } catch (e) {
142
+ i = 0;
143
+ }
144
+ _regeneratorDefine = function (e, r, n, t) {
145
+ function o(r, n) {
146
+ _regeneratorDefine(e, r, function (e) {
147
+ return this._invoke(r, n, e);
148
+ });
316
149
  }
317
- }, r;
150
+ r ? i ? i(e, r, {
151
+ value: n,
152
+ enumerable: !t,
153
+ configurable: !t,
154
+ writable: !t
155
+ }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
156
+ }, _regeneratorDefine(e, r, n, t);
318
157
  }
319
158
  function _toPrimitive(t, r) {
320
159
  if ("object" != typeof t || !t) return t;
@@ -388,10 +227,10 @@ var Xmr = /*#__PURE__*/function () {
388
227
  }, {
389
228
  key: "init",
390
229
  value: function () {
391
- var _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
230
+ var _init = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
392
231
  var _this = this;
393
- return _regeneratorRuntime().wrap(function _callee$(_context) {
394
- while (1) switch (_context.prev = _context.next) {
232
+ return _regenerator().w(function (_context) {
233
+ while (1) switch (_context.n) {
395
234
  case 0:
396
235
  this.interval = setInterval(function () {
397
236
  if (_this.isConnectionWanted && !_this.isActive()) {
@@ -401,8 +240,7 @@ var Xmr = /*#__PURE__*/function () {
401
240
  }
402
241
  }, 60000);
403
242
  case 1:
404
- case "end":
405
- return _context.stop();
243
+ return _context.a(2);
406
244
  }
407
245
  }, _callee, this);
408
246
  }));
@@ -414,20 +252,21 @@ var Xmr = /*#__PURE__*/function () {
414
252
  }, {
415
253
  key: "start",
416
254
  value: function () {
417
- var _start = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(url, cmsKey) {
255
+ var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(url, cmsKey) {
418
256
  var _this2 = this;
419
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
420
- while (1) switch (_context2.prev = _context2.next) {
257
+ var _t;
258
+ return _regenerator().w(function (_context2) {
259
+ while (1) switch (_context2.p = _context2.n) {
421
260
  case 0:
422
261
  if (!(!this.channel || this.channel === 'unknown')) {
423
- _context2.next = 3;
262
+ _context2.n = 1;
424
263
  break;
425
264
  }
426
265
  console.error('Xmr::start: channel unknown, XMR will be disabled');
427
- return _context2.abrupt("return");
428
- case 3:
266
+ return _context2.a(2);
267
+ case 1:
429
268
  if (!(this.url === 'DISABLED')) {
430
- _context2.next = 8;
269
+ _context2.n = 2;
431
270
  break;
432
271
  }
433
272
  console.info('Xmr::start: XMR disabled');
@@ -435,46 +274,46 @@ var Xmr = /*#__PURE__*/function () {
435
274
  if (this.isActive()) {
436
275
  stop();
437
276
  }
438
- return _context2.abrupt("return");
439
- case 8:
277
+ return _context2.a(2);
278
+ case 2:
440
279
  this.isConnectionWanted = true;
441
280
  // Are we already connected?
442
281
  if (!(this.isActive() && this.url === url)) {
443
- _context2.next = 15;
282
+ _context2.n = 3;
444
283
  break;
445
284
  }
446
285
  console.debug('Xmr::start: already connected to this URL');
447
286
  this.cmsKey = cmsKey;
448
- return _context2.abrupt("return");
449
- case 15:
287
+ return _context2.a(2);
288
+ case 3:
450
289
  if (!this.isConnected) {
451
- _context2.next = 21;
290
+ _context2.n = 5;
452
291
  break;
453
292
  }
454
293
  console.debug('Xmr::start: already connected but not active, or a different URL');
455
- _context2.next = 19;
294
+ _context2.n = 4;
456
295
  return this.stop();
457
- case 19:
458
- _context2.next = 22;
296
+ case 4:
297
+ _context2.n = 6;
459
298
  break;
460
- case 21:
299
+ case 5:
461
300
  console.debug('Xmr::start: not connected yet');
462
- case 22:
301
+ case 6:
463
302
  // Set the URL and cmsKey.
464
303
  this.url = url;
465
304
  this.cmsKey = cmsKey;
466
305
  console.debug('Xmr::start: connecting to ' + this.url);
467
- _context2.prev = 25;
306
+ _context2.p = 7;
468
307
  this.socket = new WebSocket(this.url);
469
- _context2.next = 34;
308
+ _context2.n = 9;
470
309
  break;
471
- case 29:
472
- _context2.prev = 29;
473
- _context2.t0 = _context2["catch"](25);
474
- console.debug('Xmr::start: failed connecting to ' + this.url + ', e = ' + _context2.t0);
310
+ case 8:
311
+ _context2.p = 8;
312
+ _t = _context2.v;
313
+ console.debug('Xmr::start: failed connecting to ' + this.url + ', e = ' + _t);
475
314
  this.emitter.emit('error', 'Failed to connect');
476
- return _context2.abrupt("return");
477
- case 34:
315
+ return _context2.a(2);
316
+ case 9:
478
317
  /**
479
318
  * Listener for socket open
480
319
  */
@@ -537,16 +376,17 @@ var Xmr = /*#__PURE__*/function () {
537
376
  } else if (message.action == 'commandAction' && message.commandCode.startsWith('showStatusWindow')) {
538
377
  var split = message.commandCode.split('|');
539
378
  _this2.emitter.emit('showStatusWindow', parseInt(split[1]) || 60);
379
+ } else if (message.action == 'commandAction' && message.commandCode.startsWith('forceUpdateChromeOS')) {
380
+ _this2.emitter.emit('forceUpdateChromeOS');
540
381
  } else {
541
382
  console.error('Xmr::message: unknown action: ' + message.action);
542
383
  }
543
384
  }
544
385
  });
545
- case 38:
546
- case "end":
547
- return _context2.stop();
386
+ case 10:
387
+ return _context2.a(2);
548
388
  }
549
- }, _callee2, this, [[25, 29]]);
389
+ }, _callee2, this, [[7, 8]]);
550
390
  }));
551
391
  function start(_x, _x2) {
552
392
  return _start.apply(this, arguments);
@@ -556,9 +396,9 @@ var Xmr = /*#__PURE__*/function () {
556
396
  }, {
557
397
  key: "stop",
558
398
  value: function () {
559
- var _stop = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
560
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
561
- while (1) switch (_context3.prev = _context3.next) {
399
+ var _stop = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
400
+ return _regenerator().w(function (_context3) {
401
+ while (1) switch (_context3.n) {
562
402
  case 0:
563
403
  console.debug('Xmr::stop');
564
404
  if (this.socket) {
@@ -566,9 +406,8 @@ var Xmr = /*#__PURE__*/function () {
566
406
  this.socket.close();
567
407
  this.isConnected = false;
568
408
  }
569
- case 2:
570
- case "end":
571
- return _context3.stop();
409
+ case 1:
410
+ return _context3.a(2);
572
411
  }
573
412
  }, _callee3, this);
574
413
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"xibo-communication-framework.esm.js","sources":["../node_modules/nanoevents/index.js","../../src/modules/xmr/xmr.ts"],"sourcesContent":["export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","/*\n * Copyright (C) 2025 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {createNanoEvents, type Emitter} from 'nanoevents';\nimport {DateTime} from 'luxon';\n\nexport interface XmrEvents {\n connected: () => void;\n disconnected: () => void;\n error: (e: string) => void;\n statusChange: (status: string) => void;\n\n collectNow: () => void;\n screenShot: () => void;\n licenceCheck: () => void;\n showStatusWindow: (timeout: number) => void;\n}\n\nexport default class Xmr {\n emitter: Emitter<XmrEvents>;\n\n url: string | null;\n cmsKey: string | null;\n channel: string;\n socket!: WebSocket;\n\n // State\n isConnectionWanted: boolean;\n isConnected: boolean;\n lastMessageAt: DateTime;\n\n interval: NodeJS.Timeout | undefined;\n\n constructor (channel: string) {\n // Emitter\n this.emitter = createNanoEvents<XmrEvents>();\n this.url = null;\n this.cmsKey = null;\n this.channel = channel;\n this.isConnected = false;\n this.isConnectionWanted = false;\n this.lastMessageAt = DateTime.now().minus({year: 1});\n }\n\n on<E extends keyof XmrEvents>(event: E, callback: XmrEvents[E]) {\n return this.emitter.on(event, callback);\n }\n\n async init() {\n this.interval = setInterval(() => {\n if (this.isConnectionWanted && !this.isActive()) {\n console.debug('Xmr::setInterval: should be active');\n\n // Call start again\n this.start(this.url || 'DISABLED', this.cmsKey || 'n/a');\n }\n }, 60000);\n }\n\n async start(url: string, cmsKey: string){\n if (!this.channel || this.channel === 'unknown') {\n console.error('Xmr::start: channel unknown, XMR will be disabled');\n return;\n }\n\n // Disable XMR if we've been told to.\n if (this.url === 'DISABLED') {\n console.info('Xmr::start: XMR disabled');\n this.isConnectionWanted = false;\n if (this.isActive()) {\n stop();\n }\n return;\n }\n\n this.isConnectionWanted = true;\n\n // Are we already connected?\n if (this.isActive() && this.url === url) {\n console.debug('Xmr::start: already connected to this URL');\n this.cmsKey = cmsKey;\n return;\n } else if (this.isConnected) {\n console.debug('Xmr::start: already connected but not active, or a different URL');\n await this.stop();\n } else {\n console.debug('Xmr::start: not connected yet');\n }\n\n // Set the URL and cmsKey.\n this.url = url;\n this.cmsKey = cmsKey;\n\n console.debug('Xmr::start: connecting to ' + this.url);\n\n try {\n this.socket = new WebSocket(this.url);\n } catch (e) {\n console.debug('Xmr::start: failed connecting to ' + this.url + ', e = ' + e);\n this.emitter.emit('error', 'Failed to connect');\n return;\n }\n\n /**\n * Listener for socket open\n */\n this.socket.addEventListener('open', (event) => {\n console.debug('Xmr::' + event.type);\n\n if (this.socket.readyState !== WebSocket.OPEN) {\n console.info('Xmr::' + event.type + ': not open yet');\n return;\n }\n\n // Create and send an initialisation message.\n this.socket.send(JSON.stringify({\n 'type': 'init',\n 'key': this.cmsKey,\n 'channel': this.channel,\n }));\n\n this.isConnected = true;\n\n this.emitter.emit('connected');\n });\n\n /**\n * Listener for socket close\n */\n this.socket.addEventListener('close', (event) => {\n console.debug('Xmr::' + event.type);\n\n this.isConnected = false;\n\n this.emitter.emit('disconnected');\n });\n\n /**\n * Listener for socket error\n */\n this.socket.addEventListener('error', (event) => {\n console.debug('Xmr::' + event.type);\n\n this.emitter.emit('error', 'error');\n });\n\n /**\n * Listener for socket message\n */\n this.socket.addEventListener('message', (event) => {\n console.debug(event);\n\n this.lastMessageAt = DateTime.now();\n this.emitter.emit('statusChange', this.lastMessageAt.toISO() || '');\n\n // Expect a JSON message or a H\n if (event.data === 'H') {\n console.debug('Xmr::message: Heartbeat...');\n } else {\n // JSON message.\n const message = JSON.parse(event.data);\n\n console.debug('Xmr::message: action is ' + message.action);\n\n // Check the createdDt and TTL against the current date time.\n const expiresAt = DateTime.fromISO(message.createdDt).plus({seconds: parseInt(message.ttl)});\n if (expiresAt < DateTime.now()) {\n console.debug('Xmr::message: message expired at ' + expiresAt.toString());\n } else if (message.action === 'collectNow') {\n this.emitter.emit('collectNow');\n } else if (message.action === 'screenShot') {\n this.emitter.emit('screenShot');\n } else if (message.action === 'licenceCheck') {\n this.emitter.emit('licenceCheck');\n } else if (message.action == 'commandAction' && message.commandCode.startsWith('showStatusWindow')) {\n const split = message.commandCode.split('|');\n this.emitter.emit('showStatusWindow', parseInt(split[1]) || 60);\n } else {\n console.error('Xmr::message: unknown action: ' + message.action);\n }\n }\n });\n }\n\n async stop() {\n console.debug('Xmr::stop');\n if (this.socket) {\n console.debug('Xmr::stop: closing active socket');\n this.socket.close();\n this.isConnected = false;\n }\n }\n\n isActive(): boolean {\n console.debug('Xmr::isActive: lastMessageAt: ' + this.lastMessageAt.toString());\n return this.isConnected && this.lastMessageAt > DateTime.now().minus({minute: 15});\n }\n}\n"],"names":["createNanoEvents","emit","event","_len","arguments","length","args","Array","_key","callbacks","events","i","apply","on","cb","_this$events","_this","push","_this$events$event","filter","Xmr","channel","_classCallCheck","_defineProperty","emitter","url","cmsKey","isConnected","isConnectionWanted","lastMessageAt","DateTime","now","minus","year","_createClass","key","value","callback","_init","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","interval","setInterval","isActive","console","debug","start","stop","init","_start","_callee2","_this2","_callee2$","_context2","error","abrupt","info","socket","WebSocket","t0","addEventListener","type","readyState","OPEN","send","JSON","stringify","toISO","data","message","parse","action","expiresAt","fromISO","createdDt","plus","seconds","parseInt","ttl","toString","commandCode","startsWith","split","_x","_x2","_stop","_callee3","_callee3$","_context3","close","minute"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"xibo-communication-framework.esm.js","sources":["../node_modules/nanoevents/index.js","../../src/modules/xmr/xmr.ts"],"sourcesContent":["export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","/*\n * Copyright (C) 2025 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {createNanoEvents, type Emitter} from 'nanoevents';\nimport {DateTime} from 'luxon';\n\nexport interface XmrEvents {\n connected: () => void;\n disconnected: () => void;\n error: (e: string) => void;\n statusChange: (status: string) => void;\n\n collectNow: () => void;\n screenShot: () => void;\n licenceCheck: () => void;\n showStatusWindow: (timeout: number) => void;\n forceUpdateChromeOS: () => void;\n}\n\nexport default class Xmr {\n emitter: Emitter<XmrEvents>;\n\n url: string | null;\n cmsKey: string | null;\n channel: string;\n socket!: WebSocket;\n\n // State\n isConnectionWanted: boolean;\n isConnected: boolean;\n lastMessageAt: DateTime;\n\n interval: NodeJS.Timeout | undefined;\n\n constructor (channel: string) {\n // Emitter\n this.emitter = createNanoEvents<XmrEvents>();\n this.url = null;\n this.cmsKey = null;\n this.channel = channel;\n this.isConnected = false;\n this.isConnectionWanted = false;\n this.lastMessageAt = DateTime.now().minus({year: 1});\n }\n\n on<E extends keyof XmrEvents>(event: E, callback: XmrEvents[E]) {\n return this.emitter.on(event, callback);\n }\n\n async init() {\n this.interval = setInterval(() => {\n if (this.isConnectionWanted && !this.isActive()) {\n console.debug('Xmr::setInterval: should be active');\n\n // Call start again\n this.start(this.url || 'DISABLED', this.cmsKey || 'n/a');\n }\n }, 60000);\n }\n\n async start(url: string, cmsKey: string){\n if (!this.channel || this.channel === 'unknown') {\n console.error('Xmr::start: channel unknown, XMR will be disabled');\n return;\n }\n\n // Disable XMR if we've been told to.\n if (this.url === 'DISABLED') {\n console.info('Xmr::start: XMR disabled');\n this.isConnectionWanted = false;\n if (this.isActive()) {\n stop();\n }\n return;\n }\n\n this.isConnectionWanted = true;\n\n // Are we already connected?\n if (this.isActive() && this.url === url) {\n console.debug('Xmr::start: already connected to this URL');\n this.cmsKey = cmsKey;\n return;\n } else if (this.isConnected) {\n console.debug('Xmr::start: already connected but not active, or a different URL');\n await this.stop();\n } else {\n console.debug('Xmr::start: not connected yet');\n }\n\n // Set the URL and cmsKey.\n this.url = url;\n this.cmsKey = cmsKey;\n\n console.debug('Xmr::start: connecting to ' + this.url);\n\n try {\n this.socket = new WebSocket(this.url);\n } catch (e) {\n console.debug('Xmr::start: failed connecting to ' + this.url + ', e = ' + e);\n this.emitter.emit('error', 'Failed to connect');\n return;\n }\n\n /**\n * Listener for socket open\n */\n this.socket.addEventListener('open', (event) => {\n console.debug('Xmr::' + event.type);\n\n if (this.socket.readyState !== WebSocket.OPEN) {\n console.info('Xmr::' + event.type + ': not open yet');\n return;\n }\n\n // Create and send an initialisation message.\n this.socket.send(JSON.stringify({\n 'type': 'init',\n 'key': this.cmsKey,\n 'channel': this.channel,\n }));\n\n this.isConnected = true;\n\n this.emitter.emit('connected');\n });\n\n /**\n * Listener for socket close\n */\n this.socket.addEventListener('close', (event) => {\n console.debug('Xmr::' + event.type);\n\n this.isConnected = false;\n\n this.emitter.emit('disconnected');\n });\n\n /**\n * Listener for socket error\n */\n this.socket.addEventListener('error', (event) => {\n console.debug('Xmr::' + event.type);\n\n this.emitter.emit('error', 'error');\n });\n\n /**\n * Listener for socket message\n */\n this.socket.addEventListener('message', (event) => {\n console.debug(event);\n\n this.lastMessageAt = DateTime.now();\n this.emitter.emit('statusChange', this.lastMessageAt.toISO() || '');\n\n // Expect a JSON message or a H\n if (event.data === 'H') {\n console.debug('Xmr::message: Heartbeat...');\n } else {\n // JSON message.\n const message = JSON.parse(event.data);\n\n console.debug('Xmr::message: action is ' + message.action);\n\n // Check the createdDt and TTL against the current date time.\n const expiresAt = DateTime.fromISO(message.createdDt).plus({seconds: parseInt(message.ttl)});\n if (expiresAt < DateTime.now()) {\n console.debug('Xmr::message: message expired at ' + expiresAt.toString());\n } else if (message.action === 'collectNow') {\n this.emitter.emit('collectNow');\n } else if (message.action === 'screenShot') {\n this.emitter.emit('screenShot');\n } else if (message.action === 'licenceCheck') {\n this.emitter.emit('licenceCheck');\n } else if (message.action == 'commandAction' && message.commandCode.startsWith('showStatusWindow')) {\n const split = message.commandCode.split('|');\n this.emitter.emit('showStatusWindow', parseInt(split[1]) || 60);\n } else if (message.action == 'commandAction' && message.commandCode.startsWith('forceUpdateChromeOS')) {\n this.emitter.emit('forceUpdateChromeOS');\n } else {\n console.error('Xmr::message: unknown action: ' + message.action);\n }\n }\n });\n }\n\n async stop() {\n console.debug('Xmr::stop');\n if (this.socket) {\n console.debug('Xmr::stop: closing active socket');\n this.socket.close();\n this.isConnected = false;\n }\n }\n\n isActive(): boolean {\n console.debug('Xmr::isActive: lastMessageAt: ' + this.lastMessageAt.toString());\n return this.isConnected && this.lastMessageAt > DateTime.now().minus({minute: 15});\n }\n}\n"],"names":["createNanoEvents","emit","event","_len","arguments","length","args","Array","_key","callbacks","events","i","apply","on","cb","_this$events","_this","push","_this$events$event","filter","Xmr","channel","_classCallCheck","_defineProperty","emitter","url","cmsKey","isConnected","isConnectionWanted","lastMessageAt","DateTime","now","minus","year","_createClass","key","value","callback","_init","_asyncToGenerator","_regenerator","m","_callee","w","_context","n","interval","setInterval","isActive","console","debug","start","a","init","_start","_callee2","_this2","_t","_context2","p","error","info","stop","socket","WebSocket","v","addEventListener","type","readyState","OPEN","send","JSON","stringify","toISO","data","message","parse","action","expiresAt","fromISO","createdDt","plus","seconds","parseInt","ttl","toString","commandCode","startsWith","split","_x","_x2","_stop","_callee3","_context3","close","minute"],"mappings":"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","x_google_ignoreList":[0]}