/** * Secret indirection for account credentials — keeps plaintext out of * config.toml. A config value may be: * * • a plain string → used as-is (backward compatible) * • "keychain:" → macOS Keychain, service "email-mcp" * • "keychain:/"→ macOS Keychain, explicit service * • "env:" → an environment variable * * The Keychain path shells out to the `security` CLI. Only the service and * account (non-secret identifiers) are ever passed as arguments — the secret * itself only ever travels back on the child's stdout, so nothing sensitive * reaches argv (visible via `ps`) or the logs. Multi-account falls out of the * Keychain's per-item `account` attribute: each account's secret is a distinct * generic-password item under the shared service. * * Writing a secret is deliberately NOT done here — see `account set-secret`, * which delegates entry to the `security` interactive prompt so the value is * never scripted into argv. */ /** Injectable reader: (command, args) => secret on stdout. */ export type SecretRunner = (command: string, args: string[]) => Promise; export interface ResolveOptions { runner?: SecretRunner; env?: Record; /** Override the detected platform (testing / explicit control). */ platform?: NodeJS.Platform; } /** * Resolve one config secret value. Plain strings pass through unchanged, so * existing plaintext configs keep working while new ones can point at the * Keychain or an environment variable. */ export declare function resolveSecret(value: string, opts?: ResolveOptions): Promise; //# sourceMappingURL=secret-resolver.d.ts.map