@mp-consulting/homebridge-daikin-cloud 1.3.5 → 1.3.7

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 (234) hide show
  1. package/LICENSE +39 -1
  2. package/README.md +5 -3
  3. package/dist/src/accessories/air-conditioning-accessory.d.ts +2 -2
  4. package/dist/src/accessories/air-conditioning-accessory.d.ts.map +1 -1
  5. package/dist/src/accessories/air-conditioning-accessory.js.map +1 -1
  6. package/dist/src/accessories/altherma-accessory.d.ts +2 -2
  7. package/dist/src/accessories/altherma-accessory.d.ts.map +1 -1
  8. package/dist/src/accessories/altherma-accessory.js.map +1 -1
  9. package/dist/src/accessories/base-accessory.d.ts +6 -6
  10. package/dist/src/accessories/base-accessory.d.ts.map +1 -1
  11. package/dist/src/accessories/base-accessory.js +15 -15
  12. package/dist/src/accessories/base-accessory.js.map +1 -1
  13. package/dist/src/api/daikin-api.d.ts +26 -26
  14. package/dist/src/api/daikin-api.d.ts.map +1 -1
  15. package/dist/src/api/daikin-api.js +68 -42
  16. package/dist/src/api/daikin-api.js.map +1 -1
  17. package/dist/src/api/daikin-cloud.repository.d.ts.map +1 -1
  18. package/dist/src/api/daikin-cloud.repository.js +22 -14
  19. package/dist/src/api/daikin-cloud.repository.js.map +1 -1
  20. package/dist/src/api/daikin-controller.d.ts +41 -47
  21. package/dist/src/api/daikin-controller.d.ts.map +1 -1
  22. package/dist/src/api/daikin-controller.js +40 -64
  23. package/dist/src/api/daikin-controller.js.map +1 -1
  24. package/dist/src/api/daikin-device.d.ts +36 -31
  25. package/dist/src/api/daikin-device.d.ts.map +1 -1
  26. package/dist/src/api/daikin-device.js +45 -31
  27. package/dist/src/api/daikin-device.js.map +1 -1
  28. package/dist/src/api/daikin-mobile-oauth.d.ts +20 -20
  29. package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
  30. package/dist/src/api/daikin-mobile-oauth.js +49 -44
  31. package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
  32. package/dist/src/api/daikin-oauth.d.ts +32 -32
  33. package/dist/src/api/daikin-oauth.d.ts.map +1 -1
  34. package/dist/src/api/daikin-oauth.js +64 -56
  35. package/dist/src/api/daikin-oauth.js.map +1 -1
  36. package/dist/src/api/daikin-schemas.d.ts +476 -351
  37. package/dist/src/api/daikin-schemas.d.ts.map +1 -1
  38. package/dist/src/api/daikin-schemas.js +11 -42
  39. package/dist/src/api/daikin-schemas.js.map +1 -1
  40. package/dist/src/api/daikin-types.d.ts +5 -1
  41. package/dist/src/api/daikin-types.d.ts.map +1 -1
  42. package/dist/src/api/daikin-types.js.map +1 -1
  43. package/dist/src/api/daikin-websocket.d.ts +31 -32
  44. package/dist/src/api/daikin-websocket.d.ts.map +1 -1
  45. package/dist/src/api/daikin-websocket.js +55 -35
  46. package/dist/src/api/daikin-websocket.js.map +1 -1
  47. package/dist/src/api/index.d.ts +2 -1
  48. package/dist/src/api/index.d.ts.map +1 -1
  49. package/dist/src/api/index.js +3 -1
  50. package/dist/src/api/index.js.map +1 -1
  51. package/dist/src/api/token-storage.d.ts +21 -0
  52. package/dist/src/api/token-storage.d.ts.map +1 -0
  53. package/dist/src/api/token-storage.js +90 -0
  54. package/dist/src/api/token-storage.js.map +1 -0
  55. package/dist/src/config/config-manager.d.ts +33 -33
  56. package/dist/src/config/config-manager.d.ts.map +1 -1
  57. package/dist/src/config/config-manager.js +33 -33
  58. package/dist/src/config/config-manager.js.map +1 -1
  59. package/dist/src/constants/api.constants.d.ts +4 -0
  60. package/dist/src/constants/api.constants.d.ts.map +1 -1
  61. package/dist/src/constants/api.constants.js +5 -1
  62. package/dist/src/constants/api.constants.js.map +1 -1
  63. package/dist/src/constants/device.constants.d.ts +4 -0
  64. package/dist/src/constants/device.constants.d.ts.map +1 -1
  65. package/dist/src/constants/device.constants.js +5 -1
  66. package/dist/src/constants/device.constants.js.map +1 -1
  67. package/dist/src/device/accessory-factory.d.ts +10 -10
  68. package/dist/src/device/accessory-factory.d.ts.map +1 -1
  69. package/dist/src/device/accessory-factory.js +7 -7
  70. package/dist/src/device/accessory-factory.js.map +1 -1
  71. package/dist/src/device/capability-detector.d.ts +8 -8
  72. package/dist/src/device/capability-detector.d.ts.map +1 -1
  73. package/dist/src/device/capability-detector.js +6 -6
  74. package/dist/src/device/capability-detector.js.map +1 -1
  75. package/dist/src/device/capability-docs.d.ts +1 -9
  76. package/dist/src/device/capability-docs.d.ts.map +1 -1
  77. package/dist/src/device/capability-docs.js +19 -73
  78. package/dist/src/device/capability-docs.js.map +1 -1
  79. package/dist/src/device/profiles/device-profile.d.ts +1 -1
  80. package/dist/src/device/profiles/device-profile.d.ts.map +1 -1
  81. package/dist/src/device/profiles/device-profile.js +4 -4
  82. package/dist/src/device/profiles/device-profile.js.map +1 -1
  83. package/dist/src/features/base-feature.d.ts +2 -2
  84. package/dist/src/features/base-feature.d.ts.map +1 -1
  85. package/dist/src/features/base-feature.js +2 -3
  86. package/dist/src/features/base-feature.js.map +1 -1
  87. package/dist/src/features/feature-manager.d.ts +8 -16
  88. package/dist/src/features/feature-manager.d.ts.map +1 -1
  89. package/dist/src/features/feature-manager.js +5 -17
  90. package/dist/src/features/feature-manager.js.map +1 -1
  91. package/dist/src/features/modes/dry-operation-mode.feature.d.ts +1 -1
  92. package/dist/src/features/modes/dry-operation-mode.feature.d.ts.map +1 -1
  93. package/dist/src/features/modes/dry-operation-mode.feature.js.map +1 -1
  94. package/dist/src/features/modes/econo-mode.feature.d.ts +1 -1
  95. package/dist/src/features/modes/econo-mode.feature.d.ts.map +1 -1
  96. package/dist/src/features/modes/econo-mode.feature.js.map +1 -1
  97. package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts +1 -1
  98. package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts.map +1 -1
  99. package/dist/src/features/modes/fan-only-operation-mode.feature.js.map +1 -1
  100. package/dist/src/features/modes/indoor-silent-mode.feature.d.ts +1 -1
  101. package/dist/src/features/modes/indoor-silent-mode.feature.d.ts.map +1 -1
  102. package/dist/src/features/modes/indoor-silent-mode.feature.js.map +1 -1
  103. package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts +1 -1
  104. package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts.map +1 -1
  105. package/dist/src/features/modes/outdoor-silent-mode.feature.js.map +1 -1
  106. package/dist/src/features/modes/powerful-mode.feature.d.ts +1 -1
  107. package/dist/src/features/modes/powerful-mode.feature.d.ts.map +1 -1
  108. package/dist/src/features/modes/powerful-mode.feature.js.map +1 -1
  109. package/dist/src/features/modes/streamer-mode.feature.d.ts +1 -1
  110. package/dist/src/features/modes/streamer-mode.feature.d.ts.map +1 -1
  111. package/dist/src/features/modes/streamer-mode.feature.js.map +1 -1
  112. package/dist/src/index.d.ts +1 -1
  113. package/dist/src/index.d.ts.map +1 -1
  114. package/dist/src/index.js.map +1 -1
  115. package/dist/src/platform.d.ts +11 -8
  116. package/dist/src/platform.d.ts.map +1 -1
  117. package/dist/src/platform.js +64 -15
  118. package/dist/src/platform.js.map +1 -1
  119. package/dist/src/services/climate-control.service.d.ts +8 -2
  120. package/dist/src/services/climate-control.service.d.ts.map +1 -1
  121. package/dist/src/services/climate-control.service.js +59 -58
  122. package/dist/src/services/climate-control.service.js.map +1 -1
  123. package/dist/src/services/hot-water-tank.service.d.ts +6 -2
  124. package/dist/src/services/hot-water-tank.service.d.ts.map +1 -1
  125. package/dist/src/services/hot-water-tank.service.js +33 -31
  126. package/dist/src/services/hot-water-tank.service.js.map +1 -1
  127. package/dist/src/types/daikin-enums.js +12 -12
  128. package/dist/src/types/daikin-enums.js.map +1 -1
  129. package/dist/src/types/device-capabilities.d.ts +1 -1
  130. package/dist/src/types/device-capabilities.d.ts.map +1 -1
  131. package/dist/src/utils/log-context.d.ts +23 -23
  132. package/dist/src/utils/log-context.d.ts.map +1 -1
  133. package/dist/src/utils/log-context.js +28 -28
  134. package/dist/src/utils/log-context.js.map +1 -1
  135. package/dist/src/utils/strings.d.ts.map +1 -1
  136. package/dist/src/utils/strings.js.map +1 -1
  137. package/dist/src/utils/update-mapper.d.ts +16 -16
  138. package/dist/src/utils/update-mapper.d.ts.map +1 -1
  139. package/dist/src/utils/update-mapper.js +14 -14
  140. package/dist/src/utils/update-mapper.js.map +1 -1
  141. package/homebridge-ui/public/index.html +2 -2
  142. package/homebridge-ui/public/script.js +957 -898
  143. package/homebridge-ui/server.js +746 -678
  144. package/package.json +29 -27
  145. package/.claude/settings.json +0 -3
  146. package/.claude/settings.local.json +0 -29
  147. package/CHANGELOG.md +0 -103
  148. package/CLAUDE.md +0 -269
  149. package/config.md +0 -2
  150. package/dist/src/api/daikin-device-tracker.d.ts +0 -97
  151. package/dist/src/api/daikin-device-tracker.d.ts.map +0 -1
  152. package/dist/src/api/daikin-device-tracker.js +0 -136
  153. package/dist/src/api/daikin-device-tracker.js.map +0 -1
  154. package/dist/src/api/http-interceptor.d.ts +0 -99
  155. package/dist/src/api/http-interceptor.d.ts.map +0 -1
  156. package/dist/src/api/http-interceptor.js +0 -177
  157. package/dist/src/api/http-interceptor.js.map +0 -1
  158. package/dist/src/di/service-container.d.ts +0 -92
  159. package/dist/src/di/service-container.d.ts.map +0 -1
  160. package/dist/src/di/service-container.js +0 -156
  161. package/dist/src/di/service-container.js.map +0 -1
  162. package/dist/src/features/feature-registry.d.ts +0 -100
  163. package/dist/src/features/feature-registry.d.ts.map +0 -1
  164. package/dist/src/features/feature-registry.js +0 -142
  165. package/dist/src/features/feature-registry.js.map +0 -1
  166. package/dist/src/services/service-factory.d.ts +0 -46
  167. package/dist/src/services/service-factory.d.ts.map +0 -1
  168. package/dist/src/services/service-factory.js +0 -72
  169. package/dist/src/services/service-factory.js.map +0 -1
  170. package/dist/src/utils/error-handler.d.ts +0 -101
  171. package/dist/src/utils/error-handler.d.ts.map +0 -1
  172. package/dist/src/utils/error-handler.js +0 -251
  173. package/dist/src/utils/error-handler.js.map +0 -1
  174. package/dist/src/utils/retry.d.ts +0 -42
  175. package/dist/src/utils/retry.d.ts.map +0 -1
  176. package/dist/src/utils/retry.js +0 -70
  177. package/dist/src/utils/retry.js.map +0 -1
  178. package/docs/ARCHITECTURE.md +0 -645
  179. package/docs/IMPLEMENTATION_GUIDE.md +0 -899
  180. package/docs/IMPROVEMENTS_SUMMARY.md +0 -415
  181. package/docs/NEXT_STEPS.md +0 -368
  182. package/docs/Screenshot 2024-07-04 at 18.41.28.png +0 -0
  183. package/docs/TROUBLESHOOTING.md +0 -475
  184. package/docs/api-response-for-BRP069A8x.json +0 -520
  185. package/docs/api-response-for-BRP069C4x-2.json +0 -881
  186. package/docs/api-response-for-BRP069C4x.json +0 -916
  187. package/docs/api-response-for-altherma.json +0 -759
  188. package/docs/api-response-for-altherma2.json +0 -2735
  189. package/docs/api-response-with-multiple-devices-incl-heatpump.json +0 -2544
  190. package/docs/cr-insance-altherma-id-0.json +0 -834
  191. package/docs/mock-air-to-air-dx23.json +0 -759
  192. package/docs/mock-air-to-air-dx4.json +0 -1134
  193. package/docs/mock-airpurifier-with-humidifier.json +0 -732
  194. package/docs/mock-airpurifier.json +0 -450
  195. package/docs/mock-altherma-air-to-water-lan.json +0 -845
  196. package/docs/mock-altherma-air-to-water-wlan.json +0 -845
  197. package/docs/mock-d2cnd-gas-boiler.json +0 -649
  198. package/docs/setpointmode-vs-controlmode-vs-setpoints-vs-sensorydata.txt +0 -6
  199. package/images/fan-speed.jpeg +0 -0
  200. package/images/homekit-controls.jpeg +0 -0
  201. package/images/homekit-settings.jpeg +0 -0
  202. package/images/swing-mode.png +0 -0
  203. package/jest.config.ts +0 -13
  204. package/test/fixtures/altherma-crSense-2.ts +0 -834
  205. package/test/fixtures/altherma-fraction.ts +0 -718
  206. package/test/fixtures/altherma-heat-pump-2.ts +0 -479
  207. package/test/fixtures/altherma-heat-pump.ts +0 -757
  208. package/test/fixtures/altherma-miladcerkic-off.ts +0 -524
  209. package/test/fixtures/altherma-miladcerkic.ts +0 -524
  210. package/test/fixtures/altherma-v1ckoeln.ts +0 -644
  211. package/test/fixtures/altherma-with-embedded-id-zero.ts +0 -834
  212. package/test/fixtures/dx23-airco-2.ts +0 -343
  213. package/test/fixtures/dx23-airco.ts +0 -518
  214. package/test/fixtures/dx4-airco.ts +0 -914
  215. package/test/fixtures/unknown-jan.ts +0 -488
  216. package/test/fixtures/unknown-kitchen-guests.ts +0 -488
  217. package/test/helpers/test-isolation.ts +0 -228
  218. package/test/integration/air-conditioning.test.ts +0 -410
  219. package/test/integration/altherma.test.ts +0 -289
  220. package/test/integration/platform.test.ts +0 -118
  221. package/test/mocks/index.ts +0 -27
  222. package/test/test-gigya-auth.js +0 -443
  223. package/test/test-mobile-oauth.js +0 -175
  224. package/test/test-websocket-mobile.js +0 -123
  225. package/test/test-websocket.js +0 -116
  226. package/test/unit/api/__snapshots__/daikinCloud.test.ts.snap +0 -1320
  227. package/test/unit/api/daikin-api.test.ts +0 -384
  228. package/test/unit/api/daikin-oauth.test.ts +0 -214
  229. package/test/unit/api/daikinCloud.test.ts +0 -12
  230. package/test/unit/config/config-manager.test.ts +0 -271
  231. package/test/unit/device/daikin-device.test.ts +0 -79
  232. package/test/unit/services/hot-water-tank.service.test.ts +0 -123
  233. package/test/unit/utils/error-handler.test.ts +0 -274
  234. package/test/unit/utils/log-context.test.ts +0 -271
@@ -20,19 +20,30 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
20
20
  }) : function(o, v) {
21
21
  o["default"] = v;
22
22
  });
23
- var __importStar = (this && this.__importStar) || function (mod) {
24
- if (mod && mod.__esModule) return mod;
25
- var result = {};
26
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
27
- __setModuleDefault(result, mod);
28
- return result;
29
- };
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
30
40
  Object.defineProperty(exports, "__esModule", { value: true });
31
41
  exports.DaikinOAuth = void 0;
32
- const fs = __importStar(require("node:fs"));
33
42
  const https = __importStar(require("node:https"));
34
43
  const crypto = __importStar(require("node:crypto"));
35
44
  const daikin_types_1 = require("./daikin-types");
45
+ const constants_1 = require("../constants");
46
+ const token_storage_1 = require("./token-storage");
36
47
  class DaikinOAuth {
37
48
  config;
38
49
  onTokenUpdate;
@@ -43,14 +54,14 @@ class DaikinOAuth {
43
54
  this.config = config;
44
55
  this.onTokenUpdate = onTokenUpdate;
45
56
  this.onError = onError;
46
- this.loadTokenFromFile();
57
+ this.loadFromFile();
47
58
  }
48
59
  // =========================================================================
49
60
  // Static utility methods (for use by homebridge-ui)
50
61
  // =========================================================================
51
62
  /**
52
- * Build authorization URL (static version)
53
- */
63
+ * Build authorization URL (static version)
64
+ */
54
65
  static buildAuthUrlStatic(clientId, redirectUri, state) {
55
66
  const url = new URL(daikin_types_1.DAIKIN_OIDC_CONFIG.authorizationEndpoint);
56
67
  url.searchParams.set('response_type', 'code');
@@ -61,8 +72,8 @@ class DaikinOAuth {
61
72
  return url.toString();
62
73
  }
63
74
  /**
64
- * Exchange authorization code for tokens (static version)
65
- */
75
+ * Exchange authorization code for tokens (static version)
76
+ */
66
77
  static async exchangeCodeStatic(code, clientId, clientSecret, redirectUri) {
67
78
  const tokenSet = await DaikinOAuth.makeStaticRequest(daikin_types_1.DAIKIN_OIDC_CONFIG.tokenEndpoint, {
68
79
  grant_type: 'authorization_code',
@@ -78,8 +89,8 @@ class DaikinOAuth {
78
89
  return tokenSet;
79
90
  }
80
91
  /**
81
- * Revoke token (static version)
82
- */
92
+ * Revoke token (static version)
93
+ */
83
94
  static async revokeTokenStatic(refreshToken, clientId, clientSecret) {
84
95
  await DaikinOAuth.makeStaticRequestRaw(daikin_types_1.DAIKIN_OIDC_CONFIG.revokeEndpoint, {
85
96
  token: refreshToken,
@@ -89,8 +100,8 @@ class DaikinOAuth {
89
100
  });
90
101
  }
91
102
  /**
92
- * Make a static token request
93
- */
103
+ * Make a static token request
104
+ */
94
105
  static async makeStaticRequest(url, params) {
95
106
  const response = await DaikinOAuth.makeStaticRequestRaw(url, params);
96
107
  const tokenSet = JSON.parse(response);
@@ -101,8 +112,8 @@ class DaikinOAuth {
101
112
  return tokenSet;
102
113
  }
103
114
  /**
104
- * Make a raw static HTTP request
105
- */
115
+ * Make a raw static HTTP request
116
+ */
106
117
  static makeStaticRequestRaw(url, params) {
107
118
  return new Promise((resolve, reject) => {
108
119
  const postData = new URLSearchParams(params).toString();
@@ -122,6 +133,9 @@ class DaikinOAuth {
122
133
  res.on('data', (chunk) => data += chunk);
123
134
  res.on('end', () => resolve(data));
124
135
  });
136
+ req.setTimeout(constants_1.HTTP_REQUEST_TIMEOUT_MS, () => {
137
+ req.destroy(new Error(`OAuth request timed out after ${constants_1.HTTP_REQUEST_TIMEOUT_MS}ms`));
138
+ });
125
139
  req.on('error', reject);
126
140
  req.write(postData);
127
141
  req.end();
@@ -131,14 +145,14 @@ class DaikinOAuth {
131
145
  // Instance methods
132
146
  // =========================================================================
133
147
  /**
134
- * Get the redirect URI for OAuth
135
- */
148
+ * Get the redirect URI for OAuth
149
+ */
136
150
  getRedirectUri() {
137
151
  return `https://${this.config.callbackServerExternalAddress}:${this.config.callbackServerPort}`;
138
152
  }
139
153
  /**
140
- * Build the authorization URL
141
- */
154
+ * Build the authorization URL
155
+ */
142
156
  buildAuthUrl(state) {
143
157
  const authState = state || crypto.randomBytes(32).toString('hex');
144
158
  const url = new URL(daikin_types_1.DAIKIN_OIDC_CONFIG.authorizationEndpoint);
@@ -150,8 +164,8 @@ class DaikinOAuth {
150
164
  return { url: url.toString(), state: authState };
151
165
  }
152
166
  /**
153
- * Exchange authorization code for tokens
154
- */
167
+ * Exchange authorization code for tokens
168
+ */
155
169
  async exchangeCode(code) {
156
170
  const tokenSet = await this.makeTokenRequest({
157
171
  grant_type: 'authorization_code',
@@ -164,8 +178,8 @@ class DaikinOAuth {
164
178
  return tokenSet;
165
179
  }
166
180
  /**
167
- * Refresh the access token
168
- */
181
+ * Refresh the access token
182
+ */
169
183
  async refreshToken() {
170
184
  if (!this.tokenSet?.refresh_token) {
171
185
  throw new Error('No refresh token available');
@@ -190,8 +204,8 @@ class DaikinOAuth {
190
204
  }
191
205
  }
192
206
  /**
193
- * Revoke the current token
194
- */
207
+ * Revoke the current token
208
+ */
195
209
  async revokeToken() {
196
210
  if (!this.tokenSet?.refresh_token) {
197
211
  return;
@@ -207,12 +221,12 @@ class DaikinOAuth {
207
221
  catch (error) {
208
222
  // Ignore revocation errors
209
223
  }
210
- this.deleteTokenFile();
224
+ this.deleteFile();
211
225
  this.tokenSet = null;
212
226
  }
213
227
  /**
214
- * Get a valid access token, refreshing if necessary
215
- */
228
+ * Get a valid access token, refreshing if necessary
229
+ */
216
230
  async getAccessToken() {
217
231
  if (!this.tokenSet) {
218
232
  throw new Error('Not authenticated. Please authenticate first.');
@@ -229,14 +243,14 @@ class DaikinOAuth {
229
243
  return this.tokenSet.access_token;
230
244
  }
231
245
  /**
232
- * Check if we have a valid token
233
- */
246
+ * Check if we have a valid token
247
+ */
234
248
  isAuthenticated() {
235
249
  return this.tokenSet !== null && !!this.tokenSet.access_token;
236
250
  }
237
251
  /**
238
- * Get token expiration date
239
- */
252
+ * Get token expiration date
253
+ */
240
254
  getTokenExpiration() {
241
255
  if (!this.tokenSet?.expires_at) {
242
256
  return null;
@@ -244,8 +258,8 @@ class DaikinOAuth {
244
258
  return new Date(this.tokenSet.expires_at * 1000);
245
259
  }
246
260
  /**
247
- * Get current token set (for status display)
248
- */
261
+ * Get current token set (for status display)
262
+ */
249
263
  getTokenSet() {
250
264
  return this.tokenSet;
251
265
  }
@@ -256,17 +270,14 @@ class DaikinOAuth {
256
270
  tokenSet.expires_at = Math.floor(Date.now() / 1000) + tokenSet.expires_in;
257
271
  }
258
272
  this.tokenSet = tokenSet;
259
- this.saveTokenToFile();
273
+ this.saveToFile();
260
274
  if (this.onTokenUpdate) {
261
275
  this.onTokenUpdate(tokenSet);
262
276
  }
263
277
  }
264
- loadTokenFromFile() {
278
+ loadFromFile() {
265
279
  try {
266
- if (fs.existsSync(this.config.tokenFilePath)) {
267
- const data = fs.readFileSync(this.config.tokenFilePath, 'utf8');
268
- this.tokenSet = JSON.parse(data);
269
- }
280
+ this.tokenSet = (0, token_storage_1.loadTokenFromFile)(this.config.tokenFilePath);
270
281
  }
271
282
  catch (error) {
272
283
  if (this.onError) {
@@ -274,10 +285,11 @@ class DaikinOAuth {
274
285
  }
275
286
  }
276
287
  }
277
- saveTokenToFile() {
288
+ saveToFile() {
278
289
  try {
279
- // Write token file with restricted permissions (owner read/write only)
280
- fs.writeFileSync(this.config.tokenFilePath, JSON.stringify(this.tokenSet, null, 2), { encoding: 'utf8', mode: 0o600 });
290
+ if (this.tokenSet) {
291
+ (0, token_storage_1.saveTokenToFile)(this.config.tokenFilePath, this.tokenSet);
292
+ }
281
293
  }
282
294
  catch (error) {
283
295
  if (this.onError) {
@@ -285,15 +297,8 @@ class DaikinOAuth {
285
297
  }
286
298
  }
287
299
  }
288
- deleteTokenFile() {
289
- try {
290
- if (fs.existsSync(this.config.tokenFilePath)) {
291
- fs.unlinkSync(this.config.tokenFilePath);
292
- }
293
- }
294
- catch (error) {
295
- // Ignore delete errors
296
- }
300
+ deleteFile() {
301
+ (0, token_storage_1.deleteTokenFile)(this.config.tokenFilePath);
297
302
  }
298
303
  async makeTokenRequest(params) {
299
304
  const response = await this.makeRequest(daikin_types_1.DAIKIN_OIDC_CONFIG.tokenEndpoint, params);
@@ -323,6 +328,9 @@ class DaikinOAuth {
323
328
  res.on('data', (chunk) => data += chunk);
324
329
  res.on('end', () => resolve(data));
325
330
  });
331
+ req.setTimeout(constants_1.HTTP_REQUEST_TIMEOUT_MS, () => {
332
+ req.destroy(new Error(`OAuth request timed out after ${constants_1.HTTP_REQUEST_TIMEOUT_MS}ms`));
333
+ });
326
334
  req.on('error', reject);
327
335
  req.write(postData);
328
336
  req.end();
@@ -1 +1 @@
1
- {"version":3,"file":"daikin-oauth.js","sourceRoot":"","sources":["../../../src/api/daikin-oauth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daikin-oauth.js","sourceRoot":"","sources":["../../../src/api/daikin-oauth.ts"],"names":[],"mappings":"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"}