@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.
- package/README.md +3 -1
- package/dist/index.js +57419 -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
package/dist/utils/flags.js
DELETED
|
@@ -1,187 +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
|
-
function getFlagValue(...flagNames) {
|
|
6
|
-
for (const flag of flagNames) {
|
|
7
|
-
const idx = process.argv.indexOf(flag);
|
|
8
|
-
if (idx !== -1 && idx + 1 < process.argv.length) {
|
|
9
|
-
return process.argv[idx + 1];
|
|
10
|
-
}
|
|
11
|
-
// Also accept the `--flag=value` token form. Commander.js recognizes it at
|
|
12
|
-
// the option layer but global-flag scans like this one used to miss it,
|
|
13
|
-
// so `--format=json` silently fell back to the default (table).
|
|
14
|
-
const prefix = `${flag}=`;
|
|
15
|
-
const combined = process.argv.find((arg) => arg.startsWith(prefix));
|
|
16
|
-
if (combined !== undefined) {
|
|
17
|
-
return combined.slice(prefix.length);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
-
export function isVerbose() {
|
|
23
|
-
return process.argv.includes('--verbose') || process.argv.includes('-v');
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Opt-in: disable header redaction in verbose traces. Adds a big warning on
|
|
27
|
-
* stderr. Use only when actively debugging an auth issue — never in logs or
|
|
28
|
-
* CI output.
|
|
29
|
-
*/
|
|
30
|
-
export function isTraceUnsafe() {
|
|
31
|
-
return process.argv.includes('--trace-unsafe');
|
|
32
|
-
}
|
|
33
|
-
export function isDryRun() {
|
|
34
|
-
return process.argv.includes('--dry-run');
|
|
35
|
-
}
|
|
36
|
-
/** HTTP request timeout in milliseconds. Default 30s. Minimum 100ms (values below 100ms are ignored). */
|
|
37
|
-
export function getTimeout() {
|
|
38
|
-
const v = getFlagValue('--timeout');
|
|
39
|
-
if (!v)
|
|
40
|
-
return 30_000;
|
|
41
|
-
const n = Number(v);
|
|
42
|
-
if (!Number.isFinite(n) || n <= 0)
|
|
43
|
-
return 30_000;
|
|
44
|
-
if (n < 100) {
|
|
45
|
-
process.stderr.write(`Warning: --timeout ${n}ms is too low to complete any request; using 100ms minimum.\n`);
|
|
46
|
-
return 100;
|
|
47
|
-
}
|
|
48
|
-
return n;
|
|
49
|
-
}
|
|
50
|
-
/** Override for the credentials file path. */
|
|
51
|
-
export function getConfigPath() {
|
|
52
|
-
return getFlagValue('--config');
|
|
53
|
-
}
|
|
54
|
-
/** Named profile → ~/.switchbot/profiles/<name>.json. */
|
|
55
|
-
export function getProfile() {
|
|
56
|
-
return getFlagValue('--profile');
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Audit log path. `--audit-log` enables JSONL append on every mutating command.
|
|
60
|
-
* Use `--audit-log-path <path>` to specify a custom file; otherwise defaults to
|
|
61
|
-
* ~/.switchbot/audit.log. Returns null when --audit-log is absent.
|
|
62
|
-
*/
|
|
63
|
-
export function getAuditLog() {
|
|
64
|
-
if (!process.argv.includes('--audit-log'))
|
|
65
|
-
return null;
|
|
66
|
-
const customPath = getFlagValue('--audit-log-path');
|
|
67
|
-
if (customPath)
|
|
68
|
-
return customPath;
|
|
69
|
-
return `${process.env.HOME ?? process.env.USERPROFILE ?? '.'}/.switchbot/audit.log`;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Max 429 retries before surfacing the error. Default 3. `--no-retry`
|
|
73
|
-
* disables retries entirely; `--retry-on-429 <n>` overrides the count.
|
|
74
|
-
*/
|
|
75
|
-
export function getRetryOn429() {
|
|
76
|
-
if (process.argv.includes('--no-retry'))
|
|
77
|
-
return 0;
|
|
78
|
-
const v = getFlagValue('--retry-on-429');
|
|
79
|
-
if (v === undefined)
|
|
80
|
-
return 3;
|
|
81
|
-
const n = Number(v);
|
|
82
|
-
if (!Number.isFinite(n) || n < 0)
|
|
83
|
-
return 3;
|
|
84
|
-
return Math.floor(n);
|
|
85
|
-
}
|
|
86
|
-
/** Backoff strategy for 429 retries. Default 'exponential'. */
|
|
87
|
-
export function getBackoffStrategy() {
|
|
88
|
-
const v = getFlagValue('--backoff');
|
|
89
|
-
if (v === 'linear')
|
|
90
|
-
return 'linear';
|
|
91
|
-
return 'exponential';
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Max retries on 5xx / gateway-timeout responses for idempotent (GET) reads.
|
|
95
|
-
* Default 2. `--no-retry` disables retries entirely. POSTs are not retried
|
|
96
|
-
* automatically — use --idempotency-key and let the server dedupe.
|
|
97
|
-
*/
|
|
98
|
-
export function getRetryOn5xx() {
|
|
99
|
-
if (process.argv.includes('--no-retry'))
|
|
100
|
-
return 0;
|
|
101
|
-
const v = getFlagValue('--retry-on-5xx');
|
|
102
|
-
if (v === undefined)
|
|
103
|
-
return 2;
|
|
104
|
-
const n = Number(v);
|
|
105
|
-
if (!Number.isFinite(n) || n < 0)
|
|
106
|
-
return 2;
|
|
107
|
-
return Math.floor(n);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Whether local quota counting is disabled. Quota counting is best-effort
|
|
111
|
-
* (see src/utils/quota.ts) — this lets scripts opt out entirely when even
|
|
112
|
-
* best-effort file I/O is unwelcome.
|
|
113
|
-
*/
|
|
114
|
-
export function isQuotaDisabled() {
|
|
115
|
-
return process.argv.includes('--no-quota');
|
|
116
|
-
}
|
|
117
|
-
const DEFAULT_LIST_TTL_MS = 60 * 60 * 1000;
|
|
118
|
-
function parseDurationToMs(v) {
|
|
119
|
-
const m = /^(\d+)(ms|s|m|h|d|w)?$/.exec(v.trim().toLowerCase());
|
|
120
|
-
if (!m)
|
|
121
|
-
return null;
|
|
122
|
-
const n = Number(m[1]);
|
|
123
|
-
if (!Number.isFinite(n) || n < 0)
|
|
124
|
-
return null;
|
|
125
|
-
const unit = m[2] ?? 'ms';
|
|
126
|
-
switch (unit) {
|
|
127
|
-
case 'ms': return n;
|
|
128
|
-
case 's': return n * 1000;
|
|
129
|
-
case 'm': return n * 60 * 1000;
|
|
130
|
-
case 'h': return n * 60 * 60 * 1000;
|
|
131
|
-
case 'd': return n * 24 * 60 * 60 * 1000;
|
|
132
|
-
case 'w': return n * 7 * 24 * 60 * 60 * 1000;
|
|
133
|
-
default: return null;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
export { parseDurationToMs };
|
|
137
|
-
/** The --format flag value, or undefined when absent. */
|
|
138
|
-
export function getFormat() {
|
|
139
|
-
return getFlagValue('--format');
|
|
140
|
-
}
|
|
141
|
-
/** Comma-separated --fields value, split into an array. */
|
|
142
|
-
export function getFields() {
|
|
143
|
-
const v = getFlagValue('--fields');
|
|
144
|
-
if (!v)
|
|
145
|
-
return undefined;
|
|
146
|
-
return v.split(',').map((f) => f.trim()).filter(Boolean);
|
|
147
|
-
}
|
|
148
|
-
export function getTableStyle() {
|
|
149
|
-
const v = getFlagValue('--table-style');
|
|
150
|
-
if (v === 'unicode' || v === 'ascii' || v === 'simple' || v === 'markdown')
|
|
151
|
-
return v;
|
|
152
|
-
if (getFormat() === 'markdown')
|
|
153
|
-
return 'markdown';
|
|
154
|
-
// TTY → pretty unicode borders. Non-TTY (pipe/redirect) → ascii to avoid
|
|
155
|
-
// mojibake in consumer logs.
|
|
156
|
-
return process.stdout.isTTY ? 'unicode' : 'ascii';
|
|
157
|
-
}
|
|
158
|
-
export function getCacheMode() {
|
|
159
|
-
if (process.argv.includes('--no-cache')) {
|
|
160
|
-
return { listTtlMs: 0, statusTtlMs: 0 };
|
|
161
|
-
}
|
|
162
|
-
// Individual TTL overrides take precedence over the combined --cache flag.
|
|
163
|
-
const listFlag = getFlagValue('--cache-list');
|
|
164
|
-
const statusFlag = getFlagValue('--cache-status');
|
|
165
|
-
if (listFlag !== undefined || statusFlag !== undefined) {
|
|
166
|
-
const listTtlMs = listFlag !== undefined
|
|
167
|
-
? (parseDurationToMs(listFlag) ?? DEFAULT_LIST_TTL_MS)
|
|
168
|
-
: DEFAULT_LIST_TTL_MS;
|
|
169
|
-
const statusTtlMs = statusFlag !== undefined
|
|
170
|
-
? (parseDurationToMs(statusFlag) ?? 0)
|
|
171
|
-
: 0;
|
|
172
|
-
return { listTtlMs, statusTtlMs };
|
|
173
|
-
}
|
|
174
|
-
const v = getFlagValue('--cache');
|
|
175
|
-
if (!v || v === 'auto') {
|
|
176
|
-
return { listTtlMs: DEFAULT_LIST_TTL_MS, statusTtlMs: 0 };
|
|
177
|
-
}
|
|
178
|
-
if (v === 'off') {
|
|
179
|
-
return { listTtlMs: 0, statusTtlMs: 0 };
|
|
180
|
-
}
|
|
181
|
-
const ms = parseDurationToMs(v);
|
|
182
|
-
if (ms === null || ms === 0) {
|
|
183
|
-
return { listTtlMs: DEFAULT_LIST_TTL_MS, statusTtlMs: 0 };
|
|
184
|
-
}
|
|
185
|
-
return { listTtlMs: ms, statusTtlMs: ms };
|
|
186
|
-
}
|
|
187
|
-
//# sourceMappingURL=flags.js.map
|
package/dist/utils/flags.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/utils/flags.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/format.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export type OutputFormat = 'table' | 'json' | 'jsonl' | 'tsv' | 'yaml' | 'id' | 'markdown';
|
|
2
|
-
export declare function parseFormat(flag: string | undefined): OutputFormat;
|
|
3
|
-
export declare function resolveFormat(): OutputFormat;
|
|
4
|
-
export declare function resolveFields(): string[] | undefined;
|
|
5
|
-
export declare function filterFields(headers: string[], rows: unknown[][], fields: string[] | undefined, aliases?: Record<string, string>): {
|
|
6
|
-
headers: string[];
|
|
7
|
-
rows: unknown[][];
|
|
8
|
-
};
|
|
9
|
-
export declare function renderRows(headers: string[], rows: unknown[][], format: OutputFormat, fields?: string[], aliases?: Record<string, string>): void;
|
package/dist/utils/format.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { printTable, printJson, isJsonMode, UsageError, emitJsonError } from './output.js';
|
|
2
|
-
import { getFormat, getFields } from './flags.js';
|
|
3
|
-
import { dump as yamlDump } from 'js-yaml';
|
|
4
|
-
export function parseFormat(flag) {
|
|
5
|
-
if (!flag)
|
|
6
|
-
return 'table';
|
|
7
|
-
const lower = flag.toLowerCase();
|
|
8
|
-
switch (lower) {
|
|
9
|
-
case 'table': return 'table';
|
|
10
|
-
case 'json': return 'json';
|
|
11
|
-
case 'jsonl': return 'jsonl';
|
|
12
|
-
case 'tsv': return 'tsv';
|
|
13
|
-
case 'yaml': return 'yaml';
|
|
14
|
-
case 'id': return 'id';
|
|
15
|
-
case 'markdown': return 'markdown';
|
|
16
|
-
default: {
|
|
17
|
-
const msg = `Unknown --format "${flag}". Expected: table, json, jsonl, tsv, yaml, id, markdown.`;
|
|
18
|
-
if (isJsonMode()) {
|
|
19
|
-
emitJsonError({ code: 2, kind: 'usage', message: msg });
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
console.error(msg);
|
|
23
|
-
}
|
|
24
|
-
process.exit(2);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export function resolveFormat() {
|
|
29
|
-
if (process.argv.includes('--json'))
|
|
30
|
-
return 'json';
|
|
31
|
-
return parseFormat(getFormat());
|
|
32
|
-
}
|
|
33
|
-
export function resolveFields() {
|
|
34
|
-
return getFields();
|
|
35
|
-
}
|
|
36
|
-
export function filterFields(headers, rows, fields, aliases) {
|
|
37
|
-
if (!fields || fields.length === 0)
|
|
38
|
-
return { headers, rows };
|
|
39
|
-
const resolved = aliases ? fields.map((f) => aliases[f] ?? f) : fields;
|
|
40
|
-
const unknown = fields.filter((_, i) => !headers.includes(resolved[i]));
|
|
41
|
-
if (unknown.length > 0) {
|
|
42
|
-
throw new UsageError(`Unknown field(s): ${unknown.map((f) => `"${f}"`).join(', ')}. ` +
|
|
43
|
-
`Allowed: ${headers.map((f) => `"${f}"`).join(', ')}.`);
|
|
44
|
-
}
|
|
45
|
-
const indices = resolved.map((f) => headers.indexOf(f));
|
|
46
|
-
return {
|
|
47
|
-
headers: indices.map((i) => headers[i]),
|
|
48
|
-
rows: rows.map((row) => indices.map((i) => row[i])),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
function cellToString(cell) {
|
|
52
|
-
if (cell === null || cell === undefined)
|
|
53
|
-
return '';
|
|
54
|
-
if (typeof cell === 'boolean')
|
|
55
|
-
return cell ? 'true' : 'false';
|
|
56
|
-
if (typeof cell === 'object')
|
|
57
|
-
return JSON.stringify(cell);
|
|
58
|
-
return String(cell);
|
|
59
|
-
}
|
|
60
|
-
function rowToObject(headers, row) {
|
|
61
|
-
const obj = {};
|
|
62
|
-
for (let i = 0; i < headers.length; i++) {
|
|
63
|
-
obj[headers[i]] = row[i] ?? null;
|
|
64
|
-
}
|
|
65
|
-
return obj;
|
|
66
|
-
}
|
|
67
|
-
export function renderRows(headers, rows, format, fields, aliases) {
|
|
68
|
-
const filtered = filterFields(headers, rows, fields, aliases);
|
|
69
|
-
const h = filtered.headers;
|
|
70
|
-
const r = filtered.rows;
|
|
71
|
-
// Markdown format is rendered as table with markdown style forced regardless
|
|
72
|
-
// of the user's --table-style, so `--format markdown` is a self-contained
|
|
73
|
-
// contract (bug #8).
|
|
74
|
-
if (format === 'markdown') {
|
|
75
|
-
printTable(h, r, 'markdown');
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
switch (format) {
|
|
79
|
-
case 'table':
|
|
80
|
-
printTable(h, r);
|
|
81
|
-
break;
|
|
82
|
-
case 'json':
|
|
83
|
-
printJson(r.map((row) => rowToObject(h, row)));
|
|
84
|
-
break;
|
|
85
|
-
case 'jsonl':
|
|
86
|
-
for (const row of r) {
|
|
87
|
-
console.log(JSON.stringify(rowToObject(h, row)));
|
|
88
|
-
}
|
|
89
|
-
break;
|
|
90
|
-
case 'tsv':
|
|
91
|
-
console.log(h.join('\t'));
|
|
92
|
-
for (const row of r) {
|
|
93
|
-
console.log(row.map(cellToString).join('\t'));
|
|
94
|
-
}
|
|
95
|
-
break;
|
|
96
|
-
case 'yaml':
|
|
97
|
-
for (const row of r) {
|
|
98
|
-
const obj = rowToObject(h, row);
|
|
99
|
-
console.log('---');
|
|
100
|
-
console.log(yamlDump(obj, { lineWidth: -1 }).trimEnd());
|
|
101
|
-
}
|
|
102
|
-
break;
|
|
103
|
-
case 'id': {
|
|
104
|
-
const idIdx = h.indexOf('deviceId') !== -1 ? h.indexOf('deviceId')
|
|
105
|
-
: h.indexOf('sceneId') !== -1 ? h.indexOf('sceneId')
|
|
106
|
-
: -1;
|
|
107
|
-
if (idIdx === -1) {
|
|
108
|
-
throw new UsageError(`--format=id requires a "deviceId" or "sceneId" column. ` +
|
|
109
|
-
`This command outputs: ${h.map((c) => `"${c}"`).join(', ')}.`);
|
|
110
|
-
}
|
|
111
|
-
for (const row of r) {
|
|
112
|
-
console.log(cellToString(row[idIdx]));
|
|
113
|
-
}
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=format.js.map
|
package/dist/utils/format.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/health.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Health report utilities — collects process, quota, audit, and circuit
|
|
3
|
-
* breaker state into a single snapshot suitable for /health-style checks
|
|
4
|
-
* and Prometheus-compatible metrics export.
|
|
5
|
-
*
|
|
6
|
-
* No side effects: reading is safe to call from any context.
|
|
7
|
-
*/
|
|
8
|
-
export interface QuotaHealth {
|
|
9
|
-
used: number;
|
|
10
|
-
limit: number;
|
|
11
|
-
percentUsed: number;
|
|
12
|
-
remaining: number;
|
|
13
|
-
status: 'ok' | 'warn' | 'critical';
|
|
14
|
-
}
|
|
15
|
-
export interface AuditHealth {
|
|
16
|
-
present: boolean;
|
|
17
|
-
recentErrors: number;
|
|
18
|
-
recentTotal: number;
|
|
19
|
-
errorRatePercent: number;
|
|
20
|
-
status: 'ok' | 'warn';
|
|
21
|
-
}
|
|
22
|
-
export interface CircuitHealth {
|
|
23
|
-
name: string;
|
|
24
|
-
state: 'closed' | 'open' | 'half-open';
|
|
25
|
-
failures: number;
|
|
26
|
-
status: 'ok' | 'open';
|
|
27
|
-
}
|
|
28
|
-
export interface ProcessHealth {
|
|
29
|
-
pid: number;
|
|
30
|
-
uptimeSeconds: number;
|
|
31
|
-
platform: string;
|
|
32
|
-
nodeVersion: string;
|
|
33
|
-
memoryMb: number;
|
|
34
|
-
}
|
|
35
|
-
export interface HealthReport {
|
|
36
|
-
generatedAt: string;
|
|
37
|
-
overall: 'ok' | 'degraded' | 'down';
|
|
38
|
-
process: ProcessHealth;
|
|
39
|
-
quota: QuotaHealth;
|
|
40
|
-
audit: AuditHealth;
|
|
41
|
-
circuit: CircuitHealth;
|
|
42
|
-
}
|
|
43
|
-
export declare function getHealthReport(auditPath?: string): HealthReport;
|
|
44
|
-
/**
|
|
45
|
-
* Render a minimal Prometheus-compatible text metrics export.
|
|
46
|
-
* Only includes the most actionable gauges.
|
|
47
|
-
*/
|
|
48
|
-
export declare function toPrometheusText(report: HealthReport): string;
|
package/dist/utils/health.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Health report utilities — collects process, quota, audit, and circuit
|
|
3
|
-
* breaker state into a single snapshot suitable for /health-style checks
|
|
4
|
-
* and Prometheus-compatible metrics export.
|
|
5
|
-
*
|
|
6
|
-
* No side effects: reading is safe to call from any context.
|
|
7
|
-
*/
|
|
8
|
-
import fs from 'node:fs';
|
|
9
|
-
import os from 'node:os';
|
|
10
|
-
import path from 'node:path';
|
|
11
|
-
import { todayUsage, DAILY_QUOTA } from './quota.js';
|
|
12
|
-
import { readAudit } from './audit.js';
|
|
13
|
-
import { apiCircuitBreaker } from '../api/client.js';
|
|
14
|
-
const DEFAULT_AUDIT_PATH = path.join(os.homedir(), '.switchbot', 'audit.log');
|
|
15
|
-
const AUDIT_ERROR_WINDOW_MS = 24 * 60 * 60 * 1000; // 24h
|
|
16
|
-
export function getHealthReport(auditPath = DEFAULT_AUDIT_PATH) {
|
|
17
|
-
const now = new Date();
|
|
18
|
-
// Process info
|
|
19
|
-
const procHealth = {
|
|
20
|
-
pid: process.pid,
|
|
21
|
-
uptimeSeconds: Math.floor(process.uptime()),
|
|
22
|
-
platform: process.platform,
|
|
23
|
-
nodeVersion: process.version,
|
|
24
|
-
memoryMb: Math.round(process.memoryUsage().rss / 1024 / 1024),
|
|
25
|
-
};
|
|
26
|
-
// Quota
|
|
27
|
-
const { total: used } = todayUsage(now);
|
|
28
|
-
const pct = Math.round((used / DAILY_QUOTA) * 100);
|
|
29
|
-
const quotaHealth = {
|
|
30
|
-
used,
|
|
31
|
-
limit: DAILY_QUOTA,
|
|
32
|
-
percentUsed: pct,
|
|
33
|
-
remaining: Math.max(0, DAILY_QUOTA - used),
|
|
34
|
-
status: pct >= 90 ? 'critical' : pct >= 70 ? 'warn' : 'ok',
|
|
35
|
-
};
|
|
36
|
-
// Audit error rate (last 24h)
|
|
37
|
-
let auditHealth;
|
|
38
|
-
if (!fs.existsSync(auditPath)) {
|
|
39
|
-
auditHealth = { present: false, recentErrors: 0, recentTotal: 0, errorRatePercent: 0, status: 'ok' };
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
const entries = readAudit(auditPath);
|
|
43
|
-
const windowStart = now.getTime() - AUDIT_ERROR_WINDOW_MS;
|
|
44
|
-
const recent = entries.filter((e) => new Date(e.t).getTime() >= windowStart);
|
|
45
|
-
const errors = recent.filter((e) => e.result === 'error').length;
|
|
46
|
-
const total = recent.length;
|
|
47
|
-
const errorRate = total > 0 ? Math.round((errors / total) * 100) : 0;
|
|
48
|
-
auditHealth = {
|
|
49
|
-
present: true,
|
|
50
|
-
recentErrors: errors,
|
|
51
|
-
recentTotal: total,
|
|
52
|
-
errorRatePercent: errorRate,
|
|
53
|
-
status: errorRate >= 30 ? 'warn' : 'ok',
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// Circuit breaker
|
|
57
|
-
const cbStats = apiCircuitBreaker.getStats();
|
|
58
|
-
const circuitHealth = {
|
|
59
|
-
name: apiCircuitBreaker.name,
|
|
60
|
-
state: cbStats.state,
|
|
61
|
-
failures: cbStats.failures,
|
|
62
|
-
status: cbStats.state === 'open' ? 'open' : 'ok',
|
|
63
|
-
};
|
|
64
|
-
// Overall
|
|
65
|
-
const degraded = quotaHealth.status !== 'ok' ||
|
|
66
|
-
auditHealth.status !== 'ok' ||
|
|
67
|
-
circuitHealth.status !== 'ok';
|
|
68
|
-
const down = circuitHealth.status === 'open';
|
|
69
|
-
const overall = down ? 'down' : degraded ? 'degraded' : 'ok';
|
|
70
|
-
return {
|
|
71
|
-
generatedAt: now.toISOString(),
|
|
72
|
-
overall,
|
|
73
|
-
process: procHealth,
|
|
74
|
-
quota: quotaHealth,
|
|
75
|
-
audit: auditHealth,
|
|
76
|
-
circuit: circuitHealth,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Render a minimal Prometheus-compatible text metrics export.
|
|
81
|
-
* Only includes the most actionable gauges.
|
|
82
|
-
*/
|
|
83
|
-
export function toPrometheusText(report) {
|
|
84
|
-
const lines = [];
|
|
85
|
-
const push = (name, value, help) => {
|
|
86
|
-
if (help)
|
|
87
|
-
lines.push(`# HELP ${name} ${help}`);
|
|
88
|
-
lines.push(`# TYPE ${name} gauge`);
|
|
89
|
-
lines.push(`${name} ${value}`);
|
|
90
|
-
};
|
|
91
|
-
push('switchbot_quota_used_total', report.quota.used, 'SwitchBot API requests used today');
|
|
92
|
-
push('switchbot_quota_remaining', report.quota.remaining, 'SwitchBot API quota remaining today');
|
|
93
|
-
push('switchbot_quota_percent_used', report.quota.percentUsed, 'SwitchBot API quota percent used today');
|
|
94
|
-
push('switchbot_audit_recent_errors', report.audit.recentErrors, 'Audit log errors in the last 24h');
|
|
95
|
-
push('switchbot_audit_error_rate_percent', report.audit.errorRatePercent, 'Audit error rate percent (last 24h)');
|
|
96
|
-
push('switchbot_circuit_open', report.circuit.state === 'open' ? 1 : 0, 'API circuit breaker open (1=open, 0=closed/half-open)');
|
|
97
|
-
push('switchbot_circuit_failures', report.circuit.failures, 'Consecutive API failures recorded by circuit breaker');
|
|
98
|
-
push('switchbot_process_uptime_seconds', report.process.uptimeSeconds, 'Process uptime in seconds');
|
|
99
|
-
push('switchbot_process_memory_mb', report.process.memoryMb, 'Process RSS memory usage in MB');
|
|
100
|
-
return lines.join('\n') + '\n';
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=health.js.map
|
package/dist/utils/health.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/utils/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander';
|
|
2
|
-
interface ArgJson {
|
|
3
|
-
name: string;
|
|
4
|
-
required: boolean;
|
|
5
|
-
variadic: boolean;
|
|
6
|
-
description: string;
|
|
7
|
-
}
|
|
8
|
-
interface OptionJson {
|
|
9
|
-
flags: string;
|
|
10
|
-
description: string;
|
|
11
|
-
defaultValue?: unknown;
|
|
12
|
-
choices?: string[];
|
|
13
|
-
}
|
|
14
|
-
interface SubcommandJson {
|
|
15
|
-
name: string;
|
|
16
|
-
description: string;
|
|
17
|
-
}
|
|
18
|
-
export interface CommandJson {
|
|
19
|
-
name: string;
|
|
20
|
-
description: string;
|
|
21
|
-
/** Root-only — present only when commandToJson() is called with {includeIdentity:true}. */
|
|
22
|
-
product?: string;
|
|
23
|
-
domain?: string;
|
|
24
|
-
vendor?: string;
|
|
25
|
-
apiVersion?: string;
|
|
26
|
-
apiDocs?: string;
|
|
27
|
-
productCategories?: readonly string[];
|
|
28
|
-
arguments: ArgJson[];
|
|
29
|
-
options: OptionJson[];
|
|
30
|
-
subcommands: SubcommandJson[];
|
|
31
|
-
}
|
|
32
|
-
export interface CommandToJsonOptions {
|
|
33
|
-
/** Inject product identity fields at top level. Intended for the root program only. */
|
|
34
|
-
includeIdentity?: boolean;
|
|
35
|
-
}
|
|
36
|
-
export declare function commandToJson(cmd: Command, opts?: CommandToJsonOptions): CommandJson;
|
|
37
|
-
/** Walk argv tokens (skipping flags) to find the deepest matching subcommand. */
|
|
38
|
-
export declare function resolveTargetCommand(root: Command, argv: string[]): Command;
|
|
39
|
-
export {};
|
package/dist/utils/help-json.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { IDENTITY } from '../commands/identity.js';
|
|
2
|
-
export function commandToJson(cmd, opts = {}) {
|
|
3
|
-
const args = cmd.registeredArguments.map((a) => ({
|
|
4
|
-
name: a.name(),
|
|
5
|
-
required: a.required,
|
|
6
|
-
variadic: a.variadic,
|
|
7
|
-
description: a.description ?? '',
|
|
8
|
-
}));
|
|
9
|
-
const options = cmd.options
|
|
10
|
-
.filter((o) => o.long !== '--help' && o.long !== '--version')
|
|
11
|
-
.map((o) => {
|
|
12
|
-
const entry = { flags: o.flags, description: o.description ?? '' };
|
|
13
|
-
if (o.defaultValue !== undefined)
|
|
14
|
-
entry.defaultValue = o.defaultValue;
|
|
15
|
-
if (o.argChoices && o.argChoices.length > 0)
|
|
16
|
-
entry.choices = o.argChoices;
|
|
17
|
-
return entry;
|
|
18
|
-
});
|
|
19
|
-
const subcommands = cmd.commands
|
|
20
|
-
.filter((c) => !c.name().startsWith('_'))
|
|
21
|
-
.map((c) => ({ name: c.name(), description: c.description() }));
|
|
22
|
-
const out = {
|
|
23
|
-
name: cmd.name(),
|
|
24
|
-
description: cmd.description(),
|
|
25
|
-
arguments: args,
|
|
26
|
-
options,
|
|
27
|
-
subcommands,
|
|
28
|
-
};
|
|
29
|
-
if (opts.includeIdentity) {
|
|
30
|
-
out.product = IDENTITY.product;
|
|
31
|
-
out.domain = IDENTITY.domain;
|
|
32
|
-
out.vendor = IDENTITY.vendor;
|
|
33
|
-
out.apiVersion = IDENTITY.apiVersion;
|
|
34
|
-
out.apiDocs = IDENTITY.apiDocs;
|
|
35
|
-
out.productCategories = IDENTITY.productCategories;
|
|
36
|
-
}
|
|
37
|
-
return out;
|
|
38
|
-
}
|
|
39
|
-
/** Walk argv tokens (skipping flags) to find the deepest matching subcommand. */
|
|
40
|
-
export function resolveTargetCommand(root, argv) {
|
|
41
|
-
let cmd = root;
|
|
42
|
-
for (const token of argv) {
|
|
43
|
-
if (token.startsWith('-'))
|
|
44
|
-
continue;
|
|
45
|
-
const sub = cmd.commands.find((c) => c.name() === token || c.aliases().includes(token));
|
|
46
|
-
if (sub) {
|
|
47
|
-
cmd = sub;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return cmd;
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=help-json.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"help-json.js","sourceRoot":"","sources":["../../src/utils/help-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface NameMatch {
|
|
2
|
-
deviceId: string;
|
|
3
|
-
name: string;
|
|
4
|
-
score: number;
|
|
5
|
-
}
|
|
6
|
-
export type NameResolveStrategy = 'exact' | 'prefix' | 'substring' | 'fuzzy' | 'first' | 'require-unique';
|
|
7
|
-
export interface NameResolveOptions {
|
|
8
|
-
strategy?: NameResolveStrategy;
|
|
9
|
-
type?: string;
|
|
10
|
-
category?: 'physical' | 'ir';
|
|
11
|
-
room?: string;
|
|
12
|
-
}
|
|
13
|
-
export type NameResolveResult = {
|
|
14
|
-
ok: true;
|
|
15
|
-
deviceId: string;
|
|
16
|
-
} | {
|
|
17
|
-
ok: false;
|
|
18
|
-
ambiguous: true;
|
|
19
|
-
candidates: NameMatch[];
|
|
20
|
-
} | {
|
|
21
|
-
ok: false;
|
|
22
|
-
ambiguous: false;
|
|
23
|
-
};
|
|
24
|
-
export declare const ALL_STRATEGIES: readonly NameResolveStrategy[];
|
|
25
|
-
export declare function isValidStrategy(s: string): s is NameResolveStrategy;
|
|
26
|
-
export declare function resolveDeviceId(deviceId: string | undefined, nameQuery: string | undefined, opts?: NameResolveOptions): string;
|