@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
+ "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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdC11cGRhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2xhc3QtdXBkYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxJQUFZLFFBUVg7QUFSRCxXQUFZLFFBQVE7SUFDaEIsbUNBQXFCLENBQUE7SUFDckIsdURBQXlDLENBQUE7SUFDekMsK0RBQWlELENBQUE7SUFDakQsMkVBQTZELENBQUE7SUFDN0QsbUZBQXFFLENBQUE7SUFDckUsdUNBQXlCLENBQUE7SUFDekIsbURBQXFDLENBQUE7QUFDekMsQ0FBQyxFQVJXLFFBQVEsR0FBUixnQkFBUSxLQUFSLGdCQUFRLFFBUW5CO0FBRUQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBTTFCLFNBQWdCLGNBQWMsQ0FBQyxFQUFjLEVBQUUsUUFBa0I7SUFDN0QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLHFGQUFxRixFQUFFO1FBQ3ZHLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGFBQWE7S0FDN0MsRUFBRSxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUpELHdDQUlDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUMsRUFBYyxFQUFFLFFBQWtCLEVBQUUsT0FBZTtJQUN6RixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMscUZBQXFGLEVBQUU7UUFDdkcsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTztLQUN2QyxFQUFFLENBQUMsQ0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBSkQsOERBSUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxFQUE4QixFQUFFLFFBQWtCLEVBQUUsT0FBYTtJQUMvRixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7OztvQ0FHaUIsRUFDaEMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBTkQsOENBTUM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FBQyxFQUE4QixFQUFFLFFBQWtCLEVBQUUsT0FBZSxFQUFFLE9BQWE7SUFDM0gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDOzs7b0NBR2lCLEVBQ2hDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFORCxvRUFNQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLEVBQWMsRUFBRSxRQUFnQjtJQUNoRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsc0ZBQXNGLEVBQUU7UUFDeEcsUUFBUSxFQUFFLFFBQVE7S0FDckIsRUFBRSxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUpELGtEQUlDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUMsRUFBOEIsRUFBRSxRQUFnQixFQUFFLElBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRTtJQUN4RyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7Ozt5REFHc0MsRUFDckQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQU5ELHdEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEVERhdGFiYXNlLCBEVFRyYW5zYWN0aW9ufSBmcm9tIFwiLi9kYXRhYmFzZVwiO1xyXG5cclxuZXhwb3J0IGVudW0gRGF0YVR5cGUge1xyXG4gICAgVlNfREFURVgyPVwiVlNfREFURVgyXCIsXHJcbiAgICBDT1VOVElOR19TSVRFU19EQVRBPVwiQ09VTlRJTkdfU0lURVNfREFUQVwiLFxyXG4gICAgQ09VTlRJTkdfU0lURVNfTUVUQURBVEE9XCJDT1VOVElOR19TSVRFU19NRVRBREFUQVwiLFxyXG4gICAgQ09VTlRJTkdfU0lURVNfTUVUQURBVEFfQ0hFQ0s9XCJDT1VOVElOR19TSVRFU19NRVRBREFUQV9DSEVDS1wiLFxyXG4gICAgTUFJTlRFTkFOQ0VfVFJBQ0tJTkdfREFUQV9DSEVDS0VEPVwiTUFJTlRFTkFOQ0VfVFJBQ0tJTkdfREFUQV9DSEVDS0VEXCIsXHJcbiAgICBQRVJNSVRfREFUQT1cIlBFUk1JVF9EQVRBXCIsXHJcbiAgICBQRVJNSVRfREFUQV9DSEVDSz1cIlBFUk1JVF9EQVRBX0NIRUNLXCIsXHJcbn1cclxuXHJcbmNvbnN0IFVOU0VUX1NVQlRZUEUgPSAnLSc7XHJcblxyXG50eXBlIFVwZGF0ZWRUaW1lc3RhbXAgPSB7XHJcbiAgICB1cGRhdGVkOiBEYXRlXHJcbn0gfCBudWxsO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RVcGRhdGVkKGRiOiBEVERhdGFiYXNlLCBkYXRhdHlwZTogRGF0YVR5cGUpOiBQcm9taXNlPERhdGUgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gZGIub25lT3JOb25lKFwic2VsZWN0IHVwZGF0ZWQgZnJvbSBkYXRhX3VwZGF0ZWQgd2hlcmUgZGF0YV90eXBlPSQoZGF0YXR5cGUpIGFuZCBzdWJ0eXBlPSQoc3VidHlwZSlcIiwge1xyXG4gICAgICAgIGRhdGF0eXBlOiBkYXRhdHlwZSwgc3VidHlwZTogVU5TRVRfU1VCVFlQRSxcclxuICAgIH0sICh4OiBVcGRhdGVkVGltZXN0YW1wKSA9PiB4Py51cGRhdGVkIHx8IG51bGwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFVwZGF0ZWRXaXRoU3VidHlwZShkYjogRFREYXRhYmFzZSwgZGF0YXR5cGU6IERhdGFUeXBlLCBzdWJ0eXBlOiBzdHJpbmcpOiBQcm9taXNlPERhdGUgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gZGIub25lT3JOb25lKFwiU0VMRUNUIHVwZGF0ZWQgRlJPTSBkYXRhX3VwZGF0ZWQgV0hFUkUgZGF0YV90eXBlPSQoZGF0YXR5cGUpIEFORCBzdWJ0eXBlPSQoc3VidHlwZSlcIiwge1xyXG4gICAgICAgIGRhdGF0eXBlOiBkYXRhdHlwZSwgc3VidHlwZTogc3VidHlwZSxcclxuICAgIH0sICh4OiBVcGRhdGVkVGltZXN0YW1wKSA9PiB4Py51cGRhdGVkIHx8IG51bGwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGFzdFVwZGF0ZWQoZGI6IERURGF0YWJhc2UgfCBEVFRyYW5zYWN0aW9uLCBkYXRhdHlwZTogRGF0YVR5cGUsIHVwZGF0ZWQ6IERhdGUpOiBQcm9taXNlPG51bGw+IHtcclxuICAgIHJldHVybiBkYi5ub25lKGBpbnNlcnQgaW50byBkYXRhX3VwZGF0ZWQoaWQsIGRhdGFfdHlwZSwgdXBkYXRlZClcclxuIHZhbHVlcyhuZXh0dmFsKCdzZXFfZGF0YV91cGRhdGVkJyksICQoZGF0YXR5cGUpLCAkKHVwZGF0ZWQpKVxyXG4gb24gY29uZmxpY3QgKGRhdGFfdHlwZSwgc3VidHlwZSlcclxuIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZCA9ICQodXBkYXRlZClgLFxyXG4gICAgeyB1cGRhdGVkLCBkYXRhdHlwZSB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxhc3RVcGRhdGVkV2l0aFN1YnR5cGUoZGI6IERURGF0YWJhc2UgfCBEVFRyYW5zYWN0aW9uLCBkYXRhdHlwZTogRGF0YVR5cGUsIHN1YnR5cGU6IHN0cmluZywgdXBkYXRlZDogRGF0ZSk6IFByb21pc2U8bnVsbD4ge1xyXG4gICAgcmV0dXJuIGRiLm5vbmUoYGluc2VydCBpbnRvIGRhdGFfdXBkYXRlZChpZCwgZGF0YV90eXBlLCBzdWJ0eXBlLCB1cGRhdGVkKVxyXG4gdmFsdWVzKG5leHR2YWwoJ3NlcV9kYXRhX3VwZGF0ZWQnKSwgJChkYXRhdHlwZSksICQoc3VidHlwZSksICQodXBkYXRlZCkpXHJcbiBvbiBjb25mbGljdCAoZGF0YV90eXBlLCBzdWJ0eXBlKVxyXG4gZG8gdXBkYXRlIHNldCB1cGRhdGVkID0gJCh1cGRhdGVkKWAsXHJcbiAgICB7IHVwZGF0ZWQsIHN1YnR5cGUsIGRhdGF0eXBlIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlZFRpbWVzdGFtcChkYjogRFREYXRhYmFzZSwgZGF0YXR5cGU6IHN0cmluZyk6IFByb21pc2U8RGF0ZSB8IG51bGw+IHtcclxuICAgIHJldHVybiBkYi5vbmVPck5vbmUoXCJzZWxlY3QgdXBkYXRlZF90aW1lIGFzIHVwZGF0ZWQgZnJvbSB1cGRhdGVkX3RpbWVzdGFtcCB3aGVyZSB1cGRhdGVkX25hbWU9JChkYXRhdHlwZSlcIiwge1xyXG4gICAgICAgIGRhdGF0eXBlOiBkYXRhdHlwZSxcclxuICAgIH0sICh4OiBVcGRhdGVkVGltZXN0YW1wKSA9PiB4Py51cGRhdGVkIHx8IG51bGwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVXBkYXRlZFRpbWVzdGFtcChkYjogRFREYXRhYmFzZSB8IERUVHJhbnNhY3Rpb24sIGRhdGF0eXBlOiBzdHJpbmcsIGRhdGU6IERhdGUsIGJ5ID0gJycpOiBQcm9taXNlPG51bGw+IHtcclxuICAgIHJldHVybiBkYi5ub25lKGBpbnNlcnQgaW50byB1cGRhdGVkX3RpbWVzdGFtcCh1cGRhdGVkX25hbWUsIHVwZGF0ZWRfdGltZSwgdXBkYXRlZF9ieSlcclxudmFsdWVzKCQoZGF0YXR5cGUpLCAkKGRhdGUpLCAkKGJ5KSlcclxub24gY29uZmxpY3QgKHVwZGF0ZWRfbmFtZSlcclxuZG8gdXBkYXRlIHNldCB1cGRhdGVkX3RpbWUgPSAkKGRhdGUpLCB1cGRhdGVkX2J5ID0gJChieSlgLFxyXG4gICAgeyBkYXRlLCBkYXRhdHlwZSwgYnkgfSk7XHJcbn1cclxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFyaW5lL2lkX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLFVBQVUsQ0FBQyxHQUFXO0lBQ2xDLE9BQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQVMsa0JBQWtCLENBQUMsR0FBVztJQUNuQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdJLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixHQUFHLEVBQUUsS0FBSyxVQUFVLENBQUM7SUFDekQsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDekU7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLElBQVk7SUFDcEMsT0FBTyxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUM7QUFDbEQsQ0FBQztBQUZELGtDQUVDO0FBRUQsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBRXRDLFNBQWdCLGFBQWEsQ0FBQyxNQUFjO0lBQ3hDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRkQsc0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaXNWYWxpZElNTyhpbW86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbW8gPj0gMTAwMDAwMCAmJiBpbW8gPD0gOTk5OTk5OSAmJiBpbW9DaGVja3N1bUlzVmFsaWQoaW1vKTtcbn1cblxuZnVuY3Rpb24gaW1vQ2hlY2tzdW1Jc1ZhbGlkKGltbzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW1vU3RyID0gaW1vLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaW1vRGlnaXQxID0gTnVtYmVyKGltb1N0clswXSk7XG4gICAgY29uc3QgaW1vRGlnaXQyID0gTnVtYmVyKGltb1N0clsxXSk7XG4gICAgY29uc3QgaW1vRGlnaXQzID0gTnVtYmVyKGltb1N0clsyXSk7XG4gICAgY29uc3QgaW1vRGlnaXQ0ID0gTnVtYmVyKGltb1N0clszXSk7XG4gICAgY29uc3QgaW1vRGlnaXQ1ID0gTnVtYmVyKGltb1N0cls0XSk7XG4gICAgY29uc3QgaW1vRGlnaXQ2ID0gTnVtYmVyKGltb1N0cls1XSk7XG4gICAgY29uc3QgY2hlY2tEaWdpdCA9IE51bWJlcihpbW9TdHJbNl0pO1xuICAgIGNvbnN0IGNoZWNrQ2FsY3VsYXRpb24gPSBOdW1iZXIoKChpbW9EaWdpdDEgKiA3KSArIChpbW9EaWdpdDIgKiA2KSArIChpbW9EaWdpdDMgKiA1KSArIChpbW9EaWdpdDQgKiA0KSArIChpbW9EaWdpdDUgKiAzKSArIChpbW9EaWdpdDYgKiAyKSkpO1xuICAgIGNvbnN0IGNoZWNrUmVzdWx0ID0gY2hlY2tDYWxjdWxhdGlvbiAlIDEwID09PSBjaGVja0RpZ2l0O1xuICAgIGlmICghY2hlY2tSZXN1bHQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdtZXRob2Q9aW1vQ2hlY2tzdW1Jc1ZhbGlkIElNTyBjaGVja3N1bSBmYWlsZWQgJWQnLCBpbW8pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tSZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTU1TSShtbXNpOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbW1zaSA+PSAxMDAwMDAwMDAgJiYgbW1zaSA8PSA5OTk5OTk5OTk7XG59XG5cbmNvbnN0IExvY29kZVBhdHRlcm4gPSAvXkZJW0EtWl17M30kL2k7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTE9DT0RFKGxvY29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY29kZVBhdHRlcm4udGVzdChsb2NvZGUpO1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnR6LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hcmluZS9ydHoudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFJ0elBvc2l0aW9uQ29vcmRpbmF0ZSA9IHtcbiAgICByZWFkb25seSAkOiB7XG4gICAgICAgIHJlYWRvbmx5IGxhdDogbnVtYmVyXG4gICAgICAgIHJlYWRvbmx5IGxvbjogbnVtYmVyXG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBSdHpXYXlwb2ludFBvc2l0aW9uID0ge1xuICAgIHJlYWRvbmx5IHBvc2l0aW9uOiBSdHpQb3NpdGlvbkNvb3JkaW5hdGVbXVxufVxuXG5leHBvcnQgdHlwZSBSdHpXYXlwb2ludCA9IHtcbiAgICByZWFkb25seSB3YXlwb2ludDogUnR6V2F5cG9pbnRQb3NpdGlvbltdXG59XG5cbmV4cG9ydCB0eXBlIFJ0elNjaGVkdWxlRWxlbWVudCA9IHtcbiAgICByZWFkb25seSAkOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEYXRlXG4gICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBldGQ/OiBzdHJpbmdcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERhdGVcbiAgICAgICAgICovXG4gICAgICAgIHJlYWRvbmx5IGV0YT86IHN0cmluZ1xuICAgIH0sXG59XG5cbmV4cG9ydCB0eXBlIFJ0elNjaGVkdWxlID0ge1xuICAgIHJlYWRvbmx5IHNjaGVkdWxlRWxlbWVudDogUnR6U2NoZWR1bGVFbGVtZW50W11cbn1cblxuZXhwb3J0IHR5cGUgUnR6U2NoZWR1bGVXcmFwcGVyID0ge1xuICAgIHJlYWRvbmx5IG1hbnVhbD86IFJ0elNjaGVkdWxlW11cbiAgICByZWFkb25seSBjYWxjdWxhdGVkPzogUnR6U2NoZWR1bGVbXVxufVxuXG5leHBvcnQgdHlwZSBSdHpTY2hlZHVsZXMgPSB7XG4gICAgcmVhZG9ubHkgc2NoZWR1bGU6IFJ0elNjaGVkdWxlV3JhcHBlcltdXG59XG5cbmV4cG9ydCB0eXBlIFJ0elJvdXRlSW5mbyA9IHtcbiAgICByZWFkb25seSAkOiB7XG4gICAgICAgIHJlYWRvbmx5IHZlc3NlbE1NU0k6IHN0cmluZ1xuICAgICAgICByZWFkb25seSB2ZXNzZWxJTU86IHN0cmluZ1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUnR6Um91dGUgPSB7XG4gICAgcmVhZG9ubHkgcm91dGVJbmZvOiBSdHpSb3V0ZUluZm9bXVxuICAgIHJlYWRvbmx5IHdheXBvaW50czogUnR6V2F5cG9pbnRbXVxuICAgIHJlYWRvbmx5IHNjaGVkdWxlczogUnR6U2NoZWR1bGVzW11cbn1cblxuZXhwb3J0IHR5cGUgUnR6Vm95YWdlUGxhbiA9IHtcbiAgICByZWFkb25seSByb3V0ZTogUnR6Um91dGVcbn1cbiJdfQ==
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * A simple asserter-class for writing canaries without dependency to testing-libraries.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Asserter = void 0;
7
+ class Asserter {
8
+ static assertEquals(value, expected) {
9
+ if (value != expected) {
10
+ throw new Error(`Given value ${value} was not expected ${expected}`);
11
+ }
12
+ }
13
+ static assertTrue(value) {
14
+ if (!value) {
15
+ throw new Error(`Given value ${value} was not true`);
16
+ }
17
+ }
18
+ static assertLength(data, expected) {
19
+ if (!data) {
20
+ throw new Error("Given array was not defined");
21
+ }
22
+ if (data.length != expected) {
23
+ throw new Error(`Given array length ${data.length} was not expected ${expected}`);
24
+ }
25
+ }
26
+ static assertLengthGreaterThan(data, expected) {
27
+ if (!data) {
28
+ throw new Error("Given array was not defined");
29
+ }
30
+ if (data.length <= expected) {
31
+ throw new Error(`Given array length ${data.length} was not greater than ${expected}`);
32
+ }
33
+ }
34
+ static assertGreaterThan(value, expected) {
35
+ if (value <= expected) {
36
+ throw new Error(`Value ${value} was expected to be greater than ${expected}`);
37
+ }
38
+ }
39
+ static assertToBeCloseTo(value, expected, delta) {
40
+ expect(expected - value).toBeGreaterThanOrEqual(-1 * delta);
41
+ expect(expected - value).toBeLessThanOrEqual(delta);
42
+ }
43
+ }
44
+ exports.Asserter = Asserter;
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC9hc3NlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILE1BQXNCLFFBQVE7SUFDMUIsTUFBTSxDQUFDLFlBQVksQ0FBSSxLQUFRLEVBQUUsUUFBVztRQUN4QyxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEtBQUsscUJBQXFCLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDeEU7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBSSxLQUFRO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsQ0FBQztTQUN4RDtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFJLElBQVMsRUFBRSxRQUFnQjtRQUM5QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixJQUFJLENBQUMsTUFBTSxxQkFBcUIsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNyRjtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQUksSUFBUyxFQUFFLFFBQWdCO1FBQ3pELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLElBQUksQ0FBQyxNQUFNLHlCQUF5QixRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3pGO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDcEQsSUFBSSxLQUFLLElBQUksUUFBUSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLG9DQUFvQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxLQUFhO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLEdBQUMsS0FBSyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLFFBQVEsR0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0o7QUEzQ0QsNEJBMkNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHNpbXBsZSBhc3NlcnRlci1jbGFzcyBmb3Igd3JpdGluZyBjYW5hcmllcyB3aXRob3V0IGRlcGVuZGVuY3kgdG8gdGVzdGluZy1saWJyYXJpZXMuXG4gKi9cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFzc2VydGVyIHtcbiAgICBzdGF0aWMgYXNzZXJ0RXF1YWxzPFQ+KHZhbHVlOiBULCBleHBlY3RlZDogVCkge1xuICAgICAgICBpZiAodmFsdWUgIT0gZXhwZWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR2l2ZW4gdmFsdWUgJHt2YWx1ZX0gd2FzIG5vdCBleHBlY3RlZCAke2V4cGVjdGVkfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzc2VydFRydWU8VD4odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHaXZlbiB2YWx1ZSAke3ZhbHVlfSB3YXMgbm90IHRydWVgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3NlcnRMZW5ndGg8VD4oZGF0YTogVFtdLCBleHBlY3RlZDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2l2ZW4gYXJyYXkgd2FzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoICE9IGV4cGVjdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdpdmVuIGFycmF5IGxlbmd0aCAke2RhdGEubGVuZ3RofSB3YXMgbm90IGV4cGVjdGVkICR7ZXhwZWN0ZWR9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXNzZXJ0TGVuZ3RoR3JlYXRlclRoYW48VD4oZGF0YTogVFtdLCBleHBlY3RlZDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2l2ZW4gYXJyYXkgd2FzIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDw9IGV4cGVjdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdpdmVuIGFycmF5IGxlbmd0aCAke2RhdGEubGVuZ3RofSB3YXMgbm90IGdyZWF0ZXIgdGhhbiAke2V4cGVjdGVkfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzc2VydEdyZWF0ZXJUaGFuKHZhbHVlOiBudW1iZXIsIGV4cGVjdGVkOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlIDw9IGV4cGVjdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlICR7dmFsdWV9IHdhcyBleHBlY3RlZCB0byBiZSBncmVhdGVyIHRoYW4gJHtleHBlY3RlZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3NlcnRUb0JlQ2xvc2VUbyh2YWx1ZTogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCBkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGV4cGVjdChleHBlY3RlZC12YWx1ZSkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgtMSAqIGRlbHRhKTtcbiAgICAgICAgZXhwZWN0KGV4cGVjdGVkLXZhbHVlKS50b0JlTGVzc1RoYW5PckVxdWFsKGRlbHRhKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dbTestBase = void 0;
4
+ const database_1 = require("../database/database");
5
+ const dbsecret_1 = require("../aws/runtime/secrets/dbsecret");
6
+ function dbTestBase(fn, truncateFn, dbUser, dbPass, dbUri) {
7
+ const theDbUri = process.env.DB_URI ?? dbUri;
8
+ console.log(`Test database URI: ${theDbUri}`);
9
+ return () => {
10
+ const db = (0, database_1.initDbConnection)(dbUser, dbPass, 'test', theDbUri, {
11
+ noWarnings: true, // ignore duplicate connection warning for tests
12
+ });
13
+ beforeAll(async () => {
14
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_USER] = dbUser;
15
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_PASS] = dbPass;
16
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_URI] = theDbUri;
17
+ process.env[dbsecret_1.DatabaseEnvironmentKeys.DB_RO_URI] = theDbUri;
18
+ await truncateFn(db);
19
+ });
20
+ afterAll(async () => {
21
+ await truncateFn(db);
22
+ await db.$pool.end();
23
+ });
24
+ beforeEach(async () => {
25
+ await truncateFn(db);
26
+ });
27
+ fn(db);
28
+ };
29
+ }
30
+ exports.dbTestBase = dbTestBase;
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItdGVzdHV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3QvZGItdGVzdHV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFrRTtBQUNsRSw4REFBd0U7QUFFeEUsU0FBZ0IsVUFBVSxDQUN0QixFQUE0QixFQUM1QixVQUFvQyxFQUNwQyxNQUFjLEVBQ2QsTUFBYyxFQUNkLEtBQWE7SUFHYixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7SUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUU5QyxPQUFPLEdBQUcsRUFBRTtRQUNSLE1BQU0sRUFBRSxHQUFlLElBQUEsMkJBQWdCLEVBQ25DLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtZQUM5QixVQUFVLEVBQUUsSUFBSSxFQUFFLGdEQUFnRDtTQUNyRSxDQUNKLENBQUM7UUFFRixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBdUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDMUQsTUFBTSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDaEIsTUFBTSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2xCLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQXJDRCxnQ0FxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RURGF0YWJhc2UsIGluaXREYkNvbm5lY3Rpb259IGZyb20gXCIuLi9kYXRhYmFzZS9kYXRhYmFzZVwiO1xuaW1wb3J0IHtEYXRhYmFzZUVudmlyb25tZW50S2V5c30gZnJvbSBcIi4uL2F3cy9ydW50aW1lL3NlY3JldHMvZGJzZWNyZXRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGRiVGVzdEJhc2UoXG4gICAgZm46IChkYjogRFREYXRhYmFzZSkgPT4gdm9pZCxcbiAgICB0cnVuY2F0ZUZuOiAoZGI6IERURGF0YWJhc2UpID0+IHZvaWQsXG4gICAgZGJVc2VyOiBzdHJpbmcsXG4gICAgZGJQYXNzOiBzdHJpbmcsXG4gICAgZGJVcmk6IHN0cmluZyxcbik6ICgpID0+IHZvaWQge1xuXG4gICAgY29uc3QgdGhlRGJVcmkgPSBwcm9jZXNzLmVudi5EQl9VUkkgPz8gZGJVcmk7XG4gICAgY29uc29sZS5sb2coYFRlc3QgZGF0YWJhc2UgVVJJOiAke3RoZURiVXJpfWApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgZGI6IERURGF0YWJhc2UgPSBpbml0RGJDb25uZWN0aW9uKFxuICAgICAgICAgICAgZGJVc2VyLCBkYlBhc3MsICd0ZXN0JywgdGhlRGJVcmksIHtcbiAgICAgICAgICAgICAgICBub1dhcm5pbmdzOiB0cnVlLCAvLyBpZ25vcmUgZHVwbGljYXRlIGNvbm5lY3Rpb24gd2FybmluZyBmb3IgdGVzdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52W0RhdGFiYXNlRW52aXJvbm1lbnRLZXlzLkRCX1VTRVJdID0gZGJVc2VyO1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnZbRGF0YWJhc2VFbnZpcm9ubWVudEtleXMuREJfUEFTU10gPSBkYlBhc3M7XG4gICAgICAgICAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9VUkldID0gdGhlRGJVcmk7XG4gICAgICAgICAgICBwcm9jZXNzLmVudltEYXRhYmFzZUVudmlyb25tZW50S2V5cy5EQl9ST19VUkldID0gdGhlRGJVcmk7XG4gICAgICAgICAgICBhd2FpdCB0cnVuY2F0ZUZuKGRiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJBbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdHJ1bmNhdGVGbihkYik7XG4gICAgICAgICAgICBhd2FpdCBkYi4kcG9vbC5lbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0cnVuY2F0ZUZuKGRiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm4oZGIpO1xuICAgIH07XG59XG4iXX0=
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestHttpServer = exports.ERRORCODE_NOT_FOUND = exports.ERROR_NO_MATCH = void 0;
4
+ const http_1 = require("http");
5
+ exports.ERROR_NO_MATCH = "NO MATCH";
6
+ exports.ERRORCODE_NOT_FOUND = 404;
7
+ /**
8
+ * A mock HTTP server created for testing connections from a Lambda to an outside integration
9
+ */
10
+ class TestHttpServer {
11
+ getCallCount() {
12
+ return this.messageStack.length;
13
+ }
14
+ getRequestBody(callNumber) {
15
+ return this.messageStack[callNumber];
16
+ }
17
+ listen(port, props, debug = false, statusCode = 200) {
18
+ this.debug = debug;
19
+ this.messageStack = [];
20
+ this.debuglog(`Starting test server on port ${port}`);
21
+ this.server = (0, http_1.createServer)(((req, res) => {
22
+ this.debuglog('Mapped urls: ');
23
+ Object.keys(props).forEach(k => this.debuglog(k));
24
+ this.debuglog('Received request to url ' + req.url + '..');
25
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
26
+ const path = require('url').parse(req.url).pathname;
27
+ let dataStr = '';
28
+ req.on('data', chunk => {
29
+ if (chunk) {
30
+ dataStr += chunk;
31
+ }
32
+ });
33
+ if (path in props) {
34
+ this.debuglog('..url matched');
35
+ res.setHeader('Access-Control-Allow-Origin', '*');
36
+ res.setHeader('Access-Control-Allow-Headers', 'Authorization,X-User-Id,X-Auth-Token');
37
+ res.writeHead(statusCode);
38
+ req.on('end', () => {
39
+ // assume sent data is in JSON format
40
+ this.messageStack[this.messageStack.length] = dataStr;
41
+ res.end(props[path](req.url, dataStr));
42
+ });
43
+ }
44
+ else {
45
+ this.debuglog('..no match for %' + path);
46
+ req.on('end', () => {
47
+ // assume sent data is in JSON format
48
+ this.messageStack[this.messageStack.length] = exports.ERROR_NO_MATCH;
49
+ res.writeHead(exports.ERRORCODE_NOT_FOUND);
50
+ res.end(exports.ERROR_NO_MATCH);
51
+ });
52
+ }
53
+ }));
54
+ this.server.listen(port);
55
+ }
56
+ close() {
57
+ this.debuglog('Closing test server');
58
+ this.server.close();
59
+ }
60
+ debuglog(str) {
61
+ if (this.debug) {
62
+ console.debug(str);
63
+ }
64
+ }
65
+ }
66
+ exports.TestHttpServer = TestHttpServer;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0L2h0dHBzZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQTBDO0FBRTdCLFFBQUEsY0FBYyxHQUFDLFVBQVUsQ0FBQztBQUMxQixRQUFBLG1CQUFtQixHQUFDLEdBQUcsQ0FBQztBQUVyQzs7R0FFRztBQUNILE1BQWEsY0FBYztJQU12QixZQUFZO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQWtCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVksRUFBRSxLQUF1QixFQUFFLEtBQUssR0FBRSxLQUFLLEVBQUUsVUFBVSxHQUFHLEdBQUc7UUFDeEUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUEsbUJBQVksRUFBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzNELDhEQUE4RDtZQUM5RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFFcEQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNuQixJQUFJLEtBQUssRUFBRTtvQkFDUCxPQUFPLElBQUksS0FBSyxDQUFDO2lCQUNwQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQy9CLEdBQUcsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xELEdBQUcsQ0FBQyxTQUFTLENBQUMsOEJBQThCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztnQkFDdEYsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFMUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO29CQUNmLHFDQUFxQztvQkFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDdEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNILElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDZixxQ0FBcUM7b0JBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxzQkFBYyxDQUFDO29CQUM3RCxHQUFHLENBQUMsU0FBUyxDQUFDLDJCQUFtQixDQUFDLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxHQUFHLENBQUMsc0JBQWMsQ0FBQyxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFXO1FBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEI7SUFDTCxDQUFDO0NBQ0o7QUFuRUQsd0NBbUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2ZXIsIGNyZWF0ZVNlcnZlcn0gZnJvbSAnaHR0cCc7XHJcblxyXG5leHBvcnQgY29uc3QgRVJST1JfTk9fTUFUQ0g9XCJOTyBNQVRDSFwiO1xyXG5leHBvcnQgY29uc3QgRVJST1JDT0RFX05PVF9GT1VORD00MDQ7XHJcblxyXG4vKipcclxuICogQSBtb2NrIEhUVFAgc2VydmVyIGNyZWF0ZWQgZm9yIHRlc3RpbmcgY29ubmVjdGlvbnMgZnJvbSBhIExhbWJkYSB0byBhbiBvdXRzaWRlIGludGVncmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVGVzdEh0dHBTZXJ2ZXIge1xyXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IFNlcnZlcjtcclxuICAgIHByaXZhdGUgZGVidWc6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU3RhY2s6IHN0cmluZ1tdO1xyXG5cclxuICAgIGdldENhbGxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTdGFjay5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVxdWVzdEJvZHkoY2FsbE51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3RhY2tbY2FsbE51bWJlcl07XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGVuKHBvcnQ6IG51bWJlciwgcHJvcHM6IExpc3RlblByb3BlcnRpZXMsIGRlYnVnPSBmYWxzZSwgc3RhdHVzQ29kZSA9IDIwMCkge1xyXG4gICAgICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTdGFjayA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGVidWdsb2coYFN0YXJ0aW5nIHRlc3Qgc2VydmVyIG9uIHBvcnQgJHtwb3J0fWApO1xyXG4gICAgICAgIHRoaXMuc2VydmVyID0gY3JlYXRlU2VydmVyKCgocmVxLCByZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZygnTWFwcGVkIHVybHM6ICcpO1xyXG5cclxuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goayA9PiB0aGlzLmRlYnVnbG9nKGspKTtcclxuICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZygnUmVjZWl2ZWQgcmVxdWVzdCB0byB1cmwgJyArIHJlcS51cmwgKyAnLi4nKTtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuICAgICAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlKHJlcS51cmwpLnBhdGhuYW1lO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGFTdHIgPSAnJztcclxuICAgICAgICAgICAgcmVxLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVN0ciArPSBjaHVuaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGF0aCBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZygnLi51cmwgbWF0Y2hlZCcpO1xyXG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTtcclxuICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnQXV0aG9yaXphdGlvbixYLVVzZXItSWQsWC1BdXRoLVRva2VuJyk7XHJcbiAgICAgICAgICAgICAgICByZXMud3JpdGVIZWFkKHN0YXR1c0NvZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlcS5vbignZW5kJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSBzZW50IGRhdGEgaXMgaW4gSlNPTiBmb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTdGFja1t0aGlzLm1lc3NhZ2VTdGFjay5sZW5ndGhdID0gZGF0YVN0cjtcclxuICAgICAgICAgICAgICAgICAgICByZXMuZW5kKHByb3BzW3BhdGhdKHJlcS51cmwsIGRhdGFTdHIpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZygnLi5ubyBtYXRjaCBmb3IgJScgKyBwYXRoKTtcclxuICAgICAgICAgICAgICAgIHJlcS5vbignZW5kJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSBzZW50IGRhdGEgaXMgaW4gSlNPTiBmb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTdGFja1t0aGlzLm1lc3NhZ2VTdGFjay5sZW5ndGhdID0gRVJST1JfTk9fTUFUQ0g7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlSGVhZChFUlJPUkNPREVfTk9UX0ZPVU5EKTtcclxuICAgICAgICAgICAgICAgICAgICByZXMuZW5kKEVSUk9SX05PX01BVENIKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuc2VydmVyLmxpc3Rlbihwb3J0KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLmRlYnVnbG9nKCdDbG9zaW5nIHRlc3Qgc2VydmVyJyk7XHJcbiAgICAgICAgdGhpcy5zZXJ2ZXIuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlYnVnbG9nKHN0cjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhzdHIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5Qcm9wZXJ0aWVzIHtcclxuICAgIFtrZXk6c3RyaW5nXTogKHVybD86IHN0cmluZywgZGF0YT86IHN0cmluZykgPT4gc3RyaW5nO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEmptySecretFunction = exports.createSecretFunction = void 0;
4
+ const EMPTY_DB_SECRET = {
5
+ username: '',
6
+ password: '',
7
+ host: '',
8
+ // eslint-disable-next-line camelcase
9
+ ro_host: '',
10
+ };
11
+ function createSecretFunction(secret) {
12
+ // eslint-disable-next-line require-await
13
+ return async (secretId, fn) => {
14
+ return fn(secret);
15
+ };
16
+ }
17
+ exports.createSecretFunction = createSecretFunction;
18
+ function createEmptySecretFunction() {
19
+ // eslint-disable-next-line require-await
20
+ return async (secretId, fn) => {
21
+ return fn(EMPTY_DB_SECRET);
22
+ };
23
+ }
24
+ exports.createEmptySecretFunction = createEmptySecretFunction;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3Qvc2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQU0sZUFBZSxHQUFhO0lBQzlCLFFBQVEsRUFBRSxFQUFFO0lBQ1osUUFBUSxFQUFFLEVBQUU7SUFDWixJQUFJLEVBQUUsRUFBRTtJQUNSLHFDQUFxQztJQUNyQyxPQUFPLEVBQUUsRUFBRTtDQUNkLENBQUM7QUFFRixTQUFnQixvQkFBb0IsQ0FBbUIsTUFBYztJQUNqRSx5Q0FBeUM7SUFDekMsT0FBTyxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxFQUE2QyxFQUFFLEVBQUU7UUFDN0UsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUxELG9EQUtDO0FBRUQsU0FBZ0IseUJBQXlCO0lBQ3JDLHlDQUF5QztJQUN6QyxPQUFPLEtBQUssRUFBRSxRQUFnQixFQUFFLEVBQStDLEVBQUUsRUFBRTtRQUMvRSxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQUM7QUFDTixDQUFDO0FBTEQsOERBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RiU2VjcmV0LCBFbXB0eVNlY3JldEZ1bmN0aW9uLCBTZWNyZXRGdW5jdGlvbiwgU2VjcmV0VG9Qcm9taXNlRnVuY3Rpb259IGZyb20gXCIuLi9hd3MvcnVudGltZS9zZWNyZXRzL2Ric2VjcmV0XCI7XG5cbmNvbnN0IEVNUFRZX0RCX1NFQ1JFVDogRGJTZWNyZXQgPSB7XG4gICAgdXNlcm5hbWU6ICcnLFxuICAgIHBhc3N3b3JkOiAnJyxcbiAgICBob3N0OiAnJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gICAgcm9faG9zdDogJycsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VjcmV0RnVuY3Rpb248U2VjcmV0LCBSZXNwb25zZT4oc2VjcmV0OiBTZWNyZXQpOiBTZWNyZXRGdW5jdGlvbjxTZWNyZXQsIFJlc3BvbnNlPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICByZXR1cm4gYXN5bmMgKHNlY3JldElkOiBzdHJpbmcsIGZuOiBTZWNyZXRUb1Byb21pc2VGdW5jdGlvbjxTZWNyZXQsIFJlc3BvbnNlPikgPT4ge1xuICAgICAgICByZXR1cm4gZm4oc2VjcmV0KTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlTZWNyZXRGdW5jdGlvbjxSZXNwb25zZT4oKTogRW1wdHlTZWNyZXRGdW5jdGlvbjxSZXNwb25zZT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgcmV0dXJuIGFzeW5jIChzZWNyZXRJZDogc3RyaW5nLCBmbjogU2VjcmV0VG9Qcm9taXNlRnVuY3Rpb248RGJTZWNyZXQsIFJlc3BvbnNlPikgPT4ge1xuICAgICAgICByZXR1cm4gZm4oRU1QVFlfREJfU0VDUkVUKTtcbiAgICB9O1xufVxuIl19
@@ -0,0 +1,59 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.mockSecret = exports.stubSecretsManager = void 0;
27
+ const AWS = require("aws-sdk");
28
+ const sinon = __importStar(require("sinon"));
29
+ const secretValue = sinon.stub();
30
+ /**
31
+ * Stub Secrets Manager for tests. You must call this
32
+ * before you instantiate Secrets Manager(this might happen when you import the function that uses Secrets Manager).
33
+ *
34
+ * To mock the actual secret, call mockSecret()
35
+ */
36
+ function stubSecretsManager() {
37
+ const smStub = {
38
+ getSecretValue: secretValue,
39
+ };
40
+ sinon.stub(AWS, 'SecretsManager').returns(smStub);
41
+ return smStub.getSecretValue;
42
+ }
43
+ exports.stubSecretsManager = stubSecretsManager;
44
+ function mockSecret(secret) {
45
+ if (!secret) {
46
+ secretValue.returns({
47
+ promise: sinon.stub().returns({}),
48
+ });
49
+ }
50
+ else {
51
+ secretValue.returns({
52
+ promise: sinon.stub().returns({
53
+ SecretString: JSON.stringify(secret),
54
+ }),
55
+ });
56
+ }
57
+ }
58
+ exports.mockSecret = mockSecret;
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3Qvc2VjcmV0cy1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQWdDO0FBQ2hDLDZDQUErQjtBQUUvQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFFakM7Ozs7O0dBS0c7QUFDSCxTQUFnQixrQkFBa0I7SUFDOUIsTUFBTSxNQUFNLEdBQUc7UUFDWCxjQUFjLEVBQUUsV0FBVztLQUM5QixDQUFDO0lBRUYsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbEQsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ2pDLENBQUM7QUFSRCxnREFRQztBQUVELFNBQWdCLFVBQVUsQ0FBUyxNQUFjO0lBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDVCxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNwQyxDQUFDLENBQUM7S0FDTjtTQUFNO1FBQ0gsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFDMUIsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2FBQ3ZDLENBQUM7U0FDTCxDQUFDLENBQUM7S0FDTjtBQUNMLENBQUM7QUFaRCxnQ0FZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBV1MgPSByZXF1aXJlKCdhd3Mtc2RrJyk7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tIFwic2lub25cIjtcblxuY29uc3Qgc2VjcmV0VmFsdWUgPSBzaW5vbi5zdHViKCk7XG5cbi8qKlxuICogU3R1YiBTZWNyZXRzIE1hbmFnZXIgZm9yIHRlc3RzLiAgWW91IG11c3QgY2FsbCB0aGlzXG4gKiBiZWZvcmUgeW91IGluc3RhbnRpYXRlIFNlY3JldHMgTWFuYWdlcih0aGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHlvdSBpbXBvcnQgdGhlIGZ1bmN0aW9uIHRoYXQgdXNlcyBTZWNyZXRzIE1hbmFnZXIpLlxuICpcbiAqIFRvIG1vY2sgdGhlIGFjdHVhbCBzZWNyZXQsIGNhbGwgbW9ja1NlY3JldCgpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHViU2VjcmV0c01hbmFnZXIoKSB7XG4gICAgY29uc3Qgc21TdHViID0ge1xuICAgICAgICBnZXRTZWNyZXRWYWx1ZTogc2VjcmV0VmFsdWUsXG4gICAgfTtcblxuICAgIHNpbm9uLnN0dWIoQVdTLCAnU2VjcmV0c01hbmFnZXInKS5yZXR1cm5zKHNtU3R1Yik7XG5cbiAgICByZXR1cm4gc21TdHViLmdldFNlY3JldFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlY3JldDxTZWNyZXQ+KHNlY3JldDogU2VjcmV0KSB7XG4gICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgc2VjcmV0VmFsdWUucmV0dXJucyh7XG4gICAgICAgICAgICBwcm9taXNlOiBzaW5vbi5zdHViKCkucmV0dXJucyh7fSksXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY3JldFZhbHVlLnJldHVybnMoe1xuICAgICAgICAgICAgcHJvbWlzZTogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgICAgICAgIFNlY3JldFN0cmluZzogSlNPTi5zdHJpbmdpZnkoc2VjcmV0KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shuffle = exports.randomBoolean = exports.getRandomBigInt = exports.getRandomIntegerAsString = exports.getRandomInteger = exports.getRandomNumberAsString = exports.getRandomNumber = exports.randomString = void 0;
4
+ function randomString() {
5
+ return Math.random().toString(36).substring(2);
6
+ }
7
+ exports.randomString = randomString;
8
+ function getRandomNumber(min, max) {
9
+ return Math.random() * (max - min) + min;
10
+ }
11
+ exports.getRandomNumber = getRandomNumber;
12
+ function getRandomNumberAsString(min, max) {
13
+ return getRandomNumber(min, max).toString();
14
+ }
15
+ exports.getRandomNumberAsString = getRandomNumberAsString;
16
+ function getRandomInteger(min, max) {
17
+ return Math.round(getRandomNumber(min, max));
18
+ }
19
+ exports.getRandomInteger = getRandomInteger;
20
+ function getRandomIntegerAsString(min, max) {
21
+ return Math.round(getRandomInteger(min, max)).toString();
22
+ }
23
+ exports.getRandomIntegerAsString = getRandomIntegerAsString;
24
+ function getRandomBigInt(min, max) {
25
+ return BigInt(getRandomInteger(min, max));
26
+ }
27
+ exports.getRandomBigInt = getRandomBigInt;
28
+ function randomBoolean() {
29
+ return Math.random() < 0.5;
30
+ }
31
+ exports.randomBoolean = randomBoolean;
32
+ /**
33
+ * Returns a new copy of an array, shuffled using Math.random()
34
+ * @param array Array
35
+ */
36
+ function shuffle(array) {
37
+ // pretty fast way to copy an array, not necessarily the fastest
38
+ const newArray = array.slice(0);
39
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
40
+ newArray.sort((x) => 0.5 - Math.random());
41
+ return newArray;
42
+ }
43
+ exports.shuffle = shuffle;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3QvdGVzdHV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLFlBQVk7SUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRkQsb0NBRUM7QUFFRCxTQUFnQixlQUFlLENBQUMsR0FBVyxFQUFHLEdBQVc7SUFDckQsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLENBQUM7QUFGRCwwQ0FFQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLEdBQVcsRUFBRyxHQUFXO0lBQzdELE9BQU8sZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoRCxDQUFDO0FBRkQsMERBRUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUFXLEVBQUcsR0FBVztJQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLHdCQUF3QixDQUFDLEdBQVcsRUFBRyxHQUFXO0lBQzlELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM3RCxDQUFDO0FBRkQsNERBRUM7QUFFRCxTQUFnQixlQUFlLENBQUMsR0FBVyxFQUFHLEdBQVc7SUFDckQsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUZELDBDQUVDO0FBRUQsU0FBZ0IsYUFBYTtJQUN6QixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDL0IsQ0FBQztBQUZELHNDQUVDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsT0FBTyxDQUFJLEtBQVU7SUFDakMsZ0VBQWdFO0lBQ2hFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsNkRBQTZEO0lBQzdELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBTkQsMEJBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkgOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21OdW1iZXIobWluOiBudW1iZXIgLCBtYXg6IG51bWJlcikgOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21OdW1iZXJBc1N0cmluZyhtaW46IG51bWJlciAsIG1heDogbnVtYmVyKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldFJhbmRvbU51bWJlcihtaW4sIG1heCkudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbUludGVnZXIobWluOiBudW1iZXIgLCBtYXg6IG51bWJlcikgOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGdldFJhbmRvbU51bWJlcihtaW4sIG1heCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tSW50ZWdlckFzU3RyaW5nKG1pbjogbnVtYmVyICwgbWF4OiBudW1iZXIpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChnZXRSYW5kb21JbnRlZ2VyKG1pbiwgbWF4KSkudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbUJpZ0ludChtaW46IG51bWJlciAsIG1heDogbnVtYmVyKSA6IGJpZ2ludCB7XG4gICAgcmV0dXJuIEJpZ0ludChnZXRSYW5kb21JbnRlZ2VyKG1pbiwgbWF4KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21Cb29sZWFuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgMC41O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgY29weSBvZiBhbiBhcnJheSwgc2h1ZmZsZWQgdXNpbmcgTWF0aC5yYW5kb20oKVxuICogQHBhcmFtIGFycmF5IEFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlPFQ+KGFycmF5OiBUW10pOiBUW10ge1xuICAgIC8vIHByZXR0eSBmYXN0IHdheSB0byBjb3B5IGFuIGFycmF5LCBub3QgbmVjZXNzYXJpbHkgdGhlIGZhc3Rlc3RcbiAgICBjb25zdCBuZXdBcnJheSA9IGFycmF5LnNsaWNlKDApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBuZXdBcnJheS5zb3J0KCh4KSA9PiAwLjUgLSBNYXRoLnJhbmRvbSgpKTtcbiAgICByZXR1cm4gbmV3QXJyYXk7XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InputError = void 0;
4
+ class InputError extends Error {
5
+ }
6
+ exports.InputError = InputError;
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvaW5wdXQtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxVQUFXLFNBQVEsS0FBSztDQUNwQztBQURELGdDQUNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIElucHV0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Language = void 0;
4
+ var Language;
5
+ (function (Language) {
6
+ Language["FI"] = "fi";
7
+ Language["EN"] = "en";
8
+ Language["SV"] = "sv";
9
+ })(Language = exports.Language || (exports.Language = {}));
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvbGFuZ3VhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxRQUVYO0FBRkQsV0FBWSxRQUFRO0lBQ2hCLHFCQUFTLENBQUE7SUFBRSxxQkFBUyxDQUFBO0lBQUUscUJBQVMsQ0FBQTtBQUNuQyxDQUFDLEVBRlcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFFbkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBMYW5ndWFnZSB7XHJcbiAgICBGSSA9ICdmaScsIEVOID0gJ2VuJywgU1YgPSAnc3YnXHJcbn1cclxuIl19
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrafficType = void 0;
4
+ var TrafficType;
5
+ (function (TrafficType) {
6
+ TrafficType["ROAD"] = "Road";
7
+ TrafficType["MARINE"] = "Marine";
8
+ TrafficType["RAIL"] = "Rail";
9
+ TrafficType["AVIATION"] = "Aviation";
10
+ TrafficType["MCP"] = "MCP";
11
+ TrafficType["OTHER"] = "Other";
12
+ })(TrafficType = exports.TrafficType || (exports.TrafficType = {}));
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZmZpY3R5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvdHJhZmZpY3R5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxXQU9YO0FBUEQsV0FBWSxXQUFXO0lBQ25CLDRCQUFhLENBQUE7SUFDYixnQ0FBaUIsQ0FBQTtJQUNqQiw0QkFBYSxDQUFBO0lBQ2Isb0NBQXFCLENBQUE7SUFDckIsMEJBQVcsQ0FBQTtJQUNYLDhCQUFlLENBQUE7QUFDbkIsQ0FBQyxFQVBXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBT3RCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gVHJhZmZpY1R5cGUge1xuICAgIFJPQUQgPSAnUm9hZCcsXG4gICAgTUFSSU5FID0gJ01hcmluZScsXG4gICAgUkFJTCA9ICdSYWlsJyxcbiAgICBBVklBVElPTiA9ICdBdmlhdGlvbicsXG4gICAgTUNQID0gJ01DUCcsXG4gICAgT1RIRVIgPSAnT3RoZXInXG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateMonth = exports.validateYear = exports.MAX_YEAR = exports.MIN_YEAR = void 0;
4
+ exports.MIN_YEAR = 1900;
5
+ exports.MAX_YEAR = 2100;
6
+ function validateYear(year, minYear = exports.MIN_YEAR, maxYear = exports.MAX_YEAR) {
7
+ return year >= minYear && year <= maxYear;
8
+ }
9
+ exports.validateYear = validateYear;
10
+ function validateMonth(month) {
11
+ return month > 0 && month < 13;
12
+ }
13
+ exports.validateMonth = validateMonth;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDaEIsUUFBQSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBRTdCLFNBQWdCLFlBQVksQ0FBQyxJQUFZLEVBQUUsT0FBTyxHQUFHLGdCQUFRLEVBQUUsT0FBTyxHQUFHLGdCQUFRO0lBQzdFLE9BQU8sSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDO0FBQzlDLENBQUM7QUFGRCxvQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxLQUFhO0lBQ3ZDLE9BQU8sS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFGRCxzQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNSU5fWUVBUiA9IDE5MDA7XG5leHBvcnQgY29uc3QgTUFYX1lFQVIgPSAyMTAwO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVZZWFyKHllYXI6IG51bWJlciwgbWluWWVhciA9IE1JTl9ZRUFSLCBtYXhZZWFyID0gTUFYX1lFQVIpIHtcbiAgICByZXR1cm4geWVhciA+PSBtaW5ZZWFyICYmIHllYXIgPD0gbWF4WWVhcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTW9udGgobW9udGg6IG51bWJlcikge1xuICAgIHJldHVybiBtb250aCA+IDAgJiYgbW9udGggPCAxMztcbn1cbiJdfQ==
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.geojsonSchema = exports.featureSchema = exports.createArraySchema = exports.addSimpleServiceModel = exports.addServiceModel = exports.addDefaultValidator = exports.getModelReference = void 0;
4
+ const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
5
+ /**
6
+ * Get a reference to an OpenAPI model object in a REST API.
7
+ * Can be used to supply a reference to properties of a GeoJSON feature.
8
+ * @param modelId Id of the referenced object
9
+ * @param restApiId Id of the REST API
10
+ */
11
+ function getModelReference(modelId, restApiId) {
12
+ return `https://apigateway.amazonaws.com/restapis/${restApiId}/models/${modelId}`;
13
+ }
14
+ exports.getModelReference = getModelReference;
15
+ /**
16
+ * Adds a request validator to a REST API to enforce request parameters/body requirements.
17
+ * https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html
18
+ * @param api REST API
19
+ */
20
+ function addDefaultValidator(api) {
21
+ return api.addRequestValidator('DefaultValidator', {
22
+ validateRequestParameters: true,
23
+ validateRequestBody: true,
24
+ });
25
+ }
26
+ exports.addDefaultValidator = addDefaultValidator;
27
+ /**
28
+ * Adds a JSON Schema model to an API Gateway API. Can be used later to generate OpenAPI specifications.
29
+ * This method adds a schema for _a single object._
30
+ * @param name Name of the model
31
+ * @param api REST API
32
+ * @param schema JSON Schema
33
+ * @return ModelWithReference A model object with a reference to an API Gateway model object.
34
+ */
35
+ function addServiceModel(modelName, api, schema) {
36
+ const mwr = api.addModel(modelName, {
37
+ contentType: 'application/json',
38
+ modelName,
39
+ schema,
40
+ });
41
+ mwr.modelReference = getModelReference(mwr.modelId, api.restApiId);
42
+ return mwr;
43
+ }
44
+ exports.addServiceModel = addServiceModel;
45
+ /**
46
+ * Add an empty JSON schema model to an API Gateway API.
47
+ * Usable for example if the incoming data is in XML format but some template transformation is necessary.
48
+ * @param modelName
49
+ * @param api
50
+ * @param contentType
51
+ */
52
+ function addSimpleServiceModel(modelName, api, contentType = 'application/xml') {
53
+ return api.addModel(modelName, {
54
+ contentType,
55
+ modelName,
56
+ schema: {},
57
+ });
58
+ }
59
+ exports.addSimpleServiceModel = addSimpleServiceModel;
60
+ /**
61
+ * Adds a JSON Schema model to an API Gateway API. Can be used later to generate OpenAPI specifications.
62
+ * This method adds a schema for _an array._
63
+ * @param model
64
+ * @param api
65
+ */
66
+ function createArraySchema(model, api) {
67
+ return {
68
+ type: aws_apigateway_1.JsonSchemaType.ARRAY,
69
+ items: {
70
+ ref: getModelReference(model.modelId, api.restApiId),
71
+ },
72
+ };
73
+ }
74
+ exports.createArraySchema = createArraySchema;
75
+ /**
76
+ * Creates a JSON Schema for a GeoJSON Feature. Can be used to generate OpenAPI descriptions.
77
+ * @param modelReference Reference to a model object
78
+ */
79
+ function featureSchema(modelReference) {
80
+ return {
81
+ schema: aws_apigateway_1.JsonSchemaVersion.DRAFT4,
82
+ type: aws_apigateway_1.JsonSchemaType.OBJECT,
83
+ description: 'GeoJson Feature',
84
+ required: ['type', 'properties', 'geometry'],
85
+ properties: {
86
+ type: {
87
+ type: aws_apigateway_1.JsonSchemaType.STRING,
88
+ description: 'Feature',
89
+ enum: ['Feature'],
90
+ },
91
+ properties: {
92
+ ref: modelReference,
93
+ },
94
+ geometry: {
95
+ type: aws_apigateway_1.JsonSchemaType.OBJECT,
96
+ description: 'GeoJSON geometry',
97
+ },
98
+ },
99
+ };
100
+ }
101
+ exports.featureSchema = featureSchema;
102
+ /**
103
+ *
104
+ * Creates a JSON Schema for a GeoJSON Feature Collection. Can be used to generate OpenAPI descriptions.
105
+ * @param modelReference Reference to a model object, in this case Features.
106
+ */
107
+ function geojsonSchema(modelReference) {
108
+ return {
109
+ schema: aws_apigateway_1.JsonSchemaVersion.DRAFT4,
110
+ type: aws_apigateway_1.JsonSchemaType.OBJECT,
111
+ description: 'GeoJson FeatureCollection',
112
+ required: ['type', 'features'],
113
+ properties: {
114
+ type: {
115
+ type: aws_apigateway_1.JsonSchemaType.STRING,
116
+ description: 'FeatureCollection',
117
+ enum: ['FeatureCollection'],
118
+ },
119
+ features: {
120
+ type: aws_apigateway_1.JsonSchemaType.ARRAY,
121
+ items: {
122
+ ref: modelReference,
123
+ },
124
+ },
125
+ },
126
+ };
127
+ }
128
+ exports.geojsonSchema = geojsonSchema;
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2FwaS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFPb0M7QUFHcEM7Ozs7O0dBS0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFlLEVBQUUsU0FBaUI7SUFDaEUsT0FBTyw2Q0FBNkMsU0FBUyxXQUFXLE9BQU8sRUFBRSxDQUFDO0FBQ3RGLENBQUM7QUFGRCw4Q0FFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFZO0lBQzVDLE9BQU8sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFO1FBQy9DLHlCQUF5QixFQUFFLElBQUk7UUFDL0IsbUJBQW1CLEVBQUUsSUFBSTtLQUM1QixDQUFDLENBQUM7QUFDUCxDQUFDO0FBTEQsa0RBS0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLFNBQWlCLEVBQUUsR0FBWSxFQUFFLE1BQWtCO0lBQy9FLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2hDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0IsU0FBUztRQUNULE1BQU07S0FDVCxDQUF1QixDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBUkQsMENBUUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLEdBQVksRUFBRSxXQUFXLEdBQUcsaUJBQWlCO0lBQ2xHLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDM0IsV0FBVztRQUNYLFNBQVM7UUFDVCxNQUFNLEVBQUUsRUFBRTtLQUNiLENBQUMsQ0FBQztBQUNQLENBQUM7QUFORCxzREFNQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsS0FBWSxFQUFFLEdBQVk7SUFDeEQsT0FBTztRQUNILElBQUksRUFBRSwrQkFBYyxDQUFDLEtBQUs7UUFDMUIsS0FBSyxFQUFFO1lBQ0gsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQztTQUN2RDtLQUNKLENBQUM7QUFDTixDQUFDO0FBUEQsOENBT0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixhQUFhLENBQUMsY0FBc0I7SUFDaEQsT0FBTztRQUNILE1BQU0sRUFBRSxrQ0FBaUIsQ0FBQyxNQUFNO1FBQ2hDLElBQUksRUFBRSwrQkFBYyxDQUFDLE1BQU07UUFDM0IsV0FBVyxFQUFFLGlCQUFpQjtRQUM5QixRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQztRQUM1QyxVQUFVLEVBQUU7WUFDUixJQUFJLEVBQUU7Z0JBQ0YsSUFBSSxFQUFFLCtCQUFjLENBQUMsTUFBTTtnQkFDM0IsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNwQjtZQUNELFVBQVUsRUFBRTtnQkFDUixHQUFHLEVBQUUsY0FBYzthQUN0QjtZQUNELFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsK0JBQWMsQ0FBQyxNQUFNO2dCQUMzQixXQUFXLEVBQUUsa0JBQWtCO2FBQ2xDO1NBQ0o7S0FDSixDQUFDO0FBQ04sQ0FBQztBQXJCRCxzQ0FxQkM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLGNBQXNCO0lBQ2hELE9BQU87UUFDSCxNQUFNLEVBQUUsa0NBQWlCLENBQUMsTUFBTTtRQUNoQyxJQUFJLEVBQUUsK0JBQWMsQ0FBQyxNQUFNO1FBQzNCLFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUM5QixVQUFVLEVBQUU7WUFDUixJQUFJLEVBQUU7Z0JBQ0YsSUFBSSxFQUFFLCtCQUFjLENBQUMsTUFBTTtnQkFDM0IsV0FBVyxFQUFFLG1CQUFtQjtnQkFDaEMsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUM7YUFDOUI7WUFDRCxRQUFRLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLCtCQUFjLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFO29CQUNILEdBQUcsRUFBRSxjQUFjO2lCQUN0QjthQUNKO1NBQ0o7S0FDSixDQUFDO0FBQ04sQ0FBQztBQXBCRCxzQ0FvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJlc3RBcGksXG4gICAgTW9kZWwsXG4gICAgSnNvblNjaGVtYSxcbiAgICBSZXF1ZXN0VmFsaWRhdG9yLFxuICAgIEpzb25TY2hlbWFUeXBlLFxuICAgIEpzb25TY2hlbWFWZXJzaW9uLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQge01vZGVsV2l0aFJlZmVyZW5jZX0gZnJvbSBcIi4uL2F3cy90eXBlcy9tb2RlbC13aXRoLXJlZmVyZW5jZVwiO1xuXG4vKipcbiAqIEdldCBhIHJlZmVyZW5jZSB0byBhbiBPcGVuQVBJIG1vZGVsIG9iamVjdCBpbiBhIFJFU1QgQVBJLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VwcGx5IGEgcmVmZXJlbmNlIHRvIHByb3BlcnRpZXMgb2YgYSBHZW9KU09OIGZlYXR1cmUuXG4gKiBAcGFyYW0gbW9kZWxJZCBJZCBvZiB0aGUgcmVmZXJlbmNlZCBvYmplY3RcbiAqIEBwYXJhbSByZXN0QXBpSWQgSWQgb2YgdGhlIFJFU1QgQVBJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbFJlZmVyZW5jZShtb2RlbElkOiBzdHJpbmcsIHJlc3RBcGlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBodHRwczovL2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbS9yZXN0YXBpcy8ke3Jlc3RBcGlJZH0vbW9kZWxzLyR7bW9kZWxJZH1gO1xufVxuXG4vKipcbiAqIEFkZHMgYSByZXF1ZXN0IHZhbGlkYXRvciB0byBhIFJFU1QgQVBJIHRvIGVuZm9yY2UgcmVxdWVzdCBwYXJhbWV0ZXJzL2JvZHkgcmVxdWlyZW1lbnRzLlxuICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1ldGhvZC1yZXF1ZXN0LXZhbGlkYXRpb24uaHRtbFxuICogQHBhcmFtIGFwaSBSRVNUIEFQSVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFZhbGlkYXRvcihhcGk6IFJlc3RBcGkpOiBSZXF1ZXN0VmFsaWRhdG9yIHtcbiAgICByZXR1cm4gYXBpLmFkZFJlcXVlc3RWYWxpZGF0b3IoJ0RlZmF1bHRWYWxpZGF0b3InLCB7XG4gICAgICAgIHZhbGlkYXRlUmVxdWVzdFBhcmFtZXRlcnM6IHRydWUsXG4gICAgICAgIHZhbGlkYXRlUmVxdWVzdEJvZHk6IHRydWUsXG4gICAgfSk7XG59XG5cbi8qKlxuICogQWRkcyBhIEpTT04gU2NoZW1hIG1vZGVsIHRvIGFuIEFQSSBHYXRld2F5IEFQSS4gQ2FuIGJlIHVzZWQgbGF0ZXIgdG8gZ2VuZXJhdGUgT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy5cbiAqIFRoaXMgbWV0aG9kIGFkZHMgYSBzY2hlbWEgZm9yIF9hIHNpbmdsZSBvYmplY3QuX1xuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBhcGkgUkVTVCBBUElcbiAqIEBwYXJhbSBzY2hlbWEgSlNPTiBTY2hlbWFcbiAqIEByZXR1cm4gTW9kZWxXaXRoUmVmZXJlbmNlIEEgbW9kZWwgb2JqZWN0IHdpdGggYSByZWZlcmVuY2UgdG8gYW4gQVBJIEdhdGV3YXkgbW9kZWwgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VydmljZU1vZGVsKG1vZGVsTmFtZTogc3RyaW5nLCBhcGk6IFJlc3RBcGksIHNjaGVtYTogSnNvblNjaGVtYSk6IE1vZGVsV2l0aFJlZmVyZW5jZSB7XG4gICAgY29uc3QgbXdyID0gYXBpLmFkZE1vZGVsKG1vZGVsTmFtZSwge1xuICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICB9KSBhcyBNb2RlbFdpdGhSZWZlcmVuY2U7XG4gICAgbXdyLm1vZGVsUmVmZXJlbmNlID0gZ2V0TW9kZWxSZWZlcmVuY2UobXdyLm1vZGVsSWQsIGFwaS5yZXN0QXBpSWQpO1xuICAgIHJldHVybiBtd3I7XG59XG5cbi8qKlxuICogQWRkIGFuIGVtcHR5IEpTT04gc2NoZW1hIG1vZGVsIHRvIGFuIEFQSSBHYXRld2F5IEFQSS5cbiAqIFVzYWJsZSBmb3IgZXhhbXBsZSBpZiB0aGUgaW5jb21pbmcgZGF0YSBpcyBpbiBYTUwgZm9ybWF0IGJ1dCBzb21lIHRlbXBsYXRlIHRyYW5zZm9ybWF0aW9uIGlzIG5lY2Vzc2FyeS5cbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSBhcGlcbiAqIEBwYXJhbSBjb250ZW50VHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2ltcGxlU2VydmljZU1vZGVsKG1vZGVsTmFtZTogc3RyaW5nLCBhcGk6IFJlc3RBcGksIGNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3htbCcpOiBNb2RlbCB7XG4gICAgcmV0dXJuIGFwaS5hZGRNb2RlbChtb2RlbE5hbWUsIHtcbiAgICAgICAgY29udGVudFR5cGUsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgc2NoZW1hOiB7fSxcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgSlNPTiBTY2hlbWEgbW9kZWwgdG8gYW4gQVBJIEdhdGV3YXkgQVBJLiBDYW4gYmUgdXNlZCBsYXRlciB0byBnZW5lcmF0ZSBPcGVuQVBJIHNwZWNpZmljYXRpb25zLlxuICogVGhpcyBtZXRob2QgYWRkcyBhIHNjaGVtYSBmb3IgX2FuIGFycmF5Ll9cbiAqIEBwYXJhbSBtb2RlbFxuICogQHBhcmFtIGFwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXJyYXlTY2hlbWEobW9kZWw6IE1vZGVsLCBhcGk6IFJlc3RBcGkpOiBKc29uU2NoZW1hIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBKc29uU2NoZW1hVHlwZS5BUlJBWSxcbiAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHJlZjogZ2V0TW9kZWxSZWZlcmVuY2UobW9kZWwubW9kZWxJZCwgYXBpLnJlc3RBcGlJZCksXG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgSlNPTiBTY2hlbWEgZm9yIGEgR2VvSlNPTiBGZWF0dXJlLiBDYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBPcGVuQVBJIGRlc2NyaXB0aW9ucy5cbiAqIEBwYXJhbSBtb2RlbFJlZmVyZW5jZSBSZWZlcmVuY2UgdG8gYSBtb2RlbCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZlYXR1cmVTY2hlbWEobW9kZWxSZWZlcmVuY2U6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtYTogSnNvblNjaGVtYVZlcnNpb24uRFJBRlQ0LFxuICAgICAgICB0eXBlOiBKc29uU2NoZW1hVHlwZS5PQkpFQ1QsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2VvSnNvbiBGZWF0dXJlJyxcbiAgICAgICAgcmVxdWlyZWQ6IFsndHlwZScsICdwcm9wZXJ0aWVzJywgJ2dlb21ldHJ5J10sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBKc29uU2NoZW1hVHlwZS5TVFJJTkcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdGZWF0dXJlJyxcbiAgICAgICAgICAgICAgICBlbnVtOiBbJ0ZlYXR1cmUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgcmVmOiBtb2RlbFJlZmVyZW5jZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgICAgIHR5cGU6IEpzb25TY2hlbWFUeXBlLk9CSkVDVCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlb0pTT04gZ2VvbWV0cnknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGEgSlNPTiBTY2hlbWEgZm9yIGEgR2VvSlNPTiBGZWF0dXJlIENvbGxlY3Rpb24uIENhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIE9wZW5BUEkgZGVzY3JpcHRpb25zLlxuICogQHBhcmFtIG1vZGVsUmVmZXJlbmNlIFJlZmVyZW5jZSB0byBhIG1vZGVsIG9iamVjdCwgaW4gdGhpcyBjYXNlIEZlYXR1cmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VvanNvblNjaGVtYShtb2RlbFJlZmVyZW5jZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBKc29uU2NoZW1hVmVyc2lvbi5EUkFGVDQsXG4gICAgICAgIHR5cGU6IEpzb25TY2hlbWFUeXBlLk9CSkVDVCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHZW9Kc29uIEZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgcmVxdWlyZWQ6IFsndHlwZScsICdmZWF0dXJlcyddLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogSnNvblNjaGVtYVR5cGUuU1RSSU5HLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgIGVudW06IFsnRmVhdHVyZUNvbGxlY3Rpb24nXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmZWF0dXJlczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IEpzb25TY2hlbWFUeXBlLkFSUkFZLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogbW9kZWxSZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==