homebridge-adt-pulse 3.0.0-beta.4 → 3.0.0-beta.6

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.
@@ -0,0 +1,38 @@
1
+ import z from 'zod';
2
+ export const platformConfig = z.object({
3
+ platform: z.literal('ADTPulse'),
4
+ name: z.string().min(1).max(50),
5
+ subdomain: z.union([
6
+ z.literal('portal'),
7
+ z.literal('portal-ca'),
8
+ ]),
9
+ username: z.string().min(1).max(100),
10
+ password: z.string().min(1).max(300),
11
+ fingerprint: z.string().min(1).max(5120),
12
+ mode: z.union([
13
+ z.literal('normal'),
14
+ z.literal('paused'),
15
+ z.literal('reset'),
16
+ ]),
17
+ speed: z.union([
18
+ z.literal(1),
19
+ z.literal(0.75),
20
+ z.literal(0.5),
21
+ z.literal(0.25),
22
+ ]),
23
+ sensors: z.array(z.object({
24
+ name: z.string().min(1).max(50).optional(),
25
+ adtName: z.string().min(1).max(100),
26
+ adtType: z.union([
27
+ z.literal('co'),
28
+ z.literal('doorWindow'),
29
+ z.literal('fire'),
30
+ z.literal('flood'),
31
+ z.literal('glass'),
32
+ z.literal('motion'),
33
+ z.literal('temperature'),
34
+ ]),
35
+ adtZone: z.number().min(1).max(99),
36
+ })).min(1).max(148),
37
+ });
38
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/lib/schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAOpB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;KACnB,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;QACb,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QACd,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACnC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;YACf,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YACf,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;YACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACjB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YAClB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YAClB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;SACzB,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;KACnC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACpB,CAAC,CAAC"}
@@ -0,0 +1,434 @@
1
+ import chalk from 'chalk';
2
+ import { JSDOM } from 'jsdom';
3
+ import _ from 'lodash';
4
+ import { createHash } from 'node:crypto';
5
+ import os from 'node:os';
6
+ import util from 'node:util';
7
+ import { characterBackslashForwardSlash, characterHtmlLineBreak, characterWhitespace, functionDoSubmit, functionGoToUrl, functionSetArmState, paramSat, textOrbSensorZone, textOrbTextSummary, textSyncCode, } from './regex.js';
8
+ export function clearHtmlLineBreak(data) {
9
+ return data.replace(characterHtmlLineBreak, ' ').trim();
10
+ }
11
+ export function clearWhitespace(data) {
12
+ return data.replace(characterWhitespace, ' ').trim();
13
+ }
14
+ export function condenseSensorType(sensorType) {
15
+ let condensed;
16
+ switch (sensorType) {
17
+ case 'Door Sensor':
18
+ case 'Window Sensor':
19
+ case 'Door/Window Sensor':
20
+ condensed = 'doorWindow';
21
+ break;
22
+ case 'Motion Sensor':
23
+ case 'Motion Sensor (Notable Events Only)':
24
+ condensed = 'motion';
25
+ break;
26
+ case 'Glass Break Detector':
27
+ condensed = 'glass';
28
+ break;
29
+ case 'Fire (Smoke/Heat) Detector':
30
+ condensed = 'fire';
31
+ break;
32
+ case 'Carbon Monoxide Detector':
33
+ condensed = 'co';
34
+ break;
35
+ case 'Water/Flood Sensor':
36
+ condensed = 'flood';
37
+ break;
38
+ case 'Temperature Sensor':
39
+ condensed = 'temperature';
40
+ break;
41
+ default:
42
+ break;
43
+ }
44
+ return condensed;
45
+ }
46
+ export function debugLog(logger, caller, type, message) {
47
+ const logMessage = chalk.reset(chalk.underline(caller), '-', message, '...');
48
+ switch (type) {
49
+ case 'error':
50
+ if (logger !== null) {
51
+ logger.error(chalk.gray('DEBUG'), chalk.redBright('ERROR:'), logMessage);
52
+ }
53
+ else {
54
+ console.error('[ADT Pulse]', chalk.redBright('ERROR:'), logMessage);
55
+ }
56
+ break;
57
+ case 'warn':
58
+ if (logger !== null) {
59
+ logger.warn(chalk.gray('DEBUG'), chalk.yellowBright('WARNING:'), logMessage);
60
+ }
61
+ else {
62
+ console.warn('[ADT Pulse]', chalk.yellowBright('WARNING:'), logMessage);
63
+ }
64
+ break;
65
+ case 'success':
66
+ if (logger !== null) {
67
+ logger.info(chalk.gray('DEBUG'), chalk.greenBright('SUCCESS:'), logMessage);
68
+ }
69
+ else {
70
+ console.info('[ADT Pulse]', chalk.greenBright('SUCCESS:'), logMessage);
71
+ }
72
+ break;
73
+ case 'info':
74
+ if (logger !== null) {
75
+ logger.info(chalk.gray('DEBUG'), chalk.blueBright('INFO:'), logMessage);
76
+ }
77
+ else {
78
+ console.info('[ADT Pulse]', chalk.blueBright('INFO:'), logMessage);
79
+ }
80
+ break;
81
+ default:
82
+ break;
83
+ }
84
+ }
85
+ export function fetchErrorMessage(response) {
86
+ if (response === undefined || typeof response.data !== 'string') {
87
+ return null;
88
+ }
89
+ const jsdom = new JSDOM(response.data, {
90
+ url: response.config.url,
91
+ referrer: response.config.headers.Referer,
92
+ contentType: 'text/html',
93
+ pretendToBeVisual: true,
94
+ });
95
+ const warnMessage = jsdom.window.document.querySelector('#warnMsgContents');
96
+ if (warnMessage !== null) {
97
+ return clearWhitespace(clearHtmlLineBreak(warnMessage.innerHTML));
98
+ }
99
+ return null;
100
+ }
101
+ export function fetchMissingSatCode(response) {
102
+ if (typeof response.data !== 'string') {
103
+ return null;
104
+ }
105
+ const satCode = response.data.match(paramSat);
106
+ if (satCode !== null && satCode.length >= 2) {
107
+ return satCode[1];
108
+ }
109
+ return null;
110
+ }
111
+ export function fetchTableCells(nodeElements, matchList, incrementFrom, incrementTo) {
112
+ const matched = {};
113
+ let newIncrementFrom = incrementFrom;
114
+ let newIncrementTo = incrementTo;
115
+ if (incrementFrom < 0) {
116
+ newIncrementFrom = 0;
117
+ }
118
+ if (incrementTo < incrementFrom) {
119
+ newIncrementTo = incrementFrom;
120
+ }
121
+ nodeElements.forEach((nodeElement, nodeElementKey) => {
122
+ const currentNode = nodeElement.textContent;
123
+ if (currentNode === null) {
124
+ return;
125
+ }
126
+ const currentNodeCleaned = clearWhitespace(currentNode);
127
+ const collectedNodes = [];
128
+ if (!matchList.includes(currentNodeCleaned)) {
129
+ return;
130
+ }
131
+ for (let i = newIncrementFrom; i <= newIncrementTo; i += 1) {
132
+ const incrementedNode = nodeElements[nodeElementKey + i].textContent;
133
+ if (incrementedNode !== null) {
134
+ const incrementedNodeCleaned = clearWhitespace(incrementedNode);
135
+ collectedNodes.push(incrementedNodeCleaned);
136
+ }
137
+ }
138
+ matched[currentNodeCleaned] = collectedNodes;
139
+ });
140
+ return matched;
141
+ }
142
+ export function findIndexWithValue(array, condition) {
143
+ let index = -1;
144
+ let value;
145
+ for (let i = 0; i < array.length; i += 1) {
146
+ if (condition(array[i])) {
147
+ index = i;
148
+ value = array[i];
149
+ break;
150
+ }
151
+ }
152
+ return {
153
+ index,
154
+ value,
155
+ };
156
+ }
157
+ export function findNullKeys(properties, parentKey = '') {
158
+ const found = [];
159
+ Object.entries(properties).forEach(([propertyKey, property]) => {
160
+ const currentKey = parentKey !== '' ? `${parentKey}.${propertyKey}` : propertyKey;
161
+ if (_.isPlainObject(property)) {
162
+ found.push(...findNullKeys(property, currentKey));
163
+ }
164
+ else if (property == null) {
165
+ found.push(currentKey);
166
+ }
167
+ });
168
+ return found;
169
+ }
170
+ export function generateDeviceId(id) {
171
+ return `adt-device-${id}`;
172
+ }
173
+ export function generateDynatracePCHeaderValue(mode) {
174
+ const serverId = _.sample([1, 3, 5, 6]);
175
+ const currentMillis = Date.now().toString();
176
+ const slicedMillis = (mode === 'keep-alive') ? currentMillis.slice(-8) : currentMillis.slice(-9);
177
+ const randomThreeDigit = Math.floor(Math.random() * (932 - 218 + 1)) + 218;
178
+ const randomTwoDigit = Math.floor(Math.random() * (29 - 11 + 1)) + 11;
179
+ const randomAlphabet = _.range(32).map(() => _.sample('ABCDEFGHIJKLMNOPQRSTUVW')).join('');
180
+ return `${serverId}$${slicedMillis}_${randomThreeDigit}h${randomTwoDigit}v${randomAlphabet}-0e0`;
181
+ }
182
+ export function generateHash(data) {
183
+ return createHash('sha512').update(data).digest('hex');
184
+ }
185
+ export function getAccessoryCategory(deviceCategory) {
186
+ switch (deviceCategory) {
187
+ case 'ALARM_SYSTEM':
188
+ return 11;
189
+ case 'OTHER':
190
+ return 1;
191
+ case 'SECURITY_SYSTEM':
192
+ return 11;
193
+ case 'SENSOR':
194
+ return 10;
195
+ default:
196
+ return 1;
197
+ }
198
+ }
199
+ export function getPluralForm(count, singular, plural) {
200
+ if (count === 1) {
201
+ return singular;
202
+ }
203
+ return plural;
204
+ }
205
+ export function isForwardSlashOS() {
206
+ const currentOS = os.platform();
207
+ return [
208
+ 'aix',
209
+ 'android',
210
+ 'darwin',
211
+ 'freebsd',
212
+ 'haiku',
213
+ 'linux',
214
+ 'openbsd',
215
+ 'sunos',
216
+ 'netbsd',
217
+ ].includes(currentOS);
218
+ }
219
+ export function isPortalSyncCode(syncCode) {
220
+ return textSyncCode.test(syncCode);
221
+ }
222
+ export function parseArmDisarmMessage(element) {
223
+ if (element === null || element.textContent === null) {
224
+ return null;
225
+ }
226
+ return clearWhitespace(element.textContent);
227
+ }
228
+ export function parseDoSubmitHandlers(elements) {
229
+ const handlers = [];
230
+ elements.forEach((element) => {
231
+ const onClick = element.getAttribute('onclick');
232
+ if (onClick === null) {
233
+ return;
234
+ }
235
+ const relativeUrl = onClick.replace(functionDoSubmit, '$1');
236
+ const urlParamsSat = onClick.replace(functionDoSubmit, '$2');
237
+ const urlParamsHref = onClick.replace(functionDoSubmit, '$3').replace(characterBackslashForwardSlash, '/');
238
+ const urlParamsArmState = onClick.replace(functionDoSubmit, '$5');
239
+ const urlParamsArm = onClick.replace(functionDoSubmit, '$6');
240
+ handlers.push({
241
+ relativeUrl,
242
+ urlParams: {
243
+ arm: (urlParamsArm !== '') ? urlParamsArm : null,
244
+ armState: (urlParamsArmState !== '') ? urlParamsArmState : null,
245
+ href: urlParamsHref,
246
+ sat: urlParamsSat,
247
+ },
248
+ });
249
+ });
250
+ return handlers;
251
+ }
252
+ export function parseOrbSensors(elements) {
253
+ const sensors = [];
254
+ elements.forEach((element) => {
255
+ const canvas = element.querySelector('td:nth-child(1) canvas');
256
+ const name = element.querySelector('td:nth-child(3) a.p_deviceNameText');
257
+ const zone = element.querySelector('td:nth-child(3) span.p_grayNormalText, td:nth-child(3) div.p_grayNormalText');
258
+ const status = element.querySelector('td:nth-child(4)');
259
+ if (canvas !== null && name !== null && zone !== null && status !== null) {
260
+ const canvasIcon = canvas.getAttribute('icon');
261
+ const nameText = name.textContent;
262
+ const zoneText = zone.textContent;
263
+ const statusText = status.textContent;
264
+ if (canvasIcon !== null && nameText !== null && zoneText !== null && statusText !== null) {
265
+ const cleanedIcon = clearWhitespace(canvasIcon);
266
+ const cleanedName = clearWhitespace(nameText);
267
+ const cleanedZone = Number(clearWhitespace(zoneText).replace(textOrbSensorZone, '$2'));
268
+ const cleanedStatus = clearWhitespace(statusText);
269
+ sensors.push({
270
+ icon: cleanedIcon,
271
+ name: cleanedName,
272
+ status: cleanedStatus,
273
+ zone: cleanedZone,
274
+ });
275
+ }
276
+ }
277
+ });
278
+ return sensors.sort((a, b) => a.zone - b.zone);
279
+ }
280
+ export function parseOrbTextSummary(element) {
281
+ if (element === null || element.textContent === null) {
282
+ return {
283
+ state: null,
284
+ status: null,
285
+ };
286
+ }
287
+ const cleanedNode = clearWhitespace(element.textContent);
288
+ const currentState = cleanedNode.replace(textOrbTextSummary, '$1');
289
+ const currentStatus = cleanedNode.replace(textOrbTextSummary, '$2');
290
+ return {
291
+ state: currentState,
292
+ status: (currentStatus !== '') ? currentStatus : null,
293
+ };
294
+ }
295
+ export function parseOrbSecurityButtons(elements) {
296
+ const buttons = [];
297
+ elements.forEach((element) => {
298
+ const disabled = element.getAttribute('disabled');
299
+ const id = element.getAttribute('id');
300
+ const value = element.getAttribute('value');
301
+ const onClick = element.getAttribute('onclick');
302
+ const buttonId = id;
303
+ if (disabled !== null && onClick === null) {
304
+ const pendingButtonText = value;
305
+ buttons.push({
306
+ buttonDisabled: true,
307
+ buttonId,
308
+ buttonText: pendingButtonText,
309
+ });
310
+ return;
311
+ }
312
+ if (disabled === null && onClick !== null) {
313
+ const readyButtonText = value;
314
+ const relativeUrl = onClick.replace(functionSetArmState, '$1');
315
+ const loadingText = onClick.replace(functionSetArmState, '$2');
316
+ const buttonIndex = Number(onClick.replace(functionSetArmState, '$3'));
317
+ const totalButtons = Number(onClick.replace(functionSetArmState, '$4'));
318
+ const changeAccessCode = Boolean(onClick.replace(functionSetArmState, '$5'));
319
+ const urlParamsHref = onClick.replace(functionSetArmState, '$6');
320
+ const urlParamsArmState = onClick.replace(functionSetArmState, '$7');
321
+ const urlParamsArm = onClick.replace(functionSetArmState, '$8');
322
+ const urlParamsSat = onClick.replace(functionSetArmState, '$9');
323
+ buttons.push({
324
+ buttonDisabled: false,
325
+ buttonId,
326
+ buttonIndex,
327
+ buttonText: readyButtonText,
328
+ changeAccessCode,
329
+ loadingText,
330
+ relativeUrl,
331
+ totalButtons,
332
+ urlParams: {
333
+ arm: urlParamsArm,
334
+ armState: urlParamsArmState,
335
+ href: urlParamsHref,
336
+ sat: urlParamsSat,
337
+ },
338
+ });
339
+ }
340
+ });
341
+ return buttons;
342
+ }
343
+ export function parseSensorsTable(elements) {
344
+ const sensors = [];
345
+ elements.forEach((element) => {
346
+ const onclick = element.getAttribute('onclick');
347
+ const icon = element.querySelector('td:nth-child(1) canvas');
348
+ const name = element.querySelector('td:nth-child(2) a');
349
+ const zone = element.querySelector('td:nth-child(3)');
350
+ const deviceType = element.querySelector('td:nth-child(5)');
351
+ if (onclick !== null && icon !== null && name !== null && zone !== null && deviceType !== null) {
352
+ const deviceId = onclick.replace(functionGoToUrl, '$1');
353
+ const iconTitle = icon.getAttribute('title');
354
+ const nameText = name.textContent;
355
+ const zoneText = zone.textContent;
356
+ const deviceTypeText = deviceType.textContent;
357
+ if (iconTitle !== null && nameText !== null && zoneText !== null && deviceTypeText !== null) {
358
+ const isSensor = clearWhitespace(zoneText) !== '';
359
+ if (isSensor) {
360
+ const cleanedDeviceId = Number(clearWhitespace(deviceId));
361
+ const cleanedDeviceType = clearWhitespace(deviceTypeText);
362
+ const cleanedName = clearWhitespace(nameText);
363
+ const cleanedStatus = clearWhitespace(iconTitle);
364
+ const cleanedZone = Number(clearWhitespace(zoneText));
365
+ sensors.push({
366
+ deviceId: cleanedDeviceId,
367
+ deviceType: cleanedDeviceType,
368
+ name: cleanedName,
369
+ status: cleanedStatus,
370
+ zone: cleanedZone,
371
+ });
372
+ }
373
+ }
374
+ }
375
+ });
376
+ return sensors.sort((a, b) => a.zone - b.zone);
377
+ }
378
+ export function removePersonalIdentifiableInformation(data) {
379
+ const redactedKeys = [
380
+ 'ip',
381
+ 'lanIp',
382
+ 'mac',
383
+ 'masterCode',
384
+ 'sat',
385
+ 'serialNumber',
386
+ 'wanIp',
387
+ ];
388
+ const replaceValue = (object) => {
389
+ const modifiedObject = {};
390
+ Object.keys(object).forEach((key) => {
391
+ const value = object[key];
392
+ if (_.isPlainObject(value)) {
393
+ modifiedObject[key] = replaceValue(value);
394
+ }
395
+ else if (redactedKeys.includes(key)) {
396
+ modifiedObject[key] = '*** REDACTED FOR PRIVACY ***';
397
+ }
398
+ else {
399
+ modifiedObject[key] = value;
400
+ }
401
+ });
402
+ return modifiedObject;
403
+ };
404
+ if (Array.isArray(data)) {
405
+ return data.map(replaceValue);
406
+ }
407
+ return replaceValue(data);
408
+ }
409
+ export async function sleep(milliseconds) {
410
+ return new Promise((resolve) => {
411
+ setTimeout(resolve, milliseconds);
412
+ });
413
+ }
414
+ export function stackTracer(type, error) {
415
+ let stringError;
416
+ switch (type) {
417
+ case 'api-response':
418
+ case 'detect-content':
419
+ case 'serialize-error':
420
+ stringError = util.inspect(error, {
421
+ showHidden: false,
422
+ depth: Infinity,
423
+ colors: false,
424
+ });
425
+ break;
426
+ case 'zod-error':
427
+ stringError = JSON.stringify(error, null, 2).replace(/\\"/g, '\'');
428
+ break;
429
+ default:
430
+ break;
431
+ }
432
+ console.error(chalk.yellowBright(stringError));
433
+ }
434
+ //# 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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"}