@enactprotocol/secrets 2.0.0 → 2.0.1
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/dagger/index.d.ts +8 -0
- package/dist/dagger/index.d.ts.map +1 -0
- package/dist/dagger/index.js +8 -0
- package/dist/dagger/index.js.map +1 -0
- package/dist/dagger/secret-object.d.ts +49 -0
- package/dist/dagger/secret-object.d.ts.map +1 -0
- package/dist/dagger/secret-object.js +100 -0
- package/dist/dagger/secret-object.js.map +1 -0
- package/dist/dagger/uri-parser.d.ts +36 -0
- package/dist/dagger/uri-parser.d.ts.map +1 -0
- package/dist/dagger/uri-parser.js +179 -0
- package/dist/dagger/uri-parser.js.map +1 -0
- package/dist/env/index.d.ts +10 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +14 -0
- package/dist/env/index.js.map +1 -0
- package/dist/env/manager.d.ts +87 -0
- package/dist/env/manager.d.ts.map +1 -0
- package/dist/env/manager.js +204 -0
- package/dist/env/manager.js.map +1 -0
- package/dist/env/parser.d.ts +58 -0
- package/dist/env/parser.d.ts.map +1 -0
- package/dist/env/parser.js +211 -0
- package/dist/env/parser.js.map +1 -0
- package/dist/env/reader.d.ts +61 -0
- package/dist/env/reader.d.ts.map +1 -0
- package/dist/env/reader.js +92 -0
- package/dist/env/reader.js.map +1 -0
- package/dist/env/writer.d.ts +68 -0
- package/dist/env/writer.d.ts.map +1 -0
- package/dist/env/writer.js +108 -0
- package/dist/env/writer.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/keyring.d.ts +77 -0
- package/dist/keyring.d.ts.map +1 -0
- package/dist/keyring.js +123 -0
- package/dist/keyring.js.map +1 -0
- package/dist/resolver.d.ts +65 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +144 -0
- package/dist/resolver.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +1 -1
- package/tests/index.test.ts +12 -0
- package/tsconfig.tsbuildinfo +0 -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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzF;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,mCAAmC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,SAA+B,CAAC;IAE/C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,8BAA8B,MAAM,oBAAoB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK;QACL,QAAQ,EAAE,GAAG;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEnC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,IAAI;YACP,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,4BAA4B,OAAO,GAAG,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,wBAAwB;IACxB,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,iBAAiB,IAAI,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,gBAAgB,OAAO,MAAM,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,KAAK,GAAG,EAAE;YAC5C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,6BAA6B,KAAK,qDAAqD,OAAO,EAAE,CACjG,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,gCAAgC;IAChC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,8BAA8B,UAAU,GAAG,CAAC;QAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;YAC/B,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAEhD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,4BAA4B,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,sCAAsC,IAAI,8CAA8C,CACzF,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -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"}
|