@pipeline-builder/pipeline-manager 4.4.6 → 4.4.8

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.
Files changed (64) hide show
  1. package/dist/agent/ai.d.ts +11 -0
  2. package/dist/agent/ai.d.ts.map +1 -1
  3. package/dist/agent/ai.js +47 -4
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +9 -2
  6. package/dist/commands/create-pat.d.ts.map +1 -1
  7. package/dist/commands/create-pat.js +3 -1
  8. package/dist/commands/create-pipeline.d.ts.map +1 -1
  9. package/dist/commands/create-pipeline.js +11 -2
  10. package/dist/commands/deploy.d.ts.map +1 -1
  11. package/dist/commands/deploy.js +20 -2
  12. package/dist/commands/report.js +4 -4
  13. package/dist/commands/security-report.d.ts +42 -0
  14. package/dist/commands/security-report.d.ts.map +1 -0
  15. package/dist/commands/security-report.js +89 -0
  16. package/dist/commands/setup-events.d.ts.map +1 -1
  17. package/dist/commands/setup-events.js +14 -1
  18. package/dist/commands/store-token.d.ts +1 -0
  19. package/dist/commands/store-token.d.ts.map +1 -1
  20. package/dist/commands/store-token.js +45 -19
  21. package/dist/commands/synth.d.ts +7 -1
  22. package/dist/commands/synth.d.ts.map +1 -1
  23. package/dist/commands/synth.js +66 -4
  24. package/dist/commands/verify-plugins.d.ts +45 -0
  25. package/dist/commands/verify-plugins.d.ts.map +1 -0
  26. package/dist/commands/verify-plugins.js +134 -0
  27. package/dist/lambda/token-renew-handler.d.ts +3 -1
  28. package/dist/lambda/token-renew-handler.d.ts.map +1 -1
  29. package/dist/lambda/token-renew-handler.js +31 -5
  30. package/dist/templates/events-stack.json +10 -0
  31. package/dist/utils/api-client.d.ts.map +1 -1
  32. package/dist/utils/api-client.js +20 -3
  33. package/dist/utils/auth-utils.d.ts.map +1 -1
  34. package/dist/utils/auth-utils.js +3 -1
  35. package/dist/utils/cdk-utils.js +2 -2
  36. package/dist/utils/command-utils.d.ts.map +1 -1
  37. package/dist/utils/command-utils.js +5 -2
  38. package/dist/utils/config-loader.d.ts.map +1 -1
  39. package/dist/utils/config-loader.js +9 -4
  40. package/dist/utils/deploy-runner.d.ts +25 -0
  41. package/dist/utils/deploy-runner.d.ts.map +1 -1
  42. package/dist/utils/deploy-runner.js +34 -5
  43. package/dist/utils/device-auth.d.ts.map +1 -1
  44. package/dist/utils/device-auth.js +4 -3
  45. package/dist/utils/error-handler.d.ts.map +1 -1
  46. package/dist/utils/error-handler.js +8 -1
  47. package/dist/utils/pipeline-config.d.ts +3 -0
  48. package/dist/utils/pipeline-config.d.ts.map +1 -1
  49. package/dist/utils/pipeline-config.js +4 -3
  50. package/dist/utils/platform-secret.d.ts.map +1 -1
  51. package/dist/utils/platform-secret.js +3 -1
  52. package/dist/utils/plugin-resolver.d.ts +41 -3
  53. package/dist/utils/plugin-resolver.d.ts.map +1 -1
  54. package/dist/utils/plugin-resolver.js +125 -21
  55. package/dist/utils/registration-client.d.ts +28 -0
  56. package/dist/utils/registration-client.d.ts.map +1 -0
  57. package/dist/utils/registration-client.js +57 -0
  58. package/dist/utils/request-context.d.ts +11 -0
  59. package/dist/utils/request-context.d.ts.map +1 -0
  60. package/dist/utils/request-context.js +62 -0
  61. package/dist/utils/service-account.d.ts +6 -4
  62. package/dist/utils/service-account.d.ts.map +1 -1
  63. package/dist/utils/service-account.js +14 -9
  64. package/package.json +6 -5
@@ -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,2 +1,4 @@
1
- export declare const handler: () => Promise<void>;
1
+ export declare const handler: (_event?: unknown, context?: {
2
+ awsRequestId?: string;
3
+ }) => Promise<void>;
2
4
  //# sourceMappingURL=token-renew-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token-renew-handler.d.ts","sourceRoot":"","sources":["../../src/lambda/token-renew-handler.ts"],"names":[],"mappings":"AA8GA,eAAO,MAAM,OAAO,QAAa,OAAO,CAAC,IAAI,CAwE5C,CAAC"}
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":"AAKA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IAEvB,YAAY,MAAM,EAAE,MAAM,EAsDzB;IAED,OAAO,CAAC,WAAW;IAkDb,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"}
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"}
@@ -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 — use --no-verify-ssl',
93
- UNABLE_TO_VERIFY_LEAF_SIGNATURE: 'SSL chain incomplete — use --no-verify-ssl for dev',
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;AAM1B;;;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,CAwBzB"}
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"}
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hdXRoLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWtCM0M7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxTQUE4QjtJQUN2RSxJQUFJLFNBQVMsS0FBSyxLQUFLLElBQUksZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUM3QyxVQUFVLENBQUMsNk5BQTZOLENBQUMsQ0FBQztRQUMxTyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsU0FBOEI7SUFDakUsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BT3hDO0lBQ0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztJQUN0RCxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUMvQixTQUFTLEVBQ1QsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUNoQztRQUNFLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsZUFBZSxFQUFFLFVBQVUsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUMvQywrREFBK0Q7WUFDL0QsYUFBYSxFQUFFLEtBQUs7U0FDckI7UUFDRCxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO0tBQ3hCLENBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDM0IsVUFBVSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDdEUsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztRQUFFLFlBQVksQ0FBQyw0QkFBNEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IEVSUk9SX0NPREVTIH0gZnJvbSAnLi9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50RXJyb3IsIHByaW50U3VjY2VzcyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGlzUHJvZHVjdGlvbkVudiB9IGZyb20gJy4vdGxzLmpzJztcblxuLyoqXG4gKiBTZXNzaW9uIHBheWxvYWQgYXMgYSBOT04tQlJPV1NFUiBjbGllbnQgcmVjZWl2ZXMgaXQ6IHRoZSByZWZyZXNoIHRva2VuIHJpZGVzXG4gKiBpbiB0aGUgYm9keSAodGhlIGJyb3dzZXIncyBnb2VzIG91dCBhcyBhbiBIdHRwT25seSBjb29raWUgaW5zdGVhZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblRva2VucyB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luPzogbnVtYmVyO1xufVxuXG4vKiogRW52ZWxvcGUgZXZlcnkgcGxhdGZvcm0gYXV0aCBlbmRwb2ludCB3cmFwcyBpdHMgc2Vzc2lvbiB0b2tlbnMgaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IFNlc3Npb25Ub2tlbnM7XG59XG5cbi8qKlxuICogR3VhcmQgdGhlIGNyZWRlbnRpYWwtdHJhbnNtaXR0aW5nIGNvbW1hbmRzIChgbG9naW5gLCBgcGF0YCkgYWdhaW5zdCBkaXNhYmxpbmdcbiAqIFRMUyB2ZXJpZmljYXRpb24gaW4gcHJvZHVjdGlvbi4gVGhlIGRldmljZSBmbG93IGtlZXBzIHBhc3N3b3JkcyBvZmYgdGhlIHdpcmVcbiAqIGVudGlyZWx5LCBidXQgdGhlIHNlc3Npb24gdG9rZW5zIGl0IHJldHVybnMgYXJlIGJlYXJlciBjcmVkZW50aWFscyDigJQgYSBNSVRNIG9uXG4gKiBhIGBwcm9kICsgLS1uby12ZXJpZnktc3NsYCBydW4gd291bGQgaGFydmVzdCB0aGVtIGp1c3QgdGhlIHNhbWUuXG4gKlxuICogVW5saWtlIHtAbGluayBhc3NlcnRTc2xEaXNhYmxlQWxsb3dlZH0gKHdoaWNoIHRocm93cyDigJQgZm9yIHBhdGhzIGFscmVhZHkgaW5zaWRlXG4gKiBhIHRyeS9jYXRjaCksIHRoaXMgcHJpbnRzIGFuZCBoYXJkLWV4aXRzLCBtYXRjaGluZyB0aGUgcHJlLWZsaWdodCBjaGVja3MgdGhlc2VcbiAqIGNvbW1hbmRzIHJ1biBiZWZvcmUgdGhlaXIgdHJ5IGJsb2NrLiBJbiBub24tcHJvZHVjdGlvbiBpdCBpcyBhIG5vLW9wLCBzb1xuICogYC0tbm8tdmVyaWZ5LXNzbGAgc3RpbGwgd29ya3MgYWdhaW5zdCBzZWxmLXNpZ25lZCBkZXYgcGxhdGZvcm1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWQodmVyaWZ5U3NsOiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh2ZXJpZnlTc2wgPT09IGZhbHNlICYmIGlzUHJvZHVjdGlvbkVudigpKSB7XG4gICAgcHJpbnRFcnJvcignUmVmdXNpbmcgdG8gZGlzYWJsZSBUTFMgdmVyaWZpY2F0aW9uIGluIHByb2R1Y3Rpb24gKE5PREVfRU5WPXByb2R1Y3Rpb24pIOKAlCBjcmVkZW50aWFscyBtdXN0IG5vdCBiZSB0cmFuc21pdHRlZCBvdmVyIGFuIHVudmVyaWZpZWQgY29ubmVjdGlvbi4gVXNlIGEgdmFsaWQgY2VydGlmaWNhdGUsIG9yIHVuc2V0IE5PREVfRU5WIGZvciBsb2NhbC9zZWxmLXNpZ25lZCBkZXZlbG9wbWVudC4nKTtcbiAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGh0dHBzIGFnZW50IHVzZWQgYnkgdGhlIGNyZWRlbnRpYWwgY29tbWFuZHMuIGAtLXZlcmlmeS1zc2xgXG4gKiBkZWZhdWx0cyB0byBvbjsgb25seSBhbiBleHBsaWNpdCBgLS1uby12ZXJpZnktc3NsYCByZWxheGVzIGl0IChhbmQgb25seVxuICogb3V0c2lkZSBwcm9kdWN0aW9uLCBlbmZvcmNlZCBieSB7QGxpbmsgYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWR9KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWRlbnRpYWxIdHRwc0FnZW50KHZlcmlmeVNzbDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGh0dHBzLkFnZW50IHtcbiAgcmV0dXJuIG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogdmVyaWZ5U3NsID8/IHRydWUgfSk7XG59XG5cbi8qKlxuICogUE9TVCAvYXBpL2F1dGgvc3dpdGNoLW9yZyB3aXRoIHRoZSBjdXJyZW50IGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJuIHRoZSBXSE9MRVxuICogcmUtaXNzdWVkIHNlc3Npb24uXG4gKlxuICogVGhlIHN3aXRjaCByZS1pc3N1ZXMgdGhlIHNhbWUgc2Vzc2lvbiBzbG90LCB3aGljaCBST1RBVEVTIGl0cyByZWZyZXNoIHRva2VuIOKAlFxuICogc28gYSBjYWxsZXIgdGhhdCBrZWVwcyBvbmx5IHRoZSBhY2Nlc3MgdG9rZW4gaXMgbGVmdCBob2xkaW5nIGEgZGVhZCByZWZyZXNoXG4gKiB0b2tlbi4gUHJpbnRzIGEgc3VjY2VzcyBsaW5lICh1bmxlc3MgYHF1aWV0YCkgYW5kIGhhcmQtZXhpdHMgb24gYSBtaXNzaW5nXG4gKiB0b2tlbiwgc2luY2UgYm90aCBjcmVkZW50aWFsIGNvbW1hbmRzIHRyZWF0IGEgZmFpbGVkIHN3aXRjaCB0aGUgc2FtZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3aXRjaE9yZ2FuaXphdGlvbihwYXJhbXM6IHtcbiAgdXJsOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIGh0dHBzQWdlbnQ6IGh0dHBzLkFnZW50O1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIHF1aWV0OiBib29sZWFuO1xufSk6IFByb21pc2U8U2Vzc2lvblRva2Vucz4ge1xuICBjb25zdCBzd2l0Y2hVcmwgPSBgJHtwYXJhbXMudXJsfS9hcGkvYXV0aC9zd2l0Y2gtb3JnYDtcbiAgcHJpbnREZWJ1ZygnUE9TVCcsIHsgdXJsOiBzd2l0Y2hVcmwgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxBdXRoUmVzcG9uc2U+KFxuICAgIHN3aXRjaFVybCxcbiAgICB7IG9yZ2FuaXphdGlvbklkOiBwYXJhbXMub3JnSWQgfSxcbiAgICB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3BhcmFtcy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICAvLyBEZWNsYXJlcyB0aGUgYm9keSB0cmFuc3BvcnQgZm9yIHRoZSByZS1pc3N1ZWQgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgJ1gtUGItQ2xpZW50JzogJ2NsaScsXG4gICAgICB9LFxuICAgICAgaHR0cHNBZ2VudDogcGFyYW1zLmh0dHBzQWdlbnQsXG4gICAgICB0aW1lb3V0OiBwYXJhbXMudGltZW91dCxcbiAgICB9LFxuICApO1xuICBjb25zdCBzd2l0Y2hlZCA9IHJlc3BvbnNlLmRhdGE/LmRhdGE7XG4gIGlmICghc3dpdGNoZWQ/LmFjY2Vzc1Rva2VuKSB7XG4gICAgcHJpbnRFcnJvcignT3JnYW5pemF0aW9uIHN3aXRjaCBmYWlsZWQ6IG5vIGFjY2VzcyB0b2tlbiBpbiByZXNwb25zZScpO1xuICAgIHByb2Nlc3MuZXhpdChFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTik7XG4gIH1cbiAgaWYgKCFwYXJhbXMucXVpZXQpIHByaW50U3VjY2VzcyhgU3dpdGNoZWQgdG8gb3JnYW5pemF0aW9uICR7cGFyYW1zLm9yZ0lkfWApO1xuICByZXR1cm4gc3dpdGNoZWQ7XG59XG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hdXRoLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWtCM0M7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxTQUE4QjtJQUN2RSxJQUFJLFNBQVMsS0FBSyxLQUFLLElBQUksZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUM3QyxVQUFVLENBQUMsNk5BQTZOLENBQUMsQ0FBQztRQUMxTyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsU0FBOEI7SUFDakUsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BT3hDO0lBQ0MsTUFBTSxTQUFTLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztJQUN0RCxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUMvQixTQUFTLEVBQ1QsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUNoQztRQUNFLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsZUFBZSxFQUFFLFVBQVUsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUMvQywrREFBK0Q7WUFDL0QsYUFBYSxFQUFFLEtBQUs7WUFDcEIsR0FBRyx5QkFBeUIsRUFBRTtTQUMvQjtRQUNELFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87S0FDeEIsQ0FDRixDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMzQixVQUFVLENBQUMseURBQXlELENBQUMsQ0FBQztRQUN0RSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQUUsWUFBWSxDQUFDLDRCQUE0QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRFcnJvciwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVxdWVzdENvcnJlbGF0aW9uSGVhZGVycyB9IGZyb20gJy4vcmVxdWVzdC1jb250ZXh0LmpzJztcbmltcG9ydCB7IGlzUHJvZHVjdGlvbkVudiB9IGZyb20gJy4vdGxzLmpzJztcblxuLyoqXG4gKiBTZXNzaW9uIHBheWxvYWQgYXMgYSBOT04tQlJPV1NFUiBjbGllbnQgcmVjZWl2ZXMgaXQ6IHRoZSByZWZyZXNoIHRva2VuIHJpZGVzXG4gKiBpbiB0aGUgYm9keSAodGhlIGJyb3dzZXIncyBnb2VzIG91dCBhcyBhbiBIdHRwT25seSBjb29raWUgaW5zdGVhZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblRva2VucyB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luPzogbnVtYmVyO1xufVxuXG4vKiogRW52ZWxvcGUgZXZlcnkgcGxhdGZvcm0gYXV0aCBlbmRwb2ludCB3cmFwcyBpdHMgc2Vzc2lvbiB0b2tlbnMgaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IFNlc3Npb25Ub2tlbnM7XG59XG5cbi8qKlxuICogR3VhcmQgdGhlIGNyZWRlbnRpYWwtdHJhbnNtaXR0aW5nIGNvbW1hbmRzIChgbG9naW5gLCBgcGF0YCkgYWdhaW5zdCBkaXNhYmxpbmdcbiAqIFRMUyB2ZXJpZmljYXRpb24gaW4gcHJvZHVjdGlvbi4gVGhlIGRldmljZSBmbG93IGtlZXBzIHBhc3N3b3JkcyBvZmYgdGhlIHdpcmVcbiAqIGVudGlyZWx5LCBidXQgdGhlIHNlc3Npb24gdG9rZW5zIGl0IHJldHVybnMgYXJlIGJlYXJlciBjcmVkZW50aWFscyDigJQgYSBNSVRNIG9uXG4gKiBhIGBwcm9kICsgLS1uby12ZXJpZnktc3NsYCBydW4gd291bGQgaGFydmVzdCB0aGVtIGp1c3QgdGhlIHNhbWUuXG4gKlxuICogVW5saWtlIHtAbGluayBhc3NlcnRTc2xEaXNhYmxlQWxsb3dlZH0gKHdoaWNoIHRocm93cyDigJQgZm9yIHBhdGhzIGFscmVhZHkgaW5zaWRlXG4gKiBhIHRyeS9jYXRjaCksIHRoaXMgcHJpbnRzIGFuZCBoYXJkLWV4aXRzLCBtYXRjaGluZyB0aGUgcHJlLWZsaWdodCBjaGVja3MgdGhlc2VcbiAqIGNvbW1hbmRzIHJ1biBiZWZvcmUgdGhlaXIgdHJ5IGJsb2NrLiBJbiBub24tcHJvZHVjdGlvbiBpdCBpcyBhIG5vLW9wLCBzb1xuICogYC0tbm8tdmVyaWZ5LXNzbGAgc3RpbGwgd29ya3MgYWdhaW5zdCBzZWxmLXNpZ25lZCBkZXYgcGxhdGZvcm1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWQodmVyaWZ5U3NsOiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh2ZXJpZnlTc2wgPT09IGZhbHNlICYmIGlzUHJvZHVjdGlvbkVudigpKSB7XG4gICAgcHJpbnRFcnJvcignUmVmdXNpbmcgdG8gZGlzYWJsZSBUTFMgdmVyaWZpY2F0aW9uIGluIHByb2R1Y3Rpb24gKE5PREVfRU5WPXByb2R1Y3Rpb24pIOKAlCBjcmVkZW50aWFscyBtdXN0IG5vdCBiZSB0cmFuc21pdHRlZCBvdmVyIGFuIHVudmVyaWZpZWQgY29ubmVjdGlvbi4gVXNlIGEgdmFsaWQgY2VydGlmaWNhdGUsIG9yIHVuc2V0IE5PREVfRU5WIGZvciBsb2NhbC9zZWxmLXNpZ25lZCBkZXZlbG9wbWVudC4nKTtcbiAgICBwcm9jZXNzLmV4aXQoRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT04pO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGh0dHBzIGFnZW50IHVzZWQgYnkgdGhlIGNyZWRlbnRpYWwgY29tbWFuZHMuIGAtLXZlcmlmeS1zc2xgXG4gKiBkZWZhdWx0cyB0byBvbjsgb25seSBhbiBleHBsaWNpdCBgLS1uby12ZXJpZnktc3NsYCByZWxheGVzIGl0IChhbmQgb25seVxuICogb3V0c2lkZSBwcm9kdWN0aW9uLCBlbmZvcmNlZCBieSB7QGxpbmsgYXNzZXJ0Q3JlZGVudGlhbFRsc0FsbG93ZWR9KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWRlbnRpYWxIdHRwc0FnZW50KHZlcmlmeVNzbDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGh0dHBzLkFnZW50IHtcbiAgcmV0dXJuIG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogdmVyaWZ5U3NsID8/IHRydWUgfSk7XG59XG5cbi8qKlxuICogUE9TVCAvYXBpL2F1dGgvc3dpdGNoLW9yZyB3aXRoIHRoZSBjdXJyZW50IGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJuIHRoZSBXSE9MRVxuICogcmUtaXNzdWVkIHNlc3Npb24uXG4gKlxuICogVGhlIHN3aXRjaCByZS1pc3N1ZXMgdGhlIHNhbWUgc2Vzc2lvbiBzbG90LCB3aGljaCBST1RBVEVTIGl0cyByZWZyZXNoIHRva2VuIOKAlFxuICogc28gYSBjYWxsZXIgdGhhdCBrZWVwcyBvbmx5IHRoZSBhY2Nlc3MgdG9rZW4gaXMgbGVmdCBob2xkaW5nIGEgZGVhZCByZWZyZXNoXG4gKiB0b2tlbi4gUHJpbnRzIGEgc3VjY2VzcyBsaW5lICh1bmxlc3MgYHF1aWV0YCkgYW5kIGhhcmQtZXhpdHMgb24gYSBtaXNzaW5nXG4gKiB0b2tlbiwgc2luY2UgYm90aCBjcmVkZW50aWFsIGNvbW1hbmRzIHRyZWF0IGEgZmFpbGVkIHN3aXRjaCB0aGUgc2FtZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN3aXRjaE9yZ2FuaXphdGlvbihwYXJhbXM6IHtcbiAgdXJsOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIGh0dHBzQWdlbnQ6IGh0dHBzLkFnZW50O1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIHF1aWV0OiBib29sZWFuO1xufSk6IFByb21pc2U8U2Vzc2lvblRva2Vucz4ge1xuICBjb25zdCBzd2l0Y2hVcmwgPSBgJHtwYXJhbXMudXJsfS9hcGkvYXV0aC9zd2l0Y2gtb3JnYDtcbiAgcHJpbnREZWJ1ZygnUE9TVCcsIHsgdXJsOiBzd2l0Y2hVcmwgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxBdXRoUmVzcG9uc2U+KFxuICAgIHN3aXRjaFVybCxcbiAgICB7IG9yZ2FuaXphdGlvbklkOiBwYXJhbXMub3JnSWQgfSxcbiAgICB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3BhcmFtcy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICAvLyBEZWNsYXJlcyB0aGUgYm9keSB0cmFuc3BvcnQgZm9yIHRoZSByZS1pc3N1ZWQgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgJ1gtUGItQ2xpZW50JzogJ2NsaScsXG4gICAgICAgIC4uLnJlcXVlc3RDb3JyZWxhdGlvbkhlYWRlcnMoKSxcbiAgICAgIH0sXG4gICAgICBodHRwc0FnZW50OiBwYXJhbXMuaHR0cHNBZ2VudCxcbiAgICAgIHRpbWVvdXQ6IHBhcmFtcy50aW1lb3V0LFxuICAgIH0sXG4gICk7XG4gIGNvbnN0IHN3aXRjaGVkID0gcmVzcG9uc2UuZGF0YT8uZGF0YTtcbiAgaWYgKCFzd2l0Y2hlZD8uYWNjZXNzVG9rZW4pIHtcbiAgICBwcmludEVycm9yKCdPcmdhbml6YXRpb24gc3dpdGNoIGZhaWxlZDogbm8gYWNjZXNzIHRva2VuIGluIHJlc3BvbnNlJyk7XG4gICAgcHJvY2Vzcy5leGl0KEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuICBpZiAoIXBhcmFtcy5xdWlldCkgcHJpbnRTdWNjZXNzKGBTd2l0Y2hlZCB0byBvcmdhbml6YXRpb24gJHtwYXJhbXMub3JnSWR9YCk7XG4gIHJldHVybiBzd2l0Y2hlZDtcbn1cbiJdfQ==