@sendly/cli 3.37.0 → 3.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +178 -0
- package/dist/commands/business-upgrade/resubmit.js +3 -3
- package/dist/commands/business-upgrade/start.js +3 -3
- package/dist/commands/config/list.js +14 -2
- package/dist/commands/config/set.js +16 -3
- package/dist/commands/countries.js +2 -2
- package/dist/commands/credits/index.d.ts +1 -0
- package/dist/commands/credits/index.js +4 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.js +51 -8
- package/dist/commands/enterprise/upload-verification-document.js +3 -3
- package/dist/commands/enterprise/verification/resubmit.js +2 -2
- package/dist/commands/enterprise/verification/submit.js +2 -2
- package/dist/commands/events/listen.js +3 -3
- package/dist/commands/numbers/buy.js +19 -4
- package/dist/commands/rcs/agents.d.ts +10 -0
- package/dist/commands/rcs/agents.js +89 -0
- package/dist/commands/rcs/capability.d.ts +12 -0
- package/dist/commands/rcs/capability.js +85 -0
- package/dist/commands/rcs/send.d.ts +21 -0
- package/dist/commands/rcs/send.js +240 -0
- package/dist/commands/send.d.ts +1 -0
- package/dist/commands/send.js +5 -2
- package/dist/commands/sms/batch.d.ts +1 -0
- package/dist/commands/sms/batch.js +11 -1
- package/dist/commands/sms/group.d.ts +1 -0
- package/dist/commands/sms/group.js +5 -2
- package/dist/commands/sms/schedule.d.ts +1 -0
- package/dist/commands/sms/schedule.js +5 -2
- package/dist/commands/sms/send.d.ts +1 -0
- package/dist/commands/sms/send.js +5 -2
- package/dist/commands/webhooks/listen.js +2 -2
- package/dist/commands/whatsapp/connect.d.ts +17 -0
- package/dist/commands/whatsapp/connect.js +166 -0
- package/dist/commands/whatsapp/profile/get.d.ts +13 -0
- package/dist/commands/whatsapp/profile/get.js +67 -0
- package/dist/commands/whatsapp/profile/update.d.ts +20 -0
- package/dist/commands/whatsapp/profile/update.js +109 -0
- package/dist/commands/whatsapp/send.d.ts +17 -0
- package/dist/commands/whatsapp/send.js +151 -0
- package/dist/commands/whatsapp/senders.d.ts +10 -0
- package/dist/commands/whatsapp/senders.js +74 -0
- package/dist/commands/whatsapp/status.d.ts +13 -0
- package/dist/commands/whatsapp/status.js +92 -0
- package/dist/commands/whatsapp/templates/create.d.ts +19 -0
- package/dist/commands/whatsapp/templates/create.js +205 -0
- package/dist/commands/whatsapp/templates/delete.d.ts +14 -0
- package/dist/commands/whatsapp/templates/delete.js +69 -0
- package/dist/commands/whatsapp/templates/list.d.ts +10 -0
- package/dist/commands/whatsapp/templates/list.js +77 -0
- package/dist/commands/whatsapp/templates/update.d.ts +18 -0
- package/dist/commands/whatsapp/templates/update.js +160 -0
- package/dist/commands/whoami.js +32 -6
- package/dist/hooks/command-not-found.js +46 -61
- package/dist/lib/api-client.d.ts +9 -1
- package/dist/lib/api-client.js +78 -9
- package/dist/lib/auth.js +10 -6
- package/dist/lib/base-command.js +9 -1
- package/dist/lib/config.d.ts +50 -1
- package/dist/lib/config.js +144 -7
- package/dist/lib/help.d.ts +10 -0
- package/dist/lib/help.js +23 -0
- package/dist/lib/onboarding.js +3 -3
- package/oclif.manifest.json +1735 -764
- package/package.json +8 -1
package/dist/lib/config.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Environment Variables (take precedence over config file):
|
|
6
6
|
* - SENDLY_API_KEY: API key for authentication
|
|
7
|
-
* - SENDLY_BASE_URL: Custom API endpoint
|
|
7
|
+
* - SENDLY_BASE_URL: Custom API endpoint (alias: SENDLY_API_URL)
|
|
8
8
|
* - SENDLY_OUTPUT_FORMAT: Default output format (human/json)
|
|
9
9
|
* - SENDLY_NO_COLOR: Disable colored output (any value)
|
|
10
10
|
* - SENDLY_TIMEOUT: Request timeout in ms (default: 30000)
|
|
@@ -73,9 +73,13 @@ function getEncryptionKey() {
|
|
|
73
73
|
if (!fs.existsSync(CONFIG_DIR)) {
|
|
74
74
|
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* The API host used when nothing else is configured.
|
|
78
|
+
*/
|
|
79
|
+
export const PRODUCTION_BASE_URL = "https://sendly.live";
|
|
76
80
|
const DEFAULT_CONFIG = {
|
|
77
81
|
environment: "test",
|
|
78
|
-
baseUrl:
|
|
82
|
+
baseUrl: PRODUCTION_BASE_URL,
|
|
79
83
|
defaultFormat: "human",
|
|
80
84
|
colorEnabled: true,
|
|
81
85
|
timeout: 30000,
|
|
@@ -179,6 +183,142 @@ function initializeConfig() {
|
|
|
179
183
|
});
|
|
180
184
|
}
|
|
181
185
|
const config = initializeConfig();
|
|
186
|
+
/**
|
|
187
|
+
* Normalize a base URL supplied through the environment (or a flag): trim
|
|
188
|
+
* surrounding whitespace and drop trailing slashes so callers can append a
|
|
189
|
+
* path directly. Empty and whitespace-only values count as "not set".
|
|
190
|
+
*/
|
|
191
|
+
function normalizeBaseUrl(value) {
|
|
192
|
+
const trimmed = value?.trim();
|
|
193
|
+
if (!trimmed)
|
|
194
|
+
return undefined;
|
|
195
|
+
return trimmed.replace(/\/+$/, "") || trimmed;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* True for hosts whose traffic never leaves the machine: `localhost` and any
|
|
199
|
+
* `*.localhost` name, the 127.0.0.0/8 block, and IPv6 `::1`.
|
|
200
|
+
*/
|
|
201
|
+
function isLoopbackHost(hostname) {
|
|
202
|
+
const host = hostname.replace(/^\[/, "").replace(/\]$/, "").toLowerCase();
|
|
203
|
+
return (host === "localhost" ||
|
|
204
|
+
host.endsWith(".localhost") ||
|
|
205
|
+
host === "::1" ||
|
|
206
|
+
/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(host));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* True for the production API host, or one of its subdomains, over TLS.
|
|
210
|
+
*/
|
|
211
|
+
function isProductionHost(parsed) {
|
|
212
|
+
if (parsed.protocol !== "https:")
|
|
213
|
+
return false;
|
|
214
|
+
const production = new URL(PRODUCTION_BASE_URL).hostname.toLowerCase();
|
|
215
|
+
const host = parsed.hostname.toLowerCase();
|
|
216
|
+
return host === production || host.endsWith(`.${production}`);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* The kind of credential a request would carry, using the same rule as
|
|
220
|
+
* getAuthInfo(): a key is "test" only when it carries the `sk_test_` prefix.
|
|
221
|
+
* Stored session tokens count as live because they authorize the real account.
|
|
222
|
+
*/
|
|
223
|
+
function activeCredentialKind() {
|
|
224
|
+
const token = getAuthToken();
|
|
225
|
+
if (!token)
|
|
226
|
+
return "none";
|
|
227
|
+
return token.startsWith("sk_test_") ? "test" : "live";
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check a base URL supplied for this run (a flag or an environment variable)
|
|
231
|
+
* and return why it is unusable, or undefined when it is fine.
|
|
232
|
+
*
|
|
233
|
+
* A supplied value must be an `http://` or `https://` origin with no path,
|
|
234
|
+
* query or fragment — the CLI appends the API path itself, so a path here
|
|
235
|
+
* would be duplicated into `/api/v1/api/v1/...`.
|
|
236
|
+
*
|
|
237
|
+
* It must also be a host the CLI is willing to hand credentials to. The
|
|
238
|
+
* production host over TLS and loopback addresses always qualify. Anywhere
|
|
239
|
+
* else, a live API key or a stored session token is refused outright, and a
|
|
240
|
+
* test key still requires TLS. The stored `baseUrl` in the config file is not
|
|
241
|
+
* subject to this check: it is written by an explicit local command rather
|
|
242
|
+
* than picked up from the ambient environment.
|
|
243
|
+
*/
|
|
244
|
+
function checkSuppliedBaseUrl(value, source) {
|
|
245
|
+
let parsed;
|
|
246
|
+
try {
|
|
247
|
+
parsed = new URL(value);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return `${source} is not a valid URL: "${value}". Use a full origin, e.g. https://sendly.live`;
|
|
251
|
+
}
|
|
252
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
253
|
+
return `${source} must be an http:// or https:// URL: "${value}". Use a full origin, e.g. http://localhost:5001`;
|
|
254
|
+
}
|
|
255
|
+
if (parsed.pathname !== "/" || parsed.search || parsed.hash) {
|
|
256
|
+
return `${source} must be an origin with no path: "${value}". The CLI appends the API path itself, so use "${parsed.origin}"`;
|
|
257
|
+
}
|
|
258
|
+
if (isProductionHost(parsed) || isLoopbackHost(parsed.hostname)) {
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
if (activeCredentialKind() === "live") {
|
|
262
|
+
return `${source} points at ${parsed.origin}, but a live credential is in use. Refusing to send a live API key to any host other than ${PRODUCTION_BASE_URL} or a loopback address. Use a test key (sk_test_...) or point ${source} at http://localhost:PORT`;
|
|
263
|
+
}
|
|
264
|
+
if (parsed.protocol !== "https:") {
|
|
265
|
+
return `${source} must use https:// for a host other than localhost: "${value}". Refusing to send credentials over cleartext http`;
|
|
266
|
+
}
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Resolve the API host without throwing.
|
|
271
|
+
*
|
|
272
|
+
* Resolution order, highest priority first:
|
|
273
|
+
* 1. `override` - an explicit per-command value. No command exposes a
|
|
274
|
+
* base-URL flag today; this parameter is where one would feed in.
|
|
275
|
+
* 2. `SENDLY_BASE_URL` environment variable.
|
|
276
|
+
* 3. `SENDLY_API_URL` environment variable (older documented spelling).
|
|
277
|
+
* 4. `baseUrl` in the config file (`sendly config set baseUrl ...`).
|
|
278
|
+
* 5. `PRODUCTION_BASE_URL`.
|
|
279
|
+
*
|
|
280
|
+
* This mirrors how the API key resolves in getAuthToken(): the environment
|
|
281
|
+
* wins over stored config, and an empty variable counts as unset. Values from
|
|
282
|
+
* the environment or a flag are normalized and checked; the stored config
|
|
283
|
+
* value is returned exactly as written so existing installs are untouched.
|
|
284
|
+
*
|
|
285
|
+
* Read-only callers (`config list`, `whoami`, `doctor`) use this so a bad
|
|
286
|
+
* value cannot break a command that never opens a socket. Anything that is
|
|
287
|
+
* about to make a request uses resolveBaseUrl() instead.
|
|
288
|
+
*
|
|
289
|
+
* Note that SENDLY_API_BASE is deliberately not consulted: elsewhere in the
|
|
290
|
+
* tooling that name carries a version-suffixed base (`.../api/v1`), and the
|
|
291
|
+
* CLI appends the version itself.
|
|
292
|
+
*/
|
|
293
|
+
export function resolveBaseUrlSafe(override) {
|
|
294
|
+
const supplied = [
|
|
295
|
+
["The --base-url value", override],
|
|
296
|
+
["SENDLY_BASE_URL", process.env.SENDLY_BASE_URL],
|
|
297
|
+
["SENDLY_API_URL", process.env.SENDLY_API_URL],
|
|
298
|
+
];
|
|
299
|
+
for (const [source, raw] of supplied) {
|
|
300
|
+
const url = normalizeBaseUrl(raw);
|
|
301
|
+
if (!url)
|
|
302
|
+
continue;
|
|
303
|
+
const error = checkSuppliedBaseUrl(url, source);
|
|
304
|
+
return error ? { url, source, error } : { url, source };
|
|
305
|
+
}
|
|
306
|
+
const stored = config.get("baseUrl");
|
|
307
|
+
return stored
|
|
308
|
+
? { url: stored, source: "the config file" }
|
|
309
|
+
: { url: PRODUCTION_BASE_URL, source: "the built-in default" };
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Resolve the API host for a request, throwing when the resolved value is not
|
|
313
|
+
* one the CLI will send credentials to. Callers that only display the host
|
|
314
|
+
* should use resolveBaseUrlSafe().
|
|
315
|
+
*/
|
|
316
|
+
export function resolveBaseUrl(override) {
|
|
317
|
+
const resolved = resolveBaseUrlSafe(override);
|
|
318
|
+
if (resolved.error)
|
|
319
|
+
throw new Error(resolved.error);
|
|
320
|
+
return resolved.url;
|
|
321
|
+
}
|
|
182
322
|
/**
|
|
183
323
|
* Get effective config value with environment variable override
|
|
184
324
|
* Priority: env var > config file > default
|
|
@@ -192,10 +332,7 @@ export function getEffectiveValue(key) {
|
|
|
192
332
|
}
|
|
193
333
|
break;
|
|
194
334
|
case "baseUrl":
|
|
195
|
-
|
|
196
|
-
return process.env.SENDLY_BASE_URL;
|
|
197
|
-
}
|
|
198
|
-
break;
|
|
335
|
+
return resolveBaseUrlSafe().url;
|
|
199
336
|
case "defaultFormat":
|
|
200
337
|
if (process.env.SENDLY_OUTPUT_FORMAT) {
|
|
201
338
|
const format = process.env.SENDLY_OUTPUT_FORMAT.toLowerCase();
|
|
@@ -328,4 +465,4 @@ export function clearCurrentOrg() {
|
|
|
328
465
|
config.delete("currentOrgSlug");
|
|
329
466
|
}
|
|
330
467
|
export { config };
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUE2QnRDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLElBQUk7SUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FDUCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQjtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZTtRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUVsQyw0Q0FBNEM7QUFD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Z0IsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckIsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDTEkgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50XG4gKiBTdG9yZXMgdXNlciBwcmVmZXJlbmNlcyBhbmQgY3JlZGVudGlhbHMgaW4gfi8uc2VuZGx5L1xuICpcbiAqIEVudmlyb25tZW50IFZhcmlhYmxlcyAodGFrZSBwcmVjZWRlbmNlIG92ZXIgY29uZmlnIGZpbGUpOlxuICogLSBTRU5ETFlfQVBJX0tFWTogQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb25cbiAqIC0gU0VORExZX0JBU0VfVVJMOiBDdXN0b20gQVBJIGVuZHBvaW50XG4gKiAtIFNFTkRMWV9PVVRQVVRfRk9STUFUOiBEZWZhdWx0IG91dHB1dCBmb3JtYXQgKGh1bWFuL2pzb24pXG4gKiAtIFNFTkRMWV9OT19DT0xPUjogRGlzYWJsZSBjb2xvcmVkIG91dHB1dCAoYW55IHZhbHVlKVxuICogLSBTRU5ETFlfVElNRU9VVDogUmVxdWVzdCB0aW1lb3V0IGluIG1zIChkZWZhdWx0OiAzMDAwMClcbiAqIC0gU0VORExZX01BWF9SRVRSSUVTOiBNYXggcmV0cnkgYXR0ZW1wdHMgKGRlZmF1bHQ6IDMpXG4gKiAtIFNFTkRMWV9PUkdfSUQ6IE92ZXJyaWRlIGFjdGl2ZSBvcmdhbml6YXRpb24gSURcbiAqIC0gU0VORExZX0NPTkZJR19LRVk6IEN1c3RvbSBlbmNyeXB0aW9uIGtleSAoZm9yIENJL0NEKVxuICogLSBDSTogQXV0by1kZXRlY3QgQ0kgbW9kZSAoZGlzYWJsZXMgaW50ZXJhY3RpdmUgcHJvbXB0cylcbiAqL1xuXG5pbXBvcnQgQ29uZiBmcm9tIFwiY29uZlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZW5kbHlDb25maWcge1xuICAvLyBBdXRoZW50aWNhdGlvblxuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJlc0F0PzogbnVtYmVyO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuXG4gIC8vIEVudmlyb25tZW50XG4gIGVudmlyb25tZW50OiBcInRlc3RcIiB8IFwibGl2ZVwiO1xuICBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgLy8gUHJlZmVyZW5jZXNcbiAgZGVmYXVsdEZvcm1hdDogXCJodW1hblwiIHwgXCJqc29uXCI7XG4gIGNvbG9yRW5hYmxlZDogYm9vbGVhbjtcblxuICAvLyBOZXR3b3JrXG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgbWF4UmV0cmllczogbnVtYmVyO1xuXG4gIC8vIE9yZ2FuaXphdGlvblxuICBjdXJyZW50T3JnSWQ/OiBzdHJpbmc7XG4gIGN1cnJlbnRPcmdOYW1lPzogc3RyaW5nO1xuICBjdXJyZW50T3JnU2x1Zz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBydW5uaW5nIGluIENJIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NJKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoXG4gICAgcHJvY2Vzcy5lbnYuQ0kgfHxcbiAgICBwcm9jZXNzLmVudi5DT05USU5VT1VTX0lOVEVHUkFUSU9OIHx8XG4gICAgcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTlMgfHxcbiAgICBwcm9jZXNzLmVudi5HSVRMQUJfQ0kgfHxcbiAgICBwcm9jZXNzLmVudi5DSVJDTEVDSSB8fFxuICAgIHByb2Nlc3MuZW52LlRSQVZJUyB8fFxuICAgIHByb2Nlc3MuZW52LkJVSUxES0lURVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNvbG9yIG91dHB1dCBpcyBkaXNhYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoXG4gICAgcHJvY2Vzcy5lbnYuU0VORExZX05PX0NPTE9SIHx8XG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgfHxcbiAgICBwcm9jZXNzLmVudi5URVJNID09PSBcImR1bWJcIlxuICApO1xufVxuXG5jb25zdCBDT05GSUdfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgXCIuc2VuZGx5XCIpO1xuY29uc3QgQ09ORklHX0ZJTEUgPSBcImNvbmZpZy5qc29uXCI7XG5cbi8vIE9sZCBkZWZhdWx0IGtleSAtIHVzZWQgZm9yIG1pZ3JhdGlvbiBvbmx5XG5jb25zdCBPTERfREVGQVVMVF9LRVkgPSBcInNlbmRseS1jbGktZGVmYXVsdC1rZXktdjFcIjtcblxuLyoqXG4gKiBEZXJpdmUgYSBtYWNoaW5lLXNwZWNpZmljIGVuY3J5cHRpb24ga2V5LlxuICogVGhpcyBlbnN1cmVzIGVhY2ggaW5zdGFsbGF0aW9uIGhhcyBhIHVuaXF1ZSBrZXkgdGhhdCBjYW4ndCBiZSBlYXNpbHkgZ3Vlc3NlZC5cbiAqXG4gKiBUaGUga2V5IGlzIGRlcml2ZWQgZnJvbSBtYWNoaW5lLXNwZWNpZmljIGlkZW50aWZpZXJzIHRoYXQgYXJlOlxuICogLSBVbmlxdWUgcGVyIG1hY2hpbmVcbiAqIC0gU3RhYmxlIGFjcm9zcyBzZXNzaW9uc1xuICogLSBOb3QgcHVibGljbHkga25vd25cbiAqL1xuZnVuY3Rpb24gZGVyaXZlRW5jcnlwdGlvbktleSgpOiBzdHJpbmcge1xuICBjb25zdCBtYWNoaW5lSWQgPSBbb3MuaG9zdG5hbWUoKSwgb3MudXNlckluZm8oKS51c2VybmFtZSwgb3MuaG9tZWRpcigpXS5qb2luKFxuICAgIFwiOlwiLFxuICApO1xuXG4gIHJldHVybiBjcnlwdG9cbiAgICAuY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgIC51cGRhdGUoYHNlbmRseToke21hY2hpbmVJZH06djJgKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogR2V0IHRoZSBlbmNyeXB0aW9uIGtleSB0byB1c2UgZm9yIGNvbmZpZy5cbiAqIFByaW9yaXR5OiBTRU5ETFlfQ09ORklHX0tFWSBlbnYgdmFyID4gbWFjaGluZS1kZXJpdmVkIGtleVxuICovXG5mdW5jdGlvbiBnZXRFbmNyeXB0aW9uS2V5KCk6IHN0cmluZyB7XG4gIC8vIEV4cGxpY2l0IGtleSB0YWtlcyBwcmVjZWRlbmNlIChmb3IgQ0kvQ0QsIHRlc3RpbmcsIGFkdmFuY2VkIHVzZXJzKVxuICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX0NPTkZJR19LRVkpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX0NPTkZJR19LRVk7XG4gIH1cbiAgcmV0dXJuIGRlcml2ZUVuY3J5cHRpb25LZXkoKTtcbn1cblxuLy8gRW5zdXJlIGNvbmZpZyBkaXJlY3RvcnkgZXhpc3RzIHdpdGggc2VjdXJlIHBlcm1pc3Npb25zXG5pZiAoIWZzLmV4aXN0c1N5bmMoQ09ORklHX0RJUikpIHtcbiAgZnMubWtkaXJTeW5jKENPTkZJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbn1cblxuY29uc3QgREVGQVVMVF9DT05GSUc6IFNlbmRseUNvbmZpZyA9IHtcbiAgZW52aXJvbm1lbnQ6IFwidGVzdFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vc2VuZGx5LmxpdmVcIixcbiAgZGVmYXVsdEZvcm1hdDogXCJodW1hblwiLFxuICBjb2xvckVuYWJsZWQ6IHRydWUsXG4gIHRpbWVvdXQ6IDMwMDAwLFxuICBtYXhSZXRyaWVzOiAzLFxufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGNvbmZpZyB3aXRoIGF1dG9tYXRpYyBtaWdyYXRpb24gZnJvbSBvbGQgZW5jcnlwdGlvbiBrZXkuXG4gKiBUaGlzIGVuc3VyZXMgZXhpc3RpbmcgdXNlcnMgZG9uJ3QgbG9zZSB0aGVpciBjcmVkZW50aWFscy5cbiAqL1xuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbmZpZygpOiBDb25mPFNlbmRseUNvbmZpZz4ge1xuICBjb25zdCBuZXdLZXkgPSBnZXRFbmNyeXB0aW9uS2V5KCk7XG5cbiAgLy8gVHJ5IHRvIGluaXRpYWxpemUgd2l0aCBuZXcga2V5IGZpcnN0XG4gIHRyeSB7XG4gICAgY29uc3QgbmV3Q29uZmlnID0gbmV3IENvbmY8U2VuZGx5Q29uZmlnPih7XG4gICAgICBwcm9qZWN0TmFtZTogXCJzZW5kbHlcIixcbiAgICAgIGN3ZDogQ09ORklHX0RJUixcbiAgICAgIGNvbmZpZ05hbWU6IFwiY29uZmlnXCIsXG4gICAgICBkZWZhdWx0czogREVGQVVMVF9DT05GSUcsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBuZXdLZXksXG4gICAgfSk7XG5cbiAgICAvLyBUcnkgdG8gcmVhZCBhIHZhbHVlIHRvIHZlcmlmeSBkZWNyeXB0aW9uIHdvcmtzXG4gICAgbmV3Q29uZmlnLmdldChcImVudmlyb25tZW50XCIpO1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldyBrZXkgZGlkbid0IHdvcmsgLSB0cnkgbWlncmF0aW9uIGZyb20gb2xkIGtleVxuICB9XG5cbiAgLy8gTWlncmF0aW9uOiBUcnkgdG8gcmVhZCB3aXRoIG9sZCBkZWZhdWx0IGtleVxuICB0cnkge1xuICAgIGNvbnN0IG9sZENvbmZpZyA9IG5ldyBDb25mPFNlbmRseUNvbmZpZz4oe1xuICAgICAgcHJvamVjdE5hbWU6IFwic2VuZGx5XCIsXG4gICAgICBjd2Q6IENPTkZJR19ESVIsXG4gICAgICBjb25maWdOYW1lOiBcImNvbmZpZ1wiLFxuICAgICAgZGVmYXVsdHM6IERFRkFVTFRfQ09ORklHLFxuICAgICAgZW5jcnlwdGlvbktleTogT0xEX0RFRkFVTFRfS0VZLFxuICAgIH0pO1xuXG4gICAgLy8gUmVhZCBhbGwgZGF0YSB3aXRoIG9sZCBrZXlcbiAgICBjb25zdCBvbGREYXRhID0geyAuLi5vbGRDb25maWcuc3RvcmUgfTtcbiAgICBjb25zdCBoYXNEYXRhID0gT2JqZWN0LmtleXMob2xkRGF0YSkuc29tZShcbiAgICAgIChrKSA9PlxuICAgICAgICAhT2JqZWN0LmtleXMoREVGQVVMVF9DT05GSUcpLmluY2x1ZGVzKGspIHx8XG4gICAgICAgIG9sZERhdGFbayBhcyBrZXlvZiBTZW5kbHlDb25maWddICE9PVxuICAgICAgICAgIERFRkFVTFRfQ09ORklHW2sgYXMga2V5b2YgU2VuZGx5Q29uZmlnXSxcbiAgICApO1xuXG4gICAgaWYgKGhhc0RhdGEpIHtcbiAgICAgIC8vIENsZWFyIG9sZCBjb25maWcgZmlsZVxuICAgICAgb2xkQ29uZmlnLmNsZWFyKCk7XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgY29uZmlnIHdpdGggbmV3IGtleVxuICAgICAgY29uc3QgbmV3Q29uZmlnID0gbmV3IENvbmY8U2VuZGx5Q29uZmlnPih7XG4gICAgICAgIHByb2plY3ROYW1lOiBcInNlbmRseVwiLFxuICAgICAgICBjd2Q6IENPTkZJR19ESVIsXG4gICAgICAgIGNvbmZpZ05hbWU6IFwiY29uZmlnXCIsXG4gICAgICAgIGRlZmF1bHRzOiBERUZBVUxUX0NPTkZJRyxcbiAgICAgICAgZW5jcnlwdGlvbktleTogbmV3S2V5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlc3RvcmUgZGF0YSB3aXRoIG5ldyBlbmNyeXB0aW9uXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvbGREYXRhKSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld0NvbmZpZy5zZXQoa2V5IGFzIGtleW9mIFNlbmRseUNvbmZpZywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdDb25maWc7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBPbGQga2V5IGFsc28gZGlkbid0IHdvcmsgLSBjb3JydXB0ZWQgb3IgZnJlc2ggaW5zdGFsbFxuICB9XG5cbiAgLy8gRnJlc2ggaW5zdGFsbCBvciBjb3JydXB0ZWQuIElmIGEgY29uZmlnIGZpbGUgZXhpc3RzIGF0IHRoaXMgcG9pbnQsXG4gIC8vIGJvdGggdGhlIG5ldyBrZXkgYW5kIHRoZSBvbGQga2V5IGZhaWxlZCB0byBkZWNyeXB0IGl0IOKAlCB0aGF0IG1lYW5zXG4gIC8vIHRoZSBmaWxlIHdhcyB3cml0dGVuIGJ5IGEgZGlmZmVyZW50IG1hY2hpbmUsIGVuY3J5cHRlZCB3aXRoIGFcbiAgLy8gU0VORExZX0NPTkZJR19LRVkgdGhhdCBubyBsb25nZXIgbWF0Y2hlcywgb3IgZ290IGNvcnJ1cHRlZC5cbiAgLy8gQ29uc3RydWN0aW5nIGEgbmV3IENvbmZ7fSBoZXJlIHdvdWxkIGp1c3QgcmUtcmVhZCB0aGUgc2FtZSBmaWxlIGFuZFxuICAvLyB0aHJvdyB0aGUgc2FtZSBTeW50YXhFcnJvci4gTW92ZSBpdCBhc2lkZSBzbyB0aGUgdXNlciBrZWVwcyBhIGNvcHlcbiAgLy8gKGluIGNhc2UgdGhleSByZWNvdmVyIHRoZSBrZXkgbGF0ZXIpIGFuZCBzdGFydCBjbGVhbi5cbiAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgQ09ORklHX0ZJTEUpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFja3VwUGF0aCA9IGAke2ZpbGVQYXRofS5jb3JydXB0LiR7RGF0ZS5ub3coKX1gO1xuICAgICAgZnMucmVuYW1lU3luYyhmaWxlUGF0aCwgYmFja3VwUGF0aCk7XG4gICAgICAvLyBTdGF5IHF1aWV0IGJ5IGRlZmF1bHQg4oCUIG1vc3QgY2FsbGVycyBydW4gZWFybHkgaW4gdGhlIHByb2Nlc3NcbiAgICAgIC8vIGJlZm9yZSBvdXRwdXQgaGVscGVycyBhcmUgd2lyZWQuIEEgZGVidWcgYnJlYWRjcnVtYiBpcyBlbm91Z2guXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuREVCVUcpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoXG4gICAgICAgICAgYFtzZW5kbHldIENvdWxkIG5vdCBkZWNyeXB0ICR7ZmlsZVBhdGh9OyBtb3ZlZCB0byAke2JhY2t1cFBhdGh9IGFuZCBzdGFydGluZyBmcmVzaC4gUnVuICdzZW5kbHkgbG9naW4nIHRvIHJlLWF1dGhlbnRpY2F0ZS5cXG5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWYgd2UgY2FuJ3QgbW92ZSB0aGUgZmlsZSAocGVybWlzc2lvbnMsIEZTIGlzc3VlKSwgb3VyIGJlc3RcbiAgICAgIC8vIHJlbWFpbmluZyBvcHRpb24gaXMgdG8gZGVsZXRlIGl0IOKAlCBsb3NpbmcgaXQgaXMgc3RyaWN0bHkgYmV0dGVyXG4gICAgICAvLyB0aGFuIGNyYXNoaW5nIGV2ZXJ5IGNvbW1hbmQuXG4gICAgICB0cnkge1xuICAgICAgICBmcy51bmxpbmtTeW5jKGZpbGVQYXRoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBHaXZlIHVwIHNpbGVudGx5IGFuZCBsZXQgQ29uZiB0aHJvdyBpZiBpdCBtdXN0LlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgQ29uZjxTZW5kbHlDb25maWc+KHtcbiAgICBwcm9qZWN0TmFtZTogXCJzZW5kbHlcIixcbiAgICBjd2Q6IENPTkZJR19ESVIsXG4gICAgY29uZmlnTmFtZTogXCJjb25maWdcIixcbiAgICBkZWZhdWx0czogREVGQVVMVF9DT05GSUcsXG4gICAgZW5jcnlwdGlvbktleTogbmV3S2V5LFxuICB9KTtcbn1cblxuY29uc3QgY29uZmlnID0gaW5pdGlhbGl6ZUNvbmZpZygpO1xuXG4vKipcbiAqIEdldCBlZmZlY3RpdmUgY29uZmlnIHZhbHVlIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVcbiAqIFByaW9yaXR5OiBlbnYgdmFyID4gY29uZmlnIGZpbGUgPiBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZmZlY3RpdmVWYWx1ZTxLIGV4dGVuZHMga2V5b2YgU2VuZGx5Q29uZmlnPihcbiAga2V5OiBLLFxuKTogU2VuZGx5Q29uZmlnW0tdIHtcbiAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBcImFwaUtleVwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9BUElfS0VZKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWSBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYmFzZVVybFwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9CQVNFX1VSTCkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX0JBU0VfVVJMIGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkZWZhdWx0Rm9ybWF0XCI6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX09VVFBVVF9GT1JNQVQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gcHJvY2Vzcy5lbnYuU0VORExZX09VVFBVVF9GT1JNQVQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqc29uXCIgfHwgZm9ybWF0ID09PSBcImh1bWFuXCIpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0IGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNvbG9yRW5hYmxlZFwiOlxuICAgICAgaWYgKGlzQ29sb3JEaXNhYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZSBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidGltZW91dFwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9USU1FT1VUKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBwYXJzZUludChwcm9jZXNzLmVudi5TRU5ETFlfVElNRU9VVCwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKHRpbWVvdXQpICYmIHRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRpbWVvdXQgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibWF4UmV0cmllc1wiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9NQVhfUkVUUklFUykge1xuICAgICAgICBjb25zdCByZXRyaWVzID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU0VORExZX01BWF9SRVRSSUVTLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4ocmV0cmllcykgJiYgcmV0cmllcyA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHJpZXMgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3VycmVudE9yZ0lkXCI6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX09SR19JRCkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX09SR19JRCBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBjb25maWcgZmlsZSB2YWx1ZVxuICByZXR1cm4gY29uZmlnLmdldChrZXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnKCk6IFNlbmRseUNvbmZpZyB7XG4gIHJldHVybiBjb25maWcuc3RvcmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb25maWc8SyBleHRlbmRzIGtleW9mIFNlbmRseUNvbmZpZz4oXG4gIGtleTogSyxcbiAgdmFsdWU6IFNlbmRseUNvbmZpZ1tLXSxcbik6IHZvaWQge1xuICBjb25maWcuc2V0KGtleSwgdmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnVmFsdWU8SyBleHRlbmRzIGtleW9mIFNlbmRseUNvbmZpZz4oXG4gIGtleTogSyxcbik6IFNlbmRseUNvbmZpZ1tLXSB7XG4gIHJldHVybiBjb25maWcuZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZygpOiB2b2lkIHtcbiAgY29uZmlnLmNsZWFyKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckF1dGgoKTogdm9pZCB7XG4gIGNvbmZpZy5kZWxldGUoXCJhcGlLZXlcIik7XG4gIGNvbmZpZy5kZWxldGUoXCJhY2Nlc3NUb2tlblwiKTtcbiAgY29uZmlnLmRlbGV0ZShcInJlZnJlc2hUb2tlblwiKTtcbiAgY29uZmlnLmRlbGV0ZShcInRva2VuRXhwaXJlc0F0XCIpO1xuICBjb25maWcuZGVsZXRlKFwidXNlcklkXCIpO1xuICBjb25maWcuZGVsZXRlKFwiZW1haWxcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gIC8vIENoZWNrIGVudiB2YXIgZmlyc3RcbiAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9BUElfS0VZKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBhcGlLZXkgPSBjb25maWcuZ2V0KFwiYXBpS2V5XCIpO1xuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGNvbmZpZy5nZXQoXCJhY2Nlc3NUb2tlblwiKTtcbiAgcmV0dXJuICEhKGFwaUtleSB8fCBhY2Nlc3NUb2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGUgdGFrZXMgaGlnaGVzdCBwcmVjZWRlbmNlXG4gIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWSkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWTtcbiAgfVxuXG4gIC8vIFRoZW4gc3RvcmVkIEFQSSBrZXlcbiAgY29uc3QgYXBpS2V5ID0gY29uZmlnLmdldChcImFwaUtleVwiKTtcbiAgaWYgKGFwaUtleSkgcmV0dXJuIGFwaUtleTtcblxuICAvLyBGaW5hbGx5LCBhY2Nlc3MgdG9rZW4gKGlmIG5vdCBleHBpcmVkKVxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGNvbmZpZy5nZXQoXCJhY2Nlc3NUb2tlblwiKTtcbiAgY29uc3QgZXhwaXJlc0F0ID0gY29uZmlnLmdldChcInRva2VuRXhwaXJlc0F0XCIpO1xuXG4gIGlmIChhY2Nlc3NUb2tlbiAmJiBleHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA8IGV4cGlyZXNBdCkge1xuICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZWRBY2Nlc3NUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29uZmlnLmdldChcImFjY2Vzc1Rva2VuXCIpIHx8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFwaUtleShhcGlLZXk6IHN0cmluZyk6IHZvaWQge1xuICAvLyBWYWxpZGF0ZSBBUEkga2V5IGZvcm1hdFxuICBpZiAoIS9ec2tfKHRlc3R8bGl2ZSlfdjFfW2EtekEtWjAtOV8tXSskLy50ZXN0KGFwaUtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkludmFsaWQgQVBJIGtleSBmb3JtYXQuIEV4cGVjdGVkIHNrX3Rlc3RfdjFfeHh4IG9yIHNrX2xpdmVfdjFfeHh4XCIsXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpZy5zZXQoXCJhcGlLZXlcIiwgYXBpS2V5KTtcblxuICAvLyBTZXQgZW52aXJvbm1lbnQgYmFzZWQgb24ga2V5IHR5cGVcbiAgaWYgKGFwaUtleS5zdGFydHNXaXRoKFwic2tfdGVzdF9cIikpIHtcbiAgICBjb25maWcuc2V0KFwiZW52aXJvbm1lbnRcIiwgXCJ0ZXN0XCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5zZXQoXCJlbnZpcm9ubWVudFwiLCBcImxpdmVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dGhUb2tlbnMoXG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmcsXG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICBleHBpcmVzSW46IG51bWJlcixcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGVtYWlsOiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uZmlnLnNldChcImFjY2Vzc1Rva2VuXCIsIGFjY2Vzc1Rva2VuKTtcbiAgY29uZmlnLnNldChcInJlZnJlc2hUb2tlblwiLCByZWZyZXNoVG9rZW4pO1xuICBjb25maWcuc2V0KFwidG9rZW5FeHBpcmVzQXRcIiwgRGF0ZS5ub3coKSArIGV4cGlyZXNJbiAqIDEwMDApO1xuICBjb25maWcuc2V0KFwidXNlcklkXCIsIHVzZXJJZCk7XG4gIGNvbmZpZy5zZXQoXCJlbWFpbFwiLCBlbWFpbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLmpvaW4oQ09ORklHX0RJUiwgQ09ORklHX0ZJTEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnRGlyKCk6IHN0cmluZyB7XG4gIHJldHVybiBDT05GSUdfRElSO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudE9yZyhpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHNsdWc/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uZmlnLnNldChcImN1cnJlbnRPcmdJZFwiLCBpZCk7XG4gIGNvbmZpZy5zZXQoXCJjdXJyZW50T3JnTmFtZVwiLCBuYW1lKTtcbiAgaWYgKHNsdWcpIGNvbmZpZy5zZXQoXCJjdXJyZW50T3JnU2x1Z1wiLCBzbHVnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRPcmcoKToge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNsdWc/OiBzdHJpbmc7XG59IHwgbnVsbCB7XG4gIGNvbnN0IGlkID0gZ2V0RWZmZWN0aXZlVmFsdWUoXCJjdXJyZW50T3JnSWRcIik7XG4gIGNvbnN0IG5hbWUgPSBjb25maWcuZ2V0KFwiY3VycmVudE9yZ05hbWVcIik7XG4gIGlmICghaWQpIHJldHVybiBudWxsO1xuICByZXR1cm4geyBpZCwgbmFtZTogbmFtZSB8fCBpZCwgc2x1ZzogY29uZmlnLmdldChcImN1cnJlbnRPcmdTbHVnXCIpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckN1cnJlbnRPcmcoKTogdm9pZCB7XG4gIGNvbmZpZy5kZWxldGUoXCJjdXJyZW50T3JnSWRcIik7XG4gIGNvbmZpZy5kZWxldGUoXCJjdXJyZW50T3JnTmFtZVwiKTtcbiAgY29uZmlnLmRlbGV0ZShcImN1cnJlbnRPcmdTbHVnXCIpO1xufVxuXG5leHBvcnQgeyBjb25maWcgfTtcbiJdfQ==
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUE2QnRDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLElBQUk7SUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FDUCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQjtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU07UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZTtRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUVsQyw0Q0FBNEM7QUFD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QUFJO1FBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWE7SUFLM0IsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckIsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDTEkgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50XG4gKiBTdG9yZXMgdXNlciBwcmVmZXJlbmNlcyBhbmQgY3JlZGVudGlhbHMgaW4gfi8uc2VuZGx5L1xuICpcbiAqIEVudmlyb25tZW50IFZhcmlhYmxlcyAodGFrZSBwcmVjZWRlbmNlIG92ZXIgY29uZmlnIGZpbGUpOlxuICogLSBTRU5ETFlfQVBJX0tFWTogQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb25cbiAqIC0gU0VORExZX0JBU0VfVVJMOiBDdXN0b20gQVBJIGVuZHBvaW50IChhbGlhczogU0VORExZX0FQSV9VUkwpXG4gKiAtIFNFTkRMWV9PVVRQVVRfRk9STUFUOiBEZWZhdWx0IG91dHB1dCBmb3JtYXQgKGh1bWFuL2pzb24pXG4gKiAtIFNFTkRMWV9OT19DT0xPUjogRGlzYWJsZSBjb2xvcmVkIG91dHB1dCAoYW55IHZhbHVlKVxuICogLSBTRU5ETFlfVElNRU9VVDogUmVxdWVzdCB0aW1lb3V0IGluIG1zIChkZWZhdWx0OiAzMDAwMClcbiAqIC0gU0VORExZX01BWF9SRVRSSUVTOiBNYXggcmV0cnkgYXR0ZW1wdHMgKGRlZmF1bHQ6IDMpXG4gKiAtIFNFTkRMWV9PUkdfSUQ6IE92ZXJyaWRlIGFjdGl2ZSBvcmdhbml6YXRpb24gSURcbiAqIC0gU0VORExZX0NPTkZJR19LRVk6IEN1c3RvbSBlbmNyeXB0aW9uIGtleSAoZm9yIENJL0NEKVxuICogLSBDSTogQXV0by1kZXRlY3QgQ0kgbW9kZSAoZGlzYWJsZXMgaW50ZXJhY3RpdmUgcHJvbXB0cylcbiAqL1xuXG5pbXBvcnQgQ29uZiBmcm9tIFwiY29uZlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZW5kbHlDb25maWcge1xuICAvLyBBdXRoZW50aWNhdGlvblxuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJlc0F0PzogbnVtYmVyO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuXG4gIC8vIEVudmlyb25tZW50XG4gIGVudmlyb25tZW50OiBcInRlc3RcIiB8IFwibGl2ZVwiO1xuICBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgLy8gUHJlZmVyZW5jZXNcbiAgZGVmYXVsdEZvcm1hdDogXCJodW1hblwiIHwgXCJqc29uXCI7XG4gIGNvbG9yRW5hYmxlZDogYm9vbGVhbjtcblxuICAvLyBOZXR3b3JrXG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgbWF4UmV0cmllczogbnVtYmVyO1xuXG4gIC8vIE9yZ2FuaXphdGlvblxuICBjdXJyZW50T3JnSWQ/OiBzdHJpbmc7XG4gIGN1cnJlbnRPcmdOYW1lPzogc3RyaW5nO1xuICBjdXJyZW50T3JnU2x1Zz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBydW5uaW5nIGluIENJIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NJKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoXG4gICAgcHJvY2Vzcy5lbnYuQ0kgfHxcbiAgICBwcm9jZXNzLmVudi5DT05USU5VT1VTX0lOVEVHUkFUSU9OIHx8XG4gICAgcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVElPTlMgfHxcbiAgICBwcm9jZXNzLmVudi5HSVRMQUJfQ0kgfHxcbiAgICBwcm9jZXNzLmVudi5DSVJDTEVDSSB8fFxuICAgIHByb2Nlc3MuZW52LlRSQVZJUyB8fFxuICAgIHByb2Nlc3MuZW52LkJVSUxES0lURVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNvbG9yIG91dHB1dCBpcyBkaXNhYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISEoXG4gICAgcHJvY2Vzcy5lbnYuU0VORExZX05PX0NPTE9SIHx8XG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgfHxcbiAgICBwcm9jZXNzLmVudi5URVJNID09PSBcImR1bWJcIlxuICApO1xufVxuXG5jb25zdCBDT05GSUdfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgXCIuc2VuZGx5XCIpO1xuY29uc3QgQ09ORklHX0ZJTEUgPSBcImNvbmZpZy5qc29uXCI7XG5cbi8vIE9sZCBkZWZhdWx0IGtleSAtIHVzZWQgZm9yIG1pZ3JhdGlvbiBvbmx5XG5jb25zdCBPTERfREVGQVVMVF9LRVkgPSBcInNlbmRseS1jbGktZGVmYXVsdC1rZXktdjFcIjtcblxuLyoqXG4gKiBEZXJpdmUgYSBtYWNoaW5lLXNwZWNpZmljIGVuY3J5cHRpb24ga2V5LlxuICogVGhpcyBlbnN1cmVzIGVhY2ggaW5zdGFsbGF0aW9uIGhhcyBhIHVuaXF1ZSBrZXkgdGhhdCBjYW4ndCBiZSBlYXNpbHkgZ3Vlc3NlZC5cbiAqXG4gKiBUaGUga2V5IGlzIGRlcml2ZWQgZnJvbSBtYWNoaW5lLXNwZWNpZmljIGlkZW50aWZpZXJzIHRoYXQgYXJlOlxuICogLSBVbmlxdWUgcGVyIG1hY2hpbmVcbiAqIC0gU3RhYmxlIGFjcm9zcyBzZXNzaW9uc1xuICogLSBOb3QgcHVibGljbHkga25vd25cbiAqL1xuZnVuY3Rpb24gZGVyaXZlRW5jcnlwdGlvbktleSgpOiBzdHJpbmcge1xuICBjb25zdCBtYWNoaW5lSWQgPSBbb3MuaG9zdG5hbWUoKSwgb3MudXNlckluZm8oKS51c2VybmFtZSwgb3MuaG9tZWRpcigpXS5qb2luKFxuICAgIFwiOlwiLFxuICApO1xuXG4gIHJldHVybiBjcnlwdG9cbiAgICAuY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgIC51cGRhdGUoYHNlbmRseToke21hY2hpbmVJZH06djJgKVxuICAgIC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogR2V0IHRoZSBlbmNyeXB0aW9uIGtleSB0byB1c2UgZm9yIGNvbmZpZy5cbiAqIFByaW9yaXR5OiBTRU5ETFlfQ09ORklHX0tFWSBlbnYgdmFyID4gbWFjaGluZS1kZXJpdmVkIGtleVxuICovXG5mdW5jdGlvbiBnZXRFbmNyeXB0aW9uS2V5KCk6IHN0cmluZyB7XG4gIC8vIEV4cGxpY2l0IGtleSB0YWtlcyBwcmVjZWRlbmNlIChmb3IgQ0kvQ0QsIHRlc3RpbmcsIGFkdmFuY2VkIHVzZXJzKVxuICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX0NPTkZJR19LRVkpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VORExZX0NPTkZJR19LRVk7XG4gIH1cbiAgcmV0dXJuIGRlcml2ZUVuY3J5cHRpb25LZXkoKTtcbn1cblxuLy8gRW5zdXJlIGNvbmZpZyBkaXJlY3RvcnkgZXhpc3RzIHdpdGggc2VjdXJlIHBlcm1pc3Npb25zXG5pZiAoIWZzLmV4aXN0c1N5bmMoQ09ORklHX0RJUikpIHtcbiAgZnMubWtkaXJTeW5jKENPTkZJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbn1cblxuLyoqXG4gKiBUaGUgQVBJIGhvc3QgdXNlZCB3aGVuIG5vdGhpbmcgZWxzZSBpcyBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY29uc3QgUFJPRFVDVElPTl9CQVNFX1VSTCA9IFwiaHR0cHM6Ly9zZW5kbHkubGl2ZVwiO1xuXG5jb25zdCBERUZBVUxUX0NPTkZJRzogU2VuZGx5Q29uZmlnID0ge1xuICBlbnZpcm9ubWVudDogXCJ0ZXN0XCIsXG4gIGJhc2VVcmw6IFBST0RVQ1RJT05fQkFTRV9VUkwsXG4gIGRlZmF1bHRGb3JtYXQ6IFwiaHVtYW5cIixcbiAgY29sb3JFbmFibGVkOiB0cnVlLFxuICB0aW1lb3V0OiAzMDAwMCxcbiAgbWF4UmV0cmllczogMyxcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBjb25maWcgd2l0aCBhdXRvbWF0aWMgbWlncmF0aW9uIGZyb20gb2xkIGVuY3J5cHRpb24ga2V5LlxuICogVGhpcyBlbnN1cmVzIGV4aXN0aW5nIHVzZXJzIGRvbid0IGxvc2UgdGhlaXIgY3JlZGVudGlhbHMuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVDb25maWcoKTogQ29uZjxTZW5kbHlDb25maWc+IHtcbiAgY29uc3QgbmV3S2V5ID0gZ2V0RW5jcnlwdGlvbktleSgpO1xuXG4gIC8vIFRyeSB0byBpbml0aWFsaXplIHdpdGggbmV3IGtleSBmaXJzdFxuICB0cnkge1xuICAgIGNvbnN0IG5ld0NvbmZpZyA9IG5ldyBDb25mPFNlbmRseUNvbmZpZz4oe1xuICAgICAgcHJvamVjdE5hbWU6IFwic2VuZGx5XCIsXG4gICAgICBjd2Q6IENPTkZJR19ESVIsXG4gICAgICBjb25maWdOYW1lOiBcImNvbmZpZ1wiLFxuICAgICAgZGVmYXVsdHM6IERFRkFVTFRfQ09ORklHLFxuICAgICAgZW5jcnlwdGlvbktleTogbmV3S2V5LFxuICAgIH0pO1xuXG4gICAgLy8gVHJ5IHRvIHJlYWQgYSB2YWx1ZSB0byB2ZXJpZnkgZGVjcnlwdGlvbiB3b3Jrc1xuICAgIG5ld0NvbmZpZy5nZXQoXCJlbnZpcm9ubWVudFwiKTtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9IGNhdGNoIHtcbiAgICAvLyBOZXcga2V5IGRpZG4ndCB3b3JrIC0gdHJ5IG1pZ3JhdGlvbiBmcm9tIG9sZCBrZXlcbiAgfVxuXG4gIC8vIE1pZ3JhdGlvbjogVHJ5IHRvIHJlYWQgd2l0aCBvbGQgZGVmYXVsdCBrZXlcbiAgdHJ5IHtcbiAgICBjb25zdCBvbGRDb25maWcgPSBuZXcgQ29uZjxTZW5kbHlDb25maWc+KHtcbiAgICAgIHByb2plY3ROYW1lOiBcInNlbmRseVwiLFxuICAgICAgY3dkOiBDT05GSUdfRElSLFxuICAgICAgY29uZmlnTmFtZTogXCJjb25maWdcIixcbiAgICAgIGRlZmF1bHRzOiBERUZBVUxUX0NPTkZJRyxcbiAgICAgIGVuY3J5cHRpb25LZXk6IE9MRF9ERUZBVUxUX0tFWSxcbiAgICB9KTtcblxuICAgIC8vIFJlYWQgYWxsIGRhdGEgd2l0aCBvbGQga2V5XG4gICAgY29uc3Qgb2xkRGF0YSA9IHsgLi4ub2xkQ29uZmlnLnN0b3JlIH07XG4gICAgY29uc3QgaGFzRGF0YSA9IE9iamVjdC5rZXlzKG9sZERhdGEpLnNvbWUoXG4gICAgICAoaykgPT5cbiAgICAgICAgIU9iamVjdC5rZXlzKERFRkFVTFRfQ09ORklHKS5pbmNsdWRlcyhrKSB8fFxuICAgICAgICBvbGREYXRhW2sgYXMga2V5b2YgU2VuZGx5Q29uZmlnXSAhPT1cbiAgICAgICAgICBERUZBVUxUX0NPTkZJR1trIGFzIGtleW9mIFNlbmRseUNvbmZpZ10sXG4gICAgKTtcblxuICAgIGlmIChoYXNEYXRhKSB7XG4gICAgICAvLyBDbGVhciBvbGQgY29uZmlnIGZpbGVcbiAgICAgIG9sZENvbmZpZy5jbGVhcigpO1xuXG4gICAgICAvLyBDcmVhdGUgbmV3IGNvbmZpZyB3aXRoIG5ldyBrZXlcbiAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IG5ldyBDb25mPFNlbmRseUNvbmZpZz4oe1xuICAgICAgICBwcm9qZWN0TmFtZTogXCJzZW5kbHlcIixcbiAgICAgICAgY3dkOiBDT05GSUdfRElSLFxuICAgICAgICBjb25maWdOYW1lOiBcImNvbmZpZ1wiLFxuICAgICAgICBkZWZhdWx0czogREVGQVVMVF9DT05GSUcsXG4gICAgICAgIGVuY3J5cHRpb25LZXk6IG5ld0tleSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZXN0b3JlIGRhdGEgd2l0aCBuZXcgZW5jcnlwdGlvblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2xkRGF0YSkpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBuZXdDb25maWcuc2V0KGtleSBhcyBrZXlvZiBTZW5kbHlDb25maWcsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3Q29uZmlnO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gT2xkIGtleSBhbHNvIGRpZG4ndCB3b3JrIC0gY29ycnVwdGVkIG9yIGZyZXNoIGluc3RhbGxcbiAgfVxuXG4gIC8vIEZyZXNoIGluc3RhbGwgb3IgY29ycnVwdGVkLiBJZiBhIGNvbmZpZyBmaWxlIGV4aXN0cyBhdCB0aGlzIHBvaW50LFxuICAvLyBib3RoIHRoZSBuZXcga2V5IGFuZCB0aGUgb2xkIGtleSBmYWlsZWQgdG8gZGVjcnlwdCBpdCDigJQgdGhhdCBtZWFuc1xuICAvLyB0aGUgZmlsZSB3YXMgd3JpdHRlbiBieSBhIGRpZmZlcmVudCBtYWNoaW5lLCBlbmNyeXB0ZWQgd2l0aCBhXG4gIC8vIFNFTkRMWV9DT05GSUdfS0VZIHRoYXQgbm8gbG9uZ2VyIG1hdGNoZXMsIG9yIGdvdCBjb3JydXB0ZWQuXG4gIC8vIENvbnN0cnVjdGluZyBhIG5ldyBDb25me30gaGVyZSB3b3VsZCBqdXN0IHJlLXJlYWQgdGhlIHNhbWUgZmlsZSBhbmRcbiAgLy8gdGhyb3cgdGhlIHNhbWUgU3ludGF4RXJyb3IuIE1vdmUgaXQgYXNpZGUgc28gdGhlIHVzZXIga2VlcHMgYSBjb3B5XG4gIC8vIChpbiBjYXNlIHRoZXkgcmVjb3ZlciB0aGUga2V5IGxhdGVyKSBhbmQgc3RhcnQgY2xlYW4uXG4gIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKENPTkZJR19ESVIsIENPTkZJR19GSUxFKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhY2t1cFBhdGggPSBgJHtmaWxlUGF0aH0uY29ycnVwdC4ke0RhdGUubm93KCl9YDtcbiAgICAgIGZzLnJlbmFtZVN5bmMoZmlsZVBhdGgsIGJhY2t1cFBhdGgpO1xuICAgICAgLy8gU3RheSBxdWlldCBieSBkZWZhdWx0IOKAlCBtb3N0IGNhbGxlcnMgcnVuIGVhcmx5IGluIHRoZSBwcm9jZXNzXG4gICAgICAvLyBiZWZvcmUgb3V0cHV0IGhlbHBlcnMgYXJlIHdpcmVkLiBBIGRlYnVnIGJyZWFkY3J1bWIgaXMgZW5vdWdoLlxuICAgICAgaWYgKHByb2Nlc3MuZW52LkRFQlVHKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKFxuICAgICAgICAgIGBbc2VuZGx5XSBDb3VsZCBub3QgZGVjcnlwdCAke2ZpbGVQYXRofTsgbW92ZWQgdG8gJHtiYWNrdXBQYXRofSBhbmQgc3RhcnRpbmcgZnJlc2guIFJ1biAnc2VuZGx5IGxvZ2luJyB0byByZS1hdXRoZW50aWNhdGUuXFxuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElmIHdlIGNhbid0IG1vdmUgdGhlIGZpbGUgKHBlcm1pc3Npb25zLCBGUyBpc3N1ZSksIG91ciBiZXN0XG4gICAgICAvLyByZW1haW5pbmcgb3B0aW9uIGlzIHRvIGRlbGV0ZSBpdCDigJQgbG9zaW5nIGl0IGlzIHN0cmljdGx5IGJldHRlclxuICAgICAgLy8gdGhhbiBjcmFzaGluZyBldmVyeSBjb21tYW5kLlxuICAgICAgdHJ5IHtcbiAgICAgICAgZnMudW5saW5rU3luYyhmaWxlUGF0aCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gR2l2ZSB1cCBzaWxlbnRseSBhbmQgbGV0IENvbmYgdGhyb3cgaWYgaXQgbXVzdC5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IENvbmY8U2VuZGx5Q29uZmlnPih7XG4gICAgcHJvamVjdE5hbWU6IFwic2VuZGx5XCIsXG4gICAgY3dkOiBDT05GSUdfRElSLFxuICAgIGNvbmZpZ05hbWU6IFwiY29uZmlnXCIsXG4gICAgZGVmYXVsdHM6IERFRkFVTFRfQ09ORklHLFxuICAgIGVuY3J5cHRpb25LZXk6IG5ld0tleSxcbiAgfSk7XG59XG5cbmNvbnN0IGNvbmZpZyA9IGluaXRpYWxpemVDb25maWcoKTtcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBiYXNlIFVSTCBzdXBwbGllZCB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCAob3IgYSBmbGFnKTogdHJpbVxuICogc3Vycm91bmRpbmcgd2hpdGVzcGFjZSBhbmQgZHJvcCB0cmFpbGluZyBzbGFzaGVzIHNvIGNhbGxlcnMgY2FuIGFwcGVuZCBhXG4gKiBwYXRoIGRpcmVjdGx5LiBFbXB0eSBhbmQgd2hpdGVzcGFjZS1vbmx5IHZhbHVlcyBjb3VudCBhcyBcIm5vdCBzZXRcIi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmFzZVVybCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG4gIGlmICghdHJpbW1lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHRyaW1tZWQucmVwbGFjZSgvXFwvKyQvLCBcIlwiKSB8fCB0cmltbWVkO1xufVxuXG4vKipcbiAqIFRydWUgZm9yIGhvc3RzIHdob3NlIHRyYWZmaWMgbmV2ZXIgbGVhdmVzIHRoZSBtYWNoaW5lOiBgbG9jYWxob3N0YCBhbmQgYW55XG4gKiBgKi5sb2NhbGhvc3RgIG5hbWUsIHRoZSAxMjcuMC4wLjAvOCBibG9jaywgYW5kIElQdjYgYDo6MWAuXG4gKi9cbmZ1bmN0aW9uIGlzTG9vcGJhY2tIb3N0KGhvc3RuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgaG9zdCA9IGhvc3RuYW1lLnJlcGxhY2UoL15cXFsvLCBcIlwiKS5yZXBsYWNlKC9cXF0kLywgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChcbiAgICBob3N0ID09PSBcImxvY2FsaG9zdFwiIHx8XG4gICAgaG9zdC5lbmRzV2l0aChcIi5sb2NhbGhvc3RcIikgfHxcbiAgICBob3N0ID09PSBcIjo6MVwiIHx8XG4gICAgL14xMjdcXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30kLy50ZXN0KGhvc3QpXG4gICk7XG59XG5cbi8qKlxuICogVHJ1ZSBmb3IgdGhlIHByb2R1Y3Rpb24gQVBJIGhvc3QsIG9yIG9uZSBvZiBpdHMgc3ViZG9tYWlucywgb3ZlciBUTFMuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvZHVjdGlvbkhvc3QocGFyc2VkOiBVUkwpOiBib29sZWFuIHtcbiAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gXCJodHRwczpcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm9kdWN0aW9uID0gbmV3IFVSTChQUk9EVUNUSU9OX0JBU0VfVVJMKS5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBob3N0ID0gcGFyc2VkLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBob3N0ID09PSBwcm9kdWN0aW9uIHx8IGhvc3QuZW5kc1dpdGgoYC4ke3Byb2R1Y3Rpb259YCk7XG59XG5cbi8qKlxuICogVGhlIGtpbmQgb2YgY3JlZGVudGlhbCBhIHJlcXVlc3Qgd291bGQgY2FycnksIHVzaW5nIHRoZSBzYW1lIHJ1bGUgYXNcbiAqIGdldEF1dGhJbmZvKCk6IGEga2V5IGlzIFwidGVzdFwiIG9ubHkgd2hlbiBpdCBjYXJyaWVzIHRoZSBgc2tfdGVzdF9gIHByZWZpeC5cbiAqIFN0b3JlZCBzZXNzaW9uIHRva2VucyBjb3VudCBhcyBsaXZlIGJlY2F1c2UgdGhleSBhdXRob3JpemUgdGhlIHJlYWwgYWNjb3VudC5cbiAqL1xuZnVuY3Rpb24gYWN0aXZlQ3JlZGVudGlhbEtpbmQoKTogXCJsaXZlXCIgfCBcInRlc3RcIiB8IFwibm9uZVwiIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRBdXRoVG9rZW4oKTtcbiAgaWYgKCF0b2tlbikgcmV0dXJuIFwibm9uZVwiO1xuICByZXR1cm4gdG9rZW4uc3RhcnRzV2l0aChcInNrX3Rlc3RfXCIpID8gXCJ0ZXN0XCIgOiBcImxpdmVcIjtcbn1cblxuLyoqXG4gKiBDaGVjayBhIGJhc2UgVVJMIHN1cHBsaWVkIGZvciB0aGlzIHJ1biAoYSBmbGFnIG9yIGFuIGVudmlyb25tZW50IHZhcmlhYmxlKVxuICogYW5kIHJldHVybiB3aHkgaXQgaXMgdW51c2FibGUsIG9yIHVuZGVmaW5lZCB3aGVuIGl0IGlzIGZpbmUuXG4gKlxuICogQSBzdXBwbGllZCB2YWx1ZSBtdXN0IGJlIGFuIGBodHRwOi8vYCBvciBgaHR0cHM6Ly9gIG9yaWdpbiB3aXRoIG5vIHBhdGgsXG4gKiBxdWVyeSBvciBmcmFnbWVudCDigJQgdGhlIENMSSBhcHBlbmRzIHRoZSBBUEkgcGF0aCBpdHNlbGYsIHNvIGEgcGF0aCBoZXJlXG4gKiB3b3VsZCBiZSBkdXBsaWNhdGVkIGludG8gYC9hcGkvdjEvYXBpL3YxLy4uLmAuXG4gKlxuICogSXQgbXVzdCBhbHNvIGJlIGEgaG9zdCB0aGUgQ0xJIGlzIHdpbGxpbmcgdG8gaGFuZCBjcmVkZW50aWFscyB0by4gVGhlXG4gKiBwcm9kdWN0aW9uIGhvc3Qgb3ZlciBUTFMgYW5kIGxvb3BiYWNrIGFkZHJlc3NlcyBhbHdheXMgcXVhbGlmeS4gQW55d2hlcmVcbiAqIGVsc2UsIGEgbGl2ZSBBUEkga2V5IG9yIGEgc3RvcmVkIHNlc3Npb24gdG9rZW4gaXMgcmVmdXNlZCBvdXRyaWdodCwgYW5kIGFcbiAqIHRlc3Qga2V5IHN0aWxsIHJlcXVpcmVzIFRMUy4gVGhlIHN0b3JlZCBgYmFzZVVybGAgaW4gdGhlIGNvbmZpZyBmaWxlIGlzIG5vdFxuICogc3ViamVjdCB0byB0aGlzIGNoZWNrOiBpdCBpcyB3cml0dGVuIGJ5IGFuIGV4cGxpY2l0IGxvY2FsIGNvbW1hbmQgcmF0aGVyXG4gKiB0aGFuIHBpY2tlZCB1cCBmcm9tIHRoZSBhbWJpZW50IGVudmlyb25tZW50LlxuICovXG5mdW5jdGlvbiBjaGVja1N1cHBsaWVkQmFzZVVybCh2YWx1ZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGxldCBwYXJzZWQ6IFVSTDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBuZXcgVVJMKHZhbHVlKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGAke3NvdXJjZX0gaXMgbm90IGEgdmFsaWQgVVJMOiBcIiR7dmFsdWV9XCIuIFVzZSBhIGZ1bGwgb3JpZ2luLCBlLmcuIGh0dHBzOi8vc2VuZGx5LmxpdmVgO1xuICB9XG5cbiAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gXCJodHRwOlwiICYmIHBhcnNlZC5wcm90b2NvbCAhPT0gXCJodHRwczpcIikge1xuICAgIHJldHVybiBgJHtzb3VyY2V9IG11c3QgYmUgYW4gaHR0cDovLyBvciBodHRwczovLyBVUkw6IFwiJHt2YWx1ZX1cIi4gVXNlIGEgZnVsbCBvcmlnaW4sIGUuZy4gaHR0cDovL2xvY2FsaG9zdDo1MDAxYDtcbiAgfVxuXG4gIGlmIChwYXJzZWQucGF0aG5hbWUgIT09IFwiL1wiIHx8IHBhcnNlZC5zZWFyY2ggfHwgcGFyc2VkLmhhc2gpIHtcbiAgICByZXR1cm4gYCR7c291cmNlfSBtdXN0IGJlIGFuIG9yaWdpbiB3aXRoIG5vIHBhdGg6IFwiJHt2YWx1ZX1cIi4gVGhlIENMSSBhcHBlbmRzIHRoZSBBUEkgcGF0aCBpdHNlbGYsIHNvIHVzZSBcIiR7cGFyc2VkLm9yaWdpbn1cImA7XG4gIH1cblxuICBpZiAoaXNQcm9kdWN0aW9uSG9zdChwYXJzZWQpIHx8IGlzTG9vcGJhY2tIb3N0KHBhcnNlZC5ob3N0bmFtZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGFjdGl2ZUNyZWRlbnRpYWxLaW5kKCkgPT09IFwibGl2ZVwiKSB7XG4gICAgcmV0dXJuIGAke3NvdXJjZX0gcG9pbnRzIGF0ICR7cGFyc2VkLm9yaWdpbn0sIGJ1dCBhIGxpdmUgY3JlZGVudGlhbCBpcyBpbiB1c2UuIFJlZnVzaW5nIHRvIHNlbmQgYSBsaXZlIEFQSSBrZXkgdG8gYW55IGhvc3Qgb3RoZXIgdGhhbiAke1BST0RVQ1RJT05fQkFTRV9VUkx9IG9yIGEgbG9vcGJhY2sgYWRkcmVzcy4gVXNlIGEgdGVzdCBrZXkgKHNrX3Rlc3RfLi4uKSBvciBwb2ludCAke3NvdXJjZX0gYXQgaHR0cDovL2xvY2FsaG9zdDpQT1JUYDtcbiAgfVxuXG4gIGlmIChwYXJzZWQucHJvdG9jb2wgIT09IFwiaHR0cHM6XCIpIHtcbiAgICByZXR1cm4gYCR7c291cmNlfSBtdXN0IHVzZSBodHRwczovLyBmb3IgYSBob3N0IG90aGVyIHRoYW4gbG9jYWxob3N0OiBcIiR7dmFsdWV9XCIuIFJlZnVzaW5nIHRvIHNlbmQgY3JlZGVudGlhbHMgb3ZlciBjbGVhcnRleHQgaHR0cGA7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIHJlc29sdmluZyB0aGUgQVBJIGhvc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVVybFJlc29sdXRpb24ge1xuICAvKipcbiAgICogVGhlIHZhbHVlIGluIGVmZmVjdC4gV2hlbiBgZXJyb3JgIGlzIHNldCB0aGlzIGlzIHRoZSByZWplY3RlZCB2YWx1ZSwga2VwdFxuICAgKiBzbyBpdCBjYW4gYmUgc2hvd24gYmFjayB0byB0aGUgdXNlcjsgaXQgbXVzdCBub3QgYmUgdXNlZCBmb3IgYSByZXF1ZXN0LlxuICAgKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKiBXaGVyZSB0aGUgdmFsdWUgY2FtZSBmcm9tLCBwaHJhc2VkIGZvciB1c2UgaW4gYSBtZXNzYWdlLiAqL1xuICBzb3VyY2U6IHN0cmluZztcbiAgLyoqIFdoeSB0aGUgdmFsdWUgY2Fubm90IGJlIHVzZWQsIHdoZW4gaXQgY2Fubm90LiAqL1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBBUEkgaG9zdCB3aXRob3V0IHRocm93aW5nLlxuICpcbiAqIFJlc29sdXRpb24gb3JkZXIsIGhpZ2hlc3QgcHJpb3JpdHkgZmlyc3Q6XG4gKiAgIDEuIGBvdmVycmlkZWAgLSBhbiBleHBsaWNpdCBwZXItY29tbWFuZCB2YWx1ZS4gTm8gY29tbWFuZCBleHBvc2VzIGFcbiAqICAgICAgYmFzZS1VUkwgZmxhZyB0b2RheTsgdGhpcyBwYXJhbWV0ZXIgaXMgd2hlcmUgb25lIHdvdWxkIGZlZWQgaW4uXG4gKiAgIDIuIGBTRU5ETFlfQkFTRV9VUkxgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogICAzLiBgU0VORExZX0FQSV9VUkxgIGVudmlyb25tZW50IHZhcmlhYmxlIChvbGRlciBkb2N1bWVudGVkIHNwZWxsaW5nKS5cbiAqICAgNC4gYGJhc2VVcmxgIGluIHRoZSBjb25maWcgZmlsZSAoYHNlbmRseSBjb25maWcgc2V0IGJhc2VVcmwgLi4uYCkuXG4gKiAgIDUuIGBQUk9EVUNUSU9OX0JBU0VfVVJMYC5cbiAqXG4gKiBUaGlzIG1pcnJvcnMgaG93IHRoZSBBUEkga2V5IHJlc29sdmVzIGluIGdldEF1dGhUb2tlbigpOiB0aGUgZW52aXJvbm1lbnRcbiAqIHdpbnMgb3ZlciBzdG9yZWQgY29uZmlnLCBhbmQgYW4gZW1wdHkgdmFyaWFibGUgY291bnRzIGFzIHVuc2V0LiBWYWx1ZXMgZnJvbVxuICogdGhlIGVudmlyb25tZW50IG9yIGEgZmxhZyBhcmUgbm9ybWFsaXplZCBhbmQgY2hlY2tlZDsgdGhlIHN0b3JlZCBjb25maWdcbiAqIHZhbHVlIGlzIHJldHVybmVkIGV4YWN0bHkgYXMgd3JpdHRlbiBzbyBleGlzdGluZyBpbnN0YWxscyBhcmUgdW50b3VjaGVkLlxuICpcbiAqIFJlYWQtb25seSBjYWxsZXJzIChgY29uZmlnIGxpc3RgLCBgd2hvYW1pYCwgYGRvY3RvcmApIHVzZSB0aGlzIHNvIGEgYmFkXG4gKiB2YWx1ZSBjYW5ub3QgYnJlYWsgYSBjb21tYW5kIHRoYXQgbmV2ZXIgb3BlbnMgYSBzb2NrZXQuIEFueXRoaW5nIHRoYXQgaXNcbiAqIGFib3V0IHRvIG1ha2UgYSByZXF1ZXN0IHVzZXMgcmVzb2x2ZUJhc2VVcmwoKSBpbnN0ZWFkLlxuICpcbiAqIE5vdGUgdGhhdCBTRU5ETFlfQVBJX0JBU0UgaXMgZGVsaWJlcmF0ZWx5IG5vdCBjb25zdWx0ZWQ6IGVsc2V3aGVyZSBpbiB0aGVcbiAqIHRvb2xpbmcgdGhhdCBuYW1lIGNhcnJpZXMgYSB2ZXJzaW9uLXN1ZmZpeGVkIGJhc2UgKGAuLi4vYXBpL3YxYCksIGFuZCB0aGVcbiAqIENMSSBhcHBlbmRzIHRoZSB2ZXJzaW9uIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCYXNlVXJsU2FmZShvdmVycmlkZT86IHN0cmluZyk6IEJhc2VVcmxSZXNvbHV0aW9uIHtcbiAgY29uc3Qgc3VwcGxpZWQ6IFtzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZF1bXSA9IFtcbiAgICBbXCJUaGUgLS1iYXNlLXVybCB2YWx1ZVwiLCBvdmVycmlkZV0sXG4gICAgW1wiU0VORExZX0JBU0VfVVJMXCIsIHByb2Nlc3MuZW52LlNFTkRMWV9CQVNFX1VSTF0sXG4gICAgW1wiU0VORExZX0FQSV9VUkxcIiwgcHJvY2Vzcy5lbnYuU0VORExZX0FQSV9VUkxdLFxuICBdO1xuXG4gIGZvciAoY29uc3QgW3NvdXJjZSwgcmF3XSBvZiBzdXBwbGllZCkge1xuICAgIGNvbnN0IHVybCA9IG5vcm1hbGl6ZUJhc2VVcmwocmF3KTtcbiAgICBpZiAoIXVybCkgY29udGludWU7XG4gICAgY29uc3QgZXJyb3IgPSBjaGVja1N1cHBsaWVkQmFzZVVybCh1cmwsIHNvdXJjZSk7XG4gICAgcmV0dXJuIGVycm9yID8geyB1cmwsIHNvdXJjZSwgZXJyb3IgfSA6IHsgdXJsLCBzb3VyY2UgfTtcbiAgfVxuXG4gIGNvbnN0IHN0b3JlZCA9IGNvbmZpZy5nZXQoXCJiYXNlVXJsXCIpO1xuICByZXR1cm4gc3RvcmVkXG4gICAgPyB7IHVybDogc3RvcmVkLCBzb3VyY2U6IFwidGhlIGNvbmZpZyBmaWxlXCIgfVxuICAgIDogeyB1cmw6IFBST0RVQ1RJT05fQkFTRV9VUkwsIHNvdXJjZTogXCJ0aGUgYnVpbHQtaW4gZGVmYXVsdFwiIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgQVBJIGhvc3QgZm9yIGEgcmVxdWVzdCwgdGhyb3dpbmcgd2hlbiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgbm90XG4gKiBvbmUgdGhlIENMSSB3aWxsIHNlbmQgY3JlZGVudGlhbHMgdG8uIENhbGxlcnMgdGhhdCBvbmx5IGRpc3BsYXkgdGhlIGhvc3RcbiAqIHNob3VsZCB1c2UgcmVzb2x2ZUJhc2VVcmxTYWZlKCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQmFzZVVybChvdmVycmlkZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUJhc2VVcmxTYWZlKG92ZXJyaWRlKTtcbiAgaWYgKHJlc29sdmVkLmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzb2x2ZWQuZXJyb3IpO1xuICByZXR1cm4gcmVzb2x2ZWQudXJsO1xufVxuXG4vKipcbiAqIEdldCBlZmZlY3RpdmUgY29uZmlnIHZhbHVlIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVcbiAqIFByaW9yaXR5OiBlbnYgdmFyID4gY29uZmlnIGZpbGUgPiBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZmZlY3RpdmVWYWx1ZTxLIGV4dGVuZHMga2V5b2YgU2VuZGx5Q29uZmlnPihcbiAga2V5OiBLLFxuKTogU2VuZGx5Q29uZmlnW0tdIHtcbiAgLy8gRW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBcImFwaUtleVwiOlxuICAgICAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9BUElfS0VZKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi5TRU5ETFlfQVBJX0tFWSBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYmFzZVVybFwiOlxuICAgICAgcmV0dXJuIHJlc29sdmVCYXNlVXJsU2FmZSgpLnVybCBhcyBTZW5kbHlDb25maWdbS107XG4gICAgY2FzZSBcImRlZmF1bHRGb3JtYXRcIjpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfT1VUUFVUX0ZPUk1BVCkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBwcm9jZXNzLmVudi5TRU5ETFlfT1VUUFVUX0ZPUk1BVC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImpzb25cIiB8fCBmb3JtYXQgPT09IFwiaHVtYW5cIikge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQgYXMgU2VuZGx5Q29uZmlnW0tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY29sb3JFbmFibGVkXCI6XG4gICAgICBpZiAoaXNDb2xvckRpc2FibGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlIGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0aW1lb3V0XCI6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX1RJTUVPVVQpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlNFTkRMWV9USU1FT1VULCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4odGltZW91dCkgJiYgdGltZW91dCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGltZW91dCBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtYXhSZXRyaWVzXCI6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX01BWF9SRVRSSUVTKSB7XG4gICAgICAgIGNvbnN0IHJldHJpZXMgPSBwYXJzZUludChwcm9jZXNzLmVudi5TRU5ETFlfTUFYX1JFVFJJRVMsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihyZXRyaWVzKSAmJiByZXRyaWVzID49IDApIHtcbiAgICAgICAgICByZXR1cm4gcmV0cmllcyBhcyBTZW5kbHlDb25maWdbS107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjdXJyZW50T3JnSWRcIjpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TRU5ETFlfT1JHX0lEKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudi5TRU5ETFlfT1JHX0lEIGFzIFNlbmRseUNvbmZpZ1tLXTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGNvbmZpZyBmaWxlIHZhbHVlXG4gIHJldHVybiBjb25maWcuZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogU2VuZGx5Q29uZmlnIHtcbiAgcmV0dXJuIGNvbmZpZy5zdG9yZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbmZpZzxLIGV4dGVuZHMga2V5b2YgU2VuZGx5Q29uZmlnPihcbiAga2V5OiBLLFxuICB2YWx1ZTogU2VuZGx5Q29uZmlnW0tdLFxuKTogdm9pZCB7XG4gIGNvbmZpZy5zZXQoa2V5LCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdWYWx1ZTxLIGV4dGVuZHMga2V5b2YgU2VuZGx5Q29uZmlnPihcbiAga2V5OiBLLFxuKTogU2VuZGx5Q29uZmlnW0tdIHtcbiAgcmV0dXJuIGNvbmZpZy5nZXQoa2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ29uZmlnKCk6IHZvaWQge1xuICBjb25maWcuY2xlYXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQXV0aCgpOiB2b2lkIHtcbiAgY29uZmlnLmRlbGV0ZShcImFwaUtleVwiKTtcbiAgY29uZmlnLmRlbGV0ZShcImFjY2Vzc1Rva2VuXCIpO1xuICBjb25maWcuZGVsZXRlKFwicmVmcmVzaFRva2VuXCIpO1xuICBjb25maWcuZGVsZXRlKFwidG9rZW5FeHBpcmVzQXRcIik7XG4gIGNvbmZpZy5kZWxldGUoXCJ1c2VySWRcIik7XG4gIGNvbmZpZy5kZWxldGUoXCJlbWFpbFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgLy8gQ2hlY2sgZW52IHZhciBmaXJzdFxuICBpZiAocHJvY2Vzcy5lbnYuU0VORExZX0FQSV9LRVkpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGFwaUtleSA9IGNvbmZpZy5nZXQoXCJhcGlLZXlcIik7XG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gY29uZmlnLmdldChcImFjY2Vzc1Rva2VuXCIpO1xuICByZXR1cm4gISEoYXBpS2V5IHx8IGFjY2Vzc1Rva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhUb2tlbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBFbnZpcm9ubWVudCB2YXJpYWJsZSB0YWtlcyBoaWdoZXN0IHByZWNlZGVuY2VcbiAgaWYgKHByb2Nlc3MuZW52LlNFTkRMWV9BUElfS0VZKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LlNFTkRMWV9BUElfS0VZO1xuICB9XG5cbiAgLy8gVGhlbiBzdG9yZWQgQVBJIGtleVxuICBjb25zdCBhcGlLZXkgPSBjb25maWcuZ2V0KFwiYXBpS2V5XCIpO1xuICBpZiAoYXBpS2V5KSByZXR1cm4gYXBpS2V5O1xuXG4gIC8vIEZpbmFsbHksIGFjY2VzcyB0b2tlbiAoaWYgbm90IGV4cGlyZWQpXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gY29uZmlnLmdldChcImFjY2Vzc1Rva2VuXCIpO1xuICBjb25zdCBleHBpcmVzQXQgPSBjb25maWcuZ2V0KFwidG9rZW5FeHBpcmVzQXRcIik7XG5cbiAgaWYgKGFjY2Vzc1Rva2VuICYmIGV4cGlyZXNBdCAmJiBEYXRlLm5vdygpIDwgZXhwaXJlc0F0KSB7XG4gICAgcmV0dXJuIGFjY2Vzc1Rva2VuO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlZEFjY2Vzc1Rva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb25maWcuZ2V0KFwiYWNjZXNzVG9rZW5cIikgfHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXBpS2V5KGFwaUtleTogc3RyaW5nKTogdm9pZCB7XG4gIC8vIFZhbGlkYXRlIEFQSSBrZXkgZm9ybWF0XG4gIGlmICghL15za18odGVzdHxsaXZlKV92MV9bYS16QS1aMC05Xy1dKyQvLnRlc3QoYXBpS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiSW52YWxpZCBBUEkga2V5IGZvcm1hdC4gRXhwZWN0ZWQgc2tfdGVzdF92MV94eHggb3Igc2tfbGl2ZV92MV94eHhcIixcbiAgICApO1xuICB9XG5cbiAgY29uZmlnLnNldChcImFwaUtleVwiLCBhcGlLZXkpO1xuXG4gIC8vIFNldCBlbnZpcm9ubWVudCBiYXNlZCBvbiBrZXkgdHlwZVxuICBpZiAoYXBpS2V5LnN0YXJ0c1dpdGgoXCJza190ZXN0X1wiKSkge1xuICAgIGNvbmZpZy5zZXQoXCJlbnZpcm9ubWVudFwiLCBcInRlc3RcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLnNldChcImVudmlyb25tZW50XCIsIFwibGl2ZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXV0aFRva2VucyhcbiAgYWNjZXNzVG9rZW46IHN0cmluZyxcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmcsXG4gIGV4cGlyZXNJbjogbnVtYmVyLFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZW1haWw6IHN0cmluZyxcbik6IHZvaWQge1xuICBjb25maWcuc2V0KFwiYWNjZXNzVG9rZW5cIiwgYWNjZXNzVG9rZW4pO1xuICBjb25maWcuc2V0KFwicmVmcmVzaFRva2VuXCIsIHJlZnJlc2hUb2tlbik7XG4gIGNvbmZpZy5zZXQoXCJ0b2tlbkV4cGlyZXNBdFwiLCBEYXRlLm5vdygpICsgZXhwaXJlc0luICogMTAwMCk7XG4gIGNvbmZpZy5zZXQoXCJ1c2VySWRcIiwgdXNlcklkKTtcbiAgY29uZmlnLnNldChcImVtYWlsXCIsIGVtYWlsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1BhdGgoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGguam9pbihDT05GSUdfRElSLCBDT05GSUdfRklMRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdEaXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIENPTkZJR19ESVI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDdXJyZW50T3JnKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc2x1Zz86IHN0cmluZyk6IHZvaWQge1xuICBjb25maWcuc2V0KFwiY3VycmVudE9yZ0lkXCIsIGlkKTtcbiAgY29uZmlnLnNldChcImN1cnJlbnRPcmdOYW1lXCIsIG5hbWUpO1xuICBpZiAoc2x1ZykgY29uZmlnLnNldChcImN1cnJlbnRPcmdTbHVnXCIsIHNsdWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudE9yZygpOiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc2x1Zz86IHN0cmluZztcbn0gfCBudWxsIHtcbiAgY29uc3QgaWQgPSBnZXRFZmZlY3RpdmVWYWx1ZShcImN1cnJlbnRPcmdJZFwiKTtcbiAgY29uc3QgbmFtZSA9IGNvbmZpZy5nZXQoXCJjdXJyZW50T3JnTmFtZVwiKTtcbiAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7IGlkLCBuYW1lOiBuYW1lIHx8IGlkLCBzbHVnOiBjb25maWcuZ2V0KFwiY3VycmVudE9yZ1NsdWdcIikgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ3VycmVudE9yZygpOiB2b2lkIHtcbiAgY29uZmlnLmRlbGV0ZShcImN1cnJlbnRPcmdJZFwiKTtcbiAgY29uZmlnLmRlbGV0ZShcImN1cnJlbnRPcmdOYW1lXCIpO1xuICBjb25maWcuZGVsZXRlKFwiY3VycmVudE9yZ1NsdWdcIik7XG59XG5cbmV4cG9ydCB7IGNvbmZpZyB9O1xuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Help } from "@oclif/core";
|
|
2
|
+
/**
|
|
3
|
+
* Custom root help: prepend a GETTING STARTED block so a first-time user
|
|
4
|
+
* running `sendly --help` has a path from zero to authenticated without
|
|
5
|
+
* leaving the terminal (previously auth guidance lived only in the README
|
|
6
|
+
* and inside `login --help`).
|
|
7
|
+
*/
|
|
8
|
+
export default class SendlyHelp extends Help {
|
|
9
|
+
protected formatRoot(): string;
|
|
10
|
+
}
|
package/dist/lib/help.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Help } from "@oclif/core";
|
|
2
|
+
import { colors } from "./output.js";
|
|
3
|
+
/**
|
|
4
|
+
* Custom root help: prepend a GETTING STARTED block so a first-time user
|
|
5
|
+
* running `sendly --help` has a path from zero to authenticated without
|
|
6
|
+
* leaving the terminal (previously auth guidance lived only in the README
|
|
7
|
+
* and inside `login --help`).
|
|
8
|
+
*/
|
|
9
|
+
export default class SendlyHelp extends Help {
|
|
10
|
+
formatRoot() {
|
|
11
|
+
const base = super.formatRoot();
|
|
12
|
+
const gettingStarted = [
|
|
13
|
+
colors.dim("GETTING STARTED"),
|
|
14
|
+
` 1. ${colors.code("sendly login")} Authenticate in the browser (or set ${colors.code("SENDLY_API_KEY")})`,
|
|
15
|
+
` 2. ${colors.code("sendly onboarding")} Guided setup: key, sender, first message`,
|
|
16
|
+
` 3. ${colors.code("sendly send +447700900123 \"Hello\"")} Send your first message`,
|
|
17
|
+
"",
|
|
18
|
+
` Check your auth anytime with ${colors.code("sendly whoami")}.`,
|
|
19
|
+
].join("\n");
|
|
20
|
+
return `${base}\n\n${gettingStarted}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvaGVscC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLFVBQVcsU0FBUSxJQUFJO0lBQ2hDLFVBQVU7UUFDbEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7WUFDN0IsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtREFBbUQsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO1lBQ3RILFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpREFBaUQ7WUFDekYsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLDRCQUE0QjtZQUN0RixFQUFFO1lBQ0Ysa0NBQWtDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUc7U0FDbEUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDYixPQUFPLEdBQUcsSUFBSSxPQUFPLGNBQWMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhlbHAgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gXCIuL291dHB1dC5qc1wiO1xuXG4vKipcbiAqIEN1c3RvbSByb290IGhlbHA6IHByZXBlbmQgYSBHRVRUSU5HIFNUQVJURUQgYmxvY2sgc28gYSBmaXJzdC10aW1lIHVzZXJcbiAqIHJ1bm5pbmcgYHNlbmRseSAtLWhlbHBgIGhhcyBhIHBhdGggZnJvbSB6ZXJvIHRvIGF1dGhlbnRpY2F0ZWQgd2l0aG91dFxuICogbGVhdmluZyB0aGUgdGVybWluYWwgKHByZXZpb3VzbHkgYXV0aCBndWlkYW5jZSBsaXZlZCBvbmx5IGluIHRoZSBSRUFETUVcbiAqIGFuZCBpbnNpZGUgYGxvZ2luIC0taGVscGApLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZW5kbHlIZWxwIGV4dGVuZHMgSGVscCB7XG4gIHByb3RlY3RlZCBmb3JtYXRSb290KCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZSA9IHN1cGVyLmZvcm1hdFJvb3QoKTtcbiAgICBjb25zdCBnZXR0aW5nU3RhcnRlZCA9IFtcbiAgICAgIGNvbG9ycy5kaW0oXCJHRVRUSU5HIFNUQVJURURcIiksXG4gICAgICBgICAxLiAke2NvbG9ycy5jb2RlKFwic2VuZGx5IGxvZ2luXCIpfSAgICAgICAgICAgIEF1dGhlbnRpY2F0ZSBpbiB0aGUgYnJvd3NlciAob3Igc2V0ICR7Y29sb3JzLmNvZGUoXCJTRU5ETFlfQVBJX0tFWVwiKX0pYCxcbiAgICAgIGAgIDIuICR7Y29sb3JzLmNvZGUoXCJzZW5kbHkgb25ib2FyZGluZ1wiKX0gICAgICAgR3VpZGVkIHNldHVwOiBrZXksIHNlbmRlciwgZmlyc3QgbWVzc2FnZWAsXG4gICAgICBgICAzLiAke2NvbG9ycy5jb2RlKFwic2VuZGx5IHNlbmQgKzQ0NzcwMDkwMDEyMyBcXFwiSGVsbG9cXFwiXCIpfSAgIFNlbmQgeW91ciBmaXJzdCBtZXNzYWdlYCxcbiAgICAgIFwiXCIsXG4gICAgICBgICBDaGVjayB5b3VyIGF1dGggYW55dGltZSB3aXRoICR7Y29sb3JzLmNvZGUoXCJzZW5kbHkgd2hvYW1pXCIpfS5gLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYCR7YmFzZX1cXG5cXG4ke2dldHRpbmdTdGFydGVkfWA7XG4gIH1cbn1cbiJdfQ==
|
package/dist/lib/onboarding.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Handles quick-start flow for new users
|
|
4
4
|
*/
|
|
5
5
|
import { apiClient } from "./api-client.js";
|
|
6
|
-
import { setApiKey,
|
|
6
|
+
import { setApiKey, resolveBaseUrl } from "./config.js";
|
|
7
7
|
import { success, info, error, colors, spinner } from "./output.js";
|
|
8
8
|
import inquirer from "inquirer";
|
|
9
9
|
/**
|
|
@@ -117,7 +117,7 @@ async function runQuickStart() {
|
|
|
117
117
|
*/
|
|
118
118
|
async function openProductionOnboarding() {
|
|
119
119
|
try {
|
|
120
|
-
const baseUrl =
|
|
120
|
+
const baseUrl = resolveBaseUrl();
|
|
121
121
|
const onboardingUrl = `${baseUrl}/onboarding`;
|
|
122
122
|
console.log();
|
|
123
123
|
console.log(colors.bold("Opening browser for production setup..."));
|
|
@@ -155,4 +155,4 @@ export async function checkUpgradeNeeded(missingScopes) {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvb25ib2FyZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBK0JoQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCO0lBQ3pDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBbUIsd0JBQXdCLENBQUMsQ0FBQztRQUUvRSxzREFBc0Q7UUFDdEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7WUFDM0IsQ0FBQyxNQUFNLENBQUMsc0JBQXNCO1lBQzlCLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDbEIsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ2pDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2Isb0RBQW9EO1FBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlO0lBQ25DLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FB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QUM7UUFDYixLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztRQUN2RixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLGFBQXVCO0lBQzlELElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUM7UUFFckUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN4QztnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUscURBQXFEO2dCQUM5RCxPQUFPLEVBQUUsSUFBSTthQUNkO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sYUFBYSxFQUFFLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENMSSBPbmJvYXJkaW5nIHV0aWxpdGllc1xuICogSGFuZGxlcyBxdWljay1zdGFydCBmbG93IGZvciBuZXcgdXNlcnNcbiAqL1xuXG5pbXBvcnQgeyBhcGlDbGllbnQgfSBmcm9tIFwiLi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQgeyBzZXRBcGlLZXksIGdldENvbmZpZ1ZhbHVlIH0gZnJvbSBcIi4vY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBzdWNjZXNzLCBpbmZvLCBlcnJvciwgY29sb3JzLCBzcGlubmVyIH0gZnJvbSBcIi4vb3V0cHV0LmpzXCI7XG5pbXBvcnQgaW5xdWlyZXIgZnJvbSBcImlucXVpcmVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25ib2FyZGluZ1N0YXR1cyB7XG4gIG5lZWRzT25ib2FyZGluZzogYm9vbGVhbjtcbiAgb25ib2FyZGluZ0NvbXBsZXRlZDogYm9vbGVhbjtcbiAgY2xpT25ib2FyZGluZ0NvbXBsZXRlZD86IGJvb2xlYW47XG4gIGhhc0FwaUtleXM6IGJvb2xlYW47XG4gIGhhc1Rlc3RLZXk6IGJvb2xlYW47XG4gIGhhc0xpdmVLZXk6IGJvb2xlYW47XG4gIGhhc1ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgcmVjb21tZW5kZWRSb3V0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1aWNrU3RhcnRSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHR5cGU6IHN0cmluZztcbiAgYXBpS2V5OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBrZXk6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogXCJ0ZXN0XCIgfCBcImxpdmVcIjtcbiAgfTtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0ZXN0TnVtYmVyczogQXJyYXk8e1xuICAgIG51bWJlcjogc3RyaW5nO1xuICAgIGJlaGF2aW9yOiBzdHJpbmc7XG4gIH0+O1xuICBuZXh0U3RlcHM6IHN0cmluZ1tdO1xuICB3YXJuaW5nOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdXNlciBzaG91bGQgYmUgb2ZmZXJlZCBDTEkgcXVpY2stc3RhcnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3VsZE9mZmVyUXVpY2tTdGFydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBhcGlDbGllbnQuZ2V0PE9uYm9hcmRpbmdTdGF0dXM+KFwiL2FwaS9vbmJvYXJkaW5nL3N0YXR1c1wiKTtcbiAgICBcbiAgICAvLyBPbmx5IG9mZmVyIHF1aWNrLXN0YXJ0IGlmIHVzZXIgaGFzIGRvbmUgTk9USElORyB5ZXRcbiAgICByZXR1cm4gIXN0YXR1cy5vbmJvYXJkaW5nQ29tcGxldGVkICYmIFxuICAgICAgICAgICAhc3RhdHVzLmNsaU9uYm9hcmRpbmdDb21wbGV0ZWQgJiYgXG4gICAgICAgICAgICFzdGF0dXMuaGFzQXBpS2V5cyAmJiBcbiAgICAgICAgICAgIXN0YXR1cy5oYXNWZXJpZmljYXRpb247XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHdlIGNhbid0IGNoZWNrIHN0YXR1cywgZG9uJ3Qgb2ZmZXIgcXVpY2stc3RhcnRcbiAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNoZWNrIG9uYm9hcmRpbmcgc3RhdHVzOlwiLCBlcnIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIE9mZmVyIENMSSBxdWljay1zdGFydCB0byBuZXcgdXNlcnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9mZmVyUXVpY2tTdGFydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCLwn46JIFdlbGNvbWUgdG8gU2VuZGx5IVwiKSk7XG4gIGNvbnNvbGUubG9nKFwiTGV0J3MgZ2V0IHlvdSBzdGFydGVkIHdpdGggU01TIG1lc3NhZ2luZy5cIik7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgY29uc3QgeyBjaG9pY2UgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICBuYW1lOiBcImNob2ljZVwiLFxuICAgICAgbWVzc2FnZTogXCJXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRvP1wiLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCLwn6eqIFNldCB1cCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCAoMiBtaW51dGVzKVwiLFxuICAgICAgICAgIHZhbHVlOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgICAgc2hvcnQ6IFwiRGV2ZWxvcG1lbnQgc2V0dXBcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwi8J+MjSBTZXQgdXAgcHJvZHVjdGlvbiBtZXNzYWdpbmcgKGZ1bGwgdmVyaWZpY2F0aW9uKVwiLFxuICAgICAgICAgIHZhbHVlOiBcInByb2R1Y3Rpb25cIiwgXG4gICAgICAgICAgc2hvcnQ6IFwiUHJvZHVjdGlvbiBzZXR1cFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCLij60gIFNraXAgZm9yIG5vd1wiLFxuICAgICAgICAgIHZhbHVlOiBcInNraXBcIixcbiAgICAgICAgICBzaG9ydDogXCJTa2lwXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0pO1xuXG4gIHN3aXRjaCAoY2hvaWNlKSB7XG4gICAgY2FzZSBcImRldmVsb3BtZW50XCI6XG4gICAgICByZXR1cm4gYXdhaXQgcnVuUXVpY2tTdGFydCgpO1xuICAgIGNhc2UgXCJwcm9kdWN0aW9uXCI6XG4gICAgICByZXR1cm4gYXdhaXQgb3BlblByb2R1Y3Rpb25PbmJvYXJkaW5nKCk7XG4gICAgY2FzZSBcInNraXBcIjpcbiAgICAgIGluZm8oXCJZb3UgY2FuIHJ1biAnc2VuZGx5IG9uYm9hcmRpbmcnIGFueXRpbWUgdG8gc2V0IHVwIHlvdXIgYWNjb3VudC5cIik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biB0aGUgQ0xJIHF1aWNrLXN0YXJ0IGZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuUXVpY2tTdGFydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcXVpY2tTdGFydFNwaW5uZXIgPSBzcGlubmVyKFwiQ3JlYXRpbmcgeW91ciBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4uLlwiKTtcbiAgcXVpY2tTdGFydFNwaW5uZXIuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PFF1aWNrU3RhcnRSZXNwb25zZT4oXCIvYXBpL2NsaS9xdWljay1zdGFydFwiLCB7XG4gICAgICBpbnRlbnQ6IFwiZGV2ZWxvcG1lbnRcIixcbiAgICB9KTtcblxuICAgIHF1aWNrU3RhcnRTcGlubmVyLnN1Y2NlZWQoXCJEZXZlbG9wbWVudCBlbnZpcm9ubWVudCBjcmVhdGVkIVwiKTtcblxuICAgIC8vIFN0b3JlIHRoZSBBUEkga2V5IGZvciBpbW1lZGlhdGUgdXNlXG4gICAgc2V0QXBpS2V5KHJlc3VsdC5hcGlLZXkua2V5KTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgc3VjY2VzcyhcIlJlYWR5IHRvIGNvZGUhIPCfmoBcIiwge1xuICAgICAgXCJBUEkgS2V5XCI6IHJlc3VsdC5hcGlLZXkubmFtZSxcbiAgICAgIFwiRW52aXJvbm1lbnRcIjogY29sb3JzLndhcm5pbmcoXCJ0ZXN0XCIpLFxuICAgICAgXCJLZXkgVHlwZVwiOiByZXN1bHQuYXBpS2V5LnR5cGUsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiVGVzdCBOdW1iZXJzOlwiKSk7XG4gICAgcmVzdWx0LnRlc3ROdW1iZXJzLmZvckVhY2goKHsgbnVtYmVyLCBiZWhhdmlvciB9KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5wcmltYXJ5KG51bWJlcil9IC0gJHtjb2xvcnMuZGltKGJlaGF2aW9yKX1gKTtcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJOZXh0IFN0ZXBzOlwiKSk7XG4gICAgcmVzdWx0Lm5leHRTdGVwcy5mb3JFYWNoKChzdGVwLCBpKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgICAke2kgKyAxfS4gJHtzdGVwfWApO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIuKaoO+4jyBcIiArIHJlc3VsdC53YXJuaW5nKSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcXVpY2tTdGFydFNwaW5uZXIuZmFpbChcIkZhaWxlZCB0byBjcmVhdGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcIik7XG4gICAgXG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvcihlcnIubWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKFwiVW5rbm93biBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2V0dXBcIik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wZW4gYnJvd3NlciBmb3IgcHJvZHVjdGlvbiBvbmJvYXJkaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5Qcm9kdWN0aW9uT25ib2FyZGluZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2V0Q29uZmlnVmFsdWUoXCJiYXNlVXJsXCIpIHx8IFwiaHR0cHM6Ly9zZW5kbHkubGl2ZVwiO1xuICAgIGNvbnN0IG9uYm9hcmRpbmdVcmwgPSBgJHtiYXNlVXJsfS9vbmJvYXJkaW5nYDtcbiAgICBcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiT3BlbmluZyBicm93c2VyIGZvciBwcm9kdWN0aW9uIHNldHVwLi4uXCIpKTtcbiAgICBjb25zb2xlLmxvZyhgSWYgaXQgZG9lc24ndCBvcGVuIGF1dG9tYXRpY2FsbHksIHZpc2l0OiAke2NvbG9ycy5wcmltYXJ5KG9uYm9hcmRpbmdVcmwpfWApO1xuICAgIFxuICAgIGNvbnN0IG9wZW4gPSAoYXdhaXQgaW1wb3J0KFwib3BlblwiKSkuZGVmYXVsdDtcbiAgICBhd2FpdCBvcGVuKG9uYm9hcmRpbmdVcmwpO1xuICAgIFxuICAgIGluZm8oXCJDb21wbGV0ZSB0aGUgdmVyaWZpY2F0aW9uIGluIHlvdXIgYnJvd3NlciwgdGhlbiBydW4gJ3NlbmRseSB3aG9hbWknIHRvIGNoZWNrIHN0YXR1cy5cIik7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBEb24ndCBjb250aW51ZSBDTEkgZmxvd1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvcihcIkZhaWxlZCB0byBvcGVuIGJyb3dzZXIuIFBsZWFzZSB2aXNpdCBodHRwczovL3NlbmRseS5saXZlL29uYm9hcmRpbmcgbWFudWFsbHkuXCIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHVzZXIgbmVlZHMgdXBncmFkZSBmcm9tIENMSSBzZXNzaW9uIHRvIEFQSSBrZXlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrVXBncmFkZU5lZWRlZChtaXNzaW5nU2NvcGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobWlzc2luZ1Njb3Blcy5pbmNsdWRlcyhcInNtczpzZW5kXCIpKSB7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIvCflJIgU01TIG1lc3NhZ2luZyByZXF1aXJlcyBhbiBBUEkga2V5LlwiKSk7XG4gICAgXG4gICAgY29uc3QgeyB1cGdyYWRlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImNvbmZpcm1cIixcbiAgICAgICAgbmFtZTogXCJ1cGdyYWRlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiV291bGQgeW91IGxpa2UgdG8gc2V0IHVwIGEgZGV2ZWxvcG1lbnQgQVBJIGtleSBub3c/XCIsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIGF3YWl0IHJ1blF1aWNrU3RhcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyhcIllvdSBjYW4gcnVuICdzZW5kbHkgb25ib2FyZGluZycgYW55dGltZSB0byBzZXQgdXAgbWVzc2FnaW5nLlwiKTtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvb25ib2FyZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDO0FBK0JoQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCO0lBQ3pDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBbUIsd0JBQXdCLENBQUMsQ0FBQztRQUUvRSxzREFBc0Q7UUFDdEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7WUFDM0IsQ0FBQyxNQUFNLENBQUMsc0JBQXNCO1lBQzlCLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDbEIsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ2pDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2Isb0RBQW9EO1FBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlO0lBQ25DLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FB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K0UsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsYUFBdUI7SUFDOUQsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDdkMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHVDQUF1QyxDQUFDLENBQUMsQ0FBQztRQUVyRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3hDO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxxREFBcUQ7Z0JBQzlELE9BQU8sRUFBRSxJQUFJO2FBQ2Q7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxhQUFhLEVBQUUsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0xJIE9uYm9hcmRpbmcgdXRpbGl0aWVzXG4gKiBIYW5kbGVzIHF1aWNrLXN0YXJ0IGZsb3cgZm9yIG5ldyB1c2Vyc1xuICovXG5cbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuL2FwaS1jbGllbnQuanNcIjtcbmltcG9ydCB7IHNldEFwaUtleSwgcmVzb2x2ZUJhc2VVcmwgfSBmcm9tIFwiLi9jb25maWcuanNcIjtcbmltcG9ydCB7IHN1Y2Nlc3MsIGluZm8sIGVycm9yLCBjb2xvcnMsIHNwaW5uZXIgfSBmcm9tIFwiLi9vdXRwdXQuanNcIjtcbmltcG9ydCBpbnF1aXJlciBmcm9tIFwiaW5xdWlyZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPbmJvYXJkaW5nU3RhdHVzIHtcbiAgbmVlZHNPbmJvYXJkaW5nOiBib29sZWFuO1xuICBvbmJvYXJkaW5nQ29tcGxldGVkOiBib29sZWFuO1xuICBjbGlPbmJvYXJkaW5nQ29tcGxldGVkPzogYm9vbGVhbjtcbiAgaGFzQXBpS2V5czogYm9vbGVhbjtcbiAgaGFzVGVzdEtleTogYm9vbGVhbjtcbiAgaGFzTGl2ZUtleTogYm9vbGVhbjtcbiAgaGFzVmVyaWZpY2F0aW9uOiBib29sZWFuO1xuICByZWNvbW1lbmRlZFJvdXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVpY2tTdGFydFJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgdHlwZTogc3RyaW5nO1xuICBhcGlLZXk6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGtleTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBcInRlc3RcIiB8IFwibGl2ZVwiO1xuICB9O1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHRlc3ROdW1iZXJzOiBBcnJheTx7XG4gICAgbnVtYmVyOiBzdHJpbmc7XG4gICAgYmVoYXZpb3I6IHN0cmluZztcbiAgfT47XG4gIG5leHRTdGVwczogc3RyaW5nW107XG4gIHdhcm5pbmc6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB1c2VyIHNob3VsZCBiZSBvZmZlcmVkIENMSSBxdWljay1zdGFydFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvdWxkT2ZmZXJRdWlja1N0YXJ0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8T25ib2FyZGluZ1N0YXR1cz4oXCIvYXBpL29uYm9hcmRpbmcvc3RhdHVzXCIpO1xuICAgIFxuICAgIC8vIE9ubHkgb2ZmZXIgcXVpY2stc3RhcnQgaWYgdXNlciBoYXMgZG9uZSBOT1RISU5HIHlldFxuICAgIHJldHVybiAhc3RhdHVzLm9uYm9hcmRpbmdDb21wbGV0ZWQgJiYgXG4gICAgICAgICAgICFzdGF0dXMuY2xpT25ib2FyZGluZ0NvbXBsZXRlZCAmJiBcbiAgICAgICAgICAgIXN0YXR1cy5oYXNBcGlLZXlzICYmIFxuICAgICAgICAgICAhc3RhdHVzLmhhc1ZlcmlmaWNhdGlvbjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgY2hlY2sgc3RhdHVzLCBkb24ndCBvZmZlciBxdWljay1zdGFydFxuICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY2hlY2sgb25ib2FyZGluZyBzdGF0dXM6XCIsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogT2ZmZXIgQ0xJIHF1aWNrLXN0YXJ0IHRvIG5ldyB1c2Vyc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb2ZmZXJRdWlja1N0YXJ0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIvCfjokgV2VsY29tZSB0byBTZW5kbHkhXCIpKTtcbiAgY29uc29sZS5sb2coXCJMZXQncyBnZXQgeW91IHN0YXJ0ZWQgd2l0aCBTTVMgbWVzc2FnaW5nLlwiKTtcbiAgY29uc29sZS5sb2coKTtcblxuICBjb25zdCB7IGNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIG5hbWU6IFwiY2hvaWNlXCIsXG4gICAgICBtZXNzYWdlOiBcIldoYXQgd291bGQgeW91IGxpa2UgdG8gZG8/XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIvCfp6ogU2V0IHVwIGRldmVsb3BtZW50IGVudmlyb25tZW50ICgyIG1pbnV0ZXMpXCIsXG4gICAgICAgICAgdmFsdWU6IFwiZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgICBzaG9ydDogXCJEZXZlbG9wbWVudCBzZXR1cFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCLwn4yNIFNldCB1cCBwcm9kdWN0aW9uIG1lc3NhZ2luZyAoZnVsbCB2ZXJpZmljYXRpb24pXCIsXG4gICAgICAgICAgdmFsdWU6IFwicHJvZHVjdGlvblwiLCBcbiAgICAgICAgICBzaG9ydDogXCJQcm9kdWN0aW9uIHNldHVwXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIuKPrSAgU2tpcCBmb3Igbm93XCIsXG4gICAgICAgICAgdmFsdWU6IFwic2tpcFwiLFxuICAgICAgICAgIHNob3J0OiBcIlNraXBcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSk7XG5cbiAgc3dpdGNoIChjaG9pY2UpIHtcbiAgICBjYXNlIFwiZGV2ZWxvcG1lbnRcIjpcbiAgICAgIHJldHVybiBhd2FpdCBydW5RdWlja1N0YXJ0KCk7XG4gICAgY2FzZSBcInByb2R1Y3Rpb25cIjpcbiAgICAgIHJldHVybiBhd2FpdCBvcGVuUHJvZHVjdGlvbk9uYm9hcmRpbmcoKTtcbiAgICBjYXNlIFwic2tpcFwiOlxuICAgICAgaW5mbyhcIllvdSBjYW4gcnVuICdzZW5kbHkgb25ib2FyZGluZycgYW55dGltZSB0byBzZXQgdXAgeW91ciBhY2NvdW50LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUnVuIHRoZSBDTEkgcXVpY2stc3RhcnQgZmxvd1xuICovXG5hc3luYyBmdW5jdGlvbiBydW5RdWlja1N0YXJ0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBxdWlja1N0YXJ0U3Bpbm5lciA9IHNwaW5uZXIoXCJDcmVhdGluZyB5b3VyIGRldmVsb3BtZW50IGVudmlyb25tZW50Li4uXCIpO1xuICBxdWlja1N0YXJ0U3Bpbm5lci5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpQ2xpZW50LnBvc3Q8UXVpY2tTdGFydFJlc3BvbnNlPihcIi9hcGkvY2xpL3F1aWNrLXN0YXJ0XCIsIHtcbiAgICAgIGludGVudDogXCJkZXZlbG9wbWVudFwiLFxuICAgIH0pO1xuXG4gICAgcXVpY2tTdGFydFNwaW5uZXIuc3VjY2VlZChcIkRldmVsb3BtZW50IGVudmlyb25tZW50IGNyZWF0ZWQhXCIpO1xuXG4gICAgLy8gU3RvcmUgdGhlIEFQSSBrZXkgZm9yIGltbWVkaWF0ZSB1c2VcbiAgICBzZXRBcGlLZXkocmVzdWx0LmFwaUtleS5rZXkpO1xuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBzdWNjZXNzKFwiUmVhZHkgdG8gY29kZSEg8J+agFwiLCB7XG4gICAgICBcIkFQSSBLZXlcIjogcmVzdWx0LmFwaUtleS5uYW1lLFxuICAgICAgXCJFbnZpcm9ubWVudFwiOiBjb2xvcnMud2FybmluZyhcInRlc3RcIiksXG4gICAgICBcIktleSBUeXBlXCI6IHJlc3VsdC5hcGlLZXkudHlwZSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJUZXN0IE51bWJlcnM6XCIpKTtcbiAgICByZXN1bHQudGVzdE51bWJlcnMuZm9yRWFjaCgoeyBudW1iZXIsIGJlaGF2aW9yIH0pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLnByaW1hcnkobnVtYmVyKX0gLSAke2NvbG9ycy5kaW0oYmVoYXZpb3IpfWApO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIk5leHQgU3RlcHM6XCIpKTtcbiAgICByZXN1bHQubmV4dFN0ZXBzLmZvckVhY2goKHN0ZXAsIGkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7aSArIDF9LiAke3N0ZXB9YCk7XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy53YXJuaW5nKFwi4pqg77iPIFwiICsgcmVzdWx0Lndhcm5pbmcpKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBxdWlja1N0YXJ0U3Bpbm5lci5mYWlsKFwiRmFpbGVkIHRvIGNyZWF0ZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudFwiKTtcbiAgICBcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGVycm9yKGVyci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoXCJVbmtub3duIGVycm9yIG9jY3VycmVkIGR1cmluZyBzZXR1cFwiKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogT3BlbiBicm93c2VyIGZvciBwcm9kdWN0aW9uIG9uYm9hcmRpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3BlblByb2R1Y3Rpb25PbmJvYXJkaW5nKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VVcmwgPSByZXNvbHZlQmFzZVVybCgpO1xuICAgIGNvbnN0IG9uYm9hcmRpbmdVcmwgPSBgJHtiYXNlVXJsfS9vbmJvYXJkaW5nYDtcbiAgICBcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiT3BlbmluZyBicm93c2VyIGZvciBwcm9kdWN0aW9uIHNldHVwLi4uXCIpKTtcbiAgICBjb25zb2xlLmxvZyhgSWYgaXQgZG9lc24ndCBvcGVuIGF1dG9tYXRpY2FsbHksIHZpc2l0OiAke2NvbG9ycy5wcmltYXJ5KG9uYm9hcmRpbmdVcmwpfWApO1xuICAgIFxuICAgIGNvbnN0IG9wZW4gPSAoYXdhaXQgaW1wb3J0KFwib3BlblwiKSkuZGVmYXVsdDtcbiAgICBhd2FpdCBvcGVuKG9uYm9hcmRpbmdVcmwpO1xuICAgIFxuICAgIGluZm8oXCJDb21wbGV0ZSB0aGUgdmVyaWZpY2F0aW9uIGluIHlvdXIgYnJvd3NlciwgdGhlbiBydW4gJ3NlbmRseSB3aG9hbWknIHRvIGNoZWNrIHN0YXR1cy5cIik7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBEb24ndCBjb250aW51ZSBDTEkgZmxvd1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvcihcIkZhaWxlZCB0byBvcGVuIGJyb3dzZXIuIFBsZWFzZSB2aXNpdCBodHRwczovL3NlbmRseS5saXZlL29uYm9hcmRpbmcgbWFudWFsbHkuXCIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHVzZXIgbmVlZHMgdXBncmFkZSBmcm9tIENMSSBzZXNzaW9uIHRvIEFQSSBrZXlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrVXBncmFkZU5lZWRlZChtaXNzaW5nU2NvcGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobWlzc2luZ1Njb3Blcy5pbmNsdWRlcyhcInNtczpzZW5kXCIpKSB7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMud2FybmluZyhcIvCflJIgU01TIG1lc3NhZ2luZyByZXF1aXJlcyBhbiBBUEkga2V5LlwiKSk7XG4gICAgXG4gICAgY29uc3QgeyB1cGdyYWRlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcImNvbmZpcm1cIixcbiAgICAgICAgbmFtZTogXCJ1cGdyYWRlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiV291bGQgeW91IGxpa2UgdG8gc2V0IHVwIGEgZGV2ZWxvcG1lbnQgQVBJIGtleSBub3c/XCIsXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIGF3YWl0IHJ1blF1aWNrU3RhcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyhcIllvdSBjYW4gcnVuICdzZW5kbHkgb25ib2FyZGluZycgYW55dGltZSB0byBzZXQgdXAgbWVzc2FnaW5nLlwiKTtcbiAgICB9XG4gIH1cbn0iXX0=
|