node-alarm-dot-com 2.2.0 → 2.3.0-beta.1

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 (43) hide show
  1. package/dist/_models/AuthOpts.js +1 -0
  2. package/dist/_models/AuthOpts.js.map +1 -0
  3. package/dist/_models/DeviceStates.d.ts +1 -1
  4. package/dist/_models/DeviceStates.js +1 -0
  5. package/dist/_models/DeviceStates.js.map +1 -0
  6. package/dist/_models/IdentityResponse.js +1 -0
  7. package/dist/_models/IdentityResponse.js.map +1 -0
  8. package/dist/_models/PartitionActionOptions.js +1 -0
  9. package/dist/_models/PartitionActionOptions.js.map +1 -0
  10. package/dist/_models/RequestOptions.d.ts +2 -3
  11. package/dist/_models/RequestOptions.js +1 -0
  12. package/dist/_models/RequestOptions.js.map +1 -0
  13. package/dist/_models/SensorType.js +1 -1
  14. package/dist/_models/SensorType.js.map +1 -0
  15. package/dist/_models/States.js +1 -1
  16. package/dist/_models/States.js.map +1 -0
  17. package/dist/_models/SystemState.js +1 -0
  18. package/dist/_models/SystemState.js.map +1 -0
  19. package/dist/_utils.d.ts +35 -0
  20. package/dist/_utils.js +158 -0
  21. package/dist/_utils.js.map +1 -0
  22. package/dist/core.d.ts +29 -0
  23. package/dist/core.js +163 -0
  24. package/dist/core.js.map +1 -0
  25. package/dist/garages.d.ts +17 -0
  26. package/dist/garages.js +38 -0
  27. package/dist/garages.js.map +1 -0
  28. package/dist/index.d.ts +8 -171
  29. package/dist/index.js +13 -629
  30. package/dist/index.js.map +1 -0
  31. package/dist/lights.d.ts +23 -0
  32. package/dist/lights.js +76 -0
  33. package/dist/lights.js.map +1 -0
  34. package/dist/locks.d.ts +19 -0
  35. package/dist/locks.js +44 -0
  36. package/dist/locks.js.map +1 -0
  37. package/dist/partitions.d.ts +40 -0
  38. package/dist/partitions.js +83 -0
  39. package/dist/partitions.js.map +1 -0
  40. package/dist/thermostats.d.ts +29 -0
  41. package/dist/thermostats.js +61 -0
  42. package/dist/thermostats.js.map +1 -0
  43. package/package.json +11 -6
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=AuthOpts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthOpts.js","sourceRoot":"","sources":["../../src/_models/AuthOpts.ts"],"names":[],"mappings":""}
@@ -1097,7 +1097,7 @@ export interface ApiAccessControlState extends ApiDeviceState {
1097
1097
  remoteCommandsEnabled: boolean;
1098
1098
  hasPermissionToChangeState: boolean;
1099
1099
  deviceIcon: {
1100
- "icon": number;
1100
+ icon: number;
1101
1101
  };
1102
1102
  batteryLevelNull: null;
1103
1103
  batteryLevelClassification: null;
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=DeviceStates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeviceStates.js","sourceRoot":"","sources":["../../src/_models/DeviceStates.ts"],"names":[],"mappings":""}
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IdentityResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentityResponse.js","sourceRoot":"","sources":["../../src/_models/IdentityResponse.ts"],"names":[],"mappings":""}
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=PartitionActionOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PartitionActionOptions.js","sourceRoot":"","sources":["../../src/_models/PartitionActionOptions.ts"],"names":[],"mappings":""}
@@ -1,5 +1,4 @@
1
- import { Body, Headers } from 'node-fetch';
2
1
  export interface RequestOptions {
3
- body: Body;
4
- headers?: Headers;
2
+ body?: Record<string, unknown>;
3
+ headers?: Record<string, string>;
5
4
  }
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=RequestOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestOptions.js","sourceRoot":"","sources":["../../src/_models/RequestOptions.ts"],"names":[],"mappings":""}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SensorType = void 0;
4
- /* eslint-disable @typescript-eslint/naming-convention */
5
4
  /**
6
5
  * Number indicating the type of sensor according to the Alarm.com API
7
6
  */
@@ -19,3 +18,4 @@ var SensorType;
19
18
  SensorType[SensorType["Panel_Camera"] = 68] = "Panel_Camera";
20
19
  SensorType[SensorType["Panel_Glass_Break"] = 83] = "Panel_Glass_Break";
21
20
  })(SensorType || (exports.SensorType = SensorType = {}));
21
+ //# sourceMappingURL=SensorType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SensorType.js","sourceRoot":"","sources":["../../src/_models/SensorType.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,UAYX;AAZD,WAAY,UAAU;IACpB,+DAAkB,CAAA;IAClB,6DAAiB,CAAA;IACjB,+DAAkB,CAAA;IAClB,yDAAe,CAAA;IACf,6DAAiB,CAAA;IACjB,yCAAO,CAAA;IACP,gDAAW,CAAA;IACX,4DAAiB,CAAA;IACjB,0DAAgB,CAAA;IAChB,4DAAiB,CAAA;IACjB,sEAAsB,CAAA;AACxB,CAAC,EAZW,UAAU,0BAAV,UAAU,QAYrB"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.REL_TYPES = exports.THERMOSTAT_STATES = exports.GARAGE_STATES = exports.LOCK_STATES = exports.LIGHT_STATES = exports.SENSOR_STATES = exports.SYSTEM_STATES = void 0;
4
- /* eslint-disable @typescript-eslint/naming-convention */
5
4
  /***
6
5
  * State of the partition as defined by Alarm.com
7
6
  * @readonly
@@ -93,3 +92,4 @@ var REL_TYPES;
93
92
  REL_TYPES["SCENE"] = "automation/scene";
94
93
  REL_TYPES["ACCESS_CONTROL"] = "devices/access-control-access-point-device";
95
94
  })(REL_TYPES || (exports.REL_TYPES = REL_TYPES = {}));
95
+ //# sourceMappingURL=States.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"States.js","sourceRoot":"","sources":["../../src/_models/States.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,yDAAY,CAAA;IACZ,6DAAc,CAAA;IACd,6DAAc,CAAA;IACd,+DAAe,CAAA;AACjB,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB;AAED;;;;GAIG;AACH,IAAY,aAQX;AARD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,qDAAU,CAAA;IACV,iDAAQ,CAAA;IACR,iDAAQ,CAAA;IACR,qDAAU,CAAA;IACV,+CAAO,CAAA;IACP,+CAAO,CAAA;AACT,CAAC,EARW,aAAa,6BAAb,aAAa,QAQxB;AAED;;;;GAIG;AACH,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,2CAAM,CAAA;IACN,6CAAO,CAAA;AACT,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AAED;;;;GAIG;AACH,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,mDAAW,CAAA;IACX,uDAAa,CAAA;AACf,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAED;;;;GAIG;AACH,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,2EAA2E;IAC3E,iDAAQ,CAAA;IACR,qDAAU,CAAA,CAAC,cAAc;AAC3B,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED;;;;GAIG;AACH,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,uDAAO,CAAA;IACP,+DAAW,CAAA;IACX,+DAAW,CAAA;IACX,yDAAI,CAAA;AACN,CAAC,EALW,iBAAiB,iCAAjB,iBAAiB,QAK5B;AAED;;;;GAIG;AACH,IAAY,SAaX;AAbD,WAAY,SAAS;IACnB,oDAAuC,CAAA;IACvC,4CAA+B,CAAA;IAC/B,sCAAyB,CAAA;IACzB,oCAAuB,CAAA;IACvB,kCAAqB,CAAA;IACrB,gDAAmC,CAAA;IACnC,oCAAuB,CAAA;IACvB,8CAAiC,CAAA;IACjC,kDAAqC,CAAA;IACrC,4CAA+B,CAAA;IAC/B,uCAA0B,CAAA;IAC1B,0EAA6D,CAAA;AAC/D,CAAC,EAbW,SAAS,yBAAT,SAAS,QAapB"}
@@ -23,3 +23,4 @@ var AutomationType;
23
23
  AutomationType["PeakProtect"] = "automation/peak-protect";
24
24
  AutomationType["RuleSuggestion"] = "automation/rules/ruleSuggestion";
25
25
  })(AutomationType || (exports.AutomationType = AutomationType = {}));
26
+ //# sourceMappingURL=SystemState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemState.js","sourceRoot":"","sources":["../../src/_models/SystemState.ts"],"names":[],"mappings":";;;AAuMA,IAAY,gBAeX;AAfD,WAAY,gBAAgB;IAC1B,mDAA+B,CAAA;IAC/B,yCAAqB,CAAA;IACrB,2CAAuB,CAAA;IACvB,sDAAkC,CAAA;IAClC,8CAA0B,CAAA;IAC1B,6CAAyB,CAAA;IACzB,2CAAuB,CAAA;IACvB,qDAAiC,CAAA;IACjC,wDAAoC,CAAA;IACpC,kDAA8B,CAAA;IAC9B,0DAAsC,CAAA;IACtC,6CAAyB,CAAA;IACzB,gDAA4B,CAAA;IAC5B,gFAA4D,CAAA;AAC9D,CAAC,EAfW,gBAAgB,gCAAhB,gBAAgB,QAe3B;AAED,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yDAAuC,CAAA;IACvC,oEAAkD,CAAA;AACpD,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB"}
@@ -0,0 +1,35 @@
1
+ import fetch from 'node-fetch';
2
+ import { AuthOpts } from './_models/AuthOpts';
3
+ import { ApiDeviceState } from './_models/DeviceStates';
4
+ export declare const ADCLOGIN_URL = "https://www.alarm.com/login";
5
+ export declare const ADCFORMLOGIN_URL = "https://www.alarm.com/web/Default.aspx";
6
+ export declare const IDENTITIES_URL = "https://www.alarm.com/web/api/identities";
7
+ export declare const HOME_URL = "https://www.alarm.com/web/system/home";
8
+ export declare const SYSTEM_URL = "https://www.alarm.com/web/api/systems/systems/";
9
+ export declare const PARTITIONS_URL = "https://www.alarm.com/web/api/devices/partitions/";
10
+ export declare const SENSORS_URL = "https://www.alarm.com/web/api/devices/sensors";
11
+ export declare const LIGHTS_URL = "https://www.alarm.com/web/api/devices/lights/";
12
+ export declare const GARAGE_URL = "https://www.alarm.com/web/api/devices/garageDoors/";
13
+ export declare const THERMOSTAT_URL = "https://www.alarm.com/web/api/devices/thermostats/";
14
+ export declare const LOCKS_URL = "https://www.alarm.com/web/api/devices/locks/";
15
+ export declare const UA: string;
16
+ export declare function authenticatedGet(url: string, opts: AuthOpts): Promise<any>;
17
+ export declare function authenticatedPost(url: string, opts: AuthOpts & {
18
+ body?: Record<string, unknown>;
19
+ }): Promise<any>;
20
+ /**
21
+ * Get information about groups of components e.g., sensors, lights, locks, garages, etc.
22
+ *
23
+ * @param {string} url Base request url.
24
+ * @param {string} componentIDs Array of ID to retrieve.
25
+ * @param {Object} authOpts Authentication object returned from the login.
26
+ * @returns {Promise}
27
+ */
28
+ export declare function getComponents(url: string, componentIDs: string[], authOpts: AuthOpts): Promise<ApiDeviceState>;
29
+ export declare function get(url: string, opts?: {
30
+ headers?: Record<string, string>;
31
+ }): Promise<{
32
+ headers: fetch.Headers;
33
+ body: any;
34
+ }>;
35
+ export declare function describeError(err: unknown): string;
package/dist/_utils.js ADDED
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UA = exports.LOCKS_URL = exports.THERMOSTAT_URL = exports.GARAGE_URL = exports.LIGHTS_URL = exports.SENSORS_URL = exports.PARTITIONS_URL = exports.SYSTEM_URL = exports.HOME_URL = exports.IDENTITIES_URL = exports.ADCFORMLOGIN_URL = exports.ADCLOGIN_URL = void 0;
7
+ exports.authenticatedGet = authenticatedGet;
8
+ exports.authenticatedPost = authenticatedPost;
9
+ exports.getComponents = getComponents;
10
+ exports.get = get;
11
+ exports.describeError = describeError;
12
+ const node_fetch_1 = __importDefault(require("node-fetch"));
13
+ const package_json_1 = __importDefault(require("../package.json"));
14
+ const util_1 = require("util");
15
+ exports.ADCLOGIN_URL = 'https://www.alarm.com/login';
16
+ exports.ADCFORMLOGIN_URL = 'https://www.alarm.com/web/Default.aspx';
17
+ exports.IDENTITIES_URL = 'https://www.alarm.com/web/api/identities';
18
+ exports.HOME_URL = 'https://www.alarm.com/web/system/home';
19
+ exports.SYSTEM_URL = 'https://www.alarm.com/web/api/systems/systems/';
20
+ exports.PARTITIONS_URL = 'https://www.alarm.com/web/api/devices/partitions/';
21
+ exports.SENSORS_URL = 'https://www.alarm.com/web/api/devices/sensors';
22
+ exports.LIGHTS_URL = 'https://www.alarm.com/web/api/devices/lights/';
23
+ exports.GARAGE_URL = 'https://www.alarm.com/web/api/devices/garageDoors/';
24
+ exports.THERMOSTAT_URL = 'https://www.alarm.com/web/api/devices/thermostats/';
25
+ exports.LOCKS_URL = 'https://www.alarm.com/web/api/devices/locks/';
26
+ exports.UA = `node-alarm-dot-com/${package_json_1.default.version}`;
27
+ async function authenticatedGet(url, opts) {
28
+ const headers = {
29
+ Accept: 'application/vnd.api+json',
30
+ ajaxrequestuniquekey: opts.ajaxKey,
31
+ Cookie: opts.cookie,
32
+ Referer: exports.HOME_URL,
33
+ 'User-Agent': exports.UA
34
+ };
35
+ const res = await get(url, { headers });
36
+ return res.body;
37
+ }
38
+ async function authenticatedPost(url, opts) {
39
+ const headers = {
40
+ Accept: 'application/vnd.api+json',
41
+ ajaxrequestuniquekey: opts.ajaxKey,
42
+ Cookie: opts.cookie,
43
+ Referer: exports.HOME_URL,
44
+ 'User-Agent': exports.UA,
45
+ 'Content-Type': 'application/json; charset=UTF-8'
46
+ };
47
+ const res = await post(url, { headers, body: opts.body });
48
+ return res.body;
49
+ }
50
+ /**
51
+ * Get information about groups of components e.g., sensors, lights, locks, garages, etc.
52
+ *
53
+ * @param {string} url Base request url.
54
+ * @param {string} componentIDs Array of ID to retrieve.
55
+ * @param {Object} authOpts Authentication object returned from the login.
56
+ * @returns {Promise}
57
+ */
58
+ async function getComponents(url, componentIDs, authOpts) {
59
+ const IDs = Array.isArray(componentIDs) ? componentIDs : [componentIDs];
60
+ let requests = [];
61
+ if (IDs.length <= 50) {
62
+ const getUrl = `${url}?${IDs.map((id) => `ids%5B%5D=${id}`).join('&')}`;
63
+ requests.push(authenticatedGet(getUrl, authOpts));
64
+ }
65
+ else {
66
+ // We have found that the Alarm.com API will return a 404 error when there is an excessive number of query parameters.
67
+ // We get around this by breaking up our GET calls into shorter URIs.
68
+ const shortenedUrls = [];
69
+ while (IDs.length > 50) {
70
+ const currentArray = IDs.splice(0, 50);
71
+ shortenedUrls.push(`${url}?${currentArray.map((id) => `ids%5B%5D=${id}`).join('&')}`);
72
+ }
73
+ shortenedUrls.push(`${url}?${IDs.map((id) => `ids%5B%5D=${id}`).join('&')}`);
74
+ requests = shortenedUrls.map((u) => authenticatedGet(u, authOpts));
75
+ }
76
+ return await combineAPIDeviceAPICalls(requests);
77
+ }
78
+ async function combineAPIDeviceAPICalls(apiCalls) {
79
+ const apiStateCalls = await Promise.all(apiCalls);
80
+ const stateToReturn = {
81
+ data: [],
82
+ included: []
83
+ };
84
+ for (const apiCall of apiStateCalls) {
85
+ for (const apiData of apiCall.data) {
86
+ stateToReturn.data.push(apiData);
87
+ }
88
+ for (const apiInclude of apiCall.included) {
89
+ stateToReturn.included.push(apiInclude);
90
+ }
91
+ }
92
+ stateToReturn.meta = apiStateCalls[0].meta;
93
+ return stateToReturn;
94
+ }
95
+ async function get(url, opts) {
96
+ let status;
97
+ let resHeaders;
98
+ try {
99
+ const res = await (0, node_fetch_1.default)(url, {
100
+ method: 'GET',
101
+ redirect: 'manual',
102
+ headers: opts?.headers
103
+ });
104
+ status = res.status;
105
+ resHeaders = res.headers;
106
+ const type = res.headers.get('content-type') || '';
107
+ const body = await (type.indexOf('json') !== -1 ? (res.status === 204 ? {} : res.json()) : res.text());
108
+ if (status === 409) {
109
+ throw new Error('Two factor is enabled on this account but not setup in the plugin.' + ' See the wiki for details');
110
+ }
111
+ if (status >= 400) {
112
+ throw new Error(`status=${status}; body=${describeError(body)}`);
113
+ }
114
+ return {
115
+ headers: resHeaders,
116
+ body: body
117
+ };
118
+ }
119
+ catch (err) {
120
+ throw new Error(`GET ${url} failed: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
121
+ }
122
+ }
123
+ async function post(url, opts) {
124
+ opts = opts || {};
125
+ let status;
126
+ let resHeaders;
127
+ try {
128
+ const res = await (0, node_fetch_1.default)(url, {
129
+ method: 'POST',
130
+ redirect: 'manual',
131
+ body: opts.body ? JSON.stringify(opts.body) : undefined,
132
+ headers: opts.headers
133
+ });
134
+ status = res.status;
135
+ resHeaders = res.headers;
136
+ const json = await (res.status === 204 ? {} : res.json());
137
+ if (status !== 200) {
138
+ throw new Error(`status=${status}; body=${describeError(json)}`);
139
+ }
140
+ return {
141
+ headers: resHeaders,
142
+ body: json
143
+ };
144
+ }
145
+ catch (err) {
146
+ throw new Error(`POST ${url} failed: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
147
+ }
148
+ }
149
+ function describeError(err) {
150
+ if (err instanceof Error) {
151
+ return err.stack || err.message;
152
+ }
153
+ return (0, util_1.inspect)(err, {
154
+ depth: 8,
155
+ breakLength: 120
156
+ });
157
+ }
158
+ //# sourceMappingURL=_utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils.js","sourceRoot":"","sources":["../src/_utils.ts"],"names":[],"mappings":"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"}
package/dist/core.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ import { AuthOpts } from './_models/AuthOpts';
2
+ import { IdentityResponse } from './_models/IdentityResponse';
3
+ import { FlattenedSystemState } from './_models/SystemState';
4
+ /**
5
+ * Authenticate with alarm.com.
6
+ * Returns an authentication object that can be passed to other methods.
7
+ *
8
+ * @param {string} username Alarm.com username.
9
+ * @param {string} password Alarm.com password.
10
+ * @param {string} existingMfaToken MFA token from browser used to bypass MFA.
11
+ * @returns {Promise}
12
+ */
13
+ export declare function login(username: string, password: string, existingMfaToken?: string): Promise<AuthOpts>;
14
+ /**
15
+ * This function returns the alarm.com system identity for the currently logged in system.
16
+ * The information returned is useful for finding current systems and global config.
17
+ */
18
+ export declare function getIdentitiesState(loginCookies: string, ajaxKey: string): Promise<IdentityResponse>;
19
+ /**
20
+ * Retrieve information about the current state of a security system including
21
+ * attributes, partitions, accessory components and relationships.
22
+ *
23
+ * @param {string} systemID ID of the system to query. The Authentication
24
+ * object returned from the `login` method contains a `systems` property which
25
+ * is an array of system IDs.
26
+ * @param {Object} authOpts Authentication object returned from the login.
27
+ * @returns {Promise}
28
+ */
29
+ export declare function getCurrentState(systemID: string, authOpts: AuthOpts): Promise<FlattenedSystemState>;
package/dist/core.js ADDED
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.login = login;
7
+ exports.getIdentitiesState = getIdentitiesState;
8
+ exports.getCurrentState = getCurrentState;
9
+ const node_fetch_1 = __importDefault(require("node-fetch"));
10
+ const _utils_1 = require("./_utils");
11
+ /**
12
+ * Authenticate with alarm.com.
13
+ * Returns an authentication object that can be passed to other methods.
14
+ *
15
+ * @param {string} username Alarm.com username.
16
+ * @param {string} password Alarm.com password.
17
+ * @param {string} existingMfaToken MFA token from browser used to bypass MFA.
18
+ * @returns {Promise}
19
+ */
20
+ async function login(username, password, existingMfaToken) {
21
+ let loginCookies = '';
22
+ let ajaxKey = '';
23
+ let loginFormBody = '';
24
+ let identities = {};
25
+ let systems = [];
26
+ // load initial alarm.com page to gather required hidden form fields
27
+ await (0, _utils_1.get)(_utils_1.ADCLOGIN_URL)
28
+ .then((res) => {
29
+ const loginObj = {
30
+ __EVENTTARGET: null,
31
+ __EVENTARGUMENT: null,
32
+ __VIEWSTATEENCRYPTED: null,
33
+ __EVENTVALIDATION: res.body.match(/name="__EVENTVALIDATION".*?value="([^"]*)"/)[1],
34
+ __VIEWSTATE: res.body.match(/name="__VIEWSTATE".*?value="([^"]*)"/)[1],
35
+ __VIEWSTATEGENERATOR: res.body.match(/name="__VIEWSTATEGENERATOR".*?value="([^"]*)"/)[1],
36
+ __PREVIOUSPAGE: res.body.match(/name="__PREVIOUSPAGE".*?value="([^"]*)"/)[1],
37
+ IsFromNewSite: '1',
38
+ ctl00$ContentPlaceHolder1$loginform$txtUserName: username,
39
+ txtPassword: password
40
+ };
41
+ // build login form body
42
+ loginFormBody = Object.keys(loginObj)
43
+ .map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(String(loginObj[k])))
44
+ .join('&');
45
+ })
46
+ .catch((err) => {
47
+ throw new Error(`GET ${_utils_1.ADCLOGIN_URL} failed: ${(0, _utils_1.describeError)(err)}`);
48
+ });
49
+ await (0, node_fetch_1.default)(_utils_1.ADCFORMLOGIN_URL, {
50
+ method: 'POST',
51
+ headers: {
52
+ 'Content-Type': 'application/x-www-form-urlencoded',
53
+ 'User-Agent': _utils_1.UA,
54
+ Cookie: `twoFactorAuthenticationId=${existingMfaToken};`
55
+ },
56
+ body: loginFormBody,
57
+ redirect: 'manual'
58
+ })
59
+ .then((res) => {
60
+ loginCookies = (res.headers.raw()['set-cookie'] ?? []).map((c) => c.split(';')[0]).join('; ');
61
+ // gather ajaxkey for session headers
62
+ const re = /afg=([^;]+);/.exec(loginCookies);
63
+ if (!re) {
64
+ throw new Error(`No afg cookie: ${loginCookies}`);
65
+ }
66
+ ajaxKey = re[1] ?? '';
67
+ })
68
+ .catch((err) => {
69
+ throw new Error(`POST ${_utils_1.ADCFORMLOGIN_URL} failed: ${err.describeError(err)}`);
70
+ });
71
+ await getIdentitiesState(loginCookies, ajaxKey)
72
+ .then((res) => {
73
+ identities = res;
74
+ systems = (res.data || []).map((d) => {
75
+ return d.relationships.selectedSystem.data.id;
76
+ });
77
+ })
78
+ .catch((err) => {
79
+ throw new Error(`GET ${_utils_1.IDENTITIES_URL} failed: ${err.describeError(err)}`);
80
+ });
81
+ return {
82
+ cookie: loginCookies,
83
+ ajaxKey: ajaxKey,
84
+ systems: systems,
85
+ identities: identities
86
+ };
87
+ }
88
+ /**
89
+ * This function returns the alarm.com system identity for the currently logged in system.
90
+ * The information returned is useful for finding current systems and global config.
91
+ */
92
+ async function getIdentitiesState(loginCookies, ajaxKey) {
93
+ return await (0, _utils_1.get)(_utils_1.IDENTITIES_URL, {
94
+ headers: {
95
+ Accept: 'application/vnd.api+json',
96
+ Cookie: loginCookies,
97
+ ajaxrequestuniquekey: ajaxKey,
98
+ Referer: 'https://www.alarm.com/web/system/home',
99
+ 'User-Agent': _utils_1.UA
100
+ }
101
+ })
102
+ .then((res) => {
103
+ // gather identities and systems
104
+ return res.body;
105
+ })
106
+ .catch((err) => {
107
+ throw new Error(`GET ${_utils_1.IDENTITIES_URL} failed: ${err.describeError(err)}`);
108
+ });
109
+ }
110
+ /**
111
+ * Retrieve information about the current state of a security system including
112
+ * attributes, partitions, accessory components and relationships.
113
+ *
114
+ * @param {string} systemID ID of the system to query. The Authentication
115
+ * object returned from the `login` method contains a `systems` property which
116
+ * is an array of system IDs.
117
+ * @param {Object} authOpts Authentication object returned from the login.
118
+ * @returns {Promise}
119
+ */
120
+ async function getCurrentState(systemID, authOpts) {
121
+ // This call to the systems endpoint retrieves an overview of all devices in a system
122
+ const res = await (0, _utils_1.authenticatedGet)(_utils_1.SYSTEM_URL + systemID, authOpts);
123
+ const rels = res.data.relationships;
124
+ const components = new Map();
125
+ // push the results of getComponents into the components
126
+ // Now we go through and get detailed information about all devices
127
+ const partitionIDs = rels.partitions.data.map((partition) => partition.id);
128
+ if (typeof partitionIDs[0] !== 'undefined') {
129
+ components.set('partitions', await (0, _utils_1.getComponents)(_utils_1.PARTITIONS_URL, partitionIDs, authOpts));
130
+ }
131
+ const sensorIDs = rels.sensors.data.map((sensor) => sensor.id);
132
+ if (typeof sensorIDs[0] !== 'undefined') {
133
+ components.set('sensors', await (0, _utils_1.getComponents)(_utils_1.SENSORS_URL, sensorIDs, authOpts));
134
+ }
135
+ const lightIDs = rels.lights.data.map((light) => light.id);
136
+ if (typeof lightIDs[0] !== 'undefined') {
137
+ components.set('lights', await (0, _utils_1.getComponents)(_utils_1.LIGHTS_URL, lightIDs, authOpts));
138
+ }
139
+ const lockIDs = rels.locks.data.map((lock) => lock.id);
140
+ if (typeof lockIDs[0] !== 'undefined') {
141
+ components.set('locks', await (0, _utils_1.getComponents)(_utils_1.LOCKS_URL, lockIDs, authOpts));
142
+ }
143
+ const garageIDs = rels.garageDoors.data.map((garage) => garage.id);
144
+ if (typeof garageIDs[0] !== 'undefined') {
145
+ components.set('garages', await (0, _utils_1.getComponents)(_utils_1.GARAGE_URL, garageIDs, authOpts));
146
+ }
147
+ const thermostatIDs = rels.thermostats.data.map((thermostat) => thermostat.id);
148
+ if (typeof thermostatIDs[0] !== 'undefined') {
149
+ components.set('thermostats', await (0, _utils_1.getComponents)(_utils_1.THERMOSTAT_URL, thermostatIDs, authOpts));
150
+ }
151
+ return {
152
+ id: res.data.id,
153
+ attributes: res.data.attributes,
154
+ partitions: components.has('partitions') ? components.get('partitions').data : [],
155
+ sensors: components.has('sensors') ? components.get('sensors').data : [],
156
+ lights: components.has('lights') ? components.get('lights').data : [],
157
+ locks: components.has('locks') ? components.get('locks').data : [],
158
+ garages: components.has('garages') ? components.get('garages').data : [],
159
+ thermostats: components.has('thermostats') ? components.get('thermostats').data : [],
160
+ relationships: rels
161
+ };
162
+ }
163
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { AuthOpts } from './_models/AuthOpts';
2
+ /**
3
+ * Sets a garage to CLOSED.
4
+ *
5
+ * @param {string} garageID Garage ID string.
6
+ * @param {Object} authOpts Authentication object returned from the `login` method.
7
+ * @returns {Promise}
8
+ */
9
+ export declare function closeGarage(garageID: string, authOpts: AuthOpts): Promise<any>;
10
+ /**
11
+ * Sets a garage to OPEN.
12
+ *
13
+ * @param {string} garageID Garage ID string.
14
+ * @param {Object} authOpts Authentication object returned from the `login` method.
15
+ * @returns {Promise}
16
+ */
17
+ export declare function openGarage(garageID: string, authOpts: AuthOpts): Promise<any>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.closeGarage = closeGarage;
4
+ exports.openGarage = openGarage;
5
+ const _utils_1 = require("./_utils");
6
+ /**
7
+ * Sets a garage to CLOSED.
8
+ *
9
+ * @param {string} garageID Garage ID string.
10
+ * @param {Object} authOpts Authentication object returned from the `login` method.
11
+ * @returns {Promise}
12
+ */
13
+ function closeGarage(garageID, authOpts) {
14
+ const url = `${_utils_1.GARAGE_URL}${garageID}/close`;
15
+ const postOpts = Object.assign({}, authOpts, {
16
+ body: {
17
+ statePollOnly: false
18
+ }
19
+ });
20
+ return (0, _utils_1.authenticatedPost)(url, postOpts);
21
+ }
22
+ /**
23
+ * Sets a garage to OPEN.
24
+ *
25
+ * @param {string} garageID Garage ID string.
26
+ * @param {Object} authOpts Authentication object returned from the `login` method.
27
+ * @returns {Promise}
28
+ */
29
+ function openGarage(garageID, authOpts) {
30
+ const url = `${_utils_1.GARAGE_URL}${garageID}/open`;
31
+ const postOpts = Object.assign({}, authOpts, {
32
+ body: {
33
+ statePollOnly: false
34
+ }
35
+ });
36
+ return (0, _utils_1.authenticatedPost)(url, postOpts);
37
+ }
38
+ //# sourceMappingURL=garages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"garages.js","sourceRoot":"","sources":["../src/garages.ts"],"names":[],"mappings":";;AAUA,kCAQC;AASD,gCAQC;AAlCD,qCAAyD;AAEzD;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,QAAgB,EAAE,QAAkB;IAC9D,MAAM,GAAG,GAAG,GAAG,mBAAU,GAAG,QAAQ,QAAQ,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE;QAC3C,IAAI,EAAE;YACJ,aAAa,EAAE,KAAK;SACrB;KACF,CAAC,CAAC;IACH,OAAO,IAAA,0BAAiB,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,QAAgB,EAAE,QAAkB;IAC7D,MAAM,GAAG,GAAG,GAAG,mBAAU,GAAG,QAAQ,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE;QAC3C,IAAI,EAAE;YACJ,aAAa,EAAE,KAAK;SACrB;KACF,CAAC,CAAC;IACH,OAAO,IAAA,0BAAiB,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC"}