@xibosignage/xibo-communication-framework 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -0
- package/dist/xibo-communication-framework.cjs +8562 -0
- package/dist/xibo-communication-framework.cjs.map +1 -0
- package/dist/xibo-communication-framework.esm.js +8131 -2
- package/dist/xibo-communication-framework.esm.js.map +1 -1
- package/dist/xibo-communication-framework.js +8138 -7
- package/dist/xibo-communication-framework.min.js +2 -2
- package/dist/xibo-communication-framework.min.js.map +1 -1
- package/package.json +4 -4
- package/dist/xibo-communication-framework.cjs.js +0 -433
- package/dist/xibo-communication-framework.cjs.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xibosignage/xibo-communication-framework",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Xibo Communication Framework",
|
|
5
|
-
"main": "dist/xibo-communication-framework.cjs
|
|
6
|
-
"module": "dist/xibo-communication-framework.esm.js",
|
|
7
|
-
"typings": "dist/xibo-communication-framework.d.ts",
|
|
5
|
+
"main": "./dist/xibo-communication-framework.cjs",
|
|
6
|
+
"module": "./dist/xibo-communication-framework.esm.js",
|
|
8
7
|
"type": "module",
|
|
8
|
+
"types": "./dist/xibo-communication-framework.d.ts",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
11
|
"prepare": "npm run build",
|
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var luxon = require('luxon');
|
|
4
|
-
|
|
5
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) {
|
|
6
|
-
try {
|
|
7
|
-
var i = n[a](c),
|
|
8
|
-
u = i.value;
|
|
9
|
-
} catch (n) {
|
|
10
|
-
return void e(n);
|
|
11
|
-
}
|
|
12
|
-
i.done ? t(u) : Promise.resolve(u).then(r, o);
|
|
13
|
-
}
|
|
14
|
-
function _asyncToGenerator(n) {
|
|
15
|
-
return function () {
|
|
16
|
-
var t = this,
|
|
17
|
-
e = arguments;
|
|
18
|
-
return new Promise(function (r, o) {
|
|
19
|
-
var a = n.apply(t, e);
|
|
20
|
-
function _next(n) {
|
|
21
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
|
|
22
|
-
}
|
|
23
|
-
function _throw(n) {
|
|
24
|
-
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
|
|
25
|
-
}
|
|
26
|
-
_next(void 0);
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function _classCallCheck(a, n) {
|
|
31
|
-
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
32
|
-
}
|
|
33
|
-
function _defineProperties(e, r) {
|
|
34
|
-
for (var t = 0; t < r.length; t++) {
|
|
35
|
-
var o = r[t];
|
|
36
|
-
o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function _createClass(e, r, t) {
|
|
40
|
-
return r && _defineProperties(e.prototype, r), Object.defineProperty(e, "prototype", {
|
|
41
|
-
writable: false
|
|
42
|
-
}), e;
|
|
43
|
-
}
|
|
44
|
-
function _defineProperty(e, r, t) {
|
|
45
|
-
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
46
|
-
value: t,
|
|
47
|
-
enumerable: true,
|
|
48
|
-
configurable: true,
|
|
49
|
-
writable: true
|
|
50
|
-
}) : e[r] = t, e;
|
|
51
|
-
}
|
|
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;
|
|
77
|
-
}
|
|
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;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return {
|
|
110
|
-
value: t,
|
|
111
|
-
done: y
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
}(r, o, i), true), u;
|
|
115
|
-
}
|
|
116
|
-
var a = {};
|
|
117
|
-
function Generator() {}
|
|
118
|
-
function GeneratorFunction() {}
|
|
119
|
-
function GeneratorFunctionPrototype() {}
|
|
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;
|
|
127
|
-
}
|
|
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 () {
|
|
129
|
-
return this;
|
|
130
|
-
}), _regeneratorDefine(u, "toString", function () {
|
|
131
|
-
return "[object Generator]";
|
|
132
|
-
}), (_regenerator = function () {
|
|
133
|
-
return {
|
|
134
|
-
w: i,
|
|
135
|
-
m: f
|
|
136
|
-
};
|
|
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
|
-
});
|
|
151
|
-
}
|
|
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);
|
|
159
|
-
}
|
|
160
|
-
function _toPrimitive(t, r) {
|
|
161
|
-
if ("object" != typeof t || !t) return t;
|
|
162
|
-
var e = t[Symbol.toPrimitive];
|
|
163
|
-
if (void 0 !== e) {
|
|
164
|
-
var i = e.call(t, r);
|
|
165
|
-
if ("object" != typeof i) return i;
|
|
166
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
167
|
-
}
|
|
168
|
-
return (String )(t);
|
|
169
|
-
}
|
|
170
|
-
function _toPropertyKey(t) {
|
|
171
|
-
var i = _toPrimitive(t, "string");
|
|
172
|
-
return "symbol" == typeof i ? i : i + "";
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
var createNanoEvents = function createNanoEvents() {
|
|
176
|
-
return {
|
|
177
|
-
emit: function emit(event) {
|
|
178
|
-
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
179
|
-
args[_key - 1] = arguments[_key];
|
|
180
|
-
}
|
|
181
|
-
for (var callbacks = this.events[event] || [], i = 0, length = callbacks.length; i < length; i++) {
|
|
182
|
-
callbacks[i].apply(callbacks, args);
|
|
183
|
-
}
|
|
184
|
-
},
|
|
185
|
-
events: {},
|
|
186
|
-
on: function on(event, cb) {
|
|
187
|
-
var _this$events,
|
|
188
|
-
_this = this;
|
|
189
|
-
((_this$events = this.events)[event] || (_this$events[event] = [])).push(cb);
|
|
190
|
-
return function () {
|
|
191
|
-
var _this$events$event;
|
|
192
|
-
_this.events[event] = (_this$events$event = _this.events[event]) === null || _this$events$event === void 0 ? void 0 : _this$events$event.filter(function (i) {
|
|
193
|
-
return cb !== i;
|
|
194
|
-
});
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
var Xmr = /*#__PURE__*/function () {
|
|
201
|
-
function Xmr(channel) {
|
|
202
|
-
_classCallCheck(this, Xmr);
|
|
203
|
-
_defineProperty(this, "emitter", void 0);
|
|
204
|
-
_defineProperty(this, "url", void 0);
|
|
205
|
-
_defineProperty(this, "cmsKey", void 0);
|
|
206
|
-
_defineProperty(this, "channel", void 0);
|
|
207
|
-
_defineProperty(this, "socket", void 0);
|
|
208
|
-
// State
|
|
209
|
-
_defineProperty(this, "isConnectionWanted", void 0);
|
|
210
|
-
_defineProperty(this, "isConnected", void 0);
|
|
211
|
-
_defineProperty(this, "lastMessageAt", void 0);
|
|
212
|
-
_defineProperty(this, "interval", void 0);
|
|
213
|
-
// Emitter
|
|
214
|
-
this.emitter = createNanoEvents();
|
|
215
|
-
this.url = null;
|
|
216
|
-
this.cmsKey = null;
|
|
217
|
-
this.channel = channel;
|
|
218
|
-
this.isConnected = false;
|
|
219
|
-
this.isConnectionWanted = false;
|
|
220
|
-
this.lastMessageAt = luxon.DateTime.now().minus({
|
|
221
|
-
year: 1
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
return _createClass(Xmr, [{
|
|
225
|
-
key: "on",
|
|
226
|
-
value: function on(event, callback) {
|
|
227
|
-
return this.emitter.on(event, callback);
|
|
228
|
-
}
|
|
229
|
-
}, {
|
|
230
|
-
key: "init",
|
|
231
|
-
value: function () {
|
|
232
|
-
var _init = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
233
|
-
var _this = this;
|
|
234
|
-
return _regenerator().w(function (_context) {
|
|
235
|
-
while (1) switch (_context.n) {
|
|
236
|
-
case 0:
|
|
237
|
-
this.interval = setInterval(function () {
|
|
238
|
-
if (_this.isConnectionWanted && !_this.isActive()) {
|
|
239
|
-
console.debug('Xmr::setInterval: should be active');
|
|
240
|
-
// Call start again
|
|
241
|
-
_this.start(_this.url || 'DISABLED', _this.cmsKey || 'n/a');
|
|
242
|
-
}
|
|
243
|
-
}, 60000);
|
|
244
|
-
case 1:
|
|
245
|
-
return _context.a(2);
|
|
246
|
-
}
|
|
247
|
-
}, _callee, this);
|
|
248
|
-
}));
|
|
249
|
-
function init() {
|
|
250
|
-
return _init.apply(this, arguments);
|
|
251
|
-
}
|
|
252
|
-
return init;
|
|
253
|
-
}()
|
|
254
|
-
}, {
|
|
255
|
-
key: "start",
|
|
256
|
-
value: function () {
|
|
257
|
-
var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(url, cmsKey) {
|
|
258
|
-
var _this2 = this;
|
|
259
|
-
var _t;
|
|
260
|
-
return _regenerator().w(function (_context2) {
|
|
261
|
-
while (1) switch (_context2.p = _context2.n) {
|
|
262
|
-
case 0:
|
|
263
|
-
if (!(!this.channel || this.channel === 'unknown')) {
|
|
264
|
-
_context2.n = 1;
|
|
265
|
-
break;
|
|
266
|
-
}
|
|
267
|
-
console.error('Xmr::start: channel unknown, XMR will be disabled');
|
|
268
|
-
return _context2.a(2);
|
|
269
|
-
case 1:
|
|
270
|
-
if (!(this.url === 'DISABLED')) {
|
|
271
|
-
_context2.n = 2;
|
|
272
|
-
break;
|
|
273
|
-
}
|
|
274
|
-
console.info('Xmr::start: XMR disabled');
|
|
275
|
-
this.isConnectionWanted = false;
|
|
276
|
-
if (this.isActive()) {
|
|
277
|
-
stop();
|
|
278
|
-
}
|
|
279
|
-
return _context2.a(2);
|
|
280
|
-
case 2:
|
|
281
|
-
this.isConnectionWanted = true;
|
|
282
|
-
// Are we already connected?
|
|
283
|
-
if (!(this.isActive() && this.url === url)) {
|
|
284
|
-
_context2.n = 3;
|
|
285
|
-
break;
|
|
286
|
-
}
|
|
287
|
-
console.debug('Xmr::start: already connected to this URL');
|
|
288
|
-
this.cmsKey = cmsKey;
|
|
289
|
-
return _context2.a(2);
|
|
290
|
-
case 3:
|
|
291
|
-
if (!this.isConnected) {
|
|
292
|
-
_context2.n = 5;
|
|
293
|
-
break;
|
|
294
|
-
}
|
|
295
|
-
console.debug('Xmr::start: already connected but not active, or a different URL');
|
|
296
|
-
_context2.n = 4;
|
|
297
|
-
return this.stop();
|
|
298
|
-
case 4:
|
|
299
|
-
_context2.n = 6;
|
|
300
|
-
break;
|
|
301
|
-
case 5:
|
|
302
|
-
console.debug('Xmr::start: not connected yet');
|
|
303
|
-
case 6:
|
|
304
|
-
// Set the URL and cmsKey.
|
|
305
|
-
this.url = url;
|
|
306
|
-
this.cmsKey = cmsKey;
|
|
307
|
-
console.debug('Xmr::start: connecting to ' + this.url);
|
|
308
|
-
_context2.p = 7;
|
|
309
|
-
this.socket = new WebSocket(this.url);
|
|
310
|
-
_context2.n = 9;
|
|
311
|
-
break;
|
|
312
|
-
case 8:
|
|
313
|
-
_context2.p = 8;
|
|
314
|
-
_t = _context2.v;
|
|
315
|
-
console.debug('Xmr::start: failed connecting to ' + this.url + ', e = ' + _t);
|
|
316
|
-
this.emitter.emit('error', 'Failed to connect');
|
|
317
|
-
return _context2.a(2);
|
|
318
|
-
case 9:
|
|
319
|
-
/**
|
|
320
|
-
* Listener for socket open
|
|
321
|
-
*/
|
|
322
|
-
this.socket.addEventListener('open', function (event) {
|
|
323
|
-
console.debug('Xmr::' + event.type);
|
|
324
|
-
if (_this2.socket.readyState !== WebSocket.OPEN) {
|
|
325
|
-
console.info('Xmr::' + event.type + ': not open yet');
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
// Create and send an initialisation message.
|
|
329
|
-
_this2.socket.send(JSON.stringify({
|
|
330
|
-
'type': 'init',
|
|
331
|
-
'key': _this2.cmsKey,
|
|
332
|
-
'channel': _this2.channel
|
|
333
|
-
}));
|
|
334
|
-
_this2.isConnected = true;
|
|
335
|
-
_this2.emitter.emit('connected');
|
|
336
|
-
});
|
|
337
|
-
/**
|
|
338
|
-
* Listener for socket close
|
|
339
|
-
*/
|
|
340
|
-
this.socket.addEventListener('close', function (event) {
|
|
341
|
-
console.debug('Xmr::' + event.type);
|
|
342
|
-
_this2.isConnected = false;
|
|
343
|
-
_this2.emitter.emit('disconnected');
|
|
344
|
-
});
|
|
345
|
-
/**
|
|
346
|
-
* Listener for socket error
|
|
347
|
-
*/
|
|
348
|
-
this.socket.addEventListener('error', function (event) {
|
|
349
|
-
console.debug('Xmr::' + event.type);
|
|
350
|
-
_this2.emitter.emit('error', 'error');
|
|
351
|
-
});
|
|
352
|
-
/**
|
|
353
|
-
* Listener for socket message
|
|
354
|
-
*/
|
|
355
|
-
this.socket.addEventListener('message', function (event) {
|
|
356
|
-
console.debug(event);
|
|
357
|
-
_this2.lastMessageAt = luxon.DateTime.now();
|
|
358
|
-
_this2.emitter.emit('statusChange', _this2.lastMessageAt.toISO() || '');
|
|
359
|
-
// Expect a JSON message or a H
|
|
360
|
-
if (event.data === 'H') {
|
|
361
|
-
console.debug('Xmr::message: Heartbeat...');
|
|
362
|
-
} else {
|
|
363
|
-
// JSON message.
|
|
364
|
-
var message = JSON.parse(event.data);
|
|
365
|
-
console.debug('Xmr::message: action is ' + message.action);
|
|
366
|
-
// Check the createdDt and TTL against the current date time.
|
|
367
|
-
var expiresAt = luxon.DateTime.fromISO(message.createdDt).plus({
|
|
368
|
-
seconds: parseInt(message.ttl)
|
|
369
|
-
});
|
|
370
|
-
if (expiresAt < luxon.DateTime.now()) {
|
|
371
|
-
console.debug('Xmr::message: message expired at ' + expiresAt.toString());
|
|
372
|
-
} else if (message.action === 'collectNow') {
|
|
373
|
-
_this2.emitter.emit('collectNow');
|
|
374
|
-
} else if (message.action === 'screenShot') {
|
|
375
|
-
_this2.emitter.emit('screenShot');
|
|
376
|
-
} else if (message.action === 'licenceCheck') {
|
|
377
|
-
_this2.emitter.emit('licenceCheck');
|
|
378
|
-
} else if (message.action == 'commandAction' && message.commandCode.startsWith('showStatusWindow')) {
|
|
379
|
-
var split = message.commandCode.split('|');
|
|
380
|
-
_this2.emitter.emit('showStatusWindow', parseInt(split[1]) || 60);
|
|
381
|
-
} else if (message.action == 'commandAction' && message.commandCode.startsWith('forceUpdateChromeOS')) {
|
|
382
|
-
_this2.emitter.emit('forceUpdateChromeOS');
|
|
383
|
-
} else {
|
|
384
|
-
console.error('Xmr::message: unknown action: ' + message.action);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
});
|
|
388
|
-
case 10:
|
|
389
|
-
return _context2.a(2);
|
|
390
|
-
}
|
|
391
|
-
}, _callee2, this, [[7, 8]]);
|
|
392
|
-
}));
|
|
393
|
-
function start(_x, _x2) {
|
|
394
|
-
return _start.apply(this, arguments);
|
|
395
|
-
}
|
|
396
|
-
return start;
|
|
397
|
-
}()
|
|
398
|
-
}, {
|
|
399
|
-
key: "stop",
|
|
400
|
-
value: function () {
|
|
401
|
-
var _stop = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
402
|
-
return _regenerator().w(function (_context3) {
|
|
403
|
-
while (1) switch (_context3.n) {
|
|
404
|
-
case 0:
|
|
405
|
-
console.debug('Xmr::stop');
|
|
406
|
-
if (this.socket) {
|
|
407
|
-
console.debug('Xmr::stop: closing active socket');
|
|
408
|
-
this.socket.close();
|
|
409
|
-
this.isConnected = false;
|
|
410
|
-
}
|
|
411
|
-
case 1:
|
|
412
|
-
return _context3.a(2);
|
|
413
|
-
}
|
|
414
|
-
}, _callee3, this);
|
|
415
|
-
}));
|
|
416
|
-
function stop() {
|
|
417
|
-
return _stop.apply(this, arguments);
|
|
418
|
-
}
|
|
419
|
-
return stop;
|
|
420
|
-
}()
|
|
421
|
-
}, {
|
|
422
|
-
key: "isActive",
|
|
423
|
-
value: function isActive() {
|
|
424
|
-
console.debug('Xmr::isActive: lastMessageAt: ' + this.lastMessageAt.toString());
|
|
425
|
-
return this.isConnected && this.lastMessageAt > luxon.DateTime.now().minus({
|
|
426
|
-
minute: 15
|
|
427
|
-
});
|
|
428
|
-
}
|
|
429
|
-
}]);
|
|
430
|
-
}();
|
|
431
|
-
|
|
432
|
-
exports.Xmr = Xmr;
|
|
433
|
-
//# sourceMappingURL=xibo-communication-framework.cjs.js.map
|
|
@@ -1 +0,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]}
|