@pipeline-builder/pipeline-manager 4.4.6 → 4.4.7
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/dist/agent/ai.d.ts +11 -0
- package/dist/agent/ai.d.ts.map +1 -1
- package/dist/agent/ai.js +47 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -2
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +3 -1
- package/dist/commands/create-pipeline.d.ts.map +1 -1
- package/dist/commands/create-pipeline.js +11 -2
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +20 -2
- package/dist/commands/report.js +4 -4
- package/dist/commands/security-report.d.ts +42 -0
- package/dist/commands/security-report.d.ts.map +1 -0
- package/dist/commands/security-report.js +89 -0
- package/dist/commands/setup-events.d.ts.map +1 -1
- package/dist/commands/setup-events.js +14 -1
- package/dist/commands/store-token.d.ts +1 -0
- package/dist/commands/store-token.d.ts.map +1 -1
- package/dist/commands/store-token.js +45 -19
- package/dist/commands/synth.d.ts +7 -1
- package/dist/commands/synth.d.ts.map +1 -1
- package/dist/commands/synth.js +66 -4
- package/dist/commands/verify-plugins.d.ts +45 -0
- package/dist/commands/verify-plugins.d.ts.map +1 -0
- package/dist/commands/verify-plugins.js +134 -0
- package/dist/lambda/token-renew-handler.d.ts +3 -1
- package/dist/lambda/token-renew-handler.d.ts.map +1 -1
- package/dist/lambda/token-renew-handler.js +31 -5
- package/dist/templates/events-stack.json +10 -0
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +20 -3
- package/dist/utils/auth-utils.d.ts.map +1 -1
- package/dist/utils/auth-utils.js +3 -1
- package/dist/utils/cdk-utils.js +2 -2
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +5 -2
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +9 -4
- package/dist/utils/deploy-runner.d.ts +25 -0
- package/dist/utils/deploy-runner.d.ts.map +1 -1
- package/dist/utils/deploy-runner.js +34 -5
- package/dist/utils/device-auth.d.ts.map +1 -1
- package/dist/utils/device-auth.js +4 -3
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +8 -1
- package/dist/utils/pipeline-config.d.ts +3 -0
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +4 -3
- package/dist/utils/platform-secret.d.ts.map +1 -1
- package/dist/utils/platform-secret.js +3 -1
- package/dist/utils/plugin-resolver.d.ts +41 -3
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +125 -21
- package/dist/utils/registration-client.d.ts +28 -0
- package/dist/utils/registration-client.d.ts.map +1 -0
- package/dist/utils/registration-client.js +57 -0
- package/dist/utils/request-context.d.ts +11 -0
- package/dist/utils/request-context.d.ts.map +1 -0
- package/dist/utils/request-context.js +62 -0
- package/dist/utils/service-account.d.ts +6 -4
- package/dist/utils/service-account.d.ts.map +1 -1
- package/dist/utils/service-account.js +14 -9
- package/package.json +3 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type RuntimeCheckResult, type RuntimeCheckStep } from '@pipeline-builder/pipeline-core';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import type { ApiClient } from '../utils/api-client.js';
|
|
4
|
+
interface VerifyOptions {
|
|
5
|
+
pipelineId: string;
|
|
6
|
+
stepsFile?: string;
|
|
7
|
+
manifest?: string;
|
|
8
|
+
storeTokens?: boolean;
|
|
9
|
+
verifySsl?: boolean;
|
|
10
|
+
region?: string;
|
|
11
|
+
profile?: string;
|
|
12
|
+
json?: boolean;
|
|
13
|
+
strict?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The steps to ask about, from (first match): `--steps-file` (JSON
|
|
17
|
+
* `[{ stepKey, imageDigest }]`), `--manifest` (a synth's `pb-step-manifest.json`
|
|
18
|
+
* — rows carrying a stepKey and a digest), or the `PB_VERIFY_STEPS` env var the
|
|
19
|
+
* synthesized verify step carries. No source, or an empty list, is an error: a
|
|
20
|
+
* check that asked about nothing must not pass.
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadVerifySteps(options: Pick<VerifyOptions, 'stepsFile' | 'manifest'>, env?: NodeJS.ProcessEnv): RuntimeCheckStep[];
|
|
23
|
+
/** `POST /api/plugins/runtime-check` (contract C2), envelope unwrapped. */
|
|
24
|
+
export declare function runtimeCheck(client: ApiClient, pipelineId: string, steps: readonly RuntimeCheckStep[]): Promise<RuntimeCheckResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Registers `plugin verify`: ask the platform what it now knows about the
|
|
27
|
+
* plugin images a pipeline runs — a CVE flagged, a KEV listing or an
|
|
28
|
+
* org-policy change since the synth that pinned them — and print the graded
|
|
29
|
+
* verdict. Vulnerability state is REPORTED, never enforced: the command exits
|
|
30
|
+
* 0 whatever the verdict (the platform also notifies on a pipeline running a
|
|
31
|
+
* vulnerable plugin). If the check itself cannot run (platform unreachable,
|
|
32
|
+
* unreadable answer) it warns and exits 0, or exits non-zero with `--strict`.
|
|
33
|
+
*
|
|
34
|
+
* The synthesized pipeline runs this as a report-only step in each stage when
|
|
35
|
+
* the `aws:cdk:operations:runtimevulncheck` metadata flag is on.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```bash
|
|
39
|
+
* pipeline-manager plugin verify --pipeline-id <id> --manifest cdk.out/pb-step-manifest.json
|
|
40
|
+
* pipeline-manager plugin verify --pipeline-id "$PIPELINE_ID" --store-tokens # in CodeBuild (PB_VERIFY_STEPS)
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function verifyPlugins(program: Command): void;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=verify-plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-plugins.d.ts","sourceRoot":"","sources":["../../src/commands/verify-plugins.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAWxD,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,UAAU,CAAC,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,EAAE,CAiBhJ;AAED,2EAA2E;AAC3E,wBAAsB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOzI;AAUD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsDpD"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { errorMessage } from '@pipeline-builder/api-core';
|
|
5
|
+
import { parseRuntimeCheckSteps, RUNTIME_CHECK_STEPS_ENV, RUNTIME_CHECK_VERDICTS, } from '@pipeline-builder/pipeline-core';
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import pico from 'picocolors';
|
|
8
|
+
import { createAuthenticatedClientAsync, printCommandHeader, printSslWarning, withProfileOption, withRegionOption, withSslOptions, } from '../utils/command-utils.js';
|
|
9
|
+
import { ERROR_CODES, handleError, ValidationError } from '../utils/error-handler.js';
|
|
10
|
+
import { printInfo, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
11
|
+
import { setPipelineId } from '../utils/request-context.js';
|
|
12
|
+
import { unwrapEnvelope } from '../utils/response-utils.js';
|
|
13
|
+
const { bold, cyan, red, yellow } = pico;
|
|
14
|
+
/**
|
|
15
|
+
* The steps to ask about, from (first match): `--steps-file` (JSON
|
|
16
|
+
* `[{ stepKey, imageDigest }]`), `--manifest` (a synth's `pb-step-manifest.json`
|
|
17
|
+
* — rows carrying a stepKey and a digest), or the `PB_VERIFY_STEPS` env var the
|
|
18
|
+
* synthesized verify step carries. No source, or an empty list, is an error: a
|
|
19
|
+
* check that asked about nothing must not pass.
|
|
20
|
+
*/
|
|
21
|
+
export function loadVerifySteps(options, env = process.env) {
|
|
22
|
+
let steps;
|
|
23
|
+
if (options.stepsFile) {
|
|
24
|
+
steps = parseRuntimeCheckSteps(readFileSync(options.stepsFile, 'utf8'));
|
|
25
|
+
}
|
|
26
|
+
else if (options.manifest) {
|
|
27
|
+
const rows = JSON.parse(readFileSync(options.manifest, 'utf8'));
|
|
28
|
+
if (!Array.isArray(rows))
|
|
29
|
+
throw new ValidationError('--manifest must be a step manifest (a JSON array)', 'manifest');
|
|
30
|
+
steps = parseRuntimeCheckSteps(JSON.stringify(rows
|
|
31
|
+
.filter((r) => r.stepKey && r.imageDigest)
|
|
32
|
+
.map((r) => ({ stepKey: r.stepKey, imageDigest: r.imageDigest }))));
|
|
33
|
+
}
|
|
34
|
+
else if (env[RUNTIME_CHECK_STEPS_ENV]) {
|
|
35
|
+
steps = parseRuntimeCheckSteps(env[RUNTIME_CHECK_STEPS_ENV]);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
throw new ValidationError(`No steps to verify: pass --steps-file or --manifest, or set ${RUNTIME_CHECK_STEPS_ENV}`, 'steps');
|
|
39
|
+
}
|
|
40
|
+
if (steps.length === 0)
|
|
41
|
+
throw new ValidationError('No image-backed steps to verify', 'steps');
|
|
42
|
+
return steps;
|
|
43
|
+
}
|
|
44
|
+
/** `POST /api/plugins/runtime-check` (contract C2), envelope unwrapped. */
|
|
45
|
+
export async function runtimeCheck(client, pipelineId, steps) {
|
|
46
|
+
const response = await client.post(`${client.getConfig().api.pluginUrl}/runtime-check`, { pipelineId, steps });
|
|
47
|
+
const body = unwrapEnvelope(response);
|
|
48
|
+
if (!body.verdict || !RUNTIME_CHECK_VERDICTS.includes(body.verdict)) {
|
|
49
|
+
throw new Error('runtime-check returned no readable verdict');
|
|
50
|
+
}
|
|
51
|
+
return { verdict: body.verdict, steps: Array.isArray(body.steps) ? body.steps : [] };
|
|
52
|
+
}
|
|
53
|
+
const VERDICT_STYLE = {
|
|
54
|
+
ok: (t) => t,
|
|
55
|
+
info: cyan,
|
|
56
|
+
warning: yellow,
|
|
57
|
+
error: red,
|
|
58
|
+
critical: (t) => bold(red(t)),
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Registers `plugin verify`: ask the platform what it now knows about the
|
|
62
|
+
* plugin images a pipeline runs — a CVE flagged, a KEV listing or an
|
|
63
|
+
* org-policy change since the synth that pinned them — and print the graded
|
|
64
|
+
* verdict. Vulnerability state is REPORTED, never enforced: the command exits
|
|
65
|
+
* 0 whatever the verdict (the platform also notifies on a pipeline running a
|
|
66
|
+
* vulnerable plugin). If the check itself cannot run (platform unreachable,
|
|
67
|
+
* unreadable answer) it warns and exits 0, or exits non-zero with `--strict`.
|
|
68
|
+
*
|
|
69
|
+
* The synthesized pipeline runs this as a report-only step in each stage when
|
|
70
|
+
* the `aws:cdk:operations:runtimevulncheck` metadata flag is on.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```bash
|
|
74
|
+
* pipeline-manager plugin verify --pipeline-id <id> --manifest cdk.out/pb-step-manifest.json
|
|
75
|
+
* pipeline-manager plugin verify --pipeline-id "$PIPELINE_ID" --store-tokens # in CodeBuild (PB_VERIFY_STEPS)
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export function verifyPlugins(program) {
|
|
79
|
+
withSslOptions(withRegionOption(withProfileOption(program
|
|
80
|
+
.command('verify')
|
|
81
|
+
.description('Report, at run time, the current vulnerability state of a pipeline\'s pinned plugin images (never fails on it)')
|
|
82
|
+
.requiredOption('-p, --pipeline-id <id>', 'Pipeline ID')
|
|
83
|
+
.option('--steps-file <file>', 'JSON [{ stepKey, imageDigest }] to check')
|
|
84
|
+
.option('--manifest <file>', 'A synth\'s pb-step-manifest.json to check')
|
|
85
|
+
.option('--store-tokens', 'Authenticate using the key in AWS Secrets Manager (PLATFORM_SECRET_NAME)', false)
|
|
86
|
+
.option('--strict', 'Exit non-zero when the check itself cannot run (never for vulnerability state)', false)
|
|
87
|
+
.option('--json', 'Print the verdict as JSON', false))))
|
|
88
|
+
.action(async (options) => {
|
|
89
|
+
const executionId = printCommandHeader('Plugin Run-time Check', undefined, { quiet: options.json });
|
|
90
|
+
try {
|
|
91
|
+
printSslWarning(options.verifySsl);
|
|
92
|
+
// Bad input is the caller's bug, not an outage: always an error.
|
|
93
|
+
const steps = loadVerifySteps(options);
|
|
94
|
+
printInfo('Checking plugin images', { pipelineId: options.pipelineId, steps: steps.length });
|
|
95
|
+
setPipelineId(options.pipelineId);
|
|
96
|
+
let result;
|
|
97
|
+
try {
|
|
98
|
+
const client = await createAuthenticatedClientAsync(options);
|
|
99
|
+
result = await runtimeCheck(client, options.pipelineId, steps);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (options.strict)
|
|
103
|
+
throw error;
|
|
104
|
+
printWarning('Run-time plugin check could not run — continuing (pass --strict to fail instead)', { error: errorMessage(error) });
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (options.json)
|
|
108
|
+
console.log(JSON.stringify(result, null, 2));
|
|
109
|
+
printSection(`Verdict: ${VERDICT_STYLE[result.verdict](result.verdict.toUpperCase())}`);
|
|
110
|
+
for (const step of result.steps) {
|
|
111
|
+
if (step.verdict === 'ok')
|
|
112
|
+
continue;
|
|
113
|
+
for (const reason of step.reasons) {
|
|
114
|
+
const sev = reason.severity ?? step.verdict;
|
|
115
|
+
const tag = (VERDICT_STYLE[sev] ?? yellow)(`[${sev.toUpperCase()}]`);
|
|
116
|
+
console.log(` ${tag} ${step.stepKey} (${step.imageDigest.slice(0, 19)}…) ${reason.code}: ${reason.message}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const flagged = result.steps.filter((s) => s.verdict !== 'ok').length;
|
|
120
|
+
if (result.verdict === 'ok')
|
|
121
|
+
printSuccess('Run-time plugin check: no findings');
|
|
122
|
+
else
|
|
123
|
+
printWarning(`Run-time plugin check: ${flagged} step(s) with findings (worst: ${result.verdict}) — reported, not enforced`);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
127
|
+
debug: program.opts().debug,
|
|
128
|
+
exit: true,
|
|
129
|
+
context: { command: 'plugin-verify', executionId, pipelineId: options.pipelineId },
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvdmVyaWZ5LXBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixzQkFBc0IsR0FJdkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUU5QixPQUFPLEVBQ0wsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsR0FDekgsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBY3pDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBc0QsRUFBRSxHQUFHLEdBQXNCLE9BQU8sQ0FBQyxHQUFHO0lBQzFILElBQUksS0FBeUIsQ0FBQztJQUM5QixJQUFJLE9BQU8sQ0FBQyxT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Q0FBQztnQkFDaEgsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEUsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLElBQUk7Z0JBQUUsWUFBWSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7O2dCQUMzRSxZQUFZLENBQUMsMEJBQTBCLE9BQU8sa0NBQWtDLE1BQU0sQ0FBQyxPQUFPLDRCQUE0QixDQUFDLENBQUM7UUFDbkksQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7YUFDbkYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7XG4gIHBhcnNlUnVudGltZUNoZWNrU3RlcHMsXG4gIFJVTlRJTUVfQ0hFQ0tfU1RFUFNfRU5WLFxuICBSVU5USU1FX0NIRUNLX1ZFUkRJQ1RTLFxuICB0eXBlIFJ1bnRpbWVDaGVja1Jlc3VsdCxcbiAgdHlwZSBSdW50aW1lQ2hlY2tTdGVwLFxuICB0eXBlIFN0ZXBNYW5pZmVzdEVudHJ5LFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgdHlwZSB7IEFwaUNsaWVudCB9IGZyb20gJy4uL3V0aWxzL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jLCBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgd2l0aFByb2ZpbGVPcHRpb24sIHdpdGhSZWdpb25PcHRpb24sIHdpdGhTc2xPcHRpb25zLFxufSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEluZm8sIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgc2V0UGlwZWxpbmVJZCB9IGZyb20gJy4uL3V0aWxzL3JlcXVlc3QtY29udGV4dC5qcyc7XG5pbXBvcnQgeyB1bndyYXBFbnZlbG9wZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCByZWQsIHllbGxvdyB9ID0gcGljbztcblxuaW50ZXJmYWNlIFZlcmlmeU9wdGlvbnMge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHN0ZXBzRmlsZT86IHN0cmluZztcbiAgbWFuaWZlc3Q/OiBzdHJpbmc7XG4gIHN0b3JlVG9rZW5zPzogYm9vbGVhbjtcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBqc29uPzogYm9vbGVhbjtcbiAgc3RyaWN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgc3RlcHMgdG8gYXNrIGFib3V0LCBmcm9tIChmaXJzdCBtYXRjaCk6IGAtLXN0ZXBzLWZpbGVgIChKU09OXG4gKiBgW3sgc3RlcEtleSwgaW1hZ2VEaWdlc3QgfV1gKSwgYC0tbWFuaWZlc3RgIChhIHN5bnRoJ3MgYHBiLXN0ZXAtbWFuaWZlc3QuanNvbmBcbiAqIOKAlCByb3dzIGNhcnJ5aW5nIGEgc3RlcEtleSBhbmQgYSBkaWdlc3QpLCBvciB0aGUgYFBCX1ZFUklGWV9TVEVQU2AgZW52IHZhciB0aGVcbiAqIHN5bnRoZXNpemVkIHZlcmlmeSBzdGVwIGNhcnJpZXMuIE5vIHNvdXJjZSwgb3IgYW4gZW1wdHkgbGlzdCwgaXMgYW4gZXJyb3I6IGFcbiAqIGNoZWNrIHRoYXQgYXNrZWQgYWJvdXQgbm90aGluZyBtdXN0IG5vdCBwYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFZlcmlmeVN0ZXBzKG9wdGlvbnM6IFBpY2s8VmVyaWZ5T3B0aW9ucywgJ3N0ZXBzRmlsZScgfCAnbWFuaWZlc3QnPiwgZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52KTogUnVudGltZUNoZWNrU3RlcFtdIHtcbiAgbGV0IHN0ZXBzOiBSdW50aW1lQ2hlY2tTdGVwW107XG4gIGlmIChvcHRpb25zLnN0ZXBzRmlsZSkge1xuICAgIHN0ZXBzID0gcGFyc2VSdW50aW1lQ2hlY2tTdGVwcyhyZWFkRmlsZVN5bmMob3B0aW9ucy5zdGVwc0ZpbGUsICd1dGY4JykpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMubWFuaWZlc3QpIHtcbiAgICBjb25zdCByb3dzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMob3B0aW9ucy5tYW5pZmVzdCwgJ3V0ZjgnKSkgYXMgU3RlcE1hbmlmZXN0RW50cnlbXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJy0tbWFuaWZlc3QgbXVzdCBiZSBhIHN0ZXAgbWFuaWZlc3QgKGEgSlNPTiBhcnJheSknLCAnbWFuaWZlc3QnKTtcbiAgICBzdGVwcyA9IHBhcnNlUnVudGltZUNoZWNrU3RlcHMoSlNPTi5zdHJpbmdpZnkocm93c1xuICAgICAgLmZpbHRlcigocikgPT4gci5zdGVwS2V5ICYmIHIuaW1hZ2VEaWdlc3QpXG4gICAgICAubWFwKChyKSA9PiAoeyBzdGVwS2V5OiByLnN0ZXBLZXksIGltYWdlRGlnZXN0OiByLmltYWdlRGlnZXN0IH0pKSkpO1xuICB9IGVsc2UgaWYgKGVudltSVU5USU1FX0NIRUNLX1NURVBTX0VOVl0pIHtcbiAgICBzdGVwcyA9IHBhcnNlUnVudGltZUNoZWNrU3RlcHMoZW52W1JVTlRJTUVfQ0hFQ0tfU1RFUFNfRU5WXSEpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYE5vIHN0ZXBzIHRvIHZlcmlmeTogcGFzcyAtLXN0ZXBzLWZpbGUgb3IgLS1tYW5pZmVzdCwgb3Igc2V0ICR7UlVOVElNRV9DSEVDS19TVEVQU19FTlZ9YCwgJ3N0ZXBzJyk7XG4gIH1cbiAgaWYgKHN0ZXBzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignTm8gaW1hZ2UtYmFja2VkIHN0ZXBzIHRvIHZlcmlmeScsICdzdGVwcycpO1xuICByZXR1cm4gc3RlcHM7XG59XG5cbi8qKiBgUE9TVCAvYXBpL3BsdWdpbnMvcnVudGltZS1jaGVja2AgKGNvbnRyYWN0IEMyKSwgZW52ZWxvcGUgdW53cmFwcGVkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bnRpbWVDaGVjayhjbGllbnQ6IEFwaUNsaWVudCwgcGlwZWxpbmVJZDogc3RyaW5nLCBzdGVwczogcmVhZG9ubHkgUnVudGltZUNoZWNrU3RlcFtdKTogUHJvbWlzZTxSdW50aW1lQ2hlY2tSZXN1bHQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDx1bmtub3duPihgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLnBsdWdpblVybH0vcnVudGltZS1jaGVja2AsIHsgcGlwZWxpbmVJZCwgc3RlcHMgfSk7XG4gIGNvbnN0IGJvZHkgPSB1bndyYXBFbnZlbG9wZShyZXNwb25zZSkgYXMgUGFydGlhbDxSdW50aW1lQ2hlY2tSZXN1bHQ+O1xuICBpZiAoIWJvZHkudmVyZGljdCB8fCAhUlVOVElNRV9DSEVDS19WRVJESUNUUy5pbmNsdWRlcyhib2R5LnZlcmRpY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdydW50aW1lLWNoZWNrIHJldHVybmVkIG5vIHJlYWRhYmxlIHZlcmRpY3QnKTtcbiAgfVxuICByZXR1cm4geyB2ZXJkaWN0OiBib2R5LnZlcmRpY3QsIHN0ZXBzOiBBcnJheS5pc0FycmF5KGJvZHkuc3RlcHMpID8gYm9keS5zdGVwcyA6IFtdIH07XG59XG5cbmNvbnN0IFZFUkRJQ1RfU1RZTEU6IFJlY29yZDxzdHJpbmcsIChzOiBzdHJpbmcpID0+IHN0cmluZz4gPSB7XG4gIG9rOiAodCkgPT4gdCxcbiAgaW5mbzogY3lhbixcbiAgd2FybmluZzogeWVsbG93LFxuICBlcnJvcjogcmVkLFxuICBjcml0aWNhbDogKHQpID0+IGJvbGQocmVkKHQpKSxcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGBwbHVnaW4gdmVyaWZ5YDogYXNrIHRoZSBwbGF0Zm9ybSB3aGF0IGl0IG5vdyBrbm93cyBhYm91dCB0aGVcbiAqIHBsdWdpbiBpbWFnZXMgYSBwaXBlbGluZSBydW5zIOKAlCBhIENWRSBmbGFnZ2VkLCBhIEtFViBsaXN0aW5nIG9yIGFuXG4gKiBvcmctcG9saWN5IGNoYW5nZSBzaW5jZSB0aGUgc3ludGggdGhhdCBwaW5uZWQgdGhlbSDigJQgYW5kIHByaW50IHRoZSBncmFkZWRcbiAqIHZlcmRpY3QuIFZ1bG5lcmFiaWxpdHkgc3RhdGUgaXMgUkVQT1JURUQsIG5ldmVyIGVuZm9yY2VkOiB0aGUgY29tbWFuZCBleGl0c1xuICogMCB3aGF0ZXZlciB0aGUgdmVyZGljdCAodGhlIHBsYXRmb3JtIGFsc28gbm90aWZpZXMgb24gYSBwaXBlbGluZSBydW5uaW5nIGFcbiAqIHZ1bG5lcmFibGUgcGx1Z2luKS4gSWYgdGhlIGNoZWNrIGl0c2VsZiBjYW5ub3QgcnVuIChwbGF0Zm9ybSB1bnJlYWNoYWJsZSxcbiAqIHVucmVhZGFibGUgYW5zd2VyKSBpdCB3YXJucyBhbmQgZXhpdHMgMCwgb3IgZXhpdHMgbm9uLXplcm8gd2l0aCBgLS1zdHJpY3RgLlxuICpcbiAqIFRoZSBzeW50aGVzaXplZCBwaXBlbGluZSBydW5zIHRoaXMgYXMgYSByZXBvcnQtb25seSBzdGVwIGluIGVhY2ggc3RhZ2Ugd2hlblxuICogdGhlIGBhd3M6Y2RrOm9wZXJhdGlvbnM6cnVudGltZXZ1bG5jaGVja2AgbWV0YWRhdGEgZmxhZyBpcyBvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gdmVyaWZ5IC0tcGlwZWxpbmUtaWQgPGlkPiAtLW1hbmlmZXN0IGNkay5vdXQvcGItc3RlcC1tYW5pZmVzdC5qc29uXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBsdWdpbiB2ZXJpZnkgLS1waXBlbGluZS1pZCBcIiRQSVBFTElORV9JRFwiIC0tc3RvcmUtdG9rZW5zICAgIyBpbiBDb2RlQnVpbGQgKFBCX1ZFUklGWV9TVEVQUylcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5UGx1Z2lucyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCd2ZXJpZnknKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ1JlcG9ydCwgYXQgcnVuIHRpbWUsIHRoZSBjdXJyZW50IHZ1bG5lcmFiaWxpdHkgc3RhdGUgb2YgYSBwaXBlbGluZVxcJ3MgcGlubmVkIHBsdWdpbiBpbWFnZXMgKG5ldmVyIGZhaWxzIG9uIGl0KScpXG4gICAgICAgIC5yZXF1aXJlZE9wdGlvbignLXAsIC0tcGlwZWxpbmUtaWQgPGlkPicsICdQaXBlbGluZSBJRCcpXG4gICAgICAgIC5vcHRpb24oJy0tc3RlcHMtZmlsZSA8ZmlsZT4nLCAnSlNPTiBbeyBzdGVwS2V5LCBpbWFnZURpZ2VzdCB9XSB0byBjaGVjaycpXG4gICAgICAgIC5vcHRpb24oJy0tbWFuaWZlc3QgPGZpbGU+JywgJ0Egc3ludGhcXCdzIHBiLXN0ZXAtbWFuaWZlc3QuanNvbiB0byBjaGVjaycpXG4gICAgICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0F1dGhlbnRpY2F0ZSB1c2luZyB0aGUga2V5IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgKFBMQVRGT1JNX1NFQ1JFVF9OQU1FKScsIGZhbHNlKVxuICAgICAgICAub3B0aW9uKCctLXN0cmljdCcsICdFeGl0IG5vbi16ZXJvIHdoZW4gdGhlIGNoZWNrIGl0c2VsZiBjYW5ub3QgcnVuIChuZXZlciBmb3IgdnVsbmVyYWJpbGl0eSBzdGF0ZSknLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50IHRoZSB2ZXJkaWN0IGFzIEpTT04nLCBmYWxzZSkpLFxuICAgICksXG4gIClcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBWZXJpZnlPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUGx1Z2luIFJ1bi10aW1lIENoZWNrJywgdW5kZWZpbmVkLCB7IHF1aWV0OiBvcHRpb25zLmpzb24gfSk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICAvLyBCYWQgaW5wdXQgaXMgdGhlIGNhbGxlcidzIGJ1Zywgbm90IGFuIG91dGFnZTogYWx3YXlzIGFuIGVycm9yLlxuICAgICAgICBjb25zdCBzdGVwcyA9IGxvYWRWZXJpZnlTdGVwcyhvcHRpb25zKTtcbiAgICAgICAgcHJpbnRJbmZvKCdDaGVja2luZyBwbHVnaW4gaW1hZ2VzJywgeyBwaXBlbGluZUlkOiBvcHRpb25zLnBpcGVsaW5lSWQsIHN0ZXBzOiBzdGVwcy5sZW5ndGggfSk7XG4gICAgICAgIHNldFBpcGVsaW5lSWQob3B0aW9ucy5waXBlbGluZUlkKTtcblxuICAgICAgICBsZXQgcmVzdWx0OiBSdW50aW1lQ2hlY2tSZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHJ1bnRpbWVDaGVjayhjbGllbnQsIG9wdGlvbnMucGlwZWxpbmVJZCwgc3RlcHMpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChvcHRpb25zLnN0cmljdCkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdSdW4tdGltZSBwbHVnaW4gY2hlY2sgY291bGQgbm90IHJ1biDigJQgY29udGludWluZyAocGFzcyAtLXN0cmljdCB0byBmYWlsIGluc3RlYWQpJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5qc29uKSBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKGBWZXJkaWN0OiAke1ZFUkRJQ1RfU1RZTEVbcmVzdWx0LnZlcmRpY3RdIShyZXN1bHQudmVyZGljdC50b1VwcGVyQ2FzZSgpKX1gKTtcbiAgICAgICAgZm9yIChjb25zdCBzdGVwIG9mIHJlc3VsdC5zdGVwcykge1xuICAgICAgICAgIGlmIChzdGVwLnZlcmRpY3QgPT09ICdvaycpIGNvbnRpbnVlO1xuICAgICAgICAgIGZvciAoY29uc3QgcmVhc29uIG9mIHN0ZXAucmVhc29ucykge1xuICAgICAgICAgICAgY29uc3Qgc2V2ID0gcmVhc29uLnNldmVyaXR5ID8/IHN0ZXAudmVyZGljdDtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IChWRVJESUNUX1NUWUxFW3Nldl0gPz8geWVsbG93KShgWyR7c2V2LnRvVXBwZXJDYXNlKCl9XWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgJHt0YWd9ICR7c3RlcC5zdGVwS2V5fSAoJHtzdGVwLmltYWdlRGlnZXN0LnNsaWNlKDAsIDE5KX3igKYpICR7cmVhc29uLmNvZGV9OiAke3JlYXNvbi5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFnZ2VkID0gcmVzdWx0LnN0ZXBzLmZpbHRlcigocykgPT4gcy52ZXJkaWN0ICE9PSAnb2snKS5sZW5ndGg7XG4gICAgICAgIGlmIChyZXN1bHQudmVyZGljdCA9PT0gJ29rJykgcHJpbnRTdWNjZXNzKCdSdW4tdGltZSBwbHVnaW4gY2hlY2s6IG5vIGZpbmRpbmdzJyk7XG4gICAgICAgIGVsc2UgcHJpbnRXYXJuaW5nKGBSdW4tdGltZSBwbHVnaW4gY2hlY2s6ICR7ZmxhZ2dlZH0gc3RlcChzKSB3aXRoIGZpbmRpbmdzICh3b3JzdDogJHtyZXN1bHQudmVyZGljdH0pIOKAlCByZXBvcnRlZCwgbm90IGVuZm9yY2VkYCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwbHVnaW4tdmVyaWZ5JywgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQ6IG9wdGlvbnMucGlwZWxpbmVJZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-renew-handler.d.ts","sourceRoot":"","sources":["../../src/lambda/token-renew-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-renew-handler.d.ts","sourceRoot":"","sources":["../../src/lambda/token-renew-handler.ts"],"names":[],"mappings":"AAoHA,eAAO,MAAM,OAAO,YAAmB,OAAO,YAAY;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAyEjG,CAAC"}
|
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
// src/lambda/token-renew-handler.ts
|
|
2
2
|
import { SecretsManagerClient as SecretsManagerClient2, PutSecretValueCommand } from "@aws-sdk/client-secrets-manager";
|
|
3
3
|
|
|
4
|
+
// ../pipeline-core/lib/core/audit-correlation.js
|
|
5
|
+
var REQUEST_ID_HEADER = "X-Request-Id";
|
|
6
|
+
var PIPELINE_EXECUTION_ID_HEADER = "X-Pipeline-Execution-Id";
|
|
7
|
+
var CODEBUILD_BUILD_ID_HEADER = "X-CodeBuild-Build-Id";
|
|
8
|
+
var MAX_CORRELATION_VALUE = 128;
|
|
9
|
+
function sanitizeCorrelationValue(value) {
|
|
10
|
+
if (typeof value !== "string")
|
|
11
|
+
return void 0;
|
|
12
|
+
const clean = value.replace(/[^\x21-\x7e]/g, "").slice(0, MAX_CORRELATION_VALUE);
|
|
13
|
+
return clean.length > 0 ? clean : void 0;
|
|
14
|
+
}
|
|
15
|
+
function correlationHeaders(ids) {
|
|
16
|
+
const headers = {};
|
|
17
|
+
const requestId = sanitizeCorrelationValue(ids.requestId);
|
|
18
|
+
const executionId = sanitizeCorrelationValue(ids.pipelineExecutionId);
|
|
19
|
+
const buildId = sanitizeCorrelationValue(ids.codeBuildBuildId);
|
|
20
|
+
if (requestId)
|
|
21
|
+
headers[REQUEST_ID_HEADER] = requestId;
|
|
22
|
+
if (executionId)
|
|
23
|
+
headers[PIPELINE_EXECUTION_ID_HEADER] = executionId;
|
|
24
|
+
if (buildId)
|
|
25
|
+
headers[CODEBUILD_BUILD_ID_HEADER] = buildId;
|
|
26
|
+
return headers;
|
|
27
|
+
}
|
|
28
|
+
|
|
4
29
|
// ../pipeline-core/lib/handlers/platform-credential.js
|
|
5
30
|
import { GetSecretValueCommand, SecretsManagerClient } from "@aws-sdk/client-secrets-manager";
|
|
6
31
|
var ACCESS_KEY_PREFIXES = ["pb_sa_", "pb_pat_"];
|
|
@@ -29,13 +54,13 @@ function log(level, msg, data) {
|
|
|
29
54
|
if (level === "ERROR") console.error(line);
|
|
30
55
|
else console.log(line);
|
|
31
56
|
}
|
|
32
|
-
async function post(baseUrl, route, body) {
|
|
57
|
+
async function post(baseUrl, route, body, requestId) {
|
|
33
58
|
const controller = new AbortController();
|
|
34
59
|
const timer = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS);
|
|
35
60
|
try {
|
|
36
61
|
const res = await fetch(`${baseUrl}${route}`, {
|
|
37
62
|
method: "POST",
|
|
38
|
-
headers: { "Content-Type": "application/json", "Accept": "application/json" },
|
|
63
|
+
headers: { "Content-Type": "application/json", "Accept": "application/json", ...correlationHeaders({ requestId }) },
|
|
39
64
|
body: JSON.stringify(body),
|
|
40
65
|
signal: controller.signal
|
|
41
66
|
});
|
|
@@ -53,7 +78,8 @@ function applyTlsPolicy() {
|
|
|
53
78
|
}
|
|
54
79
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
55
80
|
}
|
|
56
|
-
var handler = async () => {
|
|
81
|
+
var handler = async (_event, context) => {
|
|
82
|
+
const requestId = context?.awsRequestId;
|
|
57
83
|
const secretName = required("PLATFORM_SECRET_NAME");
|
|
58
84
|
const days = Number(process.env.RENEW_DAYS || "30");
|
|
59
85
|
if (!Number.isFinite(days) || days < 1 || days > 365) {
|
|
@@ -72,7 +98,7 @@ var handler = async () => {
|
|
|
72
98
|
key: oldKey,
|
|
73
99
|
name: `${stored.serviceAccountName || "rotated"}-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}`,
|
|
74
100
|
expiresIn: days * 24 * 60 * 60
|
|
75
|
-
});
|
|
101
|
+
}, requestId);
|
|
76
102
|
if (rotate.status < 200 || rotate.status >= 300) {
|
|
77
103
|
throw new Error(
|
|
78
104
|
`Key rotation refused (${rotate.status}): ${rotate.body.message || "unknown reason"}. The stored key is unchanged and still live.`
|
|
@@ -102,7 +128,7 @@ var handler = async () => {
|
|
|
102
128
|
log("WARN", "Secret recorded no previous keyId \u2014 nothing to revoke (it expires on its own)", { secretName });
|
|
103
129
|
return;
|
|
104
130
|
}
|
|
105
|
-
const revoke = await post(platformUrl, "/api/auth/key/revoke", { key: newKey, keyId: oldKeyId }).catch((err) => ({ status: 0, body: { message: err instanceof Error ? err.message : String(err) } }));
|
|
131
|
+
const revoke = await post(platformUrl, "/api/auth/key/revoke", { key: newKey, keyId: oldKeyId }, requestId).catch((err) => ({ status: 0, body: { message: err instanceof Error ? err.message : String(err) } }));
|
|
106
132
|
if (revoke.status < 200 || revoke.status >= 300) {
|
|
107
133
|
log("ERROR", "Rotated and stored the new key, but could NOT revoke its predecessor \u2014 it stays valid until it expires", {
|
|
108
134
|
secretName,
|
|
@@ -120,6 +120,16 @@
|
|
|
120
120
|
"Action": "codepipeline:ListTagsForResource",
|
|
121
121
|
"Resource": { "Fn::Sub": "arn:aws:codepipeline:*:${AWS::AccountId}:*" }
|
|
122
122
|
},
|
|
123
|
+
{
|
|
124
|
+
"Effect": "Allow",
|
|
125
|
+
"Action": "codebuild:BatchGetBuilds",
|
|
126
|
+
"Resource": { "Fn::Sub": "arn:aws:codebuild:*:${AWS::AccountId}:project/*" }
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"Effect": "Allow",
|
|
130
|
+
"Action": "logs:FilterLogEvents",
|
|
131
|
+
"Resource": { "Fn::Sub": "arn:aws:logs:*:${AWS::AccountId}:log-group:/aws/codebuild/*:*" }
|
|
132
|
+
},
|
|
123
133
|
{
|
|
124
134
|
"Fn::If": ["DoraOn", {
|
|
125
135
|
"Effect": "Allow",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAMA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAOjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IAEvB,YAAY,MAAM,EAAE,MAAM,EA+DzB;IAED,OAAO,CAAC,WAAW;IAuDb,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlH;IAED;;;;;;;;;OASG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAQ3G;IAEK,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGjG;IAEK,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CASzG;IAEK,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGhG;IAEK,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGnF;IAEK,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlG;IAED,SAAS,IAAI,MAAM,CAAwB;IAC3C,UAAU,IAAI,MAAM,CAAoC;IACxD,eAAe,IAAI,OAAO,CAAsC;IAEhE;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CASzB"}
|
package/dist/utils/api-client.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import https from 'https';
|
|
4
|
+
import { describeQuotaExceeded, platformCaList } from '@pipeline-builder/pipeline-core';
|
|
4
5
|
import axios, { AxiosError } from 'axios';
|
|
5
6
|
import FormData from 'form-data';
|
|
6
7
|
import { decodeTokenPayload } from './auth-guard.js';
|
|
7
8
|
import {} from './config-loader.js';
|
|
8
9
|
import { NetworkError } from './error-handler.js';
|
|
9
10
|
import { printDebug, printError, printWarning } from './output-utils.js';
|
|
11
|
+
import { requestCorrelationHeaders } from './request-context.js';
|
|
10
12
|
import { TIMEOUTS } from '../config/cli.constants.js';
|
|
11
13
|
import { ApiError } from '../types/index.js';
|
|
12
14
|
/**
|
|
@@ -22,8 +24,12 @@ export class ApiClient {
|
|
|
22
24
|
}
|
|
23
25
|
// Warn if token appears expired (advisory — server validates authoritatively)
|
|
24
26
|
this.checkTokenExpiry(config.auth.token);
|
|
27
|
+
// A private-CA platform (PLATFORM_CA_BUNDLE) is trusted on top of Node's
|
|
28
|
+
// roots — verified, not skipped. See pipeline-core core/platform-tls.ts.
|
|
29
|
+
const ca = platformCaList();
|
|
25
30
|
const httpsAgent = new https.Agent({
|
|
26
31
|
rejectUnauthorized: config.api.rejectUnauthorized ?? true,
|
|
32
|
+
...(ca && { ca }),
|
|
27
33
|
});
|
|
28
34
|
if (config.api.rejectUnauthorized === false) {
|
|
29
35
|
printWarning('Certificate validation is disabled');
|
|
@@ -37,6 +43,11 @@ export class ApiClient {
|
|
|
37
43
|
// Auth interceptor
|
|
38
44
|
this.client.interceptors.request.use((requestConfig) => {
|
|
39
45
|
requestConfig.headers.Authorization = `Bearer ${config.auth.token}`;
|
|
46
|
+
// Audit correlation (X-Request-Id, and in CodeBuild the build + execution
|
|
47
|
+
// ids) so the server's audit row joins back to this run. See request-context.
|
|
48
|
+
for (const [name, value] of Object.entries(requestCorrelationHeaders())) {
|
|
49
|
+
requestConfig.headers[name] = value;
|
|
50
|
+
}
|
|
40
51
|
printDebug('API Request', {
|
|
41
52
|
method: requestConfig.method?.toUpperCase(),
|
|
42
53
|
url: requestConfig.url,
|
|
@@ -69,6 +80,11 @@ export class ApiClient {
|
|
|
69
80
|
if (data && typeof data === 'object' && 'message' in data && typeof data.message === 'string') {
|
|
70
81
|
message = data.message;
|
|
71
82
|
}
|
|
83
|
+
// A QUOTA refusal reads as what it is — which quota, how much, when it
|
|
84
|
+
// resets and where to raise it — not as a rate limit to wait out. A 429
|
|
85
|
+
// without the QUOTA_EXCEEDED code keeps the server's message.
|
|
86
|
+
if (status === 429)
|
|
87
|
+
message = describeQuotaExceeded(data, this.config.api.baseUrl) ?? message;
|
|
72
88
|
return Promise.reject(new ApiError(message, status, error.response));
|
|
73
89
|
}
|
|
74
90
|
else if (error.request) {
|
|
@@ -89,8 +105,9 @@ export class ApiClient {
|
|
|
89
105
|
ENOTFOUND: 'DNS lookup failed — check the hostname in baseUrl',
|
|
90
106
|
ERR_BAD_REQUEST: 'Request was malformed — check the endpoint and payload',
|
|
91
107
|
CERT_HAS_EXPIRED: 'SSL certificate expired — use --no-verify-ssl for dev',
|
|
92
|
-
DEPTH_ZERO_SELF_SIGNED_CERT: 'Self-signed certificate —
|
|
93
|
-
UNABLE_TO_VERIFY_LEAF_SIGNATURE: 'SSL chain incomplete —
|
|
108
|
+
DEPTH_ZERO_SELF_SIGNED_CERT: 'Self-signed certificate — set PLATFORM_CA_BUNDLE to its CA (PEM), or --no-verify-ssl for dev',
|
|
109
|
+
UNABLE_TO_VERIFY_LEAF_SIGNATURE: 'SSL chain incomplete — set PLATFORM_CA_BUNDLE to the issuing CA (PEM), or --no-verify-ssl for dev',
|
|
110
|
+
SELF_SIGNED_CERT_IN_CHAIN: 'Private CA in chain — set PLATFORM_CA_BUNDLE to that CA (PEM)',
|
|
94
111
|
};
|
|
95
112
|
const hint = hints[code] || 'Check network connectivity and server status';
|
|
96
113
|
const message = `${code}: ${hint} (url: ${url})`;
|
|
@@ -167,4 +184,4 @@ export class ApiClient {
|
|
|
167
184
|
}
|
|
168
185
|
}
|
|
169
186
|
}
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNaLE1BQU0sQ0FBZ0I7SUFDdEIsTUFBTSxDQUFTO0lBRXZCLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDakMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEdB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dHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgZGVjb2RlVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi9hdXRoLWd1YXJkLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmpzJztcbmltcG9ydCB7IE5ldHdvcmtFcnJvciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERlYnVnLCBwcmludEVycm9yLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBUSU1FT1VUUyB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IEFwaUVycm9yIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG4vKipcbiAqIEFQSSBDbGllbnQgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzIHRvIHRoZSBwbGF0Zm9ybSBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBBeGlvc0luc3RhbmNlO1xuICBwcml2YXRlIGNvbmZpZzogQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZy5hdXRoPy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiB0b2tlbiBpcyByZXF1aXJlZC4gU2V0IFBMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgdG9rZW4gYXBwZWFycyBleHBpcmVkIChhZHZpc29yeSDigJQgc2VydmVyIHZhbGlkYXRlcyBhdXRob3JpdGF0aXZlbHkpXG4gICAgdGhpcy5jaGVja1Rva2VuRXhwaXJ5KGNvbmZpZy5hdXRoLnRva2VuKTtcblxuICAgIGNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA/PyB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hcGkucmVqZWN0VW5hdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdDZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGlzIGRpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogY29uZmlnLmFwaS5iYXNlVXJsLFxuICAgICAgdGltZW91dDogY29uZmlnLmFwaS50aW1lb3V0IHx8IFRJTUVPVVRTLkhUVFBfUkVRVUVTVCxcbiAgICAgIGh0dHBzQWdlbnQsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcblxuICAgIC8vIEF1dGggaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gICAgICAocmVxdWVzdENvbmZpZykgPT4ge1xuICAgICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgICAgICBwcmludERlYnVnKCdBUEkgUmVxdWVzdCcsIHtcbiAgICAgICAgICBtZXRob2Q6IHJlcXVlc3RDb25maWcubWV0aG9kPy50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgIHVybDogcmVxdWVzdENvbmZpZy51cmwsXG4gICAgICAgICAgYmFzZVVSTDogcmVxdWVzdENvbmZpZy5iYXNlVVJMLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RDb25maWc7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHByaW50RXJyb3IoJ1JlcXVlc3QgaW50ZXJjZXB0b3IgZXJyb3InLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUmVzcG9uc2UgaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHByaW50RGVidWcoJ0FQSSBSZXNwb25zZScsIHtcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIHVybDogcmVzcG9uc2UuY29uZmlnLnVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IEF4aW9zRXJyb3IpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBBeGlvc0Vycm9yKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIGlmIChlcnJvci5yZXNwb25zZSkge1xuICAgICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c1RleHQsIGRhdGEgfSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG5cbiAgICAgIC8vIFRoZSByZXNwb25zZSBib2R5IChgZGF0YWApIGNhbiBjYXJyeSB0b2tlbnMvUElJLCBhbmQgcHJpbnRFcnJvciBhbHdheXMgd3JpdGVzXG4gICAgICAvLyAobm90IGdhdGVkIG9uIERFQlVHKSDigJQga2VlcCBpdCBvdXQgb2YgdGhlIGFsd2F5cy1vbiBsaW5lOyBzdXJmYWNlIGl0IG9ubHkgdW5kZXIgREVCVUcuXG4gICAgICBwcmludEVycm9yKCdBUEkgcmVxdWVzdCBmYWlsZWQnLCB7IHN0YXR1cywgc3RhdHVzVGV4dCwgdXJsIH0pO1xuICAgICAgcHJpbnREZWJ1ZygnQVBJIGVycm9yIHJlc3BvbnNlIGJvZHknLCB7IGRhdGEgfSk7XG5cbiAgICAgIGxldCBtZXNzYWdlID0gYEFQSSByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3N0YXR1c31gO1xuICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdtZXNzYWdlJyBpbiBkYXRhICYmIHR5cGVvZiAoZGF0YSBhcyB7IG1lc3NhZ2U6IHVua25vd24gfSkubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZSA9IChkYXRhIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IobWVzc2FnZSwgc3RhdHVzLCBlcnJvci5yZXNwb25zZSkpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xuICAgICAgY29uc3QgY29kZSA9IGVycm9yLmNvZGUgfHwgJ1VOS05PV04nO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gZXJyb3IuY29uZmlnPy50aW1lb3V0O1xuICAgICAgY29uc3QgY2F1c2UgPSBlcnJvci5jYXVzZTtcblxuICAgICAgcHJpbnRFcnJvcignTm8gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBUEknLCB7XG4gICAgICAgIHVybCxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgY29kZSxcbiAgICAgICAgLi4uKGNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyB7IGNhdXNlOiBjYXVzZS5tZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGludHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIEVDT05OUkVGVVNFRDogJ1NlcnZlciBpcyBub3QgcnVubmluZyBvciBwb3J0IGlzIHdyb25nJyxcbiAgICAgICAgRUNPTk5SRVNFVDogJ1NlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5JyxcbiAgICAgICAgRVRJTUVET1VUOiAnQ29ubmVjdGlvbiB0aW1lZCBvdXQg4oCUIHNlcnZlciB1bnJlYWNoYWJsZSBvciB0b28gc2xvdycsXG4gICAgICAgIEVOT1RGT1VORDogJ0ROUyBsb29rdXAgZmFpbGVkIOKAlCBjaGVjayB0aGUgaG9zdG5hbWUgaW4gYmFzZVVybCcsXG4gICAgICAgIEVSUl9CQURfUkVRVUVTVDogJ1JlcXVlc3Qgd2FzIG1hbGZvcm1lZCDigJQgY2hlY2sgdGhlIGVuZHBvaW50IGFuZCBwYXlsb2FkJyxcbiAgICAgICAgQ0VSVF9IQVNfRVhQSVJFRDogJ1NTTCBjZXJ0aWZpY2F0ZSBleHBpcmVkIOKAlCB1c2UgLS1uby12ZXJpZnktc3NsIGZvciBkZXYnLFxuICAgICAgICBERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQ6ICdTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCcsXG4gICAgICAgIFVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6ICdTU0wgY2hhaW4gaW5jb21wbGV0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCBmb3IgZGV2JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhpbnQgPSBoaW50c1tjb2RlXSB8fCAnQ2hlY2sgbmV0d29yayBjb25uZWN0aXZpdHkgYW5kIHNlcnZlciBzdGF0dXMnO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2NvZGV9OiAke2hpbnR9ICh1cmw6ICR7dXJsfSlgO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE5ldHdvcmtFcnJvcihtZXNzYWdlLCB1cmwsIGVycm9yLCB0aW1lb3V0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50RXJyb3IoJ0FQSSByZXF1ZXN0IGVycm9yJywgeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0PFQgPSB1bmtub3duPih1cmw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8VD4odXJsLCB7IHBhcmFtcywgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIEJJTkFSWSBkb3dubG9hZCAoYSByZXBvcnQgUERGKTogdGhlIGJ5dGVzLCBwbHVzIHRoZSBmaWxlIG5hbWUgdGhlIHNlcnZlciBjaG9zZS5cbiAgICpcbiAgICogYHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ2AgYmVjYXVzZSB0aGUgZGVmYXVsdCB3b3VsZCBoYW5kIGJhY2sgYSBVVEYtOCBzdHJpbmcgYW5kXG4gICAqIGNvcnJ1cHQgZXZlcnkgYnl0ZSBhYm92ZSAweDdmIOKAlCBhIFBERiB3cml0dGVuIHRoYXQgd2F5IG9wZW5zIGFzIGEgZGFtYWdlZCBmaWxlLCB3aGljaFxuICAgKiBsb29rcyBsaWtlIGEgc2VydmVyIGJ1ZyByYXRoZXIgdGhhbiBhIGNsaWVudCBvbmUuXG4gICAqXG4gICAqIFRoZSBzZXJ2ZXIncyBgQ29udGVudC1EaXNwb3NpdGlvbmAgbmFtZSBpcyBwcmVmZXJyZWQgb3ZlciBhbnl0aGluZyB0aGUgY2FsbGVyIGd1ZXNzZXM6XG4gICAqIGl0IGtub3dzIHRoZSByZXBvcnQncyB0aXRsZSBhbmQgd2hldGhlciB0aGUgcnVuIGlzIGEgcmV2aXNpb24uXG4gICAqL1xuICBhc3luYyBnZXRCaW5hcnkodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgZmlsZW5hbWU/OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0PEFycmF5QnVmZmVyPih1cmwsIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2l0aW9uID0gU3RyaW5nKHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA/PyAnJyk7XG4gICAgY29uc3QgbWF0Y2ggPSAvZmlsZW5hbWU9XCIoW15cIl0rKVwiLy5leGVjKGRpc3Bvc2l0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogQnVmZmVyLmZyb20ocmVzcG9uc2UuZGF0YSksXG4gICAgICAuLi4obWF0Y2g/LlsxXSA/IHsgZmlsZW5hbWU6IG1hdGNoWzFdIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBvc3Q8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwb3N0Rm9ybTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB1cGxvYWRUaW1lb3V0ID0gdGhpcy5jb25maWcuYXBpLnVwbG9hZFRpbWVvdXQgfHwgMTUgKiA2MCAqIDEwMDA7IC8vIGRlZmF1bHQgMTUgbWludXRlc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxUPih1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7IC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSwgLi4uaGVhZGVycyB9LFxuICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICBtYXhCb2R5TGVuZ3RoOiBJbmZpbml0eSxcbiAgICAgIHRpbWVvdXQ6IHVwbG9hZFRpbWVvdXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwdXQ8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnB1dDxUPih1cmwsIGRhdGEsIHsgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5kZWxldGU8VD4odXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwYXRjaDxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucGF0Y2g8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnIHsgcmV0dXJuIHRoaXMuY29uZmlnOyB9XG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLmFwaS5iYXNlVXJsOyB9XG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5jb25maWcuYXV0aD8udG9rZW47IH1cblxuICAvKipcbiAgICogQWR2aXNvcnkgY2hlY2s6IGRlY29kZSBKV1QgZXhwIGNsYWltIGFuZCB3YXJuIGlmIGV4cGlyZWQuXG4gICAqIERvZXMgTk9UIHZlcmlmeSBzaWduYXR1cmUg4oCUIHNlcnZlciBoYW5kbGVzIHRoYXQuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrVG9rZW5FeHBpcnkodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSBkZWNvZGVUb2tlblBheWxvYWQodG9rZW4pO1xuICAgIGlmIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkLmV4cCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKHBheWxvYWQuZXhwICogMTAwMCk7XG4gICAgICBpZiAoZXhwaXJlc0F0LmdldFRpbWUoKSA8IERhdGUubm93KCkpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBUb2tlbiBleHBpcmVkIGF0ICR7ZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCl9IOKAlCBydW4gXCJwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW5cIiB0byByZWZyZXNoYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxFQUFzQixVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDOUQsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBZSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDWixNQUFNLENBQWdCO0lBQ3RCLE1BQU0sQ0FBUztJQUV2QixZQUFZLE1BQWM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJ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LE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxlQUFlLEtBQWMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUVoRTs7O09BR0c7SUFDSyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxZQUFZLENBQUMsb0JBQW9CLFNBQVMsQ0FBQyxXQUFXLEVBQUUsaURBQWlELENBQUMsQ0FBQztZQUM3RyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgZGVzY3JpYmVRdW90YUV4Y2VlZGVkLCBwbGF0Zm9ybUNhTGlzdCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgZGVjb2RlVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi9hdXRoLWd1YXJkLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmpzJztcbmltcG9ydCB7IE5ldHdvcmtFcnJvciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERlYnVnLCBwcmludEVycm9yLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyByZXF1ZXN0Q29ycmVsYXRpb25IZWFkZXJzIH0gZnJvbSAnLi9yZXF1ZXN0LWNvbnRleHQuanMnO1xuaW1wb3J0IHsgVElNRU9VVFMgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBBcGlFcnJvciB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcblxuLyoqXG4gKiBBUEkgQ2xpZW50IGZvciBtYWtpbmcgSFRUUCByZXF1ZXN0cyB0byB0aGUgcGxhdGZvcm0gQVBJXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlDbGllbnQge1xuICBwcml2YXRlIGNsaWVudDogQXhpb3NJbnN0YW5jZTtcbiAgcHJpdmF0ZSBjb25maWc6IENvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgaWYgKCFjb25maWcuYXV0aD8udG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gdG9rZW4gaXMgcmVxdWlyZWQuIFNldCBQTEFURk9STV9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcbiAgICB9XG5cbiAgICAvLyBXYXJuIGlmIHRva2VuIGFwcGVhcnMgZXhwaXJlZCAoYWR2aXNvcnkg4oCUIHNlcnZlciB2YWxpZGF0ZXMgYXV0aG9yaXRhdGl2ZWx5KVxuICAgIHRoaXMuY2hlY2tUb2tlbkV4cGlyeShjb25maWcuYXV0aC50b2tlbik7XG5cbiAgICAvLyBBIHByaXZhdGUtQ0EgcGxhdGZvcm0gKFBMQVRGT1JNX0NBX0JVTkRMRSkgaXMgdHJ1c3RlZCBvbiB0b3Agb2YgTm9kZSdzXG4gICAgLy8gcm9vdHMg4oCUIHZlcmlmaWVkLCBub3Qgc2tpcHBlZC4gU2VlIHBpcGVsaW5lLWNvcmUgY29yZS9wbGF0Zm9ybS10bHMudHMuXG4gICAgY29uc3QgY2EgPSBwbGF0Zm9ybUNhTGlzdCgpO1xuICAgIGNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA/PyB0cnVlLFxuICAgICAgLi4uKGNhICYmIHsgY2EgfSksXG4gICAgfSk7XG5cbiAgICBpZiAoY29uZmlnLmFwaS5yZWplY3RVbmF1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICBwcmludFdhcm5pbmcoJ0NlcnRpZmljYXRlIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiBjb25maWcuYXBpLmJhc2VVcmwsXG4gICAgICB0aW1lb3V0OiBjb25maWcuYXBpLnRpbWVvdXQgfHwgVElNRU9VVFMuSFRUUF9SRVFVRVNULFxuICAgICAgaHR0cHNBZ2VudCxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuXG4gICAgLy8gQXV0aCBpbnRlcmNlcHRvclxuICAgIHRoaXMuY2xpZW50LmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShcbiAgICAgIChyZXF1ZXN0Q29uZmlnKSA9PiB7XG4gICAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke2NvbmZpZy5hdXRoLnRva2VufWA7XG4gICAgICAgIC8vIEF1ZGl0IGNvcnJlbGF0aW9uIChYLVJlcXVlc3QtSWQsIGFuZCBpbiBDb2RlQnVpbGQgdGhlIGJ1aWxkICsgZXhlY3V0aW9uXG4gICAgICAgIC8vIGlkcykgc28gdGhlIHNlcnZlcidzIGF1ZGl0IHJvdyBqb2lucyBiYWNrIHRvIHRoaXMgcnVuLiBTZWUgcmVxdWVzdC1jb250ZXh0LlxuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVxdWVzdENvcnJlbGF0aW9uSGVhZGVycygpKSkge1xuICAgICAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RGVidWcoJ0FQSSBSZXF1ZXN0Jywge1xuICAgICAgICAgIG1ldGhvZDogcmVxdWVzdENvbmZpZy5tZXRob2Q/LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgdXJsOiByZXF1ZXN0Q29uZmlnLnVybCxcbiAgICAgICAgICBiYXNlVVJMOiByZXF1ZXN0Q29uZmlnLmJhc2VVUkwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVxdWVzdENvbmZpZztcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgcHJpbnRFcnJvcignUmVxdWVzdCBpbnRlcmNlcHRvciBlcnJvcicsIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBSZXNwb25zZSBpbnRlcmNlcHRvclxuICAgIHRoaXMuY2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgcHJpbnREZWJ1ZygnQVBJIFJlc3BvbnNlJywge1xuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgdXJsOiByZXNwb25zZS5jb25maWcudXJsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogQXhpb3NFcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvciksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IEF4aW9zRXJyb3IpOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICBjb25zdCB7IHN0YXR1cywgc3RhdHVzVGV4dCwgZGF0YSB9ID0gZXJyb3IucmVzcG9uc2U7XG4gICAgICBjb25zdCB1cmwgPSBlcnJvci5jb25maWc/LnVybDtcblxuICAgICAgLy8gVGhlIHJlc3BvbnNlIGJvZHkgKGBkYXRhYCkgY2FuIGNhcnJ5IHRva2Vucy9QSUksIGFuZCBwcmludEVycm9yIGFsd2F5cyB3cml0ZXNcbiAgICAgIC8vIChub3QgZ2F0ZWQgb24gREVCVUcpIOKAlCBrZWVwIGl0IG91dCBvZiB0aGUgYWx3YXlzLW9uIGxpbmU7IHN1cmZhY2UgaXQgb25seSB1bmRlciBERUJVRy5cbiAgICAgIHByaW50RXJyb3IoJ0FQSSByZXF1ZXN0IGZhaWxlZCcsIHsgc3RhdHVzLCBzdGF0dXNUZXh0LCB1cmwgfSk7XG4gICAgICBwcmludERlYnVnKCdBUEkgZXJyb3IgcmVzcG9uc2UgYm9keScsIHsgZGF0YSB9KTtcblxuICAgICAgbGV0IG1lc3NhZ2UgPSBgQVBJIHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7c3RhdHVzfWA7XG4gICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ21lc3NhZ2UnIGluIGRhdGEgJiYgdHlwZW9mIChkYXRhIGFzIHsgbWVzc2FnZTogdW5rbm93biB9KS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBtZXNzYWdlID0gKGRhdGEgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIC8vIEEgUVVPVEEgcmVmdXNhbCByZWFkcyBhcyB3aGF0IGl0IGlzIOKAlCB3aGljaCBxdW90YSwgaG93IG11Y2gsIHdoZW4gaXRcbiAgICAgIC8vIHJlc2V0cyBhbmQgd2hlcmUgdG8gcmFpc2UgaXQg4oCUIG5vdCBhcyBhIHJhdGUgbGltaXQgdG8gd2FpdCBvdXQuIEEgNDI5XG4gICAgICAvLyB3aXRob3V0IHRoZSBRVU9UQV9FWENFRURFRCBjb2RlIGtlZXBzIHRoZSBzZXJ2ZXIncyBtZXNzYWdlLlxuICAgICAgaWYgKHN0YXR1cyA9PT0gNDI5KSBtZXNzYWdlID0gZGVzY3JpYmVRdW90YUV4Y2VlZGVkKGRhdGEsIHRoaXMuY29uZmlnLmFwaS5iYXNlVXJsKSA/PyBtZXNzYWdlO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKG1lc3NhZ2UsIHN0YXR1cywgZXJyb3IucmVzcG9uc2UpKTtcbiAgICB9IGVsc2UgaWYgKGVycm9yLnJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBlcnJvci5jb2RlIHx8ICdVTktOT1dOJztcbiAgICAgIGNvbnN0IHVybCA9IGVycm9yLmNvbmZpZz8udXJsO1xuICAgICAgY29uc3QgdGltZW91dCA9IGVycm9yLmNvbmZpZz8udGltZW91dDtcbiAgICAgIGNvbnN0IGNhdXNlID0gZXJyb3IuY2F1c2U7XG5cbiAgICAgIHByaW50RXJyb3IoJ05vIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQVBJJywge1xuICAgICAgICB1cmwsXG4gICAgICAgIHRpbWVvdXQsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIC4uLihjYXVzZSBpbnN0YW5jZW9mIEVycm9yID8geyBjYXVzZTogY2F1c2UubWVzc2FnZSB9IDoge30pLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhpbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICBFQ09OTlJFRlVTRUQ6ICdTZXJ2ZXIgaXMgbm90IHJ1bm5pbmcgb3IgcG9ydCBpcyB3cm9uZycsXG4gICAgICAgIEVDT05OUkVTRVQ6ICdTZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseScsXG4gICAgICAgIEVUSU1FRE9VVDogJ0Nvbm5lY3Rpb24gdGltZWQgb3V0IOKAlCBzZXJ2ZXIgdW5yZWFjaGFibGUgb3IgdG9vIHNsb3cnLFxuICAgICAgICBFTk9URk9VTkQ6ICdETlMgbG9va3VwIGZhaWxlZCDigJQgY2hlY2sgdGhlIGhvc3RuYW1lIGluIGJhc2VVcmwnLFxuICAgICAgICBFUlJfQkFEX1JFUVVFU1Q6ICdSZXF1ZXN0IHdhcyBtYWxmb3JtZWQg4oCUIGNoZWNrIHRoZSBlbmRwb2ludCBhbmQgcGF5bG9hZCcsXG4gICAgICAgIENFUlRfSEFTX0VYUElSRUQ6ICdTU0wgY2VydGlmaWNhdGUgZXhwaXJlZCDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCBmb3IgZGV2JyxcbiAgICAgICAgREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUOiAnU2VsZi1zaWduZWQgY2VydGlmaWNhdGUg4oCUIHNldCBQTEFURk9STV9DQV9CVU5ETEUgdG8gaXRzIENBIChQRU0pLCBvciAtLW5vLXZlcmlmeS1zc2wgZm9yIGRldicsXG4gICAgICAgIFVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6ICdTU0wgY2hhaW4gaW5jb21wbGV0ZSDigJQgc2V0IFBMQVRGT1JNX0NBX0JVTkRMRSB0byB0aGUgaXNzdWluZyBDQSAoUEVNKSwgb3IgLS1uby12ZXJpZnktc3NsIGZvciBkZXYnLFxuICAgICAgICBTRUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOOiAnUHJpdmF0ZSBDQSBpbiBjaGFpbiDigJQgc2V0IFBMQVRGT1JNX0NBX0JVTkRMRSB0byB0aGF0IENBIChQRU0pJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhpbnQgPSBoaW50c1tjb2RlXSB8fCAnQ2hlY2sgbmV0d29yayBjb25uZWN0aXZpdHkgYW5kIHNlcnZlciBzdGF0dXMnO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2NvZGV9OiAke2hpbnR9ICh1cmw6ICR7dXJsfSlgO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE5ldHdvcmtFcnJvcihtZXNzYWdlLCB1cmwsIGVycm9yLCB0aW1lb3V0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50RXJyb3IoJ0FQSSByZXF1ZXN0IGVycm9yJywgeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0PFQgPSB1bmtub3duPih1cmw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8VD4odXJsLCB7IHBhcmFtcywgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIEJJTkFSWSBkb3dubG9hZCAoYSByZXBvcnQgUERGKTogdGhlIGJ5dGVzLCBwbHVzIHRoZSBmaWxlIG5hbWUgdGhlIHNlcnZlciBjaG9zZS5cbiAgICpcbiAgICogYHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ2AgYmVjYXVzZSB0aGUgZGVmYXVsdCB3b3VsZCBoYW5kIGJhY2sgYSBVVEYtOCBzdHJpbmcgYW5kXG4gICAqIGNvcnJ1cHQgZXZlcnkgYnl0ZSBhYm92ZSAweDdmIOKAlCBhIFBERiB3cml0dGVuIHRoYXQgd2F5IG9wZW5zIGFzIGEgZGFtYWdlZCBmaWxlLCB3aGljaFxuICAgKiBsb29rcyBsaWtlIGEgc2VydmVyIGJ1ZyByYXRoZXIgdGhhbiBhIGNsaWVudCBvbmUuXG4gICAqXG4gICAqIFRoZSBzZXJ2ZXIncyBgQ29udGVudC1EaXNwb3NpdGlvbmAgbmFtZSBpcyBwcmVmZXJyZWQgb3ZlciBhbnl0aGluZyB0aGUgY2FsbGVyIGd1ZXNzZXM6XG4gICAqIGl0IGtub3dzIHRoZSByZXBvcnQncyB0aXRsZSBhbmQgd2hldGhlciB0aGUgcnVuIGlzIGEgcmV2aXNpb24uXG4gICAqL1xuICBhc3luYyBnZXRCaW5hcnkodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgZmlsZW5hbWU/OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0PEFycmF5QnVmZmVyPih1cmwsIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2l0aW9uID0gU3RyaW5nKHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA/PyAnJyk7XG4gICAgY29uc3QgbWF0Y2ggPSAvZmlsZW5hbWU9XCIoW15cIl0rKVwiLy5leGVjKGRpc3Bvc2l0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogQnVmZmVyLmZyb20ocmVzcG9uc2UuZGF0YSksXG4gICAgICAuLi4obWF0Y2g/LlsxXSA/IHsgZmlsZW5hbWU6IG1hdGNoWzFdIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBvc3Q8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwb3N0Rm9ybTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB1cGxvYWRUaW1lb3V0ID0gdGhpcy5jb25maWcuYXBpLnVwbG9hZFRpbWVvdXQgfHwgMTUgKiA2MCAqIDEwMDA7IC8vIGRlZmF1bHQgMTUgbWludXRlc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxUPih1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7IC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSwgLi4uaGVhZGVycyB9LFxuICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICBtYXhCb2R5TGVuZ3RoOiBJbmZpbml0eSxcbiAgICAgIHRpbWVvdXQ6IHVwbG9hZFRpbWVvdXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwdXQ8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnB1dDxUPih1cmwsIGRhdGEsIHsgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5kZWxldGU8VD4odXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwYXRjaDxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucGF0Y2g8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnIHsgcmV0dXJuIHRoaXMuY29uZmlnOyB9XG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLmFwaS5iYXNlVXJsOyB9XG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5jb25maWcuYXV0aD8udG9rZW47IH1cblxuICAvKipcbiAgICogQWR2aXNvcnkgY2hlY2s6IGRlY29kZSBKV1QgZXhwIGNsYWltIGFuZCB3YXJuIGlmIGV4cGlyZWQuXG4gICAqIERvZXMgTk9UIHZlcmlmeSBzaWduYXR1cmUg4oCUIHNlcnZlciBoYW5kbGVzIHRoYXQuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrVG9rZW5FeHBpcnkodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSBkZWNvZGVUb2tlblBheWxvYWQodG9rZW4pO1xuICAgIGlmIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkLmV4cCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKHBheWxvYWQuZXhwICogMTAwMCk7XG4gICAgICBpZiAoZXhwaXJlc0F0LmdldFRpbWUoKSA8IERhdGUubm93KCkpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBUb2tlbiBleHBpcmVkIGF0ICR7ZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCl9IOKAlCBydW4gXCJwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW5cIiB0byByZWZyZXNoYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-utils.d.ts","sourceRoot":"","sources":["../../src/utils/auth-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-utils.d.ts","sourceRoot":"","sources":["../../src/utils/auth-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAK/E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,KAAK,CAEhF;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,aAAa,CAAC,CAyBzB"}
|
package/dist/utils/auth-utils.js
CHANGED
|
@@ -4,6 +4,7 @@ import https from 'https';
|
|
|
4
4
|
import axios from 'axios';
|
|
5
5
|
import { ERROR_CODES } from './error-handler.js';
|
|
6
6
|
import { printDebug, printError, printSuccess } from './output-utils.js';
|
|
7
|
+
import { requestCorrelationHeaders } from './request-context.js';
|
|
7
8
|
import { isProductionEnv } from './tls.js';
|
|
8
9
|
/**
|
|
9
10
|
* Guard the credential-transmitting commands (`login`, `pat`) against disabling
|
|
@@ -48,6 +49,7 @@ export async function switchOrganization(params) {
|
|
|
48
49
|
'Authorization': `Bearer ${params.accessToken}`,
|
|
49
50
|
// Declares the body transport for the re-issued refresh token.
|
|
50
51
|
'X-Pb-Client': 'cli',
|
|
52
|
+
...requestCorrelationHeaders(),
|
|
51
53
|
},
|
|
52
54
|
httpsAgent: params.httpsAgent,
|
|
53
55
|
timeout: params.timeout,
|
|
@@ -61,4 +63,4 @@ export async function switchOrganization(params) {
|
|
|
61
63
|
printSuccess(`Switched to organization ${params.orgId}`);
|
|
62
64
|
return switched;
|
|
63
65
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hdXRoLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWtCM0M7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxTQUE4QjtJQUN2RSxJQUFJLFNBQVMsS0FBSyxLQUFLLElBQUksZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUM3QyxVQUFVLENBQUMsNk5BQTZOLENBQUMsQ0FBQztRQUMxTyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsU0FBOEI7SUFDakUsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BT3hDO0lBQ0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztJQUN0RCxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUMvQixTQUFTLEVBQ1QsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUNoQztRQUNFLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsZUFBZSxFQUFFLFVBQVUsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUMvQywrREFBK0Q7WUFDL0QsYUFBYSxFQUFFLEtBQUs7WUFDcEIsR0FBRyx5QkFBeUIsRUFBRTtTQUMvQjtRQUNELFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87S0FDeEIsQ0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMzQixVQUFVLENBQUMseURBQXlELENBQUMsQ0FBQztRQUN0RSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQUUsWUFBWSxDQUFDLDRCQUE0QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRFcnJvciwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVxdWVzdENvcnJlbGF0aW9uSGVhZGVycyB9IGZyb20gJy4vcmVxdWVzdC1jb250ZXh0LmpzJztcbmltcG9ydCB7IGlzUHJvZHVjdGlvbkVudiB9IGZyb20gJy4vdGxzLmpzJztcblxuLyoqXG4gKiBTZXNzaW9uIHBheWxvYWQgYXMgYSBOT04tQlJPV1NFUiBjbGllbnQgcmVjZWl2ZXMgaXQ6IHRoZSByZWZyZXNoIHRva2VuIHJpZGVzXG4gKiBpbiB0aGUgYm9keSAodGhlIGJyb3dzZXIncyBnb2VzIG91dCBhcyBhbiBIdHRwT25seSBjb29raWUgaW5zdGVhZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblRva2VucyB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luPzogbnVtYmVyO1xufVxuXG4vKiogRW52ZWxvcGUgZXZlcnkgcGxhdGZvcm0gYXV0aCBlbmRwb2ludCB3cmFwcyBpdHMgc2Vzc2lvbiB0b2tlbnMgaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IFNlc3Npb25Ub2tlbnM7XG59XG5cbi8qKlxuICogR3VhcmQgdGhlIGNyZWRlbnRpYWwtdHJhbnNtaXR0aW5nIGNvbW1hbmRzIChgbG9naW5gLCBgcGF0YCkgYWdhaW5zdCBkaXNhYmxpbmdcbiAqIFRMUyB2ZXJpZmljYXRpb24gaW4gcHJvZHVjdGlvbi4gVGhlIGRldmljZSBmbG93IGtlZXBzIHBhc3N3b3JkcyBvZmYgdGhlIHdpcmVcbiAqIGVudGlyZWx5LCBidXQgdGhlIHNlc3Npb24gdG9rZW5zIGl0IHJldHVybnMgYXJlIGJlYXJlciBjcmVkZW50aWFscyDigJQgYSBNSVRNIG9uXG4gKiBhIGBwcm9kICsgLS1uby12ZXJpZnktc3NsYCBydW4gd291bGQgaGFydmVzdCB0aGVtIGp1c3QgdGhlIHNhbWUuXG4gKlxuICogVW5saWtlIHtAbGluayBhc3NlcnRTc2xEaXNhYmxlQWxsb3dlZH0gKHdoaWNoIHRocm93cyDigJQgZm9yIHBhdGhzIGFscmVhZHkgaW5zaWRlXG4gKiBhIHRyeS9jYXRjaCksIHRoaXMgcHJpbnRzIGFuZCBoYXJkLWV4aXRzLCBtYXRjaGluZyB0aGUgcHJlLWZsaWdodCBjaGVja3MgdGhlc2VcbiAqIGNvbW1hbmRzIHJ1biBiZWZvcmUgdGhlaXIgdHJ5IGJsb2NrLiBJbiBub24tcHJvZHVjdGlvbiBpdCBpcyBhIG5vLW9wLCBzb1xuICogYC0tbm8tdmVyaWZ5LXNzbGAgc3RpbGwgd29ya3MgYWdhaW5zdCBzZWxmLXNpZ25lZCBkZXYgcGxhdGZvcm1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWQodmVyaWZ5U3NsOiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh2ZXJpZnlTc2wgPT09IGZhbHNlICYmIGlzUHJvZHVjdGlvbkVudigpKSB7XG4gICAgcHJpbnRFcnJvcignUmVmdXNpbmcgdG8gZGlzYWJsZSBUTFMgdmVyaWZpY2F0aW9uIGluIHByb2R1Y3Rpb24gKE5PREVfRU5WPXByb2R1Y3Rpb24pIOKAlCBjcmVkZW50aWFscyBtdXN0IG5vdCBiZSB0cmFuc21pdHRlZCBvdmVyIGFuIHVudmVyaWZpZWQgY29ubmVjdGlvbi4gVXNlIGEgdmFsaWQgY2VydGlmaWNhdGUsIG9yIHVuc2V0IE5PREVfRU5WIGZvciBsb2NhbC9zZWxmLXNpZ25lZCBkZXZlbG9wbWVudC4nKTtcbiAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGh0dHBzIGFnZW50IHVzZWQgYnkgdGhlIGNyZWRlbnRpYWwgY29tbWFuZHMuIGAtLXZlcmlmeS1zc2xgXG4gKiBkZWZhdWx0cyB0byBvbjsgb25seSBhbiBleHBsaWNpdCBgLS1uby12ZXJpZnktc3NsYCByZWxheGVzIGl0IChhbmQgb25seVxuICogb3V0c2lkZSBwcm9kdWN0aW9uLCBlbmZvcmNlZCBieSB7QGxpbmsgYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWR9KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWRlbnRpYWxIdHRwc0FnZW50KHZlcmlmeVNzbDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGh0dHBzLkFnZW50IHtcbiAgcmV0dXJuIG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogdmVyaWZ5U3NsID8/IHRydWUgfSk7XG59XG5cbi8qKlxuICogUE9TVCAvYXBpL2F1dGgvc3dpdGNoLW9yZyB3aXRoIHRoZSBjdXJyZW50IGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJuIHRoZSBXSE9MRVxuICogcmUtaXNzdWVkIHNlc3Npb24uXG4gKlxuICogVGhlIHN3aXRjaCByZS1pc3N1ZXMgdGhlIHNhbWUgc2Vzc2lvbiBzbG90LCB3aGljaCBST1RBVEVTIGl0cyByZWZyZXNoIHRva2VuIOKAlFxuICogc28gYSBjYWxsZXIgdGhhdCBrZWVwcyBvbmx5IHRoZSBhY2Nlc3MgdG9rZW4gaXMgbGVmdCBob2xkaW5nIGEgZGVhZCByZWZyZXNoXG4gKiB0b2tlbi4gUHJpbnRzIGEgc3VjY2VzcyBsaW5lICh1bmxlc3MgYHF1aWV0YCkgYW5kIGhhcmQtZXhpdHMgb24gYSBtaXNzaW5nXG4gKiB0b2tlbiwgc2luY2UgYm90aCBjcmVkZW50aWFsIGNvbW1hbmRzIHRyZWF0IGEgZmFpbGVkIHN3aXRjaCB0aGUgc2FtZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3aXRjaE9yZ2FuaXphdGlvbihwYXJhbXM6IHtcbiAgdXJsOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIGh0dHBzQWdlbnQ6IGh0dHBzLkFnZW50O1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIHF1aWV0OiBib29sZWFuO1xufSk6IFByb21pc2U8U2Vzc2lvblRva2Vucz4ge1xuICBjb25zdCBzd2l0Y2hVcmwgPSBgJHtwYXJhbXMudXJsfS9hcGkvYXV0aC9zd2l0Y2gtb3JnYDtcbiAgcHJpbnREZWJ1ZygnUE9TVCcsIHsgdXJsOiBzd2l0Y2hVcmwgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxBdXRoUmVzcG9uc2U+KFxuICAgIHN3aXRjaFVybCxcbiAgICB7IG9yZ2FuaXphdGlvbklkOiBwYXJhbXMub3JnSWQgfSxcbiAgICB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3BhcmFtcy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICAvLyBEZWNsYXJlcyB0aGUgYm9keSB0cmFuc3BvcnQgZm9yIHRoZSByZS1pc3N1ZWQgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgJ1gtUGItQ2xpZW50JzogJ2NsaScsXG4gICAgICAgIC4uLnJlcXVlc3RDb3JyZWxhdGlvbkhlYWRlcnMoKSxcbiAgICAgIH0sXG4gICAgICBodHRwc0FnZW50OiBwYXJhbXMuaHR0cHNBZ2VudCxcbiAgICAgIHRpbWVvdXQ6IHBhcmFtcy50aW1lb3V0LFxuICAgIH0sXG4gICk7XG4gIGNvbnN0IHN3aXRjaGVkID0gcmVzcG9uc2UuZGF0YT8uZGF0YTtcbiAgaWYgKCFzd2l0Y2hlZD8uYWNjZXNzVG9rZW4pIHtcbiAgICBwcmludEVycm9yKCdPcmdhbml6YXRpb24gc3dpdGNoIGZhaWxlZDogbm8gYWNjZXNzIHRva2VuIGluIHJlc3BvbnNlJyk7XG4gICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuICBpZiAoIXBhcmFtcy5xdWlldCkgcHJpbnRTdWNjZXNzKGBTd2l0Y2hlZCB0byBvcmdhbml6YXRpb24gJHtwYXJhbXMub3JnSWR9YCk7XG4gIHJldHVybiBzd2l0Y2hlZDtcbn1cbiJdfQ==
|