@hubble-ventures/infisicml 1.2.1 → 2.1.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/CHANGELOG.md +103 -1
- package/README.md +123 -118
- package/dist/aliases.d.ts +11 -5
- package/dist/aliases.d.ts.map +1 -1
- package/dist/aliases.js +20 -12
- package/dist/aliases.js.map +1 -1
- package/dist/ci-skip.d.ts +32 -15
- package/dist/ci-skip.d.ts.map +1 -1
- package/dist/ci-skip.js +48 -39
- package/dist/ci-skip.js.map +1 -1
- package/dist/commands/export-gha.d.ts +16 -0
- package/dist/commands/export-gha.d.ts.map +1 -1
- package/dist/commands/export-gha.js +52 -43
- package/dist/commands/export-gha.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +17 -25
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/paths.d.ts.map +1 -1
- package/dist/commands/paths.js +15 -14
- package/dist/commands/paths.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +12 -9
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +10 -7
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +3 -13
- package/dist/commands/validate.js.map +1 -1
- package/dist/config.d.ts +4 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/github-env.js +1 -1
- package/dist/github-env.js.map +1 -1
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +2 -2
- package/dist/include.d.ts +6 -43
- package/dist/include.d.ts.map +1 -1
- package/dist/include.js +11 -67
- package/dist/include.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +59 -35
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +95 -86
- package/dist/manifest.js.map +1 -1
- package/dist/pull.d.ts.map +1 -1
- package/dist/pull.js +11 -16
- package/dist/pull.js.map +1 -1
- package/dist/registry.d.ts +28 -5
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +38 -13
- package/dist/registry.js.map +1 -1
- package/dist/tree.d.ts +49 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +190 -0
- package/dist/tree.js.map +1 -0
- package/package.json +5 -2
- package/schema/secrets.schema.json +49 -43
package/dist/ci-skip.d.ts
CHANGED
|
@@ -1,26 +1,43 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SecretsManifest } from "./manifest.js";
|
|
2
2
|
import type { SecretsProvider } from "./providers/types.js";
|
|
3
|
+
import type { CompiledFolder } from "./tree.js";
|
|
3
4
|
export type { SecretsProvider };
|
|
5
|
+
/** A folder's declared keys paired with the values that folder actually held. */
|
|
6
|
+
export type FolderSecrets = {
|
|
7
|
+
folder: CompiledFolder;
|
|
8
|
+
/** Declared keys present in this folder (canonical, pre-alias). */
|
|
9
|
+
selected: Record<string, string>;
|
|
10
|
+
};
|
|
4
11
|
export declare function mergeFolderSecrets(chunks: Record<string, string>[]): Record<string, string>;
|
|
5
|
-
export declare function fetchSecretsForPaths(provider: SecretsProvider, envName: string, paths: string[]): Promise<Record<string, string>>;
|
|
6
12
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
13
|
+
* Fetch each compiled folder and select *that folder's* declared keys from it,
|
|
14
|
+
* honoring the resolved `fetch` mode. `keys` mode requests only the declared
|
|
15
|
+
* keys per folder (the tree names the exact canonical vault keys, so no
|
|
16
|
+
* allowlist reverse-map is needed — the alias *source* is the real key);
|
|
17
|
+
* `folder` mode reads the whole folder and picks the declared keys locally.
|
|
18
|
+
*
|
|
19
|
+
* Returns one {@link FolderSecrets} per folder so downstream steps keep folder
|
|
20
|
+
* provenance: two folders declaring the same key name are distinct entries here,
|
|
21
|
+
* and only collapse (last-wins) at the final merge — see {@link materializeSecrets}.
|
|
11
22
|
*/
|
|
12
|
-
export declare function
|
|
23
|
+
export declare function fetchCompiledFolders(provider: SecretsProvider, envName: string, folders: CompiledFolder[], fetchMode: "folder" | "keys"): Promise<FolderSecrets[]>;
|
|
13
24
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
25
|
+
* Turn per-folder fetched secrets into the final emit map, preserving folder
|
|
26
|
+
* provenance:
|
|
27
|
+
*
|
|
28
|
+
* - **Missing keys are checked per folder/key pair, before merging.** A key
|
|
29
|
+
* declared in `/a` but absent from `/a` is unknown even if a same-named key in
|
|
30
|
+
* `/b` was produced — so a genuine miss can't be masked by another folder.
|
|
31
|
+
* - **Aliases expand from the folder-local value.** `/a`'s `TOKEN -> A_TOKEN`
|
|
32
|
+
* uses `/a`'s `TOKEN`, and `/b`'s `TOKEN -> B_TOKEN` uses `/b`'s — the flat
|
|
33
|
+
* merge (which keeps only one `TOKEN`) can no longer route one folder's secret
|
|
34
|
+
* to another folder's alias.
|
|
18
35
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
36
|
+
* Folder-local aliased maps then merge in tree order (last-wins on a genuine
|
|
37
|
+
* cross-folder name collision). A declared key absent from its folder fails
|
|
38
|
+
* unless its name is in `optionalKeys` for the environment.
|
|
22
39
|
*/
|
|
23
|
-
export declare function
|
|
40
|
+
export declare function materializeSecrets(folderSecrets: FolderSecrets[], optionalKeys: string[]): Record<string, string>;
|
|
24
41
|
export declare function isCi(): boolean;
|
|
25
42
|
export declare function shouldSkipInfisicalPull(manifest: SecretsManifest, force: boolean): boolean;
|
|
26
43
|
export declare function keysForCiStub(manifest: SecretsManifest): string[];
|
package/dist/ci-skip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-skip.d.ts","sourceRoot":"","sources":["../src/ci-skip.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ci-skip.d.ts","sourceRoot":"","sources":["../src/ci-skip.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,QAAQ,GAAG,MAAM,GAC3B,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,aAAa,EAAE,EAC9B,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxB;AAED,wBAAgB,IAAI,IAAI,OAAO,CAG9B;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,OAAO,GACb,OAAO,CAgBT;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,EAAE,CAEjE"}
|
package/dist/ci-skip.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { applyAliases } from "./aliases.js";
|
|
2
|
+
import { enforceKnownKeys } from "./include.js";
|
|
3
3
|
export function mergeFolderSecrets(chunks) {
|
|
4
4
|
const merged = {};
|
|
5
5
|
for (const chunk of chunks) {
|
|
@@ -7,52 +7,61 @@ export function mergeFolderSecrets(chunks) {
|
|
|
7
7
|
}
|
|
8
8
|
return merged;
|
|
9
9
|
}
|
|
10
|
-
export async function fetchSecretsForPaths(provider, envName, paths) {
|
|
11
|
-
const chunks = [];
|
|
12
|
-
for (const folder of paths) {
|
|
13
|
-
chunks.push(await provider.exportFolder(envName, folder));
|
|
14
|
-
}
|
|
15
|
-
return mergeFolderSecrets(chunks);
|
|
16
|
-
}
|
|
17
10
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
11
|
+
* Fetch each compiled folder and select *that folder's* declared keys from it,
|
|
12
|
+
* honoring the resolved `fetch` mode. `keys` mode requests only the declared
|
|
13
|
+
* keys per folder (the tree names the exact canonical vault keys, so no
|
|
14
|
+
* allowlist reverse-map is needed — the alias *source* is the real key);
|
|
15
|
+
* `folder` mode reads the whole folder and picks the declared keys locally.
|
|
16
|
+
*
|
|
17
|
+
* Returns one {@link FolderSecrets} per folder so downstream steps keep folder
|
|
18
|
+
* provenance: two folders declaring the same key name are distinct entries here,
|
|
19
|
+
* and only collapse (last-wins) at the final merge — see {@link materializeSecrets}.
|
|
22
20
|
*/
|
|
23
|
-
export async function
|
|
24
|
-
const
|
|
25
|
-
for (const folder of
|
|
26
|
-
|
|
21
|
+
export async function fetchCompiledFolders(provider, envName, folders, fetchMode) {
|
|
22
|
+
const out = [];
|
|
23
|
+
for (const folder of folders) {
|
|
24
|
+
const declared = folder.keys.map((k) => k.key);
|
|
25
|
+
const raw = fetchMode === "keys"
|
|
26
|
+
? await provider.exportKeys(envName, folder.path, declared)
|
|
27
|
+
: await provider.exportFolder(envName, folder.path);
|
|
28
|
+
const selected = {};
|
|
29
|
+
for (const key of declared) {
|
|
30
|
+
if (key in raw)
|
|
31
|
+
selected[key] = raw[key];
|
|
32
|
+
}
|
|
33
|
+
out.push({ folder, selected });
|
|
27
34
|
}
|
|
28
|
-
return
|
|
35
|
+
return out;
|
|
29
36
|
}
|
|
30
37
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
38
|
+
* Turn per-folder fetched secrets into the final emit map, preserving folder
|
|
39
|
+
* provenance:
|
|
40
|
+
*
|
|
41
|
+
* - **Missing keys are checked per folder/key pair, before merging.** A key
|
|
42
|
+
* declared in `/a` but absent from `/a` is unknown even if a same-named key in
|
|
43
|
+
* `/b` was produced — so a genuine miss can't be masked by another folder.
|
|
44
|
+
* - **Aliases expand from the folder-local value.** `/a`'s `TOKEN -> A_TOKEN`
|
|
45
|
+
* uses `/a`'s `TOKEN`, and `/b`'s `TOKEN -> B_TOKEN` uses `/b`'s — the flat
|
|
46
|
+
* merge (which keeps only one `TOKEN`) can no longer route one folder's secret
|
|
47
|
+
* to another folder's alias.
|
|
35
48
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
49
|
+
* Folder-local aliased maps then merge in tree order (last-wins on a genuine
|
|
50
|
+
* cross-folder name collision). A declared key absent from its folder fails
|
|
51
|
+
* unless its name is in `optionalKeys` for the environment.
|
|
39
52
|
*/
|
|
40
|
-
export
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const where = profile
|
|
48
|
-
? `neither profile "${profile}" nor the manifest root defines one`
|
|
49
|
-
: "the manifest root does not define one";
|
|
50
|
-
throw new Error(`fetch: "keys" requires an include allowlist, but ${where}. ` +
|
|
51
|
-
"Add `include: [...]` naming exactly which keys to request from the vault.");
|
|
53
|
+
export function materializeSecrets(folderSecrets, optionalKeys) {
|
|
54
|
+
const unknown = [];
|
|
55
|
+
const chunks = [];
|
|
56
|
+
for (const { folder, selected } of folderSecrets) {
|
|
57
|
+
for (const key of folder.keys) {
|
|
58
|
+
if (!(key.key in selected))
|
|
59
|
+
unknown.push(key.key);
|
|
52
60
|
}
|
|
53
|
-
|
|
61
|
+
chunks.push(applyAliases(selected, [folder]));
|
|
54
62
|
}
|
|
55
|
-
|
|
63
|
+
enforceKnownKeys(unknown, optionalKeys);
|
|
64
|
+
return mergeFolderSecrets(chunks);
|
|
56
65
|
}
|
|
57
66
|
export function isCi() {
|
|
58
67
|
const ci = process.env.CI;
|
package/dist/ci-skip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-skip.js","sourceRoot":"","sources":["../src/ci-skip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ci-skip.js","sourceRoot":"","sources":["../src/ci-skip.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CompiledFolder } from "../tree.js";
|
|
1
2
|
export type ExportGhaOptions = {
|
|
2
3
|
packageId: string;
|
|
3
4
|
env: string;
|
|
@@ -7,5 +8,20 @@ export type ExportGhaOptions = {
|
|
|
7
8
|
projectSlug?: string;
|
|
8
9
|
identityId?: string;
|
|
9
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* Canonical (pre-alias) key names to advertise, split runtime vs all.
|
|
13
|
+
*
|
|
14
|
+
* Classification is by **(path, key)** against the base tree, not by folder path
|
|
15
|
+
* alone: a profile can reuse a base folder path and add deploy-only keys, so a
|
|
16
|
+
* key counts as runtime only if the base tree declares *that key* under *that
|
|
17
|
+
* path*. This keeps a deploy-only credential in a shared folder out of the
|
|
18
|
+
* runtime-scoped advertise set (and thus out of runtime deploy forwarding).
|
|
19
|
+
* Only keys actually in `emitted` are advertised, so an absent optional key is
|
|
20
|
+
* never named.
|
|
21
|
+
*/
|
|
22
|
+
export declare function computeAdvertiseKeys(allFolders: CompiledFolder[], baseFolders: CompiledFolder[], emitted: Record<string, string>): {
|
|
23
|
+
runtimeKeys: string[];
|
|
24
|
+
allKeys: string[];
|
|
25
|
+
};
|
|
10
26
|
export declare function runExportGha(options: ExportGhaOptions): Promise<void>;
|
|
11
27
|
//# sourceMappingURL=export-gha.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-gha.d.ts","sourceRoot":"","sources":["../../src/commands/export-gha.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export-gha.d.ts","sourceRoot":"","sources":["../../src/commands/export-gha.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,cAAc,EAAE,EAC5B,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAiB9C;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE3E"}
|
|
@@ -1,14 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { fetchManifestSecrets } from "../ci-skip.js";
|
|
1
|
+
import { fetchCompiledFolders, materializeSecrets } from "../ci-skip.js";
|
|
3
2
|
import { loadConfig } from "../config.js";
|
|
4
3
|
import { normalizeEnvSlug } from "../env-slug.js";
|
|
5
4
|
import { appendSecretsToGithubEnv } from "../github-env.js";
|
|
6
5
|
import { runAdvertiseKeysHooks } from "../hooks.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { logMissingOptionalKeys, resolveOptionalKeys, } from "../optional-keys.js";
|
|
6
|
+
import { normalizeFolderPath, resolveCompiledFolders, resolveFetchMode, } from "../manifest.js";
|
|
7
|
+
import { resolveOptionalKeys } from "../optional-keys.js";
|
|
10
8
|
import { RemoteProvider } from "../providers/remote.js";
|
|
11
|
-
import {
|
|
9
|
+
import { discoverPackages, loadPackage } from "../registry.js";
|
|
10
|
+
/**
|
|
11
|
+
* Canonical (pre-alias) key names to advertise, split runtime vs all.
|
|
12
|
+
*
|
|
13
|
+
* Classification is by **(path, key)** against the base tree, not by folder path
|
|
14
|
+
* alone: a profile can reuse a base folder path and add deploy-only keys, so a
|
|
15
|
+
* key counts as runtime only if the base tree declares *that key* under *that
|
|
16
|
+
* path*. This keeps a deploy-only credential in a shared folder out of the
|
|
17
|
+
* runtime-scoped advertise set (and thus out of runtime deploy forwarding).
|
|
18
|
+
* Only keys actually in `emitted` are advertised, so an absent optional key is
|
|
19
|
+
* never named.
|
|
20
|
+
*/
|
|
21
|
+
export function computeAdvertiseKeys(allFolders, baseFolders, emitted) {
|
|
22
|
+
const baseKeysByPath = new Map();
|
|
23
|
+
for (const f of baseFolders) {
|
|
24
|
+
baseKeysByPath.set(f.path, new Set(f.keys.map((k) => k.key)));
|
|
25
|
+
}
|
|
26
|
+
const runtimeKeys = new Set();
|
|
27
|
+
const allKeys = new Set();
|
|
28
|
+
for (const folder of allFolders) {
|
|
29
|
+
for (const key of folder.keys) {
|
|
30
|
+
if (emitted[key.key] === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
allKeys.add(key.key);
|
|
33
|
+
if (baseKeysByPath.get(folder.path)?.has(key.key)) {
|
|
34
|
+
runtimeKeys.add(key.key);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { runtimeKeys: [...runtimeKeys], allKeys: [...allKeys] };
|
|
39
|
+
}
|
|
12
40
|
export async function runExportGha(options) {
|
|
13
41
|
const config = await loadConfig(options.cwd);
|
|
14
42
|
const envName = normalizeEnvSlug(process.env.INFISICAL_ENV_SLUG ?? options.env);
|
|
@@ -20,18 +48,16 @@ export async function runExportGha(options) {
|
|
|
20
48
|
if (!projectSlug) {
|
|
21
49
|
throw new Error("INFISICAL_PROJECT_SLUG required");
|
|
22
50
|
}
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
if (!manifest) {
|
|
51
|
+
const ref = discoverPackages(config).find((p) => p.id === options.packageId);
|
|
52
|
+
if (!ref) {
|
|
26
53
|
throw new Error(`Unknown package id: ${options.packageId}`);
|
|
27
54
|
}
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const deployOnlyPaths = allPaths.filter((p) => !runtimePaths.includes(p));
|
|
55
|
+
const manifest = loadPackage(ref);
|
|
56
|
+
// The base tree holds the app's runtime secrets; a profile (e.g. `deploy`)
|
|
57
|
+
// may replace it with a superset that also carries deploy-time credentials.
|
|
58
|
+
const allFolders = resolveCompiledFolders(manifest.config, options.profile);
|
|
59
|
+
const baseFolders = resolveCompiledFolders(manifest.config);
|
|
60
|
+
const fetchMode = resolveFetchMode(manifest.config, options.profile);
|
|
35
61
|
const identityId = options.identityId ?? process.env.INFISICAL_IDENTITY_ID;
|
|
36
62
|
if (!identityId) {
|
|
37
63
|
throw new Error("INFISICAL_IDENTITY_ID required — infisicml CI auth is GitHub OIDC only (no client-id/secret fallback). Set `permissions: id-token: write` on the job.");
|
|
@@ -42,38 +68,21 @@ export async function runExportGha(options) {
|
|
|
42
68
|
identityId,
|
|
43
69
|
oidcAudience: process.env.INFISICAL_OIDC_AUDIENCE ?? config.auth?.oidcAudience,
|
|
44
70
|
});
|
|
45
|
-
for (const folder of
|
|
46
|
-
console.log(`Loading Infisical path ${normalizeFolderPath(folder)} (${envName})`);
|
|
71
|
+
for (const folder of allFolders) {
|
|
72
|
+
console.log(`Loading Infisical path ${normalizeFolderPath(folder.path)} (${envName})`);
|
|
47
73
|
}
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
: {};
|
|
74
|
+
// One per-folder fetch (token cached across folders). Per-folder alias
|
|
75
|
+
// expansion + missing-key enforcement (before the merge) keeps provenance, so
|
|
76
|
+
// a key declared in two folders can't have one folder's miss masked by the
|
|
77
|
+
// other, nor one folder's value routed to the other's alias.
|
|
78
|
+
const folderSecrets = await fetchCompiledFolders(provider, envName, allFolders, fetchMode);
|
|
54
79
|
const optionalKeys = resolveOptionalKeys(manifest.config, envName);
|
|
55
|
-
const
|
|
56
|
-
// Default-deny key selection: emit only the allowlisted keys when `include`
|
|
57
|
-
// is set. Absent = emit all.
|
|
58
|
-
const include = resolveInclude(manifest.config, options.profile);
|
|
59
|
-
// Notice missing optional keys against the pre-include set — a key present in
|
|
60
|
-
// the folders but filtered out by `include` isn't "missing". Skip keys the
|
|
61
|
-
// allowlist governs: those get a single notice from selectEmittedSecrets'
|
|
62
|
-
// unknown-key check, so we don't emit two notices for the same absent key.
|
|
63
|
-
const includeSet = new Set(include ?? []);
|
|
64
|
-
logMissingOptionalKeys(aliased, optionalKeys.filter((k) => !includeSet.has(k)));
|
|
65
|
-
const merged = selectEmittedSecrets(aliased, include, optionalKeys);
|
|
80
|
+
const merged = materializeSecrets(folderSecrets, optionalKeys);
|
|
66
81
|
appendSecretsToGithubEnv(githubEnvPath, merged);
|
|
67
82
|
// Advertise CANONICAL (pre-alias) key names. Alias targets (e.g.
|
|
68
83
|
// NEXT_PUBLIC_*) are build-tool copies, not the names a server runtime reads,
|
|
69
84
|
// so they are intentionally not advertised — they still land in the job env
|
|
70
|
-
// via `merged` for build steps that need them.
|
|
71
|
-
|
|
72
|
-
// then in `merged`) so we never advertise a name not in the job env.
|
|
73
|
-
const emitted = (keys) => keys.filter((k) => merged[k] !== undefined);
|
|
74
|
-
runAdvertiseKeysHooks(githubEnvPath, config.hooks?.advertiseKeys, {
|
|
75
|
-
runtimeKeys: emitted(Object.keys(runtimeSecrets)),
|
|
76
|
-
allKeys: emitted(Object.keys({ ...runtimeSecrets, ...deployOnlySecrets })),
|
|
77
|
-
});
|
|
85
|
+
// via `merged` for build steps that need them.
|
|
86
|
+
runAdvertiseKeysHooks(githubEnvPath, config.hooks?.advertiseKeys, computeAdvertiseKeys(allFolders, baseFolders, merged));
|
|
78
87
|
}
|
|
79
88
|
//# sourceMappingURL=export-gha.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-gha.js","sourceRoot":"","sources":["../../src/commands/export-gha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"export-gha.js","sourceRoot":"","sources":["../../src/commands/export-gha.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAoBA,wBAAsB,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzD"}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,34 +1,26 @@
|
|
|
1
1
|
import { loadConfig } from "../config.js";
|
|
2
|
-
import { normalizeFolderPath } from "../manifest.js";
|
|
2
|
+
import { normalizeFolderPath, resolveCompiledFolders, resolveFetchMode, } from "../manifest.js";
|
|
3
3
|
import { discoverManifests } from "../registry.js";
|
|
4
|
+
function printFolders(folders, indent) {
|
|
5
|
+
for (const folder of folders) {
|
|
6
|
+
console.log(`${indent}${normalizeFolderPath(folder.path)}`);
|
|
7
|
+
for (const key of folder.keys) {
|
|
8
|
+
const alias = key.aliases.length > 0 ? ` → ${key.aliases.join(", ")}` : "";
|
|
9
|
+
console.log(`${indent} ${key.key}${alias}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
4
13
|
export async function runList(cwd) {
|
|
5
14
|
const config = await loadConfig(cwd);
|
|
6
15
|
const manifests = discoverManifests(config);
|
|
7
16
|
for (const { id, config: m } of manifests) {
|
|
8
|
-
const
|
|
9
|
-
console.log(` ${id}:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
if (m.profiles) {
|
|
17
|
-
for (const [name, profile] of Object.entries(m.profiles)) {
|
|
18
|
-
const profilePaths = profile.paths
|
|
19
|
-
.map((p) => normalizeFolderPath(p))
|
|
20
|
-
.join(", ");
|
|
21
|
-
console.log(` [${name}]: ${profilePaths}`);
|
|
22
|
-
// A profile include/fetch replaces the root value; show whichever applies.
|
|
23
|
-
const effectiveInclude = profile.include ?? m.include;
|
|
24
|
-
if (effectiveInclude) {
|
|
25
|
-
console.log(` include: ${effectiveInclude.join(", ")}`);
|
|
26
|
-
}
|
|
27
|
-
const effectiveFetch = profile.fetch ?? m.fetch;
|
|
28
|
-
if (effectiveFetch) {
|
|
29
|
-
console.log(` fetch: ${effectiveFetch}`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
17
|
+
const fetch = resolveFetchMode(m);
|
|
18
|
+
console.log(` ${id}${fetch === "keys" ? " (fetch: keys)" : ""}:`);
|
|
19
|
+
printFolders(resolveCompiledFolders(m), " ");
|
|
20
|
+
for (const name of Object.keys(m.profiles ?? {})) {
|
|
21
|
+
const profileFetch = resolveFetchMode(m, name);
|
|
22
|
+
console.log(` [${name}]${profileFetch === "keys" ? " (fetch: keys)" : ""}:`);
|
|
23
|
+
printFolders(resolveCompiledFolders(m, name), " ");
|
|
32
24
|
}
|
|
33
25
|
}
|
|
34
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,SAAS,YAAY,CAAC,OAAyB,EAAE,MAAc;IAC7D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,KAAK,GACT,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY;IACxC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE5C,KAAK,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnE,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YACjD,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CACT,QAAQ,IAAI,IAAI,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CACnE,CAAC;YACF,YAAY,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/commands/paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/commands/paths.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCnE"}
|
package/dist/commands/paths.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import { loadConfig } from "../config.js";
|
|
2
|
-
import { normalizeFolderPath,
|
|
3
|
-
import {
|
|
2
|
+
import { normalizeFolderPath, resolveCompiledFolders, resolveFetchMode, } from "../manifest.js";
|
|
3
|
+
import { discoverPackages, loadPackage } from "../registry.js";
|
|
4
4
|
export async function runPaths(options) {
|
|
5
5
|
const config = await loadConfig(options.cwd);
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
if (!manifest) {
|
|
6
|
+
const ref = discoverPackages(config).find((p) => p.id === options.packageId);
|
|
7
|
+
if (!ref) {
|
|
9
8
|
throw new Error(`Unknown package id: ${options.packageId}`);
|
|
10
9
|
}
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
// `
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
const manifest = loadPackage(ref);
|
|
11
|
+
const folders = resolveCompiledFolders(manifest.config, options.profile);
|
|
12
|
+
const normalized = folders.map((f) => normalizeFolderPath(f.path));
|
|
13
|
+
// `paths` feeds the infisical CLI, which fetches whole folders — the tree's
|
|
14
|
+
// per-folder key selection happens later, in pull/export-gha. Note on stderr
|
|
15
|
+
// which keys each folder emits so the selection isn't invisible to someone
|
|
16
|
+
// reading only this folder list.
|
|
17
|
+
for (const folder of folders) {
|
|
18
|
+
const keys = folder.keys.map((k) => k.key).join(", ");
|
|
19
|
+
console.error(`# note: ${normalizeFolderPath(folder.path)} emits: ${keys}`);
|
|
19
20
|
}
|
|
20
21
|
if (resolveFetchMode(manifest.config, options.profile) === "keys") {
|
|
21
|
-
console.error(`# note: ${options.packageId} uses fetch: "keys" — only the
|
|
22
|
+
console.error(`# note: ${options.packageId} uses fetch: "keys" — only the declared keys are read, per-key from the vault (wire-level least privilege).`);
|
|
22
23
|
}
|
|
23
24
|
if (options.comma) {
|
|
24
25
|
console.log(normalized.map((p) => p.replace(/^\//, "")).join(","));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/commands/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/commands/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAS/D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,SAAS,CAClC,CAAC;IACF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,sBAAsB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnE,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,iCAAiC;IACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,WAAW,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;QAClE,OAAO,CAAC,KAAK,CACX,WAAW,OAAO,CAAC,SAAS,6GAA6G,CAC1I,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EjE"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -3,7 +3,7 @@ import { loadConfig } from "../config.js";
|
|
|
3
3
|
import { shouldSkipInfisicalPull } from "../ci-skip.js";
|
|
4
4
|
import { commandExists, LocalProvider } from "../providers/local.js";
|
|
5
5
|
import { pullManifest } from "../pull.js";
|
|
6
|
-
import {
|
|
6
|
+
import { discoverPackages, loadPackage } from "../registry.js";
|
|
7
7
|
export async function runPull(options) {
|
|
8
8
|
const config = await loadConfig(options.cwd);
|
|
9
9
|
const repoRoot = config.repoRoot;
|
|
@@ -11,27 +11,30 @@ export async function runPull(options) {
|
|
|
11
11
|
if (!config.projectId) {
|
|
12
12
|
throw new Error("INFISICAL_PROJECT_ID not resolved — set config.projectId, projectIdEnvFile, or the INFISICAL_PROJECT_ID env var");
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
// Select target packages first, then load only those — so an unrelated
|
|
15
|
+
// package with an ambiguous or invalid manifest never blocks a scoped pull.
|
|
16
|
+
let targets = discoverPackages(config);
|
|
15
17
|
if (options.here) {
|
|
16
18
|
const cwd = process.cwd();
|
|
17
|
-
const match =
|
|
19
|
+
const match = targets.find((p) => resolve(p.dir) === resolve(cwd));
|
|
18
20
|
if (!match) {
|
|
19
|
-
throw new Error(`No secrets
|
|
21
|
+
throw new Error(`No secrets manifest in ${cwd}`);
|
|
20
22
|
}
|
|
21
|
-
|
|
23
|
+
targets = [match];
|
|
22
24
|
}
|
|
23
25
|
else if (options.ids.length > 0) {
|
|
24
26
|
const allowed = new Set(options.ids);
|
|
25
|
-
|
|
26
|
-
const missing = options.ids.filter((id) => !
|
|
27
|
+
targets = targets.filter((p) => allowed.has(p.id));
|
|
28
|
+
const missing = options.ids.filter((id) => !targets.some((p) => p.id === id));
|
|
27
29
|
if (missing.length > 0) {
|
|
28
30
|
throw new Error(`Unknown package id(s): ${missing.join(", ")}`);
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
|
-
if (
|
|
32
|
-
console.log("No secrets
|
|
33
|
+
if (targets.length === 0) {
|
|
34
|
+
console.log("No secrets manifests found.");
|
|
33
35
|
return;
|
|
34
36
|
}
|
|
37
|
+
const manifests = targets.map(loadPackage);
|
|
35
38
|
// The infisical CLI is only needed for manifests that will actually pull.
|
|
36
39
|
// Mirror pullManifest's own skip decision exactly so CI stubs never demand a
|
|
37
40
|
// tool they don't use.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|