dc-ops-cli 1.5.0 → 1.7.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/dist/commands/get-many.d.ts +27 -0
- package/dist/commands/get-many.d.ts.map +1 -0
- package/dist/commands/get-many.js +158 -0
- package/dist/commands/get-many.js.map +1 -0
- package/dist/commands/run.d.ts +5 -4
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +39 -23
- package/dist/commands/run.js.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +5 -2
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/config.d.ts +25 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +101 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/env-mapping.d.ts +9 -0
- package/dist/utils/env-mapping.d.ts.map +1 -0
- package/dist/utils/env-mapping.js +57 -0
- package/dist/utils/env-mapping.js.map +1 -0
- package/dist/utils/session-cache.d.ts +24 -0
- package/dist/utils/session-cache.d.ts.map +1 -0
- package/dist/utils/session-cache.js +101 -0
- package/dist/utils/session-cache.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getSecret, checkOpCli, getItem, getDefaultFieldForCategory } from '../utils/op.js';
|
|
2
|
+
import { applyColorConfig, createSpinner, resolveBooleanOption, resolveField, resolveVault } from '../utils/cli.js';
|
|
3
|
+
export interface GetManyOptions {
|
|
4
|
+
vault?: string;
|
|
5
|
+
field?: string;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
env?: boolean;
|
|
8
|
+
plain?: boolean;
|
|
9
|
+
quiet?: boolean;
|
|
10
|
+
color?: boolean;
|
|
11
|
+
parallel?: number;
|
|
12
|
+
continueOnError?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface GetManyDependencies {
|
|
15
|
+
getSecret: typeof getSecret;
|
|
16
|
+
checkOpCli: typeof checkOpCli;
|
|
17
|
+
getItem: typeof getItem;
|
|
18
|
+
getDefaultFieldForCategory: typeof getDefaultFieldForCategory;
|
|
19
|
+
applyColorConfig: typeof applyColorConfig;
|
|
20
|
+
createSpinner: typeof createSpinner;
|
|
21
|
+
resolveBooleanOption: typeof resolveBooleanOption;
|
|
22
|
+
resolveField: typeof resolveField;
|
|
23
|
+
resolveVault: typeof resolveVault;
|
|
24
|
+
}
|
|
25
|
+
export declare function createGetManyCommand(overrides?: Partial<GetManyDependencies>): (names: string[], options: GetManyOptions) => Promise<void>;
|
|
26
|
+
export declare const getManyCommand: (names: string[], options: GetManyOptions) => Promise<void>;
|
|
27
|
+
//# sourceMappingURL=get-many.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-many.d.ts","sourceRoot":"","sources":["../../src/commands/get-many.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,0BAA0B,EAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACb,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAClD,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC;AA2ED,wBAAgB,oBAAoB,CAClC,SAAS,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC3C,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAmJ7D;AAED,eAAO,MAAM,cAAc,UArJhB,MAAM,EAAE,WAAW,cAAc,KAAK,OAAO,CAAC,IAAI,CAqJT,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getSecret, checkOpCli, getItem, getDefaultFieldForCategory, } from '../utils/op.js';
|
|
3
|
+
import { applyColorConfig, createSpinner, resolveBooleanOption, resolveField, resolveVault, } from '../utils/cli.js';
|
|
4
|
+
import { OpError } from '../utils/types.js';
|
|
5
|
+
const defaultDependencies = {
|
|
6
|
+
getSecret,
|
|
7
|
+
checkOpCli,
|
|
8
|
+
getItem,
|
|
9
|
+
getDefaultFieldForCategory,
|
|
10
|
+
applyColorConfig,
|
|
11
|
+
createSpinner,
|
|
12
|
+
resolveBooleanOption,
|
|
13
|
+
resolveField,
|
|
14
|
+
resolveVault,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Fetch a single secret with smart field detection
|
|
18
|
+
*/
|
|
19
|
+
function fetchSecret(name, vault, defaultField, deps) {
|
|
20
|
+
try {
|
|
21
|
+
// Smart field detection: check item category
|
|
22
|
+
let field = defaultField;
|
|
23
|
+
const item = deps.getItem(name, vault);
|
|
24
|
+
if (item?.category) {
|
|
25
|
+
field = deps.getDefaultFieldForCategory(item.category);
|
|
26
|
+
}
|
|
27
|
+
const value = deps.getSecret(name, vault, field);
|
|
28
|
+
return { name, value };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
32
|
+
return { name, value: null, error: message };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Fetch multiple secrets in parallel with concurrency limit
|
|
37
|
+
*/
|
|
38
|
+
async function fetchSecretsParallel(names, vault, field, parallelism, deps) {
|
|
39
|
+
const results = [];
|
|
40
|
+
const chunks = [];
|
|
41
|
+
// Split names into chunks for controlled parallelism
|
|
42
|
+
for (let i = 0; i < names.length; i += parallelism) {
|
|
43
|
+
chunks.push(names.slice(i, i + parallelism));
|
|
44
|
+
}
|
|
45
|
+
for (const chunk of chunks) {
|
|
46
|
+
const chunkResults = await Promise.all(chunk.map((name) => Promise.resolve(fetchSecret(name, vault, field, deps))));
|
|
47
|
+
results.push(...chunkResults);
|
|
48
|
+
}
|
|
49
|
+
return results;
|
|
50
|
+
}
|
|
51
|
+
export function createGetManyCommand(overrides = {}) {
|
|
52
|
+
const deps = { ...defaultDependencies, ...overrides };
|
|
53
|
+
return async function getManyCommand(names, options) {
|
|
54
|
+
try {
|
|
55
|
+
// Validate at least one name provided
|
|
56
|
+
if (!names || names.length === 0) {
|
|
57
|
+
throw new OpError('At least one secret name is required.', 2);
|
|
58
|
+
}
|
|
59
|
+
deps.checkOpCli();
|
|
60
|
+
// Validate output format options
|
|
61
|
+
const outputFormats = [options.json, options.env, options.plain].filter(Boolean);
|
|
62
|
+
if (outputFormats.length > 1) {
|
|
63
|
+
throw new OpError('Use only one of --json, --env, or --plain.', 2);
|
|
64
|
+
}
|
|
65
|
+
const vault = deps.resolveVault(options.vault);
|
|
66
|
+
const field = deps.resolveField(options.field);
|
|
67
|
+
const parallelism = options.parallel ?? 5;
|
|
68
|
+
const continueOnError = options.continueOnError ?? false;
|
|
69
|
+
const envQuiet = deps.resolveBooleanOption(undefined, 'OPS_QUIET');
|
|
70
|
+
const quiet = options.quiet === true || envQuiet;
|
|
71
|
+
const envNoColor = deps.resolveBooleanOption(undefined, 'OPS_NO_COLOR');
|
|
72
|
+
const noColor = options.color === false || envNoColor;
|
|
73
|
+
deps.applyColorConfig(noColor);
|
|
74
|
+
const outputMode = options.json
|
|
75
|
+
? 'json'
|
|
76
|
+
: options.env
|
|
77
|
+
? 'env'
|
|
78
|
+
: options.plain
|
|
79
|
+
? 'plain'
|
|
80
|
+
: 'human';
|
|
81
|
+
const quietSpinner = quiet || outputMode !== 'human';
|
|
82
|
+
const spinner = deps.createSpinner(`Fetching ${names.length} secret${names.length > 1 ? 's' : ''} from 1Password...`, quietSpinner);
|
|
83
|
+
// Fetch all secrets in parallel
|
|
84
|
+
const results = await fetchSecretsParallel(names, vault, field, parallelism, deps);
|
|
85
|
+
// Check for errors
|
|
86
|
+
const failures = results.filter((r) => r.value === null);
|
|
87
|
+
const successes = results.filter((r) => r.value !== null);
|
|
88
|
+
if (failures.length > 0 && !continueOnError) {
|
|
89
|
+
if (!quietSpinner) {
|
|
90
|
+
spinner.fail(chalk.yellow(`Failed to retrieve ${failures.length} of ${names.length} secrets`));
|
|
91
|
+
}
|
|
92
|
+
// Show which ones failed
|
|
93
|
+
for (const failure of failures) {
|
|
94
|
+
console.error(chalk.red(` ✗ ${failure.name}: ${failure.error || 'not found'}`));
|
|
95
|
+
}
|
|
96
|
+
throw new OpError(`Failed to retrieve ${failures.length} secret(s). Use --continue-on-error to skip failures.`, 1);
|
|
97
|
+
}
|
|
98
|
+
if (!quietSpinner) {
|
|
99
|
+
if (failures.length > 0) {
|
|
100
|
+
spinner.warn(chalk.yellow(`Retrieved ${successes.length} of ${names.length} secrets (${failures.length} failed)`));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
spinner.succeed(chalk.green(`Retrieved ${successes.length} secret${successes.length > 1 ? 's' : ''}!`));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Output based on format
|
|
107
|
+
if (outputMode === 'json') {
|
|
108
|
+
const output = {};
|
|
109
|
+
for (const result of results) {
|
|
110
|
+
output[result.name] = result.value;
|
|
111
|
+
}
|
|
112
|
+
console.log(JSON.stringify(output, null, 2));
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (outputMode === 'env') {
|
|
116
|
+
for (const result of results) {
|
|
117
|
+
if (result.value !== null) {
|
|
118
|
+
// Escape special characters for shell
|
|
119
|
+
const escaped = result.value
|
|
120
|
+
.replace(/\\/g, '\\\\')
|
|
121
|
+
.replace(/"/g, '\\"')
|
|
122
|
+
.replace(/\$/g, '\\$')
|
|
123
|
+
.replace(/`/g, '\\`');
|
|
124
|
+
console.log(`${result.name}="${escaped}"`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (outputMode === 'plain') {
|
|
130
|
+
for (const result of results) {
|
|
131
|
+
console.log(result.value ?? '');
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// Human-readable output
|
|
136
|
+
if (!quiet) {
|
|
137
|
+
console.log(chalk.cyan('\nSecrets:'));
|
|
138
|
+
}
|
|
139
|
+
for (const result of results) {
|
|
140
|
+
if (result.value !== null) {
|
|
141
|
+
console.log(chalk.white(` ${result.name}: ${result.value}`));
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
console.log(chalk.red(` ${result.name}: (not found)`));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (error instanceof OpError) {
|
|
150
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
151
|
+
process.exit(error.exitCode);
|
|
152
|
+
}
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export const getManyCommand = createGetManyCommand();
|
|
158
|
+
//# sourceMappingURL=get-many.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-many.js","sourceRoot":"","sources":["../../src/commands/get-many.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/run.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from 'fs';
|
|
2
1
|
import spawn from 'cross-spawn';
|
|
3
2
|
import { checkOpCli, getSecret } from '../utils/op.js';
|
|
3
|
+
import { loadEnvMappingFile } from '../utils/env-mapping.js';
|
|
4
|
+
import { OpsConfig } from '../utils/config.js';
|
|
4
5
|
export interface RunOptions {
|
|
5
6
|
vault?: string;
|
|
6
7
|
field?: string;
|
|
@@ -8,6 +9,7 @@ export interface RunOptions {
|
|
|
8
9
|
envFile?: string;
|
|
9
10
|
color?: boolean;
|
|
10
11
|
verbose?: boolean;
|
|
12
|
+
parallel?: number;
|
|
11
13
|
}
|
|
12
14
|
export interface ProcessLike {
|
|
13
15
|
env: NodeJS.ProcessEnv;
|
|
@@ -18,11 +20,10 @@ export interface ProcessLike {
|
|
|
18
20
|
export interface RunDependencies {
|
|
19
21
|
getSecret: typeof getSecret;
|
|
20
22
|
checkOpCli: typeof checkOpCli;
|
|
21
|
-
|
|
22
|
-
existsSync: typeof existsSync;
|
|
23
|
-
parseEnv: (content: string) => Record<string, string>;
|
|
23
|
+
loadEnvMappingFile: typeof loadEnvMappingFile;
|
|
24
24
|
spawn: typeof spawn;
|
|
25
25
|
process: ProcessLike;
|
|
26
|
+
loadConfig: () => OpsConfig;
|
|
26
27
|
}
|
|
27
28
|
export declare function createRunCommand(overrides?: Partial<RunDependencies>): (command: string[], options: RunOptions) => Promise<void>;
|
|
28
29
|
export declare const runCommand: (command: string[], options: RunOptions) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAc,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,SAAS,CAAC;CAC7B;AAmGD,wBAAgB,gBAAgB,CAC9B,SAAS,GAAE,OAAO,CAAC,eAAe,CAAM,GACvC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAiG3D;AAED,eAAO,MAAM,UAAU,YAnGV,MAAM,EAAE,WAAW,UAAU,KAAK,OAAO,CAAC,IAAI,CAmGf,CAAC"}
|
package/dist/commands/run.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from 'fs';
|
|
2
1
|
import chalk from 'chalk';
|
|
3
2
|
import spawn from 'cross-spawn';
|
|
4
|
-
import dotenv from 'dotenv';
|
|
5
3
|
import { checkOpCli, getSecret } from '../utils/op.js';
|
|
6
4
|
import { applyColorConfig, resolveBooleanOption, resolveField, resolveVault, } from '../utils/cli.js';
|
|
7
5
|
import { OpError } from '../utils/types.js';
|
|
6
|
+
import { loadEnvMappingFile } from '../utils/env-mapping.js';
|
|
7
|
+
import { loadConfig } from '../utils/config.js';
|
|
8
8
|
const DEFAULT_ENV_FILE = '.env.ops';
|
|
9
|
+
const DEFAULT_PARALLELISM = 5;
|
|
9
10
|
function parseEnvPairs(pairs) {
|
|
10
11
|
if (!pairs || pairs.length === 0)
|
|
11
12
|
return {};
|
|
@@ -24,27 +25,46 @@ function parseEnvPairs(pairs) {
|
|
|
24
25
|
}
|
|
25
26
|
return mapping;
|
|
26
27
|
}
|
|
27
|
-
function
|
|
28
|
-
if (
|
|
29
|
-
return
|
|
28
|
+
function resolveParallelism(optionValue, config) {
|
|
29
|
+
if (typeof optionValue === 'number' && optionValue > 0)
|
|
30
|
+
return optionValue;
|
|
31
|
+
const envValue = process.env.OPS_PARALLEL;
|
|
32
|
+
if (envValue) {
|
|
33
|
+
const parsed = Number.parseInt(envValue, 10);
|
|
34
|
+
if (!Number.isNaN(parsed) && parsed > 0)
|
|
35
|
+
return parsed;
|
|
30
36
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return deps.parseEnv(content);
|
|
37
|
+
if (typeof config.parallel === 'number' && config.parallel > 0) {
|
|
38
|
+
return config.parallel;
|
|
34
39
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
return DEFAULT_PARALLELISM;
|
|
41
|
+
}
|
|
42
|
+
async function resolveSecrets(mapping, vault, field, parallelism, deps) {
|
|
43
|
+
const entries = Object.entries(mapping);
|
|
44
|
+
const results = [];
|
|
45
|
+
const chunks = [];
|
|
46
|
+
for (let i = 0; i < entries.length; i += parallelism) {
|
|
47
|
+
chunks.push(entries.slice(i, i + parallelism));
|
|
38
48
|
}
|
|
49
|
+
for (const chunk of chunks) {
|
|
50
|
+
const chunkResults = await Promise.all(chunk.map(async ([key, reference]) => {
|
|
51
|
+
const secret = await Promise.resolve(deps.getSecret(reference, vault, field));
|
|
52
|
+
if (secret === null) {
|
|
53
|
+
throw new OpError(`Secret "${reference}" not found in vault "${vault}"`, 1);
|
|
54
|
+
}
|
|
55
|
+
return [key, secret];
|
|
56
|
+
}));
|
|
57
|
+
results.push(...chunkResults);
|
|
58
|
+
}
|
|
59
|
+
return results;
|
|
39
60
|
}
|
|
40
61
|
const defaultDependencies = {
|
|
41
62
|
getSecret,
|
|
42
63
|
checkOpCli,
|
|
43
|
-
|
|
44
|
-
existsSync,
|
|
45
|
-
parseEnv: (content) => dotenv.parse(content),
|
|
64
|
+
loadEnvMappingFile,
|
|
46
65
|
spawn,
|
|
47
66
|
process,
|
|
67
|
+
loadConfig,
|
|
48
68
|
};
|
|
49
69
|
export function createRunCommand(overrides = {}) {
|
|
50
70
|
const deps = { ...defaultDependencies, ...overrides };
|
|
@@ -57,22 +77,18 @@ export function createRunCommand(overrides = {}) {
|
|
|
57
77
|
if (!command || command.length === 0) {
|
|
58
78
|
throw new OpError('Command required. Usage: ops run -- <command>', 2);
|
|
59
79
|
}
|
|
80
|
+
const config = deps.loadConfig();
|
|
60
81
|
const vault = resolveVault(options.vault);
|
|
61
82
|
const field = resolveField(options.field);
|
|
62
|
-
const
|
|
63
|
-
const
|
|
83
|
+
const parallelism = resolveParallelism(options.parallel, config);
|
|
84
|
+
const envFile = options.envFile || config.envFile || DEFAULT_ENV_FILE;
|
|
85
|
+
const fileMapping = deps.loadEnvMappingFile(envFile);
|
|
64
86
|
const flagMapping = parseEnvPairs(options.env);
|
|
65
87
|
const mapping = { ...fileMapping, ...flagMapping };
|
|
66
88
|
if (Object.keys(mapping).length === 0) {
|
|
67
89
|
throw new OpError(`No secrets configured. Add entries to ${envFile} or pass --env KEY=SECRET.`, 2);
|
|
68
90
|
}
|
|
69
|
-
const resolvedEntries = await
|
|
70
|
-
const secret = await Promise.resolve(deps.getSecret(reference, vault, field));
|
|
71
|
-
if (secret === null) {
|
|
72
|
-
throw new OpError(`Secret "${reference}" not found in vault "${vault}"`, 1);
|
|
73
|
-
}
|
|
74
|
-
return [key, secret];
|
|
75
|
-
}));
|
|
91
|
+
const resolvedEntries = await resolveSecrets(mapping, vault, field, parallelism, deps);
|
|
76
92
|
if (options.verbose) {
|
|
77
93
|
console.log(chalk.cyan('[ops] Injecting environment variables:'));
|
|
78
94
|
for (const [key] of resolvedEntries) {
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,8 +12,10 @@ import { runCommand } from './commands/run.js';
|
|
|
12
12
|
import { inspectCommand } from './commands/inspect.js';
|
|
13
13
|
import { vaultsCommand } from './commands/vaults.js';
|
|
14
14
|
import { completionCommand } from './commands/completion.js';
|
|
15
|
+
import { getManyCommand } from './commands/get-many.js';
|
|
15
16
|
import { setRetryOptions } from './utils/op.js';
|
|
16
17
|
import { isRetryDisabled } from './utils/retry.js';
|
|
18
|
+
import { loadSessionCacheIntoEnv, persistSessionCacheFromEnv } from './utils/session-cache.js';
|
|
17
19
|
// Dynamic version from package.json
|
|
18
20
|
const require = createRequire(import.meta.url);
|
|
19
21
|
const pkg = require('../package.json');
|
|
@@ -28,6 +30,7 @@ program
|
|
|
28
30
|
.option('--retry <count>', 'max retry attempts for transient failures (default: 3, env: OPS_RETRY_COUNT)')
|
|
29
31
|
.option('--no-retry', 'disable retry logic (env: OPS_NO_RETRY=1)')
|
|
30
32
|
.hook('preAction', (thisCommand) => {
|
|
33
|
+
loadSessionCacheIntoEnv();
|
|
31
34
|
const opts = thisCommand.opts();
|
|
32
35
|
// Configure retry options based on CLI flags
|
|
33
36
|
if (opts.retry === false || isRetryDisabled()) {
|
|
@@ -42,6 +45,9 @@ program
|
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
// Otherwise use defaults from environment or built-in defaults
|
|
48
|
+
})
|
|
49
|
+
.hook('postAction', () => {
|
|
50
|
+
persistSessionCacheFromEnv();
|
|
45
51
|
})
|
|
46
52
|
.action(() => {
|
|
47
53
|
// Show help when no command is provided (exit 0, not 1)
|
|
@@ -60,6 +66,19 @@ program
|
|
|
60
66
|
.option('-q, --quiet', 'suppress non-essential output')
|
|
61
67
|
.option('--no-color', 'disable color output')
|
|
62
68
|
.action(getCommand);
|
|
69
|
+
program
|
|
70
|
+
.command('get-many <names...>')
|
|
71
|
+
.description('Get multiple secrets at once')
|
|
72
|
+
.option('-v, --vault <vault>', 'vault name (default: OPS_VAULT or Private)')
|
|
73
|
+
.option('-f, --field <field>', 'field name (default: OPS_FIELD or password)')
|
|
74
|
+
.option('-j, --json', 'output as JSON object')
|
|
75
|
+
.option('-e, --env', 'output as KEY="value" pairs')
|
|
76
|
+
.option('--plain', 'output values only (one per line)')
|
|
77
|
+
.option('--parallel <count>', 'max concurrent requests (default: 5)', (v) => parseInt(v, 10))
|
|
78
|
+
.option('--continue-on-error', 'continue if some secrets fail')
|
|
79
|
+
.option('-q, --quiet', 'suppress non-essential output')
|
|
80
|
+
.option('--no-color', 'disable color output')
|
|
81
|
+
.action(getManyCommand);
|
|
63
82
|
program
|
|
64
83
|
.command('inspect <name>')
|
|
65
84
|
.description('Inspect an item to see available fields')
|
|
@@ -90,6 +109,7 @@ program
|
|
|
90
109
|
.option('-f, --field <field>', 'field name (default: OPS_FIELD or password)')
|
|
91
110
|
.option('-e, --env <pair>', 'map env var to secret name (repeatable, e.g. --env API_KEY=MY_SECRET)', (value, previous = []) => [...previous, value], [])
|
|
92
111
|
.option('--env-file <file>', 'env mapping file (default: .env.ops)')
|
|
112
|
+
.option('--parallel <count>', 'max concurrent secret lookups (default: 5)', (v) => parseInt(v, 10))
|
|
93
113
|
.option('--verbose', 'show which secrets are being injected')
|
|
94
114
|
.option('--no-color', 'disable color output')
|
|
95
115
|
.action(runCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE/F,oCAAoC;AACpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,cAAc,EAAE;KAChB,kBAAkB,EAAE;KACpB,wBAAwB,EAAE;KAC1B,MAAM,CAAC,iBAAiB,EAAE,8EAA8E,CAAC;KACzG,MAAM,CAAC,YAAY,EAAE,2CAA2C,CAAC;KACjE,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,uBAAuB,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAEhC,6CAA6C;IAC7C,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC;QAC9C,oCAAoC;QACpC,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1C,iBAAiB;QACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YAC1C,eAAe,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,+DAA+D;AACjE,CAAC,CAAC;KACD,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;IACvB,0BAA0B,EAAE,CAAC;AAC/B,CAAC,CAAC;KACD,MAAM,CAAC,GAAG,EAAE;IACX,wDAAwD;IACxD,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,uBAAuB,EAAE,CAAC;AAElC,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CAAC,cAAc,EAAE,kDAAkD,CAAC;KAC1E,MAAM,CAAC,SAAS,EAAE,8BAA8B,CAAC;KACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;KACnE,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;KAC7C,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;KAClD,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC;KACtD,MAAM,CAAC,oBAAoB,EAAE,sCAAsC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAC5F,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;KAC9D,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,iDAAiD,CAAC;KAChF,MAAM,CAAC,SAAS,EAAE,gCAAgC,CAAC;KACnD,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;KACnE,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,0DAA0D,CAAC;KACvE,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC;KAC1C,kBAAkB,EAAE;KACpB,kBAAkB,CAAC,IAAI,CAAC;KACxB,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CACL,kBAAkB,EAClB,uEAAuE,EACvE,CAAC,KAAK,EAAE,WAAqB,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,EACxD,EAAE,CACH;KACA,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,oBAAoB,EAAE,4CAA4C,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAClG,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC;KAC5D,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,2DAA2D,CAAC;KACxE,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;KAC9F,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;KAC3D,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,SAAS,EAAE,8BAA8B,CAAC;KACjD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,SAAS,EAAE,8BAA8B,CAAC;KACjD,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACzB,WAAW,CAAC;IACV,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,KAAK,EAAE,OAAO,CAAC,KAAK;CACrB,CAAC,CACH,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,SAAS,EAAE,8BAA8B,CAAC;KACjD,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAClB,WAAW,CAAC;IACV,GAAG,OAAO;IACV,SAAS,EAAE,IAAI;CAChB,CAAC,CACH,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;KAC3D,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC;KAC/C,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAE,kDAAkD,CAAC;KACvE,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;KACtD,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC5C,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7B,iBAAiB;AACjB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAY,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAY,EAAE,EAAE;IAChD,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/utils/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAOA,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAKT;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAM5D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIvD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,qBAmBzD"}
|
package/dist/utils/cli.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import { OpError } from './types.js';
|
|
4
|
+
import { loadConfig } from './config.js';
|
|
4
5
|
const TRUE_VALUES = new Set(['1', 'true', 'yes', 'on']);
|
|
5
6
|
export function resolveBooleanOption(value, envVar) {
|
|
6
7
|
if (value !== undefined)
|
|
@@ -11,10 +12,12 @@ export function resolveBooleanOption(value, envVar) {
|
|
|
11
12
|
return TRUE_VALUES.has(envValue.toLowerCase());
|
|
12
13
|
}
|
|
13
14
|
export function resolveVault(value) {
|
|
14
|
-
|
|
15
|
+
const config = loadConfig();
|
|
16
|
+
return value || process.env.OPS_VAULT || config.vault || 'Private';
|
|
15
17
|
}
|
|
16
18
|
export function resolveField(value) {
|
|
17
|
-
|
|
19
|
+
const config = loadConfig();
|
|
20
|
+
return value || process.env.OPS_FIELD || config.field || 'password';
|
|
18
21
|
}
|
|
19
22
|
export function resolveFormat(value) {
|
|
20
23
|
const format = (value || process.env.OPS_FORMAT || 'env').toLowerCase();
|
package/dist/utils/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAClC,KAA0B,EAC1B,MAAc;IAEd,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACxE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,MAAM,IAAI,OAAO,CAAC,mBAAmB,MAAM,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACnE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAc;IACxD,qEAAqE;IACrE,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;YACjB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,EAAE;SACiB,CAAC;IAC9B,CAAC;IAED,6EAA6E;IAC7E,OAAO,GAAG,CAAC;QACT,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC,KAAK,EAAE,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { parse as parseYaml } from 'yaml';
|
|
4
|
+
export interface OpsConfig {
|
|
5
|
+
vault?: string;
|
|
6
|
+
field?: string;
|
|
7
|
+
envFile?: string;
|
|
8
|
+
parallel?: number;
|
|
9
|
+
sessionCache?: {
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
path?: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
interface ConfigDependencies {
|
|
15
|
+
existsSync: typeof existsSync;
|
|
16
|
+
readFileSync: typeof readFileSync;
|
|
17
|
+
homedir: typeof homedir;
|
|
18
|
+
cwd: () => string;
|
|
19
|
+
parseYaml: typeof parseYaml;
|
|
20
|
+
}
|
|
21
|
+
export declare function loadConfig(overrides?: Partial<ConfigDependencies>): OpsConfig;
|
|
22
|
+
export declare function clearConfigCache(): void;
|
|
23
|
+
export declare function createConfigLoader(overrides?: Partial<ConfigDependencies>): () => OpsConfig;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,UAAU,kBAAkB;IAC1B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,SAAS,CAAC;CAC7B;AA8GD,wBAAgB,UAAU,CAAC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,SAAS,CAEjF;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,kBAAkB,CAChC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,MAAM,SAAS,CAGjB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { parse as parseYaml } from 'yaml';
|
|
5
|
+
import { OpError } from './types.js';
|
|
6
|
+
const defaultDeps = {
|
|
7
|
+
existsSync,
|
|
8
|
+
readFileSync,
|
|
9
|
+
homedir,
|
|
10
|
+
cwd: () => process.cwd(),
|
|
11
|
+
parseYaml,
|
|
12
|
+
};
|
|
13
|
+
const defaultCache = {};
|
|
14
|
+
function mergeConfig(base, override) {
|
|
15
|
+
return {
|
|
16
|
+
...base,
|
|
17
|
+
...override,
|
|
18
|
+
sessionCache: {
|
|
19
|
+
...base.sessionCache,
|
|
20
|
+
...override.sessionCache,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function parseConfigContent(content, path, deps) {
|
|
25
|
+
let parsed;
|
|
26
|
+
const lowerPath = path.toLowerCase();
|
|
27
|
+
if (lowerPath.endsWith('.json')) {
|
|
28
|
+
parsed = JSON.parse(content);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
try {
|
|
32
|
+
parsed = JSON.parse(content);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
parsed = deps.parseYaml(content);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
39
|
+
throw new OpError(`Invalid config in "${path}": expected an object.`, 2);
|
|
40
|
+
}
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
function loadFirstConfig(paths, deps) {
|
|
44
|
+
for (const path of paths) {
|
|
45
|
+
if (!deps.existsSync(path))
|
|
46
|
+
continue;
|
|
47
|
+
const content = deps.readFileSync(path, 'utf-8');
|
|
48
|
+
try {
|
|
49
|
+
return parseConfigContent(content, path, deps);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const message = error instanceof Error ? error.message : 'Unable to parse config file.';
|
|
53
|
+
throw new OpError(message, 2);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
function loadConfigInternal(overrides, cache) {
|
|
59
|
+
if (cache.value)
|
|
60
|
+
return cache.value;
|
|
61
|
+
const deps = { ...defaultDeps, ...overrides };
|
|
62
|
+
const explicitPath = process.env.OPS_CONFIG;
|
|
63
|
+
if (explicitPath) {
|
|
64
|
+
if (!deps.existsSync(explicitPath)) {
|
|
65
|
+
throw new OpError(`Config file not found: ${explicitPath}`, 2);
|
|
66
|
+
}
|
|
67
|
+
const content = deps.readFileSync(explicitPath, 'utf-8');
|
|
68
|
+
const config = parseConfigContent(content, explicitPath, deps);
|
|
69
|
+
cache.value = config;
|
|
70
|
+
return config;
|
|
71
|
+
}
|
|
72
|
+
const homeDir = deps.homedir();
|
|
73
|
+
const cwd = deps.cwd();
|
|
74
|
+
const homePaths = [
|
|
75
|
+
join(homeDir, '.opsrc'),
|
|
76
|
+
join(homeDir, '.opsrc.json'),
|
|
77
|
+
join(homeDir, '.opsrc.yaml'),
|
|
78
|
+
join(homeDir, '.opsrc.yml'),
|
|
79
|
+
];
|
|
80
|
+
const localPaths = [
|
|
81
|
+
join(cwd, '.opsrc'),
|
|
82
|
+
join(cwd, '.opsrc.json'),
|
|
83
|
+
join(cwd, '.opsrc.yaml'),
|
|
84
|
+
join(cwd, '.opsrc.yml'),
|
|
85
|
+
];
|
|
86
|
+
const homeConfig = loadFirstConfig(homePaths, deps);
|
|
87
|
+
const localConfig = loadFirstConfig(localPaths, deps);
|
|
88
|
+
cache.value = mergeConfig(homeConfig, localConfig);
|
|
89
|
+
return cache.value;
|
|
90
|
+
}
|
|
91
|
+
export function loadConfig(overrides = {}) {
|
|
92
|
+
return loadConfigInternal(overrides, defaultCache);
|
|
93
|
+
}
|
|
94
|
+
export function clearConfigCache() {
|
|
95
|
+
defaultCache.value = undefined;
|
|
96
|
+
}
|
|
97
|
+
export function createConfigLoader(overrides = {}) {
|
|
98
|
+
const cache = {};
|
|
99
|
+
return () => loadConfigInternal(overrides, cache);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
interface EnvMappingDependencies {
|
|
3
|
+
existsSync: typeof existsSync;
|
|
4
|
+
readFileSync: typeof readFileSync;
|
|
5
|
+
parseEnv: (content: string) => Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadEnvMappingFile(path: string, overrides?: Partial<EnvMappingDependencies>): Record<string, string>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=env-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-mapping.d.ts","sourceRoot":"","sources":["../../src/utils/env-mapping.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAW9C,UAAU,sBAAsB;IAC9B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD;AA6CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,OAAO,CAAC,sBAAsB,CAAM,GAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
import Ajv from 'ajv';
|
|
3
|
+
import { OpError } from './types.js';
|
|
4
|
+
import { existsSync, readFileSync } from 'fs';
|
|
5
|
+
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
6
|
+
const envMappingSchema = {
|
|
7
|
+
type: 'object',
|
|
8
|
+
additionalProperties: { type: 'string' },
|
|
9
|
+
};
|
|
10
|
+
const validateMapping = ajv.compile(envMappingSchema);
|
|
11
|
+
const defaultDeps = {
|
|
12
|
+
existsSync,
|
|
13
|
+
readFileSync,
|
|
14
|
+
parseEnv: (content) => dotenv.parse(content),
|
|
15
|
+
};
|
|
16
|
+
function formatSchemaErrors() {
|
|
17
|
+
if (!validateMapping.errors || validateMapping.errors.length === 0) {
|
|
18
|
+
return 'Invalid env mapping file.';
|
|
19
|
+
}
|
|
20
|
+
const details = validateMapping.errors
|
|
21
|
+
.map((error) => {
|
|
22
|
+
const location = error.instancePath ? error.instancePath : 'root';
|
|
23
|
+
return `${location} ${error.message ?? 'is invalid'}`.trim();
|
|
24
|
+
})
|
|
25
|
+
.join(', ');
|
|
26
|
+
return `Invalid env mapping file: ${details}.`;
|
|
27
|
+
}
|
|
28
|
+
function assertValidEnvMapping(value) {
|
|
29
|
+
if (!validateMapping(value)) {
|
|
30
|
+
throw new OpError(formatSchemaErrors(), 2);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function parseEnvMappingContent(content, path, deps) {
|
|
34
|
+
if (path.toLowerCase().endsWith('.json')) {
|
|
35
|
+
const parsed = JSON.parse(content);
|
|
36
|
+
assertValidEnvMapping(parsed);
|
|
37
|
+
return parsed;
|
|
38
|
+
}
|
|
39
|
+
const parsed = deps.parseEnv(content);
|
|
40
|
+
assertValidEnvMapping(parsed);
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
export function loadEnvMappingFile(path, overrides = {}) {
|
|
44
|
+
const deps = { ...defaultDeps, ...overrides };
|
|
45
|
+
if (!deps.existsSync(path)) {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
const content = deps.readFileSync(path, 'utf-8');
|
|
49
|
+
try {
|
|
50
|
+
return parseEnvMappingContent(content, path, deps);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const message = error instanceof Error ? error.message : 'Unable to parse env mapping file.';
|
|
54
|
+
throw new OpError(`Failed to parse "${path}": ${message}`, 2);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=env-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-mapping.js","sourceRoot":"","sources":["../../src/utils/env-mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { OpsConfig } from './config.js';
|
|
5
|
+
interface SessionCacheDependencies {
|
|
6
|
+
existsSync: typeof existsSync;
|
|
7
|
+
readFileSync: typeof readFileSync;
|
|
8
|
+
writeFileSync: typeof writeFileSync;
|
|
9
|
+
mkdirSync: typeof mkdirSync;
|
|
10
|
+
homedir: typeof homedir;
|
|
11
|
+
join: typeof join;
|
|
12
|
+
dirname: typeof dirname;
|
|
13
|
+
env: NodeJS.ProcessEnv;
|
|
14
|
+
now: () => string;
|
|
15
|
+
getConfig: () => OpsConfig;
|
|
16
|
+
}
|
|
17
|
+
export declare function createSessionCache(overrides?: Partial<SessionCacheDependencies>): {
|
|
18
|
+
loadSessionCacheIntoEnv: () => void;
|
|
19
|
+
persistSessionCacheFromEnv: () => void;
|
|
20
|
+
};
|
|
21
|
+
export declare function loadSessionCacheIntoEnv(): void;
|
|
22
|
+
export declare function persistSessionCacheFromEnv(): void;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=session-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-cache.d.ts","sourceRoot":"","sources":["../../src/utils/session-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAc,SAAS,EAAE,MAAM,aAAa,CAAC;AAOpD,UAAU,wBAAwB;IAChC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,SAAS,CAAC;CAC5B;AAoDD,wBAAgB,kBAAkB,CAChC,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD;IACD,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,0BAA0B,EAAE,MAAM,IAAI,CAAC;CACxC,CA0CA;AAID,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { loadConfig } from './config.js';
|
|
5
|
+
const defaultDeps = {
|
|
6
|
+
existsSync,
|
|
7
|
+
readFileSync,
|
|
8
|
+
writeFileSync,
|
|
9
|
+
mkdirSync,
|
|
10
|
+
homedir,
|
|
11
|
+
join,
|
|
12
|
+
dirname,
|
|
13
|
+
env: process.env,
|
|
14
|
+
now: () => new Date().toISOString(),
|
|
15
|
+
getConfig: () => loadConfig(),
|
|
16
|
+
};
|
|
17
|
+
function isCacheEnabled(env, config) {
|
|
18
|
+
if (env.OPS_NO_SESSION_CACHE === '1')
|
|
19
|
+
return false;
|
|
20
|
+
if (env.OPS_SESSION_CACHE === '0')
|
|
21
|
+
return false;
|
|
22
|
+
if (env.OPS_SESSION_CACHE === '1')
|
|
23
|
+
return true;
|
|
24
|
+
if (config.sessionCache?.enabled !== undefined) {
|
|
25
|
+
return config.sessionCache.enabled;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
function getCachePath(config, deps) {
|
|
30
|
+
if (config.sessionCache?.path) {
|
|
31
|
+
return config.sessionCache.path;
|
|
32
|
+
}
|
|
33
|
+
return deps.join(deps.homedir(), '.config', 'ops-cli', 'session.json');
|
|
34
|
+
}
|
|
35
|
+
function readCacheFile(path, deps) {
|
|
36
|
+
if (!deps.existsSync(path))
|
|
37
|
+
return {};
|
|
38
|
+
const content = deps.readFileSync(path, 'utf-8');
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(content);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function collectSessions(env) {
|
|
47
|
+
const sessions = {};
|
|
48
|
+
for (const [key, value] of Object.entries(env)) {
|
|
49
|
+
if (!key.startsWith('OP_SESSION_'))
|
|
50
|
+
continue;
|
|
51
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
52
|
+
continue;
|
|
53
|
+
sessions[key] = value;
|
|
54
|
+
}
|
|
55
|
+
return sessions;
|
|
56
|
+
}
|
|
57
|
+
export function createSessionCache(overrides = {}) {
|
|
58
|
+
const deps = { ...defaultDeps, ...overrides };
|
|
59
|
+
function loadSessionCacheIntoEnv() {
|
|
60
|
+
const config = deps.getConfig();
|
|
61
|
+
if (!isCacheEnabled(deps.env, config))
|
|
62
|
+
return;
|
|
63
|
+
const path = getCachePath(config, deps);
|
|
64
|
+
const cache = readCacheFile(path, deps);
|
|
65
|
+
const sessions = cache.sessions ?? {};
|
|
66
|
+
for (const [key, value] of Object.entries(sessions)) {
|
|
67
|
+
if (deps.env[key])
|
|
68
|
+
continue;
|
|
69
|
+
deps.env[key] = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function persistSessionCacheFromEnv() {
|
|
73
|
+
const config = deps.getConfig();
|
|
74
|
+
if (!isCacheEnabled(deps.env, config))
|
|
75
|
+
return;
|
|
76
|
+
const path = getCachePath(config, deps);
|
|
77
|
+
const existing = readCacheFile(path, deps);
|
|
78
|
+
const merged = {
|
|
79
|
+
...existing.sessions,
|
|
80
|
+
...collectSessions(deps.env),
|
|
81
|
+
};
|
|
82
|
+
if (Object.keys(merged).length === 0) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const payload = {
|
|
86
|
+
sessions: merged,
|
|
87
|
+
updatedAt: deps.now(),
|
|
88
|
+
};
|
|
89
|
+
deps.mkdirSync(deps.dirname(path), { recursive: true, mode: 0o700 });
|
|
90
|
+
deps.writeFileSync(path, JSON.stringify(payload, null, 2), { mode: 0o600 });
|
|
91
|
+
}
|
|
92
|
+
return { loadSessionCacheIntoEnv, persistSessionCacheFromEnv };
|
|
93
|
+
}
|
|
94
|
+
const defaultSessionCache = createSessionCache();
|
|
95
|
+
export function loadSessionCacheIntoEnv() {
|
|
96
|
+
defaultSessionCache.loadSessionCacheIntoEnv();
|
|
97
|
+
}
|
|
98
|
+
export function persistSessionCacheFromEnv() {
|
|
99
|
+
defaultSessionCache.persistSessionCacheFromEnv();
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=session-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-cache.js","sourceRoot":"","sources":["../../src/utils/session-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAa,MAAM,aAAa,CAAC;AAoBpD,MAAM,WAAW,GAA6B;IAC5C,UAAU;IACV,YAAY;IACZ,aAAa;IACb,SAAS;IACT,OAAO;IACP,IAAI;IACJ,OAAO;IACP,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnC,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;CAC9B,CAAC;AAEF,SAAS,cAAc,CAAC,GAAsB,EAAE,MAAiB;IAC/D,IAAI,GAAG,CAAC,oBAAoB,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,GAAG,CAAC,iBAAiB,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,GAAG,CAAC,iBAAiB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,MAAM,CAAC,YAAY,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,MAAiB,EAAE,IAA8B;IACrE,IAAI,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,IAA8B;IACjE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB;IAC7C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,SAAS;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC9D,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,YAA+C,EAAE;IAKjD,MAAM,IAAI,GAA6B,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC;IAExE,SAAS,uBAAuB;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;YAAE,OAAO;QAE9C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,SAAS,0BAA0B;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;YAAE,OAAO;QAE9C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG;YACb,GAAG,QAAQ,CAAC,QAAQ;YACpB,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAqB;YAChC,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,mBAAmB,GAAG,kBAAkB,EAAE,CAAC;AAEjD,MAAM,UAAU,uBAAuB;IACrC,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,mBAAmB,CAAC,0BAA0B,EAAE,CAAC;AACnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dc-ops-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Easy secret retrieval from 1Password with smart fallbacks",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -40,13 +40,15 @@
|
|
|
40
40
|
"author": "",
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"dependencies": {
|
|
43
|
+
"ajv": "^8.17.1",
|
|
43
44
|
"chalk": "^5.3.0",
|
|
44
45
|
"clipboardy": "^3.0.0",
|
|
45
46
|
"commander": "^11.1.0",
|
|
46
47
|
"cross-spawn": "^7.0.3",
|
|
47
48
|
"dotenv": "^16.4.5",
|
|
48
49
|
"inquirer": "^9.2.12",
|
|
49
|
-
"ora": "^7.0.1"
|
|
50
|
+
"ora": "^7.0.1",
|
|
51
|
+
"yaml": "^2.8.2"
|
|
50
52
|
},
|
|
51
53
|
"devDependencies": {
|
|
52
54
|
"@semantic-release/changelog": "^6.0.3",
|