@switchbot/openapi-cli 3.2.1 → 3.3.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.
Files changed (332) hide show
  1. package/README.md +3 -1
  2. package/dist/index.js +57419 -170
  3. package/package.json +9 -5
  4. package/dist/api/client.d.ts +0 -31
  5. package/dist/api/client.js +0 -236
  6. package/dist/api/client.js.map +0 -1
  7. package/dist/auth.d.ts +0 -1
  8. package/dist/auth.js +0 -21
  9. package/dist/auth.js.map +0 -1
  10. package/dist/commands/agent-bootstrap.d.ts +0 -10
  11. package/dist/commands/agent-bootstrap.js +0 -200
  12. package/dist/commands/agent-bootstrap.js.map +0 -1
  13. package/dist/commands/auth.d.ts +0 -18
  14. package/dist/commands/auth.js +0 -355
  15. package/dist/commands/auth.js.map +0 -1
  16. package/dist/commands/batch.d.ts +0 -2
  17. package/dist/commands/batch.js +0 -414
  18. package/dist/commands/batch.js.map +0 -1
  19. package/dist/commands/cache.d.ts +0 -2
  20. package/dist/commands/cache.js +0 -127
  21. package/dist/commands/cache.js.map +0 -1
  22. package/dist/commands/capabilities.d.ts +0 -31
  23. package/dist/commands/capabilities.js +0 -383
  24. package/dist/commands/capabilities.js.map +0 -1
  25. package/dist/commands/catalog.d.ts +0 -2
  26. package/dist/commands/catalog.js +0 -360
  27. package/dist/commands/catalog.js.map +0 -1
  28. package/dist/commands/completion.d.ts +0 -2
  29. package/dist/commands/completion.js +0 -386
  30. package/dist/commands/completion.js.map +0 -1
  31. package/dist/commands/config.d.ts +0 -21
  32. package/dist/commands/config.js +0 -377
  33. package/dist/commands/config.js.map +0 -1
  34. package/dist/commands/daemon.d.ts +0 -2
  35. package/dist/commands/daemon.js +0 -411
  36. package/dist/commands/daemon.js.map +0 -1
  37. package/dist/commands/device-meta.d.ts +0 -2
  38. package/dist/commands/device-meta.js +0 -160
  39. package/dist/commands/device-meta.js.map +0 -1
  40. package/dist/commands/devices.d.ts +0 -2
  41. package/dist/commands/devices.js +0 -949
  42. package/dist/commands/devices.js.map +0 -1
  43. package/dist/commands/doctor.d.ts +0 -3
  44. package/dist/commands/doctor.js +0 -1016
  45. package/dist/commands/doctor.js.map +0 -1
  46. package/dist/commands/events.d.ts +0 -31
  47. package/dist/commands/events.js +0 -564
  48. package/dist/commands/events.js.map +0 -1
  49. package/dist/commands/expand.d.ts +0 -2
  50. package/dist/commands/expand.js +0 -131
  51. package/dist/commands/expand.js.map +0 -1
  52. package/dist/commands/explain.d.ts +0 -2
  53. package/dist/commands/explain.js +0 -140
  54. package/dist/commands/explain.js.map +0 -1
  55. package/dist/commands/health.d.ts +0 -8
  56. package/dist/commands/health.js +0 -114
  57. package/dist/commands/health.js.map +0 -1
  58. package/dist/commands/history.d.ts +0 -2
  59. package/dist/commands/history.js +0 -321
  60. package/dist/commands/history.js.map +0 -1
  61. package/dist/commands/identity.d.ts +0 -45
  62. package/dist/commands/identity.js +0 -60
  63. package/dist/commands/identity.js.map +0 -1
  64. package/dist/commands/install.d.ts +0 -20
  65. package/dist/commands/install.js +0 -247
  66. package/dist/commands/install.js.map +0 -1
  67. package/dist/commands/mcp.d.ts +0 -14
  68. package/dist/commands/mcp.js +0 -2018
  69. package/dist/commands/mcp.js.map +0 -1
  70. package/dist/commands/plan.d.ts +0 -51
  71. package/dist/commands/plan.js +0 -654
  72. package/dist/commands/plan.js.map +0 -1
  73. package/dist/commands/policy.d.ts +0 -24
  74. package/dist/commands/policy.js +0 -587
  75. package/dist/commands/policy.js.map +0 -1
  76. package/dist/commands/quota.d.ts +0 -2
  77. package/dist/commands/quota.js +0 -79
  78. package/dist/commands/quota.js.map +0 -1
  79. package/dist/commands/rules.d.ts +0 -2
  80. package/dist/commands/rules.js +0 -876
  81. package/dist/commands/rules.js.map +0 -1
  82. package/dist/commands/scenes.d.ts +0 -2
  83. package/dist/commands/scenes.js +0 -265
  84. package/dist/commands/scenes.js.map +0 -1
  85. package/dist/commands/schema.d.ts +0 -2
  86. package/dist/commands/schema.js +0 -185
  87. package/dist/commands/schema.js.map +0 -1
  88. package/dist/commands/status-sync.d.ts +0 -2
  89. package/dist/commands/status-sync.js +0 -132
  90. package/dist/commands/status-sync.js.map +0 -1
  91. package/dist/commands/uninstall.d.ts +0 -20
  92. package/dist/commands/uninstall.js +0 -238
  93. package/dist/commands/uninstall.js.map +0 -1
  94. package/dist/commands/upgrade-check.d.ts +0 -2
  95. package/dist/commands/upgrade-check.js +0 -107
  96. package/dist/commands/upgrade-check.js.map +0 -1
  97. package/dist/commands/watch.d.ts +0 -2
  98. package/dist/commands/watch.js +0 -195
  99. package/dist/commands/watch.js.map +0 -1
  100. package/dist/commands/webhook.d.ts +0 -2
  101. package/dist/commands/webhook.js +0 -183
  102. package/dist/commands/webhook.js.map +0 -1
  103. package/dist/config.d.ts +0 -57
  104. package/dist/config.js +0 -259
  105. package/dist/config.js.map +0 -1
  106. package/dist/credentials/backends/file.d.ts +0 -18
  107. package/dist/credentials/backends/file.js +0 -102
  108. package/dist/credentials/backends/file.js.map +0 -1
  109. package/dist/credentials/backends/linux.d.ts +0 -16
  110. package/dist/credentials/backends/linux.js +0 -130
  111. package/dist/credentials/backends/linux.js.map +0 -1
  112. package/dist/credentials/backends/macos.d.ts +0 -18
  113. package/dist/credentials/backends/macos.js +0 -130
  114. package/dist/credentials/backends/macos.js.map +0 -1
  115. package/dist/credentials/backends/windows.d.ts +0 -23
  116. package/dist/credentials/backends/windows.js +0 -216
  117. package/dist/credentials/backends/windows.js.map +0 -1
  118. package/dist/credentials/keychain.d.ts +0 -83
  119. package/dist/credentials/keychain.js +0 -89
  120. package/dist/credentials/keychain.js.map +0 -1
  121. package/dist/credentials/prime.d.ts +0 -32
  122. package/dist/credentials/prime.js +0 -53
  123. package/dist/credentials/prime.js.map +0 -1
  124. package/dist/devices/cache.d.ts +0 -79
  125. package/dist/devices/cache.js +0 -294
  126. package/dist/devices/cache.js.map +0 -1
  127. package/dist/devices/catalog.d.ts +0 -138
  128. package/dist/devices/catalog.js +0 -768
  129. package/dist/devices/catalog.js.map +0 -1
  130. package/dist/devices/device-meta.d.ts +0 -15
  131. package/dist/devices/device-meta.js +0 -57
  132. package/dist/devices/device-meta.js.map +0 -1
  133. package/dist/devices/history-agg.d.ts +0 -37
  134. package/dist/devices/history-agg.js +0 -139
  135. package/dist/devices/history-agg.js.map +0 -1
  136. package/dist/devices/history-query.d.ts +0 -45
  137. package/dist/devices/history-query.js +0 -182
  138. package/dist/devices/history-query.js.map +0 -1
  139. package/dist/devices/param-validator.d.ts +0 -40
  140. package/dist/devices/param-validator.js +0 -434
  141. package/dist/devices/param-validator.js.map +0 -1
  142. package/dist/devices/resources.d.ts +0 -74
  143. package/dist/devices/resources.js +0 -271
  144. package/dist/devices/resources.js.map +0 -1
  145. package/dist/index.d.ts +0 -1
  146. package/dist/index.js.map +0 -1
  147. package/dist/install/default-steps.d.ts +0 -66
  148. package/dist/install/default-steps.js +0 -258
  149. package/dist/install/default-steps.js.map +0 -1
  150. package/dist/install/preflight.d.ts +0 -60
  151. package/dist/install/preflight.js +0 -213
  152. package/dist/install/preflight.js.map +0 -1
  153. package/dist/install/steps.d.ts +0 -61
  154. package/dist/install/steps.js +0 -68
  155. package/dist/install/steps.js.map +0 -1
  156. package/dist/lib/command-keywords.d.ts +0 -5
  157. package/dist/lib/command-keywords.js +0 -18
  158. package/dist/lib/command-keywords.js.map +0 -1
  159. package/dist/lib/daemon-state.d.ts +0 -24
  160. package/dist/lib/daemon-state.js +0 -47
  161. package/dist/lib/daemon-state.js.map +0 -1
  162. package/dist/lib/destructive-mode.d.ts +0 -2
  163. package/dist/lib/destructive-mode.js +0 -13
  164. package/dist/lib/destructive-mode.js.map +0 -1
  165. package/dist/lib/devices.d.ts +0 -151
  166. package/dist/lib/devices.js +0 -383
  167. package/dist/lib/devices.js.map +0 -1
  168. package/dist/lib/idempotency.d.ts +0 -46
  169. package/dist/lib/idempotency.js +0 -107
  170. package/dist/lib/idempotency.js.map +0 -1
  171. package/dist/lib/plan-store.d.ts +0 -19
  172. package/dist/lib/plan-store.js +0 -69
  173. package/dist/lib/plan-store.js.map +0 -1
  174. package/dist/lib/request-context.d.ts +0 -7
  175. package/dist/lib/request-context.js +0 -13
  176. package/dist/lib/request-context.js.map +0 -1
  177. package/dist/lib/scenes.d.ts +0 -7
  178. package/dist/lib/scenes.js +0 -11
  179. package/dist/lib/scenes.js.map +0 -1
  180. package/dist/logger.d.ts +0 -4
  181. package/dist/logger.js +0 -17
  182. package/dist/logger.js.map +0 -1
  183. package/dist/mcp/device-history.d.ts +0 -36
  184. package/dist/mcp/device-history.js +0 -146
  185. package/dist/mcp/device-history.js.map +0 -1
  186. package/dist/mcp/events-subscription.d.ts +0 -45
  187. package/dist/mcp/events-subscription.js +0 -214
  188. package/dist/mcp/events-subscription.js.map +0 -1
  189. package/dist/mqtt/client.d.ts +0 -25
  190. package/dist/mqtt/client.js +0 -181
  191. package/dist/mqtt/client.js.map +0 -1
  192. package/dist/mqtt/credential.d.ts +0 -16
  193. package/dist/mqtt/credential.js +0 -31
  194. package/dist/mqtt/credential.js.map +0 -1
  195. package/dist/policy/add-rule.d.ts +0 -21
  196. package/dist/policy/add-rule.js +0 -125
  197. package/dist/policy/add-rule.js.map +0 -1
  198. package/dist/policy/diff.d.ts +0 -21
  199. package/dist/policy/diff.js +0 -92
  200. package/dist/policy/diff.js.map +0 -1
  201. package/dist/policy/format.d.ts +0 -6
  202. package/dist/policy/format.js +0 -58
  203. package/dist/policy/format.js.map +0 -1
  204. package/dist/policy/load.d.ts +0 -32
  205. package/dist/policy/load.js +0 -62
  206. package/dist/policy/load.js.map +0 -1
  207. package/dist/policy/migrate.d.ts +0 -21
  208. package/dist/policy/migrate.js +0 -68
  209. package/dist/policy/migrate.js.map +0 -1
  210. package/dist/policy/schema.d.ts +0 -5
  211. package/dist/policy/schema.js +0 -19
  212. package/dist/policy/schema.js.map +0 -1
  213. package/dist/policy/validate.d.ts +0 -19
  214. package/dist/policy/validate.js +0 -263
  215. package/dist/policy/validate.js.map +0 -1
  216. package/dist/rules/action.d.ts +0 -65
  217. package/dist/rules/action.js +0 -217
  218. package/dist/rules/action.js.map +0 -1
  219. package/dist/rules/audit-query.d.ts +0 -51
  220. package/dist/rules/audit-query.js +0 -90
  221. package/dist/rules/audit-query.js.map +0 -1
  222. package/dist/rules/conflict-analyzer.d.ts +0 -57
  223. package/dist/rules/conflict-analyzer.js +0 -215
  224. package/dist/rules/conflict-analyzer.js.map +0 -1
  225. package/dist/rules/cron-scheduler.d.ts +0 -62
  226. package/dist/rules/cron-scheduler.js +0 -187
  227. package/dist/rules/cron-scheduler.js.map +0 -1
  228. package/dist/rules/destructive.d.ts +0 -20
  229. package/dist/rules/destructive.js +0 -53
  230. package/dist/rules/destructive.js.map +0 -1
  231. package/dist/rules/engine.d.ts +0 -193
  232. package/dist/rules/engine.js +0 -758
  233. package/dist/rules/engine.js.map +0 -1
  234. package/dist/rules/matcher.d.ts +0 -56
  235. package/dist/rules/matcher.js +0 -231
  236. package/dist/rules/matcher.js.map +0 -1
  237. package/dist/rules/pid-file.d.ts +0 -43
  238. package/dist/rules/pid-file.js +0 -96
  239. package/dist/rules/pid-file.js.map +0 -1
  240. package/dist/rules/quiet-hours.d.ts +0 -26
  241. package/dist/rules/quiet-hours.js +0 -46
  242. package/dist/rules/quiet-hours.js.map +0 -1
  243. package/dist/rules/suggest.d.ts +0 -20
  244. package/dist/rules/suggest.js +0 -96
  245. package/dist/rules/suggest.js.map +0 -1
  246. package/dist/rules/throttle.d.ts +0 -61
  247. package/dist/rules/throttle.js +0 -117
  248. package/dist/rules/throttle.js.map +0 -1
  249. package/dist/rules/types.d.ts +0 -117
  250. package/dist/rules/types.js +0 -35
  251. package/dist/rules/types.js.map +0 -1
  252. package/dist/rules/webhook-listener.d.ts +0 -63
  253. package/dist/rules/webhook-listener.js +0 -224
  254. package/dist/rules/webhook-listener.js.map +0 -1
  255. package/dist/rules/webhook-token.d.ts +0 -50
  256. package/dist/rules/webhook-token.js +0 -91
  257. package/dist/rules/webhook-token.js.map +0 -1
  258. package/dist/schema/field-aliases.d.ts +0 -34
  259. package/dist/schema/field-aliases.js +0 -132
  260. package/dist/schema/field-aliases.js.map +0 -1
  261. package/dist/sinks/dispatcher.d.ts +0 -7
  262. package/dist/sinks/dispatcher.js +0 -13
  263. package/dist/sinks/dispatcher.js.map +0 -1
  264. package/dist/sinks/file.d.ts +0 -6
  265. package/dist/sinks/file.js +0 -20
  266. package/dist/sinks/file.js.map +0 -1
  267. package/dist/sinks/format.d.ts +0 -20
  268. package/dist/sinks/format.js +0 -57
  269. package/dist/sinks/format.js.map +0 -1
  270. package/dist/sinks/homeassistant.d.ts +0 -18
  271. package/dist/sinks/homeassistant.js +0 -45
  272. package/dist/sinks/homeassistant.js.map +0 -1
  273. package/dist/sinks/openclaw.d.ts +0 -13
  274. package/dist/sinks/openclaw.js +0 -34
  275. package/dist/sinks/openclaw.js.map +0 -1
  276. package/dist/sinks/stdout.d.ts +0 -4
  277. package/dist/sinks/stdout.js +0 -6
  278. package/dist/sinks/stdout.js.map +0 -1
  279. package/dist/sinks/telegram.d.ts +0 -11
  280. package/dist/sinks/telegram.js +0 -29
  281. package/dist/sinks/telegram.js.map +0 -1
  282. package/dist/sinks/types.d.ts +0 -13
  283. package/dist/sinks/types.js +0 -2
  284. package/dist/sinks/types.js.map +0 -1
  285. package/dist/sinks/webhook.d.ts +0 -6
  286. package/dist/sinks/webhook.js +0 -23
  287. package/dist/sinks/webhook.js.map +0 -1
  288. package/dist/status-sync/manager.d.ts +0 -48
  289. package/dist/status-sync/manager.js +0 -269
  290. package/dist/status-sync/manager.js.map +0 -1
  291. package/dist/utils/arg-parsers.d.ts +0 -16
  292. package/dist/utils/arg-parsers.js +0 -67
  293. package/dist/utils/arg-parsers.js.map +0 -1
  294. package/dist/utils/audit.d.ts +0 -69
  295. package/dist/utils/audit.js +0 -122
  296. package/dist/utils/audit.js.map +0 -1
  297. package/dist/utils/filter.d.ts +0 -81
  298. package/dist/utils/filter.js +0 -190
  299. package/dist/utils/filter.js.map +0 -1
  300. package/dist/utils/flags.d.ts +0 -72
  301. package/dist/utils/flags.js +0 -187
  302. package/dist/utils/flags.js.map +0 -1
  303. package/dist/utils/format.d.ts +0 -9
  304. package/dist/utils/format.js +0 -118
  305. package/dist/utils/format.js.map +0 -1
  306. package/dist/utils/health.d.ts +0 -48
  307. package/dist/utils/health.js +0 -102
  308. package/dist/utils/health.js.map +0 -1
  309. package/dist/utils/help-json.d.ts +0 -39
  310. package/dist/utils/help-json.js +0 -55
  311. package/dist/utils/help-json.js.map +0 -1
  312. package/dist/utils/name-resolver.d.ts +0 -26
  313. package/dist/utils/name-resolver.js +0 -138
  314. package/dist/utils/name-resolver.js.map +0 -1
  315. package/dist/utils/output.d.ts +0 -73
  316. package/dist/utils/output.js +0 -405
  317. package/dist/utils/output.js.map +0 -1
  318. package/dist/utils/quota.d.ts +0 -61
  319. package/dist/utils/quota.js +0 -228
  320. package/dist/utils/quota.js.map +0 -1
  321. package/dist/utils/redact.d.ts +0 -23
  322. package/dist/utils/redact.js +0 -69
  323. package/dist/utils/redact.js.map +0 -1
  324. package/dist/utils/retry.d.ts +0 -72
  325. package/dist/utils/retry.js +0 -141
  326. package/dist/utils/retry.js.map +0 -1
  327. package/dist/utils/string.d.ts +0 -2
  328. package/dist/utils/string.js +0 -23
  329. package/dist/utils/string.js.map +0 -1
  330. package/dist/version.d.ts +0 -2
  331. package/dist/version.js +0 -5
  332. package/dist/version.js.map +0 -1
@@ -1,271 +0,0 @@
1
- /**
2
- * Declarative metadata for non-device resources exposed by the SwitchBot API:
3
- * scenes, webhooks, and keypad credentials ("keys").
4
- *
5
- * Consumed by `capabilities --json` and `schema export` so AI agents can
6
- * discover these surfaces the same way they discover device commands.
7
- *
8
- * Scope:
9
- * - Descriptive metadata only (no runtime execution — CLI/MCP handlers stay
10
- * source-of-truth for behavior).
11
- * - Webhook event list is derived from the device catalog and is advisory —
12
- * not every SwitchBot device actually pushes every listed event; refer to
13
- * the SwitchBot webhook docs for authoritative shapes.
14
- */
15
- const COMMON_WEBHOOK_FIELDS = [
16
- { name: 'deviceType', type: 'string', description: 'SwitchBot device type string', example: 'WoMeter' },
17
- { name: 'deviceMac', type: 'string', description: 'Bluetooth MAC address (uppercase, colon-separated)', example: 'AA:BB:CC:11:22:33' },
18
- { name: 'timeOfSample', type: 'timestamp', description: 'Millisecond Unix timestamp when the sample was taken', example: 1700000000000 },
19
- ];
20
- export const RESOURCE_CATALOG = {
21
- scenes: {
22
- description: 'Manual scenes (IFTTT-style rules) authored in the SwitchBot app. Execution is fire-and-forget from the cloud — side-effects happen on the user\'s devices.',
23
- operations: [
24
- {
25
- verb: 'list',
26
- method: 'GET',
27
- endpoint: '/v1.1/scenes',
28
- params: [],
29
- safetyTier: 'read',
30
- },
31
- {
32
- verb: 'execute',
33
- method: 'POST',
34
- endpoint: '/v1.1/scenes/{sceneId}/execute',
35
- params: [{ name: 'sceneId', required: true, type: 'string' }],
36
- safetyTier: 'mutation',
37
- },
38
- {
39
- verb: 'describe',
40
- method: 'GET',
41
- endpoint: '/v1.1/scenes/{sceneId}',
42
- params: [{ name: 'sceneId', required: true, type: 'string' }],
43
- safetyTier: 'read',
44
- },
45
- ],
46
- },
47
- webhooks: {
48
- endpoints: [
49
- {
50
- verb: 'setup',
51
- method: 'POST',
52
- path: '/v1.1/webhook/setupWebhook',
53
- safetyTier: 'mutation',
54
- requiredParams: ['url'],
55
- },
56
- {
57
- verb: 'query',
58
- method: 'POST',
59
- path: '/v1.1/webhook/queryWebhook',
60
- safetyTier: 'read',
61
- requiredParams: ['action'],
62
- },
63
- {
64
- verb: 'update',
65
- method: 'POST',
66
- path: '/v1.1/webhook/updateWebhook',
67
- safetyTier: 'mutation',
68
- requiredParams: ['url', 'enable'],
69
- },
70
- {
71
- verb: 'delete',
72
- method: 'POST',
73
- path: '/v1.1/webhook/deleteWebhook',
74
- safetyTier: 'destructive',
75
- requiredParams: ['url'],
76
- },
77
- ],
78
- events: [
79
- {
80
- eventType: 'WoMeter',
81
- devicePattern: 'Meter / Meter Plus / Indoor-Outdoor Meter',
82
- fields: [
83
- ...COMMON_WEBHOOK_FIELDS,
84
- { name: 'temperature', type: 'number', description: 'Ambient temperature in Celsius', example: 22.5 },
85
- { name: 'humidity', type: 'number', description: 'Relative humidity (%)', example: 45 },
86
- { name: 'battery', type: 'number', description: 'Battery remaining (%)', example: 88 },
87
- ],
88
- },
89
- {
90
- eventType: 'WoCO2Sensor',
91
- devicePattern: 'CO2 Monitor',
92
- fields: [
93
- ...COMMON_WEBHOOK_FIELDS,
94
- { name: 'CO2', type: 'number', description: 'CO2 concentration in ppm', example: 520 },
95
- { name: 'temperature', type: 'number', description: 'Ambient temperature in Celsius' },
96
- { name: 'humidity', type: 'number', description: 'Relative humidity (%)' },
97
- ],
98
- },
99
- {
100
- eventType: 'WoPresence',
101
- devicePattern: 'Motion Sensor / Video Doorbell motion',
102
- fields: [
103
- ...COMMON_WEBHOOK_FIELDS,
104
- { name: 'detectionState', type: 'string', description: 'Detection result word', example: 'DETECTED' },
105
- ],
106
- },
107
- {
108
- eventType: 'WoContact',
109
- devicePattern: 'Contact Sensor',
110
- fields: [
111
- ...COMMON_WEBHOOK_FIELDS,
112
- { name: 'openState', type: 'string', description: 'Door/window state', example: 'open' },
113
- { name: 'moveDetected', type: 'boolean', description: 'Motion detected during this sample' },
114
- ],
115
- },
116
- {
117
- eventType: 'WoLock',
118
- devicePattern: 'Smart Lock / Smart Lock Lite / Smart Lock Pro',
119
- fields: [
120
- ...COMMON_WEBHOOK_FIELDS,
121
- { name: 'lockState', type: 'string', description: 'Lock state: locked, unlocked, jammed', example: 'locked' },
122
- { name: 'battery', type: 'number', description: 'Battery remaining (%)' },
123
- ],
124
- },
125
- {
126
- eventType: 'WoPlug',
127
- devicePattern: 'Plug Mini / Plug / Relay Switch',
128
- fields: [
129
- ...COMMON_WEBHOOK_FIELDS,
130
- { name: 'power', type: 'string', description: 'Power state (on/off)', example: 'on' },
131
- { name: 'voltage', type: 'number', description: 'Instantaneous voltage (V)' },
132
- { name: 'electricCurrent', type: 'number', description: 'Instantaneous current (A)' },
133
- ],
134
- },
135
- {
136
- eventType: 'WoBot',
137
- devicePattern: 'Bot',
138
- fields: [
139
- ...COMMON_WEBHOOK_FIELDS,
140
- { name: 'power', type: 'string', description: 'Power state (on/off)' },
141
- { name: 'battery', type: 'number', description: 'Battery remaining (%)' },
142
- ],
143
- },
144
- {
145
- eventType: 'WoCurtain',
146
- devicePattern: 'Curtain / Blind Tilt / Roller Shade',
147
- fields: [
148
- ...COMMON_WEBHOOK_FIELDS,
149
- { name: 'slidePosition', type: 'number', description: 'Current slide position (0–100)' },
150
- { name: 'calibrate', type: 'boolean', description: 'True if device is calibrated' },
151
- ],
152
- },
153
- {
154
- eventType: 'WoDoorbell',
155
- devicePattern: 'Video Doorbell button press',
156
- fields: [
157
- ...COMMON_WEBHOOK_FIELDS,
158
- { name: 'buttonName', type: 'string', description: 'Identifier of the pressed button' },
159
- { name: 'pressedAt', type: 'timestamp', description: 'Press timestamp in milliseconds' },
160
- ],
161
- },
162
- {
163
- eventType: 'WoKeypad',
164
- devicePattern: 'Keypad scan / createKey result / deleteKey result',
165
- fields: [
166
- ...COMMON_WEBHOOK_FIELDS,
167
- { name: 'eventType', type: 'string', description: 'Sub-event (createKey / deleteKey / invalidCode)' },
168
- { name: 'commandId', type: 'string', description: 'Correlation id returned by the original command' },
169
- { name: 'result', type: 'string', description: 'Outcome (success / failed / timeout)' },
170
- ],
171
- },
172
- {
173
- eventType: 'WoColorBulb',
174
- devicePattern: 'Color Bulb',
175
- fields: [
176
- ...COMMON_WEBHOOK_FIELDS,
177
- { name: 'power', type: 'string', description: 'Power state (on/off)' },
178
- { name: 'brightness', type: 'number', description: 'Brightness (0–100)' },
179
- { name: 'color', type: 'string', description: 'RGB triplet "r:g:b"' },
180
- { name: 'colorTemperature', type: 'number', description: 'Color temperature in Kelvin' },
181
- ],
182
- },
183
- {
184
- eventType: 'WoStrip',
185
- devicePattern: 'Strip Light',
186
- fields: [
187
- ...COMMON_WEBHOOK_FIELDS,
188
- { name: 'power', type: 'string', description: 'Power state (on/off)' },
189
- { name: 'brightness', type: 'number', description: 'Brightness (0–100)' },
190
- { name: 'color', type: 'string', description: 'RGB triplet "r:g:b"' },
191
- ],
192
- },
193
- {
194
- eventType: 'WoSweeper',
195
- devicePattern: 'Robot Vacuum',
196
- fields: [
197
- ...COMMON_WEBHOOK_FIELDS,
198
- { name: 'workingStatus', type: 'string', description: 'Cleaning state' },
199
- { name: 'battery', type: 'number', description: 'Battery remaining (%)' },
200
- { name: 'taskType', type: 'string', description: 'Current task (standby / clean / charge)' },
201
- ],
202
- },
203
- {
204
- eventType: 'WoWaterLeakDetect',
205
- devicePattern: 'Water Leak Detector',
206
- fields: [
207
- ...COMMON_WEBHOOK_FIELDS,
208
- { name: 'waterLeakDetect', type: 'number', description: 'Leak flag (0 = dry, 1 = leak detected)' },
209
- { name: 'battery', type: 'number', description: 'Battery remaining (%)' },
210
- ],
211
- },
212
- {
213
- eventType: 'WoHub',
214
- devicePattern: 'Hub 2 / Hub 3 (ambient sensors)',
215
- fields: [
216
- ...COMMON_WEBHOOK_FIELDS,
217
- { name: 'temperature', type: 'number', description: 'Ambient temperature in Celsius' },
218
- { name: 'humidity', type: 'number', description: 'Relative humidity (%)' },
219
- { name: 'lightLevel', type: 'number', description: 'Illuminance level' },
220
- ],
221
- },
222
- ],
223
- constraints: {
224
- maxUrlLength: 2048,
225
- maxWebhooksPerAccount: 1,
226
- },
227
- },
228
- keys: [
229
- {
230
- keyType: 'permanent',
231
- description: 'Passcode that never expires — valid until manually deleted.',
232
- requiredParams: ['name', 'password'],
233
- optionalParams: [],
234
- supportedDevices: ['Keypad', 'Keypad Touch'],
235
- safetyTier: 'destructive',
236
- },
237
- {
238
- keyType: 'timeLimit',
239
- description: 'Passcode valid only between startTime and endTime (Unix seconds).',
240
- requiredParams: ['name', 'password', 'startTime', 'endTime'],
241
- optionalParams: [],
242
- supportedDevices: ['Keypad', 'Keypad Touch'],
243
- safetyTier: 'destructive',
244
- },
245
- {
246
- keyType: 'disposable',
247
- description: 'Passcode that can be used once and then auto-expires.',
248
- requiredParams: ['name', 'password'],
249
- optionalParams: ['startTime', 'endTime'],
250
- supportedDevices: ['Keypad', 'Keypad Touch'],
251
- safetyTier: 'destructive',
252
- },
253
- {
254
- keyType: 'urgent',
255
- description: 'Emergency passcode (typically tied to panic / audit workflow).',
256
- requiredParams: ['name', 'password'],
257
- optionalParams: [],
258
- supportedDevices: ['Keypad', 'Keypad Touch'],
259
- safetyTier: 'destructive',
260
- },
261
- ],
262
- };
263
- /** Convenience: return the list of known webhook event types. */
264
- export function listWebhookEventTypes() {
265
- return RESOURCE_CATALOG.webhooks.events.map((e) => e.eventType);
266
- }
267
- /** Convenience: return the list of supported keypad key types. */
268
- export function listKeyTypes() {
269
- return RESOURCE_CATALOG.keys.map((k) => k.keyType);
270
- }
271
- //# sourceMappingURL=resources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/devices/resources.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Default install steps used by `switchbot install` (Phase 3B in-repo).
3
- *
4
- * Each factory returns an `InstallStep<InstallContext>` whose `execute`
5
- * and `undo` both operate on the shared context. Steps are intentionally
6
- * small — each one either mutates one system (keychain / filesystem /
7
- * symlink) or captures input, never a mix. The orchestrator composes
8
- * them in `src/commands/install.ts`.
9
- *
10
- * The step runner (`src/install/steps.ts`) handles rollback on failure;
11
- * these factories just make sure every `execute` records what it needs
12
- * into the context so the matching `undo` can unwind it.
13
- */
14
- import type { InstallStep } from './steps.js';
15
- import { type ScaffoldPolicyResult } from '../commands/policy.js';
16
- import { type CredentialStore, type CredentialBundle } from '../credentials/keychain.js';
17
- export type AgentName = 'claude-code' | 'cursor' | 'copilot' | 'none';
18
- export interface InstallContext {
19
- /** Profile to write credentials under (default `default`). */
20
- profile: string;
21
- /** Which agent to link the skill for. `none` → skip skill step. */
22
- agent: AgentName;
23
- /** Absolute path to a local clone of openclaw-switchbot-skill, or undefined. */
24
- skillPath?: string;
25
- /** Policy file path (default: from resolvePolicyPath()). */
26
- policyPath: string;
27
- /** Non-interactive credential file, read once and unlinked on success. */
28
- tokenFile?: string;
29
- /** True if stdout is not a TTY; forbids interactive prompting. */
30
- nonInteractive?: boolean;
31
- credentials?: CredentialBundle;
32
- credentialStore?: CredentialStore;
33
- credentialsWereStored?: boolean;
34
- previousCredentials?: CredentialBundle | null;
35
- policyScaffoldResult?: ScaffoldPolicyResult;
36
- skillLinkPath?: string;
37
- skillLinkCreated?: boolean;
38
- skillRecipePrinted?: boolean;
39
- doctorOk?: boolean;
40
- doctorReport?: unknown;
41
- }
42
- export declare function stepPromptCredentials(): InstallStep<InstallContext>;
43
- export declare function stepWriteKeychain(): InstallStep<InstallContext>;
44
- export declare function stepScaffoldPolicy(): InstallStep<InstallContext>;
45
- /**
46
- * Compute the on-disk location where an agent expects to find this skill.
47
- * Only `claude-code` has an automation path today; others are informational
48
- * (the installer will print a recipe instead of creating anything).
49
- */
50
- export declare function skillLinkPathFor(agent: AgentName, home?: string): string | null;
51
- export interface SymlinkSkillOptions {
52
- /** When true, replace an existing symlink even if it points elsewhere. */
53
- force?: boolean;
54
- }
55
- export declare function stepSymlinkSkill(opts?: SymlinkSkillOptions): InstallStep<InstallContext>;
56
- export interface DoctorSpawnResult {
57
- ok: boolean;
58
- exitCode: number | null;
59
- stdout: string;
60
- stderr: string;
61
- }
62
- export type DoctorSpawner = (cliPath: string, profile: string) => DoctorSpawnResult;
63
- export declare function stepDoctorVerify(opts?: {
64
- cliPath: string;
65
- spawner?: DoctorSpawner;
66
- }): InstallStep<InstallContext>;
@@ -1,258 +0,0 @@
1
- /**
2
- * Default install steps used by `switchbot install` (Phase 3B in-repo).
3
- *
4
- * Each factory returns an `InstallStep<InstallContext>` whose `execute`
5
- * and `undo` both operate on the shared context. Steps are intentionally
6
- * small — each one either mutates one system (keychain / filesystem /
7
- * symlink) or captures input, never a mix. The orchestrator composes
8
- * them in `src/commands/install.ts`.
9
- *
10
- * The step runner (`src/install/steps.ts`) handles rollback on failure;
11
- * these factories just make sure every `execute` records what it needs
12
- * into the context so the matching `undo` can unwind it.
13
- */
14
- import fs from 'node:fs';
15
- import path from 'node:path';
16
- import os from 'node:os';
17
- import { spawnSync } from 'node:child_process';
18
- import { scaffoldPolicyFile, PolicyFileExistsError, } from '../commands/policy.js';
19
- import { promptTokenAndSecret, readCredentialsFile } from '../commands/config.js';
20
- import { selectCredentialStore } from '../credentials/keychain.js';
21
- // ---------------------------------------------------------------------------
22
- // Step 1: capture credentials (memory only — no side effects until step 2)
23
- // ---------------------------------------------------------------------------
24
- export function stepPromptCredentials() {
25
- return {
26
- name: 'prompt-credentials',
27
- description: 'Collect SwitchBot token + secret (interactive unless --token-file)',
28
- async execute(ctx) {
29
- if (ctx.credentials)
30
- return; // already provided via API consumer
31
- if (ctx.tokenFile) {
32
- const creds = readCredentialsFile(ctx.tokenFile);
33
- ctx.credentials = creds;
34
- return;
35
- }
36
- if (ctx.nonInteractive) {
37
- throw new Error('no --token-file and stdin is not a TTY; pass --token-file <path> to install non-interactively');
38
- }
39
- ctx.credentials = await promptTokenAndSecret();
40
- },
41
- undo() {
42
- // No disk state created; clearing memory is enough.
43
- // The calling process will exit shortly after rollback, but null
44
- // the field for defence-in-depth.
45
- return;
46
- },
47
- };
48
- }
49
- // ---------------------------------------------------------------------------
50
- // Step 2: write credentials to keychain (or file fallback)
51
- // ---------------------------------------------------------------------------
52
- export function stepWriteKeychain() {
53
- return {
54
- name: 'write-keychain',
55
- description: 'Store credentials in the OS keychain (falls back to ~/.switchbot/config.json)',
56
- async execute(ctx) {
57
- if (!ctx.credentials) {
58
- throw new Error('internal: credentials missing at write-keychain; prompt step must run first');
59
- }
60
- const store = await selectCredentialStore();
61
- const previous = await store.get(ctx.profile);
62
- ctx.previousCredentials = previous;
63
- await store.set(ctx.profile, ctx.credentials);
64
- ctx.credentialStore = store;
65
- ctx.credentialsWereStored = true;
66
- },
67
- async undo(ctx) {
68
- if (!ctx.credentialsWereStored || !ctx.credentialStore)
69
- return;
70
- try {
71
- if (ctx.previousCredentials) {
72
- await ctx.credentialStore.set(ctx.profile, ctx.previousCredentials);
73
- }
74
- else {
75
- await ctx.credentialStore.delete(ctx.profile);
76
- }
77
- }
78
- finally {
79
- ctx.credentialsWereStored = false;
80
- ctx.previousCredentials = undefined;
81
- }
82
- },
83
- };
84
- }
85
- // ---------------------------------------------------------------------------
86
- // Step 3: scaffold policy.yaml if missing (skip if present, don't clobber)
87
- // ---------------------------------------------------------------------------
88
- export function stepScaffoldPolicy() {
89
- return {
90
- name: 'scaffold-policy',
91
- description: 'Create a starter policy.yaml (only if none exists)',
92
- execute(ctx) {
93
- try {
94
- const result = scaffoldPolicyFile(ctx.policyPath, { skipExisting: true });
95
- ctx.policyScaffoldResult = result;
96
- }
97
- catch (err) {
98
- if (err instanceof PolicyFileExistsError) {
99
- // skipExisting is true → this branch is unreachable, but be
100
- // defensive against future changes.
101
- return;
102
- }
103
- throw err;
104
- }
105
- },
106
- undo(ctx) {
107
- const r = ctx.policyScaffoldResult;
108
- if (!r || r.skipped)
109
- return;
110
- // Only remove the file if WE created it (skipped === false means
111
- // we wrote fresh content to a path that did not exist before).
112
- try {
113
- fs.unlinkSync(r.policyPath);
114
- }
115
- catch {
116
- // best-effort; do not fail rollback on cleanup
117
- }
118
- },
119
- };
120
- }
121
- // ---------------------------------------------------------------------------
122
- // Step 4: install skill into the agent's skills directory
123
- // ---------------------------------------------------------------------------
124
- /**
125
- * Compute the on-disk location where an agent expects to find this skill.
126
- * Only `claude-code` has an automation path today; others are informational
127
- * (the installer will print a recipe instead of creating anything).
128
- */
129
- export function skillLinkPathFor(agent, home = os.homedir()) {
130
- if (agent === 'claude-code') {
131
- return path.join(home, '.claude', 'skills', 'switchbot');
132
- }
133
- return null;
134
- }
135
- export function stepSymlinkSkill(opts = {}) {
136
- return {
137
- name: 'symlink-skill',
138
- description: 'Link the skill into ~/.claude/skills/switchbot (Claude Code)',
139
- execute(ctx) {
140
- if (ctx.agent === 'none')
141
- return;
142
- if (!ctx.skillPath) {
143
- // Informational path: print the recipe, do not fail. Undo can
144
- // safely no-op in this branch.
145
- ctx.skillRecipePrinted = true;
146
- return;
147
- }
148
- const target = path.resolve(ctx.skillPath);
149
- if (!fs.existsSync(target)) {
150
- throw new Error(`--skill-path does not exist: ${target}`);
151
- }
152
- const stat = fs.statSync(target);
153
- if (!stat.isDirectory()) {
154
- throw new Error(`--skill-path is not a directory: ${target}`);
155
- }
156
- const linkPath = skillLinkPathFor(ctx.agent);
157
- if (!linkPath) {
158
- // Non-automating agent: print a recipe instead of creating state.
159
- ctx.skillRecipePrinted = true;
160
- return;
161
- }
162
- // A2: require a SKILL.md only when we are about to create a link.
163
- // Non-automating agents (cursor/copilot) print a recipe and return
164
- // above, so they are never blocked by this check.
165
- if (!opts.force && !fs.existsSync(path.join(target, 'SKILL.md'))) {
166
- throw new Error(`${target} does not look like a skill (no SKILL.md at the root). ` +
167
- 'Pass --force if you really mean to link this directory.');
168
- }
169
- if (fs.existsSync(linkPath)) {
170
- const st = fs.lstatSync(linkPath);
171
- if (st.isSymbolicLink()) {
172
- // A3: tolerate an existing link only when it points at the same
173
- // target; otherwise the user is likely trying to repoint and we
174
- // should not silently pretend success. --force replaces it.
175
- let existingTarget = null;
176
- try {
177
- existingTarget = path.resolve(path.dirname(linkPath), fs.readlinkSync(linkPath));
178
- }
179
- catch {
180
- existingTarget = null;
181
- }
182
- if (existingTarget === target) {
183
- ctx.skillLinkPath = linkPath;
184
- ctx.skillLinkCreated = false;
185
- return;
186
- }
187
- if (!opts.force) {
188
- throw new Error(`${linkPath} already links to ${existingTarget ?? '(unreadable)'}; ` +
189
- 'pass --force to replace it, or run `switchbot uninstall` first.');
190
- }
191
- fs.unlinkSync(linkPath);
192
- }
193
- else {
194
- throw new Error(`${linkPath} exists and is not a symlink; refusing to clobber (move it aside and re-run)`);
195
- }
196
- }
197
- fs.mkdirSync(path.dirname(linkPath), { recursive: true });
198
- // Windows: regular symlinks require admin or Developer Mode. A
199
- // directory junction works for any user and is transparent to
200
- // most tools. Unix: plain symlink.
201
- const linkType = process.platform === 'win32' ? 'junction' : 'dir';
202
- fs.symlinkSync(target, linkPath, linkType);
203
- ctx.skillLinkPath = linkPath;
204
- ctx.skillLinkCreated = true;
205
- },
206
- undo(ctx) {
207
- if (!ctx.skillLinkCreated || !ctx.skillLinkPath)
208
- return;
209
- try {
210
- fs.unlinkSync(ctx.skillLinkPath);
211
- }
212
- catch {
213
- // best-effort
214
- }
215
- },
216
- };
217
- }
218
- function defaultDoctorSpawner(cliPath, profile) {
219
- const args = profile === 'default' ? [cliPath, 'doctor', '--json'] : [cliPath, '--profile', profile, 'doctor', '--json'];
220
- const r = spawnSync(process.execPath, args, { encoding: 'utf-8' });
221
- return {
222
- ok: r.status === 0,
223
- exitCode: r.status,
224
- stdout: r.stdout ?? '',
225
- stderr: r.stderr ?? '',
226
- };
227
- }
228
- export function stepDoctorVerify(opts = { cliPath: '' }) {
229
- const spawner = opts.spawner ?? defaultDoctorSpawner;
230
- const cliPath = opts.cliPath;
231
- return {
232
- name: 'doctor-verify',
233
- description: 'Verify the install with switchbot doctor --json',
234
- execute(ctx) {
235
- if (!cliPath) {
236
- // Fail closed: without a known CLI path we cannot spawn doctor.
237
- // Mark not-ok but still succeed (no rollback).
238
- ctx.doctorOk = false;
239
- ctx.doctorReport = { skipped: true, reason: 'no cliPath provided' };
240
- return;
241
- }
242
- const r = spawner(cliPath, ctx.profile);
243
- ctx.doctorOk = r.ok;
244
- try {
245
- ctx.doctorReport = r.stdout ? JSON.parse(r.stdout) : { exitCode: r.exitCode, stderr: r.stderr };
246
- }
247
- catch {
248
- ctx.doctorReport = { exitCode: r.exitCode, stdout: r.stdout, stderr: r.stderr };
249
- }
250
- // NOTE: never throw here. Doctor failure is reported; rollback is
251
- // opt-in by the user via `switchbot uninstall`.
252
- },
253
- undo() {
254
- return;
255
- },
256
- };
257
- }
258
- //# sourceMappingURL=default-steps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-steps.js","sourceRoot":"","sources":["../../src/install/default-steps.ts"],"names":[],"mappings":"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"}