@mp-consulting/homebridge-daikin-cloud 1.5.1 → 1.6.0
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.
- package/README.md +40 -27
- package/config.schema.json +66 -12
- package/dist/src/accessories/air-conditioning-accessory.js +1 -1
- package/dist/src/accessories/air-conditioning-accessory.js.map +1 -1
- package/dist/src/accessories/altherma-accessory.js +1 -1
- package/dist/src/accessories/altherma-accessory.js.map +1 -1
- package/dist/src/accessories/base-accessory.d.ts +5 -4
- package/dist/src/accessories/base-accessory.d.ts.map +1 -1
- package/dist/src/accessories/base-accessory.js +9 -10
- package/dist/src/accessories/base-accessory.js.map +1 -1
- package/dist/src/api/daikin-api.d.ts +22 -6
- package/dist/src/api/daikin-api.d.ts.map +1 -1
- package/dist/src/api/daikin-api.js +49 -23
- package/dist/src/api/daikin-api.js.map +1 -1
- package/dist/src/api/daikin-controller.d.ts +4 -48
- package/dist/src/api/daikin-controller.d.ts.map +1 -1
- package/dist/src/api/daikin-controller.js +14 -84
- package/dist/src/api/daikin-controller.js.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.d.ts +11 -40
- package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.js +36 -160
- package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
- package/dist/src/api/daikin-oauth.d.ts +10 -37
- package/dist/src/api/daikin-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-oauth.js +36 -166
- package/dist/src/api/daikin-oauth.js.map +1 -1
- package/dist/src/api/daikin-schemas.d.ts +20 -22
- package/dist/src/api/daikin-schemas.d.ts.map +1 -1
- package/dist/src/api/daikin-schemas.js +17 -49
- package/dist/src/api/daikin-schemas.js.map +1 -1
- package/dist/src/api/daikin-types.d.ts +11 -23
- package/dist/src/api/daikin-types.d.ts.map +1 -1
- package/dist/src/api/daikin-types.js.map +1 -1
- package/dist/src/api/daikin-websocket.d.ts +4 -5
- package/dist/src/api/daikin-websocket.d.ts.map +1 -1
- package/dist/src/api/daikin-websocket.js +62 -34
- package/dist/src/api/daikin-websocket.js.map +1 -1
- package/dist/src/api/http-defaults.d.ts +3 -2
- package/dist/src/api/http-defaults.d.ts.map +1 -1
- package/dist/src/api/http-defaults.js.map +1 -1
- package/dist/src/api/http-transport.d.ts +14 -2
- package/dist/src/api/http-transport.d.ts.map +1 -1
- package/dist/src/api/http-transport.js +32 -9
- package/dist/src/api/http-transport.js.map +1 -1
- package/dist/src/api/token-client.d.ts +82 -0
- package/dist/src/api/token-client.d.ts.map +1 -0
- package/dist/src/api/token-client.js +188 -0
- package/dist/src/api/token-client.js.map +1 -0
- package/dist/src/api/token-storage.d.ts +6 -0
- package/dist/src/api/token-storage.d.ts.map +1 -1
- package/dist/src/api/token-storage.js +27 -1
- package/dist/src/api/token-storage.js.map +1 -1
- package/dist/src/config/config-manager.d.ts +69 -125
- package/dist/src/config/config-manager.d.ts.map +1 -1
- package/dist/src/config/config-manager.js +288 -225
- package/dist/src/config/config-manager.js.map +1 -1
- package/dist/src/constants/api.constants.d.ts +6 -0
- package/dist/src/constants/api.constants.d.ts.map +1 -1
- package/dist/src/constants/api.constants.js +7 -1
- package/dist/src/constants/api.constants.js.map +1 -1
- package/dist/src/constants/auth.constants.d.ts +11 -0
- package/dist/src/constants/auth.constants.d.ts.map +1 -1
- package/dist/src/constants/auth.constants.js +12 -1
- package/dist/src/constants/auth.constants.js.map +1 -1
- package/dist/src/constants/device.constants.d.ts +1 -7
- package/dist/src/constants/device.constants.d.ts.map +1 -1
- package/dist/src/constants/device.constants.js +2 -11
- package/dist/src/constants/device.constants.js.map +1 -1
- package/dist/src/constants/time.constants.d.ts +0 -2
- package/dist/src/constants/time.constants.d.ts.map +1 -1
- package/dist/src/constants/time.constants.js +1 -3
- package/dist/src/constants/time.constants.js.map +1 -1
- package/dist/src/device/accessory-factory.d.ts +0 -5
- package/dist/src/device/accessory-factory.d.ts.map +1 -1
- package/dist/src/device/accessory-factory.js +0 -7
- package/dist/src/device/accessory-factory.js.map +1 -1
- package/dist/src/device/capability-detector.d.ts +9 -1
- package/dist/src/device/capability-detector.d.ts.map +1 -1
- package/dist/src/device/capability-detector.js +32 -28
- package/dist/src/device/capability-detector.js.map +1 -1
- package/dist/src/device/capability-docs.d.ts.map +1 -1
- package/dist/src/device/capability-docs.js +3 -0
- package/dist/src/device/capability-docs.js.map +1 -1
- package/dist/src/device/data-paths.d.ts +18 -0
- package/dist/src/device/data-paths.d.ts.map +1 -0
- package/dist/src/device/data-paths.js +20 -0
- package/dist/src/device/data-paths.js.map +1 -0
- package/dist/src/device/profiles/device-profile.d.ts +0 -5
- package/dist/src/device/profiles/device-profile.d.ts.map +1 -1
- package/dist/src/device/profiles/device-profile.js +0 -21
- package/dist/src/device/profiles/device-profile.js.map +1 -1
- package/dist/src/features/base-feature.d.ts +53 -9
- package/dist/src/features/base-feature.d.ts.map +1 -1
- package/dist/src/features/base-feature.js +93 -40
- package/dist/src/features/base-feature.js.map +1 -1
- package/dist/src/features/feature-manager.d.ts +27 -15
- package/dist/src/features/feature-manager.d.ts.map +1 -1
- package/dist/src/features/feature-manager.js +27 -24
- package/dist/src/features/feature-manager.js.map +1 -1
- package/dist/src/features/index.d.ts +1 -0
- package/dist/src/features/index.d.ts.map +1 -1
- package/dist/src/features/index.js +1 -0
- package/dist/src/features/index.js.map +1 -1
- package/dist/src/features/modes/auto-fan-mode.feature.d.ts +16 -10
- package/dist/src/features/modes/auto-fan-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/auto-fan-mode.feature.js +16 -40
- package/dist/src/features/modes/auto-fan-mode.feature.js.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.js +11 -30
- package/dist/src/features/modes/dry-operation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/econo-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.js +11 -31
- package/dist/src/features/modes/econo-mode.feature.js.map +1 -1
- package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/fan-only-operation-mode.feature.js +11 -30
- package/dist/src/features/modes/fan-only-operation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/firmware-update.feature.d.ts +7 -6
- package/dist/src/features/modes/firmware-update.feature.d.ts.map +1 -1
- package/dist/src/features/modes/firmware-update.feature.js +15 -22
- package/dist/src/features/modes/firmware-update.feature.js.map +1 -1
- package/dist/src/features/modes/holiday-mode.feature.d.ts +2 -1
- package/dist/src/features/modes/holiday-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/holiday-mode.feature.js +5 -15
- package/dist/src/features/modes/holiday-mode.feature.js.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts +15 -12
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.js +15 -39
- package/dist/src/features/modes/indoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/oscillation-mode.feature.d.ts +5 -6
- package/dist/src/features/modes/oscillation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/oscillation-mode.feature.js +14 -36
- package/dist/src/features/modes/oscillation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.js +11 -31
- package/dist/src/features/modes/outdoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.d.ts +14 -10
- package/dist/src/features/modes/powerful-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.js +13 -32
- package/dist/src/features/modes/powerful-mode.feature.js.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/streamer-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.js +11 -31
- package/dist/src/features/modes/streamer-mode.feature.js.map +1 -1
- package/dist/src/features/on-off-data-point-feature.d.ts +43 -0
- package/dist/src/features/on-off-data-point-feature.d.ts.map +1 -0
- package/dist/src/features/on-off-data-point-feature.js +49 -0
- package/dist/src/features/on-off-data-point-feature.js.map +1 -0
- package/dist/src/platform.d.ts +56 -9
- package/dist/src/platform.d.ts.map +1 -1
- package/dist/src/platform.js +248 -128
- package/dist/src/platform.js.map +1 -1
- package/dist/src/services/climate-control/fan-speed.d.ts +45 -0
- package/dist/src/services/climate-control/fan-speed.d.ts.map +1 -0
- package/dist/src/services/climate-control/fan-speed.js +104 -0
- package/dist/src/services/climate-control/fan-speed.js.map +1 -0
- package/dist/src/services/climate-control/separate-fan.service.d.ts +45 -0
- package/dist/src/services/climate-control/separate-fan.service.d.ts.map +1 -0
- package/dist/src/services/climate-control/separate-fan.service.js +82 -0
- package/dist/src/services/climate-control/separate-fan.service.js.map +1 -0
- package/dist/src/services/climate-control/setpoint-resolver.d.ts +68 -0
- package/dist/src/services/climate-control/setpoint-resolver.d.ts.map +1 -0
- package/dist/src/services/climate-control/setpoint-resolver.js +170 -0
- package/dist/src/services/climate-control/setpoint-resolver.js.map +1 -0
- package/dist/src/services/climate-control/swing-controller.d.ts +28 -0
- package/dist/src/services/climate-control/swing-controller.d.ts.map +1 -0
- package/dist/src/services/climate-control/swing-controller.js +65 -0
- package/dist/src/services/climate-control/swing-controller.js.map +1 -0
- package/dist/src/services/climate-control.service.d.ts +39 -48
- package/dist/src/services/climate-control.service.d.ts.map +1 -1
- package/dist/src/services/climate-control.service.js +223 -554
- package/dist/src/services/climate-control.service.js.map +1 -1
- package/dist/src/services/hot-water-tank.service.d.ts +17 -8
- package/dist/src/services/hot-water-tank.service.d.ts.map +1 -1
- package/dist/src/services/hot-water-tank.service.js +102 -157
- package/dist/src/services/hot-water-tank.service.js.map +1 -1
- package/dist/src/types/daikin-enums.d.ts +0 -5
- package/dist/src/types/daikin-enums.d.ts.map +1 -1
- package/dist/src/types/daikin-enums.js +1 -7
- package/dist/src/types/daikin-enums.js.map +1 -1
- package/dist/src/types/device-capabilities.d.ts +1 -0
- package/dist/src/types/device-capabilities.d.ts.map +1 -1
- package/dist/src/utils/errors.d.ts +9 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +25 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/hap-write.d.ts +22 -0
- package/dist/src/utils/hap-write.d.ts.map +1 -0
- package/dist/src/utils/hap-write.js +33 -0
- package/dist/src/utils/hap-write.js.map +1 -0
- package/dist/src/utils/sleep.d.ts +5 -0
- package/dist/src/utils/sleep.d.ts.map +1 -0
- package/dist/src/utils/sleep.js +10 -0
- package/dist/src/utils/sleep.js.map +1 -0
- package/homebridge-ui/README.md +25 -2
- package/homebridge-ui/public/index.html +19 -17
- package/homebridge-ui/public/lib/kit.css +1 -1
- package/homebridge-ui/public/script.js +95 -32
- package/homebridge-ui/public/styles.css +109 -0
- package/homebridge-ui/server.js +321 -125
- package/package.json +14 -15
- package/dist/src/utils/log-context.d.ts +0 -105
- package/dist/src/utils/log-context.d.ts.map +0 -1
- package/dist/src/utils/log-context.js +0 -206
- package/dist/src/utils/log-context.js.map +0 -1
- package/dist/src/utils/update-mapper.d.ts +0 -59
- package/dist/src/utils/update-mapper.d.ts.map +0 -1
- package/dist/src/utils/update-mapper.js +0 -192
- package/dist/src/utils/update-mapper.js.map +0 -1
|
@@ -14,11 +14,16 @@ const ws_1 = __importDefault(require("ws"));
|
|
|
14
14
|
const node_events_1 = require("node:events");
|
|
15
15
|
const constants_1 = require("../constants");
|
|
16
16
|
const http_defaults_1 = require("./http-defaults");
|
|
17
|
+
const errors_1 = require("../utils/errors");
|
|
17
18
|
// Reconnection settings
|
|
18
19
|
const INITIAL_RECONNECT_DELAY = 1000; // 1 second
|
|
19
20
|
const MAX_RECONNECT_DELAY = 300000; // 5 minutes
|
|
20
21
|
const RECONNECT_BACKOFF_MULTIPLIER = 2;
|
|
21
22
|
const MAX_RECONNECT_ATTEMPTS = 50; // Give up after 50 consecutive failures
|
|
23
|
+
const RECONNECT_JITTER_RATIO = 0.25; // ±25% randomisation so many clients don't reconnect in lockstep
|
|
24
|
+
// A connection must stay open this long before the backoff is reset; a server that accepts
|
|
25
|
+
// and immediately drops the socket must not cause a tight reconnect loop.
|
|
26
|
+
const STABLE_CONNECTION_MS = 60000;
|
|
22
27
|
// Heartbeat settings
|
|
23
28
|
const PING_INTERVAL = 30000; // 30 seconds
|
|
24
29
|
const PONG_TIMEOUT = 10000; // 10 seconds to receive pong
|
|
@@ -44,6 +49,7 @@ class DaikinWebSocket extends node_events_1.EventEmitter {
|
|
|
44
49
|
pongTimeout = null;
|
|
45
50
|
shouldReconnect = true;
|
|
46
51
|
connectionAttempts = 0;
|
|
52
|
+
stableConnectionTimeout = null;
|
|
47
53
|
constructor(oauth, onError) {
|
|
48
54
|
super();
|
|
49
55
|
this.oauth = oauth;
|
|
@@ -97,7 +103,7 @@ class DaikinWebSocket extends node_events_1.EventEmitter {
|
|
|
97
103
|
this.setupEventHandlers();
|
|
98
104
|
}
|
|
99
105
|
catch (error) {
|
|
100
|
-
this.handleError(error);
|
|
106
|
+
this.handleError(error instanceof Error ? error : new Error((0, errors_1.toMessage)(error)));
|
|
101
107
|
this.scheduleReconnect();
|
|
102
108
|
}
|
|
103
109
|
}
|
|
@@ -110,8 +116,12 @@ class DaikinWebSocket extends node_events_1.EventEmitter {
|
|
|
110
116
|
}
|
|
111
117
|
this.ws.on('open', () => {
|
|
112
118
|
this.state = 'connected';
|
|
113
|
-
this.
|
|
114
|
-
this.
|
|
119
|
+
this.clearStableConnectionTimeout();
|
|
120
|
+
this.stableConnectionTimeout = setTimeout(() => {
|
|
121
|
+
this.stableConnectionTimeout = null;
|
|
122
|
+
this.reconnectDelay = INITIAL_RECONNECT_DELAY;
|
|
123
|
+
this.connectionAttempts = 0;
|
|
124
|
+
}, STABLE_CONNECTION_MS);
|
|
115
125
|
this.startHeartbeat();
|
|
116
126
|
this.emit('connected');
|
|
117
127
|
});
|
|
@@ -129,40 +139,41 @@ class DaikinWebSocket extends node_events_1.EventEmitter {
|
|
|
129
139
|
});
|
|
130
140
|
}
|
|
131
141
|
/**
|
|
132
|
-
* Handle incoming WebSocket messages
|
|
142
|
+
* Handle incoming WebSocket messages. Anything that is not valid JSON or does
|
|
143
|
+
* not have the minimal expected shape is ignored.
|
|
133
144
|
*/
|
|
134
145
|
handleMessage(data) {
|
|
146
|
+
let message;
|
|
135
147
|
try {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
148
|
+
message = JSON.parse(data.toString());
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (!isRecord(message) || !isRecord(message.data) || typeof message.data.name !== 'string') {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (message.event === 'gateway:managementpoint:characteristic') {
|
|
157
|
+
if (typeof message.gatewayDeviceId !== 'string' || typeof message.embeddedId !== 'string') {
|
|
140
158
|
return;
|
|
141
159
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
data: event.data,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
// Handle group characteristic updates (alternative event format)
|
|
154
|
-
if (message.event === 'group:characteristic') {
|
|
155
|
-
const event = message;
|
|
156
|
-
this.emit('group_update', {
|
|
157
|
-
groupId: event.groupId,
|
|
158
|
-
siteId: event.siteId,
|
|
159
|
-
characteristicName: event.data.name,
|
|
160
|
-
data: event.data,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
160
|
+
const event = message;
|
|
161
|
+
this.emit('device_update', {
|
|
162
|
+
deviceId: event.gatewayDeviceId,
|
|
163
|
+
embeddedId: event.embeddedId,
|
|
164
|
+
managementPointId: event.managementPointId,
|
|
165
|
+
characteristicName: event.data.name,
|
|
166
|
+
data: event.data,
|
|
167
|
+
});
|
|
163
168
|
}
|
|
164
|
-
|
|
165
|
-
|
|
169
|
+
else if (message.event === 'group:characteristic') {
|
|
170
|
+
const event = message;
|
|
171
|
+
this.emit('group_update', {
|
|
172
|
+
groupId: event.groupId,
|
|
173
|
+
siteId: event.siteId,
|
|
174
|
+
characteristicName: event.data.name,
|
|
175
|
+
data: event.data,
|
|
176
|
+
});
|
|
166
177
|
}
|
|
167
178
|
}
|
|
168
179
|
/**
|
|
@@ -204,16 +215,17 @@ class DaikinWebSocket extends node_events_1.EventEmitter {
|
|
|
204
215
|
this.emit('disconnected', { reconnecting: false });
|
|
205
216
|
return;
|
|
206
217
|
}
|
|
218
|
+
const jitter = 1 + (Math.random() * 2 - 1) * RECONNECT_JITTER_RATIO;
|
|
207
219
|
this.reconnectTimeout = setTimeout(async () => {
|
|
208
220
|
this.reconnectTimeout = null;
|
|
209
221
|
try {
|
|
210
222
|
await this.establishConnection();
|
|
211
223
|
}
|
|
212
224
|
catch (error) {
|
|
213
|
-
this.handleError(error);
|
|
225
|
+
this.handleError(error instanceof Error ? error : new Error((0, errors_1.toMessage)(error)));
|
|
214
226
|
this.scheduleReconnect();
|
|
215
227
|
}
|
|
216
|
-
}, this.reconnectDelay);
|
|
228
|
+
}, Math.round(this.reconnectDelay * jitter));
|
|
217
229
|
// Exponential backoff with max delay
|
|
218
230
|
this.reconnectDelay = Math.min(this.reconnectDelay * RECONNECT_BACKOFF_MULTIPLIER, MAX_RECONNECT_DELAY);
|
|
219
231
|
}
|
|
@@ -260,18 +272,31 @@ class DaikinWebSocket extends node_events_1.EventEmitter {
|
|
|
260
272
|
this.pongTimeout = null;
|
|
261
273
|
}
|
|
262
274
|
}
|
|
275
|
+
clearStableConnectionTimeout() {
|
|
276
|
+
if (this.stableConnectionTimeout) {
|
|
277
|
+
clearTimeout(this.stableConnectionTimeout);
|
|
278
|
+
this.stableConnectionTimeout = null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
263
281
|
/**
|
|
264
282
|
* Clean up resources
|
|
265
283
|
*/
|
|
266
284
|
cleanup() {
|
|
267
285
|
this.stopHeartbeat();
|
|
286
|
+
this.clearStableConnectionTimeout();
|
|
268
287
|
if (this.reconnectTimeout) {
|
|
269
288
|
clearTimeout(this.reconnectTimeout);
|
|
270
289
|
this.reconnectTimeout = null;
|
|
271
290
|
}
|
|
272
291
|
if (this.ws) {
|
|
273
292
|
this.ws.removeAllListeners();
|
|
274
|
-
|
|
293
|
+
// Closing a CONNECTING socket aborts the handshake and emits 'error' asynchronously;
|
|
294
|
+
// without a listener that would be an uncaught exception.
|
|
295
|
+
this.ws.on('error', () => { });
|
|
296
|
+
if (this.ws.readyState === ws_1.default.CONNECTING) {
|
|
297
|
+
this.ws.terminate();
|
|
298
|
+
}
|
|
299
|
+
else if (this.ws.readyState === ws_1.default.OPEN) {
|
|
275
300
|
this.ws.close();
|
|
276
301
|
}
|
|
277
302
|
this.ws = null;
|
|
@@ -279,4 +304,7 @@ class DaikinWebSocket extends node_events_1.EventEmitter {
|
|
|
279
304
|
}
|
|
280
305
|
}
|
|
281
306
|
exports.DaikinWebSocket = DaikinWebSocket;
|
|
307
|
+
function isRecord(value) {
|
|
308
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
309
|
+
}
|
|
282
310
|
//# sourceMappingURL=daikin-websocket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daikin-websocket.js","sourceRoot":"","sources":["../../../src/api/daikin-websocket.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,4CAA2B;AAC3B,6CAA2C;AAE3C,4CAAoD;AACpD,mDAAmD;
|
|
1
|
+
{"version":3,"file":"daikin-websocket.js","sourceRoot":"","sources":["../../../src/api/daikin-websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,9 +22,10 @@ export declare const DAIKIN_TLS_CIPHERS: string;
|
|
|
22
22
|
* Apply the shared User-Agent and TLS fingerprint defaults to the options of
|
|
23
23
|
* an https.request (or ws) call. Explicit options and headers win.
|
|
24
24
|
*/
|
|
25
|
-
export declare function withHttpDefaults<T extends {
|
|
25
|
+
export declare function withHttpDefaults<T extends object>(options: T & {
|
|
26
26
|
headers?: OutgoingHttpHeaders;
|
|
27
|
-
}
|
|
27
|
+
}): T & {
|
|
28
|
+
headers: OutgoingHttpHeaders;
|
|
28
29
|
autoSelectFamily: boolean;
|
|
29
30
|
ciphers: string;
|
|
30
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-defaults.d.ts","sourceRoot":"","sources":["../../../src/api/http-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAGhD,eAAO,MAAM,iBAAiB,QAAmD,CAAC;AAClF,eAAO,MAAM,kBAAkB,QAA8C,CAAC;AAE9E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"http-defaults.d.ts","sourceRoot":"","sources":["../../../src/api/http-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAGhD,eAAO,MAAM,iBAAiB,QAAmD,CAAC;AAClF,eAAO,MAAM,kBAAkB,QAA8C,CAAC;AAE9E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,OAAO,EAAE,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAE,GAC7C,CAAC,GAAG;IAAE,OAAO,EAAE,mBAAmB,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAYlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-defaults.js","sourceRoot":"","sources":["../../../src/api/http-defaults.ts"],"names":[],"mappings":";;;AA2BA,4CAcC;AAtBD,0EAA0E;AAC7D,QAAA,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,eAAe,CAAC;AACrE,QAAA,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,CAAC;AAE9E;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,
|
|
1
|
+
{"version":3,"file":"http-defaults.js","sourceRoot":"","sources":["../../../src/api/http-defaults.ts"],"names":[],"mappings":";;;AA2BA,4CAcC;AAtBD,0EAA0E;AAC7D,QAAA,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,eAAe,CAAC;AACrE,QAAA,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,CAAC;AAE9E;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,OAA8C;IAE9C,OAAO;QACL,mEAAmE;QACnE,2DAA2D;QAC3D,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,0BAAkB;QAC3B,GAAG,OAAO;QACV,OAAO,EAAE;YACP,YAAY,EAAE,yBAAiB;YAC/B,GAAG,OAAO,CAAC,OAAO;SACnB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -12,8 +12,10 @@
|
|
|
12
12
|
*
|
|
13
13
|
* The curl transport keeps secrets off the command line: URL, headers and
|
|
14
14
|
* body travel via a 0600 config file in a private temp dir (argv is visible
|
|
15
|
-
* to every process on the host via ps). curl
|
|
16
|
-
*
|
|
15
|
+
* to every process on the host via ps). curl runs with -q so the user's
|
|
16
|
+
* ~/.curlrc cannot inject options, and with proto "=https" so it can never
|
|
17
|
+
* fall back to plain HTTP. curl exit codes are mapped onto Node-style error
|
|
18
|
+
* codes so the callers' retry logic works unchanged.
|
|
17
19
|
*/
|
|
18
20
|
export type HttpTransportMode = 'node' | 'curl';
|
|
19
21
|
export interface TransportOptions {
|
|
@@ -32,6 +34,16 @@ export declare function getHttpTransportMode(): HttpTransportMode;
|
|
|
32
34
|
* Perform an HTTPS request through the configured transport.
|
|
33
35
|
*/
|
|
34
36
|
export declare function httpRequest(url: string, options: TransportOptions, postData?: string): Promise<TransportResponse>;
|
|
37
|
+
/**
|
|
38
|
+
* Escape a value for a double-quoted curl config entry.
|
|
39
|
+
*
|
|
40
|
+
* A config entry ends at the line break, so a CR/LF in a value (e.g. from a
|
|
41
|
+
* cloud-supplied id interpolated into a URL or header) would let it inject
|
|
42
|
+
* arbitrary curl options such as `output` or `upload-file`. NUL truncates the
|
|
43
|
+
* entry. Such values are never legitimate in a URL or header, so reject them.
|
|
44
|
+
*/
|
|
45
|
+
export declare function curlQuote(value: string): string;
|
|
46
|
+
export declare function buildCurlConfig(url: string, options: TransportOptions, bodyFile: string | undefined): string;
|
|
35
47
|
/**
|
|
36
48
|
* Parse `curl --include` output: one or more header blocks (interim 1xx or
|
|
37
49
|
* proxy CONNECT responses precede the final one) followed by the body.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/api/http-transport.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/api/http-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,CAMhF;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAgED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAsBR;AA0DD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAgBhE"}
|
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
*
|
|
14
14
|
* The curl transport keeps secrets off the command line: URL, headers and
|
|
15
15
|
* body travel via a 0600 config file in a private temp dir (argv is visible
|
|
16
|
-
* to every process on the host via ps). curl
|
|
17
|
-
*
|
|
16
|
+
* to every process on the host via ps). curl runs with -q so the user's
|
|
17
|
+
* ~/.curlrc cannot inject options, and with proto "=https" so it can never
|
|
18
|
+
* fall back to plain HTTP. curl exit codes are mapped onto Node-style error
|
|
19
|
+
* codes so the callers' retry logic works unchanged.
|
|
18
20
|
*/
|
|
19
21
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
22
|
if (k2 === undefined) k2 = k;
|
|
@@ -53,6 +55,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
53
55
|
exports.configureHttpTransport = configureHttpTransport;
|
|
54
56
|
exports.getHttpTransportMode = getHttpTransportMode;
|
|
55
57
|
exports.httpRequest = httpRequest;
|
|
58
|
+
exports.curlQuote = curlQuote;
|
|
59
|
+
exports.buildCurlConfig = buildCurlConfig;
|
|
56
60
|
exports.parseCurlResponse = parseCurlResponse;
|
|
57
61
|
const https = __importStar(require("node:https"));
|
|
58
62
|
const fs = __importStar(require("node:fs"));
|
|
@@ -135,13 +139,25 @@ const CURL_EXIT_CODES = {
|
|
|
135
139
|
55: 'EPIPE', // send failure
|
|
136
140
|
56: 'ECONNRESET', // receive failure
|
|
137
141
|
};
|
|
138
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* Escape a value for a double-quoted curl config entry.
|
|
144
|
+
*
|
|
145
|
+
* A config entry ends at the line break, so a CR/LF in a value (e.g. from a
|
|
146
|
+
* cloud-supplied id interpolated into a URL or header) would let it inject
|
|
147
|
+
* arbitrary curl options such as `output` or `upload-file`. NUL truncates the
|
|
148
|
+
* entry. Such values are never legitimate in a URL or header, so reject them.
|
|
149
|
+
*/
|
|
139
150
|
function curlQuote(value) {
|
|
151
|
+
if (/[\r\n\0]/.test(value)) {
|
|
152
|
+
throw new Error('Refusing to pass a value containing CR, LF or NUL to curl');
|
|
153
|
+
}
|
|
140
154
|
return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
141
155
|
}
|
|
142
156
|
function buildCurlConfig(url, options, bodyFile) {
|
|
143
157
|
const timeoutSecs = Math.ceil((options.timeoutMs ?? constants_1.HTTP_REQUEST_TIMEOUT_MS) / 1000);
|
|
144
158
|
const lines = [
|
|
159
|
+
// Only ever speak HTTPS, whatever the URL or a redirect says
|
|
160
|
+
'proto = "=https"',
|
|
145
161
|
`url = ${curlQuote(url)}`,
|
|
146
162
|
`request = ${curlQuote(options.method)}`,
|
|
147
163
|
`max-time = ${timeoutSecs}`,
|
|
@@ -163,15 +179,22 @@ function buildCurlConfig(url, options, bodyFile) {
|
|
|
163
179
|
function curlRequest(url, options, postData) {
|
|
164
180
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'daikin-curl-'));
|
|
165
181
|
const configFile = path.join(tempDir, 'request.conf');
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
182
|
+
try {
|
|
183
|
+
let bodyFile;
|
|
184
|
+
if (postData !== undefined) {
|
|
185
|
+
bodyFile = path.join(tempDir, 'body');
|
|
186
|
+
fs.writeFileSync(bodyFile, postData, { mode: 0o600 });
|
|
187
|
+
}
|
|
188
|
+
fs.writeFileSync(configFile, buildCurlConfig(url, options, bodyFile), { mode: 0o600 });
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
192
|
+
return Promise.reject(error);
|
|
170
193
|
}
|
|
171
|
-
fs.writeFileSync(configFile, buildCurlConfig(url, options, bodyFile), { mode: 0o600 });
|
|
172
194
|
const timeoutMs = (options.timeoutMs ?? constants_1.HTTP_REQUEST_TIMEOUT_MS) + 5000;
|
|
173
195
|
return new Promise((resolve, reject) => {
|
|
174
|
-
|
|
196
|
+
// -q must come first: it stops curl from reading ~/.curlrc
|
|
197
|
+
(0, node_child_process_1.execFile)('curl', ['-q', '--config', configFile], { timeout: timeoutMs, maxBuffer: 10 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
175
198
|
if (error) {
|
|
176
199
|
reject(describeCurlError(error, stderr));
|
|
177
200
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../../src/api/http-transport.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../../src/api/http-transport.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BH,wDAMC;AAED,oDAEC;AAKD,kCASC;AAwED,8BAKC;AAED,0CA0BC;AA+DD,8CAgBC;AA3OD,kDAAoC;AACpC,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAClC,2DAA8C;AAC9C,mDAAmD;AACnD,4CAAuD;AAgBvD,4EAA4E;AAC5E,2EAA2E;AAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAsD,CAAC;AACpF,IAAI,cAAc,GAAsB,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAE9E,SAAgB,sBAAsB,CAAC,IAAmC;IACxE,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/C,cAAc,GAAG,QAAQ,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,cAAc,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACrD,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,GAAW,EACX,OAAyB,EACzB,QAAiB;IAEjB,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,WAAW,CAClB,GAAW,EACX,OAAyB,EACzB,QAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,mCAAuB,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAA,gCAAgB,EAAC;YAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;YACrC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE;gBACP,GAAG,OAAO,CAAC,OAAO;gBAClB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClF;SACF,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5C,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YACzC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC;gBAC1B,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;gBAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE;YAC7B,MAAM,YAAY,GAA0B,IAAI,KAAK,CAAC,qBAAqB,SAAS,IAAI,CAAC,CAAC;YAC1F,YAAY,CAAC,IAAI,GAAG,WAAW,CAAC;YAChC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QACD,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,iFAAiF;AACjF,MAAM,eAAe,GAA2B;IAC9C,CAAC,EAAE,WAAW,EAAK,yBAAyB;IAC5C,CAAC,EAAE,cAAc,EAAE,oBAAoB;IACvC,EAAE,EAAE,WAAW,EAAI,sBAAsB;IACzC,EAAE,EAAE,YAAY,EAAG,oBAAoB;IACvC,EAAE,EAAE,YAAY,EAAG,0BAA0B;IAC7C,EAAE,EAAE,OAAO,EAAQ,eAAe;IAClC,EAAE,EAAE,YAAY,EAAG,kBAAkB;CACtC,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,KAAa;IACrC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAClE,CAAC;AAED,SAAgB,eAAe,CAC7B,GAAW,EACX,OAAyB,EACzB,QAA4B;IAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,mCAAuB,CAAC,GAAG,IAAI,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG;QACZ,6DAA6D;QAC7D,kBAAkB;QAClB,SAAS,SAAS,CAAC,GAAG,CAAC,EAAE;QACzB,aAAa,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACxC,cAAc,WAAW,EAAE;QAC3B,QAAQ;QACR,YAAY;QACZ,SAAS;KACV,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAA,gCAAgB,EAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACxG,4EAA4E;QAC5E,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,gBAAgB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAClB,GAAW,EACX,OAAyB,EACzB,QAAiB;IAEjB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,IAAI,QAA4B,CAAC;QACjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACtC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,mCAAuB,CAAC,GAAG,IAAI,CAAC;IACxE,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxD,2DAA2D;QAC3D,IAAA,6BAAQ,EAAC,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EAClG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,iBAAiB,CAAC,KAA2D,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC/F,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,UAAU,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAyD,EACzD,MAAc;IAEd,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,MAAM,CAClB,IAAI,KAAK,CAAC,kFAAkF,CAAC,EAC7F,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,GAAG,GAA0B,IAAI,KAAK,CAC1C,cAAc,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CACvG,CAAC;IACF,GAAG,CAAC,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5F,IAAI,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAChF,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACjF,SAAS,CAAC,mDAAmD;QAC/D,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,OAAO,GAAkD,EAAE,CAAC;IAClE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Client
|
|
3
|
+
*
|
|
4
|
+
* Token lifecycle shared by both OAuth flows (Developer Portal and Mobile
|
|
5
|
+
* App): persistence to the token file, expiry checks with a refresh buffer,
|
|
6
|
+
* single-flight refresh, and strict parsing of token endpoint responses.
|
|
7
|
+
*/
|
|
8
|
+
import type { OAuthProvider, TokenSet } from './daikin-types';
|
|
9
|
+
import type { TransportResponse } from './http-transport';
|
|
10
|
+
type ResponseLike = Pick<TransportResponse, 'statusCode' | 'body'>;
|
|
11
|
+
/**
|
|
12
|
+
* Return a copy of the token set with `expires_at` derived from `expires_in`
|
|
13
|
+
* when the server only sent the relative lifetime.
|
|
14
|
+
*/
|
|
15
|
+
export declare function withExpiresAt(tokenSet: TokenSet): TokenSet;
|
|
16
|
+
/**
|
|
17
|
+
* Whether the token is expired or expires within TOKEN_EXPIRY_BUFFER_SECONDS.
|
|
18
|
+
* A token without `expires_at` is treated as expired.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isTokenExpiring(tokenSet: TokenSet): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Parse a JSON response body, reporting the endpoint and status instead of a
|
|
23
|
+
* bare "Unexpected token <" when a proxy/WAF answers with HTML or nothing.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseJsonBody(response: ResponseLike, url: string, context: string): unknown;
|
|
26
|
+
/**
|
|
27
|
+
* Validate a token endpoint response: OAuth error bodies, non-2xx statuses and
|
|
28
|
+
* malformed token sets all become errors with a readable message. The message
|
|
29
|
+
* keeps the OAuth error code (e.g. `invalid_grant`), which callers match on.
|
|
30
|
+
* Token values are never included.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseTokenResponse(response: ResponseLike, url: string, context: string): TokenSet;
|
|
33
|
+
/**
|
|
34
|
+
* Base class holding the current token set and its refresh logic. Subclasses
|
|
35
|
+
* implement only the grant-specific refresh request.
|
|
36
|
+
*/
|
|
37
|
+
export declare abstract class TokenClient implements OAuthProvider {
|
|
38
|
+
private readonly tokenFilePath;
|
|
39
|
+
private readonly onTokenUpdate?;
|
|
40
|
+
private readonly onError?;
|
|
41
|
+
protected tokenSet: TokenSet | null;
|
|
42
|
+
private refreshPromise;
|
|
43
|
+
protected constructor(tokenFilePath: string, onTokenUpdate?: ((tokenSet: TokenSet) => void) | undefined, onError?: ((error: Error) => void) | undefined);
|
|
44
|
+
/**
|
|
45
|
+
* Exchange a refresh token for a new token set at the provider.
|
|
46
|
+
*/
|
|
47
|
+
protected abstract requestTokenRefresh(refreshToken: string): Promise<TokenSet>;
|
|
48
|
+
/**
|
|
49
|
+
* Refresh the access token. Concurrent callers share one in-flight request;
|
|
50
|
+
* a failed refresh is not cached, so the next call retries.
|
|
51
|
+
*/
|
|
52
|
+
refreshToken(): Promise<TokenSet>;
|
|
53
|
+
/**
|
|
54
|
+
* Get a valid access token, refreshing if necessary
|
|
55
|
+
*/
|
|
56
|
+
getAccessToken(): Promise<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Check if we have a token (it may still need a refresh)
|
|
59
|
+
*/
|
|
60
|
+
isAuthenticated(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get token expiration date
|
|
63
|
+
*/
|
|
64
|
+
getTokenExpiration(): Date | null;
|
|
65
|
+
/**
|
|
66
|
+
* Get current token set (for status display)
|
|
67
|
+
*/
|
|
68
|
+
getTokenSet(): TokenSet | null;
|
|
69
|
+
/**
|
|
70
|
+
* Forget the current tokens and delete the token file
|
|
71
|
+
*/
|
|
72
|
+
clearTokens(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Store a new token set (in memory and on disk) and notify listeners.
|
|
75
|
+
* Returns the stored set, with `expires_at` filled in.
|
|
76
|
+
*/
|
|
77
|
+
protected setTokenSet(tokenSet: TokenSet): TokenSet;
|
|
78
|
+
private loadFromFile;
|
|
79
|
+
private saveToFile;
|
|
80
|
+
}
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=token-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-client.d.ts","sourceRoot":"","sources":["../../../src/api/token-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAM1D,KAAK,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;AAMnE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAK1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE3D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAW3F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAwBjG;AAED;;;GAGG;AACH,8BAAsB,WAAY,YAAW,aAAa;IAKtD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAN3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAC3C,OAAO,CAAC,cAAc,CAAkC;IAExD,SAAS,aACU,aAAa,EAAE,MAAM,EACrB,aAAa,CAAC,GAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,aAAA,EAC5C,OAAO,CAAC,GAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,aAAA;IAKnD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAE/E;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC;IAkBjC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBvC;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,kBAAkB,IAAI,IAAI,GAAG,IAAI;IAOjC;;OAEG;IACH,WAAW,IAAI,QAAQ,GAAG,IAAI;IAI9B;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAQnD,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;CAOnB"}
|