@efebia/one-env 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # one-env
1
+ # @efebia/one-env
2
2
 
3
3
  Type-safe environment configuration management for Node.js applications with runtime validation and CLI tools.
4
4
 
@@ -9,22 +9,23 @@ Type-safe environment configuration management for Node.js applications with run
9
9
  - 🛠️ **CLI tools** for generating, validating, and managing environment files
10
10
  - 🌍 **Multiple sources**: Load from YAML files or JSON environment variables
11
11
  - 🚀 **Production ready**: Validate AWS Secrets Manager configurations
12
+ - 📤 **Push & Pull**: Sync secrets with AWS Secrets Manager
12
13
  - 💡 **Developer friendly**: Autocomplete for all environment variables
13
14
 
14
15
  ## Installation
15
16
 
16
17
  ```bash
17
18
  # Using npm
18
- npm install one-env zod
19
+ npm install @efebia/one-env zod
19
20
 
20
21
  # Using yarn
21
- yarn add one-env zod
22
+ yarn add @efebia/one-env zod
22
23
 
23
24
  # Using pnpm
24
- pnpm add one-env zod
25
+ pnpm add @efebia/one-env zod
25
26
  ```
26
27
 
27
- Note: `zod` v4 is a peer dependency and must be installed separately.
28
+ Note: Zod (^4.0.0) is a peer dependency and must be installed separately.
28
29
 
29
30
  ## Quick Start
30
31
 
@@ -56,12 +57,16 @@ export default EnvSchema;
56
57
  ### 2. Use in your application
57
58
 
58
59
  ```typescript
59
- // config.ts
60
- import { createEnvWithInit } from 'one-env';
61
- import EnvSchema from './env-schema';
60
+ // env.ts
61
+ import { createEnvWithInit } from '@efebia/one-env';
62
+ import EnvSchema from './env-schema.js';
62
63
 
63
- // Create env instance
64
+ // Create env instance (singleton pattern)
64
65
  const env = createEnvWithInit(EnvSchema);
66
+ export default env;
67
+
68
+ // app.ts
69
+ import env from './env.js';
65
70
 
66
71
  // Initialize with YAML file
67
72
  env.init({ file: './env.local.yml' });
@@ -80,11 +85,13 @@ export const config = {
80
85
  };
81
86
  ```
82
87
 
88
+ **Note**: Using `createEnvWithInit` as a singleton helps with concurrency and prevents errors from calling `env.get()` before initialization due to import order issues.
89
+
83
90
  ### 3. Alternative: Immediate initialization
84
91
 
85
92
  ```typescript
86
- import { createEnv } from 'one-env';
87
- import EnvSchema from './env-schema';
93
+ import { createEnv } from '@efebia/one-env';
94
+ import EnvSchema from './env-schema.js';
88
95
 
89
96
  // Initialize immediately
90
97
  const env = createEnv({
@@ -98,7 +105,7 @@ const port = env.get('port');
98
105
 
99
106
  ## CLI Tools
100
107
 
101
- one-env includes powerful CLI tools for managing your environment configuration:
108
+ @efebia/one-env includes powerful CLI tools for managing your environment configuration:
102
109
 
103
110
  ### Generate environment file
104
111
 
@@ -109,7 +116,7 @@ Create a new environment file with default values from your schema:
109
116
  one-env generate -s ./env-schema.js
110
117
 
111
118
  # Generate with custom output
112
- one-env generate -s ./env-schema.js -o env.example.yml
119
+ one-env generate -s ./env-schema.js -o env.prod.yml
113
120
 
114
121
  # Force overwrite existing file
115
122
  one-env generate -s ./env-schema.js --force
@@ -145,6 +152,62 @@ one-env validate-aws -s ./env-schema.js --secret-name my-app/prod --profile prod
145
152
  one-env validate-aws -s ./env-schema.js --secret-name my-app/prod --region us-east-1
146
153
  ```
147
154
 
155
+ ### Pull from AWS Secrets Manager
156
+
157
+ Pull your environment configuration from AWS Secrets Manager to a local file:
158
+
159
+ ```bash
160
+ # Pull from AWS to local file
161
+ one-env pull -s ./env-schema.js --secret-name dev-envs
162
+
163
+ # Pull with custom output file
164
+ one-env pull -s ./env-schema.js --secret-name prod-envs --output env.prod.yml
165
+
166
+ # Force overwrite existing file
167
+ one-env pull -s ./env-schema.js --secret-name dev-envs --force
168
+
169
+ # With specific AWS profile and region
170
+ one-env pull -s ./env-schema.js --secret-name dev-envs --profile development --region us-east-1
171
+ ```
172
+
173
+ ### Push to AWS Secrets Manager
174
+
175
+ Push your local environment configuration to AWS Secrets Manager:
176
+
177
+ ```bash
178
+ # Push to AWS (with confirmation prompt)
179
+ one-env push -s ./env-schema.js --file env.prod.yml --secret-name prod-envs
180
+
181
+ # Push with environment tag
182
+ one-env push -s ./env-schema.js --file env.prod.yml --secret-name prod-envs --environment production
183
+
184
+ # Dry-run to preview what will be pushed
185
+ one-env push -s ./env-schema.js --file env.prod.yml --secret-name prod-envs --dry-run
186
+
187
+ # Skip confirmation prompt (for CI/CD)
188
+ one-env push -s ./env-schema.js --file env.prod.yml --secret-name prod-envs --force
189
+
190
+ # With specific AWS profile and region
191
+ one-env push -s ./env-schema.js --file env.prod.yml --secret-name prod-envs --profile production --region us-east-1
192
+ ```
193
+
194
+ ### Typical Workflow
195
+
196
+ Update a single value in development:
197
+
198
+ ```bash
199
+ # 1. Pull current configuration
200
+ one-env pull -s ./env-schema.js --secret-name dev-envs
201
+
202
+ # 2. Edit the file locally
203
+ vim env.pulled.yml # Change databaseUrl or any other value
204
+
205
+ # 3. Push changes back
206
+ one-env push -s ./env-schema.js --file env.pulled.yml --secret-name dev-envs
207
+ ```
208
+
209
+ **Security Note**: Never commit files containing actual secrets. Use `.gitignore` to exclude environment files with sensitive data.
210
+
148
211
  ## API Reference
149
212
 
150
213
  ### `createEnv(options)`
@@ -227,49 +290,36 @@ export default z.object({
227
290
 
228
291
  ### 2. Environment-specific Files
229
292
 
230
- Use different files for different environments:
293
+ The schema auto-generates environment files with defaults:
231
294
 
232
295
  ```
233
296
  env.local.yml # Local development (gitignored)
234
- env.test.yml # Test environment
235
- env.example.yml # Example file (committed)
236
297
  ```
237
298
 
238
- ### 3. CI/CD Integration
239
-
240
- ```yaml
241
- # .github/workflows/validate.yml
242
- - name: Validate environment
243
- run: |
244
- npx one-env validate -s ./env-schema.js --json
245
-
246
- - name: Validate production secrets
247
- run: |
248
- npx one-env validate-aws \
249
- -s ./env-schema.js \
250
- --secret-name prod/myapp \
251
- --profile production
252
- ```
299
+ Use the `generate` command to create new environment files from your schema, eliminating the need for example files.
253
300
 
254
- ### 4. Type Exports
301
+ ### 3. Singleton Pattern
255
302
 
256
- Export types for use across your application:
303
+ Create a singleton instance to avoid initialization issues:
257
304
 
258
305
  ```typescript
259
- // config.ts
260
- import { createEnvWithInit } from 'one-env';
261
- import { z } from 'zod/v4';
262
- import EnvSchema from './env-schema';
263
-
264
- export type Config = z.infer<typeof EnvSchema>;
306
+ // env.ts
307
+ import { createEnvWithInit } from '@efebia/one-env';
308
+ import EnvSchema from '../../env-schema.js';
265
309
 
266
310
  const env = createEnvWithInit(EnvSchema);
267
311
  export default env;
268
312
  ```
269
313
 
314
+ This pattern:
315
+ - Prevents race conditions during initialization
316
+ - Handles import order dependencies gracefully
317
+ - Ensures consistent state across your application
318
+ - Avoids errors from calling `env.get()` before `env.init()`
319
+
270
320
  ## Error Handling
271
321
 
272
- one-env provides clear error messages for configuration issues:
322
+ @efebia/one-env provides clear error messages for configuration issues:
273
323
 
274
324
  ```
275
325
  Environment validation failed:
@@ -280,8 +330,8 @@ Environment validation failed:
280
330
 
281
331
  ## Requirements
282
332
 
283
- - Node.js >= 18.0.0
284
- - Zod v4 (peer dependency)
333
+ - Node.js >= 20.0.0
334
+ - Zod (^4.0.0 peer dependency)
285
335
 
286
336
  ## License
287
337
 
@@ -293,4 +343,11 @@ Contributions are welcome! Please feel free to submit a Pull Request.
293
343
 
294
344
  ## Support
295
345
 
296
- For bugs and feature requests, please [create an issue](https://github.com/yourusername/one-env/issues).
346
+ For bugs and feature requests, please [create an issue](https://github.com/efebia/be-libs/issues).
347
+
348
+ ## Changelog
349
+
350
+ ### 1.0.2 (Upcoming)
351
+ - Add `pull` command to download secrets from AWS Secrets Manager
352
+ - Rename `upload` command to `push` for consistent workflow
353
+ - Fix Node.js version requirement (>= 20.0.0)
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Pull command implementation
3
+ * Pulls environment configuration from AWS Secrets Manager to a local file
4
+ */
5
+ import { PullOptions } from '../types.js';
6
+ /**
7
+ * Handles the pull command
8
+ * @param options - Command options
9
+ */
10
+ export declare function handlePullCommand(options: PullOptions): Promise<void>;
11
+ //# sourceMappingURL=pull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+F3E"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Pull command implementation
3
+ * Pulls environment configuration from AWS Secrets Manager to a local file
4
+ */
5
+ import chalk from 'chalk';
6
+ import { createSecretsManagerClient, getSecretValue } from '../utils/aws.js';
7
+ import { resolvePath, fileExists, writeFile, createYamlContent } from '../utils/file.js';
8
+ import { validateEnvData } from '../utils/validation.js';
9
+ import { printValidationResults, printStatus } from '../utils/formatting.js';
10
+ import { loadSchema, formatSchemaSource } from '../utils/schema-loader.js';
11
+ import readline from 'node:readline/promises';
12
+ /**
13
+ * Handles the pull command
14
+ * @param options - Command options
15
+ */
16
+ export async function handlePullCommand(options) {
17
+ // Configure AWS client
18
+ const client = createSecretsManagerClient(options.region, options.profile);
19
+ try {
20
+ // Load schema dynamically
21
+ printStatus(`Loading schema from ${formatSchemaSource(options.schema)}...`, 'info');
22
+ const schema = await loadSchema(options.schema);
23
+ // Fetch secret from AWS
24
+ printStatus(`Fetching secret '${options.secretName}' from AWS Secrets Manager...`, 'info');
25
+ const secretData = await getSecretValue(client, options.secretName);
26
+ // Validate against schema
27
+ printStatus('Validating pulled configuration against schema...', 'info');
28
+ const validationResults = validateEnvData(secretData, schema, options.secretName, options.region);
29
+ if (!validationResults.success) {
30
+ console.error(`\n${chalk.red.bold('Warning:')} Pulled configuration has validation issues\n`);
31
+ printValidationResults(validationResults);
32
+ console.log(`\n${chalk.yellow('Note:')} The configuration will still be saved, but you should fix these issues before pushing.`);
33
+ }
34
+ else {
35
+ printStatus('Configuration is valid!', 'success');
36
+ }
37
+ // Check if output file exists
38
+ const outputPath = resolvePath(options.output);
39
+ if (fileExists(outputPath) && !options.force) {
40
+ const rl = readline.createInterface({
41
+ input: process.stdin,
42
+ output: process.stdout
43
+ });
44
+ console.log(`\n${chalk.yellow.bold('Warning:')} File '${options.output}' already exists`);
45
+ const answer = await rl.question(`\nDo you want to overwrite it? (yes/no): `);
46
+ rl.close();
47
+ if (answer.toLowerCase() !== 'yes' && answer.toLowerCase() !== 'y') {
48
+ console.log('\n' + chalk.yellow('Pull cancelled'));
49
+ process.exit(0);
50
+ }
51
+ }
52
+ // Create YAML content with header
53
+ const header = `# Environment Configuration File
54
+ # Pulled from AWS Secrets Manager
55
+ # Secret: ${options.secretName}
56
+ # Region: ${options.region}
57
+ # Date: ${new Date().toISOString()}
58
+ #
59
+ # WARNING: This file contains secrets! Do not commit to version control.
60
+ # Add to .gitignore: ${options.output}
61
+
62
+ `;
63
+ const yamlContent = createYamlContent(secretData);
64
+ const fullContent = header + yamlContent.split('\n').slice(3).join('\n'); // Remove default header
65
+ // Write to file
66
+ writeFile(outputPath, fullContent);
67
+ printStatus(`Configuration saved to '${options.output}'`, 'success');
68
+ console.log(`\n${chalk.green.bold('Success!')} Environment configuration has been pulled`);
69
+ console.log(`\n${chalk.yellow.bold('Security reminder:')}`);
70
+ console.log(` - Do not commit this file to version control`);
71
+ console.log(` - Add '${options.output}' to your .gitignore file`);
72
+ console.log(` - Consider adding pattern 'env.*.yml' to .gitignore`);
73
+ console.log(`\n${chalk.cyan('Next steps:')}`);
74
+ console.log(` 1. Edit '${options.output}' to make your changes`);
75
+ console.log(` 2. Push changes back:`);
76
+ console.log(chalk.cyan(` one-env push --schema ${options.schema} --file ${options.output} --secret-name ${options.secretName} --region ${options.region}`));
77
+ }
78
+ catch (error) {
79
+ const tips = [];
80
+ if (error.message.includes('not found')) {
81
+ tips.push('Check that the secret name and region are correct.');
82
+ tips.push('Ensure you have AWS credentials configured.');
83
+ }
84
+ else if (error.message.includes('credentials')) {
85
+ tips.push("Configure AWS credentials using 'aws configure' or environment variables.");
86
+ }
87
+ else if (error.message.includes('AccessDenied')) {
88
+ tips.push('Ensure your AWS credentials have permission to read secrets.');
89
+ tips.push('Required permission: secretsmanager:GetSecretValue');
90
+ }
91
+ console.error(`\n${chalk.red.bold('Error:')} ${error.message}\n`);
92
+ tips.forEach(tip => {
93
+ console.log(`${chalk.yellow('Tip:')} ${tip}`);
94
+ });
95
+ process.exit(1);
96
+ }
97
+ }
98
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Push command implementation
3
+ * Pushes environment configuration to AWS Secrets Manager
4
+ */
5
+ import { PushOptions } from '../types.js';
6
+ /**
7
+ * Handles the push command
8
+ * @param options - Command options
9
+ */
10
+ export declare function handlePushCommand(options: PushOptions): Promise<void>;
11
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkH3E"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Push command implementation
3
+ * Pushes environment configuration to AWS Secrets Manager
4
+ */
5
+ import chalk from 'chalk';
6
+ import { createSecretsManagerClient, createOrUpdateSecret, getSecretValue } from '../utils/aws.js';
7
+ import { resolvePath, loadYamlFile } from '../utils/file.js';
8
+ import { validateEnvData } from '../utils/validation.js';
9
+ import { printValidationResults, printStatus } from '../utils/formatting.js';
10
+ import { loadSchema, formatSchemaSource } from '../utils/schema-loader.js';
11
+ import readline from 'node:readline/promises';
12
+ /**
13
+ * Handles the push command
14
+ * @param options - Command options
15
+ */
16
+ export async function handlePushCommand(options) {
17
+ // Configure AWS client
18
+ const client = createSecretsManagerClient(options.region, options.profile);
19
+ try {
20
+ // Load schema dynamically
21
+ printStatus(`Loading schema from ${formatSchemaSource(options.schema)}...`, 'info');
22
+ const schema = await loadSchema(options.schema);
23
+ // Load environment file
24
+ printStatus(`Loading environment file '${options.file}'...`, 'info');
25
+ const filePath = resolvePath(options.file);
26
+ const envData = loadYamlFile(filePath);
27
+ // Validate against schema first
28
+ printStatus('Validating configuration against schema...', 'info');
29
+ const validationResults = validateEnvData(envData, schema, options.file);
30
+ if (!validationResults.success) {
31
+ console.error(`\n${chalk.red.bold('Error:')} Configuration validation failed\n`);
32
+ printValidationResults(validationResults);
33
+ process.exit(1);
34
+ }
35
+ printStatus('Configuration is valid!', 'success');
36
+ // Check if secret exists (for dry-run info)
37
+ let secretExists = false;
38
+ try {
39
+ await getSecretValue(client, options.secretName);
40
+ secretExists = true;
41
+ }
42
+ catch (error) {
43
+ if (!error.message.includes('not found')) {
44
+ throw error; // Re-throw if it's not a "not found" error
45
+ }
46
+ }
47
+ // Dry-run mode
48
+ if (options.dryRun) {
49
+ console.log(`\n${chalk.blue.bold('DRY-RUN MODE:')} No changes will be made\n`);
50
+ console.log(chalk.cyan('Secret Details:'));
51
+ console.log(` Name: ${options.secretName}`);
52
+ console.log(` Region: ${options.region}`);
53
+ console.log(` Environment: ${options.environment || 'Not specified'}`);
54
+ console.log(` Status: ${secretExists ? 'UPDATE existing secret' : 'CREATE new secret'}`);
55
+ if (secretExists) {
56
+ console.log(`\n${chalk.yellow('Note:')} Secret already exists and will be updated`);
57
+ }
58
+ console.log(`\n${chalk.cyan('Configuration to push:')}`);
59
+ console.log(JSON.stringify(envData, null, 2));
60
+ return;
61
+ }
62
+ // Confirmation prompt (unless --force)
63
+ if (!options.force) {
64
+ const rl = readline.createInterface({
65
+ input: process.stdin,
66
+ output: process.stdout
67
+ });
68
+ console.log(`\n${chalk.yellow.bold('Warning:')} You are about to ${secretExists ? 'UPDATE' : 'CREATE'} a secret in AWS Secrets Manager`);
69
+ console.log(` Secret: ${options.secretName}`);
70
+ console.log(` Region: ${options.region}`);
71
+ if (options.environment) {
72
+ console.log(` Environment: ${options.environment}`);
73
+ }
74
+ const answer = await rl.question(`\nDo you want to continue? (yes/no): `);
75
+ rl.close();
76
+ if (answer.toLowerCase() !== 'yes' && answer.toLowerCase() !== 'y') {
77
+ console.log('\n' + chalk.yellow('Push cancelled'));
78
+ process.exit(0);
79
+ }
80
+ }
81
+ // Push to AWS
82
+ printStatus(`${secretExists ? 'Updating' : 'Creating'} secret '${options.secretName}' in AWS Secrets Manager...`, 'info');
83
+ const tags = options.environment ? [
84
+ { Key: 'Environment', Value: options.environment },
85
+ { Key: 'ManagedBy', Value: 'one-env' }
86
+ ] : [
87
+ { Key: 'ManagedBy', Value: 'one-env' }
88
+ ];
89
+ await createOrUpdateSecret(client, options.secretName, envData, tags);
90
+ printStatus(`Secret '${options.secretName}' ${secretExists ? 'updated' : 'created'} successfully!`, 'success');
91
+ console.log(`\n${chalk.green.bold('Success!')} Environment configuration has been pushed`);
92
+ console.log(`\nYou can validate it with:`);
93
+ console.log(chalk.cyan(` one-env validate-aws --schema ${options.schema} --secret-name ${options.secretName} --region ${options.region}`));
94
+ }
95
+ catch (error) {
96
+ const tips = [];
97
+ if (error.message.includes('credentials')) {
98
+ tips.push("Configure AWS credentials using 'aws configure' or environment variables.");
99
+ }
100
+ else if (error.message.includes('AccessDenied')) {
101
+ tips.push('Ensure your AWS credentials have permission to create/update secrets.');
102
+ tips.push('Required permissions: secretsmanager:CreateSecret, secretsmanager:UpdateSecret, secretsmanager:TagResource');
103
+ }
104
+ console.error(`\n${chalk.red.bold('Error:')} ${error.message}\n`);
105
+ tips.forEach(tip => {
106
+ console.log(`${chalk.yellow('Tip:')} ${tip}`);
107
+ });
108
+ process.exit(1);
109
+ }
110
+ }
111
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@
6
6
  * - generate: Creates new environment files with default values from schema
7
7
  * - validate: Validates existing environment files against the schema
8
8
  * - validate-aws: Validates AWS Secrets Manager secrets against the schema
9
+ * - pull: Pulls environment configuration from AWS Secrets Manager
10
+ * - push: Pushes environment configuration to AWS Secrets Manager
9
11
  */
10
12
  export {};
11
13
  //# sourceMappingURL=env-tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-tool.d.ts","sourceRoot":"","sources":["../../src/cli/env-tool.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
1
+ {"version":3,"file":"env-tool.d.ts","sourceRoot":"","sources":["../../src/cli/env-tool.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG"}
@@ -6,12 +6,16 @@
6
6
  * - generate: Creates new environment files with default values from schema
7
7
  * - validate: Validates existing environment files against the schema
8
8
  * - validate-aws: Validates AWS Secrets Manager secrets against the schema
9
+ * - pull: Pulls environment configuration from AWS Secrets Manager
10
+ * - push: Pushes environment configuration to AWS Secrets Manager
9
11
  */
10
12
  import { Command } from 'commander';
11
13
  import chalk from 'chalk';
12
14
  import { handleGenerateCommand } from './commands/generate.js';
13
15
  import { handleValidateCommand } from './commands/validate.js';
14
16
  import { handleValidateAwsCommand } from './commands/validate-aws.js';
17
+ import { handlePushCommand } from './commands/push.js';
18
+ import { handlePullCommand } from './commands/pull.js';
15
19
  // ============================================================================
16
20
  // MAIN CLI SETUP
17
21
  // ============================================================================
@@ -46,6 +50,30 @@ program
46
50
  .option('--profile <profile>', 'AWS profile to use (optional)')
47
51
  .option('--json', 'Output results in JSON format', false)
48
52
  .action(handleValidateAwsCommand);
53
+ // Pull command
54
+ program
55
+ .command('pull')
56
+ .description('Pull environment configuration from AWS Secrets Manager')
57
+ .requiredOption('-s, --schema <path>', 'Path to schema file (TypeScript or JavaScript)')
58
+ .option('--secret-name <name>', 'Name of the secret in AWS Secrets Manager', 'envs')
59
+ .option('--output <file>', 'Output file name', 'env.pulled.yml')
60
+ .option('--region <region>', 'AWS region', process.env['AWS_REGION'] || 'eu-west-1')
61
+ .option('--profile <profile>', 'AWS profile to use (optional)')
62
+ .option('--force', 'Overwrite existing file without confirmation', false)
63
+ .action(handlePullCommand);
64
+ // Push command
65
+ program
66
+ .command('push')
67
+ .description('Push environment configuration to AWS Secrets Manager')
68
+ .requiredOption('-s, --schema <path>', 'Path to schema file (TypeScript or JavaScript)')
69
+ .requiredOption('--file <path>', 'Path to the environment file to push')
70
+ .option('--secret-name <name>', 'Name of the secret in AWS Secrets Manager', 'envs')
71
+ .option('--region <region>', 'AWS region', process.env['AWS_REGION'] || 'eu-west-1')
72
+ .option('--profile <profile>', 'AWS profile to use (optional)')
73
+ .option('--environment <env>', 'Environment tag (e.g., dev, staging, prod)')
74
+ .option('--dry-run', 'Preview what would be pushed without making changes', false)
75
+ .option('--force', 'Skip confirmation prompts', false)
76
+ .action(handlePushCommand);
49
77
  // Check dependencies before running
50
78
  try {
51
79
  await import('js-yaml');
@@ -1 +1 @@
1
- {"version":3,"file":"env-tool.js","sourceRoot":"","sources":["../../src/cli/env-tool.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,wCAAwC,CAAC;KACrD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,mBAAmB;AACnB,OAAO;KACF,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,cAAc,CAAC,qBAAqB,EAAE,gDAAgD,CAAC;KACvF,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,eAAe,CAAC;KAClE,MAAM,CAAC,aAAa,EAAE,8CAA8C,EAAE,KAAK,CAAC;KAC5E,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEnC,mBAAmB;AACnB,OAAO;KACF,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,mDAAmD,CAAC;KAChE,cAAc,CAAC,qBAAqB,EAAE,gDAAgD,CAAC;KACvF,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,eAAe,CAAC;KAC5E,MAAM,CAAC,QAAQ,EAAE,+BAA+B,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEnC,uBAAuB;AACvB,OAAO;KACF,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,qDAAqD,CAAC;KAClE,cAAc,CAAC,qBAAqB,EAAE,gDAAgD,CAAC;KACvF,MAAM,CAAC,sBAAsB,EAAE,2CAA2C,EAAE,MAAM,CAAC;KACnF,MAAM,CAAC,mBAAmB,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;KAC9D,MAAM,CAAC,QAAQ,EAAE,+BAA+B,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEtC,oCAAoC;AACpC,IAAI,CAAC;IACD,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;IAC5E,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,cAAc;AACd,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"env-tool.js","sourceRoot":"","sources":["../../src/cli/env-tool.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,24 @@ export interface ValidateAwsOptions {
18
18
  profile?: string;
19
19
  json: boolean;
20
20
  }
21
+ export interface PushOptions {
22
+ schema: string;
23
+ file: string;
24
+ secretName: string;
25
+ region: string;
26
+ profile?: string;
27
+ environment?: string;
28
+ dryRun: boolean;
29
+ force: boolean;
30
+ }
31
+ export interface PullOptions {
32
+ schema: string;
33
+ secretName: string;
34
+ output: string;
35
+ region: string;
36
+ profile?: string;
37
+ force: boolean;
38
+ }
21
39
  export interface ValidationResult {
22
40
  success: boolean;
23
41
  source: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC5B,eAAe,EAAE,cAAc,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAGD,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAGD,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,kBAAkB,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AWS utilities for the environment CLI tool
3
3
  */
4
- import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
4
+ import { SecretsManagerClient, Tag } from '@aws-sdk/client-secrets-manager';
5
5
  /**
6
6
  * Creates an AWS Secrets Manager client
7
7
  * @param region - AWS region
@@ -17,4 +17,13 @@ export declare function createSecretsManagerClient(region: string, profile?: str
17
17
  * @throws Error if secret not found or has no value
18
18
  */
19
19
  export declare function getSecretValue(client: SecretsManagerClient, secretName: string): Promise<any>;
20
+ /**
21
+ * Creates or updates a secret in AWS Secrets Manager
22
+ * @param client - SecretsManagerClient instance
23
+ * @param secretName - Name of the secret to create/update
24
+ * @param secretData - The data to store in the secret
25
+ * @param tags - Optional tags to apply to the secret
26
+ * @throws Error if creation/update fails
27
+ */
28
+ export declare function createOrUpdateSecret(client: SecretsManagerClient, secretName: string, secretData: any, tags?: Tag[]): Promise<void>;
20
29
  //# sourceMappingURL=aws.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/aws.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAyB,MAAM,iCAAiC,CAAC;AAE9F;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAWjG;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAsBnG"}
1
+ {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/aws.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,oBAAoB,EAIpB,GAAG,EACN,MAAM,iCAAiC,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAWjG;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAsBnG;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,oBAAoB,EAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,EACf,IAAI,CAAC,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AWS utilities for the environment CLI tool
3
3
  */
4
- import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
4
+ import { SecretsManagerClient, GetSecretValueCommand, CreateSecretCommand, UpdateSecretCommand } from '@aws-sdk/client-secrets-manager';
5
5
  /**
6
6
  * Creates an AWS Secrets Manager client
7
7
  * @param region - AWS region
@@ -47,4 +47,37 @@ export async function getSecretValue(client, secretName) {
47
47
  throw error;
48
48
  }
49
49
  }
50
+ /**
51
+ * Creates or updates a secret in AWS Secrets Manager
52
+ * @param client - SecretsManagerClient instance
53
+ * @param secretName - Name of the secret to create/update
54
+ * @param secretData - The data to store in the secret
55
+ * @param tags - Optional tags to apply to the secret
56
+ * @throws Error if creation/update fails
57
+ */
58
+ export async function createOrUpdateSecret(client, secretName, secretData, tags) {
59
+ const secretString = JSON.stringify(secretData, null, 2);
60
+ try {
61
+ // Try to create the secret first
62
+ const createCommand = new CreateSecretCommand({
63
+ Name: secretName,
64
+ SecretString: secretString,
65
+ Tags: tags
66
+ });
67
+ await client.send(createCommand);
68
+ }
69
+ catch (error) {
70
+ if (error.name === 'ResourceExistsException') {
71
+ // Secret already exists, update it instead
72
+ const updateCommand = new UpdateSecretCommand({
73
+ SecretId: secretName,
74
+ SecretString: secretString
75
+ });
76
+ await client.send(updateCommand);
77
+ }
78
+ else {
79
+ throw error;
80
+ }
81
+ }
82
+ }
50
83
  //# sourceMappingURL=aws.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aws.js","sourceRoot":"","sources":["../../../src/cli/utils/aws.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,OAAgB;IACvE,MAAM,YAAY,GAAQ;QACtB,MAAM,EAAE,MAAM;KACjB,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACV,uCAAuC;QACvC,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B,EAAE,UAAkB;IACjF,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC;YACtC,QAAQ,EAAE,UAAU;SACvB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,oCAAoC,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"aws.js","sourceRoot":"","sources":["../../../src/cli/utils/aws.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EAEtB,MAAM,iCAAiC,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,OAAgB;IACvE,MAAM,YAAY,GAAQ;QACtB,MAAM,EAAE,MAAM;KACjB,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACV,uCAAuC;QACvC,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B,EAAE,UAAkB;IACjF,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC;YACtC,QAAQ,EAAE,UAAU;SACvB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,oCAAoC,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,MAA4B,EAC5B,UAAkB,EAClB,UAAe,EACf,IAAY;IAEZ,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC;QACD,iCAAiC;QACjC,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC;YAC1C,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;YAC3C,2CAA2C;YAC3C,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC;gBAC1C,QAAQ,EAAE,UAAU;gBACpB,YAAY,EAAE,YAAY;aAC7B,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@efebia/one-env",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Type-safe environment configuration with validation and CLI tools",
5
5
  "keywords": [
6
6
  "env",