@switchbot/openapi-cli 3.1.1 → 3.2.1

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 (333) hide show
  1. package/README.md +3 -3
  2. package/dist/api/client.d.ts +31 -0
  3. package/dist/api/client.js +1 -0
  4. package/dist/api/client.js.map +1 -0
  5. package/dist/auth.d.ts +1 -0
  6. package/dist/auth.js +1 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/commands/agent-bootstrap.d.ts +10 -0
  9. package/dist/commands/agent-bootstrap.js +23 -5
  10. package/dist/commands/agent-bootstrap.js.map +1 -0
  11. package/dist/commands/auth.d.ts +18 -0
  12. package/dist/commands/auth.js +1 -0
  13. package/dist/commands/auth.js.map +1 -0
  14. package/dist/commands/batch.d.ts +2 -0
  15. package/dist/commands/batch.js +1 -0
  16. package/dist/commands/batch.js.map +1 -0
  17. package/dist/commands/cache.d.ts +2 -0
  18. package/dist/commands/cache.js +1 -0
  19. package/dist/commands/cache.js.map +1 -0
  20. package/dist/commands/capabilities.d.ts +31 -0
  21. package/dist/commands/capabilities.js +5 -7
  22. package/dist/commands/capabilities.js.map +1 -0
  23. package/dist/commands/catalog.d.ts +2 -0
  24. package/dist/commands/catalog.js +1 -0
  25. package/dist/commands/catalog.js.map +1 -0
  26. package/dist/commands/completion.d.ts +2 -0
  27. package/dist/commands/completion.js +1 -0
  28. package/dist/commands/completion.js.map +1 -0
  29. package/dist/commands/config.d.ts +21 -0
  30. package/dist/commands/config.js +1 -0
  31. package/dist/commands/config.js.map +1 -0
  32. package/dist/commands/daemon.d.ts +2 -0
  33. package/dist/commands/daemon.js +1 -0
  34. package/dist/commands/daemon.js.map +1 -0
  35. package/dist/commands/device-meta.d.ts +2 -0
  36. package/dist/commands/device-meta.js +1 -0
  37. package/dist/commands/device-meta.js.map +1 -0
  38. package/dist/commands/devices.d.ts +2 -0
  39. package/dist/commands/devices.js +1 -0
  40. package/dist/commands/devices.js.map +1 -0
  41. package/dist/commands/doctor.d.ts +3 -0
  42. package/dist/commands/doctor.js +1 -0
  43. package/dist/commands/doctor.js.map +1 -0
  44. package/dist/commands/events.d.ts +31 -0
  45. package/dist/commands/events.js +1 -0
  46. package/dist/commands/events.js.map +1 -0
  47. package/dist/commands/expand.d.ts +2 -0
  48. package/dist/commands/expand.js +1 -0
  49. package/dist/commands/expand.js.map +1 -0
  50. package/dist/commands/explain.d.ts +2 -0
  51. package/dist/commands/explain.js +1 -0
  52. package/dist/commands/explain.js.map +1 -0
  53. package/dist/commands/health.d.ts +8 -0
  54. package/dist/commands/health.js +1 -0
  55. package/dist/commands/health.js.map +1 -0
  56. package/dist/commands/history.d.ts +2 -0
  57. package/dist/commands/history.js +1 -0
  58. package/dist/commands/history.js.map +1 -0
  59. package/dist/commands/identity.d.ts +45 -0
  60. package/dist/commands/identity.js +1 -0
  61. package/dist/commands/identity.js.map +1 -0
  62. package/dist/commands/install.d.ts +20 -0
  63. package/dist/commands/install.js +1 -0
  64. package/dist/commands/install.js.map +1 -0
  65. package/dist/commands/mcp.d.ts +14 -0
  66. package/dist/commands/mcp.js +1 -0
  67. package/dist/commands/mcp.js.map +1 -0
  68. package/dist/commands/plan.d.ts +51 -0
  69. package/dist/commands/plan.js +1 -0
  70. package/dist/commands/plan.js.map +1 -0
  71. package/dist/commands/policy.d.ts +24 -0
  72. package/dist/commands/policy.js +1 -0
  73. package/dist/commands/policy.js.map +1 -0
  74. package/dist/commands/quota.d.ts +2 -0
  75. package/dist/commands/quota.js +1 -0
  76. package/dist/commands/quota.js.map +1 -0
  77. package/dist/commands/rules.d.ts +2 -0
  78. package/dist/commands/rules.js +1 -0
  79. package/dist/commands/rules.js.map +1 -0
  80. package/dist/commands/scenes.d.ts +2 -0
  81. package/dist/commands/scenes.js +1 -0
  82. package/dist/commands/scenes.js.map +1 -0
  83. package/dist/commands/schema.d.ts +2 -0
  84. package/dist/commands/schema.js +10 -2
  85. package/dist/commands/schema.js.map +1 -0
  86. package/dist/commands/status-sync.d.ts +2 -0
  87. package/dist/commands/status-sync.js +1 -0
  88. package/dist/commands/status-sync.js.map +1 -0
  89. package/dist/commands/uninstall.d.ts +20 -0
  90. package/dist/commands/uninstall.js +1 -0
  91. package/dist/commands/uninstall.js.map +1 -0
  92. package/dist/commands/upgrade-check.d.ts +2 -0
  93. package/dist/commands/upgrade-check.js +3 -3
  94. package/dist/commands/upgrade-check.js.map +1 -0
  95. package/dist/commands/watch.d.ts +2 -0
  96. package/dist/commands/watch.js +1 -0
  97. package/dist/commands/watch.js.map +1 -0
  98. package/dist/commands/webhook.d.ts +2 -0
  99. package/dist/commands/webhook.js +1 -0
  100. package/dist/commands/webhook.js.map +1 -0
  101. package/dist/config.d.ts +57 -0
  102. package/dist/config.js +1 -0
  103. package/dist/config.js.map +1 -0
  104. package/dist/credentials/backends/file.d.ts +18 -0
  105. package/dist/credentials/backends/file.js +1 -0
  106. package/dist/credentials/backends/file.js.map +1 -0
  107. package/dist/credentials/backends/linux.d.ts +16 -0
  108. package/dist/credentials/backends/linux.js +1 -0
  109. package/dist/credentials/backends/linux.js.map +1 -0
  110. package/dist/credentials/backends/macos.d.ts +18 -0
  111. package/dist/credentials/backends/macos.js +1 -0
  112. package/dist/credentials/backends/macos.js.map +1 -0
  113. package/dist/credentials/backends/windows.d.ts +23 -0
  114. package/dist/credentials/backends/windows.js +1 -0
  115. package/dist/credentials/backends/windows.js.map +1 -0
  116. package/dist/credentials/keychain.d.ts +83 -0
  117. package/dist/credentials/keychain.js +1 -0
  118. package/dist/credentials/keychain.js.map +1 -0
  119. package/dist/credentials/prime.d.ts +32 -0
  120. package/dist/credentials/prime.js +1 -0
  121. package/dist/credentials/prime.js.map +1 -0
  122. package/dist/devices/cache.d.ts +79 -0
  123. package/dist/devices/cache.js +1 -0
  124. package/dist/devices/cache.js.map +1 -0
  125. package/dist/devices/catalog.d.ts +138 -0
  126. package/dist/devices/catalog.js +1 -0
  127. package/dist/devices/catalog.js.map +1 -0
  128. package/dist/devices/device-meta.d.ts +15 -0
  129. package/dist/devices/device-meta.js +1 -0
  130. package/dist/devices/device-meta.js.map +1 -0
  131. package/dist/devices/history-agg.d.ts +37 -0
  132. package/dist/devices/history-agg.js +1 -0
  133. package/dist/devices/history-agg.js.map +1 -0
  134. package/dist/devices/history-query.d.ts +45 -0
  135. package/dist/devices/history-query.js +1 -0
  136. package/dist/devices/history-query.js.map +1 -0
  137. package/dist/devices/param-validator.d.ts +40 -0
  138. package/dist/devices/param-validator.js +1 -0
  139. package/dist/devices/param-validator.js.map +1 -0
  140. package/dist/devices/resources.d.ts +74 -0
  141. package/dist/devices/resources.js +1 -0
  142. package/dist/devices/resources.js.map +1 -0
  143. package/dist/index.d.ts +1 -0
  144. package/dist/index.js +1 -1
  145. package/dist/index.js.map +1 -0
  146. package/dist/install/default-steps.d.ts +66 -0
  147. package/dist/install/default-steps.js +1 -0
  148. package/dist/install/default-steps.js.map +1 -0
  149. package/dist/install/preflight.d.ts +60 -0
  150. package/dist/install/preflight.js +1 -0
  151. package/dist/install/preflight.js.map +1 -0
  152. package/dist/install/steps.d.ts +61 -0
  153. package/dist/install/steps.js +1 -0
  154. package/dist/install/steps.js.map +1 -0
  155. package/dist/lib/command-keywords.d.ts +5 -0
  156. package/dist/lib/command-keywords.js +1 -0
  157. package/dist/lib/command-keywords.js.map +1 -0
  158. package/dist/lib/daemon-state.d.ts +24 -0
  159. package/dist/lib/daemon-state.js +1 -0
  160. package/dist/lib/daemon-state.js.map +1 -0
  161. package/dist/lib/destructive-mode.d.ts +2 -0
  162. package/dist/lib/destructive-mode.js +1 -0
  163. package/dist/lib/destructive-mode.js.map +1 -0
  164. package/dist/lib/devices.d.ts +151 -0
  165. package/dist/lib/devices.js +1 -0
  166. package/dist/lib/devices.js.map +1 -0
  167. package/dist/lib/idempotency.d.ts +46 -0
  168. package/dist/lib/idempotency.js +1 -0
  169. package/dist/lib/idempotency.js.map +1 -0
  170. package/dist/lib/plan-store.d.ts +19 -0
  171. package/dist/lib/plan-store.js +1 -0
  172. package/dist/lib/plan-store.js.map +1 -0
  173. package/dist/lib/request-context.d.ts +7 -0
  174. package/dist/lib/request-context.js +1 -0
  175. package/dist/lib/request-context.js.map +1 -0
  176. package/dist/lib/scenes.d.ts +7 -0
  177. package/dist/lib/scenes.js +1 -0
  178. package/dist/lib/scenes.js.map +1 -0
  179. package/dist/logger.d.ts +4 -0
  180. package/dist/logger.js +1 -0
  181. package/dist/logger.js.map +1 -0
  182. package/dist/mcp/device-history.d.ts +36 -0
  183. package/dist/mcp/device-history.js +1 -0
  184. package/dist/mcp/device-history.js.map +1 -0
  185. package/dist/mcp/events-subscription.d.ts +45 -0
  186. package/dist/mcp/events-subscription.js +1 -0
  187. package/dist/mcp/events-subscription.js.map +1 -0
  188. package/dist/mqtt/client.d.ts +25 -0
  189. package/dist/mqtt/client.js +1 -0
  190. package/dist/mqtt/client.js.map +1 -0
  191. package/dist/mqtt/credential.d.ts +16 -0
  192. package/dist/mqtt/credential.js +1 -0
  193. package/dist/mqtt/credential.js.map +1 -0
  194. package/dist/policy/add-rule.d.ts +21 -0
  195. package/dist/policy/add-rule.js +1 -0
  196. package/dist/policy/add-rule.js.map +1 -0
  197. package/dist/policy/diff.d.ts +21 -0
  198. package/dist/policy/diff.js +1 -0
  199. package/dist/policy/diff.js.map +1 -0
  200. package/dist/policy/format.d.ts +6 -0
  201. package/dist/policy/format.js +1 -0
  202. package/dist/policy/format.js.map +1 -0
  203. package/dist/policy/load.d.ts +32 -0
  204. package/dist/policy/load.js +1 -0
  205. package/dist/policy/load.js.map +1 -0
  206. package/dist/policy/migrate.d.ts +21 -0
  207. package/dist/policy/migrate.js +1 -0
  208. package/dist/policy/migrate.js.map +1 -0
  209. package/dist/policy/schema/v0.2.json +1 -1
  210. package/dist/policy/schema.d.ts +5 -0
  211. package/dist/policy/schema.js +1 -0
  212. package/dist/policy/schema.js.map +1 -0
  213. package/dist/policy/validate.d.ts +19 -0
  214. package/dist/policy/validate.js +1 -0
  215. package/dist/policy/validate.js.map +1 -0
  216. package/dist/rules/action.d.ts +65 -0
  217. package/dist/rules/action.js +1 -0
  218. package/dist/rules/action.js.map +1 -0
  219. package/dist/rules/audit-query.d.ts +51 -0
  220. package/dist/rules/audit-query.js +1 -0
  221. package/dist/rules/audit-query.js.map +1 -0
  222. package/dist/rules/conflict-analyzer.d.ts +57 -0
  223. package/dist/rules/conflict-analyzer.js +1 -0
  224. package/dist/rules/conflict-analyzer.js.map +1 -0
  225. package/dist/rules/cron-scheduler.d.ts +62 -0
  226. package/dist/rules/cron-scheduler.js +1 -0
  227. package/dist/rules/cron-scheduler.js.map +1 -0
  228. package/dist/rules/destructive.d.ts +20 -0
  229. package/dist/rules/destructive.js +1 -0
  230. package/dist/rules/destructive.js.map +1 -0
  231. package/dist/rules/engine.d.ts +193 -0
  232. package/dist/rules/engine.js +1 -0
  233. package/dist/rules/engine.js.map +1 -0
  234. package/dist/rules/matcher.d.ts +56 -0
  235. package/dist/rules/matcher.js +1 -0
  236. package/dist/rules/matcher.js.map +1 -0
  237. package/dist/rules/pid-file.d.ts +43 -0
  238. package/dist/rules/pid-file.js +1 -0
  239. package/dist/rules/pid-file.js.map +1 -0
  240. package/dist/rules/quiet-hours.d.ts +26 -0
  241. package/dist/rules/quiet-hours.js +1 -0
  242. package/dist/rules/quiet-hours.js.map +1 -0
  243. package/dist/rules/suggest.d.ts +20 -0
  244. package/dist/rules/suggest.js +1 -0
  245. package/dist/rules/suggest.js.map +1 -0
  246. package/dist/rules/throttle.d.ts +61 -0
  247. package/dist/rules/throttle.js +1 -0
  248. package/dist/rules/throttle.js.map +1 -0
  249. package/dist/rules/types.d.ts +117 -0
  250. package/dist/rules/types.js +1 -0
  251. package/dist/rules/types.js.map +1 -0
  252. package/dist/rules/webhook-listener.d.ts +63 -0
  253. package/dist/rules/webhook-listener.js +1 -0
  254. package/dist/rules/webhook-listener.js.map +1 -0
  255. package/dist/rules/webhook-token.d.ts +50 -0
  256. package/dist/rules/webhook-token.js +1 -0
  257. package/dist/rules/webhook-token.js.map +1 -0
  258. package/dist/schema/field-aliases.d.ts +34 -0
  259. package/dist/schema/field-aliases.js +1 -0
  260. package/dist/schema/field-aliases.js.map +1 -0
  261. package/dist/sinks/dispatcher.d.ts +7 -0
  262. package/dist/sinks/dispatcher.js +1 -0
  263. package/dist/sinks/dispatcher.js.map +1 -0
  264. package/dist/sinks/file.d.ts +6 -0
  265. package/dist/sinks/file.js +1 -0
  266. package/dist/sinks/file.js.map +1 -0
  267. package/dist/sinks/format.d.ts +20 -0
  268. package/dist/sinks/format.js +1 -0
  269. package/dist/sinks/format.js.map +1 -0
  270. package/dist/sinks/homeassistant.d.ts +18 -0
  271. package/dist/sinks/homeassistant.js +1 -0
  272. package/dist/sinks/homeassistant.js.map +1 -0
  273. package/dist/sinks/openclaw.d.ts +13 -0
  274. package/dist/sinks/openclaw.js +1 -0
  275. package/dist/sinks/openclaw.js.map +1 -0
  276. package/dist/sinks/stdout.d.ts +4 -0
  277. package/dist/sinks/stdout.js +1 -0
  278. package/dist/sinks/stdout.js.map +1 -0
  279. package/dist/sinks/telegram.d.ts +11 -0
  280. package/dist/sinks/telegram.js +1 -0
  281. package/dist/sinks/telegram.js.map +1 -0
  282. package/dist/sinks/types.d.ts +13 -0
  283. package/dist/sinks/types.js +1 -0
  284. package/dist/sinks/types.js.map +1 -0
  285. package/dist/sinks/webhook.d.ts +6 -0
  286. package/dist/sinks/webhook.js +1 -0
  287. package/dist/sinks/webhook.js.map +1 -0
  288. package/dist/status-sync/manager.d.ts +48 -0
  289. package/dist/status-sync/manager.js +1 -0
  290. package/dist/status-sync/manager.js.map +1 -0
  291. package/dist/utils/arg-parsers.d.ts +16 -0
  292. package/dist/utils/arg-parsers.js +1 -0
  293. package/dist/utils/arg-parsers.js.map +1 -0
  294. package/dist/utils/audit.d.ts +69 -0
  295. package/dist/utils/audit.js +1 -0
  296. package/dist/utils/audit.js.map +1 -0
  297. package/dist/utils/filter.d.ts +81 -0
  298. package/dist/utils/filter.js +1 -0
  299. package/dist/utils/filter.js.map +1 -0
  300. package/dist/utils/flags.d.ts +72 -0
  301. package/dist/utils/flags.js +1 -0
  302. package/dist/utils/flags.js.map +1 -0
  303. package/dist/utils/format.d.ts +9 -0
  304. package/dist/utils/format.js +1 -0
  305. package/dist/utils/format.js.map +1 -0
  306. package/dist/utils/health.d.ts +48 -0
  307. package/dist/utils/health.js +1 -0
  308. package/dist/utils/health.js.map +1 -0
  309. package/dist/utils/help-json.d.ts +39 -0
  310. package/dist/utils/help-json.js +1 -0
  311. package/dist/utils/help-json.js.map +1 -0
  312. package/dist/utils/name-resolver.d.ts +26 -0
  313. package/dist/utils/name-resolver.js +1 -0
  314. package/dist/utils/name-resolver.js.map +1 -0
  315. package/dist/utils/output.d.ts +73 -0
  316. package/dist/utils/output.js +1 -0
  317. package/dist/utils/output.js.map +1 -0
  318. package/dist/utils/quota.d.ts +61 -0
  319. package/dist/utils/quota.js +1 -0
  320. package/dist/utils/quota.js.map +1 -0
  321. package/dist/utils/redact.d.ts +23 -0
  322. package/dist/utils/redact.js +1 -0
  323. package/dist/utils/redact.js.map +1 -0
  324. package/dist/utils/retry.d.ts +72 -0
  325. package/dist/utils/retry.js +1 -0
  326. package/dist/utils/retry.js.map +1 -0
  327. package/dist/utils/string.d.ts +2 -0
  328. package/dist/utils/string.js +1 -0
  329. package/dist/utils/string.js.map +1 -0
  330. package/dist/version.d.ts +2 -0
  331. package/dist/version.js +1 -0
  332. package/dist/version.js.map +1 -0
  333. package/package.json +4 -3
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Shared filters + aggregations over the audit log for
3
+ * `switchbot rules tail` and `switchbot rules replay`.
4
+ *
5
+ * All functions are pure — no I/O, no clock reads — so they can be
6
+ * unit-tested with fixture arrays. The CLI entry points handle file
7
+ * reading, `--follow` tailing, and human vs JSON rendering.
8
+ */
9
+ import type { AuditEntry, AuditEntryKind } from '../utils/audit.js';
10
+ /** The subset of audit kinds the rules engine emits. */
11
+ export declare const RULE_AUDIT_KINDS: readonly AuditEntryKind[];
12
+ export interface RuleAuditFilter {
13
+ /** Filter entries with `t >= sinceMs`. Unbounded when undefined. */
14
+ sinceMs?: number;
15
+ /** Filter to a single rule name (matched against entry.rule?.name). */
16
+ ruleName?: string;
17
+ /** Only these kinds are returned. Defaults to RULE_AUDIT_KINDS. */
18
+ kinds?: readonly AuditEntryKind[];
19
+ }
20
+ /** Keep entries that are rule-engine emitted and match the filter. */
21
+ export declare function filterRuleAudits(entries: readonly AuditEntry[], filter?: RuleAuditFilter): AuditEntry[];
22
+ export interface RuleSummary {
23
+ /** Rule name as recorded in the audit entry. */
24
+ rule: string;
25
+ /** Number of real (non-dry) fires. */
26
+ fires: number;
27
+ /** Number of dry fires. */
28
+ driesFires: number;
29
+ /** Number of throttled skips. */
30
+ throttled: number;
31
+ /** Number of entries whose `result === 'error'`. */
32
+ errors: number;
33
+ /** fires where result === 'ok' divided by fires + driesFires + errors fired. */
34
+ errorRate: number;
35
+ /** Earliest timestamp observed for this rule (ISO). */
36
+ firstAt: string | null;
37
+ /** Latest timestamp observed for this rule (ISO). */
38
+ lastAt: string | null;
39
+ /** Trigger source observed — 'mixed' if the same rule name spans sources. */
40
+ triggerSource: 'mqtt' | 'cron' | 'webhook' | 'mixed' | null;
41
+ }
42
+ export interface ReplayReport {
43
+ /** Total entries (after filter) considered. */
44
+ total: number;
45
+ /** Per-rule summaries, sorted by `fires + driesFires` descending. */
46
+ summaries: RuleSummary[];
47
+ /** Count of rule-webhook-rejected entries with no rule name. */
48
+ webhookRejectedCount: number;
49
+ }
50
+ /** Aggregate a filtered stream into per-rule counters. */
51
+ export declare function aggregateRuleAudits(entries: readonly AuditEntry[]): ReplayReport;
@@ -87,3 +87,4 @@ export function aggregateRuleAudits(entries) {
87
87
  const summaries = [...byRule.values()].sort((a, b) => b.fires + b.driesFires - (a.fires + a.driesFires));
88
88
  return { total: entries.length, summaries, webhookRejectedCount };
89
89
  }
90
+ //# sourceMappingURL=audit-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-query.js","sourceRoot":"","sources":["../../src/rules/audit-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Static conflict analysis for automation rules.
3
+ *
4
+ * Detects patterns that are technically valid but likely to cause
5
+ * operational problems:
6
+ *
7
+ * 1. Opposing-action pairs — same device, opposite commands (e.g.
8
+ * turnOn / turnOff), triggered by the same source within a short
9
+ * window and with no throttle on either rule.
10
+ *
11
+ * 2. High-frequency MQTT rules without throttle — rules that listen
12
+ * on `device.shadow` (catch-all) with no throttle can fire on
13
+ * every shadow push (up to once per second) and exhaust the daily
14
+ * API quota quickly.
15
+ *
16
+ * 3. Potentially-destructive action without quiet-hours protection —
17
+ * a rule that targets a destructive verb is technically blocked by
18
+ * the engine, but we can still flag it early so users don't get a
19
+ * surprise at runtime.
20
+ *
21
+ * Results are designed to be consumed by `rules doctor --json` and
22
+ * by CI pipelines. Each finding carries a `severity` so callers can
23
+ * decide how to gate on them.
24
+ */
25
+ import type { Rule } from './types.js';
26
+ export type ConflictSeverity = 'error' | 'warning' | 'info';
27
+ export interface ConflictFinding {
28
+ severity: ConflictSeverity;
29
+ code: string;
30
+ message: string;
31
+ /** Rule names involved in this finding. */
32
+ rules: string[];
33
+ hint?: string;
34
+ }
35
+ export interface ConflictReport {
36
+ findings: ConflictFinding[];
37
+ /** Count per severity level. */
38
+ counts: Record<ConflictSeverity, number>;
39
+ /** True when there are no error-severity findings. */
40
+ clean: boolean;
41
+ }
42
+ /**
43
+ * MQTT events that fire on every device state push and can rapidly exhaust
44
+ * the daily API quota when a rule has no throttle.
45
+ *
46
+ * Conditional events like `motion.detected` are intentionally excluded —
47
+ * they fire discretely, not at continuous high frequency. Extend this set
48
+ * when new catch-all or near-continuous event types are added to the classifier.
49
+ */
50
+ export declare const HIGH_FREQ_EVENTS: readonly string[];
51
+ /** Returns true when an MQTT event is known to fire at high frequency. */
52
+ export declare function isHighFreqEvent(event: string): boolean;
53
+ export interface QuietHours {
54
+ start: string;
55
+ end: string;
56
+ }
57
+ export declare function analyzeConflicts(rules: Rule[], quietHours?: QuietHours | null): ConflictReport;
@@ -212,3 +212,4 @@ export function analyzeConflicts(rules, quietHours) {
212
212
  clean: counts.error === 0,
213
213
  };
214
214
  }
215
+ //# sourceMappingURL=conflict-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-analyzer.js","sourceRoot":"","sources":["../../src/rules/conflict-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Cron trigger scheduler for the rules engine.
3
+ *
4
+ * Each cron rule gets its own scheduler entry. On every tick the
5
+ * scheduler synthesises an `EngineEvent` with `source: 'cron'` and hands
6
+ * it to the same dispatch path the MQTT pipeline uses, so conditions,
7
+ * throttle, and action execution behave identically regardless of
8
+ * trigger source.
9
+ *
10
+ * Tests can drive the scheduler deterministically via `fireNowForTest()`
11
+ * — the scheduler's internal timer still uses `setTimeout`, which means
12
+ * `vi.useFakeTimers()` plus `vi.advanceTimersByTime()` also work. Croner
13
+ * is used only for `nextRun(fromDate)` calculations; we own the
14
+ * timer/dispatch loop so the engine can drain events through a single
15
+ * serialised queue.
16
+ */
17
+ import type { EngineEvent, Rule, DayOfWeek } from './types.js';
18
+ /** Return true if `t` falls on one of the listed days (or days is absent/empty). */
19
+ export declare function matchesDayFilter(days: DayOfWeek[] | undefined, t: Date): boolean;
20
+ export interface CronDispatch {
21
+ (rule: Rule, event: EngineEvent): Promise<void>;
22
+ }
23
+ export interface CronSchedulerOptions {
24
+ /** Dispatch callback — the engine's queue wrapper that runs the rule. */
25
+ dispatch: CronDispatch;
26
+ /** Clock injection for tests; defaults to Date.now. */
27
+ now?: () => Date;
28
+ }
29
+ export declare class CronScheduler {
30
+ private readonly opts;
31
+ private readonly entries;
32
+ private started;
33
+ private stopped;
34
+ constructor(opts: CronSchedulerOptions);
35
+ getScheduledFor(ruleName: string): {
36
+ schedule: string;
37
+ nextAt: Date | null;
38
+ } | null;
39
+ hasRegistered(ruleName: string): boolean;
40
+ /**
41
+ * Register a cron rule. Validates the pattern eagerly — an invalid
42
+ * schedule throws synchronously so engine start can surface the error.
43
+ */
44
+ register(rule: Rule): void;
45
+ unregister(ruleName: string): void;
46
+ start(): void;
47
+ stop(): void;
48
+ /**
49
+ * Test helper — compute the pattern's next run after a reference
50
+ * timestamp without actually scheduling it. Handy for regression tests.
51
+ */
52
+ nextRunAfter(ruleName: string, after: Date): Date | null;
53
+ /**
54
+ * Test helper — fire a rule immediately, bypassing the timer. Used by
55
+ * unit tests to skip vi.advanceTimersByTime logic when the focus is on
56
+ * dispatch behaviour, not scheduling accuracy.
57
+ */
58
+ fireNowForTest(ruleName: string): Promise<void>;
59
+ private nowDate;
60
+ private arm;
61
+ private fire;
62
+ }
@@ -184,3 +184,4 @@ export class CronScheduler {
184
184
  await this.opts.dispatch(entry.rule, event);
185
185
  }
186
186
  }
187
+ //# sourceMappingURL=cron-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-scheduler.js","sourceRoot":"","sources":["../../src/rules/cron-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Destructive command parsing — single source of truth shared between the
3
+ * policy validator post-hook (rejects destructive commands inside
4
+ * `automation.rules[].then[].command`) and the runtime executor (second-
5
+ * line guard that refuses to shell out even if validation was bypassed).
6
+ */
7
+ export declare const DESTRUCTIVE_COMMANDS: readonly ["lock", "unlock", "deleteWebhook", "deleteScene", "factoryReset"];
8
+ export type DestructiveCommand = (typeof DESTRUCTIVE_COMMANDS)[number];
9
+ /**
10
+ * Parse the verb out of a rule action command string. The expected form
11
+ * mirrors what the engine will eventually build: `devices command <id> <verb> [args...]`.
12
+ * We also accept scene shorthands (`scenes run <id>`, `webhooks delete <id>`).
13
+ *
14
+ * Returns null for anything we cannot confidently attribute to a known verb
15
+ * slot — the validator treats null as "probably fine, let the engine's own
16
+ * guard handle it if it's not."
17
+ */
18
+ export declare function extractVerb(cmd: string): string | null;
19
+ export declare function isDestructiveCommand(cmd: string): boolean;
20
+ export declare function destructiveVerbOf(cmd: string): DestructiveCommand | null;
@@ -50,3 +50,4 @@ export function destructiveVerbOf(cmd) {
50
50
  }
51
51
  return null;
52
52
  }
53
+ //# sourceMappingURL=destructive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destructive.js","sourceRoot":"","sources":["../../src/rules/destructive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM;IACN,QAAQ;IACR,eAAe;IACf,aAAa;IACb,cAAc;CACN,CAAC;AAIX;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEpC,uCAAuC;IACvC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7E,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,mDAAmD;IACnD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC;IAC/E,+CAA+C;IAC/C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,IAAK,oBAA0C,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO,IAA0B,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Rules engine runtime — orchestrates trigger subscription, matcher
3
+ * pipeline, throttle gate, and action executor.
4
+ *
5
+ * v0.2 PoC scope:
6
+ * - Loads an `automation` block from a policy file.
7
+ * - Subscribes to a single MQTT client; routes every shadow message
8
+ * through `matchesMqttTrigger` → `evaluateConditions` → throttle →
9
+ * `executeRuleAction`.
10
+ * - Cron + webhook triggers are **recognised but not wired** — they
11
+ * surface in the static lint as `unsupported` so users know the
12
+ * feature is pending (E1/E2 fill it in without a schema change).
13
+ * - Exposes `start()`, `stop()`, `getStats()` for the rules run
14
+ * subcommand.
15
+ *
16
+ * Not responsible for: loading the policy file, validating it, talking
17
+ * to the SwitchBot REST API (that's `executeCommand`), or writing
18
+ * audit lines (that's each module's local responsibility).
19
+ */
20
+ import type { AxiosInstance } from 'axios';
21
+ import type { SwitchBotMqttClient } from '../mqtt/client.js';
22
+ import type { MqttCredential } from '../mqtt/credential.js';
23
+ import { type DeviceStatusFetcher } from './matcher.js';
24
+ import { type AutomationBlock, type EngineEvent, type Rule } from './types.js';
25
+ export interface LintIssue {
26
+ rule: string;
27
+ severity: 'error' | 'warning';
28
+ code: string;
29
+ message: string;
30
+ }
31
+ export interface LintResult {
32
+ rules: Array<{
33
+ name: string;
34
+ enabled: boolean;
35
+ status: 'ok' | 'error' | 'unsupported' | 'disabled';
36
+ issues: LintIssue[];
37
+ }>;
38
+ valid: boolean;
39
+ unsupportedCount: number;
40
+ }
41
+ export declare function lintRules(automation: AutomationBlock | null | undefined): LintResult;
42
+ export interface RulesEngineOptions {
43
+ automation: AutomationBlock | null | undefined;
44
+ aliases: Record<string, string>;
45
+ /** Pre-connected MQTT client — owned by the caller. */
46
+ mqttClient: SwitchBotMqttClient;
47
+ /** Credential exposed so we know the default shadow topic to subscribe to. */
48
+ mqttCredential: MqttCredential;
49
+ /** Optional HTTP client for executeCommand — omit in tests. */
50
+ httpClient?: AxiosInstance;
51
+ /** When true, treat every rule as dry_run regardless of policy. */
52
+ globalDryRun?: boolean;
53
+ /** Max firings before the engine self-stops — test / demo only. */
54
+ maxFirings?: number;
55
+ /** Suppress live API calls. Used by tests that don't want to mock axios. */
56
+ skipApiCall?: boolean;
57
+ /** Side channel for unit tests — drop every processed event here. */
58
+ onFire?: (entry: EngineFireEntry) => void;
59
+ /**
60
+ * Webhook bearer token. Required when any rule uses a webhook
61
+ * trigger; the listener will refuse to start otherwise.
62
+ */
63
+ webhookToken?: string;
64
+ /** Webhook listener port (default 18790). Set 0 to auto-allocate. */
65
+ webhookPort?: number;
66
+ /** Webhook listener host (default 127.0.0.1). */
67
+ webhookHost?: string;
68
+ /**
69
+ * Override how device_state conditions fetch live status. Primarily a
70
+ * test seam — production callers should leave it unset so the engine
71
+ * goes through the normal `fetchDeviceStatus` path with the shared
72
+ * axios client.
73
+ */
74
+ statusFetcher?: DeviceStatusFetcher;
75
+ }
76
+ export interface EngineFireEntry {
77
+ ruleName: string;
78
+ fireId: string;
79
+ /** Final disposition of the fire. */
80
+ status: 'fired' | 'dry' | 'throttled' | 'conditions-failed' | 'unsupported' | 'blocked';
81
+ deviceId?: string;
82
+ reason?: string;
83
+ }
84
+ export interface EngineStats {
85
+ started: boolean;
86
+ rulesLoaded: number;
87
+ rulesActive: number;
88
+ eventsProcessed: number;
89
+ fires: number;
90
+ dryFires: number;
91
+ throttled: number;
92
+ conditionsFailed: number;
93
+ }
94
+ export declare class RulesEngine {
95
+ private readonly opts;
96
+ private rules;
97
+ private aliases;
98
+ private readonly throttle;
99
+ /** hysteresis / requires_stable_for: tracks when each (rule::device) trigger was first seen. */
100
+ private hysteresisFirstSeen;
101
+ private unsubscribeMessage;
102
+ private unsubscribeState;
103
+ private cronScheduler;
104
+ private webhookListener;
105
+ private started;
106
+ private stopped;
107
+ /**
108
+ * Sequential dispatch queue. Two MQTT messages arriving in the same
109
+ * tick would otherwise race inside the throttle check — each sees an
110
+ * empty lastFireAt map because neither has recorded yet. Serialising
111
+ * keeps the semantics of `max_per` honest.
112
+ */
113
+ private pendingChain;
114
+ private stats;
115
+ constructor(opts: RulesEngineOptions);
116
+ getStats(): EngineStats;
117
+ getRules(): readonly Rule[];
118
+ /**
119
+ * Subscribes to MQTT and begins the pipeline. Throws if the policy
120
+ * block is missing `enabled: true` or if lint finds errors (e.g.
121
+ * destructive command in a rule action).
122
+ */
123
+ start(): Promise<void>;
124
+ stop(): Promise<void>;
125
+ /**
126
+ * Hot-reload the running engine with a fresh automation block and
127
+ * alias map — typically triggered by SIGHUP or by the `rules reload`
128
+ * subcommand writing the reload sentinel file.
129
+ *
130
+ * Semantics:
131
+ * - Rejects (and keeps the old ruleset) when the new automation is
132
+ * disabled or fails lint. The engine never silently degrades.
133
+ * - Diffs cron registrations by `rule.name` + `schedule`: unchanged
134
+ * entries keep their armed timer, changed/removed entries are
135
+ * unregistered, new entries are registered and armed.
136
+ * - Hands the fresh webhook rule list to the live listener (keeps
137
+ * the bound port / open connections). If the reload removes every
138
+ * webhook rule the listener is torn down; if it adds the first
139
+ * webhook rule we refuse — spinning up a new listener mid-run
140
+ * would silently change the security surface.
141
+ * - `ThrottleGate` state is retained for surviving rule names and
142
+ * dropped for removed ones. A rule that was throttled before the
143
+ * reload stays throttled after it (same name = same window), but
144
+ * a renamed rule resets.
145
+ */
146
+ reload(nextAutomation: AutomationBlock | null | undefined, nextAliases?: Record<string, string>): Promise<{
147
+ changed: boolean;
148
+ errors: string[];
149
+ warnings: string[];
150
+ }>;
151
+ /**
152
+ * Expose the MQTT pipeline for direct invocation from tests — feeds a
153
+ * synthetic payload through the same matcher/throttle/action chain.
154
+ */
155
+ ingestMqttForTest(payload: unknown): Promise<void>;
156
+ /**
157
+ * Dispatch a pre-built EngineEvent through all matching MQTT rules.
158
+ * Used by tests that need full control over the event timestamp (e.g.
159
+ * hysteresis tests that advance time manually).
160
+ */
161
+ ingestEventForTest(event: EngineEvent): Promise<void>;
162
+ /**
163
+ * Fire a cron rule directly without needing the scheduler/timers.
164
+ * Used by tests that want to exercise the dispatch pipeline without
165
+ * depending on fake timers or croner's internals.
166
+ */
167
+ ingestCronForTest(rule: Rule, when?: Date): Promise<void>;
168
+ /**
169
+ * Fire a webhook rule directly without standing up the HTTP listener.
170
+ */
171
+ ingestWebhookForTest(rule: Rule, body?: string, when?: Date): Promise<void>;
172
+ /** Returns the bound webhook port when the listener is active. */
173
+ getWebhookPort(): number | null;
174
+ /** Read-only peek at cron schedule state — for `rules list` extras. */
175
+ getCronSchedule(ruleName: string): {
176
+ schedule: string;
177
+ nextAt: Date | null;
178
+ } | null;
179
+ /** Test helper — resolves after all queued dispatches complete. */
180
+ drainForTest(): Promise<void>;
181
+ /**
182
+ * Append a task to the dispatch queue; callers get back a promise that
183
+ * resolves when their task finishes (errors are swallowed — we never
184
+ * want the queue itself to die because one rule threw). Returning a
185
+ * promise lets awaited callsites (ingestMqttForTest) observe completion.
186
+ */
187
+ private enqueue;
188
+ private onMqttMessage;
189
+ private onCronFire;
190
+ private onWebhookFire;
191
+ private firesTotal;
192
+ private dispatchRule;
193
+ }
@@ -755,3 +755,4 @@ export class RulesEngine {
755
755
  }
756
756
  }
757
757
  }
758
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/rules/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
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>;
@@ -228,3 +228,4 @@ function formatValue(v) {
228
228
  return JSON.stringify(v);
229
229
  return String(v);
230
230
  }
231
+ //# sourceMappingURL=matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/rules/matcher.ts"],"names":[],"mappings":"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"}