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.
Files changed (107) hide show
  1. package/README.md +283 -37
  2. package/ROADMAP.md +10 -4
  3. package/docs/CHANGELOG.md +44 -0
  4. package/docs/SECURITY.md +26 -2
  5. package/lib/apps/cli/Cli.d.ts.map +1 -1
  6. package/lib/apps/cli/Cli.js +68 -11
  7. package/lib/apps/cli/Cli.js.map +1 -1
  8. package/lib/apps/cli/Startup.d.ts +3 -9
  9. package/lib/apps/cli/Startup.d.ts.map +1 -1
  10. package/lib/apps/cli/Startup.js +4 -54
  11. package/lib/apps/cli/Startup.js.map +1 -1
  12. package/lib/apps/gha/Gha.d.ts.map +1 -1
  13. package/lib/apps/gha/Gha.js +36 -19
  14. package/lib/apps/gha/Gha.js.map +1 -1
  15. package/lib/apps/gha/Startup.d.ts +3 -9
  16. package/lib/apps/gha/Startup.d.ts.map +1 -1
  17. package/lib/apps/gha/Startup.js +4 -54
  18. package/lib/apps/gha/Startup.js.map +1 -1
  19. package/lib/apps/shared/ContainerConfiguration.d.ts +7 -0
  20. package/lib/apps/shared/ContainerConfiguration.d.ts.map +1 -0
  21. package/lib/apps/shared/ContainerConfiguration.js +62 -0
  22. package/lib/apps/shared/ContainerConfiguration.js.map +1 -0
  23. package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts +2 -2
  24. package/lib/envilder/application/dispatch/DispatchActionCommand.d.ts.map +1 -1
  25. package/lib/envilder/application/dispatch/DispatchActionCommand.js +6 -6
  26. package/lib/envilder/application/dispatch/DispatchActionCommand.js.map +1 -1
  27. package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts +3 -3
  28. package/lib/envilder/application/dispatch/DispatchActionCommandHandler.d.ts.map +1 -1
  29. package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js +13 -13
  30. package/lib/envilder/application/dispatch/DispatchActionCommandHandler.js.map +1 -1
  31. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts +7 -0
  32. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.d.ts.map +1 -0
  33. package/lib/envilder/application/{pullSsmToEnv/PullSsmToEnvCommand.js → pullSecretsToEnv/PullSecretsToEnvCommand.js} +3 -3
  34. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommand.js.map +1 -0
  35. package/lib/envilder/application/{pullSsmToEnv/PullSsmToEnvCommandHandler.d.ts → pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts} +7 -7
  36. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.d.ts.map +1 -0
  37. package/lib/envilder/application/{pullSsmToEnv/PullSsmToEnvCommandHandler.js → pullSecretsToEnv/PullSecretsToEnvCommandHandler.js} +18 -18
  38. package/lib/envilder/application/pullSecretsToEnv/PullSecretsToEnvCommandHandler.js.map +1 -0
  39. package/lib/envilder/application/{pushEnvToSsm/PushEnvToSsmCommand.d.ts → pushEnvToSecrets/PushEnvToSecretsCommand.d.ts} +3 -3
  40. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.d.ts.map +1 -0
  41. package/lib/envilder/application/{pushEnvToSsm/PushEnvToSsmCommand.js → pushEnvToSecrets/PushEnvToSecretsCommand.js} +3 -3
  42. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommand.js.map +1 -0
  43. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts +34 -0
  44. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.d.ts.map +1 -0
  45. package/lib/envilder/application/{pushEnvToSsm/PushEnvToSsmCommandHandler.js → pushEnvToSecrets/PushEnvToSecretsCommandHandler.js} +36 -32
  46. package/lib/envilder/application/pushEnvToSecrets/PushEnvToSecretsCommandHandler.js.map +1 -0
  47. package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts +3 -3
  48. package/lib/envilder/application/pushSingle/PushSingleCommand.d.ts.map +1 -1
  49. package/lib/envilder/application/pushSingle/PushSingleCommand.js +4 -4
  50. package/lib/envilder/application/pushSingle/PushSingleCommand.js.map +1 -1
  51. package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts +2 -2
  52. package/lib/envilder/application/pushSingle/PushSingleCommandHandler.d.ts.map +1 -1
  53. package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js +6 -6
  54. package/lib/envilder/application/pushSingle/PushSingleCommandHandler.js.map +1 -1
  55. package/lib/envilder/domain/CliOptions.d.ts +3 -3
  56. package/lib/envilder/domain/CliOptions.d.ts.map +1 -1
  57. package/lib/envilder/domain/EnvironmentVariable.d.ts +5 -0
  58. package/lib/envilder/domain/EnvironmentVariable.d.ts.map +1 -1
  59. package/lib/envilder/domain/EnvironmentVariable.js +12 -3
  60. package/lib/envilder/domain/EnvironmentVariable.js.map +1 -1
  61. package/lib/envilder/domain/MapFileConfig.d.ts +10 -0
  62. package/lib/envilder/domain/MapFileConfig.d.ts.map +1 -0
  63. package/lib/envilder/domain/MapFileConfig.js +2 -0
  64. package/lib/envilder/domain/MapFileConfig.js.map +1 -0
  65. package/lib/envilder/domain/OperationMode.d.ts +2 -2
  66. package/lib/envilder/domain/OperationMode.d.ts.map +1 -1
  67. package/lib/envilder/domain/OperationMode.js +2 -2
  68. package/lib/envilder/domain/OperationMode.js.map +1 -1
  69. package/lib/envilder/domain/ports/IVariableStore.d.ts +2 -0
  70. package/lib/envilder/domain/ports/IVariableStore.d.ts.map +1 -1
  71. package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.d.ts +4 -0
  72. package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.d.ts.map +1 -0
  73. package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.js +10 -0
  74. package/lib/envilder/infrastructure/aws/AwsSecretProviderFactory.js.map +1 -0
  75. package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.d.ts.map +1 -1
  76. package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.js +3 -1
  77. package/lib/envilder/infrastructure/aws/AwsSsmSecretProvider.js.map +1 -1
  78. package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts +17 -0
  79. package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.d.ts.map +1 -0
  80. package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.js +113 -0
  81. package/lib/envilder/infrastructure/azure/AzureKeyVaultSecretProvider.js.map +1 -0
  82. package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.d.ts +9 -0
  83. package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.d.ts.map +1 -0
  84. package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.js +24 -0
  85. package/lib/envilder/infrastructure/azure/AzureSecretProviderFactory.js.map +1 -0
  86. package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.d.ts +3 -0
  87. package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.d.ts.map +1 -0
  88. package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.js +28 -0
  89. package/lib/envilder/infrastructure/azure/AzureVaultUrlValidator.js.map +1 -0
  90. package/lib/envilder/infrastructure/variableStore/FileVariableStore.d.ts +4 -0
  91. package/lib/envilder/infrastructure/variableStore/FileVariableStore.d.ts.map +1 -1
  92. package/lib/envilder/infrastructure/variableStore/FileVariableStore.js +46 -0
  93. package/lib/envilder/infrastructure/variableStore/FileVariableStore.js.map +1 -1
  94. package/lib/envilder/types.d.ts +4 -4
  95. package/lib/envilder/types.js +2 -2
  96. package/lib/envilder/types.js.map +1 -1
  97. package/package.json +14 -5
  98. package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.d.ts +0 -7
  99. package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.d.ts.map +0 -1
  100. package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommand.js.map +0 -1
  101. package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.d.ts.map +0 -1
  102. package/lib/envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.js.map +0 -1
  103. package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.d.ts.map +0 -1
  104. package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommand.js.map +0 -1
  105. package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.d.ts +0 -34
  106. package/lib/envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.d.ts.map +0 -1
  107. 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 AWS SSM.
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 ssmPath
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.ssmPath}'`);
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.ssmPath, command.value);
41
- this.logger.info(`Pushed ${command.key}=${envVariable.maskedValue} to AWS SSM at path ${command.ssmPath}`);
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 SSM: ${errorMessage}`);
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,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,CAAA;AAnCY,wBAAwB;IADpC,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAE7B,WAAA,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;;GAJb,wBAAwB,CAmCpC"}
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
- * SSM path for the single environment variable
22
+ * Secret path in the cloud provider for the single environment variable
23
23
  */
24
- ssmPath?: string;
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 AWS SSM (renamed from import)
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,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC"}
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,CAQxB;IAED;;OAEG;IACH,OAAO,CAAC,QAAQ;CAWjB"}
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.length > 10
44
- ? '*'.repeat(this._value.length - 3) + this._value.slice(-3)
45
- : '*'.repeat(this._value.length);
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,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"}
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,10 @@
1
+ export type MapFileConfig = {
2
+ provider?: string;
3
+ vaultUrl?: string;
4
+ profile?: string;
5
+ };
6
+ export type ParsedMapFile = {
7
+ config: MapFileConfig;
8
+ mappings: Record<string, string>;
9
+ };
10
+ //# sourceMappingURL=MapFileConfig.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MapFileConfig.js.map
@@ -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
- PUSH_ENV_TO_SSM = "PUSH_ENV_TO_SSM",
4
- PULL_SSM_TO_ENV = "PULL_SSM_TO_ENV"
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,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;CACpC"}
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["PUSH_ENV_TO_SSM"] = "PUSH_ENV_TO_SSM";
5
- OperationMode["PULL_SSM_TO_ENV"] = "PULL_SSM_TO_ENV";
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,oDAAmC,CAAA;IACnC,oDAAmC,CAAA;AACrC,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB"}
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;AAE7B,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;IAuBpD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS5D"}
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 Error(`Failed to get secret ${name}: ${errorMessage}`);
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;AAIhC,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,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,CAAA;AAvCY,oBAAoB;IADhC,UAAU,EAAE;;GACA,oBAAoB,CAuChC"}
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":"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"}
@@ -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,3 @@
1
+ export declare const DEFAULT_VAULT_HOSTS: string[];
2
+ export declare function validateAzureVaultUrl(vaultUrl: string, allowedHosts: string[]): void;
3
+ //# sourceMappingURL=AzureVaultUrlValidator.d.ts.map
@@ -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;IAmB3D,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"}
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":"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"}
1
+ {"version":3,"file":"FileVariableStore.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"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"}
@@ -4,15 +4,15 @@ export declare const DOMAIN: {
4
4
  IVariableStore: symbol;
5
5
  };
6
6
  export declare const APPLICATION: {
7
- PullSsmToEnvCommandHandler: symbol;
8
- PushEnvToSsmCommandHandler: symbol;
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
- PullSsmToEnvCommandHandler: symbol;
15
- PushEnvToSsmCommandHandler: symbol;
14
+ PullSecretsToEnvCommandHandler: symbol;
15
+ PushEnvToSecretsCommandHandler: symbol;
16
16
  PushSingleCommandHandler: symbol;
17
17
  DispatchActionCommandHandler: symbol;
18
18
  ILogger: symbol;