@digitraffic/common 2022.10.6-1 → 2022.10.10-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.
Files changed (95) hide show
  1. package/README.md +54 -0
  2. package/aws/index.d.ts +1 -0
  3. package/aws/index.js +18 -0
  4. package/aws/infra/api/index.d.ts +1 -0
  5. package/aws/infra/api/index.js +18 -0
  6. package/aws/infra/api/responses.js +1 -1
  7. package/aws/infra/stack/lambda-configs.js +1 -1
  8. package/aws/infra/stack/rest_apis.d.ts +1 -0
  9. package/aws/infra/stack/rest_apis.js +8 -2
  10. package/aws/infra/stack/stack-checking-aspect.d.ts +4 -3
  11. package/aws/infra/stack/stack-checking-aspect.js +8 -7
  12. package/aws/infra/stack/stack.d.ts +4 -1
  13. package/aws/infra/stack/stack.js +1 -1
  14. package/aws/infra/usage-plans.js +1 -1
  15. package/aws/types/errors.js +1 -1
  16. package/aws/types/tags.js +1 -1
  17. package/database/last-updated.js +10 -10
  18. package/package.json +3 -2
  19. package/test/httpserver.js +1 -1
  20. package/types/index.d.ts +1 -0
  21. package/types/index.js +18 -0
  22. package/types/language.js +1 -1
  23. package/utils/geometry.js +1 -1
  24. package/src/aws/infra/api/integration.js +0 -52
  25. package/src/aws/infra/api/response.js +0 -61
  26. package/src/aws/infra/api/responses.js +0 -79
  27. package/src/aws/infra/api/static-integration.js +0 -54
  28. package/src/aws/infra/canaries/canary-alarm.js +0 -26
  29. package/src/aws/infra/canaries/canary-parameters.js +0 -3
  30. package/src/aws/infra/canaries/canary-role.js +0 -46
  31. package/src/aws/infra/canaries/canary.js +0 -29
  32. package/src/aws/infra/canaries/database-canary.js +0 -55
  33. package/src/aws/infra/canaries/database-checker.js +0 -109
  34. package/src/aws/infra/canaries/url-canary.js +0 -46
  35. package/src/aws/infra/canaries/url-checker.js +0 -238
  36. package/src/aws/infra/documentation.js +0 -95
  37. package/src/aws/infra/scheduler.js +0 -31
  38. package/src/aws/infra/security-rule.js +0 -39
  39. package/src/aws/infra/sqs-integration.js +0 -93
  40. package/src/aws/infra/sqs-queue.js +0 -130
  41. package/src/aws/infra/stack/lambda-configs.js +0 -93
  42. package/src/aws/infra/stack/monitoredfunction.js +0 -135
  43. package/src/aws/infra/stack/rest_apis.js +0 -179
  44. package/src/aws/infra/stack/stack-checking-aspect.js +0 -163
  45. package/src/aws/infra/stack/stack.js +0 -58
  46. package/src/aws/infra/stack/subscription.js +0 -41
  47. package/src/aws/infra/usage-plans.js +0 -42
  48. package/src/aws/runtime/apikey.js +0 -13
  49. package/src/aws/runtime/digitraffic-integration-response.js +0 -26
  50. package/src/aws/runtime/messaging.js +0 -31
  51. package/src/aws/runtime/s3.js +0 -30
  52. package/src/aws/runtime/secrets/dbsecret.js +0 -96
  53. package/src/aws/runtime/secrets/proxy-holder.js +0 -26
  54. package/src/aws/runtime/secrets/rds-holder.js +0 -26
  55. package/src/aws/runtime/secrets/secret-holder.js +0 -73
  56. package/src/aws/runtime/secrets/secret.js +0 -43
  57. package/src/aws/types/errors.js +0 -9
  58. package/src/aws/types/lambda-response.js +0 -28
  59. package/src/aws/types/mediatypes.js +0 -15
  60. package/src/aws/types/model-with-reference.js +0 -3
  61. package/src/aws/types/proxytypes.js +0 -3
  62. package/src/aws/types/tags.js +0 -7
  63. package/src/database/cached.js +0 -32
  64. package/src/database/database.js +0 -62
  65. package/src/database/last-updated.js +0 -54
  66. package/src/marine/id_utils.js +0 -33
  67. package/src/marine/rtz.js +0 -3
  68. package/src/test/asserter.js +0 -45
  69. package/src/test/db-testutils.js +0 -31
  70. package/src/test/httpserver.js +0 -67
  71. package/src/test/secret.js +0 -25
  72. package/src/test/secrets-manager.js +0 -59
  73. package/src/test/testutils.js +0 -44
  74. package/src/types/input-error.js +0 -7
  75. package/src/types/language.js +0 -10
  76. package/src/types/traffictype.js +0 -13
  77. package/src/types/validator.js +0 -14
  78. package/src/utils/api-model.js +0 -129
  79. package/src/utils/base64.js +0 -21
  80. package/src/utils/date-utils.js +0 -34
  81. package/src/utils/geojson-types.js +0 -18
  82. package/src/utils/geometry.js +0 -140
  83. package/src/utils/retry.js +0 -50
  84. package/src/utils/slack.js +0 -25
  85. package/src/utils/utils.js +0 -40
  86. package/test/marine/id_utils.test.js +0 -69
  87. package/test/promise/promise.test.js +0 -125
  88. package/test/secrets/dbsecret.test.js +0 -71
  89. package/test/secrets/secret-holder.test.js +0 -124
  90. package/test/secrets/secret.test.js +0 -66
  91. package/test/test/httpserver.test.js +0 -87
  92. package/test/utils/date-utils.test.js +0 -51
  93. package/test/utils/geometry.test.js +0 -49
  94. package/test/utils/utils.test.js +0 -49
  95. package/yarn.lock +0 -3200
@@ -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
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DigitrafficSecurityRule = void 0;
4
- const aws_events_1 = require("aws-cdk-lib/aws-events");
5
- const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
6
- /**
7
- * Automatic rule for Security Hub. Send notification to given topic if the following conditions apply:
8
- * * There is a finding with a status of NEW
9
- * * It has severity of HIGH or CRITICAL
10
- * * It is in a FAILED state
11
- */
12
- class DigitrafficSecurityRule extends aws_events_1.Rule {
13
- constructor(scope, topic) {
14
- const ruleName = 'SecurityHubRule';
15
- super(scope, ruleName, {
16
- ruleName,
17
- eventPattern: {
18
- source: ['aws.securityhub'],
19
- detailType: ["Security Hub Findings - Imported"],
20
- detail: {
21
- findings: {
22
- "Compliance": {
23
- "Status": ["FAILED"],
24
- },
25
- "Workflow": {
26
- "Status": ["NEW"],
27
- },
28
- "Severity": {
29
- "Label": ["HIGH", "CRITICAL"],
30
- },
31
- },
32
- },
33
- },
34
- });
35
- this.addTarget(new aws_events_targets_1.SnsTopic(topic));
36
- }
37
- }
38
- exports.DigitrafficSecurityRule = DigitrafficSecurityRule;
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvc2VjdXJpdHktcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1REFBNEM7QUFFNUMsdUVBQXdEO0FBRXhEOzs7OztHQUtHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxpQkFBSTtJQUM3QyxZQUFZLEtBQWdCLEVBQUUsS0FBYTtRQUN2QyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUNuQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNuQixRQUFRO1lBQ1IsWUFBWSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUMzQixVQUFVLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztnQkFDaEQsTUFBTSxFQUFFO29CQUNKLFFBQVEsRUFBRTt3QkFDTixZQUFZLEVBQUU7NEJBQ1YsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO3lCQUN2Qjt3QkFDRCxVQUFVLEVBQUU7NEJBQ1IsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO3lCQUNwQjt3QkFDRCxVQUFVLEVBQUU7NEJBQ1IsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQzt5QkFDaEM7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSw2QkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBMUJELDBEQTBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtSdWxlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHtJVG9waWN9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc25zXCI7XG5pbXBvcnQge1Nuc1RvcGljfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5cbi8qKlxuICogQXV0b21hdGljIHJ1bGUgZm9yIFNlY3VyaXR5IEh1Yi4gIFNlbmQgbm90aWZpY2F0aW9uIHRvIGdpdmVuIHRvcGljIGlmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseTpcbiAqICogVGhlcmUgaXMgYSBmaW5kaW5nIHdpdGggYSBzdGF0dXMgb2YgTkVXXG4gKiAqIEl0IGhhcyBzZXZlcml0eSBvZiBISUdIIG9yIENSSVRJQ0FMXG4gKiAqIEl0IGlzIGluIGEgRkFJTEVEIHN0YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEaWdpdHJhZmZpY1NlY3VyaXR5UnVsZSBleHRlbmRzIFJ1bGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIHRvcGljOiBJVG9waWMpIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSAnU2VjdXJpdHlIdWJSdWxlJztcbiAgICAgICAgc3VwZXIoc2NvcGUsIHJ1bGVOYW1lLCB7XG4gICAgICAgICAgICBydWxlTmFtZSxcbiAgICAgICAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogWydhd3Muc2VjdXJpdHlodWInXSxcbiAgICAgICAgICAgICAgICBkZXRhaWxUeXBlOiBbXCJTZWN1cml0eSBIdWIgRmluZGluZ3MgLSBJbXBvcnRlZFwiXSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZmluZGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29tcGxpYW5jZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGF0dXNcIjogW1wiRkFJTEVEXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiV29ya2Zsb3dcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhdHVzXCI6IFtcIk5FV1wiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlNldmVyaXR5XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkxhYmVsXCI6IFtcIkhJR0hcIiwgXCJDUklUSUNBTFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkVGFyZ2V0KG5ldyBTbnNUb3BpYyh0b3BpYykpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,93 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.attachQueueToApiGatewayResource = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
6
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
- function attachQueueToApiGatewayResource(stack, queue, resource, requestValidator, resourceName, apiKeyRequired, requestModels) {
8
- // role for API Gateway
9
- const apiGwRole = new aws_iam_1.Role(stack, `${resourceName}APIGatewayToSQSRole`, {
10
- assumedBy: new aws_iam_1.ServicePrincipal('apigateway.amazonaws.com'),
11
- });
12
- // grants API Gateway the right to send SQS messages
13
- apiGwRole.addToPolicy(new aws_iam_1.PolicyStatement({
14
- resources: [
15
- queue.queueArn,
16
- ],
17
- actions: [
18
- 'sqs:SendMessage',
19
- ],
20
- }));
21
- // grants API Gateway the right write CloudWatch Logs
22
- apiGwRole.addToPolicy(new aws_iam_1.PolicyStatement({
23
- resources: [
24
- '*',
25
- ],
26
- actions: [
27
- 'logs:CreateLogGroup',
28
- 'logs:CreateLogStream',
29
- 'logs:DescribeLogGroups',
30
- 'logs:DescribeLogStreams',
31
- 'logs:PutLogEvents',
32
- 'logs:GetLogEvents',
33
- 'logs:FilterLogEvents',
34
- ],
35
- }));
36
- // create an integration between API Gateway and an SQS queue
37
- const fifoMessageGroupId = queue.fifo ? '&MessageGroupId=AlwaysSameFifoGroup' : '';
38
- const sqsIntegration = new aws_apigateway_1.AwsIntegration({
39
- service: 'sqs',
40
- integrationHttpMethod: 'POST',
41
- options: {
42
- passthroughBehavior: aws_apigateway_1.PassthroughBehavior.NEVER,
43
- credentialsRole: apiGwRole,
44
- requestParameters: {
45
- // SQS requires the Content-Type of the HTTP request to be application/x-www-form-urlencoded
46
- 'integration.request.header.Content-Type': "'application/x-www-form-urlencoded'",
47
- },
48
- requestTemplates: {
49
- // map the JSON request to a form parameter, FIFO needs also MessageGroupId
50
- // https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html
51
- 'application/json': `Action=SendMessage${fifoMessageGroupId}&MessageBody=$util.urlEncode($input.body)`,
52
- },
53
- // these are required by SQS
54
- integrationResponses: [
55
- {
56
- statusCode: '200',
57
- responseTemplates: {
58
- 'text/html': 'Success',
59
- },
60
- },
61
- {
62
- statusCode: '500',
63
- responseTemplates: {
64
- 'text/html': 'Error',
65
- },
66
- selectionPattern: '500',
67
- },
68
- ],
69
- },
70
- path: `${aws_cdk_lib_1.Aws.ACCOUNT_ID}/${queue.queueName}`,
71
- });
72
- resource.addMethod('POST', sqsIntegration, {
73
- requestValidator,
74
- apiKeyRequired,
75
- requestModels: requestModels ?? {},
76
- methodResponses: [
77
- {
78
- statusCode: '200',
79
- responseParameters: {
80
- 'method.response.header.Content-Type': true,
81
- },
82
- },
83
- {
84
- statusCode: '500',
85
- responseParameters: {
86
- 'method.response.header.Content-Type': true,
87
- },
88
- },
89
- ],
90
- });
91
- }
92
- exports.attachQueueToApiGatewayResource = attachQueueToApiGatewayResource;
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzLWludGVncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9zcXMtaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdDO0FBQ2hDLCtEQUEyRztBQUUzRyxpREFBNEU7QUFJNUUsU0FBZ0IsK0JBQStCLENBQzNDLEtBQWdCLEVBQ2hCLEtBQVksRUFDWixRQUFrQixFQUNsQixnQkFBa0MsRUFDbEMsWUFBb0IsRUFDcEIsY0FBdUIsRUFDdkIsYUFBeUM7SUFFekMsdUJBQXVCO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBSSxDQUFDLEtBQUssRUFBRSxHQUFHLFlBQVkscUJBQXFCLEVBQUU7UUFDcEUsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsMEJBQTBCLENBQUM7S0FDOUQsQ0FBQyxDQUFDO0lBQ0gsb0RBQW9EO0lBQ3BELFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSx5QkFBZSxDQUFDO1FBQ3RDLFNBQVMsRUFBRTtZQUNQLEtBQUssQ0FBQyxRQUFRO1NBQ2pCO1FBQ0QsT0FBTyxFQUFFO1lBQ0wsaUJBQWlCO1NBQ3BCO0tBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixxREFBcUQ7SUFDckQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLHlCQUFlLENBQUM7UUFDdEMsU0FBUyxFQUFFO1lBQ1AsR0FBRztTQUNOO1FBQ0QsT0FBTyxFQUFFO1lBQ0wscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0Qix3QkFBd0I7WUFDeEIseUJBQXlCO1lBQ3pCLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIsc0JBQXNCO1NBQ3pCO0tBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSiw2REFBNkQ7SUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25GLE1BQU0sY0FBYyxHQUFHLElBQUksK0JBQWMsQ0FBQztRQUN0QyxPQUFPLEVBQUUsS0FBSztRQUNkLHFCQUFxQixFQUFFLE1BQU07UUFDN0IsT0FBTyxFQUFFO1lBQ0wsbUJBQW1CLEVBQUUsb0NBQW1CLENBQUMsS0FBSztZQUM5QyxlQUFlLEVBQUUsU0FBUztZQUMxQixpQkFBaUIsRUFBRTtnQkFDZiw0RkFBNEY7Z0JBQzVGLHlDQUF5QyxFQUFFLHFDQUFxQzthQUNuRjtZQUNELGdCQUFnQixFQUFFO2dCQUNkLDJFQUEyRTtnQkFDM0UsNkZBQTZGO2dCQUM3RixrQkFBa0IsRUFBRSxxQkFBcUIsa0JBQWtCLDJDQUEyQzthQUN6RztZQUNELDRCQUE0QjtZQUM1QixvQkFBb0IsRUFBRTtnQkFDbEI7b0JBQ0ksVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLGlCQUFpQixFQUFFO3dCQUNmLFdBQVcsRUFBRSxTQUFTO3FCQUN6QjtpQkFDSjtnQkFDRDtvQkFDSSxVQUFVLEVBQUUsS0FBSztvQkFDakIsaUJBQWlCLEVBQUU7d0JBQ2YsV0FBVyxFQUFFLE9BQU87cUJBQ3ZCO29CQUNELGdCQUFnQixFQUFFLEtBQUs7aUJBQzFCO2FBRUo7U0FFSjtRQUNELElBQUksRUFBRSxHQUFHLGlCQUFHLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7S0FDL0MsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFO1FBQ3ZDLGdCQUFnQjtRQUNoQixjQUFjO1FBQ2QsYUFBYSxFQUFFLGFBQWEsSUFBSSxFQUFFO1FBQ2xDLGVBQWUsRUFBRTtZQUNiO2dCQUNJLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixrQkFBa0IsRUFBRTtvQkFDaEIscUNBQXFDLEVBQUUsSUFBSTtpQkFDOUM7YUFDSjtZQUNEO2dCQUNJLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixrQkFBa0IsRUFBRTtvQkFDaEIscUNBQXFDLEVBQUUsSUFBSTtpQkFDOUM7YUFDSjtTQUNKO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQTlGRCwwRUE4RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0F3c30gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0F3c0ludGVncmF0aW9uLCBQYXNzdGhyb3VnaEJlaGF2aW9yLCBSZXF1ZXN0VmFsaWRhdG9yLCBSZXNvdXJjZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5XCI7XG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHtQb2xpY3lTdGF0ZW1lbnQsIFJvbGUsIFNlcnZpY2VQcmluY2lwYWx9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge0lNb2RlbH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5L2xpYi9tb2RlbFwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hRdWV1ZVRvQXBpR2F0ZXdheVJlc291cmNlKFxuICAgIHN0YWNrOiBDb25zdHJ1Y3QsXG4gICAgcXVldWU6IFF1ZXVlLFxuICAgIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICByZXF1ZXN0VmFsaWRhdG9yOiBSZXF1ZXN0VmFsaWRhdG9yLFxuICAgIHJlc291cmNlTmFtZTogc3RyaW5nLFxuICAgIGFwaUtleVJlcXVpcmVkOiBib29sZWFuLFxuICAgIHJlcXVlc3RNb2RlbHM/OiB7W3BhcmFtOiBzdHJpbmddOiBJTW9kZWx9LFxuKSB7XG4gICAgLy8gcm9sZSBmb3IgQVBJIEdhdGV3YXlcbiAgICBjb25zdCBhcGlHd1JvbGUgPSBuZXcgUm9sZShzdGFjaywgYCR7cmVzb3VyY2VOYW1lfUFQSUdhdGV3YXlUb1NRU1JvbGVgLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuICAgIC8vIGdyYW50cyBBUEkgR2F0ZXdheSB0aGUgcmlnaHQgdG8gc2VuZCBTUVMgbWVzc2FnZXNcbiAgICBhcGlHd1JvbGUuYWRkVG9Qb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgcXVldWUucXVldWVBcm4sXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdzcXM6U2VuZE1lc3NhZ2UnLFxuICAgICAgICBdLFxuICAgIH0pKTtcbiAgICAvLyBncmFudHMgQVBJIEdhdGV3YXkgdGhlIHJpZ2h0IHdyaXRlIENsb3VkV2F0Y2ggTG9nc1xuICAgIGFwaUd3Um9sZS5hZGRUb1BvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAnKicsXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ0dyb3VwcycsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ1N0cmVhbXMnLFxuICAgICAgICAgICAgJ2xvZ3M6UHV0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICdsb2dzOkdldExvZ0V2ZW50cycsXG4gICAgICAgICAgICAnbG9nczpGaWx0ZXJMb2dFdmVudHMnLFxuICAgICAgICBdLFxuICAgIH0pKTtcbiAgICAvLyBjcmVhdGUgYW4gaW50ZWdyYXRpb24gYmV0d2VlbiBBUEkgR2F0ZXdheSBhbmQgYW4gU1FTIHF1ZXVlXG4gICAgY29uc3QgZmlmb01lc3NhZ2VHcm91cElkID0gcXVldWUuZmlmbyA/ICcmTWVzc2FnZUdyb3VwSWQ9QWx3YXlzU2FtZUZpZm9Hcm91cCcgOiAnJztcbiAgICBjb25zdCBzcXNJbnRlZ3JhdGlvbiA9IG5ldyBBd3NJbnRlZ3JhdGlvbih7XG4gICAgICAgIHNlcnZpY2U6ICdzcXMnLFxuICAgICAgICBpbnRlZ3JhdGlvbkh0dHBNZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcGFzc3Rocm91Z2hCZWhhdmlvcjogUGFzc3Rocm91Z2hCZWhhdmlvci5ORVZFUixcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzUm9sZTogYXBpR3dSb2xlLFxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAvLyBTUVMgcmVxdWlyZXMgdGhlIENvbnRlbnQtVHlwZSBvZiB0aGUgSFRUUCByZXF1ZXN0IHRvIGJlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICAgICAgICAgICAgICAgICdpbnRlZ3JhdGlvbi5yZXF1ZXN0LmhlYWRlci5Db250ZW50LVR5cGUnOiBcIidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIC8vIG1hcCB0aGUgSlNPTiByZXF1ZXN0IHRvIGEgZm9ybSBwYXJhbWV0ZXIsIEZJRk8gbmVlZHMgYWxzbyBNZXNzYWdlR3JvdXBJZFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfU2VuZE1lc3NhZ2UuaHRtbFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogYEFjdGlvbj1TZW5kTWVzc2FnZSR7Zmlmb01lc3NhZ2VHcm91cElkfSZNZXNzYWdlQm9keT0kdXRpbC51cmxFbmNvZGUoJGlucHV0LmJvZHkpYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB0aGVzZSBhcmUgcmVxdWlyZWQgYnkgU1FTXG4gICAgICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogJzIwMCcsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndGV4dC9odG1sJzogJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnNTAwJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0L2h0bWwnOiAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25QYXR0ZXJuOiAnNTAwJyxcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBdLFxuXG4gICAgICAgIH0sXG4gICAgICAgIHBhdGg6IGAke0F3cy5BQ0NPVU5UX0lEfS8ke3F1ZXVlLnF1ZXVlTmFtZX1gLFxuICAgIH0pO1xuICAgIHJlc291cmNlLmFkZE1ldGhvZCgnUE9TVCcsIHNxc0ludGVncmF0aW9uLCB7XG4gICAgICAgIHJlcXVlc3RWYWxpZGF0b3IsXG4gICAgICAgIGFwaUtleVJlcXVpcmVkLFxuICAgICAgICByZXF1ZXN0TW9kZWxzOiByZXF1ZXN0TW9kZWxzID8/IHt9LFxuICAgICAgICBtZXRob2RSZXNwb25zZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnMjAwJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnNTAwJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9KTtcbn1cbiJdfQ==
@@ -1,130 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DigitrafficDLQueue = exports.DigitrafficSqsQueue = void 0;
4
- const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const aws_s3_1 = require("aws-cdk-lib/aws-s3");
7
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
- const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
9
- const aws_logs_1 = require("aws-cdk-lib/aws-logs");
10
- const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources");
11
- const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
12
- const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
13
- const monitoredfunction_1 = require("./stack/monitoredfunction");
14
- /**
15
- * Construct for creating SQS-queues.
16
- *
17
- * If you don't config your own deadLetterQueue, this will create a dlq for you, also a lambda function, a s3 bucket
18
- * and an alarm for the queue. Anything that goes to the dlq will be written into the bucket and the alarm is activated.
19
- */
20
- class DigitrafficSqsQueue extends aws_sqs_1.Queue {
21
- constructor(scope, name, props) {
22
- super(scope, name, props);
23
- }
24
- static create(stack, name, props) {
25
- const queueName = `${stack.configuration.shortName}-${name}-Queue`;
26
- const queueProps = { ...props, ...{
27
- encryption: aws_sqs_1.QueueEncryption.KMS_MANAGED,
28
- queueName,
29
- deadLetterQueue: props.deadLetterQueue || {
30
- maxReceiveCount: 2,
31
- queue: DigitrafficDLQueue.create(stack, name),
32
- },
33
- } };
34
- return new DigitrafficSqsQueue(stack, queueName, queueProps);
35
- }
36
- }
37
- exports.DigitrafficSqsQueue = DigitrafficSqsQueue;
38
- class DigitrafficDLQueue {
39
- static create(stack, name) {
40
- const dlqName = `${stack.configuration.shortName}-${name}-DLQ`;
41
- const dlq = new DigitrafficSqsQueue(stack, dlqName, {
42
- queueName: dlqName,
43
- visibilityTimeout: aws_cdk_lib_1.Duration.seconds(60),
44
- encryption: aws_sqs_1.QueueEncryption.KMS_MANAGED,
45
- });
46
- const dlqBucket = new aws_s3_1.Bucket(stack, `${dlqName}-Bucket`, {
47
- blockPublicAccess: aws_s3_1.BlockPublicAccess.BLOCK_ALL,
48
- });
49
- const dlqFunctionName = `${dlqName}-Function`;
50
- const lambda = monitoredfunction_1.MonitoredFunction.create(stack, dlqFunctionName, {
51
- runtime: aws_lambda_1.Runtime.NODEJS_14_X,
52
- logRetention: aws_logs_1.RetentionDays.ONE_YEAR,
53
- functionName: dlqFunctionName,
54
- code: getDlqCode(dlqBucket.bucketName),
55
- timeout: aws_cdk_lib_1.Duration.seconds(10),
56
- handler: 'index.handler',
57
- memorySize: 128,
58
- reservedConcurrentExecutions: 1,
59
- });
60
- const statement = new aws_iam_1.PolicyStatement();
61
- statement.addActions('s3:PutObject');
62
- statement.addActions('s3:PutObjectAcl');
63
- statement.addResources(dlqBucket.bucketArn + '/*');
64
- lambda.addToRolePolicy(statement);
65
- lambda.addEventSource(new aws_lambda_event_sources_1.SqsEventSource(dlq));
66
- addDLQAlarm(stack, dlqName, dlq);
67
- return dlq;
68
- }
69
- }
70
- exports.DigitrafficDLQueue = DigitrafficDLQueue;
71
- function addDLQAlarm(stack, dlqName, dlq) {
72
- const alarmName = `${dlqName}-Alarm`;
73
- dlq.metricNumberOfMessagesReceived({
74
- period: aws_cdk_lib_1.Duration.minutes(5),
75
- }).createAlarm(stack, alarmName, {
76
- alarmName,
77
- threshold: 0,
78
- evaluationPeriods: 1,
79
- treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
80
- comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
81
- }).addAlarmAction(new aws_cloudwatch_actions_1.SnsAction(stack.warningTopic));
82
- }
83
- function getDlqCode(bName) {
84
- const functionBody = DLQ_LAMBDA_CODE
85
- .replace("__bucketName__", bName)
86
- .replace("__upload__", uploadToS3.toString())
87
- .replace("__doUpload__", doUpload.toString())
88
- .replace("__handler__", createHandler().toString().substring(23)); // remove function handler() from signature
89
- return new aws_lambda_1.InlineCode(functionBody);
90
- }
91
- async function uploadToS3(s3, bName, body, objectName) {
92
- try {
93
- console.info('writing %s to %s', objectName, bName);
94
- await doUpload(s3, bName, body, objectName);
95
- }
96
- catch (error) {
97
- console.warn(error);
98
- console.warn('method=uploadToS3 retrying upload to bucket %s', bName);
99
- try {
100
- await doUpload(s3, bName, body, objectName);
101
- }
102
- catch (e2) {
103
- console.error('method=uploadToS3 failed retrying upload to bucket %s', bName);
104
- }
105
- }
106
- }
107
- function doUpload(s3, bName, Body, Key) {
108
- return s3.upload({
109
- Bucket: bName, Body, Key,
110
- }).promise();
111
- }
112
- // bucketName is unused, will be overridden in the actual lambda code below
113
- const bucketName = '';
114
- function createHandler() {
115
- return async function handler(event) {
116
- // eslint-disable-next-line @typescript-eslint/no-var-requires
117
- const AWS = require('aws-sdk');
118
- const millis = new Date().getTime();
119
- await Promise.all(event.Records.map((e, idx) => uploadToS3(new AWS.S3(), bucketName, e.body, `dlq-${millis}-${idx}.json`)));
120
- };
121
- }
122
- const DLQ_LAMBDA_CODE = `const AWS = require('aws-sdk');
123
- const bucketName = "__bucketName__";
124
-
125
- __upload__
126
- __doUpload__
127
-
128
- exports.handler = async (event) => __handler__
129
- `;
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzLXF1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9zcXMtcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQXVFO0FBQ3ZFLDZDQUFxQztBQUNyQywrQ0FBNkQ7QUFDN0QsaURBQW9EO0FBQ3BELHVEQUEyRDtBQUMzRCxtREFBbUQ7QUFDbkQsbUZBQW9FO0FBQ3BFLCtEQUFnRjtBQUNoRiwrRUFBNkQ7QUFNN0QsaUVBQTREO0FBRTVEOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxlQUFLO0lBQzFDLFlBQVksS0FBZ0IsRUFBRSxJQUFZLEVBQUUsS0FBaUI7UUFDekQsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBdUIsRUFBRSxJQUFZLEVBQUUsS0FBaUI7UUFDbEUsTUFBTSxTQUFTLEdBQUcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsSUFBSSxJQUFJLFFBQVEsQ0FBQztRQUNuRSxNQUFNLFVBQVUsR0FBRyxFQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUc7Z0JBQzdCLFVBQVUsRUFBRSx5QkFBZSxDQUFDLFdBQVc7Z0JBQ3ZDLFNBQVM7Z0JBQ1QsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLElBQUk7b0JBQ3RDLGVBQWUsRUFBRSxDQUFDO29CQUNsQixLQUFLLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7aUJBQ2hEO2FBQ0osRUFBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNKO0FBbEJELGtEQWtCQztBQUVELE1BQWEsa0JBQWtCO0lBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBdUIsRUFBRSxJ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TSxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFZLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FDOUQsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRzs7Ozs7OztDQU92QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtRdWV1ZSwgUXVldWVFbmNyeXB0aW9uLCBRdWV1ZVByb3BzfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHtEdXJhdGlvbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0Jsb2NrUHVibGljQWNjZXNzLCBCdWNrZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7UG9saWN5U3RhdGVtZW50fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtJbmxpbmVDb2RlLCBSdW50aW1lfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtSZXRlbnRpb25EYXlzfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7U3FzRXZlbnRTb3VyY2V9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXNcIjtcbmltcG9ydCB7Q29tcGFyaXNvbk9wZXJhdG9yLCBUcmVhdE1pc3NpbmdEYXRhfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcbmltcG9ydCB7U25zQWN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gtYWN0aW9uc1wiO1xuaW1wb3J0IHtNYW5hZ2VkVXBsb2FkfSBmcm9tIFwiYXdzLXNkay9jbGllbnRzL3MzXCI7XG5pbXBvcnQge1MzfSBmcm9tIFwiYXdzLXNka1wiO1xuaW1wb3J0IHtTUVNFdmVudCwgU1FTSGFuZGxlciwgU1FTUmVjb3JkfSBmcm9tIFwiYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge0RpZ2l0cmFmZmljU3RhY2t9IGZyb20gXCIuL3N0YWNrL3N0YWNrXCI7XG5pbXBvcnQge01vbml0b3JlZEZ1bmN0aW9ufSBmcm9tIFwiLi9zdGFjay9tb25pdG9yZWRmdW5jdGlvblwiO1xuXG4vKipcbiAqIENvbnN0cnVjdCBmb3IgY3JlYXRpbmcgU1FTLXF1ZXVlcy5cbiAqXG4gKiBJZiB5b3UgZG9uJ3QgY29uZmlnIHlvdXIgb3duIGRlYWRMZXR0ZXJRdWV1ZSwgdGhpcyB3aWxsIGNyZWF0ZSBhIGRscSBmb3IgeW91LCBhbHNvIGEgbGFtYmRhIGZ1bmN0aW9uLCBhIHMzIGJ1Y2tldFxuICogYW5kIGFuIGFsYXJtIGZvciB0aGUgcXVldWUuICBBbnl0aGluZyB0aGF0IGdvZXMgdG8gdGhlIGRscSB3aWxsIGJlIHdyaXR0ZW4gaW50byB0aGUgYnVja2V0IGFuZCB0aGUgYWxhcm0gaXMgYWN0aXZhdGVkLlxuICovXG5leHBvcnQgY2xhc3MgRGlnaXRyYWZmaWNTcXNRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBRdWV1ZVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBuYW1lLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZShzdGFjazogRGlnaXRyYWZmaWNTdGFjaywgbmFtZTogc3RyaW5nLCBwcm9wczogUXVldWVQcm9wcyk6IERpZ2l0cmFmZmljU3FzUXVldWUge1xuICAgICAgICBjb25zdCBxdWV1ZU5hbWUgPSBgJHtzdGFjay5jb25maWd1cmF0aW9uLnNob3J0TmFtZX0tJHtuYW1lfS1RdWV1ZWA7XG4gICAgICAgIGNvbnN0IHF1ZXVlUHJvcHMgPSB7Li4ucHJvcHMsIC4uLntcbiAgICAgICAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRCxcbiAgICAgICAgICAgIHF1ZXVlTmFtZSxcbiAgICAgICAgICAgIGRlYWRMZXR0ZXJRdWV1ZTogcHJvcHMuZGVhZExldHRlclF1ZXVlIHx8IHtcbiAgICAgICAgICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IDIsXG4gICAgICAgICAgICAgICAgcXVldWU6IERpZ2l0cmFmZmljRExRdWV1ZS5jcmVhdGUoc3RhY2ssIG5hbWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfX07XG5cbiAgICAgICAgcmV0dXJuIG5ldyBEaWdpdHJhZmZpY1Nxc1F1ZXVlKHN0YWNrLCBxdWV1ZU5hbWUsIHF1ZXVlUHJvcHMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZ2l0cmFmZmljRExRdWV1ZSB7XG4gICAgc3RhdGljIGNyZWF0ZShzdGFjazogRGlnaXRyYWZmaWNTdGFjaywgbmFtZTogc3RyaW5nKTogRGlnaXRyYWZmaWNTcXNRdWV1ZSB7XG4gICAgICAgIGNvbnN0IGRscU5hbWUgPSBgJHtzdGFjay5jb25maWd1cmF0aW9uLnNob3J0TmFtZX0tJHtuYW1lfS1ETFFgO1xuXG4gICAgICAgIGNvbnN0IGRscSA9IG5ldyBEaWdpdHJhZmZpY1Nxc1F1ZXVlKHN0YWNrLCBkbHFOYW1lLCB7XG4gICAgICAgICAgICBxdWV1ZU5hbWU6IGRscU5hbWUsXG4gICAgICAgICAgICB2aXNpYmlsaXR5VGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgICAgICBlbmNyeXB0aW9uOiBRdWV1ZUVuY3J5cHRpb24uS01TX01BTkFHRUQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRscUJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssIGAke2RscU5hbWV9LUJ1Y2tldGAsIHtcbiAgICAgICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRscUZ1bmN0aW9uTmFtZSA9IGAke2RscU5hbWV9LUZ1bmN0aW9uYDtcbiAgICAgICAgY29uc3QgbGFtYmRhID0gTW9uaXRvcmVkRnVuY3Rpb24uY3JlYXRlKHN0YWNrLCBkbHFGdW5jdGlvbk5hbWUsIHtcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzE0X1gsXG4gICAgICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1lFQVIsXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGRscUZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGNvZGU6IGdldERscUNvZGUoZGxxQnVja2V0LmJ1Y2tldE5hbWUpLFxuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiAxLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgUG9saWN5U3RhdGVtZW50KCk7XG4gICAgICAgIHN0YXRlbWVudC5hZGRBY3Rpb25zKCdzMzpQdXRPYmplY3QnKTtcbiAgICAgICAgc3RhdGVtZW50LmFkZEFjdGlvbnMoJ3MzOlB1dE9iamVjdEFjbCcpO1xuICAgICAgICBzdGF0ZW1lbnQuYWRkUmVzb3VyY2VzKGRscUJ1Y2tldC5idWNrZXRBcm4gKyAnLyonKTtcblxuICAgICAgICBsYW1iZGEuYWRkVG9Sb2xlUG9saWN5KHN0YXRlbWVudCk7XG4gICAgICAgIGxhbWJkYS5hZGRFdmVudFNvdXJjZShuZXcgU3FzRXZlbnRTb3VyY2UoZGxxKSk7XG5cbiAgICAgICAgYWRkRExRQWxhcm0oc3RhY2ssIGRscU5hbWUsIGRscSk7XG5cbiAgICAgICAgcmV0dXJuIGRscTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZERMUUFsYXJtKHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLCBkbHFOYW1lOiBzdHJpbmcsIGRscTogUXVldWUpIHtcbiAgICBjb25zdCBhbGFybU5hbWUgPSBgJHtkbHFOYW1lfS1BbGFybWA7XG4gICAgZGxxLm1ldHJpY051bWJlck9mTWVzc2FnZXNSZWNlaXZlZCh7XG4gICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICB9KS5jcmVhdGVBbGFybShzdGFjaywgYWxhcm1OYW1lLCB7XG4gICAgICAgIGFsYXJtTmFtZSxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgIH0pLmFkZEFsYXJtQWN0aW9uKG5ldyBTbnNBY3Rpb24oc3RhY2sud2FybmluZ1RvcGljKSk7XG59XG5cbmZ1bmN0aW9uIGdldERscUNvZGUoYk5hbWU6IHN0cmluZyk6IElubGluZUNvZGUge1xuICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9IERMUV9MQU1CREFfQ09ERVxuICAgICAgICAucmVwbGFjZShcIl9fYnVja2V0TmFtZV9fXCIsIGJOYW1lKVxuICAgICAgICAucmVwbGFjZShcIl9fdXBsb2FkX19cIiwgdXBsb2FkVG9TMy50b1N0cmluZygpKVxuICAgICAgICAucmVwbGFjZShcIl9fZG9VcGxvYWRfX1wiLCBkb1VwbG9hZC50b1N0cmluZygpKVxuICAgICAgICAucmVwbGFjZShcIl9faGFuZGxlcl9fXCIsIGNyZWF0ZUhhbmRsZXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyMykpOyAvLyByZW1vdmUgZnVuY3Rpb24gaGFuZGxlcigpIGZyb20gc2lnbmF0dXJlXG5cbiAgICByZXR1cm4gbmV3IElubGluZUNvZGUoZnVuY3Rpb25Cb2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkVG9TMyhzMzogUzMsIGJOYW1lOiBzdHJpbmcsIGJvZHk6IHN0cmluZywgb2JqZWN0TmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5pbmZvKCd3cml0aW5nICVzIHRvICVzJywgb2JqZWN0TmFtZSwgYk5hbWUpO1xuICAgICAgICBhd2FpdCBkb1VwbG9hZChzMywgYk5hbWUsIGJvZHksIG9iamVjdE5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgICAgIGNvbnNvbGUud2FybignbWV0aG9kPXVwbG9hZFRvUzMgcmV0cnlpbmcgdXBsb2FkIHRvIGJ1Y2tldCAlcycsIGJOYW1lKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGRvVXBsb2FkKHMzLCBiTmFtZSwgYm9keSwgb2JqZWN0TmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdtZXRob2Q9dXBsb2FkVG9TMyBmYWlsZWQgcmV0cnlpbmcgdXBsb2FkIHRvIGJ1Y2tldCAlcycsIGJOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZG9VcGxvYWQoczM6IFMzLCBiTmFtZTogc3RyaW5nLCBCb2R5OiBzdHJpbmcsIEtleTogc3RyaW5nKTogUHJvbWlzZTxNYW5hZ2VkVXBsb2FkLlNlbmREYXRhPiB7XG4gICAgcmV0dXJuIHMzLnVwbG9hZCh7XG4gICAgICAgIEJ1Y2tldDogYk5hbWUsIEJvZHksIEtleSxcbiAgICB9KS5wcm9taXNlKCk7XG59XG5cbi8vIGJ1Y2tldE5hbWUgaXMgdW51c2VkLCB3aWxsIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGFjdHVhbCBsYW1iZGEgY29kZSBiZWxvd1xuY29uc3QgYnVja2V0TmFtZSA9ICcnO1xuXG5mdW5jdGlvbiBjcmVhdGVIYW5kbGVyKCk6IFNRU0hhbmRsZXIge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBTUVNFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgICBjb25zdCBBV1MgPSByZXF1aXJlKCdhd3Mtc2RrJyk7XG5cbiAgICAgICAgY29uc3QgbWlsbGlzID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGV2ZW50LlJlY29yZHMubWFwKChlOiBTUVNSZWNvcmQsIGlkeDogbnVtYmVyKSA9PlxuICAgICAgICAgICAgdXBsb2FkVG9TMyhuZXcgQVdTLlMzKCksIGJ1Y2tldE5hbWUsIGUuYm9keSwgYGRscS0ke21pbGxpc30tJHtpZHh9Lmpzb25gKSkpO1xuICAgIH07XG59XG5cbmNvbnN0IERMUV9MQU1CREFfQ09ERSA9IGBjb25zdCBBV1MgPSByZXF1aXJlKCdhd3Mtc2RrJyk7XG5jb25zdCBidWNrZXROYW1lID0gXCJfX2J1Y2tldE5hbWVfX1wiO1xuXG5fX3VwbG9hZF9fXG5fX2RvVXBsb2FkX19cblxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKGV2ZW50KSA9PiBfX2hhbmRsZXJfX1xuYDtcbiJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWNvbmZpZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL3N0YWNrL2xhbWJkYS1jb25maWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUE2RjtBQUM3Riw2Q0FBcUM7QUFFckMsbURBQW1EO0FBZ0NuRCxTQUFnQixxQkFBcUIsQ0FDakMsS0FBdUIsRUFBRSxXQUE4QixFQUFFLFVBQWtCLEVBQUUsZ0JBQXdCLEVBQUUsTUFBMkI7SUFFbEksTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0IsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYztLQUNwQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFZCxPQUFPLEVBQUMsR0FBRyxtQkFBbUIsQ0FDMUIsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUMzRCxFQUFFLEdBQUc7WUFDRixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxTQUFTO1lBQzNCLFVBQVU7WUFDVixhQUFhLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxTQUFTO1NBQy9DLEVBQUMsQ0FBQztBQUNQLENBQUM7QUFkRCxzREFjQztBQUVELFNBQWdCLG1CQUFtQixDQUMvQixLQUF1QixFQUFFLFdBQThCLEVBQUUsVUFBa0IsRUFBRSxnQkFBd0IsRUFBRSxNQUEyQjtJQUVsSSxPQUFPO1FBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksb0JBQU8sQ0FBQyxXQUFXO1FBQy9DLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLHlCQUFZLENBQUMsTUFBTTtRQUN6RCxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsSUFBSSxHQUFHO1FBQ3JDLFlBQVksRUFBRSxVQUFVO1FBQ3hCLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTtRQUNsQixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDaEQsWUFBWSxFQUFFLHdCQUFhLENBQUMsUUFBUTtRQUNwQyw0QkFBNEIsRUFBRSxNQUFNLEVBQUUsNEJBQTRCLElBQUksQ0FBQztRQUN2RSxJQUFJLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztRQUM1QyxPQUFPLEVBQUUsR0FBRyxnQkFBZ0IsVUFBVTtRQUN0QyxXQUFXO0tBQ2QsQ0FBQztBQUNOLENBQUM7QUFoQkQsa0RBZ0JDO0FBRUQsU0FBUyxZQUFZLENBQUMsZ0JBQXdCLEVBQUUsTUFBMkI7SUFDdkUsTUFBTSxVQUFVLEdBQUcsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLGdCQUFnQixFQUFFLENBQUM7SUFFN0YsT0FBTyxJQUFJLHNCQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLEdBQVMsRUFDM0MsVUFBMEIsRUFDMUIsS0FBMEIsRUFDMUIsTUFBMEI7SUFFMUIsT0FBTztRQUNILE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLG9CQUFPLENBQUMsV0FBVztRQUM3QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUk7UUFDekQsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBWTtRQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDakIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFpQjtRQUNqQyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsNEJBQTRCLElBQUksRUFBRSxDQUFDO1FBQ3JGLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJO1lBQy9CLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQWtCO1lBQzFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQWtCO1lBQzFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBVztTQUNuRjtRQUNELFlBQVksRUFBRSx3QkFBYSxDQUFDLFFBQVE7UUFDcEMsR0FBRyxFQUFFLEdBQUc7UUFDUixVQUFVLEVBQUU7WUFDUixPQUFPLEVBQUUsR0FBRyxDQUFDLGNBQWM7U0FDOUI7UUFDRCxjQUFjLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDNUIsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLDRCQUE0QixJQUFJLENBQUM7S0FDekUsQ0FBQztBQUNOLENBQUM7QUExQkQsc0RBMEJDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsTUFBMEI7SUFDakUsTUFBTSxLQUFLLEdBQWtCO1FBQ3pCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7UUFDNUIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRztRQUNwQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDakMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFpQjtRQUNqQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFO1FBQ3JDLFlBQVksRUFBRSx3QkFBYSxDQUFDLFFBQVE7UUFDcEMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLDRCQUE0QjtRQUNqRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQVk7UUFDekIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztLQUNsRCxDQUFDO0lBQ0YsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1osT0FBTyxFQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUc7Z0JBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDZixVQUFVLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsY0FBYztpQkFDdEM7YUFDSixFQUFDLENBQUM7S0FDTjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUF0QkQsZ0VBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcmNoaXRlY3R1cmUsIEFzc2V0Q29kZSwgQ29kZSwgRnVuY3Rpb25Qcm9wcywgUnVudGltZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XHJcbmltcG9ydCB7RHVyYXRpb259IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xyXG5pbXBvcnQge0lTZWN1cml0eUdyb3VwLCBJVnBjLCBTdWJuZXRTZWxlY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XHJcbmltcG9ydCB7UmV0ZW50aW9uRGF5c30gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xyXG5pbXBvcnQge1JvbGV9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xyXG5pbXBvcnQge0RpZ2l0cmFmZmljU3RhY2t9IGZyb20gXCIuL3N0YWNrXCI7XHJcbmltcG9ydCB7TW9uaXRvcmVkRnVuY3Rpb25BbGFybVByb3BzfSBmcm9tIFwiLi9tb25pdG9yZWRmdW5jdGlvblwiO1xyXG5cclxuZXhwb3J0IHR5cGUgTGFtYmRhRW52aXJvbm1lbnQgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG5cclxuZXhwb3J0IHR5cGUgREJMYW1iZGFFbnZpcm9ubWVudCA9IExhbWJkYUVudmlyb25tZW50ICYge1xyXG4gICAgU0VDUkVUX0lEPzogc3RyaW5nXHJcbiAgICBEQl9BUFBMSUNBVElPTjogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XHJcbiAgICB2cGNJZDogc3RyaW5nO1xyXG4gICAgYWxsb3dGcm9tSXBBZGRyZXNzZXM/OiBzdHJpbmdbXTtcclxuICAgIHByaXZhdGVTdWJuZXRJZHM6IHN0cmluZ1tdO1xyXG4gICAgYXZhaWxhYmlsaXR5Wm9uZXM6IHN0cmluZ1tdO1xyXG4gICAgbGFtYmRhRGJTZ0lkOiBzdHJpbmc7XHJcbiAgICBkYlByb3BzPzogRGJQcm9wcztcclxuICAgIGRlZmF1bHRMYW1iZGFEdXJhdGlvblNlY29uZHM/OiBudW1iZXI7XHJcbiAgICBsb2dzRGVzdGluYXRpb25Bcm46IHN0cmluZztcclxuICAgIG1lbW9yeVNpemU/OiBudW1iZXIsXHJcbiAgICBydW50aW1lPzogUnVudGltZTtcclxufVxyXG5cclxuZGVjbGFyZSBpbnRlcmZhY2UgRGJQcm9wcyB7XHJcbiAgICB1c2VybmFtZTogc3RyaW5nO1xyXG4gICAgcGFzc3dvcmQ6IHN0cmluZztcclxuICAgIHVyaT86IHN0cmluZztcclxuICAgIHJvX3VyaT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFiYXNlRnVuY3Rpb25Qcm9wcyhcclxuICAgIHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLCBlbnZpcm9ubWVudDogTGFtYmRhRW52aXJvbm1lbnQsIGxhbWJkYU5hbWU6IHN0cmluZywgc2ltcGxlTGFtYmRhTmFtZTogc3RyaW5nLCBjb25maWc/OiBGdW5jdGlvblBhcmFtZXRlcnMsXHJcbik6IEZ1bmN0aW9uUHJvcHMge1xyXG4gICAgY29uc3QgdnBjU3VibmV0cyA9IHN0YWNrLnZwYyA/IHtcclxuICAgICAgICBzdWJuZXRzOiBzdGFjay52cGMucHJpdmF0ZVN1Ym5ldHMsXHJcbiAgICB9IDogdW5kZWZpbmVkO1xyXG5cclxuICAgIHJldHVybiB7Li4ubGFtYmRhRnVuY3Rpb25Qcm9wcyhcclxuICAgICAgICBzdGFjaywgZW52aXJvbm1lbnQsIGxhbWJkYU5hbWUsIHNpbXBsZUxhbWJkYU5hbWUsIGNvbmZpZyxcclxuICAgICksIC4uLntcclxuICAgICAgICB2cGM6IHN0YWNrLnZwYyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgdnBjU3VibmV0cyxcclxuICAgICAgICBzZWN1cml0eUdyb3VwOiBzdGFjay5sYW1iZGFEYlNnIHx8IHVuZGVmaW5lZCxcclxuICAgIH19O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGFtYmRhRnVuY3Rpb25Qcm9wcyhcclxuICAgIHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLCBlbnZpcm9ubWVudDogTGFtYmRhRW52aXJvbm1lbnQsIGxhbWJkYU5hbWU6IHN0cmluZywgc2ltcGxlTGFtYmRhTmFtZTogc3RyaW5nLCBjb25maWc/OiBGdW5jdGlvblBhcmFtZXRlcnMsXHJcbik6IEZ1bmN0aW9uUHJvcHMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBydW50aW1lOiBjb25maWc/LnJ1bnRpbWUgfHwgUnVudGltZS5OT0RFSlNfMTRfWCxcclxuICAgICAgICBhcmNoaXRlY3R1cmU6IGNvbmZpZz8uYXJjaGl0ZWN0dXJlIHx8IEFyY2hpdGVjdHVyZS5BUk1fNjQsXHJcbiAgICAgICAgbWVtb3J5U2l6ZTogY29uZmlnPy5tZW1vcnlTaXplIHx8IDEyOCxcclxuICAgICAgICBmdW5jdGlvbk5hbWU6IGxhbWJkYU5hbWUsXHJcbiAgICAgICAgcm9sZTogY29uZmlnPy5yb2xlLFxyXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoY29uZmlnPy50aW1lb3V0IHx8IDYwKSxcclxuICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1lFQVIsXHJcbiAgICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogY29uZmlnPy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zIHx8IDIsXHJcbiAgICAgICAgY29kZTogZ2V0QXNzZXRDb2RlKHNpbXBsZUxhbWJkYU5hbWUsIGNvbmZpZyksXHJcbiAgICAgICAgaGFuZGxlcjogYCR7c2ltcGxlTGFtYmRhTmFtZX0uaGFuZGxlcmAsXHJcbiAgICAgICAgZW52aXJvbm1lbnQsXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBc3NldENvZGUoc2ltcGxlTGFtYmRhTmFtZTogc3RyaW5nLCBjb25maWc/OiBGdW5jdGlvblBhcmFtZXRlcnMpOiBBc3NldENvZGUge1xyXG4gICAgY29uc3QgbGFtYmRhUGF0aCA9IGNvbmZpZz8uc2luZ2xlTGFtYmRhID8gYGRpc3QvbGFtYmRhL2AgOiBgZGlzdC9sYW1iZGEvJHtzaW1wbGVMYW1iZGFOYW1lfWA7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBBc3NldENvZGUobGFtYmRhUGF0aCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgYmFzZSBjb25maWd1cmF0aW9uIGZvciBhIExhbWJkYSB0aGF0IHVzZXMgYW4gUkRTIGRhdGFiYXNlXHJcbiAqIEBwYXJhbSB2cGMgXCJQcml2YXRlXCIgTGFtYmRhcyBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgVlBDXHJcbiAqIEBwYXJhbSBsYW1iZGFEYlNnIFNlY3VyaXR5IEdyb3VwIHNoYXJlZCBieSBMYW1iZGEgYW5kIFJEU1xyXG4gKiBAcGFyYW0gcHJvcHMgRGF0YWJhc2UgY29ubmVjdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgTGFtYmRhXHJcbiAqIEBwYXJhbSBjb25maWcgTGFtYmRhIGNvbmZpZ3VyYXRpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkYkxhbWJkYUNvbmZpZ3VyYXRpb24odnBjOiBJVnBjLFxyXG4gICAgbGFtYmRhRGJTZzogSVNlY3VyaXR5R3JvdXAsXHJcbiAgICBwcm9wczogTGFtYmRhQ29uZmlndXJhdGlvbixcclxuICAgIGNvbmZpZzogRnVuY3Rpb25QYXJhbWV0ZXJzKTogRnVuY3Rpb25Qcm9wcyB7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lIHx8IFJ1bnRpbWUuTk9ERUpTXzE0X1gsXHJcbiAgICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSB8fCBjb25maWcubWVtb3J5U2l6ZSB8fCAxMDI0LFxyXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogY29uZmlnLmZ1bmN0aW9uTmFtZSxcclxuICAgICAgICBjb2RlOiBjb25maWcuY29kZSBhcyBDb2RlLFxyXG4gICAgICAgIHJvbGU6IGNvbmZpZy5yb2xlLFxyXG4gICAgICAgIGhhbmRsZXI6IGNvbmZpZy5oYW5kbGVyIGFzIHN0cmluZyxcclxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKGNvbmZpZy50aW1lb3V0IHx8IHByb3BzLmRlZmF1bHRMYW1iZGFEdXJhdGlvblNlY29uZHMgfHwgNjApLFxyXG4gICAgICAgIGVudmlyb25tZW50OiBjb25maWcuZW52aXJvbm1lbnQgfHwge1xyXG4gICAgICAgICAgICBEQl9VU0VSOiBwcm9wcy5kYlByb3BzPy51c2VybmFtZSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIERCX1BBU1M6IHByb3BzLmRiUHJvcHM/LnBhc3N3b3JkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgREJfVVJJOiAoY29uZmlnLnJlYWRPbmx5ID8gcHJvcHMuZGJQcm9wcz8ucm9fdXJpIDogcHJvcHMuZGJQcm9wcz8udXJpKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1lFQVIsXHJcbiAgICAgICAgdnBjOiB2cGMsXHJcbiAgICAgICAgdnBjU3VibmV0czoge1xyXG4gICAgICAgICAgICBzdWJuZXRzOiB2cGMucHJpdmF0ZVN1Ym5ldHMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWN1cml0eUdyb3VwczogW2xhbWJkYURiU2ddLFxyXG4gICAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IGNvbmZpZy5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zIHx8IDMsXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdExhbWJkYUNvbmZpZ3VyYXRpb24oY29uZmlnOiBGdW5jdGlvblBhcmFtZXRlcnMpOiBGdW5jdGlvblByb3BzIHtcclxuICAgIGNvbnN0IHByb3BzOiBGdW5jdGlvblByb3BzID0ge1xyXG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzE0X1gsXHJcbiAgICAgICAgbWVtb3J5U2l6ZTogY29uZmlnLm1lbW9yeVNpemUgPz8gMTI4LFxyXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogY29uZmlnLmZ1bmN0aW9uTmFtZSxcclxuICAgICAgICBoYW5kbGVyOiBjb25maWcuaGFuZGxlciBhcyBzdHJpbmcsXHJcbiAgICAgICAgZW52aXJvbm1lbnQ6IGNvbmZpZy5lbnZpcm9ubWVudCA/PyB7fSxcclxuICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1lFQVIsXHJcbiAgICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogY29uZmlnLnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXHJcbiAgICAgICAgY29kZTogY29uZmlnLmNvZGUgYXMgQ29kZSxcclxuICAgICAgICByb2xlOiBjb25maWcucm9sZSxcclxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKGNvbmZpZy50aW1lb3V0IHx8IDEwKSxcclxuICAgIH07XHJcbiAgICBpZiAoY29uZmlnLnZwYykge1xyXG4gICAgICAgIHJldHVybiB7Li4ucHJvcHMsIC4uLntcclxuICAgICAgICAgICAgdnBjOiBjb25maWcudnBjLFxyXG4gICAgICAgICAgICB2cGNTdWJuZXRzOiB7XHJcbiAgICAgICAgICAgICAgICBzdWJuZXRzOiBjb25maWcudnBjPy5wcml2YXRlU3VibmV0cyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9fTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblBhcmFtZXRlcnMge1xyXG4gICAgbWVtb3J5U2l6ZT86IG51bWJlcjtcclxuICAgIHRpbWVvdXQ/OiBudW1iZXI7XHJcbiAgICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XHJcbiAgICBjb2RlPzogQ29kZTtcclxuICAgIGhhbmRsZXI/OiBzdHJpbmc7XHJcbiAgICByZWFkT25seT86IGJvb2xlYW47XHJcbiAgICBlbnZpcm9ubWVudD86IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICB9O1xyXG4gICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcclxuICAgIHJvbGU/OiBSb2xlO1xyXG4gICAgdnBjPzogSVZwYztcclxuICAgIHZwY1N1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb247XHJcbiAgICBydW50aW1lPzogUnVudGltZTtcclxuICAgIGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcclxuICAgIHNpbmdsZUxhbWJkYT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE1vbml0b3JlZEZ1bmN0aW9uUGFyYW1ldGVycyA9IHtcclxuICAgIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XHJcbiAgICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgcmVhZG9ubHkgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcclxuICAgIHJlYWRvbmx5IHJvbGU/OiBSb2xlO1xyXG4gICAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XHJcbiAgICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XHJcbiAgICByZWFkb25seSBzaW5nbGVMYW1iZGE/OiBib29sZWFuO1xyXG5cclxuICAgIHJlYWRvbmx5IGR1cmF0aW9uQWxhcm1Qcm9wcz86IE1vbml0b3JlZEZ1bmN0aW9uQWxhcm1Qcm9wc1xyXG4gICAgcmVhZG9ubHkgZHVyYXRpb25XYXJuaW5nUHJvcHM/OiBNb25pdG9yZWRGdW5jdGlvbkFsYXJtUHJvcHNcclxuICAgIHJlYWRvbmx5IGVycm9yQWxhcm1Qcm9wcz86IE1vbml0b3JlZEZ1bmN0aW9uQWxhcm1Qcm9wc1xyXG4gICAgcmVhZG9ubHkgdGhyb3R0bGVBbGFybVByb3BzPzogTW9uaXRvcmVkRnVuY3Rpb25BbGFybVByb3BzXHJcbn1cclxuIl19