@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.
- package/LICENSE +291 -0
- package/aws/infra/api/integration.d.ts +21 -0
- package/aws/infra/api/integration.js +52 -0
- package/aws/infra/api/response.d.ts +22 -0
- package/aws/infra/api/response.js +61 -0
- package/aws/infra/api/responses.d.ts +39 -0
- package/aws/infra/api/responses.js +79 -0
- package/aws/infra/api/static-integration.d.ts +15 -0
- package/aws/infra/api/static-integration.js +54 -0
- package/aws/infra/canaries/canary-alarm.d.ts +6 -0
- package/aws/infra/canaries/canary-alarm.js +26 -0
- package/aws/infra/canaries/canary-parameters.d.ts +18 -0
- package/aws/infra/canaries/canary-parameters.js +3 -0
- package/aws/infra/canaries/canary-role.d.ts +6 -0
- package/aws/infra/canaries/canary-role.js +46 -0
- package/aws/infra/canaries/canary.d.ts +8 -0
- package/aws/infra/canaries/canary.js +29 -0
- package/aws/infra/canaries/database-canary.d.ts +18 -0
- package/aws/infra/canaries/database-canary.js +55 -0
- package/aws/infra/canaries/database-checker.d.ts +21 -0
- package/aws/infra/canaries/database-checker.js +109 -0
- package/aws/infra/canaries/url-canary.d.ts +19 -0
- package/aws/infra/canaries/url-canary.js +46 -0
- package/aws/infra/canaries/url-checker.d.ts +46 -0
- package/aws/infra/canaries/url-checker.js +238 -0
- package/aws/infra/documentation.d.ts +56 -0
- package/aws/infra/documentation.js +95 -0
- package/aws/infra/scheduler.d.ts +12 -0
- package/aws/infra/scheduler.js +31 -0
- package/aws/infra/security-rule.d.ts +12 -0
- package/aws/infra/security-rule.js +39 -0
- package/aws/infra/sqs-integration.d.ts +7 -0
- package/aws/infra/sqs-integration.js +93 -0
- package/aws/infra/sqs-queue.d.ts +16 -0
- package/aws/infra/sqs-queue.js +130 -0
- package/aws/infra/stack/lambda-configs.d.ts +72 -0
- package/aws/infra/stack/lambda-configs.js +93 -0
- package/aws/infra/stack/monitoredfunction.d.ts +84 -0
- package/aws/infra/stack/monitoredfunction.js +135 -0
- package/aws/infra/stack/rest_apis.d.ts +40 -0
- package/aws/infra/stack/rest_apis.js +179 -0
- package/aws/infra/stack/stack-checking-aspect.d.ts +20 -0
- package/aws/infra/stack/stack-checking-aspect.js +163 -0
- package/aws/infra/stack/stack.d.ts +41 -0
- package/aws/infra/stack/stack.js +58 -0
- package/aws/infra/stack/subscription.d.ts +17 -0
- package/aws/infra/stack/subscription.js +41 -0
- package/aws/infra/usage-plans.d.ts +15 -0
- package/aws/infra/usage-plans.js +42 -0
- package/aws/runtime/apikey.d.ts +2 -0
- package/aws/runtime/apikey.js +13 -0
- package/aws/runtime/digitraffic-integration-response.d.ts +8 -0
- package/aws/runtime/digitraffic-integration-response.js +26 -0
- package/aws/runtime/messaging.d.ts +10 -0
- package/aws/runtime/messaging.js +31 -0
- package/aws/runtime/s3.d.ts +2 -0
- package/aws/runtime/s3.js +30 -0
- package/aws/runtime/secrets/dbsecret.d.ts +54 -0
- package/aws/runtime/secrets/dbsecret.js +96 -0
- package/aws/runtime/secrets/proxy-holder.d.ts +9 -0
- package/aws/runtime/secrets/proxy-holder.js +26 -0
- package/aws/runtime/secrets/rds-holder.d.ts +9 -0
- package/aws/runtime/secrets/rds-holder.js +26 -0
- package/aws/runtime/secrets/secret-holder.d.ts +26 -0
- package/aws/runtime/secrets/secret-holder.js +73 -0
- package/aws/runtime/secrets/secret.d.ts +8 -0
- package/aws/runtime/secrets/secret.js +43 -0
- package/aws/types/errors.d.ts +4 -0
- package/aws/types/errors.js +9 -0
- package/aws/types/lambda-response.d.ts +12 -0
- package/aws/types/lambda-response.js +28 -0
- package/aws/types/mediatypes.d.ts +10 -0
- package/aws/types/mediatypes.js +15 -0
- package/aws/types/model-with-reference.d.ts +7 -0
- package/aws/types/model-with-reference.js +3 -0
- package/aws/types/proxytypes.d.ts +26 -0
- package/aws/types/proxytypes.js +3 -0
- package/aws/types/tags.d.ts +2 -0
- package/aws/types/tags.js +7 -0
- package/database/cached.d.ts +7 -0
- package/database/cached.js +32 -0
- package/database/database.d.ts +19 -0
- package/database/database.js +62 -0
- package/database/last-updated.d.ts +16 -0
- package/database/last-updated.js +54 -0
- package/index.d.ts +1 -0
- package/index.js +18 -0
- package/marine/id_utils.d.ts +3 -0
- package/marine/id_utils.js +33 -0
- package/marine/rtz.d.ts +48 -0
- package/marine/rtz.js +3 -0
- package/package.json +55 -0
- package/src/aws/infra/api/integration.js +52 -0
- package/src/aws/infra/api/response.js +61 -0
- package/src/aws/infra/api/responses.js +79 -0
- package/src/aws/infra/api/static-integration.js +54 -0
- package/src/aws/infra/canaries/canary-alarm.js +26 -0
- package/src/aws/infra/canaries/canary-parameters.js +3 -0
- package/src/aws/infra/canaries/canary-role.js +46 -0
- package/src/aws/infra/canaries/canary.js +29 -0
- package/src/aws/infra/canaries/database-canary.js +55 -0
- package/src/aws/infra/canaries/database-checker.js +109 -0
- package/src/aws/infra/canaries/url-canary.js +46 -0
- package/src/aws/infra/canaries/url-checker.js +238 -0
- package/src/aws/infra/documentation.js +95 -0
- package/src/aws/infra/scheduler.js +31 -0
- package/src/aws/infra/security-rule.js +39 -0
- package/src/aws/infra/sqs-integration.js +93 -0
- package/src/aws/infra/sqs-queue.js +130 -0
- package/src/aws/infra/stack/lambda-configs.js +93 -0
- package/src/aws/infra/stack/monitoredfunction.js +135 -0
- package/src/aws/infra/stack/rest_apis.js +179 -0
- package/src/aws/infra/stack/stack-checking-aspect.js +163 -0
- package/src/aws/infra/stack/stack.js +58 -0
- package/src/aws/infra/stack/subscription.js +41 -0
- package/src/aws/infra/usage-plans.js +42 -0
- package/src/aws/runtime/apikey.js +13 -0
- package/src/aws/runtime/digitraffic-integration-response.js +26 -0
- package/src/aws/runtime/messaging.js +31 -0
- package/src/aws/runtime/s3.js +30 -0
- package/src/aws/runtime/secrets/dbsecret.js +96 -0
- package/src/aws/runtime/secrets/proxy-holder.js +26 -0
- package/src/aws/runtime/secrets/rds-holder.js +26 -0
- package/src/aws/runtime/secrets/secret-holder.js +73 -0
- package/src/aws/runtime/secrets/secret.js +43 -0
- package/src/aws/types/errors.js +9 -0
- package/src/aws/types/lambda-response.js +28 -0
- package/src/aws/types/mediatypes.js +15 -0
- package/src/aws/types/model-with-reference.js +3 -0
- package/src/aws/types/proxytypes.js +3 -0
- package/src/aws/types/tags.js +7 -0
- package/src/database/cached.js +32 -0
- package/src/database/database.js +62 -0
- package/src/database/last-updated.js +54 -0
- package/src/marine/id_utils.js +33 -0
- package/src/marine/rtz.js +3 -0
- package/src/test/asserter.js +45 -0
- package/src/test/db-testutils.js +31 -0
- package/src/test/httpserver.js +67 -0
- package/src/test/secret.js +25 -0
- package/src/test/secrets-manager.js +59 -0
- package/src/test/testutils.js +44 -0
- package/src/types/input-error.js +7 -0
- package/src/types/language.js +10 -0
- package/src/types/traffictype.js +13 -0
- package/src/types/validator.js +14 -0
- package/src/utils/api-model.js +129 -0
- package/src/utils/base64.js +21 -0
- package/src/utils/date-utils.js +34 -0
- package/src/utils/geojson-types.js +18 -0
- package/src/utils/geometry.js +140 -0
- package/src/utils/retry.js +50 -0
- package/src/utils/slack.js +25 -0
- package/src/utils/utils.js +40 -0
- package/test/asserter.d.ts +11 -0
- package/test/asserter.js +45 -0
- package/test/db-testutils.d.ts +2 -0
- package/test/db-testutils.js +31 -0
- package/test/httpserver.d.ts +18 -0
- package/test/httpserver.js +67 -0
- package/test/marine/id_utils.test.js +69 -0
- package/test/promise/promise.test.js +125 -0
- package/test/secret.d.ts +3 -0
- package/test/secret.js +25 -0
- package/test/secrets/dbsecret.test.js +71 -0
- package/test/secrets/secret-holder.test.js +124 -0
- package/test/secrets/secret.test.js +66 -0
- package/test/secrets-manager.d.ts +9 -0
- package/test/secrets-manager.js +59 -0
- package/test/test/httpserver.test.js +87 -0
- package/test/testutils.d.ts +12 -0
- package/test/testutils.js +44 -0
- package/test/utils/date-utils.test.js +51 -0
- package/test/utils/geometry.test.js +49 -0
- package/test/utils/utils.test.js +49 -0
- package/types/input-error.d.ts +2 -0
- package/types/input-error.js +7 -0
- package/types/language.d.ts +5 -0
- package/types/language.js +10 -0
- package/types/traffictype.d.ts +8 -0
- package/types/traffictype.js +13 -0
- package/types/validator.d.ts +4 -0
- package/types/validator.js +14 -0
- package/utils/api-model.d.ts +87 -0
- package/utils/api-model.js +129 -0
- package/utils/base64.d.ts +12 -0
- package/utils/base64.js +21 -0
- package/utils/date-utils.d.ts +17 -0
- package/utils/date-utils.js +34 -0
- package/utils/geojson-types.d.ts +14 -0
- package/utils/geojson-types.js +18 -0
- package/utils/geometry.d.ts +36 -0
- package/utils/geometry.js +140 -0
- package/utils/retry.d.ts +13 -0
- package/utils/retry.js +50 -0
- package/utils/slack.d.ts +5 -0
- package/utils/slack.js +25 -0
- package/utils/utils.d.ts +22 -0
- 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==
|