@digitraffic/common 2022.10.25-1 → 2022.10.31-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/.editorconfig +9 -0
- package/.eslintignore +4 -0
- package/.eslintrc.json +27 -0
- package/.github/CODEOWNERS +2 -0
- package/.github/workflows/build.yml +36 -0
- package/.github/workflows/eslint.yml +38 -0
- package/.github/workflows/mirror.yml +15 -0
- package/.gitignore +29 -0
- package/.husky/pre-commit +4 -0
- package/.prettierrc.json +10 -0
- package/dist/aws/infra/api/integration.js +52 -0
- package/dist/aws/infra/api/response.js +61 -0
- package/dist/aws/infra/api/responses.js +82 -0
- package/dist/aws/infra/api/static-integration.js +54 -0
- package/dist/aws/infra/canaries/canary-alarm.js +26 -0
- package/dist/aws/infra/canaries/canary-keys.js +7 -0
- package/dist/aws/infra/canaries/canary-parameters.js +3 -0
- package/dist/aws/infra/canaries/canary-role.js +46 -0
- package/dist/aws/infra/canaries/canary.js +32 -0
- package/dist/aws/infra/canaries/database-canary.js +70 -0
- package/dist/aws/infra/canaries/database-checker.js +103 -0
- package/dist/aws/infra/canaries/url-canary.js +47 -0
- package/dist/aws/infra/canaries/url-checker.js +252 -0
- package/dist/aws/infra/documentation.js +95 -0
- package/dist/aws/infra/scheduler.js +31 -0
- package/dist/aws/infra/security-rule.js +39 -0
- package/dist/aws/infra/sqs-integration.js +93 -0
- package/dist/aws/infra/sqs-queue.js +130 -0
- package/dist/aws/infra/stack/lambda-configs.js +105 -0
- package/dist/aws/infra/stack/monitoredfunction.js +143 -0
- package/dist/aws/infra/stack/rest_apis.js +185 -0
- package/dist/aws/infra/stack/stack-checking-aspect.js +174 -0
- package/dist/aws/infra/stack/stack.js +67 -0
- package/dist/aws/infra/stack/subscription.js +42 -0
- package/dist/aws/infra/usage-plans.js +42 -0
- package/dist/aws/runtime/apikey.js +13 -0
- package/dist/aws/runtime/digitraffic-integration-response.js +26 -0
- package/dist/aws/runtime/environment.js +12 -0
- package/dist/aws/runtime/messaging.js +31 -0
- package/dist/aws/runtime/s3.js +30 -0
- package/dist/aws/runtime/secrets/dbsecret.js +96 -0
- package/dist/aws/runtime/secrets/proxy-holder.js +27 -0
- package/dist/aws/runtime/secrets/rds-holder.js +27 -0
- package/dist/aws/runtime/secrets/secret-holder.js +76 -0
- package/dist/aws/runtime/secrets/secret.js +43 -0
- package/dist/aws/types/errors.js +16 -0
- package/dist/aws/types/lambda-response.js +33 -0
- package/dist/aws/types/mediatypes.js +16 -0
- package/dist/aws/types/model-with-reference.js +3 -0
- package/dist/aws/types/proxytypes.js +3 -0
- package/dist/aws/types/tags.js +7 -0
- package/dist/database/cached.js +32 -0
- package/dist/database/database.js +70 -0
- package/dist/database/last-updated.js +54 -0
- package/dist/database/models.js +3 -0
- package/dist/marine/id_utils.js +33 -0
- package/dist/marine/rtz.js +3 -0
- package/dist/test/asserter.js +45 -0
- package/dist/test/db-testutils.js +31 -0
- package/dist/test/httpserver.js +74 -0
- package/dist/test/secret.js +25 -0
- package/dist/test/secrets-manager.js +59 -0
- package/dist/test/testutils.js +44 -0
- package/dist/types/either.js +3 -0
- package/dist/types/input-error.js +7 -0
- package/dist/types/language.js +10 -0
- package/dist/types/traffictype.js +13 -0
- package/dist/types/validator.js +14 -0
- package/dist/utils/api-model.js +129 -0
- package/dist/utils/base64.js +21 -0
- package/dist/utils/date-utils.js +34 -0
- package/dist/utils/geojson-types.js +18 -0
- package/dist/utils/geometry.js +164 -0
- package/dist/utils/retry.js +50 -0
- package/dist/utils/slack.js +25 -0
- package/dist/utils/utils.js +75 -0
- package/jest.config.js +15 -0
- package/package.json +15 -13
- package/src/@types/geojson-validation/index.d.ts +4 -0
- package/src/aws/infra/api/integration.ts +73 -0
- package/src/aws/infra/api/response.ts +67 -0
- package/src/aws/infra/api/responses.ts +124 -0
- package/src/aws/infra/api/static-integration.ts +62 -0
- package/src/aws/infra/canaries/canary-alarm.ts +31 -0
- package/src/aws/infra/canaries/canary-keys.ts +3 -0
- package/{aws/infra/canaries/canary-parameters.d.ts → src/aws/infra/canaries/canary-parameters.ts} +7 -6
- package/src/aws/infra/canaries/canary-role.ts +47 -0
- package/src/aws/infra/canaries/canary.ts +46 -0
- package/src/aws/infra/canaries/database-canary.ts +98 -0
- package/src/aws/infra/canaries/database-checker.ts +155 -0
- package/src/aws/infra/canaries/url-canary.ts +74 -0
- package/src/aws/infra/canaries/url-checker.ts +366 -0
- package/src/aws/infra/documentation.ts +124 -0
- package/src/aws/infra/scheduler.ts +59 -0
- package/src/aws/infra/security-rule.ts +38 -0
- package/src/aws/infra/sqs-integration.ts +102 -0
- package/src/aws/infra/sqs-queue.ts +148 -0
- package/src/aws/infra/stack/lambda-configs.ts +207 -0
- package/src/aws/infra/stack/monitoredfunction.ts +342 -0
- package/src/aws/infra/stack/rest_apis.ts +223 -0
- package/src/aws/infra/stack/stack-checking-aspect.ts +279 -0
- package/src/aws/infra/stack/stack.ts +145 -0
- package/src/aws/infra/stack/subscription.ts +58 -0
- package/src/aws/infra/usage-plans.ts +41 -0
- package/src/aws/runtime/apikey.ts +9 -0
- package/src/aws/runtime/digitraffic-integration-response.ts +28 -0
- package/src/aws/runtime/environment.ts +9 -0
- package/src/aws/runtime/messaging.ts +26 -0
- package/src/aws/runtime/s3.ts +44 -0
- package/src/aws/runtime/secrets/dbsecret.ts +116 -0
- package/src/aws/runtime/secrets/proxy-holder.ts +37 -0
- package/src/aws/runtime/secrets/rds-holder.ts +33 -0
- package/src/aws/runtime/secrets/secret-holder.ts +116 -0
- package/src/aws/runtime/secrets/secret.ts +50 -0
- package/src/aws/types/errors.ts +14 -0
- package/src/aws/types/lambda-response.ts +43 -0
- package/{aws/types/mediatypes.d.ts → src/aws/types/mediatypes.ts} +4 -3
- package/{aws/types/model-with-reference.d.ts → src/aws/types/model-with-reference.ts} +2 -1
- package/src/aws/types/proxytypes.ts +27 -0
- package/src/aws/types/tags.ts +3 -0
- package/src/database/cached.ts +35 -0
- package/src/database/database.ts +96 -0
- package/src/database/last-updated.ts +59 -0
- package/{database/models.d.ts → src/database/models.ts} +1 -0
- package/src/marine/id_utils.ts +30 -0
- package/src/marine/rtz.ts +57 -0
- package/src/test/asserter.ts +48 -0
- package/src/test/db-testutils.ts +44 -0
- package/src/test/httpserver.ts +96 -0
- package/src/test/secret.ts +23 -0
- package/src/test/secrets-manager.ts +34 -0
- package/src/test/testutils.ts +39 -0
- package/src/types/either.ts +3 -0
- package/src/types/input-error.ts +2 -0
- package/src/types/language.ts +3 -0
- package/src/types/traffictype.ts +8 -0
- package/src/types/validator.ts +10 -0
- package/src/utils/api-model.ts +133 -0
- package/src/utils/base64.ts +16 -0
- package/src/utils/date-utils.ts +30 -0
- package/src/utils/geojson-types.ts +22 -0
- package/src/utils/geometry.ts +164 -0
- package/src/utils/retry.ts +49 -0
- package/src/utils/slack.ts +22 -0
- package/src/utils/utils.ts +105 -0
- package/test/marine/id_utils.test.ts +57 -0
- package/test/promise/promise.test.ts +143 -0
- package/test/secrets/dbsecret.test.ts +59 -0
- package/test/secrets/secret-holder.test.ts +143 -0
- package/test/secrets/secret.test.ts +49 -0
- package/test/test/httpserver.test.ts +128 -0
- package/test/utils/date-utils.test.ts +28 -0
- package/test/utils/geometry.test.ts +29 -0
- package/test/utils/utils.test.ts +64 -0
- package/tsconfig.eslint.json +4 -0
- package/tsconfig.json +22 -0
- package/yarn.lock +4060 -0
- package/aws/infra/api/integration.d.ts +0 -21
- package/aws/infra/api/integration.js +0 -52
- package/aws/infra/api/response.d.ts +0 -22
- package/aws/infra/api/response.js +0 -61
- package/aws/infra/api/responses.d.ts +0 -39
- package/aws/infra/api/responses.js +0 -79
- package/aws/infra/api/static-integration.d.ts +0 -15
- package/aws/infra/api/static-integration.js +0 -54
- package/aws/infra/canaries/canary-alarm.d.ts +0 -6
- package/aws/infra/canaries/canary-alarm.js +0 -26
- package/aws/infra/canaries/canary-parameters.js +0 -3
- package/aws/infra/canaries/canary-role.d.ts +0 -6
- package/aws/infra/canaries/canary-role.js +0 -46
- package/aws/infra/canaries/canary.d.ts +0 -8
- package/aws/infra/canaries/canary.js +0 -32
- package/aws/infra/canaries/database-canary.d.ts +0 -18
- package/aws/infra/canaries/database-canary.js +0 -55
- package/aws/infra/canaries/database-checker.d.ts +0 -21
- package/aws/infra/canaries/database-checker.js +0 -109
- package/aws/infra/canaries/url-canary.d.ts +0 -19
- package/aws/infra/canaries/url-canary.js +0 -46
- package/aws/infra/canaries/url-checker.d.ts +0 -46
- package/aws/infra/canaries/url-checker.js +0 -238
- package/aws/infra/documentation.d.ts +0 -56
- package/aws/infra/documentation.js +0 -95
- package/aws/infra/scheduler.d.ts +0 -12
- package/aws/infra/scheduler.js +0 -31
- package/aws/infra/security-rule.d.ts +0 -12
- package/aws/infra/security-rule.js +0 -39
- package/aws/infra/sqs-integration.d.ts +0 -7
- package/aws/infra/sqs-integration.js +0 -93
- package/aws/infra/sqs-queue.d.ts +0 -16
- package/aws/infra/sqs-queue.js +0 -130
- package/aws/infra/stack/lambda-configs.d.ts +0 -72
- package/aws/infra/stack/lambda-configs.js +0 -93
- package/aws/infra/stack/monitoredfunction.d.ts +0 -84
- package/aws/infra/stack/monitoredfunction.js +0 -135
- package/aws/infra/stack/rest_apis.d.ts +0 -41
- package/aws/infra/stack/rest_apis.js +0 -185
- package/aws/infra/stack/stack-checking-aspect.d.ts +0 -21
- package/aws/infra/stack/stack-checking-aspect.js +0 -174
- package/aws/infra/stack/stack.d.ts +0 -44
- package/aws/infra/stack/stack.js +0 -60
- package/aws/infra/stack/subscription.d.ts +0 -17
- package/aws/infra/stack/subscription.js +0 -41
- package/aws/infra/usage-plans.d.ts +0 -15
- package/aws/infra/usage-plans.js +0 -42
- package/aws/runtime/apikey.d.ts +0 -2
- package/aws/runtime/apikey.js +0 -13
- package/aws/runtime/digitraffic-integration-response.d.ts +0 -8
- package/aws/runtime/digitraffic-integration-response.js +0 -26
- package/aws/runtime/environment.d.ts +0 -1
- package/aws/runtime/environment.js +0 -12
- package/aws/runtime/messaging.d.ts +0 -10
- package/aws/runtime/messaging.js +0 -31
- package/aws/runtime/s3.d.ts +0 -2
- package/aws/runtime/s3.js +0 -30
- package/aws/runtime/secrets/dbsecret.d.ts +0 -54
- package/aws/runtime/secrets/dbsecret.js +0 -96
- package/aws/runtime/secrets/proxy-holder.d.ts +0 -9
- package/aws/runtime/secrets/proxy-holder.js +0 -26
- package/aws/runtime/secrets/rds-holder.d.ts +0 -9
- package/aws/runtime/secrets/rds-holder.js +0 -26
- package/aws/runtime/secrets/secret-holder.d.ts +0 -26
- package/aws/runtime/secrets/secret-holder.js +0 -73
- package/aws/runtime/secrets/secret.d.ts +0 -8
- package/aws/runtime/secrets/secret.js +0 -43
- package/aws/types/errors.d.ts +0 -4
- package/aws/types/errors.js +0 -9
- package/aws/types/lambda-response.d.ts +0 -12
- package/aws/types/lambda-response.js +0 -28
- package/aws/types/mediatypes.js +0 -15
- package/aws/types/model-with-reference.js +0 -3
- package/aws/types/proxytypes.d.ts +0 -26
- package/aws/types/proxytypes.js +0 -3
- package/aws/types/tags.d.ts +0 -2
- package/aws/types/tags.js +0 -7
- package/database/cached.d.ts +0 -7
- package/database/cached.js +0 -32
- package/database/database.d.ts +0 -19
- package/database/database.js +0 -62
- package/database/last-updated.d.ts +0 -16
- package/database/last-updated.js +0 -54
- package/database/models.js +0 -3
- package/index.d.ts +0 -1
- package/index.js +0 -18
- package/marine/id_utils.d.ts +0 -3
- package/marine/id_utils.js +0 -33
- package/marine/rtz.d.ts +0 -48
- package/marine/rtz.js +0 -3
- package/test/asserter.d.ts +0 -11
- package/test/asserter.js +0 -45
- package/test/db-testutils.d.ts +0 -2
- package/test/db-testutils.js +0 -31
- package/test/httpserver.d.ts +0 -18
- package/test/httpserver.js +0 -67
- package/test/secret.d.ts +0 -3
- package/test/secret.js +0 -25
- package/test/secrets-manager.d.ts +0 -9
- package/test/secrets-manager.js +0 -59
- package/test/testutils.d.ts +0 -12
- package/test/testutils.js +0 -44
- package/types/input-error.d.ts +0 -2
- package/types/input-error.js +0 -7
- package/types/language.d.ts +0 -5
- package/types/language.js +0 -10
- package/types/traffictype.d.ts +0 -8
- package/types/traffictype.js +0 -13
- package/types/validator.d.ts +0 -4
- package/types/validator.js +0 -14
- package/utils/api-model.d.ts +0 -87
- package/utils/api-model.js +0 -129
- package/utils/base64.d.ts +0 -12
- package/utils/base64.js +0 -21
- package/utils/date-utils.d.ts +0 -17
- package/utils/date-utils.js +0 -34
- package/utils/geojson-types.d.ts +0 -14
- package/utils/geojson-types.js +0 -18
- package/utils/geometry.d.ts +0 -36
- package/utils/geometry.js +0 -140
- package/utils/retry.d.ts +0 -13
- package/utils/retry.js +0 -50
- package/utils/slack.d.ts +0 -5
- package/utils/slack.js +0 -25
- package/utils/utils.d.ts +0 -30
- package/utils/utils.js +0 -64
@@ -1,93 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.defaultLambdaConfiguration = exports.dbLambdaConfiguration = exports.lambdaFunctionProps = exports.databaseFunctionProps = void 0;
|
4
|
-
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
5
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
6
|
-
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
7
|
-
function databaseFunctionProps(stack, environment, lambdaName, simpleLambdaName, config) {
|
8
|
-
const vpcSubnets = stack.vpc ? {
|
9
|
-
subnets: stack.vpc.privateSubnets,
|
10
|
-
} : undefined;
|
11
|
-
return { ...lambdaFunctionProps(stack, environment, lambdaName, simpleLambdaName, config), ...{
|
12
|
-
vpc: stack.vpc || undefined,
|
13
|
-
vpcSubnets,
|
14
|
-
securityGroup: stack.lambdaDbSg || undefined,
|
15
|
-
} };
|
16
|
-
}
|
17
|
-
exports.databaseFunctionProps = databaseFunctionProps;
|
18
|
-
function lambdaFunctionProps(stack, environment, lambdaName, simpleLambdaName, config) {
|
19
|
-
return {
|
20
|
-
runtime: config?.runtime || aws_lambda_1.Runtime.NODEJS_14_X,
|
21
|
-
architecture: config?.architecture || aws_lambda_1.Architecture.ARM_64,
|
22
|
-
memorySize: config?.memorySize || 128,
|
23
|
-
functionName: lambdaName,
|
24
|
-
role: config?.role,
|
25
|
-
timeout: aws_cdk_lib_1.Duration.seconds(config?.timeout || 60),
|
26
|
-
logRetention: aws_logs_1.RetentionDays.ONE_YEAR,
|
27
|
-
reservedConcurrentExecutions: config?.reservedConcurrentExecutions || 2,
|
28
|
-
code: getAssetCode(simpleLambdaName, config),
|
29
|
-
handler: `${simpleLambdaName}.handler`,
|
30
|
-
environment,
|
31
|
-
};
|
32
|
-
}
|
33
|
-
exports.lambdaFunctionProps = lambdaFunctionProps;
|
34
|
-
function getAssetCode(simpleLambdaName, config) {
|
35
|
-
const lambdaPath = config?.singleLambda ? `dist/lambda/` : `dist/lambda/${simpleLambdaName}`;
|
36
|
-
return new aws_lambda_1.AssetCode(lambdaPath);
|
37
|
-
}
|
38
|
-
/**
|
39
|
-
* Creates a base configuration for a Lambda that uses an RDS database
|
40
|
-
* @param vpc "Private" Lambdas are associated with a VPC
|
41
|
-
* @param lambdaDbSg Security Group shared by Lambda and RDS
|
42
|
-
* @param props Database connection properties for the Lambda
|
43
|
-
* @param config Lambda configuration
|
44
|
-
*/
|
45
|
-
function dbLambdaConfiguration(vpc, lambdaDbSg, props, config) {
|
46
|
-
return {
|
47
|
-
runtime: props.runtime || aws_lambda_1.Runtime.NODEJS_14_X,
|
48
|
-
memorySize: props.memorySize || config.memorySize || 1024,
|
49
|
-
functionName: config.functionName,
|
50
|
-
code: config.code,
|
51
|
-
role: config.role,
|
52
|
-
handler: config.handler,
|
53
|
-
timeout: aws_cdk_lib_1.Duration.seconds(config.timeout || props.defaultLambdaDurationSeconds || 60),
|
54
|
-
environment: config.environment || {
|
55
|
-
DB_USER: props.dbProps?.username,
|
56
|
-
DB_PASS: props.dbProps?.password,
|
57
|
-
DB_URI: (config.readOnly ? props.dbProps?.ro_uri : props.dbProps?.uri),
|
58
|
-
},
|
59
|
-
logRetention: aws_logs_1.RetentionDays.ONE_YEAR,
|
60
|
-
vpc: vpc,
|
61
|
-
vpcSubnets: {
|
62
|
-
subnets: vpc.privateSubnets,
|
63
|
-
},
|
64
|
-
securityGroups: [lambdaDbSg],
|
65
|
-
reservedConcurrentExecutions: config.reservedConcurrentExecutions || 3,
|
66
|
-
};
|
67
|
-
}
|
68
|
-
exports.dbLambdaConfiguration = dbLambdaConfiguration;
|
69
|
-
function defaultLambdaConfiguration(config) {
|
70
|
-
const props = {
|
71
|
-
runtime: aws_lambda_1.Runtime.NODEJS_14_X,
|
72
|
-
memorySize: config.memorySize ?? 128,
|
73
|
-
functionName: config.functionName,
|
74
|
-
handler: config.handler,
|
75
|
-
environment: config.environment ?? {},
|
76
|
-
logRetention: aws_logs_1.RetentionDays.ONE_YEAR,
|
77
|
-
reservedConcurrentExecutions: config.reservedConcurrentExecutions,
|
78
|
-
code: config.code,
|
79
|
-
role: config.role,
|
80
|
-
timeout: aws_cdk_lib_1.Duration.seconds(config.timeout || 10),
|
81
|
-
};
|
82
|
-
if (config.vpc) {
|
83
|
-
return { ...props, ...{
|
84
|
-
vpc: config.vpc,
|
85
|
-
vpcSubnets: {
|
86
|
-
subnets: config.vpc?.privateSubnets,
|
87
|
-
},
|
88
|
-
} };
|
89
|
-
}
|
90
|
-
return props;
|
91
|
-
}
|
92
|
-
exports.defaultLambdaConfiguration = defaultLambdaConfiguration;
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWNvbmZpZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL3N0YWNrL2xhbWJkYS1jb25maWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUE2RjtBQUM3Riw2Q0FBcUM7QUFFckMsbURBQW1EO0FBZ0NuRCxTQUFnQixxQkFBcUIsQ0FDakMsS0FBdUIsRUFBRSxXQUE4QixFQUFFLFVBQWtCLEVBQUUsZ0JBQXdCLEVBQUUsTUFBMkI7SUFFbEksTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0IsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYztLQUNwQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFZCxPQUFPLEVBQUMsR0FBRyxtQkFBbUIsQ0FDMUIsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUMzRCxFQUFFLEdBQUc7WUFDRixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTO1lBQzNCLFVBQVU7WUFDVixhQUFhLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxTQUFTO1NBQy9DLEVBQUMsQ0FBQztBQUNQLENBQUM7QUFkRCxzREFjQztBQUVELFNBQWdCLG1CQUFtQixDQUMvQixLQUF1QixFQUFFLFdBQThCLEVBQUUsVUFBa0IsRUFBRSxnQkFBd0IsRUFBRSxNQUEyQjtJQUVsSSxPQUFPO1FBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksb0JBQU8sQ0FBQyxXQUFXO1FBQy9DLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLHlCQUFZLENBQUMsTUFBTTtRQUN6RCxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsSUFBSSxHQUFHO1FBQ3JDLFlBQVksRUFBRSxVQUFVO1FBQ3hCLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTtRQUNsQixPQUFP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QUcsS0FBSyxFQUFFLEdBQUc7Z0JBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDZixVQUFVLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsY0FBYztpQkFDdEM7YUFDSixFQUFDLENBQUM7S0FDTjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUF0QkQsZ0VBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcmNoaXRlY3R1cmUsIEFzc2V0Q29kZSwgQ29kZSwgRnVuY3Rpb25Qcm9wcywgUnVudGltZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge0R1cmF0aW9ufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7SVNlY3VyaXR5R3JvdXAsIElWcGMsIFN1Ym5ldFNlbGVjdGlvbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7UmV0ZW50aW9uRGF5c30gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHtSb2xlfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7RGlnaXRyYWZmaWNTdGFja30gZnJvbSBcIi4vc3RhY2tcIjtcbmltcG9ydCB7TW9uaXRvcmVkRnVuY3Rpb25BbGFybVByb3BzfSBmcm9tIFwiLi9tb25pdG9yZWRmdW5jdGlvblwiO1xuXG5leHBvcnQgdHlwZSBMYW1iZGFFbnZpcm9ubWVudCA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIERCTGFtYmRhRW52aXJvbm1lbnQgPSBMYW1iZGFFbnZpcm9ubWVudCAmIHtcbiAgICBTRUNSRVRfSUQ/OiBzdHJpbmdcbiAgICBEQl9BUFBMSUNBVElPTjogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gICAgdnBjSWQ6IHN0cmluZztcbiAgICBhbGxvd0Zyb21JcEFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuICAgIHByaXZhdGVTdWJuZXRJZHM6IHN0cmluZ1tdO1xuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBzdHJpbmdbXTtcbiAgICBsYW1iZGFEYlNnSWQ6IHN0cmluZztcbiAgICBkYlByb3BzPzogRGJQcm9wcztcbiAgICBkZWZhdWx0TGFtYmRhRHVyYXRpb25TZWNvbmRzPzogbnVtYmVyO1xuICAgIGxvZ3NEZXN0aW5hdGlvbkFybjogc3RyaW5nO1xuICAgIG1lbW9yeVNpemU/OiBudW1iZXIsXG4gICAgcnVudGltZT86IFJ1bnRpbWU7XG59XG5cbmRlY2xhcmUgaW50ZXJmYWNlIERiUHJvcHMge1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB1cmk/OiBzdHJpbmc7XG4gICAgcm9fdXJpPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YWJhc2VGdW5jdGlvblByb3BzKFxuICAgIHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLCBlbnZpcm9ubWVudDogTGFtYmRhRW52aXJvbm1lbnQsIGxhbWJkYU5hbWU6IHN0cmluZywgc2ltcGxlTGFtYmRhTmFtZTogc3RyaW5nLCBjb25maWc/OiBGdW5jdGlvblBhcmFtZXRlcnMsXG4pOiBGdW5jdGlvblByb3BzIHtcbiAgICBjb25zdCB2cGNTdWJuZXRzID0gc3RhY2sudnBjID8ge1xuICAgICAgICBzdWJuZXRzOiBzdGFjay52cGMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7Li4ubGFtYmRhRnVuY3Rpb25Qcm9wcyhcbiAgICAgICAgc3RhY2ssIGVudmlyb25tZW50LCBsYW1iZGFOYW1lLCBzaW1wbGVMYW1iZGFOYW1lLCBjb25maWcsXG4gICAgKSwgLi4ue1xuICAgICAgICB2cGM6IHN0YWNrLnZwYyB8fCB1bmRlZmluZWQsXG4gICAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXA6IHN0YWNrLmxhbWJkYURiU2cgfHwgdW5kZWZpbmVkLFxuICAgIH19O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFtYmRhRnVuY3Rpb25Qcm9wcyhcbiAgICBzdGFjazogRGlnaXRyYWZmaWNTdGFjaywgZW52aXJvbm1lbnQ6IExhbWJkYUVudmlyb25tZW50LCBsYW1iZGFOYW1lOiBzdHJpbmcsIHNpbXBsZUxhbWJkYU5hbWU6IHN0cmluZywgY29uZmlnPzogRnVuY3Rpb25QYXJhbWV0ZXJzLFxuKTogRnVuY3Rpb25Qcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcnVudGltZTogY29uZmlnPy5ydW50aW1lIHx8IFJ1bnRpbWUuTk9ERUpTXzE0X1gsXG4gICAgICAgIGFyY2hpdGVjdHVyZTogY29uZmlnPy5hcmNoaXRlY3R1cmUgfHwgQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgbWVtb3J5U2l6ZTogY29uZmlnPy5tZW1vcnlTaXplIHx8IDEyOCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBsYW1iZGFOYW1lLFxuICAgICAgICByb2xlOiBjb25maWc/LnJvbGUsXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoY29uZmlnPy50aW1lb3V0IHx8IDYwKSxcbiAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9ZRUFSLFxuICAgICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBjb25maWc/LnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMgfHwgMixcbiAgICAgICAgY29kZTogZ2V0QXNzZXRDb2RlKHNpbXBsZUxhbWJkYU5hbWUsIGNvbmZpZyksXG4gICAgICAgIGhhbmRsZXI6IGAke3NpbXBsZUxhbWJkYU5hbWV9LmhhbmRsZXJgLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRBc3NldENvZGUoc2ltcGxlTGFtYmRhTmFtZTogc3RyaW5nLCBjb25maWc/OiBGdW5jdGlvblBhcmFtZXRlcnMpOiBBc3NldENvZGUge1xuICAgIGNvbnN0IGxhbWJkYVBhdGggPSBjb25maWc/LnNpbmdsZUxhbWJkYSA/IGBkaXN0L2xhbWJkYS9gIDogYGRpc3QvbGFtYmRhLyR7c2ltcGxlTGFtYmRhTmFtZX1gO1xuXG4gICAgcmV0dXJuIG5ldyBBc3NldENvZGUobGFtYmRhUGF0aCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgYSBMYW1iZGEgdGhhdCB1c2VzIGFuIFJEUyBkYXRhYmFzZVxuICogQHBhcmFtIHZwYyBcIlByaXZhdGVcIiBMYW1iZGFzIGFyZSBhc3NvY2lhdGVkIHdpdGggYSBWUENcbiAqIEBwYXJhbSBsYW1iZGFEYlNnIFNlY3VyaXR5IEdyb3VwIHNoYXJlZCBieSBMYW1iZGEgYW5kIFJEU1xuICogQHBhcmFtIHByb3BzIERhdGFiYXNlIGNvbm5lY3Rpb24gcHJvcGVydGllcyBmb3IgdGhlIExhbWJkYVxuICogQHBhcmFtIGNvbmZpZyBMYW1iZGEgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZGJMYW1iZGFDb25maWd1cmF0aW9uKHZwYzogSVZwYyxcbiAgICBsYW1iZGFEYlNnOiBJU2VjdXJpdHlHcm91cCxcbiAgICBwcm9wczogTGFtYmRhQ29uZmlndXJhdGlvbixcbiAgICBjb25maWc6IEZ1bmN0aW9uUGFyYW1ldGVycyk6IEZ1bmN0aW9uUHJvcHMge1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSB8fCBSdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplIHx8IGNvbmZpZy5tZW1vcnlTaXplIHx8IDEwMjQsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogY29uZmlnLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgY29kZTogY29uZmlnLmNvZGUgYXMgQ29kZSxcbiAgICAgICAgcm9sZTogY29uZmlnLnJvbGUsXG4gICAgICAgIGhhbmRsZXI6IGNvbmZpZy5oYW5kbGVyIGFzIHN0cmluZyxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyhjb25maWcudGltZW91dCB8fCBwcm9wcy5kZWZhdWx0TGFtYmRhRHVyYXRpb25TZWNvbmRzIHx8IDYwKSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGNvbmZpZy5lbnZpcm9ubWVudCB8fCB7XG4gICAgICAgICAgICBEQl9VU0VSOiBwcm9wcy5kYlByb3BzPy51c2VybmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBEQl9QQVNTOiBwcm9wcy5kYlByb3BzPy5wYXNzd29yZCBhcyBzdHJpbmcsXG4gICAgICAgICAgICBEQl9VUkk6IChjb25maWcucmVhZE9ubHkgPyBwcm9wcy5kYlByb3BzPy5yb191cmkgOiBwcm9wcy5kYlByb3BzPy51cmkpIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgbG9nUmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9ZRUFSLFxuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICAgICAgc3VibmV0czogdnBjLnByaXZhdGVTdWJuZXRzLFxuICAgICAgICB9LFxuICAgICAgICBzZWN1cml0eUdyb3VwczogW2xhbWJkYURiU2ddLFxuICAgICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBjb25maWcucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyB8fCAzLFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0TGFtYmRhQ29uZmlndXJhdGlvbihjb25maWc6IEZ1bmN0aW9uUGFyYW1ldGVycyk6IEZ1bmN0aW9uUHJvcHMge1xuICAgIGNvbnN0IHByb3BzOiBGdW5jdGlvblByb3BzID0ge1xuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgICBtZW1vcnlTaXplOiBjb25maWcubWVtb3J5U2l6ZSA/PyAxMjgsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogY29uZmlnLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgaGFuZGxlcjogY29uZmlnLmhhbmRsZXIgYXMgc3RyaW5nLFxuICAgICAgICBlbnZpcm9ubWVudDogY29uZmlnLmVudmlyb25tZW50ID8/IHt9LFxuICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1lFQVIsXG4gICAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IGNvbmZpZy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgICBjb2RlOiBjb25maWcuY29kZSBhcyBDb2RlLFxuICAgICAgICByb2xlOiBjb25maWcucm9sZSxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyhjb25maWcudGltZW91dCB8fCAxMCksXG4gICAgfTtcbiAgICBpZiAoY29uZmlnLnZwYykge1xuICAgICAgICByZXR1cm4gey4uLnByb3BzLCAuLi57XG4gICAgICAgICAgICB2cGM6IGNvbmZpZy52cGMsXG4gICAgICAgICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgICAgICAgICAgc3VibmV0czogY29uZmlnLnZwYz8ucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9fTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uUGFyYW1ldGVycyB7XG4gICAgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgICBjb2RlPzogQ29kZTtcbiAgICBoYW5kbGVyPzogc3RyaW5nO1xuICAgIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgICBlbnZpcm9ubWVudD86IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG4gICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcbiAgICByb2xlPzogUm9sZTtcbiAgICB2cGM/OiBJVnBjO1xuICAgIHZwY1N1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb247XG4gICAgcnVudGltZT86IFJ1bnRpbWU7XG4gICAgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAgIHNpbmdsZUxhbWJkYT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE1vbml0b3JlZEZ1bmN0aW9uUGFyYW1ldGVycyA9IHtcbiAgICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgcm9sZT86IFJvbGU7XG4gICAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG4gICAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAgIHJlYWRvbmx5IHNpbmdsZUxhbWJkYT86IGJvb2xlYW47XG5cbiAgICByZWFkb25seSBkdXJhdGlvbkFsYXJtUHJvcHM/OiBNb25pdG9yZWRGdW5jdGlvbkFsYXJtUHJvcHNcbiAgICByZWFkb25seSBkdXJhdGlvbldhcm5pbmdQcm9wcz86IE1vbml0b3JlZEZ1bmN0aW9uQWxhcm1Qcm9wc1xuICAgIHJlYWRvbmx5IGVycm9yQWxhcm1Qcm9wcz86IE1vbml0b3JlZEZ1bmN0aW9uQWxhcm1Qcm9wc1xuICAgIHJlYWRvbmx5IHRocm90dGxlQWxhcm1Qcm9wcz86IE1vbml0b3JlZEZ1bmN0aW9uQWxhcm1Qcm9wc1xufVxuIl19
|
@@ -1,84 +0,0 @@
|
|
1
|
-
import { Function, FunctionProps } from 'aws-cdk-lib/aws-lambda';
|
2
|
-
import { Stack } from "aws-cdk-lib";
|
3
|
-
import { ComparisonOperator } from "aws-cdk-lib/aws-cloudwatch";
|
4
|
-
import { DigitrafficStack } from "../stack/stack";
|
5
|
-
import { ITopic } from "aws-cdk-lib/aws-sns";
|
6
|
-
import { LambdaEnvironment, MonitoredFunctionParameters } from "../stack/lambda-configs";
|
7
|
-
import { TrafficType } from "../../../types/traffictype";
|
8
|
-
/**
|
9
|
-
* Allows customization of CloudWatch Alarm properties
|
10
|
-
*/
|
11
|
-
export declare type MonitoredFunctionAlarmProps = {
|
12
|
-
/**
|
13
|
-
* Setting this to false will not create a CloudWatch alarm
|
14
|
-
*/
|
15
|
-
readonly create: boolean;
|
16
|
-
readonly threshold?: number;
|
17
|
-
readonly evaluationPeriods?: number;
|
18
|
-
readonly datapointsToAlarm?: number;
|
19
|
-
readonly comparisonOperator?: ComparisonOperator;
|
20
|
-
};
|
21
|
-
export declare type MonitoredFunctionProps = {
|
22
|
-
readonly durationAlarmProps?: MonitoredFunctionAlarmProps;
|
23
|
-
readonly durationWarningProps?: MonitoredFunctionAlarmProps;
|
24
|
-
readonly errorAlarmProps?: MonitoredFunctionAlarmProps;
|
25
|
-
readonly throttleAlarmProps?: MonitoredFunctionAlarmProps;
|
26
|
-
};
|
27
|
-
/**
|
28
|
-
* Creates a Lambda function that monitors default CloudWatch Lambda metrics with CloudWatch Alarms.
|
29
|
-
*/
|
30
|
-
export declare class MonitoredFunction extends Function {
|
31
|
-
readonly givenName: string;
|
32
|
-
/** disable all alarms */
|
33
|
-
static readonly DISABLE_ALARMS: MonitoredFunctionProps;
|
34
|
-
/**
|
35
|
-
* Create new MonitoredFunction. Use topics from given DigitrafficStack.
|
36
|
-
*
|
37
|
-
* @param stack DigitrafficStack
|
38
|
-
* @param id Lambda construct Id
|
39
|
-
* @param functionProps Lambda function properties
|
40
|
-
* @param props Monitored function properties
|
41
|
-
*/
|
42
|
-
static create(stack: DigitrafficStack, id: string, functionProps: FunctionProps, props?: MonitoredFunctionProps): MonitoredFunction;
|
43
|
-
/**
|
44
|
-
* Create new MonitoredFunction. Use topics from given DigitrafficStack. Generate names from given name and configuration shortName.
|
45
|
-
*
|
46
|
-
* For example, shortName FOO and given name update-things will create function FOO-UpdateThings and use code from lambda/update-things/update-things.ts method handler.
|
47
|
-
*
|
48
|
-
* @param stack DigitrafficStack
|
49
|
-
* @param name param-case name
|
50
|
-
* @param environment Lambda environment
|
51
|
-
* @param functionParameters Lambda function parameters
|
52
|
-
*/
|
53
|
-
static createV2(stack: DigitrafficStack, name: string, environment: LambdaEnvironment, functionParameters?: MonitoredFunctionParameters): MonitoredFunction;
|
54
|
-
/**
|
55
|
-
* @param scope Stack
|
56
|
-
* @param id Lambda construct Id
|
57
|
-
* @param functionProps Lambda function properties
|
58
|
-
* @param alarmSnsTopic SNS topic for alarms
|
59
|
-
* @param warningSnsTopic SNS topic for warnings
|
60
|
-
* @param production Is the stack a production stack, used for determining the alarm topic
|
61
|
-
* @param trafficType Traffic type, used for alarm names. Set to null if Lambda is not related to any traffic type.
|
62
|
-
* @param props Monitored function properties
|
63
|
-
*/
|
64
|
-
constructor(scope: Stack, id: string, functionProps: FunctionProps, alarmSnsTopic: ITopic, warningSnsTopic: ITopic, production: boolean, trafficType: TrafficType | null, props?: MonitoredFunctionProps);
|
65
|
-
private createAlarm;
|
66
|
-
private getAlarmActionForEnv;
|
67
|
-
}
|
68
|
-
export declare class MonitoredDBFunction {
|
69
|
-
/**
|
70
|
-
* Create new MonitoredDBFunction. Use topics from given DigitrafficStack. Generate names from given name and configuration shortName.
|
71
|
-
* Grant secret and create log subscription.
|
72
|
-
*
|
73
|
-
* For example, shortName FOO and given name update-things will create function FOO-UpdateThings and use code from lambda/update-things/update-things.ts method handler.
|
74
|
-
*
|
75
|
-
* If you don't need to pass any extra arguments to lambda-environment, you can leave environment out and this function will create the
|
76
|
-
* default Lambda Environment with SECRET_ID and DB_APPLICATION.
|
77
|
-
*
|
78
|
-
* @param stack DigitrafficStack
|
79
|
-
* @param name param-case name
|
80
|
-
* @param environment Lambda environment
|
81
|
-
* @param functionParameters Lambda function parameters
|
82
|
-
*/
|
83
|
-
static create(stack: DigitrafficStack, name: string, environment?: LambdaEnvironment, functionParameters?: MonitoredFunctionParameters): MonitoredFunction;
|
84
|
-
}
|
@@ -1,135 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.MonitoredDBFunction = exports.MonitoredFunction = void 0;
|
4
|
-
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
5
|
-
const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
|
6
|
-
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
7
|
-
const lambda_configs_1 = require("../stack/lambda-configs");
|
8
|
-
const change_case_1 = require("change-case");
|
9
|
-
const subscription_1 = require("../stack/subscription");
|
10
|
-
/**
|
11
|
-
* Creates a Lambda function that monitors default CloudWatch Lambda metrics with CloudWatch Alarms.
|
12
|
-
*/
|
13
|
-
class MonitoredFunction extends aws_lambda_1.Function {
|
14
|
-
/**
|
15
|
-
* @param scope Stack
|
16
|
-
* @param id Lambda construct Id
|
17
|
-
* @param functionProps Lambda function properties
|
18
|
-
* @param alarmSnsTopic SNS topic for alarms
|
19
|
-
* @param warningSnsTopic SNS topic for warnings
|
20
|
-
* @param production Is the stack a production stack, used for determining the alarm topic
|
21
|
-
* @param trafficType Traffic type, used for alarm names. Set to null if Lambda is not related to any traffic type.
|
22
|
-
* @param props Monitored function properties
|
23
|
-
*/
|
24
|
-
constructor(scope, id, functionProps, alarmSnsTopic, warningSnsTopic, production, trafficType, props) {
|
25
|
-
super(scope, id, functionProps);
|
26
|
-
this.givenName = functionProps.functionName;
|
27
|
-
const alarmSnsAction = new aws_cloudwatch_actions_1.SnsAction(alarmSnsTopic);
|
28
|
-
const warningSnsAction = new aws_cloudwatch_actions_1.SnsAction(warningSnsTopic);
|
29
|
-
if (props?.durationAlarmProps?.create !== false) {
|
30
|
-
if (!functionProps.timeout) {
|
31
|
-
throw new Error('Timeout needs to be explicitly set');
|
32
|
-
}
|
33
|
-
this.createAlarm(scope, this.metricDuration().with({ statistic: 'max' }), 'Duration', 'Duration alarm', `Duration has exceeded ${functionProps.timeout.toSeconds()} seconds`, trafficType, this.getAlarmActionForEnv(alarmSnsAction, warningSnsAction, production), functionProps.timeout.toMilliseconds(), 1, 1, aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, props?.durationAlarmProps);
|
34
|
-
}
|
35
|
-
if (props?.durationWarningProps?.create !== false) {
|
36
|
-
if (!functionProps.timeout) {
|
37
|
-
throw new Error('Timeout needs to be explicitly set');
|
38
|
-
}
|
39
|
-
this.createAlarm(scope, this.metricDuration().with({ statistic: 'max' }), 'Duration-Warning', 'Duration warning', `Duration is 85 % of max ${functionProps.timeout.toSeconds()} seconds`, trafficType, warningSnsAction, functionProps.timeout.toMilliseconds() * 0.85, 1, 1, aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, props?.durationWarningProps);
|
40
|
-
}
|
41
|
-
if (props?.errorAlarmProps?.create !== false) {
|
42
|
-
this.createAlarm(scope, this.metricErrors(), 'Errors', 'Errors alarm', 'Invocations did not succeed', trafficType, this.getAlarmActionForEnv(alarmSnsAction, warningSnsAction, production), 1, 1, 1, aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, props?.errorAlarmProps);
|
43
|
-
}
|
44
|
-
if (props?.throttleAlarmProps?.create !== false) {
|
45
|
-
this.createAlarm(scope, this.metricThrottles(), 'Throttles', 'Throttles alarm', 'Has throttled', trafficType, this.getAlarmActionForEnv(alarmSnsAction, warningSnsAction, production), 0, 1, 1, aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, props?.throttleAlarmProps);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
/**
|
49
|
-
* Create new MonitoredFunction. Use topics from given DigitrafficStack.
|
50
|
-
*
|
51
|
-
* @param stack DigitrafficStack
|
52
|
-
* @param id Lambda construct Id
|
53
|
-
* @param functionProps Lambda function properties
|
54
|
-
* @param props Monitored function properties
|
55
|
-
*/
|
56
|
-
static create(stack, id, functionProps, props) {
|
57
|
-
if (props === MonitoredFunction.DISABLE_ALARMS && stack.configuration.production) {
|
58
|
-
throw new Error(`Function ${functionProps.functionName} has DISABLE_ALARMS. Remove before installing to production or define your own properties!`);
|
59
|
-
}
|
60
|
-
return new MonitoredFunction(stack, id, functionProps, stack.alarmTopic, stack.warningTopic, stack.configuration.production, stack.configuration.trafficType, props);
|
61
|
-
}
|
62
|
-
/**
|
63
|
-
* Create new MonitoredFunction. Use topics from given DigitrafficStack. Generate names from given name and configuration shortName.
|
64
|
-
*
|
65
|
-
* For example, shortName FOO and given name update-things will create function FOO-UpdateThings and use code from lambda/update-things/update-things.ts method handler.
|
66
|
-
*
|
67
|
-
* @param stack DigitrafficStack
|
68
|
-
* @param name param-case name
|
69
|
-
* @param environment Lambda environment
|
70
|
-
* @param functionParameters Lambda function parameters
|
71
|
-
*/
|
72
|
-
static createV2(stack, name, environment, functionParameters) {
|
73
|
-
const functionName = functionParameters?.functionName || `${stack.configuration.shortName}-${(0, change_case_1.pascalCase)(name)}`;
|
74
|
-
const functionProps = (0, lambda_configs_1.databaseFunctionProps)(stack, environment, functionName, name, functionParameters);
|
75
|
-
return MonitoredFunction.create(stack, functionName, functionProps, functionParameters);
|
76
|
-
}
|
77
|
-
createAlarm(stack, metric, alarmId, alarmName, alarmDescription, trafficType, alarmSnsAction, threshold, evaluationPeriods, datapointsToAlarm, comparisonOperator, alarmProps) {
|
78
|
-
metric.createAlarm(stack, `${this.node.id}-${alarmId}`, {
|
79
|
-
alarmName: `${trafficType ?? ''} ${stack.stackName} ${this.functionName} ${alarmName}`.trim(),
|
80
|
-
alarmDescription,
|
81
|
-
threshold: alarmProps?.threshold ?? threshold,
|
82
|
-
evaluationPeriods: alarmProps?.evaluationPeriods ?? evaluationPeriods,
|
83
|
-
datapointsToAlarm: alarmProps?.datapointsToAlarm ?? datapointsToAlarm,
|
84
|
-
comparisonOperator: alarmProps?.comparisonOperator ?? comparisonOperator,
|
85
|
-
}).addAlarmAction(alarmSnsAction);
|
86
|
-
}
|
87
|
-
getAlarmActionForEnv(alarmAction, warningAction, production) {
|
88
|
-
return production ? alarmAction : warningAction;
|
89
|
-
}
|
90
|
-
}
|
91
|
-
exports.MonitoredFunction = MonitoredFunction;
|
92
|
-
/** disable all alarms */
|
93
|
-
MonitoredFunction.DISABLE_ALARMS = {
|
94
|
-
durationAlarmProps: {
|
95
|
-
create: false,
|
96
|
-
},
|
97
|
-
durationWarningProps: {
|
98
|
-
create: false,
|
99
|
-
},
|
100
|
-
errorAlarmProps: {
|
101
|
-
create: false,
|
102
|
-
},
|
103
|
-
throttleAlarmProps: {
|
104
|
-
create: false,
|
105
|
-
},
|
106
|
-
};
|
107
|
-
class MonitoredDBFunction {
|
108
|
-
/**
|
109
|
-
* Create new MonitoredDBFunction. Use topics from given DigitrafficStack. Generate names from given name and configuration shortName.
|
110
|
-
* Grant secret and create log subscription.
|
111
|
-
*
|
112
|
-
* For example, shortName FOO and given name update-things will create function FOO-UpdateThings and use code from lambda/update-things/update-things.ts method handler.
|
113
|
-
*
|
114
|
-
* If you don't need to pass any extra arguments to lambda-environment, you can leave environment out and this function will create the
|
115
|
-
* default Lambda Environment with SECRET_ID and DB_APPLICATION.
|
116
|
-
*
|
117
|
-
* @param stack DigitrafficStack
|
118
|
-
* @param name param-case name
|
119
|
-
* @param environment Lambda environment
|
120
|
-
* @param functionParameters Lambda function parameters
|
121
|
-
*/
|
122
|
-
static create(stack, name, environment, functionParameters) {
|
123
|
-
const functionName = functionParameters?.functionName || `${stack.configuration.shortName}-${(0, change_case_1.pascalCase)(name)}`;
|
124
|
-
const env = environment ? environment : stack.createLambdaEnvironment();
|
125
|
-
const functionProps = (0, lambda_configs_1.databaseFunctionProps)(stack, env, functionName, name, functionParameters);
|
126
|
-
const mf = MonitoredFunction.create(stack, functionName, functionProps, functionParameters);
|
127
|
-
stack.grantSecret(mf);
|
128
|
-
if (stack.configuration.logsDestinationArn) {
|
129
|
-
new subscription_1.DigitrafficLogSubscriptions(stack, mf);
|
130
|
-
}
|
131
|
-
return mf;
|
132
|
-
}
|
133
|
-
}
|
134
|
-
exports.MonitoredDBFunction = MonitoredDBFunction;
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmVkZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL3N0YWNrL21vbml0b3JlZGZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUErRDtBQUUvRCwrRUFBNkQ7QUFDN0QsK0RBQXNFO0FBR3RFLDREQUE4RztBQUM5Ryw2Q0FBdUM7QUFDdkMsd0RBQWtFO0FBK0JsRTs7R0FFRztBQUNILE1BQWEsaUJBQWtCLFNBQVEscUJBQVE7SUFzRTNDOzs7Ozs7Ozs7T0FTRztJQUNILFlBQ0ksS0FBWSxFQUNaLEVBQVUsRUFDVixhQUE0QixFQUM1QixhQUFxQixFQUNyQixlQUF1QixFQUN2QixVQUFtQixFQUNuQixXQUErQixFQUMvQixLQUE4QjtRQUU5QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxZQUFzQixDQUFDO1FBRXRELE1BQU0sY0FBYyxHQUFHLElBQUksa0NBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxNQUFNLGdCQUFnQixHQUFHLElBQUksa0NBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV4RCxJQUFJLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO2dCQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7YUFDekQ7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUNaLEtBQUssRUFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLEVBQzlDLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIseUJBQXlCLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUs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QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5QztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNKO0FBbkNELGtEQW1DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RnVuY3Rpb24sIEZ1bmN0aW9uUHJvcHN9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtTdGFja30gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1Nuc0FjdGlvbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoLWFjdGlvbnNcIjtcbmltcG9ydCB7Q29tcGFyaXNvbk9wZXJhdG9yLCBNZXRyaWN9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHtEaWdpdHJhZmZpY1N0YWNrfSBmcm9tIFwiLi4vc3RhY2svc3RhY2tcIjtcbmltcG9ydCB7SVRvcGljfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNuc1wiO1xuaW1wb3J0IHtkYXRhYmFzZUZ1bmN0aW9uUHJvcHMsIExhbWJkYUVudmlyb25tZW50LCBNb25pdG9yZWRGdW5jdGlvblBhcmFtZXRlcnN9IGZyb20gXCIuLi9zdGFjay9sYW1iZGEtY29uZmlnc1wiO1xuaW1wb3J0IHtwYXNjYWxDYXNlfSBmcm9tIFwiY2hhbmdlLWNhc2VcIjtcbmltcG9ydCB7RGlnaXRyYWZmaWNMb2dTdWJzY3JpcHRpb25zfSBmcm9tIFwiLi4vc3RhY2svc3Vic2NyaXB0aW9uXCI7XG5pbXBvcnQge1RyYWZmaWNUeXBlfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdHJhZmZpY3R5cGVcIjtcblxuLyoqXG4gKiBBbGxvd3MgY3VzdG9taXphdGlvbiBvZiBDbG91ZFdhdGNoIEFsYXJtIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IHR5cGUgTW9uaXRvcmVkRnVuY3Rpb25BbGFybVByb3BzID0ge1xuICAgIC8qKlxuICAgICAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIG5vdCBjcmVhdGUgYSBDbG91ZFdhdGNoIGFsYXJtXG4gICAgICovXG4gICAgcmVhZG9ubHkgY3JlYXRlOiBib29sZWFuXG5cbiAgICByZWFkb25seSB0aHJlc2hvbGQ/OiBudW1iZXJcblxuICAgIHJlYWRvbmx5IGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG5cbiAgICByZWFkb25seSBkYXRhcG9pbnRzVG9BbGFybT86IG51bWJlclxuXG4gICAgcmVhZG9ubHkgY29tcGFyaXNvbk9wZXJhdG9yPzogQ29tcGFyaXNvbk9wZXJhdG9yXG59XG5cbmV4cG9ydCB0eXBlIE1vbml0b3JlZEZ1bmN0aW9uUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgZHVyYXRpb25BbGFybVByb3BzPzogTW9uaXRvcmVkRnVuY3Rpb25BbGFybVByb3BzXG5cbiAgICByZWFkb25seSBkdXJhdGlvbldhcm5pbmdQcm9wcz86IE1vbml0b3JlZEZ1bmN0aW9uQWxhcm1Qcm9wc1xuXG4gICAgcmVhZG9ubHkgZXJyb3JBbGFybVByb3BzPzogTW9uaXRvcmVkRnVuY3Rpb25BbGFybVByb3BzXG5cbiAgICByZWFkb25seSB0aHJvdHRsZUFsYXJtUHJvcHM/OiBNb25pdG9yZWRGdW5jdGlvbkFsYXJtUHJvcHNcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgbW9uaXRvcnMgZGVmYXVsdCBDbG91ZFdhdGNoIExhbWJkYSBtZXRyaWNzIHdpdGggQ2xvdWRXYXRjaCBBbGFybXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25pdG9yZWRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHtcbiAgICByZWFkb25seSBnaXZlbk5hbWU6IHN0cmluZztcblxuICAgIC8qKiBkaXNhYmxlIGFsbCBhbGFybXMgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVfQUxBUk1TOiBNb25pdG9yZWRGdW5jdGlvblByb3BzID0ge1xuICAgICAgICBkdXJhdGlvbkFsYXJtUHJvcHM6IHtcbiAgICAgICAgICAgIGNyZWF0ZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGR1cmF0aW9uV2FybmluZ1Byb3BzOiB7XG4gICAgICAgICAgICBjcmVhdGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvckFsYXJtUHJvcHM6IHtcbiAgICAgICAgICAgIGNyZWF0ZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHRocm90dGxlQWxhcm1Qcm9wczoge1xuICAgICAgICAgICAgY3JlYXRlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIG5ldyBNb25pdG9yZWRGdW5jdGlvbi4gIFVzZSB0b3BpY3MgZnJvbSBnaXZlbiBEaWdpdHJhZmZpY1N0YWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YWNrIERpZ2l0cmFmZmljU3RhY2tcbiAgICAgKiBAcGFyYW0gaWQgTGFtYmRhIGNvbnN0cnVjdCBJZFxuICAgICAqIEBwYXJhbSBmdW5jdGlvblByb3BzIExhbWJkYSBmdW5jdGlvbiBwcm9wZXJ0aWVzXG4gICAgICogQHBhcmFtIHByb3BzIE1vbml0b3JlZCBmdW5jdGlvbiBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZShzdGFjazogRGlnaXRyYWZmaWNTdGFjayxcbiAgICAgICAgaWQ6IHN0cmluZyxcbiAgICAgICAgZnVuY3Rpb25Qcm9wczogRnVuY3Rpb25Qcm9wcyxcbiAgICAgICAgcHJvcHM/OiBNb25pdG9yZWRGdW5jdGlvblByb3BzKTogTW9uaXRvcmVkRnVuY3Rpb24ge1xuXG4gICAgICAgIGlmIChwcm9wcyA9PT0gTW9uaXRvcmVkRnVuY3Rpb24uRElTQUJMRV9BTEFSTVMgJiYgc3RhY2suY29uZmlndXJhdGlvbi5wcm9kdWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uICR7ZnVuY3Rpb25Qcm9wcy5mdW5jdGlvbk5hbWV9IGhhcyBESVNBQkxFX0FMQVJNUy4gIFJlbW92ZSBiZWZvcmUgaW5zdGFsbGluZyB0byBwcm9kdWN0aW9uIG9yIGRlZmluZSB5b3VyIG93biBwcm9wZXJ0aWVzIWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNb25pdG9yZWRGdW5jdGlvbihcbiAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBmdW5jdGlvblByb3BzLFxuICAgICAgICAgICAgc3RhY2suYWxhcm1Ub3BpYyxcbiAgICAgICAgICAgIHN0YWNrLndhcm5pbmdUb3BpYyxcbiAgICAgICAgICAgIHN0YWNrLmNvbmZpZ3VyYXRpb24ucHJvZHVjdGlvbixcbiAgICAgICAgICAgIHN0YWNrLmNvbmZpZ3VyYXRpb24udHJhZmZpY1R5cGUsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgbmV3IE1vbml0b3JlZEZ1bmN0aW9uLiAgVXNlIHRvcGljcyBmcm9tIGdpdmVuIERpZ2l0cmFmZmljU3RhY2suICBHZW5lcmF0ZSBuYW1lcyBmcm9tIGdpdmVuIG5hbWUgYW5kIGNvbmZpZ3VyYXRpb24gc2hvcnROYW1lLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIHNob3J0TmFtZSBGT08gYW5kIGdpdmVuIG5hbWUgdXBkYXRlLXRoaW5ncyB3aWxsIGNyZWF0ZSBmdW5jdGlvbiBGT08tVXBkYXRlVGhpbmdzIGFuZCB1c2UgY29kZSBmcm9tIGxhbWJkYS91cGRhdGUtdGhpbmdzL3VwZGF0ZS10aGluZ3MudHMgbWV0aG9kIGhhbmRsZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhY2sgRGlnaXRyYWZmaWNTdGFja1xuICAgICAqIEBwYXJhbSBuYW1lIHBhcmFtLWNhc2UgbmFtZVxuICAgICAqIEBwYXJhbSBlbnZpcm9ubWVudCBMYW1iZGEgZW52aXJvbm1lbnRcbiAgICAgKiBAcGFyYW0gZnVuY3Rpb25QYXJhbWV0ZXJzIExhbWJkYSBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZVYyKHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIGVudmlyb25tZW50OiBMYW1iZGFFbnZpcm9ubWVudCxcbiAgICAgICAgZnVuY3Rpb25QYXJhbWV0ZXJzPzogTW9uaXRvcmVkRnVuY3Rpb25QYXJhbWV0ZXJzKTogTW9uaXRvcmVkRnVuY3Rpb24ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvblBhcmFtZXRlcnM/LmZ1bmN0aW9uTmFtZSB8fCBgJHtzdGFjay5jb25maWd1cmF0aW9uLnNob3J0TmFtZX0tJHtwYXNjYWxDYXNlKG5hbWUpfWA7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uUHJvcHMgPSBkYXRhYmFzZUZ1bmN0aW9uUHJvcHMoXG4gICAgICAgICAgICBzdGFjaywgZW52aXJvbm1lbnQsIGZ1bmN0aW9uTmFtZSwgbmFtZSwgZnVuY3Rpb25QYXJhbWV0ZXJzLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBNb25pdG9yZWRGdW5jdGlvbi5jcmVhdGUoc3RhY2ssIGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25Qcm9wcywgZnVuY3Rpb25QYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gc2NvcGUgU3RhY2tcbiAgICAgKiBAcGFyYW0gaWQgTGFtYmRhIGNvbnN0cnVjdCBJZFxuICAgICAqIEBwYXJhbSBmdW5jdGlvblByb3BzIExhbWJkYSBmdW5jdGlvbiBwcm9wZXJ0aWVzXG4gICAgICogQHBhcmFtIGFsYXJtU25zVG9waWMgU05TIHRvcGljIGZvciBhbGFybXNcbiAgICAgKiBAcGFyYW0gd2FybmluZ1Nuc1RvcGljIFNOUyB0b3BpYyBmb3Igd2FybmluZ3NcbiAgICAgKiBAcGFyYW0gcHJvZHVjdGlvbiBJcyB0aGUgc3RhY2sgYSBwcm9kdWN0aW9uIHN0YWNrLCB1c2VkIGZvciBkZXRlcm1pbmluZyB0aGUgYWxhcm0gdG9waWNcbiAgICAgKiBAcGFyYW0gdHJhZmZpY1R5cGUgVHJhZmZpYyB0eXBlLCB1c2VkIGZvciBhbGFybSBuYW1lcy4gU2V0IHRvIG51bGwgaWYgTGFtYmRhIGlzIG5vdCByZWxhdGVkIHRvIGFueSB0cmFmZmljIHR5cGUuXG4gICAgICogQHBhcmFtIHByb3BzIE1vbml0b3JlZCBmdW5jdGlvbiBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHNjb3BlOiBTdGFjayxcbiAgICAgICAgaWQ6IHN0cmluZyxcbiAgICAgICAgZnVuY3Rpb25Qcm9wczogRnVuY3Rpb25Qcm9wcyxcbiAgICAgICAgYWxhcm1TbnNUb3BpYzogSVRvcGljLFxuICAgICAgICB3YXJuaW5nU25zVG9waWM6IElUb3BpYyxcbiAgICAgICAgcHJvZHVjdGlvbjogYm9vbGVhbixcbiAgICAgICAgdHJhZmZpY1R5cGU6IFRyYWZmaWNUeXBlIHwgbnVsbCxcbiAgICAgICAgcHJvcHM/OiBNb25pdG9yZWRGdW5jdGlvblByb3BzLFxuICAgICkge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQsIGZ1bmN0aW9uUHJvcHMpO1xuXG4gICAgICAgIHRoaXMuZ2l2ZW5OYW1lID0gZnVuY3Rpb25Qcm9wcy5mdW5jdGlvbk5hbWUgYXMgc3RyaW5nO1xuXG4gICAgICAgIGNvbnN0IGFsYXJtU25zQWN0aW9uID0gbmV3IFNuc0FjdGlvbihhbGFybVNuc1RvcGljKTtcbiAgICAgICAgY29uc3Qgd2FybmluZ1Nuc0FjdGlvbiA9IG5ldyBTbnNBY3Rpb24od2FybmluZ1Nuc1RvcGljKTtcblxuICAgICAgICBpZiAocHJvcHM/LmR1cmF0aW9uQWxhcm1Qcm9wcz8uY3JlYXRlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKCFmdW5jdGlvblByb3BzLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVvdXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBzZXQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVBbGFybShcbiAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY0R1cmF0aW9uKCkud2l0aCh7c3RhdGlzdGljOiAnbWF4J30pLFxuICAgICAgICAgICAgICAgICdEdXJhdGlvbicsXG4gICAgICAgICAgICAgICAgJ0R1cmF0aW9uIGFsYXJtJyxcbiAgICAgICAgICAgICAgICBgRHVyYXRpb24gaGFzIGV4Y2VlZGVkICR7ZnVuY3Rpb25Qcm9wcy50aW1lb3V0LnRvU2Vjb25kcygpfSBzZWNvbmRzYCxcbiAgICAgICAgICAgICAgICB0cmFmZmljVHlwZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsYXJtQWN0aW9uRm9yRW52KGFsYXJtU25zQWN0aW9uLCB3YXJuaW5nU25zQWN0aW9uLCBwcm9kdWN0aW9uKSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvblByb3BzLnRpbWVvdXQudG9NaWxsaXNlY29uZHMoKSxcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgICAgICAgICAgcHJvcHM/LmR1cmF0aW9uQWxhcm1Qcm9wcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzPy5kdXJhdGlvbldhcm5pbmdQcm9wcz8uY3JlYXRlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKCFmdW5jdGlvblByb3BzLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVvdXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBzZXQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVBbGFybShcbiAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY0R1cmF0aW9uKCkud2l0aCh7c3RhdGlzdGljOiAnbWF4J30pLFxuICAgICAgICAgICAgICAgICdEdXJhdGlvbi1XYXJuaW5nJyxcbiAgICAgICAgICAgICAgICAnRHVyYXRpb24gd2FybmluZycsXG4gICAgICAgICAgICAgICAgYER1cmF0aW9uIGlzIDg1ICUgb2YgbWF4ICR7ZnVuY3Rpb25Qcm9wcy50aW1lb3V0LnRvU2Vjb25kcygpfSBzZWNvbmRzYCxcbiAgICAgICAgICAgICAgICB0cmFmZmljVHlwZSxcbiAgICAgICAgICAgICAgICB3YXJuaW5nU25zQWN0aW9uLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uUHJvcHMudGltZW91dC50b01pbGxpc2Vjb25kcygpICogMC44NSxcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgICAgICAgICAgcHJvcHM/LmR1cmF0aW9uV2FybmluZ1Byb3BzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcz8uZXJyb3JBbGFybVByb3BzPy5jcmVhdGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUFsYXJtKFxuICAgICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljRXJyb3JzKCksXG4gICAgICAgICAgICAgICAgJ0Vycm9ycycsXG4gICAgICAgICAgICAgICAgJ0Vycm9ycyBhbGFybScsXG4gICAgICAgICAgICAgICAgJ0ludm9jYXRpb25zIGRpZCBub3Qgc3VjY2VlZCcsXG4gICAgICAgICAgICAgICAgdHJhZmZpY1R5cGUsXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGFybUFjdGlvbkZvckVudihhbGFybVNuc0FjdGlvbiwgd2FybmluZ1Nuc0FjdGlvbiwgcHJvZHVjdGlvbiksXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgICAgICAgICAgcHJvcHM/LmVycm9yQWxhcm1Qcm9wcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHM/LnRocm90dGxlQWxhcm1Qcm9wcz8uY3JlYXRlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVBbGFybShcbiAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICB0aGlzLm1ldHJpY1Rocm90dGxlcygpLFxuICAgICAgICAgICAgICAgICdUaHJvdHRsZXMnLFxuICAgICAgICAgICAgICAgICdUaHJvdHRsZXMgYWxhcm0nLFxuICAgICAgICAgICAgICAgICdIYXMgdGhyb3R0bGVkJyxcbiAgICAgICAgICAgICAgICB0cmFmZmljVHlwZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsYXJtQWN0aW9uRm9yRW52KGFsYXJtU25zQWN0aW9uLCB3YXJuaW5nU25zQWN0aW9uLCBwcm9kdWN0aW9uKSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgICAgICAgICAgICBwcm9wcz8udGhyb3R0bGVBbGFybVByb3BzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQWxhcm0oXG4gICAgICAgIHN0YWNrOiBTdGFjayxcbiAgICAgICAgbWV0cmljOiBNZXRyaWMsXG4gICAgICAgIGFsYXJtSWQ6IHN0cmluZyxcbiAgICAgICAgYWxhcm1OYW1lOiBzdHJpbmcsXG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAgICAgdHJhZmZpY1R5cGU6IFRyYWZmaWNUeXBlIHwgbnVsbCxcbiAgICAgICAgYWxhcm1TbnNBY3Rpb246IFNuc0FjdGlvbixcbiAgICAgICAgdGhyZXNob2xkOiBudW1iZXIsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBudW1iZXIsXG4gICAgICAgIGRhdGFwb2ludHNUb0FsYXJtOiBudW1iZXIsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgICAgICBhbGFybVByb3BzPzogTW9uaXRvcmVkRnVuY3Rpb25BbGFybVByb3BzLFxuICAgICkge1xuICAgICAgICBtZXRyaWMuY3JlYXRlQWxhcm0oc3RhY2ssIGAke3RoaXMubm9kZS5pZH0tJHthbGFybUlkfWAsIHtcbiAgICAgICAgICAgIGFsYXJtTmFtZTogYCR7dHJhZmZpY1R5cGUgPz8gJyd9ICR7c3RhY2suc3RhY2tOYW1lfSAke3RoaXMuZnVuY3Rpb25OYW1lfSAke2FsYXJtTmFtZX1gLnRyaW0oKSxcbiAgICAgICAgICAgIGFsYXJtRGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IGFsYXJtUHJvcHM/LnRocmVzaG9sZCA/PyB0aHJlc2hvbGQsXG4gICAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogYWxhcm1Qcm9wcz8uZXZhbHVhdGlvblBlcmlvZHMgPz8gZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICAgICAgICBkYXRhcG9pbnRzVG9BbGFybTogYWxhcm1Qcm9wcz8uZGF0YXBvaW50c1RvQWxhcm0gPz8gZGF0YXBvaW50c1RvQWxhcm0sXG4gICAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGFsYXJtUHJvcHM/LmNvbXBhcmlzb25PcGVyYXRvciA/PyBjb21wYXJpc29uT3BlcmF0b3IsXG4gICAgICAgIH0pLmFkZEFsYXJtQWN0aW9uKGFsYXJtU25zQWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsYXJtQWN0aW9uRm9yRW52KGFsYXJtQWN0aW9uOiBTbnNBY3Rpb24sXG4gICAgICAgIHdhcm5pbmdBY3Rpb246IFNuc0FjdGlvbixcbiAgICAgICAgcHJvZHVjdGlvbjogYm9vbGVhbik6IFNuc0FjdGlvbiB7XG5cbiAgICAgICAgcmV0dXJuIHByb2R1Y3Rpb24gPyBhbGFybUFjdGlvbiA6IHdhcm5pbmdBY3Rpb247XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9uaXRvcmVkREJGdW5jdGlvbiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIG5ldyBNb25pdG9yZWREQkZ1bmN0aW9uLiAgVXNlIHRvcGljcyBmcm9tIGdpdmVuIERpZ2l0cmFmZmljU3RhY2suICBHZW5lcmF0ZSBuYW1lcyBmcm9tIGdpdmVuIG5hbWUgYW5kIGNvbmZpZ3VyYXRpb24gc2hvcnROYW1lLlxuICAgICAqIEdyYW50IHNlY3JldCBhbmQgY3JlYXRlIGxvZyBzdWJzY3JpcHRpb24uXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZSwgc2hvcnROYW1lIEZPTyBhbmQgZ2l2ZW4gbmFtZSB1cGRhdGUtdGhpbmdzIHdpbGwgY3JlYXRlIGZ1bmN0aW9uIEZPTy1VcGRhdGVUaGluZ3MgYW5kIHVzZSBjb2RlIGZyb20gbGFtYmRhL3VwZGF0ZS10aGluZ3MvdXBkYXRlLXRoaW5ncy50cyBtZXRob2QgaGFuZGxlci5cbiAgICAgKlxuICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRvIHBhc3MgYW55IGV4dHJhIGFyZ3VtZW50cyB0byBsYW1iZGEtZW52aXJvbm1lbnQsIHlvdSBjYW4gbGVhdmUgZW52aXJvbm1lbnQgb3V0IGFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIHRoZVxuICAgICAqIGRlZmF1bHQgTGFtYmRhIEVudmlyb25tZW50IHdpdGggU0VDUkVUX0lEIGFuZCBEQl9BUFBMSUNBVElPTi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGFjayBEaWdpdHJhZmZpY1N0YWNrXG4gICAgICogQHBhcmFtIG5hbWUgcGFyYW0tY2FzZSBuYW1lXG4gICAgICogQHBhcmFtIGVudmlyb25tZW50IExhbWJkYSBlbnZpcm9ubWVudFxuICAgICAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgTGFtYmRhIGZ1bmN0aW9uIHBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIGVudmlyb25tZW50PzogTGFtYmRhRW52aXJvbm1lbnQsXG4gICAgICAgIGZ1bmN0aW9uUGFyYW1ldGVycz86IE1vbml0b3JlZEZ1bmN0aW9uUGFyYW1ldGVycyk6IE1vbml0b3JlZEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25QYXJhbWV0ZXJzPy5mdW5jdGlvbk5hbWUgfHwgYCR7c3RhY2suY29uZmlndXJhdGlvbi5zaG9ydE5hbWV9LSR7cGFzY2FsQ2FzZShuYW1lKX1gO1xuICAgICAgICBjb25zdCBlbnYgPSBlbnZpcm9ubWVudCA/IGVudmlyb25tZW50IDogc3RhY2suY3JlYXRlTGFtYmRhRW52aXJvbm1lbnQoKTtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25Qcm9wcyA9IGRhdGFiYXNlRnVuY3Rpb25Qcm9wcyhcbiAgICAgICAgICAgIHN0YWNrLCBlbnYsIGZ1bmN0aW9uTmFtZSwgbmFtZSwgZnVuY3Rpb25QYXJhbWV0ZXJzLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG1mID0gTW9uaXRvcmVkRnVuY3Rpb24uY3JlYXRlKHN0YWNrLCBmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uUHJvcHMsIGZ1bmN0aW9uUGFyYW1ldGVycyk7XG5cbiAgICAgICAgc3RhY2suZ3JhbnRTZWNyZXQobWYpO1xuXG4gICAgICAgIGlmIChzdGFjay5jb25maWd1cmF0aW9uLmxvZ3NEZXN0aW5hdGlvbkFybikge1xuICAgICAgICAgICAgbmV3IERpZ2l0cmFmZmljTG9nU3Vic2NyaXB0aW9ucyhzdGFjaywgbWYpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1mO1xuICAgIH1cbn1cbiJdfQ==
|
@@ -1,41 +0,0 @@
|
|
1
|
-
import { RestApi, RestApiProps, JsonSchema, Resource } from 'aws-cdk-lib/aws-apigateway';
|
2
|
-
import { PolicyDocument } from 'aws-cdk-lib/aws-iam';
|
3
|
-
import { Construct } from "constructs";
|
4
|
-
import { DigitrafficStack } from "./stack";
|
5
|
-
import { ModelWithReference } from "../../types/model-with-reference";
|
6
|
-
import { DocumentationPart } from "../documentation";
|
7
|
-
export declare class DigitrafficRestApi extends RestApi {
|
8
|
-
readonly apiKeyIds: string[];
|
9
|
-
readonly enableDocumentation: boolean;
|
10
|
-
constructor(stack: DigitrafficStack, apiId: string, apiName: string, allowFromIpAddresses?: string[] | undefined, config?: Partial<RestApiProps>);
|
11
|
-
hostname(): string;
|
12
|
-
createUsagePlan(apiKeyId: string, apiKeyName: string): string;
|
13
|
-
createUsagePlanV2(apiName: string): string;
|
14
|
-
addJsonModel(modelName: string, schema: JsonSchema): ModelWithReference;
|
15
|
-
addCSVModel(modelName: string): ModelWithReference;
|
16
|
-
private getModelWithReference;
|
17
|
-
private addDocumentationPart;
|
18
|
-
documentResource(resource: Resource, ...documentationPart: DocumentationPart[]): void;
|
19
|
-
}
|
20
|
-
/**
|
21
|
-
* Due to AWS API design API Gateway will always return 403 'Missing Authentication Token' for requests
|
22
|
-
* with a non-existent endpoint. This function translates this response to a 404.
|
23
|
-
* Requests with an invalid or missing API key are not affected (still return 403 'Forbidden').
|
24
|
-
* @param restApi RestApi
|
25
|
-
* @param stack Construct
|
26
|
-
*/
|
27
|
-
export declare function add404Support(restApi: RestApi, stack: Construct): void;
|
28
|
-
export declare function add401Support(restApi: RestApi, stack: Construct): void;
|
29
|
-
/**
|
30
|
-
* Due to AWS API design API Gateway will always return 403 'Missing Authentication Token' for requests
|
31
|
-
* with a non-existent endpoint. This function converts this response to a custom one.
|
32
|
-
* Requests with an invalid or missing API key are not affected (still return 403 'Forbidden').
|
33
|
-
* @param returnCode
|
34
|
-
* @param message
|
35
|
-
* @param restApi RestApi
|
36
|
-
* @param stack Construct
|
37
|
-
*/
|
38
|
-
export declare function setReturnCodeForMissingAuthenticationToken(returnCode: number, message: string, restApi: RestApi, stack: Construct): void;
|
39
|
-
export declare function createRestApi(stack: Construct, apiId: string, apiName: string, allowFromIpAddresses?: string[] | undefined): RestApi;
|
40
|
-
export declare function createDefaultPolicyDocument(): PolicyDocument;
|
41
|
-
export declare function createIpRestrictionPolicyDocument(allowFromIpAddresses: string[]): PolicyDocument;
|
@@ -1,185 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.createIpRestrictionPolicyDocument = exports.createDefaultPolicyDocument = exports.createRestApi = exports.setReturnCodeForMissingAuthenticationToken = exports.add401Support = exports.add404Support = exports.DigitrafficRestApi = void 0;
|
4
|
-
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
5
|
-
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
6
|
-
const usage_plans_1 = require("../usage-plans");
|
7
|
-
const api_model_1 = require("../../../utils/api-model");
|
8
|
-
const mediatypes_1 = require("../../types/mediatypes");
|
9
|
-
const R = require("ramda");
|
10
|
-
class DigitrafficRestApi extends aws_apigateway_1.RestApi {
|
11
|
-
constructor(stack, apiId, apiName, allowFromIpAddresses, config) {
|
12
|
-
const policyDocument = allowFromIpAddresses == null ? createDefaultPolicyDocument() : createIpRestrictionPolicyDocument(allowFromIpAddresses);
|
13
|
-
// override default config with given extra config
|
14
|
-
const apiConfig = { ...{
|
15
|
-
deployOptions: {
|
16
|
-
loggingLevel: aws_apigateway_1.MethodLoggingLevel.ERROR,
|
17
|
-
},
|
18
|
-
restApiName: apiName,
|
19
|
-
endpointTypes: [aws_apigateway_1.EndpointType.REGIONAL],
|
20
|
-
policy: policyDocument,
|
21
|
-
}, ...config };
|
22
|
-
super(stack, apiId, apiConfig);
|
23
|
-
this.apiKeyIds = [];
|
24
|
-
this.enableDocumentation = stack.configuration.stackFeatures?.enableDocumentation ?? true;
|
25
|
-
add404Support(this, stack);
|
26
|
-
}
|
27
|
-
hostname() {
|
28
|
-
return `${this.restApiId}.execute-api.${this.stack.region}.amazonaws.com`;
|
29
|
-
}
|
30
|
-
createUsagePlan(apiKeyId, apiKeyName) {
|
31
|
-
const newKeyId = (0, usage_plans_1.createUsagePlan)(this, apiKeyId, apiKeyName).keyId;
|
32
|
-
this.apiKeyIds.push(newKeyId);
|
33
|
-
return newKeyId;
|
34
|
-
}
|
35
|
-
createUsagePlanV2(apiName) {
|
36
|
-
const newKeyId = (0, usage_plans_1.createDefaultUsagePlan)(this, apiName).keyId;
|
37
|
-
this.apiKeyIds.push(newKeyId);
|
38
|
-
return newKeyId;
|
39
|
-
}
|
40
|
-
addJsonModel(modelName, schema) {
|
41
|
-
return this.getModelWithReference(this.addModel(modelName, {
|
42
|
-
contentType: mediatypes_1.MediaType.APPLICATION_JSON,
|
43
|
-
modelName,
|
44
|
-
schema,
|
45
|
-
}));
|
46
|
-
}
|
47
|
-
addCSVModel(modelName) {
|
48
|
-
return this.getModelWithReference(this.addModel(modelName, {
|
49
|
-
contentType: mediatypes_1.MediaType.TEXT_CSV,
|
50
|
-
modelName,
|
51
|
-
schema: {},
|
52
|
-
}));
|
53
|
-
}
|
54
|
-
getModelWithReference(model) {
|
55
|
-
return R.assoc('modelReference', (0, api_model_1.getModelReference)(model.modelId, this.restApiId), model);
|
56
|
-
}
|
57
|
-
addDocumentationPart(resource, parameterName, resourceName, type, properties) {
|
58
|
-
const location = {
|
59
|
-
type,
|
60
|
-
path: resource.path,
|
61
|
-
name: type !== 'METHOD' ? parameterName : undefined,
|
62
|
-
};
|
63
|
-
new aws_apigateway_1.CfnDocumentationPart(this.stack, resourceName, {
|
64
|
-
restApiId: resource.api.restApiId,
|
65
|
-
location,
|
66
|
-
properties: JSON.stringify(properties),
|
67
|
-
});
|
68
|
-
}
|
69
|
-
documentResource(resource, ...documentationPart) {
|
70
|
-
if (this.enableDocumentation) {
|
71
|
-
documentationPart.forEach(dp => this.addDocumentationPart(resource, dp.parameterName, `${resource.path}.${dp.parameterName}.Documentation`, dp.type, dp.documentationProperties));
|
72
|
-
}
|
73
|
-
else {
|
74
|
-
console.info("Skipping documentation for %s", resource.path);
|
75
|
-
}
|
76
|
-
}
|
77
|
-
}
|
78
|
-
exports.DigitrafficRestApi = DigitrafficRestApi;
|
79
|
-
/**
|
80
|
-
* Due to AWS API design API Gateway will always return 403 'Missing Authentication Token' for requests
|
81
|
-
* with a non-existent endpoint. This function translates this response to a 404.
|
82
|
-
* Requests with an invalid or missing API key are not affected (still return 403 'Forbidden').
|
83
|
-
* @param restApi RestApi
|
84
|
-
* @param stack Construct
|
85
|
-
*/
|
86
|
-
function add404Support(restApi, stack) {
|
87
|
-
new aws_apigateway_1.GatewayResponse(stack, `MissingAuthenticationTokenResponse-${restApi.restApiName}`, {
|
88
|
-
restApi,
|
89
|
-
type: aws_apigateway_1.ResponseType.MISSING_AUTHENTICATION_TOKEN,
|
90
|
-
statusCode: '404',
|
91
|
-
templates: {
|
92
|
-
'application/json': '{"message": "Not found"}',
|
93
|
-
},
|
94
|
-
});
|
95
|
-
}
|
96
|
-
exports.add404Support = add404Support;
|
97
|
-
function add401Support(restApi, stack) {
|
98
|
-
new aws_apigateway_1.GatewayResponse(stack, `AuthenticationFailedResponse-${restApi.restApiName}`, {
|
99
|
-
restApi,
|
100
|
-
type: aws_apigateway_1.ResponseType.UNAUTHORIZED,
|
101
|
-
statusCode: "401",
|
102
|
-
responseHeaders: {
|
103
|
-
'WWW-Authenticate': "'Basic'",
|
104
|
-
},
|
105
|
-
});
|
106
|
-
}
|
107
|
-
exports.add401Support = add401Support;
|
108
|
-
/**
|
109
|
-
* Due to AWS API design API Gateway will always return 403 'Missing Authentication Token' for requests
|
110
|
-
* with a non-existent endpoint. This function converts this response to a custom one.
|
111
|
-
* Requests with an invalid or missing API key are not affected (still return 403 'Forbidden').
|
112
|
-
* @param returnCode
|
113
|
-
* @param message
|
114
|
-
* @param restApi RestApi
|
115
|
-
* @param stack Construct
|
116
|
-
*/
|
117
|
-
function setReturnCodeForMissingAuthenticationToken(returnCode, message, restApi, stack) {
|
118
|
-
new aws_apigateway_1.GatewayResponse(stack, `MissingAuthenticationTokenResponse-${restApi.restApiName}`, {
|
119
|
-
restApi,
|
120
|
-
type: aws_apigateway_1.ResponseType.MISSING_AUTHENTICATION_TOKEN,
|
121
|
-
statusCode: `${returnCode}`,
|
122
|
-
templates: {
|
123
|
-
'application/json': `{"message": ${message}}`,
|
124
|
-
},
|
125
|
-
});
|
126
|
-
}
|
127
|
-
exports.setReturnCodeForMissingAuthenticationToken = setReturnCodeForMissingAuthenticationToken;
|
128
|
-
function createRestApi(stack, apiId, apiName, allowFromIpAddresses) {
|
129
|
-
const policyDocument = allowFromIpAddresses == null ? createDefaultPolicyDocument() : createIpRestrictionPolicyDocument(allowFromIpAddresses);
|
130
|
-
const restApi = new aws_apigateway_1.RestApi(stack, apiId, {
|
131
|
-
deployOptions: {
|
132
|
-
loggingLevel: aws_apigateway_1.MethodLoggingLevel.ERROR,
|
133
|
-
},
|
134
|
-
restApiName: apiName,
|
135
|
-
endpointTypes: [aws_apigateway_1.EndpointType.REGIONAL],
|
136
|
-
policy: policyDocument,
|
137
|
-
});
|
138
|
-
add404Support(restApi, stack);
|
139
|
-
return restApi;
|
140
|
-
}
|
141
|
-
exports.createRestApi = createRestApi;
|
142
|
-
function createDefaultPolicyDocument() {
|
143
|
-
return new aws_iam_1.PolicyDocument({
|
144
|
-
statements: [
|
145
|
-
new aws_iam_1.PolicyStatement({
|
146
|
-
effect: aws_iam_1.Effect.ALLOW,
|
147
|
-
actions: [
|
148
|
-
"execute-api:Invoke",
|
149
|
-
],
|
150
|
-
resources: [
|
151
|
-
"*",
|
152
|
-
],
|
153
|
-
principals: [
|
154
|
-
new aws_iam_1.AnyPrincipal(),
|
155
|
-
],
|
156
|
-
}),
|
157
|
-
],
|
158
|
-
});
|
159
|
-
}
|
160
|
-
exports.createDefaultPolicyDocument = createDefaultPolicyDocument;
|
161
|
-
function createIpRestrictionPolicyDocument(allowFromIpAddresses) {
|
162
|
-
return new aws_iam_1.PolicyDocument({
|
163
|
-
statements: [
|
164
|
-
new aws_iam_1.PolicyStatement({
|
165
|
-
effect: aws_iam_1.Effect.ALLOW,
|
166
|
-
conditions: {
|
167
|
-
"IpAddress": {
|
168
|
-
"aws:SourceIp": allowFromIpAddresses,
|
169
|
-
},
|
170
|
-
},
|
171
|
-
actions: [
|
172
|
-
"execute-api:Invoke",
|
173
|
-
],
|
174
|
-
resources: [
|
175
|
-
"*",
|
176
|
-
],
|
177
|
-
principals: [
|
178
|
-
new aws_iam_1.AnyPrincipal(),
|
179
|
-
],
|
180
|
-
}),
|
181
|
-
],
|
182
|
-
});
|
183
|
-
}
|
184
|
-
exports.createIpRestrictionPolicyDocument = createIpRestrictionPolicyDocument;
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdF9hcGlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9zdGFjay9yZXN0X2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0RBT29DO0FBQ3BDLGlEQUEwRjtBQUcxRixnREFBdUU7QUFFdkUsd0RBQTJEO0FBQzNELHVEQUFpRDtBQUdqRCwyQkFBNEI7QUFFNUIsTUFBYSxrQkFBbUIsU0FBUSx3QkFBTztJQUkzQyxZQUNJLEtBQXVCLEVBQUUsS0FBYSxFQUFFLE9BQWUsRUFBRSxvQkFBMkMsRUFBRSxNQUE4QjtRQUVwSSxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFOUksa0RBQWtEO1FBQ2xELE1BQU0sU0FBUyxHQUFHLEVBQUMsR0FBRztnQkFDbEIsYUFBYSxFQUFFO29CQUNYLFlBQVksRUFBRSxtQ0FBa0IsQ0FBQyxLQUFLO2lCQUN6QztnQkFDRCxXQUFXLEVBQUUsT0FBTztnQkFDcEIsYUFBYSxFQUFFLENBQUMsNkJBQVksQ0FBQyxRQUFRLENBQUM7Z0JBQ3RDLE1BQU0sRUFBRSxjQUFjO2FBQ3pCLEVBQUUsR0FBRyxNQUFNLEVBQUMsQ0FBQztRQUVkLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLENBQUM7UUFFMUYsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBaUIsSUFBSSxD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QUM7QUFDUCxDQUFDO0FBdEJELDhFQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUmVzdEFwaSxcbiAgICBNZXRob2RMb2dnaW5nTGV2ZWwsXG4gICAgR2F0ZXdheVJlc3BvbnNlLFxuICAgIFJlc3BvbnNlVHlwZSxcbiAgICBFbmRwb2ludFR5cGUsXG4gICAgUmVzdEFwaVByb3BzLCBKc29uU2NoZW1hLCBNb2RlbCwgQ2ZuRG9jdW1lbnRhdGlvblBhcnQsIFJlc291cmNlLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQge1BvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIEVmZmVjdCwgQW55UHJpbmNpcGFsfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtEaWdpdHJhZmZpY1N0YWNrfSBmcm9tIFwiLi9zdGFja1wiO1xuaW1wb3J0IHtjcmVhdGVEZWZhdWx0VXNhZ2VQbGFuLCBjcmVhdGVVc2FnZVBsYW59IGZyb20gXCIuLi91c2FnZS1wbGFuc1wiO1xuaW1wb3J0IHtNb2RlbFdpdGhSZWZlcmVuY2V9IGZyb20gXCIuLi8uLi90eXBlcy9tb2RlbC13aXRoLXJlZmVyZW5jZVwiO1xuaW1wb3J0IHtnZXRNb2RlbFJlZmVyZW5jZX0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2FwaS1tb2RlbFwiO1xuaW1wb3J0IHtNZWRpYVR5cGV9IGZyb20gXCIuLi8uLi90eXBlcy9tZWRpYXR5cGVzXCI7XG5pbXBvcnQge0RvY3VtZW50YXRpb25QYXJ0LCBEb2N1bWVudGF0aW9uUHJvcGVydGllc30gZnJvbSBcIi4uL2RvY3VtZW50YXRpb25cIjtcblxuaW1wb3J0IFIgPSByZXF1aXJlKCdyYW1kYScpO1xuXG5leHBvcnQgY2xhc3MgRGlnaXRyYWZmaWNSZXN0QXBpIGV4dGVuZHMgUmVzdEFwaSB7XG4gICAgcmVhZG9ubHkgYXBpS2V5SWRzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBlbmFibGVEb2N1bWVudGF0aW9uOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLCBhcGlJZDogc3RyaW5nLCBhcGlOYW1lOiBzdHJpbmcsIGFsbG93RnJvbUlwQWRkcmVzc2VzPzogc3RyaW5nW10gfCB1bmRlZmluZWQsIGNvbmZpZz86IFBhcnRpYWw8UmVzdEFwaVByb3BzPixcbiAgICApIHtcbiAgICAgICAgY29uc3QgcG9saWN5RG9jdW1lbnQgPSBhbGxvd0Zyb21JcEFkZHJlc3NlcyA9PSBudWxsID8gY3JlYXRlRGVmYXVsdFBvbGljeURvY3VtZW50KCkgOiBjcmVhdGVJcFJlc3RyaWN0aW9uUG9saWN5RG9jdW1lbnQoYWxsb3dGcm9tSXBBZGRyZXNzZXMpO1xuXG4gICAgICAgIC8vIG92ZXJyaWRlIGRlZmF1bHQgY29uZmlnIHdpdGggZ2l2ZW4gZXh0cmEgY29uZmlnXG4gICAgICAgIGNvbnN0IGFwaUNvbmZpZyA9IHsuLi57XG4gICAgICAgICAgICBkZXBsb3lPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbG9nZ2luZ0xldmVsOiBNZXRob2RMb2dnaW5nTGV2ZWwuRVJST1IsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdEFwaU5hbWU6IGFwaU5hbWUsXG4gICAgICAgICAgICBlbmRwb2ludFR5cGVzOiBbRW5kcG9pbnRUeXBlLlJFR0lPTkFMXSxcbiAgICAgICAgICAgIHBvbGljeTogcG9saWN5RG9jdW1lbnQsXG4gICAgICAgIH0sIC4uLmNvbmZpZ307XG5cbiAgICAgICAgc3VwZXIoc3RhY2ssIGFwaUlkLCBhcGlDb25maWcpO1xuXG4gICAgICAgIHRoaXMuYXBpS2V5SWRzID0gW107XG4gICAgICAgIHRoaXMuZW5hYmxlRG9jdW1lbnRhdGlvbiA9IHN0YWNrLmNvbmZpZ3VyYXRpb24uc3RhY2tGZWF0dXJlcz8uZW5hYmxlRG9jdW1lbnRhdGlvbiA/PyB0cnVlO1xuXG4gICAgICAgIGFkZDQwNFN1cHBvcnQodGhpcywgc3RhY2spO1xuICAgIH1cblxuICAgIGhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlc3RBcGlJZH0uZXhlY3V0ZS1hcGkuJHsodGhpcy5zdGFjayBhcyBEaWdpdHJhZmZpY1N0YWNrKS5yZWdpb259LmFtYXpvbmF3cy5jb21gO1xuICAgIH1cblxuICAgIGNyZWF0ZVVzYWdlUGxhbihhcGlLZXlJZDogc3RyaW5nLCBhcGlLZXlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBuZXdLZXlJZCA9IGNyZWF0ZVVzYWdlUGxhbih0aGlzLCBhcGlLZXlJZCwgYXBpS2V5TmFtZSkua2V5SWQ7XG5cbiAgICAgICAgdGhpcy5hcGlLZXlJZHMucHVzaChuZXdLZXlJZCk7XG5cbiAgICAgICAgcmV0dXJuIG5ld0tleUlkO1xuICAgIH1cblxuICAgIGNyZWF0ZVVzYWdlUGxhblYyKGFwaU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG5ld0tleUlkID0gY3JlYXRlRGVmYXVsdFVzYWdlUGxhbih0aGlzLCBhcGlOYW1lKS5rZXlJZDtcblxuICAgICAgICB0aGlzLmFwaUtleUlkcy5wdXNoKG5ld0tleUlkKTtcblxuICAgICAgICByZXR1cm4gbmV3S2V5SWQ7XG4gICAgfVxuXG4gICAgYWRkSnNvbk1vZGVsKG1vZGVsTmFtZTogc3RyaW5nLCBzY2hlbWE6IEpzb25TY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kZWxXaXRoUmVmZXJlbmNlKHRoaXMuYWRkTW9kZWwobW9kZWxOYW1lLCB7XG4gICAgICAgICAgICBjb250ZW50VHlwZTogTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBhZGRDU1ZNb2RlbChtb2RlbE5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2RlbFdpdGhSZWZlcmVuY2UodGhpcy5hZGRNb2RlbChtb2RlbE5hbWUsIHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBNZWRpYVR5cGUuVEVYVF9DU1YsXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICBzY2hlbWE6IHt9LFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb2RlbFdpdGhSZWZlcmVuY2UobW9kZWw6IE1vZGVsKTogTW9kZWxXaXRoUmVmZXJlbmNlIHtcbiAgICAgICAgcmV0dXJuIFIuYXNzb2MoJ21vZGVsUmVmZXJlbmNlJywgZ2V0TW9kZWxSZWZlcmVuY2UobW9kZWwubW9kZWxJZCwgdGhpcy5yZXN0QXBpSWQpLCBtb2RlbCkgYXMgTW9kZWxXaXRoUmVmZXJlbmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRG9jdW1lbnRhdGlvblBhcnQoXG4gICAgICAgIHJlc291cmNlOiBSZXNvdXJjZSwgcGFyYW1ldGVyTmFtZTogc3RyaW5nLCByZXNvdXJjZU5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiBEb2N1bWVudGF0aW9uUHJvcGVydGllcyxcbiAgICApIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb246IENmbkRvY3VtZW50YXRpb25QYXJ0LkxvY2F0aW9uUHJvcGVydHkgPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgcGF0aDogcmVzb3VyY2UucGF0aCxcbiAgICAgICAgICAgIG5hbWU6IHR5cGUgIT09ICdNRVRIT0QnID8gcGFyYW1ldGVyTmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICBuZXcgQ2ZuRG9jdW1lbnRhdGlvblBhcnQodGhpcy5zdGFjaywgcmVzb3VyY2VOYW1lLCB7XG4gICAgICAgICAgICByZXN0QXBpSWQ6IHJlc291cmNlLmFwaS5yZXN0QXBpSWQsXG4gICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkb2N1bWVudFJlc291cmNlKHJlc291cmNlOiBSZXNvdXJjZSwgLi4uZG9jdW1lbnRhdGlvblBhcnQ6IERvY3VtZW50YXRpb25QYXJ0W10pIHtcbiAgICAgICAgaWYodGhpcy5lbmFibGVEb2N1bWVudGF0aW9uKSB7XG4gICAgICAgICAgICBkb2N1bWVudGF0aW9uUGFydC5mb3JFYWNoKGRwID0+IHRoaXMuYWRkRG9jdW1lbnRhdGlvblBhcnQoXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsIGRwLnBhcmFtZXRlck5hbWUsIGAke3Jlc291cmNlLnBhdGh9LiR7ZHAucGFyYW1ldGVyTmFtZX0uRG9jdW1lbnRhdGlvbmAsIGRwLnR5cGUsIGRwLmRvY3VtZW50YXRpb25Qcm9wZXJ0aWVzLFxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTa2lwcGluZyBkb2N1bWVudGF0aW9uIGZvciAlc1wiLCByZXNvdXJjZS5wYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBEdWUgdG8gQVdTIEFQSSBkZXNpZ24gQVBJIEdhdGV3YXkgd2lsbCBhbHdheXMgcmV0dXJuIDQwMyAnTWlzc2luZyBBdXRoZW50aWNhdGlvbiBUb2tlbicgZm9yIHJlcXVlc3RzXG4gKiB3aXRoIGEgbm9uLWV4aXN0ZW50IGVuZHBvaW50LiBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdGhpcyByZXNwb25zZSB0byBhIDQwNC5cbiAqIFJlcXVlc3RzIHdpdGggYW4gaW52YWxpZCBvciBtaXNzaW5nIEFQSSBrZXkgYXJlIG5vdCBhZmZlY3RlZCAoc3RpbGwgcmV0dXJuIDQwMyAnRm9yYmlkZGVuJykuXG4gKiBAcGFyYW0gcmVzdEFwaSBSZXN0QXBpXG4gKiBAcGFyYW0gc3RhY2sgQ29uc3RydWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQ0MDRTdXBwb3J0KHJlc3RBcGk6IFJlc3RBcGksIHN0YWNrOiBDb25zdHJ1Y3QpIHtcbiAgICBuZXcgR2F0ZXdheVJlc3BvbnNlKHN0YWNrLCBgTWlzc2luZ0F1dGhlbnRpY2F0aW9uVG9rZW5SZXNwb25zZS0ke3Jlc3RBcGkucmVzdEFwaU5hbWV9YCwge1xuICAgICAgICByZXN0QXBpLFxuICAgICAgICB0eXBlOiBSZXNwb25zZVR5cGUuTUlTU0lOR19BVVRIRU5USUNBVElPTl9UT0tFTixcbiAgICAgICAgc3RhdHVzQ29kZTogJzQwNCcsXG4gICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAne1wibWVzc2FnZVwiOiBcIk5vdCBmb3VuZFwifScsXG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQ0MDFTdXBwb3J0KHJlc3RBcGk6IFJlc3RBcGksIHN0YWNrOiBDb25zdHJ1Y3QpIHtcbiAgICBuZXcgR2F0ZXdheVJlc3BvbnNlKHN0YWNrLCBgQXV0aGVudGljYXRpb25GYWlsZWRSZXNwb25zZS0ke3Jlc3RBcGkucmVzdEFwaU5hbWV9YCwge1xuICAgICAgICByZXN0QXBpLFxuICAgICAgICB0eXBlOiBSZXNwb25zZVR5cGUuVU5BVVRIT1JJWkVELFxuICAgICAgICBzdGF0dXNDb2RlOiBcIjQwMVwiLFxuICAgICAgICByZXNwb25zZUhlYWRlcnM6IHtcbiAgICAgICAgICAgICdXV1ctQXV0aGVudGljYXRlJzogXCInQmFzaWMnXCIsXG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5cbi8qKlxuICogRHVlIHRvIEFXUyBBUEkgZGVzaWduIEFQSSBHYXRld2F5IHdpbGwgYWx3YXlzIHJldHVybiA0MDMgJ01pc3NpbmcgQXV0aGVudGljYXRpb24gVG9rZW4nIGZvciByZXF1ZXN0c1xuICogd2l0aCBhIG5vbi1leGlzdGVudCBlbmRwb2ludC4gVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGlzIHJlc3BvbnNlIHRvIGEgY3VzdG9tIG9uZS5cbiAqIFJlcXVlc3RzIHdpdGggYW4gaW52YWxpZCBvciBtaXNzaW5nIEFQSSBrZXkgYXJlIG5vdCBhZmZlY3RlZCAoc3RpbGwgcmV0dXJuIDQwMyAnRm9yYmlkZGVuJykuXG4gKiBAcGFyYW0gcmV0dXJuQ29kZVxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSByZXN0QXBpIFJlc3RBcGlcbiAqIEBwYXJhbSBzdGFjayBDb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFJldHVybkNvZGVGb3JNaXNzaW5nQXV0aGVudGljYXRpb25Ub2tlbihyZXR1cm5Db2RlOiBudW1iZXIsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHJlc3RBcGk6IFJlc3RBcGksXG4gICAgc3RhY2s6IENvbnN0cnVjdCkge1xuXG4gICAgbmV3IEdhdGV3YXlSZXNwb25zZShzdGFjaywgYE1pc3NpbmdBdXRoZW50aWNhdGlvblRva2VuUmVzcG9uc2UtJHtyZXN0QXBpLnJlc3RBcGlOYW1lfWAsIHtcbiAgICAgICAgcmVzdEFwaSxcbiAgICAgICAgdHlwZTogUmVzcG9uc2VUeXBlLk1JU1NJTkdfQVVUSEVOVElDQVRJT05fVE9LRU4sXG4gICAgICAgIHN0YXR1c0NvZGU6IGAke3JldHVybkNvZGV9YCxcbiAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6IGB7XCJtZXNzYWdlXCI6ICR7bWVzc2FnZX19YCxcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RBcGkoc3RhY2s6IENvbnN0cnVjdCwgYXBpSWQ6IHN0cmluZywgYXBpTmFtZTogc3RyaW5nLCBhbGxvd0Zyb21JcEFkZHJlc3Nlcz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogUmVzdEFwaSB7XG4gICAgY29uc3QgcG9saWN5RG9jdW1lbnQgPSBhbGxvd0Zyb21JcEFkZHJlc3NlcyA9PSBudWxsID8gY3JlYXRlRGVmYXVsdFBvbGljeURvY3VtZW50KCkgOiBjcmVhdGVJcFJlc3RyaWN0aW9uUG9saWN5RG9jdW1lbnQoYWxsb3dGcm9tSXBBZGRyZXNzZXMpO1xuICAgIGNvbnN0IHJlc3RBcGkgPSBuZXcgUmVzdEFwaShzdGFjaywgYXBpSWQsIHtcbiAgICAgICAgZGVwbG95T3B0aW9uczoge1xuICAgICAgICAgICAgbG9nZ2luZ0xldmVsOiBNZXRob2RMb2dnaW5nTGV2ZWwuRVJST1IsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3RBcGlOYW1lOiBhcGlOYW1lLFxuICAgICAgICBlbmRwb2ludFR5cGVzOiBbRW5kcG9pbnRUeXBlLlJFR0lPTkFMXSxcbiAgICAgICAgcG9saWN5OiBwb2xpY3lEb2N1bWVudCxcbiAgICB9KTtcbiAgICBhZGQ0MDRTdXBwb3J0KHJlc3RBcGksIHN0YWNrKTtcbiAgICByZXR1cm4gcmVzdEFwaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRQb2xpY3lEb2N1bWVudCgpIHtcbiAgICByZXR1cm4gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBcImV4ZWN1dGUtYXBpOkludm9rZVwiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiKlwiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgICAgICAgICAgICBuZXcgQW55UHJpbmNpcGFsKCksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgIH0pO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJcFJlc3RyaWN0aW9uUG9saWN5RG9jdW1lbnQoYWxsb3dGcm9tSXBBZGRyZXNzZXM6IHN0cmluZ1tdKTogUG9saWN5RG9jdW1lbnQge1xuICAgIHJldHVybiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiSXBBZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXdzOlNvdXJjZUlwXCI6IGFsbG93RnJvbUlwQWRkcmVzc2VzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBcImV4ZWN1dGUtYXBpOkludm9rZVwiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIFwiKlwiLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgICAgICAgICAgICBuZXcgQW55UHJpbmNpcGFsKCksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgIH0pO1xufVxuIl19
|