@pipeline-builder/pipeline-manager 4.5.2 → 4.5.4
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 +62 -37
- package/dist/agent/post-steps.d.ts +5 -4
- package/dist/agent/post-steps.d.ts.map +1 -1
- package/dist/agent/post-steps.js +19 -7
- package/dist/agent/targets.d.ts +12 -2
- package/dist/agent/targets.d.ts.map +1 -1
- package/dist/agent/targets.js +20 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -7
- package/dist/commands/audit-stacks.d.ts +42 -1
- package/dist/commands/audit-stacks.d.ts.map +1 -1
- package/dist/commands/audit-stacks.js +104 -23
- package/dist/commands/audit-tokens.d.ts.map +1 -1
- package/dist/commands/audit-tokens.js +3 -4
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +9 -6
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +15 -2
- package/dist/commands/login.d.ts +3 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +19 -10
- package/dist/commands/logout.d.ts +24 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +105 -0
- package/dist/commands/new-plugin.js +5 -5
- package/dist/commands/org-export.js +2 -2
- package/dist/commands/pipeline-remove.d.ts +26 -0
- package/dist/commands/pipeline-remove.d.ts.map +1 -0
- package/dist/commands/pipeline-remove.js +84 -0
- package/dist/commands/provision-steps.d.ts.map +1 -1
- package/dist/commands/provision-steps.js +1 -2
- package/dist/commands/provision.d.ts.map +1 -1
- package/dist/commands/provision.js +6 -5
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +3 -4
- package/dist/commands/status.d.ts +5 -2
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +65 -25
- package/dist/commands/toolchain.d.ts +21 -0
- package/dist/commands/toolchain.d.ts.map +1 -0
- package/dist/commands/toolchain.js +70 -0
- package/dist/commands/validate-templates.d.ts.map +1 -1
- package/dist/commands/validate-templates.js +4 -5
- package/dist/config/cli.constants.d.ts +8 -0
- package/dist/config/cli.constants.d.ts.map +1 -1
- package/dist/config/cli.constants.js +21 -2
- package/dist/types/plugin.d.ts +0 -6
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/plugin.js +1 -1
- package/dist/utils/command-utils.d.ts +13 -0
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +31 -17
- 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 +14 -4
- package/dist/utils/credential-store.d.ts +9 -1
- package/dist/utils/credential-store.d.ts.map +1 -1
- package/dist/utils/credential-store.js +21 -2
- package/dist/utils/error-handler.d.ts +10 -1
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +20 -8
- package/dist/utils/pipeline-config.d.ts +5 -2
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +12 -3
- package/dist/utils/plugin-resolver.d.ts +21 -6
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +42 -9
- package/dist/utils/response-utils.d.ts +11 -0
- package/dist/utils/response-utils.d.ts.map +1 -1
- package/dist/utils/response-utils.js +23 -1
- package/dist/utils/toolchain.d.ts +78 -0
- package/dist/utils/toolchain.d.ts.map +1 -0
- package/dist/utils/toolchain.js +195 -0
- package/package.json +4 -4
|
@@ -6,6 +6,7 @@ import pico from 'picocolors';
|
|
|
6
6
|
import { TIMEOUTS } from '../config/cli.constants.js';
|
|
7
7
|
import { assertCredentialTlsAllowed, credentialHttpsAgent, switchOrganization } from '../utils/auth-utils.js';
|
|
8
8
|
import { printCommandHeader, withSslOptions } from '../utils/command-utils.js';
|
|
9
|
+
import { getApiConfig } from '../utils/config-loader.js';
|
|
9
10
|
import { beginDeviceApproval, DeviceAuthError, pollForDeviceToken } from '../utils/device-auth.js';
|
|
10
11
|
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
11
12
|
import { printDebug, printError, printInfo, printKeyValue, printSuccess } from '../utils/output-utils.js';
|
|
@@ -51,7 +52,7 @@ export function createPat(program) {
|
|
|
51
52
|
.option('--scope <scope>', 'Optional capability scope (least-privilege key)')
|
|
52
53
|
.option('--org <orgId>', 'Bind the key to a specific organization (switches active org)')
|
|
53
54
|
.option('--no-browser', 'Never open a browser — print the verification URL instead')
|
|
54
|
-
.option('--url <url>', 'Platform base URL
|
|
55
|
+
.option('--url <url>', 'Platform base URL (default: PLATFORM_BASE_URL, else the platform you last signed in to, else config.yml)'))
|
|
55
56
|
.option('--quiet', 'Only print the export statement (useful for eval)')
|
|
56
57
|
.action(async (options) => {
|
|
57
58
|
// SECURITY: the poll returns a session AND a step-up token, and the response
|
|
@@ -59,6 +60,8 @@ export function createPat(program) {
|
|
|
59
60
|
// in production. Mirrors the guard in `login`.
|
|
60
61
|
assertCredentialTlsAllowed(options.verifySsl);
|
|
61
62
|
const quiet = options.quiet ?? false;
|
|
63
|
+
// Same base-URL layers as every other command (see `auth login`).
|
|
64
|
+
const url = options.url ?? getApiConfig().api.baseUrl;
|
|
62
65
|
const executionId = printCommandHeader('Create Access Key', 'Create Access Key', { quiet });
|
|
63
66
|
try {
|
|
64
67
|
// Validate name.
|
|
@@ -80,7 +83,7 @@ export function createPat(program) {
|
|
|
80
83
|
const expiresIn = days * 86400;
|
|
81
84
|
const httpsAgent = credentialHttpsAgent(options.verifySsl);
|
|
82
85
|
const timeout = TIMEOUTS.HTTP_REQUEST;
|
|
83
|
-
const transport = { url
|
|
86
|
+
const transport = { url, httpsAgent, timeout };
|
|
84
87
|
// 1) Device sign-in, asking for the step-up the create call needs.
|
|
85
88
|
const code = await beginDeviceApproval(transport, {
|
|
86
89
|
quiet,
|
|
@@ -102,7 +105,7 @@ export function createPat(program) {
|
|
|
102
105
|
if (!quiet)
|
|
103
106
|
printInfo('Switching to organization', { orgId: options.org });
|
|
104
107
|
accessToken = (await switchOrganization({
|
|
105
|
-
url
|
|
108
|
+
url,
|
|
106
109
|
orgId: options.org,
|
|
107
110
|
accessToken,
|
|
108
111
|
httpsAgent,
|
|
@@ -112,7 +115,7 @@ export function createPat(program) {
|
|
|
112
115
|
}
|
|
113
116
|
// 3) Create the access key. The step-up token is short-lived (~60s) and
|
|
114
117
|
// single-use, so it is spent immediately.
|
|
115
|
-
const keyUrl = `${
|
|
118
|
+
const keyUrl = `${url}/api/user/keys`;
|
|
116
119
|
printDebug('POST', { url: keyUrl });
|
|
117
120
|
const keyRes = await axios.post(keyUrl, { name, expiresIn, ...(options.scope ? { scope: options.scope } : {}) }, {
|
|
118
121
|
headers: {
|
|
@@ -170,9 +173,9 @@ export function createPat(program) {
|
|
|
170
173
|
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
171
174
|
debug: program.opts().debug,
|
|
172
175
|
exit: true,
|
|
173
|
-
context: { command: 'create-pat', executionId, url
|
|
176
|
+
context: { command: 'create-pat', executionId, url },
|
|
174
177
|
});
|
|
175
178
|
}
|
|
176
179
|
});
|
|
177
180
|
}
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBhdC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1wYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQVlyQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUU3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQWdCO0lBQ3hDLGNBQWMsQ0FBQyxPQUFPO1NBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDZCxXQUFXLENBQUMsMEVBQTBFLENBQUM7U0FDdkYsY0FBYyxD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QUMsRUFBRSxDQUFDO2lCQUNoQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTthQUNsRSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgVElNRU9VVFMgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBhc3NlcnRDcmVkZW50aWFsVGxzQWxsb3dlZCwgY3JlZGVudGlhbEh0dHBzQWdlbnQsIHN3aXRjaE9yZ2FuaXphdGlvbiB9IGZyb20gJy4uL3V0aWxzL2F1dGgtdXRpbHMuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgYmVnaW5EZXZpY2VBcHByb3ZhbCwgRGV2aWNlQXV0aEVycm9yLCBwb2xsRm9yRGV2aWNlVG9rZW4gfSBmcm9tICcuLi91dGlscy9kZXZpY2UtYXV0aC5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IHJlcXVlc3RDb3JyZWxhdGlvbkhlYWRlcnMgfSBmcm9tICcuLi91dGlscy9yZXF1ZXN0LWNvbnRleHQuanMnO1xuXG5jb25zdCB7IGJvbGQsIGdyZWVuLCB5ZWxsb3cgfSA9IHBpY287XG5cbi8qKiBDcmVhdGUta2V5IHJlc3BvbnNlIOKAlCB0aGUgcmF3IGtleSBpcyByZXR1cm5lZCBleGFjdGx5IG9uY2UuICovXG5pbnRlcmZhY2UgQ3JlYXRlQWNjZXNzS2V5UmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhOiB7XG4gICAgLyoqIFRoZSBvcGFxdWUga2V5IChgcGJfcGF0X+KApmApLiBPbmx5IGl0cyBoYXNoIGlzIHN0b3JlZCBzZXJ2ZXItc2lkZS4gKi9cbiAgICBrZXk6IHN0cmluZztcbiAgICBhY2Nlc3NLZXk6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkaXNwbGF5OiBzdHJpbmc7IGV4cGlyZXNBdDogc3RyaW5nOyBzY29wZT86IHN0cmluZyB8IG51bGwgfTtcbiAgfTtcbn1cblxuY29uc3QgTUFYX0VYUElSRVNfREFZUyA9IDM2NTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwYXRgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogTWludHMgYSBuYW1lZCBBQ0NFU1MgS0VZIChgcGJfcGF0X+KApmApIOKAlCBhIGR1cmFibGUsIGluZGl2aWR1YWxseS1yZXZvY2FibGUgQVBJXG4gKiBjcmVkZW50aWFsIOKAlCBmb3IgQ0kvYXV0b21hdGlvbi4gVW5saWtlIGEgc2Vzc2lvbiwgYSBrZXkgaXMgdGhlIHJpZ2h0XG4gKiBsb25nLWxpdmVkIGNyZWRlbnRpYWwgZm9yIHNjcmlwdHMuXG4gKlxuICogVGhlIGtleSBpcyBPUEFRVUU6IGl0IGNhcnJpZXMgbm8gY2xhaW1zLCBhbmQgZWFjaCBzZXJ2aWNlIHRyYWRlcyBpdCBhdFxuICogcGxhdGZvcm0ncyAvYXV0aC90b2tlbi9leGNoYW5nZSBmb3IgYSA1LW1pbnV0ZSB0b2tlbiwgc28gcmV2b2tpbmcgaXQgdGFrZXNcbiAqIGVmZmVjdCBldmVyeXdoZXJlIHdpdGhpbiBmaXZlIG1pbnV0ZXMuXG4gKlxuICogQ3JlYXRpbmcgb25lIGlzIHN0ZXAtdXAgZ2F0ZWQgc2VydmVyLXNpZGUsIHlldCB0aGUgQ0xJIGhvbGRzIG5vIHBhc3N3b3JkOiB0aGVcbiAqIGRldmljZSBmbG93IGFza3MgZm9yIHRoZSBzdGVwLXVwIElOIFRIRSBCUk9XU0VSLCB3aGVyZSB0aGVcbiAqIGFjY291bnQncyByZWFsIGZhY3RvcnMgbGl2ZSwgYW5kIHRoZSBhcHByb3ZlZCBwb2xsIHJldHVybnMgYm90aCB0aGUgc2Vzc2lvblxuICogYW5kIGEgc2hvcnQtbGl2ZWQgc3RlcC11cCB0b2tlbi4gVGhlIGtleSBiaW5kcyB0byB0aGUgdXNlcidzIGFjdGl2ZSBvcmc7IHBhc3NcbiAqIGAtLW9yZ2AgdG8gc3dpdGNoIGZpcnN0ICh3aGljaCBwZXJzaXN0cyBhcyB0aGUgYWN0aXZlIG9yZykuXG4gKlxuICogVGhlIHJhdyBrZXkgaXMgcHJpbnRlZCBPTkNFIOKAlCBvbmx5IGl0cyBoYXNoIGlzIHN0b3JlZCwgc28gaXQgY2FuIG5ldmVyIGJlIHJlYWRcbiAqIGJhY2suIGAtLXF1aWV0YCBwcmludHMgb25seSBgZXhwb3J0IFBMQVRGT1JNX1RPS0VOPeKApmAgc28gaXQgY2FuIGJlIGBldmFsYCdkO1xuICogdGhlIGtleSBpcyBpdHNlbGYgYSB2YWxpZCBCZWFyZXIgY3JlZGVudGlhbC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBhdXRoIHBhdCAtLW5hbWUgY2ktZGVwbG95XG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1dGggcGF0IC0tbmFtZSBjaSAtLWV4cGlyZXMtZGF5cyAzMCAtLW9yZyA8b3JnSWQ+XG4gKiBldmFsICQocGlwZWxpbmUtbWFuYWdlciBhdXRoIHBhdCAtLW5hbWUgY2kgLS1xdWlldClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMocHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwYXQnKVxuICAgIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmFtZWQgYWNjZXNzIGtleSAobG9uZy1saXZlZCwgb3BhcXVlIENMSS9hdXRvbWF0aW9uIGNyZWRlbnRpYWwpJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy0tbmFtZSA8bmFtZT4nLCAnSHVtYW4tcmVhZGFibGUga2V5IG5hbWUgKGUuZy4gY2ktZGVwbG95KScpXG4gICAgLm9wdGlvbignLS1leHBpcmVzLWRheXMgPGRheXM+JywgYEtleSBsaWZldGltZSBpbiBkYXlzICgxLSR7TUFYX0VYUElSRVNfREFZU30pYCwgJzkwJylcbiAgICAub3B0aW9uKCctLXNjb3BlIDxzY29wZT4nLCAnT3B0aW9uYWwgY2FwYWJpbGl0eSBzY29wZSAobGVhc3QtcHJpdmlsZWdlIGtleSknKVxuICAgIC5vcHRpb24oJy0tb3JnIDxvcmdJZD4nLCAnQmluZCB0aGUga2V5IHRvIGEgc3BlY2lmaWMgb3JnYW5pemF0aW9uIChzd2l0Y2hlcyBhY3RpdmUgb3JnKScpXG4gICAgLm9wdGlvbignLS1uby1icm93c2VyJywgJ05ldmVyIG9wZW4gYSBicm93c2VyIOKAlCBwcmludCB0aGUgdmVyaWZpY2F0aW9uIFVSTCBpbnN0ZWFkJylcbiAgICAub3B0aW9uKCctLXVybCA8dXJsPicsICdQbGF0Zm9ybSBiYXNlIFVSTCcsIHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMIHx8ICdodHRwczovL2xvY2FsaG9zdDo4NDQzJykpXG4gICAgLm9wdGlvbignLS1xdWlldCcsICdPbmx5IHByaW50IHRoZSBleHBvcnQgc3RhdGVtZW50ICh1c2VmdWwgZm9yIGV2YWwpJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAvLyBTRUNVUklUWTogdGhlIHBvbGwgcmV0dXJucyBhIHNlc3Npb24gQU5EIGEgc3RlcC11cCB0b2tlbiwgYW5kIHRoZSByZXNwb25zZVxuICAgICAgLy8gYmVsb3cgY2FycmllcyB0aGUgcmF3IGtleS4gTm9uZSBvZiB0aGF0IG1heSBjcm9zcyBhbiB1bnZlcmlmaWVkIGNvbm5lY3Rpb25cbiAgICAgIC8vIGluIHByb2R1Y3Rpb24uIE1pcnJvcnMgdGhlIGd1YXJkIGluIGBsb2dpbmAuXG4gICAgICBhc3NlcnRDcmVkZW50aWFsVGxzQWxsb3dlZChvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgIGNvbnN0IHF1aWV0ID0gb3B0aW9ucy5xdWlldCA/PyBmYWxzZTtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdDcmVhdGUgQWNjZXNzIEtleScsICdDcmVhdGUgQWNjZXNzIEtleScsIHsgcXVpZXQgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIG5hbWUuXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2Ygb3B0aW9ucy5uYW1lID09PSAnc3RyaW5nJyA/IG9wdGlvbnMubmFtZS50cmltKCkgOiAnJztcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignS2V5IG5hbWUgaXMgcmVxdWlyZWQgKC0tbmFtZSknKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuVkFMSURBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMTAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignS2V5IG5hbWUgbXVzdCBiZSAxMDAgY2hhcmFjdGVycyBvciBmZXdlcicpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5WQUxJREFUSU9OKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGV4cGlyeSDihpIgc2Vjb25kcy5cbiAgICAgICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoTnVtYmVyKG9wdGlvbnMuZXhwaXJlc0RheXMpKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZGF5cykgfHwgZGF5cyA8IDEgfHwgZGF5cyA+IE1BWF9FWFBJUkVTX0RBWVMpIHtcbiAgICAgICAgICBwcmludEVycm9yKGAtLWV4cGlyZXMtZGF5cyBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAke01BWF9FWFBJUkVTX0RBWVN9YCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLlZBTElEQVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IGRheXMgKiA4NjQwMDtcblxuICAgICAgICBjb25zdCBodHRwc0FnZW50ID0gY3JlZGVudGlhbEh0dHBzQWdlbnQob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gVElNRU9VVFMuSFRUUF9SRVFVRVNUO1xuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSB7IHVybDogb3B0aW9ucy51cmwsIGh0dHBzQWdlbnQsIHRpbWVvdXQgfTtcblxuICAgICAgICAvLyAxKSBEZXZpY2Ugc2lnbi1pbiwgYXNraW5nIGZvciB0aGUgc3RlcC11cCB0aGUgY3JlYXRlIGNhbGwgbmVlZHMuXG4gICAgICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBiZWdpbkRldmljZUFwcHJvdmFsKHRyYW5zcG9ydCwge1xuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIGJyb3dzZXI6IG9wdGlvbnMuYnJvd3NlcixcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICAgIHN0ZXBVcDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHBvbGxGb3JEZXZpY2VUb2tlbih0cmFuc3BvcnQsIGNvZGUpO1xuICAgICAgICBsZXQgYWNjZXNzVG9rZW4gPSBzZXNzaW9uLmFjY2Vzc190b2tlbjtcbiAgICAgICAgY29uc3Qgc3RlcFVwVG9rZW4gPSBzZXNzaW9uLnN0ZXBfdXBfdG9rZW47XG4gICAgICAgIGlmICghc3RlcFVwVG9rZW4pIHtcbiAgICAgICAgICBwcmludEVycm9yKCdUaGUgYXBwcm92YWwgZGlkIG5vdCByZXR1cm4gYSBzdGVwLXVwIGNvbmZpcm1hdGlvbiDigJQgYXBwcm92ZSB0aGUgY29kZSBwcm9tcHRseSBhbmQgdHJ5IGFnYWluLicpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyKSBPcHRpb25hbGx5IGJpbmQgdG8gYSBzcGVjaWZpYyBvcmcgKHBlcnNpc3RzIGFzIHRoZSBhY3RpdmUgb3JnLCB3aGljaFxuICAgICAgICAvLyAgICB0aGUga2V5IGluaGVyaXRzKS4gUm90YXRlcyB0aGUgc2Vzc2lvbiwgYnV0IHRoZSBzdGVwLXVwIHRva2VuIGlzXG4gICAgICAgIC8vICAgIGJvdW5kIHRvIHRoZSB1c2VyLCBub3QgdGhlIHNlc3Npb24sIHNvIGl0IHN1cnZpdmVzIHRoZSBzd2l0Y2guXG4gICAgICAgIGlmIChvcHRpb25zLm9yZykge1xuICAgICAgICAgIGlmICghcXVpZXQpIHByaW50SW5mbygnU3dpdGNoaW5nIHRvIG9yZ2FuaXphdGlvbicsIHsgb3JnSWQ6IG9wdGlvbnMub3JnIH0pO1xuICAgICAgICAgIGFjY2Vzc1Rva2VuID0gKGF3YWl0IHN3aXRjaE9yZ2FuaXphdGlvbih7XG4gICAgICAgICAgICB1cmw6IG9wdGlvbnMudXJsLFxuICAgICAgICAgICAgb3JnSWQ6IG9wdGlvbnMub3JnLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICBodHRwc0FnZW50LFxuICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIH0pKS5hY2Nlc3NUb2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMpIENyZWF0ZSB0aGUgYWNjZXNzIGtleS4gVGhlIHN0ZXAtdXAgdG9rZW4gaXMgc2hvcnQtbGl2ZWQgKH42MHMpIGFuZFxuICAgICAgICAvLyAgICBzaW5nbGUtdXNlLCBzbyBpdCBpcyBzcGVudCBpbW1lZGlhdGVseS5cbiAgICAgICAgY29uc3Qga2V5VXJsID0gYCR7b3B0aW9ucy51cmx9L2FwaS91c2VyL2tleXNgO1xuICAgICAgICBwcmludERlYnVnKCdQT1NUJywgeyB1cmw6IGtleVVybCB9KTtcbiAgICAgICAgY29uc3Qga2V5UmVzID0gYXdhaXQgYXhpb3MucG9zdDxDcmVhdGVBY2Nlc3NLZXlSZXNwb25zZT4oXG4gICAgICAgICAga2V5VXJsLFxuICAgICAgICAgIHsgbmFtZSwgZXhwaXJlc0luLCAuLi4ob3B0aW9ucy5zY29wZSA/IHsgc2NvcGU6IG9wdGlvbnMuc2NvcGUgfSA6IHt9KSB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcbiAgICAgICAgICAgICAgJ1gtU3RlcC1VcC1Ub2tlbic6IHN0ZXBVcFRva2VuLFxuICAgICAgICAgICAgICAuLi5yZXF1ZXN0Q29ycmVsYXRpb25IZWFkZXJzKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaHR0cHNBZ2VudCxcbiAgICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBrZXkgPSBrZXlSZXMuZGF0YT8uZGF0YT8ua2V5O1xuICAgICAgICBjb25zdCBtZXRhID0ga2V5UmVzLmRhdGE/LmRhdGE/LmFjY2Vzc0tleTtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdDcmVhdGUga2V5IGZhaWxlZDogbm8ga2V5IGluIHJlc3BvbnNlJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFQSV9SRVFVRVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFF1aWV0IG1vZGU6IGVtaXQgb25seSB0aGUgZXhwb3J0IGxpbmUgKHRoZSBrZXkgaXMgYSB2YWxpZCBCZWFyZXIgY3JlZGVudGlhbCkuXG4gICAgICAgIGlmIChxdWlldCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBleHBvcnQgUExBVEZPUk1fVE9LRU49JHtrZXl9YCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ0FjY2VzcyBrZXkgY3JlYXRlZCcpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdOYW1lJzogbWV0YT8ubmFtZSA/PyBuYW1lLFxuICAgICAgICAgICdLZXkgSUQnOiBtZXRhPy5pZCA/PyAnKHVua25vd24pJyxcbiAgICAgICAgICAnS2V5JzogbWV0YT8uZGlzcGxheSA/PyAnKHVua25vd24pJyxcbiAgICAgICAgICAnRXhwaXJlcyc6IG1ldGE/LmV4cGlyZXNBdCA/PyBgJHtkYXlzfSBkYXkocylgLFxuICAgICAgICAgIC4uLihtZXRhPy5zY29wZSA/IHsgU2NvcGU6IG1ldGEuc2NvcGUgfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgY29uc29sZS5sb2coeWVsbG93KGJvbGQoJ0NvcHkgeW91ciBrZXkgbm93IOKAlCBvbmx5IGl0cyBoYXNoIGlzIHN0b3JlZCwgc28gaXQgd2lsbCBub3QgYmUgc2hvd24gYWdhaW46JykpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ3JlZW4oa2V5KSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdUaXA6IHVzZSBpdCBhcyBQTEFURk9STV9UT0tFTiBmb3Igc3Vic2VxdWVudCBjb21tYW5kczonKTtcbiAgICAgICAgY29uc29sZS5sb2coZ3JlZW4oJyAgZXhwb3J0IFBMQVRGT1JNX1RPS0VOPTx0b2tlbj4nKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdyZWVuKGAgICMgb3I6ICBldmFsICQocGlwZWxpbmUtbWFuYWdlciBhdXRoIHBhdCAtLW5hbWUgJHtuYW1lfSAtLXF1aWV0KWApKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIERldmljZUF1dGhFcnJvcikge1xuICAgICAgICAgIHByaW50RXJyb3IoYENyZWF0ZSBrZXkgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCwgeyByZWFzb246IGVycm9yLmNvZGUgfSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IChlcnJvci5yZXNwb25zZT8uZGF0YSBhcyB7IG1lc3NhZ2U/OiBzdHJpbmcgfSk/Lm1lc3NhZ2U7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ3JlYXRlIGtleSBmYWlsZWQnLCB7XG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA/PyAnbm8gcmVzcG9uc2UnLFxuICAgICAgICAgICAgLi4uKG1lc3NhZ2UgPyB7IG1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ2NyZWF0ZS1wYXQnLCBleGVjdXRpb25JZCwgdXJsOiBvcHRpb25zLnVybCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBhdC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1wYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFZckMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUFnQjtJQUN4QyxjQUFjLENBQUMsT0FBTztTQUNuQixPQUFPLENBQUMsS0FBSyxD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Q0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDaEMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFO2FBQ3JELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBUSU1FT1VUUyB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGFzc2VydENyZWRlbnRpYWxUbHNBbGxvd2VkLCBjcmVkZW50aWFsSHR0cHNBZ2VudCwgc3dpdGNoT3JnYW5pemF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvYXV0aC11dGlscy5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBnZXRBcGlDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWctbG9hZGVyLmpzJztcbmltcG9ydCB7IGJlZ2luRGV2aWNlQXBwcm92YWwsIERldmljZUF1dGhFcnJvciwgcG9sbEZvckRldmljZVRva2VuIH0gZnJvbSAnLi4vdXRpbHMvZGV2aWNlLWF1dGguanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERlYnVnLCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U3VjY2VzcyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyByZXF1ZXN0Q29ycmVsYXRpb25IZWFkZXJzIH0gZnJvbSAnLi4vdXRpbHMvcmVxdWVzdC1jb250ZXh0LmpzJztcblxuY29uc3QgeyBib2xkLCBncmVlbiwgeWVsbG93IH0gPSBwaWNvO1xuXG4vKiogQ3JlYXRlLWtleSByZXNwb25zZSDigJQgdGhlIHJhdyBrZXkgaXMgcmV0dXJuZWQgZXhhY3RseSBvbmNlLiAqL1xuaW50ZXJmYWNlIENyZWF0ZUFjY2Vzc0tleVJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZGF0YToge1xuICAgIC8qKiBUaGUgb3BhcXVlIGtleSAoYHBiX3BhdF/igKZgKS4gT25seSBpdHMgaGFzaCBpcyBzdG9yZWQgc2VydmVyLXNpZGUuICovXG4gICAga2V5OiBzdHJpbmc7XG4gICAgYWNjZXNzS2V5OiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nOyBleHBpcmVzQXQ6IHN0cmluZzsgc2NvcGU/OiBzdHJpbmcgfCBudWxsIH07XG4gIH07XG59XG5cbmNvbnN0IE1BWF9FWFBJUkVTX0RBWVMgPSAzNjU7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcGF0YCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIE1pbnRzIGEgbmFtZWQgQUNDRVNTIEtFWSAoYHBiX3BhdF/igKZgKSDigJQgYSBkdXJhYmxlLCBpbmRpdmlkdWFsbHktcmV2b2NhYmxlIEFQSVxuICogY3JlZGVudGlhbCDigJQgZm9yIENJL2F1dG9tYXRpb24uIFVubGlrZSBhIHNlc3Npb24sIGEga2V5IGlzIHRoZSByaWdodFxuICogbG9uZy1saXZlZCBjcmVkZW50aWFsIGZvciBzY3JpcHRzLlxuICpcbiAqIFRoZSBrZXkgaXMgT1BBUVVFOiBpdCBjYXJyaWVzIG5vIGNsYWltcywgYW5kIGVhY2ggc2VydmljZSB0cmFkZXMgaXQgYXRcbiAqIHBsYXRmb3JtJ3MgL2F1dGgvdG9rZW4vZXhjaGFuZ2UgZm9yIGEgNS1taW51dGUgdG9rZW4sIHNvIHJldm9raW5nIGl0IHRha2VzXG4gKiBlZmZlY3QgZXZlcnl3aGVyZSB3aXRoaW4gZml2ZSBtaW51dGVzLlxuICpcbiAqIENyZWF0aW5nIG9uZSBpcyBzdGVwLXVwIGdhdGVkIHNlcnZlci1zaWRlLCB5ZXQgdGhlIENMSSBob2xkcyBubyBwYXNzd29yZDogdGhlXG4gKiBkZXZpY2UgZmxvdyBhc2tzIGZvciB0aGUgc3RlcC11cCBJTiBUSEUgQlJPV1NFUiwgd2hlcmUgdGhlXG4gKiBhY2NvdW50J3MgcmVhbCBmYWN0b3JzIGxpdmUsIGFuZCB0aGUgYXBwcm92ZWQgcG9sbCByZXR1cm5zIGJvdGggdGhlIHNlc3Npb25cbiAqIGFuZCBhIHNob3J0LWxpdmVkIHN0ZXAtdXAgdG9rZW4uIFRoZSBrZXkgYmluZHMgdG8gdGhlIHVzZXIncyBhY3RpdmUgb3JnOyBwYXNzXG4gKiBgLS1vcmdgIHRvIHN3aXRjaCBmaXJzdCAod2hpY2ggcGVyc2lzdHMgYXMgdGhlIGFjdGl2ZSBvcmcpLlxuICpcbiAqIFRoZSByYXcga2V5IGlzIHByaW50ZWQgT05DRSDigJQgb25seSBpdHMgaGFzaCBpcyBzdG9yZWQsIHNvIGl0IGNhbiBuZXZlciBiZSByZWFkXG4gKiBiYWNrLiBgLS1xdWlldGAgcHJpbnRzIG9ubHkgYGV4cG9ydCBQTEFURk9STV9UT0tFTj3igKZgIHNvIGl0IGNhbiBiZSBgZXZhbGAnZDtcbiAqIHRoZSBrZXkgaXMgaXRzZWxmIGEgdmFsaWQgQmVhcmVyIGNyZWRlbnRpYWwuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXQgLS1uYW1lIGNpLWRlcGxveVxuICogcGlwZWxpbmUtbWFuYWdlciBhdXRoIHBhdCAtLW5hbWUgY2kgLS1leHBpcmVzLWRheXMgMzAgLS1vcmcgPG9yZ0lkPlxuICogZXZhbCAkKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXQgLS1uYW1lIGNpIC0tcXVpZXQpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdChwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKHByb2dyYW1cbiAgICAuY29tbWFuZCgncGF0JylcbiAgICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5hbWVkIGFjY2VzcyBrZXkgKGxvbmctbGl2ZWQsIG9wYXF1ZSBDTEkvYXV0b21hdGlvbiBjcmVkZW50aWFsKScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctLW5hbWUgPG5hbWU+JywgJ0h1bWFuLXJlYWRhYmxlIGtleSBuYW1lIChlLmcuIGNpLWRlcGxveSknKVxuICAgIC5vcHRpb24oJy0tZXhwaXJlcy1kYXlzIDxkYXlzPicsIGBLZXkgbGlmZXRpbWUgaW4gZGF5cyAoMS0ke01BWF9FWFBJUkVTX0RBWVN9KWAsICc5MCcpXG4gICAgLm9wdGlvbignLS1zY29wZSA8c2NvcGU+JywgJ09wdGlvbmFsIGNhcGFiaWxpdHkgc2NvcGUgKGxlYXN0LXByaXZpbGVnZSBrZXkpJylcbiAgICAub3B0aW9uKCctLW9yZyA8b3JnSWQ+JywgJ0JpbmQgdGhlIGtleSB0byBhIHNwZWNpZmljIG9yZ2FuaXphdGlvbiAoc3dpdGNoZXMgYWN0aXZlIG9yZyknKVxuICAgIC5vcHRpb24oJy0tbm8tYnJvd3NlcicsICdOZXZlciBvcGVuIGEgYnJvd3NlciDigJQgcHJpbnQgdGhlIHZlcmlmaWNhdGlvbiBVUkwgaW5zdGVhZCcpXG4gICAgLm9wdGlvbignLS11cmwgPHVybD4nLCAnUGxhdGZvcm0gYmFzZSBVUkwgKGRlZmF1bHQ6IFBMQVRGT1JNX0JBU0VfVVJMLCBlbHNlIHRoZSBwbGF0Zm9ybSB5b3UgbGFzdCBzaWduZWQgaW4gdG8sIGVsc2UgY29uZmlnLnltbCknKSlcbiAgICAub3B0aW9uKCctLXF1aWV0JywgJ09ubHkgcHJpbnQgdGhlIGV4cG9ydCBzdGF0ZW1lbnQgKHVzZWZ1bCBmb3IgZXZhbCknKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIC8vIFNFQ1VSSVRZOiB0aGUgcG9sbCByZXR1cm5zIGEgc2Vzc2lvbiBBTkQgYSBzdGVwLXVwIHRva2VuLCBhbmQgdGhlIHJlc3BvbnNlXG4gICAgICAvLyBiZWxvdyBjYXJyaWVzIHRoZSByYXcga2V5LiBOb25lIG9mIHRoYXQgbWF5IGNyb3NzIGFuIHVudmVyaWZpZWQgY29ubmVjdGlvblxuICAgICAgLy8gaW4gcHJvZHVjdGlvbi4gTWlycm9ycyB0aGUgZ3VhcmQgaW4gYGxvZ2luYC5cbiAgICAgIGFzc2VydENyZWRlbnRpYWxUbHNBbGxvd2VkKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgY29uc3QgcXVpZXQgPSBvcHRpb25zLnF1aWV0ID8/IGZhbHNlO1xuICAgICAgLy8gU2FtZSBiYXNlLVVSTCBsYXllcnMgYXMgZXZlcnkgb3RoZXIgY29tbWFuZCAoc2VlIGBhdXRoIGxvZ2luYCkuXG4gICAgICBjb25zdCB1cmw6IHN0cmluZyA9IG9wdGlvbnMudXJsID8/IGdldEFwaUNvbmZpZygpLmFwaS5iYXNlVXJsO1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ0NyZWF0ZSBBY2Nlc3MgS2V5JywgJ0NyZWF0ZSBBY2Nlc3MgS2V5JywgeyBxdWlldCB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgbmFtZS5cbiAgICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBvcHRpb25zLm5hbWUgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5uYW1lLnRyaW0oKSA6ICcnO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdLZXkgbmFtZSBpcyByZXF1aXJlZCAoLS1uYW1lKScpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5WQUxJREFUSU9OKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZS5sZW5ndGggPiAxMDApIHtcbiAgICAgICAgICBwcmludEVycm9yKCdLZXkgbmFtZSBtdXN0IGJlIDEwMCBjaGFyYWN0ZXJzIG9yIGZld2VyJyk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLlZBTElEQVRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZXhwaXJ5IOKGkiBzZWNvbmRzLlxuICAgICAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihOdW1iZXIob3B0aW9ucy5leHBpcmVzRGF5cykpO1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShkYXlzKSB8fCBkYXlzIDwgMSB8fCBkYXlzID4gTUFYX0VYUElSRVNfREFZUykge1xuICAgICAgICAgIHByaW50RXJyb3IoYC0tZXhwaXJlcy1kYXlzIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kICR7TUFYX0VYUElSRVNfREFZU31gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuVkFMSURBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwaXJlc0luID0gZGF5cyAqIDg2NDAwO1xuXG4gICAgICAgIGNvbnN0IGh0dHBzQWdlbnQgPSBjcmVkZW50aWFsSHR0cHNBZ2VudChvcHRpb25zLnZlcmlmeVNzbCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBUSU1FT1VUUy5IVFRQX1JFUVVFU1Q7XG4gICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IHsgdXJsLCBodHRwc0FnZW50LCB0aW1lb3V0IH07XG5cbiAgICAgICAgLy8gMSkgRGV2aWNlIHNpZ24taW4sIGFza2luZyBmb3IgdGhlIHN0ZXAtdXAgdGhlIGNyZWF0ZSBjYWxsIG5lZWRzLlxuICAgICAgICBjb25zdCBjb2RlID0gYXdhaXQgYmVnaW5EZXZpY2VBcHByb3ZhbCh0cmFuc3BvcnQsIHtcbiAgICAgICAgICBxdWlldCxcbiAgICAgICAgICBicm93c2VyOiBvcHRpb25zLmJyb3dzZXIsXG4gICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICBzdGVwVXA6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBwb2xsRm9yRGV2aWNlVG9rZW4odHJhbnNwb3J0LCBjb2RlKTtcbiAgICAgICAgbGV0IGFjY2Vzc1Rva2VuID0gc2Vzc2lvbi5hY2Nlc3NfdG9rZW47XG4gICAgICAgIGNvbnN0IHN0ZXBVcFRva2VuID0gc2Vzc2lvbi5zdGVwX3VwX3Rva2VuO1xuICAgICAgICBpZiAoIXN0ZXBVcFRva2VuKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignVGhlIGFwcHJvdmFsIGRpZCBub3QgcmV0dXJuIGEgc3RlcC11cCBjb25maXJtYXRpb24g4oCUIGFwcHJvdmUgdGhlIGNvZGUgcHJvbXB0bHkgYW5kIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMikgT3B0aW9uYWxseSBiaW5kIHRvIGEgc3BlY2lmaWMgb3JnIChwZXJzaXN0cyBhcyB0aGUgYWN0aXZlIG9yZywgd2hpY2hcbiAgICAgICAgLy8gICAgdGhlIGtleSBpbmhlcml0cykuIFJvdGF0ZXMgdGhlIHNlc3Npb24sIGJ1dCB0aGUgc3RlcC11cCB0b2tlbiBpc1xuICAgICAgICAvLyAgICBib3VuZCB0byB0aGUgdXNlciwgbm90IHRoZSBzZXNzaW9uLCBzbyBpdCBzdXJ2aXZlcyB0aGUgc3dpdGNoLlxuICAgICAgICBpZiAob3B0aW9ucy5vcmcpIHtcbiAgICAgICAgICBpZiAoIXF1aWV0KSBwcmludEluZm8oJ1N3aXRjaGluZyB0byBvcmdhbml6YXRpb24nLCB7IG9yZ0lkOiBvcHRpb25zLm9yZyB9KTtcbiAgICAgICAgICBhY2Nlc3NUb2tlbiA9IChhd2FpdCBzd2l0Y2hPcmdhbml6YXRpb24oe1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgb3JnSWQ6IG9wdGlvbnMub3JnLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICBodHRwc0FnZW50LFxuICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIH0pKS5hY2Nlc3NUb2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMpIENyZWF0ZSB0aGUgYWNjZXNzIGtleS4gVGhlIHN0ZXAtdXAgdG9rZW4gaXMgc2hvcnQtbGl2ZWQgKH42MHMpIGFuZFxuICAgICAgICAvLyAgICBzaW5nbGUtdXNlLCBzbyBpdCBpcyBzcGVudCBpbW1lZGlhdGVseS5cbiAgICAgICAgY29uc3Qga2V5VXJsID0gYCR7dXJsfS9hcGkvdXNlci9rZXlzYDtcbiAgICAgICAgcHJpbnREZWJ1ZygnUE9TVCcsIHsgdXJsOiBrZXlVcmwgfSk7XG4gICAgICAgIGNvbnN0IGtleVJlcyA9IGF3YWl0IGF4aW9zLnBvc3Q8Q3JlYXRlQWNjZXNzS2V5UmVzcG9uc2U+KFxuICAgICAgICAgIGtleVVybCxcbiAgICAgICAgICB7IG5hbWUsIGV4cGlyZXNJbiwgLi4uKG9wdGlvbnMuc2NvcGUgPyB7IHNjb3BlOiBvcHRpb25zLnNjb3BlIH0gOiB7fSkgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FjY2Vzc1Rva2VufWAsXG4gICAgICAgICAgICAgICdYLVN0ZXAtVXAtVG9rZW4nOiBzdGVwVXBUb2tlbixcbiAgICAgICAgICAgICAgLi4ucmVxdWVzdENvcnJlbGF0aW9uSGVhZGVycygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGh0dHBzQWdlbnQsXG4gICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qga2V5ID0ga2V5UmVzLmRhdGE/LmRhdGE/LmtleTtcbiAgICAgICAgY29uc3QgbWV0YSA9IGtleVJlcy5kYXRhPy5kYXRhPy5hY2Nlc3NLZXk7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ3JlYXRlIGtleSBmYWlsZWQ6IG5vIGtleSBpbiByZXNwb25zZScpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBRdWlldCBtb2RlOiBlbWl0IG9ubHkgdGhlIGV4cG9ydCBsaW5lICh0aGUga2V5IGlzIGEgdmFsaWQgQmVhcmVyIGNyZWRlbnRpYWwpLlxuICAgICAgICBpZiAocXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgZXhwb3J0IFBMQVRGT1JNX1RPS0VOPSR7a2V5fWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdBY2Nlc3Mga2V5IGNyZWF0ZWQnKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnTmFtZSc6IG1ldGE/Lm5hbWUgPz8gbmFtZSxcbiAgICAgICAgICAnS2V5IElEJzogbWV0YT8uaWQgPz8gJyh1bmtub3duKScsXG4gICAgICAgICAgJ0tleSc6IG1ldGE/LmRpc3BsYXkgPz8gJyh1bmtub3duKScsXG4gICAgICAgICAgJ0V4cGlyZXMnOiBtZXRhPy5leHBpcmVzQXQgPz8gYCR7ZGF5c30gZGF5KHMpYCxcbiAgICAgICAgICAuLi4obWV0YT8uc2NvcGUgPyB7IFNjb3BlOiBtZXRhLnNjb3BlIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHllbGxvdyhib2xkKCdDb3B5IHlvdXIga2V5IG5vdyDigJQgb25seSBpdHMgaGFzaCBpcyBzdG9yZWQsIHNvIGl0IHdpbGwgbm90IGJlIHNob3duIGFnYWluOicpKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdyZWVuKGtleSkpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50SW5mbygnVGlwOiB1c2UgaXQgYXMgUExBVEZPUk1fVE9LRU4gZm9yIHN1YnNlcXVlbnQgY29tbWFuZHM6Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdyZWVuKCcgIGV4cG9ydCBQTEFURk9STV9UT0tFTj08dG9rZW4+JykpO1xuICAgICAgICBjb25zb2xlLmxvZyhncmVlbihgICAjIG9yOiAgZXZhbCAkKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXQgLS1uYW1lICR7bmFtZX0gLS1xdWlldClgKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBEZXZpY2VBdXRoRXJyb3IpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBDcmVhdGUga2V5IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWAsIHsgcmVhc29uOiBlcnJvci5jb2RlIH0pO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBlcnJvci5yZXNwb25zZT8uc3RhdHVzO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyb3IucmVzcG9uc2U/LmRhdGEgYXMgeyBtZXNzYWdlPzogc3RyaW5nIH0pPy5tZXNzYWdlO1xuICAgICAgICAgIHByaW50RXJyb3IoJ0NyZWF0ZSBrZXkgZmFpbGVkJywge1xuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPz8gJ25vIHJlc3BvbnNlJyxcbiAgICAgICAgICAgIC4uLihtZXNzYWdlID8geyBtZXNzYWdlIH0gOiB7fSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdjcmVhdGUtcGF0JywgZXhlY3V0aW9uSWQsIHVybCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2K7C"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -14,6 +14,7 @@ import { printLookupWarningSummary } from '../utils/plugin-resolver.js';
|
|
|
14
14
|
import { resolveRegistrationClient } from '../utils/registration-client.js';
|
|
15
15
|
import { setPipelineId } from '../utils/request-context.js';
|
|
16
16
|
import { relaxTlsForCli } from '../utils/tls.js';
|
|
17
|
+
import { applyToolchainFile, toolchainFileRequired } from '../utils/toolchain.js';
|
|
17
18
|
/**
|
|
18
19
|
* Registers the `deploy` command with the CLI program.
|
|
19
20
|
*
|
|
@@ -31,7 +32,8 @@ export function deploy(program) {
|
|
|
31
32
|
.command('deploy')
|
|
32
33
|
.description('Deploy pipeline by ID using AWS CDK, or --local-spec to deploy a local pipeline.json without the platform')
|
|
33
34
|
.option('-i, --id <id>', 'Pipeline ID (fetches config from the platform)')
|
|
34
|
-
.option('--local-spec <path>', 'Path to a local pipeline.json — deploys without contacting the platform (no auth, no compliance, no plugin lookup)')
|
|
35
|
+
.option('--local-spec <path>', 'Path to a local pipeline.json — deploys without contacting the platform (no auth, no compliance, no plugin lookup). Requires --toolchain-file')
|
|
36
|
+
.option('--toolchain-file <path>', 'With --local-spec: the toolchain release to build on, as written by `pipeline-manager toolchain export`'))
|
|
35
37
|
.option('--require-approval <approval>', 'Deploy approval level: never|any-change|broadening. Defaults to `broadening`: a deploy that widens IAM stops for confirmation. Pass `never` for unattended runs.', 'broadening')
|
|
36
38
|
.option('--output <dir>', 'CDK output directory', 'cdk.out')
|
|
37
39
|
.option('--store-tokens', 'Authenticate using token from AWS Secrets Manager (requires PLATFORM_SECRET_NAME env var)', false)))
|
|
@@ -47,6 +49,13 @@ export function deploy(program) {
|
|
|
47
49
|
if (options.id && options.localSpec) {
|
|
48
50
|
throw new Error('--id and --local-spec are mutually exclusive');
|
|
49
51
|
}
|
|
52
|
+
if (options.toolchainFile && !options.localSpec) {
|
|
53
|
+
throw new Error('--toolchain-file applies to --local-spec only (with --id the platform resolves the toolchain release)');
|
|
54
|
+
}
|
|
55
|
+
// Without the platform, the toolchain release can only come from a file
|
|
56
|
+
// (D2: never a fallback image). Refuse before reading anything else.
|
|
57
|
+
if (options.localSpec && !options.toolchainFile)
|
|
58
|
+
throw toolchainFileRequired();
|
|
50
59
|
auditLog('deploy', { executionId, pipelineId: options.id, profile: options.profile });
|
|
51
60
|
// Attributes this deploy's platform calls to the pipeline (usage ledger).
|
|
52
61
|
setPipelineId(options.id);
|
|
@@ -105,6 +114,10 @@ export function deploy(program) {
|
|
|
105
114
|
...(pipeline.orgId && { orgId: pipeline.orgId }),
|
|
106
115
|
pipelineId: pipeline.id,
|
|
107
116
|
};
|
|
117
|
+
// The toolchain release from `toolchain export`: the bootstrap image
|
|
118
|
+
// and, for a managed cdk-synth, the synth plugin itself.
|
|
119
|
+
const release = applyToolchainFile(propsWithIds, options.toolchainFile);
|
|
120
|
+
printInfo('Toolchain release (from file)', { release, file: path.resolve(options.toolchainFile) });
|
|
108
121
|
}
|
|
109
122
|
else {
|
|
110
123
|
// Remote path: fetch config from platform API. fetchPipelineProps does
|
|
@@ -172,4 +185,4 @@ export function deploy(program) {
|
|
|
172
185
|
}
|
|
173
186
|
});
|
|
174
187
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvZGVwbG95LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQTRDLE1BQU0sbUJBQW1CLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckssT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWdCO0lBQ3JDLGNBQWMsQ0FDWixnQkFBZ0IsQ0FDZCxpQkFB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Q3JFLHdFQUF3RTtnQkFDeEUsY0FBYyxFQUFFLGNBQWMsSUFBSSxNQUFNLHlCQUF5QixDQUFDO29CQUNoRSxNQUFNLEVBQUUsY0FBYztvQkFDdEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO29CQUNoQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7b0JBQ3JCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtvQkFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2lCQUN6QixDQUFDO2dCQUNGLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsV0FBVztnQkFDcEQsZUFBZSxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsT0FBTzthQUM3QyxDQUFDLENBQUM7WUFDSCx1RUFBdUU7WUFDdkUscURBQXFEO1lBQ3JELHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTVDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsV0FBVztvQkFDWCxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0I7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBMb29rdXBXYXJuaW5nIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUsIHR5cGUgUGxhdGZvcm1EZXBsb3lDb25maWcgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBhdWRpdExvZyB9IGZyb20gJy4uL3V0aWxzL2F1ZGl0LWxvZy5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiwgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IHJ1bkRlcGxveSB9IGZyb20gJy4uL3V0aWxzL2RlcGxveS1ydW5uZXIuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGZldGNoUGlwZWxpbmVQcm9wcywgcHJpbnRSZXNvbHZlZE9yRXhpdCB9IGZyb20gJy4uL3V0aWxzL3BpcGVsaW5lLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBwcmludExvb2t1cFdhcm5pbmdTdW1tYXJ5IH0gZnJvbSAnLi4vdXRpbHMvcGx1Z2luLXJlc29sdmVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVSZWdpc3RyYXRpb25DbGllbnQgfSBmcm9tICcuLi91dGlscy9yZWdpc3RyYXRpb24tY2xpZW50LmpzJztcbmltcG9ydCB7IHNldFBpcGVsaW5lSWQgfSBmcm9tICcuLi91dGlscy9yZXF1ZXN0LWNvbnRleHQuanMnO1xuaW1wb3J0IHsgcmVsYXhUbHNGb3JDbGkgfSBmcm9tICcuLi91dGlscy90bHMuanMnO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGRlcGxveWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBGZXRjaGVzIHBpcGVsaW5lIHByb3BlcnRpZXMgYnkgSUQgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLCB0aGVuXG4gKiBydW5zIGBjZGsgZGVwbG95YCB0byBwcm92aXNpb24gdGhlIHBpcGVsaW5lIGluZnJhc3RydWN0dXJlIGluIEFXUy5cbiAqIEZvciBzeW50aGVzaXMgb25seSwgdXNlIGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYC5cbiAqXG4gKiBSZXF1aXJlcyBzZXJ2aWNlIGNyZWRlbnRpYWxzIHRvIGJlIHByZS1zdG9yZWQgaW4gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqIENyZWF0ZSB0aGVtIGZpcnN0IHdpdGg6IGBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuYFxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVwbG95KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMoXG4gICAgd2l0aFJlZ2lvbk9wdGlvbihcbiAgICAgIHdpdGhQcm9maWxlT3B0aW9uKHByb2dyYW1cbiAgICAgICAgLmNvbW1hbmQoJ2RlcGxveScpXG4gICAgICAgIC5kZXNjcmlwdGlvbignRGVwbG95IHBpcGVsaW5lIGJ5IElEIHVzaW5nIEFXUyBDREssIG9yIC0tbG9jYWwtc3BlYyB0byBkZXBsb3kgYSBsb2NhbCBwaXBlbGluZS5qc29uIHdpdGhvdXQgdGhlIHBsYXRmb3JtJylcbiAgICAgICAgLm9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCAoZmV0Y2hlcyBjb25maWcgZnJvbSB0aGUgcGxhdGZvcm0pJylcbiAgICAgICAgLm9wdGlvbignLS1sb2NhbC1zcGVjIDxwYXRoPicsICdQYXRoIHRvIGEgbG9jYWwgcGlwZWxpbmUuanNvbiDigJQgZGVwbG95cyB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIHBsYXRmb3JtIChubyBhdXRoLCBubyBjb21wbGlhbmNlLCBubyBwbHVnaW4gbG9va3VwKScpKVxuICAgICAgICAub3B0aW9uKCctLXJlcXVpcmUtYXBwcm92YWwgPGFwcHJvdmFsPicsICdEZXBsb3kgYXBwcm92YWwgbGV2ZWw6IG5ldmVyfGFueS1jaGFuZ2V8YnJvYWRlbmluZy4gRGVmYXVsdHMgdG8gYGJyb2FkZW5pbmdgOiBhIGRlcGxveSB0aGF0IHdpZGVucyBJQU0gc3RvcHMgZm9yIGNvbmZpcm1hdGlvbi4gUGFzcyBgbmV2ZXJgIGZvciB1bmF0dGVuZGVkIHJ1bnMuJywgJ2Jyb2FkZW5pbmcnKVxuICAgICAgICAub3B0aW9uKCctLW91dHB1dCA8ZGlyPicsICdDREsgb3V0cHV0IGRpcmVjdG9yeScsICdjZGsub3V0JylcbiAgICAgICAgLm9wdGlvbignLS1zdG9yZS10b2tlbnMnLCAnQXV0aGVudGljYXRlIHVzaW5nIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAocmVxdWlyZXMgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciknLCBmYWxzZSksXG4gICAgKSxcbiAgKVxuICAgIC5vcHRpb24oJy0tc2hvdy1yZXNvbHZlZCcsICdQcmludCB0aGUgcmVzb2x2ZWQgcGlwZWxpbmUgY29uZmlnICh3aXRoIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgZXhwYW5kZWQpIGFuZCBleGl0IHdpdGhvdXQgZGVwbG95aW5nJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1BpcGVsaW5lIERlcGxveScpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBNdXR1YWxseSBleGNsdXNpdmUgaW5wdXQgc291cmNlcyDigJQgdmFsaWRhdGVkIElOU0lERSB0aGUgdHJ5IHNvIGZhaWx1cmVzIHJvdXRlXG4gICAgICAgIC8vIHRocm91Z2ggaGFuZGxlRXJyb3IgKGNvbnNpc3RlbnQgZXhpdCBjb2RlL2Zvcm1hdCkgbGlrZSBldmVyeSBvdGhlciBjb21tYW5kLlxuICAgICAgICBpZiAoIW9wdGlvbnMuaWQgJiYgIW9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgLS1pZCA8cGlwZWxpbmUtaWQ+IG9yIC0tbG9jYWwtc3BlYyA8cGF0aD4gaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pZCAmJiBvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignLS1pZCBhbmQgLS1sb2NhbC1zcGVjIGFyZSBtdXR1YWxseSBleGNsdXNpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1ZGl0TG9nKCdkZXBsb3knLCB7IGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkOiBvcHRpb25zLmlkLCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSk7XG4gICAgICAgIC8vIEF0dHJpYnV0ZXMgdGhpcyBkZXBsb3kncyBwbGF0Zm9ybSBjYWxscyB0byB0aGUgcGlwZWxpbmUgKHVzYWdlIGxlZGdlcikuXG4gICAgICAgIHNldFBpcGVsaW5lSWQob3B0aW9ucy5pZCk7XG5cbiAgICAgICAgcHJpbnRJbmZvKCdEZXBsb3ltZW50IHBhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgYXdzUHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIHByb2Nlc3MuZW52IHNvIENESyBjb25zdHJ1Y3RzIChMYW1iZGEsIENvZGVCdWlsZCkgaW5oZXJpdCBpdCxcbiAgICAgICAgLy8gYnV0IHJlZnVzZSBpbiBwcm9kdWN0aW9uIChzZWUgcmVsYXhUbHNGb3JDbGkpIOKAlCB0aGUgZmxhZyBkaXNhYmxlcyBjZXJ0XG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIEFMTCBvdXRib3VuZCBUTFMsIGluY2x1ZGluZyB0aGUgQVdTIFNESy5cbiAgICAgICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG5cbiAgICAgICAgLy8gTG9jYWwtdG9vbCBwcmVyZXF1aXNpdGVzIChjZGsgKyBlc2J1aWxkL3BucG0pIGFyZSB2ZXJpZmllZCB1cCBmcm9udCBieVxuICAgICAgICAvLyB0aGUgQ0xJJ3MgcHJlQWN0aW9uIGhvb2ssIHNvIGJ5IGhlcmUgdGhleSdyZSBndWFyYW50ZWVkIHByZXNlbnQuXG5cbiAgICAgICAgbGV0IHBpcGVsaW5lOiBQaXBlbGluZTtcbiAgICAgICAgbGV0IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGxldCBwbHVnaW5XYXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdID0gW107XG4gICAgICAgIC8vIFJlbW90ZS1tb2RlIHJlZ2lzdHJ5LXBvc3QgaGFuZGxlcyDigJQgbnVsbCBpbiAtLWxvY2FsLXNwZWMgbW9kZS5cbiAgICAgICAgbGV0IHBsYXRmb3JtQ2xpZW50OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYz4+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcGxhdGZvcm1Db25maWc6IFBsYXRmb3JtRGVwbG95Q29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIC8vIC0tbG9jYWwtc3BlYzogcmVhZCBwaXBlbGluZS5qc29uIGZyb20gZGlzazsgbm8gcGxhdGZvcm0gY29udGFjdC5cbiAgICAgICAgICAvLyBDb21wbGlhbmNlIC8gcXVvdGEgLyBwbHVnaW4tbG9va3VwIGZlYXR1cmVzIGFsbCByZXF1aXJlIHRoZSBwbGF0Zm9ybSDigJRcbiAgICAgICAgICAvLyB0aGlzIG1vZGUgaXMgZm9yIGFpci1nYXBwZWQgb3Igc2ltcGxlIHN0YW5kYWxvbmUgQ0RLIGRlcGxveW1lbnRzLlxuICAgICAgICAgIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5sb2NhbFNwZWMpO1xuICAgICAgICAgIHByaW50SW5mbygnTG9hZGluZyBsb2NhbCBwaXBlbGluZSBzcGVjJywgeyBwYXRoOiBhYnNQYXRoIH0pO1xuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgbm90IGZvdW5kOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhhYnNQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUGFydGlhbDxQaXBlbGluZT4gJiB7IHByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgICAgICAgICBpZiAoIXBhcnNlZC5wcm9wcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgaXMgbWlzc2luZyByZXF1aXJlZCAncHJvcHMnIGZpZWxkOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBpcGVsaW5lID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlZC5pZCA/PyAnbG9jYWwnLFxuICAgICAgICAgICAgcHJvamVjdDogcGFyc2VkLnByb2plY3QgPz8gJ2xvY2FsLXByb2plY3QnLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBwYXJzZWQub3JnYW5pemF0aW9uID8/ICdsb2NhbC1vcmcnLFxuICAgICAgICAgICAgb3JnSWQ6IHBhcnNlZC5vcmdJZCxcbiAgICAgICAgICAgIGlzRGVmYXVsdDogcGFyc2VkLmlzRGVmYXVsdCA/PyBmYWxzZSxcbiAgICAgICAgICAgIGlzQWN0aXZlOiBwYXJzZWQuaXNBY3RpdmUgPz8gdHJ1ZSxcbiAgICAgICAgICAgIHByb3BzOiBwYXJzZWQucHJvcHMsXG4gICAgICAgICAgfSBhcyBQaXBlbGluZTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0xvY2FsIHNwZWMgbG9hZGVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBTb3VyY2U6IGFic1BhdGgsXG4gICAgICAgICAgICBQcm9qZWN0OiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgT3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0ge1xuICAgICAgICAgICAgLi4ucGlwZWxpbmUucHJvcHMsXG4gICAgICAgICAgICAuLi4ocGlwZWxpbmUub3JnSWQgJiYgeyBvcmdJZDogcGlwZWxpbmUub3JnSWQgfSksXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbW90ZSBwYXRoOiBmZXRjaCBjb25maWcgZnJvbSBwbGF0Zm9ybSBBUEkuIGZldGNoUGlwZWxpbmVQcm9wcyBkb2VzXG4gICAgICAgICAgLy8gdGhlIGZldGNoICsgcGx1Z2luIHByZS1yZXNvbHV0aW9uICsgcmVnaXN0cnkgcHVsbC1ob3N0IGJha2Ug4oCUIHNoYXJlZFxuICAgICAgICAgIC8vIHZlcmJhdGltIHdpdGggYHN5bnRoYCBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0LlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIHBsYXRmb3JtQ29uZmlnID0gcGxhdGZvcm1DbGllbnQuZ2V0Q29uZmlnKCkgYXMgUGxhdGZvcm1EZXBsb3lDb25maWc7XG5cbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nLCB7IGlkOiBvcHRpb25zLmlkIH0pO1xuICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMocGxhdGZvcm1DbGllbnQsIG9wdGlvbnMuaWQpO1xuICAgICAgICAgIHBpcGVsaW5lID0gZmV0Y2hlZC5waXBlbGluZTtcbiAgICAgICAgICBwcm9wc1dpdGhJZHMgPSBmZXRjaGVkLnByb3BzV2l0aElkcztcbiAgICAgICAgICBwbHVnaW5XYXJuaW5ncyA9IGZldGNoZWQucGx1Z2luV2FybmluZ3M7XG5cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGNvbmZpZ3VyYXRpb24gcmV0cmlldmVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnSUQnOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAnSXMgRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCxcbiAgICAgICAgICAgICdJcyBBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tc2hvdy1yZXNvbHZlZDogcHJpbnQgcmVzb2x2ZWQgY29uZmlnIGFuZCBleGl0IChubyBDREsgZGVwbG95KVxuICAgICAgICBpZiAoKG9wdGlvbnMgYXMgeyBzaG93UmVzb2x2ZWQ/OiBib29sZWFuIH0pLnNob3dSZXNvbHZlZCkge1xuICAgICAgICAgIGF3YWl0IHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGVwcyA14oCTOSAoZW5jb2RlIHByb3BzIOKGkiBjZGsgZGVwbG95IOKGkiByZWdpc3RlciBBUk4pIGFyZSBzaGFyZWQgd2l0aFxuICAgICAgICAvLyBgcGlwZWxpbmUgY3JlYXRlIC0tZGVwbG95YCB2aWEgcnVuRGVwbG95IHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgIGF3YWl0IHJ1bkRlcGxveSh7XG4gICAgICAgICAgcGlwZWxpbmUsXG4gICAgICAgICAgcHJvcHNXaXRoSWRzLFxuICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgLy8gVGhlIHJlZ2lzdHJ5IGNhbGxiYWNrJ3MgY3JlZGVudGlhbDogdGhlIG9wZXJhdG9yJ3Mgb3duLCBvciDigJQgdW5kZXJcbiAgICAgICAgICAvLyAtLXN0b3JlLXRva2VucyDigJQgdGhlIGBwaXBlbGluZS1yZWdpc3RlcmAga2V5LCBuZXZlciB0aGUgcGxhdGZvcm0gb25lLlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50OiBwbGF0Zm9ybUNsaWVudCAmJiBhd2FpdCByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50KHtcbiAgICAgICAgICAgIGNsaWVudDogcGxhdGZvcm1DbGllbnQsXG4gICAgICAgICAgICBzdG9yZVRva2Vuczogb3B0aW9ucy5zdG9yZVRva2VucyxcbiAgICAgICAgICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogcGxhdGZvcm1Db25maWc/LmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICBwbGF0Zm9ybUJhc2VVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkuYmFzZVVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdyYWRlZCBwbHVnaW4gd2FybmluZ3MgYXJlIHJlcG9ydGVkLCBuZXZlciBlbmZvcmNlZCDigJQgc3VtbWFyaXplIHRoZW1cbiAgICAgICAgLy8gYWZ0ZXIgdGhlIENESyBvdXRwdXQgc28gdGhleSBhcmVuJ3QgbG9zdCBhYm92ZSBpdC5cbiAgICAgICAgcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeShwbHVnaW5XYXJuaW5ncyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdkZXBsb3knLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvZGVwbG95LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQTRDLE1BQU0sbUJBQW1CLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckssT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEY7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxN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QUU1QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHsgTG9va3VwV2FybmluZyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lLCB0eXBlIFBsYXRmb3JtRGVwbG95Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgYXVkaXRMb2cgfSBmcm9tICcuLi91dGlscy9hdWRpdC1sb2cuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgd2l0aFByb2ZpbGVPcHRpb24sIHdpdGhSZWdpb25PcHRpb24sIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBydW5EZXBsb3kgfSBmcm9tICcuLi91dGlscy9kZXBsb3ktcnVubmVyLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmZXRjaFBpcGVsaW5lUHJvcHMsIHByaW50UmVzb2x2ZWRPckV4aXQgfSBmcm9tICcuLi91dGlscy9waXBlbGluZS1jb25maWcuanMnO1xuaW1wb3J0IHsgcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeSB9IGZyb20gJy4uL3V0aWxzL3BsdWdpbi1yZXNvbHZlci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vdXRpbHMvcmVnaXN0cmF0aW9uLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzZXRQaXBlbGluZUlkIH0gZnJvbSAnLi4vdXRpbHMvcmVxdWVzdC1jb250ZXh0LmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcbmltcG9ydCB7IGFwcGx5VG9vbGNoYWluRmlsZSwgdG9vbGNoYWluRmlsZVJlcXVpcmVkIH0gZnJvbSAnLi4vdXRpbHMvdG9vbGNoYWluLmpzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdkZXBsb3knKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgKGZldGNoZXMgY29uZmlnIGZyb20gdGhlIHBsYXRmb3JtKScpXG4gICAgICAgIC5vcHRpb24oJy0tbG9jYWwtc3BlYyA8cGF0aD4nLCAnUGF0aCB0byBhIGxvY2FsIHBpcGVsaW5lLmpzb24g4oCUIGRlcGxveXMgd2l0aG91dCBjb250YWN0aW5nIHRoZSBwbGF0Zm9ybSAobm8gYXV0aCwgbm8gY29tcGxpYW5jZSwgbm8gcGx1Z2luIGxvb2t1cCkuIFJlcXVpcmVzIC0tdG9vbGNoYWluLWZpbGUnKVxuICAgICAgICAub3B0aW9uKCctLXRvb2xjaGFpbi1maWxlIDxwYXRoPicsICdXaXRoIC0tbG9jYWwtc3BlYzogdGhlIHRvb2xjaGFpbiByZWxlYXNlIHRvIGJ1aWxkIG9uLCBhcyB3cml0dGVuIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHRvb2xjaGFpbiBleHBvcnRgJykpXG4gICAgICAgIC5vcHRpb24oJy0tcmVxdWlyZS1hcHByb3ZhbCA8YXBwcm92YWw+JywgJ0RlcGxveSBhcHByb3ZhbCBsZXZlbDogbmV2ZXJ8YW55LWNoYW5nZXxicm9hZGVuaW5nLiBEZWZhdWx0cyB0byBgYnJvYWRlbmluZ2A6IGEgZGVwbG95IHRoYXQgd2lkZW5zIElBTSBzdG9wcyBmb3IgY29uZmlybWF0aW9uLiBQYXNzIGBuZXZlcmAgZm9yIHVuYXR0ZW5kZWQgcnVucy4nLCAnYnJvYWRlbmluZycpXG4gICAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5JywgJ2Nkay5vdXQnKVxuICAgICAgICAub3B0aW9uKCctLXN0b3JlLXRva2VucycsICdBdXRoZW50aWNhdGUgdXNpbmcgdG9rZW4gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyIChyZXF1aXJlcyBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyKScsIGZhbHNlKSxcbiAgICApLFxuICApXG4gICAgLm9wdGlvbignLS1zaG93LXJlc29sdmVkJywgJ1ByaW50IHRoZSByZXNvbHZlZCBwaXBlbGluZSBjb25maWcgKHdpdGgge3sgLi4uIH19IHRlbXBsYXRlcyBleHBhbmRlZCkgYW5kIGV4aXQgd2l0aG91dCBkZXBsb3lpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUGlwZWxpbmUgRGVwbG95Jyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIE11dHVhbGx5IGV4Y2x1c2l2ZSBpbnB1dCBzb3VyY2VzIOKAlCB2YWxpZGF0ZWQgSU5TSURFIHRoZSB0cnkgc28gZmFpbHVyZXMgcm91dGVcbiAgICAgICAgLy8gdGhyb3VnaCBoYW5kbGVFcnJvciAoY29uc2lzdGVudCBleGl0IGNvZGUvZm9ybWF0KSBsaWtlIGV2ZXJ5IG90aGVyIGNvbW1hbmQuXG4gICAgICAgIGlmICghb3B0aW9ucy5pZCAmJiAhb3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciAtLWlkIDxwaXBlbGluZS1pZD4gb3IgLS1sb2NhbC1zcGVjIDxwYXRoPiBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmlkICYmIG9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLWlkIGFuZCAtLWxvY2FsLXNwZWMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRvb2xjaGFpbkZpbGUgJiYgIW9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLXRvb2xjaGFpbi1maWxlIGFwcGxpZXMgdG8gLS1sb2NhbC1zcGVjIG9ubHkgKHdpdGggLS1pZCB0aGUgcGxhdGZvcm0gcmVzb2x2ZXMgdGhlIHRvb2xjaGFpbiByZWxlYXNlKScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdpdGhvdXQgdGhlIHBsYXRmb3JtLCB0aGUgdG9vbGNoYWluIHJlbGVhc2UgY2FuIG9ubHkgY29tZSBmcm9tIGEgZmlsZVxuICAgICAgICAvLyAoRDI6IG5ldmVyIGEgZmFsbGJhY2sgaW1hZ2UpLiBSZWZ1c2UgYmVmb3JlIHJlYWRpbmcgYW55dGhpbmcgZWxzZS5cbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYWxTcGVjICYmICFvcHRpb25zLnRvb2xjaGFpbkZpbGUpIHRocm93IHRvb2xjaGFpbkZpbGVSZXF1aXJlZCgpO1xuXG4gICAgICAgIGF1ZGl0TG9nKCdkZXBsb3knLCB7IGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkOiBvcHRpb25zLmlkLCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSk7XG4gICAgICAgIC8vIEF0dHJpYnV0ZXMgdGhpcyBkZXBsb3kncyBwbGF0Zm9ybSBjYWxscyB0byB0aGUgcGlwZWxpbmUgKHVzYWdlIGxlZGdlcikuXG4gICAgICAgIHNldFBpcGVsaW5lSWQob3B0aW9ucy5pZCk7XG5cbiAgICAgICAgcHJpbnRJbmZvKCdEZXBsb3ltZW50IHBhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgYXdzUHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIHByb2Nlc3MuZW52IHNvIENESyBjb25zdHJ1Y3RzIChMYW1iZGEsIENvZGVCdWlsZCkgaW5oZXJpdCBpdCxcbiAgICAgICAgLy8gYnV0IHJlZnVzZSBpbiBwcm9kdWN0aW9uIChzZWUgcmVsYXhUbHNGb3JDbGkpIOKAlCB0aGUgZmxhZyBkaXNhYmxlcyBjZXJ0XG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIEFMTCBvdXRib3VuZCBUTFMsIGluY2x1ZGluZyB0aGUgQVdTIFNESy5cbiAgICAgICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG5cbiAgICAgICAgLy8gTG9jYWwtdG9vbCBwcmVyZXF1aXNpdGVzIChjZGsgKyBlc2J1aWxkL3BucG0pIGFyZSB2ZXJpZmllZCB1cCBmcm9udCBieVxuICAgICAgICAvLyB0aGUgQ0xJJ3MgcHJlQWN0aW9uIGhvb2ssIHNvIGJ5IGhlcmUgdGhleSdyZSBndWFyYW50ZWVkIHByZXNlbnQuXG5cbiAgICAgICAgbGV0IHBpcGVsaW5lOiBQaXBlbGluZTtcbiAgICAgICAgbGV0IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGxldCBwbHVnaW5XYXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdID0gW107XG4gICAgICAgIC8vIFJlbW90ZS1tb2RlIHJlZ2lzdHJ5LXBvc3QgaGFuZGxlcyDigJQgbnVsbCBpbiAtLWxvY2FsLXNwZWMgbW9kZS5cbiAgICAgICAgbGV0IHBsYXRmb3JtQ2xpZW50OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYz4+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcGxhdGZvcm1Db25maWc6IFBsYXRmb3JtRGVwbG95Q29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIC8vIC0tbG9jYWwtc3BlYzogcmVhZCBwaXBlbGluZS5qc29uIGZyb20gZGlzazsgbm8gcGxhdGZvcm0gY29udGFjdC5cbiAgICAgICAgICAvLyBDb21wbGlhbmNlIC8gcXVvdGEgLyBwbHVnaW4tbG9va3VwIGZlYXR1cmVzIGFsbCByZXF1aXJlIHRoZSBwbGF0Zm9ybSDigJRcbiAgICAgICAgICAvLyB0aGlzIG1vZGUgaXMgZm9yIGFpci1nYXBwZWQgb3Igc2ltcGxlIHN0YW5kYWxvbmUgQ0RLIGRlcGxveW1lbnRzLlxuICAgICAgICAgIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5sb2NhbFNwZWMpO1xuICAgICAgICAgIHByaW50SW5mbygnTG9hZGluZyBsb2NhbCBwaXBlbGluZSBzcGVjJywgeyBwYXRoOiBhYnNQYXRoIH0pO1xuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgbm90IGZvdW5kOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhhYnNQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUGFydGlhbDxQaXBlbGluZT4gJiB7IHByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgICAgICAgICBpZiAoIXBhcnNlZC5wcm9wcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgaXMgbWlzc2luZyByZXF1aXJlZCAncHJvcHMnIGZpZWxkOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBpcGVsaW5lID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlZC5pZCA/PyAnbG9jYWwnLFxuICAgICAgICAgICAgcHJvamVjdDogcGFyc2VkLnByb2plY3QgPz8gJ2xvY2FsLXByb2plY3QnLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBwYXJzZWQub3JnYW5pemF0aW9uID8/ICdsb2NhbC1vcmcnLFxuICAgICAgICAgICAgb3JnSWQ6IHBhcnNlZC5vcmdJZCxcbiAgICAgICAgICAgIGlzRGVmYXVsdDogcGFyc2VkLmlzRGVmYXVsdCA/PyBmYWxzZSxcbiAgICAgICAgICAgIGlzQWN0aXZlOiBwYXJzZWQuaXNBY3RpdmUgPz8gdHJ1ZSxcbiAgICAgICAgICAgIHByb3BzOiBwYXJzZWQucHJvcHMsXG4gICAgICAgICAgfSBhcyBQaXBlbGluZTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0xvY2FsIHNwZWMgbG9hZGVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBTb3VyY2U6IGFic1BhdGgsXG4gICAgICAgICAgICBQcm9qZWN0OiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgT3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0ge1xuICAgICAgICAgICAgLi4ucGlwZWxpbmUucHJvcHMsXG4gICAgICAgICAgICAuLi4ocGlwZWxpbmUub3JnSWQgJiYgeyBvcmdJZDogcGlwZWxpbmUub3JnSWQgfSksXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIFRoZSB0b29sY2hhaW4gcmVsZWFzZSBmcm9tIGB0b29sY2hhaW4gZXhwb3J0YDogdGhlIGJvb3RzdHJhcCBpbWFnZVxuICAgICAgICAgIC8vIGFuZCwgZm9yIGEgbWFuYWdlZCBjZGstc3ludGgsIHRoZSBzeW50aCBwbHVnaW4gaXRzZWxmLlxuICAgICAgICAgIGNvbnN0IHJlbGVhc2UgPSBhcHBseVRvb2xjaGFpbkZpbGUocHJvcHNXaXRoSWRzLCBvcHRpb25zLnRvb2xjaGFpbkZpbGUpO1xuICAgICAgICAgIHByaW50SW5mbygnVG9vbGNoYWluIHJlbGVhc2UgKGZyb20gZmlsZSknLCB7IHJlbGVhc2UsIGZpbGU6IHBhdGgucmVzb2x2ZShvcHRpb25zLnRvb2xjaGFpbkZpbGUpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbW90ZSBwYXRoOiBmZXRjaCBjb25maWcgZnJvbSBwbGF0Zm9ybSBBUEkuIGZldGNoUGlwZWxpbmVQcm9wcyBkb2VzXG4gICAgICAgICAgLy8gdGhlIGZldGNoICsgcGx1Z2luIHByZS1yZXNvbHV0aW9uICsgcmVnaXN0cnkgcHVsbC1ob3N0IGJha2Ug4oCUIHNoYXJlZFxuICAgICAgICAgIC8vIHZlcmJhdGltIHdpdGggYHN5bnRoYCBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0LlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIHBsYXRmb3JtQ29uZmlnID0gcGxhdGZvcm1DbGllbnQuZ2V0Q29uZmlnKCkgYXMgUGxhdGZvcm1EZXBsb3lDb25maWc7XG5cbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nLCB7IGlkOiBvcHRpb25zLmlkIH0pO1xuICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMocGxhdGZvcm1DbGllbnQsIG9wdGlvbnMuaWQpO1xuICAgICAgICAgIHBpcGVsaW5lID0gZmV0Y2hlZC5waXBlbGluZTtcbiAgICAgICAgICBwcm9wc1dpdGhJZHMgPSBmZXRjaGVkLnByb3BzV2l0aElkcztcbiAgICAgICAgICBwbHVnaW5XYXJuaW5ncyA9IGZldGNoZWQucGx1Z2luV2FybmluZ3M7XG5cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGNvbmZpZ3VyYXRpb24gcmV0cmlldmVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnSUQnOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAnSXMgRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCxcbiAgICAgICAgICAgICdJcyBBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tc2hvdy1yZXNvbHZlZDogcHJpbnQgcmVzb2x2ZWQgY29uZmlnIGFuZCBleGl0IChubyBDREsgZGVwbG95KVxuICAgICAgICBpZiAoKG9wdGlvbnMgYXMgeyBzaG93UmVzb2x2ZWQ/OiBib29sZWFuIH0pLnNob3dSZXNvbHZlZCkge1xuICAgICAgICAgIGF3YWl0IHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGVwcyA14oCTOSAoZW5jb2RlIHByb3BzIOKGkiBjZGsgZGVwbG95IOKGkiByZWdpc3RlciBBUk4pIGFyZSBzaGFyZWQgd2l0aFxuICAgICAgICAvLyBgcGlwZWxpbmUgY3JlYXRlIC0tZGVwbG95YCB2aWEgcnVuRGVwbG95IHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgIGF3YWl0IHJ1bkRlcGxveSh7XG4gICAgICAgICAgcGlwZWxpbmUsXG4gICAgICAgICAgcHJvcHNXaXRoSWRzLFxuICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgLy8gVGhlIHJlZ2lzdHJ5IGNhbGxiYWNrJ3MgY3JlZGVudGlhbDogdGhlIG9wZXJhdG9yJ3Mgb3duLCBvciDigJQgdW5kZXJcbiAgICAgICAgICAvLyAtLXN0b3JlLXRva2VucyDigJQgdGhlIGBwaXBlbGluZS1yZWdpc3RlcmAga2V5LCBuZXZlciB0aGUgcGxhdGZvcm0gb25lLlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50OiBwbGF0Zm9ybUNsaWVudCAmJiBhd2FpdCByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50KHtcbiAgICAgICAgICAgIGNsaWVudDogcGxhdGZvcm1DbGllbnQsXG4gICAgICAgICAgICBzdG9yZVRva2Vuczogb3B0aW9ucy5zdG9yZVRva2VucyxcbiAgICAgICAgICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogcGxhdGZvcm1Db25maWc/LmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICBwbGF0Zm9ybUJhc2VVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkuYmFzZVVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdyYWRlZCBwbHVnaW4gd2FybmluZ3MgYXJlIHJlcG9ydGVkLCBuZXZlciBlbmZvcmNlZCDigJQgc3VtbWFyaXplIHRoZW1cbiAgICAgICAgLy8gYWZ0ZXIgdGhlIENESyBvdXRwdXQgc28gdGhleSBhcmVuJ3QgbG9zdCBhYm92ZSBpdC5cbiAgICAgICAgcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeShwbHVnaW5XYXJuaW5ncyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdkZXBsb3knLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -10,8 +10,9 @@ import { Command } from 'commander';
|
|
|
10
10
|
*
|
|
11
11
|
* The session is written to the credential store (`~/.pipeline-manager/
|
|
12
12
|
* credentials.json`, owner-only), so subsequent commands authenticate with no
|
|
13
|
-
* environment variable at all
|
|
14
|
-
*
|
|
13
|
+
* environment variable at all, and the platform is remembered as the active one,
|
|
14
|
+
* so they also talk to the platform the session belongs to. `PLATFORM_TOKEN`
|
|
15
|
+
* still wins when it is set, which is what CI uses — an access key from `auth pat`.
|
|
15
16
|
*
|
|
16
17
|
* @param program - The root Commander program instance to attach the command to.
|
|
17
18
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwH5C"}
|
package/dist/commands/login.js
CHANGED
|
@@ -6,7 +6,8 @@ import pico from 'picocolors';
|
|
|
6
6
|
import { TIMEOUTS } from '../config/cli.constants.js';
|
|
7
7
|
import { assertCredentialTlsAllowed, credentialHttpsAgent, switchOrganization } from '../utils/auth-utils.js';
|
|
8
8
|
import { printCommandHeader, withSslOptions } from '../utils/command-utils.js';
|
|
9
|
-
import {
|
|
9
|
+
import { getApiConfig } from '../utils/config-loader.js';
|
|
10
|
+
import { credentialStorePath, saveSession, setActivePlatform } from '../utils/credential-store.js';
|
|
10
11
|
import { beginDeviceApproval, DeviceAuthError, pollForDeviceToken } from '../utils/device-auth.js';
|
|
11
12
|
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
12
13
|
import { printError, printInfo, printSuccess } from '../utils/output-utils.js';
|
|
@@ -22,8 +23,9 @@ const { green } = pico;
|
|
|
22
23
|
*
|
|
23
24
|
* The session is written to the credential store (`~/.pipeline-manager/
|
|
24
25
|
* credentials.json`, owner-only), so subsequent commands authenticate with no
|
|
25
|
-
* environment variable at all
|
|
26
|
-
*
|
|
26
|
+
* environment variable at all, and the platform is remembered as the active one,
|
|
27
|
+
* so they also talk to the platform the session belongs to. `PLATFORM_TOKEN`
|
|
28
|
+
* still wins when it is set, which is what CI uses — an access key from `auth pat`.
|
|
27
29
|
*
|
|
28
30
|
* @param program - The root Commander program instance to attach the command to.
|
|
29
31
|
*
|
|
@@ -41,7 +43,7 @@ export function login(program) {
|
|
|
41
43
|
.description('Sign in through your browser and store the session (device authorization)')
|
|
42
44
|
.option('--org <orgId>', 'Switch to a specific organization after signing in')
|
|
43
45
|
.option('--no-browser', 'Never open a browser — print the verification URL instead')
|
|
44
|
-
.option('--url <url>', 'Platform base URL
|
|
46
|
+
.option('--url <url>', 'Platform base URL (default: PLATFORM_BASE_URL, else the platform you last signed in to, else config.yml)'))
|
|
45
47
|
.option('--quiet', 'Only print the export statement (useful for eval)')
|
|
46
48
|
.option('--token', 'Print ONLY the access token, for `export PLATFORM_TOKEN=$(…)`')
|
|
47
49
|
.action(async (options, command) => {
|
|
@@ -62,9 +64,13 @@ export function login(program) {
|
|
|
62
64
|
// SECURITY: the poll returns session tokens — bearer credentials. Never
|
|
63
65
|
// fetch them over an unverified TLS connection in production.
|
|
64
66
|
assertCredentialTlsAllowed(options.verifySsl);
|
|
67
|
+
// Resolved at run time (not as a Commander default, which is evaluated when
|
|
68
|
+
// the command is registered) so it honours the same layers every other
|
|
69
|
+
// command reads: PLATFORM_BASE_URL, the last sign-in, then config.yml.
|
|
70
|
+
const url = options.url ?? getApiConfig().api.baseUrl;
|
|
65
71
|
try {
|
|
66
72
|
const transport = {
|
|
67
|
-
url
|
|
73
|
+
url,
|
|
68
74
|
httpsAgent: credentialHttpsAgent(options.verifySsl),
|
|
69
75
|
timeout: TIMEOUTS.HTTP_REQUEST,
|
|
70
76
|
};
|
|
@@ -83,7 +89,7 @@ export function login(program) {
|
|
|
83
89
|
if (!quiet)
|
|
84
90
|
printInfo('Switching to organization', { orgId: options.org });
|
|
85
91
|
const switched = await switchOrganization({
|
|
86
|
-
url
|
|
92
|
+
url,
|
|
87
93
|
orgId: options.org,
|
|
88
94
|
accessToken,
|
|
89
95
|
httpsAgent: transport.httpsAgent,
|
|
@@ -94,12 +100,15 @@ export function login(program) {
|
|
|
94
100
|
refreshToken = switched.refreshToken ?? refreshToken;
|
|
95
101
|
expiresIn = switched.expiresIn ?? expiresIn;
|
|
96
102
|
}
|
|
97
|
-
saveSession(
|
|
103
|
+
saveSession(url, {
|
|
98
104
|
accessToken,
|
|
99
105
|
...(refreshToken ? { refreshToken } : {}),
|
|
100
106
|
expiresAt: Date.now() + expiresIn * 1000,
|
|
101
107
|
...(options.org ? { organizationId: options.org } : {}),
|
|
102
108
|
});
|
|
109
|
+
// Later commands resolve their base URL from this, so they find the
|
|
110
|
+
// session just stored (see config-loader's layer 4).
|
|
111
|
+
setActivePlatform(url);
|
|
103
112
|
if (tokenOnly) {
|
|
104
113
|
// The token and NOTHING else — the caller writes the export.
|
|
105
114
|
console.log(accessToken);
|
|
@@ -119,7 +128,7 @@ export function login(program) {
|
|
|
119
128
|
printInfo('Tip: to export it into this shell instead:');
|
|
120
129
|
console.log(green(` export PLATFORM_TOKEN=$(pipeline-manager auth login${options.org ? ` --org ${options.org}` : ''} --token)`));
|
|
121
130
|
console.log('');
|
|
122
|
-
printInfo('Sign this device out
|
|
131
|
+
printInfo('Sign this device out with "pipeline-manager auth logout" (or from Settings → Sessions and devices).');
|
|
123
132
|
}
|
|
124
133
|
catch (error) {
|
|
125
134
|
if (error instanceof DeviceAuthError) {
|
|
@@ -135,9 +144,9 @@ export function login(program) {
|
|
|
135
144
|
handleError(error, ERROR_CODES.AUTHENTICATION, {
|
|
136
145
|
debug: program.opts().debug,
|
|
137
146
|
exit: true,
|
|
138
|
-
context: { command: 'login', executionId, url
|
|
147
|
+
context: { command: 'login', executionId, url },
|
|
139
148
|
});
|
|
140
149
|
}
|
|
141
150
|
});
|
|
142
151
|
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBZ0I7SUFDcEMsY0FBYyxDQUFDLE9BQU87U0FDbkIsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixXQUFXLENBQUMsMkVBQTJFLENBQUM7U0FDeEYsTUFBTSxDQUFDLGVBQWUsRUFBRSxvREFBb0QsQ0FBQztTQUM3RSxNQUFNLENBQUMsY0FBYyxFQUFFLDJEQUEyRCxDQUFDO1NBQ25GLE1BQU0sQ0FB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ZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBUSU1FT1VUUyB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGFzc2VydENyZWRlbnRpYWxUbHNBbGxvd2VkLCBjcmVkZW50aWFsSHR0cHNBZ2VudCwgc3dpdGNoT3JnYW5pemF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvYXV0aC11dGlscy5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBjcmVkZW50aWFsU3RvcmVQYXRoLCBzYXZlU2Vzc2lvbiB9IGZyb20gJy4uL3V0aWxzL2NyZWRlbnRpYWwtc3RvcmUuanMnO1xuaW1wb3J0IHsgYmVnaW5EZXZpY2VBcHByb3ZhbCwgRGV2aWNlQXV0aEVycm9yLCBwb2xsRm9yRGV2aWNlVG9rZW4gfSBmcm9tICcuLi91dGlscy9kZXZpY2UtYXV0aC5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgeyBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBsb2dpbmAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBTaWducyBpbiB3aXRoIHRoZSBPQXV0aCAyLjAgZGV2aWNlIGF1dGhvcml6YXRpb24gZ3JhbnQgKFJGQyA4NjI4KTogdGhlIENMSVxuICogc2hvd3MgYSBzaG9ydCBjb2RlLCB0aGUgcGVyc29uIGFwcHJvdmVzIGl0IGluIGEgYnJvd3NlciwgYW5kIHRoZSBDTEkgcmVjZWl2ZXNcbiAqIGFuIG9yZGluYXJ5IHNlc3Npb24uIFRoZXJlIGlzIG5vIHBhc3N3b3JkIGZsYWcgYW5kIG5vIHdheSB0byBoYW5kIHRoZSBDTEkgYVxuICogcmVmcmVzaCB0b2tlbiDigJQgYm90aCBlbmQgdXAgaW4gc2hlbGwgaGlzdG9yeSwgYHBzYCBvdXRwdXQgYW5kIENJIGxvZ3MsIGFuZFxuICogYm90aCBza2lwIHRoZSBTU08gLyBzdGVwLXVwIC8gTUZBIHRoZSBicm93c2VyIGFscmVhZHkgZW5mb3JjZXMuXG4gKlxuICogVGhlIHNlc3Npb24gaXMgd3JpdHRlbiB0byB0aGUgY3JlZGVudGlhbCBzdG9yZSAoYH4vLnBpcGVsaW5lLW1hbmFnZXIvXG4gKiBjcmVkZW50aWFscy5qc29uYCwgb3duZXItb25seSksIHNvIHN1YnNlcXVlbnQgY29tbWFuZHMgYXV0aGVudGljYXRlIHdpdGggbm9cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIGF0IGFsbC4gYFBMQVRGT1JNX1RPS0VOYCBzdGlsbCB3aW5zIHdoZW4gaXQgaXMgc2V0LCB3aGljaFxuICogaXMgd2hhdCBDSSB1c2VzIOKAlCBhbiBhY2Nlc3Mga2V5IGZyb20gYGF1dGggcGF0YC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW4gLS11cmwgaHR0cHM6Ly9wbGF0Zm9ybS5leGFtcGxlLmNvbSAtLW9yZyA8b3JnSWQ+XG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW4gLS1uby1icm93c2VyICAgICAgIyBwcmludCB0aGUgVVJMIGluc3RlYWQgb2Ygb3BlbmluZyBpdFxuICogZXZhbCAkKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBsb2dpbiAtLXF1aWV0KSAgICMgYWxzbyBleHBvcnQgUExBVEZPUk1fVE9LRU5cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9naW4ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xvZ2luJylcbiAgICAuZGVzY3JpcHRpb24oJ1NpZ24gaW4gdGhyb3VnaCB5b3VyIGJyb3dzZXIgYW5kIHN0b3JlIHRoZSBzZXNzaW9uIChkZXZpY2UgYXV0aG9yaXphdGlvbiknKVxuICAgIC5vcHRpb24oJy0tb3JnIDxvcmdJZD4nLCAnU3dpdGNoIHRvIGEgc3BlY2lmaWMgb3JnYW5pemF0aW9uIGFmdGVyIHNpZ25pbmcgaW4nKVxuICAgIC5vcHRpb24oJy0tbm8tYnJvd3NlcicsICdOZXZlciBvcGVuIGEgYnJvd3NlciDigJQgcHJpbnQgdGhlIHZlcmlmaWNhdGlvbiBVUkwgaW5zdGVhZCcpXG4gICAgLm9wdGlvbignLS11cmwgPHVybD4nLCAnUGxhdGZvcm0gYmFzZSBVUkwnLCBwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTCB8fCAnaHR0cHM6Ly9sb2NhbGhvc3Q6ODQ0MycpKVxuICAgIC5vcHRpb24oJy0tcXVpZXQnLCAnT25seSBwcmludCB0aGUgZXhwb3J0IHN0YXRlbWVudCAodXNlZnVsIGZvciBldmFsKScpXG4gICAgLm9wdGlvbignLS10b2tlbicsICdQcmludCBPTkxZIHRoZSBhY2Nlc3MgdG9rZW4sIGZvciBgZXhwb3J0IFBMQVRGT1JNX1RPS0VOPSQo4oCmKWAnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMsIGNvbW1hbmQ6IENvbW1hbmQpID0+IHtcbiAgICAgIC8vIGAtLXF1aWV0YCBpcyBBTFNPIGEgcHJvZ3JhbS1sZXZlbCBvcHRpb24sIGFuZCBDb21tYW5kZXIgYmluZHMgYSB0cmFpbGluZ1xuICAgICAgLy8gYC0tcXVpZXRgIHRvIHRoZSBwcm9ncmFtIHJhdGhlciB0aGFuIHRvIHRoaXMgc3ViY29tbWFuZCDigJQgc29cbiAgICAgIC8vIGBvcHRpb25zLnF1aWV0YCBoZXJlIGlzIG5ldmVyIHNldCBhbmQgdGhlIGRvY3VtZW50ZWRcbiAgICAgIC8vIGBldmFsICQocGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luIC0tcXVpZXQpYCBjb3VsZCBub3Qgd29yay4gUmVhZCB0aGVcbiAgICAgIC8vIHZhbHVlIHRoYXQgYWN0dWFsbHkgbGFuZHM6IHRoaXMgY29tbWFuZCdzIG93biBmbGFnIGlmIENvbW1hbmRlciBldmVyXG4gICAgICAvLyBnaXZlcyBpdCB0byB1cywgZWxzZSB0aGUgcm9vdCBwcm9ncmFtJ3MuXG4gICAgICBjb25zdCByb290UXVpZXQgPSAoY29tbWFuZD8ucGFyZW50Py5wYXJlbnQgYXMgQ29tbWFuZCB8IHVuZGVmaW5lZCk/Lm9wdHM/LigpLnF1aWV0O1xuICAgICAgLy8gYC0tdG9rZW5gIHByaW50cyB0aGUgYmFyZSB0b2tlbiBmb3IgYCQo4oCmKWAgY2FwdHVyZSwgc28gaXQgc2lsZW5jZXMgdGhlXG4gICAgICAvLyBzYW1lIGNocm9tZSBgLS1xdWlldGAgZG9lcy4gUmVhZCBmcm9tIGFyZ3YgYXMgd2VsbDogdGhlIGJhbm5lciBpc1xuICAgICAgLy8gZGVjaWRlZCBmcm9tIGFyZ3YgYmVmb3JlIENvbW1hbmRlciBwYXJzZXMgKHNlZSBjbGkudHMncyBlbnRyeSksIHNvIHRoZVxuICAgICAgLy8gdHdvIGhhdmUgdG8gYWdyZWUgb3IgdGhlIGJhbm5lciBsYW5kcyBvbiBzdGRvdXQgYW5kIHBvaXNvbnMgdGhlIGNhcHR1cmUuXG4gICAgICBjb25zdCB0b2tlbk9ubHkgPSAob3B0aW9ucy50b2tlbiA/PyBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tdG9rZW4nKSkgYXMgYm9vbGVhbjtcbiAgICAgIGNvbnN0IHF1aWV0ID0gKG9wdGlvbnMucXVpZXQgPz8gcm9vdFF1aWV0ID8/IGZhbHNlKSBhcyBib29sZWFuIHx8IHRva2VuT25seTtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdMb2dpbicsICdQbGF0Zm9ybSBBdXRoZW50aWNhdGlvbicsIHsgcXVpZXQgfSk7XG5cbiAgICAgIC8vIFNFQ1VSSVRZOiB0aGUgcG9sbCByZXR1cm5zIHNlc3Npb24gdG9rZW5zIOKAlCBiZWFyZXIgY3JlZGVudGlhbHMuIE5ldmVyXG4gICAgICAvLyBmZXRjaCB0aGVtIG92ZXIgYW4gdW52ZXJpZmllZCBUTFMgY29ubmVjdGlvbiBpbiBwcm9kdWN0aW9uLlxuICAgICAgYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWQob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSB7XG4gICAgICAgICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICAgICAgICBodHRwc0FnZW50OiBjcmVkZW50aWFsSHR0cHNBZ2VudChvcHRpb25zLnZlcmlmeVNzbCksXG4gICAgICAgICAgdGltZW91dDogVElNRU9VVFMuSFRUUF9SRVFVRVNULFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBiZWdpbkRldmljZUFwcHJvdmFsKHRyYW5zcG9ydCwge1xuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIGJyb3dzZXI6IG9wdGlvbnMuYnJvd3NlcixcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgcG9sbEZvckRldmljZVRva2VuKHRyYW5zcG9ydCwgY29kZSk7XG5cbiAgICAgICAgbGV0IGFjY2Vzc1Rva2VuID0gc2Vzc2lvbi5hY2Nlc3NfdG9rZW47XG4gICAgICAgIGxldCByZWZyZXNoVG9rZW4gPSBzZXNzaW9uLnJlZnJlc2hfdG9rZW47XG4gICAgICAgIGxldCBleHBpcmVzSW4gPSBzZXNzaW9uLmV4cGlyZXNfaW47XG5cbiAgICAgICAgLy8gU3dpdGNoaW5nIHJlLWlzc3VlcyAoYW5kIHJvdGF0ZXMpIHRoZSBzZXNzaW9uLCBzbyB0aGUgc3RvcmUgaGFzIHRvIHRha2VcbiAgICAgICAgLy8gdGhlIE5FVyBwYWlyIOKAlCBrZWVwaW5nIHRoZSBvbGQgcmVmcmVzaCB0b2tlbiB3b3VsZCBzdHJhbmQgdGhlIHNlc3Npb24uXG4gICAgICAgIGlmIChvcHRpb25zLm9yZykge1xuICAgICAgICAgIGlmICghcXVpZXQpIHByaW50SW5mbygnU3dpdGNoaW5nIHRvIG9yZ2FuaXphdGlvbicsIHsgb3JnSWQ6IG9wdGlvbnMub3JnIH0pO1xuICAgICAgICAgIGNvbnN0IHN3aXRjaGVkID0gYXdhaXQgc3dpdGNoT3JnYW5pemF0aW9uKHtcbiAgICAgICAgICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgICAgICAgICBvcmdJZDogb3B0aW9ucy5vcmcsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIGh0dHBzQWdlbnQ6IHRyYW5zcG9ydC5odHRwc0FnZW50LFxuICAgICAgICAgICAgdGltZW91dDogVElNRU9VVFMuSFRUUF9SRVFVRVNULFxuICAgICAgICAgICAgcXVpZXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYWNjZXNzVG9rZW4gPSBzd2l0Y2hlZC5hY2Nlc3NUb2tlbjtcbiAgICAgICAgICByZWZyZXNoVG9rZW4gPSBzd2l0Y2hlZC5yZWZyZXNoVG9rZW4gPz8gcmVmcmVzaFRva2VuO1xuICAgICAgICAgIGV4cGlyZXNJbiA9IHN3aXRjaGVkLmV4cGlyZXNJbiA/PyBleHBpcmVzSW47XG4gICAgICAgIH1cblxuICAgICAgICBzYXZlU2Vzc2lvbihvcHRpb25zLnVybCwge1xuICAgICAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgIC4uLihyZWZyZXNoVG9rZW4gPyB7IHJlZnJlc2hUb2tlbiB9IDoge30pLFxuICAgICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIGV4cGlyZXNJbiAqIDEwMDAsXG4gICAgICAgICAgLi4uKG9wdGlvbnMub3JnID8geyBvcmdhbml6YXRpb25JZDogb3B0aW9ucy5vcmcgfSA6IHt9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRva2VuT25seSkge1xuICAgICAgICAgIC8vIFRoZSB0b2tlbiBhbmQgTk9USElORyBlbHNlIOKAlCB0aGUgY2FsbGVyIHdyaXRlcyB0aGUgZXhwb3J0LlxuICAgICAgICAgIGNvbnNvbGUubG9nKGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1aWV0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYGV4cG9ydCBQTEFURk9STV9UT0tFTj0ke2FjY2Vzc1Rva2VufWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdTaWduZWQgaW4nKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEluZm8oJ1RoZSBzZXNzaW9uIGlzIHN0b3JlZCBmb3IgdGhpcyBwbGF0Zm9ybSDigJQgb3RoZXIgY29tbWFuZHMgcGljayBpdCB1cCBhdXRvbWF0aWNhbGx5LicsIHtcbiAgICAgICAgICBzdG9yZTogY3JlZGVudGlhbFN0b3JlUGF0aCgpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEluZm8oJ1RpcDogdG8gZXhwb3J0IGl0IGludG8gdGhpcyBzaGVsbCBpbnN0ZWFkOicpO1xuICAgICAgICBjb25zb2xlLmxvZyhncmVlbihgICBleHBvcnQgUExBVEZPUk1fVE9LRU49JChwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW4ke29wdGlvbnMub3JnID8gYCAtLW9yZyAke29wdGlvbnMub3JnfWAgOiAnJ30gLS10b2tlbilgKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdTaWduIHRoaXMgZGV2aWNlIG91dCBhZ2FpbiBmcm9tIFNldHRpbmdzIOKGkiBTZXNzaW9ucyBhbmQgZGV2aWNlcy4nKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIERldmljZUF1dGhFcnJvcikge1xuICAgICAgICAgIHByaW50RXJyb3IoYExvZ2luIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWAsIHsgcmVhc29uOiBlcnJvci5jb2RlIH0pO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBlcnJvci5yZXNwb25zZT8uc3RhdHVzO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyb3IucmVzcG9uc2U/LmRhdGEgYXMgeyBtZXNzYWdlPzogc3RyaW5nIH0pPy5tZXNzYWdlO1xuICAgICAgICAgIHByaW50RXJyb3IoJ0xvZ2luIGZhaWxlZCcsIHsgc3RhdHVzOiBzdGF0dXMgPz8gJ25vIHJlc3BvbnNlJywgLi4uKG1lc3NhZ2UgPyB7IG1lc3NhZ2UgfSA6IHt9KSB9KTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAnbG9naW4nLCBleGVjdXRpb25JZCwgdXJsOiBvcHRpb25zLnVybCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0UsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFnQjtJQUNwQyxjQUFjLENBQUMsT0FBTztTQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ2hCLFdBQVcsQ0FBQywyRUFBMkUsQ0FBQztTQUN4RixNQUFNLENBQUMsZUFBZSxFQUFFLG9EQUFvRCxD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RSxHQUFHLEVBQUU7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IFRJTUVPVVRTIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWQsIGNyZWRlbnRpYWxIdHRwc0FnZW50LCBzd2l0Y2hPcmdhbml6YXRpb24gfSBmcm9tICcuLi91dGlscy9hdXRoLXV0aWxzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciwgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IGdldEFwaUNvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgY3JlZGVudGlhbFN0b3JlUGF0aCwgc2F2ZVNlc3Npb24sIHNldEFjdGl2ZVBsYXRmb3JtIH0gZnJvbSAnLi4vdXRpbHMvY3JlZGVudGlhbC1zdG9yZS5qcyc7XG5pbXBvcnQgeyBiZWdpbkRldmljZUFwcHJvdmFsLCBEZXZpY2VBdXRoRXJyb3IsIHBvbGxGb3JEZXZpY2VUb2tlbiB9IGZyb20gJy4uL3V0aWxzL2RldmljZS1hdXRoLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG5jb25zdCB7IGdyZWVuIH0gPSBwaWNvO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGxvZ2luYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIFNpZ25zIGluIHdpdGggdGhlIE9BdXRoIDIuMCBkZXZpY2UgYXV0aG9yaXphdGlvbiBncmFudCAoUkZDIDg2MjgpOiB0aGUgQ0xJXG4gKiBzaG93cyBhIHNob3J0IGNvZGUsIHRoZSBwZXJzb24gYXBwcm92ZXMgaXQgaW4gYSBicm93c2VyLCBhbmQgdGhlIENMSSByZWNlaXZlc1xuICogYW4gb3JkaW5hcnkgc2Vzc2lvbi4gVGhlcmUgaXMgbm8gcGFzc3dvcmQgZmxhZyBhbmQgbm8gd2F5IHRvIGhhbmQgdGhlIENMSSBhXG4gKiByZWZyZXNoIHRva2VuIOKAlCBib3RoIGVuZCB1cCBpbiBzaGVsbCBoaXN0b3J5LCBgcHNgIG91dHB1dCBhbmQgQ0kgbG9ncywgYW5kXG4gKiBib3RoIHNraXAgdGhlIFNTTyAvIHN0ZXAtdXAgLyBNRkEgdGhlIGJyb3dzZXIgYWxyZWFkeSBlbmZvcmNlcy5cbiAqXG4gKiBUaGUgc2Vzc2lvbiBpcyB3cml0dGVuIHRvIHRoZSBjcmVkZW50aWFsIHN0b3JlIChgfi8ucGlwZWxpbmUtbWFuYWdlci9cbiAqIGNyZWRlbnRpYWxzLmpzb25gLCBvd25lci1vbmx5KSwgc28gc3Vic2VxdWVudCBjb21tYW5kcyBhdXRoZW50aWNhdGUgd2l0aCBub1xuICogZW52aXJvbm1lbnQgdmFyaWFibGUgYXQgYWxsLCBhbmQgdGhlIHBsYXRmb3JtIGlzIHJlbWVtYmVyZWQgYXMgdGhlIGFjdGl2ZSBvbmUsXG4gKiBzbyB0aGV5IGFsc28gdGFsayB0byB0aGUgcGxhdGZvcm0gdGhlIHNlc3Npb24gYmVsb25ncyB0by4gYFBMQVRGT1JNX1RPS0VOYFxuICogc3RpbGwgd2lucyB3aGVuIGl0IGlzIHNldCwgd2hpY2ggaXMgd2hhdCBDSSB1c2VzIOKAlCBhbiBhY2Nlc3Mga2V5IGZyb20gYGF1dGggcGF0YC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW4gLS11cmwgaHR0cHM6Ly9wbGF0Zm9ybS5leGFtcGxlLmNvbSAtLW9yZyA8b3JnSWQ+XG4gKiBwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW4gLS1uby1icm93c2VyICAgICAgIyBwcmludCB0aGUgVVJMIGluc3RlYWQgb2Ygb3BlbmluZyBpdFxuICogZXZhbCAkKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBsb2dpbiAtLXF1aWV0KSAgICMgYWxzbyBleHBvcnQgUExBVEZPUk1fVE9LRU5cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9naW4ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xvZ2luJylcbiAgICAuZGVzY3JpcHRpb24oJ1NpZ24gaW4gdGhyb3VnaCB5b3VyIGJyb3dzZXIgYW5kIHN0b3JlIHRoZSBzZXNzaW9uIChkZXZpY2UgYXV0aG9yaXphdGlvbiknKVxuICAgIC5vcHRpb24oJy0tb3JnIDxvcmdJZD4nLCAnU3dpdGNoIHRvIGEgc3BlY2lmaWMgb3JnYW5pemF0aW9uIGFmdGVyIHNpZ25pbmcgaW4nKVxuICAgIC5vcHRpb24oJy0tbm8tYnJvd3NlcicsICdOZXZlciBvcGVuIGEgYnJvd3NlciDigJQgcHJpbnQgdGhlIHZlcmlmaWNhdGlvbiBVUkwgaW5zdGVhZCcpXG4gICAgLm9wdGlvbignLS11cmwgPHVybD4nLCAnUGxhdGZvcm0gYmFzZSBVUkwgKGRlZmF1bHQ6IFBMQVRGT1JNX0JBU0VfVVJMLCBlbHNlIHRoZSBwbGF0Zm9ybSB5b3UgbGFzdCBzaWduZWQgaW4gdG8sIGVsc2UgY29uZmlnLnltbCknKSlcbiAgICAub3B0aW9uKCctLXF1aWV0JywgJ09ubHkgcHJpbnQgdGhlIGV4cG9ydCBzdGF0ZW1lbnQgKHVzZWZ1bCBmb3IgZXZhbCknKVxuICAgIC5vcHRpb24oJy0tdG9rZW4nLCAnUHJpbnQgT05MWSB0aGUgYWNjZXNzIHRva2VuLCBmb3IgYGV4cG9ydCBQTEFURk9STV9UT0tFTj0kKOKApilgJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zLCBjb21tYW5kOiBDb21tYW5kKSA9PiB7XG4gICAgICAvLyBgLS1xdWlldGAgaXMgQUxTTyBhIHByb2dyYW0tbGV2ZWwgb3B0aW9uLCBhbmQgQ29tbWFuZGVyIGJpbmRzIGEgdHJhaWxpbmdcbiAgICAgIC8vIGAtLXF1aWV0YCB0byB0aGUgcHJvZ3JhbSByYXRoZXIgdGhhbiB0byB0aGlzIHN1YmNvbW1hbmQg4oCUIHNvXG4gICAgICAvLyBgb3B0aW9ucy5xdWlldGAgaGVyZSBpcyBuZXZlciBzZXQgYW5kIHRoZSBkb2N1bWVudGVkXG4gICAgICAvLyBgZXZhbCAkKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBsb2dpbiAtLXF1aWV0KWAgY291bGQgbm90IHdvcmsuIFJlYWQgdGhlXG4gICAgICAvLyB2YWx1ZSB0aGF0IGFjdHVhbGx5IGxhbmRzOiB0aGlzIGNvbW1hbmQncyBvd24gZmxhZyBpZiBDb21tYW5kZXIgZXZlclxuICAgICAgLy8gZ2l2ZXMgaXQgdG8gdXMsIGVsc2UgdGhlIHJvb3QgcHJvZ3JhbSdzLlxuICAgICAgY29uc3Qgcm9vdFF1aWV0ID0gKGNvbW1hbmQ/LnBhcmVudD8ucGFyZW50IGFzIENvbW1hbmQgfCB1bmRlZmluZWQpPy5vcHRzPy4oKS5xdWlldDtcbiAgICAgIC8vIGAtLXRva2VuYCBwcmludHMgdGhlIGJhcmUgdG9rZW4gZm9yIGAkKOKApilgIGNhcHR1cmUsIHNvIGl0IHNpbGVuY2VzIHRoZVxuICAgICAgLy8gc2FtZSBjaHJvbWUgYC0tcXVpZXRgIGRvZXMuIFJlYWQgZnJvbSBhcmd2IGFzIHdlbGw6IHRoZSBiYW5uZXIgaXNcbiAgICAgIC8vIGRlY2lkZWQgZnJvbSBhcmd2IGJlZm9yZSBDb21tYW5kZXIgcGFyc2VzIChzZWUgY2xpLnRzJ3MgZW50cnkpLCBzbyB0aGVcbiAgICAgIC8vIHR3byBoYXZlIHRvIGFncmVlIG9yIHRoZSBiYW5uZXIgbGFuZHMgb24gc3Rkb3V0IGFuZCBwb2lzb25zIHRoZSBjYXB0dXJlLlxuICAgICAgY29uc3QgdG9rZW5Pbmx5ID0gKG9wdGlvbnMudG9rZW4gPz8gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLXRva2VuJykpIGFzIGJvb2xlYW47XG4gICAgICBjb25zdCBxdWlldCA9IChvcHRpb25zLnF1aWV0ID8/IHJvb3RRdWlldCA/PyBmYWxzZSkgYXMgYm9vbGVhbiB8fCB0b2tlbk9ubHk7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignTG9naW4nLCAnUGxhdGZvcm0gQXV0aGVudGljYXRpb24nLCB7IHF1aWV0IH0pO1xuXG4gICAgICAvLyBTRUNVUklUWTogdGhlIHBvbGwgcmV0dXJucyBzZXNzaW9uIHRva2VucyDigJQgYmVhcmVyIGNyZWRlbnRpYWxzLiBOZXZlclxuICAgICAgLy8gZmV0Y2ggdGhlbSBvdmVyIGFuIHVudmVyaWZpZWQgVExTIGNvbm5lY3Rpb24gaW4gcHJvZHVjdGlvbi5cbiAgICAgIGFzc2VydENyZWRlbnRpYWxUbHNBbGxvd2VkKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgLy8gUmVzb2x2ZWQgYXQgcnVuIHRpbWUgKG5vdCBhcyBhIENvbW1hbmRlciBkZWZhdWx0LCB3aGljaCBpcyBldmFsdWF0ZWQgd2hlblxuICAgICAgLy8gdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCkgc28gaXQgaG9ub3VycyB0aGUgc2FtZSBsYXllcnMgZXZlcnkgb3RoZXJcbiAgICAgIC8vIGNvbW1hbmQgcmVhZHM6IFBMQVRGT1JNX0JBU0VfVVJMLCB0aGUgbGFzdCBzaWduLWluLCB0aGVuIGNvbmZpZy55bWwuXG4gICAgICBjb25zdCB1cmw6IHN0cmluZyA9IG9wdGlvbnMudXJsID8/IGdldEFwaUNvbmZpZygpLmFwaS5iYXNlVXJsO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGh0dHBzQWdlbnQ6IGNyZWRlbnRpYWxIdHRwc0FnZW50KG9wdGlvbnMudmVyaWZ5U3NsKSxcbiAgICAgICAgICB0aW1lb3V0OiBUSU1FT1VUUy5IVFRQX1JFUVVFU1QsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29kZSA9IGF3YWl0IGJlZ2luRGV2aWNlQXBwcm92YWwodHJhbnNwb3J0LCB7XG4gICAgICAgICAgcXVpZXQsXG4gICAgICAgICAgYnJvd3Nlcjogb3B0aW9ucy5icm93c2VyLFxuICAgICAgICAgIHZlcmlmeVNzbDogb3B0aW9ucy52ZXJpZnlTc2wsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBwb2xsRm9yRGV2aWNlVG9rZW4odHJhbnNwb3J0LCBjb2RlKTtcblxuICAgICAgICBsZXQgYWNjZXNzVG9rZW4gPSBzZXNzaW9uLmFjY2Vzc190b2tlbjtcbiAgICAgICAgbGV0IHJlZnJlc2hUb2tlbiA9IHNlc3Npb24ucmVmcmVzaF90b2tlbjtcbiAgICAgICAgbGV0IGV4cGlyZXNJbiA9IHNlc3Npb24uZXhwaXJlc19pbjtcblxuICAgICAgICAvLyBTd2l0Y2hpbmcgcmUtaXNzdWVzIChhbmQgcm90YXRlcykgdGhlIHNlc3Npb24sIHNvIHRoZSBzdG9yZSBoYXMgdG8gdGFrZVxuICAgICAgICAvLyB0aGUgTkVXIHBhaXIg4oCUIGtlZXBpbmcgdGhlIG9sZCByZWZyZXNoIHRva2VuIHdvdWxkIHN0cmFuZCB0aGUgc2Vzc2lvbi5cbiAgICAgICAgaWYgKG9wdGlvbnMub3JnKSB7XG4gICAgICAgICAgaWYgKCFxdWlldCkgcHJpbnRJbmZvKCdTd2l0Y2hpbmcgdG8gb3JnYW5pemF0aW9uJywgeyBvcmdJZDogb3B0aW9ucy5vcmcgfSk7XG4gICAgICAgICAgY29uc3Qgc3dpdGNoZWQgPSBhd2FpdCBzd2l0Y2hPcmdhbml6YXRpb24oe1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgb3JnSWQ6IG9wdGlvbnMub3JnLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICBodHRwc0FnZW50OiB0cmFuc3BvcnQuaHR0cHNBZ2VudCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IFRJTUVPVVRTLkhUVFBfUkVRVUVTVCxcbiAgICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFjY2Vzc1Rva2VuID0gc3dpdGNoZWQuYWNjZXNzVG9rZW47XG4gICAgICAgICAgcmVmcmVzaFRva2VuID0gc3dpdGNoZWQucmVmcmVzaFRva2VuID8/IHJlZnJlc2hUb2tlbjtcbiAgICAgICAgICBleHBpcmVzSW4gPSBzd2l0Y2hlZC5leHBpcmVzSW4gPz8gZXhwaXJlc0luO1xuICAgICAgICB9XG5cbiAgICAgICAgc2F2ZVNlc3Npb24odXJsLCB7XG4gICAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgICAgLi4uKHJlZnJlc2hUb2tlbiA/IHsgcmVmcmVzaFRva2VuIH0gOiB7fSksXG4gICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgZXhwaXJlc0luICogMTAwMCxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5vcmcgPyB7IG9yZ2FuaXphdGlvbklkOiBvcHRpb25zLm9yZyB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gTGF0ZXIgY29tbWFuZHMgcmVzb2x2ZSB0aGVpciBiYXNlIFVSTCBmcm9tIHRoaXMsIHNvIHRoZXkgZmluZCB0aGVcbiAgICAgICAgLy8gc2Vzc2lvbiBqdXN0IHN0b3JlZCAoc2VlIGNvbmZpZy1sb2FkZXIncyBsYXllciA0KS5cbiAgICAgICAgc2V0QWN0aXZlUGxhdGZvcm0odXJsKTtcblxuICAgICAgICBpZiAodG9rZW5Pbmx5KSB7XG4gICAgICAgICAgLy8gVGhlIHRva2VuIGFuZCBOT1RISU5HIGVsc2Ug4oCUIHRoZSBjYWxsZXIgd3JpdGVzIHRoZSBleHBvcnQuXG4gICAgICAgICAgY29uc29sZS5sb2coYWNjZXNzVG9rZW4pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgZXhwb3J0IFBMQVRGT1JNX1RPS0VOPSR7YWNjZXNzVG9rZW59YCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ1NpZ25lZCBpbicpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50SW5mbygnVGhlIHNlc3Npb24gaXMgc3RvcmVkIGZvciB0aGlzIHBsYXRmb3JtIOKAlCBvdGhlciBjb21tYW5kcyBwaWNrIGl0IHVwIGF1dG9tYXRpY2FsbHkuJywge1xuICAgICAgICAgIHN0b3JlOiBjcmVkZW50aWFsU3RvcmVQYXRoKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50SW5mbygnVGlwOiB0byBleHBvcnQgaXQgaW50byB0aGlzIHNoZWxsIGluc3RlYWQ6Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdyZWVuKGAgIGV4cG9ydCBQTEFURk9STV9UT0tFTj0kKHBpcGVsaW5lLW1hbmFnZXIgYXV0aCBsb2dpbiR7b3B0aW9ucy5vcmcgPyBgIC0tb3JnICR7b3B0aW9ucy5vcmd9YCA6ICcnfSAtLXRva2VuKWApKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEluZm8oJ1NpZ24gdGhpcyBkZXZpY2Ugb3V0IHdpdGggXCJwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9nb3V0XCIgKG9yIGZyb20gU2V0dGluZ3Mg4oaSIFNlc3Npb25zIGFuZCBkZXZpY2VzKS4nKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIERldmljZUF1dGhFcnJvcikge1xuICAgICAgICAgIHByaW50RXJyb3IoYExvZ2luIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWAsIHsgcmVhc29uOiBlcnJvci5jb2RlIH0pO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBlcnJvci5yZXNwb25zZT8uc3RhdHVzO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyb3IucmVzcG9uc2U/LmRhdGEgYXMgeyBtZXNzYWdlPzogc3RyaW5nIH0pPy5tZXNzYWdlO1xuICAgICAgICAgIHByaW50RXJyb3IoJ0xvZ2luIGZhaWxlZCcsIHsgc3RhdHVzOiBzdGF0dXMgPz8gJ25vIHJlc3BvbnNlJywgLi4uKG1lc3NhZ2UgPyB7IG1lc3NhZ2UgfSA6IHt9KSB9KTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAnbG9naW4nLCBleGVjdXRpb25JZCwgdXJsIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the `logout` command with the CLI program.
|
|
4
|
+
*
|
|
5
|
+
* Signs this device out of a platform: revokes the stored session's refresh
|
|
6
|
+
* slot on the platform (`POST /api/auth/logout`) and deletes it from the
|
|
7
|
+
* credential store. The platform call is best effort — the local copy is always
|
|
8
|
+
* removed, and when the platform could not be told the command says so, since
|
|
9
|
+
* the refresh token then stays valid until it is revoked from the web UI.
|
|
10
|
+
*
|
|
11
|
+
* An expired access token is renewed first (logout needs a valid one), so a
|
|
12
|
+
* device idle for days can still sign itself out properly.
|
|
13
|
+
*
|
|
14
|
+
* `PLATFORM_TOKEN` is not touched: it is the caller's own environment variable,
|
|
15
|
+
* and an access key is revoked from the keys page, not by signing out.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```bash
|
|
19
|
+
* pipeline-manager auth logout
|
|
20
|
+
* pipeline-manager auth logout --url https://platform.example.com
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function logout(program: Command): void;
|
|
24
|
+
//# sourceMappingURL=logout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqE7C"}
|