@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.
- package/LICENSE +39 -1
- package/README.md +5 -3
- package/dist/src/accessories/air-conditioning-accessory.d.ts +2 -2
- package/dist/src/accessories/air-conditioning-accessory.d.ts.map +1 -1
- package/dist/src/accessories/air-conditioning-accessory.js.map +1 -1
- package/dist/src/accessories/altherma-accessory.d.ts +2 -2
- package/dist/src/accessories/altherma-accessory.d.ts.map +1 -1
- package/dist/src/accessories/altherma-accessory.js.map +1 -1
- package/dist/src/accessories/base-accessory.d.ts +6 -6
- package/dist/src/accessories/base-accessory.d.ts.map +1 -1
- package/dist/src/accessories/base-accessory.js +15 -15
- package/dist/src/accessories/base-accessory.js.map +1 -1
- package/dist/src/api/daikin-api.d.ts +26 -26
- package/dist/src/api/daikin-api.d.ts.map +1 -1
- package/dist/src/api/daikin-api.js +68 -42
- package/dist/src/api/daikin-api.js.map +1 -1
- package/dist/src/api/daikin-cloud.repository.d.ts.map +1 -1
- package/dist/src/api/daikin-cloud.repository.js +22 -14
- package/dist/src/api/daikin-cloud.repository.js.map +1 -1
- package/dist/src/api/daikin-controller.d.ts +41 -47
- package/dist/src/api/daikin-controller.d.ts.map +1 -1
- package/dist/src/api/daikin-controller.js +40 -64
- package/dist/src/api/daikin-controller.js.map +1 -1
- package/dist/src/api/daikin-device.d.ts +36 -31
- package/dist/src/api/daikin-device.d.ts.map +1 -1
- package/dist/src/api/daikin-device.js +45 -31
- package/dist/src/api/daikin-device.js.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.d.ts +20 -20
- package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.js +49 -44
- package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
- package/dist/src/api/daikin-oauth.d.ts +32 -32
- package/dist/src/api/daikin-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-oauth.js +64 -56
- package/dist/src/api/daikin-oauth.js.map +1 -1
- package/dist/src/api/daikin-schemas.d.ts +476 -351
- package/dist/src/api/daikin-schemas.d.ts.map +1 -1
- package/dist/src/api/daikin-schemas.js +11 -42
- package/dist/src/api/daikin-schemas.js.map +1 -1
- package/dist/src/api/daikin-types.d.ts +5 -1
- 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 +31 -32
- package/dist/src/api/daikin-websocket.d.ts.map +1 -1
- package/dist/src/api/daikin-websocket.js +55 -35
- package/dist/src/api/daikin-websocket.js.map +1 -1
- package/dist/src/api/index.d.ts +2 -1
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js +3 -1
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/token-storage.d.ts +21 -0
- package/dist/src/api/token-storage.d.ts.map +1 -0
- package/dist/src/api/token-storage.js +90 -0
- package/dist/src/api/token-storage.js.map +1 -0
- package/dist/src/config/config-manager.d.ts +33 -33
- package/dist/src/config/config-manager.d.ts.map +1 -1
- package/dist/src/config/config-manager.js +33 -33
- package/dist/src/config/config-manager.js.map +1 -1
- package/dist/src/constants/api.constants.d.ts +4 -0
- package/dist/src/constants/api.constants.d.ts.map +1 -1
- package/dist/src/constants/api.constants.js +5 -1
- package/dist/src/constants/api.constants.js.map +1 -1
- package/dist/src/constants/device.constants.d.ts +4 -0
- package/dist/src/constants/device.constants.d.ts.map +1 -1
- package/dist/src/constants/device.constants.js +5 -1
- package/dist/src/constants/device.constants.js.map +1 -1
- package/dist/src/device/accessory-factory.d.ts +10 -10
- package/dist/src/device/accessory-factory.d.ts.map +1 -1
- package/dist/src/device/accessory-factory.js +7 -7
- package/dist/src/device/accessory-factory.js.map +1 -1
- package/dist/src/device/capability-detector.d.ts +8 -8
- package/dist/src/device/capability-detector.d.ts.map +1 -1
- package/dist/src/device/capability-detector.js +6 -6
- package/dist/src/device/capability-detector.js.map +1 -1
- package/dist/src/device/capability-docs.d.ts +1 -9
- package/dist/src/device/capability-docs.d.ts.map +1 -1
- package/dist/src/device/capability-docs.js +19 -73
- package/dist/src/device/capability-docs.js.map +1 -1
- package/dist/src/device/profiles/device-profile.d.ts +1 -1
- package/dist/src/device/profiles/device-profile.d.ts.map +1 -1
- package/dist/src/device/profiles/device-profile.js +4 -4
- package/dist/src/device/profiles/device-profile.js.map +1 -1
- package/dist/src/features/base-feature.d.ts +2 -2
- package/dist/src/features/base-feature.d.ts.map +1 -1
- package/dist/src/features/base-feature.js +2 -3
- package/dist/src/features/base-feature.js.map +1 -1
- package/dist/src/features/feature-manager.d.ts +8 -16
- package/dist/src/features/feature-manager.d.ts.map +1 -1
- package/dist/src/features/feature-manager.js +5 -17
- package/dist/src/features/feature-manager.js.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.d.ts +1 -1
- package/dist/src/features/modes/econo-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.js.map +1 -1
- package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts +1 -1
- 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.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.d.ts +1 -1
- package/dist/src/features/modes/powerful-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.js.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.d.ts +1 -1
- package/dist/src/features/modes/streamer-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/platform.d.ts +11 -8
- package/dist/src/platform.d.ts.map +1 -1
- package/dist/src/platform.js +64 -15
- package/dist/src/platform.js.map +1 -1
- package/dist/src/services/climate-control.service.d.ts +8 -2
- package/dist/src/services/climate-control.service.d.ts.map +1 -1
- package/dist/src/services/climate-control.service.js +59 -58
- package/dist/src/services/climate-control.service.js.map +1 -1
- package/dist/src/services/hot-water-tank.service.d.ts +6 -2
- package/dist/src/services/hot-water-tank.service.d.ts.map +1 -1
- package/dist/src/services/hot-water-tank.service.js +33 -31
- package/dist/src/services/hot-water-tank.service.js.map +1 -1
- package/dist/src/types/daikin-enums.js +12 -12
- package/dist/src/types/daikin-enums.js.map +1 -1
- package/dist/src/types/device-capabilities.d.ts +1 -1
- package/dist/src/types/device-capabilities.d.ts.map +1 -1
- package/dist/src/utils/log-context.d.ts +23 -23
- package/dist/src/utils/log-context.d.ts.map +1 -1
- package/dist/src/utils/log-context.js +28 -28
- package/dist/src/utils/log-context.js.map +1 -1
- package/dist/src/utils/strings.d.ts.map +1 -1
- package/dist/src/utils/strings.js.map +1 -1
- package/dist/src/utils/update-mapper.d.ts +16 -16
- package/dist/src/utils/update-mapper.d.ts.map +1 -1
- package/dist/src/utils/update-mapper.js +14 -14
- package/dist/src/utils/update-mapper.js.map +1 -1
- package/homebridge-ui/public/index.html +2 -2
- package/homebridge-ui/public/script.js +957 -898
- package/homebridge-ui/server.js +746 -678
- package/package.json +29 -27
- package/.claude/settings.json +0 -3
- package/.claude/settings.local.json +0 -29
- package/CHANGELOG.md +0 -103
- package/CLAUDE.md +0 -269
- package/config.md +0 -2
- package/dist/src/api/daikin-device-tracker.d.ts +0 -97
- package/dist/src/api/daikin-device-tracker.d.ts.map +0 -1
- package/dist/src/api/daikin-device-tracker.js +0 -136
- package/dist/src/api/daikin-device-tracker.js.map +0 -1
- package/dist/src/api/http-interceptor.d.ts +0 -99
- package/dist/src/api/http-interceptor.d.ts.map +0 -1
- package/dist/src/api/http-interceptor.js +0 -177
- package/dist/src/api/http-interceptor.js.map +0 -1
- package/dist/src/di/service-container.d.ts +0 -92
- package/dist/src/di/service-container.d.ts.map +0 -1
- package/dist/src/di/service-container.js +0 -156
- package/dist/src/di/service-container.js.map +0 -1
- package/dist/src/features/feature-registry.d.ts +0 -100
- package/dist/src/features/feature-registry.d.ts.map +0 -1
- package/dist/src/features/feature-registry.js +0 -142
- package/dist/src/features/feature-registry.js.map +0 -1
- package/dist/src/services/service-factory.d.ts +0 -46
- package/dist/src/services/service-factory.d.ts.map +0 -1
- package/dist/src/services/service-factory.js +0 -72
- package/dist/src/services/service-factory.js.map +0 -1
- package/dist/src/utils/error-handler.d.ts +0 -101
- package/dist/src/utils/error-handler.d.ts.map +0 -1
- package/dist/src/utils/error-handler.js +0 -251
- package/dist/src/utils/error-handler.js.map +0 -1
- package/dist/src/utils/retry.d.ts +0 -42
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js +0 -70
- package/dist/src/utils/retry.js.map +0 -1
- package/docs/ARCHITECTURE.md +0 -645
- package/docs/IMPLEMENTATION_GUIDE.md +0 -899
- package/docs/IMPROVEMENTS_SUMMARY.md +0 -415
- package/docs/NEXT_STEPS.md +0 -368
- package/docs/Screenshot 2024-07-04 at 18.41.28.png +0 -0
- package/docs/TROUBLESHOOTING.md +0 -475
- package/docs/api-response-for-BRP069A8x.json +0 -520
- package/docs/api-response-for-BRP069C4x-2.json +0 -881
- package/docs/api-response-for-BRP069C4x.json +0 -916
- package/docs/api-response-for-altherma.json +0 -759
- package/docs/api-response-for-altherma2.json +0 -2735
- package/docs/api-response-with-multiple-devices-incl-heatpump.json +0 -2544
- package/docs/cr-insance-altherma-id-0.json +0 -834
- package/docs/mock-air-to-air-dx23.json +0 -759
- package/docs/mock-air-to-air-dx4.json +0 -1134
- package/docs/mock-airpurifier-with-humidifier.json +0 -732
- package/docs/mock-airpurifier.json +0 -450
- package/docs/mock-altherma-air-to-water-lan.json +0 -845
- package/docs/mock-altherma-air-to-water-wlan.json +0 -845
- package/docs/mock-d2cnd-gas-boiler.json +0 -649
- package/docs/setpointmode-vs-controlmode-vs-setpoints-vs-sensorydata.txt +0 -6
- package/images/fan-speed.jpeg +0 -0
- package/images/homekit-controls.jpeg +0 -0
- package/images/homekit-settings.jpeg +0 -0
- package/images/swing-mode.png +0 -0
- package/jest.config.ts +0 -13
- package/test/fixtures/altherma-crSense-2.ts +0 -834
- package/test/fixtures/altherma-fraction.ts +0 -718
- package/test/fixtures/altherma-heat-pump-2.ts +0 -479
- package/test/fixtures/altherma-heat-pump.ts +0 -757
- package/test/fixtures/altherma-miladcerkic-off.ts +0 -524
- package/test/fixtures/altherma-miladcerkic.ts +0 -524
- package/test/fixtures/altherma-v1ckoeln.ts +0 -644
- package/test/fixtures/altherma-with-embedded-id-zero.ts +0 -834
- package/test/fixtures/dx23-airco-2.ts +0 -343
- package/test/fixtures/dx23-airco.ts +0 -518
- package/test/fixtures/dx4-airco.ts +0 -914
- package/test/fixtures/unknown-jan.ts +0 -488
- package/test/fixtures/unknown-kitchen-guests.ts +0 -488
- package/test/helpers/test-isolation.ts +0 -228
- package/test/integration/air-conditioning.test.ts +0 -410
- package/test/integration/altherma.test.ts +0 -289
- package/test/integration/platform.test.ts +0 -118
- package/test/mocks/index.ts +0 -27
- package/test/test-gigya-auth.js +0 -443
- package/test/test-mobile-oauth.js +0 -175
- package/test/test-websocket-mobile.js +0 -123
- package/test/test-websocket.js +0 -116
- package/test/unit/api/__snapshots__/daikinCloud.test.ts.snap +0 -1320
- package/test/unit/api/daikin-api.test.ts +0 -384
- package/test/unit/api/daikin-oauth.test.ts +0 -214
- package/test/unit/api/daikinCloud.test.ts +0 -12
- package/test/unit/config/config-manager.test.ts +0 -271
- package/test/unit/device/daikin-device.test.ts +0 -79
- package/test/unit/services/hot-water-tank.service.test.ts +0 -123
- package/test/unit/utils/error-handler.test.ts +0 -274
- package/test/unit/utils/log-context.test.ts +0 -271
package/docs/NEXT_STEPS.md
DELETED
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
# Next Steps for Completing Improvements
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Phase 1 improvements are **100% complete** and committed. The remaining improvements (Phases 2-3) require approximately **27-39 hours** of development time. This document provides a quick-start guide for continuing the work.
|
|
6
|
-
|
|
7
|
-
## What's Already Done ✅
|
|
8
|
-
|
|
9
|
-
### Foundation (Phase 1)
|
|
10
|
-
- ✅ Strict TypeScript checking enabled
|
|
11
|
-
- ✅ Zod validation layer implemented
|
|
12
|
-
- ✅ WebSocket logic consolidated (removed 180+ lines of duplication)
|
|
13
|
-
- ✅ GitHub Actions updated to v4
|
|
14
|
-
- ✅ Comprehensive documentation created:
|
|
15
|
-
- [ARCHITECTURE.md](docs/ARCHITECTURE.md) - System design
|
|
16
|
-
- [IMPLEMENTATION_GUIDE.md](docs/IMPLEMENTATION_GUIDE.md) - Detailed implementation steps
|
|
17
|
-
- [IMPROVEMENTS_SUMMARY.md](docs/IMPROVEMENTS_SUMMARY.md) - Progress tracking
|
|
18
|
-
|
|
19
|
-
### Utilities Created
|
|
20
|
-
- ✅ `src/api/daikin-schemas.ts` - Zod validation schemas
|
|
21
|
-
- ✅ `src/utils/update-mapper.ts` - Consolidated WebSocket updates
|
|
22
|
-
- ✅ `src/utils/retry.ts` - Retry logic with exponential backoff
|
|
23
|
-
- ✅ `src/api/daikin-device-tracker.ts` - Device state tracking and error history
|
|
24
|
-
|
|
25
|
-
## What's Remaining (6 Tasks)
|
|
26
|
-
|
|
27
|
-
### Quick Reference Table
|
|
28
|
-
|
|
29
|
-
| Task | Priority | Effort | Complexity | Documentation |
|
|
30
|
-
|------|----------|--------|------------|---------------|
|
|
31
|
-
| OAuth Integration Tests | High | 4-6h | Medium | [IMPLEMENTATION_GUIDE.md#16-add-integration-tests-for-oauth-flows](IMPLEMENTATION_GUIDE.md#16-add-integration-tests-for-oauth-flows) |
|
|
32
|
-
| Error Recovery in Services | High | 3-4h | Medium | [IMPLEMENTATION_GUIDE.md#21-implement-error-recovery-in-services](IMPLEMENTATION_GUIDE.md#21-implement-error-recovery-in-services) |
|
|
33
|
-
| WebSocket Resilience Tests | Medium | 3-4h | Medium | [IMPLEMENTATION_GUIDE.md#22-add-websocket-resilience-tests](IMPLEMENTATION_GUIDE.md#22-add-websocket-resilience-tests) |
|
|
34
|
-
| Status UI | Medium | 6-8h | High | [IMPLEMENTATION_GUIDE.md#23-create-status-ui-for-monitoring](IMPLEMENTATION_GUIDE.md#23-create-status-ui-for-monitoring) |
|
|
35
|
-
| JSDoc Documentation | Medium | 4-6h | Low | [IMPLEMENTATION_GUIDE.md#31-add-comprehensive-jsdoc-documentation](IMPLEMENTATION_GUIDE.md#31-add-comprehensive-jsdoc-documentation) |
|
|
36
|
-
| Differential Updates | Low | 4-5h | Low | [IMPLEMENTATION_GUIDE.md#32-implement-differential-device-updates](IMPLEMENTATION_GUIDE.md#32-implement-differential-device-updates) |
|
|
37
|
-
|
|
38
|
-
**Total Estimated Effort**: 27-39 hours
|
|
39
|
-
|
|
40
|
-
## Getting Started
|
|
41
|
-
|
|
42
|
-
### 1. Set Up Your Environment
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
# Ensure dependencies are installed
|
|
46
|
-
npm install
|
|
47
|
-
|
|
48
|
-
# Verify everything builds
|
|
49
|
-
npm run build
|
|
50
|
-
|
|
51
|
-
# Run tests to ensure nothing is broken
|
|
52
|
-
npm test
|
|
53
|
-
|
|
54
|
-
# Check linting
|
|
55
|
-
npm run lint
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
All should pass ✅
|
|
59
|
-
|
|
60
|
-
### 2. Choose a Task
|
|
61
|
-
|
|
62
|
-
I recommend starting with these in order:
|
|
63
|
-
|
|
64
|
-
1. **OAuth Integration Tests** (High impact, foundational for quality)
|
|
65
|
-
2. **Error Recovery in Services** (High impact, improves reliability)
|
|
66
|
-
3. **JSDoc Documentation** (Medium effort, improves maintainability)
|
|
67
|
-
|
|
68
|
-
### 3. Follow the Implementation Guide
|
|
69
|
-
|
|
70
|
-
Each task in [IMPLEMENTATION_GUIDE.md](docs/IMPLEMENTATION_GUIDE.md) includes:
|
|
71
|
-
- ✅ Detailed implementation steps
|
|
72
|
-
- ✅ Code samples (copy-paste ready)
|
|
73
|
-
- ✅ File structure
|
|
74
|
-
- ✅ Testing procedures
|
|
75
|
-
- ✅ Integration instructions
|
|
76
|
-
|
|
77
|
-
### 4. Example: Adding OAuth Tests
|
|
78
|
-
|
|
79
|
-
From [IMPLEMENTATION_GUIDE.md](docs/IMPLEMENTATION_GUIDE.md):
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
# 1. Install dependencies
|
|
83
|
-
npm install --save-dev express @types/express
|
|
84
|
-
|
|
85
|
-
# 2. Create mock server (code provided in guide)
|
|
86
|
-
# Create: test/mocks/oauth-mock-server.ts
|
|
87
|
-
|
|
88
|
-
# 3. Create integration tests (code provided in guide)
|
|
89
|
-
# Create: test/integration/oauth-developer-portal.test.ts
|
|
90
|
-
# Create: test/integration/oauth-mobile-app.test.ts
|
|
91
|
-
|
|
92
|
-
# 4. Run tests
|
|
93
|
-
npm test -- test/integration/oauth-developer-portal.test.ts
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Using Utilities Already Created
|
|
97
|
-
|
|
98
|
-
### Retry Utility
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
import {retryWithBackoff} from '../utils/retry';
|
|
102
|
-
|
|
103
|
-
// In your service method
|
|
104
|
-
async handleTargetStateSet(value: CharacteristicValue) {
|
|
105
|
-
await retryWithBackoff(
|
|
106
|
-
async () => {
|
|
107
|
-
await this.controller.setDeviceData(/* ... */);
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
maxRetries: 3,
|
|
111
|
-
onRetry: (attempt, error) => {
|
|
112
|
-
this.platform.log.warn(`Retry ${attempt}: ${error.message}`);
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Device Tracker
|
|
120
|
-
|
|
121
|
-
```typescript
|
|
122
|
-
import {DeviceTracker} from '../api/daikin-device-tracker';
|
|
123
|
-
|
|
124
|
-
// In DaikinCloudDevice
|
|
125
|
-
private tracker = new DeviceTracker();
|
|
126
|
-
|
|
127
|
-
updateData(newData: GatewayDevice) {
|
|
128
|
-
if (this.tracker.hasChanges(newData)) {
|
|
129
|
-
// Only update if changed
|
|
130
|
-
this.deviceData = newData;
|
|
131
|
-
this.tracker.updateState(newData);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Zod Validation
|
|
137
|
-
|
|
138
|
-
```typescript
|
|
139
|
-
import {validateData, GatewayDeviceSchema} from '../api/daikin-schemas';
|
|
140
|
-
|
|
141
|
-
// Validate API response
|
|
142
|
-
const device = validateData(
|
|
143
|
-
GatewayDeviceSchema,
|
|
144
|
-
apiResponse,
|
|
145
|
-
'device data',
|
|
146
|
-
);
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Development Workflow
|
|
150
|
-
|
|
151
|
-
### Making Changes
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# 1. Create feature branch
|
|
155
|
-
git checkout -b feature/oauth-tests
|
|
156
|
-
|
|
157
|
-
# 2. Make changes following the implementation guide
|
|
158
|
-
|
|
159
|
-
# 3. Test your changes
|
|
160
|
-
npm run build
|
|
161
|
-
npm run lint
|
|
162
|
-
npm test
|
|
163
|
-
|
|
164
|
-
# 4. Commit (use conventional commits)
|
|
165
|
-
git add .
|
|
166
|
-
git commit -m "test(oauth): add integration tests for OAuth flows"
|
|
167
|
-
|
|
168
|
-
# 5. Push and create PR
|
|
169
|
-
git push origin feature/oauth-tests
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Conventional Commit Format
|
|
173
|
-
|
|
174
|
-
```
|
|
175
|
-
<type>(<scope>): <description>
|
|
176
|
-
|
|
177
|
-
[optional body]
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**Types**: `feat`, `fix`, `docs`, `test`, `refactor`, `chore`, `perf`, `ci`
|
|
181
|
-
|
|
182
|
-
**Scopes**: `api`, `service`, `accessory`, `feature`, `device`, `config`, `utils`, `build`
|
|
183
|
-
|
|
184
|
-
## Progress Tracking
|
|
185
|
-
|
|
186
|
-
### Current Status
|
|
187
|
-
|
|
188
|
-
- **Phase 1**: ✅ 100% Complete (8/8 tasks)
|
|
189
|
-
- **Phase 2**: ⏳ 25% Complete (1/4 tasks)
|
|
190
|
-
- **Phase 3**: ⏳ 50% Complete (2/4 tasks)
|
|
191
|
-
- **Overall**: ✅ 60% Complete (8/14 tasks)
|
|
192
|
-
|
|
193
|
-
### Update Progress
|
|
194
|
-
|
|
195
|
-
Edit [IMPROVEMENTS_SUMMARY.md](docs/IMPROVEMENTS_SUMMARY.md) after completing each task:
|
|
196
|
-
|
|
197
|
-
```markdown
|
|
198
|
-
## ✅ Completed Improvements (9/14)
|
|
199
|
-
|
|
200
|
-
### Phase 1 Remaining Tasks
|
|
201
|
-
|
|
202
|
-
#### 1.6 ✅ OAuth Integration Tests
|
|
203
|
-
**Status**: Completed
|
|
204
|
-
**Date**: 2026-01-XX
|
|
205
|
-
**Changes:**
|
|
206
|
-
- Added mock OAuth server
|
|
207
|
-
- Created integration tests for Developer Portal
|
|
208
|
-
- Created integration tests for Mobile App
|
|
209
|
-
...
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Getting Help
|
|
213
|
-
|
|
214
|
-
### Documentation References
|
|
215
|
-
|
|
216
|
-
1. **System Architecture**: [ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
|
217
|
-
- Understand how components interact
|
|
218
|
-
- Find the files you need to modify
|
|
219
|
-
|
|
220
|
-
2. **Implementation Guide**: [IMPLEMENTATION_GUIDE.md](docs/IMPLEMENTATION_GUIDE.md)
|
|
221
|
-
- Step-by-step instructions
|
|
222
|
-
- Code samples for each task
|
|
223
|
-
|
|
224
|
-
3. **Development Workflows**: [CLAUDE.md](../CLAUDE.md)
|
|
225
|
-
- Build and test commands
|
|
226
|
-
- Commit conventions
|
|
227
|
-
- Common development tasks
|
|
228
|
-
|
|
229
|
-
### Code Examples
|
|
230
|
-
|
|
231
|
-
All remaining tasks have **complete code examples** in the implementation guide. You can literally copy-paste and adapt.
|
|
232
|
-
|
|
233
|
-
### Testing
|
|
234
|
-
|
|
235
|
-
Each improvement includes testing instructions:
|
|
236
|
-
|
|
237
|
-
```bash
|
|
238
|
-
# Unit tests
|
|
239
|
-
npm test -- path/to/your.test.ts
|
|
240
|
-
|
|
241
|
-
# Watch mode for development
|
|
242
|
-
npm test -- --watch path/to/your.test.ts
|
|
243
|
-
|
|
244
|
-
# Coverage
|
|
245
|
-
npm test -- --coverage
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
## Quality Checklist
|
|
249
|
-
|
|
250
|
-
Before committing each improvement:
|
|
251
|
-
|
|
252
|
-
- [ ] Code builds without errors (`npm run build`)
|
|
253
|
-
- [ ] Lint passes (`npm run lint`)
|
|
254
|
-
- [ ] Tests pass (`npm test`)
|
|
255
|
-
- [ ] New code has tests (aim for 70%+ coverage)
|
|
256
|
-
- [ ] JSDoc added for public APIs
|
|
257
|
-
- [ ] Documentation updated if needed
|
|
258
|
-
- [ ] IMPROVEMENTS_SUMMARY.md updated
|
|
259
|
-
|
|
260
|
-
## Time Estimates
|
|
261
|
-
|
|
262
|
-
### Realistic Schedule
|
|
263
|
-
|
|
264
|
-
**Option 1: Part-time (10h/week)**
|
|
265
|
-
- Week 1-2: OAuth tests + Error recovery (7-10h)
|
|
266
|
-
- Week 3: WebSocket tests + Start JSDoc (7-10h)
|
|
267
|
-
- Week 4: Complete JSDoc + Status UI start (10h)
|
|
268
|
-
- Week 5-6: Complete Status UI + Differential updates (10-13h)
|
|
269
|
-
|
|
270
|
-
**Total**: 5-6 weeks part-time
|
|
271
|
-
|
|
272
|
-
**Option 2: Full-time sprint (40h/week)**
|
|
273
|
-
- Days 1-2: OAuth tests + Error recovery + WebSocket tests (10-14h)
|
|
274
|
-
- Days 3-4: JSDoc documentation + Differential updates (8-11h)
|
|
275
|
-
- Days 5-7: Status UI (6-8h)
|
|
276
|
-
- Buffer: 6-6h
|
|
277
|
-
|
|
278
|
-
**Total**: 1 week full-time
|
|
279
|
-
|
|
280
|
-
## FAQ
|
|
281
|
-
|
|
282
|
-
### Q: Do I have to do all remaining tasks?
|
|
283
|
-
|
|
284
|
-
**A**: No! Each task is independent. Pick the ones most valuable to you:
|
|
285
|
-
- **For reliability**: Error recovery + WebSocket tests
|
|
286
|
-
- **For monitoring**: Status UI
|
|
287
|
-
- **For maintenance**: JSDoc documentation
|
|
288
|
-
- **For performance**: Differential updates
|
|
289
|
-
|
|
290
|
-
### Q: Can I modify the implementation approach?
|
|
291
|
-
|
|
292
|
-
**A**: Yes! The implementation guide provides recommended approaches, but you can adapt them to your preferences. The key goals are:
|
|
293
|
-
- Maintain backward compatibility
|
|
294
|
-
- Add tests for new code
|
|
295
|
-
- Follow TypeScript/ESLint conventions
|
|
296
|
-
|
|
297
|
-
### Q: What if I get stuck?
|
|
298
|
-
|
|
299
|
-
**A**:
|
|
300
|
-
1. Check [ARCHITECTURE.md](docs/ARCHITECTURE.md) for system context
|
|
301
|
-
2. Check [IMPLEMENTATION_GUIDE.md](docs/IMPLEMENTATION_GUIDE.md) for detailed steps
|
|
302
|
-
3. Look at existing code patterns (e.g., how tests are structured)
|
|
303
|
-
4. The utilities are already created and ready to use
|
|
304
|
-
|
|
305
|
-
### Q: How do I know I'm done?
|
|
306
|
-
|
|
307
|
-
**A**: When:
|
|
308
|
-
- All tests pass
|
|
309
|
-
- Build succeeds
|
|
310
|
-
- Lint passes
|
|
311
|
-
- Documentation is updated
|
|
312
|
-
- IMPROVEMENTS_SUMMARY.md reflects completion
|
|
313
|
-
|
|
314
|
-
## Key Files Reference
|
|
315
|
-
|
|
316
|
-
### Source Code
|
|
317
|
-
- `src/api/` - API clients, OAuth, WebSocket
|
|
318
|
-
- `src/services/` - HAP services (where to add error recovery)
|
|
319
|
-
- `src/utils/` - Utilities (retry, update-mapper, validation)
|
|
320
|
-
- `src/config/` - Configuration management
|
|
321
|
-
|
|
322
|
-
### Tests
|
|
323
|
-
- `test/unit/` - Unit tests
|
|
324
|
-
- `test/integration/` - Integration tests (create OAuth tests here)
|
|
325
|
-
- `test/mocks/` - Mock objects (create OAuth mock server here)
|
|
326
|
-
- `test/fixtures/` - Test data
|
|
327
|
-
|
|
328
|
-
### Documentation
|
|
329
|
-
- `ARCHITECTURE.md` - How the system works
|
|
330
|
-
- `IMPLEMENTATION_GUIDE.md` - How to implement remaining work
|
|
331
|
-
- `IMPROVEMENTS_SUMMARY.md` - What's done and what's left
|
|
332
|
-
- `CLAUDE.md` - Development workflows and conventions
|
|
333
|
-
|
|
334
|
-
## Success Criteria
|
|
335
|
-
|
|
336
|
-
You'll know you're successful when:
|
|
337
|
-
|
|
338
|
-
1. ✅ Test coverage increases (target: 70%+)
|
|
339
|
-
2. ✅ Error handling is robust with retry logic
|
|
340
|
-
3. ✅ WebSocket connections recover gracefully
|
|
341
|
-
4. ✅ Users can monitor plugin health via UI
|
|
342
|
-
5. ✅ Code is well-documented with JSDoc
|
|
343
|
-
6. ✅ Device updates are efficient (differential)
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
## Quick Start Commands
|
|
348
|
-
|
|
349
|
-
```bash
|
|
350
|
-
# Start working on OAuth tests
|
|
351
|
-
git checkout -b feature/oauth-tests
|
|
352
|
-
npm install --save-dev express @types/express
|
|
353
|
-
# Then follow IMPLEMENTATION_GUIDE.md section 1.6
|
|
354
|
-
|
|
355
|
-
# Start working on error recovery
|
|
356
|
-
git checkout -b feature/error-recovery
|
|
357
|
-
# Then follow IMPLEMENTATION_GUIDE.md section 2.1
|
|
358
|
-
|
|
359
|
-
# Start working on JSDoc
|
|
360
|
-
git checkout -b docs/jsdoc
|
|
361
|
-
# Then follow IMPLEMENTATION_GUIDE.md section 3.1
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
**Remember**: The hard work (analysis, planning, utilities) is done. The implementation guide gives you copy-paste code. You're set up for success! 🚀
|
|
367
|
-
|
|
368
|
-
*Last Updated: 2026-01-10*
|
|
Binary file
|