dc-ops-cli 1.0.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.
Files changed (62) hide show
  1. package/README.md +310 -0
  2. package/dist/commands/copy.d.ts +23 -0
  3. package/dist/commands/copy.d.ts.map +1 -0
  4. package/dist/commands/copy.js +74 -0
  5. package/dist/commands/copy.js.map +1 -0
  6. package/dist/commands/export.d.ts +14 -0
  7. package/dist/commands/export.d.ts.map +1 -0
  8. package/dist/commands/export.js +111 -0
  9. package/dist/commands/export.js.map +1 -0
  10. package/dist/commands/get.d.ts +31 -0
  11. package/dist/commands/get.d.ts.map +1 -0
  12. package/dist/commands/get.js +142 -0
  13. package/dist/commands/get.js.map +1 -0
  14. package/dist/commands/import.d.ts +27 -0
  15. package/dist/commands/import.d.ts.map +1 -0
  16. package/dist/commands/import.js +129 -0
  17. package/dist/commands/import.js.map +1 -0
  18. package/dist/commands/inspect.d.ts +20 -0
  19. package/dist/commands/inspect.d.ts.map +1 -0
  20. package/dist/commands/inspect.js +73 -0
  21. package/dist/commands/inspect.js.map +1 -0
  22. package/dist/commands/list.d.ts +11 -0
  23. package/dist/commands/list.d.ts.map +1 -0
  24. package/dist/commands/list.js +90 -0
  25. package/dist/commands/list.js.map +1 -0
  26. package/dist/commands/resolve.d.ts +18 -0
  27. package/dist/commands/resolve.d.ts.map +1 -0
  28. package/dist/commands/resolve.js +143 -0
  29. package/dist/commands/resolve.js.map +1 -0
  30. package/dist/commands/run.d.ts +29 -0
  31. package/dist/commands/run.d.ts.map +1 -0
  32. package/dist/commands/run.js +127 -0
  33. package/dist/commands/run.js.map +1 -0
  34. package/dist/commands/set.d.ts +12 -0
  35. package/dist/commands/set.d.ts.map +1 -0
  36. package/dist/commands/set.js +86 -0
  37. package/dist/commands/set.js.map +1 -0
  38. package/dist/commands/vaults.d.ts +18 -0
  39. package/dist/commands/vaults.d.ts.map +1 -0
  40. package/dist/commands/vaults.js +54 -0
  41. package/dist/commands/vaults.js.map +1 -0
  42. package/dist/index.d.ts +3 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +161 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/utils/cli.d.ts +8 -0
  47. package/dist/utils/cli.d.ts.map +1 -0
  48. package/dist/utils/cli.js +53 -0
  49. package/dist/utils/cli.js.map +1 -0
  50. package/dist/utils/io.d.ts +2 -0
  51. package/dist/utils/io.d.ts.map +1 -0
  52. package/dist/utils/io.js +8 -0
  53. package/dist/utils/io.js.map +1 -0
  54. package/dist/utils/op.d.ts +68 -0
  55. package/dist/utils/op.d.ts.map +1 -0
  56. package/dist/utils/op.js +358 -0
  57. package/dist/utils/op.js.map +1 -0
  58. package/dist/utils/types.d.ts +31 -0
  59. package/dist/utils/types.d.ts.map +1 -0
  60. package/dist/utils/types.js +9 -0
  61. package/dist/utils/types.js.map +1 -0
  62. package/package.json +52 -0
@@ -0,0 +1,143 @@
1
+ import chalk from 'chalk';
2
+ import { checkOpCli, getItemFromShareLink } from '../utils/op.js';
3
+ import { applyColorConfig, createSpinner, resolveBooleanOption, } from '../utils/cli.js';
4
+ import { OpError } from '../utils/types.js';
5
+ const defaultDependencies = {
6
+ checkOpCli,
7
+ resolveShareLink: getItemFromShareLink,
8
+ createSpinner,
9
+ applyColorConfig,
10
+ resolveBooleanOption,
11
+ };
12
+ function normalizeVaultName(item) {
13
+ const vaultValue = item.vault;
14
+ if (typeof vaultValue === 'string' && vaultValue.trim().length > 0) {
15
+ return vaultValue;
16
+ }
17
+ if (vaultValue && typeof vaultValue === 'object') {
18
+ const name = vaultValue.name;
19
+ if (name && name.trim().length > 0) {
20
+ return name;
21
+ }
22
+ }
23
+ return 'Private';
24
+ }
25
+ function listConcealedFields(fields) {
26
+ if (!fields) {
27
+ return [];
28
+ }
29
+ return fields
30
+ .filter((field) => field.type === 'CONCEALED')
31
+ .map((field) => {
32
+ const id = field.id?.trim();
33
+ const label = field.label?.trim();
34
+ return {
35
+ id: id || label || 'password',
36
+ label: label || undefined,
37
+ };
38
+ });
39
+ }
40
+ function listAllFields(fields) {
41
+ if (!fields) {
42
+ return [];
43
+ }
44
+ return fields.map((field) => {
45
+ const id = field.id?.trim() || field.label?.trim() || 'field';
46
+ const label = field.label?.trim() || undefined;
47
+ const type = field.type || 'UNKNOWN';
48
+ return { id, label, type };
49
+ });
50
+ }
51
+ function selectPrimaryField(fields) {
52
+ if (fields.length === 0) {
53
+ return null;
54
+ }
55
+ const preferred = fields.find((field) => field.id === 'password' || field.label?.toLowerCase() === 'password');
56
+ return preferred ?? fields[0];
57
+ }
58
+ function quoteArg(value) {
59
+ const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
60
+ return `"${escaped}"`;
61
+ }
62
+ export function createResolveCommand(overrides = {}) {
63
+ const deps = { ...defaultDependencies, ...overrides };
64
+ return async function resolveCommand(shareLink, options) {
65
+ try {
66
+ const envQuiet = deps.resolveBooleanOption(undefined, 'OPS_QUIET');
67
+ const quiet = options.quiet === true || envQuiet;
68
+ const envNoColor = deps.resolveBooleanOption(undefined, 'OPS_NO_COLOR');
69
+ const noColor = options.color === false || envNoColor;
70
+ deps.applyColorConfig(noColor);
71
+ deps.checkOpCli();
72
+ const quietSpinner = quiet || options.json === true;
73
+ const spinner = deps.createSpinner('Resolving share link...', quietSpinner);
74
+ const item = deps.resolveShareLink(shareLink);
75
+ const vaultName = normalizeVaultName(item);
76
+ const concealedFields = listConcealedFields(item.fields);
77
+ const allFields = listAllFields(item.fields);
78
+ const primaryField = selectPrimaryField(concealedFields);
79
+ const fieldId = primaryField?.id;
80
+ spinner.succeed(chalk.green('Share link resolved.'));
81
+ const opReference = fieldId
82
+ ? `op://${vaultName}/${item.title}/${fieldId}`
83
+ : null;
84
+ const opsGet = fieldId
85
+ ? `ops get ${quoteArg(item.title)} --vault ${quoteArg(vaultName)} --field ${quoteArg(fieldId)}`
86
+ : `ops get ${quoteArg(item.title)} --vault ${quoteArg(vaultName)}`;
87
+ if (options.json) {
88
+ console.log(JSON.stringify({
89
+ title: item.title,
90
+ vault: vaultName,
91
+ field: fieldId
92
+ ? {
93
+ id: fieldId,
94
+ label: primaryField?.label ?? null,
95
+ }
96
+ : null,
97
+ fields: allFields.map((field) => ({
98
+ id: field.id,
99
+ label: field.label ?? null,
100
+ type: field.type,
101
+ })),
102
+ opReference,
103
+ opsGet,
104
+ }, null, 2));
105
+ return;
106
+ }
107
+ console.log(chalk.cyan('Resolved share link:'));
108
+ console.log(chalk.white(` Item: ${item.title}`));
109
+ console.log(chalk.white(` Vault: ${vaultName}`));
110
+ if (fieldId) {
111
+ const labelSuffix = primaryField?.label && primaryField.label !== fieldId
112
+ ? ` (${primaryField.label})`
113
+ : '';
114
+ console.log(chalk.white(` Field: ${fieldId}${labelSuffix}`));
115
+ }
116
+ else {
117
+ console.log(chalk.yellow(' Field: none detected (no concealed fields)'));
118
+ }
119
+ if (opReference) {
120
+ console.log(chalk.cyan('\nUse with op:'));
121
+ console.log(chalk.white(` ${opReference}`));
122
+ }
123
+ console.log(chalk.cyan('\nUse with ops:'));
124
+ console.log(chalk.white(` ${opsGet}`));
125
+ if (allFields.length > 0) {
126
+ console.log(chalk.cyan('\nFields:'));
127
+ allFields.forEach((field) => {
128
+ const labelSuffix = field.label && field.label !== field.id ? ` (${field.label})` : '';
129
+ console.log(chalk.white(` - ${field.id}${labelSuffix} [${field.type}]`));
130
+ });
131
+ }
132
+ }
133
+ catch (error) {
134
+ if (error instanceof OpError) {
135
+ console.error(chalk.red(`Error: ${error.message}`));
136
+ process.exit(error.exitCode);
137
+ }
138
+ throw error;
139
+ }
140
+ };
141
+ }
142
+ export const resolveCommand = createResolveCommand();
143
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/commands/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import spawn from 'cross-spawn';
3
+ import { checkOpCli, getSecret } from '../utils/op.js';
4
+ export interface RunOptions {
5
+ vault?: string;
6
+ field?: string;
7
+ env?: string[];
8
+ envFile?: string;
9
+ color?: boolean;
10
+ verbose?: boolean;
11
+ }
12
+ export interface ProcessLike {
13
+ env: NodeJS.ProcessEnv;
14
+ on: NodeJS.Process['on'];
15
+ off: NodeJS.Process['off'];
16
+ exitCode?: number | string;
17
+ }
18
+ export interface RunDependencies {
19
+ getSecret: typeof getSecret;
20
+ checkOpCli: typeof checkOpCli;
21
+ readFileSync: typeof readFileSync;
22
+ existsSync: typeof existsSync;
23
+ parseEnv: (content: string) => Record<string, string>;
24
+ spawn: typeof spawn;
25
+ process: ProcessLike;
26
+ }
27
+ export declare function createRunCommand(overrides?: Partial<RunDependencies>): (command: string[], options: RunOptions) => Promise<void>;
28
+ export declare const runCommand: (command: string[], options: RunOptions) => Promise<void>;
29
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE9C,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AASvD,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;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,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;CACtB;AA8DD,wBAAgB,gBAAgB,CAC9B,SAAS,GAAE,OAAO,CAAC,eAAe,CAAM,GACvC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAsG3D;AAED,eAAO,MAAM,UAAU,YAxGV,MAAM,EAAE,WAAW,UAAU,KAAK,OAAO,CAAC,IAAI,CAwGf,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import chalk from 'chalk';
3
+ import spawn from 'cross-spawn';
4
+ import dotenv from 'dotenv';
5
+ import { checkOpCli, getSecret } from '../utils/op.js';
6
+ import { applyColorConfig, resolveBooleanOption, resolveField, resolveVault, } from '../utils/cli.js';
7
+ import { OpError } from '../utils/types.js';
8
+ const DEFAULT_ENV_FILE = '.env.ops';
9
+ function parseEnvPairs(pairs) {
10
+ if (!pairs || pairs.length === 0)
11
+ return {};
12
+ const mapping = {};
13
+ for (const pair of pairs) {
14
+ const separatorIndex = pair.indexOf('=');
15
+ if (separatorIndex <= 0) {
16
+ throw new OpError('Invalid --env format. Use KEY=SECRET (example: --env API_KEY=MY_SECRET).', 2);
17
+ }
18
+ const key = pair.slice(0, separatorIndex).trim();
19
+ const value = pair.slice(separatorIndex + 1).trim();
20
+ if (!key || !value) {
21
+ throw new OpError('Invalid --env format. Use KEY=SECRET (example: --env API_KEY=MY_SECRET).', 2);
22
+ }
23
+ mapping[key] = value;
24
+ }
25
+ return mapping;
26
+ }
27
+ function loadEnvFile(path, deps) {
28
+ if (!deps.existsSync(path)) {
29
+ return {};
30
+ }
31
+ const content = deps.readFileSync(path, 'utf-8');
32
+ try {
33
+ return deps.parseEnv(content);
34
+ }
35
+ catch (error) {
36
+ const message = error instanceof Error ? error.message : 'Unable to parse env file.';
37
+ throw new OpError(`Failed to parse "${path}": ${message}`, 2);
38
+ }
39
+ }
40
+ const defaultDependencies = {
41
+ getSecret,
42
+ checkOpCli,
43
+ readFileSync,
44
+ existsSync,
45
+ parseEnv: (content) => dotenv.parse(content),
46
+ spawn,
47
+ process,
48
+ };
49
+ export function createRunCommand(overrides = {}) {
50
+ const deps = { ...defaultDependencies, ...overrides };
51
+ return async function runCommand(command, options) {
52
+ try {
53
+ const envNoColor = resolveBooleanOption(undefined, 'OPS_NO_COLOR');
54
+ const noColor = options.color === false || envNoColor;
55
+ applyColorConfig(noColor);
56
+ deps.checkOpCli();
57
+ if (!command || command.length === 0) {
58
+ throw new OpError('Command required. Usage: ops run -- <command>', 2);
59
+ }
60
+ const vault = resolveVault(options.vault);
61
+ const field = resolveField(options.field);
62
+ const envFile = options.envFile || DEFAULT_ENV_FILE;
63
+ const fileMapping = loadEnvFile(envFile, deps);
64
+ const flagMapping = parseEnvPairs(options.env);
65
+ const mapping = { ...fileMapping, ...flagMapping };
66
+ if (Object.keys(mapping).length === 0) {
67
+ throw new OpError(`No secrets configured. Add entries to ${envFile} or pass --env KEY=SECRET.`, 2);
68
+ }
69
+ const resolvedEntries = await Promise.all(Object.entries(mapping).map(async ([key, reference]) => {
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
+ }));
76
+ if (options.verbose) {
77
+ console.log(chalk.cyan('[ops] Injecting environment variables:'));
78
+ for (const [key] of resolvedEntries) {
79
+ console.log(chalk.gray(` ${key} <- (secret value hidden)`));
80
+ }
81
+ console.log(chalk.cyan(`[ops] Running: ${command.join(' ')}`));
82
+ }
83
+ const injectedEnv = Object.fromEntries(resolvedEntries);
84
+ const child = deps.spawn(command[0], command.slice(1), {
85
+ stdio: 'inherit',
86
+ env: {
87
+ ...deps.process.env,
88
+ ...injectedEnv,
89
+ },
90
+ });
91
+ const forwardSignal = (signal) => {
92
+ if (child.pid) {
93
+ child.kill(signal);
94
+ }
95
+ };
96
+ deps.process.on('SIGINT', forwardSignal);
97
+ deps.process.on('SIGTERM', forwardSignal);
98
+ await new Promise((resolve, reject) => {
99
+ child.on('exit', (code, signal) => {
100
+ deps.process.off('SIGINT', forwardSignal);
101
+ deps.process.off('SIGTERM', forwardSignal);
102
+ if (code !== null) {
103
+ deps.process.exitCode = code;
104
+ }
105
+ else if (signal) {
106
+ deps.process.exitCode = 1;
107
+ }
108
+ resolve();
109
+ });
110
+ child.on('error', (error) => {
111
+ deps.process.off('SIGINT', forwardSignal);
112
+ deps.process.off('SIGTERM', forwardSignal);
113
+ reject(new OpError(`Failed to start command: ${error.message}`, 1));
114
+ });
115
+ });
116
+ }
117
+ catch (error) {
118
+ if (error instanceof OpError) {
119
+ console.error(chalk.red(`Error: ${error.message}`));
120
+ process.exit(error.exitCode);
121
+ }
122
+ throw error;
123
+ }
124
+ };
125
+ }
126
+ export const runCommand = createRunCommand();
127
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface SetOptions {
2
+ vault?: string;
3
+ field?: string;
4
+ value?: string;
5
+ valueFile?: string;
6
+ force?: boolean;
7
+ input?: boolean;
8
+ quiet?: boolean;
9
+ color?: boolean;
10
+ }
11
+ export declare function setCommand(name: string, options: SetOptions): Promise<void>;
12
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Ff"}
@@ -0,0 +1,86 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import { setSecret, getSecret, checkOpCli } from '../utils/op.js';
4
+ import { applyColorConfig, createSpinner, isInteractiveInput, resolveBooleanOption, resolveField, resolveVault, } from '../utils/cli.js';
5
+ import { readValueFromInput } from '../utils/io.js';
6
+ import { OpError } from '../utils/types.js';
7
+ export async function setCommand(name, options) {
8
+ try {
9
+ // Validate name is not empty
10
+ if (!name || name.trim().length === 0) {
11
+ throw new OpError('Secret name cannot be empty.', 2);
12
+ }
13
+ checkOpCli();
14
+ if (options.value && options.valueFile) {
15
+ throw new OpError('Use either --value or --value-file, not both.', 2);
16
+ }
17
+ const vault = resolveVault(options.vault);
18
+ const field = resolveField(options.field);
19
+ const envQuiet = resolveBooleanOption(undefined, 'OPS_QUIET');
20
+ const quiet = options.quiet === true || envQuiet;
21
+ const envNoInput = resolveBooleanOption(undefined, 'OPS_NO_INPUT');
22
+ const envNoColor = resolveBooleanOption(undefined, 'OPS_NO_COLOR');
23
+ const noInput = options.input === false || envNoInput;
24
+ const noColor = options.color === false || envNoColor;
25
+ const canPrompt = !noInput && isInteractiveInput();
26
+ applyColorConfig(noColor);
27
+ // Check if secret already exists
28
+ const existing = getSecret(name, vault, field);
29
+ if (existing && !options.force) {
30
+ if (!canPrompt) {
31
+ throw new OpError('Secret already exists. Use --force to overwrite.', 2);
32
+ }
33
+ const confirm = await inquirer.prompt([
34
+ {
35
+ type: 'confirm',
36
+ name: 'overwrite',
37
+ message: chalk.yellow(`Secret "${name}" already exists. Overwrite it?`),
38
+ default: false,
39
+ },
40
+ ]);
41
+ if (!confirm.overwrite) {
42
+ console.log(chalk.gray('Operation cancelled.'));
43
+ return;
44
+ }
45
+ }
46
+ // Get value from option, file, stdin, or prompt
47
+ let value = options.value;
48
+ if (options.valueFile) {
49
+ value = readValueFromInput(options.valueFile);
50
+ }
51
+ else if (value === '-') {
52
+ value = readValueFromInput('-');
53
+ }
54
+ if (!value) {
55
+ if (!canPrompt) {
56
+ throw new OpError('Secret value required. Use --value or --value-file.', 2);
57
+ }
58
+ const answer = await inquirer.prompt([
59
+ {
60
+ type: 'password',
61
+ name: 'value',
62
+ message: 'Enter secret value:',
63
+ mask: '*',
64
+ validate: (input) => input.length > 0 || 'Secret value cannot be empty',
65
+ },
66
+ ]);
67
+ value = answer.value;
68
+ }
69
+ // Store the secret
70
+ const spinner = createSpinner('Storing secret in 1Password...', quiet);
71
+ setSecret(name, value, vault, field);
72
+ spinner.succeed(chalk.green('Secret stored successfully!'));
73
+ if (!quiet) {
74
+ console.log(chalk.cyan('\nRetrieve it with:'));
75
+ console.log(chalk.white(` ops get ${name}`));
76
+ }
77
+ }
78
+ catch (error) {
79
+ if (error instanceof OpError) {
80
+ console.error(chalk.red(`Error: ${error.message}`));
81
+ process.exit(error.exitCode);
82
+ }
83
+ throw error;
84
+ }
85
+ }
86
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { listVaults, checkOpCli } from '../utils/op.js';
2
+ import { applyColorConfig, createSpinner, resolveBooleanOption } from '../utils/cli.js';
3
+ export interface VaultsOptions {
4
+ json?: boolean;
5
+ quiet?: boolean;
6
+ color?: boolean;
7
+ }
8
+ export interface VaultsDependencies {
9
+ listVaults: typeof listVaults;
10
+ checkOpCli: typeof checkOpCli;
11
+ applyColorConfig: typeof applyColorConfig;
12
+ createSpinner: typeof createSpinner;
13
+ resolveBooleanOption: typeof resolveBooleanOption;
14
+ log: (message: string) => void;
15
+ }
16
+ export declare function createVaultsCommand(overrides?: Partial<VaultsDependencies>): (options: VaultsOptions) => Promise<void>;
17
+ export declare const vaultsCommand: (options: VaultsOptions) => Promise<void>;
18
+ //# sourceMappingURL=vaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaults.d.ts","sourceRoot":"","sources":["../../src/commands/vaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;IAClD,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAWD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAiD3C;AAED,eAAO,MAAM,aAAa,YAnDb,aAAa,KAAK,OAAO,CAAC,IAAI,CAmDO,CAAC"}
@@ -0,0 +1,54 @@
1
+ import chalk from 'chalk';
2
+ import { listVaults, checkOpCli } from '../utils/op.js';
3
+ import { applyColorConfig, createSpinner, resolveBooleanOption, } from '../utils/cli.js';
4
+ import { OpError } from '../utils/types.js';
5
+ const defaultDependencies = {
6
+ listVaults,
7
+ checkOpCli,
8
+ applyColorConfig,
9
+ createSpinner,
10
+ resolveBooleanOption,
11
+ log: console.log,
12
+ };
13
+ export function createVaultsCommand(overrides = {}) {
14
+ const deps = { ...defaultDependencies, ...overrides };
15
+ return async function vaultsCommand(options) {
16
+ try {
17
+ deps.checkOpCli();
18
+ const envQuiet = deps.resolveBooleanOption(undefined, 'OPS_QUIET');
19
+ const quiet = options.quiet === true || envQuiet;
20
+ const envNoColor = deps.resolveBooleanOption(undefined, 'OPS_NO_COLOR');
21
+ const noColor = options.color === false || envNoColor;
22
+ deps.applyColorConfig(noColor);
23
+ const spinner = deps.createSpinner('Fetching vaults...', quiet || Boolean(options.json));
24
+ const vaults = deps.listVaults();
25
+ spinner.succeed(chalk.green('Vaults loaded'));
26
+ if (options.json) {
27
+ deps.log(JSON.stringify(vaults, null, 2));
28
+ return;
29
+ }
30
+ if (vaults.length === 0) {
31
+ deps.log(chalk.yellow('No vaults found.'));
32
+ return;
33
+ }
34
+ deps.log(chalk.cyan('\nAvailable vaults:\n'));
35
+ deps.log(chalk.gray(' Name Type'));
36
+ deps.log(chalk.gray(' ───────────────── ─────────────'));
37
+ for (const vault of vaults) {
38
+ const name = vault.name.padEnd(18);
39
+ const type = vault.type || 'UNKNOWN';
40
+ deps.log(` ${chalk.white(name)} ${chalk.gray(type)}`);
41
+ }
42
+ deps.log('');
43
+ }
44
+ catch (error) {
45
+ if (error instanceof OpError) {
46
+ console.error(chalk.red(`Error: ${error.message}`));
47
+ process.exit(error.exitCode);
48
+ }
49
+ throw error;
50
+ }
51
+ };
52
+ }
53
+ export const vaultsCommand = createVaultsCommand();
54
+ //# sourceMappingURL=vaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaults.js","sourceRoot":"","sources":["../../src/commands/vaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}