@digitraffic/common 2022.10.5

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 (199) hide show
  1. package/LICENSE +291 -0
  2. package/aws/infra/api/integration.d.ts +21 -0
  3. package/aws/infra/api/integration.js +52 -0
  4. package/aws/infra/api/response.d.ts +22 -0
  5. package/aws/infra/api/response.js +61 -0
  6. package/aws/infra/api/responses.d.ts +39 -0
  7. package/aws/infra/api/responses.js +79 -0
  8. package/aws/infra/api/static-integration.d.ts +15 -0
  9. package/aws/infra/api/static-integration.js +54 -0
  10. package/aws/infra/canaries/canary-alarm.d.ts +6 -0
  11. package/aws/infra/canaries/canary-alarm.js +26 -0
  12. package/aws/infra/canaries/canary-parameters.d.ts +18 -0
  13. package/aws/infra/canaries/canary-parameters.js +3 -0
  14. package/aws/infra/canaries/canary-role.d.ts +6 -0
  15. package/aws/infra/canaries/canary-role.js +46 -0
  16. package/aws/infra/canaries/canary.d.ts +8 -0
  17. package/aws/infra/canaries/canary.js +29 -0
  18. package/aws/infra/canaries/database-canary.d.ts +18 -0
  19. package/aws/infra/canaries/database-canary.js +55 -0
  20. package/aws/infra/canaries/database-checker.d.ts +21 -0
  21. package/aws/infra/canaries/database-checker.js +109 -0
  22. package/aws/infra/canaries/url-canary.d.ts +19 -0
  23. package/aws/infra/canaries/url-canary.js +46 -0
  24. package/aws/infra/canaries/url-checker.d.ts +46 -0
  25. package/aws/infra/canaries/url-checker.js +238 -0
  26. package/aws/infra/documentation.d.ts +56 -0
  27. package/aws/infra/documentation.js +95 -0
  28. package/aws/infra/scheduler.d.ts +12 -0
  29. package/aws/infra/scheduler.js +31 -0
  30. package/aws/infra/security-rule.d.ts +12 -0
  31. package/aws/infra/security-rule.js +39 -0
  32. package/aws/infra/sqs-integration.d.ts +7 -0
  33. package/aws/infra/sqs-integration.js +93 -0
  34. package/aws/infra/sqs-queue.d.ts +16 -0
  35. package/aws/infra/sqs-queue.js +130 -0
  36. package/aws/infra/stack/lambda-configs.d.ts +72 -0
  37. package/aws/infra/stack/lambda-configs.js +93 -0
  38. package/aws/infra/stack/monitoredfunction.d.ts +84 -0
  39. package/aws/infra/stack/monitoredfunction.js +135 -0
  40. package/aws/infra/stack/rest_apis.d.ts +40 -0
  41. package/aws/infra/stack/rest_apis.js +179 -0
  42. package/aws/infra/stack/stack-checking-aspect.d.ts +20 -0
  43. package/aws/infra/stack/stack-checking-aspect.js +163 -0
  44. package/aws/infra/stack/stack.d.ts +41 -0
  45. package/aws/infra/stack/stack.js +58 -0
  46. package/aws/infra/stack/subscription.d.ts +17 -0
  47. package/aws/infra/stack/subscription.js +41 -0
  48. package/aws/infra/usage-plans.d.ts +15 -0
  49. package/aws/infra/usage-plans.js +42 -0
  50. package/aws/runtime/apikey.d.ts +2 -0
  51. package/aws/runtime/apikey.js +13 -0
  52. package/aws/runtime/digitraffic-integration-response.d.ts +8 -0
  53. package/aws/runtime/digitraffic-integration-response.js +26 -0
  54. package/aws/runtime/messaging.d.ts +10 -0
  55. package/aws/runtime/messaging.js +31 -0
  56. package/aws/runtime/s3.d.ts +2 -0
  57. package/aws/runtime/s3.js +30 -0
  58. package/aws/runtime/secrets/dbsecret.d.ts +54 -0
  59. package/aws/runtime/secrets/dbsecret.js +96 -0
  60. package/aws/runtime/secrets/proxy-holder.d.ts +9 -0
  61. package/aws/runtime/secrets/proxy-holder.js +26 -0
  62. package/aws/runtime/secrets/rds-holder.d.ts +9 -0
  63. package/aws/runtime/secrets/rds-holder.js +26 -0
  64. package/aws/runtime/secrets/secret-holder.d.ts +26 -0
  65. package/aws/runtime/secrets/secret-holder.js +73 -0
  66. package/aws/runtime/secrets/secret.d.ts +8 -0
  67. package/aws/runtime/secrets/secret.js +43 -0
  68. package/aws/types/errors.d.ts +4 -0
  69. package/aws/types/errors.js +9 -0
  70. package/aws/types/lambda-response.d.ts +12 -0
  71. package/aws/types/lambda-response.js +28 -0
  72. package/aws/types/mediatypes.d.ts +10 -0
  73. package/aws/types/mediatypes.js +15 -0
  74. package/aws/types/model-with-reference.d.ts +7 -0
  75. package/aws/types/model-with-reference.js +3 -0
  76. package/aws/types/proxytypes.d.ts +26 -0
  77. package/aws/types/proxytypes.js +3 -0
  78. package/aws/types/tags.d.ts +2 -0
  79. package/aws/types/tags.js +7 -0
  80. package/database/cached.d.ts +7 -0
  81. package/database/cached.js +32 -0
  82. package/database/database.d.ts +19 -0
  83. package/database/database.js +62 -0
  84. package/database/last-updated.d.ts +16 -0
  85. package/database/last-updated.js +54 -0
  86. package/index.d.ts +1 -0
  87. package/index.js +18 -0
  88. package/marine/id_utils.d.ts +3 -0
  89. package/marine/id_utils.js +33 -0
  90. package/marine/rtz.d.ts +48 -0
  91. package/marine/rtz.js +3 -0
  92. package/package.json +55 -0
  93. package/src/aws/infra/api/integration.js +52 -0
  94. package/src/aws/infra/api/response.js +61 -0
  95. package/src/aws/infra/api/responses.js +79 -0
  96. package/src/aws/infra/api/static-integration.js +54 -0
  97. package/src/aws/infra/canaries/canary-alarm.js +26 -0
  98. package/src/aws/infra/canaries/canary-parameters.js +3 -0
  99. package/src/aws/infra/canaries/canary-role.js +46 -0
  100. package/src/aws/infra/canaries/canary.js +29 -0
  101. package/src/aws/infra/canaries/database-canary.js +55 -0
  102. package/src/aws/infra/canaries/database-checker.js +109 -0
  103. package/src/aws/infra/canaries/url-canary.js +46 -0
  104. package/src/aws/infra/canaries/url-checker.js +238 -0
  105. package/src/aws/infra/documentation.js +95 -0
  106. package/src/aws/infra/scheduler.js +31 -0
  107. package/src/aws/infra/security-rule.js +39 -0
  108. package/src/aws/infra/sqs-integration.js +93 -0
  109. package/src/aws/infra/sqs-queue.js +130 -0
  110. package/src/aws/infra/stack/lambda-configs.js +93 -0
  111. package/src/aws/infra/stack/monitoredfunction.js +135 -0
  112. package/src/aws/infra/stack/rest_apis.js +179 -0
  113. package/src/aws/infra/stack/stack-checking-aspect.js +163 -0
  114. package/src/aws/infra/stack/stack.js +58 -0
  115. package/src/aws/infra/stack/subscription.js +41 -0
  116. package/src/aws/infra/usage-plans.js +42 -0
  117. package/src/aws/runtime/apikey.js +13 -0
  118. package/src/aws/runtime/digitraffic-integration-response.js +26 -0
  119. package/src/aws/runtime/messaging.js +31 -0
  120. package/src/aws/runtime/s3.js +30 -0
  121. package/src/aws/runtime/secrets/dbsecret.js +96 -0
  122. package/src/aws/runtime/secrets/proxy-holder.js +26 -0
  123. package/src/aws/runtime/secrets/rds-holder.js +26 -0
  124. package/src/aws/runtime/secrets/secret-holder.js +73 -0
  125. package/src/aws/runtime/secrets/secret.js +43 -0
  126. package/src/aws/types/errors.js +9 -0
  127. package/src/aws/types/lambda-response.js +28 -0
  128. package/src/aws/types/mediatypes.js +15 -0
  129. package/src/aws/types/model-with-reference.js +3 -0
  130. package/src/aws/types/proxytypes.js +3 -0
  131. package/src/aws/types/tags.js +7 -0
  132. package/src/database/cached.js +32 -0
  133. package/src/database/database.js +62 -0
  134. package/src/database/last-updated.js +54 -0
  135. package/src/marine/id_utils.js +33 -0
  136. package/src/marine/rtz.js +3 -0
  137. package/src/test/asserter.js +45 -0
  138. package/src/test/db-testutils.js +31 -0
  139. package/src/test/httpserver.js +67 -0
  140. package/src/test/secret.js +25 -0
  141. package/src/test/secrets-manager.js +59 -0
  142. package/src/test/testutils.js +44 -0
  143. package/src/types/input-error.js +7 -0
  144. package/src/types/language.js +10 -0
  145. package/src/types/traffictype.js +13 -0
  146. package/src/types/validator.js +14 -0
  147. package/src/utils/api-model.js +129 -0
  148. package/src/utils/base64.js +21 -0
  149. package/src/utils/date-utils.js +34 -0
  150. package/src/utils/geojson-types.js +18 -0
  151. package/src/utils/geometry.js +140 -0
  152. package/src/utils/retry.js +50 -0
  153. package/src/utils/slack.js +25 -0
  154. package/src/utils/utils.js +40 -0
  155. package/test/asserter.d.ts +11 -0
  156. package/test/asserter.js +45 -0
  157. package/test/db-testutils.d.ts +2 -0
  158. package/test/db-testutils.js +31 -0
  159. package/test/httpserver.d.ts +18 -0
  160. package/test/httpserver.js +67 -0
  161. package/test/marine/id_utils.test.js +69 -0
  162. package/test/promise/promise.test.js +125 -0
  163. package/test/secret.d.ts +3 -0
  164. package/test/secret.js +25 -0
  165. package/test/secrets/dbsecret.test.js +71 -0
  166. package/test/secrets/secret-holder.test.js +124 -0
  167. package/test/secrets/secret.test.js +66 -0
  168. package/test/secrets-manager.d.ts +9 -0
  169. package/test/secrets-manager.js +59 -0
  170. package/test/test/httpserver.test.js +87 -0
  171. package/test/testutils.d.ts +12 -0
  172. package/test/testutils.js +44 -0
  173. package/test/utils/date-utils.test.js +51 -0
  174. package/test/utils/geometry.test.js +49 -0
  175. package/test/utils/utils.test.js +49 -0
  176. package/types/input-error.d.ts +2 -0
  177. package/types/input-error.js +7 -0
  178. package/types/language.d.ts +5 -0
  179. package/types/language.js +10 -0
  180. package/types/traffictype.d.ts +8 -0
  181. package/types/traffictype.js +13 -0
  182. package/types/validator.d.ts +4 -0
  183. package/types/validator.js +14 -0
  184. package/utils/api-model.d.ts +87 -0
  185. package/utils/api-model.js +129 -0
  186. package/utils/base64.d.ts +12 -0
  187. package/utils/base64.js +21 -0
  188. package/utils/date-utils.d.ts +17 -0
  189. package/utils/date-utils.js +34 -0
  190. package/utils/geojson-types.d.ts +14 -0
  191. package/utils/geojson-types.js +18 -0
  192. package/utils/geometry.d.ts +36 -0
  193. package/utils/geometry.js +140 -0
  194. package/utils/retry.d.ts +13 -0
  195. package/utils/retry.js +50 -0
  196. package/utils/slack.d.ts +5 -0
  197. package/utils/slack.js +25 -0
  198. package/utils/utils.d.ts +22 -0
  199. package/utils/utils.js +40 -0
@@ -0,0 +1,54 @@
1
+ export declare type DbSecret = {
2
+ readonly username: string;
3
+ readonly password: string;
4
+ readonly host: string;
5
+ readonly ro_host: string;
6
+ };
7
+ export declare enum RdsProxySecretKey {
8
+ username = "username",
9
+ password = "password",
10
+ proxy_host = "proxy_host",
11
+ proxy_ro_host = "proxy_ro_host"
12
+ }
13
+ export declare enum RdsSecretKey {
14
+ username = "username",
15
+ password = "password",
16
+ host = "host",
17
+ ro_host = "ro_host"
18
+ }
19
+ export declare type RdsProxySecret = Record<RdsProxySecretKey, string>;
20
+ export declare type RdsSecret = Record<RdsSecretKey, string>;
21
+ export declare enum DatabaseEnvironmentKeys {
22
+ DB_USER = "DB_USER",
23
+ DB_PASS = "DB_PASS",
24
+ DB_URI = "DB_URI",
25
+ DB_RO_URI = "DB_RO_URI",
26
+ DB_APPLICATION = "DB_APPLICATION"
27
+ }
28
+ /**
29
+ * You can give the following options for retrieving a secret:
30
+ *
31
+ * expectedKeys: the list of keys the secret must include. If not, an error will be thrown.
32
+ * prefix: a prefix that's included in retrieved secret's keys. Only keys begining with the prefix will be included.
33
+ * The secret that is passed to the given function will not include the prefix in it's keys.
34
+
35
+ */
36
+ export declare type SecretOptions = {
37
+ readonly expectedKeys?: string[];
38
+ readonly prefix?: string;
39
+ };
40
+ export declare type SecretToPromiseFunction<Secret, Response = void> = (secret: Secret) => Promise<Response> | void;
41
+ export declare type SecretFunction<Secret, Response = void> = (secretId: string, fn: SecretToPromiseFunction<Secret, Response>, options?: SecretOptions) => Promise<Response | void>;
42
+ export declare type EmptySecretFunction<Response = void> = SecretFunction<DbSecret, Response>;
43
+ /**
44
+ * Run the given function with secret retrieved from Secrets Manager. Also injects database-credentials into environment.
45
+ *
46
+ * @deprecated use SecretHolder & ProxyHolder
47
+ * @see SecretOptions
48
+ *
49
+ * @param {string} secretId
50
+ * @param {function} fn
51
+ * @param {SecretOptions} options
52
+ */
53
+ export declare function withDbSecret<Secret, Response>(secretId: string, fn: SecretToPromiseFunction<Secret, Response>, options?: SecretOptions): Promise<Response | void>;
54
+ export declare function checkExpectedSecretKeys<Secret>(keys: string[], secret: Secret): void;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkExpectedSecretKeys = exports.withDbSecret = exports.DatabaseEnvironmentKeys = exports.RdsSecretKey = exports.RdsProxySecretKey = void 0;
4
+ const secret_1 = require("./secret");
5
+ var RdsProxySecretKey;
6
+ (function (RdsProxySecretKey) {
7
+ RdsProxySecretKey["username"] = "username";
8
+ RdsProxySecretKey["password"] = "password";
9
+ RdsProxySecretKey["proxy_host"] = "proxy_host";
10
+ RdsProxySecretKey["proxy_ro_host"] = "proxy_ro_host";
11
+ })(RdsProxySecretKey = exports.RdsProxySecretKey || (exports.RdsProxySecretKey = {}));
12
+ var RdsSecretKey;
13
+ (function (RdsSecretKey) {
14
+ RdsSecretKey["username"] = "username";
15
+ RdsSecretKey["password"] = "password";
16
+ RdsSecretKey["host"] = "host";
17
+ RdsSecretKey["ro_host"] = "ro_host";
18
+ })(RdsSecretKey = exports.RdsSecretKey || (exports.RdsSecretKey = {}));
19
+ var DatabaseEnvironmentKeys;
20
+ (function (DatabaseEnvironmentKeys) {
21
+ DatabaseEnvironmentKeys["DB_USER"] = "DB_USER";
22
+ DatabaseEnvironmentKeys["DB_PASS"] = "DB_PASS";
23
+ DatabaseEnvironmentKeys["DB_URI"] = "DB_URI";
24
+ DatabaseEnvironmentKeys["DB_RO_URI"] = "DB_RO_URI";
25
+ DatabaseEnvironmentKeys["DB_APPLICATION"] = "DB_APPLICATION";
26
+ })(DatabaseEnvironmentKeys = exports.DatabaseEnvironmentKeys || (exports.DatabaseEnvironmentKeys = {}));
27
+ function setDbSecret(secret) {
28
+ process.env[DatabaseEnvironmentKeys.DB_USER] = secret.username;
29
+ process.env[DatabaseEnvironmentKeys.DB_PASS] = secret.password;
30
+ process.env[DatabaseEnvironmentKeys.DB_URI] = secret.host;
31
+ process.env[DatabaseEnvironmentKeys.DB_RO_URI] = secret.ro_host;
32
+ }
33
+ // cached at Lambda container level
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ let cachedSecret;
36
+ const missingSecretErrorText = 'Missing or empty secretId';
37
+ /**
38
+ * Run the given function with secret retrieved from Secrets Manager. Also injects database-credentials into environment.
39
+ *
40
+ * @deprecated use SecretHolder & ProxyHolder
41
+ * @see SecretOptions
42
+ *
43
+ * @param {string} secretId
44
+ * @param {function} fn
45
+ * @param {SecretOptions} options
46
+ */
47
+ async function withDbSecret(secretId, fn, options) {
48
+ if (!secretId) {
49
+ console.error(missingSecretErrorText);
50
+ return Promise.reject(missingSecretErrorText);
51
+ }
52
+ if (!cachedSecret) {
53
+ // if prefix is given, first set db values and then fetch secret
54
+ if (options?.prefix) {
55
+ // first set db values
56
+ await (0, secret_1.withSecret)(secretId, (fetchedSecret) => {
57
+ setDbSecret(fetchedSecret);
58
+ });
59
+ // then actual secret
60
+ await (0, secret_1.withSecretAndPrefix)(secretId, options.prefix, (fetchedSecret) => {
61
+ cachedSecret = fetchedSecret;
62
+ });
63
+ }
64
+ else {
65
+ await (0, secret_1.withSecret)(secretId, (fetchedSecret) => {
66
+ setDbSecret(fetchedSecret);
67
+ cachedSecret = fetchedSecret;
68
+ });
69
+ }
70
+ }
71
+ try {
72
+ if (options?.expectedKeys?.length) {
73
+ checkExpectedSecretKeys(options.expectedKeys, cachedSecret);
74
+ }
75
+ return fn(cachedSecret);
76
+ }
77
+ catch (error) {
78
+ console.error('method=withDbSecret Caught an error, refreshing secret', error);
79
+ // try to refetch secret in case it has changed
80
+ await (0, secret_1.withSecret)(secretId, (fetchedSecret) => {
81
+ setDbSecret(fetchedSecret);
82
+ cachedSecret = fetchedSecret;
83
+ });
84
+ return fn(cachedSecret);
85
+ }
86
+ }
87
+ exports.withDbSecret = withDbSecret;
88
+ function checkExpectedSecretKeys(keys, secret) {
89
+ const missingKeys = keys.filter(key => !(key in secret));
90
+ if (missingKeys.length) {
91
+ console.error(`method=checkExpectedSecretKeys secret didn't contain the key(s) ${missingKeys}`);
92
+ throw new Error('Expected keys were not found');
93
+ }
94
+ }
95
+ exports.checkExpectedSecretKeys = checkExpectedSecretKeys;
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJzZWNyZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL3J1bnRpbWUvc2VjcmV0cy9kYnNlY3JldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBeUQ7QUFTekQsSUFBWSxpQkFFWDtBQUZELFdBQVksaUJBQWlCO0lBQ3pCLDBDQUFxQixDQUFBO0lBQUUsMENBQXFCLENBQUE7SUFBRSw4Q0FBeUIsQ0FBQTtJQUFFLG9EQUErQixDQUFBO0FBQzVHLENBQUMsRUFGVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUU1QjtBQUVELElBQVksWUFFWDtBQUZELFdBQVksWUFBWTtJQUNwQixxQ0FBcUIsQ0FBQTtJQUFFLHFDQUFxQixDQUFBO0lBQUUsNkJBQWEsQ0FBQTtJQUFFLG1DQUFtQixDQUFBO0FBQ3BGLENBQUMsRUFGVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUV2QjtBQUtELElBQVksdUJBTVg7QUFORCxXQUFZLHVCQUF1QjtJQUMvQiw4Q0FBbUIsQ0FBQTtJQUNuQiw4Q0FBbUIsQ0FBQTtJQUNuQiw0Q0FBaUIsQ0FBQTtJQUNqQixrREFBdUIsQ0FBQTtJQUN2Qiw0REFBaUMsQ0FBQTtBQUNyQyxDQUFDLEVBTlcsdUJBQXVCLEdBQXZCLCtCQUF1QixLQUF2QiwrQkFBdUIsUUFNbEM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFnQjtJQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDcEUsQ0FBQztBQUVELG1DQUFtQztBQUNuQyw4REFBOEQ7QUFDOUQsSUFBSSxZQUFpQixDQUFDO0FBRXRCLE1BQU0sc0JBQXNCLEdBQUcsMkJBQTJCLENBQUM7QUFtQjNEOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQW1CLFFBQWdCLEVBQUUsRUFBNkMsRUFBRSxPQUF1QjtJQUN6SSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0tBQ2pEO0lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNmLGdFQUFnRTtRQUNoRSxJQUFJLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDakIsc0JBQXNCO1lBQ3RCLE1BQU0sSUFBQSxtQkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLGFBQXVCLEVBQUUsRUFBRTtnQkFDbkQsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1lBRUgscUJBQXFCO1lBQ3JCLE1BQU0sSUFBQSw0QkFBbUIsRUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQXFCLEVBQUUsRUFBRTtnQkFDMUUsWUFBWSxHQUFHLGFBQWEsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxNQUFNLElBQUEsbUJBQVUsRUFBQyxRQUFRLEVBQUUsQ0FBQyxhQUF1QixFQUFFLEVBQUU7Z0JBQ25ELFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDM0IsWUFBWSxHQUFHLGFBQWEsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNOO0tBQ0o7SUFDRCxJQUFJO1FBQ0EsSUFBSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRTtZQUMvQix1QkFBdUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDM0I7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0RBQXdELEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsK0NBQStDO1FBQy9DLE1BQU0sSUFBQSxtQkFBVSxFQUFDLFFBQVEsRUFBRSxDQUFDLGFBQXVCLEVBQUUsRUFBRTtZQUNuRCxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0IsWUFBWSxHQUFHLGFBQWEsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQzNCO0FBQ0wsQ0FBQztBQXZDRCxvQ0F1Q0M7QUFFRCxTQUFnQix1QkFBdUIsQ0FBUyxJQUFjLEVBQUUsTUFBYztJQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLG1FQUFtRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztLQUNuRDtBQUNMLENBQUM7QUFORCwwREFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7d2l0aFNlY3JldCwgd2l0aFNlY3JldEFuZFByZWZpeH0gZnJvbSBcIi4vc2VjcmV0XCI7XG5cbmV4cG9ydCB0eXBlIERiU2VjcmV0ID0ge1xuICAgIHJlYWRvbmx5IHVzZXJuYW1lOiBzdHJpbmdcbiAgICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nXG4gICAgcmVhZG9ubHkgaG9zdDogc3RyaW5nXG4gICAgcmVhZG9ubHkgcm9faG9zdDogc3RyaW5nXG59O1xuXG5leHBvcnQgZW51bSBSZHNQcm94eVNlY3JldEtleSB7XG4gICAgdXNlcm5hbWUgPSBcInVzZXJuYW1lXCIsIHBhc3N3b3JkID0gXCJwYXNzd29yZFwiLCBwcm94eV9ob3N0ID0gXCJwcm94eV9ob3N0XCIsIHByb3h5X3JvX2hvc3QgPSBcInByb3h5X3JvX2hvc3RcIlxufVxuXG5leHBvcnQgZW51bSBSZHNTZWNyZXRLZXkge1xuICAgIHVzZXJuYW1lID0gXCJ1c2VybmFtZVwiLCBwYXNzd29yZCA9IFwicGFzc3dvcmRcIiwgaG9zdCA9IFwiaG9zdFwiLCByb19ob3N0ID0gXCJyb19ob3N0XCJcbn1cblxuZXhwb3J0IHR5cGUgUmRzUHJveHlTZWNyZXQgPSBSZWNvcmQ8UmRzUHJveHlTZWNyZXRLZXksIHN0cmluZz47XG5leHBvcnQgdHlwZSBSZHNTZWNyZXQgPSBSZWNvcmQ8UmRzU2VjcmV0S2V5LCBzdHJpbmc+O1xuXG5leHBvcnQgZW51bSBEYXRhYmFzZUVudmlyb25tZW50S2V5cyB7XG4gICAgREJfVVNFUiA9IFwiREJfVVNFUlwiLFxuICAgIERCX1BBU1MgPSBcIkRCX1BBU1NcIixcbiAgICBEQl9VUkkgPSBcIkRCX1VSSVwiLFxuICAgIERCX1JPX1VSSSA9IFwiREJfUk9fVVJJXCIsXG4gICAgREJfQVBQTElDQVRJT04gPSBcIkRCX0FQUExJQ0FUSU9OXCIsXG59XG5cbmZ1bmN0aW9uIHNldERiU2VjcmV0KHNlY3JldDogRGJTZWNyZXQpIHtcbiAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9VU0VSXSA9IHNlY3JldC51c2VybmFtZTtcbiAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9QQVNTXSA9IHNlY3JldC5wYXNzd29yZDtcbiAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9VUkldID0gc2VjcmV0Lmhvc3Q7XG4gICAgcHJvY2Vzcy5lbnZbRGF0YWJhc2VFbnZpcm9ubWVudEtleXMuREJfUk9fVVJJXSA9IHNlY3JldC5yb19ob3N0O1xufVxuXG4vLyBjYWNoZWQgYXQgTGFtYmRhIGNvbnRhaW5lciBsZXZlbFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmxldCBjYWNoZWRTZWNyZXQ6IGFueTtcblxuY29uc3QgbWlzc2luZ1NlY3JldEVycm9yVGV4dCA9ICdNaXNzaW5nIG9yIGVtcHR5IHNlY3JldElkJztcblxuLyoqXG4gKiBZb3UgY2FuIGdpdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciByZXRyaWV2aW5nIGEgc2VjcmV0OlxuICpcbiAqIGV4cGVjdGVkS2V5czogdGhlIGxpc3Qgb2Yga2V5cyB0aGUgc2VjcmV0IG11c3QgaW5jbHVkZS4gIElmIG5vdCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKiBwcmVmaXg6IGEgcHJlZml4IHRoYXQncyBpbmNsdWRlZCBpbiByZXRyaWV2ZWQgc2VjcmV0J3Mga2V5cy4gIE9ubHkga2V5cyBiZWdpbmluZyB3aXRoIHRoZSBwcmVmaXggd2lsbCBiZSBpbmNsdWRlZC5cbiAqIFRoZSBzZWNyZXQgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uIHdpbGwgbm90IGluY2x1ZGUgdGhlIHByZWZpeCBpbiBpdCdzIGtleXMuXG5cbiAqL1xuZXhwb3J0IHR5cGUgU2VjcmV0T3B0aW9ucyA9IHtcbiAgICByZWFkb25seSBleHBlY3RlZEtleXM/OiBzdHJpbmdbXSxcbiAgICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgU2VjcmV0VG9Qcm9taXNlRnVuY3Rpb248U2VjcmV0LCBSZXNwb25zZSA9IHZvaWQ+ID0gKHNlY3JldDogU2VjcmV0KSA9PiBQcm9taXNlPFJlc3BvbnNlPiB8IHZvaWQ7XG5leHBvcnQgdHlwZSBTZWNyZXRGdW5jdGlvbjxTZWNyZXQsIFJlc3BvbnNlID0gdm9pZD4gPSAoc2VjcmV0SWQ6IHN0cmluZywgZm46IFNlY3JldFRvUHJvbWlzZUZ1bmN0aW9uPFNlY3JldCwgUmVzcG9uc2U+LCBvcHRpb25zPzogU2VjcmV0T3B0aW9ucykgPT4gUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+O1xuZXhwb3J0IHR5cGUgRW1wdHlTZWNyZXRGdW5jdGlvbjxSZXNwb25zZSA9IHZvaWQ+ID0gU2VjcmV0RnVuY3Rpb248RGJTZWNyZXQsIFJlc3BvbnNlPjtcblxuLyoqXG4gKiBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIHdpdGggc2VjcmV0IHJldHJpZXZlZCBmcm9tIFNlY3JldHMgTWFuYWdlci4gIEFsc28gaW5qZWN0cyBkYXRhYmFzZS1jcmVkZW50aWFscyBpbnRvIGVudmlyb25tZW50LlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSBTZWNyZXRIb2xkZXIgJiBQcm94eUhvbGRlclxuICogQHNlZSBTZWNyZXRPcHRpb25zXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNlY3JldElkXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtTZWNyZXRPcHRpb25zfSBvcHRpb25zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoRGJTZWNyZXQ8U2VjcmV0LCBSZXNwb25zZT4oc2VjcmV0SWQ6IHN0cmluZywgZm46IFNlY3JldFRvUHJvbWlzZUZ1bmN0aW9uPFNlY3JldCwgUmVzcG9uc2U+LCBvcHRpb25zPzogU2VjcmV0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKCFzZWNyZXRJZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1pc3NpbmdTZWNyZXRFcnJvclRleHQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobWlzc2luZ1NlY3JldEVycm9yVGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKCFjYWNoZWRTZWNyZXQpIHtcbiAgICAgICAgLy8gaWYgcHJlZml4IGlzIGdpdmVuLCBmaXJzdCBzZXQgZGIgdmFsdWVzIGFuZCB0aGVuIGZldGNoIHNlY3JldFxuICAgICAgICBpZiAob3B0aW9ucz8ucHJlZml4KSB7XG4gICAgICAgICAgICAvLyBmaXJzdCBzZXQgZGIgdmFsdWVzXG4gICAgICAgICAgICBhd2FpdCB3aXRoU2VjcmV0KHNlY3JldElkLCAoZmV0Y2hlZFNlY3JldDogRGJTZWNyZXQpID0+IHtcbiAgICAgICAgICAgICAgICBzZXREYlNlY3JldChmZXRjaGVkU2VjcmV0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyB0aGVuIGFjdHVhbCBzZWNyZXRcbiAgICAgICAgICAgIGF3YWl0IHdpdGhTZWNyZXRBbmRQcmVmaXgoc2VjcmV0SWQsIG9wdGlvbnMucHJlZml4LCAoZmV0Y2hlZFNlY3JldDogU2VjcmV0KSA9PiB7XG4gICAgICAgICAgICAgICAgY2FjaGVkU2VjcmV0ID0gZmV0Y2hlZFNlY3JldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgd2l0aFNlY3JldChzZWNyZXRJZCwgKGZldGNoZWRTZWNyZXQ6IERiU2VjcmV0KSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0RGJTZWNyZXQoZmV0Y2hlZFNlY3JldCk7XG4gICAgICAgICAgICAgICAgY2FjaGVkU2VjcmV0ID0gZmV0Y2hlZFNlY3JldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zPy5leHBlY3RlZEtleXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY2hlY2tFeHBlY3RlZFNlY3JldEtleXMob3B0aW9ucy5leHBlY3RlZEtleXMsIGNhY2hlZFNlY3JldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuKGNhY2hlZFNlY3JldCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbWV0aG9kPXdpdGhEYlNlY3JldCBDYXVnaHQgYW4gZXJyb3IsIHJlZnJlc2hpbmcgc2VjcmV0JywgZXJyb3IpO1xuICAgICAgICAvLyB0cnkgdG8gcmVmZXRjaCBzZWNyZXQgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICAgICAgICBhd2FpdCB3aXRoU2VjcmV0KHNlY3JldElkLCAoZmV0Y2hlZFNlY3JldDogRGJTZWNyZXQpID0+IHtcbiAgICAgICAgICAgIHNldERiU2VjcmV0KGZldGNoZWRTZWNyZXQpO1xuICAgICAgICAgICAgY2FjaGVkU2VjcmV0ID0gZmV0Y2hlZFNlY3JldDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmbihjYWNoZWRTZWNyZXQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrRXhwZWN0ZWRTZWNyZXRLZXlzPFNlY3JldD4oa2V5czogc3RyaW5nW10sIHNlY3JldDogU2VjcmV0KSB7XG4gICAgY29uc3QgbWlzc2luZ0tleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4gIShrZXkgaW4gc2VjcmV0KSk7XG4gICAgaWYgKG1pc3NpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBtZXRob2Q9Y2hlY2tFeHBlY3RlZFNlY3JldEtleXMgc2VjcmV0IGRpZG4ndCBjb250YWluIHRoZSBrZXkocykgJHttaXNzaW5nS2V5c31gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBrZXlzIHdlcmUgbm90IGZvdW5kJyk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Holds credentials for RDS Proxy access.
3
+ */
4
+ export declare class ProxyHolder {
5
+ private readonly secretHolder;
6
+ constructor(secretId: string);
7
+ static create(): ProxyHolder;
8
+ setCredentials(): Promise<void>;
9
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProxyHolder = void 0;
4
+ const secret_holder_1 = require("./secret-holder");
5
+ const dbsecret_1 = require("./dbsecret");
6
+ const RDS_PROXY_SECRET_KEYS = Object.values(dbsecret_1.RdsProxySecretKey);
7
+ /**
8
+ * Holds credentials for RDS Proxy access.
9
+ */
10
+ class ProxyHolder {
11
+ constructor(secretId) {
12
+ this.secretHolder = new secret_holder_1.SecretHolder(secretId, '', RDS_PROXY_SECRET_KEYS);
13
+ }
14
+ static create() {
15
+ return new ProxyHolder(process.env.SECRET_ID);
16
+ }
17
+ async setCredentials() {
18
+ const secret = await this.secretHolder.get();
19
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_USER] = secret.username;
20
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_PASS] = secret.password;
21
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_URI] = secret.proxy_host;
22
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_RO_URI] = secret.proxy_ro_host;
23
+ }
24
+ }
25
+ exports.ProxyHolder = ProxyHolder;
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHktaG9sZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9ydW50aW1lL3NlY3JldHMvcHJveHktaG9sZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUE2QztBQUM3Qyx5Q0FBc0Y7QUFFdEYsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLDRCQUFpQixDQUFDLENBQUM7QUFFL0Q7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFHcEIsWUFBWSxRQUFnQjtRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNEJBQVksQ0FBaUIsUUFBUSxFQUFFLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFtQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU3QyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUF1QixDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDMUUsQ0FBQztDQUNKO0FBbkJELGtDQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VjcmV0SG9sZGVyfSBmcm9tIFwiLi9zZWNyZXQtaG9sZGVyXCI7XG5pbXBvcnQge0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLCBSZHNQcm94eVNlY3JldEtleSwgUmRzUHJveHlTZWNyZXR9IGZyb20gXCIuL2Ric2VjcmV0XCI7XG5cbmNvbnN0IFJEU19QUk9YWV9TRUNSRVRfS0VZUyA9IE9iamVjdC52YWx1ZXMoUmRzUHJveHlTZWNyZXRLZXkpO1xuXG4vKipcbiAqIEhvbGRzIGNyZWRlbnRpYWxzIGZvciBSRFMgUHJveHkgYWNjZXNzLlxuICovXG5leHBvcnQgY2xhc3MgUHJveHlIb2xkZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VjcmV0SG9sZGVyO1xuXG4gICAgY29uc3RydWN0b3Ioc2VjcmV0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlY3JldEhvbGRlciA9IG5ldyBTZWNyZXRIb2xkZXI8UmRzUHJveHlTZWNyZXQ+KHNlY3JldElkLCAnJywgUkRTX1BST1hZX1NFQ1JFVF9LRVlTKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5SG9sZGVyKHByb2Nlc3MuZW52LlNFQ1JFVF9JRCBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRDcmVkZW50aWFscygpIHtcbiAgICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5zZWNyZXRIb2xkZXIuZ2V0KCk7XG5cbiAgICAgICAgcHJvY2Vzcy5lbnZbRGF0YWJhc2VFbnZpcm9ubWVudEtleXMuREJfVVNFUl0gPSBzZWNyZXQudXNlcm5hbWU7XG4gICAgICAgIHByb2Nlc3MuZW52W0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLkRCX1BBU1NdID0gc2VjcmV0LnBhc3N3b3JkO1xuICAgICAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9VUkldID0gc2VjcmV0LnByb3h5X2hvc3Q7XG4gICAgICAgIHByb2Nlc3MuZW52W0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLkRCX1JPX1VSSV0gPSBzZWNyZXQucHJveHlfcm9faG9zdDtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Holds credentials for RDS access.
3
+ */
4
+ export declare class RdsHolder {
5
+ private readonly secretHolder;
6
+ constructor(secretId: string);
7
+ static create(): RdsHolder;
8
+ setCredentials(): Promise<void>;
9
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RdsHolder = void 0;
4
+ const secret_holder_1 = require("./secret-holder");
5
+ const dbsecret_1 = require("./dbsecret");
6
+ const RDS_SECRET_KEYS = Object.values(dbsecret_1.RdsSecretKey);
7
+ /**
8
+ * Holds credentials for RDS access.
9
+ */
10
+ class RdsHolder {
11
+ constructor(secretId) {
12
+ this.secretHolder = new secret_holder_1.SecretHolder(secretId, '', RDS_SECRET_KEYS);
13
+ }
14
+ static create() {
15
+ return new RdsHolder(process.env.SECRET_ID);
16
+ }
17
+ async setCredentials() {
18
+ const secret = await this.secretHolder.get();
19
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_USER] = secret.username;
20
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_PASS] = secret.password;
21
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_URI] = secret.host;
22
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_RO_URI] = secret.ro_host;
23
+ }
24
+ }
25
+ exports.RdsHolder = RdsHolder;
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWhvbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvcnVudGltZS9zZWNyZXRzL3Jkcy1ob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQTZDO0FBQzdDLHlDQUE0RTtBQUU1RSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLHVCQUFZLENBQUMsQ0FBQztBQUVwRDs7R0FFRztBQUNILE1BQWEsU0FBUztJQUdsQixZQUFZLFFBQWdCO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw0QkFBWSxDQUFZLFFBQVEsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNO1FBQ1QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQW1CLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzFELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNwRSxDQUFDO0NBQ0o7QUFuQkQsOEJBbUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWNyZXRIb2xkZXJ9IGZyb20gXCIuL3NlY3JldC1ob2xkZXJcIjtcbmltcG9ydCB7RGF0YWJhc2VFbnZpcm9ubWVudEtleXMsIFJkc1NlY3JldCwgUmRzU2VjcmV0S2V5fSBmcm9tIFwiLi9kYnNlY3JldFwiO1xuXG5jb25zdCBSRFNfU0VDUkVUX0tFWVMgPSBPYmplY3QudmFsdWVzKFJkc1NlY3JldEtleSk7XG5cbi8qKlxuICogSG9sZHMgY3JlZGVudGlhbHMgZm9yIFJEUyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZHNIb2xkZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VjcmV0SG9sZGVyO1xuXG4gICAgY29uc3RydWN0b3Ioc2VjcmV0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNlY3JldEhvbGRlciA9IG5ldyBTZWNyZXRIb2xkZXI8UmRzU2VjcmV0PihzZWNyZXRJZCwgJycsIFJEU19TRUNSRVRfS0VZUyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZHNIb2xkZXIocHJvY2Vzcy5lbnYuU0VDUkVUX0lEIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldENyZWRlbnRpYWxzKCkge1xuICAgICAgICBjb25zdCBzZWNyZXQgPSBhd2FpdCB0aGlzLnNlY3JldEhvbGRlci5nZXQoKTtcblxuICAgICAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9VU0VSXSA9IHNlY3JldC51c2VybmFtZTtcbiAgICAgICAgcHJvY2Vzcy5lbnZbRGF0YWJhc2VFbnZpcm9ubWVudEtleXMuREJfUEFTU10gPSBzZWNyZXQucGFzc3dvcmQ7XG4gICAgICAgIHByb2Nlc3MuZW52W0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLkRCX1VSSV0gPSBzZWNyZXQuaG9zdDtcbiAgICAgICAgcHJvY2Vzcy5lbnZbRGF0YWJhc2VFbnZpcm9ubWVudEtleXMuREJfUk9fVVJJXSA9IHNlY3JldC5yb19ob3N0O1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Utility class for getting secrets from Secret Manager.
3
+ * Supports prefix for secrets, checking of expected keys and ttl-configuration.
4
+ *
5
+ * By default, secrets are cached for 5 minutes and then reread from the Secrets Manager(This can be overridden with configuration).
6
+ *
7
+ * Supports setting the database environment paramaters from the secret too.
8
+ */
9
+ export declare class SecretHolder<Secret> {
10
+ private readonly secretId;
11
+ private readonly prefix;
12
+ private readonly expectedKeys;
13
+ private readonly secretCache;
14
+ constructor(secretId: string, prefix?: string, expectedKeys?: string[], configuration?: {
15
+ ttl: number;
16
+ });
17
+ private initSecret;
18
+ static create<S>(prefix?: string, expectedKeys?: string[]): SecretHolder<S>;
19
+ get(): Promise<Secret>;
20
+ private parseSecret;
21
+ private getSecret;
22
+ /**
23
+ * @deprecated Use ProxyHolder
24
+ */
25
+ setDatabaseCredentials(): Promise<void>;
26
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SecretHolder = void 0;
4
+ const secret_1 = require("./secret");
5
+ const dbsecret_1 = require("./dbsecret");
6
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
7
+ const NodeTtl = require('node-ttl');
8
+ const DEFAULT_PREFIX = '';
9
+ const DEFAULT_SECRET_KEY = 'SECRET';
10
+ const DEFAULT_CONFIGURATION = {
11
+ ttl: 5 * 60, // timeout secrets in 5 minutes
12
+ };
13
+ /**
14
+ * Utility class for getting secrets from Secret Manager.
15
+ * Supports prefix for secrets, checking of expected keys and ttl-configuration.
16
+ *
17
+ * By default, secrets are cached for 5 minutes and then reread from the Secrets Manager(This can be overridden with configuration).
18
+ *
19
+ * Supports setting the database environment paramaters from the secret too.
20
+ */
21
+ class SecretHolder {
22
+ constructor(secretId, prefix = '', expectedKeys = [], configuration = DEFAULT_CONFIGURATION) {
23
+ this.secretId = secretId;
24
+ this.prefix = prefix;
25
+ this.expectedKeys = expectedKeys;
26
+ this.secretCache = new NodeTtl(configuration);
27
+ }
28
+ async initSecret() {
29
+ const secretValue = await (0, secret_1.getSecret)(this.secretId);
30
+ console.info("refreshing secret " + this.secretId);
31
+ this.secretCache.push(DEFAULT_SECRET_KEY, secretValue);
32
+ }
33
+ static create(prefix = DEFAULT_PREFIX, expectedKeys = []) {
34
+ return new SecretHolder(process.env.SECRET_ID, prefix, expectedKeys);
35
+ }
36
+ async get() {
37
+ const secret = await this.getSecret();
38
+ const parsedSecret = this.prefix === DEFAULT_PREFIX ? secret : this.parseSecret(secret, `${this.prefix}.`);
39
+ if (this.expectedKeys.length > 0) {
40
+ (0, dbsecret_1.checkExpectedSecretKeys)(this.expectedKeys, parsedSecret);
41
+ }
42
+ return parsedSecret;
43
+ }
44
+ parseSecret(secret, prefix) {
45
+ const parsed = {};
46
+ const skip = prefix.length;
47
+ for (const key in secret) {
48
+ if (key.startsWith(prefix)) {
49
+ parsed[key.substring(skip)] = secret[key];
50
+ }
51
+ }
52
+ return parsed;
53
+ }
54
+ async getSecret() {
55
+ const secret = this.secretCache.get(DEFAULT_SECRET_KEY);
56
+ if (!secret) {
57
+ await this.initSecret();
58
+ }
59
+ return secret || this.secretCache.get(DEFAULT_SECRET_KEY);
60
+ }
61
+ /**
62
+ * @deprecated Use ProxyHolder
63
+ */
64
+ async setDatabaseCredentials() {
65
+ const secret = await this.getSecret();
66
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_USER] = secret.username;
67
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_PASS] = secret.password;
68
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_URI] = secret.host;
69
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_RO_URI] = secret.ro_host;
70
+ }
71
+ }
72
+ exports.SecretHolder = SecretHolder;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LWhvbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvcnVudGltZS9zZWNyZXRzL3NlY3JldC1ob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQWtEO0FBQ2xELHlDQUFzRjtBQUV0Riw4REFBOEQ7QUFDOUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXBDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQztBQUNwQyxNQUFNLHFCQUFxQixHQUFHO0lBQzFCLEdBQUcsRUFBRSxDQUFDLEdBQUMsRUFBRSxFQUFFLCtCQUErQjtDQUM3QyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQWEsWUFBWTtJQU9yQixZQUFZLFFBQWdCLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxlQUF5QixFQUFFLEVBQUUsYUFBYSxHQUFHLHFCQUFxQjtRQUN6RyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUVqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVTtRQUNwQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsa0JBQVMsRUFBUyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0QsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUksTUFBTSxHQUFHLGNBQWMsRUFBRSxlQUF5QixFQUFFO1FBQ3hFLE9BQU8sSUFBSSxZQUFZLENBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFtQixFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQUc7UUFDWixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQVUsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQWtDLEVBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUV4SSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixJQUFBLGtDQUF1QixFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDNUQ7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQXFCLEVBQUUsTUFBYztRQUNyRCxNQUFNLE1BQU0sR0FBa0IsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFM0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDdEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM3QztTQUNKO1FBRUQsT0FBTyxNQUEyQixDQUFDO0lBQ3ZDLENBQUM7SUFHTyxLQUFLLENBQUMsU0FBUztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUMzQjtRQUVELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLHNCQUFzQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQVksQ0FBQztRQUVoRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUF1QixDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDcEUsQ0FBQztDQUNKO0FBekVELG9DQXlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7R2VuZXJpY1NlY3JldCwgZ2V0U2VjcmV0fSBmcm9tIFwiLi9zZWNyZXRcIjtcbmltcG9ydCB7Y2hlY2tFeHBlY3RlZFNlY3JldEtleXMsIERhdGFiYXNlRW52aXJvbm1lbnRLZXlzLCBEYlNlY3JldH0gZnJvbSBcIi4vZGJzZWNyZXRcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbmNvbnN0IE5vZGVUdGwgPSByZXF1aXJlKCdub2RlLXR0bCcpO1xuXG5jb25zdCBERUZBVUxUX1BSRUZJWCA9ICcnO1xuY29uc3QgREVGQVVMVF9TRUNSRVRfS0VZID0gJ1NFQ1JFVCc7XG5jb25zdCBERUZBVUxUX0NPTkZJR1VSQVRJT04gPSB7XG4gICAgdHRsOiA1KjYwLCAvLyB0aW1lb3V0IHNlY3JldHMgaW4gNSBtaW51dGVzXG59O1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGdldHRpbmcgc2VjcmV0cyBmcm9tIFNlY3JldCBNYW5hZ2VyLlxuICogU3VwcG9ydHMgcHJlZml4IGZvciBzZWNyZXRzLCBjaGVja2luZyBvZiBleHBlY3RlZCBrZXlzIGFuZCB0dGwtY29uZmlndXJhdGlvbi5cbiAqXG4gKiBCeSBkZWZhdWx0LCBzZWNyZXRzIGFyZSBjYWNoZWQgZm9yIDUgbWludXRlcyBhbmQgdGhlbiByZXJlYWQgZnJvbSB0aGUgU2VjcmV0cyBNYW5hZ2VyKFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBjb25maWd1cmF0aW9uKS5cbiAqXG4gKiBTdXBwb3J0cyBzZXR0aW5nIHRoZSBkYXRhYmFzZSBlbnZpcm9ubWVudCBwYXJhbWF0ZXJzIGZyb20gdGhlIHNlY3JldCB0b28uXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRIb2xkZXI8U2VjcmV0PiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWNyZXRJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleHBlY3RlZEtleXM6IHN0cmluZ1tdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWNyZXRDYWNoZTtcblxuICAgIGNvbnN0cnVjdG9yKHNlY3JldElkOiBzdHJpbmcsIHByZWZpeCA9ICcnLCBleHBlY3RlZEtleXM6IHN0cmluZ1tdID0gW10sIGNvbmZpZ3VyYXRpb24gPSBERUZBVUxUX0NPTkZJR1VSQVRJT04pIHtcbiAgICAgICAgdGhpcy5zZWNyZXRJZCA9IHNlY3JldElkO1xuICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgICAgICAgdGhpcy5leHBlY3RlZEtleXMgPSBleHBlY3RlZEtleXM7XG5cbiAgICAgICAgdGhpcy5zZWNyZXRDYWNoZSA9IG5ldyBOb2RlVHRsKGNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdFNlY3JldCgpIHtcbiAgICAgICAgY29uc3Qgc2VjcmV0VmFsdWUgPSBhd2FpdCBnZXRTZWNyZXQ8U2VjcmV0Pih0aGlzLnNlY3JldElkKTtcblxuICAgICAgICBjb25zb2xlLmluZm8oXCJyZWZyZXNoaW5nIHNlY3JldCBcIiArIHRoaXMuc2VjcmV0SWQpO1xuXG4gICAgICAgIHRoaXMuc2VjcmV0Q2FjaGUucHVzaChERUZBVUxUX1NFQ1JFVF9LRVksIHNlY3JldFZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZTxTPihwcmVmaXggPSBERUZBVUxUX1BSRUZJWCwgZXhwZWN0ZWRLZXlzOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VjcmV0SG9sZGVyPFM+KHByb2Nlc3MuZW52LlNFQ1JFVF9JRCBhcyBzdHJpbmcsIHByZWZpeCwgZXhwZWN0ZWRLZXlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KCk6IFByb21pc2U8U2VjcmV0PiB7XG4gICAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMuZ2V0U2VjcmV0PFNlY3JldD4oKTtcbiAgICAgICAgY29uc3QgcGFyc2VkU2VjcmV0ID0gdGhpcy5wcmVmaXggPT09IERFRkFVTFRfUFJFRklYID8gc2VjcmV0IDogdGhpcy5wYXJzZVNlY3JldChzZWNyZXQgYXMgdW5rbm93biBhcyBHZW5lcmljU2VjcmV0LCAgYCR7dGhpcy5wcmVmaXh9LmApO1xuXG4gICAgICAgIGlmICh0aGlzLmV4cGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGVja0V4cGVjdGVkU2VjcmV0S2V5cyh0aGlzLmV4cGVjdGVkS2V5cywgcGFyc2VkU2VjcmV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWRTZWNyZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVNlY3JldChzZWNyZXQ6IEdlbmVyaWNTZWNyZXQsIHByZWZpeDogc3RyaW5nKTogU2VjcmV0IHtcbiAgICAgICAgY29uc3QgcGFyc2VkOiBHZW5lcmljU2VjcmV0ID0ge307XG4gICAgICAgIGNvbnN0IHNraXAgPSBwcmVmaXgubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNlY3JldCkge1xuICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRba2V5LnN1YnN0cmluZyhza2lwKV0gPSBzZWNyZXRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWQgYXMgdW5rbm93biBhcyBTZWNyZXQ7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGFzeW5jIGdldFNlY3JldDxTPigpOiBQcm9taXNlPFM+IHtcbiAgICAgICAgY29uc3Qgc2VjcmV0ID0gdGhpcy5zZWNyZXRDYWNoZS5nZXQoREVGQVVMVF9TRUNSRVRfS0VZKTtcblxuICAgICAgICBpZiAoIXNlY3JldCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0U2VjcmV0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VjcmV0IHx8IHRoaXMuc2VjcmV0Q2FjaGUuZ2V0KERFRkFVTFRfU0VDUkVUX0tFWSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIFByb3h5SG9sZGVyXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHNldERhdGFiYXNlQ3JlZGVudGlhbHMoKSB7XG4gICAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMuZ2V0U2VjcmV0PERiU2VjcmV0PigpO1xuXG4gICAgICAgIHByb2Nlc3MuZW52W0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLkRCX1VTRVJdID0gc2VjcmV0LnVzZXJuYW1lO1xuICAgICAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9QQVNTXSA9IHNlY3JldC5wYXNzd29yZDtcbiAgICAgICAgcHJvY2Vzcy5lbnZbRGF0YWJhc2VFbnZpcm9ubWVudEtleXMuREJfVVJJXSA9IHNlY3JldC5ob3N0O1xuICAgICAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9ST19VUkldID0gc2VjcmV0LnJvX2hvc3Q7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,8 @@
1
+ import { SecretToPromiseFunction } from "./dbsecret";
2
+ export declare type GenericSecret = Record<string, string>;
3
+ /**
4
+ @deprecated use SecretHolder & ProxyHolder
5
+ */
6
+ export declare function withSecret<Secret, Response>(secretId: string, fn: SecretToPromiseFunction<Secret, Response>): Promise<Response | void>;
7
+ export declare function getSecret<Secret>(secretId: string, prefix?: string): Promise<Secret>;
8
+ export declare function withSecretAndPrefix<Secret, Response>(secretId: string, prefix: string, fn: SecretToPromiseFunction<Secret, Response>): Promise<Response | void>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withSecretAndPrefix = exports.getSecret = exports.withSecret = void 0;
4
+ const aws_sdk_1 = require("aws-sdk");
5
+ const smClient = new aws_sdk_1.SecretsManager({
6
+ region: process.env.AWS_REGION,
7
+ });
8
+ /**
9
+ @deprecated use SecretHolder & ProxyHolder
10
+ */
11
+ async function withSecret(secretId, fn) {
12
+ return fn(await getSecret(secretId));
13
+ }
14
+ exports.withSecret = withSecret;
15
+ async function getSecret(secretId, prefix = '') {
16
+ const secretObj = await smClient.getSecretValue({
17
+ SecretId: secretId,
18
+ }).promise();
19
+ if (!secretObj.SecretString) {
20
+ throw new Error('No secret found!');
21
+ }
22
+ const secret = JSON.parse(secretObj.SecretString);
23
+ if (prefix === '') {
24
+ return secret;
25
+ }
26
+ return parseSecret(secret, `${prefix}.`);
27
+ }
28
+ exports.getSecret = getSecret;
29
+ function parseSecret(secret, prefix) {
30
+ const parsed = {};
31
+ const skip = prefix.length;
32
+ for (const key in secret) {
33
+ if (key.startsWith(prefix)) {
34
+ parsed[key.substring(skip)] = secret[key];
35
+ }
36
+ }
37
+ return parsed;
38
+ }
39
+ async function withSecretAndPrefix(secretId, prefix, fn) {
40
+ return fn(await getSecret(secretId, prefix));
41
+ }
42
+ exports.withSecretAndPrefix = withSecretAndPrefix;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9ydW50aW1lL3NlY3JldHMvc2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF1QztBQUd2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLHdCQUFjLENBQUM7SUFDaEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVTtDQUNqQyxDQUFDLENBQUM7QUFJSDs7R0FFRztBQUNJLEtBQUssVUFBVSxVQUFVLENBQW1CLFFBQWdCLEVBQUUsRUFBNkM7SUFDOUcsT0FBTyxFQUFFLENBQUMsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRkQsZ0NBRUM7QUFFTSxLQUFLLFVBQVUsU0FBUyxDQUFTLFFBQWdCLEVBQUUsTUFBTSxHQUFHLEVBQUU7SUFDakUsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsY0FBYyxDQUFDO1FBQzVDLFFBQVEsRUFBRSxRQUFRO0tBQ3JCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUViLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztLQUN2QztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWxELElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRTtRQUNmLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBRUQsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBaEJELDhCQWdCQztBQUVELFNBQVMsV0FBVyxDQUFTLE1BQXFCLEVBQUUsTUFBYztJQUM5RCxNQUFNLE1BQU0sR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFFM0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUU7UUFDdEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdDO0tBQ0o7SUFFRCxPQUFPLE1BQTJCLENBQUM7QUFDdkMsQ0FBQztBQUVNLEtBQUssVUFBVSxtQkFBbUIsQ0FBbUIsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsRUFBNkM7SUFDdkksT0FBTyxFQUFFLENBQUMsTUFBTSxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUZELGtEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWNyZXRzTWFuYWdlcn0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQge1NlY3JldFRvUHJvbWlzZUZ1bmN0aW9ufSBmcm9tIFwiLi9kYnNlY3JldFwiO1xuXG5jb25zdCBzbUNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlcih7XG4gICAgcmVnaW9uOiBwcm9jZXNzLmVudi5BV1NfUkVHSU9OLFxufSk7XG5cbmV4cG9ydCB0eXBlIEdlbmVyaWNTZWNyZXQgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4vKipcbiBAZGVwcmVjYXRlZCB1c2UgU2VjcmV0SG9sZGVyICYgUHJveHlIb2xkZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhTZWNyZXQ8U2VjcmV0LCBSZXNwb25zZT4oc2VjcmV0SWQ6IHN0cmluZywgZm46IFNlY3JldFRvUHJvbWlzZUZ1bmN0aW9uPFNlY3JldCwgUmVzcG9uc2U+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICByZXR1cm4gZm4oYXdhaXQgZ2V0U2VjcmV0KHNlY3JldElkKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZWNyZXQ8U2VjcmV0PihzZWNyZXRJZDogc3RyaW5nLCBwcmVmaXggPSAnJyk6IFByb21pc2U8U2VjcmV0PiB7XG4gICAgY29uc3Qgc2VjcmV0T2JqID0gYXdhaXQgc21DbGllbnQuZ2V0U2VjcmV0VmFsdWUoe1xuICAgICAgICBTZWNyZXRJZDogc2VjcmV0SWQsXG4gICAgfSkucHJvbWlzZSgpO1xuXG4gICAgaWYgKCFzZWNyZXRPYmouU2VjcmV0U3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc2VjcmV0IGZvdW5kIScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3JldCA9IEpTT04ucGFyc2Uoc2VjcmV0T2JqLlNlY3JldFN0cmluZyk7XG5cbiAgICBpZiAocHJlZml4ID09PSAnJykge1xuICAgICAgICByZXR1cm4gc2VjcmV0O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVNlY3JldChzZWNyZXQsIGAke3ByZWZpeH0uYCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2VjcmV0PFNlY3JldD4oc2VjcmV0OiBHZW5lcmljU2VjcmV0LCBwcmVmaXg6IHN0cmluZyk6IFNlY3JldCB7XG4gICAgY29uc3QgcGFyc2VkOiBHZW5lcmljU2VjcmV0ID0ge307XG4gICAgY29uc3Qgc2tpcCA9IHByZWZpeC5sZW5ndGg7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzZWNyZXQpIHtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgICAgIHBhcnNlZFtrZXkuc3Vic3RyaW5nKHNraXApXSA9IHNlY3JldFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZCBhcyB1bmtub3duIGFzIFNlY3JldDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhTZWNyZXRBbmRQcmVmaXg8U2VjcmV0LCBSZXNwb25zZT4oc2VjcmV0SWQ6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIGZuOiBTZWNyZXRUb1Byb21pc2VGdW5jdGlvbjxTZWNyZXQsIFJlc3BvbnNlPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgcmV0dXJuIGZuKGF3YWl0IGdldFNlY3JldChzZWNyZXRJZCwgcHJlZml4KSk7XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export declare const NOT_FOUND_MESSAGE = "NOT_FOUND";
2
+ export declare const ERROR_MESSAGE = "ERROR";
3
+ export declare const OK_MESSAGE = "OK";
4
+ export declare const BAD_REQUEST_MESSAGE = "BAD REQUEST";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BAD_REQUEST_MESSAGE = exports.OK_MESSAGE = exports.ERROR_MESSAGE = exports.NOT_FOUND_MESSAGE = void 0;
4
+ // DEPRECATED, remove this!
5
+ exports.NOT_FOUND_MESSAGE = 'NOT_FOUND';
6
+ exports.ERROR_MESSAGE = 'ERROR';
7
+ exports.OK_MESSAGE = 'OK';
8
+ exports.BAD_REQUEST_MESSAGE = 'BAD REQUEST';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy90eXBlcy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQTJCO0FBQ2QsUUFBQSxpQkFBaUIsR0FBRyxXQUFXLENBQUM7QUFDaEMsUUFBQSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQ3hCLFFBQUEsVUFBVSxHQUFHLElBQUksQ0FBQztBQUNsQixRQUFBLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIERFUFJFQ0FURUQsIHJlbW92ZSB0aGlzIVxyXG5leHBvcnQgY29uc3QgTk9UX0ZPVU5EX01FU1NBR0UgPSAnTk9UX0ZPVU5EJztcclxuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0UgPSAnRVJST1InO1xyXG5leHBvcnQgY29uc3QgT0tfTUVTU0FHRSA9ICdPSyc7XHJcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF9NRVNTQUdFID0gJ0JBRCBSRVFVRVNUJztcclxuIl19
@@ -0,0 +1,12 @@
1
+ export declare class LambdaResponse<T> {
2
+ readonly status: number;
3
+ readonly body: T;
4
+ readonly fileName?: string;
5
+ static ok<S>(body: S, fileName?: string): Promise<LambdaResponse<S>>;
6
+ static okJson<S>(json: S, fileName?: string): Promise<LambdaResponse<string>>;
7
+ static badRequest(body: string): Promise<LambdaResponse<string>>;
8
+ static notFound(): Promise<LambdaResponse<string>>;
9
+ static internalError(): Promise<LambdaResponse<string>>;
10
+ static notImplemented(): Promise<LambdaResponse<string>>;
11
+ static create<S>(status: number, body: S, fileName?: string): Promise<LambdaResponse<S>>;
12
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LambdaResponse = void 0;
4
+ class LambdaResponse {
5
+ static ok(body, fileName) {
6
+ return this.create(200, body, fileName);
7
+ }
8
+ static okJson(json, fileName) {
9
+ return this.create(200, JSON.stringify(json, null, 2), fileName);
10
+ }
11
+ static badRequest(body) {
12
+ return this.create(400, body);
13
+ }
14
+ static notFound() {
15
+ return this.create(404, 'Not found');
16
+ }
17
+ static internalError() {
18
+ return this.create(500, 'Internal error');
19
+ }
20
+ static notImplemented() {
21
+ return this.create(501, 'Not implemented');
22
+ }
23
+ static create(status, body, fileName) {
24
+ return Promise.resolve({ status, body, fileName });
25
+ }
26
+ }
27
+ exports.LambdaResponse = LambdaResponse;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy90eXBlcy9sYW1iZGEtcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxjQUFjO0lBS3ZCLE1BQU0sQ0FBQyxFQUFFLENBQUksSUFBTyxFQUFFLFFBQWlCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFJLElBQU8sRUFBRSxRQUFpQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWE7UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUksTUFBYyxFQUFFLElBQU8sRUFBRSxRQUFpQjtRQUN2RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNKO0FBaENELHdDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBMYW1iZGFSZXNwb25zZTxUPiB7XG4gICAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYm9keTogVDtcbiAgICByZWFkb25seSBmaWxlTmFtZT86IHN0cmluZztcblxuICAgIHN0YXRpYyBvazxTPihib2R5OiBTLCBmaWxlTmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoMjAwLCBib2R5LCBmaWxlTmFtZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG9rSnNvbjxTPihqc29uOiBTLCBmaWxlTmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoMjAwLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgZmlsZU5hbWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBiYWRSZXF1ZXN0KGJvZHk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoNDAwLCBib2R5KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbm90Rm91bmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSg0MDQsICdOb3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW50ZXJuYWxFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKDUwMCwgJ0ludGVybmFsIGVycm9yJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIG5vdEltcGxlbWVudGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoNTAxLCAnTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZTxTPihzdGF0dXM6IG51bWJlciwgYm9keTogUywgZmlsZU5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPExhbWJkYVJlc3BvbnNlPFM+PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdGF0dXMsIGJvZHksIGZpbGVOYW1lIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export declare enum MediaType {
2
+ APPLICATION_JSON = "application/json",
3
+ APPLICATION_XML = "application/xml",
4
+ APPLICATION_GEOJSON = "application/geo+json;charset=UTF-8",
5
+ IMAGE_SVG = "image/svg+xml",
6
+ IMAGE_JPEG = "image/jpeg",
7
+ TEXT_PLAIN = "text/plain",
8
+ TEXT_HTML = "text/html",
9
+ TEXT_CSV = "text/csv"
10
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaType = void 0;
4
+ var MediaType;
5
+ (function (MediaType) {
6
+ MediaType["APPLICATION_JSON"] = "application/json";
7
+ MediaType["APPLICATION_XML"] = "application/xml";
8
+ MediaType["APPLICATION_GEOJSON"] = "application/geo+json;charset=UTF-8";
9
+ MediaType["IMAGE_SVG"] = "image/svg+xml";
10
+ MediaType["IMAGE_JPEG"] = "image/jpeg";
11
+ MediaType["TEXT_PLAIN"] = "text/plain";
12
+ MediaType["TEXT_HTML"] = "text/html";
13
+ MediaType["TEXT_CSV"] = "text/csv";
14
+ })(MediaType = exports.MediaType || (exports.MediaType = {}));
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWF0eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvdHlwZXMvbWVkaWF0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBU1g7QUFURCxXQUFZLFNBQVM7SUFDakIsa0RBQXFDLENBQUE7SUFDckMsZ0RBQW1DLENBQUE7SUFDbkMsdUVBQTBELENBQUE7SUFDMUQsd0NBQTJCLENBQUE7SUFDM0Isc0NBQXlCLENBQUE7SUFDekIsc0NBQXlCLENBQUE7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsa0NBQXFCLENBQUE7QUFDekIsQ0FBQyxFQVRXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBU3BCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gTWVkaWFUeXBlIHtcbiAgICBBUFBMSUNBVElPTl9KU09OID0gJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIEFQUExJQ0FUSU9OX1hNTCA9ICdhcHBsaWNhdGlvbi94bWwnLFxuICAgIEFQUExJQ0FUSU9OX0dFT0pTT04gPSAnYXBwbGljYXRpb24vZ2VvK2pzb247Y2hhcnNldD1VVEYtOCcsXG4gICAgSU1BR0VfU1ZHID0gJ2ltYWdlL3N2Zyt4bWwnLFxuICAgIElNQUdFX0pQRUcgPSAnaW1hZ2UvanBlZycsXG4gICAgVEVYVF9QTEFJTiA9ICd0ZXh0L3BsYWluJyxcbiAgICBURVhUX0hUTUwgPSAndGV4dC9odG1sJyxcbiAgICBURVhUX0NTViA9ICd0ZXh0L2NzdicsXG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ import { Model } from "aws-cdk-lib/aws-apigateway";
2
+ /**
3
+ * Model object with a reference to an API Gateway model object.
4
+ */
5
+ export interface ModelWithReference extends Model {
6
+ modelReference: string;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtd2l0aC1yZWZlcmVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL3R5cGVzL21vZGVsLXdpdGgtcmVmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01vZGVsfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcblxuLyoqXG4gKiBNb2RlbCBvYmplY3Qgd2l0aCBhIHJlZmVyZW5jZSB0byBhbiBBUEkgR2F0ZXdheSBtb2RlbCBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxXaXRoUmVmZXJlbmNlIGV4dGVuZHMgTW9kZWwge1xuICAgIG1vZGVsUmVmZXJlbmNlOiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ /**
2
+ * https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format
3
+ *
4
+ * Not fully described, extend if necessary.
5
+ */
6
+ export declare type ProxyLambdaResponse = {
7
+ readonly statusCode: number;
8
+ readonly body: string;
9
+ readonly headers?: Record<string, string>;
10
+ readonly multiValueHeaders?: Record<string, string[]>;
11
+ };
12
+ /**
13
+ * https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
14
+ *
15
+ * Not fully described, extend if necessary.
16
+ */
17
+ export declare type ProxyLambdaRequest = {
18
+ readonly resource: string;
19
+ readonly path: string;
20
+ readonly httpMethod: string;
21
+ readonly headers: Record<string, string>;
22
+ readonly multiValueHeaders: Record<string, string[]>;
23
+ readonly queryStringParameters: Record<string, string>;
24
+ readonly multiValueQueryStringParameters: Record<string, string[]>;
25
+ readonly body?: string;
26
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHl0eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvdHlwZXMvcHJveHl0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2V0LXVwLWxhbWJkYS1wcm94eS1pbnRlZ3JhdGlvbnMuaHRtbCNhcGktZ2F0ZXdheS1zaW1wbGUtcHJveHktZm9yLWxhbWJkYS1vdXRwdXQtZm9ybWF0XG4gKlxuICogTm90IGZ1bGx5IGRlc2NyaWJlZCwgZXh0ZW5kIGlmIG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJveHlMYW1iZGFSZXNwb25zZSA9IHtcbiAgICByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXJcbiAgICByZWFkb25seSBib2R5OiBzdHJpbmdcbiAgICByZWFkb25seSBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIHJlYWRvbmx5IG11bHRpVmFsdWVIZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+XG59XG5cbi8qKlxuICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NldC11cC1sYW1iZGEtcHJveHktaW50ZWdyYXRpb25zLmh0bWwjYXBpLWdhdGV3YXktc2ltcGxlLXByb3h5LWZvci1sYW1iZGEtaW5wdXQtZm9ybWF0XG4gKlxuICogTm90IGZ1bGx5IGRlc2NyaWJlZCwgZXh0ZW5kIGlmIG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJveHlMYW1iZGFSZXF1ZXN0ID0ge1xuICAgIHJlYWRvbmx5IHJlc291cmNlOiBzdHJpbmdcbiAgICByZWFkb25seSBwYXRoOiBzdHJpbmdcbiAgICByZWFkb25seSBodHRwTWV0aG9kOiBzdHJpbmdcbiAgICByZWFkb25seSBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgcmVhZG9ubHkgbXVsdGlWYWx1ZUhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICAgIHJlYWRvbmx5IHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIHJlYWRvbmx5IG11bHRpVmFsdWVRdWVyeVN0cmluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICAgIHJlYWRvbmx5IGJvZHk/OiBzdHJpbmdcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare const BETA_TAGS: string[];
2
+ export declare const DATA_V1_TAGS: string[];
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DATA_V1_TAGS = exports.BETA_TAGS = void 0;
4
+ // DEPRECATED! This must be replaced with new application specific tags
5
+ exports.BETA_TAGS = ['Beta'];
6
+ exports.DATA_V1_TAGS = ['Data v1'];
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvdHlwZXMvdGFncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1RUFBdUU7QUFDMUQsUUFBQSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQixRQUFBLFlBQVksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gREVQUkVDQVRFRCEgVGhpcyBtdXN0IGJlIHJlcGxhY2VkIHdpdGggbmV3IGFwcGxpY2F0aW9uIHNwZWNpZmljIHRhZ3NcclxuZXhwb3J0IGNvbnN0IEJFVEFfVEFHUyA9IFsnQmV0YSddO1xyXG5leHBvcnQgY29uc3QgREFUQV9WMV9UQUdTID0gWydEYXRhIHYxJ107XHJcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { DTDatabase, DTTransaction } from "./database";
2
+ export declare enum JSON_CACHE_KEY {
3
+ NAUTICAL_WARNINGS_ACTIVE = "nautical-warnings-active",
4
+ NAUTICAL_WARNINGS_ARCHIVED = "nautical-warnings-archived"
5
+ }
6
+ export declare function updateCachedJson<T>(db: DTDatabase | DTTransaction, cacheKey: JSON_CACHE_KEY, value: T): Promise<null>;
7
+ export declare function getJsonFromCache<T>(db: DTDatabase | DTTransaction, cacheKey: JSON_CACHE_KEY): Promise<T | null>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getJsonFromCache = exports.updateCachedJson = exports.JSON_CACHE_KEY = void 0;
4
+ const pg_promise_1 = require("pg-promise");
5
+ const SQL_UPDATE_CACHE_VALUE = `insert into cached_json(cache_id, content, last_updated)
6
+ values ($1, $2, now())
7
+ on conflict(cache_id) do
8
+ update set content = $2, last_updated = now()`;
9
+ const SQL_GET_CACHE_VALUE = `select content, last_updated from cached_json
10
+ where cache_id = $1`;
11
+ const PS_UPDATE_CACHE_VALUE = new pg_promise_1.PreparedStatement({
12
+ name: 'update-cache-value',
13
+ text: SQL_UPDATE_CACHE_VALUE,
14
+ });
15
+ const PS_GET_CACHE_VALUE = new pg_promise_1.PreparedStatement({
16
+ name: 'get-cache-value',
17
+ text: SQL_GET_CACHE_VALUE,
18
+ });
19
+ var JSON_CACHE_KEY;
20
+ (function (JSON_CACHE_KEY) {
21
+ JSON_CACHE_KEY["NAUTICAL_WARNINGS_ACTIVE"] = "nautical-warnings-active";
22
+ JSON_CACHE_KEY["NAUTICAL_WARNINGS_ARCHIVED"] = "nautical-warnings-archived";
23
+ })(JSON_CACHE_KEY = exports.JSON_CACHE_KEY || (exports.JSON_CACHE_KEY = {}));
24
+ function updateCachedJson(db, cacheKey, value) {
25
+ return db.none(PS_UPDATE_CACHE_VALUE, [cacheKey, value]);
26
+ }
27
+ exports.updateCachedJson = updateCachedJson;
28
+ function getJsonFromCache(db, cacheKey) {
29
+ return db.oneOrNone(PS_GET_CACHE_VALUE, [cacheKey]).then(value => value?.content ?? null);
30
+ }
31
+ exports.getJsonFromCache = getJsonFromCache;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2NhY2hlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBNkM7QUFHN0MsTUFBTSxzQkFBc0IsR0FDeEI7OztrREFHOEMsQ0FBQztBQUVuRCxNQUFNLG1CQUFtQixHQUNyQjt3QkFDb0IsQ0FBQztBQUV6QixNQUFNLHFCQUFxQixHQUFHLElBQUksOEJBQWlCLENBQUM7SUFDaEQsSUFBSSxFQUFFLG9CQUFvQjtJQUMxQixJQUFJLEVBQUUsc0JBQXNCO0NBQy9CLENBQUMsQ0FBQztBQUVILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSw4QkFBaUIsQ0FBQztJQUM3QyxJQUFJLEVBQUUsaUJBQWlCO0lBQ3ZCLElBQUksRUFBRSxtQkFBbUI7Q0FDNUIsQ0FBQyxDQUFDO0FBRUgsSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3RCLHVFQUFxRCxDQUFBO0lBQ3JELDJFQUF5RCxDQUFBO0FBQzdELENBQUMsRUFIVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQUd6QjtBQUVELFNBQWdCLGdCQUFnQixDQUFJLEVBQThCLEVBQUUsUUFBd0IsRUFBRSxLQUFRO0lBQ2xHLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLGdCQUFnQixDQUFJLEVBQThCLEVBQUUsUUFBd0I7SUFDeEYsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFGRCw0Q0FFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHJlcGFyZWRTdGF0ZW1lbnR9IGZyb20gXCJwZy1wcm9taXNlXCI7XG5pbXBvcnQge0RURGF0YWJhc2UsIERUVHJhbnNhY3Rpb259IGZyb20gXCIuL2RhdGFiYXNlXCI7XG5cbmNvbnN0IFNRTF9VUERBVEVfQ0FDSEVfVkFMVUUgPVxuICAgIGBpbnNlcnQgaW50byBjYWNoZWRfanNvbihjYWNoZV9pZCwgY29udGVudCwgbGFzdF91cGRhdGVkKVxuICAgIHZhbHVlcyAoJDEsICQyLCBub3coKSlcbiAgICBvbiBjb25mbGljdChjYWNoZV9pZCkgZG9cbiAgICB1cGRhdGUgc2V0IGNvbnRlbnQgPSAkMiwgbGFzdF91cGRhdGVkID0gbm93KClgO1xuXG5jb25zdCBTUUxfR0VUX0NBQ0hFX1ZBTFVFID1cbiAgICBgc2VsZWN0IGNvbnRlbnQsIGxhc3RfdXBkYXRlZCBmcm9tIGNhY2hlZF9qc29uXG4gICAgd2hlcmUgY2FjaGVfaWQgPSAkMWA7XG5cbmNvbnN0IFBTX1VQREFURV9DQUNIRV9WQUxVRSA9IG5ldyBQcmVwYXJlZFN0YXRlbWVudCh7XG4gICAgbmFtZTogJ3VwZGF0ZS1jYWNoZS12YWx1ZScsXG4gICAgdGV4dDogU1FMX1VQREFURV9DQUNIRV9WQUxVRSxcbn0pO1xuXG5jb25zdCBQU19HRVRfQ0FDSEVfVkFMVUUgPSBuZXcgUHJlcGFyZWRTdGF0ZW1lbnQoe1xuICAgIG5hbWU6ICdnZXQtY2FjaGUtdmFsdWUnLFxuICAgIHRleHQ6IFNRTF9HRVRfQ0FDSEVfVkFMVUUsXG59KTtcblxuZXhwb3J0IGVudW0gSlNPTl9DQUNIRV9LRVkge1xuICAgIE5BVVRJQ0FMX1dBUk5JTkdTX0FDVElWRSA9ICduYXV0aWNhbC13YXJuaW5ncy1hY3RpdmUnLFxuICAgIE5BVVRJQ0FMX1dBUk5JTkdTX0FSQ0hJVkVEID0gJ25hdXRpY2FsLXdhcm5pbmdzLWFyY2hpdmVkJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQ2FjaGVkSnNvbjxUPihkYjogRFREYXRhYmFzZSB8IERUVHJhbnNhY3Rpb24sIGNhY2hlS2V5OiBKU09OX0NBQ0hFX0tFWSwgdmFsdWU6IFQpOiBQcm9taXNlPG51bGw+IHtcbiAgICByZXR1cm4gZGIubm9uZShQU19VUERBVEVfQ0FDSEVfVkFMVUUsIFtjYWNoZUtleSwgdmFsdWVdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEpzb25Gcm9tQ2FjaGU8VD4oZGI6IERURGF0YWJhc2UgfCBEVFRyYW5zYWN0aW9uLCBjYWNoZUtleTogSlNPTl9DQUNIRV9LRVkpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIGRiLm9uZU9yTm9uZShQU19HRVRfQ0FDSEVfVkFMVUUsIFtjYWNoZUtleV0pLnRoZW4odmFsdWUgPT4gdmFsdWU/LmNvbnRlbnQgPz8gbnVsbCk7XG59XG4iXX0=