UNPKG

aws-delivlib

Version:

A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.

123 lines • 18.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WritableGitHubRepo = exports.GitHubRepo = exports.CodeCommitRepo = void 0; const aws_cdk_lib_1 = require("aws-cdk-lib"); class CodeCommitRepo { constructor(repository) { this.repository = repository; this.allowsBadge = false; } createSourceStage(pipeline, branch) { const stage = pipeline.addStage({ stageName: 'Source', }); const sourceOutput = new aws_cdk_lib_1.aws_codepipeline.Artifact('Source'); stage.addAction(new aws_cdk_lib_1.aws_codepipeline_actions.CodeCommitSourceAction({ actionName: 'Pull', repository: this.repository, branch, output: sourceOutput, })); return sourceOutput; } get repositoryUrlHttp() { return this.repository.repositoryCloneUrlHttp; } get repositoryUrlSsh() { return this.repository.repositoryCloneUrlSsh; } createBuildSource(_, _webhook, options = {}) { return aws_cdk_lib_1.aws_codebuild.Source.codeCommit({ repository: this.repository, cloneDepth: options.cloneDepth, }); } describe() { return this.repository.repositoryName; } } exports.CodeCommitRepo = CodeCommitRepo; class GitHubRepo { constructor(props) { this.allowsBadge = true; const repository = props.repository; if (repository.indexOf('/') == -1) { throw new Error('Repository must be of the form "account/repo"'); } const [owner, repo] = repository.split('/'); this.owner = owner; this.repo = repo; this.tokenSecretArn = props.tokenSecretArn; this.tokenSecretOptions = props.tokenSecretOptions; } get repositoryUrlHttp() { return `https://github.com/${this.owner}/${this.repo}.git`; } get repositoryUrlSsh() { return `git@github.com:${this.owner}/${this.repo}.git`; } createSourceStage(pipeline, branch) { const stage = pipeline.addStage({ stageName: 'Source' }); const sourceOutput = new aws_cdk_lib_1.aws_codepipeline.Artifact('Source'); stage.addAction(new aws_cdk_lib_1.aws_codepipeline_actions.GitHubSourceAction({ actionName: 'Pull', branch, oauthToken: aws_cdk_lib_1.SecretValue.secretsManager(this.tokenSecretArn, this.tokenSecretOptions), owner: this.owner, repo: this.repo, output: sourceOutput, })); return sourceOutput; } createBuildSource(_, webhook, options = {}) { if (options.branch && options.branches) { throw new Error('Specify at most one of \'branch\' and \'branches\''); } const branches = options.branches ?? (options.branch ? [options.branch] : []); return aws_cdk_lib_1.aws_codebuild.Source.gitHub({ owner: this.owner, repo: this.repo, webhook, cloneDepth: options.cloneDepth, reportBuildStatus: webhook, webhookFilters: webhook ? this.createWebhookFilters(branches) : undefined, }); } describe() { return `${this.owner}/${this.repo}`; } createWebhookFilters(branches) { if (branches.length > 0) { // Turn the list of branches into a regex const branchExpr = branches.map(b => `^refs/heads/${b}$`).join('|'); return [ aws_cdk_lib_1.aws_codebuild.FilterGroup.inEventOf(aws_cdk_lib_1.aws_codebuild.EventAction.PUSH) .andHeadRefIs(branchExpr), aws_cdk_lib_1.aws_codebuild.FilterGroup.inEventOf(aws_cdk_lib_1.aws_codebuild.EventAction.PULL_REQUEST_CREATED, aws_cdk_lib_1.aws_codebuild.EventAction.PULL_REQUEST_UPDATED) .andBaseRefIs(branchExpr), ]; } return [ aws_cdk_lib_1.aws_codebuild.FilterGroup.inEventOf(aws_cdk_lib_1.aws_codebuild.EventAction.PUSH, aws_cdk_lib_1.aws_codebuild.EventAction.PULL_REQUEST_CREATED, aws_cdk_lib_1.aws_codebuild.EventAction.PULL_REQUEST_UPDATED), ]; } } exports.GitHubRepo = GitHubRepo; class WritableGitHubRepo extends GitHubRepo { static isWritableGitHubRepo(repo) { const obj = repo; return 'sshKeySecret' in obj && 'commitEmail' in obj && 'commitUsername' in obj; } constructor(props) { super(props); this.sshKeySecret = props.sshKeySecret; this.commitEmail = props.commitEmail; this.commitUsername = props.commitUsername; } } exports.WritableGitHubRepo = WritableGitHubRepo; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSXFCO0FBb0NyQixNQUFhLGNBQWM7SUFJekIsWUFBNkIsVUFBK0I7UUFBL0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFINUMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFLcEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFFBQTRCLEVBQUUsTUFBYztRQUNuRSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQzlCLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUMsQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLElBQUksOEJBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLHNDQUFpQixDQUFDLHNCQUFzQixDQUFDO1lBQzNELFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixNQUFNO1lBQ04sTUFBTSxFQUFFLFlBQVk7U0FDckIsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUM7SUFDL0MsQ0FBQztJQUVNLGlCQUFpQixDQUFDLENBQVksRUFBRSxRQUFpQixFQUFFLFVBQThCLEVBQUc7UUFDekYsT0FBTywyQkFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sUUFBUTtR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R0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBckJELGdEQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFNlY3JldFZhbHVlLCBTZWNyZXRzTWFuYWdlclNlY3JldE9wdGlvbnMsXG4gIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLCBhd3NfY29kZWNvbW1pdCBhcyBjY29tbWl0LFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSwgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEV4dGVybmFsU2VjcmV0IH0gZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlcG8ge1xuICByZXBvc2l0b3J5VXJsSHR0cDogc3RyaW5nO1xuICByZXBvc2l0b3J5VXJsU3NoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFsbG93c0JhZGdlOiBib29sZWFuO1xuICByZWFkb25seSB0b2tlblNlY3JldEFybj86IHN0cmluZztcbiAgY3JlYXRlQnVpbGRTb3VyY2UocGFyZW50OiBDb25zdHJ1Y3QsIHdlYmhvb2s6IGJvb2xlYW4sIG9wdGlvbnM/OiBCdWlsZFNvdXJjZU9wdGlvbnMpOiBjYnVpbGQuSVNvdXJjZTtcbiAgY3JlYXRlU291cmNlU3RhZ2UocGlwZWxpbmU6IGNwaXBlbGluZS5QaXBlbGluZSwgYnJhbmNoOiBzdHJpbmcpOiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG4gIGRlc2NyaWJlKCk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFNvdXJjZU9wdGlvbnMge1xuICAvKipcbiAgICogU2luZ2xlIGJyYW5jaFxuICAgKlxuICAgKiBDYW5ub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYGJyYW5jaGVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgYnJhbmNoZXNcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBicmFuY2hlc2AgaW5zdGVhZC5cbiAgICovXG4gIGJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogTXVsdGlwbGUgYnJhbmNoZXNcbiAgICpcbiAgICogQ2Fubm90IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIGBicmFuY2hgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFsbCBicmFuY2hlc1xuICAgKi9cbiAgYnJhbmNoZXM/OiBzdHJpbmdbXTtcbiAgY2xvbmVEZXB0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvZGVDb21taXRSZXBvIGltcGxlbWVudHMgSVJlcG8ge1xuICBwdWJsaWMgcmVhZG9ubHkgYWxsb3dzQmFkZ2UgPSBmYWxzZTtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuU2VjcmV0QXJuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVwb3NpdG9yeTogY2NvbW1pdC5JUmVwb3NpdG9yeSkge1xuXG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU291cmNlU3RhZ2UocGlwZWxpbmU6IGNwaXBlbGluZS5QaXBlbGluZSwgYnJhbmNoOiBzdHJpbmcpOiBjcGlwZWxpbmUuQXJ0aWZhY3Qge1xuICAgIGNvbnN0IHN0YWdlID0gcGlwZWxpbmUuYWRkU3RhZ2Uoe1xuICAgICAgc3RhZ2VOYW1lOiAnU291cmNlJyxcbiAgICB9KTtcbiAgICBjb25zdCBzb3VyY2VPdXRwdXQgPSBuZXcgY3BpcGVsaW5lLkFydGlmYWN0KCdTb3VyY2UnKTtcbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVDb21taXRTb3VyY2VBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ1B1bGwnLFxuICAgICAgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5LFxuICAgICAgYnJhbmNoLFxuICAgICAgb3V0cHV0OiBzb3VyY2VPdXRwdXQsXG4gICAgfSkpO1xuICAgIHJldHVybiBzb3VyY2VPdXRwdXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlVcmxIdHRwKCkge1xuICAgIHJldHVybiB0aGlzLnJlcG9zaXRvcnkucmVwb3NpdG9yeUNsb25lVXJsSHR0cDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeVVybFNzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvc2l0b3J5LnJlcG9zaXRvcnlDbG9uZVVybFNzaDtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVCdWlsZFNvdXJjZShfOiBDb25zdHJ1Y3QsIF93ZWJob29rOiBib29sZWFuLCBvcHRpb25zOiBCdWlsZFNvdXJjZU9wdGlvbnMgPSB7IH0pOiBjYnVpbGQuSVNvdXJjZSB7XG4gICAgcmV0dXJuIGNidWlsZC5Tb3VyY2UuY29kZUNvbW1pdCh7XG4gICAgICByZXBvc2l0b3J5OiB0aGlzLnJlcG9zaXRvcnksXG4gICAgICBjbG9uZURlcHRoOiBvcHRpb25zLmNsb25lRGVwdGgsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGVzY3JpYmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lO1xuICB9XG59XG5cbmludGVyZmFjZSBHaXRIdWJSZXBvUHJvcHMge1xuICAvKipcbiAgICogU2VjcmV0cyBNYW5hZ2VyIEFSTiBvZiB0aGUgT0F1dGggdG9rZW4gc2VjcmV0IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB5b3VyIGdpdGh1YiByZXBvLlxuICAgKi9cbiAgdG9rZW5TZWNyZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgcmVmZXJlbmNpbmcgYSBzZWNyZXQgdmFsdWUgZnJvbSBTZWNyZXRzIE1hbmFnZXJcbiAgICovXG4gIHRva2VuU2VjcmV0T3B0aW9ucz86IFNlY3JldHNNYW5hZ2VyU2VjcmV0T3B0aW9ucztcblxuICAvKipcbiAgICogSW4gdGhlIGZvcm0gXCJhY2NvdW50L3JlcG9cIi5cbiAgICovXG4gIHJlcG9zaXRvcnk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdpdEh1YlJlcG8gaW1wbGVtZW50cyBJUmVwbyB7XG4gIHB1YmxpYyByZWFkb25seSBhbGxvd3NCYWRnZSA9IHRydWU7XG4gIHB1YmxpYyByZWFkb25seSBvd25lcjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdG9rZW5TZWNyZXRBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuU2VjcmV0T3B0aW9ucz86IFNlY3JldHNNYW5hZ2VyU2VjcmV0T3B0aW9ucztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogR2l0SHViUmVwb1Byb3BzKSB7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IHByb3BzLnJlcG9zaXRvcnk7XG4gICAgaWYgKHJlcG9zaXRvcnkuaW5kZXhPZignLycpID09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9zaXRvcnkgbXVzdCBiZSBvZiB0aGUgZm9ybSBcImFjY291bnQvcmVwb1wiJyk7XG4gICAgfVxuICAgIGNvbnN0IFtvd25lciwgcmVwb10gPSByZXBvc2l0b3J5LnNwbGl0KCcvJyk7XG5cbiAgICB0aGlzLm93bmVyID0gb3duZXI7XG4gICAgdGhpcy5yZXBvID0gcmVwbztcbiAgICB0aGlzLnRva2VuU2VjcmV0QXJuID0gcHJvcHMudG9rZW5TZWNyZXRBcm47XG4gICAgdGhpcy50b2tlblNlY3JldE9wdGlvbnMgPSBwcm9wcy50b2tlblNlY3JldE9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlVcmxIdHRwKCkge1xuICAgIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7dGhpcy5vd25lcn0vJHt0aGlzLnJlcG99LmdpdGA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlVcmxTc2goKSB7XG4gICAgcmV0dXJuIGBnaXRAZ2l0aHViLmNvbToke3RoaXMub3duZXJ9LyR7dGhpcy5yZXBvfS5naXRgO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVNvdXJjZVN0YWdlKHBpcGVsaW5lOiBjcGlwZWxpbmUuUGlwZWxpbmUsIGJyYW5jaDogc3RyaW5nKTogY3BpcGVsaW5lLkFydGlmYWN0IHtcbiAgICBjb25zdCBzdGFnZSA9IHBpcGVsaW5lLmFkZFN0YWdlKHsgc3RhZ2VOYW1lOiAnU291cmNlJyB9KTtcblxuICAgIGNvbnN0IHNvdXJjZU91dHB1dCA9IG5ldyBjcGlwZWxpbmUuQXJ0aWZhY3QoJ1NvdXJjZScpO1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgY3BpcGVsaW5lX2FjdGlvbnMuR2l0SHViU291cmNlQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6ICdQdWxsJyxcbiAgICAgIGJyYW5jaCxcbiAgICAgIG9hdXRoVG9rZW46IFNlY3JldFZhbHVlLnNlY3JldHNNYW5hZ2VyKHRoaXMudG9rZW5TZWNyZXRBcm4sIHRoaXMudG9rZW5TZWNyZXRPcHRpb25zKSxcbiAgICAgIG93bmVyOiB0aGlzLm93bmVyLFxuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgb3V0cHV0OiBzb3VyY2VPdXRwdXQsXG4gICAgfSkpO1xuICAgIHJldHVybiBzb3VyY2VPdXRwdXQ7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQnVpbGRTb3VyY2UoXzogQ29uc3RydWN0LCB3ZWJob29rOiBib29sZWFuLCBvcHRpb25zOiBCdWlsZFNvdXJjZU9wdGlvbnMgPSB7IH0pOiBjYnVpbGQuSVNvdXJjZSB7XG4gICAgaWYgKG9wdGlvbnMuYnJhbmNoICYmIG9wdGlvbnMuYnJhbmNoZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3BlY2lmeSBhdCBtb3N0IG9uZSBvZiBcXCdicmFuY2hcXCcgYW5kIFxcJ2JyYW5jaGVzXFwnJyk7XG4gICAgfVxuICAgIGNvbnN0IGJyYW5jaGVzID0gb3B0aW9ucy5icmFuY2hlcyA/PyAob3B0aW9ucy5icmFuY2ggPyBbb3B0aW9ucy5icmFuY2hdIDogW10pO1xuXG4gICAgcmV0dXJuIGNidWlsZC5Tb3VyY2UuZ2l0SHViKHtcbiAgICAgIG93bmVyOiB0aGlzLm93bmVyLFxuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgd2ViaG9vayxcbiAgICAgIGNsb25lRGVwdGg6IG9wdGlvbnMuY2xvbmVEZXB0aCxcbiAgICAgIHJlcG9ydEJ1aWxkU3RhdHVzOiB3ZWJob29rLFxuICAgICAgd2ViaG9va0ZpbHRlcnM6IHdlYmhvb2tcbiAgICAgICAgPyB0aGlzLmNyZWF0ZVdlYmhvb2tGaWx0ZXJzKGJyYW5jaGVzKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNjcmliZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5vd25lcn0vJHt0aGlzLnJlcG99YDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2ViaG9va0ZpbHRlcnMoYnJhbmNoZXM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKGJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFR1cm4gdGhlIGxpc3Qgb2YgYnJhbmNoZXMgaW50byBhIHJlZ2V4XG4gICAgICBjb25zdCBicmFuY2hFeHByID0gYnJhbmNoZXMubWFwKGIgPT4gYF5yZWZzL2hlYWRzLyR7Yn0kYCkuam9pbignfCcpO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBjYnVpbGQuRmlsdGVyR3JvdXAuaW5FdmVudE9mKGNidWlsZC5FdmVudEFjdGlvbi5QVVNIKVxuICAgICAgICAgIC5hbmRIZWFkUmVmSXMoYnJhbmNoRXhwciksXG4gICAgICAgIGNidWlsZC5GaWx0ZXJHcm91cC5pbkV2ZW50T2YoY2J1aWxkLkV2ZW50QWN0aW9uLlBVTExfUkVRVUVTVF9DUkVBVEVELCBjYnVpbGQuRXZlbnRBY3Rpb24uUFVMTF9SRVFVRVNUX1VQREFURUQpXG4gICAgICAgICAgLmFuZEJhc2VSZWZJcyhicmFuY2hFeHByKSxcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBjYnVpbGQuRmlsdGVyR3JvdXAuaW5FdmVudE9mKFxuICAgICAgICBjYnVpbGQuRXZlbnRBY3Rpb24uUFVTSCxcbiAgICAgICAgY2J1aWxkLkV2ZW50QWN0aW9uLlBVTExfUkVRVUVTVF9DUkVBVEVELFxuICAgICAgICBjYnVpbGQuRXZlbnRBY3Rpb24uUFVMTF9SRVFVRVNUX1VQREFURUQsXG4gICAgICApLFxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXcml0YWJsZUdpdEh1YlJlcG9Qcm9wcyBleHRlbmRzIEdpdEh1YlJlcG9Qcm9wcyB7XG4gIC8qKlxuICAgKiBTU0gga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byB1c2UgYWN0aW9ucyB0aGF0IHdyaXRlIHRvIHRoZSByZXBvXG4gICAqIHN1Y2ggYXMgZG9jcyBwdWJsaXNoaW5nIGFuZCBhdXRvbWF0aWMgYnVtcHMuXG4gICAqL1xuICBzc2hLZXlTZWNyZXQ6IEV4dGVybmFsU2VjcmV0O1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlcm5hbWUgdG8gdXNlIGZvciB0aGUgcHVibGlzaGVkIGNvbW1pdHNcbiAgICovXG4gIGNvbW1pdFVzZXJuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbWFpbCBhZGRyZXNzIHRvIHVzZSBmb3IgdGhlIHB1Ymxpc2hlZCBjb21taXRzXG4gICAqL1xuICBjb21taXRFbWFpbDogc3RyaW5nO1xuXG59XG5cbmV4cG9ydCBjbGFzcyBXcml0YWJsZUdpdEh1YlJlcG8gZXh0ZW5kcyBHaXRIdWJSZXBvIHtcblxuICBwdWJsaWMgc3RhdGljIGlzV3JpdGFibGVHaXRIdWJSZXBvKHJlcG86IElSZXBvKTogcmVwbyBpcyBXcml0YWJsZUdpdEh1YlJlcG8ge1xuICAgIGNvbnN0IG9iaiA9IHJlcG8gYXMgYW55O1xuXG4gICAgcmV0dXJuICdzc2hLZXlTZWNyZXQnIGluIG9ialxuICAgICAgJiYgJ2NvbW1pdEVtYWlsJyBpbiBvYmpcbiAgICAgICYmICdjb21taXRVc2VybmFtZScgaW4gb2JqO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHNzaEtleVNlY3JldDogRXh0ZXJuYWxTZWNyZXQ7XG4gIHB1YmxpYyByZWFkb25seSBjb21taXRFbWFpbDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWl0VXNlcm5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogV3JpdGFibGVHaXRIdWJSZXBvUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnNzaEtleVNlY3JldCA9IHByb3BzLnNzaEtleVNlY3JldDtcbiAgICB0aGlzLmNvbW1pdEVtYWlsID0gcHJvcHMuY29tbWl0RW1haWw7XG4gICAgdGhpcy5jb21taXRVc2VybmFtZSA9IHByb3BzLmNvbW1pdFVzZXJuYW1lO1xuICB9XG59XG4iXX0=