envilder 0.7.12 → 0.8.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 +283 -37
- package/ROADMAP.md +10 -4
- package/docs/CHANGELOG.md +44 -0
- package/docs/SECURITY.md +26 -2
- package/lib/apps/cli/Cli.d.ts.map +1 -1
- package/lib/apps/cli/Cli.js +68 -11
- package/lib/apps/cli/Cli.js.map +1 -1
- package/lib/apps/cli/Startup.d.ts +3 -9
- package/lib/apps/cli/Startup.d.ts.map +1 -1
- package/lib/apps/cli/Startup.js +4 -54
- package/lib/apps/cli/Startup.js.map +1 -1
- package/lib/apps/gha/Gha.d.ts.map +1 -1
- package/lib/apps/gha/Gha.js +36 -19
- package/lib/apps/gha/Gha.js.map +1 -1
- package/lib/apps/gha/Startup.d.ts +3 -9
- package/lib/apps/gha/Startup.d.ts.map +1 -1
- package/lib/apps/gha/Startup.js +4 -54
- package/lib/apps/gha/Startup.js.map +1 -1
- package/lib/apps/shared/ContainerConfiguration.d.ts +7 -0
- package/lib/apps/shared/ContainerConfiguration.d.ts.map +1 -0
- package/lib/apps/shared/ContainerConfiguration.js +62 -0
- package/lib/apps/shared/ContainerConfiguration.js.map +1 -0
- package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts +2 -2
- package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts.map +1 -1
- package/lib/envilder/application/dispatch/DispatchActionCommand.js +6 -6
- package/lib/envilder/application/dispatch/DispatchActionCommand.js.map +1 -1
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts +3 -3
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts.map +1 -1
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js +13 -13
- package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js.map +1 -1
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts +7 -0
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts.map +1 -0
- package/lib/envilder/application/{pullSsmToEnv/PullSsmToEnvCommand.js → pullSecretsToEnv/PullSecretsToEnvCommand.js} +3 -3
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.js.map +1 -0
- package/lib/envilder/application/{pullSsmToEnv/PullSsmToEnvCommandHandler.d.ts → pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts} +7 -7
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts.map +1 -0
- package/lib/envilder/application/{pullSsmToEnv/PullSsmToEnvCommandHandler.js → pullSecretsToEnv/PullSecretsToEnvCommandHandler.js} +18 -18
- package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js.map +1 -0
- package/lib/envilder/application/{pushEnvToSsm/PushEnvToSsmCommand.d.ts → pushEnvToSecrets/PushEnvToSecretsCommand.d.ts} +3 -3
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts.map +1 -0
- package/lib/envilder/application/{pushEnvToSsm/PushEnvToSsmCommand.js → pushEnvToSecrets/PushEnvToSecretsCommand.js} +3 -3
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.js.map +1 -0
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts +34 -0
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts.map +1 -0
- package/lib/envilder/application/{pushEnvToSsm/PushEnvToSsmCommandHandler.js → pushEnvToSecrets/PushEnvToSecretsCommandHandler.js} +36 -32
- package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js.map +1 -0
- package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts +3 -3
- package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts.map +1 -1
- package/lib/envilder/application/pushSingle/PushSingleCommand.js +4 -4
- package/lib/envilder/application/pushSingle/PushSingleCommand.js.map +1 -1
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts +2 -2
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts.map +1 -1
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js +6 -6
- package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js.map +1 -1
- package/lib/envilder/domain/CliOptions.d.ts +3 -3
- package/lib/envilder/domain/CliOptions.d.ts.map +1 -1
- package/lib/envilder/domain/EnvironmentVariable.d.ts +5 -0
- package/lib/envilder/domain/EnvironmentVariable.d.ts.map +1 -1
- package/lib/envilder/domain/EnvironmentVariable.js +12 -3
- package/lib/envilder/domain/EnvironmentVariable.js.map +1 -1
- package/lib/envilder/domain/MapFileConfig.d.ts +10 -0
- package/lib/envilder/domain/MapFileConfig.d.ts.map +1 -0
- package/lib/envilder/domain/MapFileConfig.js +2 -0
- package/lib/envilder/domain/MapFileConfig.js.map +1 -0
- package/lib/envilder/domain/OperationMode.d.ts +2 -2
- package/lib/envilder/domain/OperationMode.d.ts.map +1 -1
- package/lib/envilder/domain/OperationMode.js +2 -2
- package/lib/envilder/domain/OperationMode.js.map +1 -1
- package/lib/envilder/domain/ports/IVariableStore.d.ts +2 -0
- package/lib/envilder/domain/ports/IVariableStore.d.ts.map +1 -1
- package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.d.ts +4 -0
- package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.d.ts.map +1 -0
- package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.js +10 -0
- package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.js.map +1 -0
- package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.d.ts.map +1 -1
- package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.js +3 -1
- package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.js.map +1 -1
- package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts +17 -0
- package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts.map +1 -0
- package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.js +113 -0
- package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.js.map +1 -0
- package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.d.ts +9 -0
- package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.d.ts.map +1 -0
- package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.js +24 -0
- package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.js.map +1 -0
- package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.d.ts +3 -0
- package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.d.ts.map +1 -0
- package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.js +28 -0
- package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.js.map +1 -0
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.d.ts +4 -0
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.d.ts.map +1 -1
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.js +46 -0
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.js.map +1 -1
- package/lib/envilder/types.d.ts +4 -4
- package/lib/envilder/types.js +2 -2
- package/lib/envilder/types.js.map +1 -1
- package/package.json +14 -5
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.d.ts +0 -7
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.d.ts.map +0 -1
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.js.map +0 -1
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.d.ts.map +0 -1
- package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.js.map +0 -1
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.d.ts.map +0 -1
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.js.map +0 -1
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.d.ts +0 -34
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.d.ts.map +0 -1
- package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.js.map +0 -1
|
@@ -28,21 +28,21 @@ let PushSingleCommandHandler = class PushSingleCommandHandler {
|
|
|
28
28
|
this.logger = logger;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* Handles the PushSingleCommand which pushes a single environment variable to
|
|
31
|
+
* Handles the PushSingleCommand which pushes a single environment variable to the secret store.
|
|
32
32
|
*
|
|
33
|
-
* @param command - The PushSingleCommand containing key, value and
|
|
33
|
+
* @param command - The PushSingleCommand containing key, value and secretPath
|
|
34
34
|
*/
|
|
35
35
|
handle(command) {
|
|
36
36
|
return __awaiter(this, void 0, void 0, function* () {
|
|
37
37
|
try {
|
|
38
|
-
this.logger.info(`Starting push operation for key '${command.key}' to path '${command.
|
|
38
|
+
this.logger.info(`Starting push operation for key '${command.key}' to path '${EnvironmentVariable.maskSecretPath(command.secretPath)}'`);
|
|
39
39
|
const envVariable = new EnvironmentVariable(command.key, command.value, true);
|
|
40
|
-
yield this.secretProvider.setSecret(command.
|
|
41
|
-
this.logger.info(`Pushed ${command.key}=${envVariable.maskedValue} to
|
|
40
|
+
yield this.secretProvider.setSecret(command.secretPath, command.value);
|
|
41
|
+
this.logger.info(`Pushed ${command.key}=${envVariable.maskedValue} to secret store at path ${EnvironmentVariable.maskSecretPath(command.secretPath)}`);
|
|
42
42
|
}
|
|
43
43
|
catch (error) {
|
|
44
44
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
45
|
-
this.logger.error(`Failed to push variable to
|
|
45
|
+
this.logger.error(`Failed to push variable to secret store: ${errorMessage}`);
|
|
46
46
|
throw error;
|
|
47
47
|
}
|
|
48
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushSingleCommandHandler.js","sourceRoot":"","sources":["../../../../src/envilder/application/pushSingle/PushSingleCommandHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIhC,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,YAEmB,cAA+B,EACR,MAAe;QADtC,mBAAc,GAAd,cAAc,CAAiB;QACR,WAAM,GAAN,MAAM,CAAS;IACtD,CAAC;IAEJ;;;;OAIG;IACG,MAAM,CAAC,OAA0B;;YACrC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,oCAAoC,OAAO,CAAC,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"PushSingleCommandHandler.js","sourceRoot":"","sources":["../../../../src/envilder/application/pushSingle/PushSingleCommandHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIhC,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,YAEmB,cAA+B,EACR,MAAe;QADtC,mBAAc,GAAd,cAAc,CAAiB;QACR,WAAM,GAAN,MAAM,CAAS;IACtD,CAAC;IAEJ;;;;OAIG;IACG,MAAM,CAAC,OAA0B;;YACrC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,oCAAoC,OAAO,CAAC,GAAG,cAAc,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CACvH,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,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,UAAU,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,WAAW,4BAA4B,mBAAmB,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CACrI,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,CACf,4CAA4C,YAAY,EAAE,CAC3D,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AArCY,wBAAwB;IADpC,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAE7B,WAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;;GAJb,wBAAwB,CAqCpC"}
|
|
@@ -19,15 +19,15 @@ export type CliOptions = {
|
|
|
19
19
|
*/
|
|
20
20
|
value?: string;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Secret path in the cloud provider for the single environment variable
|
|
23
23
|
*/
|
|
24
|
-
|
|
24
|
+
secretPath?: string;
|
|
25
25
|
/**
|
|
26
26
|
* AWS CLI profile to use
|
|
27
27
|
*/
|
|
28
28
|
profile?: string;
|
|
29
29
|
/**
|
|
30
|
-
* Flag to push local .env file back to
|
|
30
|
+
* Flag to push local .env file back to the secret store
|
|
31
31
|
*/
|
|
32
32
|
push?: boolean;
|
|
33
33
|
};
|
|
@@ -1 +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,
|
|
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,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC"}
|
|
@@ -29,6 +29,11 @@ export declare class EnvironmentVariable {
|
|
|
29
29
|
* Returns a masked representation of the value for logging
|
|
30
30
|
*/
|
|
31
31
|
get maskedValue(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Returns a masked representation of a secret path for safe logging.
|
|
34
|
+
*/
|
|
35
|
+
static maskSecretPath(path: string): string;
|
|
36
|
+
private static mask;
|
|
32
37
|
/**
|
|
33
38
|
* Validates the environment variable
|
|
34
39
|
*/
|
|
@@ -1 +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,
|
|
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,CAMxB;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3C,OAAO,CAAC,MAAM,CAAC,IAAI;IAMnB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAWjB"}
|
|
@@ -40,9 +40,18 @@ export class EnvironmentVariable {
|
|
|
40
40
|
if (!this._isSecret) {
|
|
41
41
|
return this._value;
|
|
42
42
|
}
|
|
43
|
-
return this._value
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
return EnvironmentVariable.mask(this._value, 10);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Returns a masked representation of a secret path for safe logging.
|
|
47
|
+
*/
|
|
48
|
+
static maskSecretPath(path) {
|
|
49
|
+
return EnvironmentVariable.mask(path, 3);
|
|
50
|
+
}
|
|
51
|
+
static mask(value, minLengthToShowTail) {
|
|
52
|
+
return value.length > minLengthToShowTail
|
|
53
|
+
? '*'.repeat(value.length - 3) + value.slice(-3)
|
|
54
|
+
: '*'.repeat(value.length);
|
|
46
55
|
}
|
|
47
56
|
/**
|
|
48
57
|
* Validates the environment variable
|
|
@@ -1 +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,
|
|
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,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAY;QAChC,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEO,MAAM,CAAC,IAAI,CAAC,KAAa,EAAE,mBAA2B;QAC5D,OAAO,KAAK,CAAC,MAAM,GAAG,mBAAmB;YACvC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,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":"MapFileConfig.d.ts","sourceRoot":"","sources":["../../../src/envilder/domain/MapFileConfig.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapFileConfig.js","sourceRoot":"","sources":["../../../src/envilder/domain/MapFileConfig.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare enum OperationMode {
|
|
2
2
|
PUSH_SINGLE = "PUSH_SINGLE",
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
PUSH_ENV_TO_SECRETS = "PUSH_ENV_TO_SECRETS",
|
|
4
|
+
PULL_SECRETS_TO_ENV = "PULL_SECRETS_TO_ENV"
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=OperationMode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationMode.d.ts","sourceRoot":"","sources":["../../../src/envilder/domain/OperationMode.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,WAAW,gBAAgB;IAC3B,
|
|
1
|
+
{"version":3,"file":"OperationMode.d.ts","sourceRoot":"","sources":["../../../src/envilder/domain/OperationMode.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,WAAW,gBAAgB;IAC3B,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;CAC5C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export var OperationMode;
|
|
2
2
|
(function (OperationMode) {
|
|
3
3
|
OperationMode["PUSH_SINGLE"] = "PUSH_SINGLE";
|
|
4
|
-
OperationMode["
|
|
5
|
-
OperationMode["
|
|
4
|
+
OperationMode["PUSH_ENV_TO_SECRETS"] = "PUSH_ENV_TO_SECRETS";
|
|
5
|
+
OperationMode["PULL_SECRETS_TO_ENV"] = "PULL_SECRETS_TO_ENV";
|
|
6
6
|
})(OperationMode || (OperationMode = {}));
|
|
7
7
|
//# sourceMappingURL=OperationMode.js.map
|
|
@@ -1 +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,
|
|
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,4DAA2C,CAAA;IAC3C,4DAA2C,CAAA;AAC7C,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { ParsedMapFile } from '../MapFileConfig.js';
|
|
1
2
|
export interface IVariableStore {
|
|
2
3
|
getMapping(source: string): Promise<Record<string, string>>;
|
|
4
|
+
getParsedMapping(source: string): Promise<ParsedMapFile>;
|
|
3
5
|
getEnvironment(source: string): Promise<Record<string, string>>;
|
|
4
6
|
saveEnvironment(destination: string, envVariables: Record<string, string>): Promise<void>;
|
|
5
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IVariableStore.d.ts","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/IVariableStore.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"IVariableStore.d.ts","sourceRoot":"","sources":["../../../../src/envilder/domain/ports/IVariableStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5D,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACzD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MapFileConfig } from '../../domain/MapFileConfig.js';
|
|
2
|
+
import type { ISecretProvider } from '../../domain/ports/ISecretProvider.js';
|
|
3
|
+
export declare function createAwsSecretProvider(config: MapFileConfig): ISecretProvider;
|
|
4
|
+
//# sourceMappingURL=AwsSecretProviderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AwsSecretProviderFactory.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/aws/AwsSecretProviderFactory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAG7E,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,GACpB,eAAe,CAKjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SSM } from '@aws-sdk/client-ssm';
|
|
2
|
+
import { fromIni } from '@aws-sdk/credential-providers';
|
|
3
|
+
import { AwsSsmSecretProvider } from './AwsSsmSecretProvider.js';
|
|
4
|
+
export function createAwsSecretProvider(config) {
|
|
5
|
+
const ssm = config.profile
|
|
6
|
+
? new SSM({ credentials: fromIni({ profile: config.profile }) })
|
|
7
|
+
: new SSM();
|
|
8
|
+
return new AwsSsmSecretProvider(ssm);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=AwsSecretProviderFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AwsSecretProviderFactory.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/aws/AwsSecretProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,UAAU,uBAAuB,CACrC,MAAqB;IAErB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO;QACxB,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,OAAO,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +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;
|
|
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;AAI7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAE7E,qBACa,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;IAyBpD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS5D"}
|
|
@@ -18,6 +18,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
18
18
|
};
|
|
19
19
|
import { GetParameterCommand, PutParameterCommand, } from '@aws-sdk/client-ssm';
|
|
20
20
|
import { injectable } from 'inversify';
|
|
21
|
+
import { EnvironmentVariable } from '../../domain/EnvironmentVariable.js';
|
|
22
|
+
import { SecretOperationError } from '../../domain/errors/DomainErrors.js';
|
|
21
23
|
let AwsSsmSecretProvider = class AwsSsmSecretProvider {
|
|
22
24
|
constructor(ssm) {
|
|
23
25
|
this.ssm = ssm;
|
|
@@ -40,7 +42,7 @@ let AwsSsmSecretProvider = class AwsSsmSecretProvider {
|
|
|
40
42
|
return undefined;
|
|
41
43
|
}
|
|
42
44
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
43
|
-
throw new
|
|
45
|
+
throw new SecretOperationError(`Failed to get secret ${EnvironmentVariable.maskSecretPath(name)}: ${errorMessage}`);
|
|
44
46
|
}
|
|
45
47
|
});
|
|
46
48
|
}
|
|
@@ -1 +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;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
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;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAIpE,IAAM,oBAAoB,GAA1B,MAAM,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,oBAAoB,CAC5B,wBAAwB,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CACpF,CAAC;YACJ,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,CAAA;AAzCY,oBAAoB;IADhC,UAAU,EAAE;;GACA,oBAAoB,CAyChC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SecretClient } from '@azure/keyvault-secrets';
|
|
2
|
+
import type { ISecretProvider } from '../../domain/ports/ISecretProvider.js';
|
|
3
|
+
export declare class AzureKeyVaultSecretProvider implements ISecretProvider {
|
|
4
|
+
private client;
|
|
5
|
+
private normalizedNameRegistry;
|
|
6
|
+
constructor(client: SecretClient);
|
|
7
|
+
getSecret(name: string): Promise<string | undefined>;
|
|
8
|
+
setSecret(name: string, value: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Validates that the secret name meets Azure Key Vault naming constraints.
|
|
11
|
+
* @see https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates#objects-identifiers-and-versioning
|
|
12
|
+
*/
|
|
13
|
+
private validateSecretName;
|
|
14
|
+
private resolveSecretName;
|
|
15
|
+
private normalizeSecretName;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=AzureKeyVaultSecretProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureKeyVaultSecretProvider.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAO5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAE7E,qBACa,2BAA4B,YAAW,eAAe;IACjE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,sBAAsB,CAA6B;gBAE/C,MAAM,EAAE,YAAY;IAI1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAsBpD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,mBAAmB;CA+B5B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
import { injectable } from 'inversify';
|
|
20
|
+
import { EnvironmentVariable } from '../../domain/EnvironmentVariable.js';
|
|
21
|
+
import { InvalidArgumentError, SecretOperationError, } from '../../domain/errors/DomainErrors.js';
|
|
22
|
+
let AzureKeyVaultSecretProvider = class AzureKeyVaultSecretProvider {
|
|
23
|
+
constructor(client) {
|
|
24
|
+
this.normalizedNameRegistry = new Map();
|
|
25
|
+
this.client = client;
|
|
26
|
+
}
|
|
27
|
+
getSecret(name) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
var _a;
|
|
30
|
+
const secretName = this.resolveSecretName(name);
|
|
31
|
+
try {
|
|
32
|
+
const secret = yield this.client.getSecret(secretName);
|
|
33
|
+
return (_a = secret === null || secret === void 0 ? void 0 : secret.value) !== null && _a !== void 0 ? _a : undefined;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (typeof error === 'object' &&
|
|
37
|
+
error !== null &&
|
|
38
|
+
'statusCode' in error &&
|
|
39
|
+
error.statusCode === 404) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
43
|
+
throw new SecretOperationError(`Failed to get secret ${EnvironmentVariable.maskSecretPath(name)}: ${errorMessage}`);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
setSecret(name, value) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
const secretName = this.resolveSecretName(name);
|
|
50
|
+
yield this.client.setSecret(secretName, value);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validates that the secret name meets Azure Key Vault naming constraints.
|
|
55
|
+
* @see https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates#objects-identifiers-and-versioning
|
|
56
|
+
*/
|
|
57
|
+
validateSecretName(name) {
|
|
58
|
+
if (name.trim().length === 0) {
|
|
59
|
+
throw new InvalidArgumentError('Invalid secret name: name cannot be empty or whitespace-only.');
|
|
60
|
+
}
|
|
61
|
+
if (/[^a-zA-Z0-9\-_/]/.test(name)) {
|
|
62
|
+
throw new InvalidArgumentError(`Invalid secret name '${name}': contains characters not allowed` +
|
|
63
|
+
' by Azure Key Vault. Only alphanumeric characters,' +
|
|
64
|
+
' hyphens, slashes, and underscores are accepted.');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
resolveSecretName(originalName) {
|
|
68
|
+
this.validateSecretName(originalName);
|
|
69
|
+
const normalized = this.normalizeSecretName(originalName);
|
|
70
|
+
if (normalized.length > 127) {
|
|
71
|
+
throw new InvalidArgumentError(`Invalid secret name '${originalName}': normalized name '${normalized}' exceeds the 127-character limit for Azure Key Vault.`);
|
|
72
|
+
}
|
|
73
|
+
const existing = this.normalizedNameRegistry.get(normalized);
|
|
74
|
+
if (existing !== undefined && existing !== originalName) {
|
|
75
|
+
throw new SecretOperationError(`Secret name collision: '${originalName}' and '${existing}' ` +
|
|
76
|
+
`both normalize to '${normalized}'. Use distinct ` +
|
|
77
|
+
'Key Vault-compatible names in your map file ' +
|
|
78
|
+
'when targeting Azure.');
|
|
79
|
+
}
|
|
80
|
+
this.normalizedNameRegistry.set(normalized, originalName);
|
|
81
|
+
return normalized;
|
|
82
|
+
}
|
|
83
|
+
// Azure Key Vault secret names: 1-127 chars, alphanumeric + hyphens, start with letter
|
|
84
|
+
normalizeSecretName(name) {
|
|
85
|
+
// Remove leading slashes
|
|
86
|
+
let normalized = name.replace(/^\/+/, '');
|
|
87
|
+
// Replace slashes and underscores with hyphens
|
|
88
|
+
normalized = normalized.replace(/[/_]/g, '-');
|
|
89
|
+
// Lowercase to match Azure Key Vault case-insensitivity
|
|
90
|
+
normalized = normalized.toLowerCase();
|
|
91
|
+
// Remove invalid characters
|
|
92
|
+
normalized = normalized.replace(/[^a-zA-Z0-9-]/g, '');
|
|
93
|
+
// Remove consecutive hyphens
|
|
94
|
+
normalized = normalized.replace(/-+/g, '-');
|
|
95
|
+
// Remove leading/trailing hyphens
|
|
96
|
+
normalized = normalized.replace(/^-+|-+$/g, '');
|
|
97
|
+
// Ensure starts with a letter
|
|
98
|
+
if (normalized.length > 0 && !/^[a-zA-Z]/.test(normalized)) {
|
|
99
|
+
normalized = `secret-${normalized}`;
|
|
100
|
+
}
|
|
101
|
+
// Default name if empty
|
|
102
|
+
if (normalized.length === 0) {
|
|
103
|
+
normalized = 'secret';
|
|
104
|
+
}
|
|
105
|
+
return normalized;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
AzureKeyVaultSecretProvider = __decorate([
|
|
109
|
+
injectable(),
|
|
110
|
+
__metadata("design:paramtypes", [Function])
|
|
111
|
+
], AzureKeyVaultSecretProvider);
|
|
112
|
+
export { AzureKeyVaultSecretProvider };
|
|
113
|
+
//# sourceMappingURL=AzureKeyVaultSecretProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureKeyVaultSecretProvider.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qCAAqC,CAAC;AAItC,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAItC,YAAY,MAAoB;QAFxB,2BAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAGzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEK,SAAS,CAAC,IAAY;;;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACvD,OAAO,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,SAAS,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IACE,OAAO,KAAK,KAAK,QAAQ;oBACzB,KAAK,KAAK,IAAI;oBACd,YAAY,IAAI,KAAK;oBACrB,KAAK,CAAC,UAAU,KAAK,GAAG,EACxB,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,oBAAoB,CAC5B,wBAAwB,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CACpF,CAAC;YACJ,CAAC;QACH,CAAC;KAAA;IAEK,SAAS,CAAC,IAAY,EAAE,KAAa;;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;KAAA;IAED;;;OAGG;IACK,kBAAkB,CAAC,IAAY;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,oBAAoB,CAC5B,+DAA+D,CAChE,CAAC;QACJ,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,oBAAoB,CAC5B,wBAAwB,IAAI,oCAAoC;gBAC9D,oDAAoD;gBACpD,kDAAkD,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,YAAoB;QAC5C,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,oBAAoB,CAC5B,wBAAwB,YAAY,uBAAuB,UAAU,wDAAwD,CAC9H,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACxD,MAAM,IAAI,oBAAoB,CAC5B,2BAA2B,YAAY,UAAU,QAAQ,IAAI;gBAC3D,sBAAsB,UAAU,kBAAkB;gBAClD,8CAA8C;gBAC9C,uBAAuB,CAC1B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC1D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,uFAAuF;IAC/E,mBAAmB,CAAC,IAAY;QACtC,yBAAyB;QACzB,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAE1C,+CAA+C;QAC/C,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE9C,wDAAwD;QACxD,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAEtC,4BAA4B;QAC5B,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAEtD,6BAA6B;QAC7B,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE5C,kCAAkC;QAClC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAEhD,8BAA8B;QAC9B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,UAAU,GAAG,UAAU,UAAU,EAAE,CAAC;QACtC,CAAC;QAED,wBAAwB;QACxB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,UAAU,GAAG,QAAQ,CAAC;QACxB,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAA;AA3GY,2BAA2B;IADvC,UAAU,EAAE;;GACA,2BAA2B,CA2GvC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MapFileConfig } from '../../domain/MapFileConfig.js';
|
|
2
|
+
import type { ISecretProvider } from '../../domain/ports/ISecretProvider.js';
|
|
3
|
+
export { DEFAULT_VAULT_HOSTS } from './AzureVaultUrlValidator.js';
|
|
4
|
+
export type AzureProviderOptions = {
|
|
5
|
+
allowedVaultHosts?: string[];
|
|
6
|
+
disableChallengeResourceVerification?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function createAzureSecretProvider(config: MapFileConfig, options?: AzureProviderOptions): ISecretProvider;
|
|
9
|
+
//# sourceMappingURL=AzureSecretProviderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureSecretProviderFactory.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/azure/AzureSecretProviderFactory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAO7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,oCAAoC,CAAC,EAAE,OAAO,CAAC;CAChD,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,eAAe,CAkBjB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DefaultAzureCredential } from '@azure/identity';
|
|
2
|
+
import { SecretClient } from '@azure/keyvault-secrets';
|
|
3
|
+
import { DependencyMissingError } from '../../domain/errors/DomainErrors.js';
|
|
4
|
+
import { AzureKeyVaultSecretProvider } from './AzureKeyVaultSecretProvider.js';
|
|
5
|
+
import { DEFAULT_VAULT_HOSTS, validateAzureVaultUrl, } from './AzureVaultUrlValidator.js';
|
|
6
|
+
export { DEFAULT_VAULT_HOSTS } from './AzureVaultUrlValidator.js';
|
|
7
|
+
export function createAzureSecretProvider(config, options) {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const { vaultUrl } = config;
|
|
10
|
+
if (!vaultUrl) {
|
|
11
|
+
throw new DependencyMissingError('vaultUrl is required when using Azure provider.' +
|
|
12
|
+
' Set it in $config.vaultUrl in your map file' +
|
|
13
|
+
' or via --vault-url flag.');
|
|
14
|
+
}
|
|
15
|
+
const allowedVaultHosts = (_a = options === null || options === void 0 ? void 0 : options.allowedVaultHosts) !== null && _a !== void 0 ? _a : DEFAULT_VAULT_HOSTS;
|
|
16
|
+
const disableChallengeResourceVerification = (_b = options === null || options === void 0 ? void 0 : options.disableChallengeResourceVerification) !== null && _b !== void 0 ? _b : false;
|
|
17
|
+
validateAzureVaultUrl(vaultUrl, allowedVaultHosts);
|
|
18
|
+
const credential = new DefaultAzureCredential();
|
|
19
|
+
const client = new SecretClient(vaultUrl, credential, {
|
|
20
|
+
disableChallengeResourceVerification,
|
|
21
|
+
});
|
|
22
|
+
return new AzureKeyVaultSecretProvider(client);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=AzureSecretProviderFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureSecretProviderFactory.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/azure/AzureSecretProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAG7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAOlE,MAAM,UAAU,yBAAyB,CACvC,MAAqB,EACrB,OAA8B;;IAE9B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,sBAAsB,CAC9B,iDAAiD;YAC/C,8CAA8C;YAC9C,2BAA2B,CAC9B,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,mCAAI,mBAAmB,CAAC;IAC5E,MAAM,oCAAoC,GACxC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,oCAAoC,mCAAI,KAAK,CAAC;IACzD,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE;QACpD,oCAAoC;KACrC,CAAC,CAAC;IACH,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureVaultUrlValidator.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/azure/AzureVaultUrlValidator.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,UAK/B,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,GACrB,IAAI,CAwBN"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { InvalidArgumentError } from '../../domain/errors/DomainErrors.js';
|
|
2
|
+
export const DEFAULT_VAULT_HOSTS = [
|
|
3
|
+
'.vault.azure.net',
|
|
4
|
+
'.vault.azure.cn',
|
|
5
|
+
'.vault.usgovcloudapi.net',
|
|
6
|
+
'.vault.microsoftazure.de',
|
|
7
|
+
];
|
|
8
|
+
export function validateAzureVaultUrl(vaultUrl, allowedHosts) {
|
|
9
|
+
let url;
|
|
10
|
+
try {
|
|
11
|
+
url = new URL(vaultUrl);
|
|
12
|
+
}
|
|
13
|
+
catch (_a) {
|
|
14
|
+
throw new InvalidArgumentError('vaultUrl must be a valid URL');
|
|
15
|
+
}
|
|
16
|
+
if (url.protocol !== 'https:') {
|
|
17
|
+
throw new InvalidArgumentError('vaultUrl must use https:// protocol');
|
|
18
|
+
}
|
|
19
|
+
const isAllowedHost = allowedHosts.some((suffix) => {
|
|
20
|
+
const normalizedSuffix = suffix.startsWith('.') ? suffix.slice(1) : suffix;
|
|
21
|
+
return (url.hostname === normalizedSuffix ||
|
|
22
|
+
url.hostname.endsWith(`.${normalizedSuffix}`));
|
|
23
|
+
});
|
|
24
|
+
if (!isAllowedHost) {
|
|
25
|
+
throw new InvalidArgumentError(`vaultUrl hostname must end with one of: ${allowedHosts.join(', ')}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=AzureVaultUrlValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureVaultUrlValidator.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/azure/AzureVaultUrlValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,kBAAkB;IAClB,iBAAiB;IACjB,0BAA0B;IAC1B,0BAA0B;CAC3B,CAAC;AAEF,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,YAAsB;IAEtB,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,WAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,CAAC,8BAA8B,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,oBAAoB,CAAC,qCAAqC,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACjD,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,OAAO,CACL,GAAG,CAAC,QAAQ,KAAK,gBAAgB;YACjC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,oBAAoB,CAC5B,2CAA2C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import type { MapFileConfig, ParsedMapFile } from '../../domain/MapFileConfig.js';
|
|
1
2
|
import type { ILogger } from '../../domain/ports/ILogger.js';
|
|
2
3
|
import type { IVariableStore } from '../../domain/ports/IVariableStore.js';
|
|
3
4
|
export declare class FileVariableStore implements IVariableStore {
|
|
4
5
|
private logger;
|
|
5
6
|
constructor(logger: ILogger);
|
|
6
7
|
getMapping(source: string): Promise<Record<string, string>>;
|
|
8
|
+
getParsedMapping(source: string): Promise<ParsedMapFile>;
|
|
9
|
+
private readJsonFile;
|
|
7
10
|
getEnvironment(source: string): Promise<Record<string, string>>;
|
|
8
11
|
saveEnvironment(destination: string, envVariables: Record<string, string>): Promise<void>;
|
|
9
12
|
private escapeEnvValue;
|
|
10
13
|
}
|
|
14
|
+
export declare function readMapFileConfig(mapPath: string): Promise<MapFileConfig>;
|
|
11
15
|
//# sourceMappingURL=FileVariableStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileVariableStore.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAG3E,qBACa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAAU;gBAEW,MAAM,EAAE,OAAO;IAO5C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"FileVariableStore.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAG3E,qBACa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAAU;gBAEW,MAAM,EAAE,OAAO;IAO5C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAK3D,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAQhD,YAAY;IAmBpB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAc/D,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;IAiBhB,OAAO,CAAC,cAAc;CASvB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAkBxB"}
|
|
@@ -19,6 +19,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
19
19
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
20
|
});
|
|
21
21
|
};
|
|
22
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
23
|
+
var t = {};
|
|
24
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
25
|
+
t[p] = s[p];
|
|
26
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
27
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
28
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
29
|
+
t[p[i]] = s[p[i]];
|
|
30
|
+
}
|
|
31
|
+
return t;
|
|
32
|
+
};
|
|
22
33
|
import * as fs from 'node:fs/promises';
|
|
23
34
|
import * as dotenv from 'dotenv';
|
|
24
35
|
import { inject, injectable } from 'inversify';
|
|
@@ -32,6 +43,20 @@ let FileVariableStore = class FileVariableStore {
|
|
|
32
43
|
this.logger = logger;
|
|
33
44
|
}
|
|
34
45
|
getMapping(source) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
const { mappings } = yield this.getParsedMapping(source);
|
|
48
|
+
return mappings;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getParsedMapping(source) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const raw = yield this.readJsonFile(source);
|
|
54
|
+
const { $config } = raw, rest = __rest(raw, ["$config"]);
|
|
55
|
+
const config = $config && typeof $config === 'object' ? $config : {};
|
|
56
|
+
return { config, mappings: rest };
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
readJsonFile(source) {
|
|
35
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
36
61
|
try {
|
|
37
62
|
const content = yield fs.readFile(source, 'utf-8');
|
|
@@ -97,4 +122,25 @@ FileVariableStore = __decorate([
|
|
|
97
122
|
__metadata("design:paramtypes", [Object])
|
|
98
123
|
], FileVariableStore);
|
|
99
124
|
export { FileVariableStore };
|
|
125
|
+
export function readMapFileConfig(mapPath) {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
127
|
+
try {
|
|
128
|
+
const content = yield fs.readFile(mapPath, 'utf-8');
|
|
129
|
+
try {
|
|
130
|
+
const raw = JSON.parse(content);
|
|
131
|
+
const config = raw.$config;
|
|
132
|
+
return config && typeof config === 'object' ? config : {};
|
|
133
|
+
}
|
|
134
|
+
catch (_a) {
|
|
135
|
+
throw new EnvironmentFileError(`Invalid JSON in parameter map file: ${mapPath}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error instanceof EnvironmentFileError) {
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
throw new EnvironmentFileError(`Failed to read map file: ${mapPath}`);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
100
146
|
//# sourceMappingURL=FileVariableStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileVariableStore.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileVariableStore.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"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"}
|
package/lib/envilder/types.d.ts
CHANGED
|
@@ -4,15 +4,15 @@ export declare const DOMAIN: {
|
|
|
4
4
|
IVariableStore: symbol;
|
|
5
5
|
};
|
|
6
6
|
export declare const APPLICATION: {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
PullSecretsToEnvCommandHandler: symbol;
|
|
8
|
+
PushEnvToSecretsCommandHandler: symbol;
|
|
9
9
|
PushSingleCommandHandler: symbol;
|
|
10
10
|
DispatchActionCommandHandler: symbol;
|
|
11
11
|
};
|
|
12
12
|
export declare const INFRASTRUCTURE: {};
|
|
13
13
|
export declare const TYPES: {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
PullSecretsToEnvCommandHandler: symbol;
|
|
15
|
+
PushEnvToSecretsCommandHandler: symbol;
|
|
16
16
|
PushSingleCommandHandler: symbol;
|
|
17
17
|
DispatchActionCommandHandler: symbol;
|
|
18
18
|
ILogger: symbol;
|