@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.
@@ -9,6 +9,7 @@ export interface XmrEvents {
9
9
  screenShot: () => void;
10
10
  licenceCheck: () => void;
11
11
  showStatusWindow: (timeout: number) => void;
12
+ forceUpdateChromeOS: () => void;
12
13
  }
13
14
  export default class Xmr {
14
15
  emitter: Emitter<XmrEvents>;
@@ -49,274 +49,113 @@ function _defineProperty(e, r, t) {
49
49
  writable: true
50
50
  }) : e[r] = t, e;
51
51
  }
52
- function _regeneratorRuntime() {
53
- _regeneratorRuntime = function () {
54
- return r;
55
- };
56
- var t,
57
- r = {},
58
- e = Object.prototype,
59
- n = e.hasOwnProperty,
60
- o = "function" == typeof Symbol ? Symbol : {},
61
- i = o.iterator || "@@iterator",
62
- a = o.asyncIterator || "@@asyncIterator",
63
- u = o.toStringTag || "@@toStringTag";
64
- function c(t, r, e, n) {
65
- return Object.defineProperty(t, r, {
66
- value: e,
67
- enumerable: !n,
68
- configurable: !n,
69
- writable: !n
70
- });
71
- }
72
- try {
73
- c({}, "");
74
- } catch (t) {
75
- c = function (t, r, e) {
76
- return t[r] = e;
77
- };
78
- }
79
- function h(r, e, n, o) {
80
- var i = e && e.prototype instanceof Generator ? e : Generator,
81
- a = Object.create(i.prototype);
82
- return c(a, "_invoke", function (r, e, n) {
83
- var o = 1;
84
- return function (i, a) {
85
- if (3 === o) throw Error("Generator is already running");
86
- if (4 === o) {
87
- if ("throw" === i) throw a;
88
- return {
89
- value: t,
90
- done: true
91
- };
92
- }
93
- for (n.method = i, n.arg = a;;) {
94
- var u = n.delegate;
95
- if (u) {
96
- var c = d(u, n);
97
- if (c) {
98
- if (c === f) continue;
99
- return c;
100
- }
52
+ function _regenerator() {
53
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
54
+ var e,
55
+ t,
56
+ r = "function" == typeof Symbol ? Symbol : {},
57
+ n = r.iterator || "@@iterator",
58
+ o = r.toStringTag || "@@toStringTag";
59
+ function i(r, n, o, i) {
60
+ var c = n && n.prototype instanceof Generator ? n : Generator,
61
+ u = Object.create(c.prototype);
62
+ return _regeneratorDefine(u, "_invoke", function (r, n, o) {
63
+ var i,
64
+ c,
65
+ u,
66
+ f = 0,
67
+ p = o || [],
68
+ y = false,
69
+ G = {
70
+ p: 0,
71
+ n: 0,
72
+ v: e,
73
+ a: d,
74
+ f: d.bind(e, 4),
75
+ d: function (t, r) {
76
+ return i = t, c = 0, u = e, G.n = r, a;
101
77
  }
102
- if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
103
- if (1 === o) throw o = 4, n.arg;
104
- n.dispatchException(n.arg);
105
- } else "return" === n.method && n.abrupt("return", n.arg);
106
- o = 3;
107
- var h = s(r, e, n);
108
- if ("normal" === h.type) {
109
- if (o = n.done ? 4 : 2, h.arg === f) continue;
110
- return {
111
- value: h.arg,
112
- done: n.done
113
- };
78
+ };
79
+ function d(r, n) {
80
+ for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
81
+ var o,
82
+ i = p[t],
83
+ d = G.p,
84
+ l = i[2];
85
+ 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));
86
+ }
87
+ if (o || r > 1) return a;
88
+ throw y = true, n;
89
+ }
90
+ return function (o, p, l) {
91
+ if (f > 1) throw TypeError("Generator is already running");
92
+ for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
93
+ i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
94
+ try {
95
+ if (f = 2, i) {
96
+ if (c || (o = "next"), t = i[o]) {
97
+ if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
98
+ if (!t.done) return t;
99
+ u = t.value, c < 2 && (c = 0);
100
+ } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
101
+ i = e;
102
+ } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
103
+ } catch (t) {
104
+ i = e, c = 1, u = t;
105
+ } finally {
106
+ f = 1;
114
107
  }
115
- "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg);
116
108
  }
109
+ return {
110
+ value: t,
111
+ done: y
112
+ };
117
113
  };
118
- }(r, n, new Context(o || [])), true), a;
119
- }
120
- function s(t, r, e) {
121
- try {
122
- return {
123
- type: "normal",
124
- arg: t.call(r, e)
125
- };
126
- } catch (t) {
127
- return {
128
- type: "throw",
129
- arg: t
130
- };
131
- }
114
+ }(r, o, i), true), u;
132
115
  }
133
- r.wrap = h;
134
- var f = {};
116
+ var a = {};
135
117
  function Generator() {}
136
118
  function GeneratorFunction() {}
137
119
  function GeneratorFunctionPrototype() {}
138
- var l = {};
139
- c(l, i, function () {
140
- return this;
141
- });
142
- var p = Object.getPrototypeOf,
143
- y = p && p(p(x([])));
144
- y && y !== e && n.call(y, i) && (l = y);
145
- var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l);
146
- function g(t) {
147
- ["next", "throw", "return"].forEach(function (r) {
148
- c(t, r, function (t) {
149
- return this._invoke(r, t);
150
- });
151
- });
120
+ t = Object.getPrototypeOf;
121
+ var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {
122
+ return this;
123
+ }), t),
124
+ u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
125
+ function f(e) {
126
+ return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
152
127
  }
153
- function AsyncIterator(t, r) {
154
- function e(o, i, a, u) {
155
- var c = s(t[o], t, i);
156
- if ("throw" !== c.type) {
157
- var h = c.arg,
158
- f = h.value;
159
- return f && "object" == typeof f && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) {
160
- e("next", t, a, u);
161
- }, function (t) {
162
- e("throw", t, a, u);
163
- }) : r.resolve(f).then(function (t) {
164
- h.value = t, a(h);
165
- }, function (t) {
166
- return e("throw", t, a, u);
167
- });
168
- }
169
- u(c.arg);
170
- }
171
- var o;
172
- c(this, "_invoke", function (t, n) {
173
- function i() {
174
- return new r(function (r, o) {
175
- e(t, n, r, o);
176
- });
177
- }
178
- return o = o ? o.then(i, i) : i();
179
- }, true);
180
- }
181
- function d(r, e) {
182
- var n = e.method,
183
- o = r.i[n];
184
- 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;
185
- var i = s(o, r.i, e.arg);
186
- if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f;
187
- var a = i.arg;
188
- 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);
189
- }
190
- function w(t) {
191
- this.tryEntries.push(t);
192
- }
193
- function m(r) {
194
- var e = r[4] || {};
195
- e.type = "normal", e.arg = t, r[4] = e;
196
- }
197
- function Context(t) {
198
- this.tryEntries = [[-1]], t.forEach(w, this), this.reset(true);
199
- }
200
- function x(r) {
201
- if (null != r) {
202
- var e = r[i];
203
- if (e) return e.call(r);
204
- if ("function" == typeof r.next) return r;
205
- if (!isNaN(r.length)) {
206
- var o = -1,
207
- a = function e() {
208
- for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = false, e;
209
- return e.value = t, e.done = true, e;
210
- };
211
- return a.next = a;
212
- }
213
- }
214
- throw new TypeError(typeof r + " is not iterable");
215
- }
216
- return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, "GeneratorFunction"), r.isGeneratorFunction = function (t) {
217
- var r = "function" == typeof t && t.constructor;
218
- return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name));
219
- }, r.mark = function (t) {
220
- return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = Object.create(v), t;
221
- }, r.awrap = function (t) {
222
- return {
223
- __await: t
224
- };
225
- }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () {
128
+ 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 () {
226
129
  return this;
227
- }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) {
228
- void 0 === i && (i = Promise);
229
- var a = new AsyncIterator(h(t, e, n, o), i);
230
- return r.isGeneratorFunction(e) ? a : a.next().then(function (t) {
231
- return t.done ? t.value : a.next();
232
- });
233
- }, g(v), c(v, u, "Generator"), c(v, i, function () {
234
- return this;
235
- }), c(v, "toString", function () {
130
+ }), _regeneratorDefine(u, "toString", function () {
236
131
  return "[object Generator]";
237
- }), r.keys = function (t) {
238
- var r = Object(t),
239
- e = [];
240
- for (var n in r) e.unshift(n);
241
- return function t() {
242
- for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = false, t;
243
- return t.done = true, t;
132
+ }), (_regenerator = function () {
133
+ return {
134
+ w: i,
135
+ m: f
244
136
  };
245
- }, r.values = x, Context.prototype = {
246
- constructor: Context,
247
- reset: function (r) {
248
- 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);
249
- },
250
- stop: function () {
251
- this.done = true;
252
- var t = this.tryEntries[0][4];
253
- if ("throw" === t.type) throw t.arg;
254
- return this.rval;
255
- },
256
- dispatchException: function (r) {
257
- if (this.done) throw r;
258
- var e = this;
259
- function n(t) {
260
- a.type = "throw", a.arg = r, e.next = t;
261
- }
262
- for (var o = e.tryEntries.length - 1; o >= 0; --o) {
263
- var i = this.tryEntries[o],
264
- a = i[4],
265
- u = this.prev,
266
- c = i[1],
267
- h = i[2];
268
- if (-1 === i[0]) return n("end"), false;
269
- if (!c && !h) throw Error("try statement without catch or finally");
270
- if (null != i[0] && i[0] <= u) {
271
- if (u < c) return this.method = "next", this.arg = t, n(c), true;
272
- if (u < h) return n(h), false;
273
- }
274
- }
275
- },
276
- abrupt: function (t, r) {
277
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
278
- var n = this.tryEntries[e];
279
- if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) {
280
- var o = n;
281
- break;
282
- }
283
- }
284
- o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null);
285
- var i = o ? o[4] : {};
286
- return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i);
287
- },
288
- complete: function (t, r) {
289
- if ("throw" === t.type) throw t.arg;
290
- 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;
291
- },
292
- finish: function (t) {
293
- for (var r = this.tryEntries.length - 1; r >= 0; --r) {
294
- var e = this.tryEntries[r];
295
- if (e[2] === t) return this.complete(e[4], e[3]), m(e), f;
296
- }
297
- },
298
- catch: function (t) {
299
- for (var r = this.tryEntries.length - 1; r >= 0; --r) {
300
- var e = this.tryEntries[r];
301
- if (e[0] === t) {
302
- var n = e[4];
303
- if ("throw" === n.type) {
304
- var o = n.arg;
305
- m(e);
306
- }
307
- return o;
308
- }
309
- }
310
- throw Error("illegal catch attempt");
311
- },
312
- delegateYield: function (r, e, n) {
313
- return this.delegate = {
314
- i: x(r),
315
- r: e,
316
- n: n
317
- }, "next" === this.method && (this.arg = t), f;
137
+ })();
138
+ }
139
+ function _regeneratorDefine(e, r, n, t) {
140
+ var i = Object.defineProperty;
141
+ try {
142
+ i({}, "", {});
143
+ } catch (e) {
144
+ i = 0;
145
+ }
146
+ _regeneratorDefine = function (e, r, n, t) {
147
+ function o(r, n) {
148
+ _regeneratorDefine(e, r, function (e) {
149
+ return this._invoke(r, n, e);
150
+ });
318
151
  }
319
- }, r;
152
+ r ? i ? i(e, r, {
153
+ value: n,
154
+ enumerable: !t,
155
+ configurable: !t,
156
+ writable: !t
157
+ }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
158
+ }, _regeneratorDefine(e, r, n, t);
320
159
  }
321
160
  function _toPrimitive(t, r) {
322
161
  if ("object" != typeof t || !t) return t;
@@ -390,10 +229,10 @@ var Xmr = /*#__PURE__*/function () {
390
229
  }, {
391
230
  key: "init",
392
231
  value: function () {
393
- var _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
232
+ var _init = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
394
233
  var _this = this;
395
- return _regeneratorRuntime().wrap(function _callee$(_context) {
396
- while (1) switch (_context.prev = _context.next) {
234
+ return _regenerator().w(function (_context) {
235
+ while (1) switch (_context.n) {
397
236
  case 0:
398
237
  this.interval = setInterval(function () {
399
238
  if (_this.isConnectionWanted && !_this.isActive()) {
@@ -403,8 +242,7 @@ var Xmr = /*#__PURE__*/function () {
403
242
  }
404
243
  }, 60000);
405
244
  case 1:
406
- case "end":
407
- return _context.stop();
245
+ return _context.a(2);
408
246
  }
409
247
  }, _callee, this);
410
248
  }));
@@ -416,20 +254,21 @@ var Xmr = /*#__PURE__*/function () {
416
254
  }, {
417
255
  key: "start",
418
256
  value: function () {
419
- var _start = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(url, cmsKey) {
257
+ var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(url, cmsKey) {
420
258
  var _this2 = this;
421
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
422
- while (1) switch (_context2.prev = _context2.next) {
259
+ var _t;
260
+ return _regenerator().w(function (_context2) {
261
+ while (1) switch (_context2.p = _context2.n) {
423
262
  case 0:
424
263
  if (!(!this.channel || this.channel === 'unknown')) {
425
- _context2.next = 3;
264
+ _context2.n = 1;
426
265
  break;
427
266
  }
428
267
  console.error('Xmr::start: channel unknown, XMR will be disabled');
429
- return _context2.abrupt("return");
430
- case 3:
268
+ return _context2.a(2);
269
+ case 1:
431
270
  if (!(this.url === 'DISABLED')) {
432
- _context2.next = 8;
271
+ _context2.n = 2;
433
272
  break;
434
273
  }
435
274
  console.info('Xmr::start: XMR disabled');
@@ -437,46 +276,46 @@ var Xmr = /*#__PURE__*/function () {
437
276
  if (this.isActive()) {
438
277
  stop();
439
278
  }
440
- return _context2.abrupt("return");
441
- case 8:
279
+ return _context2.a(2);
280
+ case 2:
442
281
  this.isConnectionWanted = true;
443
282
  // Are we already connected?
444
283
  if (!(this.isActive() && this.url === url)) {
445
- _context2.next = 15;
284
+ _context2.n = 3;
446
285
  break;
447
286
  }
448
287
  console.debug('Xmr::start: already connected to this URL');
449
288
  this.cmsKey = cmsKey;
450
- return _context2.abrupt("return");
451
- case 15:
289
+ return _context2.a(2);
290
+ case 3:
452
291
  if (!this.isConnected) {
453
- _context2.next = 21;
292
+ _context2.n = 5;
454
293
  break;
455
294
  }
456
295
  console.debug('Xmr::start: already connected but not active, or a different URL');
457
- _context2.next = 19;
296
+ _context2.n = 4;
458
297
  return this.stop();
459
- case 19:
460
- _context2.next = 22;
298
+ case 4:
299
+ _context2.n = 6;
461
300
  break;
462
- case 21:
301
+ case 5:
463
302
  console.debug('Xmr::start: not connected yet');
464
- case 22:
303
+ case 6:
465
304
  // Set the URL and cmsKey.
466
305
  this.url = url;
467
306
  this.cmsKey = cmsKey;
468
307
  console.debug('Xmr::start: connecting to ' + this.url);
469
- _context2.prev = 25;
308
+ _context2.p = 7;
470
309
  this.socket = new WebSocket(this.url);
471
- _context2.next = 34;
310
+ _context2.n = 9;
472
311
  break;
473
- case 29:
474
- _context2.prev = 29;
475
- _context2.t0 = _context2["catch"](25);
476
- console.debug('Xmr::start: failed connecting to ' + this.url + ', e = ' + _context2.t0);
312
+ case 8:
313
+ _context2.p = 8;
314
+ _t = _context2.v;
315
+ console.debug('Xmr::start: failed connecting to ' + this.url + ', e = ' + _t);
477
316
  this.emitter.emit('error', 'Failed to connect');
478
- return _context2.abrupt("return");
479
- case 34:
317
+ return _context2.a(2);
318
+ case 9:
480
319
  /**
481
320
  * Listener for socket open
482
321
  */
@@ -539,16 +378,17 @@ var Xmr = /*#__PURE__*/function () {
539
378
  } else if (message.action == 'commandAction' && message.commandCode.startsWith('showStatusWindow')) {
540
379
  var split = message.commandCode.split('|');
541
380
  _this2.emitter.emit('showStatusWindow', parseInt(split[1]) || 60);
381
+ } else if (message.action == 'commandAction' && message.commandCode.startsWith('forceUpdateChromeOS')) {
382
+ _this2.emitter.emit('forceUpdateChromeOS');
542
383
  } else {
543
384
  console.error('Xmr::message: unknown action: ' + message.action);
544
385
  }
545
386
  }
546
387
  });
547
- case 38:
548
- case "end":
549
- return _context2.stop();
388
+ case 10:
389
+ return _context2.a(2);
550
390
  }
551
- }, _callee2, this, [[25, 29]]);
391
+ }, _callee2, this, [[7, 8]]);
552
392
  }));
553
393
  function start(_x, _x2) {
554
394
  return _start.apply(this, arguments);
@@ -558,9 +398,9 @@ var Xmr = /*#__PURE__*/function () {
558
398
  }, {
559
399
  key: "stop",
560
400
  value: function () {
561
- var _stop = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
562
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
563
- while (1) switch (_context3.prev = _context3.next) {
401
+ var _stop = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
402
+ return _regenerator().w(function (_context3) {
403
+ while (1) switch (_context3.n) {
564
404
  case 0:
565
405
  console.debug('Xmr::stop');
566
406
  if (this.socket) {
@@ -568,9 +408,8 @@ var Xmr = /*#__PURE__*/function () {
568
408
  this.socket.close();
569
409
  this.isConnected = false;
570
410
  }
571
- case 2:
572
- case "end":
573
- return _context3.stop();
411
+ case 1:
412
+ return _context3.a(2);
574
413
  }
575
414
  }, _callee3, this);
576
415
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"xibo-communication-framework.cjs.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.cjs.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]}
@@ -11,6 +11,7 @@ interface XmrEvents {
11
11
  screenShot: () => void;
12
12
  licenceCheck: () => void;
13
13
  showStatusWindow: (timeout: number) => void;
14
+ forceUpdateChromeOS: () => void;
14
15
  }
15
16
  declare class Xmr {
16
17
  emitter: Emitter<XmrEvents>;