@pipeline-builder/pipeline-manager 3.4.161 → 3.4.162
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/agent/post-steps.js +3 -3
- package/dist/boilerplate.js +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +103 -51
- package/dist/commands/audit-stacks.d.ts +2 -2
- package/dist/commands/audit-stacks.js +4 -4
- package/dist/commands/audit-tokens.d.ts +2 -2
- package/dist/commands/audit-tokens.js +5 -5
- package/dist/commands/create-pat.d.ts +27 -0
- package/dist/commands/create-pat.d.ts.map +1 -0
- package/dist/commands/create-pat.js +209 -0
- package/dist/commands/create-pipeline.js +2 -2
- package/dist/commands/deploy.d.ts +2 -2
- package/dist/commands/deploy.js +4 -4
- package/dist/commands/get-pipeline.d.ts +3 -3
- package/dist/commands/get-pipeline.js +5 -5
- package/dist/commands/get-plugin.d.ts +3 -3
- package/dist/commands/get-plugin.js +5 -5
- package/dist/commands/list-pipelines.d.ts +5 -5
- package/dist/commands/list-pipelines.js +7 -7
- package/dist/commands/list-plugins.d.ts +5 -5
- package/dist/commands/list-plugins.js +7 -7
- package/dist/commands/login.d.ts +5 -5
- package/dist/commands/login.js +8 -8
- package/dist/commands/new-plugin.d.ts +12 -0
- package/dist/commands/new-plugin.d.ts.map +1 -0
- package/dist/commands/new-plugin.js +129 -0
- package/dist/commands/org-export.d.ts +3 -3
- package/dist/commands/org-export.js +5 -5
- package/dist/commands/register.d.ts +2 -2
- package/dist/commands/register.js +3 -3
- package/dist/commands/store-token.d.ts +8 -8
- package/dist/commands/store-token.js +11 -11
- package/dist/commands/synth.d.ts +3 -3
- package/dist/commands/synth.js +4 -4
- package/dist/commands/upload-plugin.d.ts +4 -4
- package/dist/commands/upload-plugin.d.ts.map +1 -1
- package/dist/commands/upload-plugin.js +9 -8
- package/dist/commands/validate-plugin.d.ts +12 -0
- package/dist/commands/validate-plugin.d.ts.map +1 -0
- package/dist/commands/validate-plugin.js +175 -0
- package/dist/commands/validate-templates.d.ts +3 -3
- package/dist/commands/validate-templates.js +5 -5
- package/dist/lambda/token-renew-handler.js +4 -4
- package/dist/templates/events-stack.json +2 -2
- package/dist/templates/token-renew-stack.json +2 -2
- package/dist/utils/api-client.js +2 -2
- package/dist/utils/command-utils.js +2 -2
- package/dist/utils/registry.d.ts +2 -2
- package/dist/utils/registry.js +3 -3
- package/package.json +3 -3
|
@@ -26,13 +26,13 @@ const ACTIVE_STATUSES = [
|
|
|
26
26
|
*
|
|
27
27
|
* @example
|
|
28
28
|
* ```bash
|
|
29
|
-
* pipeline-manager audit
|
|
30
|
-
* pipeline-manager audit
|
|
29
|
+
* pipeline-manager audit stacks --region us-east-1
|
|
30
|
+
* pipeline-manager audit stacks --org acme --json
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
33
|
export function auditStacks(program) {
|
|
34
34
|
program
|
|
35
|
-
.command('
|
|
35
|
+
.command('stacks')
|
|
36
36
|
.description('Diff CloudFormation stacks vs pipeline_registry to find orphaned or missing CDK deployments')
|
|
37
37
|
.option('--region <region>', 'AWS region (defaults to AWS_REGION env)')
|
|
38
38
|
.option('--profile <profile>', 'AWS CLI profile', 'default')
|
|
@@ -171,4 +171,4 @@ export function auditStacks(program) {
|
|
|
171
171
|
}
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtc3RhY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2F1ZGl0LXN0YWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQTJCM0csTUFBTSxlQUFlLEdBQUc7SUFDdEIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCO0lBQ2hFLGlCQUFpQixFQUFFLDBCQUEwQjtDQUM5QyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFnQjtJQUMxQyxPQUFPO1NBQ0osT0FBTyxDQUFDLGNBQWMsQ0FBQztTQUN2QixXQUFXLENBQUMsNkZBQTZGLENBQUM7U0FDMUcsTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlDQUF5QyxDQUFDO1NBQ3RFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUM7U0FDM0QsTUFBTSxDQUFDLGVBQWUsRUFBRSxxREFBcUQsQ0FBQztTQUM5RSxNQUFNLENBQUMsUUFBUSxFQUFFLHdCQUF3QixFQUFFLEtBQUssQ0FBQztTQUNqRCxNQUFNLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO1NBQzdELE1BQU0sQ0FB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QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUU7YUFDbEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ2xpZW50LCBEZXNjcmliZVN0YWNrc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmludGVyZmFjZSBSZWdpc3RyeUVudHJ5IHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZUFybjogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgc3RhY2tOYW1lPzogc3RyaW5nO1xuICByZWdpb24/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdGFja0luZm8ge1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgc3RhY2tTdGF0dXM6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIHBpcGVsaW5lQnVpbGRlclRhZz86IHN0cmluZztcbiAgb3JnSWRUYWc/OiBzdHJpbmc7XG4gIGNyZWF0aW9uVGltZT86IERhdGU7XG59XG5cbmludGVyZmFjZSBBdWRpdEZpbmRpbmcge1xuICB0eXBlOiAnb3JwaGFuZWQtc3RhY2snIHwgJ21pc3Npbmctc3RhY2snO1xuICBzdGFja05hbWU/OiBzdHJpbmc7XG4gIHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgZGV0YWlsOiBzdHJpbmc7XG59XG5cbmNvbnN0IEFDVElWRV9TVEFUVVNFUyA9IFtcbiAgJ0NSRUFURV9DT01QTEVURScsICdVUERBVEVfQ09NUExFVEUnLCAnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyxcbiAgJ0lNUE9SVF9DT01QTEVURScsICdJTVBPUlRfUk9MTEJBQ0tfQ09NUExFVEUnLFxuXTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBhdWRpdC1zdGFja3NgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRGlmZnMgQ2xvdWRGb3JtYXRpb24gc3RhY2tzIChmaWx0ZXJlZCB0byB0aG9zZSB0YWdnZWQgd2l0aCBgcGlwZWxpbmUtYnVpbGRlcmApXG4gKiBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzIGBwaXBlbGluZV9yZWdpc3RyeWAgdGFibGUuIFN1cmZhY2VzOlxuICogICAtICoqT3JwaGFuZWQgc3RhY2tzKio6IHRhZ2dlZCBzdGFja3Mgd2l0aCBubyBEQiByZWNvcmQgKGxpa2VseSBsZWZ0b3ZlcnMgYWZ0ZXJcbiAqICAgICBhIHBpcGVsaW5lIHdhcyBkZWxldGVkIGZyb20gdGhlIGRhc2hib2FyZCBidXQgdGhlIENESyBzdGFjayBzdGF5ZWQgaW4gQVdTKS5cbiAqICAgLSAqKk1pc3Npbmcgc3RhY2tzKio6IHJlZ2lzdHJ5IGVudHJpZXMgcG9pbnRpbmcgdG8gc3RhY2tzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0XG4gKiAgICAgaW4gQ2xvdWRGb3JtYXRpb24gKGxpa2VseSBhZnRlciBhIG1hbnVhbCBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlbGV0ZS1zdGFja2ApLlxuICpcbiAqIERlc2lnbmVkIGZvciBjcm9uIHVzZTpcbiAqICAgLSBFeGl0cyAwIHdoZW4gdGhlcmUgYXJlIG5vIGZpbmRpbmdzLlxuICogICAtIEV4aXRzIDEgd2hlbiBhdCBsZWFzdCBvbmUgb3JwaGFuZWQgb3IgbWlzc2luZyBzdGFjayBpcyBmb3VuZC5cbiAqICAgLSBFeGl0cyAyIG9uIEFXUyBlcnJvcnMgLyBzY2FuIGZhaWx1cmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1ZGl0LXN0YWNrcyAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAqIHBpcGVsaW5lLW1hbmFnZXIgYXVkaXQtc3RhY2tzIC0tb3JnIGFjbWUgLS1qc29uXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0U3RhY2tzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdhdWRpdC1zdGFja3MnKVxuICAgIC5kZXNjcmlwdGlvbignRGlmZiBDbG91ZEZvcm1hdGlvbiBzdGFja3MgdnMgcGlwZWxpbmVfcmVnaXN0cnkgdG8gZmluZCBvcnBoYW5lZCBvciBtaXNzaW5nIENESyBkZXBsb3ltZW50cycpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZGVmYXVsdHMgdG8gQVdTX1JFR0lPTiBlbnYpJylcbiAgICAub3B0aW9uKCctLXByb2ZpbGUgPHByb2ZpbGU+JywgJ0FXUyBDTEkgcHJvZmlsZScsICdkZWZhdWx0JylcbiAgICAub3B0aW9uKCctLW9yZyA8b3JnSWQ+JywgJ0ZpbHRlciBib3RoIHJlZ2lzdHJ5IGFuZCBzdGFjayBzY2FuIHRvIGEgc2luZ2xlIG9yZycpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCByZXN1bHRzIGFzIEpTT04nLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXZlcmlmeS1zc2wnLCAnRW5hYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgIC5vcHRpb24oJy0tbm8tdmVyaWZ5LXNzbCcsICdEaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdBdWRpdCBTdGFja3MnKTtcbiAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgIGNvbnN0IHJlZ2lvbiA9IG9wdGlvbnMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OIHx8ICd1cy1lYXN0LTEnO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBGZXRjaCB0aGUgcGxhdGZvcm0ncyB2aWV3IG9mIHJlZ2lzdGVyZWQgcGlwZWxpbmVzLlxuICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIHJlZ2lzdHJ5IGZyb20gcGxhdGZvcm0nLCB7IG9yZzogb3B0aW9ucy5vcmcgPz8gJyhhbGwpJyB9KTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZWdpc3RyeVJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBlbnRyaWVzOiBSZWdpc3RyeUVudHJ5W10gfT4oXG4gICAgICAgICAgYC9hcGkvcGlwZWxpbmVzL3JlZ2lzdHJ5JHtvcHRpb25zLm9yZyA/IGA/b3JnSWQ9JHtlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5vcmcpfWAgOiAnJ31gLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbnRyaWVzOiBSZWdpc3RyeUVudHJ5W10gPSAocmVnaXN0cnlSZXMgYXMgeyBlbnRyaWVzPzogUmVnaXN0cnlFbnRyeVtdIH0pPy5lbnRyaWVzXG4gICAgICAgICAgPz8gKHJlZ2lzdHJ5UmVzIGFzIHsgZGF0YT86IHsgZW50cmllcz86IFJlZ2lzdHJ5RW50cnlbXSB9IH0pPy5kYXRhPy5lbnRyaWVzXG4gICAgICAgICAgPz8gW107XG5cbiAgICAgICAgLy8gRmV0Y2ggc3RhY2tzIGZyb20gQ2xvdWRGb3JtYXRpb24uIERlc2NyaWJlU3RhY2tzIChubyBTdGFja05hbWUpIHJldHVybnMgZXZlcnlcbiAgICAgICAgLy8gYWN0aXZlIHN0YWNrIFdJVEggaXRzIHRhZ3MgaW4gb25lIHBhZ2luYXRlZCBzd2VlcCDigJQgYXZvaWRpbmcgdGhlIE4rMVxuICAgICAgICAvLyBEZXNjcmliZVN0YWNrcy1wZXItc3RhY2sgdGhlIG9sZCBMaXN0U3RhY2tzIHBhdGggbmVlZGVkIChMaXN0U3RhY2tzIG9taXRzIHRhZ3MpXG4gICAgICAgIC8vIGFuZCB0aGUgQVBJIHRocm90dGxpbmcgaXQgY2F1c2VkIG9uIGFjY291bnRzIHdpdGggbWFueSBzdGFja3MuXG4gICAgICAgIHByaW50SW5mbygnTGlzdGluZyBDbG91ZEZvcm1hdGlvbiBzdGFja3MnLCB7IHJlZ2lvbiB9KTtcbiAgICAgICAgY29uc3QgY2ZuID0gbmV3IENsb3VkRm9ybWF0aW9uQ2xpZW50KHsgcmVnaW9uIH0pO1xuICAgICAgICBjb25zdCBzdGFja3M6IFN0YWNrSW5mb1tdID0gW107XG4gICAgICAgIGNvbnN0IGFjdGl2ZVN0YXR1c2VzID0gbmV3IFNldChBQ1RJVkVfU1RBVFVTRVMpO1xuICAgICAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwYWdlcyA9IDA7XG4gICAgICAgIC8vIEJhY2tzdG9wIG9ubHkgKH4yMGsgc3RhY2tzIGF0IH4xMDAvcGFnZSksIG5vdCBhbiBleHBlY3RlZCBsaW1pdC4gQSBGVUxMIHNjYW5cbiAgICAgICAgLy8gbWF0dGVyczogdHJ1bmNhdGluZyB3b3VsZCBkaWZmIHRoZSByZWdpc3RyeSBhZ2FpbnN0IGFuIGluY29tcGxldGUgc3RhY2sgc2V0IGFuZFxuICAgICAgICAvLyByZXBvcnQgbGl2ZSBzdGFja3MgYXMgYG1pc3Npbmctc3RhY2tgLiBTbyBpZiB0aGlzIGlzIGV2ZXIgaGl0LCB3YXJuIExPVURMWSByYXRoZXJcbiAgICAgICAgLy8gdGhhbiBzaWxlbnRseSB1bmRlci1yZXBvcnRpbmcgKHRoZSBwcmV2aW91cyBjb2RlIGNhcHBlZCBhdCAyMCBwYWdlcyBzaWxlbnRseSkuXG4gICAgICAgIGNvbnN0IE1BWF9QQUdFUyA9IDIwMDtcbiAgICAgICAgbGV0IHRydW5jYXRlZCA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IGNmbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBOZXh0VG9rZW46IG5leHRUb2tlbiB9KSk7XG4gICAgICAgICAgZm9yIChjb25zdCBzdGFjayBvZiByZXNwLlN0YWNrcyA/PyBbXSkge1xuICAgICAgICAgICAgaWYgKCFzdGFjay5TdGFja05hbWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFhY3RpdmVTdGF0dXNlcy5oYXMoc3RhY2suU3RhY2tTdGF0dXMgPz8gJycpKSBjb250aW51ZTsgLy8gc2tpcCBpbi1wcm9ncmVzcy9yb2xsZWQtYmFjay9kZWxldGVkXG4gICAgICAgICAgICBjb25zdCB0YWdzID0gc3RhY2suVGFncyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHBiVGFnID0gdGFncy5maW5kKCh0KSA9PiB0LktleSA9PT0gJ3BpcGVsaW5lLWJ1aWxkZXInKT8uVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcmdUYWcgPSB0YWdzLmZpbmQoKHQpID0+IHQuS2V5ID09PSAnT3JnSWQnIHx8IHQuS2V5ID09PSAnb3JnSWQnKT8uVmFsdWU7XG4gICAgICAgICAgICBpZiAoIXBiVGFnKSBjb250aW51ZTsgLy8gTm90IGEgcGlwZWxpbmUtYnVpbGRlciBzdGFjay5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLm9yZyAmJiBvcmdUYWcgJiYgb3JnVGFnICE9PSBvcHRpb25zLm9yZykgY29udGludWU7IC8vIFdyb25nIG9yZyBmaWx0ZXIuXG4gICAgICAgICAgICBzdGFja3MucHVzaCh7XG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogc3RhY2suU3RhY2tOYW1lLFxuICAgICAgICAgICAgICBzdGFja1N0YXR1czogc3RhY2suU3RhY2tTdGF0dXMgPz8gJ1VOS05PV04nLFxuICAgICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICAgIHBpcGVsaW5lQnVpbGRlclRhZzogcGJUYWcsXG4gICAgICAgICAgICAgIG9yZ0lkVGFnOiBvcmdUYWcsXG4gICAgICAgICAgICAgIGNyZWF0aW9uVGltZTogc3RhY2suQ3JlYXRpb25UaW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHRUb2tlbiA9IHJlc3AuTmV4dFRva2VuO1xuICAgICAgICAgIHBhZ2VzKys7XG4gICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBwYWdlcyA+PSBNQVhfUEFHRVMpIHsgdHJ1bmNhdGVkID0gdHJ1ZTsgYnJlYWs7IH1cbiAgICAgICAgfSB3aGlsZSAobmV4dFRva2VuKTtcbiAgICAgICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgICAgIHByaW50V2FybmluZyhgU3RhY2sgc2NhbiBoaXQgdGhlICR7TUFYX1BBR0VTfS1wYWdlIHNhZmV0eSBjYXAg4oCUIHJlc3VsdHMgbWF5IGJlIElOQ09NUExFVEUgYW5kICdtaXNzaW5nLXN0YWNrJyBmaW5kaW5ncyBjb3VsZCBiZSBmYWxzZS4gTmFycm93IGJ5IC0tcmVnaW9uLy0tb3JnLCBvciByYWlzZSBNQVhfUEFHRVMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaWZmLlxuICAgICAgICBjb25zdCByZWdpc3RyeVN0YWNrTmFtZXMgPSBuZXcgU2V0KGVudHJpZXMubWFwKChlKSA9PiBlLnN0YWNrTmFtZSkuZmlsdGVyKChuKTogbiBpcyBzdHJpbmcgPT4gISFuKSk7XG4gICAgICAgIGNvbnN0IGNmblN0YWNrTmFtZXMgPSBuZXcgU2V0KHN0YWNrcy5tYXAoKHMpID0+IHMuc3RhY2tOYW1lKSk7XG5cbiAgICAgICAgY29uc3QgZmluZGluZ3M6IEF1ZGl0RmluZGluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgb2Ygc3RhY2tzKSB7XG4gICAgICAgICAgaWYgKCFyZWdpc3RyeVN0YWNrTmFtZXMuaGFzKHN0YWNrLnN0YWNrTmFtZSkpIHtcbiAgICAgICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnb3JwaGFuZWQtc3RhY2snLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgQ2xvdWRGb3JtYXRpb24gc3RhY2sgdGFnZ2VkIHBpcGVsaW5lLWJ1aWxkZXI9JHtzdGFjay5waXBlbGluZUJ1aWxkZXJUYWcgPz8gJyh1bnNldCknfSBoYXMgbm8gbWF0Y2hpbmcgcGlwZWxpbmVfcmVnaXN0cnkgZW50cnlgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmIChlbnRyeS5zdGFja05hbWUgJiYgIWNmblN0YWNrTmFtZXMuaGFzKGVudHJ5LnN0YWNrTmFtZSkpIHtcbiAgICAgICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnbWlzc2luZy1zdGFjaycsXG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogZW50cnkuc3RhY2tOYW1lLFxuICAgICAgICAgICAgICBwaXBlbGluZUlkOiBlbnRyeS5waXBlbGluZUlkLFxuICAgICAgICAgICAgICBwaXBlbGluZU5hbWU6IGVudHJ5LnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgUmVnaXN0cnkgZW50cnkgcmVmZXJlbmNlcyBzdGFjayAke2VudHJ5LnN0YWNrTmFtZX0gYnV0IG5vIHN1Y2ggc3RhY2sgZXhpc3RzIGluIENsb3VkRm9ybWF0aW9uYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gZmluZGluZ3MubGVuZ3RoID4gMCA/IDEgOiAwO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzY2FubmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICAgIG9yZ0ZpbHRlcjogb3B0aW9ucy5vcmcsXG4gICAgICAgICAgICByZWdpc3RyeUVudHJpZXM6IGVudHJpZXMubGVuZ3RoLFxuICAgICAgICAgICAgY2ZuU3RhY2tzOiBzdGFja3MubGVuZ3RoLFxuICAgICAgICAgICAgZmluZGluZ3MsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdBdWRpdCBSZXN1bHRzJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdDb3VudHMnLCB7XG4gICAgICAgICAgICByZWdpc3RyeUVudHJpZXM6IFN0cmluZyhlbnRyaWVzLmxlbmd0aCksXG4gICAgICAgICAgICBjZm5TdGFja3M6IFN0cmluZyhzdGFja3MubGVuZ3RoKSxcbiAgICAgICAgICAgIGZpbmRpbmdzOiBTdHJpbmcoZmluZGluZ3MubGVuZ3RoKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoJ05vIGRyaWZ0IGJldHdlZW4gcGlwZWxpbmVfcmVnaXN0cnkgYW5kIENsb3VkRm9ybWF0aW9uJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykge1xuICAgICAgICAgICAgICBpZiAoZi50eXBlID09PSAnb3JwaGFuZWQtc3RhY2snKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBPUlBIQU5FRCAgJHtmLnN0YWNrTmFtZX0g4oCUICR7Zi5kZXRhaWx9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBNSVNTSU5HICAgJHtmLnN0YWNrTmFtZX0gKHBpcGVsaW5lICR7Zi5waXBlbGluZUlkID8/ICc/J30pIOKAlCAke2YuZGV0YWlsfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmludEVycm9yKGAke2ZpbmRpbmdzLmxlbmd0aH0gZHJpZnQgZmluZGluZyR7ZmluZGluZ3MubGVuZ3RoID09PSAxID8gJycgOiAncyd9LiBSZXZpZXcgYW5kIHJlY29uY2lsZSBtYW51YWxseS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiBmYWxzZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdhdWRpdC1zdGFja3MnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDIpO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtc3RhY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2F1ZGl0LXN0YWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQTJCM0csTUFBTSxlQUFlLEdBQUc7SUFDdEIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCO0lBQ2hFLGlCQUFpQixFQUFFLDBCQUEwQjtDQUM5QyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFnQjtJQUMxQyxPQUFPO1NBQ0osT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNqQixXQUFXLENBQUMsNkZBQTZGLENBQUM7U0FDMUcsTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlDQUF5QyxDQUFDO1NBQ3RFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUM7U0FDM0QsTUFBTSxDQUFDLGVBQWUsRUFBRSxxREFBcUQsQ0FBQztTQUM5RSxNQUFNLENBQUMsUUFBUSxFQUFFLHdCQUF3QixFQUFFLEtBQUssQ0FBQztTQUNqRCxNQUFNLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO1NBQzdELE1BQU0sQ0FB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QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUU7YUFDbEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ2xpZW50LCBEZXNjcmliZVN0YWNrc0NvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmludGVyZmFjZSBSZWdpc3RyeUVudHJ5IHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZUFybjogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgc3RhY2tOYW1lPzogc3RyaW5nO1xuICByZWdpb24/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdGFja0luZm8ge1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgc3RhY2tTdGF0dXM6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIHBpcGVsaW5lQnVpbGRlclRhZz86IHN0cmluZztcbiAgb3JnSWRUYWc/OiBzdHJpbmc7XG4gIGNyZWF0aW9uVGltZT86IERhdGU7XG59XG5cbmludGVyZmFjZSBBdWRpdEZpbmRpbmcge1xuICB0eXBlOiAnb3JwaGFuZWQtc3RhY2snIHwgJ21pc3Npbmctc3RhY2snO1xuICBzdGFja05hbWU/OiBzdHJpbmc7XG4gIHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgZGV0YWlsOiBzdHJpbmc7XG59XG5cbmNvbnN0IEFDVElWRV9TVEFUVVNFUyA9IFtcbiAgJ0NSRUFURV9DT01QTEVURScsICdVUERBVEVfQ09NUExFVEUnLCAnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJyxcbiAgJ0lNUE9SVF9DT01QTEVURScsICdJTVBPUlRfUk9MTEJBQ0tfQ09NUExFVEUnLFxuXTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBhdWRpdC1zdGFja3NgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRGlmZnMgQ2xvdWRGb3JtYXRpb24gc3RhY2tzIChmaWx0ZXJlZCB0byB0aG9zZSB0YWdnZWQgd2l0aCBgcGlwZWxpbmUtYnVpbGRlcmApXG4gKiBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzIGBwaXBlbGluZV9yZWdpc3RyeWAgdGFibGUuIFN1cmZhY2VzOlxuICogICAtICoqT3JwaGFuZWQgc3RhY2tzKio6IHRhZ2dlZCBzdGFja3Mgd2l0aCBubyBEQiByZWNvcmQgKGxpa2VseSBsZWZ0b3ZlcnMgYWZ0ZXJcbiAqICAgICBhIHBpcGVsaW5lIHdhcyBkZWxldGVkIGZyb20gdGhlIGRhc2hib2FyZCBidXQgdGhlIENESyBzdGFjayBzdGF5ZWQgaW4gQVdTKS5cbiAqICAgLSAqKk1pc3Npbmcgc3RhY2tzKio6IHJlZ2lzdHJ5IGVudHJpZXMgcG9pbnRpbmcgdG8gc3RhY2tzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0XG4gKiAgICAgaW4gQ2xvdWRGb3JtYXRpb24gKGxpa2VseSBhZnRlciBhIG1hbnVhbCBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlbGV0ZS1zdGFja2ApLlxuICpcbiAqIERlc2lnbmVkIGZvciBjcm9uIHVzZTpcbiAqICAgLSBFeGl0cyAwIHdoZW4gdGhlcmUgYXJlIG5vIGZpbmRpbmdzLlxuICogICAtIEV4aXRzIDEgd2hlbiBhdCBsZWFzdCBvbmUgb3JwaGFuZWQgb3IgbWlzc2luZyBzdGFjayBpcyBmb3VuZC5cbiAqICAgLSBFeGl0cyAyIG9uIEFXUyBlcnJvcnMgLyBzY2FuIGZhaWx1cmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1ZGl0IHN0YWNrcyAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAqIHBpcGVsaW5lLW1hbmFnZXIgYXVkaXQgc3RhY2tzIC0tb3JnIGFjbWUgLS1qc29uXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0U3RhY2tzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdzdGFja3MnKVxuICAgIC5kZXNjcmlwdGlvbignRGlmZiBDbG91ZEZvcm1hdGlvbiBzdGFja3MgdnMgcGlwZWxpbmVfcmVnaXN0cnkgdG8gZmluZCBvcnBoYW5lZCBvciBtaXNzaW5nIENESyBkZXBsb3ltZW50cycpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZGVmYXVsdHMgdG8gQVdTX1JFR0lPTiBlbnYpJylcbiAgICAub3B0aW9uKCctLXByb2ZpbGUgPHByb2ZpbGU+JywgJ0FXUyBDTEkgcHJvZmlsZScsICdkZWZhdWx0JylcbiAgICAub3B0aW9uKCctLW9yZyA8b3JnSWQ+JywgJ0ZpbHRlciBib3RoIHJlZ2lzdHJ5IGFuZCBzdGFjayBzY2FuIHRvIGEgc2luZ2xlIG9yZycpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCByZXN1bHRzIGFzIEpTT04nLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXZlcmlmeS1zc2wnLCAnRW5hYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgIC5vcHRpb24oJy0tbm8tdmVyaWZ5LXNzbCcsICdEaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdBdWRpdCBTdGFja3MnKTtcbiAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgIGNvbnN0IHJlZ2lvbiA9IG9wdGlvbnMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OIHx8ICd1cy1lYXN0LTEnO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBGZXRjaCB0aGUgcGxhdGZvcm0ncyB2aWV3IG9mIHJlZ2lzdGVyZWQgcGlwZWxpbmVzLlxuICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIHJlZ2lzdHJ5IGZyb20gcGxhdGZvcm0nLCB7IG9yZzogb3B0aW9ucy5vcmcgPz8gJyhhbGwpJyB9KTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZWdpc3RyeVJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBlbnRyaWVzOiBSZWdpc3RyeUVudHJ5W10gfT4oXG4gICAgICAgICAgYC9hcGkvcGlwZWxpbmVzL3JlZ2lzdHJ5JHtvcHRpb25zLm9yZyA/IGA/b3JnSWQ9JHtlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5vcmcpfWAgOiAnJ31gLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbnRyaWVzOiBSZWdpc3RyeUVudHJ5W10gPSAocmVnaXN0cnlSZXMgYXMgeyBlbnRyaWVzPzogUmVnaXN0cnlFbnRyeVtdIH0pPy5lbnRyaWVzXG4gICAgICAgICAgPz8gKHJlZ2lzdHJ5UmVzIGFzIHsgZGF0YT86IHsgZW50cmllcz86IFJlZ2lzdHJ5RW50cnlbXSB9IH0pPy5kYXRhPy5lbnRyaWVzXG4gICAgICAgICAgPz8gW107XG5cbiAgICAgICAgLy8gRmV0Y2ggc3RhY2tzIGZyb20gQ2xvdWRGb3JtYXRpb24uIERlc2NyaWJlU3RhY2tzIChubyBTdGFja05hbWUpIHJldHVybnMgZXZlcnlcbiAgICAgICAgLy8gYWN0aXZlIHN0YWNrIFdJVEggaXRzIHRhZ3MgaW4gb25lIHBhZ2luYXRlZCBzd2VlcCDigJQgYXZvaWRpbmcgdGhlIE4rMVxuICAgICAgICAvLyBEZXNjcmliZVN0YWNrcy1wZXItc3RhY2sgdGhlIG9sZCBMaXN0U3RhY2tzIHBhdGggbmVlZGVkIChMaXN0U3RhY2tzIG9taXRzIHRhZ3MpXG4gICAgICAgIC8vIGFuZCB0aGUgQVBJIHRocm90dGxpbmcgaXQgY2F1c2VkIG9uIGFjY291bnRzIHdpdGggbWFueSBzdGFja3MuXG4gICAgICAgIHByaW50SW5mbygnTGlzdGluZyBDbG91ZEZvcm1hdGlvbiBzdGFja3MnLCB7IHJlZ2lvbiB9KTtcbiAgICAgICAgY29uc3QgY2ZuID0gbmV3IENsb3VkRm9ybWF0aW9uQ2xpZW50KHsgcmVnaW9uIH0pO1xuICAgICAgICBjb25zdCBzdGFja3M6IFN0YWNrSW5mb1tdID0gW107XG4gICAgICAgIGNvbnN0IGFjdGl2ZVN0YXR1c2VzID0gbmV3IFNldChBQ1RJVkVfU1RBVFVTRVMpO1xuICAgICAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwYWdlcyA9IDA7XG4gICAgICAgIC8vIEJhY2tzdG9wIG9ubHkgKH4yMGsgc3RhY2tzIGF0IH4xMDAvcGFnZSksIG5vdCBhbiBleHBlY3RlZCBsaW1pdC4gQSBGVUxMIHNjYW5cbiAgICAgICAgLy8gbWF0dGVyczogdHJ1bmNhdGluZyB3b3VsZCBkaWZmIHRoZSByZWdpc3RyeSBhZ2FpbnN0IGFuIGluY29tcGxldGUgc3RhY2sgc2V0IGFuZFxuICAgICAgICAvLyByZXBvcnQgbGl2ZSBzdGFja3MgYXMgYG1pc3Npbmctc3RhY2tgLiBTbyBpZiB0aGlzIGlzIGV2ZXIgaGl0LCB3YXJuIExPVURMWSByYXRoZXJcbiAgICAgICAgLy8gdGhhbiBzaWxlbnRseSB1bmRlci1yZXBvcnRpbmcgKHRoZSBwcmV2aW91cyBjb2RlIGNhcHBlZCBhdCAyMCBwYWdlcyBzaWxlbnRseSkuXG4gICAgICAgIGNvbnN0IE1BWF9QQUdFUyA9IDIwMDtcbiAgICAgICAgbGV0IHRydW5jYXRlZCA9IGZhbHNlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IGNmbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoeyBOZXh0VG9rZW46IG5leHRUb2tlbiB9KSk7XG4gICAgICAgICAgZm9yIChjb25zdCBzdGFjayBvZiByZXNwLlN0YWNrcyA/PyBbXSkge1xuICAgICAgICAgICAgaWYgKCFzdGFjay5TdGFja05hbWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFhY3RpdmVTdGF0dXNlcy5oYXMoc3RhY2suU3RhY2tTdGF0dXMgPz8gJycpKSBjb250aW51ZTsgLy8gc2tpcCBpbi1wcm9ncmVzcy9yb2xsZWQtYmFjay9kZWxldGVkXG4gICAgICAgICAgICBjb25zdCB0YWdzID0gc3RhY2suVGFncyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHBiVGFnID0gdGFncy5maW5kKCh0KSA9PiB0LktleSA9PT0gJ3BpcGVsaW5lLWJ1aWxkZXInKT8uVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcmdUYWcgPSB0YWdzLmZpbmQoKHQpID0+IHQuS2V5ID09PSAnT3JnSWQnIHx8IHQuS2V5ID09PSAnb3JnSWQnKT8uVmFsdWU7XG4gICAgICAgICAgICBpZiAoIXBiVGFnKSBjb250aW51ZTsgLy8gTm90IGEgcGlwZWxpbmUtYnVpbGRlciBzdGFjay5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLm9yZyAmJiBvcmdUYWcgJiYgb3JnVGFnICE9PSBvcHRpb25zLm9yZykgY29udGludWU7IC8vIFdyb25nIG9yZyBmaWx0ZXIuXG4gICAgICAgICAgICBzdGFja3MucHVzaCh7XG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogc3RhY2suU3RhY2tOYW1lLFxuICAgICAgICAgICAgICBzdGFja1N0YXR1czogc3RhY2suU3RhY2tTdGF0dXMgPz8gJ1VOS05PV04nLFxuICAgICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICAgIHBpcGVsaW5lQnVpbGRlclRhZzogcGJUYWcsXG4gICAgICAgICAgICAgIG9yZ0lkVGFnOiBvcmdUYWcsXG4gICAgICAgICAgICAgIGNyZWF0aW9uVGltZTogc3RhY2suQ3JlYXRpb25UaW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHRUb2tlbiA9IHJlc3AuTmV4dFRva2VuO1xuICAgICAgICAgIHBhZ2VzKys7XG4gICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBwYWdlcyA+PSBNQVhfUEFHRVMpIHsgdHJ1bmNhdGVkID0gdHJ1ZTsgYnJlYWs7IH1cbiAgICAgICAgfSB3aGlsZSAobmV4dFRva2VuKTtcbiAgICAgICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgICAgIHByaW50V2FybmluZyhgU3RhY2sgc2NhbiBoaXQgdGhlICR7TUFYX1BBR0VTfS1wYWdlIHNhZmV0eSBjYXAg4oCUIHJlc3VsdHMgbWF5IGJlIElOQ09NUExFVEUgYW5kICdtaXNzaW5nLXN0YWNrJyBmaW5kaW5ncyBjb3VsZCBiZSBmYWxzZS4gTmFycm93IGJ5IC0tcmVnaW9uLy0tb3JnLCBvciByYWlzZSBNQVhfUEFHRVMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEaWZmLlxuICAgICAgICBjb25zdCByZWdpc3RyeVN0YWNrTmFtZXMgPSBuZXcgU2V0KGVudHJpZXMubWFwKChlKSA9PiBlLnN0YWNrTmFtZSkuZmlsdGVyKChuKTogbiBpcyBzdHJpbmcgPT4gISFuKSk7XG4gICAgICAgIGNvbnN0IGNmblN0YWNrTmFtZXMgPSBuZXcgU2V0KHN0YWNrcy5tYXAoKHMpID0+IHMuc3RhY2tOYW1lKSk7XG5cbiAgICAgICAgY29uc3QgZmluZGluZ3M6IEF1ZGl0RmluZGluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgb2Ygc3RhY2tzKSB7XG4gICAgICAgICAgaWYgKCFyZWdpc3RyeVN0YWNrTmFtZXMuaGFzKHN0YWNrLnN0YWNrTmFtZSkpIHtcbiAgICAgICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnb3JwaGFuZWQtc3RhY2snLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgQ2xvdWRGb3JtYXRpb24gc3RhY2sgdGFnZ2VkIHBpcGVsaW5lLWJ1aWxkZXI9JHtzdGFjay5waXBlbGluZUJ1aWxkZXJUYWcgPz8gJyh1bnNldCknfSBoYXMgbm8gbWF0Y2hpbmcgcGlwZWxpbmVfcmVnaXN0cnkgZW50cnlgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmIChlbnRyeS5zdGFja05hbWUgJiYgIWNmblN0YWNrTmFtZXMuaGFzKGVudHJ5LnN0YWNrTmFtZSkpIHtcbiAgICAgICAgICAgIGZpbmRpbmdzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnbWlzc2luZy1zdGFjaycsXG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogZW50cnkuc3RhY2tOYW1lLFxuICAgICAgICAgICAgICBwaXBlbGluZUlkOiBlbnRyeS5waXBlbGluZUlkLFxuICAgICAgICAgICAgICBwaXBlbGluZU5hbWU6IGVudHJ5LnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgUmVnaXN0cnkgZW50cnkgcmVmZXJlbmNlcyBzdGFjayAke2VudHJ5LnN0YWNrTmFtZX0gYnV0IG5vIHN1Y2ggc3RhY2sgZXhpc3RzIGluIENsb3VkRm9ybWF0aW9uYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gZmluZGluZ3MubGVuZ3RoID4gMCA/IDEgOiAwO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzY2FubmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICAgIG9yZ0ZpbHRlcjogb3B0aW9ucy5vcmcsXG4gICAgICAgICAgICByZWdpc3RyeUVudHJpZXM6IGVudHJpZXMubGVuZ3RoLFxuICAgICAgICAgICAgY2ZuU3RhY2tzOiBzdGFja3MubGVuZ3RoLFxuICAgICAgICAgICAgZmluZGluZ3MsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdBdWRpdCBSZXN1bHRzJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdDb3VudHMnLCB7XG4gICAgICAgICAgICByZWdpc3RyeUVudHJpZXM6IFN0cmluZyhlbnRyaWVzLmxlbmd0aCksXG4gICAgICAgICAgICBjZm5TdGFja3M6IFN0cmluZyhzdGFja3MubGVuZ3RoKSxcbiAgICAgICAgICAgIGZpbmRpbmdzOiBTdHJpbmcoZmluZGluZ3MubGVuZ3RoKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoJ05vIGRyaWZ0IGJldHdlZW4gcGlwZWxpbmVfcmVnaXN0cnkgYW5kIENsb3VkRm9ybWF0aW9uJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykge1xuICAgICAgICAgICAgICBpZiAoZi50eXBlID09PSAnb3JwaGFuZWQtc3RhY2snKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBPUlBIQU5FRCAgJHtmLnN0YWNrTmFtZX0g4oCUICR7Zi5kZXRhaWx9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBNSVNTSU5HICAgJHtmLnN0YWNrTmFtZX0gKHBpcGVsaW5lICR7Zi5waXBlbGluZUlkID8/ICc/J30pIOKAlCAke2YuZGV0YWlsfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmludEVycm9yKGAke2ZpbmRpbmdzLmxlbmd0aH0gZHJpZnQgZmluZGluZyR7ZmluZGluZ3MubGVuZ3RoID09PSAxID8gJycgOiAncyd9LiBSZXZpZXcgYW5kIHJlY29uY2lsZSBtYW51YWxseS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiBmYWxzZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdhdWRpdC1zdGFja3MnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDIpO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
@@ -13,8 +13,8 @@ import { Command } from 'commander';
|
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```bash
|
|
16
|
-
* pipeline-manager audit
|
|
17
|
-
* pipeline-manager audit
|
|
16
|
+
* pipeline-manager audit tokens --region us-east-1 --warn-days 7
|
|
17
|
+
* pipeline-manager audit tokens --region us-east-1 --json
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
20
|
export declare function auditTokens(program: Command): void;
|
|
@@ -21,13 +21,13 @@ import { printError, printInfo, printSection, printSuccess, printWarning } from
|
|
|
21
21
|
*
|
|
22
22
|
* @example
|
|
23
23
|
* ```bash
|
|
24
|
-
* pipeline-manager audit
|
|
25
|
-
* pipeline-manager audit
|
|
24
|
+
* pipeline-manager audit tokens --region us-east-1 --warn-days 7
|
|
25
|
+
* pipeline-manager audit tokens --region us-east-1 --json
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
export function auditTokens(program) {
|
|
29
29
|
program
|
|
30
|
-
.command('
|
|
30
|
+
.command('tokens')
|
|
31
31
|
.description('Scan stored platform tokens in AWS Secrets Manager and report upcoming expirations')
|
|
32
32
|
.option('--region <region>', 'AWS region (defaults to AWS_REGION env)')
|
|
33
33
|
.option('--profile <profile>', 'AWS CLI profile', 'default')
|
|
@@ -131,7 +131,7 @@ export function auditTokens(program) {
|
|
|
131
131
|
: `expires in ${e.daysUntilExpiry} day${e.daysUntilExpiry === 1 ? '' : 's'}`;
|
|
132
132
|
printWarning(`${e.secretName} — ${label}`);
|
|
133
133
|
}
|
|
134
|
-
printError(`${atRisk.length} secret${atRisk.length === 1 ? '' : 's'} need rotation. Run \`pipeline-manager store-token --days <N>\` to refresh.`);
|
|
134
|
+
printError(`${atRisk.length} secret${atRisk.length === 1 ? '' : 's'} need rotation. Run \`pipeline-manager infra store-token --days <N>\` to refresh.`);
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
process.exit(exitCode);
|
|
@@ -146,4 +146,4 @@ export function auditTokens(program) {
|
|
|
146
146
|
}
|
|
147
147
|
});
|
|
148
148
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2F1ZGl0LXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBVTNHOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsT0FBTztTQUNKLE9BQU8sQ0FBQyxjQUFjLENBQUM7U0FDdkIsV0FBVyxDQUFDLG9GQUFvRixDQUFDO1NBQ2pHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5Q0FBeUMsQ0FBQztTQUN0RSxNQUFNLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO1NBQzNELE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSwrQ0FBK0MsRUFBRSxHQUFHLENBQUM7U0FDbEYsTUFBTSxDQUFDLG1CQUFtQixFQUFFLHFDQUFxQyxFQUFFLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixHQUFHLENBQUM7U0FDM0csTUFBTSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxLQUFLLENBQUM7U0FD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Q0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRTthQUNsRCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29yZUNvbnN0YW50cyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkZWNvZGVUb2tlblBheWxvYWQgfSBmcm9tICcuLi91dGlscy9hdXRoLWd1YXJkLmpzJztcbmltcG9ydCB7IGdldFNlY3JldFZhbHVlLCBsaXN0U2VjcmV0cyB9IGZyb20gJy4uL3V0aWxzL2F3cy1zZWNyZXRzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG5pbnRlcmZhY2UgVG9rZW5BdWRpdEVudHJ5IHtcbiAgc2VjcmV0TmFtZTogc3RyaW5nO1xuICBhcm46IHN0cmluZztcbiAgZXhwaXJlc0F0OiBEYXRlO1xuICBkYXlzVW50aWxFeHBpcnk6IG51bWJlcjtcbiAgc3RhdHVzOiAnZXhwaXJlZCcgfCAnZXhwaXJpbmctc29vbicgfCAnb2snO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGF1ZGl0LXRva2Vuc2AgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBTY2FucyBBV1MgU2VjcmV0cyBNYW5hZ2VyIGZvciBzdG9yZWQgcGxhdGZvcm0gSldUcyAobWF0Y2hpbmcgdGhlXG4gKiBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCBuYW1pbmcgY29udmVudGlvbiB1c2VkIGJ5IGBzdG9yZS10b2tlbmApXG4gKiBhbmQgcmVwb3J0cyB3aGljaCBzZWNyZXRzIGFyZSBleHBpcmVkIG9yIGNsb3NlIHRvIGV4cGlyaW5nLlxuICpcbiAqIERlc2lnbmVkIGZvciBjcm9uIHVzZTpcbiAqICAgLSBFeGl0cyAwIHdoZW4gbm90aGluZyBpcyBhdC1yaXNrLlxuICogICAtIEV4aXRzIDEgd2hlbiBhdCBsZWFzdCBvbmUgc2VjcmV0IGlzIGV4cGlyZWQgb3IgZXhwaXJlcyB3aXRoaW4gYC0td2Fybi1kYXlzYC5cbiAqICAgLSBFeGl0cyAyIG9uIEFXUyBlcnJvcnMgLyBzY2FuIGZhaWx1cmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1ZGl0LXRva2VucyAtLXJlZ2lvbiB1cy1lYXN0LTEgLS13YXJuLWRheXMgN1xuICogcGlwZWxpbmUtbWFuYWdlciBhdWRpdC10b2tlbnMgLS1yZWdpb24gdXMtZWFzdC0xIC0tanNvblxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdWRpdFRva2Vucyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgnYXVkaXQtdG9rZW5zJylcbiAgICAuZGVzY3JpcHRpb24oJ1NjYW4gc3RvcmVkIHBsYXRmb3JtIHRva2VucyBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCByZXBvcnQgdXBjb21pbmcgZXhwaXJhdGlvbnMnKVxuICAgIC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKGRlZmF1bHRzIHRvIEFXU19SRUdJT04gZW52KScpXG4gICAgLm9wdGlvbignLS1wcm9maWxlIDxwcm9maWxlPicsICdBV1MgQ0xJIHByb2ZpbGUnLCAnZGVmYXVsdCcpXG4gICAgLm9wdGlvbignLS13YXJuLWRheXMgPGRheXM+JywgJ0ZsYWcgdG9rZW5zIGV4cGlyaW5nIHdpdGhpbiBOIGRheXMgYXMgYXQtcmlzaycsICc3JylcbiAgICAub3B0aW9uKCctLXByZWZpeCA8cHJlZml4PicsICdTZWNyZXRzIE1hbmFnZXIgbmFtZSBwcmVmaXggdG8gc2NhbicsIGAke0NvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWH0vYClcbiAgICAub3B0aW9uKCctLWpzb24nLCAnT3V0cHV0IHJlc3VsdHMgYXMgSlNPTicsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdBdWRpdCBUb2tlbnMnKTtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IG9wdGlvbnMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OIHx8ICd1cy1lYXN0LTEnO1xuICAgICAgY29uc3Qgd2FybkRheXMgPSBwYXJzZUludChvcHRpb25zLndhcm5EYXlzLCAxMCk7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh3YXJuRGF5cykgfHwgd2FybkRheXMgPCAwKSB7XG4gICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgLS13YXJuLWRheXMgdmFsdWUnLCB7IHByb3ZpZGVkOiBvcHRpb25zLndhcm5EYXlzIH0pO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMik7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50SW5mbygnTGlzdGluZyBzZWNyZXRzJywgeyByZWdpb24sIHByZWZpeDogb3B0aW9ucy5wcmVmaXggfSk7XG4gICAgICAgIGNvbnN0IHsgc2VjcmV0cywgdHJ1bmNhdGVkIH0gPSBhd2FpdCBsaXN0U2VjcmV0cyhvcHRpb25zLnByZWZpeCwgeyByZWdpb24sIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB9KTtcbiAgICAgICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgICAgIC8vIEEgdHJ1bmNhdGVkIHN3ZWVwIG1lYW5zIGFuIGV4cGlyaW5nIHRva2VuIHBhc3QgdGhlIGNhcCBjb3VsZCBiZSBtaXNzZWQg4oCUXG4gICAgICAgICAgLy8gbmV2ZXIgcmVwb3J0IFwiYWxsIGNsZWFyXCIgZnJvbSBhbiBpbmNvbXBsZXRlIHNjYW4gKG1pcnJvcnMgYXVkaXQtc3RhY2tzKS5cbiAgICAgICAgICBwcmludFdhcm5pbmcoJ1NlY3JldCBsaXN0aW5nIHdhcyBUUlVOQ0FURUQgKHBhZ2luZyBjYXAgaGl0KSDigJQgcmVzdWx0cyBtYXkgYmUgSU5DT01QTEVURSBhbmQgYW4gZXhwaXJpbmcgdG9rZW4gY291bGQgYmUgbWlzc2VkLiBOYXJyb3cgYnkgLS1wcmVmaXgvLS1yZWdpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25lcyBmb2xsb3dpbmcgdGhlIGA8cHJlZml4Pi88b3JnSWQ+L3BsYXRmb3JtYCBwYXR0ZXJuLlxuICAgICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldHMgPSBzZWNyZXRzLmZpbHRlcigocykgPT4gcy5uYW1lLmVuZHNXaXRoKCcvcGxhdGZvcm0nKSk7XG5cbiAgICAgICAgY29uc3QgZW50cmllczogVG9rZW5BdWRpdEVudHJ5W10gPSBbXTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qgd2FybkN1dG9mZiA9IG5vdyArIHdhcm5EYXlzICogMjQgKiA2MCAqIDYwICogMTAwMDtcblxuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcGxhdGZvcm1TZWNyZXRzKSB7XG4gICAgICAgICAgbGV0IHJhdzogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByYXcgPSBhd2FpdCBnZXRTZWNyZXRWYWx1ZShzLm5hbWUsIHsgcmVnaW9uLCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoYENvdWxkIG5vdCByZWFkICR7cy5uYW1lfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgcGFyc2VkOiB7IHBhc3N3b3JkPzogc3RyaW5nOyBleHBpcmVzQXQ/OiBzdHJpbmcgfTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBTZWNyZXQgJHtzLm5hbWV9IGlzIG5vdCB2YWxpZCBKU09OLCBza2lwcGluZ2ApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUHJlZmVyIHRoZSBleHBsaWNpdCBleHBpcmVzQXQgZmllbGQgd3JpdHRlbiBieSBzdG9yZS10b2tlbjsgZmFsbCBiYWNrXG4gICAgICAgICAgLy8gdG8gZGVjb2RpbmcgdGhlIEpXVCdzIGV4cCBjbGFpbSBpZiB0aGUgZmllbGQgaXMgbWlzc2luZy5cbiAgICAgICAgICBsZXQgZXhwaXJlc0F0OiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChwYXJzZWQuZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBjb25zdCBkID0gbmV3IERhdGUocGFyc2VkLmV4cGlyZXNBdCk7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihkLmdldFRpbWUoKSkpIGV4cGlyZXNBdCA9IGQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGBzdG9yZS10b2tlbmAgd3JpdGVzIHRoZSBKV1QgdG8gdGhlIGNhbm9uaWNhbCBgcGFzc3dvcmRgIGZpZWxkLlxuICAgICAgICAgIGlmICghZXhwaXJlc0F0ICYmIHBhcnNlZC5wYXNzd29yZCkge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRlY29kZVRva2VuUGF5bG9hZChwYXJzZWQucGFzc3dvcmQpO1xuICAgICAgICAgICAgaWYgKHBheWxvYWQ/LmV4cCAmJiB0eXBlb2YgcGF5bG9hZC5leHAgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIGV4cGlyZXNBdCA9IG5ldyBEYXRlKHBheWxvYWQuZXhwICogMTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoYFNlY3JldCAke3MubmFtZX0gaGFzIG5vIGV4cGlyeSBpbmZvcm1hdGlvbiwgc2tpcHBpbmdgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRheXNVbnRpbEV4cGlyeSA9IE1hdGguZmxvb3IoKGV4cGlyZXNBdC5nZXRUaW1lKCkgLSBub3cpIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKTtcbiAgICAgICAgICBjb25zdCBzdGF0dXM6IFRva2VuQXVkaXRFbnRyeVsnc3RhdHVzJ10gPVxuICAgICAgICAgICAgZXhwaXJlc0F0LmdldFRpbWUoKSA8IG5vdyA/ICdleHBpcmVkJ1xuICAgICAgICAgICAgICA6IGV4cGlyZXNBdC5nZXRUaW1lKCkgPCB3YXJuQ3V0b2ZmID8gJ2V4cGlyaW5nLXNvb24nXG4gICAgICAgICAgICAgICAgOiAnb2snO1xuICAgICAgICAgIGVudHJpZXMucHVzaCh7IHNlY3JldE5hbWU6IHMubmFtZSwgYXJuOiBzLmFybiwgZXhwaXJlc0F0LCBkYXlzVW50aWxFeHBpcnksIHN0YXR1cyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGF0UmlzayA9IGVudHJpZXMuZmlsdGVyKChlKSA9PiBlLnN0YXR1cyAhPT0gJ29rJyk7XG4gICAgICAgIC8vIEEgdHJ1bmNhdGVkIHNjYW4gaXMgaXRzZWxmIGEgZmFpbHVyZSBjb25kaXRpb246IGV4aXQgbm9uLXplcm8gc28gY3JvblxuICAgICAgICAvLyBkb2Vzbid0IHJlYWQgYW4gaW5jb21wbGV0ZSBcImFsbCBjbGVhclwiIGFzIHN1Y2Nlc3MuXG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gKGF0Umlzay5sZW5ndGggPiAwIHx8IHRydW5jYXRlZCkgPyAxIDogMDtcblxuICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgc2Nhbm5lZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICB3YXJuRGF5cyxcbiAgICAgICAgICAgIHRvdGFsU2Nhbm5lZDogZW50cmllcy5sZW5ndGgsXG4gICAgICAgICAgICBhdFJpc2tDb3VudDogYXRSaXNrLmxlbmd0aCxcbiAgICAgICAgICAgIHRydW5jYXRlZCxcbiAgICAgICAgICAgIGVudHJpZXM6IGVudHJpZXMubWFwKChlKSA9PiAoeyAuLi5lLCBleHBpcmVzQXQ6IGUuZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCkgfSkpLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50U2VjdGlvbignQXVkaXQgUmVzdWx0cycpO1xuICAgICAgICAgIHByaW50SW5mbyhgU2Nhbm5lZCAke2VudHJpZXMubGVuZ3RofSBwbGF0Zm9ybSBzZWNyZXQke2VudHJpZXMubGVuZ3RoID09PSAxID8gJycgOiAncyd9YCk7XG4gICAgICAgICAgaWYgKGF0Umlzay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0cnVuY2F0ZWQpIHtcbiAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBhdC1yaXNrIHRva2VucyBpbiB0aGUgc2Nhbm5lZCBwYWdlcywgYnV0IHRoZSBzY2FuIHdhcyB0cnVuY2F0ZWQg4oCUIHNvbWUgc2VjcmV0cyB3ZXJlIG5vdCBjaGVja2VkLicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJpbnRTdWNjZXNzKGBBbGwgdG9rZW5zIHZhbGlkIGZvciBhdCBsZWFzdCAke3dhcm5EYXlzfSBkYXlzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBhdFJpc2spIHtcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBlLnN0YXR1cyA9PT0gJ2V4cGlyZWQnXG4gICAgICAgICAgICAgICAgPyBgRVhQSVJFRCAke01hdGguYWJzKGUuZGF5c1VudGlsRXhwaXJ5KX0gZGF5JHtlLmRheXNVbnRpbEV4cGlyeSA9PT0gLTEgPyAnJyA6ICdzJ30gYWdvYFxuICAgICAgICAgICAgICAgIDogYGV4cGlyZXMgaW4gJHtlLmRheXNVbnRpbEV4cGlyeX0gZGF5JHtlLmRheXNVbnRpbEV4cGlyeSA9PT0gMSA/ICcnIDogJ3MnfWA7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZyhgJHtlLnNlY3JldE5hbWV9IOKAlCAke2xhYmVsfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJpbnRFcnJvcihgJHthdFJpc2subGVuZ3RofSBzZWNyZXQke2F0Umlzay5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gbmVlZCByb3RhdGlvbi4gUnVuIFxcYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW4gLS1kYXlzIDxOPlxcYCB0byByZWZyZXNoLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzLmV4aXQoZXhpdENvZGUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IGZhbHNlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ2F1ZGl0LXRva2VucycsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMik7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2F1ZGl0LXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBVTNHOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsT0FBTztTQUNKLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLG9GQUFvRixDQUFDO1NBQ2pHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5Q0FBeUMsQ0FBQztTQUN0RSxNQUFNLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO1NBQzNELE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSwrQ0FBK0MsRUFBRSxHQUFHLENBQUM7U0FDbEYsTUFBTSxDQUFDLG1CQUFtQixFQUFFLHFDQUFxQyxFQUFFLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixHQUFHLENBQUM7U0FDM0csTUFBTSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxLQUFLLENBQUM7U0FD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Q0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRTthQUNsRCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29yZUNvbnN0YW50cyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkZWNvZGVUb2tlblBheWxvYWQgfSBmcm9tICcuLi91dGlscy9hdXRoLWd1YXJkLmpzJztcbmltcG9ydCB7IGdldFNlY3JldFZhbHVlLCBsaXN0U2VjcmV0cyB9IGZyb20gJy4uL3V0aWxzL2F3cy1zZWNyZXRzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG5pbnRlcmZhY2UgVG9rZW5BdWRpdEVudHJ5IHtcbiAgc2VjcmV0TmFtZTogc3RyaW5nO1xuICBhcm46IHN0cmluZztcbiAgZXhwaXJlc0F0OiBEYXRlO1xuICBkYXlzVW50aWxFeHBpcnk6IG51bWJlcjtcbiAgc3RhdHVzOiAnZXhwaXJlZCcgfCAnZXhwaXJpbmctc29vbicgfCAnb2snO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGF1ZGl0LXRva2Vuc2AgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBTY2FucyBBV1MgU2VjcmV0cyBNYW5hZ2VyIGZvciBzdG9yZWQgcGxhdGZvcm0gSldUcyAobWF0Y2hpbmcgdGhlXG4gKiBgcGlwZWxpbmUtYnVpbGRlci88b3JnSWQ+L3BsYXRmb3JtYCBuYW1pbmcgY29udmVudGlvbiB1c2VkIGJ5IGBzdG9yZS10b2tlbmApXG4gKiBhbmQgcmVwb3J0cyB3aGljaCBzZWNyZXRzIGFyZSBleHBpcmVkIG9yIGNsb3NlIHRvIGV4cGlyaW5nLlxuICpcbiAqIERlc2lnbmVkIGZvciBjcm9uIHVzZTpcbiAqICAgLSBFeGl0cyAwIHdoZW4gbm90aGluZyBpcyBhdC1yaXNrLlxuICogICAtIEV4aXRzIDEgd2hlbiBhdCBsZWFzdCBvbmUgc2VjcmV0IGlzIGV4cGlyZWQgb3IgZXhwaXJlcyB3aXRoaW4gYC0td2Fybi1kYXlzYC5cbiAqICAgLSBFeGl0cyAyIG9uIEFXUyBlcnJvcnMgLyBzY2FuIGZhaWx1cmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1ZGl0IHRva2VucyAtLXJlZ2lvbiB1cy1lYXN0LTEgLS13YXJuLWRheXMgN1xuICogcGlwZWxpbmUtbWFuYWdlciBhdWRpdCB0b2tlbnMgLS1yZWdpb24gdXMtZWFzdC0xIC0tanNvblxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdWRpdFRva2Vucyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgndG9rZW5zJylcbiAgICAuZGVzY3JpcHRpb24oJ1NjYW4gc3RvcmVkIHBsYXRmb3JtIHRva2VucyBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCByZXBvcnQgdXBjb21pbmcgZXhwaXJhdGlvbnMnKVxuICAgIC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKGRlZmF1bHRzIHRvIEFXU19SRUdJT04gZW52KScpXG4gICAgLm9wdGlvbignLS1wcm9maWxlIDxwcm9maWxlPicsICdBV1MgQ0xJIHByb2ZpbGUnLCAnZGVmYXVsdCcpXG4gICAgLm9wdGlvbignLS13YXJuLWRheXMgPGRheXM+JywgJ0ZsYWcgdG9rZW5zIGV4cGlyaW5nIHdpdGhpbiBOIGRheXMgYXMgYXQtcmlzaycsICc3JylcbiAgICAub3B0aW9uKCctLXByZWZpeCA8cHJlZml4PicsICdTZWNyZXRzIE1hbmFnZXIgbmFtZSBwcmVmaXggdG8gc2NhbicsIGAke0NvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWH0vYClcbiAgICAub3B0aW9uKCctLWpzb24nLCAnT3V0cHV0IHJlc3VsdHMgYXMgSlNPTicsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdBdWRpdCBUb2tlbnMnKTtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IG9wdGlvbnMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OIHx8ICd1cy1lYXN0LTEnO1xuICAgICAgY29uc3Qgd2FybkRheXMgPSBwYXJzZUludChvcHRpb25zLndhcm5EYXlzLCAxMCk7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh3YXJuRGF5cykgfHwgd2FybkRheXMgPCAwKSB7XG4gICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgLS13YXJuLWRheXMgdmFsdWUnLCB7IHByb3ZpZGVkOiBvcHRpb25zLndhcm5EYXlzIH0pO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMik7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50SW5mbygnTGlzdGluZyBzZWNyZXRzJywgeyByZWdpb24sIHByZWZpeDogb3B0aW9ucy5wcmVmaXggfSk7XG4gICAgICAgIGNvbnN0IHsgc2VjcmV0cywgdHJ1bmNhdGVkIH0gPSBhd2FpdCBsaXN0U2VjcmV0cyhvcHRpb25zLnByZWZpeCwgeyByZWdpb24sIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB9KTtcbiAgICAgICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgICAgIC8vIEEgdHJ1bmNhdGVkIHN3ZWVwIG1lYW5zIGFuIGV4cGlyaW5nIHRva2VuIHBhc3QgdGhlIGNhcCBjb3VsZCBiZSBtaXNzZWQg4oCUXG4gICAgICAgICAgLy8gbmV2ZXIgcmVwb3J0IFwiYWxsIGNsZWFyXCIgZnJvbSBhbiBpbmNvbXBsZXRlIHNjYW4gKG1pcnJvcnMgYXVkaXQtc3RhY2tzKS5cbiAgICAgICAgICBwcmludFdhcm5pbmcoJ1NlY3JldCBsaXN0aW5nIHdhcyBUUlVOQ0FURUQgKHBhZ2luZyBjYXAgaGl0KSDigJQgcmVzdWx0cyBtYXkgYmUgSU5DT01QTEVURSBhbmQgYW4gZXhwaXJpbmcgdG9rZW4gY291bGQgYmUgbWlzc2VkLiBOYXJyb3cgYnkgLS1wcmVmaXgvLS1yZWdpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25lcyBmb2xsb3dpbmcgdGhlIGA8cHJlZml4Pi88b3JnSWQ+L3BsYXRmb3JtYCBwYXR0ZXJuLlxuICAgICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldHMgPSBzZWNyZXRzLmZpbHRlcigocykgPT4gcy5uYW1lLmVuZHNXaXRoKCcvcGxhdGZvcm0nKSk7XG5cbiAgICAgICAgY29uc3QgZW50cmllczogVG9rZW5BdWRpdEVudHJ5W10gPSBbXTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qgd2FybkN1dG9mZiA9IG5vdyArIHdhcm5EYXlzICogMjQgKiA2MCAqIDYwICogMTAwMDtcblxuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcGxhdGZvcm1TZWNyZXRzKSB7XG4gICAgICAgICAgbGV0IHJhdzogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByYXcgPSBhd2FpdCBnZXRTZWNyZXRWYWx1ZShzLm5hbWUsIHsgcmVnaW9uLCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoYENvdWxkIG5vdCByZWFkICR7cy5uYW1lfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgcGFyc2VkOiB7IHBhc3N3b3JkPzogc3RyaW5nOyBleHBpcmVzQXQ/OiBzdHJpbmcgfTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGBTZWNyZXQgJHtzLm5hbWV9IGlzIG5vdCB2YWxpZCBKU09OLCBza2lwcGluZ2ApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUHJlZmVyIHRoZSBleHBsaWNpdCBleHBpcmVzQXQgZmllbGQgd3JpdHRlbiBieSBzdG9yZS10b2tlbjsgZmFsbCBiYWNrXG4gICAgICAgICAgLy8gdG8gZGVjb2RpbmcgdGhlIEpXVCdzIGV4cCBjbGFpbSBpZiB0aGUgZmllbGQgaXMgbWlzc2luZy5cbiAgICAgICAgICBsZXQgZXhwaXJlc0F0OiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChwYXJzZWQuZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBjb25zdCBkID0gbmV3IERhdGUocGFyc2VkLmV4cGlyZXNBdCk7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihkLmdldFRpbWUoKSkpIGV4cGlyZXNBdCA9IGQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGBzdG9yZS10b2tlbmAgd3JpdGVzIHRoZSBKV1QgdG8gdGhlIGNhbm9uaWNhbCBgcGFzc3dvcmRgIGZpZWxkLlxuICAgICAgICAgIGlmICghZXhwaXJlc0F0ICYmIHBhcnNlZC5wYXNzd29yZCkge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRlY29kZVRva2VuUGF5bG9hZChwYXJzZWQucGFzc3dvcmQpO1xuICAgICAgICAgICAgaWYgKHBheWxvYWQ/LmV4cCAmJiB0eXBlb2YgcGF5bG9hZC5leHAgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIGV4cGlyZXNBdCA9IG5ldyBEYXRlKHBheWxvYWQuZXhwICogMTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZXhwaXJlc0F0KSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoYFNlY3JldCAke3MubmFtZX0gaGFzIG5vIGV4cGlyeSBpbmZvcm1hdGlvbiwgc2tpcHBpbmdgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRheXNVbnRpbEV4cGlyeSA9IE1hdGguZmxvb3IoKGV4cGlyZXNBdC5nZXRUaW1lKCkgLSBub3cpIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKTtcbiAgICAgICAgICBjb25zdCBzdGF0dXM6IFRva2VuQXVkaXRFbnRyeVsnc3RhdHVzJ10gPVxuICAgICAgICAgICAgZXhwaXJlc0F0LmdldFRpbWUoKSA8IG5vdyA/ICdleHBpcmVkJ1xuICAgICAgICAgICAgICA6IGV4cGlyZXNBdC5nZXRUaW1lKCkgPCB3YXJuQ3V0b2ZmID8gJ2V4cGlyaW5nLXNvb24nXG4gICAgICAgICAgICAgICAgOiAnb2snO1xuICAgICAgICAgIGVudHJpZXMucHVzaCh7IHNlY3JldE5hbWU6IHMubmFtZSwgYXJuOiBzLmFybiwgZXhwaXJlc0F0LCBkYXlzVW50aWxFeHBpcnksIHN0YXR1cyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGF0UmlzayA9IGVudHJpZXMuZmlsdGVyKChlKSA9PiBlLnN0YXR1cyAhPT0gJ29rJyk7XG4gICAgICAgIC8vIEEgdHJ1bmNhdGVkIHNjYW4gaXMgaXRzZWxmIGEgZmFpbHVyZSBjb25kaXRpb246IGV4aXQgbm9uLXplcm8gc28gY3JvblxuICAgICAgICAvLyBkb2Vzbid0IHJlYWQgYW4gaW5jb21wbGV0ZSBcImFsbCBjbGVhclwiIGFzIHN1Y2Nlc3MuXG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gKGF0Umlzay5sZW5ndGggPiAwIHx8IHRydW5jYXRlZCkgPyAxIDogMDtcblxuICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgc2Nhbm5lZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICB3YXJuRGF5cyxcbiAgICAgICAgICAgIHRvdGFsU2Nhbm5lZDogZW50cmllcy5sZW5ndGgsXG4gICAgICAgICAgICBhdFJpc2tDb3VudDogYXRSaXNrLmxlbmd0aCxcbiAgICAgICAgICAgIHRydW5jYXRlZCxcbiAgICAgICAgICAgIGVudHJpZXM6IGVudHJpZXMubWFwKChlKSA9PiAoeyAuLi5lLCBleHBpcmVzQXQ6IGUuZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCkgfSkpLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50U2VjdGlvbignQXVkaXQgUmVzdWx0cycpO1xuICAgICAgICAgIHByaW50SW5mbyhgU2Nhbm5lZCAke2VudHJpZXMubGVuZ3RofSBwbGF0Zm9ybSBzZWNyZXQke2VudHJpZXMubGVuZ3RoID09PSAxID8gJycgOiAncyd9YCk7XG4gICAgICAgICAgaWYgKGF0Umlzay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0cnVuY2F0ZWQpIHtcbiAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBhdC1yaXNrIHRva2VucyBpbiB0aGUgc2Nhbm5lZCBwYWdlcywgYnV0IHRoZSBzY2FuIHdhcyB0cnVuY2F0ZWQg4oCUIHNvbWUgc2VjcmV0cyB3ZXJlIG5vdCBjaGVja2VkLicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJpbnRTdWNjZXNzKGBBbGwgdG9rZW5zIHZhbGlkIGZvciBhdCBsZWFzdCAke3dhcm5EYXlzfSBkYXlzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBhdFJpc2spIHtcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBlLnN0YXR1cyA9PT0gJ2V4cGlyZWQnXG4gICAgICAgICAgICAgICAgPyBgRVhQSVJFRCAke01hdGguYWJzKGUuZGF5c1VudGlsRXhwaXJ5KX0gZGF5JHtlLmRheXNVbnRpbEV4cGlyeSA9PT0gLTEgPyAnJyA6ICdzJ30gYWdvYFxuICAgICAgICAgICAgICAgIDogYGV4cGlyZXMgaW4gJHtlLmRheXNVbnRpbEV4cGlyeX0gZGF5JHtlLmRheXNVbnRpbEV4cGlyeSA9PT0gMSA/ICcnIDogJ3MnfWA7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZyhgJHtlLnNlY3JldE5hbWV9IOKAlCAke2xhYmVsfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJpbnRFcnJvcihgJHthdFJpc2subGVuZ3RofSBzZWNyZXQke2F0Umlzay5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gbmVlZCByb3RhdGlvbi4gUnVuIFxcYHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzIDxOPlxcYCB0byByZWZyZXNoLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzLmV4aXQoZXhpdENvZGUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IGZhbHNlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ2F1ZGl0LXRva2VucycsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMik7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the `create-pat` command with the CLI program.
|
|
4
|
+
*
|
|
5
|
+
* Mints a named Personal Access Token — a durable, individually-revocable API
|
|
6
|
+
* credential — for CI/automation. Unlike `login` (which returns a short-lived
|
|
7
|
+
* session token), a PAT is the right long-lived credential for scripts.
|
|
8
|
+
*
|
|
9
|
+
* The platform gates PAT creation behind step-up re-authentication, so this
|
|
10
|
+
* command chains three calls: login (→ access token), step-up with the same
|
|
11
|
+
* password (→ step-up token), then POST /user/pats. The PAT binds to the user's
|
|
12
|
+
* active org; pass `--org` to switch first (persists as the active org).
|
|
13
|
+
*
|
|
14
|
+
* The raw token is printed ONCE. `--quiet` prints only `export PLATFORM_TOKEN=…`
|
|
15
|
+
* so it can be `eval`'d — the PAT is itself a valid Bearer credential.
|
|
16
|
+
*
|
|
17
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```bash
|
|
21
|
+
* PLATFORM_PASSWORD=secret pipeline-manager auth pat --name ci-deploy -u ci@example.com
|
|
22
|
+
* pipeline-manager auth pat --name ci --expires-days 30 -u ci@example.com -p secret
|
|
23
|
+
* eval $(PLATFORM_PASSWORD=secret pipeline-manager auth pat --name ci -u ci@example.com --quiet)
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function createPat(program: Command): void;
|
|
27
|
+
//# sourceMappingURL=create-pat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-pat.d.ts","sourceRoot":"","sources":["../../src/commands/create-pat.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqMhD"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import https from 'https';
|
|
4
|
+
import axios from 'axios';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import pico from 'picocolors';
|
|
7
|
+
import { generateExecutionId, TIMEOUTS } from '../config/cli.constants.js';
|
|
8
|
+
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
9
|
+
import { printDebug, printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
10
|
+
import { checkAuthRateLimit, recordAuthFailure, recordAuthSuccess } from '../utils/rate-limiter.js';
|
|
11
|
+
import { isProductionEnv } from '../utils/tls.js';
|
|
12
|
+
const { bold, cyan, green, magenta, yellow } = pico;
|
|
13
|
+
const MAX_EXPIRES_DAYS = 365;
|
|
14
|
+
/**
|
|
15
|
+
* Registers the `create-pat` command with the CLI program.
|
|
16
|
+
*
|
|
17
|
+
* Mints a named Personal Access Token — a durable, individually-revocable API
|
|
18
|
+
* credential — for CI/automation. Unlike `login` (which returns a short-lived
|
|
19
|
+
* session token), a PAT is the right long-lived credential for scripts.
|
|
20
|
+
*
|
|
21
|
+
* The platform gates PAT creation behind step-up re-authentication, so this
|
|
22
|
+
* command chains three calls: login (→ access token), step-up with the same
|
|
23
|
+
* password (→ step-up token), then POST /user/pats. The PAT binds to the user's
|
|
24
|
+
* active org; pass `--org` to switch first (persists as the active org).
|
|
25
|
+
*
|
|
26
|
+
* The raw token is printed ONCE. `--quiet` prints only `export PLATFORM_TOKEN=…`
|
|
27
|
+
* so it can be `eval`'d — the PAT is itself a valid Bearer credential.
|
|
28
|
+
*
|
|
29
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```bash
|
|
33
|
+
* PLATFORM_PASSWORD=secret pipeline-manager auth pat --name ci-deploy -u ci@example.com
|
|
34
|
+
* pipeline-manager auth pat --name ci --expires-days 30 -u ci@example.com -p secret
|
|
35
|
+
* eval $(PLATFORM_PASSWORD=secret pipeline-manager auth pat --name ci -u ci@example.com --quiet)
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function createPat(program) {
|
|
39
|
+
program
|
|
40
|
+
.command('pat')
|
|
41
|
+
.description('Create a named Personal Access Token (long-lived CLI/automation credential)')
|
|
42
|
+
.requiredOption('--name <name>', 'Human-readable token name (e.g. ci-deploy)')
|
|
43
|
+
.option('--expires-days <days>', `Token lifetime in days (1-${MAX_EXPIRES_DAYS})`, '90')
|
|
44
|
+
.option('--scope <scope>', 'Optional token scope')
|
|
45
|
+
.option('-u, --identifier <identifier>', 'Username or email')
|
|
46
|
+
.option('-p, --password <password>', 'Password (prefer PLATFORM_PASSWORD env)')
|
|
47
|
+
.option('--org <orgId>', 'Bind the token to a specific organization (switches active org)')
|
|
48
|
+
.option('--url <url>', 'Platform base URL', process.env.PLATFORM_BASE_URL || 'https://localhost:8443')
|
|
49
|
+
.option('--verify-ssl', 'Enable SSL certificate verification')
|
|
50
|
+
.option('--no-verify-ssl', 'Disable SSL certificate verification')
|
|
51
|
+
.option('--quiet', 'Only print the export statement (useful for eval)')
|
|
52
|
+
.action(async (options) => {
|
|
53
|
+
const executionId = generateExecutionId();
|
|
54
|
+
// SECURITY: this POSTs a plaintext password (login + step-up). Never send it
|
|
55
|
+
// over an unverified TLS connection in production — a MITM would harvest it.
|
|
56
|
+
// Mirrors the guard in `login`. Non-production still honors --no-verify-ssl.
|
|
57
|
+
if (options.verifySsl === false && isProductionEnv()) {
|
|
58
|
+
printError('Refusing to disable TLS verification in production (NODE_ENV=production) — credentials must not be transmitted over an unverified connection. Use a valid certificate, or unset NODE_ENV for local/self-signed development.');
|
|
59
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
60
|
+
}
|
|
61
|
+
// Credentials from flags OR PLATFORM_IDENTIFIER/PLATFORM_PASSWORD env (so the
|
|
62
|
+
// password need not appear in shell history / `ps`).
|
|
63
|
+
const identifier = options.identifier || process.env.PLATFORM_IDENTIFIER;
|
|
64
|
+
const password = options.password || process.env.PLATFORM_PASSWORD;
|
|
65
|
+
const quiet = options.quiet ?? false;
|
|
66
|
+
try {
|
|
67
|
+
// Validate name.
|
|
68
|
+
const name = typeof options.name === 'string' ? options.name.trim() : '';
|
|
69
|
+
if (!name) {
|
|
70
|
+
printError('Token name is required (--name)');
|
|
71
|
+
process.exit(ERROR_CODES.VALIDATION);
|
|
72
|
+
}
|
|
73
|
+
if (name.length > 100) {
|
|
74
|
+
printError('Token name must be 100 characters or fewer');
|
|
75
|
+
process.exit(ERROR_CODES.VALIDATION);
|
|
76
|
+
}
|
|
77
|
+
// Validate expiry → seconds.
|
|
78
|
+
const days = Math.floor(Number(options.expiresDays));
|
|
79
|
+
if (!Number.isFinite(days) || days < 1 || days > MAX_EXPIRES_DAYS) {
|
|
80
|
+
printError(`--expires-days must be an integer between 1 and ${MAX_EXPIRES_DAYS}`);
|
|
81
|
+
process.exit(ERROR_CODES.VALIDATION);
|
|
82
|
+
}
|
|
83
|
+
const expiresIn = days * 86400;
|
|
84
|
+
// Credentials required — step-up needs a password, so --refresh can't work here.
|
|
85
|
+
if (!identifier || !password) {
|
|
86
|
+
printError('create-pat requires --identifier and --password (or PLATFORM_IDENTIFIER/PLATFORM_PASSWORD env)');
|
|
87
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
88
|
+
}
|
|
89
|
+
if (options.password) {
|
|
90
|
+
printWarning('Passing --password on the command line can expose it via shell history; prefer the PLATFORM_PASSWORD env var.');
|
|
91
|
+
}
|
|
92
|
+
// Rate limiting — prevent brute force (keyed to identifier + url, like login).
|
|
93
|
+
const rateLimitMsg = checkAuthRateLimit(identifier, options.url);
|
|
94
|
+
if (rateLimitMsg) {
|
|
95
|
+
printError(rateLimitMsg);
|
|
96
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
97
|
+
}
|
|
98
|
+
if (!quiet) {
|
|
99
|
+
printSection('Create Personal Access Token');
|
|
100
|
+
console.log(`${magenta(`[EXE-${executionId}]`)} ${cyan(bold('Create Personal Access Token'))}`);
|
|
101
|
+
console.log('');
|
|
102
|
+
printInfo('Authenticating', { identifier, url: options.url, verifySsl: options.verifySsl });
|
|
103
|
+
}
|
|
104
|
+
const httpsAgent = new https.Agent({ rejectUnauthorized: options.verifySsl ?? true });
|
|
105
|
+
const timeout = TIMEOUTS.HTTP_REQUEST;
|
|
106
|
+
// 1) Login → session access token.
|
|
107
|
+
const loginUrl = `${options.url}/api/auth/login`;
|
|
108
|
+
printDebug('POST', { url: loginUrl });
|
|
109
|
+
let accessToken;
|
|
110
|
+
try {
|
|
111
|
+
const res = await axios.post(loginUrl, { identifier, password }, { headers: { 'Content-Type': 'application/json' }, httpsAgent, timeout });
|
|
112
|
+
accessToken = res.data?.data?.accessToken;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
recordAuthFailure(identifier, options.url);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
if (!accessToken) {
|
|
119
|
+
recordAuthFailure(identifier, options.url);
|
|
120
|
+
printError('Login failed: no access token in response');
|
|
121
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
122
|
+
}
|
|
123
|
+
recordAuthSuccess(identifier, options.url);
|
|
124
|
+
// 2) Optionally bind to a specific org (persists as the active org, which the
|
|
125
|
+
// PAT inherits).
|
|
126
|
+
if (options.org) {
|
|
127
|
+
if (!quiet)
|
|
128
|
+
printInfo('Switching to organization', { orgId: options.org });
|
|
129
|
+
const switchUrl = `${options.url}/api/auth/switch-org`;
|
|
130
|
+
printDebug('POST', { url: switchUrl });
|
|
131
|
+
const switchRes = await axios.post(switchUrl, { organizationId: options.org }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${accessToken}` }, httpsAgent, timeout });
|
|
132
|
+
const switched = switchRes.data?.data?.accessToken;
|
|
133
|
+
if (!switched) {
|
|
134
|
+
printError('Organization switch failed: no access token in response');
|
|
135
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
136
|
+
}
|
|
137
|
+
accessToken = switched;
|
|
138
|
+
if (!quiet)
|
|
139
|
+
printSuccess(`Switched to organization ${options.org}`);
|
|
140
|
+
}
|
|
141
|
+
// 3) Step-up — re-verify the password to unlock the gated create call.
|
|
142
|
+
// The returned token is short-lived (~60s), so we use it immediately.
|
|
143
|
+
const stepUpUrl = `${options.url}/api/auth/step-up`;
|
|
144
|
+
printDebug('POST', { url: stepUpUrl });
|
|
145
|
+
const stepUpRes = await axios.post(stepUpUrl, { password }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${accessToken}` }, httpsAgent, timeout });
|
|
146
|
+
const stepUpToken = stepUpRes.data?.data?.stepUpToken;
|
|
147
|
+
if (!stepUpToken) {
|
|
148
|
+
printError('Step-up verification failed: no step-up token in response');
|
|
149
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
150
|
+
}
|
|
151
|
+
// 4) Create the PAT.
|
|
152
|
+
const patUrl = `${options.url}/api/user/pats`;
|
|
153
|
+
printDebug('POST', { url: patUrl });
|
|
154
|
+
const patRes = await axios.post(patUrl, { name, expiresIn, ...(options.scope ? { scope: options.scope } : {}) }, {
|
|
155
|
+
headers: {
|
|
156
|
+
'Content-Type': 'application/json',
|
|
157
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
158
|
+
'X-Step-Up-Token': stepUpToken,
|
|
159
|
+
},
|
|
160
|
+
httpsAgent,
|
|
161
|
+
timeout,
|
|
162
|
+
});
|
|
163
|
+
const token = patRes.data?.data?.token;
|
|
164
|
+
const pat = patRes.data?.data?.pat;
|
|
165
|
+
if (!token) {
|
|
166
|
+
printError('Create token failed: no token in response');
|
|
167
|
+
process.exit(ERROR_CODES.API_REQUEST);
|
|
168
|
+
}
|
|
169
|
+
// Quiet mode: emit only the export line (the PAT is a valid Bearer token).
|
|
170
|
+
if (quiet) {
|
|
171
|
+
console.log(`export PLATFORM_TOKEN=${token}`);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
console.log('');
|
|
175
|
+
printSuccess('Personal access token created');
|
|
176
|
+
console.log('');
|
|
177
|
+
printKeyValue({
|
|
178
|
+
'Name': pat?.name ?? name,
|
|
179
|
+
'Token ID (jti)': pat?.jti ?? '(unknown)',
|
|
180
|
+
'Expires': pat?.expiresAt ?? `${days} day(s)`,
|
|
181
|
+
...(pat?.scope ? { Scope: pat.scope } : {}),
|
|
182
|
+
});
|
|
183
|
+
console.log('');
|
|
184
|
+
console.log(yellow(bold('Copy your token now — it will not be shown again:')));
|
|
185
|
+
console.log(green(token));
|
|
186
|
+
console.log('');
|
|
187
|
+
printInfo('Tip: use it as PLATFORM_TOKEN for subsequent commands:');
|
|
188
|
+
console.log(green(' export PLATFORM_TOKEN=<token>'));
|
|
189
|
+
console.log(green(` # or: eval $(pipeline-manager auth pat --name ${name} -u ${identifier} --quiet)`));
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
if (axios.isAxiosError(error)) {
|
|
193
|
+
const status = error.response?.status;
|
|
194
|
+
const message = error.response?.data?.message;
|
|
195
|
+
printError('Create token failed', {
|
|
196
|
+
status: status ?? 'no response',
|
|
197
|
+
...(message ? { message } : {}),
|
|
198
|
+
});
|
|
199
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
200
|
+
}
|
|
201
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
202
|
+
debug: program.opts().debug,
|
|
203
|
+
exit: true,
|
|
204
|
+
context: { command: 'create-pat', executionId, identifier: options.identifier, url: options.url },
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jcmVhdGUtcGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBdUJwRCxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUU3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQWdCO0lBQ3hDLE9BQU87U0FDSixPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ2QsV0FBVyxDQUFDLDZFQUE2RSxDQUFDO1NBQzFGLGNBQWMsQ0FBQyxlQUFlLEVBQUUsNENBQTRDLENBQUM7U0FDN0UsTUFBTSxDQUFD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QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztnQkFDdEMsTUFBTSxPQUFPLEdBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUE2QixFQUFFLE9BQU8sQ0FBQztnQkFDeEUsVUFBVSxDQUFDLHFCQUFxQixFQUFFO29CQUNoQyxNQUFNLEVBQUUsTUFBTSxJQUFJLGFBQWE7b0JBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDaEMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7YUFDbEcsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUV4ZWN1dGlvbklkLCBUSU1FT1VUUyB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGNoZWNrQXV0aFJhdGVMaW1pdCwgcmVjb3JkQXV0aEZhaWx1cmUsIHJlY29yZEF1dGhTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvcmF0ZS1saW1pdGVyLmpzJztcbmltcG9ydCB7IGlzUHJvZHVjdGlvbkVudiB9IGZyb20gJy4uL3V0aWxzL3Rscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZ3JlZW4sIG1hZ2VudGEsIHllbGxvdyB9ID0gcGljbztcblxuLyoqIExvZ2luL3N3aXRjaC1vcmcgcmVzcG9uc2Ug4oCUIGNhcnJpZXMgdGhlIHNlc3Npb24gYWNjZXNzIHRva2VuLiAqL1xuaW50ZXJmYWNlIEF1dGhSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IHsgYWNjZXNzVG9rZW46IHN0cmluZzsgcmVmcmVzaFRva2VuOiBzdHJpbmcgfTtcbn1cblxuLyoqIFN0ZXAtdXAgcmVzcG9uc2Ug4oCUIGEgc2hvcnQtbGl2ZWQgKDYwcykgSldUIGJvdW5kIHRvIHRoZSB1c2VyJ3Mgc3ViLiAqL1xuaW50ZXJmYWNlIFN0ZXBVcFJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZGF0YTogeyBzdGVwVXBUb2tlbjogc3RyaW5nIH07XG59XG5cbi8qKiBDcmVhdGUtUEFUIHJlc3BvbnNlIOKAlCB0aGUgcmF3IHRva2VuIGlzIHJldHVybmVkIGV4YWN0bHkgb25jZS4gKi9cbmludGVyZmFjZSBDcmVhdGVQYXRSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IHtcbiAgICB0b2tlbjogc3RyaW5nO1xuICAgIHBhdDogeyBqdGk6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBleHBpcmVzQXQ6IHN0cmluZzsgc2NvcGU/OiBzdHJpbmcgfCBudWxsIH07XG4gIH07XG59XG5cbmNvbnN0IE1BWF9FWFBJUkVTX0RBWVMgPSAzNjU7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgY3JlYXRlLXBhdGAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBNaW50cyBhIG5hbWVkIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiDigJQgYSBkdXJhYmxlLCBpbmRpdmlkdWFsbHktcmV2b2NhYmxlIEFQSVxuICogY3JlZGVudGlhbCDigJQgZm9yIENJL2F1dG9tYXRpb24uIFVubGlrZSBgbG9naW5gICh3aGljaCByZXR1cm5zIGEgc2hvcnQtbGl2ZWRcbiAqIHNlc3Npb24gdG9rZW4pLCBhIFBBVCBpcyB0aGUgcmlnaHQgbG9uZy1saXZlZCBjcmVkZW50aWFsIGZvciBzY3JpcHRzLlxuICpcbiAqIFRoZSBwbGF0Zm9ybSBnYXRlcyBQQVQgY3JlYXRpb24gYmVoaW5kIHN0ZXAtdXAgcmUtYXV0aGVudGljYXRpb24sIHNvIHRoaXNcbiAqIGNvbW1hbmQgY2hhaW5zIHRocmVlIGNhbGxzOiBsb2dpbiAo4oaSIGFjY2VzcyB0b2tlbiksIHN0ZXAtdXAgd2l0aCB0aGUgc2FtZVxuICogcGFzc3dvcmQgKOKGkiBzdGVwLXVwIHRva2VuKSwgdGhlbiBQT1NUIC91c2VyL3BhdHMuIFRoZSBQQVQgYmluZHMgdG8gdGhlIHVzZXInc1xuICogYWN0aXZlIG9yZzsgcGFzcyBgLS1vcmdgIHRvIHN3aXRjaCBmaXJzdCAocGVyc2lzdHMgYXMgdGhlIGFjdGl2ZSBvcmcpLlxuICpcbiAqIFRoZSByYXcgdG9rZW4gaXMgcHJpbnRlZCBPTkNFLiBgLS1xdWlldGAgcHJpbnRzIG9ubHkgYGV4cG9ydCBQTEFURk9STV9UT0tFTj3igKZgXG4gKiBzbyBpdCBjYW4gYmUgYGV2YWxgJ2Qg4oCUIHRoZSBQQVQgaXMgaXRzZWxmIGEgdmFsaWQgQmVhcmVyIGNyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIFBMQVRGT1JNX1BBU1NXT1JEPXNlY3JldCBwaXBlbGluZS1tYW5hZ2VyIGF1dGggcGF0IC0tbmFtZSBjaS1kZXBsb3kgLXUgY2lAZXhhbXBsZS5jb21cbiAqIHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXQgLS1uYW1lIGNpIC0tZXhwaXJlcy1kYXlzIDMwIC11IGNpQGV4YW1wbGUuY29tIC1wIHNlY3JldFxuICogZXZhbCAkKFBMQVRGT1JNX1BBU1NXT1JEPXNlY3JldCBwaXBlbGluZS1tYW5hZ2VyIGF1dGggcGF0IC0tbmFtZSBjaSAtdSBjaUBleGFtcGxlLmNvbSAtLXF1aWV0KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXQocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3BhdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuYW1lZCBQZXJzb25hbCBBY2Nlc3MgVG9rZW4gKGxvbmctbGl2ZWQgQ0xJL2F1dG9tYXRpb24gY3JlZGVudGlhbCknKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLS1uYW1lIDxuYW1lPicsICdIdW1hbi1yZWFkYWJsZSB0b2tlbiBuYW1lIChlLmcuIGNpLWRlcGxveSknKVxuICAgIC5vcHRpb24oJy0tZXhwaXJlcy1kYXlzIDxkYXlzPicsIGBUb2tlbiBsaWZldGltZSBpbiBkYXlzICgxLSR7TUFYX0VYUElSRVNfREFZU30pYCwgJzkwJylcbiAgICAub3B0aW9uKCctLXNjb3BlIDxzY29wZT4nLCAnT3B0aW9uYWwgdG9rZW4gc2NvcGUnKVxuICAgIC5vcHRpb24oJy11LCAtLWlkZW50aWZpZXIgPGlkZW50aWZpZXI+JywgJ1VzZXJuYW1lIG9yIGVtYWlsJylcbiAgICAub3B0aW9uKCctcCwgLS1wYXNzd29yZCA8cGFzc3dvcmQ+JywgJ1Bhc3N3b3JkIChwcmVmZXIgUExBVEZPUk1fUEFTU1dPUkQgZW52KScpXG4gICAgLm9wdGlvbignLS1vcmcgPG9yZ0lkPicsICdCaW5kIHRoZSB0b2tlbiB0byBhIHNwZWNpZmljIG9yZ2FuaXphdGlvbiAoc3dpdGNoZXMgYWN0aXZlIG9yZyknKVxuICAgIC5vcHRpb24oJy0tdXJsIDx1cmw+JywgJ1BsYXRmb3JtIGJhc2UgVVJMJywgcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkwgfHwgJ2h0dHBzOi8vbG9jYWxob3N0Ojg0NDMnKVxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1xdWlldCcsICdPbmx5IHByaW50IHRoZSBleHBvcnQgc3RhdGVtZW50ICh1c2VmdWwgZm9yIGV2YWwpJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKTtcblxuICAgICAgLy8gU0VDVVJJVFk6IHRoaXMgUE9TVHMgYSBwbGFpbnRleHQgcGFzc3dvcmQgKGxvZ2luICsgc3RlcC11cCkuIE5ldmVyIHNlbmQgaXRcbiAgICAgIC8vIG92ZXIgYW4gdW52ZXJpZmllZCBUTFMgY29ubmVjdGlvbiBpbiBwcm9kdWN0aW9uIOKAlCBhIE1JVE0gd291bGQgaGFydmVzdCBpdC5cbiAgICAgIC8vIE1pcnJvcnMgdGhlIGd1YXJkIGluIGBsb2dpbmAuIE5vbi1wcm9kdWN0aW9uIHN0aWxsIGhvbm9ycyAtLW5vLXZlcmlmeS1zc2wuXG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnlTc2wgPT09IGZhbHNlICYmIGlzUHJvZHVjdGlvbkVudigpKSB7XG4gICAgICAgIHByaW50RXJyb3IoJ1JlZnVzaW5nIHRvIGRpc2FibGUgVExTIHZlcmlmaWNhdGlvbiBpbiBwcm9kdWN0aW9uIChOT0RFX0VOVj1wcm9kdWN0aW9uKSDigJQgY3JlZGVudGlhbHMgbXVzdCBub3QgYmUgdHJhbnNtaXR0ZWQgb3ZlciBhbiB1bnZlcmlmaWVkIGNvbm5lY3Rpb24uIFVzZSBhIHZhbGlkIGNlcnRpZmljYXRlLCBvciB1bnNldCBOT0RFX0VOViBmb3IgbG9jYWwvc2VsZi1zaWduZWQgZGV2ZWxvcG1lbnQuJyk7XG4gICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWRlbnRpYWxzIGZyb20gZmxhZ3MgT1IgUExBVEZPUk1fSURFTlRJRklFUi9QTEFURk9STV9QQVNTV09SRCBlbnYgKHNvIHRoZVxuICAgICAgLy8gcGFzc3dvcmQgbmVlZCBub3QgYXBwZWFyIGluIHNoZWxsIGhpc3RvcnkgLyBgcHNgKS5cbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBvcHRpb25zLmlkZW50aWZpZXIgfHwgcHJvY2Vzcy5lbnYuUExBVEZPUk1fSURFTlRJRklFUjtcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZCB8fCBwcm9jZXNzLmVudi5QTEFURk9STV9QQVNTV09SRDtcbiAgICAgIGNvbnN0IHF1aWV0ID0gb3B0aW9ucy5xdWlldCA/PyBmYWxzZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgbmFtZS5cbiAgICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBvcHRpb25zLm5hbWUgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5uYW1lLnRyaW0oKSA6ICcnO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdUb2tlbiBuYW1lIGlzIHJlcXVpcmVkICgtLW5hbWUpJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLlZBTElEQVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1Rva2VuIG5hbWUgbXVzdCBiZSAxMDAgY2hhcmFjdGVycyBvciBmZXdlcicpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5WQUxJREFUSU9OKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGV4cGlyeSDihpIgc2Vjb25kcy5cbiAgICAgICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoTnVtYmVyKG9wdGlvbnMuZXhwaXJlc0RheXMpKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZGF5cykgfHwgZGF5cyA8IDEgfHwgZGF5cyA+IE1BWF9FWFBJUkVTX0RBWVMpIHtcbiAgICAgICAgICBwcmludEVycm9yKGAtLWV4cGlyZXMtZGF5cyBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAke01BWF9FWFBJUkVTX0RBWVN9YCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLlZBTElEQVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IGRheXMgKiA4NjQwMDtcblxuICAgICAgICAvLyBDcmVkZW50aWFscyByZXF1aXJlZCDigJQgc3RlcC11cCBuZWVkcyBhIHBhc3N3b3JkLCBzbyAtLXJlZnJlc2ggY2FuJ3Qgd29yayBoZXJlLlxuICAgICAgICBpZiAoIWlkZW50aWZpZXIgfHwgIXBhc3N3b3JkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignY3JlYXRlLXBhdCByZXF1aXJlcyAtLWlkZW50aWZpZXIgYW5kIC0tcGFzc3dvcmQgKG9yIFBMQVRGT1JNX0lERU5USUZJRVIvUExBVEZPUk1fUEFTU1dPUkQgZW52KScpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGFzc3dvcmQpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ1Bhc3NpbmcgLS1wYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lIGNhbiBleHBvc2UgaXQgdmlhIHNoZWxsIGhpc3Rvcnk7IHByZWZlciB0aGUgUExBVEZPUk1fUEFTU1dPUkQgZW52IHZhci4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXRpbmcg4oCUIHByZXZlbnQgYnJ1dGUgZm9yY2UgKGtleWVkIHRvIGlkZW50aWZpZXIgKyB1cmwsIGxpa2UgbG9naW4pLlxuICAgICAgICBjb25zdCByYXRlTGltaXRNc2cgPSBjaGVja0F1dGhSYXRlTGltaXQoaWRlbnRpZmllciwgb3B0aW9ucy51cmwpO1xuICAgICAgICBpZiAocmF0ZUxpbWl0TXNnKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihyYXRlTGltaXRNc2cpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdDcmVhdGUgUGVyc29uYWwgQWNjZXNzIFRva2VuJyk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCR7bWFnZW50YShgW0VYRS0ke2V4ZWN1dGlvbklkfV1gKX0gJHtjeWFuKGJvbGQoJ0NyZWF0ZSBQZXJzb25hbCBBY2Nlc3MgVG9rZW4nKSl9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50SW5mbygnQXV0aGVudGljYXRpbmcnLCB7IGlkZW50aWZpZXIsIHVybDogb3B0aW9ucy51cmwsIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBvcHRpb25zLnZlcmlmeVNzbCA/PyB0cnVlIH0pO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gVElNRU9VVFMuSFRUUF9SRVFVRVNUO1xuXG4gICAgICAgIC8vIDEpIExvZ2luIOKGkiBzZXNzaW9uIGFjY2VzcyB0b2tlbi5cbiAgICAgICAgY29uc3QgbG9naW5VcmwgPSBgJHtvcHRpb25zLnVybH0vYXBpL2F1dGgvbG9naW5gO1xuICAgICAgICBwcmludERlYnVnKCdQT1NUJywgeyB1cmw6IGxvZ2luVXJsIH0pO1xuICAgICAgICBsZXQgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5wb3N0PEF1dGhSZXNwb25zZT4oXG4gICAgICAgICAgICBsb2dpblVybCxcbiAgICAgICAgICAgIHsgaWRlbnRpZmllciwgcGFzc3dvcmQgfSxcbiAgICAgICAgICAgIHsgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGh0dHBzQWdlbnQsIHRpbWVvdXQgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGFjY2Vzc1Rva2VuID0gcmVzLmRhdGE/LmRhdGE/LmFjY2Vzc1Rva2VuO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlY29yZEF1dGhGYWlsdXJlKGlkZW50aWZpZXIsIG9wdGlvbnMudXJsKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgcmVjb3JkQXV0aEZhaWx1cmUoaWRlbnRpZmllciwgb3B0aW9ucy51cmwpO1xuICAgICAgICAgIHByaW50RXJyb3IoJ0xvZ2luIGZhaWxlZDogbm8gYWNjZXNzIHRva2VuIGluIHJlc3BvbnNlJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgICAgICAgfVxuICAgICAgICByZWNvcmRBdXRoU3VjY2VzcyhpZGVudGlmaWVyLCBvcHRpb25zLnVybCk7XG5cbiAgICAgICAgLy8gMikgT3B0aW9uYWxseSBiaW5kIHRvIGEgc3BlY2lmaWMgb3JnIChwZXJzaXN0cyBhcyB0aGUgYWN0aXZlIG9yZywgd2hpY2ggdGhlXG4gICAgICAgIC8vICAgIFBBVCBpbmhlcml0cykuXG4gICAgICAgIGlmIChvcHRpb25zLm9yZykge1xuICAgICAgICAgIGlmICghcXVpZXQpIHByaW50SW5mbygnU3dpdGNoaW5nIHRvIG9yZ2FuaXphdGlvbicsIHsgb3JnSWQ6IG9wdGlvbnMub3JnIH0pO1xuICAgICAgICAgIGNvbnN0IHN3aXRjaFVybCA9IGAke29wdGlvbnMudXJsfS9hcGkvYXV0aC9zd2l0Y2gtb3JnYDtcbiAgICAgICAgICBwcmludERlYnVnKCdQT1NUJywgeyB1cmw6IHN3aXRjaFVybCB9KTtcbiAgICAgICAgICBjb25zdCBzd2l0Y2hSZXMgPSBhd2FpdCBheGlvcy5wb3N0PEF1dGhSZXNwb25zZT4oXG4gICAgICAgICAgICBzd2l0Y2hVcmwsXG4gICAgICAgICAgICB7IG9yZ2FuaXphdGlvbklkOiBvcHRpb25zLm9yZyB9LFxuICAgICAgICAgICAgeyBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgfSwgaHR0cHNBZ2VudCwgdGltZW91dCB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZWQgPSBzd2l0Y2hSZXMuZGF0YT8uZGF0YT8uYWNjZXNzVG9rZW47XG4gICAgICAgICAgaWYgKCFzd2l0Y2hlZCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcignT3JnYW5pemF0aW9uIHN3aXRjaCBmYWlsZWQ6IG5vIGFjY2VzcyB0b2tlbiBpbiByZXNwb25zZScpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjZXNzVG9rZW4gPSBzd2l0Y2hlZDtcbiAgICAgICAgICBpZiAoIXF1aWV0KSBwcmludFN1Y2Nlc3MoYFN3aXRjaGVkIHRvIG9yZ2FuaXphdGlvbiAke29wdGlvbnMub3JnfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMykgU3RlcC11cCDigJQgcmUtdmVyaWZ5IHRoZSBwYXNzd29yZCB0byB1bmxvY2sgdGhlIGdhdGVkIGNyZWF0ZSBjYWxsLlxuICAgICAgICAvLyAgICBUaGUgcmV0dXJuZWQgdG9rZW4gaXMgc2hvcnQtbGl2ZWQgKH42MHMpLCBzbyB3ZSB1c2UgaXQgaW1tZWRpYXRlbHkuXG4gICAgICAgIGNvbnN0IHN0ZXBVcFVybCA9IGAke29wdGlvbnMudXJsfS9hcGkvYXV0aC9zdGVwLXVwYDtcbiAgICAgICAgcHJpbnREZWJ1ZygnUE9TVCcsIHsgdXJsOiBzdGVwVXBVcmwgfSk7XG4gICAgICAgIGNvbnN0IHN0ZXBVcFJlcyA9IGF3YWl0IGF4aW9zLnBvc3Q8U3RlcFVwUmVzcG9uc2U+KFxuICAgICAgICAgIHN0ZXBVcFVybCxcbiAgICAgICAgICB7IHBhc3N3b3JkIH0sXG4gICAgICAgICAgeyBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAgfSwgaHR0cHNBZ2VudCwgdGltZW91dCB9LFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdGVwVXBUb2tlbiA9IHN0ZXBVcFJlcy5kYXRhPy5kYXRhPy5zdGVwVXBUb2tlbjtcbiAgICAgICAgaWYgKCFzdGVwVXBUb2tlbikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1N0ZXAtdXAgdmVyaWZpY2F0aW9uIGZhaWxlZDogbm8gc3RlcC11cCB0b2tlbiBpbiByZXNwb25zZScpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0KSBDcmVhdGUgdGhlIFBBVC5cbiAgICAgICAgY29uc3QgcGF0VXJsID0gYCR7b3B0aW9ucy51cmx9L2FwaS91c2VyL3BhdHNgO1xuICAgICAgICBwcmludERlYnVnKCdQT1NUJywgeyB1cmw6IHBhdFVybCB9KTtcbiAgICAgICAgY29uc3QgcGF0UmVzID0gYXdhaXQgYXhpb3MucG9zdDxDcmVhdGVQYXRSZXNwb25zZT4oXG4gICAgICAgICAgcGF0VXJsLFxuICAgICAgICAgIHsgbmFtZSwgZXhwaXJlc0luLCAuLi4ob3B0aW9ucy5zY29wZSA/IHsgc2NvcGU6IG9wdGlvbnMuc2NvcGUgfSA6IHt9KSB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcbiAgICAgICAgICAgICAgJ1gtU3RlcC1VcC1Ub2tlbic6IHN0ZXBVcFRva2VuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGh0dHBzQWdlbnQsXG4gICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdG9rZW4gPSBwYXRSZXMuZGF0YT8uZGF0YT8udG9rZW47XG4gICAgICAgIGNvbnN0IHBhdCA9IHBhdFJlcy5kYXRhPy5kYXRhPy5wYXQ7XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICBwcmludEVycm9yKCdDcmVhdGUgdG9rZW4gZmFpbGVkOiBubyB0b2tlbiBpbiByZXNwb25zZScpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBRdWlldCBtb2RlOiBlbWl0IG9ubHkgdGhlIGV4cG9ydCBsaW5lICh0aGUgUEFUIGlzIGEgdmFsaWQgQmVhcmVyIHRva2VuKS5cbiAgICAgICAgaWYgKHF1aWV0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYGV4cG9ydCBQTEFURk9STV9UT0tFTj0ke3Rva2VufWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQZXJzb25hbCBhY2Nlc3MgdG9rZW4gY3JlYXRlZCcpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdOYW1lJzogcGF0Py5uYW1lID8/IG5hbWUsXG4gICAgICAgICAgJ1Rva2VuIElEIChqdGkpJzogcGF0Py5qdGkgPz8gJyh1bmtub3duKScsXG4gICAgICAgICAgJ0V4cGlyZXMnOiBwYXQ/LmV4cGlyZXNBdCA/PyBgJHtkYXlzfSBkYXkocylgLFxuICAgICAgICAgIC4uLihwYXQ/LnNjb3BlID8geyBTY29wZTogcGF0LnNjb3BlIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHllbGxvdyhib2xkKCdDb3B5IHlvdXIgdG9rZW4gbm93IOKAlCBpdCB3aWxsIG5vdCBiZSBzaG93biBhZ2FpbjonKSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhncmVlbih0b2tlbikpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50SW5mbygnVGlwOiB1c2UgaXQgYXMgUExBVEZPUk1fVE9LRU4gZm9yIHN1YnNlcXVlbnQgY29tbWFuZHM6Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdyZWVuKCcgIGV4cG9ydCBQTEFURk9STV9UT0tFTj08dG9rZW4+JykpO1xuICAgICAgICBjb25zb2xlLmxvZyhncmVlbihgICAjIG9yOiAgZXZhbCAkKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXQgLS1uYW1lICR7bmFtZX0gLXUgJHtpZGVudGlmaWVyfSAtLXF1aWV0KWApKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyb3IucmVzcG9uc2U/LnN0YXR1cztcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gKGVycm9yLnJlc3BvbnNlPy5kYXRhIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZTtcbiAgICAgICAgICBwcmludEVycm9yKCdDcmVhdGUgdG9rZW4gZmFpbGVkJywge1xuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPz8gJ25vIHJlc3BvbnNlJyxcbiAgICAgICAgICAgIC4uLihtZXNzYWdlID8geyBtZXNzYWdlIH0gOiB7fSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdjcmVhdGUtcGF0JywgZXhlY3V0aW9uSWQsIGlkZW50aWZpZXI6IG9wdGlvbnMuaWRlbnRpZmllciwgdXJsOiBvcHRpb25zLnVybCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|