UNPKG

@aws-solutions-constructs/aws-apigatewayv2websocket-sqs

Version:

CDK constructs for defining an interaction between an AWS Lambda function and an Amazon S3 bucket.

79 lines 17.7 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApiGatewayV2WebSocketToSqs = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); /** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance * with the License. A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions * and limitations under the License. */ const defaults = require("@aws-solutions-constructs/core"); const cdk = require("aws-cdk-lib"); const sqs = require("aws-cdk-lib/aws-sqs"); const constructs_1 = require("constructs"); class ApiGatewayV2WebSocketToSqs extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); if (props.existingWebSocketApi && props.webSocketApiProps) { throw new Error("Provide either an existing WebSocketApi instance or WebSocketApiProps, not both"); } if (!props.existingWebSocketApi && !props.createDefaultRoute && !props.customRouteName) { throw new Error("Either createDefaultRoute or customRouteName must be specified when creating a WebSocketApi"); } const constructMandatedDlqProps = { fifo: true, deduplicationScope: sqs.DeduplicationScope.MESSAGE_GROUP, fifoThroughputLimit: sqs.FifoThroughputLimit.PER_MESSAGE_GROUP_ID, }; const constructMandatedQueueProps = { fifo: true, deduplicationScope: sqs.DeduplicationScope.MESSAGE_GROUP, fifoThroughputLimit: sqs.FifoThroughputLimit.PER_MESSAGE_GROUP_ID, redriveAllowPolicy: { redrivePermission: sqs.RedrivePermission.DENY_ALL, }, visibilityTimeout: cdk.Duration.minutes(15), }; // Setup the queue const buildQueueResponse = defaults.buildQueue(this, "queue", { existingQueueObj: props.existingQueueObj, queueProps: props.queueProps, deployDeadLetterQueue: props.deployDeadLetterQueue, deadLetterQueueProps: props.deadLetterQueueProps, maxReceiveCount: props.maxReceiveCount, enableEncryptionWithCustomerManagedKey: props.enableEncryptionWithCustomerManagedKey, encryptionKey: props.encryptionKey, encryptionKeyProps: props.encryptionKeyProps, constructDeadLetterQueueProps: constructMandatedDlqProps, constructQueueProps: constructMandatedQueueProps, }); this.sqsQueue = buildQueueResponse.queue; this.deadLetterQueue = buildQueueResponse.dlq; const buildWebSocketQueueApiResponse = defaults.buildWebSocketQueueApi(this, id, { queue: this.sqsQueue, defaultRouteRequestTemplate: props.defaultRouteRequestTemplate, createDefaultRoute: props.createDefaultRoute, webSocketApiProps: props.webSocketApiProps, existingWebSocketApi: props.existingWebSocketApi, logGroupProps: props.logGroupProps, defaultIamAuthorization: props.defaultIamAuthorization ?? true, customRouteName: props.customRouteName, }); this.webSocketApi = buildWebSocketQueueApiResponse.webSocketApi; this.webSocketStage = buildWebSocketQueueApiResponse.webSocketStage; this.apiGatewayRole = buildWebSocketQueueApiResponse.apiGatewayRole; this.apiGatewayLogGroup = buildWebSocketQueueApiResponse.apiGatewayLogGroup; } } exports.ApiGatewayV2WebSocketToSqs = ApiGatewayV2WebSocketToSqs; _a = JSII_RTTI_SYMBOL_1; ApiGatewayV2WebSocketToSqs[_a] = { fqn: "@aws-solutions-constructs/aws-apigatewayv2websocket-sqs.ApiGatewayV2WebSocketToSqs", version: "2.102.0" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsMkRBQTJEO0FBQzNELG1DQUFtQztBQUtuQywyQ0FBMkM7QUFDM0MsMkNBQXVDO0FBMkd2QyxNQUFhLDBCQUEyQixTQUFRLHNCQUFTO0lBUXZELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0M7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDckcsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkYsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBQ2pILENBQUM7UUFFRCxNQUFNLHlCQUF5QixHQUFtQjtZQUNoRCxJQUFJLEVBQUUsSUFBSTtZQUNWLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhO1lBQ3hELG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0I7U0FDbEUsQ0FBQztRQUVGLE1BQU0sMkJBQTJCLEdBQW1CO1lBQ2xELElBQUksRUFBRSxJQUFJO1lBQ1Ysa0JBQWtCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixDQUFDLGFBQWE7WUFDeEQsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQjtZQUNqRSxrQkFBa0IsRUFBRTtnQkFDbEIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFFBQVE7YUFDbEQ7WUFDRCxpQkFBaUIsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDNUMsQ0FBQztRQUVGLGtCQUFrQjtRQUNsQixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUM1RCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixxQkFBcUIsRUFBRSxLQUFLLENBQUMscUJBQXFCO1lBQ2xELG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7WUFDaEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQyxzQ0FBc0M7WUFDcEYsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7WUFDNUMsNkJBQTZCLEVBQUUseUJBQXlCO1lBQ3hELG1CQUFtQixFQUFFLDJCQUEyQjtTQUNqRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztRQUU5QyxNQUFNLDhCQUE4QixHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQy9FLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNwQiwyQkFBMkIsRUFBRSxLQUFLLENBQUMsMkJBQTJCO1lBQzlELGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7WUFDNUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CO1lBQ2hELGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsdUJBQXVCLElBQUksSUFBSTtZQUM5RCxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7U0FDdkMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyw4QkFBOEIsQ0FBQyxZQUFZLENBQUM7UUFDaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyw4QkFBOEIsQ0FBQyxjQUFjLENBQUM7UUFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyw4QkFBOEIsQ0FBQyxjQUFjLENBQUM7UUFDcEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLDhCQUE4QixDQUFDLGtCQUFrQixDQUFDO0lBQzlFLENBQUM7O0FBbEVILGdFQW1FQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCJAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmVcIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGFwaWd3djIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0ICogYXMga21zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0ICogYXMgc3FzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3FzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgQXBpR2F0ZXdheVYyV2ViU29ja2V0VG9TcXMgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpR2F0ZXdheVYyV2ViU29ja2V0VG9TcXNQcm9wcyB7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBXZWJTb2NrZXQgQVBJIG9iamVjdCwgcHJvdmlkaW5nIGJvdGggdGhpcyBhbmQgd2ViU29ja2V0QXBpUHJvcHMgd2lsbCBjYXVzZSBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1dlYlNvY2tldEFwaT86IGFwaWd3djIuV2ViU29ja2V0QXBpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyLXByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgQVBJIEdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wZXJ0aWVzIGFyZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgd2ViU29ja2V0QXBpUHJvcHM/OiBhcGlnd3YyLldlYlNvY2tldEFwaVByb3BzO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCAtIHVzZXIgcHJvdmlkZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciB0aGUgU1FTIHF1ZXVlLlxuICAgKiBQcm92aWRpbmcgYm90aCB0aGlzIGFuZCBgZXhpc3RpbmdRdWV1ZU9iamAgd2lsbCBjYXVzZSBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BzIGFyZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBxdWV1ZVByb3BzPzogc3FzLlF1ZXVlUHJvcHM7XG5cbiAgLyoqXG4gICAqIEV4aXN0aW5nIGluc3RhbmNlIG9mIFNRUyBxdWV1ZSBvYmplY3QsIHByb3ZpZGluZyBib3RoIHRoaXMgIGFuZCBxdWV1ZVByb3BzIHdpbGwgY2F1c2UgYW4gZXJyb3JcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nUXVldWVPYmo/OiBzcXMuUXVldWU7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXItcHJvdmlkZWQgcHJvcHMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBsb2cgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXBQcm9wcz86IGxvZ3MuTG9nR3JvdXBQcm9wcztcbiAgLyoqXG4gICAqIElmIG5vIGtleSBpcyBwcm92aWRlZCwgdGhpcyBmbGFnIGRldGVybWluZXMgd2hldGhlciB0aGUgcXVldWUgaXMgZW5jcnlwdGVkIHdpdGggYSBuZXcgQ01LIG9yIGFuIEFXUyBtYW5hZ2VkIGtleS5cbiAgICogVGhpcyBmbGFnIGlzIGlnbm9yZWQgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZWQ6IHF1ZXVlUHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSwgZW5jcnlwdGlvbktleSBvciBlbmNyeXB0aW9uS2V5UHJvcHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRmFsc2UgaWYgcXVldWVQcm9wcy5lbmNyeXB0aW9uTWFzdGVyS2V5LCBlbmNyeXB0aW9uS2V5LCBhbmQgZW5jcnlwdGlvbktleVByb3BzIGFyZSBhbGwgdW5kZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRW5jcnlwdGlvbldpdGhDdXN0b21lck1hbmFnZWRLZXk/OiBib29sZWFuO1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwsIGltcG9ydGVkIGVuY3J5cHRpb24ga2V5IHRvIGVuY3J5cHQgdGhlIFNRUyBRdWV1ZSB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuS2V5O1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgZm9yIHRoZSBLTVMgZW5jcnlwdGlvbiBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBTUVMgcXVldWUgd2l0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5UHJvcHM/OiBrbXMuS2V5UHJvcHM7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlcGxveSBhIHNlY29uZGFyeSBxdWV1ZSB0byBiZSB1c2VkIGFzIGEgZGVhZCBsZXR0ZXIgcXVldWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVxdWlyZWQgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lEZWFkTGV0dGVyUXVldWU/OiBib29sZWFuO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBwcm9wZXJ0aWVzIGZvciB0aGUgZGVhZCBsZXR0ZXIgcXVldWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BzIGFyZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWVQcm9wcz86IHNxcy5RdWV1ZVByb3BzO1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aW1lcyBhIG1lc3NhZ2UgY2FuIGJlIHVuc3VjY2Vzc2Z1bGx5IGRlcXVldWVkIGJlZm9yZSBiZWluZyBtb3ZlZCB0byB0aGUgZGVhZC1sZXR0ZXIgcXVldWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVxdWlyZWQgb25seSBpZiBkZXBsb3lEZWFkTGV0dGVyUXVldWUgPSB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UmVjZWl2ZUNvdW50PzogbnVtYmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBBUEkgR2F0ZXdheSBSZXF1ZXN0IFRlbXBsYXRlIGZvciB0aGUgJGRlZmF1bHQgcm91dGUgb3IgY3VzdG9tUm91dGUgKGlmIGN1c3RvbVJvdXRlTmFtZSBpcyBwcm92aWRlZCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29uc3RydWN0IHdpbGwgY3JlYXRlIGFuZCBhc3NpZ24gYSB0ZW1wbGF0ZSB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgdG8gc2VuZCBtZXNzYWdlcyB0byBRdWV1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSb3V0ZVJlcXVlc3RUZW1wbGF0ZT86IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGEgJGRlZmF1bHQgcm91dGUuIElmIHNldCB0byB0cnVlLCB0aGVuIGl0IHdpbGwgdXNlIHRoZSB2YWx1ZSBzdXBwbGllZCB3aXRoIGBkZWZhdWx0Um91dGVSZXF1ZXN0VGVtcGxhdGVgLlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgY3JlYXRlRGVmYXVsdFJvdXRlIG9yIGN1c3RvbVJvdXRlTmFtZSBtdXN0IGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlRGVmYXVsdFJvdXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb3V0ZSB0aGF0IHdpbGwgYmUgc2VudCB0aHJvdWdoIFdlYlNvY2tldEFwaVByb3BzLnJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbiB3aGVuIGludm9raW5nIHRoZSBXZWJTb2NrZXRcbiAgICogZW5kcG9pbnQuIEF0IGxlYXN0IG9uZSBvZiBjcmVhdGVEZWZhdWx0Um91dGUgb3IgY3VzdG9tUm91dGVOYW1lIG11c3QgYmUgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tUm91dGVOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkIElBTSBhdXRob3JpemF0aW9uIHRvIHRoZSAkY29ubmVjdCBwYXRoIGJ5IGRlZmF1bHQuIE9ubHkgc2V0IHRoaXMgdG8gZmFsc2UgaWY6IDEpIElmIHBsYW4gdG8gcHJvdmlkZSBhbiBhdXRob3JpemVyIHdpdGhcbiAgICogdGhlIGAkY29ubmVjdGAgcm91dGU7IG9yIDIpIFRoZSBBUEkgc2hvdWxkIGJlIG9wZW4gKG5vIGF1dGhvcml6YXRpb24pIChBV1MgcmVjb21tZW5kcyBhZ2FpbnN0IGRlcGxveWluZyB1bnByb3RlY3RlZCBBUElzKS5cbiAgICpcbiAgICogSWYgYW4gYXV0aG9yaXplciBpcyBzcGVjaWZpZWQgaW4gY29ubmVjdFJvdXRlT3B0aW9ucywgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBhbmQgbm8gZGVmYXVsdCBJQU0gYXV0aG9yaXplciB3aWxsIGJlIGNyZWF0ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlHYXRld2F5VjJXZWJTb2NrZXRUb1NxcyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB3ZWJTb2NrZXRBcGk6IGFwaWd3djIuV2ViU29ja2V0QXBpO1xuICBwdWJsaWMgcmVhZG9ubHkgd2ViU29ja2V0U3RhZ2U6IGFwaWd3djIuV2ViU29ja2V0U3RhZ2U7XG4gIHB1YmxpYyByZWFkb25seSBhcGlHYXRld2F5Um9sZTogaWFtLlJvbGU7XG4gIHB1YmxpYyByZWFkb25seSBhcGlHYXRld2F5TG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXA7XG4gIHB1YmxpYyByZWFkb25seSBzcXNRdWV1ZTogc3FzLlF1ZXVlO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlPzogc3FzLkRlYWRMZXR0ZXJRdWV1ZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXBpR2F0ZXdheVYyV2ViU29ja2V0VG9TcXNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZXhpc3RpbmdXZWJTb2NrZXRBcGkgJiYgcHJvcHMud2ViU29ja2V0QXBpUHJvcHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3ZpZGUgZWl0aGVyIGFuIGV4aXN0aW5nIFdlYlNvY2tldEFwaSBpbnN0YW5jZSBvciBXZWJTb2NrZXRBcGlQcm9wcywgbm90IGJvdGhcIik7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5leGlzdGluZ1dlYlNvY2tldEFwaSAmJiAhcHJvcHMuY3JlYXRlRGVmYXVsdFJvdXRlICYmICFwcm9wcy5jdXN0b21Sb3V0ZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciBjcmVhdGVEZWZhdWx0Um91dGUgb3IgY3VzdG9tUm91dGVOYW1lIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gY3JlYXRpbmcgYSBXZWJTb2NrZXRBcGlcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RydWN0TWFuZGF0ZWREbHFQcm9wczogc3FzLlF1ZXVlUHJvcHMgPSB7XG4gICAgICBmaWZvOiB0cnVlLFxuICAgICAgZGVkdXBsaWNhdGlvblNjb3BlOiBzcXMuRGVkdXBsaWNhdGlvblNjb3BlLk1FU1NBR0VfR1JPVVAsXG4gICAgICBmaWZvVGhyb3VnaHB1dExpbWl0OiBzcXMuRmlmb1Rocm91Z2hwdXRMaW1pdC5QRVJfTUVTU0FHRV9HUk9VUF9JRCxcbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3RydWN0TWFuZGF0ZWRRdWV1ZVByb3BzOiBzcXMuUXVldWVQcm9wcyA9IHtcbiAgICAgIGZpZm86IHRydWUsXG4gICAgICBkZWR1cGxpY2F0aW9uU2NvcGU6IHNxcy5EZWR1cGxpY2F0aW9uU2NvcGUuTUVTU0FHRV9HUk9VUCxcbiAgICAgIGZpZm9UaHJvdWdocHV0TGltaXQ6IHNxcy5GaWZvVGhyb3VnaHB1dExpbWl0LlBFUl9NRVNTQUdFX0dST1VQX0lELFxuICAgICAgcmVkcml2ZUFsbG93UG9saWN5OiB7XG4gICAgICAgIHJlZHJpdmVQZXJtaXNzaW9uOiBzcXMuUmVkcml2ZVBlcm1pc3Npb24uREVOWV9BTEwsXG4gICAgICB9LFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9O1xuXG4gICAgLy8gU2V0dXAgdGhlIHF1ZXVlXG4gICAgY29uc3QgYnVpbGRRdWV1ZVJlc3BvbnNlID0gZGVmYXVsdHMuYnVpbGRRdWV1ZSh0aGlzLCBcInF1ZXVlXCIsIHtcbiAgICAgIGV4aXN0aW5nUXVldWVPYmo6IHByb3BzLmV4aXN0aW5nUXVldWVPYmosXG4gICAgICBxdWV1ZVByb3BzOiBwcm9wcy5xdWV1ZVByb3BzLFxuICAgICAgZGVwbG95RGVhZExldHRlclF1ZXVlOiBwcm9wcy5kZXBsb3lEZWFkTGV0dGVyUXVldWUsXG4gICAgICBkZWFkTGV0dGVyUXVldWVQcm9wczogcHJvcHMuZGVhZExldHRlclF1ZXVlUHJvcHMsXG4gICAgICBtYXhSZWNlaXZlQ291bnQ6IHByb3BzLm1heFJlY2VpdmVDb3VudCxcbiAgICAgIGVuYWJsZUVuY3J5cHRpb25XaXRoQ3VzdG9tZXJNYW5hZ2VkS2V5OiBwcm9wcy5lbmFibGVFbmNyeXB0aW9uV2l0aEN1c3RvbWVyTWFuYWdlZEtleSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHByb3BzLmVuY3J5cHRpb25LZXksXG4gICAgICBlbmNyeXB0aW9uS2V5UHJvcHM6IHByb3BzLmVuY3J5cHRpb25LZXlQcm9wcyxcbiAgICAgIGNvbnN0cnVjdERlYWRMZXR0ZXJRdWV1ZVByb3BzOiBjb25zdHJ1Y3RNYW5kYXRlZERscVByb3BzLFxuICAgICAgY29uc3RydWN0UXVldWVQcm9wczogY29uc3RydWN0TWFuZGF0ZWRRdWV1ZVByb3BzLFxuICAgIH0pO1xuICAgIHRoaXMuc3FzUXVldWUgPSBidWlsZFF1ZXVlUmVzcG9uc2UucXVldWU7XG4gICAgdGhpcy5kZWFkTGV0dGVyUXVldWUgPSBidWlsZFF1ZXVlUmVzcG9uc2UuZGxxO1xuXG4gICAgY29uc3QgYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaVJlc3BvbnNlID0gZGVmYXVsdHMuYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaSh0aGlzLCBpZCwge1xuICAgICAgcXVldWU6IHRoaXMuc3FzUXVldWUsXG4gICAgICBkZWZhdWx0Um91dGVSZXF1ZXN0VGVtcGxhdGU6IHByb3BzLmRlZmF1bHRSb3V0ZVJlcXVlc3RUZW1wbGF0ZSxcbiAgICAgIGNyZWF0ZURlZmF1bHRSb3V0ZTogcHJvcHMuY3JlYXRlRGVmYXVsdFJvdXRlLFxuICAgICAgd2ViU29ja2V0QXBpUHJvcHM6IHByb3BzLndlYlNvY2tldEFwaVByb3BzLFxuICAgICAgZXhpc3RpbmdXZWJTb2NrZXRBcGk6IHByb3BzLmV4aXN0aW5nV2ViU29ja2V0QXBpLFxuICAgICAgbG9nR3JvdXBQcm9wczogcHJvcHMubG9nR3JvdXBQcm9wcyxcbiAgICAgIGRlZmF1bHRJYW1BdXRob3JpemF0aW9uOiBwcm9wcy5kZWZhdWx0SWFtQXV0aG9yaXphdGlvbiA/PyB0cnVlLFxuICAgICAgY3VzdG9tUm91dGVOYW1lOiBwcm9wcy5jdXN0b21Sb3V0ZU5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLndlYlNvY2tldEFwaSA9IGJ1aWxkV2ViU29ja2V0UXVldWVBcGlSZXNwb25zZS53ZWJTb2NrZXRBcGk7XG4gICAgdGhpcy53ZWJTb2NrZXRTdGFnZSA9IGJ1aWxkV2ViU29ja2V0UXVldWVBcGlSZXNwb25zZS53ZWJTb2NrZXRTdGFnZTtcbiAgICB0aGlzLmFwaUdhdGV3YXlSb2xlID0gYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaVJlc3BvbnNlLmFwaUdhdGV3YXlSb2xlO1xuICAgIHRoaXMuYXBpR2F0ZXdheUxvZ0dyb3VwID0gYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaVJlc3BvbnNlLmFwaUdhdGV3YXlMb2dHcm91cDtcbiAgfVxufVxuIl19