import { Construct } from 'constructs'; import { Bucket, HttpMethods, } from 'aws-cdk-lib/aws-s3'; import { RemovalPolicy, Stack } from 'aws-cdk-lib'; import { CDKContextKey } from '@aws-amplify/platform-core'; import { AttributionMetadataStorage } from '@aws-amplify/backend-output-storage'; import { fileURLToPath } from 'node:url'; import { S3EventSourceV2 } from 'aws-cdk-lib/aws-lambda-event-sources'; // Be very careful editing this value. It is the string that is used to attribute stacks to Amplify Storage in BI metrics const storageStackType = 'storage-S3'; /** * Amplify Storage CDK Construct * * Currently just a thin wrapper around an S3 bucket */ export class AmplifyStorage extends Construct { stack; resources; isDefault; name; accessDefinition; /** * Create a new AmplifyStorage instance */ constructor(scope, id, props) { super(scope, id); this.isDefault = props.isDefault || false; this.name = props.name; this.stack = Stack.of(scope); const deploymentType = Stack.of(scope).node.tryGetContext(CDKContextKey.DEPLOYMENT_TYPE); const isSandbox = deploymentType === 'sandbox'; const isDestroy = isSandbox || !props.keepOnDelete; if (isSandbox && props.keepOnDelete) { // eslint-disable-next-line no-console console.warn(`[@aws-amplify/backend-storage] keepOnDelete is ignored in sandbox deployments. The bucket will be deleted.`); } const bucketProps = { versioned: props.versioned || false, cors: [ { maxAge: 3000, exposedHeaders: [ 'x-amz-server-side-encryption', 'x-amz-request-id', 'x-amz-id-2', 'ETag', ], allowedHeaders: ['*'], allowedOrigins: ['*'], allowedMethods: [ HttpMethods.GET, HttpMethods.HEAD, HttpMethods.PUT, HttpMethods.POST, HttpMethods.DELETE, ], }, ], autoDeleteObjects: isDestroy, removalPolicy: isDestroy ? RemovalPolicy.DESTROY : RemovalPolicy.RETAIN, enforceSSL: true, }; const bucket = new Bucket(this, 'Bucket', bucketProps); this.resources = { bucket, cfnResources: { cfnBucket: bucket.node.findChild('Resource'), }, }; new AttributionMetadataStorage().storeAttributionMetadata(Stack.of(this), storageStackType, fileURLToPath(new URL('../package.json', import.meta.url))); } /** * Attach a Lambda function trigger handler to the S3 events * @param events - list of S3 events that will trigger the handler * @param handler - The function that will handle the event */ addTrigger = (events, handler) => { handler.addEventSource(new S3EventSourceV2(this.resources.bucket, { events })); }; /** * Add access definitions to storage */ addAccessDefinition = (accessOutput) => { this.accessDefinition = accessOutput; }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sV0FBVyxHQUVaLE1BQU0sb0JBQW9CLENBQUM7QUFVNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3ZFLHlIQUF5SDtBQUN6SCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQWtFdEM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxjQUNYLFNBQVEsU0FBUztJQUdSLEtBQUssQ0FBUTtJQUNiLFNBQVMsQ0FBbUI7SUFDNUIsU0FBUyxDQUFVO0lBQ25CLElBQUksQ0FBUztJQUN0QixnQkFBZ0IsQ0FBZ0M7SUFDaEQ7O09BRUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDdkQsYUFBYSxDQUFDLGVBQWUsQ0FDQSxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLGNBQWMsS0FBSyxTQUFTLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUVuRCxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEdBQTRHLENBQzdHLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQWdCO1lBQy9CLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUs7WUFDbkMsSUFBSSxFQUFFO2dCQUNKO29CQUNFLE1BQU0sRUFBRSxJQUFJO29CQUNaLGNBQWMsRUFBRTt3QkFDZCw4QkFBOEI7d0JBQzlCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixNQUFNO3FCQUNQO29CQUNELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFDckIsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDO29CQUNyQixjQUFjLEVBQUU7d0JBQ2QsV0FBVyxDQUFDLEdBQUc7d0JBQ2YsV0FBVyxDQUFDLElBQUk7d0JBQ2hCLFdBQVcsQ0FBQyxHQUFHO3dCQUNmLFdBQVcsQ0FBQyxJQUFJO3dCQUNoQixXQUFXLENBQUMsTUFBTTtxQkFDbkI7aUJBQ0Y7YUFDRjtZQUNELGlCQUFpQixFQUFFLFNBQVM7WUFDNUIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDdkUsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLE1BQU07WUFDTixZQUFZLEVBQUU7Z0JBQ1osU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBYzthQUMxRDtTQUNGLENBQUM7UUFFRixJQUFJLDBCQUEwQixFQUFFLENBQUMsd0JBQXdCLENBQ3ZELEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQ2QsZ0JBQWdCLEVBQ2hCLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzNELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsR0FBRyxDQUFDLE1BQW1CLEVBQUUsT0FBa0IsRUFBUSxFQUFFO1FBQzdELE9BQU8sQ0FBQyxjQUFjLENBQ3BCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FDdkQsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsbUJBQW1CLEdBQUcsQ0FBQyxZQUEyQyxFQUFFLEVBQUU7UUFDcEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQztJQUN2QyxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgQnVja2V0LFxuICBCdWNrZXRQcm9wcyxcbiAgQ2ZuQnVja2V0LFxuICBFdmVudFR5cGUsXG4gIEh0dHBNZXRob2RzLFxuICBJQnVja2V0LFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHtcbiAgQmFja2VuZE91dHB1dFN0b3JhZ2VTdHJhdGVneSxcbiAgQ29uc3RydWN0RmFjdG9yeSxcbiAgRGVwbG95bWVudFR5cGUsXG4gIEZ1bmN0aW9uUmVzb3VyY2VzLFxuICBSZXNvdXJjZVByb3ZpZGVyLFxuICBTdGFja1Byb3ZpZGVyLFxufSBmcm9tICdAYXdzLWFtcGxpZnkvcGx1Z2luLXR5cGVzJztcbmltcG9ydCB7IFN0b3JhZ2VPdXRwdXQgfSBmcm9tICdAYXdzLWFtcGxpZnkvYmFja2VuZC1vdXRwdXQtc2NoZW1hcyc7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENES0NvbnRleHRLZXkgfSBmcm9tICdAYXdzLWFtcGxpZnkvcGxhdGZvcm0tY29yZSc7XG5pbXBvcnQgeyBBdHRyaWJ1dGlvbk1ldGFkYXRhU3RvcmFnZSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9iYWNrZW5kLW91dHB1dC1zdG9yYWdlJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFMzRXZlbnRTb3VyY2VWMiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgeyBTdG9yYWdlQWNjZXNzRGVmaW5pdGlvbk91dHB1dCB9IGZyb20gJy4vcHJpdmF0ZV90eXBlcy5qcyc7XG5cbi8vIEJlIHZlcnkgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgdmFsdWUuIEl0IGlzIHRoZSBzdHJpbmcgdGhhdCBpcyB1c2VkIHRvIGF0dHJpYnV0ZSBzdGFja3MgdG8gQW1wbGlmeSBTdG9yYWdlIGluIEJJIG1ldHJpY3NcbmNvbnN0IHN0b3JhZ2VTdGFja1R5cGUgPSAnc3RvcmFnZS1TMyc7XG5cbmV4cG9ydCB0eXBlIEFtcGxpZnlTdG9yYWdlVHJpZ2dlckV2ZW50ID0gJ29uRGVsZXRlJyB8ICdvblVwbG9hZCc7XG5cbmV4cG9ydCB0eXBlIEFtcGxpZnlTdG9yYWdlUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgc3RvcmFnZSByZXNvdXJjZSBpcyB0aGUgZGVmYXVsdCBzdG9yYWdlIHJlc291cmNlIGZvciB0aGUgYmFja2VuZC5cbiAgICogcmVxdWlyZWQgYW5kIHJlbGV2YW50IG9ubHkgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0b3JhZ2UgcmVzb3VyY2VzIGRlZmluZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKi9cbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZyaWVuZGx5IG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVyaXZlIHRoZSBTMyBCdWNrZXQgbmFtZVxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgUzMgb2JqZWN0IHZlcnNpb25pbmcgb24gdGhlIGJ1Y2tldC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9WZXJzaW9uaW5nLmh0bWxcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHZlcnNpb25lZD86IGJvb2xlYW47XG4gIG91dHB1dFN0b3JhZ2VTdHJhdGVneT86IEJhY2tlbmRPdXRwdXRTdG9yYWdlU3RyYXRlZ3k8U3RvcmFnZU91dHB1dD47XG4gIC8qKlxuICAgKiBTMyBldmVudCB0cmlnZ2VyIGNvbmZpZ3VyYXRpb25cbiAgICogQHNlZSBodHRwczovL2RvY3MuYW1wbGlmeS5hd3MvZ2VuMi9idWlsZC1hLWJhY2tlbmQvc3RvcmFnZS8jY29uZmlndXJlLXN0b3JhZ2UtdHJpZ2dlcnNcbiAgICogQGV4YW1wbGVcbiAgICogaW1wb3J0IHsgdHJpZ2dlckhhbmRsZXIgfSBmcm9tICcuLi9mdW5jdGlvbnMvdHJpZ2dlci1oYW5kbGVyL3Jlc291cmNlLnRzJ1xuICAgKlxuICAgKiBleHBvcnQgY29uc3Qgc3RvcmFnZSA9IGRlZmluZVN0b3JhZ2Uoe1xuICAgKiAgIHRyaWdnZXJzOiB7XG4gICAqICAgICBvblVwbG9hZDogdHJpZ2dlckhhbmRsZXJcbiAgICogICB9XG4gICAqIH0pXG4gICAqL1xuICB0cmlnZ2Vycz86IFBhcnRpYWw8XG4gICAgUmVjb3JkPFxuICAgICAgQW1wbGlmeVN0b3JhZ2VUcmlnZ2VyRXZlbnQsXG4gICAgICBDb25zdHJ1Y3RGYWN0b3J5PFJlc291cmNlUHJvdmlkZXI8RnVuY3Rpb25SZXNvdXJjZXM+PlxuICAgID5cbiAgPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8ga2VlcCB0aGUgUzMgYnVja2V0IHdoZW4gdGhlIHN0YWNrIGlzIGRlbGV0ZWQuXG4gICAqXG4gICAqIC0gYHRydWVgIOKAlCBUaGUgYnVja2V0IGFuZCBpdHMgb2JqZWN0cyBhcmUgcHJlc2VydmVkIHdoZW4gdGhlIHN0YWNrIGlzIHJlbW92ZWQuXG4gICAqIC0gYGZhbHNlYCDigJQgVGhlIGJ1Y2tldCBhbmQgYWxsIG9iamVjdHMgYXJlIGRlbGV0ZWQgd2hlbiB0aGUgc3RhY2sgaXMgcmVtb3ZlZC5cbiAgICpcbiAgICogU2FuZGJveCBkZXBsb3ltZW50cyAodmlhIGBucHggYW1weCBzYW5kYm94YCkgYWx3YXlzIGRlbGV0ZSB0aGUgYnVja2V0IHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGV4cG9ydCBjb25zdCBzdG9yYWdlID0gZGVmaW5lU3RvcmFnZSh7XG4gICAqICAgbmFtZTogJ3Byb2R1Y3Rpb25EYXRhJyxcbiAgICogICBrZWVwT25EZWxldGU6IHRydWUsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGtlZXBPbkRlbGV0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTdG9yYWdlUmVzb3VyY2VzID0ge1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIGNmblJlc291cmNlczoge1xuICAgIGNmbkJ1Y2tldDogQ2ZuQnVja2V0O1xuICB9O1xufTtcblxuLyoqXG4gKiBBbXBsaWZ5IFN0b3JhZ2UgQ0RLIENvbnN0cnVjdFxuICpcbiAqIEN1cnJlbnRseSBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhbiBTMyBidWNrZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEFtcGxpZnlTdG9yYWdlXG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgUmVzb3VyY2VQcm92aWRlcjxTdG9yYWdlUmVzb3VyY2VzPiwgU3RhY2tQcm92aWRlclxue1xuICByZWFkb25seSBzdGFjazogU3RhY2s7XG4gIHJlYWRvbmx5IHJlc291cmNlczogU3RvcmFnZVJlc291cmNlcztcbiAgcmVhZG9ubHkgaXNEZWZhdWx0OiBib29sZWFuO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIGFjY2Vzc0RlZmluaXRpb246IFN0b3JhZ2VBY2Nlc3NEZWZpbml0aW9uT3V0cHV0O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFtcGxpZnlTdG9yYWdlIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQW1wbGlmeVN0b3JhZ2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pc0RlZmF1bHQgPSBwcm9wcy5pc0RlZmF1bHQgfHwgZmFsc2U7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gICAgY29uc3QgZGVwbG95bWVudFR5cGUgPSBTdGFjay5vZihzY29wZSkubm9kZS50cnlHZXRDb250ZXh0KFxuICAgICAgQ0RLQ29udGV4dEtleS5ERVBMT1lNRU5UX1RZUEUsXG4gICAgKSBhcyBEZXBsb3ltZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc1NhbmRib3ggPSBkZXBsb3ltZW50VHlwZSA9PT0gJ3NhbmRib3gnO1xuICAgIGNvbnN0IGlzRGVzdHJveSA9IGlzU2FuZGJveCB8fCAhcHJvcHMua2VlcE9uRGVsZXRlO1xuXG4gICAgaWYgKGlzU2FuZGJveCAmJiBwcm9wcy5rZWVwT25EZWxldGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbQGF3cy1hbXBsaWZ5L2JhY2tlbmQtc3RvcmFnZV0ga2VlcE9uRGVsZXRlIGlzIGlnbm9yZWQgaW4gc2FuZGJveCBkZXBsb3ltZW50cy4gVGhlIGJ1Y2tldCB3aWxsIGJlIGRlbGV0ZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVja2V0UHJvcHM6IEJ1Y2tldFByb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBwcm9wcy52ZXJzaW9uZWQgfHwgZmFsc2UsXG4gICAgICBjb3JzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYXhBZ2U6IDMwMDAsXG4gICAgICAgICAgZXhwb3NlZEhlYWRlcnM6IFtcbiAgICAgICAgICAgICd4LWFtei1zZXJ2ZXItc2lkZS1lbmNyeXB0aW9uJyxcbiAgICAgICAgICAgICd4LWFtei1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICAgICd4LWFtei1pZC0yJyxcbiAgICAgICAgICAgICdFVGFnJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFsbG93ZWRIZWFkZXJzOiBbJyonXSxcbiAgICAgICAgICBhbGxvd2VkT3JpZ2luczogWycqJ10sXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFtcbiAgICAgICAgICAgIEh0dHBNZXRob2RzLkdFVCxcbiAgICAgICAgICAgIEh0dHBNZXRob2RzLkhFQUQsXG4gICAgICAgICAgICBIdHRwTWV0aG9kcy5QVVQsXG4gICAgICAgICAgICBIdHRwTWV0aG9kcy5QT1NULFxuICAgICAgICAgICAgSHR0cE1ldGhvZHMuREVMRVRFLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IGlzRGVzdHJveSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGlzRGVzdHJveSA/IFJlbW92YWxQb2xpY3kuREVTVFJPWSA6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCAnQnVja2V0JywgYnVja2V0UHJvcHMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7XG4gICAgICBidWNrZXQsXG4gICAgICBjZm5SZXNvdXJjZXM6IHtcbiAgICAgICAgY2ZuQnVja2V0OiBidWNrZXQubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgQ2ZuQnVja2V0LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgbmV3IEF0dHJpYnV0aW9uTWV0YWRhdGFTdG9yYWdlKCkuc3RvcmVBdHRyaWJ1dGlvbk1ldGFkYXRhKFxuICAgICAgU3RhY2sub2YodGhpcyksXG4gICAgICBzdG9yYWdlU3RhY2tUeXBlLFxuICAgICAgZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9wYWNrYWdlLmpzb24nLCBpbXBvcnQubWV0YS51cmwpKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIExhbWJkYSBmdW5jdGlvbiB0cmlnZ2VyIGhhbmRsZXIgdG8gdGhlIFMzIGV2ZW50c1xuICAgKiBAcGFyYW0gZXZlbnRzIC0gbGlzdCBvZiBTMyBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGhhbmRsZXJcbiAgICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGhhbmRsZSB0aGUgZXZlbnRcbiAgICovXG4gIGFkZFRyaWdnZXIgPSAoZXZlbnRzOiBFdmVudFR5cGVbXSwgaGFuZGxlcjogSUZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgaGFuZGxlci5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBTM0V2ZW50U291cmNlVjIodGhpcy5yZXNvdXJjZXMuYnVja2V0LCB7IGV2ZW50cyB9KSxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYWNjZXNzIGRlZmluaXRpb25zIHRvIHN0b3JhZ2VcbiAgICovXG4gIGFkZEFjY2Vzc0RlZmluaXRpb24gPSAoYWNjZXNzT3V0cHV0OiBTdG9yYWdlQWNjZXNzRGVmaW5pdGlvbk91dHB1dCkgPT4ge1xuICAgIHRoaXMuYWNjZXNzRGVmaW5pdGlvbiA9IGFjY2Vzc091dHB1dDtcbiAgfTtcbn1cbiJdfQ==