@bitblit/ratchet-aws 6.1.222-alpha → 6.1.225-alpha

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 (26) hide show
  1. package/License.txt +13 -0
  2. package/lib/environment/model/ratchet-environment-database-config.d.ts +9 -0
  3. package/lib/environment/model/ratchet-environment-database-config.js +2 -0
  4. package/lib/environment/model/ratchet-environment-database-config.js.map +1 -0
  5. package/lib/environment/model/ratchet-environment-dynamic-property.d.ts +4 -0
  6. package/lib/environment/model/ratchet-environment-dynamic-property.js +2 -0
  7. package/lib/environment/model/ratchet-environment-dynamic-property.js.map +1 -0
  8. package/lib/environment/model/ratchet-environment-third-party-config.d.ts +5 -0
  9. package/lib/environment/model/ratchet-environment-third-party-config.js +2 -0
  10. package/lib/environment/model/ratchet-environment-third-party-config.js.map +1 -0
  11. package/lib/environment/model/ratchet-environment.d.ts +8 -0
  12. package/lib/environment/model/ratchet-environment.js +2 -0
  13. package/lib/environment/model/ratchet-environment.js.map +1 -0
  14. package/lib/secrets-manager/impl/secrets-manager-environment-service-provider.d.ts +12 -0
  15. package/lib/secrets-manager/impl/secrets-manager-environment-service-provider.js +21 -0
  16. package/lib/secrets-manager/impl/secrets-manager-environment-service-provider.js.map +1 -0
  17. package/lib/secrets-manager/secrets-manager-ratchet.d.ts +7 -0
  18. package/lib/secrets-manager/secrets-manager-ratchet.js +54 -0
  19. package/lib/secrets-manager/secrets-manager-ratchet.js.map +1 -0
  20. package/package.json +6 -4
  21. package/src/environment/model/ratchet-environment-database-config.ts +10 -0
  22. package/src/environment/model/ratchet-environment-dynamic-property.ts +4 -0
  23. package/src/environment/model/ratchet-environment-third-party-config.ts +6 -0
  24. package/src/environment/model/ratchet-environment.ts +9 -0
  25. package/src/secrets-manager/impl/secrets-manager-environment-service-provider.ts +33 -0
  26. package/src/secrets-manager/secrets-manager-ratchet.ts +55 -0
package/License.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2018-2024 Christopher Weiss
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
@@ -0,0 +1,9 @@
1
+ import { RatchetEnvironmentDynamicProperty } from "./ratchet-environment-dynamic-property.ts";
2
+ export interface RatchetEnvironmentDatabaseConfig {
3
+ label: string;
4
+ host?: string;
5
+ username?: string;
6
+ password?: string;
7
+ databaseName?: string;
8
+ meta?: RatchetEnvironmentDynamicProperty[];
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ratchet-environment-database-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratchet-environment-database-config.js","sourceRoot":"","sources":["../../../src/environment/model/ratchet-environment-database-config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export interface RatchetEnvironmentDynamicProperty {
2
+ k: string;
3
+ v: string;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ratchet-environment-dynamic-property.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratchet-environment-dynamic-property.js","sourceRoot":"","sources":["../../../src/environment/model/ratchet-environment-dynamic-property.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { RatchetEnvironmentDynamicProperty } from "./ratchet-environment-dynamic-property.ts";
2
+ export interface RatchetEnvironmentThirdPartyConfig {
3
+ label: string;
4
+ data: RatchetEnvironmentDynamicProperty[];
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ratchet-environment-third-party-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratchet-environment-third-party-config.js","sourceRoot":"","sources":["../../../src/environment/model/ratchet-environment-third-party-config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { RatchetEnvironmentDynamicProperty } from "./ratchet-environment-dynamic-property.ts";
2
+ import { RatchetEnvironmentThirdPartyConfig } from "./ratchet-environment-third-party-config.ts";
3
+ export interface RatchetEnvironment {
4
+ encryptionKey?: string;
5
+ historicalDecryptionKeys?: string[];
6
+ database?: RatchetEnvironmentDynamicProperty[];
7
+ thirdParty?: RatchetEnvironmentThirdPartyConfig[];
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ratchet-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratchet-environment.js","sourceRoot":"","sources":["../../../src/environment/model/ratchet-environment.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { EnvironmentServiceProvider } from "../../environment/environment-service-provider.ts";
2
+ import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
3
+ export declare class SecretsManagerEnvironmentServiceProvider<T> implements EnvironmentServiceProvider<T> {
4
+ private cfg;
5
+ private secretsManagerRatchet;
6
+ constructor(cfg: SecretsManagerEnvironmentServiceProviderConfig);
7
+ fetchConfig(name: string): Promise<T>;
8
+ }
9
+ export interface SecretsManagerEnvironmentServiceProviderConfig {
10
+ smOverride?: SecretsManagerClient;
11
+ region?: string;
12
+ }
@@ -0,0 +1,21 @@
1
+ import { RequireRatchet } from "@bitblit/ratchet-common/lang/require-ratchet";
2
+ import { Logger } from "@bitblit/ratchet-common/logger/logger";
3
+ import { SecretsManagerRatchet } from "../secrets-manager-ratchet.js";
4
+ import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
5
+ export class SecretsManagerEnvironmentServiceProvider {
6
+ cfg;
7
+ secretsManagerRatchet;
8
+ constructor(cfg) {
9
+ this.cfg = cfg;
10
+ RequireRatchet.notNullOrUndefined(cfg);
11
+ RequireRatchet.true(!!cfg.smOverride || !!cfg.region, 'You must set either region or smOverride');
12
+ const client = cfg.smOverride || new SecretsManagerClient({ region: cfg.region });
13
+ this.secretsManagerRatchet = new SecretsManagerRatchet(client);
14
+ }
15
+ async fetchConfig(name) {
16
+ Logger.silly('SecretsManagerEnvironmentServiceProvider fetch for %s', name);
17
+ const rval = await this.secretsManagerRatchet.fetchAndParseSecret(name);
18
+ return rval;
19
+ }
20
+ }
21
+ //# sourceMappingURL=secrets-manager-environment-service-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-manager-environment-service-provider.js","sourceRoot":"","sources":["../../../src/secrets-manager/impl/secrets-manager-environment-service-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAMvE,MAAM,OAAO,wCAAwC;IAGzC,GAAG;IAFL,qBAAqB,CAAuB;IACpD,YACU,GAAmD;mBAAnD,GAAG;QAEX,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QAClG,MAAM,MAAM,GAA0B,GAAG,CAAC,UAAU,IAAI,IAAI,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,IAAY;QACnC,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAM,MAAM,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
2
+ export declare class SecretsManagerRatchet {
3
+ private sm;
4
+ constructor(sm: SecretsManagerClient);
5
+ fetchSecret(secretName: string, defaultValue?: string): Promise<string>;
6
+ fetchAndParseSecret<T>(secretName: string, defaultValue?: T): Promise<T>;
7
+ }
@@ -0,0 +1,54 @@
1
+ import { RequireRatchet } from "@bitblit/ratchet-common/lang/require-ratchet";
2
+ import { GetSecretValueCommand, ResourceNotFoundException } from '@aws-sdk/client-secrets-manager';
3
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
4
+ export class SecretsManagerRatchet {
5
+ sm;
6
+ constructor(sm) {
7
+ this.sm = sm;
8
+ RequireRatchet.notNullOrUndefined(this.sm, 'sm');
9
+ }
10
+ async fetchSecret(secretName, defaultValue) {
11
+ Logger.info('Fetching secret %s', secretName);
12
+ let rval = null;
13
+ try {
14
+ const command = new GetSecretValueCommand({ SecretId: secretName });
15
+ const response = await this.sm.send(command);
16
+ if (response.SecretString) {
17
+ rval = response.SecretString;
18
+ }
19
+ else if (response.SecretBinary) {
20
+ const buff = Buffer.from(response.SecretBinary, 'base64');
21
+ rval = buff.toString('ascii');
22
+ }
23
+ }
24
+ catch (err) {
25
+ if (err instanceof ResourceNotFoundException) {
26
+ if (defaultValue !== null && defaultValue !== undefined) {
27
+ rval = defaultValue;
28
+ }
29
+ else {
30
+ throw new Error('Secret has no value and no default set for ' + secretName, err);
31
+ }
32
+ }
33
+ else {
34
+ Logger.error('Failed to retrieve secret: %s : %s', secretName, err, err);
35
+ throw err;
36
+ }
37
+ }
38
+ return rval;
39
+ }
40
+ async fetchAndParseSecret(secretName, defaultValue) {
41
+ Logger.info('Fetching secret %s', secretName);
42
+ const asString = await this.fetchSecret(secretName, undefined);
43
+ let rval = null;
44
+ if (asString) {
45
+ rval = JSON.parse(asString);
46
+ }
47
+ rval = rval ?? defaultValue;
48
+ if (!rval) {
49
+ throw new Error('Secret has no value and no default set');
50
+ }
51
+ return rval;
52
+ }
53
+ }
54
+ //# sourceMappingURL=secrets-manager-ratchet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-manager-ratchet.js","sourceRoot":"","sources":["../../src/secrets-manager/secrets-manager-ratchet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAwB,MAAM,iCAAiC,CAAC;AACzH,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,MAAM,OAAO,qBAAqB;IAEtB,EAAE;IADZ,YACU,EAAwB;kBAAxB,EAAE;QAEV,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAG,YAAqB;QACjE,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;QAC9C,IAAI,IAAI,GAAW,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE7C,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC1B,IAAI,GAAE,QAAQ,CAAC,YAAY,CAAC;YAC9B,CAAC;iBAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAmB,EAAE,QAAQ,CAAC,CAAC;gBACjE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,yBAAyB,EAAE,CAAC;gBAC7C,IAAI,YAAY,KAAG,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBACtD,IAAI,GAAG,YAAY,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CAAC,6CAA6C,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,UAAU,EAAG,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1E,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAI,UAAkB,EAAG,YAAgB;QACvE,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAW,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACvE,IAAI,IAAI,GAAM,IAAI,CAAC;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CAEF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitblit/ratchet-aws",
3
- "version": "6.1.222-alpha",
3
+ "version": "6.1.225-alpha",
4
4
  "description": "Common tools for use with AWS browser and node",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "license": "Apache-2.0",
54
54
  "dependencies": {
55
- "@bitblit/ratchet-common": "6.1.222-alpha"
55
+ "@bitblit/ratchet-common": "6.1.225-alpha"
56
56
  },
57
57
  "optionalDependencies": {
58
58
  "@aws-sdk/client-athena": "3.1095.0",
@@ -66,6 +66,7 @@
66
66
  "@aws-sdk/client-lambda": "3.1095.0",
67
67
  "@aws-sdk/client-route-53": "3.1095.0",
68
68
  "@aws-sdk/client-s3": "3.1095.0",
69
+ "@aws-sdk/client-secrets-manager": "3.1095.0",
69
70
  "@aws-sdk/client-ses": "3.1095.0",
70
71
  "@aws-sdk/client-sns": "3.1095.0",
71
72
  "@aws-sdk/client-ssm": "3.1095.0",
@@ -93,6 +94,7 @@
93
94
  "@aws-sdk/client-lambda": "^3.1095.0",
94
95
  "@aws-sdk/client-route-53": "^3.1095.0",
95
96
  "@aws-sdk/client-s3": "^3.1095.0",
97
+ "@aws-sdk/client-secrets-manager": "^3.1095.0",
96
98
  "@aws-sdk/client-ses": "^3.1095.0",
97
99
  "@aws-sdk/client-sns": "^3.1095.0",
98
100
  "@aws-sdk/client-ssm": "^3.1095.0",
@@ -103,7 +105,7 @@
103
105
  "@aws-sdk/s3-request-presigner": "^3.1095.0",
104
106
  "@aws-sdk/types": "^3.974.2",
105
107
  "@aws-sdk/util-dynamodb": "^3.996.2",
106
- "@bitblit/ratchet-common": "6.1.222-alpha",
108
+ "@bitblit/ratchet-common": "6.1.225-alpha",
107
109
  "@smithy/types": "^4.14.2",
108
110
  "@smithy/abort-controller": "^4.3.3",
109
111
  "@smithy/smithy-client": "^4.14.14",
@@ -181,7 +183,7 @@
181
183
  }
182
184
  },
183
185
  "devDependencies": {
184
- "@bitblit/ratchet-node-only": "6.1.222-alpha",
186
+ "@bitblit/ratchet-node-only": "6.1.225-alpha",
185
187
  "@types/aws-lambda": "8.10.162",
186
188
  "aws-sdk-client-mock": "4.1.0"
187
189
  },
@@ -0,0 +1,10 @@
1
+ import { RatchetEnvironmentDynamicProperty } from "./ratchet-environment-dynamic-property.ts";
2
+
3
+ export interface RatchetEnvironmentDatabaseConfig {
4
+ label: string;
5
+ host?: string;
6
+ username?: string;
7
+ password?: string;
8
+ databaseName?: string;
9
+ meta?: RatchetEnvironmentDynamicProperty[];
10
+ }
@@ -0,0 +1,4 @@
1
+ export interface RatchetEnvironmentDynamicProperty {
2
+ k: string;
3
+ v: string;
4
+ }
@@ -0,0 +1,6 @@
1
+ import { RatchetEnvironmentDynamicProperty } from "./ratchet-environment-dynamic-property.ts";
2
+
3
+ export interface RatchetEnvironmentThirdPartyConfig {
4
+ label: string;
5
+ data: RatchetEnvironmentDynamicProperty[];
6
+ }
@@ -0,0 +1,9 @@
1
+ import { RatchetEnvironmentDynamicProperty } from "./ratchet-environment-dynamic-property.ts";
2
+ import { RatchetEnvironmentThirdPartyConfig } from "./ratchet-environment-third-party-config.ts";
3
+
4
+ export interface RatchetEnvironment {
5
+ encryptionKey?: string;
6
+ historicalDecryptionKeys?: string[];
7
+ database?: RatchetEnvironmentDynamicProperty[];
8
+ thirdParty?: RatchetEnvironmentThirdPartyConfig[];
9
+ }
@@ -0,0 +1,33 @@
1
+ import { RequireRatchet } from "@bitblit/ratchet-common/lang/require-ratchet";
2
+ import { Logger } from "@bitblit/ratchet-common/logger/logger";
3
+ import { EnvironmentServiceProvider } from "../../environment/environment-service-provider.ts";
4
+ import { SecretsManagerRatchet } from "../secrets-manager-ratchet.ts";
5
+ import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
6
+
7
+ /**
8
+ * Service for reading environmental variables
9
+ * Also hides the decryption detail from higher up services
10
+ */
11
+ export class SecretsManagerEnvironmentServiceProvider<T> implements EnvironmentServiceProvider<T> {
12
+ private secretsManagerRatchet: SecretsManagerRatchet
13
+ public constructor(
14
+ private cfg: SecretsManagerEnvironmentServiceProviderConfig
15
+ ) {
16
+ RequireRatchet.notNullOrUndefined(cfg);
17
+ RequireRatchet.true(!!cfg.smOverride || !!cfg.region, 'You must set either region or smOverride');
18
+ const client: SecretsManagerClient = cfg.smOverride || new SecretsManagerClient({ region: cfg.region });
19
+ this.secretsManagerRatchet = new SecretsManagerRatchet(client);
20
+ }
21
+
22
+ public async fetchConfig(name: string): Promise<T> {
23
+ Logger.silly('SecretsManagerEnvironmentServiceProvider fetch for %s', name);
24
+ const rval: T = await this.secretsManagerRatchet.fetchAndParseSecret(name);
25
+ return rval;
26
+ }
27
+ }
28
+
29
+
30
+ export interface SecretsManagerEnvironmentServiceProviderConfig {
31
+ smOverride?: SecretsManagerClient;
32
+ region?: string;
33
+ }
@@ -0,0 +1,55 @@
1
+ import { RequireRatchet } from "@bitblit/ratchet-common/lang/require-ratchet";
2
+ import { GetSecretValueCommand, ResourceNotFoundException, SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
3
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
4
+
5
+ export class SecretsManagerRatchet {
6
+ constructor(
7
+ private sm: SecretsManagerClient,
8
+ ) {
9
+ RequireRatchet.notNullOrUndefined(this.sm, 'sm');
10
+ }
11
+
12
+ public async fetchSecret(secretName: string , defaultValue?: string): Promise<string> {
13
+ Logger.info('Fetching secret %s', secretName);
14
+ let rval: string = null;
15
+ try {
16
+ const command = new GetSecretValueCommand({ SecretId: secretName });
17
+ const response = await this.sm.send(command);
18
+
19
+ if (response.SecretString) {
20
+ rval= response.SecretString; // JSON string or plain string
21
+ } else if (response.SecretBinary) {
22
+ // decode from base64 if stored as binary
23
+ const buff = Buffer.from(response.SecretBinary as any, 'base64');
24
+ rval = buff.toString('ascii');
25
+ }
26
+ } catch (err) {
27
+ if (err instanceof ResourceNotFoundException) {
28
+ if (defaultValue!==null && defaultValue !== undefined) {
29
+ rval = defaultValue;
30
+ } else {
31
+ throw new Error('Secret has no value and no default set for ' + secretName, err);
32
+ }
33
+ } else {
34
+ Logger.error('Failed to retrieve secret: %s : %s', secretName, err, err);
35
+ throw err;
36
+ }
37
+ }
38
+ return rval;
39
+ }
40
+
41
+ public async fetchAndParseSecret<T>(secretName: string , defaultValue?: T): Promise<T> {
42
+ Logger.info('Fetching secret %s', secretName);
43
+ const asString: string = await this.fetchSecret(secretName, undefined);
44
+ let rval: T = null;
45
+ if (asString) {
46
+ rval = JSON.parse(asString);
47
+ }
48
+ rval = rval ?? defaultValue;
49
+ if (!rval) {
50
+ throw new Error('Secret has no value and no default set');
51
+ }
52
+ return rval;
53
+ }
54
+
55
+ }