envilder 0.5.6 → 0.6.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/README.md +316 -121
- package/ROADMAP.md +24 -8
- package/lib/apps/cli/Cli.d.ts +3 -0
- package/lib/apps/cli/Cli.d.ts.map +1 -0
- package/lib/apps/cli/Cli.js +79 -0
- package/lib/apps/cli/Cli.js.map +1 -0
- package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts +15 -0
- package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts.map +1 -0
- package/lib/envilder/application/dispatch/DispatchActionCommand.js +26 -0
- package/lib/envilder/application/dispatch/DispatchActionCommand.js.map +1 -0
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts +16 -0
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts.map +1 -0
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js +68 -0
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js.map +1 -0
- package/lib/envilder/application/dispatch/builders/DispatchActionCommandHandlerBuilder.d.ts +15 -0
- package/lib/envilder/application/dispatch/builders/DispatchActionCommandHandlerBuilder.d.ts.map +1 -0
- package/lib/envilder/application/dispatch/builders/DispatchActionCommandHandlerBuilder.js +38 -0
- package/lib/envilder/application/dispatch/builders/DispatchActionCommandHandlerBuilder.js.map +1 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.d.ts +7 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.d.ts.map +1 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.js +10 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.js.map +1 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.d.ts +24 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.d.ts.map +1 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.js +92 -0
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.js.map +1 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.d.ts +7 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.d.ts.map +1 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.js +10 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.js.map +1 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.d.ts +22 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.d.ts.map +1 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.js +74 -0
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.js.map +1 -0
- package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts +8 -0
- package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts.map +1 -0
- package/lib/envilder/application/pushSingle/PushSingleCommand.js +11 -0
- package/lib/envilder/application/pushSingle/PushSingleCommand.js.map +1 -0
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts +15 -0
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts.map +1 -0
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js +37 -0
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js.map +1 -0
- package/lib/envilder/domain/CliOptions.d.ts +34 -0
- package/lib/envilder/domain/CliOptions.d.ts.map +1 -0
- package/lib/envilder/domain/CliOptions.js +2 -0
- package/lib/envilder/domain/CliOptions.js.map +1 -0
- package/lib/envilder/domain/EnvironmentVariable.d.ts +37 -0
- package/lib/envilder/domain/EnvironmentVariable.d.ts.map +1 -0
- package/lib/envilder/domain/EnvironmentVariable.js +59 -0
- package/lib/envilder/domain/EnvironmentVariable.js.map +1 -0
- package/lib/envilder/domain/OperationMode.d.ts +6 -0
- package/lib/envilder/domain/OperationMode.d.ts.map +1 -0
- package/lib/envilder/domain/OperationMode.js +7 -0
- package/lib/envilder/domain/OperationMode.js.map +1 -0
- package/lib/envilder/domain/errors/DomainErrors.d.ts +34 -0
- package/lib/envilder/domain/errors/DomainErrors.d.ts.map +1 -0
- package/lib/envilder/domain/errors/DomainErrors.js +40 -0
- package/lib/envilder/domain/errors/DomainErrors.js.map +1 -0
- package/lib/envilder/domain/ports/IEnvFileManager.d.ts.map +1 -0
- package/lib/envilder/domain/ports/IEnvFileManager.js.map +1 -0
- package/lib/envilder/domain/ports/ILogger.d.ts.map +1 -0
- package/lib/envilder/domain/ports/ILogger.js.map +1 -0
- package/lib/envilder/domain/ports/ISecretProvider.d.ts +5 -0
- package/lib/envilder/domain/ports/ISecretProvider.d.ts.map +1 -0
- package/lib/envilder/domain/ports/ISecretProvider.js.map +1 -0
- package/lib/{cli/infrastructure → envilder/infrastructure/Aws}/AwsSsmSecretProvider.d.ts +2 -1
- package/lib/envilder/infrastructure/Aws/AwsSsmSecretProvider.d.ts.map +1 -0
- package/lib/envilder/infrastructure/Aws/AwsSsmSecretProvider.js +49 -0
- package/lib/envilder/infrastructure/Aws/AwsSsmSecretProvider.js.map +1 -0
- package/lib/{cli/infrastructure → envilder/infrastructure/EnvManager}/EnvFileManager.d.ts +2 -2
- package/lib/envilder/infrastructure/EnvManager/EnvFileManager.d.ts.map +1 -0
- package/lib/{cli/infrastructure → envilder/infrastructure/EnvManager}/EnvFileManager.js +24 -8
- package/lib/envilder/infrastructure/EnvManager/EnvFileManager.js.map +1 -0
- package/lib/{cli/infrastructure → envilder/infrastructure/Logger}/ConsoleLogger.d.ts +1 -1
- package/lib/envilder/infrastructure/Logger/ConsoleLogger.d.ts.map +1 -0
- package/lib/envilder/infrastructure/Logger/ConsoleLogger.js.map +1 -0
- package/lib/envilder/infrastructure/VersionFinder/PackageJsonFinder.d.ts.map +1 -0
- package/lib/envilder/infrastructure/VersionFinder/PackageJsonFinder.js.map +1 -0
- package/package.json +7 -5
- package/lib/Cli.d.ts +0 -10
- package/lib/Cli.d.ts.map +0 -1
- package/lib/Cli.js +0 -58
- package/lib/Cli.js.map +0 -1
- package/lib/cli/application/EnvilderHandler.d.ts +0 -21
- package/lib/cli/application/EnvilderHandler.d.ts.map +0 -1
- package/lib/cli/application/EnvilderHandler.js +0 -74
- package/lib/cli/application/EnvilderHandler.js.map +0 -1
- package/lib/cli/application/builders/EnvilderBuilder.d.ts +0 -18
- package/lib/cli/application/builders/EnvilderBuilder.d.ts.map +0 -1
- package/lib/cli/application/builders/EnvilderBuilder.js +0 -53
- package/lib/cli/application/builders/EnvilderBuilder.js.map +0 -1
- package/lib/cli/domain/ports/IEnvFileManager.d.ts.map +0 -1
- package/lib/cli/domain/ports/IEnvFileManager.js.map +0 -1
- package/lib/cli/domain/ports/ILogger.d.ts.map +0 -1
- package/lib/cli/domain/ports/ILogger.js.map +0 -1
- package/lib/cli/domain/ports/ISecretProvider.d.ts +0 -4
- package/lib/cli/domain/ports/ISecretProvider.d.ts.map +0 -1
- package/lib/cli/domain/ports/ISecretProvider.js.map +0 -1
- package/lib/cli/infrastructure/AwsSsmSecretProvider.d.ts.map +0 -1
- package/lib/cli/infrastructure/AwsSsmSecretProvider.js +0 -26
- package/lib/cli/infrastructure/AwsSsmSecretProvider.js.map +0 -1
- package/lib/cli/infrastructure/ConsoleLogger.d.ts.map +0 -1
- package/lib/cli/infrastructure/ConsoleLogger.js.map +0 -1
- package/lib/cli/infrastructure/EnvFileManager.d.ts.map +0 -1
- package/lib/cli/infrastructure/EnvFileManager.js.map +0 -1
- package/lib/cli/infrastructure/PackageJsonFinder.d.ts.map +0 -1
- package/lib/cli/infrastructure/PackageJsonFinder.js.map +0 -1
- /package/lib/{cli → envilder}/domain/ports/IEnvFileManager.d.ts +0 -0
- /package/lib/{cli → envilder}/domain/ports/IEnvFileManager.js +0 -0
- /package/lib/{cli → envilder}/domain/ports/ILogger.d.ts +0 -0
- /package/lib/{cli → envilder}/domain/ports/ILogger.js +0 -0
- /package/lib/{cli → envilder}/domain/ports/ISecretProvider.js +0 -0
- /package/lib/{cli/infrastructure → envilder/infrastructure/Logger}/ConsoleLogger.js +0 -0
- /package/lib/{cli/infrastructure → envilder/infrastructure/VersionFinder}/PackageJsonFinder.d.ts +0 -0
- /package/lib/{cli/infrastructure → envilder/infrastructure/VersionFinder}/PackageJsonFinder.js +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class PushSingleCommand {
|
|
2
|
+
constructor(key, value, ssmPath) {
|
|
3
|
+
this.key = key;
|
|
4
|
+
this.value = value;
|
|
5
|
+
this.ssmPath = ssmPath;
|
|
6
|
+
}
|
|
7
|
+
static create(key, value, ssmPath) {
|
|
8
|
+
return new PushSingleCommand(key, value, ssmPath);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=PushSingleCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PushSingleCommand.js","sourceRoot":"","sources":["../../../../src/envilder/application/pushSingle/PushSingleCommand.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IAC5B,YACkB,GAAW,EACX,KAAa,EACb,OAAe;QAFf,QAAG,GAAH,GAAG,CAAQ;QACX,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAQ;IAC9B,CAAC;IAEJ,MAAM,CAAC,MAAM,CACX,GAAW,EACX,KAAa,EACb,OAAe;QAEf,OAAO,IAAI,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ILogger } from '../../domain/ports/ILogger.js';
|
|
2
|
+
import type { ISecretProvider } from '../../domain/ports/ISecretProvider.js';
|
|
3
|
+
import type { PushSingleCommand } from './PushSingleCommand.js';
|
|
4
|
+
export declare class PushSingleCommandHandler {
|
|
5
|
+
private readonly secretProvider;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
constructor(secretProvider: ISecretProvider, logger: ILogger);
|
|
8
|
+
/**
|
|
9
|
+
* Handles the PushSingleCommand which pushes a single environment variable to AWS SSM.
|
|
10
|
+
*
|
|
11
|
+
* @param command - The PushSingleCommand containing key, value and ssmPath
|
|
12
|
+
*/
|
|
13
|
+
handle(command: PushSingleCommand): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=PushSingleCommandHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PushSingleCommandHandler.d.ts","sourceRoot":"","sources":["../../../../src/envilder/application/pushSingle/PushSingleCommandHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,cAAc,EAAE,eAAe,EAC/B,MAAM,EAAE,OAAO;IAGlC;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBxD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { EnvironmentVariable } from '../../domain/EnvironmentVariable.js';
|
|
11
|
+
export class PushSingleCommandHandler {
|
|
12
|
+
constructor(secretProvider, logger) {
|
|
13
|
+
this.secretProvider = secretProvider;
|
|
14
|
+
this.logger = logger;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Handles the PushSingleCommand which pushes a single environment variable to AWS SSM.
|
|
18
|
+
*
|
|
19
|
+
* @param command - The PushSingleCommand containing key, value and ssmPath
|
|
20
|
+
*/
|
|
21
|
+
handle(command) {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
try {
|
|
24
|
+
this.logger.info(`Starting push operation for key '${command.key}' to path '${command.ssmPath}'`);
|
|
25
|
+
const envVariable = new EnvironmentVariable(command.key, command.value, true);
|
|
26
|
+
yield this.secretProvider.setSecret(command.ssmPath, command.value);
|
|
27
|
+
this.logger.info(`Pushed ${command.key}=${envVariable.maskedValue} to AWS SSM at path ${command.ssmPath}`);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
31
|
+
this.logger.error(`Failed to push variable to SSM: ${errorMessage}`);
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=PushSingleCommandHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PushSingleCommandHandler.js","sourceRoot":"","sources":["../../../../src/envilder/application/pushSingle/PushSingleCommandHandler.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAK1E,MAAM,OAAO,wBAAwB;IACnC,YACmB,cAA+B,EAC/B,MAAe;QADf,mBAAc,GAAd,cAAc,CAAiB;QAC/B,WAAM,GAAN,MAAM,CAAS;IAC/B,CAAC;IAEJ;;;;OAIG;IACG,MAAM,CAAC,OAA0B;;YACrC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,oCAAoC,OAAO,CAAC,GAAG,cAAc,OAAO,CAAC,OAAO,GAAG,CAChF,CAAC;gBAEF,MAAM,WAAW,GAAG,IAAI,mBAAmB,CACzC,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,KAAK,EACb,IAAI,CACL,CAAC;gBAEF,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,UAAU,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,WAAW,uBAAuB,OAAO,CAAC,OAAO,EAAE,CACzF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,YAAY,EAAE,CAAC,CAAC;gBACrE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for the CLI commands.
|
|
3
|
+
*/
|
|
4
|
+
export type CliOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* Path to the JSON file with environment variable mapping
|
|
7
|
+
*/
|
|
8
|
+
map?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Path to the .env file to be generated or imported
|
|
11
|
+
*/
|
|
12
|
+
envfile?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Single environment variable name to push
|
|
15
|
+
*/
|
|
16
|
+
key?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Value of the single environment variable to push
|
|
19
|
+
*/
|
|
20
|
+
value?: string;
|
|
21
|
+
/**
|
|
22
|
+
* SSM path for the single environment variable
|
|
23
|
+
*/
|
|
24
|
+
ssmPath?: string;
|
|
25
|
+
/**
|
|
26
|
+
* AWS CLI profile to use
|
|
27
|
+
*/
|
|
28
|
+
profile?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Flag to push local .env file back to AWS SSM (renamed from import)
|
|
31
|
+
*/
|
|
32
|
+
push?: boolean;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=CliOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliOptions.d.ts","sourceRoot":"","sources":["../../../src/envilder/domain/CliOptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliOptions.js","sourceRoot":"","sources":["../../../src/envilder/domain/CliOptions.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents an environment variable with validation and business rules.
|
|
3
|
+
*/
|
|
4
|
+
export declare class EnvironmentVariable {
|
|
5
|
+
private readonly _name;
|
|
6
|
+
private readonly _value;
|
|
7
|
+
private readonly _isSecret;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new environment variable
|
|
10
|
+
*
|
|
11
|
+
* @param name - The name of the environment variable
|
|
12
|
+
* @param value - The value of the environment variable
|
|
13
|
+
* @param isSecret - Whether this variable should be treated as sensitive information
|
|
14
|
+
*/
|
|
15
|
+
constructor(name: string, value: string, isSecret?: boolean);
|
|
16
|
+
/**
|
|
17
|
+
* Gets the name of the environment variable
|
|
18
|
+
*/
|
|
19
|
+
get name(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the value of the environment variable
|
|
22
|
+
*/
|
|
23
|
+
get value(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Gets whether this variable is sensitive information
|
|
26
|
+
*/
|
|
27
|
+
get isSecret(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Returns a masked representation of the value for logging
|
|
30
|
+
*/
|
|
31
|
+
get maskedValue(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Validates the environment variable
|
|
34
|
+
*/
|
|
35
|
+
private validate;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=EnvironmentVariable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvironmentVariable.d.ts","sourceRoot":"","sources":["../../../src/envilder/domain/EnvironmentVariable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IAEpC;;;;;;OAMG;gBACS,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe;IAOlE;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAQxB;IAED;;OAEG;IACH,OAAO,CAAC,QAAQ;CAWjB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents an environment variable with validation and business rules.
|
|
3
|
+
*/
|
|
4
|
+
export class EnvironmentVariable {
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new environment variable
|
|
7
|
+
*
|
|
8
|
+
* @param name - The name of the environment variable
|
|
9
|
+
* @param value - The value of the environment variable
|
|
10
|
+
* @param isSecret - Whether this variable should be treated as sensitive information
|
|
11
|
+
*/
|
|
12
|
+
constructor(name, value, isSecret = false) {
|
|
13
|
+
this.validate(name, value);
|
|
14
|
+
this._name = name;
|
|
15
|
+
this._value = value;
|
|
16
|
+
this._isSecret = isSecret;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Gets the name of the environment variable
|
|
20
|
+
*/
|
|
21
|
+
get name() {
|
|
22
|
+
return this._name;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Gets the value of the environment variable
|
|
26
|
+
*/
|
|
27
|
+
get value() {
|
|
28
|
+
return this._value;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Gets whether this variable is sensitive information
|
|
32
|
+
*/
|
|
33
|
+
get isSecret() {
|
|
34
|
+
return this._isSecret;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Returns a masked representation of the value for logging
|
|
38
|
+
*/
|
|
39
|
+
get maskedValue() {
|
|
40
|
+
if (!this._isSecret) {
|
|
41
|
+
return this._value;
|
|
42
|
+
}
|
|
43
|
+
return this._value.length > 10
|
|
44
|
+
? '*'.repeat(this._value.length - 3) + this._value.slice(-3)
|
|
45
|
+
: '*'.repeat(this._value.length);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Validates the environment variable
|
|
49
|
+
*/
|
|
50
|
+
validate(name, value) {
|
|
51
|
+
if (!name || name.trim() === '') {
|
|
52
|
+
throw new Error('Environment variable name cannot be empty');
|
|
53
|
+
}
|
|
54
|
+
if (value === undefined || value === null) {
|
|
55
|
+
throw new Error(`Value for environment variable ${name} cannot be null or undefined`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=EnvironmentVariable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvironmentVariable.js","sourceRoot":"","sources":["../../../src/envilder/domain/EnvironmentVariable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAK9B;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,KAAa,EAAE,WAAoB,KAAK;QAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;YAC5B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,IAAY,EAAE,KAAa;QAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,8BAA8B,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationMode.d.ts","sourceRoot":"","sources":["../../../src/envilder/domain/OperationMode.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;CACpC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var OperationMode;
|
|
2
|
+
(function (OperationMode) {
|
|
3
|
+
OperationMode["PUSH_SINGLE"] = "PUSH_SINGLE";
|
|
4
|
+
OperationMode["PUSH_ENV_TO_SSM"] = "PUSH_ENV_TO_SSM";
|
|
5
|
+
OperationMode["PULL_SSM_TO_ENV"] = "PULL_SSM_TO_ENV";
|
|
6
|
+
})(OperationMode || (OperationMode = {}));
|
|
7
|
+
//# sourceMappingURL=OperationMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationMode.js","sourceRoot":"","sources":["../../../src/envilder/domain/OperationMode.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,4CAA2B,CAAA;IAC3B,oDAAmC,CAAA;IACnC,oDAAmC,CAAA;AACrC,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for all domain-specific errors in the application.
|
|
3
|
+
*/
|
|
4
|
+
export declare class DomainError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when required arguments are missing or invalid.
|
|
9
|
+
*/
|
|
10
|
+
export declare class InvalidArgumentError extends DomainError {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Error thrown when a required dependency is missing.
|
|
14
|
+
*/
|
|
15
|
+
export declare class DependencyMissingError extends DomainError {
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Error thrown when a secret operation fails.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SecretOperationError extends DomainError {
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when an environment file operation fails.
|
|
24
|
+
*/
|
|
25
|
+
export declare class EnvironmentFileError extends DomainError {
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Error thrown when a parameter cannot be found.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ParameterNotFoundError extends DomainError {
|
|
31
|
+
constructor(paramName: string);
|
|
32
|
+
readonly paramName: string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=DomainErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainErrors.d.ts","sourceRoot":"","sources":["../../../../src/envilder/domain/errors/DomainErrors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;CAAG;AAExD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;CAAG;AAE1D;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;CAAG;AAExD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;CAAG;AAExD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBACzC,SAAS,EAAE,MAAM;IAK7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for all domain-specific errors in the application.
|
|
3
|
+
*/
|
|
4
|
+
export class DomainError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = this.constructor.name;
|
|
8
|
+
Error.captureStackTrace(this, this.constructor);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Error thrown when required arguments are missing or invalid.
|
|
13
|
+
*/
|
|
14
|
+
export class InvalidArgumentError extends DomainError {
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when a required dependency is missing.
|
|
18
|
+
*/
|
|
19
|
+
export class DependencyMissingError extends DomainError {
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Error thrown when a secret operation fails.
|
|
23
|
+
*/
|
|
24
|
+
export class SecretOperationError extends DomainError {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Error thrown when an environment file operation fails.
|
|
28
|
+
*/
|
|
29
|
+
export class EnvironmentFileError extends DomainError {
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Error thrown when a parameter cannot be found.
|
|
33
|
+
*/
|
|
34
|
+
export class ParameterNotFoundError extends DomainError {
|
|
35
|
+
constructor(paramName) {
|
|
36
|
+
super(`Parameter not found: ${paramName}`);
|
|
37
|
+
this.paramName = paramName;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=DomainErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainErrors.js","sourceRoot":"","sources":["../../../../src/envilder/domain/errors/DomainErrors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,WAAW;CAAG;AAExD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAAW;CAAG;AAE1D;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,WAAW;CAAG;AAExD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,WAAW;CAAG;AAExD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACrD,YAAY,SAAiB;QAC3B,KAAK,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CAGF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IEnvFileManager.d.ts","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/IEnvFileManager.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IEnvFileManager.js","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/IEnvFileManager.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILogger.d.ts","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/ILogger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILogger.js","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/ILogger.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISecretProvider.d.ts","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/ISecretProvider.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACrD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISecretProvider.js","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/ISecretProvider.ts"],"names":[],"mappings":""}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type SSM } from '@aws-sdk/client-ssm';
|
|
2
|
-
import type { ISecretProvider } from '
|
|
2
|
+
import type { ISecretProvider } from '../../domain/ports/ISecretProvider';
|
|
3
3
|
export declare class AwsSsmSecretProvider implements ISecretProvider {
|
|
4
4
|
private ssm;
|
|
5
5
|
constructor(ssm: SSM);
|
|
6
6
|
getSecret(name: string): Promise<string | undefined>;
|
|
7
|
+
setSecret(name: string, value: string): Promise<void>;
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=AwsSsmSecretProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AwsSsmSecretProvider.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/Aws/AwsSsmSecretProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,OAAO,CAAC,GAAG,CAAM;gBAEL,GAAG,EAAE,GAAG;IAId,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAuBpD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS5D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { GetParameterCommand, PutParameterCommand, } from '@aws-sdk/client-ssm';
|
|
11
|
+
export class AwsSsmSecretProvider {
|
|
12
|
+
constructor(ssm) {
|
|
13
|
+
this.ssm = ssm;
|
|
14
|
+
}
|
|
15
|
+
getSecret(name) {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
try {
|
|
18
|
+
const command = new GetParameterCommand({
|
|
19
|
+
Name: name,
|
|
20
|
+
WithDecryption: true,
|
|
21
|
+
});
|
|
22
|
+
const { Parameter } = yield this.ssm.send(command);
|
|
23
|
+
return Parameter === null || Parameter === void 0 ? void 0 : Parameter.Value;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (typeof error === 'object' &&
|
|
27
|
+
error !== null &&
|
|
28
|
+
'name' in error &&
|
|
29
|
+
error.name === 'ParameterNotFound') {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
33
|
+
throw new Error(`Failed to get secret ${name}: ${errorMessage}`);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
setSecret(name, value) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const command = new PutParameterCommand({
|
|
40
|
+
Name: name,
|
|
41
|
+
Value: value,
|
|
42
|
+
Type: 'SecureString',
|
|
43
|
+
Overwrite: true,
|
|
44
|
+
});
|
|
45
|
+
yield this.ssm.send(command);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=AwsSsmSecretProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AwsSsmSecretProvider.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/Aws/AwsSsmSecretProvider.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,OAAO,oBAAoB;IAG/B,YAAY,GAAQ;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEK,SAAS,CAAC,IAAY;;YAC1B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC;oBACtC,IAAI,EAAE,IAAI;oBACV,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnD,OAAO,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IACE,OAAO,KAAK,KAAK,QAAQ;oBACzB,KAAK,KAAK,IAAI;oBACd,MAAM,IAAI,KAAK;oBACf,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAClC,CAAC;oBACD,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,KAAK,YAAY,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;KAAA;IAEK,SAAS,CAAC,IAAY,EAAE,KAAa;;YACzC,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC;gBACtC,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;KAAA;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IEnvFileManager } from '
|
|
2
|
-
import type { ILogger } from '
|
|
1
|
+
import type { IEnvFileManager } from '../../domain/ports/IEnvFileManager.js';
|
|
2
|
+
import type { ILogger } from '../../domain/ports/ILogger.js';
|
|
3
3
|
export declare class EnvFileManager implements IEnvFileManager {
|
|
4
4
|
private logger;
|
|
5
5
|
constructor(logger: ILogger);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvFileManager.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/EnvManager/EnvFileManager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAE7D,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,MAAM,CAAU;gBACZ,MAAM,EAAE,OAAO;IAOrB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAmB7D,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAcjE,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;IAiBhB,OAAO,CAAC,cAAc;CAGvB"}
|
|
@@ -9,22 +9,31 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import * as fs from 'node:fs/promises';
|
|
11
11
|
import * as dotenv from 'dotenv';
|
|
12
|
+
import { DependencyMissingError, EnvironmentFileError, } from '../../domain/errors/DomainErrors.js';
|
|
12
13
|
export class EnvFileManager {
|
|
13
14
|
constructor(logger) {
|
|
14
15
|
if (!logger) {
|
|
15
|
-
throw new
|
|
16
|
+
throw new DependencyMissingError('Logger must be specified');
|
|
16
17
|
}
|
|
17
18
|
this.logger = logger;
|
|
18
19
|
}
|
|
19
20
|
loadMapFile(mapPath) {
|
|
20
21
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
const content = yield fs.readFile(mapPath, 'utf-8');
|
|
22
22
|
try {
|
|
23
|
-
|
|
23
|
+
const content = yield fs.readFile(mapPath, 'utf-8');
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(content);
|
|
26
|
+
}
|
|
27
|
+
catch (_err) {
|
|
28
|
+
this.logger.error(`Error parsing JSON from ${mapPath}`);
|
|
29
|
+
throw new EnvironmentFileError(`Invalid JSON in parameter map file: ${mapPath}`);
|
|
30
|
+
}
|
|
24
31
|
}
|
|
25
|
-
catch (
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error instanceof EnvironmentFileError) {
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
throw new EnvironmentFileError(`Failed to read map file: ${mapPath}`);
|
|
28
37
|
}
|
|
29
38
|
});
|
|
30
39
|
}
|
|
@@ -38,7 +47,7 @@ export class EnvFileManager {
|
|
|
38
47
|
return envVariables;
|
|
39
48
|
}
|
|
40
49
|
const existingEnvContent = yield fs.readFile(envFilePath, 'utf-8');
|
|
41
|
-
const parsedEnv = dotenv.parse(existingEnvContent);
|
|
50
|
+
const parsedEnv = dotenv.parse(existingEnvContent) || {};
|
|
42
51
|
Object.assign(envVariables, parsedEnv);
|
|
43
52
|
return envVariables;
|
|
44
53
|
});
|
|
@@ -48,7 +57,14 @@ export class EnvFileManager {
|
|
|
48
57
|
const envContent = Object.entries(envVariables)
|
|
49
58
|
.map(([key, value]) => `${key}=${this.escapeEnvValue(value)}`)
|
|
50
59
|
.join('\n');
|
|
51
|
-
|
|
60
|
+
try {
|
|
61
|
+
yield fs.writeFile(envFilePath, envContent);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
65
|
+
this.logger.error(`Failed to write environment file: ${errorMessage}`);
|
|
66
|
+
throw new EnvironmentFileError(`Failed to write environment file: ${errorMessage}`);
|
|
67
|
+
}
|
|
52
68
|
});
|
|
53
69
|
}
|
|
54
70
|
escapeEnvValue(value) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvFileManager.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/EnvManager/EnvFileManager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qCAAqC,CAAC;AAI7C,MAAM,OAAO,cAAc;IAEzB,YAAY,MAAe;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,sBAAsB,CAAC,0BAA0B,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEK,WAAW,CAAC,OAAe;;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpD,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBAAC,OAAO,IAAa,EAAE,CAAC;oBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;oBACxD,MAAM,IAAI,oBAAoB,CAC5B,uCAAuC,OAAO,EAAE,CACjD,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;oBAC1C,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,oBAAoB,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;KAAA;IAEK,WAAW,CAAC,WAAmB;;YACnC,MAAM,YAAY,GAA2B,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,YAAY,CAAC;YACtB,CAAC;YACD,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAEvC,OAAO,YAAY,CAAC;QACtB,CAAC;KAAA;IAEK,WAAW,CACf,WAAmB,EACnB,YAAoC;;YAEpC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;iBAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC7D,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,YAAY,EAAE,CAAC,CAAC;gBACvE,MAAM,IAAI,oBAAoB,CAC5B,qCAAqC,YAAY,EAAE,CACpD,CAAC;YACJ,CAAC;QACH,CAAC;KAAA;IAEO,cAAc,CAAC,KAAa;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleLogger.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/Logger/ConsoleLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,qBAAa,aAAc,YAAW,OAAO;IAC3C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleLogger.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/Logger/ConsoleLogger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACxB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageJsonFinder.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/VersionFinder/PackageJsonFinder.ts"],"names":[],"mappings":"AAEA,qBAAa,iBAAiB;IACtB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBtE,OAAO,CAAC,aAAa;CAMtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageJsonFinder.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/VersionFinder/PackageJsonFinder.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,OAAO,iBAAiB;IACtB,sBAAsB,CAAC,eAAuB;;YAClD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,GAAG,GAA0B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEvD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;gBAED,OAAO,GAAG,CAAC,OAAO,CAAC;YACrB,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC/F,CAAC;YACJ,CAAC;QACH,CAAC;KAAA;IAEO,aAAa,CAAC,GAAY;QAChC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,IAAI,GAAG,IAAK,GAAyB,CAAC,IAAI,KAAK,QAAQ,CAAC;IACvE,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "envilder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "A CLI that securely centralizes your environment variables from AWS SSM as a single source of truth",
|
|
5
|
-
"main": "./lib/Cli.js",
|
|
5
|
+
"main": "./lib/apps/cli/Cli.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"envilder": "lib/Cli.js"
|
|
7
|
+
"envilder": "lib/apps/cli/Cli.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"clean": "npm cache clean --force && npx rimraf lib && npx rimraf coverage && npx rimraf node_modules",
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"local:install": "npm run build && node --loader ts-node/esm scripts/pack-and-install.ts",
|
|
13
|
-
"local:test-run": "npm run build && node lib/cli/
|
|
13
|
+
"local:test-run": "npm run build && node lib/apps/cli/Cli.js --map=tests/sample/param-map.json --envfile=tests/sample/autogenerated.env",
|
|
14
14
|
"format": "biome format",
|
|
15
15
|
"format:write": "biome format --write",
|
|
16
16
|
"lint": "secretlint \"**/*\" && biome check --write && tsc --noEmit",
|
|
@@ -46,7 +46,9 @@
|
|
|
46
46
|
"bugs": {
|
|
47
47
|
"url": "https://github.com/macalbert/envilder/issues"
|
|
48
48
|
},
|
|
49
|
-
"author": "Marçal Albert
|
|
49
|
+
"author": "Marçal Albert Castellví",
|
|
50
|
+
"email": "mac.albert@gmail.com",
|
|
51
|
+
"url": "https://github.com/macalbert/envilder",
|
|
50
52
|
"license": "MIT",
|
|
51
53
|
"publishConfig": {
|
|
52
54
|
"access": "public"
|
package/lib/Cli.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Parses CLI arguments and runs the environment file generator.
|
|
4
|
-
*
|
|
5
|
-
* Expects `--map` and `--envfile` options to be provided, with an optional `--profile` for AWS CLI profile selection. Invokes the main process to generate a `.env` file from AWS SSM parameters based on the provided mapping.
|
|
6
|
-
*
|
|
7
|
-
* @throws {Error} If either `--map` or `--envfile` arguments are missing.
|
|
8
|
-
*/
|
|
9
|
-
export declare function main(): Promise<void>;
|
|
10
|
-
//# sourceMappingURL=Cli.d.ts.map
|
package/lib/Cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":";AAQA;;;;;;GAMG;AACH,wBAAsB,IAAI,kBA6BzB"}
|