@claudexor/secrets 1.0.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,24 +1,20 @@
1
1
  export { redactSecrets } from "@claudexor/util";
2
- export type SecretBackend = "auto" | "keychain" | "file";
3
2
  /**
4
- * Secret store mirroring how Codex/Claude store credentials: OS keychain where
5
- * available (macOS), otherwise a 0600 file under the config dir. (Adapters read
6
- * their own provider env vars directly; the env-var/helper-command indirection
7
- * was retired.) Subscriptions are NOT stored here Claudexor reuses each
8
- * harness's own native login.
3
+ * Claudexor v2's file-only 0600 secret store. Vendor-native subscriptions stay
4
+ * in the vendor's own login and are never copied here. The v2 control plane
5
+ * intentionally has no System Keychain code path: a data-root override must be
6
+ * sufficient to prove that every managed-secret read/write/delete is scoped.
9
7
  */
10
8
  export declare class SecretStore {
11
- private readonly backend;
12
- constructor(backend?: SecretBackend);
13
- resolvedBackend(): "keychain" | "file";
9
+ resolvedBackend(): "file";
14
10
  /** Why the last `set` landed in the file store despite a keychain backend. */
15
11
  lastFallbackReason: string | null;
16
- set(name: string, value: string): "keychain" | "file";
12
+ set(name: string, value: string): "file";
17
13
  get(name: string): string | null;
18
14
  delete(name: string): void;
19
15
  list(): {
20
16
  name: string;
21
- backend: "keychain" | "file";
17
+ backend: "file";
22
18
  present: true;
23
19
  }[];
24
20
  private fileStore;
@@ -26,17 +22,8 @@ export declare class SecretStore {
26
22
  private fileSet;
27
23
  private fileGet;
28
24
  private fileDelete;
29
- private getKeychain;
30
- private keychainNames;
31
25
  }
32
- /**
33
- * The single allowlist of managed secret names (previously duplicated in
34
- * the CLI and the control API, and BOTH were missing `claude_oauth` — the
35
- * claude adapter reads it, so it must be settable). Names are secret REFS,
36
- * never values; adding a name here makes it settable via CLI and HTTP alike.
37
- */
38
- export declare const MANAGED_SECRET_NAMES: readonly ["openai", "anthropic", "claude_oauth", "openrouter", "cursor", "opencode", "raw"];
39
- export declare function isManagedSecretName(name: string): boolean;
26
+ export { MANAGED_SECRET_NAMES, isManagedSecretName, namespacedSecretRefBase, } from "@claudexor/util";
40
27
  export interface ResolveOptions {
41
28
  /** Test seam: inject a scoped store. Production callers use the default. */
42
29
  store?: SecretStore;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAsBzD;;;;;;GAMG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,GAAE,aAAsB;IAE5D,eAAe,IAAI,UAAU,GAAG,MAAM;IAmBtC,8EAA8E;IAC9E,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM;IAmBrD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBhC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa1B,IAAI,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,EAAE;IAiBvE,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,aAAa;CActB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,6FAQvB,CAAC;AAEX,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,GAAG,IAAI,CAGpF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAUhD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,eAAe,IAAI,MAAM;IAIzB,8EAA8E;IAC9E,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAMxC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,IAAI,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,EAAE;IAM1D,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,UAAU;CAKnB;AAMD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,GAAG,IAAI,CAGpF"}
package/dist/index.js CHANGED
@@ -1,128 +1,50 @@
1
- import { execFileSync } from "node:child_process";
2
- import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
- import { platform } from "node:os";
1
+ import { chmodSync, closeSync, constants, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
4
3
  import { join } from "node:path";
5
4
  import { userConfigDir } from "@claudexor/util";
6
5
  export { redactSecrets } from "@claudexor/util";
7
- const SERVICE = "claudexor";
8
6
  function configDir() {
9
7
  return userConfigDir();
10
8
  }
11
9
  function fileStorePath() {
12
10
  return join(configDir(), "secrets.json");
13
11
  }
14
- function keychainAvailable() {
15
- if (platform() !== "darwin")
16
- return false;
17
- try {
18
- execFileSync("security", ["help"], { stdio: "ignore" });
19
- return true;
20
- }
21
- catch {
22
- return false;
23
- }
24
- }
25
12
  /**
26
- * Secret store mirroring how Codex/Claude store credentials: OS keychain where
27
- * available (macOS), otherwise a 0600 file under the config dir. (Adapters read
28
- * their own provider env vars directly; the env-var/helper-command indirection
29
- * was retired.) Subscriptions are NOT stored here Claudexor reuses each
30
- * harness's own native login.
13
+ * Claudexor v2's file-only 0600 secret store. Vendor-native subscriptions stay
14
+ * in the vendor's own login and are never copied here. The v2 control plane
15
+ * intentionally has no System Keychain code path: a data-root override must be
16
+ * sufficient to prove that every managed-secret read/write/delete is scoped.
31
17
  */
32
18
  export class SecretStore {
33
- backend;
34
- constructor(backend = "auto") {
35
- this.backend = backend;
36
- }
37
19
  resolvedBackend() {
38
- if (this.backend === "keychain")
39
- return "keychain";
40
- if (this.backend === "file")
41
- return "file";
42
- // backend === "auto": an explicit env override lets a sandboxed run/test
43
- // (CLAUDEXOR_CONFIG_DIR + CLAUDEXOR_SECRETS_BACKEND=file) keep ALL secret I/O
44
- // in the 0600 file store and never read/mutate the real OS login Keychain
45
- // (which is not path-scoped, so CLAUDEXOR_CONFIG_DIR alone can't redirect it).
46
- // Precedence: explicit constructor arg > env > platform default. A non-empty
47
- // env typo FAILS LOUDLY rather than silently falling back to the Keychain
48
- // (e.g. CLAUDEXOR_SECRETS_BACKEND=fil must not quietly hit the real Keychain).
49
- const envBackend = process.env.CLAUDEXOR_SECRETS_BACKEND;
50
- if (envBackend !== undefined && envBackend !== "" && envBackend !== "file" && envBackend !== "keychain" && envBackend !== "auto") {
51
- throw new Error(`CLAUDEXOR_SECRETS_BACKEND must be file|keychain|auto (got '${envBackend}')`);
52
- }
53
- if (envBackend === "file")
54
- return "file";
55
- if (envBackend === "keychain")
56
- return "keychain";
57
- return keychainAvailable() ? "keychain" : "file";
20
+ return "file";
58
21
  }
59
22
  /** Why the last `set` landed in the file store despite a keychain backend. */
60
23
  lastFallbackReason = null;
61
24
  set(name, value) {
62
25
  this.lastFallbackReason = null;
63
- if (this.resolvedBackend() === "keychain") {
64
- try {
65
- execFileSync("security", ["add-generic-password", "-U", "-a", SERVICE, "-s", `${SERVICE}:${name}`, "-w"], { input: `${value}\n${value}\n`, stdio: ["pipe", "ignore", "ignore"] });
66
- return "keychain";
67
- }
68
- catch (err) {
69
- // SURFACED degradation (not silent): callers report this to the UI/CLI.
70
- this.lastFallbackReason = `keychain write failed (${err instanceof Error ? err.message.split("\n")[0] : "error"}); stored in 0600 file instead`;
71
- }
72
- }
73
26
  this.fileSet(name, value);
74
27
  return "file";
75
28
  }
76
29
  get(name) {
77
- if (this.resolvedBackend() === "keychain") {
78
- try {
79
- const out = execFileSync("security", ["find-generic-password", "-a", SERVICE, "-s", `${SERVICE}:${name}`, "-w"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
80
- const v = out.trim();
81
- if (v)
82
- return v;
83
- }
84
- catch {
85
- /* not in keychain; try file */
86
- }
87
- }
88
30
  return this.fileGet(name);
89
31
  }
90
32
  delete(name) {
91
- if (this.resolvedBackend() === "keychain") {
92
- try {
93
- execFileSync("security", ["delete-generic-password", "-a", SERVICE, "-s", `${SERVICE}:${name}`], {
94
- stdio: "ignore",
95
- });
96
- }
97
- catch {
98
- /* ignore */
99
- }
100
- }
101
33
  this.fileDelete(name);
102
34
  }
103
35
  list() {
104
- const backend = this.resolvedBackend();
105
- if (backend === "file") {
106
- return Object.keys(this.fileStore())
107
- .sort()
108
- .map((name) => ({ name, backend: "file", present: true }));
109
- }
110
- const names = new Set();
111
- for (const name of this.keychainNames())
112
- names.add(name);
113
- for (const name of Object.keys(this.fileStore()))
114
- names.add(name);
115
- return [...names].sort().map((name) => ({
116
- name,
117
- backend: this.getKeychain(name) !== null ? "keychain" : "file",
118
- present: true,
119
- }));
36
+ return Object.keys(this.fileStore())
37
+ .sort()
38
+ .map((name) => ({ name, backend: "file", present: true }));
120
39
  }
121
40
  fileStore() {
122
41
  const path = fileStorePath();
123
42
  if (!existsSync(path))
124
43
  return {};
125
44
  try {
45
+ const stat = lstatSync(path);
46
+ if (stat.isSymbolicLink() || !stat.isFile())
47
+ throw new Error("expected a regular file");
126
48
  const parsed = JSON.parse(readFileSync(path, "utf8"));
127
49
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
128
50
  throw new Error("expected an object");
@@ -140,14 +62,37 @@ export class SecretStore {
140
62
  }
141
63
  }
142
64
  writeFileStore(store) {
143
- mkdirSync(configDir(), { recursive: true });
65
+ const dir = configDir();
66
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
67
+ chmodSync(dir, 0o700);
144
68
  const path = fileStorePath();
145
- writeFileSync(path, JSON.stringify(store, null, 2) + "\n", { mode: 0o600 });
69
+ const temporaryPath = join(dir, `.secrets-${randomUUID()}.tmp`);
70
+ let fd;
146
71
  try {
72
+ fd = openSync(temporaryPath, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);
73
+ writeFileSync(fd, JSON.stringify(store, null, 2) + "\n", "utf8");
74
+ fsyncSync(fd);
75
+ closeSync(fd);
76
+ fd = undefined;
77
+ renameSync(temporaryPath, path);
147
78
  chmodSync(path, 0o600);
79
+ const dirFd = openSync(dir, constants.O_RDONLY);
80
+ try {
81
+ fsyncSync(dirFd);
82
+ }
83
+ finally {
84
+ closeSync(dirFd);
85
+ }
148
86
  }
149
- catch {
150
- /* best-effort on platforms without POSIX modes */
87
+ finally {
88
+ if (fd !== undefined)
89
+ closeSync(fd);
90
+ try {
91
+ unlinkSync(temporaryPath);
92
+ }
93
+ catch {
94
+ // The atomic rename removes the temporary pathname on success.
95
+ }
151
96
  }
152
97
  }
153
98
  fileSet(name, value) {
@@ -163,52 +108,12 @@ export class SecretStore {
163
108
  delete store[name];
164
109
  this.writeFileStore(store);
165
110
  }
166
- getKeychain(name) {
167
- try {
168
- const out = execFileSync("security", ["find-generic-password", "-a", SERVICE, "-s", `${SERVICE}:${name}`, "-w"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
169
- const v = out.trim();
170
- return v || null;
171
- }
172
- catch {
173
- return null;
174
- }
175
- }
176
- keychainNames() {
177
- if (platform() !== "darwin")
178
- return [];
179
- try {
180
- const out = execFileSync("security", ["dump-keychain"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
181
- const re = new RegExp(`"svce"<blob>="${SERVICE}:([^"]+)"`, "g");
182
- const names = [];
183
- for (let m = re.exec(out); m !== null; m = re.exec(out)) {
184
- if (m[1])
185
- names.push(m[1]);
186
- }
187
- return names;
188
- }
189
- catch {
190
- return [];
191
- }
192
- }
193
- }
194
- /**
195
- * The single allowlist of managed secret names (previously duplicated in
196
- * the CLI and the control API, and BOTH were missing `claude_oauth` — the
197
- * claude adapter reads it, so it must be settable). Names are secret REFS,
198
- * never values; adding a name here makes it settable via CLI and HTTP alike.
199
- */
200
- export const MANAGED_SECRET_NAMES = [
201
- "openai",
202
- "anthropic",
203
- "claude_oauth",
204
- "openrouter",
205
- "cursor",
206
- "opencode",
207
- "raw",
208
- ];
209
- export function isManagedSecretName(name) {
210
- return MANAGED_SECRET_NAMES.includes(name);
211
111
  }
112
+ // The managed secret NAME grammar (allowlist + namespace rule) is owned by
113
+ // the dependency-free util package so the schema layer can validate profile
114
+ // secret_refs against the same single grammar; re-exported here for the
115
+ // store's historical importers.
116
+ export { MANAGED_SECRET_NAMES, isManagedSecretName, namespacedSecretRefBase, } from "@claudexor/util";
212
117
  /**
213
118
  * Resolve a stored secret by name. (The env-var and helper-command indirection
214
119
  * options were retired: no production caller ever passed them — adapters read
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,MAAM,OAAO,GAAG,WAAW,CAAC;AAE5B,SAAS,SAAS;IAChB,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB;IACxB,IAAI,QAAQ,EAAE,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC;QACH,YAAY,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,UAAyB,MAAM;QAA/B,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAEhE,eAAe;QACb,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC;QACnD,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QAC3C,yEAAyE;QACzE,8EAA8E;QAC9E,0EAA0E;QAC1E,+EAA+E;QAC/E,6EAA6E;QAC7E,0EAA0E;QAC1E,+EAA+E;QAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACzD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACjI,MAAM,IAAI,KAAK,CAAC,8DAA8D,UAAU,IAAI,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,UAAU,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QACzC,IAAI,UAAU,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC;QACjD,OAAO,iBAAiB,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IAED,8EAA8E;IAC9E,kBAAkB,GAAkB,IAAI,CAAC;IAEzC,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,YAAY,CACV,UAAU,EACV,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,EAC/E,EAAE,KAAK,EAAE,GAAG,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CACvE,CAAC;gBACF,OAAO,UAAU,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,wEAAwE;gBACxE,IAAI,CAAC,kBAAkB,GAAG,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,gCAAgC,CAAC;YAClJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,YAAY,CACtB,UAAU,EACV,CAAC,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,EAC1E,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAC1D,CAAC;gBACF,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC;oBAAE,OAAO,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,YAAY,CAAC,UAAU,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC,EAAE;oBAC/F,KAAK,EAAE,QAAQ;iBAChB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACvC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;iBACjC,IAAI,EAAE;iBACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAe,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAE,UAAoB,CAAC,CAAC,CAAE,MAAgB;YACpF,OAAO,EAAE,IAAa;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,SAAS;QACf,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAC;YACjE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,GAAG,GAA2B,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;gBAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,mBAAmB,CAAC,CAAC;gBAClF,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAA6B;QAClD,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;QAC7B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,KAAa;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,OAAO,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CACtB,UAAU,EACV,CAAC,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,EAC1E,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAC1D,CAAC;YACF,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,IAAI,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,QAAQ,EAAE,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnH,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,iBAAiB,OAAO,WAAW,EAAE,GAAG,CAAC,CAAC;YAChE,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ;IACR,WAAW;IACX,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,KAAK;CACG,CAAC;AAEX,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAQ,oBAA0C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAOD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAuB,EAAE;IACnE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACrF,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudexor/secrets",
3
- "version": "1.0.1",
3
+ "version": "2.1.2",
4
4
  "license": "MIT",
5
5
  "description": "Cross-platform secret store: OS keychain where available, else a 0600 file; named secret refs resolved by adapters.",
6
6
  "type": "module",
@@ -16,7 +16,7 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
- "@claudexor/util": "1.0.1"
19
+ "@claudexor/util": "2.1.2"
20
20
  },
21
21
  "repository": {
22
22
  "type": "git",