@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
@@ -1,251 +0,0 @@
1
- "use strict";
2
- /**
3
- * Error Handler Service
4
- *
5
- * Provides centralized error handling, logging, and recovery strategies.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.createErrorHandler = exports.ErrorHandler = exports.ErrorCategory = exports.ErrorSeverity = void 0;
9
- var ErrorSeverity;
10
- (function (ErrorSeverity) {
11
- ErrorSeverity["INFO"] = "INFO";
12
- ErrorSeverity["WARNING"] = "WARNING";
13
- ErrorSeverity["ERROR"] = "ERROR";
14
- ErrorSeverity["FATAL"] = "FATAL";
15
- })(ErrorSeverity = exports.ErrorSeverity || (exports.ErrorSeverity = {}));
16
- var ErrorCategory;
17
- (function (ErrorCategory) {
18
- ErrorCategory["AUTHENTICATION"] = "AUTHENTICATION";
19
- ErrorCategory["NETWORK"] = "NETWORK";
20
- ErrorCategory["RATE_LIMIT"] = "RATE_LIMIT";
21
- ErrorCategory["VALIDATION"] = "VALIDATION";
22
- ErrorCategory["API"] = "API";
23
- ErrorCategory["DEVICE"] = "DEVICE";
24
- ErrorCategory["WEBSOCKET"] = "WEBSOCKET";
25
- ErrorCategory["CONFIGURATION"] = "CONFIGURATION";
26
- ErrorCategory["UNKNOWN"] = "UNKNOWN";
27
- })(ErrorCategory = exports.ErrorCategory || (exports.ErrorCategory = {}));
28
- /**
29
- * Unified Error Handler
30
- */
31
- class ErrorHandler {
32
- logger;
33
- contextPrefix;
34
- errorHistory = [];
35
- maxHistorySize = 100;
36
- constructor(logger, contextPrefix = '') {
37
- this.logger = logger;
38
- this.contextPrefix = contextPrefix;
39
- }
40
- /**
41
- * Handle an error with context
42
- */
43
- handle(error, context = {}) {
44
- const handledError = this.createHandledError(error, context);
45
- this.logError(handledError);
46
- this.recordError(handledError);
47
- return handledError;
48
- }
49
- /**
50
- * Handle an error and return a user-friendly message
51
- */
52
- handleWithMessage(error, context = {}) {
53
- const handled = this.handle(error, context);
54
- return this.getUserMessage(handled);
55
- }
56
- /**
57
- * Determine if an error is retryable
58
- */
59
- isRetryable(error) {
60
- const errorMessage = error.message.toLowerCase();
61
- // Network errors that are typically retryable
62
- if (errorMessage.includes('econnreset') ||
63
- errorMessage.includes('econnrefused') ||
64
- errorMessage.includes('etimedout') ||
65
- errorMessage.includes('socket hang up') ||
66
- errorMessage.includes('network')) {
67
- return true;
68
- }
69
- // Gateway errors
70
- if (errorMessage.includes('bad gateway') ||
71
- errorMessage.includes('service unavailable') ||
72
- errorMessage.includes('gateway timeout')) {
73
- return true;
74
- }
75
- // Rate limit (retryable after delay)
76
- if (errorMessage.includes('rate limit')) {
77
- return true;
78
- }
79
- return false;
80
- }
81
- /**
82
- * Categorize an error
83
- */
84
- categorize(error) {
85
- const message = error.message.toLowerCase();
86
- if (message.includes('unauthorized') || message.includes('token') || message.includes('auth')) {
87
- return ErrorCategory.AUTHENTICATION;
88
- }
89
- if (message.includes('rate limit')) {
90
- return ErrorCategory.RATE_LIMIT;
91
- }
92
- if (message.includes('econnreset') ||
93
- message.includes('econnrefused') ||
94
- message.includes('etimedout') ||
95
- message.includes('network') ||
96
- message.includes('socket')) {
97
- return ErrorCategory.NETWORK;
98
- }
99
- if (message.includes('websocket') || message.includes('ws:')) {
100
- return ErrorCategory.WEBSOCKET;
101
- }
102
- if (message.includes('validation') || message.includes('invalid')) {
103
- return ErrorCategory.VALIDATION;
104
- }
105
- if (message.includes('device')) {
106
- return ErrorCategory.DEVICE;
107
- }
108
- if (message.includes('config')) {
109
- return ErrorCategory.CONFIGURATION;
110
- }
111
- if (message.includes('api') || message.includes('status')) {
112
- return ErrorCategory.API;
113
- }
114
- return ErrorCategory.UNKNOWN;
115
- }
116
- /**
117
- * Determine error severity
118
- */
119
- determineSeverity(error, category) {
120
- // Rate limit is a warning, not an error
121
- if (category === ErrorCategory.RATE_LIMIT) {
122
- return ErrorSeverity.WARNING;
123
- }
124
- // Authentication errors are fatal
125
- if (category === ErrorCategory.AUTHENTICATION) {
126
- return ErrorSeverity.FATAL;
127
- }
128
- // Configuration errors are fatal
129
- if (category === ErrorCategory.CONFIGURATION) {
130
- return ErrorSeverity.FATAL;
131
- }
132
- // Network errors are typically warnings (transient)
133
- if (category === ErrorCategory.NETWORK) {
134
- return ErrorSeverity.WARNING;
135
- }
136
- // Device errors are typically errors
137
- if (category === ErrorCategory.DEVICE) {
138
- return ErrorSeverity.ERROR;
139
- }
140
- // Default to error
141
- return ErrorSeverity.ERROR;
142
- }
143
- /**
144
- * Get recent errors
145
- */
146
- getRecentErrors(limit = 10) {
147
- return this.errorHistory.slice(-limit);
148
- }
149
- /**
150
- * Get errors by category
151
- */
152
- getErrorsByCategory(category) {
153
- return this.errorHistory.filter(e => e.context.category === category);
154
- }
155
- /**
156
- * Clear error history
157
- */
158
- clearHistory() {
159
- this.errorHistory = [];
160
- }
161
- /**
162
- * Create a handled error object
163
- */
164
- createHandledError(error, context) {
165
- const category = context.category ?? this.categorize(error);
166
- const severity = context.severity ?? this.determineSeverity(error, category);
167
- const retryable = context.retryable ?? this.isRetryable(error);
168
- return {
169
- message: error.message,
170
- originalError: error,
171
- context: {
172
- category,
173
- severity,
174
- retryable,
175
- ...context,
176
- },
177
- timestamp: new Date(),
178
- stack: error.stack,
179
- };
180
- }
181
- /**
182
- * Log an error with appropriate level
183
- */
184
- logError(error) {
185
- const prefix = this.contextPrefix ? `[${this.contextPrefix}] ` : '';
186
- const operation = error.context.operation ? ` (${error.context.operation})` : '';
187
- const deviceId = error.context.deviceId ? ` [${error.context.deviceId}]` : '';
188
- const message = `${prefix}${error.context.category}${operation}${deviceId}: ${error.message}`;
189
- switch (error.context.severity) {
190
- case ErrorSeverity.FATAL:
191
- this.logger.error(message);
192
- if (error.stack) {
193
- this.logger.error(error.stack);
194
- }
195
- break;
196
- case ErrorSeverity.ERROR:
197
- this.logger.error(message);
198
- break;
199
- case ErrorSeverity.WARNING:
200
- this.logger.warn(message);
201
- break;
202
- case ErrorSeverity.INFO:
203
- this.logger.info(message);
204
- break;
205
- }
206
- }
207
- /**
208
- * Record error in history
209
- */
210
- recordError(error) {
211
- this.errorHistory.push(error);
212
- // Trim history if needed
213
- if (this.errorHistory.length > this.maxHistorySize) {
214
- this.errorHistory = this.errorHistory.slice(-this.maxHistorySize);
215
- }
216
- }
217
- /**
218
- * Get user-friendly error message
219
- */
220
- getUserMessage(error) {
221
- switch (error.context.category) {
222
- case ErrorCategory.AUTHENTICATION:
223
- return 'Authentication failed. Please check your credentials and re-authenticate.';
224
- case ErrorCategory.RATE_LIMIT:
225
- return 'API rate limit exceeded. Please wait before trying again.';
226
- case ErrorCategory.NETWORK:
227
- return 'Network connection issue. Will retry automatically.';
228
- case ErrorCategory.WEBSOCKET:
229
- return 'WebSocket connection issue. Will attempt to reconnect.';
230
- case ErrorCategory.DEVICE:
231
- return `Device error: ${error.message}`;
232
- case ErrorCategory.CONFIGURATION:
233
- return `Configuration error: ${error.message}`;
234
- case ErrorCategory.VALIDATION:
235
- return `Validation error: ${error.message}`;
236
- case ErrorCategory.API:
237
- return `API error: ${error.message}`;
238
- default:
239
- return error.message;
240
- }
241
- }
242
- }
243
- exports.ErrorHandler = ErrorHandler;
244
- /**
245
- * Create a scoped error handler
246
- */
247
- function createErrorHandler(logger, context) {
248
- return new ErrorHandler(logger, context);
249
- }
250
- exports.createErrorHandler = createErrorHandler;
251
- //# sourceMappingURL=error-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Retry Utility
3
- *
4
- * Provides retry logic with exponential backoff for failed operations.
5
- * Used by services and API calls to handle transient failures gracefully.
6
- */
7
- export interface RetryOptions {
8
- maxRetries?: number;
9
- initialDelay?: number;
10
- maxDelay?: number;
11
- onRetry?: (attempt: number, error: Error) => void;
12
- }
13
- /**
14
- * Retry a function with exponential backoff
15
- *
16
- * @param fn - The async function to retry
17
- * @param options - Retry configuration options
18
- * @returns Promise that resolves with the function result or rejects after all retries exhausted
19
- *
20
- * @example
21
- * ```typescript
22
- * const result = await retryWithBackoff(
23
- * async () => await apiClient.fetchData(),
24
- * {
25
- * maxRetries: 3,
26
- * initialDelay: 1000,
27
- * onRetry: (attempt, error) => {
28
- * console.log(`Retry attempt ${attempt}: ${error.message}`);
29
- * },
30
- * },
31
- * );
32
- * ```
33
- */
34
- export declare function retryWithBackoff<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
35
- /**
36
- * Check if an error is retryable
37
- *
38
- * @param error - The error to check
39
- * @returns True if the error should be retried
40
- */
41
- export declare function isRetryableError(error: any): boolean;
42
- //# sourceMappingURL=retry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACpC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,YAAiB,GAC3B,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAcpD"}
@@ -1,70 +0,0 @@
1
- "use strict";
2
- /**
3
- * Retry Utility
4
- *
5
- * Provides retry logic with exponential backoff for failed operations.
6
- * Used by services and API calls to handle transient failures gracefully.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.isRetryableError = exports.retryWithBackoff = void 0;
10
- /**
11
- * Retry a function with exponential backoff
12
- *
13
- * @param fn - The async function to retry
14
- * @param options - Retry configuration options
15
- * @returns Promise that resolves with the function result or rejects after all retries exhausted
16
- *
17
- * @example
18
- * ```typescript
19
- * const result = await retryWithBackoff(
20
- * async () => await apiClient.fetchData(),
21
- * {
22
- * maxRetries: 3,
23
- * initialDelay: 1000,
24
- * onRetry: (attempt, error) => {
25
- * console.log(`Retry attempt ${attempt}: ${error.message}`);
26
- * },
27
- * },
28
- * );
29
- * ```
30
- */
31
- async function retryWithBackoff(fn, options = {}) {
32
- const { maxRetries = 3, initialDelay = 1000, maxDelay = 10000, onRetry, } = options;
33
- let lastError;
34
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
35
- try {
36
- return await fn();
37
- }
38
- catch (error) {
39
- lastError = error;
40
- if (attempt < maxRetries) {
41
- const delay = Math.min(initialDelay * Math.pow(2, attempt), maxDelay);
42
- onRetry?.(attempt + 1, lastError);
43
- await new Promise(resolve => setTimeout(resolve, delay));
44
- }
45
- }
46
- }
47
- throw lastError;
48
- }
49
- exports.retryWithBackoff = retryWithBackoff;
50
- /**
51
- * Check if an error is retryable
52
- *
53
- * @param error - The error to check
54
- * @returns True if the error should be retried
55
- */
56
- function isRetryableError(error) {
57
- // Network errors
58
- if (error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT' || error.code === 'ENOTFOUND') {
59
- return true;
60
- }
61
- // HTTP status codes that are retryable
62
- if (error.response?.status) {
63
- const status = error.response.status;
64
- // 408 Request Timeout, 429 Too Many Requests, 502-504 Gateway errors
65
- return status === 408 || status === 429 || (status >= 502 && status <= 504);
66
- }
67
- return false;
68
- }
69
- exports.isRetryableError = isRetryableError;
70
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/utils/retry.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AASH;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,gBAAgB,CAClC,EAAoB,EACpB,UAAwB,EAAE;IAE1B,MAAM,EACF,UAAU,GAAG,CAAC,EACd,YAAY,GAAG,IAAI,EACnB,QAAQ,GAAG,KAAK,EAChB,OAAO,GACV,GAAG,OAAO,CAAC;IAEZ,IAAI,SAAgB,CAAC;IAErB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE;QACpD,IAAI;YACA,OAAO,MAAM,EAAE,EAAE,CAAC;SACrB;QAAC,OAAO,KAAK,EAAE;YACZ,SAAS,GAAG,KAAc,CAAC;YAE3B,IAAI,OAAO,GAAG,UAAU,EAAE;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAClB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EACnC,QAAQ,CACX,CAAC;gBAEF,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;gBAClC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;aAC5D;SACJ;KACJ;IAED,MAAM,SAAU,CAAC;AACrB,CAAC;AAhCD,4CAgCC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,KAAU;IACvC,iBAAiB;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;QAC3F,OAAO,IAAI,CAAC;KACf;IAED,uCAAuC;IACvC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,qEAAqE;QACrE,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;KAC/E;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAdD,4CAcC"}