@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,19 @@
1
+ import { IDatabase, ITask } from "pg-promise";
2
+ export declare type DTDatabase = IDatabase<unknown>;
3
+ export declare type DTTransaction = ITask<unknown>;
4
+ /**
5
+ * Creates a non-pooling database connection primarily used by Lambdas.
6
+ *
7
+ * Note! Using this method opens a new RDS connection on every invocation. It is advised to
8
+ * use RDS proxy to pool connections transparently.
9
+ * https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html
10
+ * @param username Username
11
+ * @param password Password
12
+ * @param applicationName name of application
13
+ * @param url Connection URL
14
+ * @param options pg-promise options
15
+ */
16
+ export declare function initDbConnection(username: string, password: string, applicationName: string, url: string, options?: object): DTDatabase;
17
+ export declare function inTransaction<T>(fn: (db: DTTransaction) => Promise<T>): Promise<T>;
18
+ export declare function inDatabase<T>(fn: (db: DTDatabase) => Promise<T>): Promise<T>;
19
+ export declare function inDatabaseReadonly<T>(fn: (db: DTDatabase) => Promise<T>): Promise<T>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inDatabaseReadonly = exports.inDatabase = exports.inTransaction = exports.initDbConnection = void 0;
4
+ const dbsecret_1 = require("../aws/runtime/secrets/dbsecret");
5
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
6
+ const pgp = require('pg-promise')();
7
+ // convert numeric types to number instead of string
8
+ pgp.pg.types.setTypeParser(pgp.pg.types.builtins.INT8, (value) => {
9
+ return parseInt(value);
10
+ });
11
+ pgp.pg.types.setTypeParser(pgp.pg.types.builtins.FLOAT8, (value) => {
12
+ return parseFloat(value);
13
+ });
14
+ pgp.pg.types.setTypeParser(pgp.pg.types.builtins.NUMERIC, (value) => {
15
+ return parseFloat(value);
16
+ });
17
+ /**
18
+ * Creates a non-pooling database connection primarily used by Lambdas.
19
+ *
20
+ * Note! Using this method opens a new RDS connection on every invocation. It is advised to
21
+ * use RDS proxy to pool connections transparently.
22
+ * https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html
23
+ * @param username Username
24
+ * @param password Password
25
+ * @param applicationName name of application
26
+ * @param url Connection URL
27
+ * @param options pg-promise options
28
+ */
29
+ function initDbConnection(username, password, applicationName, url, options) {
30
+ const finalUrl = `postgresql://${username}:${password}@${url}?application_name=${applicationName}`;
31
+ return pgp(finalUrl, options);
32
+ }
33
+ exports.initDbConnection = initDbConnection;
34
+ function inTransaction(fn) {
35
+ return inDatabase(db => db.tx((t) => fn(t)));
36
+ }
37
+ exports.inTransaction = inTransaction;
38
+ function inDatabase(fn) {
39
+ return doInDatabase(false, fn);
40
+ }
41
+ exports.inDatabase = inDatabase;
42
+ function inDatabaseReadonly(fn) {
43
+ return doInDatabase(true, fn);
44
+ }
45
+ exports.inDatabaseReadonly = inDatabaseReadonly;
46
+ async function doInDatabase(readonly, fn) {
47
+ const db = initDbConnection(process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_USER], process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_PASS], process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_APPLICATION] || 'unknown-cdk-application', (readonly ? process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_RO_URI] : process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_URI]));
48
+ try {
49
+ // deallocate all prepared statements to allow for connection pooling
50
+ // DISCARD instead of DEALLOCATE as it didn't always clean all prepared statements
51
+ await db.none('DISCARD ALL');
52
+ return await fn(db);
53
+ }
54
+ catch (e) {
55
+ console.error("Error in db:", e);
56
+ throw e;
57
+ }
58
+ finally {
59
+ db.$pool.end();
60
+ }
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsOERBQXdFO0FBRXhFLDhEQUE4RDtBQUM5RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUVwQyxvREFBb0Q7QUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUNyRSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQztBQUVILEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDdkUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFFSCxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO0lBQ3hFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQyxDQUFDO0FBTUg7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDNUIsUUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsZUFBdUIsRUFDdkIsR0FBVyxFQUNYLE9BQWdCO0lBRWhCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixRQUFRLElBQUksUUFBUSxJQUFJLEdBQUcscUJBQXFCLGVBQWUsRUFBRSxDQUFDO0lBRW5HLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBVkQsNENBVUM7QUFFRCxTQUFnQixhQUFhLENBQUssRUFBcUM7SUFDbkUsT0FBTyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixVQUFVLENBQUksRUFBa0M7SUFDNUQsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLGtCQUFrQixDQUFJLEVBQWtDO0lBRXBFLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBSEQsZ0RBR0M7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFJLFFBQWlCLEVBQzVDLEVBQWtDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQXVCLENBQUMsT0FBTyxDQUFXLEVBQzlFLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQXVCLENBQUMsT0FBTyxDQUFXLEVBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQXVCLENBQUMsY0FBYyxDQUFDLElBQUkseUJBQXlCLEVBQ2hGLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFXLENBQUMsQ0FBQztJQUN6SCxJQUFJO1FBQ0EscUVBQXFFO1FBQ3JFLGtGQUFrRjtRQUNsRixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0IsT0FBTyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN2QjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLENBQUM7S0FDWDtZQUFTO1FBQ04sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUNsQjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lEYXRhYmFzZSwgSVRhc2t9IGZyb20gXCJwZy1wcm9taXNlXCI7XG5pbXBvcnQge0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzfSBmcm9tIFwiLi4vYXdzL3J1bnRpbWUvc2VjcmV0cy9kYnNlY3JldFwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3QgcGdwID0gcmVxdWlyZSgncGctcHJvbWlzZScpKCk7XG5cbi8vIGNvbnZlcnQgbnVtZXJpYyB0eXBlcyB0byBudW1iZXIgaW5zdGVhZCBvZiBzdHJpbmdcbnBncC5wZy50eXBlcy5zZXRUeXBlUGFyc2VyKHBncC5wZy50eXBlcy5idWlsdGlucy5JTlQ4LCAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSk7XG59KTtcblxucGdwLnBnLnR5cGVzLnNldFR5cGVQYXJzZXIocGdwLnBnLnR5cGVzLmJ1aWx0aW5zLkZMT0FUOCwgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59KTtcblxucGdwLnBnLnR5cGVzLnNldFR5cGVQYXJzZXIocGdwLnBnLnR5cGVzLmJ1aWx0aW5zLk5VTUVSSUMsICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xufSk7XG5cbmV4cG9ydCB0eXBlIERURGF0YWJhc2UgPSBJRGF0YWJhc2U8dW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIERUVHJhbnNhY3Rpb24gPSBJVGFzazx1bmtub3duPlxuXG4vKipcbiAqIENyZWF0ZXMgYSBub24tcG9vbGluZyBkYXRhYmFzZSBjb25uZWN0aW9uIHByaW1hcmlseSB1c2VkIGJ5IExhbWJkYXMuXG4gKlxuICogTm90ZSEgVXNpbmcgdGhpcyBtZXRob2Qgb3BlbnMgYSBuZXcgUkRTIGNvbm5lY3Rpb24gb24gZXZlcnkgaW52b2NhdGlvbi4gSXQgaXMgYWR2aXNlZCB0b1xuICogdXNlIFJEUyBwcm94eSB0byBwb29sIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gKiBodHRwczovL2RvY3MuYW1hem9uYXdzLmNuL2VuX3VzL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL3Jkcy1wcm94eS5odG1sXG4gKiBAcGFyYW0gdXNlcm5hbWUgVXNlcm5hbWVcbiAqIEBwYXJhbSBwYXNzd29yZCBQYXNzd29yZFxuICogQHBhcmFtIGFwcGxpY2F0aW9uTmFtZSBuYW1lIG9mIGFwcGxpY2F0aW9uXG4gKiBAcGFyYW0gdXJsIENvbm5lY3Rpb24gVVJMXG4gKiBAcGFyYW0gb3B0aW9ucyBwZy1wcm9taXNlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXREYkNvbm5lY3Rpb24oXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIGFwcGxpY2F0aW9uTmFtZTogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBvYmplY3QsXG4pOiBEVERhdGFiYXNlIHtcbiAgICBjb25zdCBmaW5hbFVybCA9IGBwb3N0Z3Jlc3FsOi8vJHt1c2VybmFtZX06JHtwYXNzd29yZH1AJHt1cmx9P2FwcGxpY2F0aW9uX25hbWU9JHthcHBsaWNhdGlvbk5hbWV9YDtcblxuICAgIHJldHVybiBwZ3AoZmluYWxVcmwsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5UcmFuc2FjdGlvbjxUPiAoZm46IChkYjogRFRUcmFuc2FjdGlvbikgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBpbkRhdGFiYXNlKGRiID0+IGRiLnR4KCh0OiBEVFRyYW5zYWN0aW9uKSA9PiBmbih0KSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5EYXRhYmFzZTxUPihmbjogKGRiOiBEVERhdGFiYXNlKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGRvSW5EYXRhYmFzZShmYWxzZSwgZm4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5EYXRhYmFzZVJlYWRvbmx5PFQ+KGZuOiAoZGI6IERURGF0YWJhc2UpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcblxuICAgIHJldHVybiBkb0luRGF0YWJhc2UodHJ1ZSwgZm4pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0luRGF0YWJhc2U8VD4ocmVhZG9ubHk6IGJvb2xlYW4sXG4gICAgZm46IChkYjogRFREYXRhYmFzZSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGRiID0gaW5pdERiQ29ubmVjdGlvbihwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9VU0VSXSBhcyBzdHJpbmcsXG4gICAgICAgIHByb2Nlc3MuZW52W0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLkRCX1BBU1NdIGFzIHN0cmluZyxcbiAgICAgICAgcHJvY2Vzcy5lbnZbRGF0YWJhc2VFbnZpcm9ubWVudEtleXMuREJfQVBQTElDQVRJT05dIHx8ICd1bmtub3duLWNkay1hcHBsaWNhdGlvbicsXG4gICAgICAgIChyZWFkb25seSA/IHByb2Nlc3MuZW52W0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLkRCX1JPX1VSSV0gOiBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9VUkldKSBhcyBzdHJpbmcpO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGRlYWxsb2NhdGUgYWxsIHByZXBhcmVkIHN0YXRlbWVudHMgdG8gYWxsb3cgZm9yIGNvbm5lY3Rpb24gcG9vbGluZ1xuICAgICAgICAvLyBESVNDQVJEIGluc3RlYWQgb2YgREVBTExPQ0FURSBhcyBpdCBkaWRuJ3QgYWx3YXlzIGNsZWFuIGFsbCBwcmVwYXJlZCBzdGF0ZW1lbnRzXG4gICAgICAgIGF3YWl0IGRiLm5vbmUoJ0RJU0NBUkQgQUxMJyk7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbihkYik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gZGI6XCIsIGUpO1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGRiLiRwb29sLmVuZCgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { DTDatabase, DTTransaction } from "./database";
2
+ export declare enum DataType {
3
+ VS_DATEX2 = "VS_DATEX2",
4
+ COUNTING_SITES_DATA = "COUNTING_SITES_DATA",
5
+ COUNTING_SITES_METADATA = "COUNTING_SITES_METADATA",
6
+ COUNTING_SITES_METADATA_CHECK = "COUNTING_SITES_METADATA_CHECK",
7
+ MAINTENANCE_TRACKING_DATA_CHECKED = "MAINTENANCE_TRACKING_DATA_CHECKED",
8
+ PERMIT_DATA = "PERMIT_DATA",
9
+ PERMIT_DATA_CHECK = "PERMIT_DATA_CHECK"
10
+ }
11
+ export declare function getLastUpdated(db: DTDatabase, datatype: DataType): Promise<Date | null>;
12
+ export declare function getLastUpdatedWithSubtype(db: DTDatabase, datatype: DataType, subtype: string): Promise<Date | null>;
13
+ export declare function updateLastUpdated(db: DTDatabase | DTTransaction, datatype: DataType, updated: Date): Promise<null>;
14
+ export declare function updateLastUpdatedWithSubtype(db: DTDatabase | DTTransaction, datatype: DataType, subtype: string, updated: Date): Promise<null>;
15
+ export declare function getUpdatedTimestamp(db: DTDatabase, datatype: string): Promise<Date | null>;
16
+ export declare function updateUpdatedTimestamp(db: DTDatabase | DTTransaction, datatype: string, date: Date, by?: string): Promise<null>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateUpdatedTimestamp = exports.getUpdatedTimestamp = exports.updateLastUpdatedWithSubtype = exports.updateLastUpdated = exports.getLastUpdatedWithSubtype = exports.getLastUpdated = exports.DataType = void 0;
4
+ var DataType;
5
+ (function (DataType) {
6
+ DataType["VS_DATEX2"] = "VS_DATEX2";
7
+ DataType["COUNTING_SITES_DATA"] = "COUNTING_SITES_DATA";
8
+ DataType["COUNTING_SITES_METADATA"] = "COUNTING_SITES_METADATA";
9
+ DataType["COUNTING_SITES_METADATA_CHECK"] = "COUNTING_SITES_METADATA_CHECK";
10
+ DataType["MAINTENANCE_TRACKING_DATA_CHECKED"] = "MAINTENANCE_TRACKING_DATA_CHECKED";
11
+ DataType["PERMIT_DATA"] = "PERMIT_DATA";
12
+ DataType["PERMIT_DATA_CHECK"] = "PERMIT_DATA_CHECK";
13
+ })(DataType = exports.DataType || (exports.DataType = {}));
14
+ const UNSET_SUBTYPE = '-';
15
+ function getLastUpdated(db, datatype) {
16
+ return db.oneOrNone("select updated from data_updated where data_type=$(datatype) and subtype=$(subtype)", {
17
+ datatype: datatype, subtype: UNSET_SUBTYPE,
18
+ }, (x) => x?.updated || null);
19
+ }
20
+ exports.getLastUpdated = getLastUpdated;
21
+ function getLastUpdatedWithSubtype(db, datatype, subtype) {
22
+ return db.oneOrNone("SELECT updated FROM data_updated WHERE data_type=$(datatype) AND subtype=$(subtype)", {
23
+ datatype: datatype, subtype: subtype,
24
+ }, (x) => x?.updated || null);
25
+ }
26
+ exports.getLastUpdatedWithSubtype = getLastUpdatedWithSubtype;
27
+ function updateLastUpdated(db, datatype, updated) {
28
+ return db.none(`insert into data_updated(id, data_type, updated)
29
+ values(nextval('seq_data_updated'), $(datatype), $(updated))
30
+ on conflict (data_type, subtype)
31
+ do update set updated = $(updated)`, { updated, datatype });
32
+ }
33
+ exports.updateLastUpdated = updateLastUpdated;
34
+ function updateLastUpdatedWithSubtype(db, datatype, subtype, updated) {
35
+ return db.none(`insert into data_updated(id, data_type, subtype, updated)
36
+ values(nextval('seq_data_updated'), $(datatype), $(subtype), $(updated))
37
+ on conflict (data_type, subtype)
38
+ do update set updated = $(updated)`, { updated, subtype, datatype });
39
+ }
40
+ exports.updateLastUpdatedWithSubtype = updateLastUpdatedWithSubtype;
41
+ function getUpdatedTimestamp(db, datatype) {
42
+ return db.oneOrNone("select updated_time as updated from updated_timestamp where updated_name=$(datatype)", {
43
+ datatype: datatype,
44
+ }, (x) => x?.updated || null);
45
+ }
46
+ exports.getUpdatedTimestamp = getUpdatedTimestamp;
47
+ function updateUpdatedTimestamp(db, datatype, date, by = '') {
48
+ return db.none(`insert into updated_timestamp(updated_name, updated_time, updated_by)
49
+ values($(datatype), $(date), $(by))
50
+ on conflict (updated_name)
51
+ do update set updated_time = $(date), updated_by = $(by)`, { date, datatype, by });
52
+ }
53
+ exports.updateUpdatedTimestamp = updateUpdatedTimestamp;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdC11cGRhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2xhc3QtdXBkYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxJQUFZLFFBUVg7QUFSRCxXQUFZLFFBQVE7SUFDaEIsbUNBQXFCLENBQUE7SUFDckIsdURBQXlDLENBQUE7SUFDekMsK0RBQWlELENBQUE7SUFDakQsMkVBQTZELENBQUE7SUFDN0QsbUZBQXFFLENBQUE7SUFDckUsdUNBQXlCLENBQUE7SUFDekIsbURBQXFDLENBQUE7QUFDekMsQ0FBQyxFQVJXLFFBQVEsR0FBUixnQkFBUSxLQUFSLGdCQUFRLFFBUW5CO0FBRUQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBTTFCLFNBQWdCLGNBQWMsQ0FBQyxFQUFjLEVBQUUsUUFBa0I7SUFDN0QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLHFGQUFxRixFQUFFO1FBQ3ZHLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWE7S0FDN0MsRUFBRSxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUpELHdDQUlDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUMsRUFBYyxFQUFFLFFBQWtCLEVBQUUsT0FBZTtJQUN6RixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMscUZBQXFGLEVBQUU7UUFDdkcsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTztLQUN2QyxFQUFFLENBQUMsQ0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBSkQsOERBSUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxFQUE4QixFQUFFLFFBQWtCLEVBQUUsT0FBYTtJQUMvRixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7OztvQ0FHaUIsRUFDaEMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBTkQsOENBTUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FBQyxFQUE4QixFQUFFLFFBQWtCLEVBQUUsT0FBZSxFQUFFLE9BQWE7SUFDM0gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDOzs7b0NBR2lCLEVBQ2hDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFORCxvRUFNQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLEVBQWMsRUFBRSxRQUFnQjtJQUNoRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsc0ZBQXNGLEVBQUU7UUFDeEcsUUFBUSxFQUFFLFFBQVE7S0FDckIsRUFBRSxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUpELGtEQUlDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUMsRUFBOEIsRUFBRSxRQUFnQixFQUFFLElBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRTtJQUN4RyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7Ozt5REFHc0MsRUFDckQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQU5ELHdEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEVERhdGFiYXNlLCBEVFRyYW5zYWN0aW9ufSBmcm9tIFwiLi9kYXRhYmFzZVwiO1xyXG5cclxuZXhwb3J0IGVudW0gRGF0YVR5cGUge1xyXG4gICAgVlNfREFURVgyPVwiVlNfREFURVgyXCIsXHJcbiAgICBDT1VOVElOR19TSVRFU19EQVRBPVwiQ09VTlRJTkdfU0lURVNfREFUQVwiLFxyXG4gICAgQ09VTlRJTkdfU0lURVNfTUVUQURBVEE9XCJDT1VOVElOR19TSVRFU19NRVRBREFUQVwiLFxyXG4gICAgQ09VTlRJTkdfU0lURVNfTUVUQURBVEFfQ0hFQ0s9XCJDT1VOVElOR19TSVRFU19NRVRBREFUQV9DSEVDS1wiLFxyXG4gICAgTUFJTlRFTkFOQ0VfVFJBQ0tJTkdfREFUQV9DSEVDS0VEPVwiTUFJTlRFTkFOQ0VfVFJBQ0tJTkdfREFUQV9DSEVDS0VEXCIsXHJcbiAgICBQRVJNSVRfREFUQT1cIlBFUk1JVF9EQVRBXCIsXHJcbiAgICBQRVJNSVRfREFUQV9DSEVDSz1cIlBFUk1JVF9EQVRBX0NIRUNLXCIsXHJcbn1cclxuXHJcbmNvbnN0IFVOU0VUX1NVQlRZUEUgPSAnLSc7XHJcblxyXG50eXBlIFVwZGF0ZWRUaW1lc3RhbXAgPSB7XHJcbiAgICB1cGRhdGVkOiBEYXRlXHJcbn0gfCBudWxsO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RVcGRhdGVkKGRiOiBEVERhdGFiYXNlLCBkYXRhdHlwZTogRGF0YVR5cGUpOiBQcm9taXNlPERhdGUgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gZGIub25lT3JOb25lKFwic2VsZWN0IHVwZGF0ZWQgZnJvbSBkYXRhX3VwZGF0ZWQgd2hlcmUgZGF0YV90eXBlPSQoZGF0YXR5cGUpIGFuZCBzdWJ0eXBlPSQoc3VidHlwZSlcIiwge1xyXG4gICAgICAgIGRhdGF0eXBlOiBkYXRhdHlwZSwgc3VidHlwZTogVU5TRVRfU1VCVFlQRSxcclxuICAgIH0sICh4OiBVcGRhdGVkVGltZXN0YW1wKSA9PiB4Py51cGRhdGVkIHx8IG51bGwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFVwZGF0ZWRXaXRoU3VidHlwZShkYjogRFREYXRhYmFzZSwgZGF0YXR5cGU6IERhdGFUeXBlLCBzdWJ0eXBlOiBzdHJpbmcpOiBQcm9taXNlPERhdGUgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gZGIub25lT3JOb25lKFwiU0VMRUNUIHVwZGF0ZWQgRlJPTSBkYXRhX3VwZGF0ZWQgV0hFUkUgZGF0YV90eXBlPSQoZGF0YXR5cGUpIEFORCBzdWJ0eXBlPSQoc3VidHlwZSlcIiwge1xyXG4gICAgICAgIGRhdGF0eXBlOiBkYXRhdHlwZSwgc3VidHlwZTogc3VidHlwZSxcclxuICAgIH0sICh4OiBVcGRhdGVkVGltZXN0YW1wKSA9PiB4Py51cGRhdGVkIHx8IG51bGwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGFzdFVwZGF0ZWQoZGI6IERURGF0YWJhc2UgfCBEVFRyYW5zYWN0aW9uLCBkYXRhdHlwZTogRGF0YVR5cGUsIHVwZGF0ZWQ6IERhdGUpOiBQcm9taXNlPG51bGw+IHtcclxuICAgIHJldHVybiBkYi5ub25lKGBpbnNlcnQgaW50byBkYXRhX3VwZGF0ZWQoaWQsIGRhdGFfdHlwZSwgdXBkYXRlZClcclxuIHZhbHVlcyhuZXh0dmFsKCdzZXFfZGF0YV91cGRhdGVkJyksICQoZGF0YXR5cGUpLCAkKHVwZGF0ZWQpKVxyXG4gb24gY29uZmxpY3QgKGRhdGFfdHlwZSwgc3VidHlwZSlcclxuIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZCA9ICQodXBkYXRlZClgLFxyXG4gICAgeyB1cGRhdGVkLCBkYXRhdHlwZSB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxhc3RVcGRhdGVkV2l0aFN1YnR5cGUoZGI6IERURGF0YWJhc2UgfCBEVFRyYW5zYWN0aW9uLCBkYXRhdHlwZTogRGF0YVR5cGUsIHN1YnR5cGU6IHN0cmluZywgdXBkYXRlZDogRGF0ZSk6IFByb21pc2U8bnVsbD4ge1xyXG4gICAgcmV0dXJuIGRiLm5vbmUoYGluc2VydCBpbnRvIGRhdGFfdXBkYXRlZChpZCwgZGF0YV90eXBlLCBzdWJ0eXBlLCB1cGRhdGVkKVxyXG4gdmFsdWVzKG5leHR2YWwoJ3NlcV9kYXRhX3VwZGF0ZWQnKSwgJChkYXRhdHlwZSksICQoc3VidHlwZSksICQodXBkYXRlZCkpXHJcbiBvbiBjb25mbGljdCAoZGF0YV90eXBlLCBzdWJ0eXBlKVxyXG4gZG8gdXBkYXRlIHNldCB1cGRhdGVkID0gJCh1cGRhdGVkKWAsXHJcbiAgICB7IHVwZGF0ZWQsIHN1YnR5cGUsIGRhdGF0eXBlIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlZFRpbWVzdGFtcChkYjogRFREYXRhYmFzZSwgZGF0YXR5cGU6IHN0cmluZyk6IFByb21pc2U8RGF0ZSB8IG51bGw+IHtcclxuICAgIHJldHVybiBkYi5vbmVPck5vbmUoXCJzZWxlY3QgdXBkYXRlZF90aW1lIGFzIHVwZGF0ZWQgZnJvbSB1cGRhdGVkX3RpbWVzdGFtcCB3aGVyZSB1cGRhdGVkX25hbWU9JChkYXRhdHlwZSlcIiwge1xyXG4gICAgICAgIGRhdGF0eXBlOiBkYXRhdHlwZSxcclxuICAgIH0sICh4OiBVcGRhdGVkVGltZXN0YW1wKSA9PiB4Py51cGRhdGVkIHx8IG51bGwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVXBkYXRlZFRpbWVzdGFtcChkYjogRFREYXRhYmFzZSB8IERUVHJhbnNhY3Rpb24sIGRhdGF0eXBlOiBzdHJpbmcsIGRhdGU6IERhdGUsIGJ5ID0gJycpOiBQcm9taXNlPG51bGw+IHtcclxuICAgIHJldHVybiBkYi5ub25lKGBpbnNlcnQgaW50byB1cGRhdGVkX3RpbWVzdGFtcCh1cGRhdGVkX25hbWUsIHVwZGF0ZWRfdGltZSwgdXBkYXRlZF9ieSlcclxudmFsdWVzKCQoZGF0YXR5cGUpLCAkKGRhdGUpLCAkKGJ5KSlcclxub24gY29uZmxpY3QgKHVwZGF0ZWRfbmFtZSlcclxuZG8gdXBkYXRlIHNldCB1cGRhdGVkX3RpbWUgPSAkKGRhdGUpLCB1cGRhdGVkX2J5ID0gJChieSlgLFxyXG4gICAgeyBkYXRlLCBkYXRhdHlwZSwgYnkgfSk7XHJcbn1cclxuIl19
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./aws/infra/api/responses";
package/index.js ADDED
@@ -0,0 +1,18 @@
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/infra/api/responses"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDREQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2F3cy9pbmZyYS9hcGkvcmVzcG9uc2VzXCI7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export declare function isValidIMO(imo: number): boolean;
2
+ export declare function isValidMMSI(mmsi: number): boolean;
3
+ export declare function isValidLOCODE(locode: string): boolean;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidLOCODE = exports.isValidMMSI = exports.isValidIMO = void 0;
4
+ function isValidIMO(imo) {
5
+ return imo >= 1000000 && imo <= 9999999 && imoChecksumIsValid(imo);
6
+ }
7
+ exports.isValidIMO = isValidIMO;
8
+ function imoChecksumIsValid(imo) {
9
+ const imoStr = imo.toString();
10
+ const imoDigit1 = Number(imoStr[0]);
11
+ const imoDigit2 = Number(imoStr[1]);
12
+ const imoDigit3 = Number(imoStr[2]);
13
+ const imoDigit4 = Number(imoStr[3]);
14
+ const imoDigit5 = Number(imoStr[4]);
15
+ const imoDigit6 = Number(imoStr[5]);
16
+ const checkDigit = Number(imoStr[6]);
17
+ const checkCalculation = Number(((imoDigit1 * 7) + (imoDigit2 * 6) + (imoDigit3 * 5) + (imoDigit4 * 4) + (imoDigit5 * 3) + (imoDigit6 * 2)));
18
+ const checkResult = checkCalculation % 10 === checkDigit;
19
+ if (!checkResult) {
20
+ console.warn('method=imoChecksumIsValid IMO checksum failed %d', imo);
21
+ }
22
+ return checkResult;
23
+ }
24
+ function isValidMMSI(mmsi) {
25
+ return mmsi >= 100000000 && mmsi <= 999999999;
26
+ }
27
+ exports.isValidMMSI = isValidMMSI;
28
+ const LocodePattern = /^FI[A-Z]{3}$/i;
29
+ function isValidLOCODE(locode) {
30
+ return LocodePattern.test(locode);
31
+ }
32
+ exports.isValidLOCODE = isValidLOCODE;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFyaW5lL2lkX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLFVBQVUsQ0FBQyxHQUFXO0lBQ2xDLE9BQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQVMsa0JBQWtCLENBQUMsR0FBVztJQUNuQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdJLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsS0FBSyxVQUFVLENBQUM7SUFDekQsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDekU7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLElBQVk7SUFDcEMsT0FBTyxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUM7QUFDbEQsQ0FBQztBQUZELGtDQUVDO0FBRUQsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBRXRDLFNBQWdCLGFBQWEsQ0FBQyxNQUFjO0lBQ3hDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRkQsc0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaXNWYWxpZElNTyhpbW86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbW8gPj0gMTAwMDAwMCAmJiBpbW8gPD0gOTk5OTk5OSAmJiBpbW9DaGVja3N1bUlzVmFsaWQoaW1vKTtcbn1cblxuZnVuY3Rpb24gaW1vQ2hlY2tzdW1Jc1ZhbGlkKGltbzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW1vU3RyID0gaW1vLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaW1vRGlnaXQxID0gTnVtYmVyKGltb1N0clswXSk7XG4gICAgY29uc3QgaW1vRGlnaXQyID0gTnVtYmVyKGltb1N0clsxXSk7XG4gICAgY29uc3QgaW1vRGlnaXQzID0gTnVtYmVyKGltb1N0clsyXSk7XG4gICAgY29uc3QgaW1vRGlnaXQ0ID0gTnVtYmVyKGltb1N0clszXSk7XG4gICAgY29uc3QgaW1vRGlnaXQ1ID0gTnVtYmVyKGltb1N0cls0XSk7XG4gICAgY29uc3QgaW1vRGlnaXQ2ID0gTnVtYmVyKGltb1N0cls1XSk7XG4gICAgY29uc3QgY2hlY2tEaWdpdCA9IE51bWJlcihpbW9TdHJbNl0pO1xuICAgIGNvbnN0IGNoZWNrQ2FsY3VsYXRpb24gPSBOdW1iZXIoKChpbW9EaWdpdDEgKiA3KSArIChpbW9EaWdpdDIgKiA2KSArIChpbW9EaWdpdDMgKiA1KSArIChpbW9EaWdpdDQgKiA0KSArIChpbW9EaWdpdDUgKiAzKSArIChpbW9EaWdpdDYgKiAyKSkpO1xuICAgIGNvbnN0IGNoZWNrUmVzdWx0ID0gY2hlY2tDYWxjdWxhdGlvbiAlIDEwID09PSBjaGVja0RpZ2l0O1xuICAgIGlmICghY2hlY2tSZXN1bHQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdtZXRob2Q9aW1vQ2hlY2tzdW1Jc1ZhbGlkIElNTyBjaGVja3N1bSBmYWlsZWQgJWQnLCBpbW8pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tSZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTU1TSShtbXNpOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW1zaSA+PSAxMDAwMDAwMDAgJiYgbW1zaSA8PSA5OTk5OTk5OTk7XG59XG5cbmNvbnN0IExvY29kZVBhdHRlcm4gPSAvXkZJW0EtWl17M30kL2k7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTE9DT0RFKGxvY29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY29kZVBhdHRlcm4udGVzdChsb2NvZGUpO1xufVxuIl19
@@ -0,0 +1,48 @@
1
+ export declare type RtzPositionCoordinate = {
2
+ readonly $: {
3
+ readonly lat: number;
4
+ readonly lon: number;
5
+ };
6
+ };
7
+ export declare type RtzWaypointPosition = {
8
+ readonly position: RtzPositionCoordinate[];
9
+ };
10
+ export declare type RtzWaypoint = {
11
+ readonly waypoint: RtzWaypointPosition[];
12
+ };
13
+ export declare type RtzScheduleElement = {
14
+ readonly $: {
15
+ /**
16
+ * Date
17
+ */
18
+ readonly etd?: string;
19
+ /**
20
+ * Date
21
+ */
22
+ readonly eta?: string;
23
+ };
24
+ };
25
+ export declare type RtzSchedule = {
26
+ readonly scheduleElement: RtzScheduleElement[];
27
+ };
28
+ export declare type RtzScheduleWrapper = {
29
+ readonly manual?: RtzSchedule[];
30
+ readonly calculated?: RtzSchedule[];
31
+ };
32
+ export declare type RtzSchedules = {
33
+ readonly schedule: RtzScheduleWrapper[];
34
+ };
35
+ export declare type RtzRouteInfo = {
36
+ readonly $: {
37
+ readonly vesselMMSI: string;
38
+ readonly vesselIMO: string;
39
+ };
40
+ };
41
+ export declare type RtzRoute = {
42
+ readonly routeInfo: RtzRouteInfo[];
43
+ readonly waypoints: RtzWaypoint[];
44
+ readonly schedules: RtzSchedules[];
45
+ };
46
+ export declare type RtzVoyagePlan = {
47
+ readonly route: RtzRoute;
48
+ };
package/marine/rtz.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnR6LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcmluZS9ydHoudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFJ0elBvc2l0aW9uQ29vcmRpbmF0ZSA9IHtcbiAgICByZWFkb25seSAkOiB7XG4gICAgICAgIHJlYWRvbmx5IGxhdDogbnVtYmVyXG4gICAgICAgIHJlYWRvbmx5IGxvbjogbnVtYmVyXG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBSdHpXYXlwb2ludFBvc2l0aW9uID0ge1xuICAgIHJlYWRvbmx5IHBvc2l0aW9uOiBSdHpQb3NpdGlvbkNvb3JkaW5hdGVbXVxufVxuXG5leHBvcnQgdHlwZSBSdHpXYXlwb2ludCA9IHtcbiAgICByZWFkb25seSB3YXlwb2ludDogUnR6V2F5cG9pbnRQb3NpdGlvbltdXG59XG5cbmV4cG9ydCB0eXBlIFJ0elNjaGVkdWxlRWxlbWVudCA9IHtcbiAgICByZWFkb25seSAkOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEYXRlXG4gICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBldGQ/OiBzdHJpbmdcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERhdGVcbiAgICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGV0YT86IHN0cmluZ1xuICAgIH0sXG59XG5cbmV4cG9ydCB0eXBlIFJ0elNjaGVkdWxlID0ge1xuICAgIHJlYWRvbmx5IHNjaGVkdWxlRWxlbWVudDogUnR6U2NoZWR1bGVFbGVtZW50W11cbn1cblxuZXhwb3J0IHR5cGUgUnR6U2NoZWR1bGVXcmFwcGVyID0ge1xuICAgIHJlYWRvbmx5IG1hbnVhbD86IFJ0elNjaGVkdWxlW11cbiAgICByZWFkb25seSBjYWxjdWxhdGVkPzogUnR6U2NoZWR1bGVbXVxufVxuXG5leHBvcnQgdHlwZSBSdHpTY2hlZHVsZXMgPSB7XG4gICAgcmVhZG9ubHkgc2NoZWR1bGU6IFJ0elNjaGVkdWxlV3JhcHBlcltdXG59XG5cbmV4cG9ydCB0eXBlIFJ0elJvdXRlSW5mbyA9IHtcbiAgICByZWFkb25seSAkOiB7XG4gICAgICAgIHJlYWRvbmx5IHZlc3NlbE1NU0k6IHN0cmluZ1xuICAgICAgICByZWFkb25seSB2ZXNzZWxJTU86IHN0cmluZ1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUnR6Um91dGUgPSB7XG4gICAgcmVhZG9ubHkgcm91dGVJbmZvOiBSdHpSb3V0ZUluZm9bXVxuICAgIHJlYWRvbmx5IHdheXBvaW50czogUnR6V2F5cG9pbnRbXVxuICAgIHJlYWRvbmx5IHNjaGVkdWxlczogUnR6U2NoZWR1bGVzW11cbn1cblxuZXhwb3J0IHR5cGUgUnR6Vm95YWdlUGxhbiA9IHtcbiAgICByZWFkb25seSByb3V0ZTogUnR6Um91dGVcbn1cbiJdfQ==
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@digitraffic/common",
3
+ "version": "2022.10.5+3",
4
+ "description": "",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/tmfg/digitraffic-common.git"
8
+ },
9
+ "engines": {
10
+ "node": ">=16 <17",
11
+ "yarn": ">1.2 <2"
12
+ },
13
+ "publishConfig": {
14
+ "@tmfg:registry": "https://npm.pkg.github.com"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "lint": "eslint **/*.ts test/**/*.ts --fix",
19
+ "test": "jest --detectOpenHandles --forceExit --coverage --coverageDirectory=output/coverage/jest"
20
+ },
21
+ "main": "index.js",
22
+ "types": "index.d.ts",
23
+ "files": [
24
+ "."
25
+ ],
26
+ "devDependencies": {
27
+ "@aws-cdk/aws-synthetics-alpha": "^2.27.0-alpha.0",
28
+ "@types/aws-lambda": "^8.10.106",
29
+ "@types/geojson": "^7946.0.7",
30
+ "@types/jest": "^29.0.3",
31
+ "@types/node": "^18.7.23",
32
+ "@types/ramda": "^0.28.15",
33
+ "@types/sinon": "^10.0.13",
34
+ "aws-cdk-lib": "^2.43.1",
35
+ "aws-sdk": "^2.1225.0",
36
+ "axios": "^0.21.1",
37
+ "change-case": "4.1.2",
38
+ "constructs": "^10.1.116",
39
+ "geojson-validation": "^1.0.2",
40
+ "jest": "^29.1.1",
41
+ "jest-junit": "^14.0.1",
42
+ "moment": "^2.29.4",
43
+ "node-ttl": "^0.2.0",
44
+ "pg-native": "^3.0.1",
45
+ "pg-promise": "^10.12.0",
46
+ "ramda": "^0.28.0",
47
+ "sinon": "^14.0.0",
48
+ "ts-jest": "^29.0.2",
49
+ "typescript": "^4.8.4"
50
+ },
51
+ "externals": [
52
+ "aws-sdk",
53
+ "Synthetics"
54
+ ]
55
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DigitrafficIntegration = void 0;
4
+ const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
5
+ const mediatypes_1 = require("../../types/mediatypes");
6
+ const digitraffic_integration_response_1 = require("../../runtime/digitraffic-integration-response");
7
+ class DigitrafficIntegration {
8
+ constructor(lambda, mediaType = mediatypes_1.MediaType.TEXT_PLAIN) {
9
+ this.parameters = [];
10
+ this.lambda = lambda;
11
+ this.mediaType = mediaType;
12
+ }
13
+ addPathParameter(...names) {
14
+ names.forEach(name => this.parameters.push({ type: 'path', name }));
15
+ return this;
16
+ }
17
+ addQueryParameter(...names) {
18
+ names.forEach(name => this.parameters.push({ type: 'querystring', name }));
19
+ return this;
20
+ }
21
+ build() {
22
+ const integrationResponses = this.createResponses();
23
+ return new aws_apigateway_1.LambdaIntegration(this.lambda, {
24
+ proxy: false,
25
+ integrationResponses,
26
+ requestParameters: this.parameters.length == 0 ? undefined : this.createRequestParameters(),
27
+ requestTemplates: this.parameters.length == 0 ? undefined : this.createRequestTemplates(),
28
+ passthroughBehavior: aws_apigateway_1.PassthroughBehavior.WHEN_NO_MATCH,
29
+ });
30
+ }
31
+ createRequestParameters() {
32
+ const requestParameters = {};
33
+ this.parameters.forEach((parameter) => {
34
+ requestParameters[`integration.request.${parameter.type}.${parameter.name}`] = `method.request.${parameter.type}.${parameter.name}`;
35
+ });
36
+ return requestParameters;
37
+ }
38
+ createRequestTemplates() {
39
+ const requestJson = {};
40
+ this.parameters.forEach((parameter) => {
41
+ requestJson[parameter.name] = `$util.escapeJavaScript($input.params('${parameter.name}'))`;
42
+ });
43
+ return {
44
+ [mediatypes_1.MediaType.APPLICATION_JSON]: JSON.stringify(requestJson),
45
+ };
46
+ }
47
+ createResponses() {
48
+ return [digitraffic_integration_response_1.DigitrafficIntegrationResponse.ok(this.mediaType)];
49
+ }
50
+ }
51
+ exports.DigitrafficIntegration = DigitrafficIntegration;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL2FwaS9pbnRlZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBdUc7QUFFdkcsdURBQWlEO0FBQ2pELHFHQUE4RjtBQVM5RixNQUFhLHNCQUFzQjtJQU0vQixZQUFZLE1BQWlCLEVBQUUsU0FBUyxHQUFHLHNCQUFTLENBQUMsVUFBVTtRQUZ0RCxlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUdyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRyxLQUFlO1FBQy9CLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFHLEtBQWU7UUFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUs7UUFDRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVwRCxPQUFPLElBQUksa0NBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QyxLQUFLLEVBQUUsS0FBSztZQUNaLG9CQUFvQjtZQUNwQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQzNGLGdCQUFnQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDekYsbUJBQW1CLEVBQUUsb0NBQW1CLENBQUMsYUFBYTtTQUN6RCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLE1BQU0saUJBQWlCLEdBQTJCLEVBQUUsQ0FBQztRQUVyRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQXVCLEVBQUUsRUFBRTtZQUNoRCxpQkFBaUIsQ0FBQyx1QkFBdUIsU0FBUyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxrQkFBa0IsU0FBUyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEksQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUUvQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQXVCLEVBQUUsRUFBRTtZQUNoRCxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLHlDQUF5QyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0gsQ0FBQyxzQkFBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7U0FDNUQsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxDQUFDLGlFQUE4QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0o7QUE1REQsd0RBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbnRlZ3JhdGlvblJlc3BvbnNlLCBMYW1iZGFJbnRlZ3JhdGlvbiwgUGFzc3Rocm91Z2hCZWhhdmlvcn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5XCI7XG5pbXBvcnQge0lGdW5jdGlvbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7TWVkaWFUeXBlfSBmcm9tIFwiLi4vLi4vdHlwZXMvbWVkaWF0eXBlc1wiO1xuaW1wb3J0IHtEaWdpdHJhZmZpY0ludGVncmF0aW9uUmVzcG9uc2V9IGZyb20gXCIuLi8uLi9ydW50aW1lL2RpZ2l0cmFmZmljLWludGVncmF0aW9uLXJlc3BvbnNlXCI7XG5cbnR5cGUgUGFyYW1ldGVyVHlwZSA9ICdwYXRoJyB8ICdxdWVyeXN0cmluZyc7XG5cbmludGVyZmFjZSBBcGlQYXJhbWV0ZXIge1xuICAgIHR5cGU6IFBhcmFtZXRlclR5cGVcbiAgICBuYW1lOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIERpZ2l0cmFmZmljSW50ZWdyYXRpb24ge1xuICAgIHJlYWRvbmx5IGxhbWJkYTogSUZ1bmN0aW9uO1xuICAgIHJlYWRvbmx5IG1lZGlhVHlwZTogTWVkaWFUeXBlO1xuXG4gICAgcmVhZG9ubHkgcGFyYW1ldGVyczogQXBpUGFyYW1ldGVyW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGxhbWJkYTogSUZ1bmN0aW9uLCBtZWRpYVR5cGUgPSBNZWRpYVR5cGUuVEVYVF9QTEFJTikge1xuICAgICAgICB0aGlzLmxhbWJkYSA9IGxhbWJkYTtcbiAgICAgICAgdGhpcy5tZWRpYVR5cGUgPSBtZWRpYVR5cGU7XG4gICAgfVxuXG4gICAgYWRkUGF0aFBhcmFtZXRlciguLi5uYW1lczogc3RyaW5nW10pOiBEaWdpdHJhZmZpY0ludGVncmF0aW9uIHtcbiAgICAgICAgbmFtZXMuZm9yRWFjaChuYW1lID0+IHRoaXMucGFyYW1ldGVycy5wdXNoKHt0eXBlOiAncGF0aCcsIG5hbWV9KSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYWRkUXVlcnlQYXJhbWV0ZXIoLi4ubmFtZXM6IHN0cmluZ1tdKTogRGlnaXRyYWZmaWNJbnRlZ3JhdGlvbiB7XG4gICAgICAgIG5hbWVzLmZvckVhY2gobmFtZSA9PiB0aGlzLnBhcmFtZXRlcnMucHVzaCh7dHlwZTogJ3F1ZXJ5c3RyaW5nJywgbmFtZX0pKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBidWlsZCgpOiBMYW1iZGFJbnRlZ3JhdGlvbiB7XG4gICAgICAgIGNvbnN0IGludGVncmF0aW9uUmVzcG9uc2VzID0gdGhpcy5jcmVhdGVSZXNwb25zZXMoKTtcblxuICAgICAgICByZXR1cm4gbmV3IExhbWJkYUludGVncmF0aW9uKHRoaXMubGFtYmRhLCB7XG4gICAgICAgICAgICBwcm94eTogZmFsc2UsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlcyxcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiB0aGlzLnBhcmFtZXRlcnMubGVuZ3RoID09IDAgPyB1bmRlZmluZWQgOiB0aGlzLmNyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJzKCksXG4gICAgICAgICAgICByZXF1ZXN0VGVtcGxhdGVzOiB0aGlzLnBhcmFtZXRlcnMubGVuZ3RoID09IDAgPyB1bmRlZmluZWQgOiB0aGlzLmNyZWF0ZVJlcXVlc3RUZW1wbGF0ZXMoKSxcbiAgICAgICAgICAgIHBhc3N0aHJvdWdoQmVoYXZpb3I6IFBhc3N0aHJvdWdoQmVoYXZpb3IuV0hFTl9OT19NQVRDSCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVxdWVzdFBhcmFtZXRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlcjogQXBpUGFyYW1ldGVyKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1ldGVyc1tgaW50ZWdyYXRpb24ucmVxdWVzdC4ke3BhcmFtZXRlci50eXBlfS4ke3BhcmFtZXRlci5uYW1lfWBdID0gYG1ldGhvZC5yZXF1ZXN0LiR7cGFyYW1ldGVyLnR5cGV9LiR7cGFyYW1ldGVyLm5hbWV9YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3RQYXJhbWV0ZXJzO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlcXVlc3RUZW1wbGF0ZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RKc29uOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlcjogQXBpUGFyYW1ldGVyKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0SnNvbltwYXJhbWV0ZXIubmFtZV0gPSBgJHV0aWwuZXNjYXBlSmF2YVNjcmlwdCgkaW5wdXQucGFyYW1zKCcke3BhcmFtZXRlci5uYW1lfScpKWA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT05dOiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0SnNvbiksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzcG9uc2VzKCk6IEludGVncmF0aW9uUmVzcG9uc2VbXSB7XG4gICAgICAgIHJldHVybiBbRGlnaXRyYWZmaWNJbnRlZ3JhdGlvblJlc3BvbnNlLm9rKHRoaXMubWVkaWFUeXBlKV07XG4gICAgfVxufSJdfQ==
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createResponses = exports.InternalServerErrorResponseTemplate = exports.SvgResponseTemplate = exports.XmlResponseTemplate = exports.NotFoundResponseTemplate = exports.BadRequestResponseTemplate = exports.NotFoundResponse = exports.MessageModel = exports.RESPONSE_DEFAULT_LAMBDA = void 0;
4
+ const apigateway = require("aws-cdk-lib/aws-apigateway");
5
+ const mediatypes_1 = require("../../types/mediatypes");
6
+ /**
7
+ * This is velocity-script, that assumes the response to be LambdaResponse(status and body).
8
+ * It will always return the body and status, but if status in something else than 200 OK the content-type
9
+ * will be overridden to text/plain. (it's assumed, that lambda will return error text).
10
+ *
11
+ * If fileName is set, then Content-Disposition-header will be set to use it
12
+ */
13
+ exports.RESPONSE_DEFAULT_LAMBDA = `#set($inputRoot = $input.path('$'))
14
+ $inputRoot.body
15
+ #if ($inputRoot.status != 200)
16
+ #set ($context.responseOverride.status = $inputRoot.status)
17
+ #set ($context.responseOverride.header.Content-Type = 'text/plain')
18
+ #end
19
+ #set ($context.responseOverride.header.Access-Control-Allow-Origin = '*')
20
+ #if ("$!inputRoot.fileName" != "")
21
+ #set ($disposition = 'attachment; filename="FN"')
22
+ #set ($context.responseOverride.header.Content-Disposition = $disposition.replaceAll('FN', $inputRoot.fileName))
23
+ #end
24
+ `;
25
+ const BODY_FROM_INPUT_PATH = "$input.path('$').body";
26
+ // DEPRECATED
27
+ const messageSchema = {
28
+ schema: apigateway.JsonSchemaVersion.DRAFT4,
29
+ type: apigateway.JsonSchemaType.OBJECT,
30
+ description: 'Response with message',
31
+ properties: {
32
+ message: {
33
+ type: apigateway.JsonSchemaType.STRING,
34
+ description: 'Response message',
35
+ },
36
+ },
37
+ };
38
+ // DEPRECATED
39
+ exports.MessageModel = {
40
+ contentType: mediatypes_1.MediaType.APPLICATION_JSON,
41
+ modelName: 'MessageResponseModel',
42
+ schema: messageSchema,
43
+ };
44
+ const NotFoundMessage = 'Not found';
45
+ exports.NotFoundResponse = JSON.stringify({ message: NotFoundMessage });
46
+ const InternalServerErrorMessage = 'Error';
47
+ const InternalServerErrorResponse = JSON.stringify({ message: InternalServerErrorMessage });
48
+ const BadRequestMessage = 'Bad request';
49
+ const BadRequestResponse = JSON.stringify({ message: BadRequestMessage });
50
+ exports.BadRequestResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_JSON, BadRequestResponse);
51
+ exports.NotFoundResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_JSON, exports.NotFoundResponse);
52
+ exports.XmlResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_XML, BODY_FROM_INPUT_PATH);
53
+ exports.SvgResponseTemplate = createResponses(mediatypes_1.MediaType.IMAGE_SVG, BODY_FROM_INPUT_PATH);
54
+ exports.InternalServerErrorResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_JSON, InternalServerErrorResponse);
55
+ function createResponses(key, value) {
56
+ const map = {};
57
+ map[key] = value;
58
+ return map;
59
+ }
60
+ exports.createResponses = createResponses;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL2FwaS9yZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFBMEQ7QUFDMUQsdURBQWlEO0FBRWpEOzs7Ozs7R0FNRztBQUNVLFFBQUEsdUJBQXVCLEdBQUc7Ozs7Ozs7Ozs7O0NBV3RDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO0FBRXJELGFBQWE7QUFDYixNQUFNLGFBQWEsR0FBMEI7SUFDekMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNO0lBQzNDLElBQUksRUFBRSxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU07SUFDdEMsV0FBVyxFQUFFLHVCQUF1QjtJQUNwQyxVQUFVLEVBQUU7UUFDUixPQUFPLEVBQUU7WUFDTCxJQUFJLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQ3RDLFdBQVcsRUFBRSxrQkFBa0I7U0FDbEM7S0FDSjtDQUNKLENBQUM7QUFFRixhQUFhO0FBQ0EsUUFBQSxZQUFZLEdBQUc7SUFDeEIsV0FBVyxFQUFFLHNCQUFTLENBQUMsZ0JBQWdCO0lBQ3ZDLFNBQVMsRUFBRSxzQkFBc0I7SUFDakMsTUFBTSxFQUFFLGFBQWE7Q0FDeEIsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQztBQUN2QixRQUFBLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQztBQUUzRSxNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQztBQUMzQyxNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUMsQ0FBQyxDQUFDO0FBRTFGLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBQyxDQUFDLENBQUM7QUFFM0QsUUFBQSwwQkFBMEIsR0FBRyxlQUFlLENBQUMsc0JBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdGLFFBQUEsd0JBQXdCLEdBQUcsZUFBZSxDQUFDLHNCQUFTLENBQUMsZ0JBQWdCLEVBQUUsd0JBQWdCLENBQUMsQ0FBQztBQUN6RixRQUFBLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxzQkFBUyxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3ZGLFFBQUEsbUJBQW1CLEdBQUcsZUFBZSxDQUFDLHNCQUFTLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDakYsUUFBQSxtQ0FBbUMsR0FBRyxlQUFlLENBQUMsc0JBQVMsQ0FBQyxnQkFBZ0IsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0FBRTVILFNBQWdCLGVBQWUsQ0FBSSxHQUFjLEVBQUUsS0FBUTtJQUN2RCxNQUFNLEdBQUcsR0FBc0IsRUFBRSxDQUFDO0lBRWxDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFakIsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBTkQsMENBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpZ2F0ZXdheSA9IHJlcXVpcmUoJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5Jyk7XG5pbXBvcnQge01lZGlhVHlwZX0gZnJvbSBcIi4uLy4uL3R5cGVzL21lZGlhdHlwZXNcIjtcblxuLyoqXG4gKiBUaGlzIGlzIHZlbG9jaXR5LXNjcmlwdCwgdGhhdCBhc3N1bWVzIHRoZSByZXNwb25zZSB0byBiZSBMYW1iZGFSZXNwb25zZShzdGF0dXMgYW5kIGJvZHkpLlxuICogSXQgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBib2R5IGFuZCBzdGF0dXMsIGJ1dCBpZiBzdGF0dXMgaW4gc29tZXRoaW5nIGVsc2UgdGhhbiAyMDAgT0sgdGhlIGNvbnRlbnQtdHlwZVxuICogd2lsbCBiZSBvdmVycmlkZGVuIHRvIHRleHQvcGxhaW4uIChpdCdzIGFzc3VtZWQsIHRoYXQgbGFtYmRhIHdpbGwgcmV0dXJuIGVycm9yIHRleHQpLlxuICpcbiAqIElmIGZpbGVOYW1lIGlzIHNldCwgdGhlbiBDb250ZW50LURpc3Bvc2l0aW9uLWhlYWRlciB3aWxsIGJlIHNldCB0byB1c2UgaXRcbiAqL1xuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX0RFRkFVTFRfTEFNQkRBID0gYCNzZXQoJGlucHV0Um9vdCA9ICRpbnB1dC5wYXRoKCckJykpXG4kaW5wdXRSb290LmJvZHlcbiNpZiAoJGlucHV0Um9vdC5zdGF0dXMgIT0gMjAwKVxuI3NldCAoJGNvbnRleHQucmVzcG9uc2VPdmVycmlkZS5zdGF0dXMgPSAkaW5wdXRSb290LnN0YXR1cylcbiNzZXQgKCRjb250ZXh0LnJlc3BvbnNlT3ZlcnJpZGUuaGVhZGVyLkNvbnRlbnQtVHlwZSA9ICd0ZXh0L3BsYWluJylcbiNlbmRcbiNzZXQgKCRjb250ZXh0LnJlc3BvbnNlT3ZlcnJpZGUuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiA9ICcqJylcbiNpZiAoXCIkIWlucHV0Um9vdC5maWxlTmFtZVwiICE9IFwiXCIpXG4jc2V0ICgkZGlzcG9zaXRpb24gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9XCJGTlwiJylcbiNzZXQgKCRjb250ZXh0LnJlc3BvbnNlT3ZlcnJpZGUuaGVhZGVyLkNvbnRlbnQtRGlzcG9zaXRpb24gPSAkZGlzcG9zaXRpb24ucmVwbGFjZUFsbCgnRk4nLCAkaW5wdXRSb290LmZpbGVOYW1lKSlcbiNlbmRcbmA7XG5cbmNvbnN0IEJPRFlfRlJPTV9JTlBVVF9QQVRIID0gXCIkaW5wdXQucGF0aCgnJCcpLmJvZHlcIjtcblxuLy8gREVQUkVDQVRFRFxuY29uc3QgbWVzc2FnZVNjaGVtYTogYXBpZ2F0ZXdheS5Kc29uU2NoZW1hID0ge1xuICAgIHNjaGVtYTogYXBpZ2F0ZXdheS5Kc29uU2NoZW1hVmVyc2lvbi5EUkFGVDQsXG4gICAgdHlwZTogYXBpZ2F0ZXdheS5Kc29uU2NoZW1hVHlwZS5PQkpFQ1QsXG4gICAgZGVzY3JpcHRpb246ICdSZXNwb25zZSB3aXRoIG1lc3NhZ2UnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdHlwZTogYXBpZ2F0ZXdheS5Kc29uU2NoZW1hVHlwZS5TVFJJTkcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Jlc3BvbnNlIG1lc3NhZ2UnLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG4vLyBERVBSRUNBVEVEXG5leHBvcnQgY29uc3QgTWVzc2FnZU1vZGVsID0ge1xuICAgIGNvbnRlbnRUeXBlOiBNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTixcbiAgICBtb2RlbE5hbWU6ICdNZXNzYWdlUmVzcG9uc2VNb2RlbCcsXG4gICAgc2NoZW1hOiBtZXNzYWdlU2NoZW1hLFxufTtcblxuY29uc3QgTm90Rm91bmRNZXNzYWdlID0gJ05vdCBmb3VuZCc7XG5leHBvcnQgY29uc3QgTm90Rm91bmRSZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHttZXNzYWdlOiBOb3RGb3VuZE1lc3NhZ2V9KTtcblxuY29uc3QgSW50ZXJuYWxTZXJ2ZXJFcnJvck1lc3NhZ2UgPSAnRXJyb3InO1xuY29uc3QgSW50ZXJuYWxTZXJ2ZXJFcnJvclJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkoe21lc3NhZ2U6IEludGVybmFsU2VydmVyRXJyb3JNZXNzYWdlfSk7XG5cbmNvbnN0IEJhZFJlcXVlc3RNZXNzYWdlID0gJ0JhZCByZXF1ZXN0JztcbmNvbnN0IEJhZFJlcXVlc3RSZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHttZXNzYWdlOiBCYWRSZXF1ZXN0TWVzc2FnZX0pO1xuXG5leHBvcnQgY29uc3QgQmFkUmVxdWVzdFJlc3BvbnNlVGVtcGxhdGUgPSBjcmVhdGVSZXNwb25zZXMoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04sIEJhZFJlcXVlc3RSZXNwb25zZSk7XG5leHBvcnQgY29uc3QgTm90Rm91bmRSZXNwb25zZVRlbXBsYXRlID0gY3JlYXRlUmVzcG9uc2VzKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OLCBOb3RGb3VuZFJlc3BvbnNlKTtcbmV4cG9ydCBjb25zdCBYbWxSZXNwb25zZVRlbXBsYXRlID0gY3JlYXRlUmVzcG9uc2VzKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9YTUwsIEJPRFlfRlJPTV9JTlBVVF9QQVRIKTtcbmV4cG9ydCBjb25zdCBTdmdSZXNwb25zZVRlbXBsYXRlID0gY3JlYXRlUmVzcG9uc2VzKE1lZGlhVHlwZS5JTUFHRV9TVkcsIEJPRFlfRlJPTV9JTlBVVF9QQVRIKTtcbmV4cG9ydCBjb25zdCBJbnRlcm5hbFNlcnZlckVycm9yUmVzcG9uc2VUZW1wbGF0ZSA9IGNyZWF0ZVJlc3BvbnNlcyhNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTiwgSW50ZXJuYWxTZXJ2ZXJFcnJvclJlc3BvbnNlKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlczxUPihrZXk6IE1lZGlhVHlwZSwgdmFsdWU6IFQpOiBSZWNvcmQ8c3RyaW5nLCBUPiB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBUPiA9IHt9O1xuXG4gICAgbWFwW2tleV0gPSB2YWx1ZTtcblxuICAgIHJldHVybiBtYXA7XG59XG4iXX0=
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getResponse = exports.defaultIntegration = exports.corsMethod = exports.methodResponse = exports.RESPONSE_404_NOT_FOUND = exports.RESPONSE_CORS_INTEGRATION = exports.RESPONSE_500_SERVER_ERROR = exports.RESPONSE_400_BAD_REQUEST = exports.RESPONSE_200_OK = void 0;
4
+ const response_1 = require("./response");
5
+ const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
6
+ const errors_1 = require("../../types/errors");
7
+ exports.RESPONSE_200_OK = {
8
+ statusCode: '200',
9
+ };
10
+ exports.RESPONSE_400_BAD_REQUEST = {
11
+ statusCode: '400',
12
+ selectionPattern: errors_1.BAD_REQUEST_MESSAGE,
13
+ responseTemplates: response_1.BadRequestResponseTemplate,
14
+ };
15
+ exports.RESPONSE_500_SERVER_ERROR = {
16
+ statusCode: '500',
17
+ selectionPattern: errors_1.ERROR_MESSAGE,
18
+ responseTemplates: response_1.InternalServerErrorResponseTemplate,
19
+ };
20
+ const RESPONSE_XML = {
21
+ responseTemplates: response_1.XmlResponseTemplate,
22
+ };
23
+ exports.RESPONSE_CORS_INTEGRATION = {
24
+ responseParameters: {
25
+ 'method.response.header.Access-Control-Allow-Origin': "'*'",
26
+ },
27
+ };
28
+ exports.RESPONSE_404_NOT_FOUND = {
29
+ statusCode: '404',
30
+ selectionPattern: errors_1.NOT_FOUND_MESSAGE,
31
+ responseTemplates: response_1.NotFoundResponseTemplate,
32
+ };
33
+ function methodResponse(status, contentType, model, parameters) {
34
+ return {
35
+ statusCode: status,
36
+ responseModels: (0, response_1.createResponses)(contentType, model),
37
+ responseParameters: parameters || {},
38
+ };
39
+ }
40
+ exports.methodResponse = methodResponse;
41
+ function corsMethod(response) {
42
+ return { ...response, ...{
43
+ responseParameters: {
44
+ 'method.response.header.Access-Control-Allow-Origin': true,
45
+ },
46
+ } };
47
+ }
48
+ exports.corsMethod = corsMethod;
49
+ /**
50
+ * Creates a default Lambda integration for a REST API resource _root_
51
+ * @param lambdaFunction The Lambda function
52
+ * @param options Options
53
+ */
54
+ function defaultIntegration(lambdaFunction, options) {
55
+ return new aws_apigateway_1.LambdaIntegration(lambdaFunction, {
56
+ proxy: false,
57
+ integrationResponses: options?.responses || [
58
+ getResponse(exports.RESPONSE_200_OK, options),
59
+ getResponse(exports.RESPONSE_400_BAD_REQUEST, options),
60
+ getResponse(exports.RESPONSE_404_NOT_FOUND, options),
61
+ getResponse(exports.RESPONSE_500_SERVER_ERROR, options),
62
+ ],
63
+ requestParameters: options?.requestParameters || {},
64
+ requestTemplates: options?.requestTemplates || {},
65
+ passthroughBehavior: options?.passthroughBehavior ?? aws_apigateway_1.PassthroughBehavior.WHEN_NO_MATCH,
66
+ });
67
+ }
68
+ exports.defaultIntegration = defaultIntegration;
69
+ function getResponse(response, options) {
70
+ if (options?.xml) {
71
+ response = { ...response, ...RESPONSE_XML };
72
+ }
73
+ if (!options?.disableCors) {
74
+ response = { ...response, ...exports.RESPONSE_CORS_INTEGRATION };
75
+ }
76
+ return response;
77
+ }
78
+ exports.getResponse = getResponse;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9hcGkvcmVzcG9uc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUlvQjtBQUNwQiwrREFBdUg7QUFHdkgsK0NBQXlGO0FBRzVFLFFBQUEsZUFBZSxHQUF3QjtJQUNoRCxVQUFVLEVBQUUsS0FBSztDQUNwQixDQUFDO0FBRVcsUUFBQSx3QkFBd0IsR0FBd0I7SUFDekQsVUFBVSxFQUFFLEtBQUs7SUFDakIsZ0JBQWdCLEVBQUUsNEJBQW1CO0lBQ3JDLGlCQUFpQixFQUFFLHFDQUEwQjtDQUNoRCxDQUFDO0FBRVcsUUFBQSx5QkFBeUIsR0FBd0I7SUFDMUQsVUFBVSxFQUFFLEtBQUs7SUFDakIsZ0JBQWdCLEVBQUUsc0JBQWE7SUFDL0IsaUJBQWlCLEVBQUUsOENBQW1DO0NBQ3pELENBQUM7QUFFRixNQUFNLFlBQVksR0FBRztJQUNqQixpQkFBaUIsRUFBRSw4QkFBbUI7Q0FDekMsQ0FBQztBQUVXLFFBQUEseUJBQXlCLEdBQUc7SUFDckMsa0JBQWtCLEVBQUU7UUFDaEIsb0RBQW9ELEVBQUUsS0FBSztLQUM5RDtDQUNKLENBQUM7QUFFVyxRQUFBLHNCQUFzQixHQUFHO0lBQ2xDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLGdCQUFnQixFQUFFLDBCQUFpQjtJQUNuQyxpQkFBaUIsRUFBRSxtQ0FBd0I7Q0FDOUMsQ0FBQztBQUVGLFNBQWdCLGNBQWMsQ0FBQyxNQUFjLEVBQUUsV0FBc0IsRUFBRSxLQUFhLEVBQUUsVUFBb0M7SUFDdEgsT0FBUTtRQUNKLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGNBQWMsRUFBRSxJQUFBLDBCQUFlLEVBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztRQUNuRCxrQkFBa0IsRUFBRSxVQUFVLElBQUksRUFBRTtLQUN2QyxDQUFDO0FBRU4sQ0FBQztBQVBELHdDQU9DO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLFFBQXdCO0lBQy9DLE9BQU8sRUFBQyxHQUFHLFFBQVEsRUFBRSxHQUFHO1lBQ3BCLGtCQUFrQixFQUFFO2dCQUNoQixvREFBb0QsRUFBRSxJQUFJO2FBQzdEO1NBQ0osRUFBQyxDQUFDO0FBQ1AsQ0FBQztBQU5ELGdDQU1DO0FBV0Q7Ozs7R0FJRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLGNBQXdCLEVBQ3ZELE9BQTRCO0lBQzVCLE9BQU8sSUFBSSxrQ0FBaUIsQ0FBQyxjQUFjLEVBQUU7UUFDekMsS0FBSyxFQUFFLEtBQUs7UUFDWixvQkFBb0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJO1lBQ3hDLFdBQVcsQ0FBQyx1QkFBZSxFQUFFLE9BQU8sQ0FBQztZQUNyQyxXQUFXLENBQUMsZ0NBQXdCLEVBQUUsT0FBTyxDQUFDO1lBQzlDLFdBQVcsQ0FBQyw4QkFBc0IsRUFBRSxPQUFPLENBQUM7WUFDNUMsV0FBVyxDQUFDLGlDQUF5QixFQUFFLE9BQU8sQ0FBQztTQUNsRDtRQUNELGlCQUFpQixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxFQUFFO1FBQ25ELGdCQUFnQixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO1FBQ2pELG1CQUFtQixFQUFFLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxvQ0FBbUIsQ0FBQyxhQUFhO0tBQ3pGLENBQUMsQ0FBQztBQUNQLENBQUM7QUFkRCxnREFjQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxRQUE2QixFQUFFLE9BQTRCO0lBQ25GLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNkLFFBQVEsR0FBRyxFQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsWUFBWSxFQUFDLENBQUM7S0FDN0M7SUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRTtRQUN2QixRQUFRLEdBQUcsRUFBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLGlDQUF5QixFQUFDLENBQUM7S0FDMUQ7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBVEQsa0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgSW50ZXJuYWxTZXJ2ZXJFcnJvclJlc3BvbnNlVGVtcGxhdGUsXHJcbiAgICBjcmVhdGVSZXNwb25zZXMsXHJcbiAgICBYbWxSZXNwb25zZVRlbXBsYXRlLCBOb3RGb3VuZFJlc3BvbnNlVGVtcGxhdGUsIEJhZFJlcXVlc3RSZXNwb25zZVRlbXBsYXRlLFxyXG59IGZyb20gXCIuL3Jlc3BvbnNlXCI7XHJcbmltcG9ydCB7TGFtYmRhSW50ZWdyYXRpb24sIE1ldGhvZFJlc3BvbnNlLCBJbnRlZ3JhdGlvblJlc3BvbnNlLCBQYXNzdGhyb3VnaEJlaGF2aW9yfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcclxuaW1wb3J0IHtGdW5jdGlvbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XHJcbmltcG9ydCB7SU1vZGVsfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXkvbGliL21vZGVsXCI7XHJcbmltcG9ydCB7QkFEX1JFUVVFU1RfTUVTU0FHRSwgRVJST1JfTUVTU0FHRSwgTk9UX0ZPVU5EX01FU1NBR0V9IGZyb20gXCIuLi8uLi90eXBlcy9lcnJvcnNcIjtcclxuaW1wb3J0IHtNZWRpYVR5cGV9IGZyb20gXCIuLi8uLi90eXBlcy9tZWRpYXR5cGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgUkVTUE9OU0VfMjAwX09LOiBJbnRlZ3JhdGlvblJlc3BvbnNlID0ge1xyXG4gICAgc3RhdHVzQ29kZTogJzIwMCcsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUkVTUE9OU0VfNDAwX0JBRF9SRVFVRVNUOiBJbnRlZ3JhdGlvblJlc3BvbnNlID0ge1xyXG4gICAgc3RhdHVzQ29kZTogJzQwMCcsXHJcbiAgICBzZWxlY3Rpb25QYXR0ZXJuOiBCQURfUkVRVUVTVF9NRVNTQUdFLFxyXG4gICAgcmVzcG9uc2VUZW1wbGF0ZXM6IEJhZFJlcXVlc3RSZXNwb25zZVRlbXBsYXRlLFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFJFU1BPTlNFXzUwMF9TRVJWRVJfRVJST1I6IEludGVncmF0aW9uUmVzcG9uc2UgPSB7XHJcbiAgICBzdGF0dXNDb2RlOiAnNTAwJyxcclxuICAgIHNlbGVjdGlvblBhdHRlcm46IEVSUk9SX01FU1NBR0UsXHJcbiAgICByZXNwb25zZVRlbXBsYXRlczogSW50ZXJuYWxTZXJ2ZXJFcnJvclJlc3BvbnNlVGVtcGxhdGUsXHJcbn07XHJcblxyXG5jb25zdCBSRVNQT05TRV9YTUwgPSB7XHJcbiAgICByZXNwb25zZVRlbXBsYXRlczogWG1sUmVzcG9uc2VUZW1wbGF0ZSxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBSRVNQT05TRV9DT1JTX0lOVEVHUkFUSU9OID0ge1xyXG4gICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XHJcbiAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogXCInKidcIixcclxuICAgIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgUkVTUE9OU0VfNDA0X05PVF9GT1VORCA9IHtcclxuICAgIHN0YXR1c0NvZGU6ICc0MDQnLFxyXG4gICAgc2VsZWN0aW9uUGF0dGVybjogTk9UX0ZPVU5EX01FU1NBR0UsXHJcbiAgICByZXNwb25zZVRlbXBsYXRlczogTm90Rm91bmRSZXNwb25zZVRlbXBsYXRlLFxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZFJlc3BvbnNlKHN0YXR1czogc3RyaW5nLCBjb250ZW50VHlwZTogTWVkaWFUeXBlLCBtb2RlbDogSU1vZGVsLCBwYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pOiBNZXRob2RSZXNwb25zZSB7XHJcbiAgICByZXR1cm4gIHtcclxuICAgICAgICBzdGF0dXNDb2RlOiBzdGF0dXMsXHJcbiAgICAgICAgcmVzcG9uc2VNb2RlbHM6IGNyZWF0ZVJlc3BvbnNlcyhjb250ZW50VHlwZSwgbW9kZWwpLFxyXG4gICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczogcGFyYW1ldGVycyB8fCB7fSxcclxuICAgIH07XHJcblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29yc01ldGhvZChyZXNwb25zZTogTWV0aG9kUmVzcG9uc2UpOiBNZXRob2RSZXNwb25zZSB7XHJcbiAgICByZXR1cm4gey4uLnJlc3BvbnNlLCAuLi57XHJcbiAgICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XHJcbiAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgIH19O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSW50ZWdyYXRpb25PcHRpb25zIHtcclxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzoge1tkZXN0OiBzdHJpbmddOiBzdHJpbmd9XHJcbiAgICByZXF1ZXN0VGVtcGxhdGVzPzoge1tjb250ZW50VHlwZTogc3RyaW5nXTogc3RyaW5nfSxcclxuICAgIHJlc3BvbnNlcz86IEludGVncmF0aW9uUmVzcG9uc2VbXSxcclxuICAgIGRpc2FibGVDb3JzPzogYm9vbGVhbixcclxuICAgIHhtbD86IGJvb2xlYW4sXHJcbiAgICBwYXNzdGhyb3VnaEJlaGF2aW9yPzogUGFzc3Rocm91Z2hCZWhhdmlvclxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGRlZmF1bHQgTGFtYmRhIGludGVncmF0aW9uIGZvciBhIFJFU1QgQVBJIHJlc291cmNlIF9yb290X1xyXG4gKiBAcGFyYW0gbGFtYmRhRnVuY3Rpb24gVGhlIExhbWJkYSBmdW5jdGlvblxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEludGVncmF0aW9uKGxhbWJkYUZ1bmN0aW9uOiBGdW5jdGlvbixcclxuICAgIG9wdGlvbnM/OiBJbnRlZ3JhdGlvbk9wdGlvbnMpOiBMYW1iZGFJbnRlZ3JhdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IExhbWJkYUludGVncmF0aW9uKGxhbWJkYUZ1bmN0aW9uLCB7XHJcbiAgICAgICAgcHJveHk6IGZhbHNlLFxyXG4gICAgICAgIGludGVncmF0aW9uUmVzcG9uc2VzOiBvcHRpb25zPy5yZXNwb25zZXMgfHwgW1xyXG4gICAgICAgICAgICBnZXRSZXNwb25zZShSRVNQT05TRV8yMDBfT0ssIG9wdGlvbnMpLFxyXG4gICAgICAgICAgICBnZXRSZXNwb25zZShSRVNQT05TRV80MDBfQkFEX1JFUVVFU1QsIG9wdGlvbnMpLFxyXG4gICAgICAgICAgICBnZXRSZXNwb25zZShSRVNQT05TRV80MDRfTk9UX0ZPVU5ELCBvcHRpb25zKSxcclxuICAgICAgICAgICAgZ2V0UmVzcG9uc2UoUkVTUE9OU0VfNTAwX1NFUlZFUl9FUlJPUiwgb3B0aW9ucyksXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXF1ZXN0UGFyYW1ldGVyczogb3B0aW9ucz8ucmVxdWVzdFBhcmFtZXRlcnMgfHwge30sXHJcbiAgICAgICAgcmVxdWVzdFRlbXBsYXRlczogb3B0aW9ucz8ucmVxdWVzdFRlbXBsYXRlcyB8fCB7fSxcclxuICAgICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiBvcHRpb25zPy5wYXNzdGhyb3VnaEJlaGF2aW9yID8/IFBhc3N0aHJvdWdoQmVoYXZpb3IuV0hFTl9OT19NQVRDSCxcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzcG9uc2UocmVzcG9uc2U6IEludGVncmF0aW9uUmVzcG9uc2UsIG9wdGlvbnM/OiBJbnRlZ3JhdGlvbk9wdGlvbnMpOiBJbnRlZ3JhdGlvblJlc3BvbnNlIHtcclxuICAgIGlmIChvcHRpb25zPy54bWwpIHtcclxuICAgICAgICByZXNwb25zZSA9IHsuLi5yZXNwb25zZSwgLi4uUkVTUE9OU0VfWE1MfTtcclxuICAgIH1cclxuICAgIGlmICghb3B0aW9ucz8uZGlzYWJsZUNvcnMpIHtcclxuICAgICAgICByZXNwb25zZSA9IHsuLi5yZXNwb25zZSwgLi4uUkVTUE9OU0VfQ09SU19JTlRFR1JBVElPTn07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG59XHJcbiJdfQ==