@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 +0,0 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/rules/engine.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * Pure matching helpers for the rules engine.
3
- *
4
- * v0.2 scope:
5
- * - `matchesMqttTrigger` — event + optional deviceId filter
6
- * - `classifyMqttPayload` — heuristic that turns a raw shadow
7
- * payload into a canonical event name
8
- * - `evaluateConditions` — time_between (sync) + device_state
9
- * (async, requires caller-supplied fetcher)
10
- *
11
- * All matching stays pure: `evaluateConditions` does not touch the
12
- * filesystem, network, or globals. Callers inject a `fetchStatus`
13
- * function; the engine's caller-provided fetcher dedupes per-tick so
14
- * multiple rules querying the same device share one round trip.
15
- */
16
- import { type Condition, type EngineEvent, type MqttTrigger } from './types.js';
17
- /** Extract `deviceMac` + a classified event from a shadow message. */
18
- export declare function classifyMqttPayload(payload: unknown): {
19
- event: string;
20
- deviceId?: string;
21
- };
22
- /**
23
- * Compare an MQTT trigger against an `EngineEvent`. We accept a trigger
24
- * when the event name matches AND the optional `device` filter resolves
25
- * to the event's deviceId (callers pre-resolve aliases → deviceIds so
26
- * the matcher stays pure).
27
- */
28
- export declare function matchesMqttTrigger(trigger: MqttTrigger, event: EngineEvent, resolvedTriggerDeviceId: string | undefined): boolean;
29
- export interface ConditionEvaluation {
30
- matched: boolean;
31
- /** Condition names that failed — makes audit reasons specific. */
32
- failures: string[];
33
- /** Condition that referenced a runtime feature the engine can't support here. */
34
- unsupported: Array<{
35
- keyword: string;
36
- hint: string;
37
- }>;
38
- }
39
- /**
40
- * Pluggable status fetcher used by device_state conditions. Callers are
41
- * expected to memoise this per-tick — the matcher does not cache.
42
- */
43
- export type DeviceStatusFetcher = (deviceId: string) => Promise<Record<string, unknown>>;
44
- export interface EvaluateConditionsContext {
45
- aliases?: Record<string, string>;
46
- fetchStatus?: DeviceStatusFetcher;
47
- }
48
- /**
49
- * Evaluate all conditions; AND-joined at the top level. Composite nodes
50
- * (all/any/not) are evaluated recursively. Unsupported conditions short-
51
- * circuit to "not matched" and surface in `unsupported` so the engine
52
- * can warn loudly rather than silently drop fires. device_state
53
- * conditions need `ctx.fetchStatus` — without it they count as
54
- * unsupported (e.g. lint / dry list paths).
55
- */
56
- export declare function evaluateConditions(conditions: Condition[] | null | undefined, now: Date, ctx?: EvaluateConditionsContext): Promise<ConditionEvaluation>;
@@ -1,231 +0,0 @@
1
- /**
2
- * Pure matching helpers for the rules engine.
3
- *
4
- * v0.2 scope:
5
- * - `matchesMqttTrigger` — event + optional deviceId filter
6
- * - `classifyMqttPayload` — heuristic that turns a raw shadow
7
- * payload into a canonical event name
8
- * - `evaluateConditions` — time_between (sync) + device_state
9
- * (async, requires caller-supplied fetcher)
10
- *
11
- * All matching stays pure: `evaluateConditions` does not touch the
12
- * filesystem, network, or globals. Callers inject a `fetchStatus`
13
- * function; the engine's caller-provided fetcher dedupes per-tick so
14
- * multiple rules querying the same device share one round trip.
15
- */
16
- import { isDeviceState, isTimeBetween, isAllCondition, isAnyCondition, isNotCondition, } from './types.js';
17
- import { isWithinTuple } from './quiet-hours.js';
18
- /**
19
- * Mapped states from SwitchBot MQTT shadow payloads. Each entry lists
20
- * the canonical event name plus the payload-field + value that produces
21
- * it. Keep this table tiny in the PoC — we widen it as users ask for
22
- * more event names.
23
- */
24
- const EVENT_CLASSIFIERS = [
25
- { field: 'detectionState', value: 'DETECTED', event: 'motion.detected' },
26
- { field: 'detectionState', value: 'NOT_DETECTED', event: 'motion.cleared' },
27
- { field: 'openState', value: 'OPEN', event: 'contact.opened' },
28
- { field: 'openState', value: 'CLOSE', event: 'contact.closed' },
29
- { field: 'openState', value: 'TIMEOUT_NOT_CLOSED', event: 'contact.opened' },
30
- ];
31
- /** Extract `deviceMac` + a classified event from a shadow message. */
32
- export function classifyMqttPayload(payload) {
33
- const p = payload;
34
- const ctx = (p?.context ?? {});
35
- const deviceId = typeof ctx.deviceMac === 'string' ? ctx.deviceMac : undefined;
36
- for (const c of EVENT_CLASSIFIERS) {
37
- const raw = ctx[c.field];
38
- if (typeof raw !== 'string')
39
- continue;
40
- if (c.value instanceof RegExp ? c.value.test(raw) : raw === c.value) {
41
- return { event: c.event, deviceId };
42
- }
43
- }
44
- return { event: 'device.shadow', deviceId };
45
- }
46
- /**
47
- * Compare an MQTT trigger against an `EngineEvent`. We accept a trigger
48
- * when the event name matches AND the optional `device` filter resolves
49
- * to the event's deviceId (callers pre-resolve aliases → deviceIds so
50
- * the matcher stays pure).
51
- */
52
- export function matchesMqttTrigger(trigger, event, resolvedTriggerDeviceId) {
53
- if (event.source !== 'mqtt')
54
- return false;
55
- if (trigger.event !== event.event && trigger.event !== 'device.shadow')
56
- return false;
57
- if (resolvedTriggerDeviceId && event.deviceId && resolvedTriggerDeviceId !== event.deviceId) {
58
- return false;
59
- }
60
- return true;
61
- }
62
- /**
63
- * Evaluate all conditions; AND-joined at the top level. Composite nodes
64
- * (all/any/not) are evaluated recursively. Unsupported conditions short-
65
- * circuit to "not matched" and surface in `unsupported` so the engine
66
- * can warn loudly rather than silently drop fires. device_state
67
- * conditions need `ctx.fetchStatus` — without it they count as
68
- * unsupported (e.g. lint / dry list paths).
69
- */
70
- export async function evaluateConditions(conditions, now, ctx = {}) {
71
- const result = { matched: true, failures: [], unsupported: [] };
72
- if (!conditions || conditions.length === 0)
73
- return result;
74
- for (const c of conditions) {
75
- const sub = await evaluateSingle(c, now, ctx);
76
- if (!sub.matched) {
77
- result.matched = false;
78
- result.failures.push(...sub.failures);
79
- }
80
- result.unsupported.push(...sub.unsupported);
81
- if (!sub.matched && result.unsupported.length > 0) {
82
- // Propagate unsupported from inner composite even if outer still matched
83
- }
84
- }
85
- return result;
86
- }
87
- async function evaluateSingle(c, now, ctx) {
88
- const ok = { matched: true, failures: [], unsupported: [] };
89
- const fail = (msg) => ({ matched: false, failures: [msg], unsupported: [] });
90
- if (isAllCondition(c)) {
91
- const result = { matched: true, failures: [], unsupported: [] };
92
- for (const sub of c.all) {
93
- const r = await evaluateSingle(sub, now, ctx);
94
- if (!r.matched) {
95
- result.matched = false;
96
- result.failures.push(...r.failures);
97
- }
98
- result.unsupported.push(...r.unsupported);
99
- }
100
- return result;
101
- }
102
- if (isAnyCondition(c)) {
103
- const result = { matched: false, failures: [], unsupported: [] };
104
- for (const sub of c.any) {
105
- const r = await evaluateSingle(sub, now, ctx);
106
- result.unsupported.push(...r.unsupported);
107
- if (r.matched) {
108
- result.matched = true;
109
- result.failures = [];
110
- return result;
111
- }
112
- result.failures.push(...r.failures);
113
- }
114
- return result;
115
- }
116
- if (isNotCondition(c)) {
117
- const r = await evaluateSingle(c.not, now, ctx);
118
- if (r.unsupported.length > 0)
119
- return { matched: false, failures: [], unsupported: r.unsupported };
120
- return r.matched ? fail('not: inner condition matched (negated)') : ok;
121
- }
122
- if (isTimeBetween(c)) {
123
- return isWithinTuple(c.time_between, now)
124
- ? ok
125
- : fail(`time_between ${c.time_between[0]}-${c.time_between[1]} did not include ${now.toTimeString().slice(0, 5)}`);
126
- }
127
- if (isDeviceState(c)) {
128
- if (!ctx.fetchStatus) {
129
- return {
130
- matched: false,
131
- failures: [],
132
- unsupported: [{ keyword: 'device_state', hint: 'device_state evaluation requires a live status fetcher; this call site did not provide one.' }],
133
- };
134
- }
135
- const resolved = resolveDeviceRef(c.device, ctx.aliases);
136
- if (!resolved)
137
- return fail(`device_state: could not resolve device "${c.device}" to an id (no matching alias).`);
138
- try {
139
- const status = await ctx.fetchStatus(resolved);
140
- if (!compareField(status[c.field], c.op, c.value)) {
141
- const actual = formatValue(status[c.field]);
142
- const expected = formatValue(c.value);
143
- return fail(`device_state ${c.device}.${c.field} ${c.op} ${expected} (actual: ${actual})`);
144
- }
145
- return ok;
146
- }
147
- catch (err) {
148
- return fail(`device_state ${c.device}.${c.field}: fetch failed — ${err instanceof Error ? err.message : String(err)}`);
149
- }
150
- }
151
- return {
152
- matched: false,
153
- failures: [],
154
- unsupported: [{ keyword: 'unknown', hint: `Unrecognised condition shape: ${JSON.stringify(c).slice(0, 120)}` }],
155
- };
156
- }
157
- function resolveDeviceRef(ref, aliases) {
158
- if (!ref)
159
- return null;
160
- if (aliases && ref in aliases)
161
- return aliases[ref];
162
- // Raw deviceId (MAC / SwitchBot id) — accept as-is.
163
- return ref;
164
- }
165
- function compareField(actual, op, expected) {
166
- // Equality operators run on the raw values so booleans, numbers, and
167
- // strings all work naturally. Ordering operators coerce to numbers —
168
- // JSON statuses often arrive as strings like "22.5" so coercion is
169
- // what people mean when they write `battery >= 20`.
170
- switch (op) {
171
- case '==':
172
- return looseEqual(actual, expected);
173
- case '!=':
174
- return !looseEqual(actual, expected);
175
- case '<':
176
- case '>':
177
- case '<=':
178
- case '>=': {
179
- const a = toNumber(actual);
180
- const b = toNumber(expected);
181
- if (a === null || b === null)
182
- return false;
183
- if (op === '<')
184
- return a < b;
185
- if (op === '>')
186
- return a > b;
187
- if (op === '<=')
188
- return a <= b;
189
- return a >= b;
190
- }
191
- default:
192
- return false;
193
- }
194
- }
195
- function looseEqual(a, b) {
196
- if (a === b)
197
- return true;
198
- if (a === undefined || b === undefined || a === null || b === null)
199
- return false;
200
- // Strings from shadow payloads are case-sensitive for device states
201
- // (e.g. "on" / "off") — policy authors can match explicitly. Numbers
202
- // coerce through `Number()` so `"22" == 22` holds.
203
- if (typeof a === 'number' || typeof b === 'number') {
204
- const na = toNumber(a);
205
- const nb = toNumber(b);
206
- return na !== null && nb !== null && na === nb;
207
- }
208
- return String(a) === String(b);
209
- }
210
- function toNumber(v) {
211
- if (typeof v === 'number')
212
- return Number.isFinite(v) ? v : null;
213
- if (typeof v === 'string') {
214
- const trimmed = v.trim();
215
- if (!trimmed)
216
- return null;
217
- const n = Number(trimmed);
218
- return Number.isFinite(n) ? n : null;
219
- }
220
- if (typeof v === 'boolean')
221
- return v ? 1 : 0;
222
- return null;
223
- }
224
- function formatValue(v) {
225
- if (v === undefined)
226
- return 'undefined';
227
- if (typeof v === 'string')
228
- return JSON.stringify(v);
229
- return String(v);
230
- }
231
- //# sourceMappingURL=matcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/rules/matcher.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Cross-platform supervisor glue for `switchbot rules run`.
3
- *
4
- * The running engine registers a pid file and a reload sentinel under
5
- * `~/.switchbot/`; the `switchbot rules reload` subcommand reads them
6
- * to signal the live process:
7
- *
8
- * - Unix (SIGHUP supported): `process.kill(pid, 'SIGHUP')`.
9
- * - Windows (no SIGHUP): write `~/.switchbot/rules.reload`. The engine
10
- * polls this path and consumes it, so the same `rules reload`
11
- * command works on every platform.
12
- *
13
- * The files are tiny (<100 bytes) and created with 0o600; cleanup is
14
- * best-effort on exit so a crash leaves at most a stale pid the user
15
- * can overwrite with a fresh `rules run`.
16
- */
17
- export interface PidFilePaths {
18
- dir: string;
19
- pidFile: string;
20
- reloadFile: string;
21
- }
22
- export declare function getDefaultPidFilePaths(): PidFilePaths;
23
- /** Write the current process pid. Creates parent dir with 0700 if needed. */
24
- export declare function writePidFile(pidFile: string, pid?: number): void;
25
- /** Return the pid persisted in the file, or null if absent / unparseable. */
26
- export declare function readPidFile(pidFile: string): number | null;
27
- /**
28
- * Remove the pid file only when it still refers to the current process.
29
- * A stale file from an earlier run is left alone so we don't accidentally
30
- * clobber a new supervisor that already won the race.
31
- */
32
- export declare function clearPidFile(pidFile: string, pid?: number): void;
33
- export declare function writeReloadSentinel(reloadFile: string): void;
34
- export declare function consumeReloadSentinel(reloadFile: string): boolean;
35
- /** Detect whether SIGHUP is usable on the current platform. */
36
- export declare function sighupSupported(): boolean;
37
- /**
38
- * Check whether a pid is alive — used by `rules reload` to avoid
39
- * signalling dead pids, which would otherwise leave the user wondering
40
- * why nothing happened. Node's `process.kill(pid, 0)` throws `ESRCH`
41
- * for dead pids and `EPERM` for pids we cannot signal (still alive).
42
- */
43
- export declare function isPidAlive(pid: number): boolean;
@@ -1,96 +0,0 @@
1
- /**
2
- * Cross-platform supervisor glue for `switchbot rules run`.
3
- *
4
- * The running engine registers a pid file and a reload sentinel under
5
- * `~/.switchbot/`; the `switchbot rules reload` subcommand reads them
6
- * to signal the live process:
7
- *
8
- * - Unix (SIGHUP supported): `process.kill(pid, 'SIGHUP')`.
9
- * - Windows (no SIGHUP): write `~/.switchbot/rules.reload`. The engine
10
- * polls this path and consumes it, so the same `rules reload`
11
- * command works on every platform.
12
- *
13
- * The files are tiny (<100 bytes) and created with 0o600; cleanup is
14
- * best-effort on exit so a crash leaves at most a stale pid the user
15
- * can overwrite with a fresh `rules run`.
16
- */
17
- import fs from 'node:fs';
18
- import os from 'node:os';
19
- import path from 'node:path';
20
- const DEFAULT_DIR = path.join(os.homedir(), '.switchbot');
21
- export function getDefaultPidFilePaths() {
22
- return {
23
- dir: DEFAULT_DIR,
24
- pidFile: path.join(DEFAULT_DIR, 'rules.pid'),
25
- reloadFile: path.join(DEFAULT_DIR, 'rules.reload'),
26
- };
27
- }
28
- /** Write the current process pid. Creates parent dir with 0700 if needed. */
29
- export function writePidFile(pidFile, pid = process.pid) {
30
- const dir = path.dirname(pidFile);
31
- fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
32
- fs.writeFileSync(pidFile, `${pid}\n`, { mode: 0o600 });
33
- }
34
- /** Return the pid persisted in the file, or null if absent / unparseable. */
35
- export function readPidFile(pidFile) {
36
- try {
37
- const raw = fs.readFileSync(pidFile, 'utf-8').trim();
38
- const n = Number(raw);
39
- return Number.isInteger(n) && n > 0 ? n : null;
40
- }
41
- catch {
42
- return null;
43
- }
44
- }
45
- /**
46
- * Remove the pid file only when it still refers to the current process.
47
- * A stale file from an earlier run is left alone so we don't accidentally
48
- * clobber a new supervisor that already won the race.
49
- */
50
- export function clearPidFile(pidFile, pid = process.pid) {
51
- try {
52
- const existing = readPidFile(pidFile);
53
- if (existing === pid)
54
- fs.unlinkSync(pidFile);
55
- }
56
- catch {
57
- // best effort
58
- }
59
- }
60
- export function writeReloadSentinel(reloadFile) {
61
- const dir = path.dirname(reloadFile);
62
- fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
63
- fs.writeFileSync(reloadFile, `${Date.now()}\n`, { mode: 0o600 });
64
- }
65
- export function consumeReloadSentinel(reloadFile) {
66
- try {
67
- if (!fs.existsSync(reloadFile))
68
- return false;
69
- fs.unlinkSync(reloadFile);
70
- return true;
71
- }
72
- catch {
73
- return false;
74
- }
75
- }
76
- /** Detect whether SIGHUP is usable on the current platform. */
77
- export function sighupSupported() {
78
- return process.platform !== 'win32';
79
- }
80
- /**
81
- * Check whether a pid is alive — used by `rules reload` to avoid
82
- * signalling dead pids, which would otherwise leave the user wondering
83
- * why nothing happened. Node's `process.kill(pid, 0)` throws `ESRCH`
84
- * for dead pids and `EPERM` for pids we cannot signal (still alive).
85
- */
86
- export function isPidAlive(pid) {
87
- try {
88
- process.kill(pid, 0);
89
- return true;
90
- }
91
- catch (err) {
92
- const code = err.code;
93
- return code === 'EPERM';
94
- }
95
- }
96
- //# sourceMappingURL=pid-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pid-file.js","sourceRoot":"","sources":["../../src/rules/pid-file.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Time-window helpers shared by `time_between` conditions and (later)
3
- * the top-level `quiet_hours` block. Both evaluate a local-clock HH:MM
4
- * range that may cross midnight.
5
- */
6
- export interface TimeWindow {
7
- start: string;
8
- end: string;
9
- }
10
- /**
11
- * `true` when `now` falls inside the window. If `start > end` the window
12
- * is interpreted as overnight (e.g. 22:00 → 07:00 crosses midnight).
13
- *
14
- * Boundary semantics: start is inclusive, end is exclusive. A window of
15
- * 09:00 → 09:00 therefore matches nothing — callers who want "always"
16
- * should omit the condition entirely rather than fake it with equal
17
- * times.
18
- */
19
- export declare function isWithin(window: TimeWindow, now: Date): boolean;
20
- /** Convenience wrapper that accepts the schema's tuple shape. */
21
- export declare function isWithinTuple(range: [string, string], now: Date): boolean;
22
- /** Top-level quiet_hours block helper — same math, schema shape differs. */
23
- export declare function isInQuietHours(qh: {
24
- start?: string;
25
- end?: string;
26
- } | null | undefined, now: Date): boolean;
@@ -1,46 +0,0 @@
1
- /**
2
- * Time-window helpers shared by `time_between` conditions and (later)
3
- * the top-level `quiet_hours` block. Both evaluate a local-clock HH:MM
4
- * range that may cross midnight.
5
- */
6
- const HHMM = /^([01]\d|2[0-3]):[0-5]\d$/;
7
- function toMinutes(hhmm) {
8
- if (!HHMM.test(hhmm)) {
9
- throw new Error(`Invalid HH:MM value: "${hhmm}"`);
10
- }
11
- const [h, m] = hhmm.split(':').map(Number);
12
- return h * 60 + m;
13
- }
14
- function minutesOf(d) {
15
- return d.getHours() * 60 + d.getMinutes();
16
- }
17
- /**
18
- * `true` when `now` falls inside the window. If `start > end` the window
19
- * is interpreted as overnight (e.g. 22:00 → 07:00 crosses midnight).
20
- *
21
- * Boundary semantics: start is inclusive, end is exclusive. A window of
22
- * 09:00 → 09:00 therefore matches nothing — callers who want "always"
23
- * should omit the condition entirely rather than fake it with equal
24
- * times.
25
- */
26
- export function isWithin(window, now) {
27
- const s = toMinutes(window.start);
28
- const e = toMinutes(window.end);
29
- const n = minutesOf(now);
30
- if (s === e)
31
- return false;
32
- if (s < e)
33
- return n >= s && n < e;
34
- return n >= s || n < e;
35
- }
36
- /** Convenience wrapper that accepts the schema's tuple shape. */
37
- export function isWithinTuple(range, now) {
38
- return isWithin({ start: range[0], end: range[1] }, now);
39
- }
40
- /** Top-level quiet_hours block helper — same math, schema shape differs. */
41
- export function isInQuietHours(qh, now) {
42
- if (!qh?.start || !qh.end)
43
- return false;
44
- return isWithin({ start: qh.start, end: qh.end }, now);
45
- }
46
- //# sourceMappingURL=quiet-hours.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quiet-hours.js","sourceRoot":"","sources":["../../src/rules/quiet-hours.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAOzC,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,CAAO;IACxB,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAkB,EAAE,GAAS;IACpD,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,KAAuB,EAAE,GAAS;IAC9D,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAC5B,EAAuD,EACvD,GAAS;IAET,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC"}
@@ -1,20 +0,0 @@
1
- import type { Rule } from './types.js';
2
- export interface SuggestRuleOptions {
3
- intent: string;
4
- trigger?: 'mqtt' | 'cron' | 'webhook';
5
- devices?: Array<{
6
- id: string;
7
- name?: string;
8
- type?: string;
9
- }>;
10
- event?: string;
11
- schedule?: string;
12
- days?: string[];
13
- webhookPath?: string;
14
- }
15
- export interface SuggestRuleResult {
16
- rule: Rule;
17
- ruleYaml: string;
18
- warnings: string[];
19
- }
20
- export declare function suggestRule(opts: SuggestRuleOptions): SuggestRuleResult;