@enactprotocol/secrets 2.0.0 → 2.0.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.
Files changed (49) hide show
  1. package/dist/dagger/index.d.ts +8 -0
  2. package/dist/dagger/index.d.ts.map +1 -0
  3. package/dist/dagger/index.js +8 -0
  4. package/dist/dagger/index.js.map +1 -0
  5. package/dist/dagger/secret-object.d.ts +49 -0
  6. package/dist/dagger/secret-object.d.ts.map +1 -0
  7. package/dist/dagger/secret-object.js +100 -0
  8. package/dist/dagger/secret-object.js.map +1 -0
  9. package/dist/dagger/uri-parser.d.ts +36 -0
  10. package/dist/dagger/uri-parser.d.ts.map +1 -0
  11. package/dist/dagger/uri-parser.js +179 -0
  12. package/dist/dagger/uri-parser.js.map +1 -0
  13. package/dist/env/index.d.ts +10 -0
  14. package/dist/env/index.d.ts.map +1 -0
  15. package/dist/env/index.js +14 -0
  16. package/dist/env/index.js.map +1 -0
  17. package/dist/env/manager.d.ts +87 -0
  18. package/dist/env/manager.d.ts.map +1 -0
  19. package/dist/env/manager.js +204 -0
  20. package/dist/env/manager.js.map +1 -0
  21. package/dist/env/parser.d.ts +58 -0
  22. package/dist/env/parser.d.ts.map +1 -0
  23. package/dist/env/parser.js +211 -0
  24. package/dist/env/parser.js.map +1 -0
  25. package/dist/env/reader.d.ts +61 -0
  26. package/dist/env/reader.d.ts.map +1 -0
  27. package/dist/env/reader.js +92 -0
  28. package/dist/env/reader.js.map +1 -0
  29. package/dist/env/writer.d.ts +68 -0
  30. package/dist/env/writer.d.ts.map +1 -0
  31. package/dist/env/writer.js +108 -0
  32. package/dist/env/writer.js.map +1 -0
  33. package/dist/index.d.ts +14 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +33 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/keyring.d.ts +77 -0
  38. package/dist/keyring.d.ts.map +1 -0
  39. package/dist/keyring.js +123 -0
  40. package/dist/keyring.js.map +1 -0
  41. package/dist/resolver.d.ts +65 -0
  42. package/dist/resolver.d.ts.map +1 -0
  43. package/dist/resolver.js +144 -0
  44. package/dist/resolver.js.map +1 -0
  45. package/dist/types.d.ts +162 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +9 -0
  48. package/dist/types.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Dagger secret integration
3
+ *
4
+ * Re-exports all dagger-related functions
5
+ */
6
+ export { parseSecretUri, resolveSecretUri, isSecretUri, getSupportedSchemes, } from "./uri-parser";
7
+ export { getSecretObject, getSecretObjects, parseSecretOverride, parseSecretOverrides, } from "./secret-object";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dagger/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Dagger secret integration
3
+ *
4
+ * Re-exports all dagger-related functions
5
+ */
6
+ export { parseSecretUri, resolveSecretUri, isSecretUri, getSupportedSchemes, } from "./uri-parser";
7
+ export { getSecretObject, getSecretObjects, parseSecretOverride, parseSecretOverrides, } from "./secret-object";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dagger/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Get secret objects for Dagger integration
3
+ *
4
+ * Combines keyring secrets with Dagger URI overrides
5
+ */
6
+ import type { GetSecretOptions, SecretObject } from "../types";
7
+ /**
8
+ * Get a secret object for Dagger
9
+ *
10
+ * If an override URI is provided, resolves that instead of keyring.
11
+ * Otherwise, resolves from keyring with namespace inheritance.
12
+ *
13
+ * @param toolPath - The tool path for namespace resolution
14
+ * @param secretName - The secret name
15
+ * @param options - Options including override URI
16
+ * @returns Secret object with name, value, and source info
17
+ * @throws Error if secret not found
18
+ */
19
+ export declare function getSecretObject(toolPath: string, secretName: string, options?: GetSecretOptions): Promise<SecretObject>;
20
+ /**
21
+ * Get multiple secret objects for a tool
22
+ *
23
+ * @param toolPath - The tool path for namespace resolution
24
+ * @param secrets - Map of secret name to optional override URI
25
+ * @returns Map of secret name to secret object
26
+ */
27
+ export declare function getSecretObjects(toolPath: string, secrets: Record<string, string | undefined>): Promise<Map<string, SecretObject>>;
28
+ /**
29
+ * Parse a secret override from CLI format
30
+ *
31
+ * Format: SECRET_NAME=uri
32
+ * Example: API_TOKEN=env://MY_API_TOKEN
33
+ *
34
+ * @param override - The override string
35
+ * @returns Parsed name and URI, or null if invalid
36
+ */
37
+ export declare function parseSecretOverride(override: string): {
38
+ name: string;
39
+ uri: string;
40
+ } | null;
41
+ /**
42
+ * Parse multiple secret overrides from CLI
43
+ *
44
+ * @param overrides - Array of override strings
45
+ * @returns Map of secret name to override URI
46
+ */
47
+ export declare function parseSecretOverrides(overrides: string[]): Record<string, string>;
48
+ export { parseSecretUri, resolveSecretUri, isSecretUri, getSupportedSchemes } from "./uri-parser";
49
+ //# sourceMappingURL=secret-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-object.d.ts","sourceRoot":"","sources":["../../src/dagger/secret-object.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG/D;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CASpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAc1F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWhF;AAGD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Get secret objects for Dagger integration
3
+ *
4
+ * Combines keyring secrets with Dagger URI overrides
5
+ */
6
+ import { resolveSecret } from "../resolver";
7
+ import { isSecretUri, resolveSecretUri } from "./uri-parser";
8
+ /**
9
+ * Get a secret object for Dagger
10
+ *
11
+ * If an override URI is provided, resolves that instead of keyring.
12
+ * Otherwise, resolves from keyring with namespace inheritance.
13
+ *
14
+ * @param toolPath - The tool path for namespace resolution
15
+ * @param secretName - The secret name
16
+ * @param options - Options including override URI
17
+ * @returns Secret object with name, value, and source info
18
+ * @throws Error if secret not found
19
+ */
20
+ export async function getSecretObject(toolPath, secretName, options = {}) {
21
+ const { overrideUri } = options;
22
+ // If override URI is provided, resolve it
23
+ if (overrideUri) {
24
+ const value = await resolveSecretUri(overrideUri);
25
+ return {
26
+ name: secretName,
27
+ value,
28
+ source: "override",
29
+ overrideUri,
30
+ };
31
+ }
32
+ // Otherwise, resolve from keyring
33
+ const result = await resolveSecret(toolPath, secretName);
34
+ if (!result.found) {
35
+ throw new Error(`Secret '${secretName}' not found for tool '${toolPath}'. ` +
36
+ `Searched namespaces: ${result.searchedNamespaces.join(", ")}. ` +
37
+ `Set with: enact env set ${secretName} --secret --namespace <namespace>`);
38
+ }
39
+ return {
40
+ name: secretName,
41
+ value: result.value,
42
+ source: "keyring",
43
+ namespace: result.namespace,
44
+ };
45
+ }
46
+ /**
47
+ * Get multiple secret objects for a tool
48
+ *
49
+ * @param toolPath - The tool path for namespace resolution
50
+ * @param secrets - Map of secret name to optional override URI
51
+ * @returns Map of secret name to secret object
52
+ */
53
+ export async function getSecretObjects(toolPath, secrets) {
54
+ const results = new Map();
55
+ for (const [name, overrideUri] of Object.entries(secrets)) {
56
+ const obj = await getSecretObject(toolPath, name, overrideUri ? { overrideUri } : {});
57
+ results.set(name, obj);
58
+ }
59
+ return results;
60
+ }
61
+ /**
62
+ * Parse a secret override from CLI format
63
+ *
64
+ * Format: SECRET_NAME=uri
65
+ * Example: API_TOKEN=env://MY_API_TOKEN
66
+ *
67
+ * @param override - The override string
68
+ * @returns Parsed name and URI, or null if invalid
69
+ */
70
+ export function parseSecretOverride(override) {
71
+ const eqIndex = override.indexOf("=");
72
+ if (eqIndex === -1) {
73
+ return null;
74
+ }
75
+ const name = override.slice(0, eqIndex).trim();
76
+ const uri = override.slice(eqIndex + 1).trim();
77
+ if (!name || !isSecretUri(uri)) {
78
+ return null;
79
+ }
80
+ return { name, uri };
81
+ }
82
+ /**
83
+ * Parse multiple secret overrides from CLI
84
+ *
85
+ * @param overrides - Array of override strings
86
+ * @returns Map of secret name to override URI
87
+ */
88
+ export function parseSecretOverrides(overrides) {
89
+ const result = {};
90
+ for (const override of overrides) {
91
+ const parsed = parseSecretOverride(override);
92
+ if (parsed) {
93
+ result[parsed.name] = parsed.uri;
94
+ }
95
+ }
96
+ return result;
97
+ }
98
+ // Re-export URI functions
99
+ export { parseSecretUri, resolveSecretUri, isSecretUri, getSupportedSchemes } from "./uri-parser";
100
+ //# sourceMappingURL=secret-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-object.js","sourceRoot":"","sources":["../../src/dagger/secret-object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Dagger Secret URI parser and resolver
3
+ *
4
+ * Supports secret URIs:
5
+ * - env://VAR_NAME - Environment variable
6
+ * - file://PATH - File contents
7
+ * - cmd://COMMAND - Command output
8
+ * - op://VAULT/ITEM/FIELD - 1Password
9
+ * - vault://PATH - HashiCorp Vault
10
+ */
11
+ import type { DaggerSecretScheme, DaggerSecretUri } from "../types";
12
+ /**
13
+ * Parse a Dagger secret URI
14
+ *
15
+ * @param uri - The URI to parse (e.g., "env://API_KEY")
16
+ * @returns Parsed URI with scheme and value
17
+ * @throws Error if URI is invalid
18
+ */
19
+ export declare function parseSecretUri(uri: string): DaggerSecretUri;
20
+ /**
21
+ * Check if a string is a valid secret URI
22
+ */
23
+ export declare function isSecretUri(uri: string): boolean;
24
+ /**
25
+ * Resolve a secret URI to its actual value
26
+ *
27
+ * @param uri - The URI to resolve
28
+ * @returns The secret value
29
+ * @throws Error if resolution fails
30
+ */
31
+ export declare function resolveSecretUri(uri: string): Promise<string>;
32
+ /**
33
+ * Get supported URI schemes
34
+ */
35
+ export declare function getSupportedSchemes(): DaggerSecretScheme[];
36
+ //# sourceMappingURL=uri-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri-parser.d.ts","sourceRoot":"","sources":["../../src/dagger/uri-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAOpE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAqB3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOhD;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBnE;AA6GD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAE1D"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Dagger Secret URI parser and resolver
3
+ *
4
+ * Supports secret URIs:
5
+ * - env://VAR_NAME - Environment variable
6
+ * - file://PATH - File contents
7
+ * - cmd://COMMAND - Command output
8
+ * - op://VAULT/ITEM/FIELD - 1Password
9
+ * - vault://PATH - HashiCorp Vault
10
+ */
11
+ import { execSync } from "node:child_process";
12
+ import { existsSync, readFileSync } from "node:fs";
13
+ import { resolve } from "node:path";
14
+ /**
15
+ * Valid URI schemes
16
+ */
17
+ const VALID_SCHEMES = new Set(["env", "file", "cmd", "op", "vault"]);
18
+ /**
19
+ * Parse a Dagger secret URI
20
+ *
21
+ * @param uri - The URI to parse (e.g., "env://API_KEY")
22
+ * @returns Parsed URI with scheme and value
23
+ * @throws Error if URI is invalid
24
+ */
25
+ export function parseSecretUri(uri) {
26
+ const match = uri.match(/^([a-z]+):\/\/(.+)$/);
27
+ if (!match || !match[1] || !match[2]) {
28
+ throw new Error(`Invalid secret URI format: ${uri}. Expected format: scheme://value`);
29
+ }
30
+ const schemeStr = match[1];
31
+ const value = match[2];
32
+ const scheme = schemeStr;
33
+ if (!VALID_SCHEMES.has(scheme)) {
34
+ throw new Error(`Invalid secret URI scheme: ${scheme}. Valid schemes: ${Array.from(VALID_SCHEMES).join(", ")}`);
35
+ }
36
+ return {
37
+ scheme,
38
+ value,
39
+ original: uri,
40
+ };
41
+ }
42
+ /**
43
+ * Check if a string is a valid secret URI
44
+ */
45
+ export function isSecretUri(uri) {
46
+ try {
47
+ parseSecretUri(uri);
48
+ return true;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ /**
55
+ * Resolve a secret URI to its actual value
56
+ *
57
+ * @param uri - The URI to resolve
58
+ * @returns The secret value
59
+ * @throws Error if resolution fails
60
+ */
61
+ export async function resolveSecretUri(uri) {
62
+ const parsed = parseSecretUri(uri);
63
+ switch (parsed.scheme) {
64
+ case "env":
65
+ return resolveEnvUri(parsed.value);
66
+ case "file":
67
+ return resolveFileUri(parsed.value);
68
+ case "cmd":
69
+ return resolveCmdUri(parsed.value);
70
+ case "op":
71
+ return resolveOpUri(parsed.value);
72
+ case "vault":
73
+ return resolveVaultUri(parsed.value);
74
+ default:
75
+ throw new Error(`Unsupported secret scheme: ${parsed.scheme}`);
76
+ }
77
+ }
78
+ /**
79
+ * Resolve env:// URI - read from environment variable
80
+ */
81
+ function resolveEnvUri(varName) {
82
+ const value = process.env[varName];
83
+ if (value === undefined) {
84
+ throw new Error(`Environment variable '${varName}' is not set (from env://${varName})`);
85
+ }
86
+ return value;
87
+ }
88
+ /**
89
+ * Resolve file:// URI - read file contents
90
+ */
91
+ function resolveFileUri(path) {
92
+ // Handle relative paths
93
+ const resolvedPath = resolve(path);
94
+ if (!existsSync(resolvedPath)) {
95
+ throw new Error(`File not found: ${resolvedPath} (from file://${path})`);
96
+ }
97
+ return readFileSync(resolvedPath, "utf-8").trim();
98
+ }
99
+ /**
100
+ * Resolve cmd:// URI - execute command and capture output
101
+ */
102
+ function resolveCmdUri(command) {
103
+ try {
104
+ const output = execSync(command, {
105
+ encoding: "utf-8",
106
+ stdio: ["pipe", "pipe", "pipe"],
107
+ });
108
+ return output.trim();
109
+ }
110
+ catch (error) {
111
+ const message = error instanceof Error ? error.message : String(error);
112
+ throw new Error(`Command failed: ${command} (from cmd://${command}): ${message}`);
113
+ }
114
+ }
115
+ /**
116
+ * Resolve op:// URI - 1Password CLI
117
+ * Format: op://vault/item/field
118
+ *
119
+ * Requires 1Password CLI (op) to be installed and authenticated
120
+ */
121
+ function resolveOpUri(path) {
122
+ const opUri = `op://${path}`;
123
+ try {
124
+ const output = execSync(`op read "${opUri}"`, {
125
+ encoding: "utf-8",
126
+ stdio: ["pipe", "pipe", "pipe"],
127
+ });
128
+ return output.trim();
129
+ }
130
+ catch (error) {
131
+ const message = error instanceof Error ? error.message : String(error);
132
+ throw new Error(`1Password read failed for ${opUri}. Ensure 'op' CLI is installed and authenticated: ${message}`);
133
+ }
134
+ }
135
+ /**
136
+ * Resolve vault:// URI - HashiCorp Vault
137
+ * Format: vault://path/to/secret#field
138
+ *
139
+ * Requires Vault CLI and VAULT_ADDR, VAULT_TOKEN environment variables
140
+ */
141
+ function resolveVaultUri(path) {
142
+ // Parse path and optional field
143
+ const [secretPath, field] = path.split("#");
144
+ try {
145
+ const command = `vault kv get -format=json "${secretPath}"`;
146
+ const output = execSync(command, {
147
+ encoding: "utf-8",
148
+ stdio: ["pipe", "pipe", "pipe"],
149
+ });
150
+ const data = JSON.parse(output);
151
+ const secretData = data.data?.data ?? data.data;
152
+ if (field) {
153
+ if (!(field in secretData)) {
154
+ throw new Error(`Field '${field}' not found in secret at ${secretPath}`);
155
+ }
156
+ return String(secretData[field]);
157
+ }
158
+ // If no field specified, return first value or JSON
159
+ const values = Object.values(secretData);
160
+ if (values.length === 1) {
161
+ return String(values[0]);
162
+ }
163
+ return JSON.stringify(secretData);
164
+ }
165
+ catch (error) {
166
+ if (error instanceof SyntaxError) {
167
+ throw new Error(`Failed to parse Vault response for ${path}. Ensure VAULT_ADDR and VAULT_TOKEN are set.`);
168
+ }
169
+ const message = error instanceof Error ? error.message : String(error);
170
+ throw new Error(`Vault read failed for ${path}: ${message}`);
171
+ }
172
+ }
173
+ /**
174
+ * Get supported URI schemes
175
+ */
176
+ export function getSupportedSchemes() {
177
+ return Array.from(VALID_SCHEMES);
178
+ }
179
+ //# sourceMappingURL=uri-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri-parser.js","sourceRoot":"","sources":["../../src/dagger/uri-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Environment variable management
3
+ *
4
+ * Re-exports all env-related functions
5
+ */
6
+ export { parseEnvFile, parseEnvContent, serializeEnvFile, createEnvContent, updateEnvVar, removeEnvVar, } from "./parser";
7
+ export { getGlobalEnvPath, getLocalEnvPath, readEnvFile, readEnvVars, loadGlobalEnv, loadLocalEnv, loadGlobalEnvFile, loadLocalEnvFile, globalEnvExists, localEnvExists, } from "./reader";
8
+ export { writeEnvFile, writeEnvVars, setEnvVar, deleteEnvVar, setGlobalEnvVar, setLocalEnvVar, deleteGlobalEnvVar, deleteLocalEnvVar, } from "./writer";
9
+ export { setEnv, getEnv, getEnvValue, deleteEnv, listEnv, resolveAllEnv, resolveToolEnv, hasLocalEnv, hasGlobalEnv, } from "./manager";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/env/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,MAAM,EACN,MAAM,EACN,WAAW,EACX,SAAS,EACT,OAAO,EACP,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,WAAW,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Environment variable management
3
+ *
4
+ * Re-exports all env-related functions
5
+ */
6
+ // Parser functions
7
+ export { parseEnvFile, parseEnvContent, serializeEnvFile, createEnvContent, updateEnvVar, removeEnvVar, } from "./parser";
8
+ // Reader functions
9
+ export { getGlobalEnvPath, getLocalEnvPath, readEnvFile, readEnvVars, loadGlobalEnv, loadLocalEnv, loadGlobalEnvFile, loadLocalEnvFile, globalEnvExists, localEnvExists, } from "./reader";
10
+ // Writer functions
11
+ export { writeEnvFile, writeEnvVars, setEnvVar, deleteEnvVar, setGlobalEnvVar, setLocalEnvVar, deleteGlobalEnvVar, deleteLocalEnvVar, } from "./writer";
12
+ // Manager functions (high-level API)
13
+ export { setEnv, getEnv, getEnvValue, deleteEnv, listEnv, resolveAllEnv, resolveToolEnv, hasLocalEnv, hasGlobalEnv, } from "./manager";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/env/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,UAAU,CAAC;AAElB,mBAAmB;AACnB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,qCAAqC;AACrC,OAAO,EACL,MAAM,EACN,MAAM,EACN,WAAW,EACX,SAAS,EACT,OAAO,EACP,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,WAAW,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Unified environment variable manager
3
+ *
4
+ * Provides high-level functions for managing environment variables
5
+ * with priority resolution: local → global → default
6
+ */
7
+ import type { EnvResolution, EnvironmentVariable } from "../types";
8
+ /**
9
+ * Set an environment variable
10
+ *
11
+ * @param key - Variable key
12
+ * @param value - Variable value
13
+ * @param scope - Where to set: 'local' or 'global' (default: 'global')
14
+ * @param cwd - Current working directory for local scope
15
+ */
16
+ export declare function setEnv(key: string, value: string, scope?: "local" | "global", cwd?: string): void;
17
+ /**
18
+ * Get an environment variable with priority resolution
19
+ *
20
+ * Priority: local → global → default
21
+ *
22
+ * @param key - Variable key
23
+ * @param defaultValue - Default value if not found
24
+ * @param cwd - Current working directory for local scope
25
+ * @returns Resolution result with value and source
26
+ */
27
+ export declare function getEnv(key: string, defaultValue?: string, cwd?: string): EnvResolution | null;
28
+ /**
29
+ * Get just the value of an environment variable
30
+ *
31
+ * @param key - Variable key
32
+ * @param defaultValue - Default value if not found
33
+ * @param cwd - Current working directory for local scope
34
+ * @returns The value, or default/undefined if not found
35
+ */
36
+ export declare function getEnvValue(key: string, defaultValue?: string, cwd?: string): string | undefined;
37
+ /**
38
+ * Delete an environment variable
39
+ *
40
+ * @param key - Variable key
41
+ * @param scope - Where to delete from: 'local' or 'global' (default: 'global')
42
+ * @param cwd - Current working directory for local scope
43
+ * @returns true if variable existed and was deleted
44
+ */
45
+ export declare function deleteEnv(key: string, scope?: "local" | "global", cwd?: string): boolean;
46
+ /**
47
+ * List all environment variables from a scope
48
+ *
49
+ * @param scope - Which scope to list: 'local', 'global', or 'all'
50
+ * @param cwd - Current working directory for local scope
51
+ * @returns Array of environment variables with sources
52
+ */
53
+ export declare function listEnv(scope?: "local" | "global" | "all", cwd?: string): EnvironmentVariable[];
54
+ /**
55
+ * Get all environment variables with priority resolution
56
+ * Returns the effective value for each key (local overrides global)
57
+ *
58
+ * @param defaults - Default values for keys
59
+ * @param cwd - Current working directory for local scope
60
+ * @returns Map of key to resolution result
61
+ */
62
+ export declare function resolveAllEnv(defaults?: Record<string, string>, cwd?: string): Map<string, EnvResolution>;
63
+ /**
64
+ * Resolve environment variables for a tool manifest
65
+ * Checks that all required vars are present
66
+ *
67
+ * @param envDeclarations - Env declarations from manifest
68
+ * @param cwd - Current working directory
69
+ * @returns Object with resolved vars and any missing required vars
70
+ */
71
+ export declare function resolveToolEnv(envDeclarations: Record<string, {
72
+ description?: string;
73
+ default?: string;
74
+ secret?: boolean;
75
+ }>, cwd?: string): {
76
+ resolved: Map<string, EnvResolution>;
77
+ missing: string[];
78
+ };
79
+ /**
80
+ * Check if local .env exists
81
+ */
82
+ export declare function hasLocalEnv(cwd?: string): boolean;
83
+ /**
84
+ * Check if global .env exists
85
+ */
86
+ export declare function hasGlobalEnv(): boolean;
87
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/env/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAWnE;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,OAAO,GAAG,QAAmB,EACpC,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAMN;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAmC7F;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGhG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,OAAO,GAAG,QAAmB,EACpC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAKT;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,KAAK,GAAE,OAAO,GAAG,QAAQ,GAAG,KAAa,EACzC,GAAG,CAAC,EAAE,MAAM,GACX,mBAAmB,EAAE,CA6BvB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACrC,GAAG,CAAC,EAAE,MAAM,GACX,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CA+B5B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAC7F,GAAG,CAAC,EAAE,MAAM,GACX;IACD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAmBA;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}