@itgorillaz/configify 1.1.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 (102) hide show
  1. package/.prettierrc +4 -0
  2. package/LICENSE +21 -0
  3. package/README.md +281 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +18 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/configify.module.d.ts +12 -0
  8. package/dist/src/configify.module.js +120 -0
  9. package/dist/src/configify.module.js.map +1 -0
  10. package/dist/src/configuration/configuration-options.interface.d.ts +11 -0
  11. package/dist/src/configuration/configuration-options.interface.js +9 -0
  12. package/dist/src/configuration/configuration-options.interface.js.map +1 -0
  13. package/dist/src/configuration/configuration-parser.interface.d.ts +3 -0
  14. package/dist/src/configuration/configuration-parser.interface.js +3 -0
  15. package/dist/src/configuration/configuration-parser.interface.js.map +1 -0
  16. package/dist/src/configuration/configuration-providers.interface.d.ts +5 -0
  17. package/dist/src/configuration/configuration-providers.interface.js +3 -0
  18. package/dist/src/configuration/configuration-providers.interface.js.map +1 -0
  19. package/dist/src/configuration/configuration.registry.d.ts +9 -0
  20. package/dist/src/configuration/configuration.registry.js +25 -0
  21. package/dist/src/configuration/configuration.registry.js.map +1 -0
  22. package/dist/src/configuration/index.d.ts +6 -0
  23. package/dist/src/configuration/index.js +23 -0
  24. package/dist/src/configuration/index.js.map +1 -0
  25. package/dist/src/configuration/parsers/configuration-parser.factory.d.ts +7 -0
  26. package/dist/src/configuration/parsers/configuration-parser.factory.js +27 -0
  27. package/dist/src/configuration/parsers/configuration-parser.factory.js.map +1 -0
  28. package/dist/src/configuration/parsers/dotenv-configuration.parser.d.ts +4 -0
  29. package/dist/src/configuration/parsers/dotenv-configuration.parser.js +12 -0
  30. package/dist/src/configuration/parsers/dotenv-configuration.parser.js.map +1 -0
  31. package/dist/src/configuration/parsers/index.d.ts +4 -0
  32. package/dist/src/configuration/parsers/index.js +21 -0
  33. package/dist/src/configuration/parsers/index.js.map +1 -0
  34. package/dist/src/configuration/parsers/json-configuration.parser.d.ts +4 -0
  35. package/dist/src/configuration/parsers/json-configuration.parser.js +11 -0
  36. package/dist/src/configuration/parsers/json-configuration.parser.js.map +1 -0
  37. package/dist/src/configuration/parsers/yaml-configuration.parser.d.ts +4 -0
  38. package/dist/src/configuration/parsers/yaml-configuration.parser.js +12 -0
  39. package/dist/src/configuration/parsers/yaml-configuration.parser.js.map +1 -0
  40. package/dist/src/configuration/resolvers/aws/index.d.ts +2 -0
  41. package/dist/src/configuration/resolvers/aws/index.js +19 -0
  42. package/dist/src/configuration/resolvers/aws/index.js.map +1 -0
  43. package/dist/src/configuration/resolvers/aws/parameter-store-configuration.resolver.d.ts +12 -0
  44. package/dist/src/configuration/resolvers/aws/parameter-store-configuration.resolver.js +61 -0
  45. package/dist/src/configuration/resolvers/aws/parameter-store-configuration.resolver.js.map +1 -0
  46. package/dist/src/configuration/resolvers/aws/secrets-manager-configuration.resolver.d.ts +12 -0
  47. package/dist/src/configuration/resolvers/aws/secrets-manager-configuration.resolver.js +59 -0
  48. package/dist/src/configuration/resolvers/aws/secrets-manager-configuration.resolver.js.map +1 -0
  49. package/dist/src/configuration/resolvers/configuration-resolver.interface.d.ts +3 -0
  50. package/dist/src/configuration/resolvers/configuration-resolver.interface.js +3 -0
  51. package/dist/src/configuration/resolvers/configuration-resolver.interface.js.map +1 -0
  52. package/dist/src/configuration/resolvers/index.d.ts +3 -0
  53. package/dist/src/configuration/resolvers/index.js +20 -0
  54. package/dist/src/configuration/resolvers/index.js.map +1 -0
  55. package/dist/src/configuration/resolvers/resolved-value.interface.d.ts +7 -0
  56. package/dist/src/configuration/resolvers/resolved-value.interface.js +3 -0
  57. package/dist/src/configuration/resolvers/resolved-value.interface.js.map +1 -0
  58. package/dist/src/decorators/configuration.decorator.d.ts +2 -0
  59. package/dist/src/decorators/configuration.decorator.js +13 -0
  60. package/dist/src/decorators/configuration.decorator.js.map +1 -0
  61. package/dist/src/decorators/index.d.ts +2 -0
  62. package/dist/src/decorators/index.js +19 -0
  63. package/dist/src/decorators/index.js.map +1 -0
  64. package/dist/src/decorators/value.decorator.d.ts +10 -0
  65. package/dist/src/decorators/value.decorator.js +14 -0
  66. package/dist/src/decorators/value.decorator.js.map +1 -0
  67. package/dist/src/index.d.ts +2 -0
  68. package/dist/src/index.js +19 -0
  69. package/dist/src/index.js.map +1 -0
  70. package/dist/src/interpolation/variables.d.ts +9 -0
  71. package/dist/src/interpolation/variables.js +37 -0
  72. package/dist/src/interpolation/variables.js.map +1 -0
  73. package/dist/tsconfig.build.tsbuildinfo +1 -0
  74. package/index.d.ts +1 -0
  75. package/index.js +6 -0
  76. package/index.ts +1 -0
  77. package/nest-cli.json +8 -0
  78. package/package.json +82 -0
  79. package/src/configify.module.ts +241 -0
  80. package/src/configuration/configuration-options.interface.ts +51 -0
  81. package/src/configuration/configuration-parser.interface.ts +15 -0
  82. package/src/configuration/configuration-providers.interface.ts +9 -0
  83. package/src/configuration/configuration.registry.ts +70 -0
  84. package/src/configuration/index.ts +6 -0
  85. package/src/configuration/parsers/configuration-parser.factory.ts +53 -0
  86. package/src/configuration/parsers/dotenv-configuration.parser.ts +18 -0
  87. package/src/configuration/parsers/index.ts +4 -0
  88. package/src/configuration/parsers/json-configuration.parser.ts +17 -0
  89. package/src/configuration/parsers/yaml-configuration.parser.ts +18 -0
  90. package/src/configuration/resolvers/aws/index.ts +2 -0
  91. package/src/configuration/resolvers/aws/parameter-store-configuration.resolver.ts +115 -0
  92. package/src/configuration/resolvers/aws/secrets-manager-configuration.resolver.ts +117 -0
  93. package/src/configuration/resolvers/configuration-resolver.interface.ts +11 -0
  94. package/src/configuration/resolvers/index.ts +3 -0
  95. package/src/configuration/resolvers/resolved-value.interface.ts +10 -0
  96. package/src/decorators/configuration.decorator.ts +26 -0
  97. package/src/decorators/index.ts +2 -0
  98. package/src/decorators/value.decorator.ts +47 -0
  99. package/src/index.ts +2 -0
  100. package/src/interpolation/variables.ts +101 -0
  101. package/tsconfig.build.json +4 -0
  102. package/tsconfig.json +21 -0
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DotEnvConfigurationParser = void 0;
4
+ const dotenv = require("dotenv");
5
+ const fs = require("fs");
6
+ class DotEnvConfigurationParser {
7
+ parse(file) {
8
+ return dotenv.parse(fs.readFileSync(file));
9
+ }
10
+ }
11
+ exports.DotEnvConfigurationParser = DotEnvConfigurationParser;
12
+ //# sourceMappingURL=dotenv-configuration.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dotenv-configuration.parser.js","sourceRoot":"","sources":["../../../../src/configuration/parsers/dotenv-configuration.parser.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,yBAAyB;AAMzB,MAAa,yBAAyB;IAO7B,KAAK,CAAC,IAAY;QACvB,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF;AAVD,8DAUC"}
@@ -0,0 +1,4 @@
1
+ export * from './configuration-parser.factory';
2
+ export * from './dotenv-configuration.parser';
3
+ export * from './json-configuration.parser';
4
+ export * from './yaml-configuration.parser';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./configuration-parser.factory"), exports);
18
+ __exportStar(require("./dotenv-configuration.parser"), exports);
19
+ __exportStar(require("./json-configuration.parser"), exports);
20
+ __exportStar(require("./yaml-configuration.parser"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/configuration/parsers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA+C;AAC/C,gEAA8C;AAC9C,8DAA4C;AAC5C,8DAA4C"}
@@ -0,0 +1,4 @@
1
+ import { ConfigurationParser } from '../configuration-parser.interface';
2
+ export declare class JsonConfigurationParser implements ConfigurationParser {
3
+ parse(file: string): Record<string, any>;
4
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonConfigurationParser = void 0;
4
+ const fs = require("fs");
5
+ class JsonConfigurationParser {
6
+ parse(file) {
7
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
8
+ }
9
+ }
10
+ exports.JsonConfigurationParser = JsonConfigurationParser;
11
+ //# sourceMappingURL=json-configuration.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-configuration.parser.js","sourceRoot":"","sources":["../../../../src/configuration/parsers/json-configuration.parser.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AAMzB,MAAa,uBAAuB;IAO3B,KAAK,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AAVD,0DAUC"}
@@ -0,0 +1,4 @@
1
+ import { ConfigurationParser } from '../configuration-parser.interface';
2
+ export declare class YamlConfigurationParser implements ConfigurationParser {
3
+ parse(file: string): Record<string, any>;
4
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YamlConfigurationParser = void 0;
4
+ const fs = require("fs");
5
+ const yaml = require("js-yaml");
6
+ class YamlConfigurationParser {
7
+ parse(file) {
8
+ return yaml.load(fs.readFileSync(file, 'utf-8'));
9
+ }
10
+ }
11
+ exports.YamlConfigurationParser = YamlConfigurationParser;
12
+ //# sourceMappingURL=yaml-configuration.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-configuration.parser.js","sourceRoot":"","sources":["../../../../src/configuration/parsers/yaml-configuration.parser.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,gCAAgC;AAMhC,MAAa,uBAAuB;IAO3B,KAAK,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AAVD,0DAUC"}
@@ -0,0 +1,2 @@
1
+ export * from './parameter-store-configuration.resolver';
2
+ export * from './secrets-manager-configuration.resolver';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./parameter-store-configuration.resolver"), exports);
18
+ __exportStar(require("./secrets-manager-configuration.resolver"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/configuration/resolvers/aws/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2EAAyD;AACzD,2EAAyD"}
@@ -0,0 +1,12 @@
1
+ import { SSMClient } from '@aws-sdk/client-ssm';
2
+ import { ConfigurationResolver } from '../configuration-resolver.interface';
3
+ export declare class AwsParameterStoreConfigurationResolver implements ConfigurationResolver {
4
+ private readonly ssm;
5
+ private readonly AWS_PARAMETER_STORE_YAML_KEY;
6
+ private readonly AWS_PARAMETER_STORE_ENV_PREFIX;
7
+ constructor(ssm: SSMClient);
8
+ resolve(config: Record<string, any>): Promise<Record<string, any>>;
9
+ private filterConfiguration;
10
+ private resolveSecretValue;
11
+ private buildBulkRequest;
12
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AwsParameterStoreConfigurationResolver = void 0;
4
+ const client_ssm_1 = require("@aws-sdk/client-ssm");
5
+ class AwsParameterStoreConfigurationResolver {
6
+ constructor(ssm) {
7
+ this.ssm = ssm;
8
+ this.AWS_PARAMETER_STORE_YAML_KEY = 'aws-parameter-store';
9
+ this.AWS_PARAMETER_STORE_ENV_PREFIX = 'AWS_PARAMETER_STORE';
10
+ }
11
+ async resolve(config) {
12
+ const parameters = this.filterConfiguration(config);
13
+ const promises = this.buildBulkRequest(parameters);
14
+ const results = await Promise.all(promises);
15
+ const errors = results.filter((r) => !r.success);
16
+ if (errors && errors.length) {
17
+ throw new Error(`Unable to resolve parameter:\n${errors
18
+ .map((e) => `${e.key}: ${e.id} - ${e.error.message}`)
19
+ .join('\n')}`);
20
+ }
21
+ for (const result of results) {
22
+ config[result.key] = result.value;
23
+ }
24
+ return config;
25
+ }
26
+ filterConfiguration(config) {
27
+ return Object.fromEntries(Object.entries(config).filter(([key]) => key.startsWith(this.AWS_PARAMETER_STORE_YAML_KEY) ||
28
+ key.startsWith(this.AWS_PARAMETER_STORE_ENV_PREFIX)));
29
+ }
30
+ async resolveSecretValue(key, id) {
31
+ var _a;
32
+ try {
33
+ const payload = { Name: id, WithDecryption: true };
34
+ const command = new client_ssm_1.GetParameterCommand(payload);
35
+ const response = await this.ssm.send(command);
36
+ return {
37
+ id,
38
+ key,
39
+ value: (_a = response.Parameter) === null || _a === void 0 ? void 0 : _a.Value,
40
+ success: true,
41
+ };
42
+ }
43
+ catch (e) {
44
+ return {
45
+ id,
46
+ key,
47
+ error: e,
48
+ success: false,
49
+ };
50
+ }
51
+ }
52
+ buildBulkRequest(config) {
53
+ const promises = [];
54
+ for (const [key, value] of Object.entries(config)) {
55
+ promises.push(this.resolveSecretValue(key, value));
56
+ }
57
+ return promises;
58
+ }
59
+ }
60
+ exports.AwsParameterStoreConfigurationResolver = AwsParameterStoreConfigurationResolver;
61
+ //# sourceMappingURL=parameter-store-configuration.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-store-configuration.resolver.js","sourceRoot":"","sources":["../../../../../src/configuration/resolvers/aws/parameter-store-configuration.resolver.ts"],"names":[],"mappings":";;;AAAA,oDAAqE;AAOrE,MAAa,sCAAsC;IAWjD,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;QAR1B,iCAA4B,GAAG,qBAAqB,CAAC;QACrD,mCAA8B,GAAG,qBAAqB,CAAC;IAO1B,CAAC;IAU/C,KAAK,CAAC,OAAO,CAAC,MAA2B;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM;iBACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;iBACpD,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACpC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAQO,mBAAmB,CACzB,MAA2B;QAE3B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CACR,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC;YACjD,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,8BAA8B,CAAC,CACtD,CACF,CAAC;IACJ,CAAC;IASO,KAAK,CAAC,kBAAkB,CAC9B,GAAW,EACX,EAAU;;QAEV,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,gCAAmB,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO;gBACL,EAAE;gBACF,GAAG;gBACH,KAAK,EAAE,MAAA,QAAQ,CAAC,SAAS,0CAAE,KAAK;gBAChC,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,EAAE;gBACF,GAAG;gBACH,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;IACH,CAAC;IAQO,gBAAgB,CACtB,MAA2B;QAE3B,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA3GD,wFA2GC"}
@@ -0,0 +1,12 @@
1
+ import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
2
+ import { ConfigurationResolver } from '../configuration-resolver.interface';
3
+ export declare class AwsSecretsManagerConfigurationResolver implements ConfigurationResolver {
4
+ private readonly secretsManager;
5
+ private readonly AWS_SECRETS_AMANGER_YAML_KEY;
6
+ private readonly AWS_SECRETS_MANAGER_ENV_PREFIX;
7
+ constructor(secretsManager: SecretsManagerClient);
8
+ resolve(config: Record<string, any>): Promise<Record<string, any>>;
9
+ private filterConfiguration;
10
+ private resolveSecretValue;
11
+ private buildBulkRequest;
12
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AwsSecretsManagerConfigurationResolver = void 0;
4
+ const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
5
+ class AwsSecretsManagerConfigurationResolver {
6
+ constructor(secretsManager) {
7
+ this.secretsManager = secretsManager;
8
+ this.AWS_SECRETS_AMANGER_YAML_KEY = 'aws-secrets-manager';
9
+ this.AWS_SECRETS_MANAGER_ENV_PREFIX = 'AWS_SECRETS_MANAGER';
10
+ }
11
+ async resolve(config) {
12
+ const secrets = this.filterConfiguration(config);
13
+ const promises = this.buildBulkRequest(secrets);
14
+ const results = await Promise.all(promises);
15
+ const errors = results.filter((r) => !r.success);
16
+ if (errors && errors.length) {
17
+ throw new Error(`Unable to resolve secrets:\n${errors
18
+ .map((e) => `${e.key}: ${e.id} - ${e.error.message}`)
19
+ .join('\n')}`);
20
+ }
21
+ for (const result of results) {
22
+ config[result.key] = result.value;
23
+ }
24
+ return config;
25
+ }
26
+ filterConfiguration(config) {
27
+ return Object.fromEntries(Object.entries(config).filter(([key]) => key.startsWith(this.AWS_SECRETS_AMANGER_YAML_KEY) ||
28
+ key.startsWith(this.AWS_SECRETS_MANAGER_ENV_PREFIX)));
29
+ }
30
+ async resolveSecretValue(key, id) {
31
+ try {
32
+ const command = new client_secrets_manager_1.GetSecretValueCommand({ SecretId: id });
33
+ const response = await this.secretsManager.send(command);
34
+ return {
35
+ id,
36
+ key,
37
+ value: response.SecretString,
38
+ success: true,
39
+ };
40
+ }
41
+ catch (e) {
42
+ return {
43
+ id,
44
+ key,
45
+ error: e,
46
+ success: false,
47
+ };
48
+ }
49
+ }
50
+ buildBulkRequest(config) {
51
+ const promises = [];
52
+ for (const [key, value] of Object.entries(config)) {
53
+ promises.push(this.resolveSecretValue(key, value));
54
+ }
55
+ return promises;
56
+ }
57
+ }
58
+ exports.AwsSecretsManagerConfigurationResolver = AwsSecretsManagerConfigurationResolver;
59
+ //# sourceMappingURL=secrets-manager-configuration.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-manager-configuration.resolver.js","sourceRoot":"","sources":["../../../../../src/configuration/resolvers/aws/secrets-manager-configuration.resolver.ts"],"names":[],"mappings":";;;AAAA,4EAGyC;AAOzC,MAAa,sCAAsC;IAWjD,YAA6B,cAAoC;QAApC,mBAAc,GAAd,cAAc,CAAsB;QARhD,iCAA4B,GAAG,qBAAqB,CAAC;QACrD,mCAA8B,GAAG,qBAAqB,CAAC;IAOJ,CAAC;IAUrE,KAAK,CAAC,OAAO,CAAC,MAA2B;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEhD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;iBACpD,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACpC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAQO,mBAAmB,CACzB,MAA2B;QAE3B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CACR,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC;YACjD,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,8BAA8B,CAAC,CACtD,CACF,CAAC;IACJ,CAAC;IASO,KAAK,CAAC,kBAAkB,CAC9B,GAAW,EACX,EAAU;QAEV,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,8CAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,OAAO;gBACL,EAAE;gBACF,GAAG;gBACH,KAAK,EAAE,QAAQ,CAAC,YAAY;gBAC5B,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,EAAE;gBACF,GAAG;gBACH,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;IACH,CAAC;IAQO,gBAAgB,CACtB,MAA2B;QAE3B,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA1GD,wFA0GC"}
@@ -0,0 +1,3 @@
1
+ export interface ConfigurationResolver {
2
+ resolve(configuration: Record<string, any>): Promise<Record<string, any>>;
3
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=configuration-resolver.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-resolver.interface.js","sourceRoot":"","sources":["../../../../src/configuration/resolvers/configuration-resolver.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './aws';
2
+ export * from './configuration-resolver.interface';
3
+ export * from './resolved-value.interface';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./aws"), exports);
18
+ __exportStar(require("./configuration-resolver.interface"), exports);
19
+ __exportStar(require("./resolved-value.interface"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/configuration/resolvers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,qEAAmD;AACnD,6DAA2C"}
@@ -0,0 +1,7 @@
1
+ export interface ResolvedValue {
2
+ id: string;
3
+ success: boolean;
4
+ key: string;
5
+ value?: string;
6
+ error?: Error;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=resolved-value.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolved-value.interface.js","sourceRoot":"","sources":["../../../../src/configuration/resolvers/resolved-value.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const CONFIGURATION_METADATA: unique symbol;
2
+ export declare const Configuration: () => ClassDecorator;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Configuration = exports.CONFIGURATION_METADATA = void 0;
4
+ const configuration_registry_1 = require("../configuration/configuration.registry");
5
+ exports.CONFIGURATION_METADATA = Symbol.for('__configuration__');
6
+ const Configuration = () => {
7
+ return (target) => {
8
+ configuration_registry_1.ConfigurationRegistry.registerTarget(target);
9
+ Reflect.defineMetadata(exports.CONFIGURATION_METADATA, target.constructor.name, target);
10
+ };
11
+ };
12
+ exports.Configuration = Configuration;
13
+ //# sourceMappingURL=configuration.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.decorator.js","sourceRoot":"","sources":["../../../src/decorators/configuration.decorator.ts"],"names":[],"mappings":";;;AAAA,oFAAgF;AAKnE,QAAA,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAW/D,MAAM,aAAa,GAAG,GAAmB,EAAE;IAChD,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,8CAAqB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,CAAC,cAAc,CACpB,8BAAsB,EACtB,MAAM,CAAC,WAAW,CAAC,IAAI,EACvB,MAAM,CACP,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,aAAa,iBASxB"}
@@ -0,0 +1,2 @@
1
+ export * from './configuration.decorator';
2
+ export * from './value.decorator';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./configuration.decorator"), exports);
18
+ __exportStar(require("./value.decorator"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,oDAAkC"}
@@ -0,0 +1,10 @@
1
+ export declare const VALUE_METADATA: unique symbol;
2
+ export declare const VALUE_PROPERTIES_METADATA: unique symbol;
3
+ export interface ValueOptions {
4
+ parse: (value: any) => any;
5
+ }
6
+ export interface ValueDecoratedKey {
7
+ key: string;
8
+ options?: ValueOptions;
9
+ }
10
+ export declare const Value: (key: string, options?: ValueOptions) => PropertyDecorator;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Value = exports.VALUE_PROPERTIES_METADATA = exports.VALUE_METADATA = void 0;
4
+ const configuration_registry_1 = require("../configuration/configuration.registry");
5
+ exports.VALUE_METADATA = Symbol.for('__value__');
6
+ exports.VALUE_PROPERTIES_METADATA = Symbol.for('__properties__');
7
+ const Value = (key, options) => {
8
+ return (target, property) => {
9
+ configuration_registry_1.ConfigurationRegistry.registerAttribute(target, property);
10
+ Reflect.defineMetadata(exports.VALUE_METADATA, { key, options }, target, property);
11
+ };
12
+ };
13
+ exports.Value = Value;
14
+ //# sourceMappingURL=value.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.decorator.js","sourceRoot":"","sources":["../../../src/decorators/value.decorator.ts"],"names":[],"mappings":";;;AAAA,oFAAgF;AAKnE,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAKzC,QAAA,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AA4B/D,MAAM,KAAK,GAAG,CACnB,GAAW,EACX,OAAsB,EACH,EAAE;IACrB,OAAO,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE;QAC1C,8CAAqB,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,CAAC,cAAc,CAAC,sBAAc,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,KAAK,SAQhB"}
@@ -0,0 +1,2 @@
1
+ export * from './configify.module';
2
+ export * from './decorators';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./configify.module"), exports);
18
+ __exportStar(require("./decorators"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,+CAA6B"}
@@ -0,0 +1,9 @@
1
+ export declare class Variables {
2
+ private static readonly ESCAPE_PATTERN;
3
+ private static readonly UNESCAPED_PATTERN;
4
+ private static readonly EXPANSION_GROUP_PATTERN;
5
+ static expand(record: Record<string, any>): Record<string, any>;
6
+ private static interpolate;
7
+ private static escapeSequences;
8
+ private static lastIndexOf;
9
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Variables = void 0;
4
+ class Variables {
5
+ static expand(record) {
6
+ const expanded = {};
7
+ for (const key in record) {
8
+ const value = record[key];
9
+ expanded[key] = this.escapeSequences(this.interpolate(value, record));
10
+ }
11
+ return expanded;
12
+ }
13
+ static interpolate(value, record) {
14
+ const lastUnescapedDollarSignIndex = this.lastIndexOf(value, this.UNESCAPED_PATTERN);
15
+ if (lastUnescapedDollarSignIndex === -1)
16
+ return value;
17
+ const rightMostGroup = value.slice(lastUnescapedDollarSignIndex);
18
+ const match = rightMostGroup.match(this.EXPANSION_GROUP_PATTERN);
19
+ if (match != null) {
20
+ const [, group, variableName, defaultValue] = match;
21
+ return this.interpolate(value.replace(group, defaultValue || record[variableName] || ''), record);
22
+ }
23
+ return value;
24
+ }
25
+ static escapeSequences(value) {
26
+ return value.replace(this.ESCAPE_PATTERN, '$');
27
+ }
28
+ static lastIndexOf(value, regex) {
29
+ const matches = Array.from(value.matchAll(regex));
30
+ return matches.length > 0 ? matches.slice(-1)[0].index : -1;
31
+ }
32
+ }
33
+ exports.Variables = Variables;
34
+ Variables.ESCAPE_PATTERN = /\\\$/g;
35
+ Variables.UNESCAPED_PATTERN = /(?!(?<=\\))\$/g;
36
+ Variables.EXPANSION_GROUP_PATTERN = /((?!(?<=\\))\${?([\w-.]+)(?::-([^}\\]*))?}?)/;
37
+ //# sourceMappingURL=variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/interpolation/variables.ts"],"names":[],"mappings":";;;AAQA,MAAa,SAAS;IA8BpB,MAAM,CAAC,MAAM,CAAC,MAA2B;QACvC,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IASO,MAAM,CAAC,WAAW,CACxB,KAAa,EACb,MAA2B;QAE3B,MAAM,4BAA4B,GAAG,IAAI,CAAC,WAAW,CACnD,KAAK,EACL,IAAI,CAAC,iBAAiB,CACvB,CAAC;QAEF,IAAI,4BAA4B,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAEjE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC;YACpD,OAAO,IAAI,CAAC,WAAW,CACrB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAChE,MAAM,CACP,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAQO,MAAM,CAAC,eAAe,CAAC,KAAa;QAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IASO,MAAM,CAAC,WAAW,CAAC,KAAa,EAAE,KAAa;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;;AA3FH,8BA4FC;AAxFyB,wBAAc,GAAW,OAAO,CAAC;AAKjC,2BAAiB,GAAW,gBAAgB,CAAC;AAY7C,iCAAuB,GAC7C,8CAA8C,CAAC"}