homey-api 1.10.20 → 3.0.0-rc.10

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 (55) hide show
  1. package/README.md +1 -1
  2. package/assets/types/homey-api.d.ts +54 -647
  3. package/assets/types/homey-api.private.d.ts +54 -707
  4. package/index.js +1 -1
  5. package/lib/APIErrorNotFound.js +20 -0
  6. package/lib/AthomCloudAPI/Homey.js +3 -1
  7. package/lib/EventEmitter.js +0 -6
  8. package/lib/HomeyAPI/HomeyAPI.js +53 -5
  9. package/lib/HomeyAPI/HomeyAPIErrorNotFound.js +21 -0
  10. package/lib/HomeyAPI/HomeyAPIV2/Manager.js +2 -575
  11. package/lib/HomeyAPI/HomeyAPIV2/ManagerDevices/Capability.js +20 -0
  12. package/lib/HomeyAPI/HomeyAPIV2/ManagerDevices/Device.js +18 -0
  13. package/lib/HomeyAPI/HomeyAPIV2/ManagerDevices.js +6 -3
  14. package/lib/HomeyAPI/HomeyAPIV2/ManagerDrivers/Driver.js +25 -0
  15. package/lib/HomeyAPI/HomeyAPIV2/ManagerDrivers/PairSession.js +20 -0
  16. package/lib/HomeyAPI/HomeyAPIV2/ManagerDrivers.js +46 -0
  17. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/AdvancedFlow.js +30 -0
  18. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/Flow.js +57 -0
  19. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardAction.js +25 -0
  20. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardCondition.js +25 -0
  21. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardTrigger.js +25 -0
  22. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow.js +127 -0
  23. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlowToken/FlowToken.js +24 -0
  24. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlowToken.js +29 -0
  25. package/lib/HomeyAPI/HomeyAPIV2/ManagerInsights/Log.js +22 -0
  26. package/lib/HomeyAPI/HomeyAPIV2/ManagerInsights.js +46 -0
  27. package/lib/HomeyAPI/HomeyAPIV2.js +12 -716
  28. package/lib/HomeyAPI/HomeyAPIV3/Item.js +186 -2
  29. package/lib/HomeyAPI/HomeyAPIV3/Manager.js +513 -3
  30. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerApps}/App.js +1 -1
  31. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3}/ManagerApps.js +4 -3
  32. package/lib/HomeyAPI/HomeyAPIV3/ManagerDevices/Capability.js +9 -0
  33. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerDevices}/Device.js +82 -7
  34. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerDevices}/DeviceCapability.js +4 -4
  35. package/lib/HomeyAPI/HomeyAPIV3/ManagerDevices.js +17 -0
  36. package/lib/HomeyAPI/HomeyAPIV3/ManagerDrivers/Driver.js +9 -0
  37. package/lib/HomeyAPI/HomeyAPIV3/ManagerDrivers/PairSession.js +9 -0
  38. package/lib/HomeyAPI/HomeyAPIV3/ManagerDrivers.js +17 -0
  39. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/AdvancedFlow.js +9 -0
  40. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/Flow.js +17 -0
  41. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCard.js +17 -0
  42. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardAction.js +9 -0
  43. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardCondition.js +9 -0
  44. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardTrigger.js +9 -0
  45. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow.js +12 -23
  46. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlowToken/FlowToken.js +19 -0
  47. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlowToken.js +15 -0
  48. package/lib/HomeyAPI/HomeyAPIV3/ManagerInsights/Log.js +23 -0
  49. package/lib/HomeyAPI/HomeyAPIV3/ManagerInsights.js +15 -0
  50. package/lib/HomeyAPI/HomeyAPIV3.js +728 -4
  51. package/lib/HomeyAPI/HomeyAPIV3Cloud.js +1 -1
  52. package/lib/HomeyAPI/HomeyAPIV3Local.js +1 -1
  53. package/package.json +1 -1
  54. package/lib/HomeyAPI/HomeyAPIApp.js +0 -127
  55. package/lib/HomeyAPI/HomeyAPIV2/Item.js +0 -177
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const Item = require('./Item');
3
+ const Item = require('../Item');
4
4
 
5
5
  class App extends Item {
6
6
 
@@ -1,12 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  const Manager = require('./Manager');
4
- const App = require('./App');
4
+ const App = require('./ManagerApps/App');
5
5
 
6
6
  class ManagerApps extends Manager {
7
7
 
8
- static ITEMS = {
9
- app: App,
8
+ static CRUD = {
9
+ ...super.CRUD,
10
+ App,
10
11
  }
11
12
 
12
13
  }
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class Capability extends Item {
6
+
7
+ }
8
+
9
+ module.exports = Capability;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- const Util = require('../../Util');
4
- const Item = require('./Item');
3
+ const Util = require('../../../Util');
4
+ const Item = require('../Item');
5
5
  const DeviceCapability = require('./DeviceCapability');
6
6
 
7
7
  class Device extends Item {
@@ -18,12 +18,12 @@ class Device extends Item {
18
18
  }
19
19
 
20
20
  /**
21
- * Creates an {@link HomeyAPIV2.DeviceCapability} for realtime capability updates.
21
+ * Creates an {@link HomeyAPIV3.DeviceCapability} for realtime capability updates.
22
22
  * @param {string} capabilityId
23
23
  * @param {Function} listener
24
24
  * @param {number|boolean|string} listener.value
25
- * @returns {HomeyAPIV2.ManagerDevices.Device.DeviceCapability}
26
- * @function HomeyAPIV2.ManagerDevices.Device#makeCapabilityInstance
25
+ * @returns {HomeyAPIV3.ManagerDevices.Device.DeviceCapability}
26
+ * @function HomeyAPIV3.ManagerDevices.Device#makeCapabilityInstance
27
27
  * @example
28
28
  *
29
29
  * const onOffInstance = device.makeCapabilityInstance('onoff', value => {
@@ -72,7 +72,7 @@ class Device extends Item {
72
72
  * @param {object} [opts.opts]
73
73
  * @param {number} [opts.opts.duration]
74
74
  * @returns {Promise<void>}
75
- * @function HomeyAPIV2.ManagerDevices.Device#setCapabilityValue
75
+ * @function HomeyAPIV3.ManagerDevices.Device#setCapabilityValue
76
76
  */
77
77
  async setCapabilityValue(options, ...args) {
78
78
  // Legacy compatibility from node-athom-api
@@ -130,10 +130,85 @@ class Device extends Item {
130
130
  });
131
131
  })
132
132
  // eslint-disable-next-line no-console
133
- .catch(err => console.error(`Device[${this.id}].onReconnectError:`, err));
133
+ .catch(err => this.__debug(`Device[${this.id}].onReconnectError:`, err));
134
134
  }
135
135
  }
136
136
 
137
+ async getZone() {
138
+ return this.homey.zones.getZone({
139
+ id: this.zone,
140
+ });
141
+ }
142
+
143
+ async getDriver() {
144
+ return this.homey.drivers.getDriver({
145
+ id: this.driverId,
146
+ });
147
+ }
148
+
149
+ async getLogs() {
150
+ const logs = await this.homey.insights.getLogs();
151
+ return Object.values(logs)
152
+ .filter(log => log.ownerUri === this.uri)
153
+ .reduce((result, log) => ({
154
+ ...result,
155
+ [log.id]: log,
156
+ }), {});
157
+ }
158
+
159
+ async getFlows() {
160
+ const flows = await this.homey.flow.getFlows();
161
+ return Object.values(flows)
162
+ .filter(flow => {
163
+ if (flow.trigger && flow.trigger.id.startsWith(this.uri)) return true;
164
+ if (Array.isArray(flow.conditions) && flow.conditions.some(card => card.id.startsWith(this.uri))) return true;
165
+ if (Array.isArray(flow.actions) && flow.actions.some(card => card.id.startsWith(this.uri))) return true;
166
+
167
+ // TODO: Zone cards
168
+ // TODO: Subzone cards
169
+
170
+ return false;
171
+ })
172
+ .reduce((result, flow) => ({
173
+ ...result,
174
+ [flow.id]: flow,
175
+ }), {});
176
+ }
177
+
178
+ async getAdvancedFlows() {
179
+ const advancedFlows = await this.homey.flow.getAdvancedFlows();
180
+ return Object.values(advancedFlows)
181
+ .filter(advancedFlow => {
182
+ return Object.values(advancedFlow.cards)
183
+ .filter(card => ['trigger', 'condition', 'action'].includes(card.type))
184
+ .some(card => {
185
+ if (card.id.startsWith(this.uri)) return true;
186
+
187
+ // TODO: Zone cards
188
+ // TODO: Subzone cards
189
+ return false;
190
+ });
191
+ })
192
+ .reduce((result, advancedFlow) => ({
193
+ ...result,
194
+ [advancedFlow.id]: advancedFlow,
195
+ }), {});
196
+ }
197
+
198
+ static transformGet(item) {
199
+ item = super.transformGet(item);
200
+
201
+ if (item.capabilitiesObj) {
202
+ for (const capabilityObj of Object.values(item.capabilitiesObj)) {
203
+ if (capabilityObj.lastUpdated) {
204
+ capabilityObj.lastUpdated = new Date(capabilityObj.lastUpdated);
205
+ }
206
+ }
207
+ }
208
+
209
+ return item;
210
+ }
211
+
137
212
  }
138
213
 
139
214
  module.exports = Device;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- const Util = require('../../Util');
4
- const EventEmitter = require('../../EventEmitter');
3
+ const Util = require('../../../Util');
4
+ const EventEmitter = require('../../../EventEmitter');
5
5
 
6
6
  /**
7
7
  * @class
@@ -75,7 +75,7 @@ class DeviceCapability extends EventEmitter {
75
75
  }
76
76
 
77
77
  __debug(...props) {
78
- this.device.__debug(`[Capability:${this.id}]`, ...props);
78
+ this.device.__debug(`[DeviceCapability:${this.id}]`, ...props);
79
79
  }
80
80
 
81
81
  /**
@@ -108,7 +108,7 @@ class DeviceCapability extends EventEmitter {
108
108
  const capabilityReference = this.device.capabilitiesObj && this.device.capabilitiesObj[this.id];
109
109
  if (capabilityReference) {
110
110
  capabilityReference.value = value;
111
- capabilityReference.lastUpdated = this.__lastChanged.toISOString();
111
+ capabilityReference.lastUpdated = this.__lastChanged;
112
112
  }
113
113
 
114
114
  this.__listener(value);
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const Manager = require('./Manager');
4
+ const Capability = require('./ManagerDevices/Capability');
5
+ const Device = require('./ManagerDevices/Device');
6
+
7
+ class ManagerDevices extends Manager {
8
+
9
+ static CRUD = {
10
+ ...super.CRUD,
11
+ Capability,
12
+ Device,
13
+ }
14
+
15
+ }
16
+
17
+ module.exports = ManagerDevices;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class Driver extends Item {
6
+
7
+ }
8
+
9
+ module.exports = Driver;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class PairSession extends Item {
6
+
7
+ }
8
+
9
+ module.exports = PairSession;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const Manager = require('./Manager');
4
+ const Driver = require('./ManagerDrivers/Driver');
5
+ const PairSession = require('./ManagerDrivers/PairSession');
6
+
7
+ class ManagerDrivers extends Manager {
8
+
9
+ static CRUD = {
10
+ ...super.CRUD,
11
+ Driver,
12
+ PairSession,
13
+ }
14
+
15
+ }
16
+
17
+ module.exports = ManagerDrivers;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class AdvancedFlow extends Item {
6
+
7
+ }
8
+
9
+ module.exports = AdvancedFlow;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class Flow extends Item {
6
+
7
+ /**
8
+ * Check whether this Flow misses one or more {@link FlowCard} or {@link FlowToken}.
9
+ * @returns Promise<Boolean>
10
+ */
11
+ async isBroken() {
12
+ throw new Error('Not Implemented');
13
+ }
14
+
15
+ }
16
+
17
+ module.exports = Flow;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class FlowCard extends Item {
6
+
7
+ static transformGet(item) {
8
+ item = super.transformGet(item);
9
+
10
+ delete item.ownerName; // Prepare for back-end change
11
+
12
+ return item;
13
+ }
14
+
15
+ }
16
+
17
+ module.exports = FlowCard;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const FlowCard = require('./FlowCard');
4
+
5
+ class FlowCardAction extends FlowCard {
6
+
7
+ }
8
+
9
+ module.exports = FlowCardAction;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const FlowCard = require('./FlowCard');
4
+
5
+ class FlowCardCondition extends FlowCard {
6
+
7
+ }
8
+
9
+ module.exports = FlowCardCondition;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const FlowCard = require('./FlowCard');
4
+
5
+ class FlowCardTrigger extends FlowCard {
6
+
7
+ }
8
+
9
+ module.exports = FlowCardTrigger;
@@ -1,32 +1,21 @@
1
1
  'use strict';
2
2
 
3
3
  const Manager = require('./Manager');
4
+ const Flow = require('./ManagerFlow/Flow');
5
+ const AdvancedFlow = require('./ManagerFlow/AdvancedFlow');
6
+ const FlowCardTrigger = require('./ManagerFlow/FlowCardTrigger');
7
+ const FlowCardCondition = require('./ManagerFlow/FlowCardCondition');
8
+ const FlowCardAction = require('./ManagerFlow/FlowCardAction');
4
9
 
5
10
  class ManagerFlow extends Manager {
6
11
 
7
- async getFlowCardTrigger(args = {}, ...rest) {
8
- args.uri = '';
9
- return this.__super__getFlowCardTrigger(args, ...rest);
10
- }
11
-
12
- async getFlowCardCondition(args = {}, ...rest) {
13
- args.uri = '';
14
- return this.__super__getFlowCardCondition(args, ...rest);
15
- }
16
-
17
- async runFlowCardCondition(args = {}, ...rest) {
18
- args.uri = '';
19
- return this.__super__runFlowCardCondition(args, ...rest);
20
- }
21
-
22
- async getFlowCardAction(args = {}, ...rest) {
23
- args.uri = '';
24
- return this.__super__getFlowCardAction(args, ...rest);
25
- }
26
-
27
- async runFlowCardAction(args = {}, ...rest) {
28
- args.uri = '';
29
- return this.__super__runFlowCardAction(args, ...rest);
12
+ static CRUD = {
13
+ ...super.CRUD,
14
+ Flow,
15
+ AdvancedFlow,
16
+ FlowCardTrigger,
17
+ FlowCardCondition,
18
+ FlowCardAction,
30
19
  }
31
20
 
32
21
  }
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class FlowToken extends Item {
6
+
7
+ // TODO: Remove when back-end has removed these properties.
8
+ static transformGet(item) {
9
+ item = super.transformGet(item);
10
+
11
+ delete item.uri;
12
+ delete item.id;
13
+ delete item.uriObj;
14
+ delete item.ownerName; // Prepare for back-end change
15
+ }
16
+
17
+ }
18
+
19
+ module.exports = FlowToken;
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ const Manager = require('./Manager');
4
+ const FlowToken = require('./ManagerFlowToken/FlowToken');
5
+
6
+ class ManagerFlowToken extends Manager {
7
+
8
+ static CRUD = {
9
+ ...super.CRUD,
10
+ FlowToken,
11
+ };
12
+
13
+ }
14
+
15
+ module.exports = ManagerFlowToken;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ const Item = require('../Item');
4
+
5
+ class Log extends Item {
6
+
7
+ async getEntries() {
8
+ return this.manager.getLogEntries({
9
+ id: this.id,
10
+ });
11
+ }
12
+
13
+ static transformGet(item) {
14
+ item = super.transformGet(item);
15
+
16
+ delete item.ownerName; // Prepare for back-end change
17
+
18
+ return item;
19
+ }
20
+
21
+ }
22
+
23
+ module.exports = Log;
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ const Manager = require('./Manager');
4
+ const Log = require('./ManagerInsights/Log');
5
+
6
+ class ManagerInsights extends Manager {
7
+
8
+ static CRUD = {
9
+ ...super.CRUD,
10
+ Log,
11
+ };
12
+
13
+ }
14
+
15
+ module.exports = ManagerInsights;