homebridge-adt-pulse 3.0.0-beta.2 → 3.0.0-beta.20
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/LICENSE +198 -12
- package/README.md +173 -114
- package/build/config.schema.json +343 -0
- package/build/src/index.js +6 -0
- package/build/src/index.js.map +1 -0
- package/build/src/lib/accessory.js +421 -0
- package/build/src/lib/accessory.js.map +1 -0
- package/build/src/lib/api.js +1782 -0
- package/build/src/lib/api.js.map +1 -0
- package/build/src/lib/detect.js +480 -0
- package/build/src/lib/detect.js.map +1 -0
- package/build/src/lib/items.js +267 -0
- package/build/src/lib/items.js.map +1 -0
- package/build/src/lib/platform.js +495 -0
- package/build/src/lib/platform.js.map +1 -0
- package/{src/lib/regex.ts → build/src/lib/regex.js} +3 -145
- package/build/src/lib/regex.js.map +1 -0
- package/build/src/lib/schema.js +44 -0
- package/build/src/lib/schema.js.map +1 -0
- package/build/src/lib/utility.js +528 -0
- package/build/src/lib/utility.js.map +1 -0
- package/build/src/scripts/repl.js +176 -0
- package/build/src/scripts/repl.js.map +1 -0
- package/build/src/scripts/test-api.js +171 -0
- package/build/src/scripts/test-api.js.map +1 -0
- package/config.schema.json +324 -218
- package/package.json +34 -20
- package/src/index.ts +0 -18
- package/src/lib/accessory.ts +0 -405
- package/src/lib/api.ts +0 -3483
- package/src/lib/detect.ts +0 -728
- package/src/lib/platform.ts +0 -890
- package/src/lib/schema.ts +0 -34
- package/src/lib/utility.ts +0 -933
- package/src/scripts/repl.ts +0 -300
- package/src/scripts/test-api.ts +0 -278
- package/src/types/constant.d.ts +0 -308
- package/src/types/index.d.ts +0 -1472
- package/src/types/shared.d.ts +0 -517
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { JSDOM } from 'jsdom';
|
|
3
|
+
import latestVersion from 'latest-version';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import { createHash } from 'node:crypto';
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
import os from 'node:os';
|
|
8
|
+
import util from 'node:util';
|
|
9
|
+
import { panelStatusNoteItems, panelStatusStateItems, panelStatusStatusItems } from './items.js';
|
|
10
|
+
import { characterBackslashForwardSlash, characterHtmlLineBreak, characterWhitespace, functionDoSubmit, functionGoToUrl, functionSetArmState, paramSat, textOrbSensorZone, textOrbTextSummarySections, textSyncCode, } from './regex.js';
|
|
11
|
+
export function clearHtmlLineBreak(data) {
|
|
12
|
+
return data.replace(characterHtmlLineBreak, ' ').trim();
|
|
13
|
+
}
|
|
14
|
+
export function clearWhitespace(data) {
|
|
15
|
+
return data.replace(characterWhitespace, ' ').trim();
|
|
16
|
+
}
|
|
17
|
+
export function condensePanelStates(panelStates) {
|
|
18
|
+
let condensed;
|
|
19
|
+
switch (true) {
|
|
20
|
+
case panelStates.includes('Armed Away'):
|
|
21
|
+
condensed = 'away';
|
|
22
|
+
break;
|
|
23
|
+
case panelStates.includes('Armed Night'):
|
|
24
|
+
condensed = 'night';
|
|
25
|
+
break;
|
|
26
|
+
case panelStates.includes('Armed Stay'):
|
|
27
|
+
condensed = 'stay';
|
|
28
|
+
break;
|
|
29
|
+
case panelStates.includes('Disarmed'):
|
|
30
|
+
condensed = 'off';
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
return condensed;
|
|
36
|
+
}
|
|
37
|
+
export function condenseSensorType(sensorType) {
|
|
38
|
+
let condensed;
|
|
39
|
+
switch (sensorType) {
|
|
40
|
+
case 'Carbon Monoxide Detector':
|
|
41
|
+
condensed = 'co';
|
|
42
|
+
break;
|
|
43
|
+
case 'Door/Window Sensor':
|
|
44
|
+
case 'Door Sensor':
|
|
45
|
+
case 'Window Sensor':
|
|
46
|
+
condensed = 'doorWindow';
|
|
47
|
+
break;
|
|
48
|
+
case 'Fire (Smoke/Heat) Detector':
|
|
49
|
+
condensed = 'fire';
|
|
50
|
+
break;
|
|
51
|
+
case 'Water/Flood Sensor':
|
|
52
|
+
condensed = 'flood';
|
|
53
|
+
break;
|
|
54
|
+
case 'Glass Break Detector':
|
|
55
|
+
condensed = 'glass';
|
|
56
|
+
break;
|
|
57
|
+
case 'Heat (Rate-of-Rise) Detector':
|
|
58
|
+
condensed = 'heat';
|
|
59
|
+
break;
|
|
60
|
+
case 'Keypad/Touchpad':
|
|
61
|
+
condensed = 'keypad';
|
|
62
|
+
break;
|
|
63
|
+
case 'Motion Sensor':
|
|
64
|
+
case 'Motion Sensor (Notable Events Only)':
|
|
65
|
+
condensed = 'motion';
|
|
66
|
+
break;
|
|
67
|
+
case 'Audible Panic Button/Pendant':
|
|
68
|
+
case 'Silent Panic Button/Pendant':
|
|
69
|
+
condensed = 'panic';
|
|
70
|
+
break;
|
|
71
|
+
case 'Shock Sensor':
|
|
72
|
+
condensed = 'shock';
|
|
73
|
+
break;
|
|
74
|
+
case 'System/Supervisory':
|
|
75
|
+
condensed = 'supervisory';
|
|
76
|
+
break;
|
|
77
|
+
case 'Temperature Sensor':
|
|
78
|
+
condensed = 'temperature';
|
|
79
|
+
break;
|
|
80
|
+
case 'Unknown Device Type':
|
|
81
|
+
condensed = 'unknown';
|
|
82
|
+
break;
|
|
83
|
+
default:
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
return condensed;
|
|
87
|
+
}
|
|
88
|
+
export function debugLog(logger, caller, type, message) {
|
|
89
|
+
const logMessage = chalk.reset(chalk.underline(caller), '-', message, '...');
|
|
90
|
+
switch (type) {
|
|
91
|
+
case 'error':
|
|
92
|
+
if (logger !== null) {
|
|
93
|
+
logger.error(chalk.gray('DEBUG'), chalk.redBright('ERROR:'), logMessage);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.error('[ADT Pulse]', chalk.redBright('ERROR:'), logMessage);
|
|
97
|
+
}
|
|
98
|
+
break;
|
|
99
|
+
case 'warn':
|
|
100
|
+
if (logger !== null) {
|
|
101
|
+
logger.warn(chalk.gray('DEBUG'), chalk.yellowBright('WARNING:'), logMessage);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.warn('[ADT Pulse]', chalk.yellowBright('WARNING:'), logMessage);
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
case 'success':
|
|
108
|
+
if (logger !== null) {
|
|
109
|
+
logger.info(chalk.gray('DEBUG'), chalk.greenBright('SUCCESS:'), logMessage);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.info('[ADT Pulse]', chalk.greenBright('SUCCESS:'), logMessage);
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
case 'info':
|
|
116
|
+
if (logger !== null) {
|
|
117
|
+
logger.info(chalk.gray('DEBUG'), chalk.blueBright('INFO:'), logMessage);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.info('[ADT Pulse]', chalk.blueBright('INFO:'), logMessage);
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export function fetchErrorMessage(response) {
|
|
128
|
+
if (response === undefined || typeof response.data !== 'string') {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const jsdom = new JSDOM(response.data, {
|
|
132
|
+
url: response.config.url,
|
|
133
|
+
referrer: response.config.headers.Referer,
|
|
134
|
+
contentType: 'text/html',
|
|
135
|
+
pretendToBeVisual: true,
|
|
136
|
+
});
|
|
137
|
+
const warnMessage = jsdom.window.document.querySelector('#warnMsgContents');
|
|
138
|
+
if (warnMessage !== null) {
|
|
139
|
+
return clearWhitespace(clearHtmlLineBreak(warnMessage.innerHTML));
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
export function fetchMissingSatCode(response) {
|
|
144
|
+
if (typeof response.data !== 'string') {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const satCode = response.data.match(paramSat);
|
|
148
|
+
if (satCode !== null && satCode.length >= 2) {
|
|
149
|
+
return satCode[1];
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
export function fetchTableCells(nodeElements, matchItems, incrementFrom, incrementTo) {
|
|
154
|
+
const matched = {};
|
|
155
|
+
let newIncrementFrom = incrementFrom;
|
|
156
|
+
let newIncrementTo = incrementTo;
|
|
157
|
+
if (incrementFrom < 0) {
|
|
158
|
+
newIncrementFrom = 0;
|
|
159
|
+
}
|
|
160
|
+
if (incrementTo < incrementFrom) {
|
|
161
|
+
newIncrementTo = incrementFrom;
|
|
162
|
+
}
|
|
163
|
+
nodeElements.forEach((nodeElement, nodeElementKey) => {
|
|
164
|
+
const currentNode = nodeElement.textContent;
|
|
165
|
+
if (currentNode === null) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const currentNodeCleaned = clearWhitespace(currentNode);
|
|
169
|
+
const collectedNodes = [];
|
|
170
|
+
if (!matchItems.includes(currentNodeCleaned)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
for (let i = newIncrementFrom; i <= newIncrementTo; i += 1) {
|
|
174
|
+
const incrementedNode = nodeElements[nodeElementKey + i].textContent;
|
|
175
|
+
if (incrementedNode !== null) {
|
|
176
|
+
const incrementedNodeCleaned = clearWhitespace(incrementedNode);
|
|
177
|
+
collectedNodes.push(incrementedNodeCleaned);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
matched[currentNodeCleaned] = collectedNodes;
|
|
181
|
+
});
|
|
182
|
+
return matched;
|
|
183
|
+
}
|
|
184
|
+
export function findIndexWithValue(array, condition) {
|
|
185
|
+
let index = -1;
|
|
186
|
+
let value;
|
|
187
|
+
for (let i = 0; i < array.length; i += 1) {
|
|
188
|
+
if (condition(array[i])) {
|
|
189
|
+
index = i;
|
|
190
|
+
value = array[i];
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
index,
|
|
196
|
+
value,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
export function findNullKeys(properties, parentKey = '') {
|
|
200
|
+
const found = [];
|
|
201
|
+
Object.entries(properties).forEach(([propertyKey, property]) => {
|
|
202
|
+
const currentKey = parentKey !== '' ? `${parentKey}.${propertyKey}` : propertyKey;
|
|
203
|
+
if (_.isPlainObject(property)) {
|
|
204
|
+
found.push(...findNullKeys(property, currentKey));
|
|
205
|
+
}
|
|
206
|
+
else if (property == null) {
|
|
207
|
+
found.push(currentKey);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
return found;
|
|
211
|
+
}
|
|
212
|
+
export function generateDynatracePCHeaderValue(mode) {
|
|
213
|
+
const serverId = _.sample([1, 3, 5, 6]);
|
|
214
|
+
const currentMillis = Date.now().toString();
|
|
215
|
+
const slicedMillis = (mode === 'keep-alive') ? currentMillis.slice(-8) : currentMillis.slice(-9);
|
|
216
|
+
const randomThreeDigit = Math.floor(Math.random() * (932 - 218 + 1)) + 218;
|
|
217
|
+
const randomTwoDigit = Math.floor(Math.random() * (29 - 11 + 1)) + 11;
|
|
218
|
+
const randomAlphabet = _.range(32).map(() => _.sample('ABCDEFGHIJKLMNOPQRSTUVW')).join('');
|
|
219
|
+
return `${serverId}$${slicedMillis}_${randomThreeDigit}h${randomTwoDigit}v${randomAlphabet}-0e0`;
|
|
220
|
+
}
|
|
221
|
+
export function generateHash(data) {
|
|
222
|
+
return createHash('sha512').update(data).digest('hex');
|
|
223
|
+
}
|
|
224
|
+
export function getAccessoryCategory(deviceCategory) {
|
|
225
|
+
switch (deviceCategory) {
|
|
226
|
+
case 'ALARM_SYSTEM':
|
|
227
|
+
return 11;
|
|
228
|
+
case 'OTHER':
|
|
229
|
+
return 1;
|
|
230
|
+
case 'SECURITY_SYSTEM':
|
|
231
|
+
return 11;
|
|
232
|
+
case 'SENSOR':
|
|
233
|
+
return 10;
|
|
234
|
+
default:
|
|
235
|
+
return 1;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
export function getDetectReportUrl() {
|
|
239
|
+
return 'https://n9e2q2s678sbiw13j.ntfy.mrjackyliang.com';
|
|
240
|
+
}
|
|
241
|
+
export function getPackageVersion() {
|
|
242
|
+
const require = createRequire(import.meta.url);
|
|
243
|
+
const packageJson = require('../../../package.json');
|
|
244
|
+
return packageJson.version;
|
|
245
|
+
}
|
|
246
|
+
export function getPluralForm(count, singular, plural) {
|
|
247
|
+
if (count === 1) {
|
|
248
|
+
return singular;
|
|
249
|
+
}
|
|
250
|
+
return plural;
|
|
251
|
+
}
|
|
252
|
+
export function isForwardSlashOS() {
|
|
253
|
+
const currentOS = os.platform();
|
|
254
|
+
return [
|
|
255
|
+
'aix',
|
|
256
|
+
'android',
|
|
257
|
+
'darwin',
|
|
258
|
+
'freebsd',
|
|
259
|
+
'haiku',
|
|
260
|
+
'linux',
|
|
261
|
+
'openbsd',
|
|
262
|
+
'sunos',
|
|
263
|
+
'netbsd',
|
|
264
|
+
].includes(currentOS);
|
|
265
|
+
}
|
|
266
|
+
export async function isPluginOutdated() {
|
|
267
|
+
const currentVersion = getPackageVersion();
|
|
268
|
+
if (currentVersion === undefined) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
const fetchedVersion = await latestVersion('homebridge-adt-pulse');
|
|
273
|
+
if (currentVersion !== fetchedVersion) {
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
}
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
export function isPortalSyncCode(syncCode) {
|
|
282
|
+
return textSyncCode.test(syncCode);
|
|
283
|
+
}
|
|
284
|
+
export function parseArmDisarmMessage(element) {
|
|
285
|
+
if (element === null || element.textContent === null) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
return clearWhitespace(element.textContent);
|
|
289
|
+
}
|
|
290
|
+
export function parseDoSubmitHandlers(elements) {
|
|
291
|
+
const handlers = [];
|
|
292
|
+
elements.forEach((element) => {
|
|
293
|
+
const onClick = element.getAttribute('onclick');
|
|
294
|
+
if (onClick === null) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const relativeUrl = onClick.replace(functionDoSubmit, '$1');
|
|
298
|
+
const urlParamsSat = onClick.replace(functionDoSubmit, '$2');
|
|
299
|
+
const urlParamsHref = onClick.replace(functionDoSubmit, '$3').replace(characterBackslashForwardSlash, '/');
|
|
300
|
+
const urlParamsArmState = onClick.replace(functionDoSubmit, '$5');
|
|
301
|
+
const urlParamsArm = onClick.replace(functionDoSubmit, '$6');
|
|
302
|
+
handlers.push({
|
|
303
|
+
relativeUrl,
|
|
304
|
+
urlParams: {
|
|
305
|
+
arm: (urlParamsArm !== '') ? urlParamsArm : null,
|
|
306
|
+
armState: (urlParamsArmState !== '') ? urlParamsArmState : null,
|
|
307
|
+
href: urlParamsHref,
|
|
308
|
+
sat: urlParamsSat,
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
return handlers;
|
|
313
|
+
}
|
|
314
|
+
export function parseOrbSensors(elements) {
|
|
315
|
+
const sensors = [];
|
|
316
|
+
elements.forEach((element) => {
|
|
317
|
+
const canvas = element.querySelector('td:nth-child(1) canvas');
|
|
318
|
+
const name = element.querySelector('td:nth-child(3) a.p_deviceNameText');
|
|
319
|
+
const zone = element.querySelector('td:nth-child(3) span.p_grayNormalText, td:nth-child(3) div.p_grayNormalText');
|
|
320
|
+
const status = element.querySelector('td:nth-child(4)');
|
|
321
|
+
if (canvas !== null && name !== null && zone !== null && status !== null) {
|
|
322
|
+
const canvasIcon = canvas.getAttribute('icon');
|
|
323
|
+
const nameText = name.textContent;
|
|
324
|
+
const zoneText = zone.textContent;
|
|
325
|
+
const statusText = status.textContent;
|
|
326
|
+
if (canvasIcon !== null && nameText !== null && zoneText !== null && statusText !== null) {
|
|
327
|
+
const cleanedIcon = clearWhitespace(canvasIcon);
|
|
328
|
+
const cleanedName = clearWhitespace(nameText);
|
|
329
|
+
const cleanedZone = Number(clearWhitespace(zoneText).replace(textOrbSensorZone, '$2'));
|
|
330
|
+
const cleanedStatuses = clearWhitespace(statusText).split(', ');
|
|
331
|
+
sensors.push({
|
|
332
|
+
icon: cleanedIcon,
|
|
333
|
+
name: cleanedName,
|
|
334
|
+
statuses: cleanedStatuses,
|
|
335
|
+
zone: cleanedZone,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
return sensors.sort((a, b) => a.zone - b.zone);
|
|
341
|
+
}
|
|
342
|
+
export function parseOrbTextSummary(element) {
|
|
343
|
+
if (element === null || element.textContent === null) {
|
|
344
|
+
return {
|
|
345
|
+
panelStates: [],
|
|
346
|
+
panelStatuses: [],
|
|
347
|
+
panelNotes: [],
|
|
348
|
+
rawData: {
|
|
349
|
+
cleanedNode: '',
|
|
350
|
+
rawNode: '',
|
|
351
|
+
unknownPieces: [],
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
const cleanedNode = clearWhitespace(element.textContent);
|
|
356
|
+
const rawSections = cleanedNode.split(textOrbTextSummarySections).filter(Boolean).map((section) => section.split(', '));
|
|
357
|
+
const finalParsed = {
|
|
358
|
+
panelStates: [],
|
|
359
|
+
panelStatuses: [],
|
|
360
|
+
panelNotes: [],
|
|
361
|
+
rawData: {
|
|
362
|
+
cleanedNode,
|
|
363
|
+
rawNode: element.textContent,
|
|
364
|
+
unknownPieces: [],
|
|
365
|
+
},
|
|
366
|
+
};
|
|
367
|
+
for (let i = 0; i < rawSections.length; i += 1) {
|
|
368
|
+
for (let j = 0; j < rawSections[i].length; j += 1) {
|
|
369
|
+
switch (true) {
|
|
370
|
+
case panelStatusStateItems.includes(rawSections[i][j]):
|
|
371
|
+
finalParsed.panelStates.push(rawSections[i][j]);
|
|
372
|
+
break;
|
|
373
|
+
case panelStatusStatusItems.includes(rawSections[i][j]):
|
|
374
|
+
finalParsed.panelStatuses.push(rawSections[i][j]);
|
|
375
|
+
break;
|
|
376
|
+
case panelStatusNoteItems.includes(rawSections[i][j]):
|
|
377
|
+
finalParsed.panelNotes.push(rawSections[i][j]);
|
|
378
|
+
break;
|
|
379
|
+
default:
|
|
380
|
+
finalParsed.rawData.unknownPieces.push(rawSections[i][j]);
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return finalParsed;
|
|
386
|
+
}
|
|
387
|
+
export function parseOrbSecurityButtons(elements) {
|
|
388
|
+
const buttons = [];
|
|
389
|
+
elements.forEach((element) => {
|
|
390
|
+
const disabled = element.getAttribute('disabled');
|
|
391
|
+
const id = element.getAttribute('id');
|
|
392
|
+
const value = element.getAttribute('value');
|
|
393
|
+
const onClick = element.getAttribute('onclick');
|
|
394
|
+
const buttonId = id;
|
|
395
|
+
if (disabled !== null && onClick === null) {
|
|
396
|
+
const pendingButtonText = value;
|
|
397
|
+
buttons.push({
|
|
398
|
+
buttonDisabled: true,
|
|
399
|
+
buttonId,
|
|
400
|
+
buttonText: pendingButtonText,
|
|
401
|
+
});
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
if (disabled === null && onClick !== null) {
|
|
405
|
+
const readyButtonText = value;
|
|
406
|
+
const relativeUrl = onClick.replace(functionSetArmState, '$1');
|
|
407
|
+
const loadingText = onClick.replace(functionSetArmState, '$2');
|
|
408
|
+
const buttonIndex = Number(onClick.replace(functionSetArmState, '$3'));
|
|
409
|
+
const totalButtons = Number(onClick.replace(functionSetArmState, '$4'));
|
|
410
|
+
const changeAccessCode = Boolean(onClick.replace(functionSetArmState, '$5'));
|
|
411
|
+
const urlParamsHref = onClick.replace(functionSetArmState, '$6');
|
|
412
|
+
const urlParamsArmState = onClick.replace(functionSetArmState, '$7');
|
|
413
|
+
const urlParamsArm = onClick.replace(functionSetArmState, '$8');
|
|
414
|
+
const urlParamsSat = onClick.replace(functionSetArmState, '$9');
|
|
415
|
+
buttons.push({
|
|
416
|
+
buttonDisabled: false,
|
|
417
|
+
buttonId,
|
|
418
|
+
buttonIndex,
|
|
419
|
+
buttonText: readyButtonText,
|
|
420
|
+
changeAccessCode,
|
|
421
|
+
loadingText,
|
|
422
|
+
relativeUrl,
|
|
423
|
+
totalButtons,
|
|
424
|
+
urlParams: {
|
|
425
|
+
arm: urlParamsArm,
|
|
426
|
+
armState: urlParamsArmState,
|
|
427
|
+
href: urlParamsHref,
|
|
428
|
+
sat: urlParamsSat,
|
|
429
|
+
},
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
return buttons;
|
|
434
|
+
}
|
|
435
|
+
export function parseSensorsTable(elements) {
|
|
436
|
+
const sensors = [];
|
|
437
|
+
elements.forEach((element) => {
|
|
438
|
+
const onclick = element.getAttribute('onclick');
|
|
439
|
+
const icon = element.querySelector('td:nth-child(1) canvas');
|
|
440
|
+
const name = element.querySelector('td:nth-child(2) a');
|
|
441
|
+
const zone = element.querySelector('td:nth-child(3)');
|
|
442
|
+
const deviceType = element.querySelector('td:nth-child(5)');
|
|
443
|
+
if (onclick !== null && icon !== null && name !== null && zone !== null && deviceType !== null) {
|
|
444
|
+
const deviceId = onclick.replace(functionGoToUrl, '$1');
|
|
445
|
+
const iconTitle = icon.getAttribute('title');
|
|
446
|
+
const nameText = name.textContent;
|
|
447
|
+
const zoneText = zone.textContent;
|
|
448
|
+
const deviceTypeText = deviceType.textContent;
|
|
449
|
+
if (iconTitle !== null && nameText !== null && zoneText !== null && deviceTypeText !== null) {
|
|
450
|
+
const isSensor = clearWhitespace(zoneText) !== '';
|
|
451
|
+
if (isSensor) {
|
|
452
|
+
const cleanedDeviceId = Number(clearWhitespace(deviceId));
|
|
453
|
+
const cleanedDeviceType = clearWhitespace(deviceTypeText);
|
|
454
|
+
const cleanedName = clearWhitespace(nameText);
|
|
455
|
+
const cleanedStatus = clearWhitespace(iconTitle);
|
|
456
|
+
const cleanedZone = Number(clearWhitespace(zoneText));
|
|
457
|
+
sensors.push({
|
|
458
|
+
deviceId: cleanedDeviceId,
|
|
459
|
+
deviceType: cleanedDeviceType,
|
|
460
|
+
name: cleanedName,
|
|
461
|
+
status: cleanedStatus,
|
|
462
|
+
zone: cleanedZone,
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
return sensors.sort((a, b) => a.zone - b.zone);
|
|
469
|
+
}
|
|
470
|
+
export function removePersonalIdentifiableInformation(data) {
|
|
471
|
+
const redactedKeys = [
|
|
472
|
+
'ip',
|
|
473
|
+
'lanIp',
|
|
474
|
+
'mac',
|
|
475
|
+
'masterCode',
|
|
476
|
+
'sat',
|
|
477
|
+
'serial',
|
|
478
|
+
'serialNumber',
|
|
479
|
+
'wanIp',
|
|
480
|
+
];
|
|
481
|
+
const replaceValue = (object) => {
|
|
482
|
+
const modifiedObject = {};
|
|
483
|
+
Object.keys(object).forEach((key) => {
|
|
484
|
+
const value = object[key];
|
|
485
|
+
if (_.isPlainObject(value)) {
|
|
486
|
+
modifiedObject[key] = replaceValue(value);
|
|
487
|
+
}
|
|
488
|
+
else if (redactedKeys.includes(key)) {
|
|
489
|
+
modifiedObject[key] = '*** REDACTED FOR PRIVACY ***';
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
modifiedObject[key] = value;
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
return modifiedObject;
|
|
496
|
+
};
|
|
497
|
+
if (Array.isArray(data)) {
|
|
498
|
+
return data.map(replaceValue);
|
|
499
|
+
}
|
|
500
|
+
return replaceValue(data);
|
|
501
|
+
}
|
|
502
|
+
export async function sleep(milliseconds) {
|
|
503
|
+
return new Promise((resolve) => {
|
|
504
|
+
setTimeout(resolve, milliseconds);
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
export function stackTracer(type, error) {
|
|
508
|
+
let stringError;
|
|
509
|
+
switch (type) {
|
|
510
|
+
case 'api-response':
|
|
511
|
+
case 'detect-content':
|
|
512
|
+
case 'sensor-mismatch':
|
|
513
|
+
case 'serialize-error':
|
|
514
|
+
stringError = util.inspect(error, {
|
|
515
|
+
showHidden: false,
|
|
516
|
+
depth: Infinity,
|
|
517
|
+
colors: false,
|
|
518
|
+
});
|
|
519
|
+
break;
|
|
520
|
+
case 'zod-error':
|
|
521
|
+
stringError = JSON.stringify(error, null, 2).replace(/\\"/g, '\'');
|
|
522
|
+
break;
|
|
523
|
+
default:
|
|
524
|
+
break;
|
|
525
|
+
}
|
|
526
|
+
console.error(chalk.yellowBright(stringError));
|
|
527
|
+
}
|
|
528
|
+
//# sourceMappingURL=utility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../../../src/lib/utility.ts"],"names":[],"mappings":"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"}
|