homey-api 1.10.17 → 3.0.0-rc.2

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 (53) hide show
  1. package/README.md +1 -1
  2. package/assets/types/homey-api.d.ts +47 -588
  3. package/assets/types/homey-api.private.d.ts +47 -648
  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 +49 -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 +20 -3
  14. package/lib/HomeyAPI/HomeyAPIV2/ManagerDrivers/Driver.js +25 -0
  15. package/lib/HomeyAPI/HomeyAPIV2/ManagerDrivers.js +29 -0
  16. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/AdvancedFlow.js +17 -0
  17. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/Flow.js +34 -0
  18. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardAction.js +25 -0
  19. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardCondition.js +25 -0
  20. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow/FlowCardTrigger.js +25 -0
  21. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlow.js +104 -0
  22. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlowToken/FlowToken.js +24 -0
  23. package/lib/HomeyAPI/HomeyAPIV2/ManagerFlowToken.js +29 -0
  24. package/lib/HomeyAPI/HomeyAPIV2/ManagerInsights/Log.js +23 -0
  25. package/lib/HomeyAPI/HomeyAPIV2/ManagerInsights.js +29 -0
  26. package/lib/HomeyAPI/HomeyAPIV2.js +12 -716
  27. package/lib/HomeyAPI/HomeyAPIV3/Item.js +173 -2
  28. package/lib/HomeyAPI/HomeyAPIV3/Manager.js +531 -3
  29. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerApps}/App.js +1 -1
  30. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3}/ManagerApps.js +4 -3
  31. package/lib/HomeyAPI/HomeyAPIV3/ManagerDevices/Capability.js +9 -0
  32. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerDevices}/Device.js +78 -3
  33. package/lib/HomeyAPI/{HomeyAPIV2 → HomeyAPIV3/ManagerDevices}/DeviceCapability.js +3 -3
  34. package/lib/HomeyAPI/HomeyAPIV3/ManagerDevices.js +17 -0
  35. package/lib/HomeyAPI/HomeyAPIV3/ManagerDrivers/Driver.js +9 -0
  36. package/lib/HomeyAPI/HomeyAPIV3/ManagerDrivers.js +15 -0
  37. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/AdvancedFlow.js +9 -0
  38. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/Flow.js +9 -0
  39. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCard.js +9 -0
  40. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardAction.js +9 -0
  41. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardCondition.js +9 -0
  42. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow/FlowCardTrigger.js +9 -0
  43. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlow.js +12 -23
  44. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlowToken/FlowToken.js +16 -0
  45. package/lib/HomeyAPI/HomeyAPIV3/ManagerFlowToken.js +15 -0
  46. package/lib/HomeyAPI/HomeyAPIV3/ManagerInsights/Log.js +9 -0
  47. package/lib/HomeyAPI/HomeyAPIV3/ManagerInsights.js +15 -0
  48. package/lib/HomeyAPI/HomeyAPIV3.js +728 -4
  49. package/lib/HomeyAPI/HomeyAPIV3Cloud.js +1 -1
  50. package/lib/HomeyAPI/HomeyAPIV3Local.js +1 -1
  51. package/package.json +1 -1
  52. package/lib/HomeyAPI/HomeyAPIApp.js +0 -127
  53. package/lib/HomeyAPI/HomeyAPIV2/Item.js +0 -177
@@ -1,8 +1,179 @@
1
1
  'use strict';
2
2
 
3
- const HomeyAPIV2Item = require('../HomeyAPIV2/Item');
3
+ const EventEmitter = require('../../EventEmitter');
4
4
 
5
- class Item extends HomeyAPIV2Item {
5
+ class Item extends EventEmitter {
6
+
7
+ static ID = null; // Set by Manager.js
8
+
9
+ constructor({
10
+ id,
11
+ homey,
12
+ manager,
13
+ properties,
14
+ }) {
15
+ super();
16
+
17
+ // Set ID
18
+ Object.defineProperty(this, 'id', {
19
+ value: id,
20
+ enumerable: true,
21
+ writable: false,
22
+ });
23
+
24
+ // Set Homey
25
+ Object.defineProperty(this, 'homey', {
26
+ value: homey,
27
+ enumerable: false,
28
+ writable: false,
29
+ });
30
+
31
+ // Set Manager
32
+ Object.defineProperty(this, 'manager', {
33
+ value: manager,
34
+ enumerable: false,
35
+ writable: false,
36
+ });
37
+
38
+ // Set Connected
39
+ Object.defineProperty(this, '__connected', {
40
+ value: false,
41
+ enumerable: false,
42
+ writable: true,
43
+ });
44
+
45
+ // Set Properties
46
+ for (const [key, value] of Object.entries(properties)) {
47
+ if (key === 'id') continue;
48
+
49
+ Object.defineProperty(this, key, {
50
+ value,
51
+ enumerable: true,
52
+ writable: true,
53
+ });
54
+ }
55
+ }
56
+
57
+ get uri() {
58
+ return `homey:${this.constructor.ID}:${this.id}`;
59
+ }
60
+
61
+ __debug(...props) {
62
+ this.manager.__debug(`[${this.constructor.name}:${this.id}]`, ...props);
63
+ }
64
+
65
+ __update(properties) {
66
+ for (const [key, value] of Object.entries(properties)) {
67
+ this[key] = value;
68
+ }
69
+ }
70
+
71
+ async connect() {
72
+ this.__debug('connect');
73
+
74
+ // If disconnecting, await that first
75
+ try {
76
+ // Ensure all microtasks are done first. E.g. if disconnect is called in the same tick as
77
+ // connect. This way the disconnect is always started first so we can await the disconnect
78
+ // promise before we try to connect again.
79
+ await Promise.resolve();
80
+ await this.__disconnectPromise;
81
+ } catch (err) { }
82
+
83
+ this.__connectPromise = Promise.resolve().then(async () => {
84
+ if (!this.io) {
85
+ this.io = this.homey.subscribe(this.uri, {
86
+ onConnect: () => {
87
+ this.__debug('onConnect');
88
+ this.__connected = true;
89
+
90
+ this.onConnect();
91
+ },
92
+ onDisconnect: () => {
93
+ this.__debug('onDisconnect');
94
+ this.__connected = false;
95
+
96
+ this.onDisconnect();
97
+ },
98
+ onReconnect: () => {
99
+ this.__debug('onDisconnect');
100
+
101
+ this.onReconnect();
102
+ },
103
+ onEvent: (event, data) => {
104
+ this.__debug('onEvent', event, data);
105
+
106
+ this.emit(event, data);
107
+ },
108
+ });
109
+ }
110
+
111
+ await this.io;
112
+ });
113
+
114
+ // Delete the connecting Promise
115
+ this.__connectPromise
116
+ .catch(() => { })
117
+ .finally(() => {
118
+ delete this.__connectPromise;
119
+ });
120
+
121
+ await this.__connectPromise;
122
+ }
123
+
124
+ async disconnect() {
125
+ this.__debug('disconnect');
126
+
127
+ // If connecting, await that first
128
+ try {
129
+ await this.__connectPromise;
130
+ } catch (err) { }
131
+
132
+ this.__disconnectPromise = Promise.resolve().then(async () => {
133
+ this.__connected = false;
134
+
135
+ if (this.io) {
136
+ this.io
137
+ .then(io => io.unsubscribe())
138
+ .catch(err => this.__debug('Error Disconnecting:', err));
139
+ }
140
+ });
141
+
142
+ // Delete the disconnecting Promise
143
+ this.__disconnectPromise
144
+ .catch(() => { })
145
+ .finally(() => {
146
+ delete this.__disconnectPromise;
147
+ // Delete this.io so connect can start new connections.
148
+ delete this.io;
149
+ });
150
+
151
+ await this.__disconnectPromise;
152
+ }
153
+
154
+ onConnect() {
155
+ // Overload Me
156
+ }
157
+
158
+ onReconnect() {
159
+ // Overload Me
160
+ }
161
+
162
+ onDisconnect() {
163
+ // Overload Me
164
+ }
165
+
166
+ destroy() {
167
+ // Remove all event listeners
168
+ this.removeAllListeners();
169
+
170
+ // Disconnect from Socket.io
171
+ this.disconnect().catch(() => { });
172
+ }
173
+
174
+ static transform(item) {
175
+ return item;
176
+ }
6
177
 
7
178
  }
8
179