@pipeline-builder/pipeline-manager 4.1.15 → 4.1.16
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/config.yml +16 -37
- package/dist/boilerplate.js +10 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +97 -79
- package/dist/commands/audit-stacks.js +3 -3
- package/dist/commands/create-pat.d.ts +2 -3
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +3 -4
- package/dist/commands/create-pipeline.d.ts.map +1 -1
- package/dist/commands/create-pipeline.js +198 -190
- package/dist/commands/list-pipelines.js +2 -2
- package/dist/commands/list-plugins.js +2 -2
- package/dist/commands/login.d.ts +2 -2
- package/dist/commands/login.js +3 -3
- package/dist/commands/new-plugin.d.ts +48 -5
- package/dist/commands/new-plugin.d.ts.map +1 -1
- package/dist/commands/new-plugin.js +261 -95
- package/dist/commands/plugin-lifecycle.d.ts +29 -0
- package/dist/commands/plugin-lifecycle.d.ts.map +1 -0
- package/dist/commands/plugin-lifecycle.js +147 -0
- package/dist/commands/provision.d.ts +42 -2
- package/dist/commands/provision.d.ts.map +1 -1
- package/dist/commands/provision.js +184 -147
- package/dist/commands/publish-plugin.d.ts +62 -0
- package/dist/commands/publish-plugin.d.ts.map +1 -0
- package/dist/commands/publish-plugin.js +224 -0
- package/dist/commands/redrive-events.d.ts +1 -1
- package/dist/commands/redrive-events.js +2 -2
- package/dist/commands/store-token.d.ts +46 -1
- package/dist/commands/store-token.d.ts.map +1 -1
- package/dist/commands/store-token.js +127 -102
- package/dist/commands/test-plugin.d.ts +72 -0
- package/dist/commands/test-plugin.d.ts.map +1 -0
- package/dist/commands/test-plugin.js +285 -0
- package/dist/commands/upload-plugin.d.ts +6 -7
- package/dist/commands/upload-plugin.d.ts.map +1 -1
- package/dist/commands/upload-plugin.js +127 -189
- package/dist/commands/validate-plugin.d.ts +37 -4
- package/dist/commands/validate-plugin.d.ts.map +1 -1
- package/dist/commands/validate-plugin.js +129 -144
- package/dist/commands/validate-templates.d.ts.map +1 -1
- package/dist/commands/validate-templates.js +8 -9
- package/dist/config/plugin-catalog-assets.d.ts +13 -0
- package/dist/config/plugin-catalog-assets.d.ts.map +1 -0
- package/dist/config/plugin-catalog-assets.js +21 -0
- package/dist/config.yml +16 -37
- package/dist/lambda/token-renew-handler.d.ts.map +1 -1
- package/dist/lambda/token-renew-handler.js +109 -154
- package/dist/types/config.d.ts +2 -6
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -1
- package/dist/types/plugin.d.ts +21 -0
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/plugin.js +1 -1
- package/dist/utils/aws-env.d.ts +1 -2
- package/dist/utils/aws-env.d.ts.map +1 -1
- package/dist/utils/aws-env.js +2 -3
- package/dist/utils/catalog-prompt.d.ts +26 -0
- package/dist/utils/catalog-prompt.d.ts.map +1 -0
- package/dist/utils/catalog-prompt.js +113 -0
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +14 -3
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +4 -6
- package/dist/utils/credential-store.d.ts +16 -0
- package/dist/utils/credential-store.d.ts.map +1 -1
- package/dist/utils/credential-store.js +57 -2
- package/dist/utils/deploy-runner.d.ts.map +1 -1
- package/dist/utils/deploy-runner.js +7 -2
- package/dist/utils/pipeline-config.d.ts +1 -2
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +1 -1
- package/dist/utils/plugin-docker.d.ts +44 -0
- package/dist/utils/plugin-docker.d.ts.map +1 -0
- package/dist/utils/plugin-docker.js +71 -0
- package/dist/utils/plugin-package.d.ts +40 -0
- package/dist/utils/plugin-package.d.ts.map +1 -0
- package/dist/utils/plugin-package.js +159 -0
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +43 -29
- package/dist/utils/plugin-scan.d.ts +22 -0
- package/dist/utils/plugin-scan.d.ts.map +1 -0
- package/dist/utils/plugin-scan.js +52 -0
- package/dist/utils/plugin-zip.d.ts +15 -0
- package/dist/utils/plugin-zip.d.ts.map +1 -0
- package/dist/utils/plugin-zip.js +96 -0
- package/dist/utils/registry.d.ts +15 -0
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +17 -2
- package/dist/utils/service-account.d.ts.map +1 -1
- package/dist/utils/service-account.js +9 -10
- package/package.json +45 -8
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { ErrorCode, errorMessage } from '@pipeline-builder/api-core';
|
|
4
|
+
import { pluginArtifactAlias, pluginLookupFilter, unwrapLookup } from '@pipeline-builder/pipeline-core';
|
|
4
5
|
import { ApiClient } from './api-client.js';
|
|
5
6
|
import { printWarning } from './output-utils.js';
|
|
6
7
|
/**
|
|
7
|
-
* Cache key matching `PluginLookup.normalize()`: explicit alias when set,
|
|
8
|
-
* otherwise
|
|
9
|
-
*
|
|
8
|
+
* Cache key matching `PluginLookup.normalize()`: the explicit alias when set,
|
|
9
|
+
* otherwise `[<publisher>-]<name>-alias` — pipeline-core's
|
|
10
|
+
* `pluginArtifactAlias`, the one rule every consumer of this map uses.
|
|
10
11
|
*/
|
|
11
12
|
function cacheKey(ref) {
|
|
12
|
-
return ref
|
|
13
|
+
return pluginArtifactAlias(ref);
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
15
16
|
* Walk the pipeline props tree to collect every plugin reference. Plugins
|
|
@@ -29,7 +30,8 @@ function collectPluginRefs(props) {
|
|
|
29
30
|
const key = cacheKey(r);
|
|
30
31
|
// The name the lookup will TARGET — an explicit `filter.name` wins (see
|
|
31
32
|
// below), so two refs that resolve to the same plugin are not a collision.
|
|
32
|
-
const
|
|
33
|
+
const name = r.filter?.name ?? r.name;
|
|
34
|
+
const target = r.publisher ? `${r.publisher}/${name}` : name;
|
|
33
35
|
const holder = seen.get(key);
|
|
34
36
|
if (holder !== undefined) {
|
|
35
37
|
// One alias can only ever mean one plugin. Deduplicating on the alias
|
|
@@ -56,10 +58,24 @@ function collectPluginRefs(props) {
|
|
|
56
58
|
}
|
|
57
59
|
return refs;
|
|
58
60
|
}
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Lookup refusals that must STOP the synth rather than fall back to
|
|
63
|
+
* deploy-time resolution: an image whose signature doesn't verify, and a
|
|
64
|
+
* listing the org can't use (not installed, blocked by its policy, yanked or
|
|
65
|
+
* suspended). Falling back would quietly turn
|
|
66
|
+
* each into an unresolved step that fails at run time instead of now.
|
|
67
|
+
*/
|
|
68
|
+
const FATAL_LOOKUP_CODES = [
|
|
69
|
+
ErrorCode.IMAGE_VERIFICATION_FAILED,
|
|
70
|
+
ErrorCode.PLUGIN_NOT_INSTALLED,
|
|
71
|
+
ErrorCode.PLUGIN_BLOCKED_BY_POLICY,
|
|
72
|
+
ErrorCode.PLUGIN_UNAVAILABLE,
|
|
73
|
+
];
|
|
74
|
+
/** The error code of a plugin service answer, when it is one of {@link FATAL_LOOKUP_CODES}. */
|
|
75
|
+
function fatalLookupCode(err) {
|
|
61
76
|
const data = err?.response?.data;
|
|
62
|
-
|
|
77
|
+
const code = data && typeof data === 'object' ? data.code : undefined;
|
|
78
|
+
return typeof code === 'string' && FATAL_LOOKUP_CODES.includes(code) ? code : null;
|
|
63
79
|
}
|
|
64
80
|
/**
|
|
65
81
|
* Pre-resolve plugins by calling the same `POST /api/plugins/lookup` endpoint
|
|
@@ -83,6 +99,7 @@ export async function resolvePluginsForProps(client, props) {
|
|
|
83
99
|
const resolved = {};
|
|
84
100
|
await Promise.all(refs.map(async (ref) => {
|
|
85
101
|
const key = cacheKey(ref);
|
|
102
|
+
const label = ref.publisher ? `${ref.publisher}/${ref.name}` : ref.name;
|
|
86
103
|
// The plugin NAME lives on the ref (a sibling of `filter`), NOT inside the
|
|
87
104
|
// filter object — but the lookup matches on the filter. A filter without
|
|
88
105
|
// `name` (e.g. `{version, visibility, isActive, isDefault}`) matches ANY
|
|
@@ -90,38 +107,35 @@ export async function resolvePluginsForProps(client, props) {
|
|
|
90
107
|
// (seen: `dockerfile-multi-provider`). That made the synth and every step
|
|
91
108
|
// resolve to the WRONG plugin. So when the filter omits `name`, fall back to
|
|
92
109
|
// the ref's plugin name; an explicit filter `name` still takes precedence.
|
|
93
|
-
|
|
110
|
+
// Shared with the pipeline service's contract check (same filter, same plugin).
|
|
111
|
+
const filter = pluginLookupFilter(ref);
|
|
94
112
|
try {
|
|
95
113
|
const res = await client.post('/api/plugins/lookup', { filter });
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
// `{ plugin: ... }`) made `.name` undefined → every lookup fell back to
|
|
102
|
-
// deploy-time resolution even though the catalog had the plugin.
|
|
103
|
-
const data = res.data;
|
|
104
|
-
const plugin = data?.plugin // { data: { plugin } }
|
|
105
|
-
?? res.plugin // { plugin }
|
|
106
|
-
?? data // { data: Plugin }
|
|
107
|
-
?? res; // bare Plugin
|
|
108
|
-
if (plugin && typeof plugin === 'object' && plugin.name) {
|
|
114
|
+
const { plugin, warnings } = unwrapLookup(res);
|
|
115
|
+
for (const warning of warnings) {
|
|
116
|
+
printWarning(`Plugin "${label}": ${warning}`);
|
|
117
|
+
}
|
|
118
|
+
if (plugin) {
|
|
109
119
|
resolved[key] = plugin;
|
|
110
120
|
}
|
|
111
121
|
else {
|
|
112
|
-
printWarning(`Plugin "${
|
|
122
|
+
printWarning(`Plugin "${label}" lookup returned no record — falling back to deploy-time resolution`);
|
|
113
123
|
}
|
|
114
124
|
}
|
|
115
125
|
catch (err) {
|
|
116
|
-
// A plugin whose image signature doesn't verify
|
|
117
|
-
//
|
|
118
|
-
|
|
119
|
-
|
|
126
|
+
// A plugin whose image signature doesn't verify, or a listing the org
|
|
127
|
+
// can't use, is NOT an outage to ride out: falling back would quietly
|
|
128
|
+
// turn it into an unresolved step. Stop.
|
|
129
|
+
const fatal = fatalLookupCode(err);
|
|
130
|
+
if (fatal === ErrorCode.IMAGE_VERIFICATION_FAILED) {
|
|
131
|
+
throw new Error(`Plugin "${label}" image failed signature verification: ${errorMessage(err)}`);
|
|
120
132
|
}
|
|
133
|
+
if (fatal)
|
|
134
|
+
throw new Error(`Plugin "${label}" can't be used (${fatal}): ${errorMessage(err)}`);
|
|
121
135
|
const msg = errorMessage(err);
|
|
122
|
-
printWarning(`Plugin "${
|
|
136
|
+
printWarning(`Plugin "${label}" pre-resolution failed (${msg}) — falling back to deploy-time resolution`);
|
|
123
137
|
}
|
|
124
138
|
}));
|
|
125
139
|
return resolved;
|
|
126
140
|
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVNqRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsR0FBYztJQUM5QixPQUFPLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxLQUE4QjtJQUN2RCxNQUFNLElBQUksR0FBZ0IsRUFBRSxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBRXZDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBWSxFQUFRLEVBQUU7UUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQUUsT0FBTztRQUM1QyxNQUFNLENBQUMsR0FBRyxHQUFnQixDQUFDO1FBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDcEIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLHdFQUF3RTtRQUN4RSwyRUFBMkU7UUFDM0UsTUFBTSxNQUFNLEdBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUEyQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJ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QixHQUFHLENBQUMsQ0FBQyxjQUFjO1lBQ3hCLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSyxNQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvRSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxzRUFBc0UsQ0FBQyxDQUFDO1lBQzFHLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLHlFQUF5RTtZQUN6RSx5RUFBeUU7WUFDekUsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksMENBQTBDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEcsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSw0QkFBNEIsR0FBRyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQy9HLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBFcnJvckNvZGUsIGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5cbi8qKiBNaW5pbWFsIHBsdWdpbiByZWZlcmVuY2Ugc2hhcGUg4oCUIG1hdGNoZXMgUGx1Z2luT3B0aW9ucyBmcm9tIHBpcGVsaW5lLWNvcmUuICovXG5pbnRlcmZhY2UgUGx1Z2luUmVmIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhbGlhcz86IHN0cmluZztcbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQ2FjaGUga2V5IG1hdGNoaW5nIGBQbHVnaW5Mb29rdXAubm9ybWFsaXplKClgOiBleHBsaWNpdCBhbGlhcyB3aGVuIHNldCxcbiAqIG90aGVyd2lzZSBgJHtuYW1lfS1hbGlhc2AuIE11c3Qgc3RheSBpbiBzeW5jIHdpdGggdGhlIGNvbnN1bWVycyBpblxuICogcGlwZWxpbmUtY29yZS9wbHVnaW4tbG9va3VwLnRzIGFuZCBwaXBlbGluZS1idWlsZGVyLnRzIHRoYXQgcmVhZCB0aGlzIG1hcC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVLZXkocmVmOiBQbHVnaW5SZWYpOiBzdHJpbmcge1xuICByZXR1cm4gcmVmLmFsaWFzIHx8IGAke3JlZi5uYW1lfS1hbGlhc2A7XG59XG5cbi8qKlxuICogV2FsayB0aGUgcGlwZWxpbmUgcHJvcHMgdHJlZSB0byBjb2xsZWN0IGV2ZXJ5IHBsdWdpbiByZWZlcmVuY2UuIFBsdWdpbnNcbiAqIGFwcGVhciBhdCBgc3ludGgucGx1Z2luYCBhbmQgYXQgYHN0YWdlc1tdLnN0ZXBzW10ucGx1Z2luYC4gRW50cmllcyBhcmVcbiAqIGRlLWR1cGxpY2F0ZWQgYnkgYGNhY2hlS2V5KClgIOKAlCB0aGUgc2FtZSBrZXkgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgdXNlcyxcbiAqIHNvIHRoZSByZXNvbHZlZC1wbHVnaW5zIG1hcCBsb29rdXBzIG1hdGNoIGRvd25zdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RQbHVnaW5SZWZzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBsdWdpblJlZltdIHtcbiAgY29uc3QgcmVmczogUGx1Z2luUmVmW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3QgcHVzaCA9IChyYXc6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSByYXcgYXMgUGx1Z2luUmVmO1xuICAgIGlmICghci5uYW1lKSByZXR1cm47XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkocik7XG4gICAgLy8gVGhlIG5hbWUgdGhlIGxvb2t1cCB3aWxsIFRBUkdFVCDigJQgYW4gZXhwbGljaXQgYGZpbHRlci5uYW1lYCB3aW5zIChzZWVcbiAgICAvLyBiZWxvdyksIHNvIHR3byByZWZzIHRoYXQgcmVzb2x2ZSB0byB0aGUgc2FtZSBwbHVnaW4gYXJlIG5vdCBhIGNvbGxpc2lvbi5cbiAgICBjb25zdCB0YXJnZXQgPSAoci5maWx0ZXI/Lm5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyByLm5hbWU7XG4gICAgY29uc3QgaG9sZGVyID0gc2Vlbi5nZXQoa2V5KTtcbiAgICBpZiAoaG9sZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE9uZSBhbGlhcyBjYW4gb25seSBldmVyIG1lYW4gb25lIHBsdWdpbi4gRGVkdXBsaWNhdGluZyBvbiB0aGUgYWxpYXNcbiAgICAgIC8vIGFsb25lIGtlcHQgdGhlIEZJUlNUIHBsdWdpbiBhbmQgc2lsZW50bHkgZHJvcHBlZCB0aGUgc2Vjb25kLCBzbyBhIHN0ZXBcbiAgICAgIC8vIGRlY2xhcmluZyBgeyBuYW1lOiAnbWF2ZW4tYnVpbGQnLCBhbGlhczogJ2J1aWxkJyB9YCBhZnRlciBhbm90aGVyXG4gICAgICAvLyBkZWNsYXJpbmcgYHsgbmFtZTogJ25vZGVqcy1idWlsZCcsIGFsaWFzOiAnYnVpbGQnIH1gIHJhbiBub2RlanMtYnVpbGQnc1xuICAgICAgLy8gaW1hZ2UgYW5kIGNvbW1hbmRzIOKAlCBubyBlcnJvciwganVzdCB0aGUgd3JvbmcgYnVpbGQuXG4gICAgICBpZiAoaG9sZGVyICE9PSB0YXJnZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQbHVnaW4gYWxpYXMgXCIke2tleX1cIiBpcyB1c2VkIGZvciB0d28gZGlmZmVyZW50IHBsdWdpbnMgKFwiJHtob2xkZXJ9XCIgYW5kIFwiJHt0YXJnZXR9XCIpLiBgXG4gICAgICAgICAgKyAnR2l2ZSBlYWNoIHBsdWdpbiBpdHMgb3duIGFsaWFzLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlZW4uc2V0KGtleSwgdGFyZ2V0KTtcbiAgICByZWZzLnB1c2gocik7XG4gIH07XG5cbiAgY29uc3Qgc3ludGggPSBwcm9wcy5zeW50aCBhcyB7IHBsdWdpbj86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgcHVzaChzeW50aD8ucGx1Z2luKTtcblxuICBjb25zdCBzdGFnZXMgPSBwcm9wcy5zdGFnZXMgYXMgQXJyYXk8eyBzdGVwcz86IEFycmF5PHsgcGx1Z2luPzogdW5rbm93biB9PiB9PiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RhZ2Uuc3RlcHMgPz8gW10pIHtcbiAgICAgIHB1c2goc3RlcC5wbHVnaW4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWZzO1xufVxuXG4vKiogVGhlIHBsdWdpbiBzZXJ2aWNlJ3MgNDA5IGBJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEYCBhbnN3ZXIgZnJvbSBgL3BsdWdpbnMvbG9va3VwYC4gKi9cbmZ1bmN0aW9uIGlzSW1hZ2VWZXJpZmljYXRpb25GYWlsdXJlKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhID0gKGVyciBhcyB7IHJlc3BvbnNlPzogeyBkYXRhPzogdW5rbm93biB9IH0gfCB1bmRlZmluZWQpPy5yZXNwb25zZT8uZGF0YTtcbiAgcmV0dXJuICEhZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgKGRhdGEgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlID09PSBFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRDtcbn1cblxuLyoqXG4gKiBQcmUtcmVzb2x2ZSBwbHVnaW5zIGJ5IGNhbGxpbmcgdGhlIHNhbWUgYFBPU1QgL2FwaS9wbHVnaW5zL2xvb2t1cGAgZW5kcG9pbnRcbiAqIHRoZSBkZXBsb3ktdGltZSBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIHVzZXMuIFJldHVybmluZyB0aGUgZnVsbCBQbHVnaW5cbiAqIHJlY29yZCBhdCBzeW50aCB0aW1lIGlzIHdoYXQgYWxsb3dzIHRoZSByZXN1bHRpbmcgQ0ZOIHRlbXBsYXRlIHRvIHNoaXBcbiAqIHdpdGggcmVhbCBDb2RlQnVpbGQgaW1hZ2UgVVJJcyAoYDxob3N0Pi88bnM+LzxuYW1lPjo8dmVyc2lvbj5gKSByYXRoZXIgdGhhblxuICogdGhlIGBhd3MvY29kZWJ1aWxkL3N0YW5kYXJkOjcuMGAgZmFsbGJhY2sgdGhhdCB0aGUgc3ludGgtdGltZSB0b2tlbiBwYXRoXG4gKiBmb3JjZXMuXG4gKlxuICogRmFpbHVyZXMgYXJlIG5vbi1mYXRhbDogYSBtaXNzaW5nIHBsdWdpbiBvciB1bnJlYWNoYWJsZSBBUEkgbG9ncyBhIHdhcm5pbmdcbiAqIGFuZCBmYWxscyB0aHJvdWdoIHRvIHRoZSBkZXBsb3ktdGltZSBjdXN0b20gcmVzb3VyY2UgcGF0aCBzbyBwYXJ0aWFsXG4gKiBwbGF0Zm9ybSBvdXRhZ2VzIGRvbid0IGJsb2NrIHN5bnRoL2RlcGxveS4gVGhlIGV4Y2VwdGlvbiBpcyBhbiBpbWFnZSB0aGF0XG4gKiBmYWlscyBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIOKAlCB0aGF0IGFib3J0cyB0aGUgc3ludGguXG4gKlxuICogS2V5ZWQgYnkgYGFsaWFzIHx8IG5hbWVgIHRvIG1hdGNoIGBQbHVnaW5Mb29rdXAucGx1Z2luKClgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpbnNGb3JQcm9wcyhcbiAgY2xpZW50OiBBcGlDbGllbnQsXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgcmVmcyA9IGNvbGxlY3RQbHVnaW5SZWZzKHByb3BzKTtcbiAgaWYgKHJlZnMubGVuZ3RoID09PSAwKSByZXR1cm4ge307XG5cbiAgY29uc3QgcmVzb2x2ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocmVmcy5tYXAoYXN5bmMgKHJlZikgPT4ge1xuICAgIGNvbnN0IGtleSA9IGNhY2hlS2V5KHJlZik7XG4gICAgLy8gVGhlIHBsdWdpbiBOQU1FIGxpdmVzIG9uIHRoZSByZWYgKGEgc2libGluZyBvZiBgZmlsdGVyYCksIE5PVCBpbnNpZGUgdGhlXG4gICAgLy8gZmlsdGVyIG9iamVjdCDigJQgYnV0IHRoZSBsb29rdXAgbWF0Y2hlcyBvbiB0aGUgZmlsdGVyLiBBIGZpbHRlciB3aXRob3V0XG4gICAgLy8gYG5hbWVgIChlLmcuIGB7dmVyc2lvbiwgdmlzaWJpbGl0eSwgaXNBY3RpdmUsIGlzRGVmYXVsdH1gKSBtYXRjaGVzIEFOWVxuICAgIC8vIHBsdWdpbiB3aXRoIHRob3NlIGF0dHJpYnV0ZXMsIGFuZCB0aGUgZW5kcG9pbnQgcmV0dXJucyBhbiBhcmJpdHJhcnkgb25lXG4gICAgLy8gKHNlZW46IGBkb2NrZXJmaWxlLW11bHRpLXByb3ZpZGVyYCkuIFRoYXQgbWFkZSB0aGUgc3ludGggYW5kIGV2ZXJ5IHN0ZXBcbiAgICAvLyByZXNvbHZlIHRvIHRoZSBXUk9ORyBwbHVnaW4uIFNvIHdoZW4gdGhlIGZpbHRlciBvbWl0cyBgbmFtZWAsIGZhbGwgYmFjayB0b1xuICAgIC8vIHRoZSByZWYncyBwbHVnaW4gbmFtZTsgYW4gZXhwbGljaXQgZmlsdGVyIGBuYW1lYCBzdGlsbCB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIGNvbnN0IGZpbHRlciA9IHsgbmFtZTogcmVmLm5hbWUsIC4uLihyZWYuZmlsdGVyID8/IHsgaXNBY3RpdmU6IHRydWUsIGlzRGVmYXVsdDogdHJ1ZSB9KSB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQucG9zdDx1bmtub3duPignL2FwaS9wbHVnaW5zL2xvb2t1cCcsIHsgZmlsdGVyIH0pO1xuICAgICAgLy8gVW53cmFwIHRoZSBwbHVnaW4gcmVjb3JkIGZyb20gd2hhdGV2ZXIgZW52ZWxvcGUgdGhlIHJlc3BvbnNlIG1pZGRsZXdhcmVcbiAgICAgIC8vIGFwcGxpZWQuIFRoZSBwbGF0Zm9ybSdzIHN0YW5kYXJkIHN1Y2Nlc3MgZW52ZWxvcGUgaXNcbiAgICAgIC8vIGB7IHN1Y2Nlc3MsIHN0YXR1c0NvZGUsIGRhdGE6IHsgcGx1Z2luOiBQbHVnaW4gfSB9YCAobm90ZSB0aGUgRE9VQkxFXG4gICAgICAvLyBuZXN0aW5nOiBkYXRhLnBsdWdpbiksIGJ1dCB0b2xlcmF0ZSBgeyBkYXRhOiBQbHVnaW4gfWAsIGB7IHBsdWdpbiB9YCxcbiAgICAgIC8vIGFuZCBhIGJhcmUgUGx1Z2luIHRvby4gT25seSBzdG9wcGluZyBhdCBgcmVzLmRhdGFgICh3aGljaCBpc1xuICAgICAgLy8gYHsgcGx1Z2luOiAuLi4gfWApIG1hZGUgYC5uYW1lYCB1bmRlZmluZWQg4oaSIGV2ZXJ5IGxvb2t1cCBmZWxsIGJhY2sgdG9cbiAgICAgIC8vIGRlcGxveS10aW1lIHJlc29sdXRpb24gZXZlbiB0aG91Z2ggdGhlIGNhdGFsb2cgaGFkIHRoZSBwbHVnaW4uXG4gICAgICBjb25zdCBkYXRhID0gKHJlcyBhcyB7IGRhdGE/OiB1bmtub3duIH0pLmRhdGE7XG4gICAgICBjb25zdCBwbHVnaW4gPVxuICAgICAgICAoZGF0YSBhcyB7IHBsdWdpbj86IHVua25vd24gfSB8IHVuZGVmaW5lZCk/LnBsdWdpbiAvLyB7IGRhdGE6IHsgcGx1Z2luIH0gfVxuICAgICAgICA/PyAocmVzIGFzIHsgcGx1Z2luPzogdW5rbm93biB9KS5wbHVnaW4gLy8geyBwbHVnaW4gfVxuICAgICAgICA/PyBkYXRhIC8vIHsgZGF0YTogUGx1Z2luIH1cbiAgICAgICAgPz8gcmVzOyAvLyBiYXJlIFBsdWdpblxuICAgICAgaWYgKHBsdWdpbiAmJiB0eXBlb2YgcGx1Z2luID09PSAnb2JqZWN0JyAmJiAocGx1Z2luIGFzIHsgbmFtZT86IHN0cmluZyB9KS5uYW1lKSB7XG4gICAgICAgIHJlc29sdmVkW2tleV0gPSBwbHVnaW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmludFdhcm5pbmcoYFBsdWdpbiBcIiR7cmVmLm5hbWV9XCIgbG9va3VwIHJldHVybmVkIG5vIHJlY29yZCDigJQgZmFsbGluZyBiYWNrIHRvIGRlcGxveS10aW1lIHJlc29sdXRpb25gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEEgcGx1Z2luIHdob3NlIGltYWdlIHNpZ25hdHVyZSBkb2Vzbid0IHZlcmlmeSBpcyBOT1QgYW4gb3V0YWdlIHRvIHJpZGVcbiAgICAgIC8vIG91dDogZmFsbGluZyBiYWNrIHdvdWxkIHF1aWV0bHkgdHVybiBpdCBpbnRvIGFuIHVucmVzb2x2ZWQgc3RlcC4gU3RvcC5cbiAgICAgIGlmIChpc0ltYWdlVmVyaWZpY2F0aW9uRmFpbHVyZShlcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIFwiJHtyZWYubmFtZX1cIiBpbWFnZSBmYWlsZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbjogJHtlcnJvck1lc3NhZ2UoZXJyKX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1zZyA9IGVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgcHJpbnRXYXJuaW5nKGBQbHVnaW4gXCIke3JlZi5uYW1lfVwiIHByZS1yZXNvbHV0aW9uIGZhaWxlZCAoJHttc2d9KSDigJQgZmFsbGluZyBiYWNrIHRvIGRlcGxveS10aW1lIHJlc29sdXRpb25gKTtcbiAgICB9XG4gIH0pKTtcblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG4iXX0=
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFXakQ7Ozs7R0FJRztBQUNILFNBQVMsUUFBUSxDQUFDLEdBQWM7SUFDOUIsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQThCO0lBQ3ZELE1BQU0sSUFBSSxHQUFnQixFQUFFLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFdkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFZLEVBQVEsRUFBRTtRQUNsQyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzVDLE1BQU0sQ0FBQyxHQUFHLEdBQWdCLENBQUM7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNwQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsd0VBQXdFO1FBQ3hFLDJFQUEyRTtRQUMzRSxNQUFNLElBQUksR0FBSSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQTJCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM5RCxNQUFNLE1BQU0sR0FBRyxD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R0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixZQUFZLENBQUMsV0FBVyxLQUFLLDRCQUE0QixHQUFHLDRDQUE0QyxDQUFDLENBQUM7UUFDNUcsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEVycm9yQ29kZSwgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcGx1Z2luQXJ0aWZhY3RBbGlhcywgcGx1Z2luTG9va3VwRmlsdGVyLCB1bndyYXBMb29rdXAgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5cbi8qKiBNaW5pbWFsIHBsdWdpbiByZWZlcmVuY2Ugc2hhcGUg4oCUIG1hdGNoZXMgUGx1Z2luT3B0aW9ucyBmcm9tIHBpcGVsaW5lLWNvcmUuICovXG5pbnRlcmZhY2UgUGx1Z2luUmVmIHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogUHVibGlzaGVyIGhhbmRsZSBvZiBhbiBpbnN0YWxsZWQgbGlzdGluZy4gKi9cbiAgcHVibGlzaGVyPzogc3RyaW5nO1xuICBhbGlhcz86IHN0cmluZztcbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQ2FjaGUga2V5IG1hdGNoaW5nIGBQbHVnaW5Mb29rdXAubm9ybWFsaXplKClgOiB0aGUgZXhwbGljaXQgYWxpYXMgd2hlbiBzZXQsXG4gKiBvdGhlcndpc2UgYFs8cHVibGlzaGVyPi1dPG5hbWU+LWFsaWFzYCDigJQgcGlwZWxpbmUtY29yZSdzXG4gKiBgcGx1Z2luQXJ0aWZhY3RBbGlhc2AsIHRoZSBvbmUgcnVsZSBldmVyeSBjb25zdW1lciBvZiB0aGlzIG1hcCB1c2VzLlxuICovXG5mdW5jdGlvbiBjYWNoZUtleShyZWY6IFBsdWdpblJlZik6IHN0cmluZyB7XG4gIHJldHVybiBwbHVnaW5BcnRpZmFjdEFsaWFzKHJlZik7XG59XG5cbi8qKlxuICogV2FsayB0aGUgcGlwZWxpbmUgcHJvcHMgdHJlZSB0byBjb2xsZWN0IGV2ZXJ5IHBsdWdpbiByZWZlcmVuY2UuIFBsdWdpbnNcbiAqIGFwcGVhciBhdCBgc3ludGgucGx1Z2luYCBhbmQgYXQgYHN0YWdlc1tdLnN0ZXBzW10ucGx1Z2luYC4gRW50cmllcyBhcmVcbiAqIGRlLWR1cGxpY2F0ZWQgYnkgYGNhY2hlS2V5KClgIOKAlCB0aGUgc2FtZSBrZXkgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgdXNlcyxcbiAqIHNvIHRoZSByZXNvbHZlZC1wbHVnaW5zIG1hcCBsb29rdXBzIG1hdGNoIGRvd25zdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RQbHVnaW5SZWZzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBsdWdpblJlZltdIHtcbiAgY29uc3QgcmVmczogUGx1Z2luUmVmW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3QgcHVzaCA9IChyYXc6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSByYXcgYXMgUGx1Z2luUmVmO1xuICAgIGlmICghci5uYW1lKSByZXR1cm47XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkocik7XG4gICAgLy8gVGhlIG5hbWUgdGhlIGxvb2t1cCB3aWxsIFRBUkdFVCDigJQgYW4gZXhwbGljaXQgYGZpbHRlci5uYW1lYCB3aW5zIChzZWVcbiAgICAvLyBiZWxvdyksIHNvIHR3byByZWZzIHRoYXQgcmVzb2x2ZSB0byB0aGUgc2FtZSBwbHVnaW4gYXJlIG5vdCBhIGNvbGxpc2lvbi5cbiAgICBjb25zdCBuYW1lID0gKHIuZmlsdGVyPy5uYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gci5uYW1lO1xuICAgIGNvbnN0IHRhcmdldCA9IHIucHVibGlzaGVyID8gYCR7ci5wdWJsaXNoZXJ9LyR7bmFtZX1gIDogbmFtZTtcbiAgICBjb25zdCBob2xkZXIgPSBzZWVuLmdldChrZXkpO1xuICAgIGlmIChob2xkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gT25lIGFsaWFzIGNhbiBvbmx5IGV2ZXIgbWVhbiBvbmUgcGx1Z2luLiBEZWR1cGxpY2F0aW5nIG9uIHRoZSBhbGlhc1xuICAgICAgLy8gYWxvbmUga2VwdCB0aGUgRklSU1QgcGx1Z2luIGFuZCBzaWxlbnRseSBkcm9wcGVkIHRoZSBzZWNvbmQsIHNvIGEgc3RlcFxuICAgICAgLy8gZGVjbGFyaW5nIGB7IG5hbWU6ICdtYXZlbi1idWlsZCcsIGFsaWFzOiAnYnVpbGQnIH1gIGFmdGVyIGFub3RoZXJcbiAgICAgIC8vIGRlY2xhcmluZyBgeyBuYW1lOiAnbm9kZWpzLWJ1aWxkJywgYWxpYXM6ICdidWlsZCcgfWAgcmFuIG5vZGVqcy1idWlsZCdzXG4gICAgICAvLyBpbWFnZSBhbmQgY29tbWFuZHMg4oCUIG5vIGVycm9yLCBqdXN0IHRoZSB3cm9uZyBidWlsZC5cbiAgICAgIGlmIChob2xkZXIgIT09IHRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBsdWdpbiBhbGlhcyBcIiR7a2V5fVwiIGlzIHVzZWQgZm9yIHR3byBkaWZmZXJlbnQgcGx1Z2lucyAoXCIke2hvbGRlcn1cIiBhbmQgXCIke3RhcmdldH1cIikuIGBcbiAgICAgICAgICArICdHaXZlIGVhY2ggcGx1Z2luIGl0cyBvd24gYWxpYXMuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2Vlbi5zZXQoa2V5LCB0YXJnZXQpO1xuICAgIHJlZnMucHVzaChyKTtcbiAgfTtcblxuICBjb25zdCBzeW50aCA9IHByb3BzLnN5bnRoIGFzIHsgcGx1Z2luPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICBwdXNoKHN5bnRoPy5wbHVnaW4pO1xuXG4gIGNvbnN0IHN0YWdlcyA9IHByb3BzLnN0YWdlcyBhcyBBcnJheTx7IHN0ZXBzPzogQXJyYXk8eyBwbHVnaW4/OiB1bmtub3duIH0+IH0+IHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcyA/PyBbXSkge1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGFnZS5zdGVwcyA/PyBbXSkge1xuICAgICAgcHVzaChzdGVwLnBsdWdpbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlZnM7XG59XG5cbi8qKlxuICogTG9va3VwIHJlZnVzYWxzIHRoYXQgbXVzdCBTVE9QIHRoZSBzeW50aCByYXRoZXIgdGhhbiBmYWxsIGJhY2sgdG9cbiAqIGRlcGxveS10aW1lIHJlc29sdXRpb246IGFuIGltYWdlIHdob3NlIHNpZ25hdHVyZSBkb2Vzbid0IHZlcmlmeSwgYW5kIGFcbiAqIGxpc3RpbmcgdGhlIG9yZyBjYW4ndCB1c2UgKG5vdCBpbnN0YWxsZWQsIGJsb2NrZWQgYnkgaXRzIHBvbGljeSwgeWFua2VkIG9yXG4gKiBzdXNwZW5kZWQpLiBGYWxsaW5nIGJhY2sgd291bGQgcXVpZXRseSB0dXJuXG4gKiBlYWNoIGludG8gYW4gdW5yZXNvbHZlZCBzdGVwIHRoYXQgZmFpbHMgYXQgcnVuIHRpbWUgaW5zdGVhZCBvZiBub3cuXG4gKi9cbmNvbnN0IEZBVEFMX0xPT0tVUF9DT0RFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIEVycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVELFxuICBFcnJvckNvZGUuUExVR0lOX05PVF9JTlNUQUxMRUQsXG4gIEVycm9yQ29kZS5QTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1ksXG4gIEVycm9yQ29kZS5QTFVHSU5fVU5BVkFJTEFCTEUsXG5dO1xuXG4vKiogVGhlIGVycm9yIGNvZGUgb2YgYSBwbHVnaW4gc2VydmljZSBhbnN3ZXIsIHdoZW4gaXQgaXMgb25lIG9mIHtAbGluayBGQVRBTF9MT09LVVBfQ09ERVN9LiAqL1xuZnVuY3Rpb24gZmF0YWxMb29rdXBDb2RlKGVycjogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBkYXRhID0gKGVyciBhcyB7IHJlc3BvbnNlPzogeyBkYXRhPzogdW5rbm93biB9IH0gfCB1bmRlZmluZWQpPy5yZXNwb25zZT8uZGF0YTtcbiAgY29uc3QgY29kZSA9IGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gKGRhdGEgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIEZBVEFMX0xPT0tVUF9DT0RFUy5pbmNsdWRlcyhjb2RlKSA/IGNvZGUgOiBudWxsO1xufVxuXG4vKipcbiAqIFByZS1yZXNvbHZlIHBsdWdpbnMgYnkgY2FsbGluZyB0aGUgc2FtZSBgUE9TVCAvYXBpL3BsdWdpbnMvbG9va3VwYCBlbmRwb2ludFxuICogdGhlIGRlcGxveS10aW1lIGN1c3RvbSByZXNvdXJjZSBMYW1iZGEgdXNlcy4gUmV0dXJuaW5nIHRoZSBmdWxsIFBsdWdpblxuICogcmVjb3JkIGF0IHN5bnRoIHRpbWUgaXMgd2hhdCBhbGxvd3MgdGhlIHJlc3VsdGluZyBDRk4gdGVtcGxhdGUgdG8gc2hpcFxuICogd2l0aCByZWFsIENvZGVCdWlsZCBpbWFnZSBVUklzIChgPGhvc3Q+Lzxucz4vPG5hbWU+Ojx2ZXJzaW9uPmApIHJhdGhlciB0aGFuXG4gKiB0aGUgYGF3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6Ny4wYCBmYWxsYmFjayB0aGF0IHRoZSBzeW50aC10aW1lIHRva2VuIHBhdGhcbiAqIGZvcmNlcy5cbiAqXG4gKiBGYWlsdXJlcyBhcmUgbm9uLWZhdGFsOiBhIG1pc3NpbmcgcGx1Z2luIG9yIHVucmVhY2hhYmxlIEFQSSBsb2dzIGEgd2FybmluZ1xuICogYW5kIGZhbGxzIHRocm91Z2ggdG8gdGhlIGRlcGxveS10aW1lIGN1c3RvbSByZXNvdXJjZSBwYXRoIHNvIHBhcnRpYWxcbiAqIHBsYXRmb3JtIG91dGFnZXMgZG9uJ3QgYmxvY2sgc3ludGgvZGVwbG95LiBUaGUgZXhjZXB0aW9uIGlzIGFuIGltYWdlIHRoYXRcbiAqIGZhaWxzIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24g4oCUIHRoYXQgYWJvcnRzIHRoZSBzeW50aC5cbiAqXG4gKiBLZXllZCBieSBgYWxpYXMgfHwgbmFtZWAgdG8gbWF0Y2ggYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGx1Z2luc0ZvclByb3BzKFxuICBjbGllbnQ6IEFwaUNsaWVudCxcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCByZWZzID0gY29sbGVjdFBsdWdpblJlZnMocHJvcHMpO1xuICBpZiAocmVmcy5sZW5ndGggPT09IDApIHJldHVybiB7fTtcblxuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBhd2FpdCBQcm9taXNlLmFsbChyZWZzLm1hcChhc3luYyAocmVmKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gY2FjaGVLZXkocmVmKTtcbiAgICBjb25zdCBsYWJlbCA9IHJlZi5wdWJsaXNoZXIgPyBgJHtyZWYucHVibGlzaGVyfS8ke3JlZi5uYW1lfWAgOiByZWYubmFtZTtcbiAgICAvLyBUaGUgcGx1Z2luIE5BTUUgbGl2ZXMgb24gdGhlIHJlZiAoYSBzaWJsaW5nIG9mIGBmaWx0ZXJgKSwgTk9UIGluc2lkZSB0aGVcbiAgICAvLyBmaWx0ZXIgb2JqZWN0IOKAlCBidXQgdGhlIGxvb2t1cCBtYXRjaGVzIG9uIHRoZSBmaWx0ZXIuIEEgZmlsdGVyIHdpdGhvdXRcbiAgICAvLyBgbmFtZWAgKGUuZy4gYHt2ZXJzaW9uLCB2aXNpYmlsaXR5LCBpc0FjdGl2ZSwgaXNEZWZhdWx0fWApIG1hdGNoZXMgQU5ZXG4gICAgLy8gcGx1Z2luIHdpdGggdGhvc2UgYXR0cmlidXRlcywgYW5kIHRoZSBlbmRwb2ludCByZXR1cm5zIGFuIGFyYml0cmFyeSBvbmVcbiAgICAvLyAoc2VlbjogYGRvY2tlcmZpbGUtbXVsdGktcHJvdmlkZXJgKS4gVGhhdCBtYWRlIHRoZSBzeW50aCBhbmQgZXZlcnkgc3RlcFxuICAgIC8vIHJlc29sdmUgdG8gdGhlIFdST05HIHBsdWdpbi4gU28gd2hlbiB0aGUgZmlsdGVyIG9taXRzIGBuYW1lYCwgZmFsbCBiYWNrIHRvXG4gICAgLy8gdGhlIHJlZidzIHBsdWdpbiBuYW1lOyBhbiBleHBsaWNpdCBmaWx0ZXIgYG5hbWVgIHN0aWxsIHRha2VzIHByZWNlZGVuY2UuXG4gICAgLy8gU2hhcmVkIHdpdGggdGhlIHBpcGVsaW5lIHNlcnZpY2UncyBjb250cmFjdCBjaGVjayAoc2FtZSBmaWx0ZXIsIHNhbWUgcGx1Z2luKS5cbiAgICBjb25zdCBmaWx0ZXIgPSBwbHVnaW5Mb29rdXBGaWx0ZXIocmVmKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LnBvc3Q8dW5rbm93bj4oJy9hcGkvcGx1Z2lucy9sb29rdXAnLCB7IGZpbHRlciB9KTtcbiAgICAgIGNvbnN0IHsgcGx1Z2luLCB3YXJuaW5ncyB9ID0gdW53cmFwTG9va3VwKHJlcyk7XG4gICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2Ygd2FybmluZ3MpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBQbHVnaW4gXCIke2xhYmVsfVwiOiAke3dhcm5pbmd9YCk7XG4gICAgICB9XG4gICAgICBpZiAocGx1Z2luKSB7XG4gICAgICAgIHJlc29sdmVkW2tleV0gPSBwbHVnaW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmludFdhcm5pbmcoYFBsdWdpbiBcIiR7bGFiZWx9XCIgbG9va3VwIHJldHVybmVkIG5vIHJlY29yZCDigJQgZmFsbGluZyBiYWNrIHRvIGRlcGxveS10aW1lIHJlc29sdXRpb25gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEEgcGx1Z2luIHdob3NlIGltYWdlIHNpZ25hdHVyZSBkb2Vzbid0IHZlcmlmeSwgb3IgYSBsaXN0aW5nIHRoZSBvcmdcbiAgICAgIC8vIGNhbid0IHVzZSwgaXMgTk9UIGFuIG91dGFnZSB0byByaWRlIG91dDogZmFsbGluZyBiYWNrIHdvdWxkIHF1aWV0bHlcbiAgICAgIC8vIHR1cm4gaXQgaW50byBhbiB1bnJlc29sdmVkIHN0ZXAuIFN0b3AuXG4gICAgICBjb25zdCBmYXRhbCA9IGZhdGFsTG9va3VwQ29kZShlcnIpO1xuICAgICAgaWYgKGZhdGFsID09PSBFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBcIiR7bGFiZWx9XCIgaW1hZ2UgZmFpbGVkIHNpZ25hdHVyZSB2ZXJpZmljYXRpb246ICR7ZXJyb3JNZXNzYWdlKGVycil9YCk7XG4gICAgICB9XG4gICAgICBpZiAoZmF0YWwpIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIFwiJHtsYWJlbH1cIiBjYW4ndCBiZSB1c2VkICgke2ZhdGFsfSk6ICR7ZXJyb3JNZXNzYWdlKGVycil9YCk7XG4gICAgICBjb25zdCBtc2cgPSBlcnJvck1lc3NhZ2UoZXJyKTtcbiAgICAgIHByaW50V2FybmluZyhgUGx1Z2luIFwiJHtsYWJlbH1cIiBwcmUtcmVzb2x1dGlvbiBmYWlsZWQgKCR7bXNnfSkg4oCUIGZhbGxpbmcgYmFjayB0byBkZXBsb3ktdGltZSByZXNvbHV0aW9uYCk7XG4gICAgfVxuICB9KSk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Exec } from './plugin-docker.js';
|
|
2
|
+
export declare const SEVERITIES: readonly ['Critical', 'High', 'Medium', 'Low', 'Negligible', 'Unknown'];
|
|
3
|
+
export type SeverityCounts = Record<typeof SEVERITIES[number], number>;
|
|
4
|
+
export type ScanPreview = {
|
|
5
|
+
status: 'scanned';
|
|
6
|
+
counts: SeverityCounts;
|
|
7
|
+
critical: string[];
|
|
8
|
+
} | {
|
|
9
|
+
status: 'unavailable';
|
|
10
|
+
reason: string;
|
|
11
|
+
} | {
|
|
12
|
+
status: 'failed';
|
|
13
|
+
reason: string;
|
|
14
|
+
};
|
|
15
|
+
/** Count grype JSON matches by severity; list the critical ones (`CVE in package@version`). */
|
|
16
|
+
export declare function summarizeGrype(json: string): {
|
|
17
|
+
counts: SeverityCounts;
|
|
18
|
+
critical: string[];
|
|
19
|
+
};
|
|
20
|
+
/** SBOM (syft) + scan (grype) of a local image. Never throws. */
|
|
21
|
+
export declare function scanPreview(exec: Exec, image: string): ScanPreview;
|
|
22
|
+
//# sourceMappingURL=plugin-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-scan.d.ts","sourceRoot":"","sources":["../../src/utils/plugin-scan.ts"],"names":[],"mappings":"AAaA,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAExD,eAAO,MAAM,UAAU,YAAI,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAU,CAAC;AAClG,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAEvE,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAU3F;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAkBlE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* The local SCAN PREVIEW before `plugin publish`: syft builds an SBOM of the
|
|
5
|
+
* plugin image, grype scans that SBOM — the same pair the platform runs over
|
|
6
|
+
* the signed SBOM after upload. A critical finding fails the publish gate
|
|
7
|
+
* there, so it fails here first.
|
|
8
|
+
*/
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import os from 'os';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import { hasTool } from './plugin-docker.js';
|
|
13
|
+
export const SEVERITIES = ['Critical', 'High', 'Medium', 'Low', 'Negligible', 'Unknown'];
|
|
14
|
+
/** Count grype JSON matches by severity; list the critical ones (`CVE in package@version`). */
|
|
15
|
+
export function summarizeGrype(json) {
|
|
16
|
+
const counts = Object.fromEntries(SEVERITIES.map(s => [s, 0]));
|
|
17
|
+
const critical = [];
|
|
18
|
+
const doc = JSON.parse(json);
|
|
19
|
+
for (const m of doc.matches ?? []) {
|
|
20
|
+
const sev = SEVERITIES.includes(m.vulnerability?.severity ?? '') ? m.vulnerability.severity : 'Unknown';
|
|
21
|
+
counts[sev] += 1;
|
|
22
|
+
if (sev === 'Critical')
|
|
23
|
+
critical.push(`${m.vulnerability?.id ?? '?'} in ${m.artifact?.name ?? '?'}@${m.artifact?.version ?? '?'}`);
|
|
24
|
+
}
|
|
25
|
+
return { counts, critical };
|
|
26
|
+
}
|
|
27
|
+
/** SBOM (syft) + scan (grype) of a local image. Never throws. */
|
|
28
|
+
export function scanPreview(exec, image) {
|
|
29
|
+
const missing = ['syft', 'grype'].filter(t => !hasTool(exec, t, ['version']));
|
|
30
|
+
if (missing.length)
|
|
31
|
+
return { status: 'unavailable', reason: `${missing.join(' and ')} not installed` };
|
|
32
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'pipeline-manager-scan-'));
|
|
33
|
+
try {
|
|
34
|
+
const sbom = path.join(dir, 'sbom.spdx.json');
|
|
35
|
+
const s = exec('syft', ['scan', `docker:${image}`, '-o', `spdx-json=${sbom}`, '-q']);
|
|
36
|
+
if (s.error || s.status !== 0)
|
|
37
|
+
return { status: 'failed', reason: `syft could not build the SBOM: ${(s.stderr || s.error?.message || '').trim()}` };
|
|
38
|
+
const g = exec('grype', [`sbom:${sbom}`, '-o', 'json', '-q']);
|
|
39
|
+
if (g.error || g.status !== 0)
|
|
40
|
+
return { status: 'failed', reason: `grype could not scan the SBOM: ${(g.stderr || g.error?.message || '').trim()}` };
|
|
41
|
+
try {
|
|
42
|
+
return { status: 'scanned', ...summarizeGrype(g.stdout) };
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return { status: 'failed', reason: 'grype output was not JSON' };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNjYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGx1Z2luLXNjYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBVSxDQUFDO0FBUWxHLCtGQUErRjtBQUMvRixNQUFNLFVBQVUsY0FBYyxDQUFDLElBQVk7SUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBbUIsQ0FBQztJQUNqRixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWdJLENBQUM7SUFDNUosS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxHQUFJLFVBQWdDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYyxDQUFDLFFBQXFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM3SixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxLQUFLLFVBQVU7WUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JJLENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFVLEVBQUUsS0FBYTtJQUNuRCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLElBQUksT0FBTyxDQUFDLE1BQU07UUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZHLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0lBQzdFLElBQUksQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwSixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwSixJQUFJLENBQUM7WUFDSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixFQUFFLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7WUFBUyxDQUFDO1FBQ1QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIGxvY2FsIFNDQU4gUFJFVklFVyBiZWZvcmUgYHBsdWdpbiBwdWJsaXNoYDogc3lmdCBidWlsZHMgYW4gU0JPTSBvZiB0aGVcbiAqIHBsdWdpbiBpbWFnZSwgZ3J5cGUgc2NhbnMgdGhhdCBTQk9NIOKAlCB0aGUgc2FtZSBwYWlyIHRoZSBwbGF0Zm9ybSBydW5zIG92ZXJcbiAqIHRoZSBzaWduZWQgU0JPTSBhZnRlciB1cGxvYWQuIEEgY3JpdGljYWwgZmluZGluZyBmYWlscyB0aGUgcHVibGlzaCBnYXRlXG4gKiB0aGVyZSwgc28gaXQgZmFpbHMgaGVyZSBmaXJzdC5cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgaGFzVG9vbCwgdHlwZSBFeGVjIH0gZnJvbSAnLi9wbHVnaW4tZG9ja2VyLmpzJztcblxuZXhwb3J0IGNvbnN0IFNFVkVSSVRJRVMgPSBbJ0NyaXRpY2FsJywgJ0hpZ2gnLCAnTWVkaXVtJywgJ0xvdycsICdOZWdsaWdpYmxlJywgJ1Vua25vd24nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFNldmVyaXR5Q291bnRzID0gUmVjb3JkPHR5cGVvZiBTRVZFUklUSUVTW251bWJlcl0sIG51bWJlcj47XG5cbmV4cG9ydCB0eXBlIFNjYW5QcmV2aWV3ID1cbiAgfCB7IHN0YXR1czogJ3NjYW5uZWQnOyBjb3VudHM6IFNldmVyaXR5Q291bnRzOyBjcml0aWNhbDogc3RyaW5nW10gfVxuICB8IHsgc3RhdHVzOiAndW5hdmFpbGFibGUnOyByZWFzb246IHN0cmluZyB9XG4gIHwgeyBzdGF0dXM6ICdmYWlsZWQnOyByZWFzb246IHN0cmluZyB9O1xuXG4vKiogQ291bnQgZ3J5cGUgSlNPTiBtYXRjaGVzIGJ5IHNldmVyaXR5OyBsaXN0IHRoZSBjcml0aWNhbCBvbmVzIChgQ1ZFIGluIHBhY2thZ2VAdmVyc2lvbmApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZUdyeXBlKGpzb246IHN0cmluZyk6IHsgY291bnRzOiBTZXZlcml0eUNvdW50czsgY3JpdGljYWw6IHN0cmluZ1tdIH0ge1xuICBjb25zdCBjb3VudHMgPSBPYmplY3QuZnJvbUVudHJpZXMoU0VWRVJJVElFUy5tYXAocyA9PiBbcywgMF0pKSBhcyBTZXZlcml0eUNvdW50cztcbiAgY29uc3QgY3JpdGljYWw6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGRvYyA9IEpTT04ucGFyc2UoanNvbikgYXMgeyBtYXRjaGVzPzogQXJyYXk8eyB2dWxuZXJhYmlsaXR5PzogeyBpZD86IHN0cmluZzsgc2V2ZXJpdHk/OiBzdHJpbmcgfTsgYXJ0aWZhY3Q/OiB7IG5hbWU/OiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfSB9PiB9O1xuICBmb3IgKGNvbnN0IG0gb2YgZG9jLm1hdGNoZXMgPz8gW10pIHtcbiAgICBjb25zdCBzZXYgPSAoU0VWRVJJVElFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMobS52dWxuZXJhYmlsaXR5Py5zZXZlcml0eSA/PyAnJykgPyBtLnZ1bG5lcmFiaWxpdHkhLnNldmVyaXR5IGFzIHR5cGVvZiBTRVZFUklUSUVTW251bWJlcl0gOiAnVW5rbm93bic7XG4gICAgY291bnRzW3Nldl0gKz0gMTtcbiAgICBpZiAoc2V2ID09PSAnQ3JpdGljYWwnKSBjcml0aWNhbC5wdXNoKGAke20udnVsbmVyYWJpbGl0eT8uaWQgPz8gJz8nfSBpbiAke20uYXJ0aWZhY3Q/Lm5hbWUgPz8gJz8nfUAke20uYXJ0aWZhY3Q/LnZlcnNpb24gPz8gJz8nfWApO1xuICB9XG4gIHJldHVybiB7IGNvdW50cywgY3JpdGljYWwgfTtcbn1cblxuLyoqIFNCT00gKHN5ZnQpICsgc2NhbiAoZ3J5cGUpIG9mIGEgbG9jYWwgaW1hZ2UuIE5ldmVyIHRocm93cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FuUHJldmlldyhleGVjOiBFeGVjLCBpbWFnZTogc3RyaW5nKTogU2NhblByZXZpZXcge1xuICBjb25zdCBtaXNzaW5nID0gWydzeWZ0JywgJ2dyeXBlJ10uZmlsdGVyKHQgPT4gIWhhc1Rvb2woZXhlYywgdCwgWyd2ZXJzaW9uJ10pKTtcbiAgaWYgKG1pc3NpbmcubGVuZ3RoKSByZXR1cm4geyBzdGF0dXM6ICd1bmF2YWlsYWJsZScsIHJlYXNvbjogYCR7bWlzc2luZy5qb2luKCcgYW5kICcpfSBub3QgaW5zdGFsbGVkYCB9O1xuICBjb25zdCBkaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdwaXBlbGluZS1tYW5hZ2VyLXNjYW4tJykpO1xuICB0cnkge1xuICAgIGNvbnN0IHNib20gPSBwYXRoLmpvaW4oZGlyLCAnc2JvbS5zcGR4Lmpzb24nKTtcbiAgICBjb25zdCBzID0gZXhlYygnc3lmdCcsIFsnc2NhbicsIGBkb2NrZXI6JHtpbWFnZX1gLCAnLW8nLCBgc3BkeC1qc29uPSR7c2JvbX1gLCAnLXEnXSk7XG4gICAgaWYgKHMuZXJyb3IgfHwgcy5zdGF0dXMgIT09IDApIHJldHVybiB7IHN0YXR1czogJ2ZhaWxlZCcsIHJlYXNvbjogYHN5ZnQgY291bGQgbm90IGJ1aWxkIHRoZSBTQk9NOiAkeyhzLnN0ZGVyciB8fCBzLmVycm9yPy5tZXNzYWdlIHx8ICcnKS50cmltKCl9YCB9O1xuICAgIGNvbnN0IGcgPSBleGVjKCdncnlwZScsIFtgc2JvbToke3Nib219YCwgJy1vJywgJ2pzb24nLCAnLXEnXSk7XG4gICAgaWYgKGcuZXJyb3IgfHwgZy5zdGF0dXMgIT09IDApIHJldHVybiB7IHN0YXR1czogJ2ZhaWxlZCcsIHJlYXNvbjogYGdyeXBlIGNvdWxkIG5vdCBzY2FuIHRoZSBTQk9NOiAkeyhnLnN0ZGVyciB8fCBnLmVycm9yPy5tZXNzYWdlIHx8ICcnKS50cmltKCl9YCB9O1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyBzdGF0dXM6ICdzY2FubmVkJywgLi4uc3VtbWFyaXplR3J5cGUoZy5zdGRvdXQpIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBzdGF0dXM6ICdmYWlsZWQnLCByZWFzb246ICdncnlwZSBvdXRwdXQgd2FzIG5vdCBKU09OJyB9O1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmcy5ybVN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ZipEntry {
|
|
2
|
+
/** Forward-slash path relative to the zip root. */
|
|
3
|
+
name: string;
|
|
4
|
+
data: Buffer;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The files a plugin zip carries, sorted. `image.tar` rides along only for a
|
|
8
|
+
* `prebuilt` plugin (the server builds `build_image` plugins itself).
|
|
9
|
+
*/
|
|
10
|
+
export declare function collectPluginFiles(dir: string, opts: {
|
|
11
|
+
includeImageTar: boolean;
|
|
12
|
+
}): ZipEntry[];
|
|
13
|
+
/** Write `entries` as a ZIP archive. */
|
|
14
|
+
export declare function writeZip(entries: ZipEntry[]): Buffer;
|
|
15
|
+
//# sourceMappingURL=plugin-zip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-zip.d.ts","sourceRoot":"","sources":["../../src/utils/plugin-zip.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,QAAQ;IACvB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GAAG,QAAQ,EAAE,CAiB9F;AAMD,wCAAwC;AACxC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAqDpD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Package a local plugin directory as the zip the upload API takes (the
|
|
5
|
+
* directory IS the zip root). A small, dependency-free ZIP writer: DEFLATE
|
|
6
|
+
* entries, regular files only — symlinks and anything outside the directory
|
|
7
|
+
* are refused, which the server would refuse anyway.
|
|
8
|
+
*/
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import zlib from 'zlib';
|
|
12
|
+
/** Never packaged: build outputs and VCS/editor state. */
|
|
13
|
+
const EXCLUDED = new Set(['.git', '.DS_Store', 'node_modules', 'plugin.zip']);
|
|
14
|
+
/**
|
|
15
|
+
* The files a plugin zip carries, sorted. `image.tar` rides along only for a
|
|
16
|
+
* `prebuilt` plugin (the server builds `build_image` plugins itself).
|
|
17
|
+
*/
|
|
18
|
+
export function collectPluginFiles(dir, opts) {
|
|
19
|
+
const root = path.resolve(dir);
|
|
20
|
+
const entries = [];
|
|
21
|
+
const walk = (abs) => {
|
|
22
|
+
for (const name of fs.readdirSync(abs).sort()) {
|
|
23
|
+
if (EXCLUDED.has(name))
|
|
24
|
+
continue;
|
|
25
|
+
const full = path.join(abs, name);
|
|
26
|
+
const rel = path.relative(root, full).split(path.sep).join('/');
|
|
27
|
+
if (rel === 'image.tar' && !opts.includeImageTar)
|
|
28
|
+
continue;
|
|
29
|
+
const st = fs.lstatSync(full);
|
|
30
|
+
if (st.isSymbolicLink())
|
|
31
|
+
throw new Error(`Refusing to package a symlink: ${rel}`);
|
|
32
|
+
if (st.isDirectory())
|
|
33
|
+
walk(full);
|
|
34
|
+
else if (st.isFile())
|
|
35
|
+
entries.push({ name: rel, data: fs.readFileSync(full) });
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
walk(root);
|
|
39
|
+
return entries;
|
|
40
|
+
}
|
|
41
|
+
/** DOS date/time for the zip headers (fixed, so a package is reproducible). */
|
|
42
|
+
const DOS_TIME = 0;
|
|
43
|
+
const DOS_DATE = 33; // 1980-01-01: (0 years << 9) | (month 1 << 5) | day 1
|
|
44
|
+
/** Write `entries` as a ZIP archive. */
|
|
45
|
+
export function writeZip(entries) {
|
|
46
|
+
const locals = [];
|
|
47
|
+
const centrals = [];
|
|
48
|
+
let offset = 0;
|
|
49
|
+
for (const entry of entries) {
|
|
50
|
+
const name = Buffer.from(entry.name, 'utf-8');
|
|
51
|
+
const compressed = zlib.deflateRawSync(entry.data);
|
|
52
|
+
const crc = zlib.crc32(entry.data);
|
|
53
|
+
const local = Buffer.alloc(30);
|
|
54
|
+
local.writeUInt32LE(0x04034b50, 0);
|
|
55
|
+
local.writeUInt16LE(20, 4); // version needed
|
|
56
|
+
local.writeUInt16LE(0x0800, 6); // UTF-8 names
|
|
57
|
+
local.writeUInt16LE(8, 8); // deflate
|
|
58
|
+
local.writeUInt16LE(DOS_TIME, 10);
|
|
59
|
+
local.writeUInt16LE(DOS_DATE, 12);
|
|
60
|
+
local.writeUInt32LE(crc, 14);
|
|
61
|
+
local.writeUInt32LE(compressed.length, 18);
|
|
62
|
+
local.writeUInt32LE(entry.data.length, 22);
|
|
63
|
+
local.writeUInt16LE(name.length, 26);
|
|
64
|
+
local.writeUInt16LE(0, 28);
|
|
65
|
+
locals.push(local, name, compressed);
|
|
66
|
+
const central = Buffer.alloc(46);
|
|
67
|
+
central.writeUInt32LE(0x02014b50, 0);
|
|
68
|
+
central.writeUInt16LE(0x0314, 4); // made by: Unix (3), spec 2.0 (20)
|
|
69
|
+
central.writeUInt16LE(20, 6);
|
|
70
|
+
central.writeUInt16LE(0x0800, 8);
|
|
71
|
+
central.writeUInt16LE(8, 10);
|
|
72
|
+
central.writeUInt16LE(DOS_TIME, 12);
|
|
73
|
+
central.writeUInt16LE(DOS_DATE, 14);
|
|
74
|
+
central.writeUInt32LE(crc, 16);
|
|
75
|
+
central.writeUInt32LE(compressed.length, 20);
|
|
76
|
+
central.writeUInt32LE(entry.data.length, 24);
|
|
77
|
+
central.writeUInt16LE(name.length, 28);
|
|
78
|
+
central.writeUInt16LE(0, 30); // extra
|
|
79
|
+
central.writeUInt16LE(0, 32); // comment
|
|
80
|
+
central.writeUInt16LE(0, 34); // disk
|
|
81
|
+
central.writeUInt16LE(0, 36); // internal attrs
|
|
82
|
+
central.writeUInt32LE(0o100644 * 0x10000, 38); // external attrs: regular file, -rw-r--r--
|
|
83
|
+
central.writeUInt32LE(offset, 42);
|
|
84
|
+
centrals.push(central, name);
|
|
85
|
+
offset += local.length + name.length + compressed.length;
|
|
86
|
+
}
|
|
87
|
+
const centralSize = centrals.reduce((n, b) => n + b.length, 0);
|
|
88
|
+
const end = Buffer.alloc(22);
|
|
89
|
+
end.writeUInt32LE(0x06054b50, 0);
|
|
90
|
+
end.writeUInt16LE(entries.length, 8);
|
|
91
|
+
end.writeUInt16LE(entries.length, 10);
|
|
92
|
+
end.writeUInt32LE(centralSize, 12);
|
|
93
|
+
end.writeUInt32LE(offset, 16);
|
|
94
|
+
return Buffer.concat([...locals, ...centrals, end]);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXppcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wbHVnaW4temlwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QiwwREFBMEQ7QUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBUTlFOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFXLEVBQUUsSUFBa0M7SUFDaEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixNQUFNLE9BQU8sR0FBZSxFQUFFLENBQUM7SUFDL0IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQVEsRUFBRTtRQUNqQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM5QyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUFFLFNBQVM7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEUsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLENBQUMs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QUFFLENBQUMsQ0FBQztRQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QixNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDM0QsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUGFja2FnZSBhIGxvY2FsIHBsdWdpbiBkaXJlY3RvcnkgYXMgdGhlIHppcCB0aGUgdXBsb2FkIEFQSSB0YWtlcyAodGhlXG4gKiBkaXJlY3RvcnkgSVMgdGhlIHppcCByb290KS4gQSBzbWFsbCwgZGVwZW5kZW5jeS1mcmVlIFpJUCB3cml0ZXI6IERFRkxBVEVcbiAqIGVudHJpZXMsIHJlZ3VsYXIgZmlsZXMgb25seSDigJQgc3ltbGlua3MgYW5kIGFueXRoaW5nIG91dHNpZGUgdGhlIGRpcmVjdG9yeVxuICogYXJlIHJlZnVzZWQsIHdoaWNoIHRoZSBzZXJ2ZXIgd291bGQgcmVmdXNlIGFueXdheS5cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgemxpYiBmcm9tICd6bGliJztcblxuLyoqIE5ldmVyIHBhY2thZ2VkOiBidWlsZCBvdXRwdXRzIGFuZCBWQ1MvZWRpdG9yIHN0YXRlLiAqL1xuY29uc3QgRVhDTFVERUQgPSBuZXcgU2V0KFsnLmdpdCcsICcuRFNfU3RvcmUnLCAnbm9kZV9tb2R1bGVzJywgJ3BsdWdpbi56aXAnXSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRW50cnkge1xuICAvKiogRm9yd2FyZC1zbGFzaCBwYXRoIHJlbGF0aXZlIHRvIHRoZSB6aXAgcm9vdC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICBkYXRhOiBCdWZmZXI7XG59XG5cbi8qKlxuICogVGhlIGZpbGVzIGEgcGx1Z2luIHppcCBjYXJyaWVzLCBzb3J0ZWQuIGBpbWFnZS50YXJgIHJpZGVzIGFsb25nIG9ubHkgZm9yIGFcbiAqIGBwcmVidWlsdGAgcGx1Z2luICh0aGUgc2VydmVyIGJ1aWxkcyBgYnVpbGRfaW1hZ2VgIHBsdWdpbnMgaXRzZWxmKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RQbHVnaW5GaWxlcyhkaXI6IHN0cmluZywgb3B0czogeyBpbmNsdWRlSW1hZ2VUYXI6IGJvb2xlYW4gfSk6IFppcEVudHJ5W10ge1xuICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKGRpcik7XG4gIGNvbnN0IGVudHJpZXM6IFppcEVudHJ5W10gPSBbXTtcbiAgY29uc3Qgd2FsayA9IChhYnM6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhhYnMpLnNvcnQoKSkge1xuICAgICAgaWYgKEVYQ0xVREVELmhhcyhuYW1lKSkgY29udGludWU7XG4gICAgICBjb25zdCBmdWxsID0gcGF0aC5qb2luKGFicywgbmFtZSk7XG4gICAgICBjb25zdCByZWwgPSBwYXRoLnJlbGF0aXZlKHJvb3QsIGZ1bGwpLnNwbGl0KHBhdGguc2VwKS5qb2luKCcvJyk7XG4gICAgICBpZiAocmVsID09PSAnaW1hZ2UudGFyJyAmJiAhb3B0cy5pbmNsdWRlSW1hZ2VUYXIpIGNvbnRpbnVlO1xuICAgICAgY29uc3Qgc3QgPSBmcy5sc3RhdFN5bmMoZnVsbCk7XG4gICAgICBpZiAoc3QuaXNTeW1ib2xpY0xpbmsoKSkgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBwYWNrYWdlIGEgc3ltbGluazogJHtyZWx9YCk7XG4gICAgICBpZiAoc3QuaXNEaXJlY3RvcnkoKSkgd2FsayhmdWxsKTtcbiAgICAgIGVsc2UgaWYgKHN0LmlzRmlsZSgpKSBlbnRyaWVzLnB1c2goeyBuYW1lOiByZWwsIGRhdGE6IGZzLnJlYWRGaWxlU3luYyhmdWxsKSB9KTtcbiAgICB9XG4gIH07XG4gIHdhbGsocm9vdCk7XG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG4vKiogRE9TIGRhdGUvdGltZSBmb3IgdGhlIHppcCBoZWFkZXJzIChmaXhlZCwgc28gYSBwYWNrYWdlIGlzIHJlcHJvZHVjaWJsZSkuICovXG5jb25zdCBET1NfVElNRSA9IDA7XG5jb25zdCBET1NfREFURSA9IDMzOyAvLyAxOTgwLTAxLTAxOiAoMCB5ZWFycyA8PCA5KSB8IChtb250aCAxIDw8IDUpIHwgZGF5IDFcblxuLyoqIFdyaXRlIGBlbnRyaWVzYCBhcyBhIFpJUCBhcmNoaXZlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlWmlwKGVudHJpZXM6IFppcEVudHJ5W10pOiBCdWZmZXIge1xuICBjb25zdCBsb2NhbHM6IEJ1ZmZlcltdID0gW107XG4gIGNvbnN0IGNlbnRyYWxzOiBCdWZmZXJbXSA9IFtdO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbmFtZSA9IEJ1ZmZlci5mcm9tKGVudHJ5Lm5hbWUsICd1dGYtOCcpO1xuICAgIGNvbnN0IGNvbXByZXNzZWQgPSB6bGliLmRlZmxhdGVSYXdTeW5jKGVudHJ5LmRhdGEpO1xuICAgIGNvbnN0IGNyYyA9IHpsaWIuY3JjMzIoZW50cnkuZGF0YSk7XG5cbiAgICBjb25zdCBsb2NhbCA9IEJ1ZmZlci5hbGxvYygzMCk7XG4gICAgbG9jYWwud3JpdGVVSW50MzJMRSgweDA0MDM0YjUwLCAwKTtcbiAgICBsb2NhbC53cml0ZVVJbnQxNkxFKDIwLCA0KTsgLy8gdmVyc2lvbiBuZWVkZWRcbiAgICBsb2NhbC53cml0ZVVJbnQxNkxFKDB4MDgwMCwgNik7IC8vIFVURi04IG5hbWVzXG4gICAgbG9jYWwud3JpdGVVSW50MTZMRSg4LCA4KTsgLy8gZGVmbGF0ZVxuICAgIGxvY2FsLndyaXRlVUludDE2TEUoRE9TX1RJTUUsIDEwKTtcbiAgICBsb2NhbC53cml0ZVVJbnQxNkxFKERPU19EQVRFLCAxMik7XG4gICAgbG9jYWwud3JpdGVVSW50MzJMRShjcmMsIDE0KTtcbiAgICBsb2NhbC53cml0ZVVJbnQzMkxFKGNvbXByZXNzZWQubGVuZ3RoLCAxOCk7XG4gICAgbG9jYWwud3JpdGVVSW50MzJMRShlbnRyeS5kYXRhLmxlbmd0aCwgMjIpO1xuICAgIGxvY2FsLndyaXRlVUludDE2TEUobmFtZS5sZW5ndGgsIDI2KTtcbiAgICBsb2NhbC53cml0ZVVJbnQxNkxFKDAsIDI4KTtcbiAgICBsb2NhbHMucHVzaChsb2NhbCwgbmFtZSwgY29tcHJlc3NlZCk7XG5cbiAgICBjb25zdCBjZW50cmFsID0gQnVmZmVyLmFsbG9jKDQ2KTtcbiAgICBjZW50cmFsLndyaXRlVUludDMyTEUoMHgwMjAxNGI1MCwgMCk7XG4gICAgY2VudHJhbC53cml0ZVVJbnQxNkxFKDB4MDMxNCwgNCk7IC8vIG1hZGUgYnk6IFVuaXggKDMpLCBzcGVjIDIuMCAoMjApXG4gICAgY2VudHJhbC53cml0ZVVJbnQxNkxFKDIwLCA2KTtcbiAgICBjZW50cmFsLndyaXRlVUludDE2TEUoMHgwODAwLCA4KTtcbiAgICBjZW50cmFsLndyaXRlVUludDE2TEUoOCwgMTApO1xuICAgIGNlbnRyYWwud3JpdGVVSW50MTZMRShET1NfVElNRSwgMTIpO1xuICAgIGNlbnRyYWwud3JpdGVVSW50MTZMRShET1NfREFURSwgMTQpO1xuICAgIGNlbnRyYWwud3JpdGVVSW50MzJMRShjcmMsIDE2KTtcbiAgICBjZW50cmFsLndyaXRlVUludDMyTEUoY29tcHJlc3NlZC5sZW5ndGgsIDIwKTtcbiAgICBjZW50cmFsLndyaXRlVUludDMyTEUoZW50cnkuZGF0YS5sZW5ndGgsIDI0KTtcbiAgICBjZW50cmFsLndyaXRlVUludDE2TEUobmFtZS5sZW5ndGgsIDI4KTtcbiAgICBjZW50cmFsLndyaXRlVUludDE2TEUoMCwgMzApOyAvLyBleHRyYVxuICAgIGNlbnRyYWwud3JpdGVVSW50MTZMRSgwLCAzMik7IC8vIGNvbW1lbnRcbiAgICBjZW50cmFsLndyaXRlVUludDE2TEUoMCwgMzQpOyAvLyBkaXNrXG4gICAgY2VudHJhbC53cml0ZVVJbnQxNkxFKDAsIDM2KTsgLy8gaW50ZXJuYWwgYXR0cnNcbiAgICBjZW50cmFsLndyaXRlVUludDMyTEUoMG8xMDA2NDQgKiAweDEwMDAwLCAzOCk7IC8vIGV4dGVybmFsIGF0dHJzOiByZWd1bGFyIGZpbGUsIC1ydy1yLS1yLS1cbiAgICBjZW50cmFsLndyaXRlVUludDMyTEUob2Zmc2V0LCA0Mik7XG4gICAgY2VudHJhbHMucHVzaChjZW50cmFsLCBuYW1lKTtcblxuICAgIG9mZnNldCArPSBsb2NhbC5sZW5ndGggKyBuYW1lLmxlbmd0aCArIGNvbXByZXNzZWQubGVuZ3RoO1xuICB9XG4gIGNvbnN0IGNlbnRyYWxTaXplID0gY2VudHJhbHMucmVkdWNlKChuLCBiKSA9PiBuICsgYi5sZW5ndGgsIDApO1xuICBjb25zdCBlbmQgPSBCdWZmZXIuYWxsb2MoMjIpO1xuICBlbmQud3JpdGVVSW50MzJMRSgweDA2MDU0YjUwLCAwKTtcbiAgZW5kLndyaXRlVUludDE2TEUoZW50cmllcy5sZW5ndGgsIDgpO1xuICBlbmQud3JpdGVVSW50MTZMRShlbnRyaWVzLmxlbmd0aCwgMTApO1xuICBlbmQud3JpdGVVSW50MzJMRShjZW50cmFsU2l6ZSwgMTIpO1xuICBlbmQud3JpdGVVSW50MzJMRShvZmZzZXQsIDE2KTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoWy4uLmxvY2FscywgLi4uY2VudHJhbHMsIGVuZF0pO1xufVxuIl19
|
package/dist/utils/registry.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type StepManifestEntry } from '@pipeline-builder/pipeline-core';
|
|
1
2
|
/**
|
|
2
3
|
* Helpers for registering a deployed pipeline ARN with the platform.
|
|
3
4
|
*
|
|
@@ -54,6 +55,13 @@ export interface RegistryPayload {
|
|
|
54
55
|
project: string;
|
|
55
56
|
organization: string;
|
|
56
57
|
stackName: string;
|
|
58
|
+
/**
|
|
59
|
+
* Which plugin each CodePipeline action runs, as the synth recorded it.
|
|
60
|
+
* Present only on a registration that follows a deploy; the platform then
|
|
61
|
+
* replaces the pipeline's step manifest with it. Absent (a manual `pipeline
|
|
62
|
+
* register`) leaves the stored manifest untouched.
|
|
63
|
+
*/
|
|
64
|
+
steps?: StepManifestEntry[];
|
|
57
65
|
}
|
|
58
66
|
/** Pipeline fields needed to construct a RegistryPayload. */
|
|
59
67
|
export interface PipelineForRegistry {
|
|
@@ -70,6 +78,13 @@ export interface PipelineForRegistry {
|
|
|
70
78
|
* pipelineId + display metadata.
|
|
71
79
|
*/
|
|
72
80
|
export declare function buildRegistryPayload(pipeline: PipelineForRegistry, regionOverride?: string): Promise<RegistryPayload>;
|
|
81
|
+
/**
|
|
82
|
+
* Read the step manifest the synth app wrote into the cloud assembly
|
|
83
|
+
* (`<output>/pb-step-manifest.json`). Returns undefined when there is none or
|
|
84
|
+
* it is unreadable — registration then proceeds without it and the platform
|
|
85
|
+
* keeps the previous manifest, so a telemetry gap never blocks a deploy.
|
|
86
|
+
*/
|
|
87
|
+
export declare function readStepManifest(outputDir: string): Promise<StepManifestEntry[] | undefined>;
|
|
73
88
|
/**
|
|
74
89
|
* Persist a registration intent for later retry.
|
|
75
90
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4C,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAKnH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAGpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAMtG;AAED,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,SAAS,CAAC,CAOlG;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlF;AAED,wDAAwD;AACxD,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAqBrE"}
|
package/dist/utils/registry.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { promises as fs } from 'fs';
|
|
4
4
|
import { homedir } from 'os';
|
|
5
5
|
import { join } from 'path';
|
|
6
|
-
import { parsePlatformBaseUrl } from '@pipeline-builder/pipeline-core';
|
|
6
|
+
import { parsePlatformBaseUrl, STEP_MANIFEST_FILE } from '@pipeline-builder/pipeline-core';
|
|
7
7
|
import { resolveAwsRegion } from './aws-env.js';
|
|
8
8
|
import { printInfo } from './output-utils.js';
|
|
9
9
|
import { defaultPipelineName } from '../config/cli.constants.js';
|
|
@@ -85,6 +85,21 @@ export async function buildRegistryPayload(pipeline, regionOverride) {
|
|
|
85
85
|
stackName,
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Read the step manifest the synth app wrote into the cloud assembly
|
|
90
|
+
* (`<output>/pb-step-manifest.json`). Returns undefined when there is none or
|
|
91
|
+
* it is unreadable — registration then proceeds without it and the platform
|
|
92
|
+
* keeps the previous manifest, so a telemetry gap never blocks a deploy.
|
|
93
|
+
*/
|
|
94
|
+
export async function readStepManifest(outputDir) {
|
|
95
|
+
try {
|
|
96
|
+
const parsed = JSON.parse(await fs.readFile(join(outputDir, STEP_MANIFEST_FILE), 'utf8'));
|
|
97
|
+
return Array.isArray(parsed) ? parsed : undefined;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
88
103
|
/**
|
|
89
104
|
* Persist a registration intent for later retry.
|
|
90
105
|
*
|
|
@@ -137,4 +152,4 @@ export async function readPendingIntents() {
|
|
|
137
152
|
}
|
|
138
153
|
return intents;
|
|
139
154
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxPQUEyQjtJQUUzQixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0UsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxLQUE4QixFQUFFLE9BQTJCO0lBQzlGLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0I7UUFBRSxPQUFPLENBQUMsb0JBQW9CO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELElBQUksQ0FBQyxR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UztRQUN0QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQW9CLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asc0VBQXNFO1lBQ3RFLCtDQUErQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGFyc2VQbGF0Zm9ybUJhc2VVcmwgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB7IHJlc29sdmVBd3NSZWdpb24gfSBmcm9tICcuL2F3cy1lbnYuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZGVmYXVsdFBpcGVsaW5lTmFtZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcblxuLyoqXG4gKiBIZWxwZXJzIGZvciByZWdpc3RlcmluZyBhIGRlcGxveWVkIHBpcGVsaW5lIEFSTiB3aXRoIHRoZSBwbGF0Zm9ybS5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgdGFibGUgbWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHNcbiAqIGFuZCBvcmdzLiBJdCdzIGhvdyB0aGUgZGFzaGJvYXJkJ3MgXCJEZXBsb3llZCBwaXBlbGluZXNcIiBwYW5lbCBhbmQgdGhlIGV2ZW50XG4gKiByZXBvcnRpbmcgTGFtYmRhIHJlc29sdmUgaW5jb21pbmcgZXZlbnRzIHRvIGEgcGlwZWxpbmUgZGVmaW5pdGlvbi5cbiAqXG4gKiBUd28gZmFpbHVyZSBtb2RlcyBhcmUgaGFuZGxlZCBoZXJlOlxuICpcbiAqICAgMS4gUGxhdGZvcm0gdW5yZWFjaGFibGUgYXQgZGVwbG95IHRpbWUuIFRoZSBDREsgc3RhY2sgbGFuZHMgaW4gQVdTIGJ1dCB0aGVcbiAqICAgICAgcmVnaXN0cnkgUE9TVCBmYWlscy4gV2l0aG91dCByZXRyeSB0aGUgZGVwbG95IGNvbW1hbmQgd291bGQgaGF2ZSB0b1xuICogICAgICByZS1ydW4gY2RrLWRlcGxveSAoc2xvdywgc29tZXRpbWVzIGJsb2NrZWQgYnkgc3RhY2sgc3RhdGUpIGp1c3QgdG9cbiAqICAgICAgcmVjb3JkIHRoZSBBUk4uIEluc3RlYWQsIHdlIHdyaXRlIGEgcGVuZGluZyBpbnRlbnQgdG8gYSBsb2NhbCBmaWxlO1xuICogICAgICBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSByZWdpc3RlcmAgZHJhaW5zIHRoZW0uXG4gKlxuICogICAyLiBVc2VyIGV4cGxpY2l0bHkgaW52b2tlcyBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSByZWdpc3RlciAtLWlkIDxwaXBlbGluZUlkPmBcbiAqICAgICAgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRlcGxveSB0aGF0IGRpZG4ndCByZWdpc3Rlci4gU2FtZSBwYXRoOiByZWJ1aWxkc1xuICogICAgICB0aGUgQVJOIGZyb20gU1RTLCBQT1NUcyB0byB0aGUgcGxhdGZvcm0uXG4gKlxuICogUGVuZGluZyBpbnRlbnRzIHN0b3JlIE9OTFkgdGhlIHJlZ2lzdHJhdGlvbiBwYXlsb2FkIOKAlCBuZXZlciB0b2tlbnMgb3IgVVJMcy5cbiAqIEF1dGggaXMgc3VwcGxpZWQgYnkgd2hpY2hldmVyIGNvbW1hbmQgZHJhaW5zIHRoZSBpbnRlbnQgKGRlcGxveSBvciByZWdpc3RlciksXG4gKiBzbyBhIHN0YWxlIGludGVudCBmaWxlIGlzIG5ldmVyIGFuIGF1dGhlbnRpY2F0aW9uIHJpc2suXG4gKi9cblxuLyoqXG4gKiBQbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IHB1bGwgdGFyZ2V0IGZvciB0aGUgQ0RLIHN5bnRoLCBkZXJpdmVkIGZyb20gdGhlXG4gKiBwbGF0Zm9ybSBiYXNlIFVSTCB0aGUgQ0xJIGRlcGxveXMgYWdhaW5zdCAodGhlIHNhbWUgaG9zdCB0aGF0IHNlcnZlcyB0aGVcbiAqIHJlZ2lzdHJ5IGAvdjIvYCBkYXRhIHBhdGggdmlhIG5naW54KS4gUmV1c2VzIHBpcGVsaW5lLWNvcmUnc1xuICogYHBhcnNlUGxhdGZvcm1CYXNlVXJsYCBzbyBob3N0L3BvcnQgcGFyc2luZyBzdGF5cyBpZGVudGljYWwgb24gYm90aCBzaWRlcy5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIGFuIHVucGFyc2VhYmxlL2Fic2VudCBVUkwuIChPbmx5IHRoZSBwdWxsIGhvc3QvcG9ydFxuICogYXJlIHJldHVybmVkIOKAlCBgcmVnaXN0cnkuaHR0cGAgZGVzY3JpYmVzIHRoZSBpbi1jbHVzdGVyIHB1c2ggaG9wLCB3aGljaCB0aGVcbiAqIHN5bnRoIG5ldmVyIHJlYWRzLCBzbyBkZXJpdmluZyBpdCBmcm9tIHRoZSBwdWJsaWMgVVJMIHdvdWxkIGJlIG1pc2xlYWRpbmcuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cnlPdmVycmlkZUZyb21CYXNlVXJsKFxuICBiYXNlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiB7IHB1bGxIb3N0OiBzdHJpbmc7IHB1bGxQb3J0OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGxhdGZvcm1CYXNlVXJsKGJhc2VVcmwpO1xuICByZXR1cm4gcGFyc2VkID8geyBwdWxsSG9zdDogcGFyc2VkLmhvc3QsIHB1bGxQb3J0OiBwYXJzZWQucG9ydCB9IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJha2UgdGhlIHBsYXRmb3JtLWRlcml2ZWQgcmVnaXN0cnkgcHVsbCB0YXJnZXQgaW50byB0aGUgc3ludGggcHJvcHNcbiAqIChgQnVpbGRlclByb3BzLnJlZ2lzdHJ5YCkgc28gdGhlIENvZGVCdWlsZCBpbWFnZSBVUklzIHVzZSBhIGhvc3QgQVdTIENvZGVCdWlsZFxuICogY2FuIHJlc29sdmUg4oCUIG5vdCB0aGUgaW4tY2x1c3RlciBgcmVnaXN0cnk6NTAwMGAgZGVmYXVsdC4gU2hhcmVkIGJ5IHRoZVxuICogYGRlcGxveWAgYW5kIGBzeW50aGAgY29tbWFuZHMuXG4gKlxuICogQW4gZXhwbGljaXQgYElNQUdFX1JFR0lTVFJZX1BVTExfSE9TVGAgaW4gdGhlIHN5bnRoIGVudiB0YWtlcyBwcmVjZWRlbmNlLCBzb1xuICogdGhpcyBpcyBhIG5vLW9wIHdoZW4gaXQgaXMgc2V0ICh0aGUgc3ludGgncyBgbG9hZFJlZ2lzdHJ5Q29uZmlnYCBhbHJlYWR5XG4gKiBob25vcnMgaXQpLiBBbHNvIGEgbm8tb3AgZm9yIGFuIHVucGFyc2VhYmxlL2Fic2VudCBiYXNlIFVSTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJha2VQbGF0Zm9ybVJlZ2lzdHJ5KHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYmFzZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLmVudi5JTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1QpIHJldHVybjsgLy8gZXhwbGljaXQgZW52IHdpbnNcbiAgY29uc3Qgb3ZlcnJpZGUgPSByZWdpc3RyeU92ZXJyaWRlRnJvbUJhc2VVcmwoYmFzZVVybCk7XG4gIGlmICghb3ZlcnJpZGUpIHJldHVybjtcbiAgcHJvcHMucmVnaXN0cnkgPSBvdmVycmlkZTtcbiAgcHJpbnRJbmZvKCdSZWdpc3RyeSBwdWxsIHRhcmdldCcsIHsgaG9zdDogb3ZlcnJpZGUucHVsbEhvc3QsIHBvcnQ6IG92ZXJyaWRlLnB1bGxQb3J0IH0pO1xufVxuXG4vKiogU2hhcGUgb2YgdGhlIGJvZHkgUE9TVGVkIHRvIC9hcGkvcGlwZWxpbmVzL3JlZ2lzdHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeVBheWxvYWQge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgcHJvamVjdDogc3RyaW5nO1xuICBvcmdhbml6YXRpb246IHN0cmluZztcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBQaXBlbGluZSBmaWVsZHMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhIFJlZ2lzdHJ5UGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVGb3JSZWdpc3RyeSB7XG4gIGlkOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgcHJvamVjdDogc3RyaW5nO1xuICBvcmdhbml6YXRpb246IHN0cmluZztcbn1cblxuLyoqIFdoZXJlIHBlbmRpbmcgcmVnaXN0cmF0aW9uIGludGVudHMgYXJlIHBlcnNpc3RlZCBiZXR3ZWVuIENMSSBpbnZvY2F0aW9ucy4gKi9cbmNvbnN0IFBFTkRJTkdfSU5URU5UU19ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5waXBlbGluZS1tYW5hZ2VyJywgJ3BlbmRpbmctcmVnaXN0cmF0aW9ucycpO1xuXG4vKipcbiAqIEJ1aWxkIGEgUmVnaXN0cnlQYXlsb2FkIGZyb20gdGhlIHBsYXRmb3JtJ3MgcGlwZWxpbmUgbWV0YWRhdGEuIE5vIEFXUyBjYWxsc1xuICogYW5kIG5vIEFSTi9hY2NvdW50OiB0aGUgZXZlbnRzIExhbWJkYSBhdHRyaWJ1dGVzIGV2ZW50cyB2aWEgdGhlIHBpcGVsaW5lJ3NcbiAqIGBwYi5waXBlbGluZS1pZGAgdGFnICg9IHBpcGVsaW5lSWQpLCBzbyB0aGUgcmVnaXN0cnkgb25seSBuZWVkcyB0aGUgc3RhYmxlXG4gKiBwaXBlbGluZUlkICsgZGlzcGxheSBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVnaXN0cnlQYXlsb2FkKFxuICBwaXBlbGluZTogUGlwZWxpbmVGb3JSZWdpc3RyeSxcbiAgcmVnaW9uT3ZlcnJpZGU/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFJlZ2lzdHJ5UGF5bG9hZD4ge1xuICBjb25zdCByZWdpb24gPSByZXNvbHZlQXdzUmVnaW9uKHJlZ2lvbk92ZXJyaWRlKTtcblxuICBjb25zdCBwaXBlbGluZU5hbWUgPSBwaXBlbGluZS5waXBlbGluZU5hbWVcbiAgICB8fCBkZWZhdWx0UGlwZWxpbmVOYW1lKHBpcGVsaW5lLm9yZ2FuaXphdGlvbiwgcGlwZWxpbmUucHJvamVjdCk7XG4gIGNvbnN0IHN0YWNrTmFtZSA9IGAke3BpcGVsaW5lLnByb2plY3R9LSR7cGlwZWxpbmUub3JnYW5pemF0aW9ufWAudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4ge1xuICAgIHBpcGVsaW5lSWQ6IHBpcGVsaW5lLmlkLFxuICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICBwaXBlbGluZU5hbWUsXG4gICAgcmVnaW9uLFxuICAgIHByb2plY3Q6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgb3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgc3RhY2tOYW1lLFxuICB9O1xufVxuXG4vKipcbiAqIFBlcnNpc3QgYSByZWdpc3RyYXRpb24gaW50ZW50IGZvciBsYXRlciByZXRyeS5cbiAqXG4gKiBJbnRlbnQgZmlsZXMgYXJlIGtleWVkIGJ5IHBpcGVsaW5lSWQgc28gcmUtcnVubmluZyBkZXBsb3kgb24gdGhlIHNhbWVcbiAqIHBpcGVsaW5lIG92ZXJ3cml0ZXMgcmF0aGVyIHRoYW4gYWNjdW11bGF0ZXMuIFdlIGRlbGliZXJhdGVseSBzdG9yZSB0aGVcbiAqIHBheWxvYWQgcGxhaW4gKG5vdCB0aGUgZnVsbCBwaXBlbGluZSBkb2MsIG5vdCBhdXRoKSBzbyBhIHN0YWxlIGZpbGUgaXNcbiAqIHNhZmUgdG8gbGVhdmUgYXJvdW5kIGluZGVmaW5pdGVseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUGVuZGluZ0ludGVudChwYXlsb2FkOiBSZWdpc3RyeVBheWxvYWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBhd2FpdCBmcy5ta2RpcihQRU5ESU5HX0lOVEVOVFNfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgcGF0aCA9IGpvaW4oUEVORElOR19JTlRFTlRTX0RJUiwgYCR7cGF5bG9hZC5waXBlbGluZUlkfS5qc29uYCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKiBSZW1vdmUgYSBwZW5kaW5nIGludGVudCBhZnRlciBhIHN1Y2Nlc3NmdWwgZHJhaW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJQZW5kaW5nSW50ZW50KHBpcGVsaW5lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYXRoID0gam9pbihQRU5ESU5HX0lOVEVOVFNfRElSLCBgJHtwaXBlbGluZUlkfS5qc29uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMudW5saW5rKHBhdGgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBFTk9FTlQgaXMgZmluZSDigJQgYWxyZWFkeSBjbGVhcmVkLiBBbnl0aGluZyBlbHNlIGlzIGEgcmVhbCBwcm9ibGVtLlxuICAgIGlmICgoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSAhPT0gJ0VOT0VOVCcpIHRocm93IGVycjtcbiAgfVxufVxuXG4vKiogUmVhZCBhbGwgcGVuZGluZyBpbnRlbnRzIGN1cnJlbnRseSBvbiBkaXNrLiBFbXB0eSBhcnJheSBpZiBkaXIgZG9lc24ndCBleGlzdC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUGVuZGluZ0ludGVudHMoKTogUHJvbWlzZTxSZWdpc3RyeVBheWxvYWRbXT4ge1xuICBsZXQgZW50cmllczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoUEVORElOR19JTlRFTlRTX0RJUik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICgoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBbXTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBjb25zdCBpbnRlbnRzOiBSZWdpc3RyeVBheWxvYWRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZW50cmllcykge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aCgnLmpzb24nKSkgY29udGludWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBmcy5yZWFkRmlsZShqb2luKFBFTkRJTkdfSU5URU5UU19ESVIsIGZpbGUpLCAndXRmOCcpO1xuICAgICAgaW50ZW50cy5wdXNoKEpTT04ucGFyc2UodGV4dCkgYXMgUmVnaXN0cnlQYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNraXAgdW5yZWFkYWJsZSAvIG1hbGZvcm1lZCBmaWxlcyDigJQgdGhleSdsbCBuZWVkIG1hbnVhbCBjbGVhbnVwIGJ1dFxuICAgICAgLy8gc2hvdWxkbid0IGJsb2NrIHZhbGlkIGludGVudHMgZnJvbSBkcmFpbmluZy5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGludGVudHM7XG59XG4iXX0=
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUEwQixNQUFNLGlDQUFpQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsT0FBMkI7SUFFM0IsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQy9FLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBOEIsRUFBRSxPQUEyQjtJQUM5RixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCO1FBQUUsT0FBTyxDQUFDLG9CQUFvQjtJQUN0RSxNQUFNLFFBQVEsR0FBRywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0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LEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsSUFBSSxPQUFpQixDQUFDO0lBQ3RCLElBQUksQ0FBQztRQUNILE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUssR0FBNkIsQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFzQixFQUFFLENBQUM7SUFDdEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFBRSxTQUFTO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBb0IsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxzRUFBc0U7WUFDdEUsK0NBQStDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXJzZVBsYXRmb3JtQmFzZVVybCwgU1RFUF9NQU5JRkVTVF9GSUxFLCB0eXBlIFN0ZXBNYW5pZmVzdEVudHJ5IH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgeyByZXNvbHZlQXdzUmVnaW9uIH0gZnJvbSAnLi9hd3MtZW52LmpzJztcbmltcG9ydCB7IHByaW50SW5mbyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGRlZmF1bHRQaXBlbGluZU5hbWUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogSGVscGVycyBmb3IgcmVnaXN0ZXJpbmcgYSBkZXBsb3llZCBwaXBlbGluZSBBUk4gd2l0aCB0aGUgcGxhdGZvcm0uXG4gKlxuICogVGhlIHJlZ2lzdHJ5IHRhYmxlIG1hcHMgZGVwbG95ZWQgQ29kZVBpcGVsaW5lIEFSTnMgYmFjayB0byBwaXBlbGluZSByZWNvcmRzXG4gKiBhbmQgb3Jncy4gSXQncyBob3cgdGhlIGRhc2hib2FyZCdzIFwiRGVwbG95ZWQgcGlwZWxpbmVzXCIgcGFuZWwgYW5kIHRoZSBldmVudFxuICogcmVwb3J0aW5nIExhbWJkYSByZXNvbHZlIGluY29taW5nIGV2ZW50cyB0byBhIHBpcGVsaW5lIGRlZmluaXRpb24uXG4gKlxuICogVHdvIGZhaWx1cmUgbW9kZXMgYXJlIGhhbmRsZWQgaGVyZTpcbiAqXG4gKiAgIDEuIFBsYXRmb3JtIHVucmVhY2hhYmxlIGF0IGRlcGxveSB0aW1lLiBUaGUgQ0RLIHN0YWNrIGxhbmRzIGluIEFXUyBidXQgdGhlXG4gKiAgICAgIHJlZ2lzdHJ5IFBPU1QgZmFpbHMuIFdpdGhvdXQgcmV0cnkgdGhlIGRlcGxveSBjb21tYW5kIHdvdWxkIGhhdmUgdG9cbiAqICAgICAgcmUtcnVuIGNkay1kZXBsb3kgKHNsb3csIHNvbWV0aW1lcyBibG9ja2VkIGJ5IHN0YWNrIHN0YXRlKSBqdXN0IHRvXG4gKiAgICAgIHJlY29yZCB0aGUgQVJOLiBJbnN0ZWFkLCB3ZSB3cml0ZSBhIHBlbmRpbmcgaW50ZW50IHRvIGEgbG9jYWwgZmlsZTtcbiAqICAgICAgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgcmVnaXN0ZXJgIGRyYWlucyB0aGVtLlxuICpcbiAqICAgMi4gVXNlciBleHBsaWNpdGx5IGludm9rZXMgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgcmVnaXN0ZXIgLS1pZCA8cGlwZWxpbmVJZD5gXG4gKiAgICAgIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkZXBsb3kgdGhhdCBkaWRuJ3QgcmVnaXN0ZXIuIFNhbWUgcGF0aDogcmVidWlsZHNcbiAqICAgICAgdGhlIEFSTiBmcm9tIFNUUywgUE9TVHMgdG8gdGhlIHBsYXRmb3JtLlxuICpcbiAqIFBlbmRpbmcgaW50ZW50cyBzdG9yZSBPTkxZIHRoZSByZWdpc3RyYXRpb24gcGF5bG9hZCDigJQgbmV2ZXIgdG9rZW5zIG9yIFVSTHMuXG4gKiBBdXRoIGlzIHN1cHBsaWVkIGJ5IHdoaWNoZXZlciBjb21tYW5kIGRyYWlucyB0aGUgaW50ZW50IChkZXBsb3kgb3IgcmVnaXN0ZXIpLFxuICogc28gYSBzdGFsZSBpbnRlbnQgZmlsZSBpcyBuZXZlciBhbiBhdXRoZW50aWNhdGlvbiByaXNrLlxuICovXG5cbi8qKlxuICogUGxhdGZvcm0tc291cmNlZCByZWdpc3RyeSBwdWxsIHRhcmdldCBmb3IgdGhlIENESyBzeW50aCwgZGVyaXZlZCBmcm9tIHRoZVxuICogcGxhdGZvcm0gYmFzZSBVUkwgdGhlIENMSSBkZXBsb3lzIGFnYWluc3QgKHRoZSBzYW1lIGhvc3QgdGhhdCBzZXJ2ZXMgdGhlXG4gKiByZWdpc3RyeSBgL3YyL2AgZGF0YSBwYXRoIHZpYSBuZ2lueCkuIFJldXNlcyBwaXBlbGluZS1jb3JlJ3NcbiAqIGBwYXJzZVBsYXRmb3JtQmFzZVVybGAgc28gaG9zdC9wb3J0IHBhcnNpbmcgc3RheXMgaWRlbnRpY2FsIG9uIGJvdGggc2lkZXMuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBhbiB1bnBhcnNlYWJsZS9hYnNlbnQgVVJMLiAoT25seSB0aGUgcHVsbCBob3N0L3BvcnRcbiAqIGFyZSByZXR1cm5lZCDigJQgYHJlZ2lzdHJ5Lmh0dHBgIGRlc2NyaWJlcyB0aGUgaW4tY2x1c3RlciBwdXNoIGhvcCwgd2hpY2ggdGhlXG4gKiBzeW50aCBuZXZlciByZWFkcywgc28gZGVyaXZpbmcgaXQgZnJvbSB0aGUgcHVibGljIFVSTCB3b3VsZCBiZSBtaXNsZWFkaW5nLilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJ5T3ZlcnJpZGVGcm9tQmFzZVVybChcbiAgYmFzZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogeyBwdWxsSG9zdDogc3RyaW5nOyBwdWxsUG9ydDogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBsYXRmb3JtQmFzZVVybChiYXNlVXJsKTtcbiAgcmV0dXJuIHBhcnNlZCA/IHsgcHVsbEhvc3Q6IHBhcnNlZC5ob3N0LCBwdWxsUG9ydDogcGFyc2VkLnBvcnQgfSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCYWtlIHRoZSBwbGF0Zm9ybS1kZXJpdmVkIHJlZ2lzdHJ5IHB1bGwgdGFyZ2V0IGludG8gdGhlIHN5bnRoIHByb3BzXG4gKiAoYEJ1aWxkZXJQcm9wcy5yZWdpc3RyeWApIHNvIHRoZSBDb2RlQnVpbGQgaW1hZ2UgVVJJcyB1c2UgYSBob3N0IEFXUyBDb2RlQnVpbGRcbiAqIGNhbiByZXNvbHZlIOKAlCBub3QgdGhlIGluLWNsdXN0ZXIgYHJlZ2lzdHJ5OjUwMDBgIGRlZmF1bHQuIFNoYXJlZCBieSB0aGVcbiAqIGBkZXBsb3lgIGFuZCBgc3ludGhgIGNvbW1hbmRzLlxuICpcbiAqIEFuIGV4cGxpY2l0IGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgIGluIHRoZSBzeW50aCBlbnYgdGFrZXMgcHJlY2VkZW5jZSwgc29cbiAqIHRoaXMgaXMgYSBuby1vcCB3aGVuIGl0IGlzIHNldCAodGhlIHN5bnRoJ3MgYGxvYWRSZWdpc3RyeUNvbmZpZ2AgYWxyZWFkeVxuICogaG9ub3JzIGl0KS4gQWxzbyBhIG5vLW9wIGZvciBhbiB1bnBhcnNlYWJsZS9hYnNlbnQgYmFzZSBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYWtlUGxhdGZvcm1SZWdpc3RyeShwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGJhc2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5lbnYuSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUKSByZXR1cm47IC8vIGV4cGxpY2l0IGVudiB3aW5zXG4gIGNvbnN0IG92ZXJyaWRlID0gcmVnaXN0cnlPdmVycmlkZUZyb21CYXNlVXJsKGJhc2VVcmwpO1xuICBpZiAoIW92ZXJyaWRlKSByZXR1cm47XG4gIHByb3BzLnJlZ2lzdHJ5ID0gb3ZlcnJpZGU7XG4gIHByaW50SW5mbygnUmVnaXN0cnkgcHVsbCB0YXJnZXQnLCB7IGhvc3Q6IG92ZXJyaWRlLnB1bGxIb3N0LCBwb3J0OiBvdmVycmlkZS5wdWxsUG9ydCB9KTtcbn1cblxuLyoqIFNoYXBlIG9mIHRoZSBib2R5IFBPU1RlZCB0byAvYXBpL3BpcGVsaW5lcy9yZWdpc3RyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlQYXlsb2FkIHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIHByb2plY3Q6IHN0cmluZztcbiAgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogV2hpY2ggcGx1Z2luIGVhY2ggQ29kZVBpcGVsaW5lIGFjdGlvbiBydW5zLCBhcyB0aGUgc3ludGggcmVjb3JkZWQgaXQuXG4gICAqIFByZXNlbnQgb25seSBvbiBhIHJlZ2lzdHJhdGlvbiB0aGF0IGZvbGxvd3MgYSBkZXBsb3k7IHRoZSBwbGF0Zm9ybSB0aGVuXG4gICAqIHJlcGxhY2VzIHRoZSBwaXBlbGluZSdzIHN0ZXAgbWFuaWZlc3Qgd2l0aCBpdC4gQWJzZW50IChhIG1hbnVhbCBgcGlwZWxpbmVcbiAgICogcmVnaXN0ZXJgKSBsZWF2ZXMgdGhlIHN0b3JlZCBtYW5pZmVzdCB1bnRvdWNoZWQuXG4gICAqL1xuICBzdGVwcz86IFN0ZXBNYW5pZmVzdEVudHJ5W107XG59XG5cbi8qKiBQaXBlbGluZSBmaWVsZHMgbmVlZGVkIHRvIGNvbnN0cnVjdCBhIFJlZ2lzdHJ5UGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVGb3JSZWdpc3RyeSB7XG4gIGlkOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgcHJvamVjdDogc3RyaW5nO1xuICBvcmdhbml6YXRpb246IHN0cmluZztcbn1cblxuLyoqIFdoZXJlIHBlbmRpbmcgcmVnaXN0cmF0aW9uIGludGVudHMgYXJlIHBlcnNpc3RlZCBiZXR3ZWVuIENMSSBpbnZvY2F0aW9ucy4gKi9cbmNvbnN0IFBFTkRJTkdfSU5URU5UU19ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5waXBlbGluZS1tYW5hZ2VyJywgJ3BlbmRpbmctcmVnaXN0cmF0aW9ucycpO1xuXG4vKipcbiAqIEJ1aWxkIGEgUmVnaXN0cnlQYXlsb2FkIGZyb20gdGhlIHBsYXRmb3JtJ3MgcGlwZWxpbmUgbWV0YWRhdGEuIE5vIEFXUyBjYWxsc1xuICogYW5kIG5vIEFSTi9hY2NvdW50OiB0aGUgZXZlbnRzIExhbWJkYSBhdHRyaWJ1dGVzIGV2ZW50cyB2aWEgdGhlIHBpcGVsaW5lJ3NcbiAqIGBwYi5waXBlbGluZS1pZGAgdGFnICg9IHBpcGVsaW5lSWQpLCBzbyB0aGUgcmVnaXN0cnkgb25seSBuZWVkcyB0aGUgc3RhYmxlXG4gKiBwaXBlbGluZUlkICsgZGlzcGxheSBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmVnaXN0cnlQYXlsb2FkKFxuICBwaXBlbGluZTogUGlwZWxpbmVGb3JSZWdpc3RyeSxcbiAgcmVnaW9uT3ZlcnJpZGU/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFJlZ2lzdHJ5UGF5bG9hZD4ge1xuICBjb25zdCByZWdpb24gPSByZXNvbHZlQXdzUmVnaW9uKHJlZ2lvbk92ZXJyaWRlKTtcblxuICBjb25zdCBwaXBlbGluZU5hbWUgPSBwaXBlbGluZS5waXBlbGluZU5hbWVcbiAgICB8fCBkZWZhdWx0UGlwZWxpbmVOYW1lKHBpcGVsaW5lLm9yZ2FuaXphdGlvbiwgcGlwZWxpbmUucHJvamVjdCk7XG4gIGNvbnN0IHN0YWNrTmFtZSA9IGAke3BpcGVsaW5lLnByb2plY3R9LSR7cGlwZWxpbmUub3JnYW5pemF0aW9ufWAudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4ge1xuICAgIHBpcGVsaW5lSWQ6IHBpcGVsaW5lLmlkLFxuICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICBwaXBlbGluZU5hbWUsXG4gICAgcmVnaW9uLFxuICAgIHByb2plY3Q6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgb3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgc3RhY2tOYW1lLFxuICB9O1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIHN0ZXAgbWFuaWZlc3QgdGhlIHN5bnRoIGFwcCB3cm90ZSBpbnRvIHRoZSBjbG91ZCBhc3NlbWJseVxuICogKGA8b3V0cHV0Pi9wYi1zdGVwLW1hbmlmZXN0Lmpzb25gKS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGVyZSBpcyBub25lIG9yXG4gKiBpdCBpcyB1bnJlYWRhYmxlIOKAlCByZWdpc3RyYXRpb24gdGhlbiBwcm9jZWVkcyB3aXRob3V0IGl0IGFuZCB0aGUgcGxhdGZvcm1cbiAqIGtlZXBzIHRoZSBwcmV2aW91cyBtYW5pZmVzdCwgc28gYSB0ZWxlbWV0cnkgZ2FwIG5ldmVyIGJsb2NrcyBhIGRlcGxveS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdGVwTWFuaWZlc3Qob3V0cHV0RGlyOiBzdHJpbmcpOiBQcm9taXNlPFN0ZXBNYW5pZmVzdEVudHJ5W10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQ6IHVua25vd24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGpvaW4ob3V0cHV0RGlyLCBTVEVQX01BTklGRVNUX0ZJTEUpLCAndXRmOCcpKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJzZWQpID8gcGFyc2VkIGFzIFN0ZXBNYW5pZmVzdEVudHJ5W10gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBQZXJzaXN0IGEgcmVnaXN0cmF0aW9uIGludGVudCBmb3IgbGF0ZXIgcmV0cnkuXG4gKlxuICogSW50ZW50IGZpbGVzIGFyZSBrZXllZCBieSBwaXBlbGluZUlkIHNvIHJlLXJ1bm5pbmcgZGVwbG95IG9uIHRoZSBzYW1lXG4gKiBwaXBlbGluZSBvdmVyd3JpdGVzIHJhdGhlciB0aGFuIGFjY3VtdWxhdGVzLiBXZSBkZWxpYmVyYXRlbHkgc3RvcmUgdGhlXG4gKiBwYXlsb2FkIHBsYWluIChub3QgdGhlIGZ1bGwgcGlwZWxpbmUgZG9jLCBub3QgYXV0aCkgc28gYSBzdGFsZSBmaWxlIGlzXG4gKiBzYWZlIHRvIGxlYXZlIGFyb3VuZCBpbmRlZmluaXRlbHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZVBlbmRpbmdJbnRlbnQocGF5bG9hZDogUmVnaXN0cnlQYXlsb2FkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXdhaXQgZnMubWtkaXIoUEVORElOR19JTlRFTlRTX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IHBhdGggPSBqb2luKFBFTkRJTkdfSU5URU5UU19ESVIsIGAke3BheWxvYWQucGlwZWxpbmVJZH0uanNvbmApO1xuICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aCwgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMiksICd1dGY4Jyk7XG4gIHJldHVybiBwYXRoO1xufVxuXG4vKiogUmVtb3ZlIGEgcGVuZGluZyBpbnRlbnQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRyYWluLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFyUGVuZGluZ0ludGVudChwaXBlbGluZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGF0aCA9IGpvaW4oUEVORElOR19JTlRFTlRTX0RJUiwgYCR7cGlwZWxpbmVJZH0uanNvbmApO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLnVubGluayhwYXRoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRU5PRU5UIGlzIGZpbmUg4oCUIGFscmVhZHkgY2xlYXJlZC4gQW55dGhpbmcgZWxzZSBpcyBhIHJlYWwgcHJvYmxlbS5cbiAgICBpZiAoKGVyciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqIFJlYWQgYWxsIHBlbmRpbmcgaW50ZW50cyBjdXJyZW50bHkgb24gZGlzay4gRW1wdHkgYXJyYXkgaWYgZGlyIGRvZXNuJ3QgZXhpc3QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFBlbmRpbmdJbnRlbnRzKCk6IFByb21pc2U8UmVnaXN0cnlQYXlsb2FkW10+IHtcbiAgbGV0IGVudHJpZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKFBFTkRJTkdfSU5URU5UU19ESVIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoKGVyciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSByZXR1cm4gW107XG4gICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgY29uc3QgaW50ZW50czogUmVnaXN0cnlQYXlsb2FkW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGVudHJpZXMpIHtcbiAgICBpZiAoIWZpbGUuZW5kc1dpdGgoJy5qc29uJykpIGNvbnRpbnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZnMucmVhZEZpbGUoam9pbihQRU5ESU5HX0lOVEVOVFNfRElSLCBmaWxlKSwgJ3V0ZjgnKTtcbiAgICAgIGludGVudHMucHVzaChKU09OLnBhcnNlKHRleHQpIGFzIFJlZ2lzdHJ5UGF5bG9hZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTa2lwIHVucmVhZGFibGUgLyBtYWxmb3JtZWQgZmlsZXMg4oCUIHRoZXknbGwgbmVlZCBtYW51YWwgY2xlYW51cCBidXRcbiAgICAgIC8vIHNob3VsZG4ndCBibG9jayB2YWxpZCBpbnRlbnRzIGZyb20gZHJhaW5pbmcuXG4gICAgfVxuICB9XG4gIHJldHVybiBpbnRlbnRzO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-account.d.ts","sourceRoot":"","sources":["../../src/utils/service-account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service-account.d.ts","sourceRoot":"","sources":["../../src/utils/service-account.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMjD,yCAAyC;AACzC,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,MAAM,EAAE,SAAS,CAAC;IAClB,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,mFAAmF;IACnF,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAiDD,iDAAiD;AACjD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9E;AA0DD,qFAAqF;AACrF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAKf;AAyCD;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAanG"}
|