@aws-cdk/aws-bedrock-agentcore-alpha
Version:
The CDK Construct Library for Amazon Bedrock
133 lines • 15.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GatewayAuthorizer = exports.IamAuthorizer = exports.CustomJwtAuthorizer = exports.GatewayAuthorizerType = void 0;
const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const validation_helpers_1 = require("../validation-helpers");
/******************************************************************************
* Authorizer Configuration
*****************************************************************************/
/**
* Gateway authorizer type
*/
var GatewayAuthorizerType;
(function (GatewayAuthorizerType) {
/** Custom JWT authorizer type */
GatewayAuthorizerType["CUSTOM_JWT"] = "CUSTOM_JWT";
/** AWS IAM authorizer type */
GatewayAuthorizerType["AWS_IAM"] = "AWS_IAM";
})(GatewayAuthorizerType || (exports.GatewayAuthorizerType = GatewayAuthorizerType = {}));
/**
* Custom JWT authorizer configuration implementation
*/
class CustomJwtAuthorizer {
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CustomJwtAuthorizer", version: "2.227.0-alpha.0" };
authorizerType = GatewayAuthorizerType.CUSTOM_JWT;
discoveryUrl;
allowedAudience;
allowedClients;
constructor(config) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_CustomJwtConfiguration(config);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, CustomJwtAuthorizer);
}
throw error;
}
this.discoveryUrl = config.discoveryUrl;
this.allowedAudience = config.allowedAudience;
this.allowedClients = config.allowedClients;
}
/**
* @internal
*/
_render() {
return {
customJwtAuthorizer: {
discoveryUrl: this.discoveryUrl,
...(this.allowedAudience && { allowedAudience: this.allowedAudience }),
...(this.allowedClients && { allowedClients: this.allowedClients }),
},
};
}
}
exports.CustomJwtAuthorizer = CustomJwtAuthorizer;
/******************************************************************************
* AWS IAM
*****************************************************************************/
/**
* AWS IAM authorizer configuration implementation
*
*/
class IamAuthorizer {
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.IamAuthorizer", version: "2.227.0-alpha.0" };
authorizerType = GatewayAuthorizerType.AWS_IAM;
/**
* @internal
*/
_render() {
// AWS IAM authorizer doesn't need additional configuration
// Return null or undefined to indicate no configuration needed
return undefined;
}
}
exports.IamAuthorizer = IamAuthorizer;
/**
* Factory class for creating Gateway Authorizers
*/
class GatewayAuthorizer {
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayAuthorizer", version: "2.227.0-alpha.0" };
/**
* AWS IAM authorizer instance
*/
static usingAwsIam() {
return new IamAuthorizer();
}
/**
* Create a custom JWT authorizer
* @param configuration - The JWT configuration
* @returns IGatewayAuthorizerConfig configured for custom JWT
*/
static usingCustomJwt(configuration) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_CustomJwtConfiguration(configuration);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.usingCustomJwt);
}
throw error;
}
// At least one of allowedAudience or allowedClients must be defined for CUSTOM_JWT authorizer
if (!configuration.allowedAudience && !configuration.allowedClients) {
throw new validation_helpers_1.ValidationError('At least one of allowedAudience or allowedClients must be defined for CUSTOM_JWT authorizer');
}
return new CustomJwtAuthorizer(configuration);
}
/**
* Create a JWT authorizer from Cognito User Pool
* @param props - The Cognito configuration
* @returns CustomJwtAuthorizer configured for Cognito
*/
static usingCognito(props) {
try {
jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_CognitoAuthorizerProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, this.usingCognito);
}
throw error;
}
const discoveryUrl = `https://cognito-idp.${props.userPool.env.region}.amazonaws.com/${props.userPool.userPoolId}/.well-known/openid-configuration`;
return new CustomJwtAuthorizer({
discoveryUrl: discoveryUrl,
allowedClients: props.allowedClients?.flatMap((client) => client.userPoolClientId),
allowedAudience: props.allowedAudiences,
});
}
}
exports.GatewayAuthorizer = GatewayAuthorizer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF1dGhvcml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSw4REFBd0Q7QUFFeEQ7OytFQUUrRTtBQUUvRTs7R0FFRztBQUNILElBQVkscUJBS1g7QUFMRCxXQUFZLHFCQUFxQjtJQUMvQixpQ0FBaUM7SUFDakMsa0RBQXlCLENBQUE7SUFDekIsOEJBQThCO0lBQzlCLDRDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxxQkFBcUIscUNBQXJCLHFCQUFxQixRQUtoQztBQStDRDs7R0FFRztBQUNILE1BQWEsbUJBQW1COztJQUNkLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLENBQUM7SUFDakQsWUFBWSxDQUFTO0lBQ3JCLGVBQWUsQ0FBWTtJQUMzQixjQUFjLENBQVk7SUFFM0MsWUFBWSxNQUE4Qjs7Ozs7OytDQU4vQixtQkFBbUI7Ozs7UUFPNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7S0FDN0M7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixPQUFPO1lBQ0wsbUJBQW1CLEVBQUU7Z0JBQ25CLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN0RSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDcEU7U0FDRixDQUFDO0tBQ0g7O0FBdkJILGtEQXdCQztBQUVEOzsrRUFFK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBYSxhQUFhOztJQUNSLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7SUFFL0Q7O09BRUc7SUFDSCxPQUFPO1FBQ0wsMkRBQTJEO1FBQzNELCtEQUErRDtRQUMvRCxPQUFPLFNBQVMsQ0FBQztLQUNsQjs7QUFWSCxzQ0FXQztBQXNCRDs7R0FFRztBQUNILE1BQXNCLGlCQUFpQjs7SUFDckM7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVztRQUN2QixPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7S0FDNUI7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFxQzs7Ozs7Ozs7OztRQUNoRSw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEUsTUFBTSxJQUFJLG9DQUFlLENBQUMsNkZBQTZGLENBQUMsQ0FBQztRQUMzSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQy9DO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBNkI7Ozs7Ozs7Ozs7UUFDdEQsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sa0JBQWtCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxtQ0FBbUMsQ0FBQztRQUVwSixPQUFPLElBQUksbUJBQW1CLENBQUM7WUFDN0IsWUFBWSxFQUFFLFlBQVk7WUFDMUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7WUFDbEYsZUFBZSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7U0FDeEMsQ0FBQyxDQUFDO0tBQ0o7O0FBbENILDhDQW1DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElVc2VyUG9vbENsaWVudCwgSVVzZXJQb29sIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZ25pdG8nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6ZXIgQ29uZmlndXJhdGlvblxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEdhdGV3YXkgYXV0aG9yaXplciB0eXBlXG4gKi9cbmV4cG9ydCBlbnVtIEdhdGV3YXlBdXRob3JpemVyVHlwZSB7XG4gIC8qKiBDdXN0b20gSldUIGF1dGhvcml6ZXIgdHlwZSAqL1xuICBDVVNUT01fSldUID0gJ0NVU1RPTV9KV1QnLFxuICAvKiogQVdTIElBTSBhdXRob3JpemVyIHR5cGUgKi9cbiAgQVdTX0lBTSA9ICdBV1NfSUFNJyxcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGdhdGV3YXkgYXV0aG9yaXplciBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhdGV3YXlBdXRob3JpemVyQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZXJUeXBlOiBHYXRld2F5QXV0aG9yaXplclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24gaW4gQ0ZOIGZvcm1hdFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yZW5kZXIoKTogYW55O1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b20gSldUXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEN1c3RvbSBKV1QgYXV0aG9yaXplciBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tSnd0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGlzIFVSTCBpcyB1c2VkIHRvIGZldGNoIE9wZW5JRCBDb25uZWN0IGNvbmZpZ3VyYXRpb24gb3IgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGFcbiAgICogZm9yIHZhbGlkYXRpbmcgaW5jb21pbmcgdG9rZW5zLlxuICAgKlxuICAgKiBQYXR0ZXJuOiAuKy9cXC53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uXG4gICAqIFJlcXVpcmVkOiBZZXNcbiAgICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGluZGl2aWR1YWwgYXVkaWVuY2UgdmFsdWVzIHRoYXQgYXJlIHZhbGlkYXRlZCBpbiB0aGUgaW5jb21pbmcgSldUIHRva2VuIHZhbGlkYXRpb24gcHJvY2Vzcy5cbiAgICogQGRlZmF1bHQgLSBObyBhdWRpZW5jZSB2YWxpZGF0aW9uXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkQXVkaWVuY2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBpbmRpdmlkdWFsIGNsaWVudCBJRHMgdGhhdCBhcmUgdmFsaWRhdGVkIGluIHRoZSBpbmNvbWluZyBKV1QgdG9rZW4gdmFsaWRhdGlvbiBwcm9jZXNzLlxuICAgKiBAZGVmYXVsdCAtIE5vIGNsaWVudCBJRCB2YWxpZGF0aW9uXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkQ2xpZW50cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEN1c3RvbSBKV1QgYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGltcGxlbWVudGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21Kd3RBdXRob3JpemVyIGltcGxlbWVudHMgSUdhdGV3YXlBdXRob3JpemVyQ29uZmlnIHtcbiAgcHVibGljIHJlYWRvbmx5IGF1dGhvcml6ZXJUeXBlID0gR2F0ZXdheUF1dGhvcml6ZXJUeXBlLkNVU1RPTV9KV1Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzY292ZXJ5VXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZEF1ZGllbmNlPzogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZENsaWVudHM/OiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEN1c3RvbUp3dENvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLmRpc2NvdmVyeVVybCA9IGNvbmZpZy5kaXNjb3ZlcnlVcmw7XG4gICAgdGhpcy5hbGxvd2VkQXVkaWVuY2UgPSBjb25maWcuYWxsb3dlZEF1ZGllbmNlO1xuICAgIHRoaXMuYWxsb3dlZENsaWVudHMgPSBjb25maWcuYWxsb3dlZENsaWVudHM7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3JlbmRlcigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXN0b21Kd3RBdXRob3JpemVyOiB7XG4gICAgICAgIGRpc2NvdmVyeVVybDogdGhpcy5kaXNjb3ZlcnlVcmwsXG4gICAgICAgIC4uLih0aGlzLmFsbG93ZWRBdWRpZW5jZSAmJiB7IGFsbG93ZWRBdWRpZW5jZTogdGhpcy5hbGxvd2VkQXVkaWVuY2UgfSksXG4gICAgICAgIC4uLih0aGlzLmFsbG93ZWRDbGllbnRzICYmIHsgYWxsb3dlZENsaWVudHM6IHRoaXMuYWxsb3dlZENsaWVudHMgfSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVdTIElBTVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEFXUyBJQU0gYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGltcGxlbWVudGF0aW9uXG4gKlxuICovXG5leHBvcnQgY2xhc3MgSWFtQXV0aG9yaXplciBpbXBsZW1lbnRzIElHYXRld2F5QXV0aG9yaXplckNvbmZpZyB7XG4gIHB1YmxpYyByZWFkb25seSBhdXRob3JpemVyVHlwZSA9IEdhdGV3YXlBdXRob3JpemVyVHlwZS5BV1NfSUFNO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yZW5kZXIoKTogYW55IHtcbiAgICAvLyBBV1MgSUFNIGF1dGhvcml6ZXIgZG9lc24ndCBuZWVkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvblxuICAgIC8vIFJldHVybiBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRpY2F0ZSBubyBjb25maWd1cmF0aW9uIG5lZWRlZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFjdG9yeVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BdXRob3JpemVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIENvZ25pdG8gVXNlciBQb29sIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJQb29sOiBJVXNlclBvb2w7XG4gIC8qKlxuICAgKiBUaGUgYWxsb3dlZCBVc2VyIFBvb2wgY2xpZW50c1xuICAgKiBAZGVmYXVsdCAtIEFsbCBjbGllbnRzIGFyZSBhbGxvd2VkXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkQ2xpZW50cz86IElVc2VyUG9vbENsaWVudFtdO1xuICAvKipcbiAgICogVGhlIGFsbG93ZWQgYXVkaWVuY2VzIGZvciBKV1QgdmFsaWRhdGlvblxuICAgKiBAZGVmYXVsdCAtIE5vIGF1ZGllbmNlIHZhbGlkYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRBdWRpZW5jZXM/OiBzdHJpbmdbXTtcbn1cbi8qKlxuICogRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgR2F0ZXdheSBBdXRob3JpemVyc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2F0ZXdheUF1dGhvcml6ZXIge1xuICAvKipcbiAgICogQVdTIElBTSBhdXRob3JpemVyIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQXdzSWFtKCk6IElHYXRld2F5QXV0aG9yaXplckNvbmZpZyB7XG4gICAgcmV0dXJuIG5ldyBJYW1BdXRob3JpemVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3VzdG9tIEpXVCBhdXRob3JpemVyXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIC0gVGhlIEpXVCBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIElHYXRld2F5QXV0aG9yaXplckNvbmZpZyBjb25maWd1cmVkIGZvciBjdXN0b20gSldUXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQ3VzdG9tSnd0KGNvbmZpZ3VyYXRpb246IEN1c3RvbUp3dENvbmZpZ3VyYXRpb24pOiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWcge1xuICAgIC8vIEF0IGxlYXN0IG9uZSBvZiBhbGxvd2VkQXVkaWVuY2Ugb3IgYWxsb3dlZENsaWVudHMgbXVzdCBiZSBkZWZpbmVkIGZvciBDVVNUT01fSldUIGF1dGhvcml6ZXJcbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24uYWxsb3dlZEF1ZGllbmNlICYmICFjb25maWd1cmF0aW9uLmFsbG93ZWRDbGllbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdBdCBsZWFzdCBvbmUgb2YgYWxsb3dlZEF1ZGllbmNlIG9yIGFsbG93ZWRDbGllbnRzIG11c3QgYmUgZGVmaW5lZCBmb3IgQ1VTVE9NX0pXVCBhdXRob3JpemVyJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ3VzdG9tSnd0QXV0aG9yaXplcihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBKV1QgYXV0aG9yaXplciBmcm9tIENvZ25pdG8gVXNlciBQb29sXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBDb2duaXRvIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgQ3VzdG9tSnd0QXV0aG9yaXplciBjb25maWd1cmVkIGZvciBDb2duaXRvXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQ29nbml0byhwcm9wczogQ29nbml0b0F1dGhvcml6ZXJQcm9wcyk6IElHYXRld2F5QXV0aG9yaXplckNvbmZpZyB7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJsID0gYGh0dHBzOi8vY29nbml0by1pZHAuJHtwcm9wcy51c2VyUG9vbC5lbnYucmVnaW9ufS5hbWF6b25hd3MuY29tLyR7cHJvcHMudXNlclBvb2wudXNlclBvb2xJZH0vLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25gO1xuXG4gICAgcmV0dXJuIG5ldyBDdXN0b21Kd3RBdXRob3JpemVyKHtcbiAgICAgIGRpc2NvdmVyeVVybDogZGlzY292ZXJ5VXJsLFxuICAgICAgYWxsb3dlZENsaWVudHM6IHByb3BzLmFsbG93ZWRDbGllbnRzPy5mbGF0TWFwKChjbGllbnQpID0+IGNsaWVudC51c2VyUG9vbENsaWVudElkKSxcbiAgICAgIGFsbG93ZWRBdWRpZW5jZTogcHJvcHMuYWxsb3dlZEF1ZGllbmNlcyxcbiAgICB9KTtcbiAgfVxufVxuIl19