homebridge-carrier-infinity 1.8.1 → 1.9.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 (73) hide show
  1. package/.devcontainer/.uix-hb-service-homebridge-startup.json.example +5 -0
  2. package/.devcontainer/config.json.example +2 -1
  3. package/.devcontainer/setup-homebridge.sh +6 -0
  4. package/CLAUDE.md +28 -21
  5. package/dist/accessory_base.d.ts +2 -2
  6. package/dist/accessory_base.d.ts.map +1 -1
  7. package/dist/accessory_base.js.map +1 -1
  8. package/dist/api/graphql_client.d.ts +71 -0
  9. package/dist/api/graphql_client.d.ts.map +1 -0
  10. package/dist/api/graphql_client.js +261 -0
  11. package/dist/api/graphql_client.js.map +1 -0
  12. package/dist/api/graphql_operations.d.ts +56 -0
  13. package/dist/api/graphql_operations.d.ts.map +1 -0
  14. package/dist/api/graphql_operations.js +325 -0
  15. package/dist/api/graphql_operations.js.map +1 -0
  16. package/dist/api/interface_graphql_mutations.d.ts +149 -0
  17. package/dist/api/interface_graphql_mutations.d.ts.map +1 -0
  18. package/dist/api/interface_graphql_mutations.js +8 -0
  19. package/dist/api/interface_graphql_mutations.js.map +1 -0
  20. package/dist/api/interface_graphql_system.d.ts +287 -0
  21. package/dist/api/interface_graphql_system.d.ts.map +1 -0
  22. package/dist/api/interface_graphql_system.js +9 -0
  23. package/dist/api/interface_graphql_system.js.map +1 -0
  24. package/dist/api/models_graphql.d.ts +167 -0
  25. package/dist/api/models_graphql.d.ts.map +1 -0
  26. package/dist/api/models_graphql.js +590 -0
  27. package/dist/api/models_graphql.js.map +1 -0
  28. package/dist/api/oauth2.d.ts +45 -0
  29. package/dist/api/oauth2.d.ts.map +1 -0
  30. package/dist/api/oauth2.js +35 -0
  31. package/dist/api/oauth2.js.map +1 -0
  32. package/dist/characteristics_base.d.ts +2 -2
  33. package/dist/characteristics_base.d.ts.map +1 -1
  34. package/dist/characteristics_base.js.map +1 -1
  35. package/dist/platform.d.ts +4 -4
  36. package/dist/platform.d.ts.map +1 -1
  37. package/dist/platform.js +7 -12
  38. package/dist/platform.js.map +1 -1
  39. package/dist/settings.d.ts +6 -3
  40. package/dist/settings.d.ts.map +1 -1
  41. package/dist/settings.js +7 -4
  42. package/dist/settings.js.map +1 -1
  43. package/eslint.config.mjs +93 -2
  44. package/package.json +3 -6
  45. package/dist/api/comodo-aaa-root.pem +0 -25
  46. package/dist/api/interface_config.d.ts +0 -185
  47. package/dist/api/interface_config.d.ts.map +0 -1
  48. package/dist/api/interface_config.js +0 -5
  49. package/dist/api/interface_config.js.map +0 -1
  50. package/dist/api/interface_locations.d.ts +0 -45
  51. package/dist/api/interface_locations.d.ts.map +0 -1
  52. package/dist/api/interface_locations.js +0 -5
  53. package/dist/api/interface_locations.js.map +0 -1
  54. package/dist/api/interface_profile.d.ts +0 -80
  55. package/dist/api/interface_profile.d.ts.map +0 -1
  56. package/dist/api/interface_profile.js +0 -5
  57. package/dist/api/interface_profile.js.map +0 -1
  58. package/dist/api/interface_status.d.ts +0 -90
  59. package/dist/api/interface_status.d.ts.map +0 -1
  60. package/dist/api/interface_status.js +0 -5
  61. package/dist/api/interface_status.js.map +0 -1
  62. package/dist/api/models.d.ts +0 -111
  63. package/dist/api/models.d.ts.map +0 -1
  64. package/dist/api/models.js +0 -572
  65. package/dist/api/models.js.map +0 -1
  66. package/dist/api/oauth.d.ts +0 -6
  67. package/dist/api/oauth.d.ts.map +0 -1
  68. package/dist/api/oauth.js +0 -49
  69. package/dist/api/oauth.js.map +0 -1
  70. package/dist/api/rest_client.d.ts +0 -15
  71. package/dist/api/rest_client.d.ts.map +0 -1
  72. package/dist/api/rest_client.js +0 -135
  73. package/dist/api/rest_client.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/api/oauth.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAsF;AAEtF,oDAA4B;AAE5B,2CAAkC;AAElC,MAAa,YAAY;IACvB,MAAM,CAAC,SAAS,CAAC,UAAkB,EAAE,GAAW,EAAE,QAAgB,EAAE,KAAa,EAAE,IAAmB;QACpG,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG;YACxB,kBAAkB,EAAG,oCAAyB;YAC9C,WAAW,EAAG,QAAQ;YACtB,sBAAsB,EAAG,WAAW;YACpC,eAAe,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAC/C,WAAW,EAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvD,aAAa,EAAG,KAAK;SACtB,CAAC;QAEF,+CAA+C;QAC/C,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;QAEzE,eAAe;QACf,MAAM,SAAS,GAAG,IAAA,iBAAI,EACpB,iBAAiB,CAAC,wBAAwB,CAAC,EAC3C,UAAU,EACV,SAAS,GAAG,GAAG,EACf,UAAU,EACV,uCAA4B,EAC5B,KAAK,CACN,CAAC;QACF,mBAAmB;QACnB,MAAM,aAAa,GAAG;YACpB,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;SACnC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,aAAa,CAAC,IAAI,CAChB,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CACxB,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,mBAAmB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,SAAS,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAkC,EAAE,QAAgB,EAAE,KAAa;QAClF,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1H,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAjDD,oCAiDC"}
@@ -1,15 +0,0 @@
1
- import { AxiosInstance } from 'axios';
2
- import { Logger } from 'homebridge';
3
- export declare class InfinityRestClient {
4
- username: string;
5
- private password;
6
- readonly log: Logger;
7
- private access_token;
8
- axios: AxiosInstance;
9
- constructor(username: string, password: string, log: Logger);
10
- activate(): Promise<void>;
11
- forceActivate(): Promise<void>;
12
- refreshToken(): Promise<void>;
13
- forceRefreshToken(): Promise<void>;
14
- }
15
- //# sourceMappingURL=rest_client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest_client.d.ts","sourceRoot":"","sources":["../../src/api/rest_client.ts"],"names":[],"mappings":"AAIA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAQpC,qBAAa,kBAAkB;IAKlB,QAAQ,EAAE,MAAM;IACvB,OAAO,CAAC,QAAQ;aACA,GAAG,EAAE,MAAM;IAN/B,OAAO,CAAC,YAAY,CAAM;IACnB,KAAK,EAAE,aAAa,CAAC;gBAGjB,QAAQ,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EACR,GAAG,EAAE,MAAM;IAuDzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAWzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7B,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CA6BzC"}
@@ -1,135 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.InfinityRestClient = void 0;
13
- const settings_1 = require("../settings");
14
- const oauth_1 = require("./oauth");
15
- const xml2js_1 = __importDefault(require("xml2js"));
16
- const axios_1 = __importDefault(require("axios"));
17
- const typescript_memoize_1 = require("typescript-memoize");
18
- const typescript_retry_decorator_1 = require("typescript-retry-decorator");
19
- const https_1 = __importDefault(require("https"));
20
- const tls_1 = __importDefault(require("tls"));
21
- const fs_1 = __importDefault(require("fs"));
22
- const path_1 = __importDefault(require("path"));
23
- class InfinityRestClient {
24
- constructor(username, password, log) {
25
- this.username = username;
26
- this.password = password;
27
- this.log = log;
28
- this.access_token = '';
29
- // Load Comodo AAA root certificate for Node.js 22+ compatibility
30
- // Node.js 22.20+ removed this root CA, but Carrier's API still uses it
31
- const comodoRootCert = fs_1.default.readFileSync(path_1.default.join(__dirname, 'comodo-aaa-root.pem'), 'utf8');
32
- // Add Comodo cert to the default CA bundle (not replacing it)
33
- // This ensures we trust both the default CAs and the Comodo root
34
- const ca = [...tls_1.default.rootCertificates, comodoRootCert];
35
- // Create HTTPS agent with augmented CA bundle
36
- const httpsAgent = new https_1.default.Agent({
37
- ca: ca,
38
- });
39
- this.axios = axios_1.default.create({
40
- baseURL: settings_1.INFINITY_API_BASE_URL,
41
- headers: {
42
- featureset: 'CONSUMER_PORTAL',
43
- Accept: 'application/xml',
44
- },
45
- httpsAgent: httpsAgent,
46
- });
47
- // Axios debug logging and error handling
48
- this.axios.interceptors.response.use(
49
- // Success
50
- response => {
51
- var _a, _b;
52
- this.log.debug(`${(_a = response.request) === null || _a === void 0 ? void 0 : _a.method} ${response.request.host}${(_b = response.request) === null || _b === void 0 ? void 0 : _b.path}`, `${response.status} ${response.statusText}`);
53
- return response;
54
- },
55
- // Failure
56
- error => {
57
- var _a, _b, _c, _d, _e;
58
- if (axios_1.default.isAxiosError(error)) {
59
- this.log.debug(`${(_a = error.request) === null || _a === void 0 ? void 0 : _a.method} ${(_b = error.request) === null || _b === void 0 ? void 0 : _b.host}${(_c = error.request) === null || _c === void 0 ? void 0 : _c.path}`, `${(_d = error.response) === null || _d === void 0 ? void 0 : _d.status} ${(_e = error.response) === null || _e === void 0 ? void 0 : _e.statusText}`);
60
- }
61
- return Promise.reject(error); // this makes http errors raise
62
- });
63
- // Oauth header add
64
- this.axios.interceptors.request.use(config => {
65
- return oauth_1.OAuthHeaders.intercept(config, this.username, this.access_token);
66
- });
67
- }
68
- // Api seems to expect this every min or so. more frequent doesn't seem to
69
- // make any difference.
70
- async activate() {
71
- try {
72
- await this.forceActivate();
73
- }
74
- catch (error) {
75
- this.log.error('[API] Failure sending activation signal: ', axios_1.default.isAxiosError(error) ? error.message : error);
76
- }
77
- }
78
- async forceActivate() {
79
- await this.axios.post(`/users/${this.username}/activateSystems`, null, {
80
- headers: {
81
- Accept: 'application/json',
82
- },
83
- });
84
- }
85
- async refreshToken() {
86
- try {
87
- await this.forceRefreshToken();
88
- this.log.info('Completed login / token refresh successfully.');
89
- }
90
- catch (error) {
91
- this.log.error('[API] Could not refresh access token: ', axios_1.default.isAxiosError(error) ? error.message : error);
92
- }
93
- }
94
- async forceRefreshToken() {
95
- var _a;
96
- this.log.info('Attempting login / token refresh.');
97
- const builder = new xml2js_1.default.Builder({ cdata: true, headless: true });
98
- const new_xml = builder.buildObject({
99
- credentials: {
100
- username: this.username,
101
- password: this.password,
102
- },
103
- });
104
- const data = `data=${encodeURIComponent(new_xml)}`;
105
- const response = await this.axios.post('/users/authenticated', data, {
106
- headers: {
107
- 'Content-Type': 'application/x-www-form-urlencoded',
108
- Accept: 'application/json',
109
- },
110
- });
111
- if ((_a = response.data.result) === null || _a === void 0 ? void 0 : _a.accessToken) {
112
- this.access_token = response.data.result.accessToken;
113
- }
114
- else {
115
- this.log.debug(response.data);
116
- throw new Error('User authentication error.');
117
- }
118
- }
119
- }
120
- exports.InfinityRestClient = InfinityRestClient;
121
- __decorate([
122
- (0, typescript_memoize_1.MemoizeExpiring)(1 * 60 * 1000)
123
- ], InfinityRestClient.prototype, "activate", null);
124
- __decorate([
125
- (0, typescript_memoize_1.MemoizeExpiring)(24 * 60 * 60 * 1000) // every 24 hrs
126
- ], InfinityRestClient.prototype, "refreshToken", null);
127
- __decorate([
128
- (0, typescript_retry_decorator_1.Retryable)({
129
- maxAttempts: 5,
130
- backOffPolicy: typescript_retry_decorator_1.BackOffPolicy.ExponentialBackOffPolicy,
131
- backOff: 1000,
132
- exponentialOption: { maxInterval: 5 * 60 * 1000, multiplier: 5 },
133
- })
134
- ], InfinityRestClient.prototype, "forceRefreshToken", null);
135
- //# sourceMappingURL=rest_client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest_client.js","sourceRoot":"","sources":["../../src/api/rest_client.ts"],"names":[],"mappings":"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"}