UNPKG

projen

Version:

CDK for software projects

130 lines • 14.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.GithubCredentials = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const Case = __importStar(require("case")); const actions_const_1 = require("./actions.const"); /** * Represents a method of providing GitHub API access for projen workflows. */ class GithubCredentials { options; static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubCredentials", version: "0.103.12" }; /** * Provide API access through a GitHub personal access token. * * The token must be added as a secret to the GitHub repo, and the name of the * secret can be specified here. * * @see https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token * @default - a secret named "PROJEN_GITHUB_TOKEN" */ static fromPersonalAccessToken(options = {}) { return new GithubCredentials({ setupSteps: [], tokenRef: `\${{ secrets.${options.secret ?? "PROJEN_GITHUB_TOKEN"} }}`, environment: options.environment, }); } /** * Provide API access through a GitHub App. * * The GitHub App must be installed on the GitHub repo, its App ID and a * private key must be added as secrets to the repo. The name of the secrets * can be specified here. * * @see https://docs.github.com/en/developers/apps/building-github-apps/creating-a-github-app * @see https://projen.io/docs/integrations/github/#github-app * @default - app id stored in "PROJEN_APP_ID" and private key stored in "PROJEN_APP_PRIVATE_KEY" with all permissions attached to the app */ static fromApp(options = {}) { const appIdSecret = options.appIdSecret ?? "PROJEN_APP_ID"; const privateKeySecret = options.privateKeySecret ?? "PROJEN_APP_PRIVATE_KEY"; const actionConfig = { "app-id": `\${{ secrets.${appIdSecret} }}`, "private-key": `\${{ secrets.${privateKeySecret} }}`, }; if (options.owner) { actionConfig.owner = options.owner; } if (options.repositories) { actionConfig.repositories = options.repositories.join(","); } const permissions = Object.entries(options.permissions ?? {}).reduce((map, [name, val]) => { map[`permission-${Case.kebab(name)}`] = val; return map; }, {}); return new GithubCredentials({ setupSteps: [ { name: "Generate token", id: "generate_token", uses: actions_const_1.GitHubActions.ACTIONS_CREATE_GITHUB_APP_TOKEN, with: { ...actionConfig, ...permissions, }, }, ], tokenRef: "${{ steps.generate_token.outputs.token }}", environment: options.environment, }); } constructor(options) { this.options = options; } /** * Setup steps to obtain GitHub credentials. */ get setupSteps() { return [...this.options.setupSteps]; } /** * The value to use in a workflow when a GitHub token is expected. This * typically looks like "${{ some.path.to.a.value }}". */ get tokenRef() { return this.options.tokenRef; } /** * The GitHub Actions environment the credentials have been added to. */ get environment() { return this.options.environment; } } exports.GithubCredentials = GithubCredentials; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWNyZWRlbnRpYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi9naXRodWItY3JlZGVudGlhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3QixtREFBZ0Q7QUE0RWhEOztHQUVHO0FBQ0gsTUFBYSxpQkFBaUI7SUF3RVM7O0lBdkVyQzs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyx1QkFBdUIsQ0FDbkMsVUFBdUQsRUFBRTtRQUV6RCxPQUFPLElBQUksaUJBQWlCLENBQUM7WUFDM0IsVUFBVSxFQUFFLEVBQUU7WUFDZCxRQUFRLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxNQUFNLElBQUkscUJBQXFCLEtBQUs7WUFDdEUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUF1QyxFQUFFO1FBQzdELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksZUFBZSxDQUFDO1FBQzNELE1BQU0sZ0JBQWdCLEdBQ3BCLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSx3QkFBd0IsQ0FBQztRQUV2RCxNQUFNLFlBQVksR0FBMkI7WUFDM0MsUUFBUSxFQUFFLGdCQUFnQixXQUFXLEtBQUs7WUFDMUMsYUFBYSxFQUFFLGdCQUFnQixnQkFBZ0IsS0FBSztTQUNyRCxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsWUFBWSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixZQUFZLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUVsRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ3JCLEdBQUcsQ0FBQyxjQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUM1QyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQztZQUMzQixVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsRUFBRSxFQUFFLGdCQUFnQjtvQkFDcEIsSUFBSSxFQUFFLDZCQUFhLENBQUMsK0JBQStCO29CQUNuRCxJQUFJLEVBQUU7d0JBQ0osR0FBRyxZQUFZO3dCQUNmLEdBQUcsV0FBVztxQkFDZjtpQkFDRjthQUNGO1lBQ0QsUUFBUSxFQUFFLDJDQUEyQztZQUNyRCxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQXFDLE9BQWlDO1FBQWpDLFlBQU8sR0FBUCxPQUFPLENBQTBCO0lBQUcsQ0FBQztJQUUxRTs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNsQyxDQUFDOztBQTlGSCw4Q0ErRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBDYXNlIGZyb20gXCJjYXNlXCI7XG5pbXBvcnQgeyBHaXRIdWJBY3Rpb25zIH0gZnJvbSBcIi4vYWN0aW9ucy5jb25zdFwiO1xuaW1wb3J0IHR5cGUgeyBKb2JTdGVwLCBBcHBQZXJtaXNzaW9ucyB9IGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbmBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJDcmVkZW50aWFsc1BlcnNvbmFsQWNjZXNzVG9rZW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdGhhdCBob2xkcyB0aGUgR2l0SHViIHBlcnNvbmFsIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJQUk9KRU5fR0lUSFVCX1RPS0VOXCJcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBBY3Rpb25zIGVudmlyb25tZW50IHRoZSBzZWNyZXRzIGlzIGFkZGVkIHRvLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBleHBsaWNpdCBhcHByb3ZhbCBzdGVwcyB0byBhY2Nlc3MgdGhlIHNlY3JldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbnZpcm9ubWVudCB1c2VkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJDcmVkZW50aWFsc0FwcE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHNlY3JldCBjb250YWluaW5nIHRoZSBHaXRIdWIgQXBwIElEXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUFJPSkVOX0FQUF9JRFwiXG4gICAqL1xuICByZWFkb25seSBhcHBJZFNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlY3JldCBjb250YWluaW5nIHRoZSBHaXRIdWIgQXBwIHByaXZhdGUga2V5XG4gICAqXG4gICAqIEVzY2FwZWQgbmV3bGluZXMgKFxcXFxuKSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCBhY3R1YWwgbmV3bGluZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUFJPSkVOX0FQUF9QUklWQVRFX0tFWVwiXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlS2V5U2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3duZXIgb2YgdGhlIEdpdEh1YiBBcHAgaW5zdGFsbGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaWYgZW1wdHksIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkgb3duZXJcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJlcG9zaXRvcmllcyB0byBncmFudCBhY2Nlc3MgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpZiBvd25lciBpcyBzZXQgYW5kIHJlcG9zaXRvcmllcyBpcyBlbXB0eSwgYWNjZXNzIHdpbGwgYmUgc2NvcGVkIHRvIGFsbCByZXBvc2l0b3JpZXMgaW4gdGhlIHByb3ZpZGVkIHJlcG9zaXRvcnkgb3duZXIncyBpbnN0YWxsYXRpb24uXG4gICAqIElmIG93bmVyIGFuZCByZXBvc2l0b3JpZXMgYXJlIGVtcHR5LCBhY2Nlc3Mgd2lsbCBiZSBzY29wZWQgdG8gb25seSB0aGUgY3VycmVudCByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJtaXNzaW9ucyBncmFudGVkIHRvIHRoZSB0b2tlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgcGVybWlzc2lvbnMgZ3JhbnRlZCB0byB0aGUgYXBwXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9ucz86IEFwcFBlcm1pc3Npb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIEFjdGlvbnMgZW52aXJvbm1lbnQgdGhlIHNlY3JldHMgYXJlIGFkZGVkIHRvLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBleHBsaWNpdCBhcHByb3ZhbCBzdGVwcyB0byBhY2Nlc3MgdGhlIHNlY3JldHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZW52aXJvbm1lbnQgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG1ldGhvZCBvZiBwcm92aWRpbmcgR2l0SHViIEFQSSBhY2Nlc3MgZm9yIHByb2plbiB3b3JrZmxvd3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRodWJDcmVkZW50aWFscyB7XG4gIC8qKlxuICAgKiBQcm92aWRlIEFQSSBhY2Nlc3MgdGhyb3VnaCBhIEdpdEh1YiBwZXJzb25hbCBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIFRoZSB0b2tlbiBtdXN0IGJlIGFkZGVkIGFzIGEgc2VjcmV0IHRvIHRoZSBHaXRIdWIgcmVwbywgYW5kIHRoZSBuYW1lIG9mIHRoZVxuICAgKiBzZWNyZXQgY2FuIGJlIHNwZWNpZmllZCBoZXJlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2F1dGhlbnRpY2F0aW9uL2tlZXBpbmcteW91ci1hY2NvdW50LWFuZC1kYXRhLXNlY3VyZS9jcmVhdGluZy1hLXBlcnNvbmFsLWFjY2Vzcy10b2tlblxuICAgKiBAZGVmYXVsdCAtIGEgc2VjcmV0IG5hbWVkIFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKFxuICAgIG9wdGlvbnM6IEdpdGh1YkNyZWRlbnRpYWxzUGVyc29uYWxBY2Nlc3NUb2tlbk9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBHaXRodWJDcmVkZW50aWFscyh7XG4gICAgICBzZXR1cFN0ZXBzOiBbXSxcbiAgICAgIHRva2VuUmVmOiBgXFwke3sgc2VjcmV0cy4ke29wdGlvbnMuc2VjcmV0ID8/IFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwifSB9fWAsXG4gICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIEFQSSBhY2Nlc3MgdGhyb3VnaCBhIEdpdEh1YiBBcHAuXG4gICAqXG4gICAqIFRoZSBHaXRIdWIgQXBwIG11c3QgYmUgaW5zdGFsbGVkIG9uIHRoZSBHaXRIdWIgcmVwbywgaXRzIEFwcCBJRCBhbmQgYVxuICAgKiBwcml2YXRlIGtleSBtdXN0IGJlIGFkZGVkIGFzIHNlY3JldHMgdG8gdGhlIHJlcG8uIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXRzXG4gICAqIGNhbiBiZSBzcGVjaWZpZWQgaGVyZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9kZXZlbG9wZXJzL2FwcHMvYnVpbGRpbmctZ2l0aHViLWFwcHMvY3JlYXRpbmctYS1naXRodWItYXBwXG4gICAqIEBzZWUgaHR0cHM6Ly9wcm9qZW4uaW8vZG9jcy9pbnRlZ3JhdGlvbnMvZ2l0aHViLyNnaXRodWItYXBwXG4gICAqIEBkZWZhdWx0IC0gYXBwIGlkIHN0b3JlZCBpbiBcIlBST0pFTl9BUFBfSURcIiBhbmQgcHJpdmF0ZSBrZXkgc3RvcmVkIGluIFwiUFJPSkVOX0FQUF9QUklWQVRFX0tFWVwiIHdpdGggYWxsIHBlcm1pc3Npb25zIGF0dGFjaGVkIHRvIHRoZSBhcHBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFwcChvcHRpb25zOiBHaXRodWJDcmVkZW50aWFsc0FwcE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGFwcElkU2VjcmV0ID0gb3B0aW9ucy5hcHBJZFNlY3JldCA/PyBcIlBST0pFTl9BUFBfSURcIjtcbiAgICBjb25zdCBwcml2YXRlS2V5U2VjcmV0ID1cbiAgICAgIG9wdGlvbnMucHJpdmF0ZUtleVNlY3JldCA/PyBcIlBST0pFTl9BUFBfUFJJVkFURV9LRVlcIjtcblxuICAgIGNvbnN0IGFjdGlvbkNvbmZpZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwiYXBwLWlkXCI6IGBcXCR7eyBzZWNyZXRzLiR7YXBwSWRTZWNyZXR9IH19YCxcbiAgICAgIFwicHJpdmF0ZS1rZXlcIjogYFxcJHt7IHNlY3JldHMuJHtwcml2YXRlS2V5U2VjcmV0fSB9fWAsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLm93bmVyKSB7XG4gICAgICBhY3Rpb25Db25maWcub3duZXIgPSBvcHRpb25zLm93bmVyO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5yZXBvc2l0b3JpZXMpIHtcbiAgICAgIGFjdGlvbkNvbmZpZy5yZXBvc2l0b3JpZXMgPSBvcHRpb25zLnJlcG9zaXRvcmllcy5qb2luKFwiLFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMucGVybWlzc2lvbnMgPz8ge30pLnJlZHVjZTxcbiAgICAgIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICA+KChtYXAsIFtuYW1lLCB2YWxdKSA9PiB7XG4gICAgICBtYXBbYHBlcm1pc3Npb24tJHtDYXNlLmtlYmFiKG5hbWUpfWBdID0gdmFsO1xuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCB7fSk7XG5cbiAgICByZXR1cm4gbmV3IEdpdGh1YkNyZWRlbnRpYWxzKHtcbiAgICAgIHNldHVwU3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiR2VuZXJhdGUgdG9rZW5cIixcbiAgICAgICAgICBpZDogXCJnZW5lcmF0ZV90b2tlblwiLFxuICAgICAgICAgIHVzZXM6IEdpdEh1YkFjdGlvbnMuQUNUSU9OU19DUkVBVEVfR0lUSFVCX0FQUF9UT0tFTixcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAuLi5hY3Rpb25Db25maWcsXG4gICAgICAgICAgICAuLi5wZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRva2VuUmVmOiBcIiR7eyBzdGVwcy5nZW5lcmF0ZV90b2tlbi5vdXRwdXRzLnRva2VuIH19XCIsXG4gICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBHaXRodWJDcmVkZW50aWFsc09wdGlvbnMpIHt9XG5cbiAgLyoqXG4gICAqIFNldHVwIHN0ZXBzIHRvIG9idGFpbiBHaXRIdWIgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwU3RlcHMoKTogSm9iU3RlcFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMub3B0aW9ucy5zZXR1cFN0ZXBzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdG8gdXNlIGluIGEgd29ya2Zsb3cgd2hlbiBhIEdpdEh1YiB0b2tlbiBpcyBleHBlY3RlZC4gVGhpc1xuICAgKiB0eXBpY2FsbHkgbG9va3MgbGlrZSBcIiR7eyBzb21lLnBhdGgudG8uYS52YWx1ZSB9fVwiLlxuICAgKi9cbiAgcHVibGljIGdldCB0b2tlblJlZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudG9rZW5SZWY7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBBY3Rpb25zIGVudmlyb25tZW50IHRoZSBjcmVkZW50aWFscyBoYXZlIGJlZW4gYWRkZWQgdG8uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lbnZpcm9ubWVudDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgR2l0aHViQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgcmVhZG9ubHkgc2V0dXBTdGVwczogSm9iU3RlcFtdO1xuICByZWFkb25seSB0b2tlblJlZjogc3RyaW5nO1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHN0cmluZztcbn1cbiJdfQ==