@switchbot/openapi-cli 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/index.js +57349 -170
- package/package.json +9 -5
- package/dist/api/client.d.ts +0 -31
- package/dist/api/client.js +0 -236
- package/dist/api/client.js.map +0 -1
- package/dist/auth.d.ts +0 -1
- package/dist/auth.js +0 -21
- package/dist/auth.js.map +0 -1
- package/dist/commands/agent-bootstrap.d.ts +0 -10
- package/dist/commands/agent-bootstrap.js +0 -200
- package/dist/commands/agent-bootstrap.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -18
- package/dist/commands/auth.js +0 -355
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/batch.d.ts +0 -2
- package/dist/commands/batch.js +0 -414
- package/dist/commands/batch.js.map +0 -1
- package/dist/commands/cache.d.ts +0 -2
- package/dist/commands/cache.js +0 -127
- package/dist/commands/cache.js.map +0 -1
- package/dist/commands/capabilities.d.ts +0 -31
- package/dist/commands/capabilities.js +0 -383
- package/dist/commands/capabilities.js.map +0 -1
- package/dist/commands/catalog.d.ts +0 -2
- package/dist/commands/catalog.js +0 -360
- package/dist/commands/catalog.js.map +0 -1
- package/dist/commands/completion.d.ts +0 -2
- package/dist/commands/completion.js +0 -386
- package/dist/commands/completion.js.map +0 -1
- package/dist/commands/config.d.ts +0 -21
- package/dist/commands/config.js +0 -377
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/daemon.d.ts +0 -2
- package/dist/commands/daemon.js +0 -411
- package/dist/commands/daemon.js.map +0 -1
- package/dist/commands/device-meta.d.ts +0 -2
- package/dist/commands/device-meta.js +0 -160
- package/dist/commands/device-meta.js.map +0 -1
- package/dist/commands/devices.d.ts +0 -2
- package/dist/commands/devices.js +0 -949
- package/dist/commands/devices.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -3
- package/dist/commands/doctor.js +0 -1016
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/events.d.ts +0 -31
- package/dist/commands/events.js +0 -564
- package/dist/commands/events.js.map +0 -1
- package/dist/commands/expand.d.ts +0 -2
- package/dist/commands/expand.js +0 -131
- package/dist/commands/expand.js.map +0 -1
- package/dist/commands/explain.d.ts +0 -2
- package/dist/commands/explain.js +0 -140
- package/dist/commands/explain.js.map +0 -1
- package/dist/commands/health.d.ts +0 -8
- package/dist/commands/health.js +0 -114
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/history.d.ts +0 -2
- package/dist/commands/history.js +0 -321
- package/dist/commands/history.js.map +0 -1
- package/dist/commands/identity.d.ts +0 -45
- package/dist/commands/identity.js +0 -60
- package/dist/commands/identity.js.map +0 -1
- package/dist/commands/install.d.ts +0 -20
- package/dist/commands/install.js +0 -247
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -14
- package/dist/commands/mcp.js +0 -2018
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/plan.d.ts +0 -51
- package/dist/commands/plan.js +0 -654
- package/dist/commands/plan.js.map +0 -1
- package/dist/commands/policy.d.ts +0 -24
- package/dist/commands/policy.js +0 -587
- package/dist/commands/policy.js.map +0 -1
- package/dist/commands/quota.d.ts +0 -2
- package/dist/commands/quota.js +0 -79
- package/dist/commands/quota.js.map +0 -1
- package/dist/commands/rules.d.ts +0 -2
- package/dist/commands/rules.js +0 -876
- package/dist/commands/rules.js.map +0 -1
- package/dist/commands/scenes.d.ts +0 -2
- package/dist/commands/scenes.js +0 -265
- package/dist/commands/scenes.js.map +0 -1
- package/dist/commands/schema.d.ts +0 -2
- package/dist/commands/schema.js +0 -185
- package/dist/commands/schema.js.map +0 -1
- package/dist/commands/status-sync.d.ts +0 -2
- package/dist/commands/status-sync.js +0 -132
- package/dist/commands/status-sync.js.map +0 -1
- package/dist/commands/uninstall.d.ts +0 -20
- package/dist/commands/uninstall.js +0 -238
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/commands/upgrade-check.d.ts +0 -2
- package/dist/commands/upgrade-check.js +0 -107
- package/dist/commands/upgrade-check.js.map +0 -1
- package/dist/commands/watch.d.ts +0 -2
- package/dist/commands/watch.js +0 -195
- package/dist/commands/watch.js.map +0 -1
- package/dist/commands/webhook.d.ts +0 -2
- package/dist/commands/webhook.js +0 -183
- package/dist/commands/webhook.js.map +0 -1
- package/dist/config.d.ts +0 -57
- package/dist/config.js +0 -259
- package/dist/config.js.map +0 -1
- package/dist/credentials/backends/file.d.ts +0 -18
- package/dist/credentials/backends/file.js +0 -102
- package/dist/credentials/backends/file.js.map +0 -1
- package/dist/credentials/backends/linux.d.ts +0 -16
- package/dist/credentials/backends/linux.js +0 -130
- package/dist/credentials/backends/linux.js.map +0 -1
- package/dist/credentials/backends/macos.d.ts +0 -18
- package/dist/credentials/backends/macos.js +0 -130
- package/dist/credentials/backends/macos.js.map +0 -1
- package/dist/credentials/backends/windows.d.ts +0 -23
- package/dist/credentials/backends/windows.js +0 -216
- package/dist/credentials/backends/windows.js.map +0 -1
- package/dist/credentials/keychain.d.ts +0 -83
- package/dist/credentials/keychain.js +0 -89
- package/dist/credentials/keychain.js.map +0 -1
- package/dist/credentials/prime.d.ts +0 -32
- package/dist/credentials/prime.js +0 -53
- package/dist/credentials/prime.js.map +0 -1
- package/dist/devices/cache.d.ts +0 -79
- package/dist/devices/cache.js +0 -294
- package/dist/devices/cache.js.map +0 -1
- package/dist/devices/catalog.d.ts +0 -138
- package/dist/devices/catalog.js +0 -768
- package/dist/devices/catalog.js.map +0 -1
- package/dist/devices/device-meta.d.ts +0 -15
- package/dist/devices/device-meta.js +0 -57
- package/dist/devices/device-meta.js.map +0 -1
- package/dist/devices/history-agg.d.ts +0 -37
- package/dist/devices/history-agg.js +0 -139
- package/dist/devices/history-agg.js.map +0 -1
- package/dist/devices/history-query.d.ts +0 -45
- package/dist/devices/history-query.js +0 -182
- package/dist/devices/history-query.js.map +0 -1
- package/dist/devices/param-validator.d.ts +0 -40
- package/dist/devices/param-validator.js +0 -434
- package/dist/devices/param-validator.js.map +0 -1
- package/dist/devices/resources.d.ts +0 -74
- package/dist/devices/resources.js +0 -271
- package/dist/devices/resources.js.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +0 -1
- package/dist/install/default-steps.d.ts +0 -66
- package/dist/install/default-steps.js +0 -258
- package/dist/install/default-steps.js.map +0 -1
- package/dist/install/preflight.d.ts +0 -60
- package/dist/install/preflight.js +0 -213
- package/dist/install/preflight.js.map +0 -1
- package/dist/install/steps.d.ts +0 -61
- package/dist/install/steps.js +0 -68
- package/dist/install/steps.js.map +0 -1
- package/dist/lib/command-keywords.d.ts +0 -5
- package/dist/lib/command-keywords.js +0 -18
- package/dist/lib/command-keywords.js.map +0 -1
- package/dist/lib/daemon-state.d.ts +0 -24
- package/dist/lib/daemon-state.js +0 -47
- package/dist/lib/daemon-state.js.map +0 -1
- package/dist/lib/destructive-mode.d.ts +0 -2
- package/dist/lib/destructive-mode.js +0 -13
- package/dist/lib/destructive-mode.js.map +0 -1
- package/dist/lib/devices.d.ts +0 -151
- package/dist/lib/devices.js +0 -383
- package/dist/lib/devices.js.map +0 -1
- package/dist/lib/idempotency.d.ts +0 -46
- package/dist/lib/idempotency.js +0 -107
- package/dist/lib/idempotency.js.map +0 -1
- package/dist/lib/plan-store.d.ts +0 -19
- package/dist/lib/plan-store.js +0 -69
- package/dist/lib/plan-store.js.map +0 -1
- package/dist/lib/request-context.d.ts +0 -7
- package/dist/lib/request-context.js +0 -13
- package/dist/lib/request-context.js.map +0 -1
- package/dist/lib/scenes.d.ts +0 -7
- package/dist/lib/scenes.js +0 -11
- package/dist/lib/scenes.js.map +0 -1
- package/dist/logger.d.ts +0 -4
- package/dist/logger.js +0 -17
- package/dist/logger.js.map +0 -1
- package/dist/mcp/device-history.d.ts +0 -36
- package/dist/mcp/device-history.js +0 -146
- package/dist/mcp/device-history.js.map +0 -1
- package/dist/mcp/events-subscription.d.ts +0 -45
- package/dist/mcp/events-subscription.js +0 -214
- package/dist/mcp/events-subscription.js.map +0 -1
- package/dist/mqtt/client.d.ts +0 -25
- package/dist/mqtt/client.js +0 -181
- package/dist/mqtt/client.js.map +0 -1
- package/dist/mqtt/credential.d.ts +0 -16
- package/dist/mqtt/credential.js +0 -31
- package/dist/mqtt/credential.js.map +0 -1
- package/dist/policy/add-rule.d.ts +0 -21
- package/dist/policy/add-rule.js +0 -125
- package/dist/policy/add-rule.js.map +0 -1
- package/dist/policy/diff.d.ts +0 -21
- package/dist/policy/diff.js +0 -92
- package/dist/policy/diff.js.map +0 -1
- package/dist/policy/format.d.ts +0 -6
- package/dist/policy/format.js +0 -58
- package/dist/policy/format.js.map +0 -1
- package/dist/policy/load.d.ts +0 -32
- package/dist/policy/load.js +0 -62
- package/dist/policy/load.js.map +0 -1
- package/dist/policy/migrate.d.ts +0 -21
- package/dist/policy/migrate.js +0 -68
- package/dist/policy/migrate.js.map +0 -1
- package/dist/policy/schema.d.ts +0 -5
- package/dist/policy/schema.js +0 -19
- package/dist/policy/schema.js.map +0 -1
- package/dist/policy/validate.d.ts +0 -19
- package/dist/policy/validate.js +0 -263
- package/dist/policy/validate.js.map +0 -1
- package/dist/rules/action.d.ts +0 -65
- package/dist/rules/action.js +0 -217
- package/dist/rules/action.js.map +0 -1
- package/dist/rules/audit-query.d.ts +0 -51
- package/dist/rules/audit-query.js +0 -90
- package/dist/rules/audit-query.js.map +0 -1
- package/dist/rules/conflict-analyzer.d.ts +0 -57
- package/dist/rules/conflict-analyzer.js +0 -215
- package/dist/rules/conflict-analyzer.js.map +0 -1
- package/dist/rules/cron-scheduler.d.ts +0 -62
- package/dist/rules/cron-scheduler.js +0 -187
- package/dist/rules/cron-scheduler.js.map +0 -1
- package/dist/rules/destructive.d.ts +0 -20
- package/dist/rules/destructive.js +0 -53
- package/dist/rules/destructive.js.map +0 -1
- package/dist/rules/engine.d.ts +0 -193
- package/dist/rules/engine.js +0 -758
- package/dist/rules/engine.js.map +0 -1
- package/dist/rules/matcher.d.ts +0 -56
- package/dist/rules/matcher.js +0 -231
- package/dist/rules/matcher.js.map +0 -1
- package/dist/rules/pid-file.d.ts +0 -43
- package/dist/rules/pid-file.js +0 -96
- package/dist/rules/pid-file.js.map +0 -1
- package/dist/rules/quiet-hours.d.ts +0 -26
- package/dist/rules/quiet-hours.js +0 -46
- package/dist/rules/quiet-hours.js.map +0 -1
- package/dist/rules/suggest.d.ts +0 -20
- package/dist/rules/suggest.js +0 -96
- package/dist/rules/suggest.js.map +0 -1
- package/dist/rules/throttle.d.ts +0 -61
- package/dist/rules/throttle.js +0 -117
- package/dist/rules/throttle.js.map +0 -1
- package/dist/rules/types.d.ts +0 -117
- package/dist/rules/types.js +0 -35
- package/dist/rules/types.js.map +0 -1
- package/dist/rules/webhook-listener.d.ts +0 -63
- package/dist/rules/webhook-listener.js +0 -224
- package/dist/rules/webhook-listener.js.map +0 -1
- package/dist/rules/webhook-token.d.ts +0 -50
- package/dist/rules/webhook-token.js +0 -91
- package/dist/rules/webhook-token.js.map +0 -1
- package/dist/schema/field-aliases.d.ts +0 -34
- package/dist/schema/field-aliases.js +0 -132
- package/dist/schema/field-aliases.js.map +0 -1
- package/dist/sinks/dispatcher.d.ts +0 -7
- package/dist/sinks/dispatcher.js +0 -13
- package/dist/sinks/dispatcher.js.map +0 -1
- package/dist/sinks/file.d.ts +0 -6
- package/dist/sinks/file.js +0 -20
- package/dist/sinks/file.js.map +0 -1
- package/dist/sinks/format.d.ts +0 -20
- package/dist/sinks/format.js +0 -57
- package/dist/sinks/format.js.map +0 -1
- package/dist/sinks/homeassistant.d.ts +0 -18
- package/dist/sinks/homeassistant.js +0 -45
- package/dist/sinks/homeassistant.js.map +0 -1
- package/dist/sinks/openclaw.d.ts +0 -13
- package/dist/sinks/openclaw.js +0 -34
- package/dist/sinks/openclaw.js.map +0 -1
- package/dist/sinks/stdout.d.ts +0 -4
- package/dist/sinks/stdout.js +0 -6
- package/dist/sinks/stdout.js.map +0 -1
- package/dist/sinks/telegram.d.ts +0 -11
- package/dist/sinks/telegram.js +0 -29
- package/dist/sinks/telegram.js.map +0 -1
- package/dist/sinks/types.d.ts +0 -13
- package/dist/sinks/types.js +0 -2
- package/dist/sinks/types.js.map +0 -1
- package/dist/sinks/webhook.d.ts +0 -6
- package/dist/sinks/webhook.js +0 -23
- package/dist/sinks/webhook.js.map +0 -1
- package/dist/status-sync/manager.d.ts +0 -48
- package/dist/status-sync/manager.js +0 -269
- package/dist/status-sync/manager.js.map +0 -1
- package/dist/utils/arg-parsers.d.ts +0 -16
- package/dist/utils/arg-parsers.js +0 -67
- package/dist/utils/arg-parsers.js.map +0 -1
- package/dist/utils/audit.d.ts +0 -69
- package/dist/utils/audit.js +0 -122
- package/dist/utils/audit.js.map +0 -1
- package/dist/utils/filter.d.ts +0 -81
- package/dist/utils/filter.js +0 -190
- package/dist/utils/filter.js.map +0 -1
- package/dist/utils/flags.d.ts +0 -72
- package/dist/utils/flags.js +0 -187
- package/dist/utils/flags.js.map +0 -1
- package/dist/utils/format.d.ts +0 -9
- package/dist/utils/format.js +0 -118
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/health.d.ts +0 -48
- package/dist/utils/health.js +0 -102
- package/dist/utils/health.js.map +0 -1
- package/dist/utils/help-json.d.ts +0 -39
- package/dist/utils/help-json.js +0 -55
- package/dist/utils/help-json.js.map +0 -1
- package/dist/utils/name-resolver.d.ts +0 -26
- package/dist/utils/name-resolver.js +0 -138
- package/dist/utils/name-resolver.js.map +0 -1
- package/dist/utils/output.d.ts +0 -73
- package/dist/utils/output.js +0 -405
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/quota.d.ts +0 -61
- package/dist/utils/quota.js +0 -228
- package/dist/utils/quota.js.map +0 -1
- package/dist/utils/redact.d.ts +0 -23
- package/dist/utils/redact.js +0 -69
- package/dist/utils/redact.js.map +0 -1
- package/dist/utils/retry.d.ts +0 -72
- package/dist/utils/retry.js +0 -141
- package/dist/utils/retry.js.map +0 -1
- package/dist/utils/string.d.ts +0 -2
- package/dist/utils/string.js +0 -23
- package/dist/utils/string.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.js +0 -5
- package/dist/version.js.map +0 -1
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Commander argParser callbacks that fail fast when a required-value flag
|
|
3
|
-
* swallows the next token (another flag, a subcommand name, etc.) — the
|
|
4
|
-
* default Commander behavior is to take the next argv token verbatim.
|
|
5
|
-
*
|
|
6
|
-
* Use `--flag=<val>` form to pass values that legitimately start with `--`.
|
|
7
|
-
*/
|
|
8
|
-
export declare function intArg(flagName: string, opts?: {
|
|
9
|
-
min?: number;
|
|
10
|
-
max?: number;
|
|
11
|
-
}): (value: string) => string;
|
|
12
|
-
export declare function durationArg(flagName: string): (value: string) => string;
|
|
13
|
-
export declare function stringArg(flagName: string, opts?: {
|
|
14
|
-
disallow?: readonly string[];
|
|
15
|
-
}): (value: string) => string;
|
|
16
|
-
export declare function enumArg(flagName: string, allowed: readonly string[]): (value: string) => string;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { InvalidArgumentError } from 'commander';
|
|
2
|
-
import { parseDurationToMs } from './flags.js';
|
|
3
|
-
/**
|
|
4
|
-
* Commander argParser callbacks that fail fast when a required-value flag
|
|
5
|
-
* swallows the next token (another flag, a subcommand name, etc.) — the
|
|
6
|
-
* default Commander behavior is to take the next argv token verbatim.
|
|
7
|
-
*
|
|
8
|
-
* Use `--flag=<val>` form to pass values that legitimately start with `--`.
|
|
9
|
-
*/
|
|
10
|
-
export function intArg(flagName, opts) {
|
|
11
|
-
return (value) => {
|
|
12
|
-
// Flag-like tokens (`--something`, `-x`) are rejected up-front.
|
|
13
|
-
// Pure negative integers (`-1`, `-42`) fall through to min/max so the
|
|
14
|
-
// error classifies as a range error rather than "requires a numeric value".
|
|
15
|
-
if (value.startsWith('-') && !/^-\d+$/.test(value)) {
|
|
16
|
-
throw new InvalidArgumentError(`${flagName} requires a numeric value, got "${value}". ` +
|
|
17
|
-
`Did you forget a value? Use ${flagName}=<n> if the value really starts with "-".`);
|
|
18
|
-
}
|
|
19
|
-
const n = Number(value);
|
|
20
|
-
if (!Number.isInteger(n)) {
|
|
21
|
-
throw new InvalidArgumentError(`${flagName} must be an integer (got "${value}")`);
|
|
22
|
-
}
|
|
23
|
-
if (opts?.min !== undefined && n < opts.min) {
|
|
24
|
-
throw new InvalidArgumentError(`${flagName} must be >= ${opts.min} (got "${value}")`);
|
|
25
|
-
}
|
|
26
|
-
if (opts?.max !== undefined && n > opts.max) {
|
|
27
|
-
throw new InvalidArgumentError(`${flagName} must be <= ${opts.max} (got "${value}")`);
|
|
28
|
-
}
|
|
29
|
-
return String(n);
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
export function durationArg(flagName) {
|
|
33
|
-
return (value) => {
|
|
34
|
-
if (value.startsWith('-')) {
|
|
35
|
-
throw new InvalidArgumentError(`${flagName} requires a duration value, got "${value}". ` +
|
|
36
|
-
`Use ${flagName}=<dur> if the value really starts with "-".`);
|
|
37
|
-
}
|
|
38
|
-
const ms = parseDurationToMs(value);
|
|
39
|
-
if (ms === null) {
|
|
40
|
-
throw new InvalidArgumentError(`${flagName} must look like "30s", "1m", "500ms", "1h", "7d", "2w" ` +
|
|
41
|
-
`(supported units: ms, s, m, h, d, w — got "${value}")`);
|
|
42
|
-
}
|
|
43
|
-
return value;
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
export function stringArg(flagName, opts) {
|
|
47
|
-
return (value) => {
|
|
48
|
-
if (value.startsWith('--')) {
|
|
49
|
-
throw new InvalidArgumentError(`${flagName} requires a value. "${value}" looks like another option — ` +
|
|
50
|
-
`did you forget the value? Use ${flagName}=<val> if your value really starts with "--".`);
|
|
51
|
-
}
|
|
52
|
-
if (opts?.disallow?.includes(value)) {
|
|
53
|
-
throw new InvalidArgumentError(`${flagName} requires a value but got "${value}", which is a subcommand name. ` +
|
|
54
|
-
`Did you forget the value? Use ${flagName}=<val> or put ${flagName} after the subcommand.`);
|
|
55
|
-
}
|
|
56
|
-
return value;
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
export function enumArg(flagName, allowed) {
|
|
60
|
-
return (value) => {
|
|
61
|
-
if (!allowed.includes(value)) {
|
|
62
|
-
throw new InvalidArgumentError(`${flagName} must be one of: ${allowed.join(', ')} (got "${value}")`);
|
|
63
|
-
}
|
|
64
|
-
return value;
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=arg-parsers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arg-parsers.js","sourceRoot":"","sources":["../../src/utils/arg-parsers.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/audit.d.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
export declare const DEFAULT_AUDIT_PATH: string;
|
|
2
|
-
/**
|
|
3
|
-
* Bump when breaking changes to the audit line shape land.
|
|
4
|
-
*
|
|
5
|
-
* History:
|
|
6
|
-
* 1 — initial command audit (kind: 'command' only).
|
|
7
|
-
* 2 — adds rule-engine kinds ('rule-fire', 'rule-fire-dry',
|
|
8
|
-
* 'rule-throttled', 'rule-webhook-rejected') and a sibling `rule`
|
|
9
|
-
* block describing which rule fired and why. Reader stays backwards
|
|
10
|
-
* compatible: v1 lines parse as command entries with `rule`
|
|
11
|
-
* undefined.
|
|
12
|
-
*/
|
|
13
|
-
export declare const AUDIT_VERSION = 2;
|
|
14
|
-
export type AuditEntryKind = 'command' | 'rule-fire' | 'rule-fire-dry' | 'rule-throttled' | 'rule-webhook-rejected';
|
|
15
|
-
export interface AuditRuleContext {
|
|
16
|
-
/** Rule.name from policy.yaml. */
|
|
17
|
-
name: string;
|
|
18
|
-
/** Where the trigger came from. */
|
|
19
|
-
triggerSource: 'mqtt' | 'cron' | 'webhook';
|
|
20
|
-
/** Resolved deviceId the rule fired against, if any. */
|
|
21
|
-
matchedDevice?: string;
|
|
22
|
-
/** UUID correlating multi-action fires + throttle entries. */
|
|
23
|
-
fireId: string;
|
|
24
|
-
/** Optional free-text reason the engine recorded alongside the fire
|
|
25
|
-
* (e.g. "throttled: 8s since last fire", "destructive command blocked"). */
|
|
26
|
-
reason?: string;
|
|
27
|
-
}
|
|
28
|
-
export interface AuditEntry {
|
|
29
|
-
/** Schema version — lets old log lines coexist with new ones after format changes. */
|
|
30
|
-
auditVersion?: number;
|
|
31
|
-
t: string;
|
|
32
|
-
kind: AuditEntryKind;
|
|
33
|
-
deviceId: string;
|
|
34
|
-
command: string;
|
|
35
|
-
parameter: unknown;
|
|
36
|
-
commandType: 'command' | 'customize';
|
|
37
|
-
dryRun: boolean;
|
|
38
|
-
result?: 'ok' | 'error';
|
|
39
|
-
error?: string;
|
|
40
|
-
/** When execution is initiated via `plan run`, the stable plan ID for traceability. */
|
|
41
|
-
planId?: string;
|
|
42
|
-
/** Present for rule-engine kinds; absent for direct CLI command entries. */
|
|
43
|
-
rule?: AuditRuleContext;
|
|
44
|
-
}
|
|
45
|
-
export declare function writeAudit(entry: AuditEntry): void;
|
|
46
|
-
export declare function readAudit(file: string): AuditEntry[];
|
|
47
|
-
/**
|
|
48
|
-
* Result of a structural audit log check. See `history verify` for the CLI
|
|
49
|
-
* surface. Malformed lines cause a `problems` entry, missing auditVersion
|
|
50
|
-
* fields cause a `warnings` entry (treated as "pre-v1 record, still parseable").
|
|
51
|
-
*/
|
|
52
|
-
export interface VerifyReport {
|
|
53
|
-
file: string;
|
|
54
|
-
totalLines: number;
|
|
55
|
-
parsedLines: number;
|
|
56
|
-
skippedBlankLines: number;
|
|
57
|
-
malformedLines: number;
|
|
58
|
-
unversionedEntries: number;
|
|
59
|
-
versionCounts: Record<string, number>;
|
|
60
|
-
problems: Array<{
|
|
61
|
-
line: number;
|
|
62
|
-
reason: string;
|
|
63
|
-
preview?: string;
|
|
64
|
-
}>;
|
|
65
|
-
earliest?: string;
|
|
66
|
-
latest?: string;
|
|
67
|
-
fileMissing?: boolean;
|
|
68
|
-
}
|
|
69
|
-
export declare function verifyAudit(file: string): VerifyReport;
|
package/dist/utils/audit.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { getAuditLog } from './flags.js';
|
|
5
|
-
export const DEFAULT_AUDIT_PATH = path.join(os.homedir(), '.switchbot', 'audit.log');
|
|
6
|
-
/**
|
|
7
|
-
* Bump when breaking changes to the audit line shape land.
|
|
8
|
-
*
|
|
9
|
-
* History:
|
|
10
|
-
* 1 — initial command audit (kind: 'command' only).
|
|
11
|
-
* 2 — adds rule-engine kinds ('rule-fire', 'rule-fire-dry',
|
|
12
|
-
* 'rule-throttled', 'rule-webhook-rejected') and a sibling `rule`
|
|
13
|
-
* block describing which rule fired and why. Reader stays backwards
|
|
14
|
-
* compatible: v1 lines parse as command entries with `rule`
|
|
15
|
-
* undefined.
|
|
16
|
-
*/
|
|
17
|
-
export const AUDIT_VERSION = 2;
|
|
18
|
-
function resolveAuditPath() {
|
|
19
|
-
const flag = getAuditLog();
|
|
20
|
-
if (flag === null)
|
|
21
|
-
return null;
|
|
22
|
-
return path.resolve(flag);
|
|
23
|
-
}
|
|
24
|
-
export function writeAudit(entry) {
|
|
25
|
-
let file = resolveAuditPath();
|
|
26
|
-
if (!file && entry.planId)
|
|
27
|
-
file = DEFAULT_AUDIT_PATH;
|
|
28
|
-
if (!file)
|
|
29
|
-
return;
|
|
30
|
-
const dir = path.dirname(file);
|
|
31
|
-
try {
|
|
32
|
-
if (!fs.existsSync(dir)) {
|
|
33
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
34
|
-
}
|
|
35
|
-
const stamped = { auditVersion: AUDIT_VERSION, ...entry };
|
|
36
|
-
fs.appendFileSync(file, JSON.stringify(stamped) + '\n');
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// Best-effort — never let audit failures break the actual command.
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export function readAudit(file) {
|
|
43
|
-
if (!fs.existsSync(file))
|
|
44
|
-
return [];
|
|
45
|
-
const raw = fs.readFileSync(file, 'utf-8');
|
|
46
|
-
const out = [];
|
|
47
|
-
for (const line of raw.split(/\r?\n/)) {
|
|
48
|
-
const trimmed = line.trim();
|
|
49
|
-
if (!trimmed)
|
|
50
|
-
continue;
|
|
51
|
-
try {
|
|
52
|
-
out.push(JSON.parse(trimmed));
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// skip malformed lines
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return out;
|
|
59
|
-
}
|
|
60
|
-
export function verifyAudit(file) {
|
|
61
|
-
const report = {
|
|
62
|
-
file,
|
|
63
|
-
totalLines: 0,
|
|
64
|
-
parsedLines: 0,
|
|
65
|
-
skippedBlankLines: 0,
|
|
66
|
-
malformedLines: 0,
|
|
67
|
-
unversionedEntries: 0,
|
|
68
|
-
versionCounts: {},
|
|
69
|
-
problems: [],
|
|
70
|
-
};
|
|
71
|
-
if (!fs.existsSync(file)) {
|
|
72
|
-
report.fileMissing = true;
|
|
73
|
-
return report;
|
|
74
|
-
}
|
|
75
|
-
const raw = fs.readFileSync(file, 'utf-8');
|
|
76
|
-
const lines = raw.split(/\r?\n/);
|
|
77
|
-
let minT;
|
|
78
|
-
let maxT;
|
|
79
|
-
for (let i = 0; i < lines.length; i++) {
|
|
80
|
-
const trimmed = lines[i].trim();
|
|
81
|
-
if (!trimmed) {
|
|
82
|
-
report.skippedBlankLines++;
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
report.totalLines++;
|
|
86
|
-
let entry = null;
|
|
87
|
-
try {
|
|
88
|
-
entry = JSON.parse(trimmed);
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
report.malformedLines++;
|
|
92
|
-
report.problems.push({
|
|
93
|
-
line: i + 1,
|
|
94
|
-
reason: 'JSON parse failed',
|
|
95
|
-
preview: trimmed.slice(0, 80),
|
|
96
|
-
});
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
report.parsedLines++;
|
|
100
|
-
const v = entry.auditVersion;
|
|
101
|
-
if (v === undefined) {
|
|
102
|
-
report.unversionedEntries++;
|
|
103
|
-
report.versionCounts['unversioned'] = (report.versionCounts['unversioned'] ?? 0) + 1;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
const key = String(v);
|
|
107
|
-
report.versionCounts[key] = (report.versionCounts[key] ?? 0) + 1;
|
|
108
|
-
}
|
|
109
|
-
if (entry.t) {
|
|
110
|
-
if (!minT || entry.t < minT)
|
|
111
|
-
minT = entry.t;
|
|
112
|
-
if (!maxT || entry.t > maxT)
|
|
113
|
-
maxT = entry.t;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (minT)
|
|
117
|
-
report.earliest = minT;
|
|
118
|
-
if (maxT)
|
|
119
|
-
report.latest = maxT;
|
|
120
|
-
return report;
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=audit.js.map
|
package/dist/utils/audit.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/utils/audit.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/filter.d.ts
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import type { Device, InfraredDevice } from '../lib/devices.js';
|
|
2
|
-
/**
|
|
3
|
-
* A parsed filter clause. Each clause is an (op, key, value) triple that runs
|
|
4
|
-
* against a candidate string. All clauses from a single expression are AND-ed.
|
|
5
|
-
*
|
|
6
|
-
* Four operators (shared across `devices list`, `devices batch`,
|
|
7
|
-
* `events tail` / `mqtt-tail`):
|
|
8
|
-
* key=value — case-insensitive substring (exact for `category`)
|
|
9
|
-
* key!=value — negated substring (exact-negated for `category`)
|
|
10
|
-
* key~value — explicit case-insensitive substring
|
|
11
|
-
* key=/pattern/ — case-insensitive regex
|
|
12
|
-
*/
|
|
13
|
-
export type FilterOp = 'eq' | 'neq' | 'sub' | 'regex';
|
|
14
|
-
export interface FilterClause {
|
|
15
|
-
key: string;
|
|
16
|
-
op: FilterOp;
|
|
17
|
-
raw: string;
|
|
18
|
-
regex?: RegExp;
|
|
19
|
-
}
|
|
20
|
-
export interface ParseFilterOptions {
|
|
21
|
-
resolveKey?: (key: string) => string;
|
|
22
|
-
supportedKeys?: readonly string[];
|
|
23
|
-
}
|
|
24
|
-
export declare class FilterSyntaxError extends Error {
|
|
25
|
-
constructor(message: string);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Parse a comma-separated filter expression into discrete clauses.
|
|
29
|
-
*
|
|
30
|
-
* Grammar (per clause, recognition order):
|
|
31
|
-
* 1. key=/pattern/ → regex (case-insensitive); invalid regex throws.
|
|
32
|
-
* 2. key!=value → 'neq' op (negated substring; exact-negated for keys
|
|
33
|
-
* listed in matchClause's `exactKeys` option).
|
|
34
|
-
* 3. key~value → substring (case-insensitive).
|
|
35
|
-
* 4. key=value → 'eq' op (substring; caller decides whether to treat
|
|
36
|
-
* as exact for specific keys via matchClause's
|
|
37
|
-
* `exactKeys` option).
|
|
38
|
-
*
|
|
39
|
-
* `allowedKeys` is command-specific: `devices list` uses
|
|
40
|
-
* {type,name,category,room}; `devices batch` uses {type,family,room,category};
|
|
41
|
-
* `events tail` uses {deviceId,type}.
|
|
42
|
-
*/
|
|
43
|
-
export declare function parseFilterExpr(expr: string | undefined, allowedKeys: readonly string[], options?: ParseFilterOptions): FilterClause[];
|
|
44
|
-
/**
|
|
45
|
-
* Match a single candidate string against a clause.
|
|
46
|
-
*
|
|
47
|
-
* - `regex` → RegExp.test against the candidate (case-insensitive by construction).
|
|
48
|
-
* - `sub` → case-insensitive substring.
|
|
49
|
-
* - `eq` → case-insensitive substring, except for keys listed in
|
|
50
|
-
* `exactKeys`, which get case-insensitive exact comparison.
|
|
51
|
-
* Default `exactKeys` is `['category']` to preserve the existing
|
|
52
|
-
* list/batch behavior for that key.
|
|
53
|
-
* - `neq` → logical inverse of `eq` (negated substring; exact-negated for
|
|
54
|
-
* `exactKeys`). `undefined` candidates remain non-matching so a
|
|
55
|
-
* `neq` clause does NOT accidentally match missing data.
|
|
56
|
-
*/
|
|
57
|
-
export declare function matchClause(candidate: string | undefined, clause: FilterClause, options?: {
|
|
58
|
-
exactKeys?: readonly string[];
|
|
59
|
-
}): boolean;
|
|
60
|
-
/**
|
|
61
|
-
* Back-compat narrow signature: parses with the batch key set. Callers that
|
|
62
|
-
* need a different key set (list, events tail) should call parseFilterExpr
|
|
63
|
-
* directly.
|
|
64
|
-
*/
|
|
65
|
-
export declare function parseFilter(expr: string | undefined): FilterClause[];
|
|
66
|
-
interface FilterableDevice {
|
|
67
|
-
deviceId: string;
|
|
68
|
-
type: string;
|
|
69
|
-
family?: string;
|
|
70
|
-
room?: string;
|
|
71
|
-
category: 'physical' | 'ir';
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Apply the parsed clauses to a mixed list of physical devices + IR remotes.
|
|
75
|
-
* Returns the filterable entries that satisfy every clause.
|
|
76
|
-
*/
|
|
77
|
-
export declare function applyFilter(clauses: FilterClause[], deviceList: Device[], infraredRemoteList: InfraredDevice[], hubLocation?: Map<string, {
|
|
78
|
-
family?: string;
|
|
79
|
-
room?: string;
|
|
80
|
-
}>): FilterableDevice[];
|
|
81
|
-
export {};
|
package/dist/utils/filter.js
DELETED
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
export class FilterSyntaxError extends Error {
|
|
2
|
-
constructor(message) {
|
|
3
|
-
super(message);
|
|
4
|
-
this.name = 'FilterSyntaxError';
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Parse a comma-separated filter expression into discrete clauses.
|
|
9
|
-
*
|
|
10
|
-
* Grammar (per clause, recognition order):
|
|
11
|
-
* 1. key=/pattern/ → regex (case-insensitive); invalid regex throws.
|
|
12
|
-
* 2. key!=value → 'neq' op (negated substring; exact-negated for keys
|
|
13
|
-
* listed in matchClause's `exactKeys` option).
|
|
14
|
-
* 3. key~value → substring (case-insensitive).
|
|
15
|
-
* 4. key=value → 'eq' op (substring; caller decides whether to treat
|
|
16
|
-
* as exact for specific keys via matchClause's
|
|
17
|
-
* `exactKeys` option).
|
|
18
|
-
*
|
|
19
|
-
* `allowedKeys` is command-specific: `devices list` uses
|
|
20
|
-
* {type,name,category,room}; `devices batch` uses {type,family,room,category};
|
|
21
|
-
* `events tail` uses {deviceId,type}.
|
|
22
|
-
*/
|
|
23
|
-
export function parseFilterExpr(expr, allowedKeys, options) {
|
|
24
|
-
if (!expr)
|
|
25
|
-
return [];
|
|
26
|
-
const parts = expr.split(',').map((p) => p.trim()).filter((p) => p.length > 0);
|
|
27
|
-
const clauses = [];
|
|
28
|
-
for (const part of parts) {
|
|
29
|
-
const regexMatch = /^([^=~!]+)=\/(.*)\/$/.exec(part);
|
|
30
|
-
const neqIdx = part.indexOf('!=');
|
|
31
|
-
const tildeIdx = part.indexOf('~');
|
|
32
|
-
const eqIdx = part.indexOf('=');
|
|
33
|
-
let key;
|
|
34
|
-
let op;
|
|
35
|
-
let raw;
|
|
36
|
-
let regex;
|
|
37
|
-
if (regexMatch) {
|
|
38
|
-
key = regexMatch[1].trim();
|
|
39
|
-
op = 'regex';
|
|
40
|
-
raw = regexMatch[2];
|
|
41
|
-
try {
|
|
42
|
-
regex = new RegExp(raw, 'i');
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
throw new FilterSyntaxError(`Invalid regex in --filter "${part}": ${err.message}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else if (neqIdx !== -1 && (tildeIdx === -1 || neqIdx < tildeIdx)) {
|
|
49
|
-
key = part.slice(0, neqIdx).trim();
|
|
50
|
-
op = 'neq';
|
|
51
|
-
raw = part.slice(neqIdx + 2).trim();
|
|
52
|
-
}
|
|
53
|
-
else if (tildeIdx !== -1 && (eqIdx === -1 || tildeIdx < eqIdx)) {
|
|
54
|
-
key = part.slice(0, tildeIdx).trim();
|
|
55
|
-
op = 'sub';
|
|
56
|
-
raw = part.slice(tildeIdx + 1).trim();
|
|
57
|
-
if (raw.startsWith('=')) {
|
|
58
|
-
throw new FilterSyntaxError(`Invalid filter clause "${part}" — "~=" is no longer supported. Use "${key}~${raw.slice(1)}" instead.`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else if (eqIdx !== -1) {
|
|
62
|
-
key = part.slice(0, eqIdx).trim();
|
|
63
|
-
op = 'eq';
|
|
64
|
-
raw = part.slice(eqIdx + 1).trim();
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
throw new FilterSyntaxError(`Invalid filter clause "${part}" — expected "<key>=<value>", "<key>!=<value>", "<key>~<value>", or "<key>=/<regex>/"`);
|
|
68
|
-
}
|
|
69
|
-
if (!key) {
|
|
70
|
-
throw new FilterSyntaxError(`Empty key in filter clause "${part}"`);
|
|
71
|
-
}
|
|
72
|
-
if (!raw) {
|
|
73
|
-
throw new FilterSyntaxError(`Empty value for filter clause "${part}"`);
|
|
74
|
-
}
|
|
75
|
-
let resolvedKey = key;
|
|
76
|
-
if (options?.resolveKey) {
|
|
77
|
-
try {
|
|
78
|
-
resolvedKey = options.resolveKey(key);
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
if (err instanceof Error) {
|
|
82
|
-
throw new FilterSyntaxError(err.message);
|
|
83
|
-
}
|
|
84
|
-
throw err;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (!allowedKeys.includes(resolvedKey)) {
|
|
88
|
-
const printableKeys = options?.supportedKeys ?? allowedKeys;
|
|
89
|
-
throw new FilterSyntaxError(`Unknown filter key "${key}" – supported: ${printableKeys.join(', ')}`);
|
|
90
|
-
}
|
|
91
|
-
clauses.push({ key: resolvedKey, op, raw, regex });
|
|
92
|
-
}
|
|
93
|
-
return clauses;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Match a single candidate string against a clause.
|
|
97
|
-
*
|
|
98
|
-
* - `regex` → RegExp.test against the candidate (case-insensitive by construction).
|
|
99
|
-
* - `sub` → case-insensitive substring.
|
|
100
|
-
* - `eq` → case-insensitive substring, except for keys listed in
|
|
101
|
-
* `exactKeys`, which get case-insensitive exact comparison.
|
|
102
|
-
* Default `exactKeys` is `['category']` to preserve the existing
|
|
103
|
-
* list/batch behavior for that key.
|
|
104
|
-
* - `neq` → logical inverse of `eq` (negated substring; exact-negated for
|
|
105
|
-
* `exactKeys`). `undefined` candidates remain non-matching so a
|
|
106
|
-
* `neq` clause does NOT accidentally match missing data.
|
|
107
|
-
*/
|
|
108
|
-
export function matchClause(candidate, clause, options) {
|
|
109
|
-
if (candidate === undefined) {
|
|
110
|
-
// Missing field: `neq` treats absence as "definitely not X"; everything
|
|
111
|
-
// else treats it as "no evidence — don't match".
|
|
112
|
-
return clause.op === 'neq';
|
|
113
|
-
}
|
|
114
|
-
if (clause.op === 'regex') {
|
|
115
|
-
return clause.regex.test(candidate);
|
|
116
|
-
}
|
|
117
|
-
const cLower = candidate.toLowerCase();
|
|
118
|
-
const vLower = clause.raw.toLowerCase();
|
|
119
|
-
if (clause.op === 'sub') {
|
|
120
|
-
return cLower.includes(vLower);
|
|
121
|
-
}
|
|
122
|
-
const exactKeys = options?.exactKeys ?? ['category'];
|
|
123
|
-
const exact = exactKeys.includes(clause.key);
|
|
124
|
-
if (clause.op === 'neq') {
|
|
125
|
-
return exact ? cLower !== vLower : !cLower.includes(vLower);
|
|
126
|
-
}
|
|
127
|
-
if (exact) {
|
|
128
|
-
return cLower === vLower;
|
|
129
|
-
}
|
|
130
|
-
return cLower.includes(vLower);
|
|
131
|
-
}
|
|
132
|
-
const BATCH_KEYS = ['type', 'family', 'room', 'category'];
|
|
133
|
-
/**
|
|
134
|
-
* Back-compat narrow signature: parses with the batch key set. Callers that
|
|
135
|
-
* need a different key set (list, events tail) should call parseFilterExpr
|
|
136
|
-
* directly.
|
|
137
|
-
*/
|
|
138
|
-
export function parseFilter(expr) {
|
|
139
|
-
return parseFilterExpr(expr, BATCH_KEYS);
|
|
140
|
-
}
|
|
141
|
-
/** Normalize a physical / IR device entry to the shape the filter matcher expects. */
|
|
142
|
-
function toFilterable(d, isPhysical, hubLocation) {
|
|
143
|
-
if (isPhysical) {
|
|
144
|
-
const p = d;
|
|
145
|
-
return {
|
|
146
|
-
deviceId: p.deviceId,
|
|
147
|
-
type: p.deviceType ?? '',
|
|
148
|
-
family: p.familyName ?? undefined,
|
|
149
|
-
room: p.roomName ?? undefined,
|
|
150
|
-
category: 'physical',
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
const ir = d;
|
|
154
|
-
const inherited = hubLocation?.get(ir.hubDeviceId);
|
|
155
|
-
return {
|
|
156
|
-
deviceId: ir.deviceId,
|
|
157
|
-
type: ir.remoteType ?? '',
|
|
158
|
-
family: inherited?.family,
|
|
159
|
-
room: inherited?.room,
|
|
160
|
-
category: 'ir',
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
function candidateFor(d, key) {
|
|
164
|
-
switch (key) {
|
|
165
|
-
case 'type':
|
|
166
|
-
return d.type;
|
|
167
|
-
case 'family':
|
|
168
|
-
return d.family;
|
|
169
|
-
case 'room':
|
|
170
|
-
return d.room;
|
|
171
|
-
case 'category':
|
|
172
|
-
return d.category;
|
|
173
|
-
default:
|
|
174
|
-
return undefined;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Apply the parsed clauses to a mixed list of physical devices + IR remotes.
|
|
179
|
-
* Returns the filterable entries that satisfy every clause.
|
|
180
|
-
*/
|
|
181
|
-
export function applyFilter(clauses, deviceList, infraredRemoteList, hubLocation) {
|
|
182
|
-
const candidates = [
|
|
183
|
-
...deviceList.map((d) => toFilterable(d, true)),
|
|
184
|
-
...infraredRemoteList.map((d) => toFilterable(d, false, hubLocation)),
|
|
185
|
-
];
|
|
186
|
-
if (clauses.length === 0)
|
|
187
|
-
return candidates;
|
|
188
|
-
return candidates.filter((c) => clauses.every((clause) => matchClause(candidateFor(c, clause.key), clause)));
|
|
189
|
-
}
|
|
190
|
-
//# sourceMappingURL=filter.js.map
|
package/dist/utils/filter.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/utils/filter.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/flags.d.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Read global flags directly from process.argv (same pattern as isJsonMode).
|
|
3
|
-
* Kept simple so subcommand actions don't need to thread program.opts() down.
|
|
4
|
-
*/
|
|
5
|
-
export declare function isVerbose(): boolean;
|
|
6
|
-
/**
|
|
7
|
-
* Opt-in: disable header redaction in verbose traces. Adds a big warning on
|
|
8
|
-
* stderr. Use only when actively debugging an auth issue — never in logs or
|
|
9
|
-
* CI output.
|
|
10
|
-
*/
|
|
11
|
-
export declare function isTraceUnsafe(): boolean;
|
|
12
|
-
export declare function isDryRun(): boolean;
|
|
13
|
-
/** HTTP request timeout in milliseconds. Default 30s. Minimum 100ms (values below 100ms are ignored). */
|
|
14
|
-
export declare function getTimeout(): number;
|
|
15
|
-
/** Override for the credentials file path. */
|
|
16
|
-
export declare function getConfigPath(): string | undefined;
|
|
17
|
-
/** Named profile → ~/.switchbot/profiles/<name>.json. */
|
|
18
|
-
export declare function getProfile(): string | undefined;
|
|
19
|
-
/**
|
|
20
|
-
* Audit log path. `--audit-log` enables JSONL append on every mutating command.
|
|
21
|
-
* Use `--audit-log-path <path>` to specify a custom file; otherwise defaults to
|
|
22
|
-
* ~/.switchbot/audit.log. Returns null when --audit-log is absent.
|
|
23
|
-
*/
|
|
24
|
-
export declare function getAuditLog(): string | null;
|
|
25
|
-
/**
|
|
26
|
-
* Max 429 retries before surfacing the error. Default 3. `--no-retry`
|
|
27
|
-
* disables retries entirely; `--retry-on-429 <n>` overrides the count.
|
|
28
|
-
*/
|
|
29
|
-
export declare function getRetryOn429(): number;
|
|
30
|
-
/** Backoff strategy for 429 retries. Default 'exponential'. */
|
|
31
|
-
export declare function getBackoffStrategy(): 'linear' | 'exponential';
|
|
32
|
-
/**
|
|
33
|
-
* Max retries on 5xx / gateway-timeout responses for idempotent (GET) reads.
|
|
34
|
-
* Default 2. `--no-retry` disables retries entirely. POSTs are not retried
|
|
35
|
-
* automatically — use --idempotency-key and let the server dedupe.
|
|
36
|
-
*/
|
|
37
|
-
export declare function getRetryOn5xx(): number;
|
|
38
|
-
/**
|
|
39
|
-
* Whether local quota counting is disabled. Quota counting is best-effort
|
|
40
|
-
* (see src/utils/quota.ts) — this lets scripts opt out entirely when even
|
|
41
|
-
* best-effort file I/O is unwelcome.
|
|
42
|
-
*/
|
|
43
|
-
export declare function isQuotaDisabled(): boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Cache TTL controls. Values:
|
|
46
|
-
* - `--no-cache` → disable cache for all reads
|
|
47
|
-
* - `--cache off` → same as `--no-cache`
|
|
48
|
-
* - `--cache auto` (default) → list cache on (1h), status cache off
|
|
49
|
-
* - `--cache 5m` | `--cache 1h` → enable both stores with the given TTL
|
|
50
|
-
* - numeric millisecond values are also accepted
|
|
51
|
-
*/
|
|
52
|
-
export interface CacheMode {
|
|
53
|
-
/** TTL for the device-list cache, in ms. 0/undefined = off. */
|
|
54
|
-
listTtlMs: number;
|
|
55
|
-
/** TTL for the device-status cache, in ms. 0/undefined = off. */
|
|
56
|
-
statusTtlMs: number;
|
|
57
|
-
}
|
|
58
|
-
declare function parseDurationToMs(v: string): number | null;
|
|
59
|
-
export { parseDurationToMs };
|
|
60
|
-
/** The --format flag value, or undefined when absent. */
|
|
61
|
-
export declare function getFormat(): string | undefined;
|
|
62
|
-
/** Comma-separated --fields value, split into an array. */
|
|
63
|
-
export declare function getFields(): string[] | undefined;
|
|
64
|
-
/**
|
|
65
|
-
* Table rendering style. Defaults to `unicode` on a TTY and `ascii` on pipes —
|
|
66
|
-
* agents consuming stdout tend to choke on the Unicode box-drawing chars.
|
|
67
|
-
* Valid values: `unicode` (default on TTY), `ascii`, `simple` (whitespace-only),
|
|
68
|
-
* `markdown` (fenced `| col | col |` table for agent-friendly UI embedding).
|
|
69
|
-
*/
|
|
70
|
-
export type TableStyle = 'unicode' | 'ascii' | 'simple' | 'markdown';
|
|
71
|
-
export declare function getTableStyle(): TableStyle;
|
|
72
|
-
export declare function getCacheMode(): CacheMode;
|