@centient/secrets 0.10.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 +355 -7
- 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/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/index.d.ts +19 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- 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/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.d.ts +43 -0
- package/dist/vault/session-vault.d.ts.map +1 -1
- package/dist/vault/session-vault.js +323 -36
- 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 +16 -9
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/vault-env.d.ts +41 -62
- package/dist/vault/vault-env.d.ts.map +1 -1
- package/dist/vault/vault-env.js +139 -75
- package/dist/vault/vault-env.js.map +1 -1
- package/dist/vault/vault-gpg.d.ts +1 -0
- package/dist/vault/vault-gpg.d.ts.map +1 -1
- package/dist/vault/vault-gpg.js +1 -0
- package/dist/vault/vault-gpg.js.map +1 -1
- package/dist/vault/vault-libsecret.d.ts +1 -0
- package/dist/vault/vault-libsecret.d.ts.map +1 -1
- package/dist/vault/vault-libsecret.js +7 -6
- package/dist/vault/vault-libsecret.js.map +1 -1
- package/dist/vault/vault-onepassword.d.ts +1 -0
- package/dist/vault/vault-onepassword.d.ts.map +1 -1
- package/dist/vault/vault-onepassword.js +1 -0
- package/dist/vault/vault-onepassword.js.map +1 -1
- package/dist/vault/vault-utils.d.ts +7 -6
- package/dist/vault/vault-utils.d.ts.map +1 -1
- package/dist/vault/vault-utils.js +8 -7
- package/dist/vault/vault-utils.js.map +1 -1
- package/dist/vault/vault-windows.d.ts +2 -1
- package/dist/vault/vault-windows.d.ts.map +1 -1
- package/dist/vault/vault-windows.js +12 -8
- package/dist/vault/vault-windows.js.map +1 -1
- package/dist/vault/vault.d.ts +6 -7
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +37 -193
- package/dist/vault/vault.js.map +1 -1
- package/package.json +8 -2
package/dist/vault/sidecar.js
CHANGED
|
@@ -6,13 +6,45 @@
|
|
|
6
6
|
* sees a lower version triggers rollback detection. Corrupt vs missing is
|
|
7
7
|
* distinguished so callers can report meaningfully (L5).
|
|
8
8
|
*/
|
|
9
|
-
import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync, } from "node:fs";
|
|
9
|
+
import { closeSync, existsSync, linkSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
10
10
|
import { dirname } from "node:path";
|
|
11
11
|
import { randomBytes } from "node:crypto";
|
|
12
12
|
/** File mode for vault and sidecar files (POSIX). */
|
|
13
13
|
export const VAULT_FILE_MODE = 0o600;
|
|
14
14
|
/** Directory mode for the vault/sidecar parent directory (POSIX). */
|
|
15
15
|
export const VAULT_DIR_MODE = 0o700;
|
|
16
|
+
function removeTempOrWarn(path) {
|
|
17
|
+
try {
|
|
18
|
+
unlinkSync(path);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
if (err.code === "ENOENT")
|
|
22
|
+
return;
|
|
23
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
24
|
+
process.stderr.write(`[secrets] WARNING: could not remove sidecar temp file ${path}: ${detail}.\n`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Write and close a new temp file, cleaning only after exclusive ownership. */
|
|
28
|
+
function writeExclusiveTemp(path, contents) {
|
|
29
|
+
const fd = openSync(path, "wx", VAULT_FILE_MODE);
|
|
30
|
+
let closed = false;
|
|
31
|
+
try {
|
|
32
|
+
writeFileSync(fd, contents);
|
|
33
|
+
closeSync(fd);
|
|
34
|
+
closed = true;
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
if (!closed) {
|
|
38
|
+
try {
|
|
39
|
+
closeSync(fd);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Preserve the write/first-close failure.
|
|
43
|
+
}
|
|
44
|
+
removeTempOrWarn(path);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
16
48
|
/**
|
|
17
49
|
* Read sidecar content. Returns null in two distinguishable cases:
|
|
18
50
|
* - file does not exist (silent — caller drives the missing-sidecar path),
|
|
@@ -56,8 +88,45 @@ export function readSidecar(path) {
|
|
|
56
88
|
export function writeSidecar(path, content) {
|
|
57
89
|
mkdirSync(dirname(path), { recursive: true, mode: VAULT_DIR_MODE });
|
|
58
90
|
const tmpPath = `${path}.${randomBytes(8).toString("hex")}.tmp`;
|
|
59
|
-
|
|
60
|
-
|
|
91
|
+
let tempCreated = false;
|
|
92
|
+
let renamed = false;
|
|
93
|
+
try {
|
|
94
|
+
writeExclusiveTemp(tmpPath, JSON.stringify(content));
|
|
95
|
+
tempCreated = true;
|
|
96
|
+
renameSync(tmpPath, path);
|
|
97
|
+
renamed = true;
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
// After a successful rename the temp pathname is no longer ours: another
|
|
101
|
+
// process could recreate that random name before a redundant unlink. Only
|
|
102
|
+
// clean a temp that this call created and failed to rename.
|
|
103
|
+
if (tempCreated && !renamed)
|
|
104
|
+
removeTempOrWarn(tmpPath);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Publish an initial sidecar without ever replacing an existing destination.
|
|
109
|
+
*
|
|
110
|
+
* A hard link is the portable Node filesystem primitive that combines an
|
|
111
|
+
* already-complete temp file with EEXIST-preserving publication. The temp and
|
|
112
|
+
* destination are in the same directory, so they necessarily share a
|
|
113
|
+
* filesystem. Existing sidecar updates continue to use {@link writeSidecar}.
|
|
114
|
+
*/
|
|
115
|
+
export function createSidecar(path, content) {
|
|
116
|
+
mkdirSync(dirname(path), { recursive: true, mode: VAULT_DIR_MODE });
|
|
117
|
+
const tmpPath = `${path}.${randomBytes(8).toString("hex")}.tmp`;
|
|
118
|
+
let tempCreated = false;
|
|
119
|
+
try {
|
|
120
|
+
writeExclusiveTemp(tmpPath, JSON.stringify(content));
|
|
121
|
+
tempCreated = true;
|
|
122
|
+
linkSync(tmpPath, path);
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
// link(2) leaves the source name in place on success, so it is still this
|
|
126
|
+
// call's temp and must be removed on both paths.
|
|
127
|
+
if (tempCreated)
|
|
128
|
+
removeTempOrWarn(tmpPath);
|
|
129
|
+
}
|
|
61
130
|
}
|
|
62
131
|
/**
|
|
63
132
|
* Check sidecar file mode; warn on stderr if not 0600.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/vault/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AAOpC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,IAAI,uDAAuD,CAC/F,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,IAAI,yDAAyD,CACjG,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,GAAI,MAA2C,CAAC,kBAAkB,CAAC;QAC1E,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,IAAI,kEAAkE,CAC1G,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,IAAI,yDAAyD,CACjG,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAuB;IAChE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IAChE,
|
|
1
|
+
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/vault/sidecar.ts"],"names":[],"mappings":"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"}
|
package/dist/vault/types.d.ts
CHANGED
|
@@ -44,8 +44,9 @@ export interface StoredCredentialMeta {
|
|
|
44
44
|
refreshToken?: string;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
48
|
-
* Backends
|
|
47
|
+
* Stable credential-value storage SPI implemented by all vault backends.
|
|
48
|
+
* Backends implement store/retrieve/delete/listKeys; concrete built-in classes
|
|
49
|
+
* may additionally expose a static `detect()` helper for cascade selection.
|
|
49
50
|
*
|
|
50
51
|
* **Key contract (#168).** `key` must match the grammar in `vault-utils.ts`:
|
|
51
52
|
* 2-64 characters of lowercase alphanumerics with `-` or `.` as separators,
|
|
@@ -58,10 +59,15 @@ export interface StoredCredentialMeta {
|
|
|
58
59
|
* constructible and several interpolate the key into a shell string or an
|
|
59
60
|
* `op://` reference, where the grammar is also the injection guard.
|
|
60
61
|
*/
|
|
61
|
-
export interface
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
export interface SecretsProvider {
|
|
63
|
+
/**
|
|
64
|
+
* Stable provider identifier for audit events. Custom providers may omit it;
|
|
65
|
+
* clients then report the honest fallback `"unknown"`.
|
|
66
|
+
*/
|
|
67
|
+
readonly name?: string;
|
|
68
|
+
store(key: string, value: string): boolean | Promise<boolean>;
|
|
69
|
+
retrieve(key: string): string | null | Promise<string | null>;
|
|
70
|
+
delete(key: string): boolean | Promise<boolean>;
|
|
65
71
|
/**
|
|
66
72
|
* Enumerate credential keys stored in this backend.
|
|
67
73
|
*
|
|
@@ -71,9 +77,8 @@ export interface VaultBackend {
|
|
|
71
77
|
*
|
|
72
78
|
* Returns keys in unspecified order; callers must not rely on sort order.
|
|
73
79
|
*
|
|
74
|
-
* Implementations
|
|
75
|
-
*
|
|
76
|
-
* rather than throwing. Transient failures from the underlying store
|
|
80
|
+
* Implementations whose underlying store cannot enumerate should return an
|
|
81
|
+
* empty array rather than throwing. Transient failures from the underlying store
|
|
77
82
|
* (keychain access denied, libsecret timeout, filesystem permission
|
|
78
83
|
* error) should throw, so the caller can retry or surface the problem.
|
|
79
84
|
*
|
|
@@ -114,4 +119,6 @@ export interface VaultBackend {
|
|
|
114
119
|
*/
|
|
115
120
|
probe?(key: string): SecretState | Promise<SecretState>;
|
|
116
121
|
}
|
|
122
|
+
/** @deprecated Use {@link SecretsProvider}. */
|
|
123
|
+
export type VaultBackend = SecretsProvider;
|
|
117
124
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vault/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,eAAe,GACf,eAAe,GACf,SAAS,GACT,SAAS,CAAC;AAEd,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,IAAI,EAAE,mBAAmB;gBAAzB,IAAI,EAAE,mBAAmB,EACzC,OAAO,EAAE,MAAM;CAKlB;AAMD,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yDAAyD;IACzD,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,MAAM,IAAI,IAAI,CAAC;CAChB;AAMD,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,SAAS,GACT,WAAW,GACX,KAAK,GACL,KAAK,GACL,WAAW,GACX,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vault/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,eAAe,GACf,eAAe,GACf,SAAS,GACT,SAAS,CAAC;AAEd,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,IAAI,EAAE,mBAAmB;gBAAzB,IAAI,EAAE,mBAAmB,EACzC,OAAO,EAAE,MAAM;CAKlB;AAMD,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yDAAyD;IACzD,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,MAAM,IAAI,IAAI,CAAC;CAChB;AAMD,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,SAAS,GACT,WAAW,GACX,KAAK,GACL,KAAK,GACL,WAAW,GACX,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACzD;AAED,+CAA+C;AAC/C,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC"}
|
|
@@ -1,83 +1,62 @@
|
|
|
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 type { SecretState } from "../secret-state.js";
|
|
15
10
|
import type { VaultBackend } from "./types.js";
|
|
11
|
+
/** Prefix reserved for non-auth-token credential values in {@link EnvVault}. */
|
|
12
|
+
export declare const ENV_VAULT_PREFIX = "CENTIENT_SECRET_";
|
|
13
|
+
/** Injectable process environment for deterministic consumers and tests. */
|
|
14
|
+
export interface EnvVaultOptions {
|
|
15
|
+
/** Read by reference so later environment changes remain visible. */
|
|
16
|
+
env?: NodeJS.ProcessEnv;
|
|
17
|
+
/** Defaults to `process.platform`; injectable for Windows-name tests. */
|
|
18
|
+
platform?: NodeJS.Platform;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Return the one environment-variable name assigned to a credential key.
|
|
22
|
+
*
|
|
23
|
+
* The historical `auth-token` mapping remains `ENGRAM_API_KEY`. Every other
|
|
24
|
+
* valid key uses {@link ENV_VAULT_PREFIX} plus the reversible encoding above.
|
|
25
|
+
*
|
|
26
|
+
* @throws {InvalidCredentialKeyError} when `key` violates the package-wide
|
|
27
|
+
* credential-key grammar.
|
|
28
|
+
*/
|
|
29
|
+
export declare function credentialKeyToEnvName(key: string): string;
|
|
16
30
|
/**
|
|
17
31
|
* Environment-variable-only vault backend.
|
|
18
32
|
*
|
|
19
33
|
* This is the last-resort fallback when no OS-level secure credential store is
|
|
20
|
-
* available. It
|
|
21
|
-
*
|
|
34
|
+
* available. It is intentionally read-only and offers no encryption or
|
|
35
|
+
* process-isolation boundary.
|
|
22
36
|
*/
|
|
23
37
|
export declare class EnvVault implements VaultBackend {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
38
|
+
readonly name = "env";
|
|
39
|
+
private readonly env;
|
|
40
|
+
private readonly platform;
|
|
41
|
+
constructor(options?: EnvVaultOptions);
|
|
42
|
+
/** Always available as the cascade's terminal fallback. */
|
|
28
43
|
static detect(): boolean;
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
* persistent storage.
|
|
35
|
-
*
|
|
36
|
-
* @returns false — storage is never performed
|
|
37
|
-
*/
|
|
38
|
-
store(_key: string, _value: string): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Retrieve a credential from the environment.
|
|
41
|
-
*
|
|
42
|
-
* - `'auth-token'` -> `process.env["ENGRAM_API_KEY"] ?? null`
|
|
43
|
-
* - `'refresh-token'` -> `null` (refresh tokens are not available in env mode)
|
|
44
|
-
* - any other key -> `null`
|
|
45
|
-
*
|
|
46
|
-
* @param key - Logical credential key
|
|
47
|
-
* @returns The credential value, or null if unavailable
|
|
48
|
-
*/
|
|
44
|
+
/** Validate and look up one credential without trimming or copying it. */
|
|
45
|
+
private lookup;
|
|
46
|
+
/** Environment variables cannot be mutated persistently from this process. */
|
|
47
|
+
store(key: string, _value: string): boolean;
|
|
48
|
+
/** Return the configured value, or `null` when its canonical slot is absent/empty. */
|
|
49
49
|
retrieve(key: string): string | null;
|
|
50
50
|
/**
|
|
51
|
-
* Probe one credential
|
|
51
|
+
* Probe one credential without returning its value.
|
|
52
52
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* which it exists but cannot be read. So this backend answers exactly
|
|
56
|
-
* `found`/`absent` and never `locked` — inventing one would be as dishonest
|
|
57
|
-
* as the collapse the probe exists to prevent, in the other direction.
|
|
58
|
-
*
|
|
59
|
-
* Value-free: the variable is read only to test it against `null`, and the
|
|
60
|
-
* value is discarded.
|
|
53
|
+
* An unset canonical variable is confirmed absent. A defined-but-empty
|
|
54
|
+
* variable is a visible configuration failure, never a found credential.
|
|
61
55
|
*/
|
|
62
56
|
probe(key: string): SecretState;
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
* No-op: there is nothing stored in this backend to delete.
|
|
67
|
-
*
|
|
68
|
-
* @returns true — always succeeds (nothing to remove)
|
|
69
|
-
*/
|
|
70
|
-
delete(_key: string): boolean;
|
|
71
|
-
/**
|
|
72
|
-
* Enumerate logical keys served by this backend.
|
|
73
|
-
*
|
|
74
|
-
* EnvVault only surfaces a single hardcoded mapping (`auth-token` ->
|
|
75
|
-
* `ENGRAM_API_KEY`), so enumeration returns `["auth-token"]` when the
|
|
76
|
-
* underlying env var is set, otherwise `[]`.
|
|
77
|
-
*
|
|
78
|
-
* There is no user-defined naming convention over `process.env`, so
|
|
79
|
-
* arbitrary prefixes that don't match `auth-token` always produce `[]`.
|
|
80
|
-
*/
|
|
57
|
+
/** No-op deletion for the read-only fallback, after contract validation. */
|
|
58
|
+
delete(key: string): boolean;
|
|
59
|
+
/** Enumerate defined canonical variable names without reading unrelated values. */
|
|
81
60
|
listKeys(prefix?: string): Promise<string[]>;
|
|
82
61
|
}
|
|
83
62
|
//# sourceMappingURL=vault-env.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-env.d.ts","sourceRoot":"","sources":["../../src/vault/vault-env.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vault-env.d.ts","sourceRoot":"","sources":["../../src/vault/vault-env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAW/C,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI1D;AA4BD;;;;;;GAMG;AACH,qBAAa,QAAS,YAAW,YAAY;IAC3C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,OAAO,GAAE,eAAoB;IAKzC,2DAA2D;IAC3D,MAAM,CAAC,MAAM,IAAI,OAAO;IAIxB,0EAA0E;IAC1E,OAAO,CAAC,MAAM;IASd,8EAA8E;IAC9E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAM3C,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKpC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAU/B,4EAA4E;IAC5E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK5B,mFAAmF;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CA2BnD"}
|
package/dist/vault/vault-env.js
CHANGED
|
@@ -1,105 +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
|
-
* Probe one credential
|
|
119
|
+
* Probe one credential without returning its value.
|
|
64
120
|
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* which it exists but cannot be read. So this backend answers exactly
|
|
68
|
-
* `found`/`absent` and never `locked` — inventing one would be as dishonest
|
|
69
|
-
* as the collapse the probe exists to prevent, in the other direction.
|
|
70
|
-
*
|
|
71
|
-
* Value-free: the variable is read only to test it against `null`, and the
|
|
72
|
-
* value is discarded.
|
|
121
|
+
* An unset canonical variable is confirmed absent. A defined-but-empty
|
|
122
|
+
* variable is a visible configuration failure, never a found credential.
|
|
73
123
|
*/
|
|
74
124
|
probe(key) {
|
|
75
|
-
|
|
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
|
+
};
|
|
76
134
|
}
|
|
77
|
-
/**
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
* No-op: there is nothing stored in this backend to delete.
|
|
81
|
-
*
|
|
82
|
-
* @returns true — always succeeds (nothing to remove)
|
|
83
|
-
*/
|
|
84
|
-
delete(_key) {
|
|
135
|
+
/** No-op deletion for the read-only fallback, after contract validation. */
|
|
136
|
+
delete(key) {
|
|
137
|
+
assertValidKey(key, "delete");
|
|
85
138
|
return true;
|
|
86
139
|
}
|
|
87
|
-
/**
|
|
88
|
-
* Enumerate logical keys served by this backend.
|
|
89
|
-
*
|
|
90
|
-
* EnvVault only surfaces a single hardcoded mapping (`auth-token` ->
|
|
91
|
-
* `ENGRAM_API_KEY`), so enumeration returns `["auth-token"]` when the
|
|
92
|
-
* underlying env var is set, otherwise `[]`.
|
|
93
|
-
*
|
|
94
|
-
* There is no user-defined naming convention over `process.env`, so
|
|
95
|
-
* arbitrary prefixes that don't match `auth-token` always produce `[]`.
|
|
96
|
-
*/
|
|
140
|
+
/** Enumerate defined canonical variable names without reading unrelated values. */
|
|
97
141
|
async listKeys(prefix) {
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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();
|
|
103
167
|
}
|
|
104
168
|
}
|
|
105
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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"}
|
|
@@ -18,6 +18,7 @@ import type { VaultBackend } from "./types.js";
|
|
|
18
18
|
* Use `GpgVault.detect()` before instantiating to verify availability.
|
|
19
19
|
*/
|
|
20
20
|
export declare class GpgVault implements VaultBackend {
|
|
21
|
+
readonly name = "gpg";
|
|
21
22
|
/**
|
|
22
23
|
* Returns true if GPG is installed and at least one public key is available.
|
|
23
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
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;;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"}
|
|
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
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"vault-gpg.js","sourceRoot":"","sources":["../../src/vault/vault-gpg.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ import type { VaultBackend } from "./types.js";
|
|
|
24
24
|
* }
|
|
25
25
|
*/
|
|
26
26
|
export declare class LibsecretVault implements VaultBackend {
|
|
27
|
+
readonly name = "libsecret";
|
|
27
28
|
/**
|
|
28
29
|
* Returns true if `secret-tool` is available on this system.
|
|
29
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;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsB/C;;;;;;;;;GASG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD;;;OAGG;IACH,MAAM,CAAC,MAAM,IAAI,OAAO;IAYxB;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;
|
|
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"}
|