@robotical/webapp-types 0.6.58

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 (100) hide show
  1. package/application-manager.ts +20 -0
  2. package/dist-types/src/analytics/AnalyticsManager.d.ts +28 -0
  3. package/dist-types/src/analytics/AnalyticsManager.js +171 -0
  4. package/dist-types/src/application/ApplicationManager/ApplicationManager.d.ts +117 -0
  5. package/dist-types/src/application/ApplicationManager/ApplicationManager.js +567 -0
  6. package/dist-types/src/application/RAFTs/Cog/Cog.d.ts +50 -0
  7. package/dist-types/src/application/RAFTs/Cog/Cog.js +223 -0
  8. package/dist-types/src/application/RAFTs/Cog/PublishedDataAnalyser.d.ts +120 -0
  9. package/dist-types/src/application/RAFTs/Cog/PublishedDataAnalyser.js +533 -0
  10. package/dist-types/src/application/RAFTs/Marty/Marty.d.ts +42 -0
  11. package/dist-types/src/application/RAFTs/Marty/Marty.js +187 -0
  12. package/dist-types/src/application/RAFTs/RAFT.d.ts +114 -0
  13. package/dist-types/src/application/RAFTs/RAFT.js +341 -0
  14. package/dist-types/src/application/RAFTs/RAFTInterface.d.ts +13 -0
  15. package/dist-types/src/application/RAFTs/RAFTInterface.js +6 -0
  16. package/dist-types/src/application/RAFTs/RaftObserver.d.ts +10 -0
  17. package/dist-types/src/application/RAFTs/RaftObserver.js +1 -0
  18. package/dist-types/src/application/RAFTs/raft-subscription-helpers.d.ts +63 -0
  19. package/dist-types/src/application/RAFTs/raft-subscription-helpers.js +355 -0
  20. package/dist-types/src/application/communicators/SelfdestructiveMessagePromise.d.ts +10 -0
  21. package/dist-types/src/application/communicators/SelfdestructiveMessagePromise.js +31 -0
  22. package/dist-types/src/application/communicators/WrapperCommunicator.d.ts +24 -0
  23. package/dist-types/src/application/communicators/WrapperCommunicator.js +137 -0
  24. package/dist-types/src/components/disposables/LoadingSpinner/index.d.ts +7 -0
  25. package/dist-types/src/components/disposables/LoadingSpinner/index.js +29 -0
  26. package/dist-types/src/components/disposables/buttons/SVGImageButton/index.d.ts +14 -0
  27. package/dist-types/src/components/disposables/buttons/SVGImageButton/index.js +19 -0
  28. package/dist-types/src/components/disposables/buttons/SimpleButton/index.d.ts +14 -0
  29. package/dist-types/src/components/disposables/buttons/SimpleButton/index.js +18 -0
  30. package/dist-types/src/components/modals/ SensorsDashboardModal/index.d.ts +2 -0
  31. package/dist-types/src/components/modals/ SensorsDashboardModal/index.js +61 -0
  32. package/dist-types/src/components/modals/ConnectingLoadingSpinnerModal/index.d.ts +3 -0
  33. package/dist-types/src/components/modals/ConnectingLoadingSpinnerModal/index.js +16 -0
  34. package/dist-types/src/components/modals/DetailedFeedbackModal/index.d.ts +5 -0
  35. package/dist-types/src/components/modals/DetailedFeedbackModal/index.js +37 -0
  36. package/dist-types/src/components/modals/DisconnectConfirmation/index.d.ts +1 -0
  37. package/dist-types/src/components/modals/DisconnectConfirmation/index.js +8 -0
  38. package/dist-types/src/components/modals/DisconnectConfirmation/styles.d.ts +1 -0
  39. package/dist-types/src/components/modals/DisconnectConfirmation/styles.js +7 -0
  40. package/dist-types/src/components/modals/InUnplugged/index.d.ts +1 -0
  41. package/dist-types/src/components/modals/InUnplugged/index.js +12 -0
  42. package/dist-types/src/components/modals/InUnplugged/styles.d.ts +5 -0
  43. package/dist-types/src/components/modals/InUnplugged/styles.js +11 -0
  44. package/dist-types/src/components/modals/VerificationModal/index.d.ts +6 -0
  45. package/dist-types/src/components/modals/VerificationModal/index.js +124 -0
  46. package/dist-types/src/components/modals/VerificationModalPhoneApp/index.d.ts +6 -0
  47. package/dist-types/src/components/modals/VerificationModalPhoneApp/index.js +195 -0
  48. package/dist-types/src/components/oneoffs/LEDs/index.d.ts +8 -0
  49. package/dist-types/src/components/oneoffs/LEDs/index.js +39 -0
  50. package/dist-types/src/components/oneoffs/RaftSignal/index.d.ts +7 -0
  51. package/dist-types/src/components/oneoffs/RaftSignal/index.js +29 -0
  52. package/dist-types/src/services/logger/Logger.d.ts +8 -0
  53. package/dist-types/src/services/logger/Logger.js +25 -0
  54. package/dist-types/src/state-observables/modal/DraggableModalState.d.ts +16 -0
  55. package/dist-types/src/state-observables/modal/DraggableModalState.js +52 -0
  56. package/dist-types/src/state-observables/modal/ModalObserver.d.ts +18 -0
  57. package/dist-types/src/state-observables/modal/ModalObserver.js +1 -0
  58. package/dist-types/src/state-observables/modal/ModalState.d.ts +25 -0
  59. package/dist-types/src/state-observables/modal/ModalState.js +71 -0
  60. package/dist-types/src/store/SelectedRaftContext.d.ts +19 -0
  61. package/dist-types/src/store/SelectedRaftContext.js +84 -0
  62. package/dist-types/src/styles/colors.d.ts +35 -0
  63. package/dist-types/src/styles/colors.js +42 -0
  64. package/dist-types/src/types/communication-between-apps/wrapper-communication.d.ts +48 -0
  65. package/dist-types/src/types/communication-between-apps/wrapper-communication.js +28 -0
  66. package/dist-types/src/types/events/raft-info.d.ts +10 -0
  67. package/dist-types/src/types/events/raft-info.js +11 -0
  68. package/dist-types/src/types/phone-app-communicator.d.ts +20 -0
  69. package/dist-types/src/types/phone-app-communicator.js +5 -0
  70. package/dist-types/src/types/raft.d.ts +18 -0
  71. package/dist-types/src/types/raft.js +14 -0
  72. package/dist-types/src/utils/Toaster.d.ts +13 -0
  73. package/dist-types/src/utils/Toaster.js +38 -0
  74. package/dist-types/src/utils/helpers/compare-version.d.ts +2 -0
  75. package/dist-types/src/utils/helpers/compare-version.js +19 -0
  76. package/dist-types/src/utils/helpers/randomHashGenerator.d.ts +1 -0
  77. package/dist-types/src/utils/helpers/randomHashGenerator.js +10 -0
  78. package/dist-types/src/utils/helpers/rescale-range.d.ts +2 -0
  79. package/dist-types/src/utils/helpers/rescale-range.js +4 -0
  80. package/dist-types/src/utils/helpers/wifi-configuration-subtitle-gen.d.ts +3 -0
  81. package/dist-types/src/utils/helpers/wifi-configuration-subtitle-gen.js +34 -0
  82. package/dist-types/src/utils/phone-app-communication/is-phone-app.d.ts +5 -0
  83. package/dist-types/src/utils/phone-app-communication/is-phone-app.js +7 -0
  84. package/dist-types/src/wrapper-app/WrapperAppManager.d.ts +58 -0
  85. package/dist-types/src/wrapper-app/WrapperAppManager.js +176 -0
  86. package/dist-types/src/wrapper-app/communicators/WebAppCommunicator.d.ts +24 -0
  87. package/dist-types/src/wrapper-app/communicators/WebAppCommunicator.js +243 -0
  88. package/dist-types/src/wrapper-app/connectors/CogConnector/CogConnector.d.ts +40 -0
  89. package/dist-types/src/wrapper-app/connectors/CogConnector/CogConnector.js +209 -0
  90. package/dist-types/src/wrapper-app/connectors/Connector.d.ts +72 -0
  91. package/dist-types/src/wrapper-app/connectors/Connector.js +314 -0
  92. package/dist-types/src/wrapper-app/connectors/ConnectorFactory.d.ts +15 -0
  93. package/dist-types/src/wrapper-app/connectors/ConnectorFactory.js +99 -0
  94. package/dist-types/src/wrapper-app/connectors/ConnectorInterface.d.ts +10 -0
  95. package/dist-types/src/wrapper-app/connectors/ConnectorInterface.js +6 -0
  96. package/dist-types/src/wrapper-app/connectors/MartyConnector/MartyConnector.d.ts +40 -0
  97. package/dist-types/src/wrapper-app/connectors/MartyConnector/MartyConnector.js +243 -0
  98. package/dist-types/types-package/application-manager.d.ts +17 -0
  99. package/dist-types/types-package/application-manager.js +5 -0
  100. package/package.json +13 -0
@@ -0,0 +1,567 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { createElement } from "react";
38
+ import modalState, { secondaryModalState } from "../../state-observables/modal/ModalState";
39
+ import { RaftConnectionMethod, RaftTypeE } from "../../types/raft";
40
+ import WebAppCommunicator from "../../wrapper-app/communicators/WebAppCommunicator";
41
+ import RAFT from "../RAFTs/RAFT";
42
+ import Marty from "../RAFTs/Marty/Marty";
43
+ import Cog from "../RAFTs/Cog/Cog";
44
+ import VerificationModal from "../../components/modals/VerificationModal";
45
+ import { raftFoundSubscriptionHelper } from "../RAFTs/raft-subscription-helpers";
46
+ import { AppSentMessage } from "../../types/communication-between-apps/wrapper-communication";
47
+ import VerificationModalPhoneApp from "../../components/modals/VerificationModalPhoneApp";
48
+ import Logger from "../../services/logger/Logger";
49
+ import isPhoneApp from "../../utils/phone-app-communication/is-phone-app";
50
+ import DisconnectConfirmationModal from "../../components/modals/DisconnectConfirmation";
51
+ import Toaster from "../../utils/Toaster";
52
+ import { AnalyticsManager } from "../../analytics/AnalyticsManager";
53
+ import { ConnManager } from "@robotical/roboticaljs";
54
+ import ConnectingLoadingSpinnerModal from "../../components/modals/ConnectingLoadingSpinnerModal";
55
+ import draggableModalState from "../../state-observables/modal/DraggableModalState";
56
+ import SensorsDashboardModal from "../../components/modals/ SensorsDashboardModal";
57
+ var SHOW_LOGS = true;
58
+ var TAG = "ApplicationManager";
59
+ var ApplicationManager = /** @class */ (function () {
60
+ function ApplicationManager() {
61
+ // Observers
62
+ this._observers = {};
63
+ // Connected RICs
64
+ this.connectedRafts = {};
65
+ this.connectedRaftsContext = [];
66
+ this.returnToMainApp = function () { };
67
+ // Callback to call when a RAFT is selected (Phone App only)
68
+ // We need that to make sure the connection button gets the selected RAFT once the user selects one
69
+ this.ricSelectedCb = null;
70
+ // RICNotificationsManager
71
+ // private _ricNotificationsManager: RICNotificationsManager = new RICNotificationsManager(
72
+ // this
73
+ // );
74
+ // sound streaming stats
75
+ // public soundStreamingStats = new MartySoundStreamingStats();
76
+ // Updater removers: when marty disconnects
77
+ // these functions will clear the time intervals
78
+ // created for updating the sensors
79
+ // all dbs for session data
80
+ // public sessionDbs = new SessionsDBManager();
81
+ // toaster
82
+ this.toaster = Toaster;
83
+ // Analytics Manager
84
+ this.analyticsManager = AnalyticsManager.getInstance();
85
+ this.showBackHomeButton = function () { };
86
+ this.hideBackHomeButton = function () { };
87
+ // connected raft context methods
88
+ this.connectedRaftContextMethods = {
89
+ addConnectedRaft: function (connectedRaft) { },
90
+ removeConnectedRaft: function (connectedRaftId) { },
91
+ setSelectedRaft: function (connectedRaftId) { },
92
+ };
93
+ this.isPhoneApp = isPhoneApp;
94
+ // super();
95
+ // DatabaseManager.appStartSession();
96
+ this.connectGenericMarty = this.connectGenericMarty.bind(this);
97
+ this.connectGenericCog = this.connectGenericCog.bind(this);
98
+ }
99
+ ApplicationManager.prototype.setRouter = function (router) {
100
+ this._router = router;
101
+ };
102
+ ApplicationManager.prototype.navigateTo = function (path) {
103
+ if (this._router) {
104
+ this._router.navigate(path);
105
+ }
106
+ else {
107
+ Logger.error(SHOW_LOGS, TAG, "Router is not set");
108
+ }
109
+ };
110
+ ApplicationManager.prototype.createNewCog = function (id) {
111
+ return new Cog(id);
112
+ };
113
+ ApplicationManager.prototype.createNewMarty = function (id) {
114
+ return new Marty(id);
115
+ };
116
+ ApplicationManager.prototype.connectGenericMarty = function (afterRaftConnectedCb) {
117
+ return __awaiter(this, void 0, void 0, function () {
118
+ return __generator(this, function (_a) {
119
+ return [2 /*return*/, this.connectGeneric(afterRaftConnectedCb, [ConnManager.RICUUID])];
120
+ });
121
+ });
122
+ };
123
+ ApplicationManager.prototype.connectGenericCog = function (afterRaftConnectedCb) {
124
+ return __awaiter(this, void 0, void 0, function () {
125
+ return __generator(this, function (_a) {
126
+ return [2 /*return*/, this.connectGeneric(afterRaftConnectedCb, [ConnManager.COGUUID])];
127
+ });
128
+ });
129
+ };
130
+ /**
131
+ * Generic Connect method
132
+ * This method is called from various environments (connection button, blocksjr, blocks etc.)
133
+ * Known issue: connecting to a raft from within a platform won't add the newly connected raft to the connectedRafts hook
134
+ */
135
+ ApplicationManager.prototype.connectGeneric = function (afterRaftConnectedCb, uuids) {
136
+ return __awaiter(this, void 0, void 0, function () {
137
+ var e_1, newRaft, e_2;
138
+ var _this = this;
139
+ return __generator(this, function (_a) {
140
+ switch (_a.label) {
141
+ case 0:
142
+ if (!uuids) {
143
+ uuids = [ConnManager.COGUUID, ConnManager.RICUUID];
144
+ }
145
+ if (!isPhoneApp()) return [3 /*break*/, 5];
146
+ _a.label = 1;
147
+ case 1:
148
+ _a.trys.push([1, 3, , 4]);
149
+ return [4 /*yield*/, window.applicationManager.startDiscovery(function (newRaft) {
150
+ _this.connectedRaftContextMethods.addConnectedRaft({ id: newRaft.id, type: newRaft.type, name: newRaft.getFriendlyName() || "", isSelected: true });
151
+ afterRaftConnectedCb(newRaft);
152
+ }, uuids)];
153
+ case 2:
154
+ _a.sent();
155
+ return [3 /*break*/, 4];
156
+ case 3:
157
+ e_1 = _a.sent();
158
+ Logger.error(SHOW_LOGS, TAG, "Failed to start discovery: ".concat(e_1));
159
+ return [3 /*break*/, 4];
160
+ case 4: return [3 /*break*/, 10];
161
+ case 5:
162
+ secondaryModalState.setModal(createElement(ConnectingLoadingSpinnerModal, {}), "Connecting...", false);
163
+ _a.label = 6;
164
+ case 6:
165
+ _a.trys.push([6, 8, , 9]);
166
+ return [4 /*yield*/, window.applicationManager.connectToRIC(RaftConnectionMethod.WEB_BLE, uuids)];
167
+ case 7:
168
+ newRaft = _a.sent();
169
+ if (newRaft) {
170
+ this.connectedRaftContextMethods.addConnectedRaft({ id: newRaft.id, type: newRaft.type, name: newRaft.getFriendlyName() || "", isSelected: true });
171
+ afterRaftConnectedCb(newRaft);
172
+ }
173
+ return [3 /*break*/, 9];
174
+ case 8:
175
+ e_2 = _a.sent();
176
+ Logger.error(SHOW_LOGS, TAG, "Failed to connect to new robot: ".concat(e_2));
177
+ return [3 /*break*/, 9];
178
+ case 9:
179
+ secondaryModalState.closeModal();
180
+ _a.label = 10;
181
+ case 10: return [2 /*return*/];
182
+ }
183
+ });
184
+ });
185
+ };
186
+ /**
187
+ * Disconnect from RAFT generic
188
+ * This method is called from various environments (connection button, blocksjr, blocks etc.)
189
+ */
190
+ ApplicationManager.prototype.disconnectGeneric = function (raft, afterRaftDisconnectedCb) {
191
+ return __awaiter(this, void 0, void 0, function () {
192
+ var confirmDisconnect, e_3;
193
+ return __generator(this, function (_a) {
194
+ switch (_a.label) {
195
+ case 0:
196
+ _a.trys.push([0, 3, , 4]);
197
+ return [4 /*yield*/, modalState.setModal(createElement(DisconnectConfirmationModal), "Are you sure you want to disconnect from your ".concat(raft.getFriendlyName(), "?"))];
198
+ case 1:
199
+ confirmDisconnect = _a.sent();
200
+ if (!confirmDisconnect) {
201
+ return [2 /*return*/];
202
+ }
203
+ return [4 /*yield*/, window.applicationManager.disconnectFromRaft(raft.id)];
204
+ case 2:
205
+ _a.sent();
206
+ if (afterRaftDisconnectedCb) {
207
+ afterRaftDisconnectedCb();
208
+ }
209
+ return [3 /*break*/, 4];
210
+ case 3:
211
+ e_3 = _a.sent();
212
+ Logger.error(SHOW_LOGS, TAG, "Failed to disconnect from robot: ".concat(e_3));
213
+ return [3 /*break*/, 4];
214
+ case 4: return [2 /*return*/];
215
+ }
216
+ });
217
+ });
218
+ };
219
+ /**
220
+ * Selects a RAFT in Phone's verification modal
221
+ */
222
+ ApplicationManager.prototype.selectRaft = function (ricToConnectTo, method) {
223
+ var _a, _b;
224
+ return __awaiter(this, void 0, void 0, function () {
225
+ var selectResults, raftId, raftType, raft;
226
+ return __generator(this, function (_c) {
227
+ switch (_c.label) {
228
+ case 0: return [4 /*yield*/, window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.RAFT_SELECT, { discoveredDevice: ricToConnectTo, method: method })];
229
+ case 1:
230
+ selectResults = _c.sent();
231
+ if (!selectResults.success) return [3 /*break*/, 3];
232
+ raftId = (_a = selectResults.data) === null || _a === void 0 ? void 0 : _a.raftId;
233
+ raftType = (_b = selectResults.data) === null || _b === void 0 ? void 0 : _b.raftType;
234
+ if (!raftId || !raftType) {
235
+ throw new Error("RAFT ID or RAFT Type is missing: ".concat(raftId, " ").concat(raftType));
236
+ }
237
+ raft = void 0;
238
+ switch (raftType) {
239
+ case RaftTypeE.MARTY:
240
+ raft = this.createNewMarty(raftId);
241
+ break;
242
+ case RaftTypeE.COG:
243
+ raft = this.createNewCog(raftId);
244
+ break;
245
+ default:
246
+ throw new Error("Unknown RAFT type");
247
+ }
248
+ this.connectedRafts[raftId] = raft;
249
+ // get missed Connect event
250
+ window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.GET_MISSED_CONN_EVENT, { raftId: raftId });
251
+ // Note: we're verifying the RAFT from the place this functions is called
252
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 200); })];
253
+ case 2:
254
+ // Note: we're verifying the RAFT from the place this functions is called
255
+ _c.sent();
256
+ if (this.ricSelectedCb) {
257
+ this.ricSelectedCb(raft);
258
+ }
259
+ return [2 /*return*/, raft];
260
+ case 3:
261
+ Logger.warn(SHOW_LOGS, TAG, "Failed to select RAFT with id: ".concat(ricToConnectTo._id));
262
+ _c.label = 4;
263
+ case 4: return [2 /*return*/, null];
264
+ }
265
+ });
266
+ });
267
+ };
268
+ ApplicationManager.prototype.connectToRIC = function (method, uuids) {
269
+ var _a, _b;
270
+ return __awaiter(this, void 0, void 0, function () {
271
+ var wasConnectedObj, raftId, raftType, raft;
272
+ return __generator(this, function (_c) {
273
+ switch (_c.label) {
274
+ case 0: return [4 /*yield*/, RAFT.connect(method, uuids)];
275
+ case 1:
276
+ wasConnectedObj = _c.sent();
277
+ if (!wasConnectedObj.success) return [3 /*break*/, 3];
278
+ raftId = (_a = wasConnectedObj.data) === null || _a === void 0 ? void 0 : _a.raftId;
279
+ raftType = (_b = wasConnectedObj.data) === null || _b === void 0 ? void 0 : _b.raftType;
280
+ if (!raftId || !raftType) {
281
+ throw new Error("RAFT ID or RAFT Type is missing: ".concat(raftId, " ").concat(raftType));
282
+ }
283
+ raft = void 0;
284
+ switch (raftType) {
285
+ case RaftTypeE.MARTY:
286
+ raft = this.createNewMarty(raftId);
287
+ break;
288
+ case RaftTypeE.COG:
289
+ raft = this.createNewCog(raftId);
290
+ break;
291
+ default:
292
+ throw new Error("Unknown RAFT type");
293
+ }
294
+ this.connectedRafts[raftId] = raft;
295
+ // get missed Connect event
296
+ window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.GET_MISSED_CONN_EVENT, { raftId: raftId });
297
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 200); })];
298
+ case 2:
299
+ _c.sent();
300
+ // start verification process
301
+ modalState.setModal(createElement(VerificationModal, { connectedRAFT_: raft }), "Looking for ".concat(raft.type));
302
+ return [2 /*return*/, raft];
303
+ case 3: return [2 /*return*/, null];
304
+ }
305
+ });
306
+ });
307
+ };
308
+ /**
309
+ * Toggles the Sensors Dashboard modal
310
+ */
311
+ ApplicationManager.prototype.toggleSensorsDashboard = function () {
312
+ if (draggableModalState.modalContent) {
313
+ return draggableModalState.closeModal();
314
+ }
315
+ return draggableModalState.setModal(createElement(SensorsDashboardModal), "Sensor Insights Hub (βETA)", "sensors-dashboard");
316
+ };
317
+ /**
318
+ * Disconnect from RAFT
319
+ */
320
+ ApplicationManager.prototype.disconnectFromRaft = function (raftId) {
321
+ return __awaiter(this, void 0, void 0, function () {
322
+ var raft;
323
+ return __generator(this, function (_a) {
324
+ switch (_a.label) {
325
+ case 0:
326
+ this.connectedRaftContextMethods.removeConnectedRaft(raftId);
327
+ raft = this.connectedRafts[raftId];
328
+ if (!raft) {
329
+ return [2 /*return*/];
330
+ }
331
+ return [4 /*yield*/, raft.disconnect()];
332
+ case 1:
333
+ _a.sent();
334
+ this._removeRaft(raftId, 3000);
335
+ return [2 /*return*/];
336
+ }
337
+ });
338
+ });
339
+ };
340
+ /**
341
+ * Removes raft after a certain time
342
+ * Removes from the rics list after x seconds so that we can still get the last event
343
+ */
344
+ ApplicationManager.prototype._removeRaft = function (raftId, timeout) {
345
+ var _this = this;
346
+ var ricRemovalTimeout = setTimeout(function () {
347
+ delete _this.connectedRafts[raftId];
348
+ clearTimeout(ricRemovalTimeout);
349
+ }, timeout);
350
+ };
351
+ /**
352
+ * Start looking for rics to connect to
353
+ * This is used from the Phone App only
354
+ */
355
+ ApplicationManager.prototype.startDiscovery = function (ricSelectedCb, uuids) {
356
+ return __awaiter(this, void 0, void 0, function () {
357
+ var foundRICs, wasDiscoveryStarted;
358
+ return __generator(this, function (_a) {
359
+ switch (_a.label) {
360
+ case 0:
361
+ this.ricSelectedCb = ricSelectedCb;
362
+ foundRICs = [];
363
+ raftFoundSubscriptionHelper().subscribe(function (_a) {
364
+ var discoveredDevice = _a.discoveredDevice;
365
+ // if the discovered RAFT is already in the list, don't add it, just update the rssi
366
+ var foundRICIdx = foundRICs.findIndex(function (ric_) { return ric_._id === discoveredDevice._id; });
367
+ if (foundRICIdx !== -1) {
368
+ foundRICs[foundRICIdx] = discoveredDevice;
369
+ }
370
+ else {
371
+ foundRICs.push(discoveredDevice);
372
+ }
373
+ // foundRICs.sort((a, b) => b._rssi - a._rssi);
374
+ modalState.setModal(createElement(VerificationModalPhoneApp, { foundRICs: foundRICs }), "Looking for RAFT");
375
+ });
376
+ modalState.setModal(createElement(VerificationModalPhoneApp, { foundRICs: [] }), "Looking for RAFT");
377
+ return [4 /*yield*/, window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.RAFT_START_DISCOVERY, { uuids: uuids })];
378
+ case 1:
379
+ wasDiscoveryStarted = _a.sent();
380
+ return [4 /*yield*/, modalState.setModal(createElement(VerificationModalPhoneApp, { foundRICs: [] }), "Looking for RAFT")];
381
+ case 2:
382
+ _a.sent();
383
+ if (!wasDiscoveryStarted) {
384
+ return [2 /*return*/, raftFoundSubscriptionHelper().unsubscribe()];
385
+ }
386
+ raftFoundSubscriptionHelper().unsubscribe();
387
+ return [2 /*return*/];
388
+ }
389
+ });
390
+ });
391
+ };
392
+ /**
393
+ * Stοp discovery
394
+ * When the user cancels the discovery process without having first connected to a robot
395
+ */
396
+ ApplicationManager.prototype.stopDiscovery = function () {
397
+ return __awaiter(this, void 0, void 0, function () {
398
+ var wasDiscoveryStopped;
399
+ return __generator(this, function (_a) {
400
+ switch (_a.label) {
401
+ case 0: return [4 /*yield*/, window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.RAFT_STOP_DISCOVERY)];
402
+ case 1:
403
+ wasDiscoveryStopped = _a.sent();
404
+ Logger.phoneAppLog(SHOW_LOGS, TAG, "Was discovery stopped: " + wasDiscoveryStopped);
405
+ return [2 /*return*/];
406
+ }
407
+ });
408
+ });
409
+ };
410
+ /**
411
+ * Stop verifying raft
412
+ */
413
+ ApplicationManager.prototype.stopVerifyingRaft = function (raftId, isCorrectRIC) {
414
+ var _a;
415
+ return __awaiter(this, void 0, void 0, function () {
416
+ return __generator(this, function (_b) {
417
+ switch (_b.label) {
418
+ case 0: return [4 /*yield*/, ((_a = this.connectedRafts[raftId]) === null || _a === void 0 ? void 0 : _a.stopVerifyingRaft(isCorrectRIC))];
419
+ case 1:
420
+ _b.sent();
421
+ this._removeRaft(raftId, 3000);
422
+ return [2 /*return*/];
423
+ }
424
+ });
425
+ });
426
+ };
427
+ /**
428
+ * Publishing events to observers
429
+ * It could be either events we get from RAFT, or custom events related to the app
430
+ */
431
+ ApplicationManager.prototype.publish = function (eventType, eventEnum, eventName, eventData) {
432
+ if (this._observers.hasOwnProperty(eventType)) {
433
+ for (var _i = 0, _a = this._observers[eventType]; _i < _a.length; _i++) {
434
+ var observer = _a[_i];
435
+ observer.notify(eventType, eventEnum, eventName, eventData);
436
+ }
437
+ }
438
+ };
439
+ // observer
440
+ ApplicationManager.prototype.subscribe = function (observer, topics) {
441
+ for (var _i = 0, topics_1 = topics; _i < topics_1.length; _i++) {
442
+ var topic = topics_1[_i];
443
+ if (!this._observers[topic]) {
444
+ this._observers[topic] = [];
445
+ }
446
+ if (this._observers[topic].indexOf(observer) === -1) {
447
+ this._observers[topic].push(observer);
448
+ }
449
+ }
450
+ };
451
+ ApplicationManager.prototype.unsubscribe = function (observer) {
452
+ for (var topic in this._observers) {
453
+ if (this._observers.hasOwnProperty(topic)) {
454
+ var index = this._observers[topic].indexOf(observer);
455
+ if (index !== -1) {
456
+ this._observers[topic].splice(index, 1);
457
+ }
458
+ }
459
+ }
460
+ };
461
+ ApplicationManager.prototype.receivedRICEvent = function (raftId, eventType, eventEnum, eventName, eventData) {
462
+ var _a;
463
+ if (raftId === "scanner") {
464
+ this.publish(eventType, eventEnum, eventName, eventData);
465
+ }
466
+ else {
467
+ (_a = this.connectedRafts[raftId]) === null || _a === void 0 ? void 0 : _a.receivedRICEvent(eventType, eventEnum, eventName, eventData);
468
+ }
469
+ };
470
+ //======================//
471
+ /* NATIVE COMMANDS ONLY */
472
+ //======================//
473
+ /**
474
+ * Save the file on the device
475
+ */
476
+ ApplicationManager.prototype.saveFileOnDevice = function (fileName, base64) {
477
+ if (!fileName || !base64) {
478
+ return Logger.error(SHOW_LOGS, TAG, "fileName or base64 is missing: fileName: ".concat(fileName, ", base64: ").concat(base64));
479
+ }
480
+ return window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.SAVE_FILE_ON_DEVICE, { fileName: fileName, base64: base64 });
481
+ };
482
+ /**
483
+ * Save the file on the device's local storage
484
+ */
485
+ ApplicationManager.prototype.saveFileOnDeviceLocalStorage = function (dirname, fileName, base64) {
486
+ if (!fileName || !base64) {
487
+ return Logger.error(SHOW_LOGS, TAG, "fileName or base64 is missing: fileName: ".concat(fileName, ", base64: ").concat(base64));
488
+ }
489
+ return window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.SAVE_FILE_ON_DEVICE_LOCAL_STORAGE, { dirname: dirname, fileName: fileName, base64: base64 });
490
+ };
491
+ /**
492
+ * Load the file from the device's local storage
493
+ */
494
+ ApplicationManager.prototype.loadFileFromDeviceLocalStorage = function (dirname, fileName) {
495
+ if (!fileName) {
496
+ return Logger.error(SHOW_LOGS, TAG, "fileName is missing: fileName: ".concat(fileName));
497
+ }
498
+ return window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.LOAD_FILE_FROM_DEVICE_LOCAL_STORAGE, { dirname: dirname, fileName: fileName });
499
+ };
500
+ /**
501
+ * Delete the file from the device's local storage
502
+ */
503
+ ApplicationManager.prototype.deleteFileFromDeviceLocalStorage = function (dirname, fileName) {
504
+ if (!fileName) {
505
+ return Logger.error(SHOW_LOGS, TAG, "fileName is missing: fileName: ".concat(fileName));
506
+ }
507
+ return window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.DELETE_FILE_FROM_DEVICE_LOCAL_STORAGE, { dirname: dirname, fileName: fileName });
508
+ };
509
+ /**
510
+ * List the files from the device's local storage
511
+ */
512
+ ApplicationManager.prototype.listFilesFromDeviceLocalStorage = function (dirname) {
513
+ return __awaiter(this, void 0, void 0, function () {
514
+ return __generator(this, function (_a) {
515
+ switch (_a.label) {
516
+ case 0: return [4 /*yield*/, window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.LIST_FILES_FROM_DEVICE_LOCAL_STORAGE, { dirname: dirname })];
517
+ case 1: return [2 /*return*/, _a.sent()];
518
+ }
519
+ });
520
+ });
521
+ };
522
+ /**
523
+ * Injects JS code to the phone app
524
+ * This is used to call native functions from the web app
525
+ */
526
+ ApplicationManager.prototype.injectJS = function (jsCode) {
527
+ return window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.INJECT_JS, { jsCode: jsCode });
528
+ };
529
+ /*======== END OF NATIVE COMMANDS ONLY ========*/
530
+ //======================//
531
+ /* UI */
532
+ //======================//
533
+ //======================//
534
+ /* HELPERS */
535
+ //======================//
536
+ ApplicationManager.prototype.getTheCurrentlySelectedDeviceOrFirstOfItsKind = function (deviceType) {
537
+ var _a;
538
+ // checks if the currently selected device is a deviceType and returns it
539
+ // if not, returns the first deviceType in the list (if there is one)
540
+ var currentlySelectedId = (_a = this.connectedRaftsContext.find(function (connectedRaft) { return connectedRaft.isSelected; })) === null || _a === void 0 ? void 0 : _a.id;
541
+ if (currentlySelectedId) {
542
+ var selectedRaft = this.connectedRafts[currentlySelectedId];
543
+ if (!selectedRaft) {
544
+ return;
545
+ }
546
+ if (selectedRaft.type === deviceType) {
547
+ // the currently selected device is a cog, return it
548
+ return selectedRaft;
549
+ }
550
+ else {
551
+ // the currently selected device is not a cog, find the first cog in the list
552
+ var fistCog = void 0;
553
+ for (var raftId in this.connectedRafts) {
554
+ if (this.connectedRafts[raftId].type === deviceType) {
555
+ fistCog = this.connectedRafts[raftId];
556
+ break;
557
+ }
558
+ }
559
+ return fistCog;
560
+ }
561
+ }
562
+ };
563
+ // Communicator to the wrapper app
564
+ ApplicationManager.wrapperAppCommunicator = new WebAppCommunicator();
565
+ return ApplicationManager;
566
+ }());
567
+ export default ApplicationManager;
@@ -0,0 +1,50 @@
1
+ import RAFT from "../RAFT";
2
+ import RICInterface from "../RAFTInterface";
3
+ import { RaftTypeE } from "../../../types/raft";
4
+ import { RICLedLcdColours } from "@robotical/roboticaljs";
5
+ import { SimplifiedCogStateInfo } from "@robotical/roboticaljs/dist/SystemTypeCog/CogTypes";
6
+ import { RaftConnEvent, RaftPublishEvent, RaftUpdateEvent } from "@robotical/raftjs";
7
+ import { RaftInfoEvents } from "../../../types/events/raft-info";
8
+ import PublishedDataAnalyser from "./PublishedDataAnalyser";
9
+ export declare class Cog extends RAFT implements RICInterface {
10
+ id: string;
11
+ type: RaftTypeE;
12
+ _ledLcdColours: RICLedLcdColours;
13
+ raftStateInfo: SimplifiedCogStateInfo | null;
14
+ publishedDataAnalyser: PublishedDataAnalyser;
15
+ constructor(id: string);
16
+ get ledLcdColours(): RICLedLcdColours;
17
+ /**
18
+ * Gets the RSSI of the RAFT
19
+ */
20
+ getRSSI(): number;
21
+ /**
22
+ * Helper function to calculate battery strength based on voltage
23
+ */
24
+ calculateBatteryStrength(voltage: number): number;
25
+ /**
26
+ * Gets the battery strength of the RAFT
27
+ */
28
+ getBatteryStrength(): number;
29
+ /**
30
+ * This methods handles RAFT events coming from the RICConnector of the wrapper
31
+ */
32
+ handleRaftEvent(eventType: string, eventEnum: RaftConnEvent | RaftUpdateEvent | RaftPublishEvent | RaftInfoEvents, eventName: string, eventData: any): void;
33
+ /**
34
+ * Conn Event Handler
35
+ */
36
+ connEventHandler(eventEnum: RaftConnEvent, eventName: string, data: any): Promise<void>;
37
+ /**
38
+ * Pub Event Handler
39
+ */
40
+ pubEventHandler(eventEnum: RaftPublishEvent, eventName: string, data: any): Promise<void>;
41
+ /**
42
+ * Highlights the COG by flashing the LED and playing a tune
43
+ */
44
+ highlight(): Promise<void>;
45
+ /**
46
+ * Raft Info Event Handler
47
+ */
48
+ raftInfoEventHandler(eventEnum: RaftInfoEvents, eventName: string, data: any): Promise<void>;
49
+ }
50
+ export default Cog;