@orcabus/platform-cdk-constructs 0.0.21 → 0.0.23

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 (34) hide show
  1. package/.jsii +367 -35
  2. package/api-gateway/api-gateway.js +1 -1
  3. package/deployment-stack-pipeline/artifact-bucket.js +1 -1
  4. package/deployment-stack-pipeline/pipeline.js +1 -1
  5. package/dynamodb/index.js +2 -2
  6. package/ecs/config.d.ts +3 -0
  7. package/ecs/config.js +4 -1
  8. package/ecs/index.d.ts +2 -2
  9. package/ecs/index.js +15 -4
  10. package/index.d.ts +1 -0
  11. package/index.js +3 -2
  12. package/index.ts +1 -0
  13. package/lambda/index.js +1 -1
  14. package/lambda/layers/orcabus_api_tools/poetry.lock +247 -1
  15. package/lambda/layers/orcabus_api_tools/pyproject.toml +1 -0
  16. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq/__init__.py +9 -0
  17. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq/query_helpers.py +2 -1
  18. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq/validation_helpers.py +25 -0
  19. package/monitored-queue/README.md +21 -0
  20. package/monitored-queue/index.d.ts +57 -0
  21. package/monitored-queue/index.js +55 -0
  22. package/named-lambda-role/index.js +1 -1
  23. package/package.json +1 -1
  24. package/provider-function/index.js +1 -1
  25. package/shared-config/index.d.ts +1 -0
  26. package/shared-config/index.js +3 -2
  27. package/shared-config/networking.js +2 -2
  28. package/shared-config/slack.d.ts +16 -0
  29. package/shared-config/slack.js +28 -0
  30. package/test/monitored-queue.test.js +72 -0
  31. package/test/provider-function.test.d.ts +1 -0
  32. package/test/provider-function.test.js +121 -0
  33. package/test/providerFunction.test.js +0 -121
  34. /package/test/{providerFunction.test.d.ts → monitored-queue.test.d.ts} +0 -0
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MonitoredQueue = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const constructs_1 = require("constructs");
6
+ const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
7
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
8
+ const aws_sns_1 = require("aws-cdk-lib/aws-sns");
9
+ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
10
+ /**
11
+ * A construct that defines an SQS queue, along with a DLQ and CloudWatch alarms that can notify an
12
+ * SNS topic.
13
+ */
14
+ class MonitoredQueue extends constructs_1.Construct {
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.23" };
16
+ queue;
17
+ deadLetterQueue;
18
+ alarm;
19
+ constructor(scope, id, props) {
20
+ super(scope, id);
21
+ this.deadLetterQueue = new aws_sqs_1.Queue(this, "DeadLetterQueue", {
22
+ enforceSSL: true,
23
+ ...props.dlqProps,
24
+ });
25
+ this.queue = new aws_sqs_1.Queue(this, "Queue", {
26
+ enforceSSL: true,
27
+ deadLetterQueue: {
28
+ maxReceiveCount: props.maxReceiveCount ?? 3,
29
+ queue: this.deadLetterQueue,
30
+ },
31
+ ...props.queueProps,
32
+ });
33
+ this.alarm = new aws_cloudwatch_1.Alarm(this, "Alarm", {
34
+ metric: this.deadLetterQueue.metricApproximateNumberOfMessagesVisible(),
35
+ treatMissingData: aws_cloudwatch_1.TreatMissingData.BREACHING,
36
+ comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
37
+ threshold: 0,
38
+ evaluationPeriods: 1,
39
+ alarmName: `${this.queue.queueName}-alarm`,
40
+ alarmDescription: "An event has been received in the dead letter queue.",
41
+ });
42
+ if (props.snsTopicArn !== undefined) {
43
+ const topic = aws_sns_1.Topic.fromTopicArn(this, "Topic", props.snsTopicArn);
44
+ this.alarm.addAlarmAction(new aws_cloudwatch_actions_1.SnsAction(topic));
45
+ }
46
+ }
47
+ /**
48
+ * Get the SQS queue ARN.
49
+ */
50
+ get queueArn() {
51
+ return this.queue.queueArn;
52
+ }
53
+ }
54
+ exports.MonitoredQueue = MonitoredQueue;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLGlEQUE0QztBQUM1QywrREFJb0M7QUFFcEMsaURBQTRDO0FBQzVDLCtFQUErRDtBQTJDL0Q7OztHQUdHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7O0lBQ2xDLEtBQUssQ0FBUTtJQUNiLGVBQWUsQ0FBUTtJQUN2QixLQUFLLENBQVE7SUFFdEIsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFLLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3hELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUcsS0FBSyxDQUFDLFFBQVE7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGVBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ3BDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRTtnQkFDZixlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWU7YUFDNUI7WUFDRCxHQUFHLEtBQUssQ0FBQyxVQUFVO1NBQ3BCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxzQkFBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDcEMsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsd0NBQXdDLEVBQUU7WUFDdkUsZ0JBQWdCLEVBQUUsaUNBQWdCLENBQUMsU0FBUztZQUM1QyxrQkFBa0IsRUFBRSxtQ0FBa0IsQ0FBQyxzQkFBc0I7WUFDN0QsU0FBUyxFQUFFLENBQUM7WUFDWixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxRQUFRO1lBQzFDLGdCQUFnQixFQUFFLHNEQUFzRDtTQUN6RSxDQUFDLENBQUM7UUFFSCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsTUFBTSxLQUFLLEdBQUcsZUFBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGtDQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDOztBQTNDSCx3Q0E0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHtcbiAgQWxhcm0sXG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgVHJlYXRNaXNzaW5nRGF0YSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgVG9waWMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNuc1wiO1xuaW1wb3J0IHsgU25zQWN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoLWFjdGlvbnNcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgbW9uaXRvcmVkIHF1ZXVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbml0b3JlZFF1ZXVlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHByb3BzIGZvciB0aGUgbWFpbiBTUVMgcXVldWUuXG4gICAqL1xuICByZWFkb25seSBxdWV1ZVByb3BzPzogUXVldWVQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyBmb3IgdGhlIGRlYWQtbGV0dGVyIFNRUyBxdWV1ZSB3aGVuIGEgbWVzc2FnZSBmYWlscy5cbiAgICovXG4gIHJlYWRvbmx5IGRscVByb3BzPzogUXVldWVQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyBhIG1lc3NhZ2UgY2FuIGJlIHVuc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGJlZm9yZVxuICAgKiBwdXNoaW5nIGl0IHRvIHRoZSBETFEuIERlZmF1bHRzIHRvIDMuXG4gICAqL1xuICByZWFkb25seSBtYXhSZWNlaXZlQ291bnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTZW5kIHRoZSBhbGFybSBub3RpZmljYXRpb24gdG8gdGhlIFNOUyB0b3BpYyB3aXRoIHRoZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBzbnNUb3BpY0Fybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBTUVMgcXVldWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcXVldWUgdG8gY29uc3RydWN0LiBEZWZhdWx0cyB0byB0aGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEhvdyBsb25nIG1lc3NhZ2VzIHN0YXkgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uUGVyaW9kPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgcmVtb3ZhbCBwb2xpY3kgb2YgdGhlIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogQSBjb25zdHJ1Y3QgdGhhdCBkZWZpbmVzIGFuIFNRUyBxdWV1ZSwgYWxvbmcgd2l0aCBhIERMUSBhbmQgQ2xvdWRXYXRjaCBhbGFybXMgdGhhdCBjYW4gbm90aWZ5IGFuXG4gKiBTTlMgdG9waWMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25pdG9yZWRRdWV1ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IHF1ZXVlOiBRdWV1ZTtcbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlOiBRdWV1ZTtcbiAgcmVhZG9ubHkgYWxhcm06IEFsYXJtO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNb25pdG9yZWRRdWV1ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuZGVhZExldHRlclF1ZXVlID0gbmV3IFF1ZXVlKHRoaXMsIFwiRGVhZExldHRlclF1ZXVlXCIsIHtcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICAuLi5wcm9wcy5kbHFQcm9wcyxcbiAgICB9KTtcblxuICAgIHRoaXMucXVldWUgPSBuZXcgUXVldWUodGhpcywgXCJRdWV1ZVwiLCB7XG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgZGVhZExldHRlclF1ZXVlOiB7XG4gICAgICAgIG1heFJlY2VpdmVDb3VudDogcHJvcHMubWF4UmVjZWl2ZUNvdW50ID8/IDMsXG4gICAgICAgIHF1ZXVlOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSxcbiAgICAgIH0sXG4gICAgICAuLi5wcm9wcy5xdWV1ZVByb3BzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hbGFybSA9IG5ldyBBbGFybSh0aGlzLCBcIkFsYXJtXCIsIHtcbiAgICAgIG1ldHJpYzogdGhpcy5kZWFkTGV0dGVyUXVldWUubWV0cmljQXBwcm94aW1hdGVOdW1iZXJPZk1lc3NhZ2VzVmlzaWJsZSgpLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5CUkVBQ0hJTkcsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICBhbGFybU5hbWU6IGAke3RoaXMucXVldWUucXVldWVOYW1lfS1hbGFybWAsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBcIkFuIGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkIGluIHRoZSBkZWFkIGxldHRlciBxdWV1ZS5cIixcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5zbnNUb3BpY0FybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0b3BpYyA9IFRvcGljLmZyb21Ub3BpY0Fybih0aGlzLCBcIlRvcGljXCIsIHByb3BzLnNuc1RvcGljQXJuKTtcbiAgICAgIHRoaXMuYWxhcm0uYWRkQWxhcm1BY3Rpb24obmV3IFNuc0FjdGlvbih0b3BpYykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFNRUyBxdWV1ZSBBUk4uXG4gICAqL1xuICBnZXQgcXVldWVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5xdWV1ZUFybjtcbiAgfVxufVxuIl19
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  * A construct which represents a named role that a Lambda function can assume.
8
8
  */
9
9
  class NamedLambdaRole extends aws_iam_1.Role {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.21" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.23" };
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id, {
13
13
  assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orcabus/platform-cdk-constructs",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "CDK Package for OrcaBus infrastructure.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
15
15
  * to the provider framework.
16
16
  */
17
17
  class ProviderFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.21" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.23" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -5,3 +5,4 @@ export * as account from "./accounts";
5
5
  export * as database from "./database";
6
6
  export * as s3 from "./s3";
7
7
  export * as icav2 from "./icav2";
8
+ export * as slack from "./slack";
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.icav2 = exports.s3 = exports.database = exports.account = exports.eventBridge = exports.networking = exports.fileManager = void 0;
36
+ exports.slack = exports.icav2 = exports.s3 = exports.database = exports.account = exports.eventBridge = exports.networking = exports.fileManager = void 0;
37
37
  exports.fileManager = __importStar(require("./file-manager"));
38
38
  exports.networking = __importStar(require("./networking"));
39
39
  exports.eventBridge = __importStar(require("./event-bridge"));
@@ -41,4 +41,5 @@ exports.account = __importStar(require("./accounts"));
41
41
  exports.database = __importStar(require("./database"));
42
42
  exports.s3 = __importStar(require("./s3"));
43
43
  exports.icav2 = __importStar(require("./icav2"));
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBOEM7QUFDOUMsMkRBQTJDO0FBQzNDLDhEQUE4QztBQUM5QyxzREFBc0M7QUFDdEMsdURBQXVDO0FBQ3ZDLDJDQUEyQjtBQUMzQixpREFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBmaWxlTWFuYWdlciBmcm9tIFwiLi9maWxlLW1hbmFnZXJcIjtcbmV4cG9ydCAqIGFzIG5ldHdvcmtpbmcgZnJvbSBcIi4vbmV0d29ya2luZ1wiO1xuZXhwb3J0ICogYXMgZXZlbnRCcmlkZ2UgZnJvbSBcIi4vZXZlbnQtYnJpZGdlXCI7XG5leHBvcnQgKiBhcyBhY2NvdW50IGZyb20gXCIuL2FjY291bnRzXCI7XG5leHBvcnQgKiBhcyBkYXRhYmFzZSBmcm9tIFwiLi9kYXRhYmFzZVwiO1xuZXhwb3J0ICogYXMgczMgZnJvbSBcIi4vczNcIjtcbmV4cG9ydCAqIGFzIGljYXYyIGZyb20gXCIuL2ljYXYyXCI7Il19
44
+ exports.slack = __importStar(require("./slack"));
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBOEM7QUFDOUMsMkRBQTJDO0FBQzNDLDhEQUE4QztBQUM5QyxzREFBc0M7QUFDdEMsdURBQXVDO0FBQ3ZDLDJDQUEyQjtBQUMzQixpREFBaUM7QUFDakMsaURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgZmlsZU1hbmFnZXIgZnJvbSBcIi4vZmlsZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBhcyBuZXR3b3JraW5nIGZyb20gXCIuL25ldHdvcmtpbmdcIjtcbmV4cG9ydCAqIGFzIGV2ZW50QnJpZGdlIGZyb20gXCIuL2V2ZW50LWJyaWRnZVwiO1xuZXhwb3J0ICogYXMgYWNjb3VudCBmcm9tIFwiLi9hY2NvdW50c1wiO1xuZXhwb3J0ICogYXMgZGF0YWJhc2UgZnJvbSBcIi4vZGF0YWJhc2VcIjtcbmV4cG9ydCAqIGFzIHMzIGZyb20gXCIuL3MzXCI7XG5leHBvcnQgKiBhcyBpY2F2MiBmcm9tIFwiLi9pY2F2MlwiO1xuZXhwb3J0ICogYXMgc2xhY2sgZnJvbSBcIi4vc2xhY2tcIjtcbiJdfQ==
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
23
23
  * Helper for looking up the shared OrcaBus VPC.
24
24
  */
25
25
  class OrcaBusVpc {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.21" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.23" };
27
27
  /**
28
28
  * The shared VPC that is used by OrcaBus.
29
29
  * @param scope
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
42
42
  * Helper for looking up the shared compute security group by name.
43
43
  */
44
44
  class OrcaBusSharedComputeSecurityGroup {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.21" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.23" };
46
46
  /**
47
47
  * The shared security group that is used by compute resources to access the database.
48
48
  * @param scope
@@ -0,0 +1,16 @@
1
+ import { Arn, Stack } from "aws-cdk-lib";
2
+ /**
3
+ * The SNS topic for slack alerts to alerts-dev, alerts-stg, or alerts-prod.
4
+ */
5
+ export declare const SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
6
+ /**
7
+ * A helper class to construct the arn for the slack SNS topic.
8
+ */
9
+ export declare class SlackAlerts {
10
+ /**
11
+ * Format the ARN for the slack alerts SNS topic for the current stack.
12
+ * @param stack
13
+ * @returns Arn
14
+ */
15
+ static formatArn(stack: Stack): Arn;
16
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SlackAlerts = exports.SLACK_ALERTS_SNS_TOPIC = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ /**
7
+ * The SNS topic for slack alerts to alerts-dev, alerts-stg, or alerts-prod.
8
+ */
9
+ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
10
+ /**
11
+ * A helper class to construct the arn for the slack SNS topic.
12
+ */
13
+ class SlackAlerts {
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.23" };
15
+ /**
16
+ * Format the ARN for the slack alerts SNS topic for the current stack.
17
+ * @param stack
18
+ * @returns Arn
19
+ */
20
+ static formatArn(stack) {
21
+ return aws_cdk_lib_1.Arn.format({
22
+ service: "sns",
23
+ resource: exports.SLACK_ALERTS_SNS_TOPIC,
24
+ }, stack);
25
+ }
26
+ }
27
+ exports.SlackAlerts = SlackAlerts;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzbGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsNkNBQXlDO0FBRXpDOztHQUVHO0FBQ1UsUUFBQSxzQkFBc0IsR0FBRyx3QkFBd0IsQ0FBQztBQUUvRDs7R0FFRztBQUNILE1BQWEsV0FBVzs7SUFDdEI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBWTtRQUNsQyxPQUFPLGlCQUFHLENBQUMsTUFBTSxDQUNmO1lBQ0UsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsOEJBQXNCO1NBQ2pDLEVBQ0QsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDOztBQWRILGtDQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJuLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG4vKipcbiAqIFRoZSBTTlMgdG9waWMgZm9yIHNsYWNrIGFsZXJ0cyB0byBhbGVydHMtZGV2LCBhbGVydHMtc3RnLCBvciBhbGVydHMtcHJvZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNMQUNLX0FMRVJUU19TTlNfVE9QSUMgPSBcIkF3c0NoYXRCb3RUb3BpYy1hbGVydHNcIjtcblxuLyoqXG4gKiBBIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgdGhlIGFybiBmb3IgdGhlIHNsYWNrIFNOUyB0b3BpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNsYWNrQWxlcnRzIHtcbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgQVJOIGZvciB0aGUgc2xhY2sgYWxlcnRzIFNOUyB0b3BpYyBmb3IgdGhlIGN1cnJlbnQgc3RhY2suXG4gICAqIEBwYXJhbSBzdGFja1xuICAgKiBAcmV0dXJucyBBcm5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0QXJuKHN0YWNrOiBTdGFjayk6IEFybiB7XG4gICAgcmV0dXJuIEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6IFwic25zXCIsXG4gICAgICAgIHJlc291cmNlOiBTTEFDS19BTEVSVFNfU05TX1RPUElDLFxuICAgICAgfSxcbiAgICAgIHN0YWNrLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const cdk = __importStar(require("aws-cdk-lib"));
37
+ const assertions_1 = require("aws-cdk-lib/assertions");
38
+ const monitored_queue_1 = require("../monitored-queue");
39
+ let stack;
40
+ beforeEach(() => {
41
+ stack = new cdk.Stack();
42
+ });
43
+ test("Test monitored queue created props", () => {
44
+ new monitored_queue_1.MonitoredQueue(stack, "MonitoredQueue", {
45
+ queueProps: {
46
+ queueName: "queue",
47
+ },
48
+ dlqProps: {
49
+ queueName: "queue-dlq",
50
+ },
51
+ snsTopicArn: "arn:aws:sns:ap-southeast-2:123456789012:topic",
52
+ });
53
+ const template = assertions_1.Template.fromStack(stack);
54
+ template.resourceCountIs("AWS::SQS::Queue", 2);
55
+ template.hasResourceProperties("AWS::SQS::Queue", {
56
+ QueueName: "queue",
57
+ RedrivePolicy: {
58
+ deadLetterTargetArn: assertions_1.Match.anyValue(),
59
+ maxReceiveCount: 3,
60
+ },
61
+ });
62
+ template.hasResourceProperties("AWS::SQS::Queue", {
63
+ QueueName: "queue-dlq",
64
+ });
65
+ template.hasResourceProperties("AWS::CloudWatch::Alarm", {
66
+ ComparisonOperator: "GreaterThanThreshold",
67
+ EvaluationPeriods: 1,
68
+ Threshold: 0,
69
+ AlarmActions: ["arn:aws:sns:ap-southeast-2:123456789012:topic"],
70
+ });
71
+ });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmVkLXF1ZXVlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb25pdG9yZWQtcXVldWUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtQztBQUNuQyx1REFBeUQ7QUFDekQsd0RBQW9EO0FBRXBELElBQUksS0FBZ0IsQ0FBQztBQUVyQixVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2QsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtJQUM5QyxJQUFJLGdDQUFjLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1FBQzFDLFVBQVUsRUFBRTtZQUNWLFNBQVMsRUFBRSxPQUFPO1NBQ25CO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFLFdBQVc7U0FDdkI7UUFDRCxXQUFXLEVBQUUsK0NBQStDO0tBQzdELENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFO1FBQ2hELFNBQVMsRUFBRSxPQUFPO1FBQ2xCLGFBQWEsRUFBRTtZQUNiLG1CQUFtQixFQUFFLGtCQUFLLENBQUMsUUFBUSxFQUFFO1lBQ3JDLGVBQWUsRUFBRSxDQUFDO1NBQ25CO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFO1FBQ2hELFNBQVMsRUFBRSxXQUFXO0tBQ3ZCLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsRUFBRTtRQUN2RCxrQkFBa0IsRUFBRSxzQkFBc0I7UUFDMUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNwQixTQUFTLEVBQUUsQ0FBQztRQUNaLFlBQVksRUFBRSxDQUFDLCtDQUErQyxDQUFDO0tBQ2hFLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTWF0Y2gsIFRlbXBsYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2Fzc2VydGlvbnNcIjtcbmltcG9ydCB7IE1vbml0b3JlZFF1ZXVlIH0gZnJvbSBcIi4uL21vbml0b3JlZC1xdWV1ZVwiO1xuXG5sZXQgc3RhY2s6IGNkay5TdGFjaztcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xufSk7XG5cbnRlc3QoXCJUZXN0IG1vbml0b3JlZCBxdWV1ZSBjcmVhdGVkIHByb3BzXCIsICgpID0+IHtcbiAgbmV3IE1vbml0b3JlZFF1ZXVlKHN0YWNrLCBcIk1vbml0b3JlZFF1ZXVlXCIsIHtcbiAgICBxdWV1ZVByb3BzOiB7XG4gICAgICBxdWV1ZU5hbWU6IFwicXVldWVcIixcbiAgICB9LFxuICAgIGRscVByb3BzOiB7XG4gICAgICBxdWV1ZU5hbWU6IFwicXVldWUtZGxxXCIsXG4gICAgfSxcbiAgICBzbnNUb3BpY0FybjogXCJhcm46YXdzOnNuczphcC1zb3V0aGVhc3QtMjoxMjM0NTY3ODkwMTI6dG9waWNcIixcbiAgfSk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OlNRUzo6UXVldWVcIiwgMik7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6U1FTOjpRdWV1ZVwiLCB7XG4gICAgUXVldWVOYW1lOiBcInF1ZXVlXCIsXG4gICAgUmVkcml2ZVBvbGljeToge1xuICAgICAgZGVhZExldHRlclRhcmdldEFybjogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgIG1heFJlY2VpdmVDb3VudDogMyxcbiAgICB9LFxuICB9KTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpTUVM6OlF1ZXVlXCIsIHtcbiAgICBRdWV1ZU5hbWU6IFwicXVldWUtZGxxXCIsXG4gIH0pO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCIsIHtcbiAgICBDb21wYXJpc29uT3BlcmF0b3I6IFwiR3JlYXRlclRoYW5UaHJlc2hvbGRcIixcbiAgICBFdmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICBUaHJlc2hvbGQ6IDAsXG4gICAgQWxhcm1BY3Rpb25zOiBbXCJhcm46YXdzOnNuczphcC1zb3V0aGVhc3QtMjoxMjM0NTY3ODkwMTI6dG9waWNcIl0sXG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const cdk = __importStar(require("aws-cdk-lib"));
37
+ const assertions_1 = require("aws-cdk-lib/assertions");
38
+ const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
39
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
40
+ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
41
+ const index_1 = require("../provider-function/index");
42
+ let stack;
43
+ let vpc;
44
+ beforeEach(() => {
45
+ stack = new cdk.Stack();
46
+ vpc = new ec2.Vpc(stack, "MockExistingVPC", {
47
+ subnetConfiguration: [
48
+ {
49
+ cidrMask: 24,
50
+ name: "publicSubnet",
51
+ subnetType: ec2.SubnetType.PUBLIC,
52
+ },
53
+ {
54
+ cidrMask: 24,
55
+ name: "privateWithEgressSubnet",
56
+ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
57
+ },
58
+ ],
59
+ });
60
+ });
61
+ function assert_common(template, key) {
62
+ // Contains the provider.
63
+ template.hasResourceProperties("AWS::Lambda::Function", {
64
+ Environment: {
65
+ Variables: {
66
+ USER_ON_EVENT_FUNCTION_ARN: {
67
+ "Fn::GetAtt": [assertions_1.Match.stringLikeRegexp("TestFunction*"), "Arn"],
68
+ },
69
+ },
70
+ },
71
+ });
72
+ // Contains the custom resource.
73
+ template.hasResourceProperties("AWS::CloudFormation::CustomResource", {
74
+ S3Key: key,
75
+ });
76
+ }
77
+ test("Test ProviderFunction", () => {
78
+ const testFunction = new aws_lambda_1.Function(stack, "TestFunction", {
79
+ code: new aws_lambda_1.S3Code(new aws_s3_1.Bucket(stack, "TestBucket", { bucketName: "bucket" }), "key"),
80
+ runtime: aws_lambda_1.Runtime.NODEJS_20_X,
81
+ handler: "index.handler",
82
+ });
83
+ new index_1.ProviderFunction(stack, "TestProviderFunction", {
84
+ function: testFunction,
85
+ vpc,
86
+ });
87
+ const template = assertions_1.Template.fromStack(stack);
88
+ assert_common(template, "key");
89
+ });
90
+ test("Test ProviderFunction additionalHash", () => {
91
+ const testFunction = new aws_lambda_1.Function(stack, "TestFunction", {
92
+ code: new aws_lambda_1.S3Code(new aws_s3_1.Bucket(stack, "TestBucket", { bucketName: "bucket" }), "key"),
93
+ runtime: aws_lambda_1.Runtime.NODEJS_20_X,
94
+ handler: "index.handler",
95
+ });
96
+ new index_1.ProviderFunction(stack, "TestProviderFunction", {
97
+ function: testFunction,
98
+ vpc,
99
+ additionalHash: "hash",
100
+ });
101
+ const template = assertions_1.Template.fromStack(stack);
102
+ assert_common(template, "hash");
103
+ });
104
+ test("Test ProviderFunction properties", () => {
105
+ const testFunction = new aws_lambda_1.Function(stack, "TestFunction", {
106
+ code: new aws_lambda_1.S3Code(new aws_s3_1.Bucket(stack, "TestBucket", { bucketName: "bucket" }), "key"),
107
+ runtime: aws_lambda_1.Runtime.NODEJS_20_X,
108
+ handler: "index.handler",
109
+ });
110
+ new index_1.ProviderFunction(stack, "TestProviderFunction", {
111
+ function: testFunction,
112
+ vpc,
113
+ resourceProperties: { Property: "value" },
114
+ });
115
+ const template = assertions_1.Template.fromStack(stack);
116
+ assert_common(template, "key");
117
+ template.hasResourceProperties("AWS::CloudFormation::CustomResource", {
118
+ Property: "value",
119
+ });
120
+ });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItZnVuY3Rpb24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb3ZpZGVyLWZ1bmN0aW9uLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFDbkMsdURBQXlEO0FBQ3pELHlEQUEyQztBQUMzQyx1REFBbUU7QUFDbkUsK0NBQTRDO0FBQzVDLHNEQUE4RDtBQUU5RCxJQUFJLEtBQWdCLENBQUM7QUFDckIsSUFBSSxHQUFZLENBQUM7QUFFakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRTtRQUMxQyxtQkFBbUIsRUFBRTtZQUNuQjtnQkFDRSxRQUFRLEVBQUUsRUFBRTtnQkFDWixJQUFJLEVBQUUsY0FBYztnQkFDcEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTTthQUNsQztZQUNEO2dCQUNFLFFBQVEsRUFBRSxFQUFFO2dCQUNaLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLG1CQUFtQjthQUMvQztTQUNGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLGFBQWEsQ0FBQyxRQUFrQixFQUFFLEdBQVc7SUFDcEQseUJBQXlCO0lBQ3pCLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtRQUN0RCxXQUFXLEVBQUU7WUFDWCxTQUFTLEVBQUU7Z0JBQ1QsMEJBQTBCLEVBQUU7b0JBQzFCLFlBQVksRUFBRSxDQUFDLGtCQUFLLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDO2lCQUMvRDthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxnQ0FBZ0M7SUFDaEMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHFDQUFxQyxFQUFFO1FBQ3BFLEtBQUssRUFBRSxHQUFHO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxxQkFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUU7UUFDdkQsSUFBSSxFQUFFLElBQUksbUJBQU0sQ0FDZCxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQ3pELEtBQUssQ0FDTjtRQUNELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7UUFDNUIsT0FBTyxFQUFFLGVBQWU7S0FDekIsQ0FBQyxDQUFDO0lBRUgsSUFBSSx3QkFBZ0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7UUFDbEQsUUFBUSxFQUFFLFlBQVk7UUFDdEIsR0FBRztLQUNKLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO0lBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUkscUJBQVEsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO1FBQ3ZELElBQUksRUFBRSxJQUFJLG1CQUFNLENBQ2QsSUFBSSxlQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUN6RCxLQUFLLENBQ047UUFDRCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1FBQzVCLE9BQU8sRUFBRSxlQUFlO0tBQ3pCLENBQUMsQ0FBQztJQUVILElBQUksd0JBQWdCLENBQUMsS0FBSyxFQUFFLHNCQUFzQixFQUFFO1FBQ2xELFFBQVEsRUFBRSxZQUFZO1FBQ3RCLEdBQUc7UUFDSCxjQUFjLEVBQUUsTUFBTTtLQUN2QixDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtJQUM1QyxNQUFNLFlBQVksR0FBRyxJQUFJLHFCQUFRLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtRQUN2RCxJQUFJLEVBQUUsSUFBSSxtQkFBTSxDQUNkLElBQUksZUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFDekQsS0FBSyxDQUNOO1FBQ0QsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztRQUM1QixPQUFPLEVBQUUsZUFBZTtLQUN6QixDQUFDLENBQUM7SUFFSCxJQUFJLHdCQUFnQixDQUFDLEtBQUssRUFBRSxzQkFBc0IsRUFBRTtRQUNsRCxRQUFRLEVBQUUsWUFBWTtRQUN0QixHQUFHO1FBQ0gsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0tBQzFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFL0IsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHFDQUFxQyxFQUFFO1FBQ3BFLFFBQVEsRUFBRSxPQUFPO0tBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTWF0Y2gsIFRlbXBsYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2Fzc2VydGlvbnNcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgRnVuY3Rpb24sIFJ1bnRpbWUsIFMzQ29kZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBQcm92aWRlckZ1bmN0aW9uIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLWZ1bmN0aW9uL2luZGV4XCI7XG5cbmxldCBzdGFjazogY2RrLlN0YWNrO1xubGV0IHZwYzogZWMyLlZwYztcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuICB2cGMgPSBuZXcgZWMyLlZwYyhzdGFjaywgXCJNb2NrRXhpc3RpbmdWUENcIiwge1xuICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgIHtcbiAgICAgICAgY2lkck1hc2s6IDI0LFxuICAgICAgICBuYW1lOiBcInB1YmxpY1N1Ym5ldFwiLFxuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjaWRyTWFzazogMjQsXG4gICAgICAgIG5hbWU6IFwicHJpdmF0ZVdpdGhFZ3Jlc3NTdWJuZXRcIixcbiAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gYXNzZXJ0X2NvbW1vbih0ZW1wbGF0ZTogVGVtcGxhdGUsIGtleTogc3RyaW5nKSB7XG4gIC8vIENvbnRhaW5zIHRoZSBwcm92aWRlci5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCIsIHtcbiAgICBFbnZpcm9ubWVudDoge1xuICAgICAgVmFyaWFibGVzOiB7XG4gICAgICAgIFVTRVJfT05fRVZFTlRfRlVOQ1RJT05fQVJOOiB7XG4gICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiVGVzdEZ1bmN0aW9uKlwiKSwgXCJBcm5cIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIENvbnRhaW5zIHRoZSBjdXN0b20gcmVzb3VyY2UuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6Q2xvdWRGb3JtYXRpb246OkN1c3RvbVJlc291cmNlXCIsIHtcbiAgICBTM0tleToga2V5LFxuICB9KTtcbn1cblxudGVzdChcIlRlc3QgUHJvdmlkZXJGdW5jdGlvblwiLCAoKSA9PiB7XG4gIGNvbnN0IHRlc3RGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihzdGFjaywgXCJUZXN0RnVuY3Rpb25cIiwge1xuICAgIGNvZGU6IG5ldyBTM0NvZGUoXG4gICAgICBuZXcgQnVja2V0KHN0YWNrLCBcIlRlc3RCdWNrZXRcIiwgeyBidWNrZXROYW1lOiBcImJ1Y2tldFwiIH0pLFxuICAgICAgXCJrZXlcIixcbiAgICApLFxuICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gIH0pO1xuXG4gIG5ldyBQcm92aWRlckZ1bmN0aW9uKHN0YWNrLCBcIlRlc3RQcm92aWRlckZ1bmN0aW9uXCIsIHtcbiAgICBmdW5jdGlvbjogdGVzdEZ1bmN0aW9uLFxuICAgIHZwYyxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICBhc3NlcnRfY29tbW9uKHRlbXBsYXRlLCBcImtleVwiKTtcbn0pO1xuXG50ZXN0KFwiVGVzdCBQcm92aWRlckZ1bmN0aW9uIGFkZGl0aW9uYWxIYXNoXCIsICgpID0+IHtcbiAgY29uc3QgdGVzdEZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHN0YWNrLCBcIlRlc3RGdW5jdGlvblwiLCB7XG4gICAgY29kZTogbmV3IFMzQ29kZShcbiAgICAgIG5ldyBCdWNrZXQoc3RhY2ssIFwiVGVzdEJ1Y2tldFwiLCB7IGJ1Y2tldE5hbWU6IFwiYnVja2V0XCIgfSksXG4gICAgICBcImtleVwiLFxuICAgICksXG4gICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgfSk7XG5cbiAgbmV3IFByb3ZpZGVyRnVuY3Rpb24oc3RhY2ssIFwiVGVzdFByb3ZpZGVyRnVuY3Rpb25cIiwge1xuICAgIGZ1bmN0aW9uOiB0ZXN0RnVuY3Rpb24sXG4gICAgdnBjLFxuICAgIGFkZGl0aW9uYWxIYXNoOiBcImhhc2hcIixcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICBhc3NlcnRfY29tbW9uKHRlbXBsYXRlLCBcImhhc2hcIik7XG59KTtcblxudGVzdChcIlRlc3QgUHJvdmlkZXJGdW5jdGlvbiBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgY29uc3QgdGVzdEZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHN0YWNrLCBcIlRlc3RGdW5jdGlvblwiLCB7XG4gICAgY29kZTogbmV3IFMzQ29kZShcbiAgICAgIG5ldyBCdWNrZXQoc3RhY2ssIFwiVGVzdEJ1Y2tldFwiLCB7IGJ1Y2tldE5hbWU6IFwiYnVja2V0XCIgfSksXG4gICAgICBcImtleVwiLFxuICAgICksXG4gICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgfSk7XG5cbiAgbmV3IFByb3ZpZGVyRnVuY3Rpb24oc3RhY2ssIFwiVGVzdFByb3ZpZGVyRnVuY3Rpb25cIiwge1xuICAgIGZ1bmN0aW9uOiB0ZXN0RnVuY3Rpb24sXG4gICAgdnBjLFxuICAgIHJlc291cmNlUHJvcGVydGllczogeyBQcm9wZXJ0eTogXCJ2YWx1ZVwiIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgYXNzZXJ0X2NvbW1vbih0ZW1wbGF0ZSwgXCJrZXlcIik7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6Q3VzdG9tUmVzb3VyY2VcIiwge1xuICAgIFByb3BlcnR5OiBcInZhbHVlXCIsXG4gIH0pO1xufSk7XG4iXX0=
@@ -1,121 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- const cdk = __importStar(require("aws-cdk-lib"));
37
- const assertions_1 = require("aws-cdk-lib/assertions");
38
- const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
39
- const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
40
- const aws_s3_1 = require("aws-cdk-lib/aws-s3");
41
- const index_1 = require("../provider-function/index");
42
- let stack;
43
- let vpc;
44
- beforeEach(() => {
45
- stack = new cdk.Stack();
46
- vpc = new ec2.Vpc(stack, 'MockExistingVPC', {
47
- subnetConfiguration: [
48
- {
49
- cidrMask: 24,
50
- name: 'publicSubnet',
51
- subnetType: ec2.SubnetType.PUBLIC,
52
- },
53
- {
54
- cidrMask: 24,
55
- name: 'privateWithEgressSubnet',
56
- subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
57
- },
58
- ],
59
- });
60
- });
61
- function assert_common(template, key) {
62
- // Contains the provider.
63
- template.hasResourceProperties('AWS::Lambda::Function', {
64
- Environment: {
65
- Variables: {
66
- USER_ON_EVENT_FUNCTION_ARN: {
67
- 'Fn::GetAtt': [assertions_1.Match.stringLikeRegexp('TestFunction*'), 'Arn'],
68
- },
69
- },
70
- },
71
- });
72
- // Contains the custom resource.
73
- template.hasResourceProperties('AWS::CloudFormation::CustomResource', {
74
- S3Key: key,
75
- });
76
- }
77
- test('Test ProviderFunction', () => {
78
- const testFunction = new aws_lambda_1.Function(stack, 'TestFunction', {
79
- code: new aws_lambda_1.S3Code(new aws_s3_1.Bucket(stack, 'TestBucket', { bucketName: 'bucket' }), 'key'),
80
- runtime: aws_lambda_1.Runtime.NODEJS_20_X,
81
- handler: 'index.handler',
82
- });
83
- new index_1.ProviderFunction(stack, 'TestProviderFunction', {
84
- function: testFunction,
85
- vpc,
86
- });
87
- const template = assertions_1.Template.fromStack(stack);
88
- assert_common(template, 'key');
89
- });
90
- test('Test ProviderFunction additionalHash', () => {
91
- const testFunction = new aws_lambda_1.Function(stack, 'TestFunction', {
92
- code: new aws_lambda_1.S3Code(new aws_s3_1.Bucket(stack, 'TestBucket', { bucketName: 'bucket' }), 'key'),
93
- runtime: aws_lambda_1.Runtime.NODEJS_20_X,
94
- handler: 'index.handler',
95
- });
96
- new index_1.ProviderFunction(stack, 'TestProviderFunction', {
97
- function: testFunction,
98
- vpc,
99
- additionalHash: 'hash',
100
- });
101
- const template = assertions_1.Template.fromStack(stack);
102
- assert_common(template, 'hash');
103
- });
104
- test('Test ProviderFunction properties', () => {
105
- const testFunction = new aws_lambda_1.Function(stack, 'TestFunction', {
106
- code: new aws_lambda_1.S3Code(new aws_s3_1.Bucket(stack, 'TestBucket', { bucketName: 'bucket' }), 'key'),
107
- runtime: aws_lambda_1.Runtime.NODEJS_20_X,
108
- handler: 'index.handler',
109
- });
110
- new index_1.ProviderFunction(stack, 'TestProviderFunction', {
111
- function: testFunction,
112
- vpc,
113
- resourceProperties: { Property: 'value' },
114
- });
115
- const template = assertions_1.Template.fromStack(stack);
116
- assert_common(template, 'key');
117
- template.hasResourceProperties('AWS::CloudFormation::CustomResource', {
118
- Property: 'value',
119
- });
120
- });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJGdW5jdGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJvdmlkZXJGdW5jdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQW1DO0FBQ25DLHVEQUF5RDtBQUN6RCx5REFBMkM7QUFDM0MsdURBQW1FO0FBQ25FLCtDQUE0QztBQUM1QyxzREFBNEQ7QUFFNUQsSUFBSSxLQUFnQixDQUFDO0FBQ3JCLElBQUksR0FBWSxDQUFDO0FBRWpCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7UUFDMUMsbUJBQW1CLEVBQUU7WUFDbkI7Z0JBQ0UsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU07YUFDbEM7WUFDRDtnQkFDRSxRQUFRLEVBQUUsRUFBRTtnQkFDWixJQUFJLEVBQUUseUJBQXlCO2dCQUMvQixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7YUFDL0M7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxhQUFhLENBQUMsUUFBa0IsRUFBRSxHQUFXO0lBQ3BELHlCQUF5QjtJQUN6QixRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7UUFDdEQsV0FBVyxFQUFFO1lBQ1gsU0FBUyxFQUFFO2dCQUNULDBCQUEwQixFQUFFO29CQUMxQixZQUFZLEVBQUUsQ0FBQyxrQkFBSyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQztpQkFDL0Q7YUFDRjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsZ0NBQWdDO0lBQ2hDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxxQ0FBcUMsRUFBRTtRQUNwRSxLQUFLLEVBQUUsR0FBRztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUkscUJBQVEsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO1FBQ3ZELElBQUksRUFBRSxJQUFJLG1CQUFNLENBQUMsSUFBSSxlQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUNsRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1FBQzVCLE9BQU8sRUFBRSxlQUFlO0tBQ3pCLENBQUMsQ0FBQztJQUVILElBQUksd0JBQWdCLENBQUMsS0FBSyxFQUFFLHNCQUFzQixFQUFFO1FBQ2xELFFBQVEsRUFBRSxZQUFZO1FBQ3RCLEdBQUc7S0FDSixDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLHFCQUFRLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtRQUN2RCxJQUFJLEVBQUUsSUFBSSxtQkFBTSxDQUFDLElBQUksZUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDbEYsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztRQUM1QixPQUFPLEVBQUUsZUFBZTtLQUN6QixDQUFDLENBQUM7SUFFSCxJQUFJLHdCQUFnQixDQUFDLEtBQUssRUFBRSxzQkFBc0IsRUFBRTtRQUNsRCxRQUFRLEVBQUUsWUFBWTtRQUN0QixHQUFHO1FBQ0gsY0FBYyxFQUFFLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxxQkFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUU7UUFDdkQsSUFBSSxFQUFFLElBQUksbUJBQU0sQ0FBQyxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2xGLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7UUFDNUIsT0FBTyxFQUFFLGVBQWU7S0FDekIsQ0FBQyxDQUFDO0lBRUgsSUFBSSx3QkFBZ0IsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7UUFDbEQsUUFBUSxFQUFFLFlBQVk7UUFDdEIsR0FBRztRQUNILGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtLQUMxQyxDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRS9CLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxxQ0FBcUMsRUFBRTtRQUNwRSxRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBNYXRjaCwgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IEZ1bmN0aW9uLCBSdW50aW1lLCBTM0NvZGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQge1Byb3ZpZGVyRnVuY3Rpb259IGZyb20gXCIuLi9wcm92aWRlci1mdW5jdGlvbi9pbmRleFwiO1xuXG5sZXQgc3RhY2s6IGNkay5TdGFjaztcbmxldCB2cGM6IGVjMi5WcGM7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcbiAgdnBjID0gbmV3IGVjMi5WcGMoc3RhY2ssICdNb2NrRXhpc3RpbmdWUEMnLCB7XG4gICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAge1xuICAgICAgICBjaWRyTWFzazogMjQsXG4gICAgICAgIG5hbWU6ICdwdWJsaWNTdWJuZXQnLFxuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjaWRyTWFzazogMjQsXG4gICAgICAgIG5hbWU6ICdwcml2YXRlV2l0aEVncmVzc1N1Ym5ldCcsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGFzc2VydF9jb21tb24odGVtcGxhdGU6IFRlbXBsYXRlLCBrZXk6IHN0cmluZykge1xuICAvLyBDb250YWlucyB0aGUgcHJvdmlkZXIuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgIEVudmlyb25tZW50OiB7XG4gICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgVVNFUl9PTl9FVkVOVF9GVU5DVElPTl9BUk46IHtcbiAgICAgICAgICAnRm46OkdldEF0dCc6IFtNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdUZXN0RnVuY3Rpb24qJyksICdBcm4nXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gQ29udGFpbnMgdGhlIGN1c3RvbSByZXNvdXJjZS5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRm9ybWF0aW9uOjpDdXN0b21SZXNvdXJjZScsIHtcbiAgICBTM0tleToga2V5LFxuICB9KTtcbn1cblxudGVzdCgnVGVzdCBQcm92aWRlckZ1bmN0aW9uJywgKCkgPT4ge1xuICBjb25zdCB0ZXN0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oc3RhY2ssICdUZXN0RnVuY3Rpb24nLCB7XG4gICAgY29kZTogbmV3IFMzQ29kZShuZXcgQnVja2V0KHN0YWNrLCAnVGVzdEJ1Y2tldCcsIHsgYnVja2V0TmFtZTogJ2J1Y2tldCcgfSksICdrZXknKSxcbiAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgfSk7XG5cbiAgbmV3IFByb3ZpZGVyRnVuY3Rpb24oc3RhY2ssICdUZXN0UHJvdmlkZXJGdW5jdGlvbicsIHtcbiAgICBmdW5jdGlvbjogdGVzdEZ1bmN0aW9uLFxuICAgIHZwYyxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICBhc3NlcnRfY29tbW9uKHRlbXBsYXRlLCAna2V5Jyk7XG59KTtcblxudGVzdCgnVGVzdCBQcm92aWRlckZ1bmN0aW9uIGFkZGl0aW9uYWxIYXNoJywgKCkgPT4ge1xuICBjb25zdCB0ZXN0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oc3RhY2ssICdUZXN0RnVuY3Rpb24nLCB7XG4gICAgY29kZTogbmV3IFMzQ29kZShuZXcgQnVja2V0KHN0YWNrLCAnVGVzdEJ1Y2tldCcsIHsgYnVja2V0TmFtZTogJ2J1Y2tldCcgfSksICdrZXknKSxcbiAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgfSk7XG5cbiAgbmV3IFByb3ZpZGVyRnVuY3Rpb24oc3RhY2ssICdUZXN0UHJvdmlkZXJGdW5jdGlvbicsIHtcbiAgICBmdW5jdGlvbjogdGVzdEZ1bmN0aW9uLFxuICAgIHZwYyxcbiAgICBhZGRpdGlvbmFsSGFzaDogJ2hhc2gnLFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIGFzc2VydF9jb21tb24odGVtcGxhdGUsICdoYXNoJyk7XG59KTtcblxudGVzdCgnVGVzdCBQcm92aWRlckZ1bmN0aW9uIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlc3RGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihzdGFjaywgJ1Rlc3RGdW5jdGlvbicsIHtcbiAgICBjb2RlOiBuZXcgUzNDb2RlKG5ldyBCdWNrZXQoc3RhY2ssICdUZXN0QnVja2V0JywgeyBidWNrZXROYW1lOiAnYnVja2V0JyB9KSwgJ2tleScpLFxuICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICB9KTtcblxuICBuZXcgUHJvdmlkZXJGdW5jdGlvbihzdGFjaywgJ1Rlc3RQcm92aWRlckZ1bmN0aW9uJywge1xuICAgIGZ1bmN0aW9uOiB0ZXN0RnVuY3Rpb24sXG4gICAgdnBjLFxuICAgIHJlc291cmNlUHJvcGVydGllczogeyBQcm9wZXJ0eTogJ3ZhbHVlJyB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIGFzc2VydF9jb21tb24odGVtcGxhdGUsICdrZXknKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGb3JtYXRpb246OkN1c3RvbVJlc291cmNlJywge1xuICAgIFByb3BlcnR5OiAndmFsdWUnLFxuICB9KTtcbn0pO1xuIl19