node-switchbot 2.5.0-beta.2 → 2.5.0-beta.21

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 (197) hide show
  1. package/dist/advertising.d.ts +31 -20
  2. package/dist/advertising.d.ts.map +1 -1
  3. package/dist/advertising.js +72 -75
  4. package/dist/advertising.js.map +1 -1
  5. package/dist/device/woblindtilt.d.ts +19 -50
  6. package/dist/device/woblindtilt.d.ts.map +1 -1
  7. package/dist/device/woblindtilt.js +39 -98
  8. package/dist/device/woblindtilt.js.map +1 -1
  9. package/dist/device/wobulb.d.ts +41 -15
  10. package/dist/device/wobulb.d.ts.map +1 -1
  11. package/dist/device/wobulb.js +71 -127
  12. package/dist/device/wobulb.js.map +1 -1
  13. package/dist/device/woceilinglight.d.ts +47 -21
  14. package/dist/device/woceilinglight.d.ts.map +1 -1
  15. package/dist/device/woceilinglight.js +94 -169
  16. package/dist/device/woceilinglight.js.map +1 -1
  17. package/dist/device/wocontact.d.ts +11 -1
  18. package/dist/device/wocontact.d.ts.map +1 -1
  19. package/dist/device/wocontact.js +22 -21
  20. package/dist/device/wocontact.js.map +1 -1
  21. package/dist/device/wocurtain.d.ts +39 -1
  22. package/dist/device/wocurtain.d.ts.map +1 -1
  23. package/dist/device/wocurtain.js +68 -102
  24. package/dist/device/wocurtain.js.map +1 -1
  25. package/dist/device/wohand.d.ts +37 -2
  26. package/dist/device/wohand.d.ts.map +1 -1
  27. package/dist/device/wohand.js +54 -88
  28. package/dist/device/wohand.js.map +1 -1
  29. package/dist/device/wohub2.d.ts +11 -1
  30. package/dist/device/wohub2.d.ts.map +1 -1
  31. package/dist/device/wohub2.js +20 -28
  32. package/dist/device/wohub2.js.map +1 -1
  33. package/dist/device/wohumi.d.ts +37 -2
  34. package/dist/device/wohumi.d.ts.map +1 -1
  35. package/dist/device/wohumi.js +51 -82
  36. package/dist/device/wohumi.js.map +1 -1
  37. package/dist/device/woiosensorth.d.ts +12 -1
  38. package/dist/device/woiosensorth.d.ts.map +1 -1
  39. package/dist/device/woiosensorth.js +24 -28
  40. package/dist/device/woiosensorth.js.map +1 -1
  41. package/dist/device/woplugmini.d.ts +45 -12
  42. package/dist/device/woplugmini.d.ts.map +1 -1
  43. package/dist/device/woplugmini.js +69 -75
  44. package/dist/device/woplugmini.js.map +1 -1
  45. package/dist/device/wopresence.d.ts +11 -1
  46. package/dist/device/wopresence.d.ts.map +1 -1
  47. package/dist/device/wopresence.js +20 -26
  48. package/dist/device/wopresence.js.map +1 -1
  49. package/dist/device/wosensorth.d.ts +18 -2
  50. package/dist/device/wosensorth.d.ts.map +1 -1
  51. package/dist/device/wosensorth.js +32 -48
  52. package/dist/device/wosensorth.js.map +1 -1
  53. package/dist/device/wosmartlock.d.ts +56 -13
  54. package/dist/device/wosmartlock.d.ts.map +1 -1
  55. package/dist/device/wosmartlock.js +106 -194
  56. package/dist/device/wosmartlock.js.map +1 -1
  57. package/dist/device/wosmartlockpro.d.ts +61 -18
  58. package/dist/device/wosmartlockpro.d.ts.map +1 -1
  59. package/dist/device/wosmartlockpro.js +114 -203
  60. package/dist/device/wosmartlockpro.js.map +1 -1
  61. package/dist/device/wostrip.d.ts +37 -18
  62. package/dist/device/wostrip.d.ts.map +1 -1
  63. package/dist/device/wostrip.js +78 -124
  64. package/dist/device/wostrip.js.map +1 -1
  65. package/dist/device.d.ts +87 -224
  66. package/dist/device.d.ts.map +1 -1
  67. package/dist/device.js +123 -407
  68. package/dist/device.js.map +1 -1
  69. package/dist/index.d.ts +8 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +8 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/parameter-checker.d.ts +78 -18
  74. package/dist/parameter-checker.d.ts.map +1 -1
  75. package/dist/parameter-checker.js +139 -334
  76. package/dist/parameter-checker.js.map +1 -1
  77. package/dist/settings.d.ts +46 -0
  78. package/dist/settings.d.ts.map +1 -1
  79. package/dist/settings.js +46 -2
  80. package/dist/settings.js.map +1 -1
  81. package/dist/switchbot-openapi.d.ts +56 -0
  82. package/dist/switchbot-openapi.d.ts.map +1 -0
  83. package/dist/switchbot-openapi.js +241 -0
  84. package/dist/switchbot-openapi.js.map +1 -0
  85. package/dist/switchbot.d.ts +41 -17
  86. package/dist/switchbot.d.ts.map +1 -1
  87. package/dist/switchbot.js +311 -176
  88. package/dist/switchbot.js.map +1 -1
  89. package/dist/test/woblindtilt.test.d.ts.map +1 -0
  90. package/dist/test/woblindtilt.test.js +97 -0
  91. package/dist/test/woblindtilt.test.js.map +1 -0
  92. package/dist/{device → test}/wobulb.test.d.ts.map +1 -1
  93. package/dist/test/wobulb.test.js +104 -0
  94. package/dist/test/wobulb.test.js.map +1 -0
  95. package/dist/test/woceilinglight.test.d.ts.map +1 -0
  96. package/dist/test/woceilinglight.test.js +95 -0
  97. package/dist/test/woceilinglight.test.js.map +1 -0
  98. package/dist/test/wocontact.test.d.ts.map +1 -0
  99. package/dist/test/wocontact.test.js +38 -0
  100. package/dist/test/wocontact.test.js.map +1 -0
  101. package/dist/test/wocurtain.test.d.ts.map +1 -0
  102. package/dist/test/wocurtain.test.js +76 -0
  103. package/dist/test/wocurtain.test.js.map +1 -0
  104. package/dist/{device → test}/wohand.test.d.ts.map +1 -1
  105. package/dist/test/wohand.test.js +76 -0
  106. package/dist/test/wohand.test.js.map +1 -0
  107. package/dist/test/wohub2.test.d.ts +2 -0
  108. package/dist/test/wohub2.test.d.ts.map +1 -0
  109. package/dist/{device/wohand2.test.js → test/wohub2.test.js} +10 -8
  110. package/dist/test/wohub2.test.js.map +1 -0
  111. package/dist/{device → test}/wohumi.test.d.ts.map +1 -1
  112. package/dist/{device → test}/wohumi.test.js +5 -2
  113. package/dist/test/wohumi.test.js.map +1 -0
  114. package/dist/test/woiosensorth.test.d.ts.map +1 -0
  115. package/dist/{device → test}/woiosensorth.test.js +11 -9
  116. package/dist/test/woiosensorth.test.js.map +1 -0
  117. package/dist/test/woplugmini.test.d.ts.map +1 -0
  118. package/dist/{device → test}/woplugmini.test.js +10 -5
  119. package/dist/test/woplugmini.test.js.map +1 -0
  120. package/dist/test/wopresence.test.d.ts.map +1 -0
  121. package/dist/{device → test}/wopresence.test.js +5 -1
  122. package/dist/test/wopresence.test.js.map +1 -0
  123. package/dist/test/wosensorth.test.d.ts.map +1 -0
  124. package/dist/{device → test}/wosensorth.test.js +5 -14
  125. package/dist/test/wosensorth.test.js.map +1 -0
  126. package/dist/test/wosmartlock.test.d.ts.map +1 -0
  127. package/dist/test/wosmartlock.test.js +147 -0
  128. package/dist/test/wosmartlock.test.js.map +1 -0
  129. package/dist/test/wosmartlockpro.test.d.ts.map +1 -0
  130. package/dist/{device → test}/wosmartlockpro.test.js +30 -26
  131. package/dist/test/wosmartlockpro.test.js.map +1 -0
  132. package/dist/{device → test}/wostrip.test.d.ts.map +1 -1
  133. package/dist/{device → test}/wostrip.test.js +18 -19
  134. package/dist/test/wostrip.test.js.map +1 -0
  135. package/dist/types/bledevicestatus.d.ts +4 -12
  136. package/dist/types/bledevicestatus.d.ts.map +1 -1
  137. package/dist/types/devicelist.d.ts.map +1 -1
  138. package/dist/types/devicelist.js +0 -4
  139. package/dist/types/devicelist.js.map +1 -1
  140. package/dist/types/deviceresponse.d.ts.map +1 -1
  141. package/dist/types/devicestatus.d.ts.map +1 -1
  142. package/dist/types/irdevicelist.d.ts.map +1 -1
  143. package/dist/types/pushbody.d.ts +1 -1
  144. package/dist/types/pushbody.d.ts.map +1 -1
  145. package/dist/types/types.d.ts +71 -120
  146. package/dist/types/types.d.ts.map +1 -1
  147. package/dist/types/types.js +10 -0
  148. package/dist/types/types.js.map +1 -1
  149. package/package.json +6 -4
  150. package/dist/device/woblindtilt.test.d.ts.map +0 -1
  151. package/dist/device/woblindtilt.test.js +0 -26
  152. package/dist/device/woblindtilt.test.js.map +0 -1
  153. package/dist/device/wobulb.test.js +0 -52
  154. package/dist/device/wobulb.test.js.map +0 -1
  155. package/dist/device/woceilinglight.test.d.ts.map +0 -1
  156. package/dist/device/woceilinglight.test.js +0 -63
  157. package/dist/device/woceilinglight.test.js.map +0 -1
  158. package/dist/device/wocontact.test.d.ts.map +0 -1
  159. package/dist/device/wocontact.test.js +0 -34
  160. package/dist/device/wocontact.test.js.map +0 -1
  161. package/dist/device/wocurtain.test.d.ts.map +0 -1
  162. package/dist/device/wocurtain.test.js +0 -33
  163. package/dist/device/wocurtain.test.js.map +0 -1
  164. package/dist/device/wohand.test.js +0 -62
  165. package/dist/device/wohand.test.js.map +0 -1
  166. package/dist/device/wohand2.test.d.ts +0 -2
  167. package/dist/device/wohand2.test.d.ts.map +0 -1
  168. package/dist/device/wohand2.test.js.map +0 -1
  169. package/dist/device/wohumi.test.js.map +0 -1
  170. package/dist/device/woiosensorth.test.d.ts.map +0 -1
  171. package/dist/device/woiosensorth.test.js.map +0 -1
  172. package/dist/device/woplugmini.test.d.ts.map +0 -1
  173. package/dist/device/woplugmini.test.js.map +0 -1
  174. package/dist/device/wopresence.test.d.ts.map +0 -1
  175. package/dist/device/wopresence.test.js.map +0 -1
  176. package/dist/device/wosensorth.test.d.ts.map +0 -1
  177. package/dist/device/wosensorth.test.js.map +0 -1
  178. package/dist/device/wosmartlock.test.d.ts.map +0 -1
  179. package/dist/device/wosmartlock.test.js +0 -84
  180. package/dist/device/wosmartlock.test.js.map +0 -1
  181. package/dist/device/wosmartlockpro.test.d.ts.map +0 -1
  182. package/dist/device/wosmartlockpro.test.js.map +0 -1
  183. package/dist/device/wostrip.test.js.map +0 -1
  184. /package/dist/{device → test}/woblindtilt.test.d.ts +0 -0
  185. /package/dist/{device → test}/wobulb.test.d.ts +0 -0
  186. /package/dist/{device → test}/woceilinglight.test.d.ts +0 -0
  187. /package/dist/{device → test}/wocontact.test.d.ts +0 -0
  188. /package/dist/{device → test}/wocurtain.test.d.ts +0 -0
  189. /package/dist/{device → test}/wohand.test.d.ts +0 -0
  190. /package/dist/{device → test}/wohumi.test.d.ts +0 -0
  191. /package/dist/{device → test}/woiosensorth.test.d.ts +0 -0
  192. /package/dist/{device → test}/woplugmini.test.d.ts +0 -0
  193. /package/dist/{device → test}/wopresence.test.d.ts +0 -0
  194. /package/dist/{device → test}/wosensorth.test.d.ts +0 -0
  195. /package/dist/{device → test}/wosmartlock.test.d.ts +0 -0
  196. /package/dist/{device → test}/wosmartlockpro.test.d.ts +0 -0
  197. /package/dist/{device → test}/wostrip.test.d.ts +0 -0
@@ -1,282 +1,193 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import * as Crypto from 'node:crypto';
3
- /*
4
- * wosmartlock.ts: Switchbot BLE API registration.
5
- * adapted off the work done by [pySwitchbot](https://github.com/Danielhiversen/pySwitchbot)
6
- */
7
3
  import { SwitchbotDevice } from '../device.js';
4
+ import { WoSmartLockProCommands } from '../settings.js';
8
5
  import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
6
+ /**
7
+ * Class representing a WoSmartLockPro device.
8
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/lock.md
9
+ */
9
10
  export class WoSmartLockPro extends SwitchbotDevice {
10
- _iv = null;
11
- _key_id;
12
- _encryption_key;
13
- static COMMAND_GET_CK_IV = '570f2103';
14
- static COMMAND_LOCK_INFO = '570f4f8102';
15
- static COMMAND_UNLOCK = '570f4e0101000080';
16
- static COMMAND_UNLOCK_NO_UNLATCH = '570f4e01010000a0';
17
- static COMMAND_LOCK = '570f4e0101000000';
18
- static COMMAND_ENABLE_NOTIFICATIONS = '570e01001e00008101';
19
- static COMMAND_DISABLE_NOTIFICATIONS = '570e00';
11
+ iv = null;
12
+ key_id = '';
13
+ encryption_key = null;
20
14
  static Result = {
21
15
  ERROR: 0x00,
22
16
  SUCCESS: 0x01,
23
17
  SUCCESS_LOW_BATTERY: 0x06,
24
18
  };
25
- static validateResponse(res) {
19
+ static async validateResponse(res) {
26
20
  if (res.length >= 3) {
27
- switch (res.readUInt8(0)) {
28
- case WoSmartLockPro.Result.SUCCESS:
29
- return WoSmartLockPro.Result.SUCCESS;
30
- case WoSmartLockPro.Result.SUCCESS_LOW_BATTERY:
31
- return WoSmartLockPro.Result.SUCCESS_LOW_BATTERY;
21
+ const result = res.readUInt8(0);
22
+ if (result === WoSmartLockPro.Result.SUCCESS || result === WoSmartLockPro.Result.SUCCESS_LOW_BATTERY) {
23
+ return result;
32
24
  }
33
25
  }
34
26
  return WoSmartLockPro.Result.ERROR;
35
27
  }
36
28
  static getLockStatus(code) {
37
- switch (code) {
38
- case 0b0000000:
39
- return 'LOCKED';
40
- case 0b0010000:
41
- return 'UNLOCKED';
42
- case 0b0100000:
43
- return 'LOCKING';
44
- case 0b0110000:
45
- return 'UNLOCKING';
46
- case 0b1000000:
47
- return 'LOCKING_STOP';
48
- case 0b1010000:
49
- return 'UNLOCKING_STOP';
50
- case 0b01100000: // Only EU lock type
51
- return 'NOT_FULLY_LOCKED';
52
- default:
53
- return 'UNKNOWN';
54
- }
29
+ const statusMap = {
30
+ 0b0000000: 'LOCKED',
31
+ 0b0010000: 'UNLOCKED',
32
+ 0b0100000: 'LOCKING',
33
+ 0b0110000: 'UNLOCKING',
34
+ 0b1000000: 'LOCKING_STOP',
35
+ 0b1010000: 'UNLOCKING_STOP',
36
+ 0b01100000: 'NOT_FULLY_LOCKED', // Only EU lock type
37
+ };
38
+ return statusMap[code] || 'UNKNOWN';
55
39
  }
56
40
  static async parseServiceData(serviceData, manufacturerData, onlog) {
57
41
  if (manufacturerData.length < 11) {
58
- if (onlog && typeof onlog === 'function') {
59
- onlog(`[parseServiceDataForWoSmartLockPro] Buffer length ${manufacturerData.length} is too short!`);
60
- }
42
+ onlog?.(`[parseServiceDataForWoSmartLockPro] Buffer length ${manufacturerData.length} is too short!`);
61
43
  return null;
62
44
  }
63
- // adv data needs both service data and manufacturer data
64
- // byte var names based on documentation
65
45
  const byte2 = serviceData.readUInt8(2);
66
46
  const byte7 = manufacturerData.readUInt8(7);
67
47
  const byte8 = manufacturerData.readUInt8(8);
68
48
  const byte9 = manufacturerData.readUInt8(9);
69
49
  const byte11 = manufacturerData.readUInt8(11);
70
- const battery = byte2 & 0b01111111; // %
71
- const calibration = !!(byte7 & 0b10000000);
72
- const status = WoSmartLockPro.getLockStatus((byte7 & 0b00111000) >> 3);
73
- const door_open = !!(byte8 & 0b01100000);
74
- // Double lock mode is not supported on Lock Pro
75
- const update_from_secondary_lock = false; // !!(byte7 & 0b00001000)
76
- const double_lock_mode = false; // !!(byte8 & 0b10000000)
77
- const unclosed_alarm = !!(byte11 & 0b10000000);
78
- const unlocked_alarm = !!(byte11 & 0b01000000);
79
- const auto_lock_paused = !!(byte8 & 0b100000);
80
- const night_latch = !!(byte9 & 0b00000001);
81
- // const manual = byte7 & 0b100000;
82
50
  const data = {
83
51
  model: SwitchBotBLEModel.LockPro,
84
52
  modelName: SwitchBotBLEModelName.LockPro,
85
53
  modelFriendlyName: SwitchBotBLEModelFriendlyName.LockPro,
86
- battery,
87
- calibration,
88
- status,
89
- update_from_secondary_lock,
90
- door_open,
91
- double_lock_mode,
92
- unclosed_alarm,
93
- unlocked_alarm,
94
- auto_lock_paused,
95
- night_latch,
54
+ battery: byte2 & 0b01111111,
55
+ calibration: !!(byte7 & 0b10000000),
56
+ status: WoSmartLockPro.getLockStatus((byte7 & 0b00111000) >> 3),
57
+ door_open: !!(byte8 & 0b01100000),
58
+ update_from_secondary_lock: false,
59
+ double_lock_mode: false,
60
+ unclosed_alarm: !!(byte11 & 0b10000000),
61
+ unlocked_alarm: !!(byte11 & 0b01000000),
62
+ auto_lock_paused: !!(byte8 & 0b100000),
63
+ night_latch: !!(byte9 & 0b00000001),
96
64
  };
97
65
  return data;
98
66
  }
99
67
  constructor(peripheral, noble) {
100
68
  super(peripheral, noble);
101
- this._iv = null;
102
- this._key_id = '';
103
- this._encryption_key = null;
104
69
  }
105
- /* ------------------------------------------------------------------
106
- * setKey()
107
- * - initialise the encryption key info for valid lock communication, this currently must be retrived externally
108
- *
109
- * [Arguments]
110
- * - keyId, encryptionKey
111
- *
112
- * [Return value]
113
- * - void
114
- * ---------------------------------------------------------------- */
70
+ /**
71
+ * Initializes the encryption key info for valid lock communication.
72
+ * @param {string} keyId - The key ID.
73
+ * @param {string} encryptionKey - The encryption key.
74
+ */
115
75
  async setKey(keyId, encryptionKey) {
116
- this._iv = null;
117
- this._key_id = keyId;
118
- this._encryption_key = Buffer.from(encryptionKey, 'hex');
76
+ this.iv = null;
77
+ this.key_id = keyId;
78
+ this.encryption_key = Buffer.from(encryptionKey, 'hex');
119
79
  }
120
- /* ------------------------------------------------------------------
121
- * unlock()
122
- * - Unlock the Smart Lock
123
- *
124
- * [Arguments]
125
- * - none
126
- *
127
- * [Return value]
128
- * - Promise object
129
- * WoSmartLockPro.LockResult will be passed to the `resolve()`.
130
- * ---------------------------------------------------------------- */
80
+ /**
81
+ * Unlocks the Smart Lock.
82
+ * @returns {Promise<number>} - The result of the unlock operation.
83
+ */
131
84
  async unlock() {
132
- await this.operateLockPro(WoSmartLockPro.COMMAND_UNLOCK)
133
- .then((resBuf) => {
134
- if (resBuf) {
135
- return WoSmartLockPro.validateResponse(resBuf);
136
- }
137
- else {
138
- return WoSmartLockPro.Result.ERROR;
139
- }
140
- })
141
- .catch((error) => {
142
- throw error;
143
- });
85
+ const resBuf = await this.operateLockPro(WoSmartLockProCommands.UNLOCK);
86
+ return resBuf ? WoSmartLockPro.validateResponse(resBuf) : WoSmartLockPro.Result.ERROR;
144
87
  }
145
- /* ------------------------------------------------------------------
146
- * unlockNoUnlatch()
147
- * - Unlock the Smart Lock without unlatching door
148
- *
149
- * [Arguments]
150
- * - none
151
- *
152
- * [Return value]
153
- * - Promise object
154
- * WoSmartLockPro.LockResult will be passed to the `resolve()`.
155
- * ---------------------------------------------------------------- */
88
+ /**
89
+ * Unlocks the Smart Lock without unlatching the door.
90
+ * @returns {Promise<number>} - The result of the unlock operation.
91
+ */
156
92
  async unlockNoUnlatch() {
157
- await this.operateLockPro(WoSmartLockPro.COMMAND_UNLOCK_NO_UNLATCH)
158
- .then((resBuf) => {
159
- if (resBuf) {
160
- return WoSmartLockPro.validateResponse(resBuf);
161
- }
162
- else {
163
- return WoSmartLockPro.Result.ERROR;
164
- }
165
- })
166
- .catch((error) => {
167
- throw error;
168
- });
93
+ const resBuf = await this.operateLockPro(WoSmartLockProCommands.UNLOCK_NO_UNLATCH);
94
+ return resBuf ? WoSmartLockPro.validateResponse(resBuf) : WoSmartLockPro.Result.ERROR;
169
95
  }
170
- /* ------------------------------------------------------------------
171
- * lock()
172
- * - Lock the Smart Lock
173
- *
174
- * [Arguments]
175
- * - none
176
- *
177
- * [Return value]
178
- * - Promise object
179
- * WoSmartLockPro.LockResult will be passed to the `resolve()`.
180
- * ---------------------------------------------------------------- */
96
+ /**
97
+ * Locks the Smart Lock.
98
+ * @returns {Promise<number>} - The result of the lock operation.
99
+ */
181
100
  async lock() {
182
- this.operateLockPro(WoSmartLockPro.COMMAND_LOCK)
183
- .then((resBuf) => {
184
- if (resBuf) {
185
- return WoSmartLockPro.validateResponse(resBuf);
186
- }
187
- else {
188
- return WoSmartLockPro.Result.ERROR;
189
- }
190
- })
191
- .catch((error) => {
192
- throw error;
193
- });
101
+ const resBuf = await this.operateLockPro(WoSmartLockProCommands.LOCK);
102
+ return resBuf ? WoSmartLockPro.validateResponse(resBuf) : WoSmartLockPro.Result.ERROR;
194
103
  }
195
- /* ------------------------------------------------------------------
196
- * info()
197
- * - Get general state info from the Smart Lock
198
- *
199
- * [Arguments]
200
- * - none
201
- *
202
- * [Return value]
203
- * - Promise object
204
- * state object will be passed to the `resolve()`
205
- * ---------------------------------------------------------------- */
104
+ /**
105
+ * Gets general state info from the Smart Lock.
106
+ * @returns {Promise<object | null>} - The state object or null if an error occurred.
107
+ */
206
108
  async info() {
207
- await this.operateLockPro(WoSmartLockPro.COMMAND_LOCK_INFO)
208
- .then((resBuf) => {
209
- if (resBuf) {
210
- const data = {
211
- calibration: Boolean(resBuf[0] & 0b10000000),
212
- status: WoSmartLockPro.getLockStatus((resBuf[0] & 0b01110000) >> 4),
213
- door_open: Boolean(resBuf[0] & 0b00000100),
214
- unclosed_alarm: Boolean(resBuf[1] & 0b00100000),
215
- unlocked_alarm: Boolean(resBuf[1] & 0b00010000),
216
- };
217
- return data;
218
- }
219
- else {
220
- return null;
221
- }
222
- })
223
- .catch((error) => {
224
- throw error;
225
- });
109
+ const resBuf = await this.operateLockPro(WoSmartLockProCommands.LOCK_INFO);
110
+ if (resBuf) {
111
+ return {
112
+ calibration: Boolean(resBuf[0] & 0b10000000),
113
+ status: WoSmartLockPro.getLockStatus((resBuf[0] & 0b01110000) >> 4),
114
+ door_open: Boolean(resBuf[0] & 0b00000100),
115
+ unclosed_alarm: Boolean(resBuf[1] & 0b00100000),
116
+ unlocked_alarm: Boolean(resBuf[1] & 0b00010000),
117
+ };
118
+ }
119
+ return null;
226
120
  }
121
+ /**
122
+ * Encrypts a string using AES-128-CTR.
123
+ * @param {string} str - The string to encrypt.
124
+ * @returns {Promise<string>} - The encrypted string in hex format.
125
+ */
227
126
  async encrypt(str) {
228
- const cipher = Crypto.createCipheriv('aes-128-ctr', this._encryption_key, this._iv);
127
+ const cipher = Crypto.createCipheriv('aes-128-ctr', this.encryption_key, this.iv);
229
128
  return Buffer.concat([cipher.update(str, 'hex'), cipher.final()]).toString('hex');
230
129
  }
130
+ /**
131
+ * Decrypts a buffer using AES-128-CTR.
132
+ * @param {Buffer} data - The data to decrypt.
133
+ * @returns {Promise<Buffer>} - The decrypted data.
134
+ */
231
135
  async decrypt(data) {
232
- const decipher = Crypto.createDecipheriv('aes-128-ctr', this._encryption_key, this._iv);
136
+ const decipher = Crypto.createDecipheriv('aes-128-ctr', this.encryption_key, this.iv);
233
137
  return Buffer.concat([decipher.update(data), decipher.final()]);
234
138
  }
139
+ /**
140
+ * Retrieves the IV from the device.
141
+ * @returns {Promise<Buffer>} - The IV buffer.
142
+ */
235
143
  async getIv() {
236
- if (this._iv === null) {
237
- const res = await this.operateLockPro(WoSmartLockPro.COMMAND_GET_CK_IV + this._key_id, false);
144
+ if (!this.iv) {
145
+ const res = await this.operateLockPro(WoSmartLockProCommands.GET_CKIV + this.key_id, false);
238
146
  if (res) {
239
- this._iv = res.subarray(4);
147
+ this.iv = res.subarray(4);
240
148
  }
241
149
  else {
242
150
  throw new Error('Failed to retrieve IV from the device.');
243
151
  }
244
152
  }
245
- return this._iv;
153
+ return this.iv;
246
154
  }
155
+ /**
156
+ * Sends an encrypted command to the device.
157
+ * @param {string} key - The command key.
158
+ * @returns {Promise<Buffer>} - The response buffer.
159
+ */
247
160
  async encryptedCommand(key) {
248
161
  const iv = await this.getIv();
249
- const req = Buffer.from(key.substring(0, 2) + this._key_id + Buffer.from(iv.subarray(0, 2)).toString('hex') + await this.encrypt(key.substring(2)), 'hex');
162
+ const req = Buffer.from(key.substring(0, 2) + this.key_id + Buffer.from(iv.subarray(0, 2)).toString('hex') + await this.encrypt(key.substring(2)), 'hex');
250
163
  const bytes = await this.command(req);
251
164
  const buf = Buffer.from(bytes);
252
165
  const code = WoSmartLockPro.validateResponse(buf);
253
- if (code !== WoSmartLockPro.Result.ERROR) {
166
+ if (await code !== WoSmartLockPro.Result.ERROR) {
254
167
  return Buffer.concat([buf.subarray(0, 1), await this.decrypt(buf.subarray(4))]);
255
168
  }
256
169
  else {
257
170
  throw new Error(`The device returned an error: 0x${buf.toString('hex')}`);
258
171
  }
259
172
  }
173
+ /**
174
+ * Operates the lock with the given command.
175
+ * @param {string} key - The command key.
176
+ * @param {boolean} [encrypt] - Whether to encrypt the command.
177
+ * @returns {Promise<Buffer>} - The response buffer.
178
+ */
260
179
  async operateLockPro(key, encrypt = true) {
261
- // encrypted command
262
180
  if (encrypt) {
263
181
  return this.encryptedCommand(key);
264
182
  }
265
183
  const req = Buffer.from(`${key.substring(0, 2)}000000${key.substring(2)}`, 'hex');
266
- await this.command(req)
267
- .then((bytes) => {
268
- const buf = Buffer.from(bytes);
269
- const code = WoSmartLockPro.validateResponse(buf);
270
- if (code === WoSmartLockPro.Result.ERROR) {
271
- throw new Error(`The device returned an error: 0x${buf.toString('hex')}`);
272
- }
273
- else {
274
- return buf;
275
- }
276
- })
277
- .catch((error) => {
278
- throw error;
279
- });
184
+ const bytes = await this.command(req);
185
+ const buf = Buffer.from(bytes);
186
+ const code = WoSmartLockPro.validateResponse(buf);
187
+ if (await code === WoSmartLockPro.Result.ERROR) {
188
+ throw new Error(`The device returned an error: 0x${buf.toString('hex')}`);
189
+ }
190
+ return buf;
280
191
  }
281
192
  }
282
193
  //# sourceMappingURL=wosmartlockpro.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wosmartlockpro.js","sourceRoot":"","sources":["../../src/device/wosmartlockpro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wosmartlockpro.js","sourceRoot":"","sources":["../../src/device/wosmartlockpro.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IAC1C,EAAE,GAAkB,IAAI,CAAA;IACxB,MAAM,GAAW,EAAE,CAAA;IACnB,cAAc,GAAkB,IAAI,CAAA;IAE3C,MAAM,CAAC,MAAM,GAAG;QACd,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,mBAAmB,EAAE,IAAI;KAC1B,CAAA;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAW;QACvC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YAC/B,IAAI,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBACrG,OAAO,MAAM,CAAA;YACf,CAAC;QACH,CAAC;QACD,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAA;IACpC,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,IAAY;QAC/B,MAAM,SAAS,GAA8B;YAC3C,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,gBAAgB;YAC3B,UAAU,EAAE,kBAAkB,EAAE,oBAAoB;SACrD,CAAA;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;IACrC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,WAAmB,EACnB,gBAAwB,EACxB,KAAiC;QAEjC,IAAI,gBAAgB,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACjC,KAAK,EAAE,CAAC,qDAAqD,gBAAgB,CAAC,MAAM,gBAAgB,CAAC,CAAA;YACrG,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAE7C,MAAM,IAAI,GAAuB;YAC/B,KAAK,EAAE,iBAAiB,CAAC,OAAO;YAChC,SAAS,EAAE,qBAAqB,CAAC,OAAO;YACxC,iBAAiB,EAAE,6BAA6B,CAAC,OAAO;YACxD,OAAO,EAAE,KAAK,GAAG,UAAU;YAC3B,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;YACnC,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/D,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;YACjC,0BAA0B,EAAE,KAAK;YACjC,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;YACvC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;YACvC,gBAAgB,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;SACpC,CAAA;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED,YAAY,UAA4B,EAAE,KAAmB;QAC3D,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,aAAqB;QAC/C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IACzD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAA;QACvE,OAAO,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAA;IACvF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;QAClF,OAAO,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAA;IACvF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;QACrE,OAAO,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAA;IACvF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAA;QAC1E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBAC5C,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBACnE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBAC1C,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBAC/C,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;aAChD,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAClF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QACtF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACjE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAC3F,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC3B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;YAC3D,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,GAAW;QAChC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CACrB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACzH,KAAK,CACN,CAAA;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAEjD,IAAI,MAAM,IAAI,KAAK,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,UAAmB,IAAI;QACvD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACjF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAEjD,IAAI,MAAM,IAAI,KAAK,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC"}
@@ -2,41 +2,60 @@ import type { stripLightServiceData } from '../types/bledevicestatus.js';
2
2
  import { Buffer } from 'node:buffer';
3
3
  import { SwitchbotDevice } from '../device.js';
4
4
  /**
5
- * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/colorbulb.md
5
+ * Class representing a WoStrip device.
6
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/ledstriplight.md
6
7
  */
7
8
  export declare class WoStrip extends SwitchbotDevice {
8
- static parseServiceData(serviceData: Buffer, onlog: ((message: string) => void) | undefined): Promise<stripLightServiceData | null>;
9
9
  /**
10
- * @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
10
+ * Parses the service data from the SwitchBot Strip Light.
11
+ * @param {Buffer} serviceData - The service data buffer.
12
+ * @param {(message: string) => void} [onlog] - Optional logging function.
13
+ * @returns {Promise<stripLightServiceData | null>} - Parsed service data or null if invalid.
11
14
  */
12
- readState(): Promise<void>;
15
+ static parseServiceData(serviceData: Buffer, onlog?: (message: string) => void): Promise<stripLightServiceData | null>;
13
16
  /**
14
- * @private
17
+ * Reads the state of the strip light.
18
+ * @returns {Promise<boolean>} - Resolves with true if the strip light is ON, false otherwise.
15
19
  */
16
- setState(reqByteArray: number[]): Promise<void>;
20
+ readState(): Promise<boolean>;
17
21
  /**
18
- * @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
22
+ * Sets the state of the strip light.
23
+ * @public
24
+ * @param {number[]} reqByteArray - The request byte array.
25
+ * @returns {Promise<boolean>} - Resolves with true if the operation was successful.
19
26
  */
20
- turnOn(): Promise<void>;
27
+ setState(reqByteArray: number[]): Promise<boolean>;
21
28
  /**
22
- * @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
29
+ * Turns the strip light on.
30
+ * @returns {Promise<boolean>} - Resolves with true if the strip light is ON.
23
31
  */
24
- turnOff(): Promise<void>;
32
+ turnOn(): Promise<boolean>;
25
33
  /**
26
- * @returns resolves with brightness percent
34
+ * Turns the strip light off.
35
+ * @returns {Promise<boolean>} - Resolves with true if the strip light is OFF.
27
36
  */
28
- setBrightness(brightness: number): Promise<void>;
37
+ turnOff(): Promise<boolean>;
29
38
  /**
30
- * @returns resolves with color temperature
39
+ * Sets the brightness of the strip light.
40
+ * @param {number} brightness - The brightness percentage (0-100).
41
+ * @returns {Promise<boolean>} - Resolves with true if the operation was successful.
31
42
  */
32
- setColorTemperature(color_temperature: unknown): Promise<void>;
43
+ setBrightness(brightness: number): Promise<boolean>;
33
44
  /**
34
- * @returns resolves with brightness + rgb
45
+ * Sets the RGB values of the strip light.
46
+ * @param {number} brightness - The brightness percentage (0-100).
47
+ * @param {number} red - The red value (0-255).
48
+ * @param {number} green - The green value (0-255).
49
+ * @param {number} blue - The blue value (0-255).
50
+ * @returns {Promise<boolean>} - Resolves with true if the operation was successful.
35
51
  */
36
- setRGB(brightness: number, red: number, green: number, blue: number): Promise<void>;
52
+ setRGB(brightness: number, red: number, green: number, blue: number): Promise<boolean>;
37
53
  /**
38
- * @private
54
+ * Operates the strip light with the given byte array.
55
+ * @public
56
+ * @param {number[]} bytes - The byte array to send.
57
+ * @returns {Promise<boolean>} - Resolves with true if the operation was successful.
39
58
  */
40
- operateStripLight(bytes: number[]): Promise<void>;
59
+ operateStripLight(bytes: number[]): Promise<boolean>;
41
60
  }
42
61
  //# sourceMappingURL=wostrip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wostrip.d.ts","sourceRoot":"","sources":["../../src/device/wostrip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;GAEG;AACH,qBAAa,OAAQ,SAAQ,eAAe;WAC7B,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAC7C,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAkDxC;;OAEG;IACG,SAAS;IAIf;;OAEG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;IAKrC;;OAEG;IACG,MAAM;IAIZ;;OAEG;IACG,OAAO;IAIb;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM;IAYtC;;OAEG;IACG,mBAAmB,CAAC,iBAAiB,EAAE,OAAO;IAMpD;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAoCzE;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE;CAqBxC"}
1
+ {"version":3,"file":"wostrip.d.ts","sourceRoot":"","sources":["../../src/device/wostrip.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,eAAe;IAC1C;;;;;OAKG;WACU,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAoCxC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC;;;;;OAKG;IACU,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC;;;;OAIG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOzD;;;;;;;OAOG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa5F;;;;;OAKG;IACU,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAelE"}