@pipeline-builder/pipeline-manager 4.1.3 → 4.1.5
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 +2 -1
- package/dist/agent/env-file.d.ts +1 -1
- package/dist/agent/env-file.js +2 -2
- package/dist/agent/post-steps.d.ts.map +1 -1
- package/dist/agent/post-steps.js +38 -18
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -9
- package/dist/commands/audit-tokens.d.ts.map +1 -1
- package/dist/commands/audit-tokens.js +32 -21
- package/dist/commands/create-pat.d.ts +20 -13
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +93 -98
- package/dist/commands/login.d.ts +14 -8
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +89 -124
- package/dist/commands/setup-events.d.ts.map +1 -1
- package/dist/commands/setup-events.js +6 -5
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +9 -3
- package/dist/commands/store-token.d.ts +16 -11
- package/dist/commands/store-token.d.ts.map +1 -1
- package/dist/commands/store-token.js +213 -131
- package/dist/lambda/token-renew-handler.d.ts.map +1 -1
- package/dist/lambda/token-renew-handler.js +134 -97
- package/dist/templates/events-stack.json +1 -1
- package/dist/templates/token-renew-stack.json +9 -10
- package/dist/utils/auth-utils.d.ts +21 -38
- package/dist/utils/auth-utils.d.ts.map +1 -1
- package/dist/utils/auth-utils.js +20 -33
- package/dist/utils/command-utils.d.ts +8 -6
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +71 -15
- package/dist/utils/config-loader.d.ts +2 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +18 -8
- package/dist/utils/credential-store.d.ts +23 -0
- package/dist/utils/credential-store.d.ts.map +1 -0
- package/dist/utils/credential-store.js +92 -0
- package/dist/utils/device-auth.d.ts +59 -0
- package/dist/utils/device-auth.d.ts.map +1 -0
- package/dist/utils/device-auth.js +139 -0
- package/dist/utils/pipeline-config.js +2 -2
- package/dist/utils/platform-secret.d.ts +19 -1
- package/dist/utils/platform-secret.d.ts.map +1 -1
- package/dist/utils/platform-secret.js +26 -4
- package/dist/utils/service-account.d.ts +73 -0
- package/dist/utils/service-account.d.ts.map +1 -0
- package/dist/utils/service-account.js +158 -0
- package/package.json +4 -4
- package/dist/utils/rate-limiter.d.ts +0 -15
- package/dist/utils/rate-limiter.d.ts.map +0 -1
- package/dist/utils/rate-limiter.js +0 -164
|
@@ -4,68 +4,71 @@ import axios from 'axios';
|
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import pico from 'picocolors';
|
|
6
6
|
import { TIMEOUTS } from '../config/cli.constants.js';
|
|
7
|
-
import { assertCredentialTlsAllowed, credentialHttpsAgent,
|
|
7
|
+
import { assertCredentialTlsAllowed, credentialHttpsAgent, switchOrganization } from '../utils/auth-utils.js';
|
|
8
8
|
import { printCommandHeader, withSslOptions } from '../utils/command-utils.js';
|
|
9
|
+
import { DeviceAuthError, openInBrowser, pollForDeviceToken, requestDeviceCode } from '../utils/device-auth.js';
|
|
9
10
|
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
10
|
-
import { printDebug, printError, printInfo, printKeyValue, printSuccess
|
|
11
|
-
|
|
12
|
-
const { bold, green, yellow } = pico;
|
|
11
|
+
import { printDebug, printError, printInfo, printKeyValue, printSuccess } from '../utils/output-utils.js';
|
|
12
|
+
const { bold, cyan, dim, green, yellow } = pico;
|
|
13
13
|
const MAX_EXPIRES_DAYS = 365;
|
|
14
14
|
/**
|
|
15
|
-
* Registers the `
|
|
15
|
+
* Registers the `pat` command with the CLI program.
|
|
16
16
|
*
|
|
17
|
-
* Mints a named
|
|
18
|
-
* credential — for CI/automation. Unlike
|
|
19
|
-
*
|
|
17
|
+
* Mints a named ACCESS KEY (`pb_pat_…`) — a durable, individually-revocable API
|
|
18
|
+
* credential — for CI/automation. Unlike a session, a key is the right
|
|
19
|
+
* long-lived credential for scripts.
|
|
20
20
|
*
|
|
21
|
-
* The
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* active org; pass `--org` to switch first (persists as the active org).
|
|
21
|
+
* The key is OPAQUE: it carries no claims, and each service trades it at
|
|
22
|
+
* platform's /auth/token/exchange for a 5-minute token, so revoking it takes
|
|
23
|
+
* effect everywhere within five minutes.
|
|
25
24
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* Creating one is step-up gated server-side, which used to mean the CLI had to
|
|
26
|
+
* hold a password (it POSTed it twice — sign-in, then step-up). It no longer
|
|
27
|
+
* has one: the device flow asks for the step-up IN THE BROWSER, where the
|
|
28
|
+
* account's real factors live, and the approved poll returns both the session
|
|
29
|
+
* and a short-lived step-up token. The key binds to the user's active org; pass
|
|
30
|
+
* `--org` to switch first (which persists as the active org).
|
|
31
|
+
*
|
|
32
|
+
* The raw key is printed ONCE — only its hash is stored, so it can never be read
|
|
33
|
+
* back. `--quiet` prints only `export PLATFORM_TOKEN=…` so it can be `eval`'d;
|
|
34
|
+
* the key is itself a valid Bearer credential.
|
|
28
35
|
*
|
|
29
36
|
* @param program - The root Commander program instance to attach the command to.
|
|
30
37
|
*
|
|
31
38
|
* @example
|
|
32
39
|
* ```bash
|
|
33
|
-
*
|
|
34
|
-
* pipeline-manager auth pat --name ci --expires-days 30
|
|
35
|
-
* eval $(
|
|
40
|
+
* pipeline-manager auth pat --name ci-deploy
|
|
41
|
+
* pipeline-manager auth pat --name ci --expires-days 30 --org <orgId>
|
|
42
|
+
* eval $(pipeline-manager auth pat --name ci --quiet)
|
|
36
43
|
* ```
|
|
37
44
|
*/
|
|
38
45
|
export function createPat(program) {
|
|
39
46
|
withSslOptions(program
|
|
40
47
|
.command('pat')
|
|
41
|
-
.description('Create a named
|
|
42
|
-
.requiredOption('--name <name>', 'Human-readable
|
|
43
|
-
.option('--expires-days <days>', `
|
|
44
|
-
.option('--scope <scope>', 'Optional
|
|
45
|
-
.option('
|
|
46
|
-
.option('-
|
|
47
|
-
.option('--org <orgId>', 'Bind the token to a specific organization (switches active org)')
|
|
48
|
+
.description('Create a named access key (long-lived, opaque CLI/automation credential)')
|
|
49
|
+
.requiredOption('--name <name>', 'Human-readable key name (e.g. ci-deploy)')
|
|
50
|
+
.option('--expires-days <days>', `Key lifetime in days (1-${MAX_EXPIRES_DAYS})`, '90')
|
|
51
|
+
.option('--scope <scope>', 'Optional capability scope (least-privilege key)')
|
|
52
|
+
.option('--org <orgId>', 'Bind the key to a specific organization (switches active org)')
|
|
53
|
+
.option('--no-browser', 'Never open a browser — print the verification URL instead')
|
|
48
54
|
.option('--url <url>', 'Platform base URL', process.env.PLATFORM_BASE_URL || 'https://localhost:8443'))
|
|
49
55
|
.option('--quiet', 'Only print the export statement (useful for eval)')
|
|
50
56
|
.action(async (options) => {
|
|
51
|
-
// SECURITY:
|
|
52
|
-
//
|
|
53
|
-
// Mirrors the guard in `login`.
|
|
57
|
+
// SECURITY: the poll returns a session AND a step-up token, and the response
|
|
58
|
+
// below carries the raw key. None of that may cross an unverified connection
|
|
59
|
+
// in production. Mirrors the guard in `login`.
|
|
54
60
|
assertCredentialTlsAllowed(options.verifySsl);
|
|
55
|
-
// Credentials from flags OR PLATFORM_IDENTIFIER/PLATFORM_PASSWORD env (so the
|
|
56
|
-
// password need not appear in shell history / `ps`).
|
|
57
|
-
const { identifier, password } = resolveCredentials(options);
|
|
58
61
|
const quiet = options.quiet ?? false;
|
|
59
|
-
const executionId = printCommandHeader('Create
|
|
62
|
+
const executionId = printCommandHeader('Create Access Key', 'Create Access Key', { quiet });
|
|
60
63
|
try {
|
|
61
64
|
// Validate name.
|
|
62
65
|
const name = typeof options.name === 'string' ? options.name.trim() : '';
|
|
63
66
|
if (!name) {
|
|
64
|
-
printError('
|
|
67
|
+
printError('Key name is required (--name)');
|
|
65
68
|
process.exit(ERROR_CODES.VALIDATION);
|
|
66
69
|
}
|
|
67
70
|
if (name.length > 100) {
|
|
68
|
-
printError('
|
|
71
|
+
printError('Key name must be 100 characters or fewer');
|
|
69
72
|
process.exit(ERROR_CODES.VALIDATION);
|
|
70
73
|
}
|
|
71
74
|
// Validate expiry → seconds.
|
|
@@ -75,68 +78,55 @@ export function createPat(program) {
|
|
|
75
78
|
process.exit(ERROR_CODES.VALIDATION);
|
|
76
79
|
}
|
|
77
80
|
const expiresIn = days * 86400;
|
|
78
|
-
// Credentials required — step-up needs a password, so --refresh can't work here.
|
|
79
|
-
if (!identifier || !password) {
|
|
80
|
-
printError('create-pat requires --identifier and --password (or PLATFORM_IDENTIFIER/PLATFORM_PASSWORD env)');
|
|
81
|
-
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
82
|
-
}
|
|
83
|
-
if (options.password) {
|
|
84
|
-
printWarning('Passing --password on the command line can expose it via shell history; prefer the PLATFORM_PASSWORD env var.');
|
|
85
|
-
}
|
|
86
|
-
// Rate limiting — prevent brute force (keyed to identifier + url, like login).
|
|
87
|
-
const rateLimitMsg = checkAuthRateLimit(identifier, options.url);
|
|
88
|
-
if (rateLimitMsg) {
|
|
89
|
-
printError(rateLimitMsg);
|
|
90
|
-
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
91
|
-
}
|
|
92
|
-
if (!quiet) {
|
|
93
|
-
printInfo('Authenticating', { identifier, url: options.url, verifySsl: options.verifySsl });
|
|
94
|
-
}
|
|
95
81
|
const httpsAgent = credentialHttpsAgent(options.verifySsl);
|
|
96
82
|
const timeout = TIMEOUTS.HTTP_REQUEST;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
83
|
+
const transport = { url: options.url, httpsAgent, timeout };
|
|
84
|
+
// 1) Device sign-in, asking for the step-up the create call needs.
|
|
85
|
+
if (!quiet)
|
|
86
|
+
printInfo('Starting browser sign-in', { url: options.url, verifySsl: options.verifySsl });
|
|
87
|
+
const code = await requestDeviceCode(transport, { stepUp: true });
|
|
88
|
+
const approvalUrl = code.verification_uri_complete || code.verification_uri;
|
|
89
|
+
const opened = options.browser !== false && openInBrowser(approvalUrl);
|
|
90
|
+
// The prompt goes to STDERR under `--quiet`: stdout is captured by
|
|
91
|
+
// `eval $(…)`, so printing the code there would swallow the one thing
|
|
92
|
+
// the user has to read before anything can proceed.
|
|
93
|
+
const say = quiet ? console.error : console.log;
|
|
94
|
+
say('');
|
|
95
|
+
say(` Your code: ${bold(cyan(code.user_code))}`);
|
|
96
|
+
say(` Approve at: ${green(approvalUrl)}`);
|
|
97
|
+
say('');
|
|
98
|
+
say(dim(opened
|
|
99
|
+
? ' Opening your browser… approve the code there, then come back.'
|
|
100
|
+
: ' Open that URL in a browser, check the code matches, and approve.'));
|
|
101
|
+
if (!quiet)
|
|
102
|
+
printInfo('Waiting for approval…');
|
|
103
|
+
const session = await pollForDeviceToken(transport, code);
|
|
104
|
+
let accessToken = session.access_token;
|
|
105
|
+
const stepUpToken = session.step_up_token;
|
|
106
|
+
if (!stepUpToken) {
|
|
107
|
+
printError('The approval did not return a step-up confirmation — approve the code promptly and try again.');
|
|
109
108
|
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
110
109
|
}
|
|
111
|
-
|
|
112
|
-
//
|
|
113
|
-
//
|
|
110
|
+
// 2) Optionally bind to a specific org (persists as the active org, which
|
|
111
|
+
// the key inherits). Rotates the session, but the step-up token is
|
|
112
|
+
// bound to the user, not the session, so it survives the switch.
|
|
114
113
|
if (options.org) {
|
|
115
114
|
if (!quiet)
|
|
116
115
|
printInfo('Switching to organization', { orgId: options.org });
|
|
117
|
-
accessToken = await switchOrganization({
|
|
116
|
+
accessToken = (await switchOrganization({
|
|
118
117
|
url: options.url,
|
|
119
118
|
orgId: options.org,
|
|
120
119
|
accessToken,
|
|
121
120
|
httpsAgent,
|
|
122
121
|
timeout,
|
|
123
122
|
quiet,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
// 3) Step-up — re-verify the password to unlock the gated create call.
|
|
127
|
-
// The returned token is short-lived (~60s), so we use it immediately.
|
|
128
|
-
const stepUpUrl = `${options.url}/api/auth/step-up`;
|
|
129
|
-
printDebug('POST', { url: stepUpUrl });
|
|
130
|
-
const stepUpRes = await axios.post(stepUpUrl, { password }, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${accessToken}` }, httpsAgent, timeout });
|
|
131
|
-
const stepUpToken = stepUpRes.data?.data?.stepUpToken;
|
|
132
|
-
if (!stepUpToken) {
|
|
133
|
-
printError('Step-up verification failed: no step-up token in response');
|
|
134
|
-
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
123
|
+
})).accessToken;
|
|
135
124
|
}
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
125
|
+
// 3) Create the access key. The step-up token is short-lived (~60s) and
|
|
126
|
+
// single-use, so it is spent immediately.
|
|
127
|
+
const keyUrl = `${options.url}/api/user/keys`;
|
|
128
|
+
printDebug('POST', { url: keyUrl });
|
|
129
|
+
const keyRes = await axios.post(keyUrl, { name, expiresIn, ...(options.scope ? { scope: options.scope } : {}) }, {
|
|
140
130
|
headers: {
|
|
141
131
|
'Content-Type': 'application/json',
|
|
142
132
|
'Authorization': `Bearer ${accessToken}`,
|
|
@@ -145,39 +135,44 @@ export function createPat(program) {
|
|
|
145
135
|
httpsAgent,
|
|
146
136
|
timeout,
|
|
147
137
|
});
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
if (!
|
|
151
|
-
printError('Create
|
|
138
|
+
const key = keyRes.data?.data?.key;
|
|
139
|
+
const meta = keyRes.data?.data?.accessKey;
|
|
140
|
+
if (!key) {
|
|
141
|
+
printError('Create key failed: no key in response');
|
|
152
142
|
process.exit(ERROR_CODES.API_REQUEST);
|
|
153
143
|
}
|
|
154
|
-
// Quiet mode: emit only the export line (the
|
|
144
|
+
// Quiet mode: emit only the export line (the key is a valid Bearer credential).
|
|
155
145
|
if (quiet) {
|
|
156
|
-
console.log(`export PLATFORM_TOKEN=${
|
|
146
|
+
console.log(`export PLATFORM_TOKEN=${key}`);
|
|
157
147
|
return;
|
|
158
148
|
}
|
|
159
149
|
console.log('');
|
|
160
|
-
printSuccess('
|
|
150
|
+
printSuccess('Access key created');
|
|
161
151
|
console.log('');
|
|
162
152
|
printKeyValue({
|
|
163
|
-
'Name':
|
|
164
|
-
'
|
|
165
|
-
'
|
|
166
|
-
|
|
153
|
+
'Name': meta?.name ?? name,
|
|
154
|
+
'Key ID': meta?.id ?? '(unknown)',
|
|
155
|
+
'Key': meta?.display ?? '(unknown)',
|
|
156
|
+
'Expires': meta?.expiresAt ?? `${days} day(s)`,
|
|
157
|
+
...(meta?.scope ? { Scope: meta.scope } : {}),
|
|
167
158
|
});
|
|
168
159
|
console.log('');
|
|
169
|
-
console.log(yellow(bold('Copy your
|
|
170
|
-
console.log(green(
|
|
160
|
+
console.log(yellow(bold('Copy your key now — only its hash is stored, so it will not be shown again:')));
|
|
161
|
+
console.log(green(key));
|
|
171
162
|
console.log('');
|
|
172
163
|
printInfo('Tip: use it as PLATFORM_TOKEN for subsequent commands:');
|
|
173
164
|
console.log(green(' export PLATFORM_TOKEN=<token>'));
|
|
174
|
-
console.log(green(` # or: eval $(pipeline-manager auth pat --name ${name}
|
|
165
|
+
console.log(green(` # or: eval $(pipeline-manager auth pat --name ${name} --quiet)`));
|
|
175
166
|
}
|
|
176
167
|
catch (error) {
|
|
168
|
+
if (error instanceof DeviceAuthError) {
|
|
169
|
+
printError(`Create key failed: ${error.message}`, { reason: error.code });
|
|
170
|
+
process.exit(ERROR_CODES.AUTHENTICATION);
|
|
171
|
+
}
|
|
177
172
|
if (axios.isAxiosError(error)) {
|
|
178
173
|
const status = error.response?.status;
|
|
179
174
|
const message = error.response?.data?.message;
|
|
180
|
-
printError('Create
|
|
175
|
+
printError('Create key failed', {
|
|
181
176
|
status: status ?? 'no response',
|
|
182
177
|
...(message ? { message } : {}),
|
|
183
178
|
});
|
|
@@ -186,9 +181,9 @@ export function createPat(program) {
|
|
|
186
181
|
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
187
182
|
debug: program.opts().debug,
|
|
188
183
|
exit: true,
|
|
189
|
-
context: { command: 'create-pat', executionId,
|
|
184
|
+
context: { command: 'create-pat', executionId, url: options.url },
|
|
190
185
|
});
|
|
191
186
|
}
|
|
192
187
|
});
|
|
193
188
|
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jcmVhdGUtcGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0ksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFcEcsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBaUJyQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUU3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQWdCO0lBQ3hDLGNBQWMsQ0FBQyxPQUFPO1NBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDZCxXQUFXLENBQUMsNkVBQTZFLENBQUM7U0FDMUYsY0FBYyxD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LENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDaEMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7YUFDbEcsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IFRJTUVPVVRTIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWQsIGNyZWRlbnRpYWxIdHRwc0FnZW50LCBwb3N0TG9naW4sIHJlc29sdmVDcmVkZW50aWFscywgc3dpdGNoT3JnYW5pemF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvYXV0aC11dGlscy5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgY2hlY2tBdXRoUmF0ZUxpbWl0LCByZWNvcmRBdXRoRmFpbHVyZSwgcmVjb3JkQXV0aFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9yYXRlLWxpbWl0ZXIuanMnO1xuXG5jb25zdCB7IGJvbGQsIGdyZWVuLCB5ZWxsb3cgfSA9IHBpY287XG5cbi8qKiBTdGVwLXVwIHJlc3BvbnNlIOKAlCBhIHNob3J0LWxpdmVkICg2MHMpIEpXVCBib3VuZCB0byB0aGUgdXNlcidzIHN1Yi4gKi9cbmludGVyZmFjZSBTdGVwVXBSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IHsgc3RlcFVwVG9rZW46IHN0cmluZyB9O1xufVxuXG4vKiogQ3JlYXRlLVBBVCByZXNwb25zZSDigJQgdGhlIHJhdyB0b2tlbiBpcyByZXR1cm5lZCBleGFjdGx5IG9uY2UuICovXG5pbnRlcmZhY2UgQ3JlYXRlUGF0UmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhOiB7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBwYXQ6IHsganRpOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZXhwaXJlc0F0OiBzdHJpbmc7IHNjb3BlPzogc3RyaW5nIHwgbnVsbCB9O1xuICB9O1xufVxuXG5jb25zdCBNQVhfRVhQSVJFU19EQVlTID0gMzY1O1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGNyZWF0ZS1wYXRgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogTWludHMgYSBuYW1lZCBQZXJzb25hbCBBY2Nlc3MgVG9rZW4g4oCUIGEgZHVyYWJsZSwgaW5kaXZpZHVhbGx5LXJldm9jYWJsZSBBUElcbiAqIGNyZWRlbnRpYWwg4oCUIGZvciBDSS9hdXRvbWF0aW9uLiBVbmxpa2UgYGxvZ2luYCAod2hpY2ggcmV0dXJucyBhIHNob3J0LWxpdmVkXG4gKiBzZXNzaW9uIHRva2VuKSwgYSBQQVQgaXMgdGhlIHJpZ2h0IGxvbmctbGl2ZWQgY3JlZGVudGlhbCBmb3Igc2NyaXB0cy5cbiAqXG4gKiBUaGUgcGxhdGZvcm0gZ2F0ZXMgUEFUIGNyZWF0aW9uIGJlaGluZCBzdGVwLXVwIHJlLWF1dGhlbnRpY2F0aW9uLCBzbyB0aGlzXG4gKiBjb21tYW5kIGNoYWlucyB0aHJlZSBjYWxsczogbG9naW4gKOKGkiBhY2Nlc3MgdG9rZW4pLCBzdGVwLXVwIHdpdGggdGhlIHNhbWVcbiAqIHBhc3N3b3JkICjihpIgc3RlcC11cCB0b2tlbiksIHRoZW4gUE9TVCAvdXNlci9wYXRzLiBUaGUgUEFUIGJpbmRzIHRvIHRoZSB1c2VyJ3NcbiAqIGFjdGl2ZSBvcmc7IHBhc3MgYC0tb3JnYCB0byBzd2l0Y2ggZmlyc3QgKHBlcnNpc3RzIGFzIHRoZSBhY3RpdmUgb3JnKS5cbiAqXG4gKiBUaGUgcmF3IHRva2VuIGlzIHByaW50ZWQgT05DRS4gYC0tcXVpZXRgIHByaW50cyBvbmx5IGBleHBvcnQgUExBVEZPUk1fVE9LRU494oCmYFxuICogc28gaXQgY2FuIGJlIGBldmFsYCdkIOKAlCB0aGUgUEFUIGlzIGl0c2VsZiBhIHZhbGlkIEJlYXJlciBjcmVkZW50aWFsLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBQTEFURk9STV9QQVNTV09SRD1zZWNyZXQgcGlwZWxpbmUtbWFuYWdlciBhdXRoIHBhdCAtLW5hbWUgY2ktZGVwbG95IC11IGNpQGV4YW1wbGUuY29tXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1dGggcGF0IC0tbmFtZSBjaSAtLWV4cGlyZXMtZGF5cyAzMCAtdSBjaUBleGFtcGxlLmNvbSAtcCBzZWNyZXRcbiAqIGV2YWwgJChQTEFURk9STV9QQVNTV09SRD1zZWNyZXQgcGlwZWxpbmUtbWFuYWdlciBhdXRoIHBhdCAtLW5hbWUgY2kgLXUgY2lAZXhhbXBsZS5jb20gLS1xdWlldClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMocHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwYXQnKVxuICAgIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmFtZWQgUGVyc29uYWwgQWNjZXNzIFRva2VuIChsb25nLWxpdmVkIENMSS9hdXRvbWF0aW9uIGNyZWRlbnRpYWwpJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy0tbmFtZSA8bmFtZT4nLCAnSHVtYW4tcmVhZGFibGUgdG9rZW4gbmFtZSAoZS5nLiBjaS1kZXBsb3kpJylcbiAgICAub3B0aW9uKCctLWV4cGlyZXMtZGF5cyA8ZGF5cz4nLCBgVG9rZW4gbGlmZXRpbWUgaW4gZGF5cyAoMS0ke01BWF9FWFBJUkVTX0RBWVN9KWAsICc5MCcpXG4gICAgLm9wdGlvbignLS1zY29wZSA8c2NvcGU+JywgJ09wdGlvbmFsIHRva2VuIHNjb3BlJylcbiAgICAub3B0aW9uKCctdSwgLS1pZGVudGlmaWVyIDxpZGVudGlmaWVyPicsICdVc2VybmFtZSBvciBlbWFpbCcpXG4gICAgLm9wdGlvbignLXAsIC0tcGFzc3dvcmQgPHBhc3N3b3JkPicsICdQYXNzd29yZCAocHJlZmVyIFBMQVRGT1JNX1BBU1NXT1JEIGVudiknKVxuICAgIC5vcHRpb24oJy0tb3JnIDxvcmdJZD4nLCAnQmluZCB0aGUgdG9rZW4gdG8gYSBzcGVjaWZpYyBvcmdhbml6YXRpb24gKHN3aXRjaGVzIGFjdGl2ZSBvcmcpJylcbiAgICAub3B0aW9uKCctLXVybCA8dXJsPicsICdQbGF0Zm9ybSBiYXNlIFVSTCcsIHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMIHx8ICdodHRwczovL2xvY2FsaG9zdDo4NDQzJykpXG4gICAgLm9wdGlvbignLS1xdWlldCcsICdPbmx5IHByaW50IHRoZSBleHBvcnQgc3RhdGVtZW50ICh1c2VmdWwgZm9yIGV2YWwpJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAvLyBTRUNVUklUWTogdGhpcyBQT1NUcyBhIHBsYWludGV4dCBwYXNzd29yZCAobG9naW4gKyBzdGVwLXVwKS4gTmV2ZXIgc2VuZCBpdFxuICAgICAgLy8gb3ZlciBhbiB1bnZlcmlmaWVkIFRMUyBjb25uZWN0aW9uIGluIHByb2R1Y3Rpb24g4oCUIGEgTUlUTSB3b3VsZCBoYXJ2ZXN0IGl0LlxuICAgICAgLy8gTWlycm9ycyB0aGUgZ3VhcmQgaW4gYGxvZ2luYC4gTm9uLXByb2R1Y3Rpb24gc3RpbGwgaG9ub3JzIC0tbm8tdmVyaWZ5LXNzbC5cbiAgICAgIGFzc2VydENyZWRlbnRpYWxUbHNBbGxvd2VkKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgLy8gQ3JlZGVudGlhbHMgZnJvbSBmbGFncyBPUiBQTEFURk9STV9JREVOVElGSUVSL1BMQVRGT1JNX1BBU1NXT1JEIGVudiAoc28gdGhlXG4gICAgICAvLyBwYXNzd29yZCBuZWVkIG5vdCBhcHBlYXIgaW4gc2hlbGwgaGlzdG9yeSAvIGBwc2ApLlxuICAgICAgY29uc3QgeyBpZGVudGlmaWVyLCBwYXNzd29yZCB9ID0gcmVzb2x2ZUNyZWRlbnRpYWxzKG9wdGlvbnMpO1xuICAgICAgY29uc3QgcXVpZXQgPSBvcHRpb25zLnF1aWV0ID8/IGZhbHNlO1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoXG4gICAgICAgICdDcmVhdGUgUGVyc29uYWwgQWNjZXNzIFRva2VuJyxcbiAgICAgICAgJ0NyZWF0ZSBQZXJzb25hbCBBY2Nlc3MgVG9rZW4nLFxuICAgICAgICB7IHF1aWV0IH0sXG4gICAgICApO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lLlxuICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mIG9wdGlvbnMubmFtZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLm5hbWUudHJpbSgpIDogJyc7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1Rva2VuIG5hbWUgaXMgcmVxdWlyZWQgKC0tbmFtZSknKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuVkFMSURBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignVG9rZW4gbmFtZSBtdXN0IGJlIDEwMCBjaGFyYWN0ZXJzIG9yIGZld2VyJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLlZBTElEQVRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZXhwaXJ5IOKGkiBzZWNvbmRzLlxuICAgICAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihOdW1iZXIob3B0aW9ucy5leHBpcmVzRGF5cykpO1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShkYXlzKSB8fCBkYXlzIDwgMSB8fCBkYXlzID4gTUFYX0VYUElSRVNfREFZUykge1xuICAgICAgICAgIHByaW50RXJyb3IoYC0tZXhwaXJlcy1kYXlzIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kICR7TUFYX0VYUElSRVNfREFZU31gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuVkFMSURBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwaXJlc0luID0gZGF5cyAqIDg2NDAwO1xuXG4gICAgICAgIC8vIENyZWRlbnRpYWxzIHJlcXVpcmVkIOKAlCBzdGVwLXVwIG5lZWRzIGEgcGFzc3dvcmQsIHNvIC0tcmVmcmVzaCBjYW4ndCB3b3JrIGhlcmUuXG4gICAgICAgIGlmICghaWRlbnRpZmllciB8fCAhcGFzc3dvcmQpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdjcmVhdGUtcGF0IHJlcXVpcmVzIC0taWRlbnRpZmllciBhbmQgLS1wYXNzd29yZCAob3IgUExBVEZPUk1fSURFTlRJRklFUi9QTEFURk9STV9QQVNTV09SRCBlbnYpJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wYXNzd29yZCkge1xuICAgICAgICAgIHByaW50V2FybmluZygnUGFzc2luZyAtLXBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUgY2FuIGV4cG9zZSBpdCB2aWEgc2hlbGwgaGlzdG9yeTsgcHJlZmVyIHRoZSBQTEFURk9STV9QQVNTV09SRCBlbnYgdmFyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdGluZyDigJQgcHJldmVudCBicnV0ZSBmb3JjZSAoa2V5ZWQgdG8gaWRlbnRpZmllciArIHVybCwgbGlrZSBsb2dpbikuXG4gICAgICAgIGNvbnN0IHJhdGVMaW1pdE1zZyA9IGNoZWNrQXV0aFJhdGVMaW1pdChpZGVudGlmaWVyLCBvcHRpb25zLnVybCk7XG4gICAgICAgIGlmIChyYXRlTGltaXRNc2cpIHtcbiAgICAgICAgICBwcmludEVycm9yKHJhdGVMaW1pdE1zZyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgICBwcmludEluZm8oJ0F1dGhlbnRpY2F0aW5nJywgeyBpZGVudGlmaWVyLCB1cmw6IG9wdGlvbnMudXJsLCB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHR0cHNBZ2VudCA9IGNyZWRlbnRpYWxIdHRwc0FnZW50KG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IFRJTUVPVVRTLkhUVFBfUkVRVUVTVDtcblxuICAgICAgICAvLyAxKSBMb2dpbiDihpIgc2Vzc2lvbiBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIGxldCBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgcG9zdExvZ2luKHsgdXJsOiBvcHRpb25zLnVybCwgaWRlbnRpZmllciwgcGFzc3dvcmQsIGh0dHBzQWdlbnQsIHRpbWVvdXQgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVjb3JkQXV0aEZhaWx1cmUoaWRlbnRpZmllciwgb3B0aW9ucy51cmwpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICByZWNvcmRBdXRoRmFpbHVyZShpZGVudGlmaWVyLCBvcHRpb25zLnVybCk7XG4gICAgICAgICAgcHJpbnRFcnJvcignTG9naW4gZmFpbGVkOiBubyBhY2Nlc3MgdG9rZW4gaW4gcmVzcG9uc2UnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZEF1dGhTdWNjZXNzKGlkZW50aWZpZXIsIG9wdGlvbnMudXJsKTtcblxuICAgICAgICAvLyAyKSBPcHRpb25hbGx5IGJpbmQgdG8gYSBzcGVjaWZpYyBvcmcgKHBlcnNpc3RzIGFzIHRoZSBhY3RpdmUgb3JnLCB3aGljaCB0aGVcbiAgICAgICAgLy8gICAgUEFUIGluaGVyaXRzKS5cbiAgICAgICAgaWYgKG9wdGlvbnMub3JnKSB7XG4gICAgICAgICAgaWYgKCFxdWlldCkgcHJpbnRJbmZvKCdTd2l0Y2hpbmcgdG8gb3JnYW5pemF0aW9uJywgeyBvcmdJZDogb3B0aW9ucy5vcmcgfSk7XG4gICAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCBzd2l0Y2hPcmdhbml6YXRpb24oe1xuICAgICAgICAgICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICAgICAgICAgIG9yZ0lkOiBvcHRpb25zLm9yZyxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgaHR0cHNBZ2VudCxcbiAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgICBxdWlldCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMpIFN0ZXAtdXAg4oCUIHJlLXZlcmlmeSB0aGUgcGFzc3dvcmQgdG8gdW5sb2NrIHRoZSBnYXRlZCBjcmVhdGUgY2FsbC5cbiAgICAgICAgLy8gICAgVGhlIHJldHVybmVkIHRva2VuIGlzIHNob3J0LWxpdmVkICh+NjBzKSwgc28gd2UgdXNlIGl0IGltbWVkaWF0ZWx5LlxuICAgICAgICBjb25zdCBzdGVwVXBVcmwgPSBgJHtvcHRpb25zLnVybH0vYXBpL2F1dGgvc3RlcC11cGA7XG4gICAgICAgIHByaW50RGVidWcoJ1BPU1QnLCB7IHVybDogc3RlcFVwVXJsIH0pO1xuICAgICAgICBjb25zdCBzdGVwVXBSZXMgPSBhd2FpdCBheGlvcy5wb3N0PFN0ZXBVcFJlc3BvbnNlPihcbiAgICAgICAgICBzdGVwVXBVcmwsXG4gICAgICAgICAgeyBwYXNzd29yZCB9LFxuICAgICAgICAgIHsgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIH0sIGh0dHBzQWdlbnQsIHRpbWVvdXQgfSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3RlcFVwVG9rZW4gPSBzdGVwVXBSZXMuZGF0YT8uZGF0YT8uc3RlcFVwVG9rZW47XG4gICAgICAgIGlmICghc3RlcFVwVG9rZW4pIHtcbiAgICAgICAgICBwcmludEVycm9yKCdTdGVwLXVwIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IG5vIHN0ZXAtdXAgdG9rZW4gaW4gcmVzcG9uc2UnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNCkgQ3JlYXRlIHRoZSBQQVQuXG4gICAgICAgIGNvbnN0IHBhdFVybCA9IGAke29wdGlvbnMudXJsfS9hcGkvdXNlci9wYXRzYDtcbiAgICAgICAgcHJpbnREZWJ1ZygnUE9TVCcsIHsgdXJsOiBwYXRVcmwgfSk7XG4gICAgICAgIGNvbnN0IHBhdFJlcyA9IGF3YWl0IGF4aW9zLnBvc3Q8Q3JlYXRlUGF0UmVzcG9uc2U+KFxuICAgICAgICAgIHBhdFVybCxcbiAgICAgICAgICB7IG5hbWUsIGV4cGlyZXNJbiwgLi4uKG9wdGlvbnMuc2NvcGUgPyB7IHNjb3BlOiBvcHRpb25zLnNjb3BlIH0gOiB7fSkgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICAgICAgICAgICdYLVN0ZXAtVXAtVG9rZW4nOiBzdGVwVXBUb2tlbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBodHRwc0FnZW50LFxuICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRva2VuID0gcGF0UmVzLmRhdGE/LmRhdGE/LnRva2VuO1xuICAgICAgICBjb25zdCBwYXQgPSBwYXRSZXMuZGF0YT8uZGF0YT8ucGF0O1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ3JlYXRlIHRva2VuIGZhaWxlZDogbm8gdG9rZW4gaW4gcmVzcG9uc2UnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUXVpZXQgbW9kZTogZW1pdCBvbmx5IHRoZSBleHBvcnQgbGluZSAodGhlIFBBVCBpcyBhIHZhbGlkIEJlYXJlciB0b2tlbikuXG4gICAgICAgIGlmIChxdWlldCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBleHBvcnQgUExBVEZPUk1fVE9LRU49JHt0b2tlbn1gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U3VjY2VzcygnUGVyc29uYWwgYWNjZXNzIHRva2VuIGNyZWF0ZWQnKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnTmFtZSc6IHBhdD8ubmFtZSA/PyBuYW1lLFxuICAgICAgICAgICdUb2tlbiBJRCAoanRpKSc6IHBhdD8uanRpID8/ICcodW5rbm93biknLFxuICAgICAgICAgICdFeHBpcmVzJzogcGF0Py5leHBpcmVzQXQgPz8gYCR7ZGF5c30gZGF5KHMpYCxcbiAgICAgICAgICAuLi4ocGF0Py5zY29wZSA/IHsgU2NvcGU6IHBhdC5zY29wZSB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBjb25zb2xlLmxvZyh5ZWxsb3coYm9sZCgnQ29weSB5b3VyIHRva2VuIG5vdyDigJQgaXQgd2lsbCBub3QgYmUgc2hvd24gYWdhaW46JykpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ3JlZW4odG9rZW4pKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEluZm8oJ1RpcDogdXNlIGl0IGFzIFBMQVRGT1JNX1RPS0VOIGZvciBzdWJzZXF1ZW50IGNvbW1hbmRzOicpO1xuICAgICAgICBjb25zb2xlLmxvZyhncmVlbignICBleHBvcnQgUExBVEZPUk1fVE9LRU49PHRva2VuPicpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ3JlZW4oYCAgIyBvcjogIGV2YWwgJChwaXBlbGluZS1tYW5hZ2VyIGF1dGggcGF0IC0tbmFtZSAke25hbWV9IC11ICR7aWRlbnRpZmllcn0gLS1xdWlldClgKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IChlcnJvci5yZXNwb25zZT8uZGF0YSBhcyB7IG1lc3NhZ2U/OiBzdHJpbmcgfSk/Lm1lc3NhZ2U7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ3JlYXRlIHRva2VuIGZhaWxlZCcsIHtcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID8/ICdubyByZXNwb25zZScsXG4gICAgICAgICAgICAuLi4obWVzc2FnZSA/IHsgbWVzc2FnZSB9IDoge30pLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAnY3JlYXRlLXBhdCcsIGV4ZWN1dGlvbklkLCBpZGVudGlmaWVyOiBvcHRpb25zLmlkZW50aWZpZXIsIHVybDogb3B0aW9ucy51cmwgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jcmVhdGUtcGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFZaEQsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBZ0I7SUFDeEMsY0FBYyxDQUFDLE9BQU87U0FDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNkLFdBQVcsQ0FBQywwRUFBMEUsQ0FBQztTQUN2RixjQUFj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RSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTthQUNsRSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgVElNRU9VVFMgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBhc3NlcnRDcmVkZW50aWFsVGxzQWxsb3dlZCwgY3JlZGVudGlhbEh0dHBzQWdlbnQsIHN3aXRjaE9yZ2FuaXphdGlvbiB9IGZyb20gJy4uL3V0aWxzL2F1dGgtdXRpbHMuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRGV2aWNlQXV0aEVycm9yLCBvcGVuSW5Ccm93c2VyLCBwb2xsRm9yRGV2aWNlVG9rZW4sIHJlcXVlc3REZXZpY2VDb2RlIH0gZnJvbSAnLi4vdXRpbHMvZGV2aWNlLWF1dGguanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERlYnVnLCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U3VjY2VzcyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZGltLCBncmVlbiwgeWVsbG93IH0gPSBwaWNvO1xuXG4vKiogQ3JlYXRlLWtleSByZXNwb25zZSDigJQgdGhlIHJhdyBrZXkgaXMgcmV0dXJuZWQgZXhhY3RseSBvbmNlLiAqL1xuaW50ZXJmYWNlIENyZWF0ZUFjY2Vzc0tleVJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZGF0YToge1xuICAgIC8qKiBUaGUgb3BhcXVlIGtleSAoYHBiX3BhdF/igKZgKS4gT25seSBpdHMgaGFzaCBpcyBzdG9yZWQgc2VydmVyLXNpZGUuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgYWNjZXNzS2V5OiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nOyBleHBpcmVzQXQ6IHN0cmluZzsgc2NvcGU/OiBzdHJpbmcgfCBudWxsIH07XG4gIH07XG59XG5cbmNvbnN0IE1BWF9FWFBJUkVTX0RBWVMgPSAzNjU7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcGF0YCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIE1pbnRzIGEgbmFtZWQgQUNDRVNTIEtFWSAoYHBiX3BhdF/igKZgKSDigJQgYSBkdXJhYmxlLCBpbmRpdmlkdWFsbHktcmV2b2NhYmxlIEFQSVxuICogY3JlZGVudGlhbCDigJQgZm9yIENJL2F1dG9tYXRpb24uIFVubGlrZSBhIHNlc3Npb24sIGEga2V5IGlzIHRoZSByaWdodFxuICogbG9uZy1saXZlZCBjcmVkZW50aWFsIGZvciBzY3JpcHRzLlxuICpcbiAqIFRoZSBrZXkgaXMgT1BBUVVFOiBpdCBjYXJyaWVzIG5vIGNsYWltcywgYW5kIGVhY2ggc2VydmljZSB0cmFkZXMgaXQgYXRcbiAqIHBsYXRmb3JtJ3MgL2F1dGgvdG9rZW4vZXhjaGFuZ2UgZm9yIGEgNS1taW51dGUgdG9rZW4sIHNvIHJldm9raW5nIGl0IHRha2VzXG4gKiBlZmZlY3QgZXZlcnl3aGVyZSB3aXRoaW4gZml2ZSBtaW51dGVzLlxuICpcbiAqIENyZWF0aW5nIG9uZSBpcyBzdGVwLXVwIGdhdGVkIHNlcnZlci1zaWRlLCB3aGljaCB1c2VkIHRvIG1lYW4gdGhlIENMSSBoYWQgdG9cbiAqIGhvbGQgYSBwYXNzd29yZCAoaXQgUE9TVGVkIGl0IHR3aWNlIOKAlCBzaWduLWluLCB0aGVuIHN0ZXAtdXApLiBJdCBubyBsb25nZXJcbiAqIGhhcyBvbmU6IHRoZSBkZXZpY2UgZmxvdyBhc2tzIGZvciB0aGUgc3RlcC11cCBJTiBUSEUgQlJPV1NFUiwgd2hlcmUgdGhlXG4gKiBhY2NvdW50J3MgcmVhbCBmYWN0b3JzIGxpdmUsIGFuZCB0aGUgYXBwcm92ZWQgcG9sbCByZXR1cm5zIGJvdGggdGhlIHNlc3Npb25cbiAqIGFuZCBhIHNob3J0LWxpdmVkIHN0ZXAtdXAgdG9rZW4uIFRoZSBrZXkgYmluZHMgdG8gdGhlIHVzZXIncyBhY3RpdmUgb3JnOyBwYXNzXG4gKiBgLS1vcmdgIHRvIHN3aXRjaCBmaXJzdCAod2hpY2ggcGVyc2lzdHMgYXMgdGhlIGFjdGl2ZSBvcmcpLlxuICpcbiAqIFRoZSByYXcga2V5IGlzIHByaW50ZWQgT05DRSDigJQgb25seSBpdHMgaGFzaCBpcyBzdG9yZWQsIHNvIGl0IGNhbiBuZXZlciBiZSByZWFkXG4gKiBiYWNrLiBgLS1xdWlldGAgcHJpbnRzIG9ubHkgYGV4cG9ydCBQTEFURk9STV9UT0tFTj3igKZgIHNvIGl0IGNhbiBiZSBgZXZhbGAnZDtcbiAqIHRoZSBrZXkgaXMgaXRzZWxmIGEgdmFsaWQgQmVhcmVyIGNyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXQgLS1uYW1lIGNpLWRlcGxveVxuICogcGlwZWxpbmUtbWFuYWdlciBhdXRoIHBhdCAtLW5hbWUgY2kgLS1leHBpcmVzLWRheXMgMzAgLS1vcmcgPG9yZ0lkPlxuICogZXZhbCAkKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXQgLS1uYW1lIGNpIC0tcXVpZXQpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdChwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKHByb2dyYW1cbiAgICAuY29tbWFuZCgncGF0JylcbiAgICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5hbWVkIGFjY2VzcyBrZXkgKGxvbmctbGl2ZWQsIG9wYXF1ZSBDTEkvYXV0b21hdGlvbiBjcmVkZW50aWFsKScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctLW5hbWUgPG5hbWU+JywgJ0h1bWFuLXJlYWRhYmxlIGtleSBuYW1lIChlLmcuIGNpLWRlcGxveSknKVxuICAgIC5vcHRpb24oJy0tZXhwaXJlcy1kYXlzIDxkYXlzPicsIGBLZXkgbGlmZXRpbWUgaW4gZGF5cyAoMS0ke01BWF9FWFBJUkVTX0RBWVN9KWAsICc5MCcpXG4gICAgLm9wdGlvbignLS1zY29wZSA8c2NvcGU+JywgJ09wdGlvbmFsIGNhcGFiaWxpdHkgc2NvcGUgKGxlYXN0LXByaXZpbGVnZSBrZXkpJylcbiAgICAub3B0aW9uKCctLW9yZyA8b3JnSWQ+JywgJ0JpbmQgdGhlIGtleSB0byBhIHNwZWNpZmljIG9yZ2FuaXphdGlvbiAoc3dpdGNoZXMgYWN0aXZlIG9yZyknKVxuICAgIC5vcHRpb24oJy0tbm8tYnJvd3NlcicsICdOZXZlciBvcGVuIGEgYnJvd3NlciDigJQgcHJpbnQgdGhlIHZlcmlmaWNhdGlvbiBVUkwgaW5zdGVhZCcpXG4gICAgLm9wdGlvbignLS11cmwgPHVybD4nLCAnUGxhdGZvcm0gYmFzZSBVUkwnLCBwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTCB8fCAnaHR0cHM6Ly9sb2NhbGhvc3Q6ODQ0MycpKVxuICAgIC5vcHRpb24oJy0tcXVpZXQnLCAnT25seSBwcmludCB0aGUgZXhwb3J0IHN0YXRlbWVudCAodXNlZnVsIGZvciBldmFsKScpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgLy8gU0VDVVJJVFk6IHRoZSBwb2xsIHJldHVybnMgYSBzZXNzaW9uIEFORCBhIHN0ZXAtdXAgdG9rZW4sIGFuZCB0aGUgcmVzcG9uc2VcbiAgICAgIC8vIGJlbG93IGNhcnJpZXMgdGhlIHJhdyBrZXkuIE5vbmUgb2YgdGhhdCBtYXkgY3Jvc3MgYW4gdW52ZXJpZmllZCBjb25uZWN0aW9uXG4gICAgICAvLyBpbiBwcm9kdWN0aW9uLiBNaXJyb3JzIHRoZSBndWFyZCBpbiBgbG9naW5gLlxuICAgICAgYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWQob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICBjb25zdCBxdWlldCA9IG9wdGlvbnMucXVpZXQgPz8gZmFsc2U7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignQ3JlYXRlIEFjY2VzcyBLZXknLCAnQ3JlYXRlIEFjY2VzcyBLZXknLCB7IHF1aWV0IH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lLlxuICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mIG9wdGlvbnMubmFtZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLm5hbWUudHJpbSgpIDogJyc7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0tleSBuYW1lIGlzIHJlcXVpcmVkICgtLW5hbWUpJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLlZBTElEQVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0tleSBuYW1lIG11c3QgYmUgMTAwIGNoYXJhY3RlcnMgb3IgZmV3ZXInKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuVkFMSURBVElPTik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBleHBpcnkg4oaSIHNlY29uZHMuXG4gICAgICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKE51bWJlcihvcHRpb25zLmV4cGlyZXNEYXlzKSk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGRheXMpIHx8IGRheXMgPCAxIHx8IGRheXMgPiBNQVhfRVhQSVJFU19EQVlTKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgLS1leHBpcmVzLWRheXMgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgJHtNQVhfRVhQSVJFU19EQVlTfWApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5WQUxJREFUSU9OKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBpcmVzSW4gPSBkYXlzICogODY0MDA7XG5cbiAgICAgICAgY29uc3QgaHR0cHNBZ2VudCA9IGNyZWRlbnRpYWxIdHRwc0FnZW50KG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IFRJTUVPVVRTLkhUVFBfUkVRVUVTVDtcbiAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0geyB1cmw6IG9wdGlvbnMudXJsLCBodHRwc0FnZW50LCB0aW1lb3V0IH07XG5cbiAgICAgICAgLy8gMSkgRGV2aWNlIHNpZ24taW4sIGFza2luZyBmb3IgdGhlIHN0ZXAtdXAgdGhlIGNyZWF0ZSBjYWxsIG5lZWRzLlxuICAgICAgICBpZiAoIXF1aWV0KSBwcmludEluZm8oJ1N0YXJ0aW5nIGJyb3dzZXIgc2lnbi1pbicsIHsgdXJsOiBvcHRpb25zLnVybCwgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCB9KTtcbiAgICAgICAgY29uc3QgY29kZSA9IGF3YWl0IHJlcXVlc3REZXZpY2VDb2RlKHRyYW5zcG9ydCwgeyBzdGVwVXA6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGFwcHJvdmFsVXJsID0gY29kZS52ZXJpZmljYXRpb25fdXJpX2NvbXBsZXRlIHx8IGNvZGUudmVyaWZpY2F0aW9uX3VyaTtcbiAgICAgICAgY29uc3Qgb3BlbmVkID0gb3B0aW9ucy5icm93c2VyICE9PSBmYWxzZSAmJiBvcGVuSW5Ccm93c2VyKGFwcHJvdmFsVXJsKTtcblxuICAgICAgICAvLyBUaGUgcHJvbXB0IGdvZXMgdG8gU1RERVJSIHVuZGVyIGAtLXF1aWV0YDogc3Rkb3V0IGlzIGNhcHR1cmVkIGJ5XG4gICAgICAgIC8vIGBldmFsICQo4oCmKWAsIHNvIHByaW50aW5nIHRoZSBjb2RlIHRoZXJlIHdvdWxkIHN3YWxsb3cgdGhlIG9uZSB0aGluZ1xuICAgICAgICAvLyB0aGUgdXNlciBoYXMgdG8gcmVhZCBiZWZvcmUgYW55dGhpbmcgY2FuIHByb2NlZWQuXG4gICAgICAgIGNvbnN0IHNheSA9IHF1aWV0ID8gY29uc29sZS5lcnJvciA6IGNvbnNvbGUubG9nO1xuICAgICAgICBzYXkoJycpO1xuICAgICAgICBzYXkoYCAgWW91ciBjb2RlOiAgJHtib2xkKGN5YW4oY29kZS51c2VyX2NvZGUpKX1gKTtcbiAgICAgICAgc2F5KGAgIEFwcHJvdmUgYXQ6ICR7Z3JlZW4oYXBwcm92YWxVcmwpfWApO1xuICAgICAgICBzYXkoJycpO1xuICAgICAgICBzYXkoZGltKG9wZW5lZFxuICAgICAgICAgID8gJyAgT3BlbmluZyB5b3VyIGJyb3dzZXLigKYgYXBwcm92ZSB0aGUgY29kZSB0aGVyZSwgdGhlbiBjb21lIGJhY2suJ1xuICAgICAgICAgIDogJyAgT3BlbiB0aGF0IFVSTCBpbiBhIGJyb3dzZXIsIGNoZWNrIHRoZSBjb2RlIG1hdGNoZXMsIGFuZCBhcHByb3ZlLicpKTtcbiAgICAgICAgaWYgKCFxdWlldCkgcHJpbnRJbmZvKCdXYWl0aW5nIGZvciBhcHByb3ZhbOKApicpO1xuXG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBwb2xsRm9yRGV2aWNlVG9rZW4odHJhbnNwb3J0LCBjb2RlKTtcbiAgICAgICAgbGV0IGFjY2Vzc1Rva2VuID0gc2Vzc2lvbi5hY2Nlc3NfdG9rZW47XG4gICAgICAgIGNvbnN0IHN0ZXBVcFRva2VuID0gc2Vzc2lvbi5zdGVwX3VwX3Rva2VuO1xuICAgICAgICBpZiAoIXN0ZXBVcFRva2VuKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignVGhlIGFwcHJvdmFsIGRpZCBub3QgcmV0dXJuIGEgc3RlcC11cCBjb25maXJtYXRpb24g4oCUIGFwcHJvdmUgdGhlIGNvZGUgcHJvbXB0bHkgYW5kIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMikgT3B0aW9uYWxseSBiaW5kIHRvIGEgc3BlY2lmaWMgb3JnIChwZXJzaXN0cyBhcyB0aGUgYWN0aXZlIG9yZywgd2hpY2hcbiAgICAgICAgLy8gICAgdGhlIGtleSBpbmhlcml0cykuIFJvdGF0ZXMgdGhlIHNlc3Npb24sIGJ1dCB0aGUgc3RlcC11cCB0b2tlbiBpc1xuICAgICAgICAvLyAgICBib3VuZCB0byB0aGUgdXNlciwgbm90IHRoZSBzZXNzaW9uLCBzbyBpdCBzdXJ2aXZlcyB0aGUgc3dpdGNoLlxuICAgICAgICBpZiAob3B0aW9ucy5vcmcpIHtcbiAgICAgICAgICBpZiAoIXF1aWV0KSBwcmludEluZm8oJ1N3aXRjaGluZyB0byBvcmdhbml6YXRpb24nLCB7IG9yZ0lkOiBvcHRpb25zLm9yZyB9KTtcbiAgICAgICAgICBhY2Nlc3NUb2tlbiA9IChhd2FpdCBzd2l0Y2hPcmdhbml6YXRpb24oe1xuICAgICAgICAgICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICAgICAgICAgIG9yZ0lkOiBvcHRpb25zLm9yZyxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgaHR0cHNBZ2VudCxcbiAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgICBxdWlldCxcbiAgICAgICAgICB9KSkuYWNjZXNzVG9rZW47XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzKSBDcmVhdGUgdGhlIGFjY2VzcyBrZXkuIFRoZSBzdGVwLXVwIHRva2VuIGlzIHNob3J0LWxpdmVkICh+NjBzKSBhbmRcbiAgICAgICAgLy8gICAgc2luZ2xlLXVzZSwgc28gaXQgaXMgc3BlbnQgaW1tZWRpYXRlbHkuXG4gICAgICAgIGNvbnN0IGtleVVybCA9IGAke29wdGlvbnMudXJsfS9hcGkvdXNlci9rZXlzYDtcbiAgICAgICAgcHJpbnREZWJ1ZygnUE9TVCcsIHsgdXJsOiBrZXlVcmwgfSk7XG4gICAgICAgIGNvbnN0IGtleVJlcyA9IGF3YWl0IGF4aW9zLnBvc3Q8Q3JlYXRlQWNjZXNzS2V5UmVzcG9uc2U+KFxuICAgICAgICAgIGtleVVybCxcbiAgICAgICAgICB7IG5hbWUsIGV4cGlyZXNJbiwgLi4uKG9wdGlvbnMuc2NvcGUgPyB7IHNjb3BlOiBvcHRpb25zLnNjb3BlIH0gOiB7fSkgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICAgICAgICAgICdYLVN0ZXAtVXAtVG9rZW4nOiBzdGVwVXBUb2tlbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBodHRwc0FnZW50LFxuICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGtleSA9IGtleVJlcy5kYXRhPy5kYXRhPy5rZXk7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBrZXlSZXMuZGF0YT8uZGF0YT8uYWNjZXNzS2V5O1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0NyZWF0ZSBrZXkgZmFpbGVkOiBubyBrZXkgaW4gcmVzcG9uc2UnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUXVpZXQgbW9kZTogZW1pdCBvbmx5IHRoZSBleHBvcnQgbGluZSAodGhlIGtleSBpcyBhIHZhbGlkIEJlYXJlciBjcmVkZW50aWFsKS5cbiAgICAgICAgaWYgKHF1aWV0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYGV4cG9ydCBQTEFURk9STV9UT0tFTj0ke2tleX1gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U3VjY2VzcygnQWNjZXNzIGtleSBjcmVhdGVkJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ05hbWUnOiBtZXRhPy5uYW1lID8/IG5hbWUsXG4gICAgICAgICAgJ0tleSBJRCc6IG1ldGE/LmlkID8/ICcodW5rbm93biknLFxuICAgICAgICAgICdLZXknOiBtZXRhPy5kaXNwbGF5ID8/ICcodW5rbm93biknLFxuICAgICAgICAgICdFeHBpcmVzJzogbWV0YT8uZXhwaXJlc0F0ID8/IGAke2RheXN9IGRheShzKWAsXG4gICAgICAgICAgLi4uKG1ldGE/LnNjb3BlID8geyBTY29wZTogbWV0YS5zY29wZSB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBjb25zb2xlLmxvZyh5ZWxsb3coYm9sZCgnQ29weSB5b3VyIGtleSBub3cg4oCUIG9ubHkgaXRzIGhhc2ggaXMgc3RvcmVkLCBzbyBpdCB3aWxsIG5vdCBiZSBzaG93biBhZ2FpbjonKSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhncmVlbihrZXkpKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEluZm8oJ1RpcDogdXNlIGl0IGFzIFBMQVRGT1JNX1RPS0VOIGZvciBzdWJzZXF1ZW50IGNvbW1hbmRzOicpO1xuICAgICAgICBjb25zb2xlLmxvZyhncmVlbignICBleHBvcnQgUExBVEZPUk1fVE9LRU49PHRva2VuPicpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ3JlZW4oYCAgIyBvcjogIGV2YWwgJChwaXBlbGluZS1tYW5hZ2VyIGF1dGggcGF0IC0tbmFtZSAke25hbWV9IC0tcXVpZXQpYCkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRGV2aWNlQXV0aEVycm9yKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ3JlYXRlIGtleSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gLCB7IHJlYXNvbjogZXJyb3IuY29kZSB9KTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyb3IucmVzcG9uc2U/LnN0YXR1cztcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gKGVycm9yLnJlc3BvbnNlPy5kYXRhIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZTtcbiAgICAgICAgICBwcmludEVycm9yKCdDcmVhdGUga2V5IGZhaWxlZCcsIHtcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID8/ICdubyByZXNwb25zZScsXG4gICAgICAgICAgICAuLi4obWVzc2FnZSA/IHsgbWVzc2FnZSB9IDoge30pLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAnY3JlYXRlLXBhdCcsIGV4ZWN1dGlvbklkLCB1cmw6IG9wdGlvbnMudXJsIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -2,19 +2,25 @@ import { Command } from 'commander';
|
|
|
2
2
|
/**
|
|
3
3
|
* Registers the `login` command with the CLI program.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Signs in with the OAuth 2.0 device authorization grant (RFC 8628): the CLI
|
|
6
|
+
* shows a short code, the person approves it in a browser, and the CLI receives
|
|
7
|
+
* an ordinary session. There is no password flag and no way to hand the CLI a
|
|
8
|
+
* refresh token — both used to end up in shell history, `ps` output and CI logs,
|
|
9
|
+
* and both skipped the SSO / step-up / MFA the browser already enforces.
|
|
10
|
+
*
|
|
11
|
+
* The session is written to the credential store (`~/.pipeline-manager/
|
|
12
|
+
* credentials.json`, owner-only), so subsequent commands authenticate with no
|
|
13
|
+
* environment variable at all. `PLATFORM_TOKEN` still wins when it is set, which
|
|
14
|
+
* is what CI uses — an access key from `auth pat`.
|
|
8
15
|
*
|
|
9
16
|
* @param program - The root Commander program instance to attach the command to.
|
|
10
17
|
*
|
|
11
18
|
* @example
|
|
12
19
|
* ```bash
|
|
13
|
-
* pipeline-manager auth login
|
|
14
|
-
* pipeline-manager auth login
|
|
15
|
-
* pipeline-manager auth login -
|
|
16
|
-
* eval $(pipeline-manager auth login
|
|
17
|
-
* pipeline-manager auth login --refresh <refresh-token>
|
|
20
|
+
* pipeline-manager auth login
|
|
21
|
+
* pipeline-manager auth login --url https://platform.example.com --org <orgId>
|
|
22
|
+
* pipeline-manager auth login --no-browser # print the URL instead of opening it
|
|
23
|
+
* eval $(pipeline-manager auth login --quiet) # also export PLATFORM_TOKEN
|
|
18
24
|
* ```
|
|
19
25
|
*/
|
|
20
26
|
export declare function login(program: Command): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4G5C"}
|