@openremote/core 1.0.2 → 1.2.0-snapshot.20240512155932

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.
Files changed (58) hide show
  1. package/README.md +86 -8
  2. package/dist/umd/index.bundle.js +2 -0
  3. package/dist/umd/index.bundle.js.LICENSE.txt +26 -0
  4. package/dist/umd/index.js +2 -0
  5. package/dist/umd/index.js.LICENSE.txt +22 -0
  6. package/dist/umd/index.orbundle.js +50 -0
  7. package/dist/umd/index.orbundle.js.LICENSE.txt +38 -0
  8. package/lib/asset-mixin.d.ts +46 -0
  9. package/lib/asset-mixin.js +1 -0
  10. package/lib/asset-mixin.js.map +1 -0
  11. package/{dist → lib}/console.d.ts +21 -12
  12. package/lib/console.js +1 -0
  13. package/lib/console.js.map +1 -0
  14. package/lib/defaults.d.ts +15 -0
  15. package/lib/defaults.js +1 -0
  16. package/lib/defaults.js.map +1 -0
  17. package/{dist → lib}/event.d.ts +30 -16
  18. package/lib/event.js +1 -0
  19. package/lib/event.js.map +1 -0
  20. package/lib/index.d.ts +150 -0
  21. package/lib/index.js +1 -0
  22. package/lib/index.js.map +1 -0
  23. package/lib/util.d.ts +92 -0
  24. package/lib/util.js +1 -0
  25. package/lib/util.js.map +1 -0
  26. package/package.json +31 -14
  27. package/dist/asset-mixin.d.ts +0 -25
  28. package/dist/asset-mixin.js +0 -115
  29. package/dist/asset-mixin.js.map +0 -1
  30. package/dist/console.js +0 -446
  31. package/dist/console.js.map +0 -1
  32. package/dist/event.js +0 -454
  33. package/dist/event.js.map +0 -1
  34. package/dist/index.d.ts +0 -137
  35. package/dist/index.js +0 -683
  36. package/dist/index.js.map +0 -1
  37. package/dist/util.d.ts +0 -17
  38. package/dist/util.js +0 -72
  39. package/dist/util.js.map +0 -1
  40. package/src/asset-mixin.ts +0 -132
  41. package/src/console.d.ts +0 -56
  42. package/src/console.js +0 -451
  43. package/src/console.js.map +0 -1
  44. package/src/console.ts +0 -530
  45. package/src/event.d.ts +0 -75
  46. package/src/event.js +0 -410
  47. package/src/event.js.map +0 -1
  48. package/src/event.ts +0 -584
  49. package/src/index.d.ts +0 -110
  50. package/src/index.js +0 -525
  51. package/src/index.js.map +0 -1
  52. package/src/index.ts +0 -803
  53. package/src/util.d.ts +0 -15
  54. package/src/util.js +0 -46
  55. package/src/util.js.map +0 -1
  56. package/src/util.ts +0 -94
  57. package/tsconfig.json +0 -14
  58. package/tsconfig.tsbuildinfo +0 -9788
package/src/console.js DELETED
@@ -1,451 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- return new (P || (P = Promise))(function (resolve, reject) {
3
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
4
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
5
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
6
- step((generator = generator.apply(thisArg, _arguments || [])).next());
7
- });
8
- };
9
- import rest from "@openremote/rest";
10
- import openremote from "./index";
11
- // No ES6 module support in platform lib
12
- let platform = require('platform');
13
- export class Console {
14
- constructor(realm, autoEnable, enableComplete) {
15
- this._autoEnable = false;
16
- this._initialised = false;
17
- this._initialiseInProgress = false;
18
- this._pendingProviderPromises = {};
19
- this._pendingProviderEnables = [];
20
- this._registrationTimer = null;
21
- this._realm = realm;
22
- this._autoEnable = autoEnable;
23
- this._enableCompleteCallback = enableComplete;
24
- // Export this to the window to make it accessible from mobile webview code
25
- // @ts-ignore
26
- window.OpenRemoteConsole = this;
27
- // Check for query parameters to override values
28
- let queryParams = new URLSearchParams(window.location.search);
29
- let consoleName = queryParams.get("consoleName");
30
- let consoleVersion = queryParams.get("consoleVersion");
31
- let consolePlatform = queryParams.get("consolePlatform");
32
- let consoleProviders = queryParams.get("consoleProviders");
33
- let autoEnableStr = queryParams.get("consoleAutoEnable");
34
- let requestedProviders = consoleProviders && consoleProviders.length > 0 ? consoleProviders.split(" ") : ["push", "storage"];
35
- if (requestedProviders.indexOf("storage") < 0) {
36
- requestedProviders.push("storage"); // Storage provider is essential to operation and should always be available
37
- }
38
- this._pendingProviderEnables = consoleProviders && consoleProviders.length > 0 ? consoleProviders.split(" ") : [];
39
- // Look for existing console registration in local storage or just create a new one
40
- let consoleReg = Console._createConsoleRegistration();
41
- let consoleRegStr = window.localStorage.getItem("OpenRemoteConsole:" + realm);
42
- if (consoleRegStr) {
43
- try {
44
- let storedRegObj = JSON.parse(consoleRegStr);
45
- let storedReg = storedRegObj;
46
- if (storedReg.id) {
47
- consoleReg.id = storedReg.id;
48
- }
49
- if (storedReg.name) {
50
- consoleReg.name = storedReg.name;
51
- }
52
- if (storedReg.providers) {
53
- consoleReg.providers = storedReg.providers;
54
- }
55
- if (storedReg.apps) {
56
- consoleReg.apps = storedReg.apps;
57
- }
58
- }
59
- catch (e) {
60
- console.error("Failed to deserialise console registration");
61
- }
62
- }
63
- let oldProviders = consoleReg.providers;
64
- consoleReg.providers = {};
65
- for (let providerName of requestedProviders) {
66
- let provider = oldProviders && oldProviders.hasOwnProperty(providerName) ? oldProviders[providerName] : {
67
- enabled: false,
68
- disabled: false
69
- };
70
- consoleReg.providers[providerName] = provider;
71
- if (provider.disabled || provider.enabled) {
72
- let index = this._pendingProviderEnables.indexOf(providerName);
73
- this._pendingProviderEnables.splice(index, 1);
74
- }
75
- }
76
- let appName = openremote.getAppName();
77
- if (appName.length > 0 && consoleReg.apps.indexOf(appName) < 0) {
78
- consoleReg.apps.push(appName);
79
- }
80
- this._registration = consoleReg;
81
- if (consoleName) {
82
- consoleReg.name = consoleName;
83
- }
84
- if (consoleVersion) {
85
- consoleReg.version = consoleVersion;
86
- }
87
- if (consolePlatform) {
88
- consoleReg.platform = consolePlatform;
89
- }
90
- if (autoEnableStr) {
91
- this._autoEnable = autoEnableStr === "TRUE" || autoEnableStr === "true";
92
- }
93
- }
94
- get registration() {
95
- return this._registration;
96
- }
97
- get autoEnable() {
98
- return this._autoEnable;
99
- }
100
- get pendingProviderEnables() {
101
- return this._pendingProviderEnables.slice(0);
102
- }
103
- get shellApple() {
104
- // @ts-ignore
105
- return navigator.platform.substr(0, 2) === 'iP' && window.webkit && window.webkit.messageHandlers;
106
- }
107
- get shellAndroid() {
108
- // @ts-ignore
109
- return !!window.MobileInterface;
110
- }
111
- get isMobile() {
112
- return this.shellApple || this.shellAndroid;
113
- }
114
- initialise() {
115
- return __awaiter(this, void 0, void 0, function* () {
116
- if (this._initialised || this._initialiseInProgress) {
117
- return;
118
- }
119
- console.debug("Console: initialising");
120
- this._initialiseInProgress = true;
121
- try {
122
- // Get an ID for this console if it doesn't have one
123
- if (!this._registration.id) {
124
- yield this.sendRegistration(0);
125
- }
126
- if (this._registration.providers) {
127
- for (let providerName of Object.keys(this._registration.providers)) {
128
- yield this._initialiseProvider(providerName);
129
- }
130
- }
131
- this._initialised = true;
132
- this._initialiseInProgress = false;
133
- if (this._pendingProviderEnables.length === 0) {
134
- this.sendRegistration();
135
- this._callCompletedCallback();
136
- }
137
- else if (this._autoEnable) {
138
- yield this.enableProviders();
139
- }
140
- }
141
- catch (e) {
142
- console.error(e);
143
- }
144
- finally {
145
- this._initialiseInProgress = false;
146
- }
147
- });
148
- }
149
- // This mechanism doesn't support sending extra data to the providers being enabled and it doesn't allow data
150
- // to be retrieved from the replies; if that is required then providers should be manually enabled from the calling app
151
- enableProviders() {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- if (!this._initialised) {
154
- throw new Error("Console must be initialised before enabling providers");
155
- }
156
- for (let providerName of this._pendingProviderEnables) {
157
- yield this.enableProvider(providerName);
158
- }
159
- });
160
- }
161
- enableProvider(providerName, data) {
162
- return __awaiter(this, void 0, void 0, function* () {
163
- if (!this._initialised) {
164
- console.debug("Console must be initialised before disabling providers");
165
- throw new Error("Console must be initialised before enabling providers");
166
- }
167
- if (!this._registration.providers.hasOwnProperty(providerName)) {
168
- console.debug("Invalid console provider '" + providerName + "'");
169
- throw new Error("Invalid console provider '" + providerName + "'");
170
- }
171
- console.debug("Console: enabling provider '" + providerName + "'");
172
- let msg = {
173
- provider: providerName,
174
- action: "PROVIDER_ENABLE",
175
- consoleId: this._registration.id,
176
- data
177
- };
178
- let response = yield this.sendProviderMessage(msg, true);
179
- this._registration.providers[providerName].hasPermission = response.hasPermission;
180
- this._registration.providers[providerName].success = response.success;
181
- this._registration.providers[providerName].enabled = response.success;
182
- let index = this._pendingProviderEnables.indexOf(providerName);
183
- if (index >= 0) {
184
- this._pendingProviderEnables.splice(index, 1);
185
- if (this._pendingProviderEnables.length === 0) {
186
- this.sendRegistration();
187
- this._callCompletedCallback();
188
- }
189
- }
190
- return response;
191
- });
192
- }
193
- disableProvider(provider) {
194
- return __awaiter(this, void 0, void 0, function* () {
195
- if (!this._initialised) {
196
- console.debug("Console must be initialised before disabling providers");
197
- throw new Error("Console must be initialised before disabling providers");
198
- }
199
- if (!this._registration.providers.hasOwnProperty(provider)) {
200
- console.debug("Invalid console provider '" + provider + "'");
201
- throw new Error("Invalid console provider '" + provider + "'");
202
- }
203
- console.debug("Console: disabling provider '" + provider + "'");
204
- let response = yield this.sendProviderMessage({
205
- provider: provider,
206
- action: "PROVIDER_DISABLE"
207
- }, true);
208
- this._registration.providers[provider].disabled = true;
209
- this._registration.providers[provider].enabled = false;
210
- return response;
211
- });
212
- }
213
- sendProviderMessage(message, waitForResponse) {
214
- return __awaiter(this, void 0, void 0, function* () {
215
- if (!this._registration.providers.hasOwnProperty(message.provider)) {
216
- console.debug("Invalid console provider '" + message.provider + "'");
217
- throw new Error("Invalid console provider '" + message.provider + "'");
218
- }
219
- if (!waitForResponse) {
220
- this._doSendProviderMessage(message);
221
- return;
222
- }
223
- let promiseName = message.provider + message.action;
224
- if (this._pendingProviderPromises[promiseName]) {
225
- throw new Error("Message already pending for provider '" + name + "' with action '" + message.action + "'");
226
- }
227
- return yield new Promise(resolve => {
228
- this._pendingProviderPromises[promiseName] = resolve;
229
- this._doSendProviderMessage(message);
230
- });
231
- });
232
- }
233
- // Uses a delayed mechanism to avoid excessive calls to the server during enabling providers
234
- sendRegistration(delay) {
235
- if (this._registrationTimer) {
236
- window.clearTimeout(this._registrationTimer);
237
- this._registrationTimer = null;
238
- }
239
- delay = delay !== undefined ? delay : 2000;
240
- console.debug("Sending registration in: " + delay + "ms");
241
- return new Promise((resolve, reject) => {
242
- this._registrationTimer = window.setTimeout(() => {
243
- this._registrationTimer = null;
244
- console.debug("Console: updating registration");
245
- try {
246
- rest.api.ConsoleResource.register(this._registration).then((response) => {
247
- if (response.status !== 200) {
248
- throw new Error("Failed to register console");
249
- }
250
- this._registration = response.data;
251
- console.debug("Console: registration successful");
252
- console.debug("Console: updating locally stored registration");
253
- window.localStorage.setItem("OpenRemoteConsole:" + this._realm, JSON.stringify(this._registration));
254
- resolve();
255
- });
256
- }
257
- catch (e) {
258
- console.error("Failed to register console");
259
- reject("Failed to register console");
260
- }
261
- });
262
- });
263
- }
264
- storeData(key, value) {
265
- this.sendProviderMessage({
266
- provider: "storage",
267
- action: "STORE",
268
- key: key,
269
- value: value
270
- }, false);
271
- }
272
- retrieveData(key) {
273
- return __awaiter(this, void 0, void 0, function* () {
274
- let response = yield this.sendProviderMessage({
275
- provider: "storage",
276
- action: "RETRIEVE",
277
- key: key
278
- }, true);
279
- if (response && response.hasOwnProperty("value")) {
280
- return JSON.parse(response.value);
281
- }
282
- return null;
283
- });
284
- }
285
- _postNativeShellMessage(jsonMessage) {
286
- if (this.shellAndroid) {
287
- // @ts-ignore
288
- return window.MobileInterface.postMessage(JSON.stringify(jsonMessage));
289
- }
290
- if (this.shellApple) {
291
- // @ts-ignore
292
- return window.webkit.messageHandlers.int.postMessage(jsonMessage);
293
- }
294
- }
295
- _doSendProviderMessage(msg) {
296
- if (this.isMobile) {
297
- this._postNativeShellMessage({ type: "provider", data: msg });
298
- }
299
- else {
300
- if (!msg.provider || !msg.action) {
301
- return;
302
- }
303
- switch (msg.provider.trim().toUpperCase()) {
304
- // TODO: Implement web browser provider handling (web push etc.)
305
- case "PUSH":
306
- switch (msg.action.trim().toUpperCase()) {
307
- case "PROVIDER_INIT":
308
- let initResponse = {
309
- action: "PROVIDER_INIT",
310
- provider: "push",
311
- version: "web",
312
- enabled: true,
313
- hasPermission: true,
314
- requiresPermission: false,
315
- success: true
316
- };
317
- this._handleProviderResponse(JSON.stringify(initResponse));
318
- break;
319
- case "PROVIDER_ENABLE":
320
- let enableResponse = {
321
- action: "PROVIDER_ENABLE",
322
- provider: "push",
323
- hasPermission: true,
324
- success: true
325
- };
326
- this._handleProviderResponse(JSON.stringify(enableResponse));
327
- break;
328
- default:
329
- throw new Error("Unsupported provider '" + msg.provider + "' and action '" + msg.action + "'");
330
- }
331
- break;
332
- case "STORAGE":
333
- switch (msg.action) {
334
- case "PROVIDER_INIT":
335
- let initResponse = {
336
- action: "PROVIDER_INIT",
337
- provider: "storage",
338
- version: "1.0.0",
339
- enabled: true,
340
- hasPermission: true,
341
- requiresPermission: false,
342
- success: true
343
- };
344
- this._handleProviderResponse(JSON.stringify(initResponse));
345
- break;
346
- case "PROVIDER_ENABLE":
347
- let enableResponse = {
348
- action: "PROVIDER_ENABLE",
349
- provider: "storage",
350
- hasPermission: true,
351
- success: true
352
- };
353
- this._handleProviderResponse(JSON.stringify(enableResponse));
354
- break;
355
- case "STORE":
356
- let keyValue = msg.key ? msg.key.trim() : null;
357
- if (!keyValue || keyValue.length === 0) {
358
- throw new Error("Storage provider 'store' action requires a `key`");
359
- }
360
- if (msg.hasOwnProperty("value")) {
361
- if (msg.value === null) {
362
- window.localStorage.removeItem(keyValue);
363
- }
364
- else {
365
- window.localStorage.setItem(keyValue, msg.value);
366
- }
367
- }
368
- break;
369
- case "RETRIEVE":
370
- keyValue = msg.key ? msg.key.trim() : null;
371
- if (!keyValue || keyValue.length === 0) {
372
- throw new Error("Storage provider 'retrieve' action requires a `key`");
373
- }
374
- this._handleProviderResponse(JSON.stringify({
375
- action: "RETRIEVE",
376
- provider: "storage",
377
- key: keyValue,
378
- value: window.localStorage.getItem(keyValue)
379
- }));
380
- break;
381
- default:
382
- throw new Error("Unsupported provider '" + msg.provider + "' and action '" + msg.action + "'");
383
- }
384
- break;
385
- }
386
- }
387
- }
388
- // This is called by native web view code
389
- _handleProviderResponse(msg) {
390
- if (!msg) {
391
- return;
392
- }
393
- let msgJson = JSON.parse(msg);
394
- let name = msgJson.provider;
395
- let action = msgJson.action;
396
- let resolve = this._pendingProviderPromises[name + action];
397
- if (resolve != null) {
398
- this._pendingProviderPromises[name + action] = null;
399
- resolve(msgJson);
400
- }
401
- }
402
- _callCompletedCallback() {
403
- let callback = this._enableCompleteCallback;
404
- this._enableCompleteCallback = null;
405
- if (callback) {
406
- window.setTimeout(() => {
407
- callback();
408
- }, 0);
409
- }
410
- }
411
- static _createConsoleRegistration() {
412
- let reg = {
413
- name: platform.name,
414
- version: platform.version,
415
- platform: platform.os.toString(),
416
- apps: [],
417
- model: ((platform.manufacturer ? platform.manufacturer + " " : "") + (platform.product ? platform.product : "")).trim()
418
- };
419
- return reg;
420
- }
421
- _initialiseProvider(providerName) {
422
- return __awaiter(this, void 0, void 0, function* () {
423
- console.debug("Console: initialising provider '" + providerName + "'");
424
- let initResponse = yield this.sendProviderMessage({
425
- provider: providerName,
426
- action: "PROVIDER_INIT"
427
- }, true);
428
- this._registration.providers[providerName].version = initResponse.version;
429
- this._registration.providers[providerName].requiresPermission = initResponse.requiresPermission;
430
- this._registration.providers[providerName].hasPermission = initResponse.hasPermission;
431
- this._registration.providers[providerName].success = initResponse.success;
432
- this._registration.providers[providerName].enabled = initResponse.enabled;
433
- if (!initResponse.success) {
434
- console.debug("Provider initialisation failed: '" + providerName + "'");
435
- this._registration.providers[providerName].disabled = true;
436
- let index = this._pendingProviderEnables.indexOf(providerName);
437
- if (index >= 0) {
438
- this._pendingProviderEnables.splice(index, 1);
439
- }
440
- }
441
- else if (initResponse.enabled) {
442
- let index = this._pendingProviderEnables.indexOf(providerName);
443
- if (index >= 0) {
444
- this._pendingProviderEnables.splice(index, 1);
445
- }
446
- }
447
- return initResponse;
448
- });
449
- }
450
- }
451
- //# sourceMappingURL=console.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["console.ts"],"names":[],"mappings":"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"}