@digitraffic/common 2022.10.5 → 2022.10.7-1
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/README.md +49 -0
- package/aws/index.d.ts +1 -0
- package/aws/index.js +18 -0
- package/aws/infra/api/index.d.ts +1 -0
- package/aws/infra/api/index.js +18 -0
- package/aws/infra/api/responses.js +1 -1
- package/aws/infra/stack/lambda-configs.js +1 -1
- package/aws/infra/stack/rest_apis.d.ts +1 -0
- package/aws/infra/stack/rest_apis.js +8 -2
- package/aws/infra/stack/stack.d.ts +4 -1
- package/aws/infra/stack/stack.js +1 -1
- package/aws/infra/usage-plans.js +1 -1
- package/aws/types/errors.js +1 -1
- package/aws/types/tags.js +1 -1
- package/database/last-updated.js +10 -10
- package/package.json +27 -13
- package/test/httpserver.js +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.js +18 -0
- package/types/language.js +1 -1
- package/utils/geometry.js +1 -1
- package/src/aws/infra/api/integration.js +0 -52
- package/src/aws/infra/api/response.js +0 -61
- package/src/aws/infra/api/responses.js +0 -79
- package/src/aws/infra/api/static-integration.js +0 -54
- package/src/aws/infra/canaries/canary-alarm.js +0 -26
- package/src/aws/infra/canaries/canary-parameters.js +0 -3
- package/src/aws/infra/canaries/canary-role.js +0 -46
- package/src/aws/infra/canaries/canary.js +0 -29
- package/src/aws/infra/canaries/database-canary.js +0 -55
- package/src/aws/infra/canaries/database-checker.js +0 -109
- package/src/aws/infra/canaries/url-canary.js +0 -46
- package/src/aws/infra/canaries/url-checker.js +0 -238
- package/src/aws/infra/documentation.js +0 -95
- package/src/aws/infra/scheduler.js +0 -31
- package/src/aws/infra/security-rule.js +0 -39
- package/src/aws/infra/sqs-integration.js +0 -93
- package/src/aws/infra/sqs-queue.js +0 -130
- package/src/aws/infra/stack/lambda-configs.js +0 -93
- package/src/aws/infra/stack/monitoredfunction.js +0 -135
- package/src/aws/infra/stack/rest_apis.js +0 -179
- package/src/aws/infra/stack/stack-checking-aspect.js +0 -163
- package/src/aws/infra/stack/stack.js +0 -58
- package/src/aws/infra/stack/subscription.js +0 -41
- package/src/aws/infra/usage-plans.js +0 -42
- package/src/aws/runtime/apikey.js +0 -13
- package/src/aws/runtime/digitraffic-integration-response.js +0 -26
- package/src/aws/runtime/messaging.js +0 -31
- package/src/aws/runtime/s3.js +0 -30
- package/src/aws/runtime/secrets/dbsecret.js +0 -96
- package/src/aws/runtime/secrets/proxy-holder.js +0 -26
- package/src/aws/runtime/secrets/rds-holder.js +0 -26
- package/src/aws/runtime/secrets/secret-holder.js +0 -73
- package/src/aws/runtime/secrets/secret.js +0 -43
- package/src/aws/types/errors.js +0 -9
- package/src/aws/types/lambda-response.js +0 -28
- package/src/aws/types/mediatypes.js +0 -15
- package/src/aws/types/model-with-reference.js +0 -3
- package/src/aws/types/proxytypes.js +0 -3
- package/src/aws/types/tags.js +0 -7
- package/src/database/cached.js +0 -32
- package/src/database/database.js +0 -62
- package/src/database/last-updated.js +0 -54
- package/src/marine/id_utils.js +0 -33
- package/src/marine/rtz.js +0 -3
- package/src/test/asserter.js +0 -45
- package/src/test/db-testutils.js +0 -31
- package/src/test/httpserver.js +0 -67
- package/src/test/secret.js +0 -25
- package/src/test/secrets-manager.js +0 -59
- package/src/test/testutils.js +0 -44
- package/src/types/input-error.js +0 -7
- package/src/types/language.js +0 -10
- package/src/types/traffictype.js +0 -13
- package/src/types/validator.js +0 -14
- package/src/utils/api-model.js +0 -129
- package/src/utils/base64.js +0 -21
- package/src/utils/date-utils.js +0 -34
- package/src/utils/geojson-types.js +0 -18
- package/src/utils/geometry.js +0 -140
- package/src/utils/retry.js +0 -50
- package/src/utils/slack.js +0 -25
- package/src/utils/utils.js +0 -40
- package/test/marine/id_utils.test.js +0 -69
- package/test/promise/promise.test.js +0 -125
- package/test/secrets/dbsecret.test.js +0 -71
- package/test/secrets/secret-holder.test.js +0 -124
- package/test/secrets/secret.test.js +0 -66
- package/test/test/httpserver.test.js +0 -87
- package/test/utils/date-utils.test.js +0 -51
- package/test/utils/geometry.test.js +0 -49
- package/test/utils/utils.test.js +0 -49
@@ -1,109 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.DatabaseChecker = void 0;
|
4
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
5
|
-
const database_1 = require("../../../database/database");
|
6
|
-
const proxy_holder_1 = require("../../runtime/secrets/proxy-holder");
|
7
|
-
const rds_holder_1 = require("../../runtime/secrets/rds-holder");
|
8
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
9
|
-
const synthetics = require('Synthetics');
|
10
|
-
class DatabaseCheck {
|
11
|
-
constructor(name, sql) {
|
12
|
-
this.name = name;
|
13
|
-
this.sql = sql;
|
14
|
-
this.failed = false;
|
15
|
-
}
|
16
|
-
}
|
17
|
-
class BaseResponse {
|
18
|
-
}
|
19
|
-
class CountResponse extends BaseResponse {
|
20
|
-
}
|
21
|
-
class CountDatabaseCheck extends DatabaseCheck {
|
22
|
-
constructor(name, sql, minCount, maxCount) {
|
23
|
-
super(name, sql);
|
24
|
-
if (minCount == null && maxCount == null) {
|
25
|
-
throw new Error('no max or min given!');
|
26
|
-
}
|
27
|
-
this.minCount = minCount;
|
28
|
-
this.maxCount = maxCount;
|
29
|
-
}
|
30
|
-
check(value) {
|
31
|
-
if (!value) {
|
32
|
-
this.failed = true;
|
33
|
-
throw new Error('no return value');
|
34
|
-
}
|
35
|
-
else {
|
36
|
-
if ('count' in value) {
|
37
|
-
if (this.minCount && value.count < this.minCount) {
|
38
|
-
this.failed = true;
|
39
|
-
throw new Error(`count was ${value.count}, minimum is ${this.minCount}`);
|
40
|
-
}
|
41
|
-
if (this.maxCount && value.count > this.maxCount) {
|
42
|
-
this.failed = true;
|
43
|
-
throw new Error(`count was ${value.count}, max is ${this.maxCount}`);
|
44
|
-
}
|
45
|
-
}
|
46
|
-
else {
|
47
|
-
this.failed = true;
|
48
|
-
console.info("received " + JSON.stringify(value));
|
49
|
-
throw new Error('no count available');
|
50
|
-
}
|
51
|
-
}
|
52
|
-
}
|
53
|
-
}
|
54
|
-
const stepConfig = {
|
55
|
-
'continueOnStepFailure': true,
|
56
|
-
'screenshotOnStepStart': false,
|
57
|
-
'screenshotOnStepSuccess': false,
|
58
|
-
'screenshotOnStepFailure': false,
|
59
|
-
};
|
60
|
-
class DatabaseChecker {
|
61
|
-
constructor(credentialsFunction) {
|
62
|
-
this.credentialsFunction = credentialsFunction;
|
63
|
-
this.checks = [];
|
64
|
-
synthetics.getConfiguration()
|
65
|
-
.disableRequestMetrics();
|
66
|
-
synthetics.getConfiguration()
|
67
|
-
.withFailedCanaryMetric(true);
|
68
|
-
}
|
69
|
-
static createForProxy() {
|
70
|
-
return new DatabaseChecker(() => new proxy_holder_1.ProxyHolder(process.env.SECRET_ID).setCredentials());
|
71
|
-
}
|
72
|
-
static createForRds() {
|
73
|
-
return new DatabaseChecker(() => new rds_holder_1.RdsHolder(process.env.SECRET_ID).setCredentials());
|
74
|
-
}
|
75
|
-
one(name, sql) {
|
76
|
-
this.checks.push(new CountDatabaseCheck(name, sql, 1, 1));
|
77
|
-
return this;
|
78
|
-
}
|
79
|
-
empty(name, sql) {
|
80
|
-
this.checks.push(new CountDatabaseCheck(name, sql, null, 0));
|
81
|
-
return this;
|
82
|
-
}
|
83
|
-
notEmpty(name, sql) {
|
84
|
-
this.checks.push(new CountDatabaseCheck(name, sql, 1, null));
|
85
|
-
return this;
|
86
|
-
}
|
87
|
-
async expect() {
|
88
|
-
if (!this.checks.length) {
|
89
|
-
throw new Error('No checks');
|
90
|
-
}
|
91
|
-
await this.credentialsFunction();
|
92
|
-
await (0, database_1.inDatabaseReadonly)(async (db) => {
|
93
|
-
for (const check of this.checks) {
|
94
|
-
console.info("canary checking sql " + check.sql);
|
95
|
-
const value = await db.oneOrNone(check.sql);
|
96
|
-
const checkFunction = () => {
|
97
|
-
check.check(value);
|
98
|
-
};
|
99
|
-
synthetics.executeStep(check.name, checkFunction, stepConfig);
|
100
|
-
}
|
101
|
-
});
|
102
|
-
if (this.checks.some(check => check.failed)) {
|
103
|
-
throw new Error('Failed');
|
104
|
-
}
|
105
|
-
return 'OK';
|
106
|
-
}
|
107
|
-
}
|
108
|
-
exports.DatabaseChecker = DatabaseChecker;
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvY2FuYXJpZXMvZGF0YWJhc2UtY2hlY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBOEQ7QUFDOUQseURBQTBFO0FBQzFFLHFFQUErRDtBQUMvRCxpRUFBMkQ7QUFFM0QsOERBQThEO0FBQzlELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV6QyxNQUFlLGFBQWE7SUFLeEIsWUFBc0IsSUFBWSxFQUFFLEdBQVc7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0NBR0o7QUFFRCxNQUFNLFlBQVk7Q0FBRztBQUVyQixNQUFNLGFBQWMsU0FBUSxZQUFZO0NBRXZDO0FBRUQsTUFBTSxrQkFBbUIsU0FBUSxhQUE0QjtJQUl6RCxZQUFZLElBQVksRUFDcEIsR0FBVyxFQUNYLFFBQXFCLEVBQ3JCLFFBQXFCO1FBQ3JCLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFakIsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFvQjtRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIs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QUNSLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUEsNkJBQWtCLEVBQUMsS0FBSyxFQUFFLEVBQWMsRUFBRSxFQUFFO1lBQzlDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRWpELE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtvQkFDdkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDO2dCQUVGLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFDN0IsYUFBYSxFQUNiLFVBQVUsQ0FBQyxDQUFDO2FBQ25CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUE3RUQsMENBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbmltcG9ydCB7RFREYXRhYmFzZSwgaW5EYXRhYmFzZVJlYWRvbmx5fSBmcm9tIFwiLi4vLi4vLi4vZGF0YWJhc2UvZGF0YWJhc2VcIjtcbmltcG9ydCB7UHJveHlIb2xkZXJ9IGZyb20gXCIuLi8uLi9ydW50aW1lL3NlY3JldHMvcHJveHktaG9sZGVyXCI7XG5pbXBvcnQge1Jkc0hvbGRlcn0gZnJvbSBcIi4uLy4uL3J1bnRpbWUvc2VjcmV0cy9yZHMtaG9sZGVyXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBzeW50aGV0aWNzID0gcmVxdWlyZSgnU3ludGhldGljcycpO1xuXG5hYnN0cmFjdCBjbGFzcyBEYXRhYmFzZUNoZWNrPFQ+IHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc3FsOiBzdHJpbmc7XG4gICAgZmFpbGVkOiBib29sZWFuO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5zcWwgPSBzcWw7XG4gICAgICAgIHRoaXMuZmFpbGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY2hlY2sodmFsdWU6IFQpOiB2b2lkO1xufVxuXG5jbGFzcyBCYXNlUmVzcG9uc2Uge31cblxuY2xhc3MgQ291bnRSZXNwb25zZSBleHRlbmRzIEJhc2VSZXNwb25zZSB7XG4gICAgY291bnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgQ291bnREYXRhYmFzZUNoZWNrIGV4dGVuZHMgRGF0YWJhc2VDaGVjazxDb3VudFJlc3BvbnNlPiB7XG4gICAgcmVhZG9ubHkgbWluQ291bnQ6IG51bWJlcnxudWxsO1xuICAgIHJlYWRvbmx5IG1heENvdW50OiBudW1iZXJ8bnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyxcbiAgICAgICAgc3FsOiBzdHJpbmcsXG4gICAgICAgIG1pbkNvdW50OiBudW1iZXJ8bnVsbCxcbiAgICAgICAgbWF4Q291bnQ6IG51bWJlcnxudWxsKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHNxbCk7XG5cbiAgICAgICAgaWYgKG1pbkNvdW50ID09IG51bGwgJiYgbWF4Q291bnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBtYXggb3IgbWluIGdpdmVuIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5taW5Db3VudCA9IG1pbkNvdW50O1xuICAgICAgICB0aGlzLm1heENvdW50ID0gbWF4Q291bnQ7XG4gICAgfVxuXG4gICAgY2hlY2sodmFsdWU6IENvdW50UmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyByZXR1cm4gdmFsdWUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgnY291bnQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWluQ291bnQgJiYgdmFsdWUuY291bnQgPCB0aGlzLm1pbkNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb3VudCB3YXMgJHt2YWx1ZS5jb3VudH0sIG1pbmltdW0gaXMgJHt0aGlzLm1pbkNvdW50fWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhDb3VudCAmJiB2YWx1ZS5jb3VudCA+IHRoaXMubWF4Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdW50IHdhcyAke3ZhbHVlLmNvdW50fSwgbWF4IGlzICR7dGhpcy5tYXhDb3VudH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcInJlY2VpdmVkIFwiICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gY291bnQgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IHN0ZXBDb25maWcgPSB7XG4gICAgJ2NvbnRpbnVlT25TdGVwRmFpbHVyZSc6IHRydWUsXG4gICAgJ3NjcmVlbnNob3RPblN0ZXBTdGFydCc6IGZhbHNlLFxuICAgICdzY3JlZW5zaG90T25TdGVwU3VjY2Vzcyc6IGZhbHNlLFxuICAgICdzY3JlZW5zaG90T25TdGVwRmFpbHVyZSc6IGZhbHNlLFxufTtcblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlQ2hlY2tlciB7XG4gICAgY3JlZGVudGlhbHNGdW5jdGlvbjogKCgpID0+IFByb21pc2U8dm9pZD4pO1xuICAgIGNoZWNrczogRGF0YWJhc2VDaGVjazxCYXNlUmVzcG9uc2U+W107XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGNyZWRlbnRpYWxzRnVuY3Rpb246ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSkge1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzRnVuY3Rpb24gPSBjcmVkZW50aWFsc0Z1bmN0aW9uO1xuICAgICAgICB0aGlzLmNoZWNrcyA9IFtdO1xuXG4gICAgICAgIHN5bnRoZXRpY3MuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgICAgICAgICAuZGlzYWJsZVJlcXVlc3RNZXRyaWNzKCk7XG5cbiAgICAgICAgc3ludGhldGljcy5nZXRDb25maWd1cmF0aW9uKClcbiAgICAgICAgICAgIC53aXRoRmFpbGVkQ2FuYXJ5TWV0cmljKHRydWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVGb3JQcm94eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZUNoZWNrZXIoKCkgPT4gbmV3IFByb3h5SG9sZGVyKHByb2Nlc3MuZW52LlNFQ1JFVF9JRCBhcyBzdHJpbmcpLnNldENyZWRlbnRpYWxzKCkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVGb3JSZHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VDaGVja2VyKCgpID0+IG5ldyBSZHNIb2xkZXIocHJvY2Vzcy5lbnYuU0VDUkVUX0lEIGFzIHN0cmluZykuc2V0Q3JlZGVudGlhbHMoKSk7XG4gICAgfVxuXG4gICAgb25lKG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jaGVja3MucHVzaChuZXcgQ291bnREYXRhYmFzZUNoZWNrKG5hbWUsXG4gICAgICAgICAgICBzcWwsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMSkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGVtcHR5KG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jaGVja3MucHVzaChuZXcgQ291bnREYXRhYmFzZUNoZWNrKG5hbWUsXG4gICAgICAgICAgICBzcWwsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG5vdEVtcHR5KG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jaGVja3MucHVzaChuZXcgQ291bnREYXRhYmFzZUNoZWNrKG5hbWUsXG4gICAgICAgICAgICBzcWwsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgbnVsbCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGFzeW5jIGV4cGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2hlY2tzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNyZWRlbnRpYWxzRnVuY3Rpb24oKTtcbiAgICAgICAgYXdhaXQgaW5EYXRhYmFzZVJlYWRvbmx5KGFzeW5jIChkYjogRFREYXRhYmFzZSkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLmNoZWNrcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcImNhbmFyeSBjaGVja2luZyBzcWwgXCIgKyBjaGVjay5zcWwpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBkYi5vbmVPck5vbmUoY2hlY2suc3FsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja0Z1bmN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaGVjay5jaGVjayh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHN5bnRoZXRpY3MuZXhlY3V0ZVN0ZXAoY2hlY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tGdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgc3RlcENvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrcy5zb21lKGNoZWNrID0+IGNoZWNrLmZhaWxlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ09LJztcbiAgICB9XG59XG4iXX0=
|
@@ -1,46 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.UrlCanary = exports.ENV_SECRET = exports.ENV_HOSTNAME = exports.ENV_API_KEY = void 0;
|
4
|
-
const canary_1 = require("./canary");
|
5
|
-
exports.ENV_API_KEY = "apiKeyId";
|
6
|
-
exports.ENV_HOSTNAME = "hostname";
|
7
|
-
exports.ENV_SECRET = "secret";
|
8
|
-
class UrlCanary extends canary_1.DigitrafficCanary {
|
9
|
-
constructor(stack, role, params, secret) {
|
10
|
-
const canaryName = `${params.name}-url`;
|
11
|
-
const environmentVariables = {};
|
12
|
-
environmentVariables[exports.ENV_HOSTNAME] = params.hostname;
|
13
|
-
if (params.secret) {
|
14
|
-
environmentVariables[exports.ENV_SECRET] = params.secret;
|
15
|
-
}
|
16
|
-
if (params.apiKeyId) {
|
17
|
-
environmentVariables[exports.ENV_API_KEY] = params.apiKeyId;
|
18
|
-
}
|
19
|
-
if (secret) {
|
20
|
-
secret.grantRead(role);
|
21
|
-
}
|
22
|
-
// the handler code is defined at the actual project using this
|
23
|
-
super(stack, canaryName, role, params, environmentVariables);
|
24
|
-
}
|
25
|
-
static create(stack, role, publicApi, params) {
|
26
|
-
return new UrlCanary(stack, role, { ...{
|
27
|
-
handler: `${params.name}.handler`,
|
28
|
-
hostname: publicApi.hostname(),
|
29
|
-
apiKeyId: this.getApiKey(publicApi),
|
30
|
-
}, ...params });
|
31
|
-
}
|
32
|
-
static getApiKey(publicApi) {
|
33
|
-
const apiKeys = publicApi.apiKeyIds;
|
34
|
-
if (apiKeys.length > 1) {
|
35
|
-
console.info("rest api has more than one api key");
|
36
|
-
}
|
37
|
-
if (apiKeys.length === 0) {
|
38
|
-
console.info("rest api has no api keys");
|
39
|
-
return undefined;
|
40
|
-
}
|
41
|
-
// always use first api key
|
42
|
-
return publicApi.apiKeyIds[0];
|
43
|
-
}
|
44
|
-
}
|
45
|
-
exports.UrlCanary = UrlCanary;
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWNhbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvY2FuYXJpZXMvdXJsLWNhbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxxQ0FBMkM7QUFNOUIsUUFBQSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ3pCLFFBQUEsWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUMxQixRQUFBLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFPbkMsTUFBYSxTQUFVLFNBQVEsMEJBQWlCO0lBQzVDLFlBQVksS0FBZ0IsRUFDeEIsSUFBVSxFQUNWLE1BQTJCLEVBQzNCLE1BQWdCO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDO1FBQ3hDLE1BQU0sb0JBQW9CLEdBQXNCLEVBQUUsQ0FBQztRQUNuRCxvQkFBb0IsQ0FBQyxvQkFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUVyRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDZixvQkFBb0IsQ0FBQyxrQkFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNwRDtRQUVELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNqQixvQkFBb0IsQ0FBQyxtQkFBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUN2RDtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjtRQUVELCtEQUErRDtRQUMvRCxLQUFLLENBQ0QsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUN4RCxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBdUIsRUFDakMsSUFBVSxFQUNWLFNBQTZCLEVBQzdCLE1BQW9DO1FBQ3BDLE9BQU8sSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFDLEdBQUc7Z0JBQ2xDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLFVBQVU7Z0JBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7YUFDdEMsRUFBRSxHQUFHLE1BQU0sRUFBd0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQTZCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFFcEMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdEQ7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN6QyxPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELDJCQUEyQjtRQUMzQixPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNKO0FBckRELDhCQXFEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtDYW5hcnlQYXJhbWV0ZXJzfSBmcm9tIFwiLi9jYW5hcnktcGFyYW1ldGVyc1wiO1xuaW1wb3J0IHtSb2xlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtEaWdpdHJhZmZpY0NhbmFyeX0gZnJvbSBcIi4vY2FuYXJ5XCI7XG5pbXBvcnQge0lTZWNyZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7RGlnaXRyYWZmaWNTdGFja30gZnJvbSBcIi4uL3N0YWNrL3N0YWNrXCI7XG5pbXBvcnQge0xhbWJkYUVudmlyb25tZW50fSBmcm9tIFwiLi4vc3RhY2svbGFtYmRhLWNvbmZpZ3NcIjtcbmltcG9ydCB7RGlnaXRyYWZmaWNSZXN0QXBpfSBmcm9tIFwiLi4vc3RhY2svcmVzdF9hcGlzXCI7XG5cbmV4cG9ydCBjb25zdCBFTlZfQVBJX0tFWSA9IFwiYXBpS2V5SWRcIjtcbmV4cG9ydCBjb25zdCBFTlZfSE9TVE5BTUUgPSBcImhvc3RuYW1lXCI7XG5leHBvcnQgY29uc3QgRU5WX1NFQ1JFVCA9IFwic2VjcmV0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXJsQ2FuYXJ5UGFyYW1ldGVycyBleHRlbmRzIENhbmFyeVBhcmFtZXRlcnMge1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYXBpS2V5SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBVcmxDYW5hcnkgZXh0ZW5kcyBEaWdpdHJhZmZpY0NhbmFyeSB7XG4gICAgY29uc3RydWN0b3Ioc3RhY2s6IENvbnN0cnVjdCxcbiAgICAgICAgcm9sZTogUm9sZSxcbiAgICAgICAgcGFyYW1zOiBVcmxDYW5hcnlQYXJhbWV0ZXJzLFxuICAgICAgICBzZWNyZXQ/OiBJU2VjcmV0KSB7XG4gICAgICAgIGNvbnN0IGNhbmFyeU5hbWUgPSBgJHtwYXJhbXMubmFtZX0tdXJsYDtcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRWYXJpYWJsZXM6IExhbWJkYUVudmlyb25tZW50ID0ge307XG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzW0VOVl9IT1NUTkFNRV0gPSBwYXJhbXMuaG9zdG5hbWU7XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zZWNyZXQpIHtcbiAgICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzW0VOVl9TRUNSRVRdID0gcGFyYW1zLnNlY3JldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMuYXBpS2V5SWQpIHtcbiAgICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzW0VOVl9BUElfS0VZXSA9IHBhcmFtcy5hcGlLZXlJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWNyZXQpIHtcbiAgICAgICAgICAgIHNlY3JldC5ncmFudFJlYWQocm9sZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGUgaGFuZGxlciBjb2RlIGlzIGRlZmluZWQgYXQgdGhlIGFjdHVhbCBwcm9qZWN0IHVzaW5nIHRoaXNcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBzdGFjaywgY2FuYXJ5TmFtZSwgcm9sZSwgcGFyYW1zLCBlbnZpcm9ubWVudFZhcmlhYmxlcyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlKHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLFxuICAgICAgICByb2xlOiBSb2xlLFxuICAgICAgICBwdWJsaWNBcGk6IERpZ2l0cmFmZmljUmVzdEFwaSxcbiAgICAgICAgcGFyYW1zOiBQYXJ0aWFsPFVybENhbmFyeVBhcmFtZXRlcnM+KTogVXJsQ2FuYXJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcmxDYW5hcnkoc3RhY2ssIHJvbGUsIHsuLi57XG4gICAgICAgICAgICBoYW5kbGVyOiBgJHtwYXJhbXMubmFtZX0uaGFuZGxlcmAsXG4gICAgICAgICAgICBob3N0bmFtZTogcHVibGljQXBpLmhvc3RuYW1lKCksXG4gICAgICAgICAgICBhcGlLZXlJZDogdGhpcy5nZXRBcGlLZXkocHVibGljQXBpKSxcbiAgICAgICAgfSwgLi4ucGFyYW1zfSBhcyBVcmxDYW5hcnlQYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0QXBpS2V5KHB1YmxpY0FwaTogRGlnaXRyYWZmaWNSZXN0QXBpKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgYXBpS2V5cyA9IHB1YmxpY0FwaS5hcGlLZXlJZHM7XG5cbiAgICAgICAgaWYgKGFwaUtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwicmVzdCBhcGkgaGFzIG1vcmUgdGhhbiBvbmUgYXBpIGtleVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcGlLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwicmVzdCBhcGkgaGFzIG5vIGFwaSBrZXlzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsd2F5cyB1c2UgZmlyc3QgYXBpIGtleVxuICAgICAgICByZXR1cm4gcHVibGljQXBpLmFwaUtleUlkc1swXTtcbiAgICB9XG59XG4iXX0=
|
@@ -1,238 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.HeaderChecker = exports.GeoJsonChecker = exports.ContentTypeChecker = exports.ContentChecker = exports.ResponseChecker = exports.UrlChecker = exports.API_KEY_HEADER = void 0;
|
4
|
-
const http2_1 = require("http2");
|
5
|
-
const asserter_1 = require("digitraffic-common/test/asserter");
|
6
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
7
|
-
const synthetics = require('Synthetics');
|
8
|
-
const zlib = require("zlib");
|
9
|
-
const mediatypes_1 = require("../../types/mediatypes");
|
10
|
-
const apikey_1 = require("../../runtime/apikey");
|
11
|
-
const geometry_1 = require("../../../utils/geometry");
|
12
|
-
exports.API_KEY_HEADER = "x-api-key";
|
13
|
-
const baseHeaders = {
|
14
|
-
"Digitraffic-User": "internal-digitraffic-canary",
|
15
|
-
"Accept-Encoding": "gzip",
|
16
|
-
"Accept": "*/*",
|
17
|
-
};
|
18
|
-
class UrlChecker {
|
19
|
-
constructor(hostname, apiKey) {
|
20
|
-
const headers = { ...baseHeaders };
|
21
|
-
if (apiKey) {
|
22
|
-
headers[exports.API_KEY_HEADER] = apiKey;
|
23
|
-
}
|
24
|
-
this.requestOptions = {
|
25
|
-
hostname,
|
26
|
-
method: 'GET',
|
27
|
-
protocol: 'https:',
|
28
|
-
headers,
|
29
|
-
};
|
30
|
-
synthetics.getConfiguration()
|
31
|
-
.disableRequestMetrics();
|
32
|
-
synthetics.getConfiguration()
|
33
|
-
.withIncludeRequestBody(false)
|
34
|
-
.withIncludeRequestHeaders(false)
|
35
|
-
.withIncludeResponseBody(false)
|
36
|
-
.withIncludeResponseHeaders(false)
|
37
|
-
.withFailedCanaryMetric(true);
|
38
|
-
}
|
39
|
-
static create(hostname, apiKeyId) {
|
40
|
-
return (0, apikey_1.getApiKeyFromAPIGateway)(apiKeyId).then(apiKey => {
|
41
|
-
return new UrlChecker(hostname, apiKey.value);
|
42
|
-
});
|
43
|
-
}
|
44
|
-
static createV2() {
|
45
|
-
return this.create(process.env.hostname, process.env.apiKeyId);
|
46
|
-
}
|
47
|
-
expectStatus(statusCode, url, callback) {
|
48
|
-
const requestOptions = { ...this.requestOptions, ...{
|
49
|
-
path: url,
|
50
|
-
} };
|
51
|
-
return synthetics.executeHttpStep(`Verify ${statusCode} for ${url.replace(/auth=.*/, '')}`, requestOptions, callback);
|
52
|
-
}
|
53
|
-
expect200(url, ...callbacks) {
|
54
|
-
const callback = async (json, body, res) => {
|
55
|
-
await Promise.allSettled(callbacks.map(c => c(json, body, res)));
|
56
|
-
};
|
57
|
-
return this.expectStatus(200, url, callback);
|
58
|
-
}
|
59
|
-
expect404(url) {
|
60
|
-
const requestOptions = { ...this.requestOptions, ...{
|
61
|
-
path: url,
|
62
|
-
} };
|
63
|
-
return synthetics.executeHttpStep(`Verify 404 for ${url}`, requestOptions, validateStatusCodeAndContentType(404, mediatypes_1.MediaType.TEXT_PLAIN));
|
64
|
-
}
|
65
|
-
expect400(url) {
|
66
|
-
const requestOptions = { ...this.requestOptions, ...{
|
67
|
-
path: url,
|
68
|
-
} };
|
69
|
-
return synthetics.executeHttpStep(`Verify 400 for ${url}`, requestOptions, validateStatusCodeAndContentType(400, mediatypes_1.MediaType.TEXT_PLAIN));
|
70
|
-
}
|
71
|
-
expect403WithoutApiKey(url, mediaType) {
|
72
|
-
if (!this.requestOptions.headers || !this.requestOptions.headers[exports.API_KEY_HEADER]) {
|
73
|
-
console.error("No api key defined");
|
74
|
-
}
|
75
|
-
const requestOptions = { ...this.requestOptions, ...{
|
76
|
-
path: url,
|
77
|
-
headers: baseHeaders,
|
78
|
-
} };
|
79
|
-
return synthetics.executeHttpStep(`Verify 403 for ${url}`, requestOptions, validateStatusCodeAndContentType(403, mediaType || mediatypes_1.MediaType.APPLICATION_JSON));
|
80
|
-
}
|
81
|
-
done() {
|
82
|
-
return "Canary successful";
|
83
|
-
}
|
84
|
-
}
|
85
|
-
exports.UrlChecker = UrlChecker;
|
86
|
-
async function getResponseBody(response) {
|
87
|
-
const body = await getBodyFromResponse(response);
|
88
|
-
if (response.headers[http2_1.constants.HTTP2_HEADER_CONTENT_ENCODING] === 'gzip') {
|
89
|
-
try {
|
90
|
-
return zlib.gunzipSync(body).toString();
|
91
|
-
}
|
92
|
-
catch (e) {
|
93
|
-
console.info("error " + JSON.stringify(e));
|
94
|
-
}
|
95
|
-
}
|
96
|
-
return body.toString();
|
97
|
-
}
|
98
|
-
function getBodyFromResponse(response) {
|
99
|
-
return new Promise((resolve) => {
|
100
|
-
const buffers = [];
|
101
|
-
response.on('data', (data) => {
|
102
|
-
buffers.push(data);
|
103
|
-
});
|
104
|
-
response.on('end', () => {
|
105
|
-
resolve(Buffer.concat(buffers).toString());
|
106
|
-
});
|
107
|
-
});
|
108
|
-
}
|
109
|
-
/**
|
110
|
-
* Returns function, that validates that the status code and content-type from response are the given values
|
111
|
-
* @param statusCode
|
112
|
-
* @param contentType
|
113
|
-
*/
|
114
|
-
function validateStatusCodeAndContentType(statusCode, contentType) {
|
115
|
-
return (res) => {
|
116
|
-
return new Promise(resolve => {
|
117
|
-
if (res.statusCode !== statusCode) {
|
118
|
-
throw new Error(`${res.statusCode} ${res.statusMessage}`);
|
119
|
-
}
|
120
|
-
if (res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE] !== contentType) {
|
121
|
-
throw new Error('Wrong content-type ' + res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE]);
|
122
|
-
}
|
123
|
-
resolve();
|
124
|
-
});
|
125
|
-
};
|
126
|
-
}
|
127
|
-
// DEPRECATED
|
128
|
-
class ResponseChecker {
|
129
|
-
constructor(contentType) {
|
130
|
-
this.checkCors = true;
|
131
|
-
this.contentType = contentType;
|
132
|
-
}
|
133
|
-
static forJson() {
|
134
|
-
return new ResponseChecker(mediatypes_1.MediaType.APPLICATION_JSON);
|
135
|
-
}
|
136
|
-
static forCSV() {
|
137
|
-
return new ResponseChecker(mediatypes_1.MediaType.TEXT_CSV);
|
138
|
-
}
|
139
|
-
static forGeojson() {
|
140
|
-
return new ResponseChecker(mediatypes_1.MediaType.APPLICATION_GEOJSON);
|
141
|
-
}
|
142
|
-
static forJpeg() {
|
143
|
-
return new ResponseChecker(mediatypes_1.MediaType.IMAGE_JPEG);
|
144
|
-
}
|
145
|
-
check() {
|
146
|
-
return this.responseChecker(() => {
|
147
|
-
// no need to do anything
|
148
|
-
});
|
149
|
-
}
|
150
|
-
checkJson(fn) {
|
151
|
-
return this.responseChecker((body, res) => {
|
152
|
-
fn(JSON.parse(body), body, res);
|
153
|
-
});
|
154
|
-
}
|
155
|
-
responseChecker(fn) {
|
156
|
-
return async (res) => {
|
157
|
-
if (!res.statusCode) {
|
158
|
-
throw new Error('statusCode missing');
|
159
|
-
}
|
160
|
-
if (res.statusCode < 200 || res.statusCode > 299) {
|
161
|
-
throw new Error(`${res.statusCode} ${res.statusMessage}`);
|
162
|
-
}
|
163
|
-
if (this.checkCors && !res.headers[http2_1.constants.HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN]) {
|
164
|
-
throw new Error('CORS missing');
|
165
|
-
}
|
166
|
-
if (res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE] !== this.contentType) {
|
167
|
-
throw new Error('Wrong content-type ' + res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE]);
|
168
|
-
}
|
169
|
-
const body = await getResponseBody(res);
|
170
|
-
fn(body, res);
|
171
|
-
};
|
172
|
-
}
|
173
|
-
}
|
174
|
-
exports.ResponseChecker = ResponseChecker;
|
175
|
-
class ContentChecker {
|
176
|
-
static checkJson(fn) {
|
177
|
-
return async (res) => {
|
178
|
-
const body = await getResponseBody(res);
|
179
|
-
fn(JSON.parse(body), body, res);
|
180
|
-
};
|
181
|
-
}
|
182
|
-
static checkResponse(fn) {
|
183
|
-
return async (res) => {
|
184
|
-
const body = await getResponseBody(res);
|
185
|
-
fn(body, res);
|
186
|
-
};
|
187
|
-
}
|
188
|
-
}
|
189
|
-
exports.ContentChecker = ContentChecker;
|
190
|
-
class ContentTypeChecker {
|
191
|
-
static checkContentType(contentType) {
|
192
|
-
return (res) => {
|
193
|
-
if (!res.statusCode) {
|
194
|
-
throw new Error('statusCode missing');
|
195
|
-
}
|
196
|
-
if (res.statusCode < 200 || res.statusCode > 299) {
|
197
|
-
throw new Error(`${res.statusCode} ${res.statusMessage}`);
|
198
|
-
}
|
199
|
-
if (!res.headers[http2_1.constants.HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN]) {
|
200
|
-
throw new Error('CORS missing');
|
201
|
-
}
|
202
|
-
if (res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE] !== contentType) {
|
203
|
-
throw new Error('Wrong content-type ' + res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE]);
|
204
|
-
}
|
205
|
-
};
|
206
|
-
}
|
207
|
-
}
|
208
|
-
exports.ContentTypeChecker = ContentTypeChecker;
|
209
|
-
class GeoJsonChecker {
|
210
|
-
static validFeatureCollection(fn) {
|
211
|
-
return ResponseChecker.forGeojson().checkJson((json) => {
|
212
|
-
asserter_1.Asserter.assertEquals(json.type, 'FeatureCollection');
|
213
|
-
asserter_1.Asserter.assertTrue((0, geometry_1.isValidGeoJson)(json));
|
214
|
-
if (fn) {
|
215
|
-
fn(json);
|
216
|
-
}
|
217
|
-
});
|
218
|
-
}
|
219
|
-
}
|
220
|
-
exports.GeoJsonChecker = GeoJsonChecker;
|
221
|
-
class HeaderChecker {
|
222
|
-
static checkHeaderExists(headerName) {
|
223
|
-
return (res) => {
|
224
|
-
if (!res.headers[headerName]) {
|
225
|
-
throw new Error('Missing header: ' + headerName);
|
226
|
-
}
|
227
|
-
};
|
228
|
-
}
|
229
|
-
static checkHeaderMissing(headerName) {
|
230
|
-
return (res) => {
|
231
|
-
if (res.headers[headerName]) {
|
232
|
-
throw new Error('Header should not exist: ' + headerName);
|
233
|
-
}
|
234
|
-
};
|
235
|
-
}
|
236
|
-
}
|
237
|
-
exports.HeaderChecker = HeaderChecker;
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWNoZWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL2NhbmFyaWVzL3VybC1jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFnQztBQUVoQywrREFBMEQ7QUFFMUQsOERBQThEO0FBQzlELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6Qyw2QkFBOEI7QUFDOUIsdURBQWlEO0FBQ2pELGlEQUE2RDtBQUU3RCxzREFBdUQ7QUFFMUMsUUFBQSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRTFDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLGtCQUFrQixFQUFHLDZCQUE2QjtJQUNsRCxpQkFBaUIsRUFBRyxNQUFNO0lBQzFCLFFBQVEsRUFBRSxLQUFLO0NBQ1EsQ0FBQztBQUs1QixNQUFhLFVBQVU7SUFHbkIsWUFBWSxRQUFnQixFQUFFLE1BQWU7UUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBQyxHQUFHLFdBQVcsRUFBQyxDQUFDO1FBRWpDLElBQUksTUFBTSxFQUFFO1lBQ1IsT0FBTyxDQUFDLHNCQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ2xCLFFBQVE7WUFDUixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLE9BQU87U0FDVixDQUFDO1FBRUYsVUFBVSxDQUFDLGdCQUFnQixFQUFFO2FBQ3hCLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsVUFBVSxDQUFDLGdCQUFnQixFQUFFO2FBQ3hCLHNCQUFzQixDQUFDLEtBQUssQ0FBQzthQUM3Qix5QkFBeUIsQ0FBQyxLQUFLLENBQUM7YUFDaEMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO2FBQzlCLDBCQUEwQixDQUFDLEtBQUssQ0FBQzthQUNqQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFD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QUFDLFVBQWtCO1FBQ3hDLE9BQU8sQ0FBQyxHQUFvQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLFVBQVUsQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKO0FBaEJELHNDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29uc3RhbnRzfSBmcm9tIFwiaHR0cDJcIjtcbmltcG9ydCB7SW5jb21pbmdNZXNzYWdlLCBSZXF1ZXN0T3B0aW9uc30gZnJvbSBcImh0dHBcIjtcbmltcG9ydCB7QXNzZXJ0ZXJ9IGZyb20gXCJkaWdpdHJhZmZpYy1jb21tb24vdGVzdC9hc3NlcnRlclwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3Qgc3ludGhldGljcyA9IHJlcXVpcmUoJ1N5bnRoZXRpY3MnKTtcbmltcG9ydCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuaW1wb3J0IHtNZWRpYVR5cGV9IGZyb20gXCIuLi8uLi90eXBlcy9tZWRpYXR5cGVzXCI7XG5pbXBvcnQge2dldEFwaUtleUZyb21BUElHYXRld2F5fSBmcm9tIFwiLi4vLi4vcnVudGltZS9hcGlrZXlcIjtcbmltcG9ydCB7RmVhdHVyZUNvbGxlY3Rpb259IGZyb20gXCJnZW9qc29uXCI7XG5pbXBvcnQge2lzVmFsaWRHZW9Kc29ufSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZ2VvbWV0cnlcIjtcblxuZXhwb3J0IGNvbnN0IEFQSV9LRVlfSEVBREVSID0gXCJ4LWFwaS1rZXlcIjtcblxuY29uc3QgYmFzZUhlYWRlcnMgPSB7XG4gICAgXCJEaWdpdHJhZmZpYy1Vc2VyXCIgOiBcImludGVybmFsLWRpZ2l0cmFmZmljLWNhbmFyeVwiLFxuICAgIFwiQWNjZXB0LUVuY29kaW5nXCIgOiBcImd6aXBcIixcbiAgICBcIkFjY2VwdFwiOiBcIiovKlwiLFxufSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG50eXBlIENoZWNrZXJGdW5jdGlvbiA9IChSZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZDtcbnR5cGUgSnNvbkNoZWNrZXJGdW5jdGlvbjxUPiA9IChqc29uOiBULCBib2R5OiBzdHJpbmcsIG1lc3NhZ2U6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIFVybENoZWNrZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3IoaG9zdG5hbWU6IHN0cmluZywgYXBpS2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7Li4uYmFzZUhlYWRlcnN9O1xuXG4gICAgICAgIGlmIChhcGlLZXkpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbQVBJX0tFWV9IRUFERVJdID0gYXBpS2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIHByb3RvY29sOiAnaHR0cHM6JyxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH07XG5cbiAgICAgICAgc3ludGhldGljcy5nZXRDb25maWd1cmF0aW9uKClcbiAgICAgICAgICAgIC5kaXNhYmxlUmVxdWVzdE1ldHJpY3MoKTtcblxuICAgICAgICBzeW50aGV0aWNzLmdldENvbmZpZ3VyYXRpb24oKVxuICAgICAgICAgICAgLndpdGhJbmNsdWRlUmVxdWVzdEJvZHkoZmFsc2UpXG4gICAgICAgICAgICAud2l0aEluY2x1ZGVSZXF1ZXN0SGVhZGVycyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoSW5jbHVkZVJlc3BvbnNlQm9keShmYWxzZSlcbiAgICAgICAgICAgIC53aXRoSW5jbHVkZVJlc3BvbnNlSGVhZGVycyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoRmFpbGVkQ2FuYXJ5TWV0cmljKHRydWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGUoaG9zdG5hbWU6IHN0cmluZywgYXBpS2V5SWQ6IHN0cmluZyk6IFByb21pc2U8VXJsQ2hlY2tlcj4ge1xuICAgICAgICByZXR1cm4gZ2V0QXBpS2V5RnJvbUFQSUdhdGV3YXkoYXBpS2V5SWQpLnRoZW4oYXBpS2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVXJsQ2hlY2tlcihob3N0bmFtZSwgYXBpS2V5LnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZVYyKCk6IFByb21pc2U8VXJsQ2hlY2tlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUocHJvY2Vzcy5lbnYuaG9zdG5hbWUgYXMgc3RyaW5nLCBwcm9jZXNzLmVudi5hcGlLZXlJZCBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGV4cGVjdFN0YXR1czxUPihzdGF0dXNDb2RlOiBudW1iZXIsIHVybDogc3RyaW5nLCBjYWxsYmFjazogSnNvbkNoZWNrZXJGdW5jdGlvbjxUPik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHsuLi50aGlzLnJlcXVlc3RPcHRpb25zLCAuLi57XG4gICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgIH19O1xuXG4gICAgICAgIHJldHVybiBzeW50aGV0aWNzLmV4ZWN1dGVIdHRwU3RlcChgVmVyaWZ5ICR7c3RhdHVzQ29kZX0gZm9yICR7dXJsLnJlcGxhY2UoL2F1dGg9LiovLCAnJyl9YCxcbiAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGV4cGVjdDIwMDxUPih1cmw6IHN0cmluZywgLi4uY2FsbGJhY2tzOiBKc29uQ2hlY2tlckZ1bmN0aW9uPFQ+W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhc3luYyAoanNvbjogVCwgYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGNhbGxiYWNrcy5tYXAoYyA9PiBjKGpzb24sIGJvZHksIHJlcykpKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5leHBlY3RTdGF0dXMoMjAwLCB1cmwsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBleHBlY3Q0MDQodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7Li4udGhpcy5yZXF1ZXN0T3B0aW9ucywgLi4ue1xuICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICB9fTtcblxuICAgICAgICByZXR1cm4gc3ludGhldGljcy5leGVjdXRlSHR0cFN0ZXAoYFZlcmlmeSA0MDQgZm9yICR7dXJsfWAsIHJlcXVlc3RPcHRpb25zLCB2YWxpZGF0ZVN0YXR1c0NvZGVBbmRDb250ZW50VHlwZSg0MDQsIE1lZGlhVHlwZS5URVhUX1BMQUlOKSk7XG4gICAgfVxuXG4gICAgZXhwZWN0NDAwKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gey4uLnRoaXMucmVxdWVzdE9wdGlvbnMsIC4uLntcbiAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgfX07XG5cbiAgICAgICAgcmV0dXJuIHN5bnRoZXRpY3MuZXhlY3V0ZUh0dHBTdGVwKGBWZXJpZnkgNDAwIGZvciAke3VybH1gLCByZXF1ZXN0T3B0aW9ucywgdmFsaWRhdGVTdGF0dXNDb2RlQW5kQ29udGVudFR5cGUoNDAwLCBNZWRpYVR5cGUuVEVYVF9QTEFJTikpO1xuICAgIH1cblxuICAgIGV4cGVjdDQwM1dpdGhvdXRBcGlLZXkodXJsOiBzdHJpbmcsIG1lZGlhVHlwZT86IE1lZGlhVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMucmVxdWVzdE9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW0FQSV9LRVlfSEVBREVSXSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vIGFwaSBrZXkgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gey4uLnRoaXMucmVxdWVzdE9wdGlvbnMsIC4uLntcbiAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICAgIGhlYWRlcnM6IGJhc2VIZWFkZXJzLFxuICAgICAgICB9fTtcblxuICAgICAgICByZXR1cm4gc3ludGhldGljcy5leGVjdXRlSHR0cFN0ZXAoYFZlcmlmeSA0MDMgZm9yICR7dXJsfWAsXG4gICAgICAgICAgICByZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIHZhbGlkYXRlU3RhdHVzQ29kZUFuZENvbnRlbnRUeXBlKDQwMywgbWVkaWFUeXBlIHx8IE1lZGlhVHlwZS5BUFBMSUNBVElPTl9KU09OKSk7XG4gICAgfVxuXG4gICAgZG9uZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJDYW5hcnkgc3VjY2Vzc2Z1bFwiO1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlOiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBnZXRCb2R5RnJvbVJlc3BvbnNlKHJlc3BvbnNlKTtcblxuICAgIGlmIChyZXNwb25zZS5oZWFkZXJzW2NvbnN0YW50cy5IVFRQMl9IRUFERVJfQ09OVEVOVF9FTkNPRElOR10gPT09ICdnemlwJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHpsaWIuZ3VuemlwU3luYyhib2R5KS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJlcnJvciBcIiArIEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBib2R5LnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGdldEJvZHlGcm9tUmVzcG9uc2UocmVzcG9uc2U6IEluY29taW5nTWVzc2FnZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAoKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlcnM6IEJ1ZmZlcltdID0gW107XG5cbiAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgICAgICBidWZmZXJzLnB1c2goZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVycykudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgZnVuY3Rpb24sIHRoYXQgdmFsaWRhdGVzIHRoYXQgdGhlIHN0YXR1cyBjb2RlIGFuZCBjb250ZW50LXR5cGUgZnJvbSByZXNwb25zZSBhcmUgdGhlIGdpdmVuIHZhbHVlc1xuICogQHBhcmFtIHN0YXR1c0NvZGVcbiAqIEBwYXJhbSBjb250ZW50VHlwZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXR1c0NvZGVBbmRDb250ZW50VHlwZShzdGF0dXNDb2RlOiBudW1iZXIsIGNvbnRlbnRUeXBlOiBNZWRpYVR5cGUpOiAoUmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAocmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSBzdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Jlcy5zdGF0dXNDb2RlfSAke3Jlcy5zdGF0dXNNZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX1RZUEVdICE9PSBjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgY29udGVudC10eXBlICcgKyByZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbi8vIERFUFJFQ0FURURcbmV4cG9ydCBjbGFzcyBSZXNwb25zZUNoZWNrZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGVudFR5cGU7XG4gICAgcHJpdmF0ZSBjaGVja0NvcnMgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGVudFR5cGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvckpzb24oKTogUmVzcG9uc2VDaGVja2VyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUNoZWNrZXIoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JDU1YoKTogUmVzcG9uc2VDaGVja2VyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUNoZWNrZXIoTWVkaWFUeXBlLlRFWFRfQ1NWKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yR2VvanNvbigpOiBSZXNwb25zZUNoZWNrZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlQ2hlY2tlcihNZWRpYVR5cGUuQVBQTElDQVRJT05fR0VPSlNPTik7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvckpwZWcoKTogUmVzcG9uc2VDaGVja2VyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUNoZWNrZXIoTWVkaWFUeXBlLklNQUdFX0pQRUcpO1xuICAgIH1cblxuICAgIGNoZWNrKCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlQ2hlY2tlcigoKSA9PiB7XG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIGRvIGFueXRoaW5nXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoZWNrSnNvbjxUPihmbjogKGpzb246IFQsIGJvZHk6IHN0cmluZywgcmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHZvaWQpOiBDaGVja2VyRnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUNoZWNrZXIoKGJvZHk6IHN0cmluZywgcmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGZuKEpTT04ucGFyc2UoYm9keSksIGJvZHksIHJlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc3BvbnNlQ2hlY2tlcihmbjogKGJvZHk6IHN0cmluZywgcmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHZvaWQpOiBDaGVja2VyRnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gYXN5bmMgKHJlczogSW5jb21pbmdNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlcy5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGF0dXNDb2RlIG1pc3NpbmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlIDwgMjAwIHx8IHJlcy5zdGF0dXNDb2RlID4gMjk5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Jlcy5zdGF0dXNDb2RlfSAke3Jlcy5zdGF0dXNNZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja0NvcnMgJiYgIXJlcy5oZWFkZXJzW2NvbnN0YW50cy5IVFRQMl9IRUFERVJfQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ09SUyBtaXNzaW5nJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0gIT09IHRoaXMuY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIGNvbnRlbnQtdHlwZSAnICsgcmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX1RZUEVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGdldFJlc3BvbnNlQm9keShyZXMpO1xuXG4gICAgICAgICAgICBmbihib2R5LCByZXMpO1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRDaGVja2VyIHtcbiAgICBzdGF0aWMgY2hlY2tKc29uPFQ+KGZuOiAoanNvbjogVCwgYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBhc3luYyAocmVzOiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBnZXRSZXNwb25zZUJvZHkocmVzKTtcblxuICAgICAgICAgICAgZm4oSlNPTi5wYXJzZShib2R5KSwgYm9keSwgcmVzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2hlY2tSZXNwb25zZShmbjogKGJvZHk6IHN0cmluZywgcmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHZvaWQpOiBDaGVja2VyRnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gYXN5bmMgKHJlczogSW5jb21pbmdNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgZ2V0UmVzcG9uc2VCb2R5KHJlcyk7XG5cbiAgICAgICAgICAgIGZuKGJvZHksIHJlcyk7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29udGVudFR5cGVDaGVja2VyIHtcbiAgICBzdGF0aWMgY2hlY2tDb250ZW50VHlwZShjb250ZW50VHlwZTogTWVkaWFUeXBlKSB7XG4gICAgICAgIHJldHVybiAocmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXR1c0NvZGUgbWlzc2luZycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzLnN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzLnN0YXR1c0NvZGV9ICR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9BQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5dKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDT1JTIG1pc3NpbmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcy5oZWFkZXJzW2NvbnN0YW50cy5IVFRQMl9IRUFERVJfQ09OVEVOVF9UWVBFXSAhPT0gY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dyb25nIGNvbnRlbnQtdHlwZSAnICsgcmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX1RZUEVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW9Kc29uQ2hlY2tlciB7XG4gICAgc3RhdGljIHZhbGlkRmVhdHVyZUNvbGxlY3Rpb24oZm4/OiAoanNvbjogRmVhdHVyZUNvbGxlY3Rpb24pID0+IHZvaWQpOiBDaGVja2VyRnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gUmVzcG9uc2VDaGVja2VyLmZvckdlb2pzb24oKS5jaGVja0pzb24oKGpzb246IEZlYXR1cmVDb2xsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBBc3NlcnRlci5hc3NlcnRFcXVhbHMoanNvbi50eXBlLCAnRmVhdHVyZUNvbGxlY3Rpb24nKTtcbiAgICAgICAgICAgIEFzc2VydGVyLmFzc2VydFRydWUoaXNWYWxpZEdlb0pzb24oanNvbikpO1xuXG4gICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICBmbihqc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGVhZGVyQ2hlY2tlciB7XG4gICAgc3RhdGljIGNoZWNrSGVhZGVyRXhpc3RzKGhlYWRlck5hbWU6IHN0cmluZyk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiAocmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzLmhlYWRlcnNbaGVhZGVyTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgaGVhZGVyOiAnICsgaGVhZGVyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGNoZWNrSGVhZGVyTWlzc2luZyhoZWFkZXJOYW1lOiBzdHJpbmcpOiBDaGVja2VyRnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gKHJlczogSW5jb21pbmdNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLmhlYWRlcnNbaGVhZGVyTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hlYWRlciBzaG91bGQgbm90IGV4aXN0OiAnICsgaGVhZGVyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|
@@ -1,95 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.DocumentationPart = exports.addTagsAndSummary = exports.addTags = exports.addDocumentation = exports.addQueryParameterDescription = void 0;
|
4
|
-
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
5
|
-
// Documentation parts are objects that describe an API Gateway API or parts of an API
|
6
|
-
// https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api.html
|
7
|
-
/**
|
8
|
-
* Add description to a query parameter
|
9
|
-
* @param name query parameter name
|
10
|
-
* @param description query parameter description
|
11
|
-
* @param resource REST API resource
|
12
|
-
* @param stack CloudFormation stack
|
13
|
-
*
|
14
|
-
* @deprecated Use DigitrafficRestApi.documentResource
|
15
|
-
*/
|
16
|
-
function addQueryParameterDescription(name, description, resource, stack) {
|
17
|
-
new aws_apigateway_1.CfnDocumentationPart(stack, `${name}Documentation`, {
|
18
|
-
restApiId: resource.api.restApiId,
|
19
|
-
location: {
|
20
|
-
type: 'QUERY_PARAMETER',
|
21
|
-
name,
|
22
|
-
path: resource.path,
|
23
|
-
},
|
24
|
-
properties: JSON.stringify({ description }),
|
25
|
-
});
|
26
|
-
}
|
27
|
-
exports.addQueryParameterDescription = addQueryParameterDescription;
|
28
|
-
/**
|
29
|
-
* Add a documentation part to a method
|
30
|
-
* @param methodDescription
|
31
|
-
* @param documentationProperties
|
32
|
-
* @param resource REST API resource
|
33
|
-
* @param stack CloudFormation stack
|
34
|
-
*/
|
35
|
-
function addDocumentation(methodDescription, documentationProperties, resource, stack) {
|
36
|
-
new aws_apigateway_1.CfnDocumentationPart(stack, `${methodDescription}Documentation`, {
|
37
|
-
restApiId: resource.api.restApiId,
|
38
|
-
location: {
|
39
|
-
type: 'METHOD',
|
40
|
-
path: resource.path,
|
41
|
-
},
|
42
|
-
properties: JSON.stringify(documentationProperties),
|
43
|
-
});
|
44
|
-
}
|
45
|
-
exports.addDocumentation = addDocumentation;
|
46
|
-
/**
|
47
|
-
* Adds OpenAPI tags to an API method
|
48
|
-
* @param methodDescription Description of API method
|
49
|
-
* @param tags OpenAPI tags
|
50
|
-
* @param resource REST API resource
|
51
|
-
* @param stack CloudFormation stack
|
52
|
-
*/
|
53
|
-
function addTags(methodDescription, tags, resource, stack) {
|
54
|
-
addDocumentation(methodDescription, { tags }, resource, stack);
|
55
|
-
}
|
56
|
-
exports.addTags = addTags;
|
57
|
-
/**
|
58
|
-
* Adds OpenAPI tags and a method summary to an API method
|
59
|
-
*
|
60
|
-
* @deprecated Use DigitrafficRestApi.documentResource
|
61
|
-
*
|
62
|
-
* @param methodDescription Description of API method
|
63
|
-
* @param tags OpenAPI tags
|
64
|
-
* @param summary OpenAPI summary
|
65
|
-
* @param resource REST API resource
|
66
|
-
* @param stack CloudFormation stack
|
67
|
-
*/
|
68
|
-
function addTagsAndSummary(methodDescription, tags, summary, resource, stack) {
|
69
|
-
addDocumentation(methodDescription, { tags, summary }, resource, stack);
|
70
|
-
}
|
71
|
-
exports.addTagsAndSummary = addTagsAndSummary;
|
72
|
-
class DocumentationPart {
|
73
|
-
constructor(parameterName, documentationProperties, type) {
|
74
|
-
this.parameterName = parameterName;
|
75
|
-
this.documentationProperties = documentationProperties;
|
76
|
-
this.type = type;
|
77
|
-
}
|
78
|
-
deprecated(note) {
|
79
|
-
// deprecated is not supported ATM: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-known-issues.html
|
80
|
-
this.documentationProperties.deprecated = true;
|
81
|
-
this.documentationProperties.summary += '. ' + note;
|
82
|
-
return this;
|
83
|
-
}
|
84
|
-
static queryParameter(parameterName, description) {
|
85
|
-
return new DocumentationPart(parameterName, { description }, "QUERY_PARAMETER");
|
86
|
-
}
|
87
|
-
static pathParameter(parameterName, description) {
|
88
|
-
return new DocumentationPart(parameterName, { description }, "PATH_PARAMETER");
|
89
|
-
}
|
90
|
-
static method(tags, name, summary) {
|
91
|
-
return new DocumentationPart(name, { tags, summary }, "METHOD");
|
92
|
-
}
|
93
|
-
}
|
94
|
-
exports.DocumentationPart = DocumentationPart;
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvZG9jdW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBMEU7QUFFMUUsc0ZBQXNGO0FBQ3RGLGdHQUFnRztBQUVoRzs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLElBQVksRUFDckQsV0FBbUIsRUFDbkIsUUFBa0IsRUFDbEIsS0FBZ0I7SUFDaEIsSUFBSSxxQ0FBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLGVBQWUsRUFBRTtRQUNwRCxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTO1FBQ2pDLFFBQVEsRUFBRTtZQUNOLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsSUFBSTtZQUNKLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUN0QjtRQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUM7S0FDNUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQWJELG9FQWFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsaUJBQXlCLEVBQ3RELHVCQUErQixFQUMvQixRQUFrQixFQUNsQixLQUFnQjtJQUNoQixJQUFJLHFDQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLGlCQUFpQixlQUFlLEVBQUU7UUFDakUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUztRQUNqQyxRQUFRLEVBQUU7WUFDTixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUN0QjtRQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDO0tBQ3RELENBQUMsQ0FBQztBQUNQLENBQUM7QUFaRCw0Q0FZQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxpQkFBeUIsRUFDN0MsSUFBYyxFQUNkLFFBQWtCLEVBQ2xCLEtBQWdCO0lBQ2hCLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFMRCwwQkFLQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FDN0IsaUJBQXlCLEVBQ3pCLElBQWMsRUFDZCxPQUFlLEVBQ2YsUUFBa0IsRUFDbEIsS0FBZ0I7SUFFaEIsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFSRCw4Q0FRQztBQVNELE1BQWEsaUJBQWlCO0lBSzFCLFlBQW9CLGFBQXFCLEVBQUUsdUJBQWdELEVBQUUsSUFBWTtRQUNyRyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZO1FBQ25CLDhIQUE4SDtRQUM5SCxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxJQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFFbkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBcUIsRUFBRSxXQUFtQjtRQUM1RCxPQUFPLElBQUksaUJBQWlCLENBQUMsYUFBYSxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFxQixFQUFFLFdBQW1CO1FBQzNELE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsRUFBQyxXQUFXLEVBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQWMsRUFBRSxJQUFZLEVBQUUsT0FBZTtRQUN2RCxPQUFPLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDSjtBQTlCRCw4Q0E4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7Q2ZuRG9jdW1lbnRhdGlvblBhcnQsIFJlc291cmNlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcblxuLy8gRG9jdW1lbnRhdGlvbiBwYXJ0cyBhcmUgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIGFuIEFQSSBHYXRld2F5IEFQSSBvciBwYXJ0cyBvZiBhbiBBUElcbi8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1kb2N1bWVudGluZy1hcGkuaHRtbFxuXG4vKipcbiAqIEFkZCBkZXNjcmlwdGlvbiB0byBhIHF1ZXJ5IHBhcmFtZXRlclxuICogQHBhcmFtIG5hbWUgcXVlcnkgcGFyYW1ldGVyIG5hbWVcbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiBxdWVyeSBwYXJhbWV0ZXIgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSByZXNvdXJjZSBSRVNUIEFQSSByZXNvdXJjZVxuICogQHBhcmFtIHN0YWNrIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERpZ2l0cmFmZmljUmVzdEFwaS5kb2N1bWVudFJlc291cmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlckRlc2NyaXB0aW9uKG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICBzdGFjazogQ29uc3RydWN0KSB7XG4gICAgbmV3IENmbkRvY3VtZW50YXRpb25QYXJ0KHN0YWNrLCBgJHtuYW1lfURvY3VtZW50YXRpb25gLCB7XG4gICAgICAgIHJlc3RBcGlJZDogcmVzb3VyY2UuYXBpLnJlc3RBcGlJZCxcbiAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICdRVUVSWV9QQVJBTUVURVInLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHBhdGg6IHJlc291cmNlLnBhdGgsXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KHtkZXNjcmlwdGlvbn0pLFxuICAgIH0pO1xufVxuXG4vKipcbiAqIEFkZCBhIGRvY3VtZW50YXRpb24gcGFydCB0byBhIG1ldGhvZFxuICogQHBhcmFtIG1ldGhvZERlc2NyaXB0aW9uXG4gKiBAcGFyYW0gZG9jdW1lbnRhdGlvblByb3BlcnRpZXNcbiAqIEBwYXJhbSByZXNvdXJjZSBSRVNUIEFQSSByZXNvdXJjZVxuICogQHBhcmFtIHN0YWNrIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREb2N1bWVudGF0aW9uKG1ldGhvZERlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgZG9jdW1lbnRhdGlvblByb3BlcnRpZXM6IG9iamVjdCxcbiAgICByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgc3RhY2s6IENvbnN0cnVjdCkge1xuICAgIG5ldyBDZm5Eb2N1bWVudGF0aW9uUGFydChzdGFjaywgYCR7bWV0aG9kRGVzY3JpcHRpb259RG9jdW1lbnRhdGlvbmAsIHtcbiAgICAgICAgcmVzdEFwaUlkOiByZXNvdXJjZS5hcGkucmVzdEFwaUlkLFxuICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogJ01FVEhPRCcsXG4gICAgICAgICAgICBwYXRoOiByZXNvdXJjZS5wYXRoLFxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeShkb2N1bWVudGF0aW9uUHJvcGVydGllcyksXG4gICAgfSk7XG59XG5cbi8qKlxuICogQWRkcyBPcGVuQVBJIHRhZ3MgdG8gYW4gQVBJIG1ldGhvZFxuICogQHBhcmFtIG1ldGhvZERlc2NyaXB0aW9uIERlc2NyaXB0aW9uIG9mIEFQSSBtZXRob2RcbiAqIEBwYXJhbSB0YWdzIE9wZW5BUEkgdGFnc1xuICogQHBhcmFtIHJlc291cmNlIFJFU1QgQVBJIHJlc291cmNlXG4gKiBAcGFyYW0gc3RhY2sgQ2xvdWRGb3JtYXRpb24gc3RhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRhZ3MobWV0aG9kRGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSxcbiAgICByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgc3RhY2s6IENvbnN0cnVjdCkge1xuICAgIGFkZERvY3VtZW50YXRpb24obWV0aG9kRGVzY3JpcHRpb24sIHt0YWdzfSwgcmVzb3VyY2UsIHN0YWNrKTtcbn1cblxuLyoqXG4gKiBBZGRzIE9wZW5BUEkgdGFncyBhbmQgYSBtZXRob2Qgc3VtbWFyeSB0byBhbiBBUEkgbWV0aG9kXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERpZ2l0cmFmZmljUmVzdEFwaS5kb2N1bWVudFJlc291cmNlXG4gKlxuICogQHBhcmFtIG1ldGhvZERlc2NyaXB0aW9uIERlc2NyaXB0aW9uIG9mIEFQSSBtZXRob2RcbiAqIEBwYXJhbSB0YWdzIE9wZW5BUEkgdGFnc1xuICogQHBhcmFtIHN1bW1hcnkgT3BlbkFQSSBzdW1tYXJ5XG4gKiBAcGFyYW0gcmVzb3VyY2UgUkVTVCBBUEkgcmVzb3VyY2VcbiAqIEBwYXJhbSBzdGFjayBDbG91ZEZvcm1hdGlvbiBzdGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVGFnc0FuZFN1bW1hcnkoXG4gICAgbWV0aG9kRGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSxcbiAgICBzdW1tYXJ5OiBzdHJpbmcsXG4gICAgcmVzb3VyY2U6IFJlc291cmNlLFxuICAgIHN0YWNrOiBDb25zdHJ1Y3QsXG4pIHtcbiAgICBhZGREb2N1bWVudGF0aW9uKG1ldGhvZERlc2NyaXB0aW9uLCB7dGFncywgc3VtbWFyeX0sIHJlc291cmNlLCBzdGFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRhdGlvblByb3BlcnRpZXMge1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gICAgdGFncz86IHN0cmluZ1tdXG4gICAgc3VtbWFyeT86IHN0cmluZ1xuICAgIGRlcHJlY2F0ZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudGF0aW9uUGFydCB7XG4gICAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbiAgICByZWFkb25seSBkb2N1bWVudGF0aW9uUHJvcGVydGllczogRG9jdW1lbnRhdGlvblByb3BlcnRpZXM7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHBhcmFtZXRlck5hbWU6IHN0cmluZywgZG9jdW1lbnRhdGlvblByb3BlcnRpZXM6IERvY3VtZW50YXRpb25Qcm9wZXJ0aWVzLCB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudGF0aW9uUHJvcGVydGllcyA9IGRvY3VtZW50YXRpb25Qcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cblxuICAgIGRlcHJlY2F0ZWQobm90ZTogc3RyaW5nKTogRG9jdW1lbnRhdGlvblBhcnQge1xuICAgICAgICAvLyBkZXByZWNhdGVkIGlzIG5vdCBzdXBwb3J0ZWQgQVRNOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXkta25vd24taXNzdWVzLmh0bWxcbiAgICAgICAgdGhpcy5kb2N1bWVudGF0aW9uUHJvcGVydGllcy5kZXByZWNhdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudGF0aW9uUHJvcGVydGllcy5zdW1tYXJ5Kz0gJy4gJyArIG5vdGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc3RhdGljIHF1ZXJ5UGFyYW1ldGVyKHBhcmFtZXRlck5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50YXRpb25QYXJ0KHBhcmFtZXRlck5hbWUsIHtkZXNjcmlwdGlvbn0sIFwiUVVFUllfUEFSQU1FVEVSXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXRoUGFyYW1ldGVyKHBhcmFtZXRlck5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50YXRpb25QYXJ0KHBhcmFtZXRlck5hbWUsIHtkZXNjcmlwdGlvbn0sIFwiUEFUSF9QQVJBTUVURVJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIG1ldGhvZCh0YWdzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudGF0aW9uUGFydChuYW1lLCB7dGFncywgc3VtbWFyeX0sIFwiTUVUSE9EXCIpO1xuICAgIH1cbn1cbiJdfQ==
|
@@ -1,31 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.Scheduler = void 0;
|
4
|
-
const aws_events_1 = require("aws-cdk-lib/aws-events");
|
5
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
6
|
-
const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
|
7
|
-
class Scheduler extends aws_events_1.Rule {
|
8
|
-
constructor(stack, ruleName, schedule, lambda) {
|
9
|
-
super(stack, ruleName, { ruleName, schedule });
|
10
|
-
if (lambda) {
|
11
|
-
this.addTarget(new aws_events_targets_1.LambdaFunction(lambda));
|
12
|
-
}
|
13
|
-
}
|
14
|
-
static everyMinute(stack, ruleName, lambda) {
|
15
|
-
return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.minutes(1), lambda);
|
16
|
-
}
|
17
|
-
static everyMinutes(stack, ruleName, minutes, lambda) {
|
18
|
-
return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.minutes(minutes), lambda);
|
19
|
-
}
|
20
|
-
static everyHour(stack, ruleName, lambda) {
|
21
|
-
return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.hours(1), lambda);
|
22
|
-
}
|
23
|
-
static everyDay(stack, ruleName, lambda) {
|
24
|
-
return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.days(1), lambda);
|
25
|
-
}
|
26
|
-
static every(stack, ruleName, duration, lambda) {
|
27
|
-
return new Scheduler(stack, ruleName, aws_events_1.Schedule.rate(duration), lambda);
|
28
|
-
}
|
29
|
-
}
|
30
|
-
exports.Scheduler = Scheduler;
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9zY2hlZHVsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQXNEO0FBQ3RELDZDQUFxQztBQUNyQyx1RUFBOEQ7QUFJOUQsTUFBYSxTQUFVLFNBQVEsaUJBQUk7SUFDL0IsWUFBWSxLQUFnQixFQUFFLFFBQWdCLEVBQUUsUUFBa0IsRUFBRSxNQUFpQjtRQUNqRixLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLG1DQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCLEVBQUUsUUFBZ0IsRUFBRSxNQUFpQjtRQUNwRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBZSxFQUFFLE1BQWlCO1FBQ3RGLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQWdCLEVBQUUsUUFBZ0IsRUFBRSxNQUFpQjtRQUNsRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFnQixFQUFFLFFBQWdCLEVBQUUsTUFBaUI7UUFDakUsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBZ0IsRUFBRSxRQUFnQixFQUFFLFFBQWtCLEVBQUUsTUFBaUI7UUFDbEYsT0FBTyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLHFCQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDSjtBQTVCRCw4QkE0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1J1bGUsIFNjaGVkdWxlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHtEdXJhdGlvbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0xhbWJkYUZ1bmN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5pbXBvcnQge0Z1bmN0aW9ufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVyIGV4dGVuZHMgUnVsZSB7XG4gICAgY29uc3RydWN0b3Ioc3RhY2s6IENvbnN0cnVjdCwgcnVsZU5hbWU6IHN0cmluZywgc2NoZWR1bGU6IFNjaGVkdWxlLCBsYW1iZGE/OiBGdW5jdGlvbikge1xuICAgICAgICBzdXBlcihzdGFjaywgcnVsZU5hbWUsIHsgcnVsZU5hbWUsIHNjaGVkdWxlIH0pO1xuXG4gICAgICAgIGlmIChsYW1iZGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVGFyZ2V0KG5ldyBMYW1iZGFGdW5jdGlvbihsYW1iZGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBldmVyeU1pbnV0ZShzdGFjazogQ29uc3RydWN0LCBydWxlTmFtZTogc3RyaW5nLCBsYW1iZGE/OiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gU2NoZWR1bGVyLmV2ZXJ5KHN0YWNrLCBydWxlTmFtZSwgRHVyYXRpb24ubWludXRlcygxKSwgbGFtYmRhKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXZlcnlNaW51dGVzKHN0YWNrOiBDb25zdHJ1Y3QsIHJ1bGVOYW1lOiBzdHJpbmcsIG1pbnV0ZXM6IG51bWJlciwgbGFtYmRhPzogRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIFNjaGVkdWxlci5ldmVyeShzdGFjaywgcnVsZU5hbWUsIER1cmF0aW9uLm1pbnV0ZXMobWludXRlcyksIGxhbWJkYSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2ZXJ5SG91cihzdGFjazogQ29uc3RydWN0LCBydWxlTmFtZTogc3RyaW5nLCBsYW1iZGE/OiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gU2NoZWR1bGVyLmV2ZXJ5KHN0YWNrLCBydWxlTmFtZSwgRHVyYXRpb24uaG91cnMoMSksIGxhbWJkYSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2ZXJ5RGF5KHN0YWNrOiBDb25zdHJ1Y3QsIHJ1bGVOYW1lOiBzdHJpbmcsIGxhbWJkYT86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiBTY2hlZHVsZXIuZXZlcnkoc3RhY2ssIHJ1bGVOYW1lLCBEdXJhdGlvbi5kYXlzKDEpLCBsYW1iZGEpO1xuICAgIH1cblxuICAgIHN0YXRpYyBldmVyeShzdGFjazogQ29uc3RydWN0LCBydWxlTmFtZTogc3RyaW5nLCBkdXJhdGlvbjogRHVyYXRpb24sIGxhbWJkYT86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NoZWR1bGVyKHN0YWNrLCBydWxlTmFtZSwgU2NoZWR1bGUucmF0ZShkdXJhdGlvbiksIGxhbWJkYSk7XG4gICAgfVxufVxuIl19
|