@centient/secrets 0.9.0 → 0.11.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 +424 -8
- package/dist/audit/hmac-chain.d.ts +117 -0
- package/dist/audit/hmac-chain.d.ts.map +1 -0
- package/dist/audit/hmac-chain.js +811 -0
- package/dist/audit/hmac-chain.js.map +1 -0
- package/dist/audit/ocsf.d.ts +108 -0
- package/dist/audit/ocsf.d.ts.map +1 -0
- package/dist/audit/ocsf.js +204 -0
- package/dist/audit/ocsf.js.map +1 -0
- package/dist/cli/hidden-prompt.d.ts.map +1 -1
- package/dist/cli/hidden-prompt.js +55 -10
- package/dist/cli/hidden-prompt.js.map +1 -1
- package/dist/cli/messages.d.ts +40 -8
- package/dist/cli/messages.d.ts.map +1 -1
- package/dist/cli/messages.js +34 -8
- package/dist/cli/messages.js.map +1 -1
- package/dist/cli/secrets-cli.d.ts.map +1 -1
- package/dist/cli/secrets-cli.js +191 -32
- package/dist/cli/secrets-cli.js.map +1 -1
- package/dist/client.d.ts +26 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +129 -0
- package/dist/client.js.map +1 -0
- package/dist/compatibility.d.ts +199 -0
- package/dist/compatibility.d.ts.map +1 -0
- package/dist/compatibility.js +419 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/crypto/darwin-keychain.d.ts +394 -0
- package/dist/crypto/darwin-keychain.d.ts.map +1 -0
- package/dist/crypto/darwin-keychain.js +793 -0
- package/dist/crypto/darwin-keychain.js.map +1 -0
- package/dist/crypto/vault-common.d.ts +55 -12
- package/dist/crypto/vault-common.d.ts.map +1 -1
- package/dist/crypto/vault-common.js +74 -71
- package/dist/crypto/vault-common.js.map +1 -1
- package/dist/environment/EnvironmentManager.d.ts.map +1 -1
- package/dist/environment/EnvironmentManager.js +5 -10
- package/dist/environment/EnvironmentManager.js.map +1 -1
- package/dist/index.d.ts +37 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -6
- package/dist/index.js.map +1 -1
- package/dist/key-providers/keychain-provider.d.ts +30 -2
- package/dist/key-providers/keychain-provider.d.ts.map +1 -1
- package/dist/key-providers/keychain-provider.js +29 -5
- package/dist/key-providers/keychain-provider.js.map +1 -1
- package/dist/key-providers/onepassword-provider.d.ts +65 -5
- package/dist/key-providers/onepassword-provider.d.ts.map +1 -1
- package/dist/key-providers/onepassword-provider.js +159 -67
- package/dist/key-providers/onepassword-provider.js.map +1 -1
- package/dist/key-providers/op-cli.d.ts +78 -0
- package/dist/key-providers/op-cli.d.ts.map +1 -0
- package/dist/key-providers/op-cli.js +123 -0
- package/dist/key-providers/op-cli.js.map +1 -0
- package/dist/key-providers/passphrase-provider.d.ts +20 -0
- package/dist/key-providers/passphrase-provider.d.ts.map +1 -1
- package/dist/key-providers/passphrase-provider.js +49 -0
- package/dist/key-providers/passphrase-provider.js.map +1 -1
- package/dist/key-providers/probe.d.ts +46 -0
- package/dist/key-providers/probe.d.ts.map +1 -0
- package/dist/key-providers/probe.js +70 -0
- package/dist/key-providers/probe.js.map +1 -0
- package/dist/key-providers/types.d.ts +51 -1
- package/dist/key-providers/types.d.ts.map +1 -1
- package/dist/platform/agent-detect.d.ts +39 -3
- package/dist/platform/agent-detect.d.ts.map +1 -1
- package/dist/platform/agent-detect.js +55 -9
- package/dist/platform/agent-detect.js.map +1 -1
- package/dist/platform/session-context.d.ts +77 -0
- package/dist/platform/session-context.d.ts.map +1 -0
- package/dist/platform/session-context.js +83 -0
- package/dist/platform/session-context.js.map +1 -0
- package/dist/policies/audit-trail.d.ts +25 -0
- package/dist/policies/audit-trail.d.ts.map +1 -0
- package/dist/policies/audit-trail.js +31 -0
- package/dist/policies/audit-trail.js.map +1 -0
- package/dist/secret-state.d.ts +54 -0
- package/dist/secret-state.d.ts.map +1 -0
- package/dist/secret-state.js +2 -0
- package/dist/secret-state.js.map +1 -0
- package/dist/sinks/index.d.ts +9 -0
- package/dist/sinks/index.d.ts.map +1 -0
- package/dist/sinks/index.js +5 -0
- package/dist/sinks/index.js.map +1 -0
- package/dist/sinks/jsonl.d.ts +16 -0
- package/dist/sinks/jsonl.d.ts.map +1 -0
- package/dist/sinks/jsonl.js +51 -0
- package/dist/sinks/jsonl.js.map +1 -0
- package/dist/sinks/otel.d.ts +22 -0
- package/dist/sinks/otel.d.ts.map +1 -0
- package/dist/sinks/otel.js +155 -0
- package/dist/sinks/otel.js.map +1 -0
- package/dist/sinks/queue.d.ts +12 -0
- package/dist/sinks/queue.d.ts.map +1 -0
- package/dist/sinks/queue.js +89 -0
- package/dist/sinks/queue.js.map +1 -0
- package/dist/sinks/syslog.d.ts +17 -0
- package/dist/sinks/syslog.d.ts.map +1 -0
- package/dist/sinks/syslog.js +103 -0
- package/dist/sinks/syslog.js.map +1 -0
- package/dist/sinks/types.d.ts +27 -0
- package/dist/sinks/types.d.ts.map +1 -0
- package/dist/sinks/types.js +18 -0
- package/dist/sinks/types.js.map +1 -0
- package/dist/vault/policy.d.ts +64 -34
- package/dist/vault/policy.d.ts.map +1 -1
- package/dist/vault/policy.js +109 -67
- package/dist/vault/policy.js.map +1 -1
- package/dist/vault/session-vault-errors.d.ts +72 -4
- package/dist/vault/session-vault-errors.d.ts.map +1 -1
- package/dist/vault/session-vault-errors.js +95 -4
- package/dist/vault/session-vault-errors.js.map +1 -1
- package/dist/vault/session-vault.d.ts +145 -2
- package/dist/vault/session-vault.d.ts.map +1 -1
- package/dist/vault/session-vault.js +548 -72
- package/dist/vault/session-vault.js.map +1 -1
- package/dist/vault/sidecar.d.ts +9 -0
- package/dist/vault/sidecar.d.ts.map +1 -1
- package/dist/vault/sidecar.js +72 -3
- package/dist/vault/sidecar.js.map +1 -1
- package/dist/vault/types.d.ts +58 -10
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/dist/vault/vault-env.d.ts +43 -50
- package/dist/vault/vault-env.d.ts.map +1 -1
- package/dist/vault/vault-env.js +141 -62
- package/dist/vault/vault-env.js.map +1 -1
- package/dist/vault/vault-gpg.d.ts +6 -1
- package/dist/vault/vault-gpg.d.ts.map +1 -1
- package/dist/vault/vault-gpg.js +10 -8
- package/dist/vault/vault-gpg.js.map +1 -1
- package/dist/vault/vault-libsecret.d.ts +6 -1
- package/dist/vault/vault-libsecret.d.ts.map +1 -1
- package/dist/vault/vault-libsecret.js +16 -14
- package/dist/vault/vault-libsecret.js.map +1 -1
- package/dist/vault/vault-onepassword.d.ts +119 -0
- package/dist/vault/vault-onepassword.d.ts.map +1 -0
- package/dist/vault/vault-onepassword.js +271 -0
- package/dist/vault/vault-onepassword.js.map +1 -0
- package/dist/vault/vault-utils.d.ts +37 -3
- package/dist/vault/vault-utils.d.ts.map +1 -1
- package/dist/vault/vault-utils.js +65 -3
- package/dist/vault/vault-utils.js.map +1 -1
- package/dist/vault/vault-windows.d.ts +7 -2
- package/dist/vault/vault-windows.d.ts.map +1 -1
- package/dist/vault/vault-windows.js +21 -16
- package/dist/vault/vault-windows.js.map +1 -1
- package/dist/vault/vault.d.ts +120 -9
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +222 -139
- package/dist/vault/vault.js.map +1 -1
- package/package.json +8 -2
package/dist/vault/vault-env.js
CHANGED
|
@@ -1,90 +1,169 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auth Vault — Environment Variable Fallback Backend
|
|
3
3
|
*
|
|
4
|
-
* Last-resort
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Implements the VaultBackend interface:
|
|
9
|
-
* store(key, value): boolean — always returns false (env vars are read-only)
|
|
10
|
-
* retrieve(key): string|null — returns ENGRAM_API_KEY for 'auth-token', null otherwise
|
|
11
|
-
* delete(key): boolean — always returns true (no-op; nothing to delete)
|
|
12
|
-
* static detect(): boolean — always returns true (last-resort fallback)
|
|
4
|
+
* Last-resort, read-only backend for CI and headless environments where no
|
|
5
|
+
* secure credential store is available. Every valid logical key has exactly
|
|
6
|
+
* one shell-safe environment-variable name; no credential values are written
|
|
7
|
+
* to disk.
|
|
13
8
|
*/
|
|
14
9
|
import { AUTH_MESSAGES } from "../cli/messages.js";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
import { assertValidKey, assertValidKeyPrefix, isValidKey, } from "./vault-utils.js";
|
|
11
|
+
const AUTH_TOKEN_KEY = "auth-token";
|
|
12
|
+
const AUTH_TOKEN_ENV_NAME = "ENGRAM_API_KEY";
|
|
13
|
+
/** Prefix reserved for non-auth-token credential values in {@link EnvVault}. */
|
|
14
|
+
export const ENV_VAULT_PREFIX = "CENTIENT_SECRET_";
|
|
15
|
+
/**
|
|
16
|
+
* Encode a validated key into an uppercase, shell-safe, reversible suffix.
|
|
17
|
+
*
|
|
18
|
+
* `_` is forbidden by the credential-key grammar, so the ASCII escapes are
|
|
19
|
+
* unambiguous even when separators are adjacent: `-` becomes `_2D` and `.`
|
|
20
|
+
* becomes `_2E`.
|
|
21
|
+
*/
|
|
22
|
+
function encodeCredentialKey(key) {
|
|
23
|
+
let encoded = "";
|
|
24
|
+
for (const character of key) {
|
|
25
|
+
if (character === "-")
|
|
26
|
+
encoded += "_2D";
|
|
27
|
+
else if (character === ".")
|
|
28
|
+
encoded += "_2E";
|
|
29
|
+
else
|
|
30
|
+
encoded += character.toUpperCase();
|
|
31
|
+
}
|
|
32
|
+
return encoded;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Return the one environment-variable name assigned to a credential key.
|
|
36
|
+
*
|
|
37
|
+
* The historical `auth-token` mapping remains `ENGRAM_API_KEY`. Every other
|
|
38
|
+
* valid key uses {@link ENV_VAULT_PREFIX} plus the reversible encoding above.
|
|
39
|
+
*
|
|
40
|
+
* @throws {InvalidCredentialKeyError} when `key` violates the package-wide
|
|
41
|
+
* credential-key grammar.
|
|
42
|
+
*/
|
|
43
|
+
export function credentialKeyToEnvName(key) {
|
|
44
|
+
assertValidKey(key, "read");
|
|
45
|
+
if (key === AUTH_TOKEN_KEY)
|
|
46
|
+
return AUTH_TOKEN_ENV_NAME;
|
|
47
|
+
return `${ENV_VAULT_PREFIX}${encodeCredentialKey(key)}`;
|
|
48
|
+
}
|
|
49
|
+
/** Decode only canonical generic names. Malformed or aliased names are ignored. */
|
|
50
|
+
function envNameToCredentialKey(envName) {
|
|
51
|
+
if (!envName.startsWith(ENV_VAULT_PREFIX))
|
|
52
|
+
return null;
|
|
53
|
+
const encoded = envName.slice(ENV_VAULT_PREFIX.length);
|
|
54
|
+
let key = "";
|
|
55
|
+
for (let index = 0; index < encoded.length; index += 1) {
|
|
56
|
+
const character = encoded[index];
|
|
57
|
+
if (/^[A-Z0-9]$/.test(character)) {
|
|
58
|
+
key += character.toLowerCase();
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (character !== "_")
|
|
62
|
+
return null;
|
|
63
|
+
const escape = encoded.slice(index + 1, index + 3);
|
|
64
|
+
if (escape === "2D")
|
|
65
|
+
key += "-";
|
|
66
|
+
else if (escape === "2E")
|
|
67
|
+
key += ".";
|
|
68
|
+
else
|
|
69
|
+
return null;
|
|
70
|
+
index += 2;
|
|
71
|
+
}
|
|
72
|
+
if (!isValidKey(key))
|
|
73
|
+
return null;
|
|
74
|
+
// This also excludes a generic alias for the legacy auth-token mapping.
|
|
75
|
+
return credentialKeyToEnvName(key) === envName ? key : null;
|
|
76
|
+
}
|
|
18
77
|
/**
|
|
19
78
|
* Environment-variable-only vault backend.
|
|
20
79
|
*
|
|
21
80
|
* This is the last-resort fallback when no OS-level secure credential store is
|
|
22
|
-
* available. It
|
|
23
|
-
*
|
|
81
|
+
* available. It is intentionally read-only and offers no encryption or
|
|
82
|
+
* process-isolation boundary.
|
|
24
83
|
*/
|
|
25
84
|
export class EnvVault {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
85
|
+
name = "env";
|
|
86
|
+
env;
|
|
87
|
+
platform;
|
|
88
|
+
constructor(options = {}) {
|
|
89
|
+
this.env = options.env ?? process.env;
|
|
90
|
+
this.platform = options.platform ?? process.platform;
|
|
91
|
+
}
|
|
92
|
+
/** Always available as the cascade's terminal fallback. */
|
|
30
93
|
static detect() {
|
|
31
94
|
return true;
|
|
32
95
|
}
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
96
|
+
/** Validate and look up one credential without trimming or copying it. */
|
|
97
|
+
lookup(key, operation) {
|
|
98
|
+
assertValidKey(key, operation);
|
|
99
|
+
const envName = credentialKeyToEnvName(key);
|
|
100
|
+
const value = this.env[envName];
|
|
101
|
+
if (value === undefined)
|
|
102
|
+
return { kind: "absent", envName };
|
|
103
|
+
if (value.length === 0)
|
|
104
|
+
return { kind: "empty", envName };
|
|
105
|
+
return { kind: "found", envName, value };
|
|
106
|
+
}
|
|
107
|
+
/** Environment variables cannot be mutated persistently from this process. */
|
|
108
|
+
store(key, _value) {
|
|
109
|
+
assertValidKey(key, "write");
|
|
43
110
|
process.stderr.write(AUTH_MESSAGES.warning.envVaultNoStorage + "\n");
|
|
44
111
|
return false;
|
|
45
112
|
}
|
|
46
|
-
/**
|
|
47
|
-
* Retrieve a credential from the environment.
|
|
48
|
-
*
|
|
49
|
-
* - `'auth-token'` -> `process.env["ENGRAM_API_KEY"] ?? null`
|
|
50
|
-
* - `'refresh-token'` -> `null` (refresh tokens are not available in env mode)
|
|
51
|
-
* - any other key -> `null`
|
|
52
|
-
*
|
|
53
|
-
* @param key - Logical credential key
|
|
54
|
-
* @returns The credential value, or null if unavailable
|
|
55
|
-
*/
|
|
113
|
+
/** Return the configured value, or `null` when its canonical slot is absent/empty. */
|
|
56
114
|
retrieve(key) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
return null;
|
|
115
|
+
const lookup = this.lookup(key, "read");
|
|
116
|
+
return lookup.kind === "found" ? lookup.value : null;
|
|
61
117
|
}
|
|
62
118
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* No-op: there is nothing stored in this backend to delete.
|
|
119
|
+
* Probe one credential without returning its value.
|
|
66
120
|
*
|
|
67
|
-
*
|
|
121
|
+
* An unset canonical variable is confirmed absent. A defined-but-empty
|
|
122
|
+
* variable is a visible configuration failure, never a found credential.
|
|
68
123
|
*/
|
|
69
|
-
|
|
124
|
+
probe(key) {
|
|
125
|
+
const lookup = this.lookup(key, "read");
|
|
126
|
+
if (lookup.kind === "found")
|
|
127
|
+
return { kind: "found" };
|
|
128
|
+
if (lookup.kind === "absent")
|
|
129
|
+
return { kind: "absent" };
|
|
130
|
+
return {
|
|
131
|
+
kind: "failed",
|
|
132
|
+
detail: `environment variable "${lookup.envName}" is set but empty`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/** No-op deletion for the read-only fallback, after contract validation. */
|
|
136
|
+
delete(key) {
|
|
137
|
+
assertValidKey(key, "delete");
|
|
70
138
|
return true;
|
|
71
139
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Enumerate logical keys served by this backend.
|
|
74
|
-
*
|
|
75
|
-
* EnvVault only surfaces a single hardcoded mapping (`auth-token` ->
|
|
76
|
-
* `ENGRAM_API_KEY`), so enumeration returns `["auth-token"]` when the
|
|
77
|
-
* underlying env var is set, otherwise `[]`.
|
|
78
|
-
*
|
|
79
|
-
* There is no user-defined naming convention over `process.env`, so
|
|
80
|
-
* arbitrary prefixes that don't match `auth-token` always produce `[]`.
|
|
81
|
-
*/
|
|
140
|
+
/** Enumerate defined canonical variable names without reading unrelated values. */
|
|
82
141
|
async listKeys(prefix) {
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
142
|
+
if (prefix !== undefined)
|
|
143
|
+
assertValidKeyPrefix(prefix, "enumerate");
|
|
144
|
+
const keys = new Set();
|
|
145
|
+
for (const observedEnvName of Object.keys(this.env)) {
|
|
146
|
+
// Native Windows environment lookup is case-insensitive but preserves an
|
|
147
|
+
// existing variable's spelling during enumeration. Normalize only the
|
|
148
|
+
// comparison name so retrieve() and listKeys() answer for the same store;
|
|
149
|
+
// POSIX retains exact-case canonical-name enforcement.
|
|
150
|
+
const envName = this.platform === "win32" ? observedEnvName.toUpperCase() : observedEnvName;
|
|
151
|
+
if (envName === AUTH_TOKEN_ENV_NAME) {
|
|
152
|
+
if (this.env[observedEnvName] !== undefined)
|
|
153
|
+
keys.add(AUTH_TOKEN_KEY);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (!envName.startsWith(ENV_VAULT_PREFIX))
|
|
157
|
+
continue;
|
|
158
|
+
if (this.env[observedEnvName] === undefined)
|
|
159
|
+
continue;
|
|
160
|
+
const key = envNameToCredentialKey(envName);
|
|
161
|
+
if (key !== null)
|
|
162
|
+
keys.add(key);
|
|
163
|
+
}
|
|
164
|
+
return [...keys]
|
|
165
|
+
.filter((key) => prefix === undefined || key.startsWith(prefix))
|
|
166
|
+
.sort();
|
|
88
167
|
}
|
|
89
168
|
}
|
|
90
169
|
//# sourceMappingURL=vault-env.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-env.js","sourceRoot":"","sources":["../../src/vault/vault-env.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vault-env.js","sourceRoot":"","sources":["../../src/vault/vault-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,11 @@
|
|
|
5
5
|
* ~/.centient/auth/credentials-<key>.gpg. Falls back gracefully when GPG is
|
|
6
6
|
* not installed or no keys are configured.
|
|
7
7
|
*
|
|
8
|
-
* Error handling:
|
|
8
|
+
* Error handling: a storage failure returns false/null — this backend never
|
|
9
|
+
* throws for that. A credential key that violates the shared key grammar is
|
|
10
|
+
* NOT a storage failure and throws `InvalidCredentialKeyError` (#168): such a
|
|
11
|
+
* key is unaddressable here, and reporting it as a failed write or an absent
|
|
12
|
+
* credential would be indistinguishable from the ordinary miss.
|
|
9
13
|
*/
|
|
10
14
|
import type { VaultBackend } from "./types.js";
|
|
11
15
|
/**
|
|
@@ -14,6 +18,7 @@ import type { VaultBackend } from "./types.js";
|
|
|
14
18
|
* Use `GpgVault.detect()` before instantiating to verify availability.
|
|
15
19
|
*/
|
|
16
20
|
export declare class GpgVault implements VaultBackend {
|
|
21
|
+
readonly name = "gpg";
|
|
17
22
|
/**
|
|
18
23
|
* Returns true if GPG is installed and at least one public key is available.
|
|
19
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-gpg.d.ts","sourceRoot":"","sources":["../../src/vault/vault-gpg.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vault-gpg.d.ts","sourceRoot":"","sources":["../../src/vault/vault-gpg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4D/C;;;;GAIG;AACH,qBAAa,QAAS,YAAW,YAAY;IAC3C,QAAQ,CAAC,IAAI,SAAS;IAEtB;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,OAAO;IASxB;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAuB1C;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBpC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAmB5B;;;;;;;OAOG;IACG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CA0BnD"}
|
package/dist/vault/vault-gpg.js
CHANGED
|
@@ -5,13 +5,17 @@
|
|
|
5
5
|
* ~/.centient/auth/credentials-<key>.gpg. Falls back gracefully when GPG is
|
|
6
6
|
* not installed or no keys are configured.
|
|
7
7
|
*
|
|
8
|
-
* Error handling:
|
|
8
|
+
* Error handling: a storage failure returns false/null — this backend never
|
|
9
|
+
* throws for that. A credential key that violates the shared key grammar is
|
|
10
|
+
* NOT a storage failure and throws `InvalidCredentialKeyError` (#168): such a
|
|
11
|
+
* key is unaddressable here, and reporting it as a failed write or an absent
|
|
12
|
+
* credential would be indistinguishable from the ordinary miss.
|
|
9
13
|
*/
|
|
10
14
|
import { execFileSync } from "child_process";
|
|
11
15
|
import { mkdirSync, readdirSync, unlinkSync } from "fs";
|
|
12
16
|
import { homedir } from "os";
|
|
13
17
|
import { join } from "path";
|
|
14
|
-
import {
|
|
18
|
+
import { assertValidKey } from "./vault-utils.js";
|
|
15
19
|
// =============================================================================
|
|
16
20
|
// Constants
|
|
17
21
|
// =============================================================================
|
|
@@ -66,6 +70,7 @@ function getFirstGpgKeyId() {
|
|
|
66
70
|
* Use `GpgVault.detect()` before instantiating to verify availability.
|
|
67
71
|
*/
|
|
68
72
|
export class GpgVault {
|
|
73
|
+
name = "gpg";
|
|
69
74
|
/**
|
|
70
75
|
* Returns true if GPG is installed and at least one public key is available.
|
|
71
76
|
*/
|
|
@@ -84,8 +89,7 @@ export class GpgVault {
|
|
|
84
89
|
* @returns true on success, false if GPG is unavailable or encryption fails
|
|
85
90
|
*/
|
|
86
91
|
store(key, value) {
|
|
87
|
-
|
|
88
|
-
return false;
|
|
92
|
+
assertValidKey(key, "write");
|
|
89
93
|
try {
|
|
90
94
|
const keyId = getFirstGpgKeyId();
|
|
91
95
|
if (keyId === null)
|
|
@@ -108,8 +112,7 @@ export class GpgVault {
|
|
|
108
112
|
* @returns the plaintext credential, or null if not found / decryption fails
|
|
109
113
|
*/
|
|
110
114
|
retrieve(key) {
|
|
111
|
-
|
|
112
|
-
return null;
|
|
115
|
+
assertValidKey(key, "read");
|
|
113
116
|
try {
|
|
114
117
|
const filePath = credentialPath(key);
|
|
115
118
|
const result = execFileSync("gpg", ["--batch", "--quiet", "-d", filePath], {
|
|
@@ -128,8 +131,7 @@ export class GpgVault {
|
|
|
128
131
|
* @returns true if the file was deleted or did not exist, false on unexpected error
|
|
129
132
|
*/
|
|
130
133
|
delete(key) {
|
|
131
|
-
|
|
132
|
-
return false;
|
|
134
|
+
assertValidKey(key, "delete");
|
|
133
135
|
try {
|
|
134
136
|
unlinkSync(credentialPath(key));
|
|
135
137
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-gpg.js","sourceRoot":"","sources":["../../src/vault/vault-gpg.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vault-gpg.js","sourceRoot":"","sources":["../../src/vault/vault-gpg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAEtD,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa;IACpB,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CACzB,KAAK,EACL,CAAC,aAAa,EAAE,eAAe,CAAC,EAChC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACtD,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,6EAA6E;gBAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,WAAW,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;oBAAE,SAAS;gBAC5E,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjD,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IACV,IAAI,GAAG,KAAK,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAW,EAAE,KAAa;QAC9B,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;YACjC,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAEjC,aAAa,EAAE,CAAC;YAEhB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACpC,YAAY,CACV,KAAK,EACL,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EACtD;gBACE,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CACF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,GAAW;QAClB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,YAAY,CACzB,KAAK,EACL,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,EACtC;gBACE,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CACF,CAAC;YACF,OAAO,MAAM,IAAI,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAW;QAChB,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qDAAqD;YACrD,IACE,GAAG,KAAK,IAAI;gBACZ,OAAO,GAAG,KAAK,QAAQ;gBACvB,MAAM,IAAI,GAAG;gBACZ,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAChD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAe;QAC5B,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IACE,GAAG,KAAK,IAAI;gBACZ,OAAO,GAAG,KAAK,QAAQ;gBACvB,MAAM,IAAI,GAAG;gBACZ,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAChD,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,SAAS;YACvD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
* stored under a fixed service attribute (`centient`) and a per-key
|
|
7
7
|
* attribute (`key`).
|
|
8
8
|
*
|
|
9
|
-
* Error handling:
|
|
9
|
+
* Error handling: a storage failure returns false/null — this backend never
|
|
10
|
+
* throws for that. A credential key that violates the shared key grammar is
|
|
11
|
+
* NOT a storage failure and throws `InvalidCredentialKeyError` (#168): such a
|
|
12
|
+
* key is unaddressable here, and reporting it as a failed write or an absent
|
|
13
|
+
* credential would be indistinguishable from the ordinary miss.
|
|
10
14
|
*/
|
|
11
15
|
import type { VaultBackend } from "./types.js";
|
|
12
16
|
/**
|
|
@@ -20,6 +24,7 @@ import type { VaultBackend } from "./types.js";
|
|
|
20
24
|
* }
|
|
21
25
|
*/
|
|
22
26
|
export declare class LibsecretVault implements VaultBackend {
|
|
27
|
+
readonly name = "libsecret";
|
|
23
28
|
/**
|
|
24
29
|
* Returns true if `secret-tool` is available on this system.
|
|
25
30
|
* Uses `which secret-tool` — returns false if not found or command fails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-libsecret.d.ts","sourceRoot":"","sources":["../../src/vault/vault-libsecret.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vault-libsecret.d.ts","sourceRoot":"","sources":["../../src/vault/vault-libsecret.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsB/C;;;;;;;;;GASG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,eAAe;IAE5B;;;OAGG;IACH,MAAM,CAAC,MAAM,IAAI,OAAO;IAYxB;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAkB1C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBpC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAoB5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAelD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;OAIG;YACW,eAAe;IAyD7B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;CA4B9B"}
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
* stored under a fixed service attribute (`centient`) and a per-key
|
|
7
7
|
* attribute (`key`).
|
|
8
8
|
*
|
|
9
|
-
* Error handling:
|
|
9
|
+
* Error handling: a storage failure returns false/null — this backend never
|
|
10
|
+
* throws for that. A credential key that violates the shared key grammar is
|
|
11
|
+
* NOT a storage failure and throws `InvalidCredentialKeyError` (#168): such a
|
|
12
|
+
* key is unaddressable here, and reporting it as a failed write or an absent
|
|
13
|
+
* credential would be indistinguishable from the ordinary miss.
|
|
10
14
|
*/
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
15
|
+
import { execFileSync } from "child_process";
|
|
16
|
+
import { assertValidKey } from "./vault-utils.js";
|
|
13
17
|
// =============================================================================
|
|
14
18
|
// Constants
|
|
15
19
|
// =============================================================================
|
|
@@ -36,13 +40,14 @@ let dbusFallbackWarned = false;
|
|
|
36
40
|
* }
|
|
37
41
|
*/
|
|
38
42
|
export class LibsecretVault {
|
|
43
|
+
name = "libsecret";
|
|
39
44
|
/**
|
|
40
45
|
* Returns true if `secret-tool` is available on this system.
|
|
41
46
|
* Uses `which secret-tool` — returns false if not found or command fails.
|
|
42
47
|
*/
|
|
43
48
|
static detect() {
|
|
44
49
|
try {
|
|
45
|
-
|
|
50
|
+
execFileSync("which", ["secret-tool"], {
|
|
46
51
|
encoding: "utf8",
|
|
47
52
|
stdio: ["pipe", "pipe", "pipe"],
|
|
48
53
|
});
|
|
@@ -60,10 +65,9 @@ export class LibsecretVault {
|
|
|
60
65
|
* @returns true on success, false if the write fails
|
|
61
66
|
*/
|
|
62
67
|
store(key, value) {
|
|
63
|
-
|
|
64
|
-
return false;
|
|
68
|
+
assertValidKey(key, "write");
|
|
65
69
|
try {
|
|
66
|
-
|
|
70
|
+
execFileSync("secret-tool", ["store", "--label", LABEL, "service", SERVICE_ATTR, "key", key], {
|
|
67
71
|
encoding: "utf8",
|
|
68
72
|
stdio: ["pipe", "pipe", "pipe"],
|
|
69
73
|
input: value,
|
|
@@ -81,10 +85,9 @@ export class LibsecretVault {
|
|
|
81
85
|
* @returns The stored value, or null if not found / lookup fails
|
|
82
86
|
*/
|
|
83
87
|
retrieve(key) {
|
|
84
|
-
|
|
85
|
-
return null;
|
|
88
|
+
assertValidKey(key, "read");
|
|
86
89
|
try {
|
|
87
|
-
const result =
|
|
90
|
+
const result = execFileSync("secret-tool", ["lookup", "service", SERVICE_ATTR, "key", key], {
|
|
88
91
|
encoding: "utf8",
|
|
89
92
|
stdio: ["pipe", "pipe", "pipe"],
|
|
90
93
|
});
|
|
@@ -102,10 +105,9 @@ export class LibsecretVault {
|
|
|
102
105
|
* @returns true on success (including "already deleted"), false on unexpected error
|
|
103
106
|
*/
|
|
104
107
|
delete(key) {
|
|
105
|
-
|
|
106
|
-
return false;
|
|
108
|
+
assertValidKey(key, "delete");
|
|
107
109
|
try {
|
|
108
|
-
|
|
110
|
+
execFileSync("secret-tool", ["clear", "service", SERVICE_ATTR, "key", key], {
|
|
109
111
|
encoding: "utf8",
|
|
110
112
|
stdio: ["pipe", "pipe", "pipe"],
|
|
111
113
|
});
|
|
@@ -238,7 +240,7 @@ export class LibsecretVault {
|
|
|
238
240
|
listKeysViaSecretTool(prefix) {
|
|
239
241
|
let output;
|
|
240
242
|
try {
|
|
241
|
-
output =
|
|
243
|
+
output = execFileSync("secret-tool", ["search", "--all", "service", SERVICE_ATTR], {
|
|
242
244
|
encoding: "utf8",
|
|
243
245
|
stdio: ["pipe", "pipe", "pipe"],
|
|
244
246
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-libsecret.js","sourceRoot":"","sources":["../../src/vault/vault-libsecret.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vault-libsecret.js","sourceRoot":"","sources":["../../src/vault/vault-libsecret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault backend — 1Password credential storage (ADR-004).
|
|
3
|
+
*
|
|
4
|
+
* Stores credential **values** in a dedicated 1Password vault via the `op` CLI.
|
|
5
|
+
* This is a different layer from ADR-001's `OnePasswordProvider`, which stores
|
|
6
|
+
* the vault *encryption key*: an operator may keep the key in the Keychain and
|
|
7
|
+
* the credentials in 1Password, or the reverse. The two carry separate config
|
|
8
|
+
* blocks for exactly that reason (ADR-004 §1).
|
|
9
|
+
*
|
|
10
|
+
* ## Two properties this backend exists to hold
|
|
11
|
+
*
|
|
12
|
+
* 1. **Never auto-selected.** `op` being installed must not silently route
|
|
13
|
+
* credentials into someone's personal vault — surprising secret placement is
|
|
14
|
+
* a security defect (P15/P2). Selection is explicit opt-in, and
|
|
15
|
+
* {@link OnePasswordVault.detect} refuses without it.
|
|
16
|
+
* 2. **Secret values never touch argv.** Writes build the item JSON in-process
|
|
17
|
+
* and pipe it to `op item create -`, so nothing readable in `ps` ever carries
|
|
18
|
+
* a secret. This is the pattern issue #102 retrofitted to the key provider,
|
|
19
|
+
* which now writes through the same `op item create -` stdin seam. Its
|
|
20
|
+
* replace ordering differs — create first, delete the superseded item last —
|
|
21
|
+
* because losing the vault *master key* between two calls would be
|
|
22
|
+
* unrecoverable, where a credential value can be re-fetched from its source.
|
|
23
|
+
*/
|
|
24
|
+
import type { VaultBackend } from "./types.js";
|
|
25
|
+
import type { OnePasswordBackendConfig } from "../key-providers/types.js";
|
|
26
|
+
/** Default tag applied to every item this backend writes. */
|
|
27
|
+
export declare const DEFAULT_OP_TAG = "centient";
|
|
28
|
+
/**
|
|
29
|
+
* List-cache TTL, mirroring `KEYCHAIN_LIST_CACHE_TTL_MS` (ADR-004 §8).
|
|
30
|
+
*
|
|
31
|
+
* Only key **names** are cached, never values: a cached value would both extend
|
|
32
|
+
* how long plaintext sits in the heap and serve a rotated or revoked credential
|
|
33
|
+
* until expiry. 1Password stays the source of truth for values.
|
|
34
|
+
*/
|
|
35
|
+
export declare const OP_LIST_CACHE_TTL_MS = 5000;
|
|
36
|
+
/** Options for {@link OnePasswordVault}. */
|
|
37
|
+
export interface OnePasswordVaultOptions extends OnePasswordBackendConfig {
|
|
38
|
+
/**
|
|
39
|
+
* Injectable clock for the list cache, so tests can drive expiry without
|
|
40
|
+
* sleeping. Defaults to `Date.now`.
|
|
41
|
+
*/
|
|
42
|
+
now?: () => number;
|
|
43
|
+
}
|
|
44
|
+
export declare class OnePasswordVault implements VaultBackend {
|
|
45
|
+
readonly name = "1password";
|
|
46
|
+
private readonly vault;
|
|
47
|
+
private readonly tag;
|
|
48
|
+
private readonly now;
|
|
49
|
+
private listCache;
|
|
50
|
+
private warned;
|
|
51
|
+
/**
|
|
52
|
+
* @param config - must carry a `vault`; there is deliberately no default
|
|
53
|
+
* (ADR-004 §1 — guessing a vault name risks writing credentials somewhere
|
|
54
|
+
* the operator did not intend).
|
|
55
|
+
* @throws {Error} when `vault` is missing or blank.
|
|
56
|
+
*/
|
|
57
|
+
constructor(config: OnePasswordVaultOptions);
|
|
58
|
+
/**
|
|
59
|
+
* Whether this backend may be used.
|
|
60
|
+
*
|
|
61
|
+
* Requires **both** an explicit opt-in and a usable `op`. The opt-in half is
|
|
62
|
+
* what keeps 1Password out of the auto-cascade: without it this returns false
|
|
63
|
+
* even on a machine where `op` is installed and signed in.
|
|
64
|
+
*
|
|
65
|
+
* @param optedIn - true when config or env explicitly selected this backend.
|
|
66
|
+
*/
|
|
67
|
+
static detect(optedIn: boolean): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Write a credential. The value travels on stdin and never appears in argv.
|
|
70
|
+
*
|
|
71
|
+
* Update is modeled as replace (delete-then-create) so create and update share
|
|
72
|
+
* one argv-safe path rather than needing a separate `op item edit` form.
|
|
73
|
+
*/
|
|
74
|
+
store(key: string, value: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Read a credential value. Returns null when absent or on failure.
|
|
77
|
+
*
|
|
78
|
+
* @throws {InvalidCredentialKeyError} for a key this backend could never
|
|
79
|
+
* have written — building an `op://` reference from it is exactly the
|
|
80
|
+
* misparse the key grammar exists to prevent, and `null` would report the
|
|
81
|
+
* impossible key as a merely absent one.
|
|
82
|
+
*/
|
|
83
|
+
retrieve(key: string): string | null;
|
|
84
|
+
/**
|
|
85
|
+
* Delete a credential. Idempotent — a missing item is success.
|
|
86
|
+
*
|
|
87
|
+
* @throws {InvalidCredentialKeyError} — deliberately NOT folded into the
|
|
88
|
+
* idempotent-success path. "Missing" and "impossible" are different
|
|
89
|
+
* answers: such a key was never storable here, so reporting success would
|
|
90
|
+
* assert something about a key this backend does not accept.
|
|
91
|
+
*/
|
|
92
|
+
delete(key: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Enumerate credential keys, optionally prefix-filtered.
|
|
95
|
+
*
|
|
96
|
+
* Per the {@link VaultBackend} contract this returns `[]` for a genuinely
|
|
97
|
+
* empty vault but **throws** on a transient failure, so a caller can tell
|
|
98
|
+
* "nothing stored" from "1Password did not answer" and retry the latter.
|
|
99
|
+
* The `--tags` filter keeps unrelated items in a shared vault out of the
|
|
100
|
+
* result; no secret values appear in `op item list` output.
|
|
101
|
+
*/
|
|
102
|
+
listKeys(prefix?: string): Promise<string[]>;
|
|
103
|
+
private fetchKeys;
|
|
104
|
+
private deleteItem;
|
|
105
|
+
private readListCache;
|
|
106
|
+
private invalidateListCache;
|
|
107
|
+
/**
|
|
108
|
+
* Surface an unexpected `op` failure once per instance (ADR-004 §7, the
|
|
109
|
+
* libsecret lesson from #121).
|
|
110
|
+
*
|
|
111
|
+
* A not-found is normal and stays quiet. Anything else means we are
|
|
112
|
+
* authenticated but the call still failed — a misconfiguration the operator
|
|
113
|
+
* needs to see, since the non-throwing backend contract would otherwise
|
|
114
|
+
* swallow it entirely. Once per instance keeps a hot loop from flooding
|
|
115
|
+
* stderr while still making the first occurrence visible.
|
|
116
|
+
*/
|
|
117
|
+
private warnOnce;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=vault-onepassword.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-onepassword.d.ts","sourceRoot":"","sources":["../../src/vault/vault-onepassword.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAa1E,6DAA6D;AAC7D,eAAO,MAAM,cAAc,aAAa,CAAC;AAKzC;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAM1C,4CAA4C;AAC5C,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAMD,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;OAKG;gBACS,MAAM,EAAE,uBAAuB;IAa3C;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAKxC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IA2B1C;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAepC;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAa5B;;;;;;;;OAQG;IACG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBlD,OAAO,CAAC,SAAS;IAsDjB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,mBAAmB;IAI3B;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ;CAWjB"}
|