@dbx-tools/cli 0.9.154 → 0.9.157
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/bin/dbx-genie.ts +3 -2
- package/index.appkit.ts +9 -0
- package/index.auth.ts +9 -0
- package/index.brand.ts +18 -0
- package/index.genie-code.ts +18 -0
- package/index.graphiti.ts +7 -0
- package/index.lakebase-proxy.ts +18 -0
- package/index.model-gateway.ts +9 -0
- package/index.ts +5 -61
- package/index.tunnel.ts +14 -0
- package/lib/bin/dbx-genie.js +4 -3
- package/lib/index.appkit.d.ts +5 -0
- package/lib/index.appkit.js +8 -0
- package/lib/index.auth.d.ts +5 -0
- package/lib/index.auth.js +8 -0
- package/lib/index.brand.d.ts +14 -0
- package/lib/index.brand.js +14 -0
- package/lib/index.d.ts +5 -61
- package/lib/index.genie-code.d.ts +14 -0
- package/lib/index.genie-code.js +14 -0
- package/lib/index.graphiti.d.ts +3 -0
- package/lib/index.graphiti.js +6 -0
- package/lib/index.js +6 -43
- package/lib/index.lakebase-proxy.d.ts +14 -0
- package/lib/index.lakebase-proxy.js +14 -0
- package/lib/index.model-gateway.d.ts +5 -0
- package/lib/index.model-gateway.js +8 -0
- package/lib/index.tunnel.d.ts +10 -0
- package/lib/index.tunnel.js +12 -0
- package/lib/src/appkit/cli.d.ts +1 -2
- package/lib/src/appkit/cli.js +4 -5
- package/lib/src/auth/cli.d.ts +2 -2
- package/lib/src/auth/cli.js +2 -3
- package/lib/src/auth/options.d.ts +2 -2
- package/lib/src/auth/options.js +4 -6
- package/lib/src/bootstrap.js +10 -14
- package/lib/src/brand/options.js +2 -2
- package/lib/src/brand/run.js +6 -8
- package/lib/src/brand/showcase.js +5 -5
- package/lib/src/bun.js +6 -6
- package/lib/src/genie-code/cli.d.ts +2 -2
- package/lib/src/genie-code/cli.js +4 -4
- package/lib/src/genie-code/config.d.ts +1 -1
- package/lib/src/genie-code/config.js +7 -7
- package/lib/src/genie-code/install.d.ts +2 -2
- package/lib/src/genie-code/install.js +4 -4
- package/lib/src/genie-code/runner.d.ts +2 -3
- package/lib/src/genie-code/runner.js +13 -11
- package/lib/src/genie-code/runtime.d.ts +3 -3
- package/lib/src/genie-code/runtime.js +10 -9
- package/lib/src/graphiti/cli.d.ts +2 -3
- package/lib/src/graphiti/cli.js +7 -8
- package/lib/src/lakebase-proxy/cli.d.ts +1 -2
- package/lib/src/lakebase-proxy/cli.js +3 -4
- package/lib/src/lakebase-proxy/options.js +7 -9
- package/lib/src/lakebase-proxy/proxy.js +8 -8
- package/lib/src/model-gateway/cli.d.ts +2 -3
- package/lib/src/model-gateway/cli.js +3 -4
- package/lib/src/model-gateway/server.d.ts +1 -1
- package/lib/src/model-gateway/server.js +5 -6
- package/lib/src/root.js +3 -3
- package/lib/src/tunnel/app.js +7 -9
- package/lib/src/tunnel/cli.d.ts +1 -2
- package/lib/src/tunnel/cli.js +13 -14
- package/lib/src/tunnel/options.d.ts +5 -5
- package/lib/src/tunnel/options.js +11 -11
- package/lib/src/tunnel/proxy.js +18 -17
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +58 -177
- package/src/appkit/cli.ts +2 -4
- package/src/auth/cli.ts +2 -4
- package/src/auth/options.ts +3 -5
- package/src/bootstrap.ts +9 -13
- package/src/brand/options.ts +1 -1
- package/src/brand/run.ts +7 -7
- package/src/brand/showcase.ts +4 -4
- package/src/bun.ts +6 -6
- package/src/genie-code/cli.ts +4 -4
- package/src/genie-code/config.ts +6 -6
- package/src/genie-code/install.ts +5 -7
- package/src/genie-code/runner.ts +12 -11
- package/src/genie-code/runtime.ts +10 -10
- package/src/graphiti/cli.ts +13 -9
- package/src/lakebase-proxy/cli.ts +7 -3
- package/src/lakebase-proxy/options.ts +13 -8
- package/src/lakebase-proxy/proxy.ts +7 -7
- package/src/model-gateway/cli.ts +7 -3
- package/src/model-gateway/server.ts +9 -5
- package/src/root.ts +2 -2
- package/src/tunnel/app.ts +6 -8
- package/src/tunnel/cli.ts +21 -15
- package/src/tunnel/options.ts +23 -15
- package/src/tunnel/proxy.ts +29 -20
- package/lib/src/appkit/index.d.ts +0 -5
- package/lib/src/appkit/index.js +0 -8
- package/lib/src/auth/index.d.ts +0 -5
- package/lib/src/auth/index.js +0 -8
- package/lib/src/brand/index.d.ts +0 -10
- package/lib/src/brand/index.js +0 -10
- package/lib/src/genie-code/index.d.ts +0 -12
- package/lib/src/genie-code/index.js +0 -12
- package/lib/src/genie-code/options.d.ts +0 -7
- package/lib/src/genie-code/options.js +0 -7
- package/lib/src/graphiti/index.d.ts +0 -5
- package/lib/src/graphiti/index.js +0 -7
- package/lib/src/graphiti/options.d.ts +0 -117
- package/lib/src/graphiti/options.js +0 -26
- package/lib/src/lakebase-proxy/index.d.ts +0 -13
- package/lib/src/lakebase-proxy/index.js +0 -13
- package/lib/src/model-gateway/index.d.ts +0 -3
- package/lib/src/model-gateway/index.js +0 -6
- package/lib/src/tunnel/index.d.ts +0 -8
- package/lib/src/tunnel/index.js +0 -10
- package/src/appkit/index.ts +0 -9
- package/src/auth/index.ts +0 -9
- package/src/brand/index.ts +0 -14
- package/src/genie-code/index.ts +0 -16
- package/src/genie-code/options.ts +0 -14
- package/src/graphiti/index.ts +0 -9
- package/src/graphiti/options.ts +0 -40
- package/src/lakebase-proxy/index.ts +0 -17
- package/src/model-gateway/index.ts +0 -7
- package/src/tunnel/index.ts +0 -12
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { createHash, timingSafeEqual } from "node:crypto";
|
|
7
7
|
import { createApp, server } from "@databricks/appkit";
|
|
8
|
-
import { ModelGateway } from "@dbx-tools/appkit-model-gateway";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { resolveModelGatewayOptions, } from "@dbx-tools/shared-model-gateway/options";
|
|
8
|
+
import { ModelGateway, sendHealth, sendInference, sendModels, } from "@dbx-tools/appkit-model-gateway";
|
|
9
|
+
import { createWorkspaceClient } from "@dbx-tools/databricks";
|
|
10
|
+
import { resolveModelGatewayOptions, } from "@dbx-tools/shared-model-gateway";
|
|
12
11
|
/** Resolve AppKit server settings for the loopback model gateway. */
|
|
13
12
|
export function modelGatewayServerOptions(options = {}) {
|
|
14
13
|
return appKitServerOptions(resolveModelGatewayOptions(options));
|
|
@@ -53,7 +52,7 @@ export async function startModelGateway(options = {}) {
|
|
|
53
52
|
...(resolved.modelClass ? { modelClass: resolved.modelClass } : {}),
|
|
54
53
|
preferSystemModels: resolved.preferSystemModels,
|
|
55
54
|
});
|
|
56
|
-
const client = await
|
|
55
|
+
const client = await createWorkspaceClient({
|
|
57
56
|
...(resolved.profile ? { profile: resolved.profile } : {}),
|
|
58
57
|
});
|
|
59
58
|
await createApp({
|
|
@@ -84,4 +83,4 @@ export async function startModelGateway(options = {}) {
|
|
|
84
83
|
},
|
|
85
84
|
});
|
|
86
85
|
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsLWdhdGV3YXkvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLGFBQWEsRUFDYixVQUFVLEdBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsMEJBQTBCLEdBRzNCLE1BQU0saUNBQWlDLENBQUM7QUFLekMscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxVQUErQixFQUFFO0lBQ3pFLE9BQU8sbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFvQztJQUMvRCxPQUFPO1FBQ0wsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDekIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSTtLQUMxQixDQUFDO0FBQ0osQ0FBQztBQUVELGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsS0FBYTtJQUNuRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdELE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLE9BQU8s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QUFDO29CQUN0QyxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2lCQUMvQixFQUFFLENBQUM7b0JBQ1gsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUU7d0JBQzNDLEtBQUssYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUMzRCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9yZWdyb3VuZCBtb2RlbC1nYXRld2F5IHNlcnZlciBvd25lZCBieSB0aGUgQ0xJIHBhY2thZ2UuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2gsIHRpbWluZ1NhZmVFcXVhbCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBNb2RlbEdhdGV3YXksXG4gIHNlbmRIZWFsdGgsXG4gIHNlbmRJbmZlcmVuY2UsXG4gIHNlbmRNb2RlbHMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5pbXBvcnQgeyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRieC10b29scy9kYXRhYnJpY2tzXCI7XG5pbXBvcnQge1xuICByZXNvbHZlTW9kZWxHYXRld2F5T3B0aW9ucyxcbiAgdHlwZSBNb2RlbEdhdGV3YXlPcHRpb25zLFxuICB0eXBlIFJlc29sdmVkTW9kZWxHYXRld2F5T3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcblxudHlwZSBBcHBLaXRTZXJ2ZXJPcHRpb25zID0gTm9uTnVsbGFibGU8UGFyYW1ldGVyczx0eXBlb2Ygc2VydmVyPlswXT47XG5cbi8qKiBSZXNvbHZlIEFwcEtpdCBzZXJ2ZXIgc2V0dGluZ3MgZm9yIHRoZSBsb29wYmFjayBtb2RlbCBnYXRld2F5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsR2F0ZXdheVNlcnZlck9wdGlvbnMob3B0aW9uczogTW9kZWxHYXRld2F5T3B0aW9ucyA9IHt9KTogQXBwS2l0U2VydmVyT3B0aW9ucyB7XG4gIHJldHVybiBhcHBLaXRTZXJ2ZXJPcHRpb25zKHJlc29sdmVNb2RlbEdhdGV3YXlPcHRpb25zKG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gYXBwS2l0U2VydmVyT3B0aW9ucyhvcHRpb25zOiBSZXNvbHZlZE1vZGVsR2F0ZXdheU9wdGlvbnMpOiBBcHBLaXRTZXJ2ZXJPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBib2R5TGltaXQ6IG9wdGlvbnMuYm9keUxpbWl0LFxuICAgIGhvc3Q6IG9wdGlvbnMubGlzdGVuLmhvc3QsXG4gICAgcG9ydDogb3B0aW9ucy5saXN0ZW4ucG9ydCxcbiAgfTtcbn1cblxuLyoqIFJlcXVpcmUgb25lIGJlYXJlciB0b2tlbiB3aXRob3V0IHJldGFpbmluZyBvciBsb2dnaW5nIHJlcXVlc3QgY3JlZGVudGlhbHMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2F0ZXdheUJlYXJlck1pZGRsZXdhcmUodG9rZW46IHN0cmluZyk6IGV4cHJlc3MuUmVxdWVzdEhhbmRsZXIge1xuICBjb25zdCBleHBlY3RlZCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHRva2VuKS5kaWdlc3QoKTtcbiAgcmV0dXJuIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSByZXF1ZXN0LmhlYWRlcihcImF1dGhvcml6YXRpb25cIik7XG4gICAgY29uc3QgbWF0Y2ggPSAvXkJlYXJlclxccysoLispJC9pLmV4ZWMoYXV0aG9yaXphdGlvbiA/PyBcIlwiKTtcbiAgICBjb25zdCBhY3R1YWwgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAudXBkYXRlKG1hdGNoPy5bMV0gPz8gXCJcIilcbiAgICAgIC5kaWdlc3QoKTtcbiAgICBpZiAobWF0Y2ggJiYgdGltaW5nU2FmZUVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlc3BvbnNlXG4gICAgICAuc3RhdHVzKDQwMSlcbiAgICAgIC5zZXRIZWFkZXIoXCJ3d3ctYXV0aGVudGljYXRlXCIsIFwiQmVhcmVyXCIpXG4gICAgICAuanNvbih7XG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgbWVzc2FnZTogXCJJbnZhbGlkIG9yIG1pc3NpbmcgbW9kZWwtZ2F0ZXdheSBiZWFyZXIgdG9rZW4uXCIsXG4gICAgICAgICAgdHlwZTogXCJhdXRoZW50aWNhdGlvbl9lcnJvclwiLFxuICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9iZWFyZXJfdG9rZW5cIixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9O1xufVxuXG4vKiogU3RhcnQgdGhlIGZvcmVncm91bmQgbW9kZWwgZ2F0ZXdheSBhbmQga2VlcCBpdHMgQXBwS2l0IHNlcnZlciBhY3RpdmUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRNb2RlbEdhdGV3YXkob3B0aW9uczogTW9kZWxHYXRld2F5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZU1vZGVsR2F0ZXdheU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGdhdGV3YXkgPSBuZXcgTW9kZWxHYXRld2F5KHtcbiAgICAuLi4ocmVzb2x2ZWQubW9kZWwgPyB7IG1vZGVsOiByZXNvbHZlZC5tb2RlbCB9IDoge30pLFxuICAgIC4uLihyZXNvbHZlZC5tb2RlbENsYXNzID8geyBtb2RlbENsYXNzOiByZXNvbHZlZC5tb2RlbENsYXNzIH0gOiB7fSksXG4gICAgcHJlZmVyU3lzdGVtTW9kZWxzOiByZXNvbHZlZC5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gIH0pO1xuICBjb25zdCBjbGllbnQgPSBhd2FpdCBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoe1xuICAgIC4uLihyZXNvbHZlZC5wcm9maWxlID8geyBwcm9maWxlOiByZXNvbHZlZC5wcm9maWxlIH0gOiB7fSksXG4gIH0pO1xuICBhd2FpdCBjcmVhdGVBcHAoe1xuICAgIGNsaWVudCxcbiAgICBwbHVnaW5zOiBbc2VydmVyKGFwcEtpdFNlcnZlck9wdGlvbnMocmVzb2x2ZWQpKV0sXG4gICAgb25QbHVnaW5zUmVhZHkoYXBwa2l0KSB7XG4gICAgICBhcHBraXQuc2VydmVyLmV4dGVuZCgoYXBwbGljYXRpb24pID0+IHtcbiAgICAgICAgaWYgKHJlc29sdmVkLmJlYXJlclRva2VuKSB7XG4gICAgICAgICAgYXBwbGljYXRpb24udXNlKGdhdGV3YXlCZWFyZXJNaWRkbGV3YXJlKHJlc29sdmVkLmJlYXJlclRva2VuKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbGljYXRpb24uZ2V0KFwiL2FwaS9oZWFsdGh6XCIsIChfcmVxdWVzdCwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBzZW5kSGVhbHRoKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcGxpY2F0aW9uLmdldChcIi92MS9tb2RlbHNcIiwgKHJlcXVlc3QsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdm9pZCBzZW5kTW9kZWxzKGdhdGV3YXksIHJlcXVlc3QsIHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3QgW3BhdGgsIHByb3RvY29sXSBvZiBbXG4gICAgICAgICAgW1wiL3YxL2NoYXQvY29tcGxldGlvbnNcIiwgXCJvcGVuYWktY2hhdFwiXSxcbiAgICAgICAgICBbXCIvdjEvcmVzcG9uc2VzXCIsIFwib3BlbmFpLXJlc3BvbnNlc1wiXSxcbiAgICAgICAgICBbXCIvdjEvbWVzc2FnZXNcIiwgXCJhbnRocm9waWMtbWVzc2FnZXNcIl0sXG4gICAgICAgICAgW1wiL3YxL2VtYmVkZGluZ3NcIiwgXCJvcGVuYWktZW1iZWRkaW5nc1wiXSxcbiAgICAgICAgXSBhcyBjb25zdCkge1xuICAgICAgICAgIGFwcGxpY2F0aW9uLnBvc3QocGF0aCwgKHJlcXVlc3QsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHNlbmRJbmZlcmVuY2UoZ2F0ZXdheSwgcHJvdG9jb2wsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
package/lib/src/root.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { existsSync } from "node:fs";
|
|
7
7
|
import { basename, join, resolve } from "node:path";
|
|
8
8
|
import { projectUtils } from "@dbx-tools/core";
|
|
9
|
-
import {
|
|
9
|
+
import { memoize } from "@dbx-tools/shared-core";
|
|
10
10
|
/**
|
|
11
11
|
* Walk upward from `startDir` for `.projenrc.ts`. If none is found, try git
|
|
12
12
|
* top-level only when that directory also contains `.projenrc.ts`; otherwise return
|
|
@@ -50,9 +50,9 @@ export function needsToolchain(root) {
|
|
|
50
50
|
return !existsSync(join(modules, "projen")) || !existsSync(join(modules, "@dbx-tools", "projen"));
|
|
51
51
|
}
|
|
52
52
|
/** Async, memoized root lookup from the process cwd at first use. */
|
|
53
|
-
export const workspaceRoot =
|
|
53
|
+
export const workspaceRoot = memoize(() => findWorkspaceRoot());
|
|
54
54
|
/** Short label for log output (`basename` of the resolved root). */
|
|
55
55
|
export function rootLabel(root) {
|
|
56
56
|
return basename(root) || root;
|
|
57
57
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb290LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUFDLFdBQW1CLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDdEUsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUFFLE9BQU8sVUFBVSxDQUFDO0lBQ2xGLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZO0lBQ3pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEcsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwRyxDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBRWhFLG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVk7SUFDcEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdvcmtzcGFjZSByb290IGRldGVjdGlvbiBmb3IgdGhlIGBkYngtdG9vbHNgIENMSS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwcm9qZWN0VXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuLyoqXG4gKiBXYWxrIHVwd2FyZCBmcm9tIGBzdGFydERpcmAgZm9yIGAucHJvamVucmMudHNgLiBJZiBub25lIGlzIGZvdW5kLCB0cnkgZ2l0XG4gKiB0b3AtbGV2ZWwgb25seSB3aGVuIHRoYXQgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgYC5wcm9qZW5yYy50c2A7IG90aGVyd2lzZSByZXR1cm5cbiAqIGByZXNvbHZlKHN0YXJ0RGlyKWAgKHdoaWNoIG1heSBub3QgYmUgYSB3b3Jrc3BhY2Ugcm9vdCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUm9vdChzdGFydERpcjogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRpc2NvdmVyZWQgPSBwcm9qZWN0VXRpbHMucm9vdChzdGFydERpcik7XG4gIGlmIChkaXNjb3ZlcmVkICYmIGV4aXN0c1N5bmMoam9pbihkaXNjb3ZlcmVkLCBcIi5wcm9qZW5yYy50c1wiKSkpIHJldHVybiBkaXNjb3ZlcmVkO1xuICByZXR1cm4gcmVzb2x2ZShzdGFydERpcik7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIHRoZSBmb2xkZXIgaGFzIG5vIGAucHJvamVucmMudHNgIHlldCBhbmQgbmVlZHMgZnVsbCBib290c3RyYXBwaW5nLlxuICogS2V5aW5nIG9mZiBgLnByb2plbnJjLnRzYCAobm90IGBwYWNrYWdlLmpzb25gKSBhdm9pZHMgY2xvYmJlcmluZyBhIGNsZWFuZWRcbiAqIHdvcmtzcGFjZSB0aGF0IHN0aWxsIGhhcyBhIGhhbmQtYXV0aG9yZWQgcHJvamVucmMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZWVkc0Jvb3RzdHJhcChyb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuICFleGlzdHNTeW5jKGpvaW4ocm9vdCwgXCIucHJvamVucmMudHNcIikpO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGBub2RlX21vZHVsZXNgIG9yIHByb2plbiBpdHNlbGYgaXMgbWlzc2luZyB1bmRlciBgcm9vdGAuICovXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNJbnN0YWxsKHJvb3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWV4aXN0c1N5bmMoam9pbihyb290LCBcIm5vZGVfbW9kdWxlc1wiKSkpIHJldHVybiB0cnVlO1xuICBpZiAoZXhpc3RzU3luYyhqb2luKHJvb3QsIFwiLnByb2plbnJjLnRzXCIpKSAmJiAhZXhpc3RzU3luYyhqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzXCIsIFwicHJvamVuXCIpKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gdGhlIHN5bnRoIFRPT0xDSEFJTiBpc24ndCBpbnN0YWxsZWQgeWV0OiBubyBgbm9kZV9tb2R1bGVzYCwgb3IgdGhlXG4gKiBkYngtdG9vbHMgZW5naW5lIC8gYHByb2plbmAgYXJlbid0IHJlc29sdmFibGUgdW5kZXIgaXQuIERpc3RpbmN0IGZyb20gYSBmdWxsXG4gKiBib290c3RyYXAgKHdoaWNoIGtleXMgb2ZmIGEgTUlTU0lORyBgLnByb2plbnJjLnRzYCk6IGhlcmUgdGhlIHByb2plbnJjIGV4aXN0c1xuICogYnV0IGl0cyBkZXBlbmRlbmNpZXMgZG9uJ3QgLSBlLmcuIGEgY29waWVkIHByb2plY3Qgd2hvc2UgZ2VuZXJhdGVkIG1hbmlmZXN0c1xuICogYW5kIGBub2RlX21vZHVsZXNgIGFyZSBnaXRpZ25vcmVkLiBTZWVkaW5nIHRoZSB0b29sY2hhaW4gKG5vdCBzY2FmZm9sZGluZylcbiAqIG1ha2VzIGl0IHN5bnRoLXJlYWR5IHdpdGhvdXQgdG91Y2hpbmcgdGhlIGhhbmQtYXV0aG9yZWQgYC5wcm9qZW5yYy50c2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZWVkc1Rvb2xjaGFpbihyb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbW9kdWxlcyA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXNcIik7XG4gIGlmICghZXhpc3RzU3luYyhtb2R1bGVzKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiAhZXhpc3RzU3luYyhqb2luKG1vZHVsZXMsIFwicHJvamVuXCIpKSB8fCAhZXhpc3RzU3luYyhqb2luKG1vZHVsZXMsIFwiQGRieC10b29sc1wiLCBcInByb2plblwiKSk7XG59XG5cbi8qKiBBc3luYywgbWVtb2l6ZWQgcm9vdCBsb29rdXAgZnJvbSB0aGUgcHJvY2VzcyBjd2QgYXQgZmlyc3QgdXNlLiAqL1xuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBtZW1vaXplKCgpID0+IGZpbmRXb3Jrc3BhY2VSb290KCkpO1xuXG4vKiogU2hvcnQgbGFiZWwgZm9yIGxvZyBvdXRwdXQgKGBiYXNlbmFtZWAgb2YgdGhlIHJlc29sdmVkIHJvb3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RMYWJlbChyb290OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZW5hbWUocm9vdCkgfHwgcm9vdDtcbn1cbiJdfQ==
|
package/lib/src/tunnel/app.js
CHANGED
|
@@ -15,22 +15,20 @@
|
|
|
15
15
|
* @module
|
|
16
16
|
*/
|
|
17
17
|
import { lakebase } from "@databricks/appkit";
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
18
|
+
import { createApp } from "@dbx-tools/appkit";
|
|
19
|
+
import { shouldUseLakebase } from "@dbx-tools/auth-gate";
|
|
20
20
|
import { email } from "@dbx-tools/email";
|
|
21
21
|
import { postgresConnectionOptions } from "@dbx-tools/postgres";
|
|
22
|
-
import {
|
|
22
|
+
import { isRecord } from "@dbx-tools/shared-core";
|
|
23
23
|
import { authGate } from "@dbx-tools/tunnel";
|
|
24
24
|
/** Boot the gate app and return the handlers the proxy authenticates against. */
|
|
25
25
|
export async function startGateApp(config, client) {
|
|
26
26
|
// No `server()` plugin: nothing here listens. `plugins` order matters - `email`
|
|
27
27
|
// registers its transport before `authGate` looks for a sibling to send with.
|
|
28
|
-
const plugins = await
|
|
28
|
+
const plugins = await createApp({
|
|
29
29
|
client,
|
|
30
30
|
plugins: [
|
|
31
|
-
...(
|
|
32
|
-
? [lakebase({ pool: postgresConnectionOptions({}) })]
|
|
33
|
-
: []),
|
|
31
|
+
...(shouldUseLakebase(config) ? [lakebase({ pool: postgresConnectionOptions({}) })] : []),
|
|
34
32
|
...(config.sendCode ? [] : [email()]),
|
|
35
33
|
authGate(config),
|
|
36
34
|
],
|
|
@@ -41,7 +39,7 @@ export async function startGateApp(config, client) {
|
|
|
41
39
|
return api;
|
|
42
40
|
}
|
|
43
41
|
function isAuthGateApi(value) {
|
|
44
|
-
return (
|
|
42
|
+
return (isRecord(value) &&
|
|
45
43
|
typeof value.basePath === "string" &&
|
|
46
44
|
typeof value.passkeysEnabled === "boolean" &&
|
|
47
45
|
typeof value.isProtectedHost === "function" &&
|
|
@@ -50,4 +48,4 @@ function isAuthGateApi(value) {
|
|
|
50
48
|
typeof value.status === "function" &&
|
|
51
49
|
typeof value.close === "function");
|
|
52
50
|
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R1bm5lbC9hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUF5QyxNQUFNLG1CQUFtQixDQUFDO0FBRXBGLGlGQUFpRjtBQUNqRixNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsTUFBc0IsRUFDdEIsTUFBd0I7SUFFeEIsZ0ZBQWdGO0lBQ2hGLDhFQUE4RTtJQUM5RSxNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQztRQUM5QixNQUFNO1FBQ04sT0FBTyxFQUFFO1lBQ1AsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pGLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNyQyxRQUFRLENBQUMsTUFBTSxDQUFDO1NBQ2pCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDL0UsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLENBQ0wsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNmLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLGVBQWUsS0FBSyxTQUFTO1FBQzFDLE9BQU8sS0FBSyxDQUFDLGVBQWUsS0FBSyxVQUFVO1FBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxVQUFVO1FBQ25DLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxVQUFVO1FBQ25DLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQ2xDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgR0FURSBoYWxmIG9mIHRoZSB3cmFwcGVyOiBhIHNlcnZlci1sZXNzIEFwcEtpdCBhcHAgd2hvc2Ugb25seSBqb2IgaXMgdG9cbiAqIGV4cG9zZSB0aGUgYGF1dGhHYXRlYCBoYW5kbGVycyB0aGUgcHJveHkgY2FsbHMuXG4gKlxuICogVGhlIGluLXByb2Nlc3MgcGx1Z2luIHBhdGggKGBhdXRoR2F0ZWAgaW4gdGhlIGFwcCdzIG93biBgcGx1Z2luc2ApIGhhcyBhIHJlYWxcbiAqIEhUVFAgc2VydmVyIHRvIG1vdW50IHJvdXRlcyBvbi4gQSB3cmFwcGVyIGRvZXMgbm90IC0gdGhlIGFwcCBpdCBmcm9udHMgaXMgYVxuICogc2VwYXJhdGUgcHJvY2VzcyBpdCBtdXN0IG5vdCByZWFjaCBpbnRvIC0gc28gdGhlIGdhdGUncyBsb2dpbiByb3V0ZXMgbGl2ZSBvblxuICogdGhlIHByb3h5IGluc3RlYWQsIGFuZCB0aGlzIGFwcCBleGlzdHMgcHVyZWx5IHRvIGdpdmUgdGhlIHBsdWdpbiB0aGUgcnVudGltZSBpdFxuICogbmVlZHM6IGEgYENhY2hlTWFuYWdlcmAgZm9yIHRoZSBvbmUtdGltZS1jb2RlIHN0b3JlIGFuZCBzaWduaW5nIGtleSwgYW5kIHRoZVxuICogc2libGluZyBgZW1haWxgIHBsdWdpbidzIHRyYW5zcG9ydCBmb3IgZGVsaXZlcmluZyBhIGNvZGUuXG4gKlxuICogTGF6aWx5IGltcG9ydGVkIGJ5IGBjbGkudHNgLCBzbyBgZGJ4IHR1bm5lbCAtLWluc2VjdXJlYCAoYW5kIGBpbnN0YWxsYCAvXG4gKiBgc3RhdHVzYCkgbmV2ZXIgbG9hZCBBcHBLaXQsIHRoZSBEYXRhYnJpY2tzIFNESywgb3IgdGhlIFNNVFAgc3RhY2suXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGxha2ViYXNlLCB0eXBlIFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNyZWF0ZUFwcCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgc2hvdWxkVXNlTGFrZWJhc2UgfSBmcm9tIFwiQGRieC10b29scy9hdXRoLWdhdGVcIjtcbmltcG9ydCB7IGVtYWlsIH0gZnJvbSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbmltcG9ydCB7IHBvc3RncmVzQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiQGRieC10b29scy9wb3N0Z3Jlc1wiO1xuaW1wb3J0IHsgaXNSZWNvcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgYXV0aEdhdGUsIHR5cGUgQXV0aEdhdGVBcGksIHR5cGUgQXV0aEdhdGVDb25maWcgfSBmcm9tIFwiQGRieC10b29scy90dW5uZWxcIjtcblxuLyoqIEJvb3QgdGhlIGdhdGUgYXBwIGFuZCByZXR1cm4gdGhlIGhhbmRsZXJzIHRoZSBwcm94eSBhdXRoZW50aWNhdGVzIGFnYWluc3QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRHYXRlQXBwKFxuICBjb25maWc6IEF1dGhHYXRlQ29uZmlnLFxuICBjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQsXG4pOiBQcm9taXNlPEF1dGhHYXRlQXBpPiB7XG4gIC8vIE5vIGBzZXJ2ZXIoKWAgcGx1Z2luOiBub3RoaW5nIGhlcmUgbGlzdGVucy4gYHBsdWdpbnNgIG9yZGVyIG1hdHRlcnMgLSBgZW1haWxgXG4gIC8vIHJlZ2lzdGVycyBpdHMgdHJhbnNwb3J0IGJlZm9yZSBgYXV0aEdhdGVgIGxvb2tzIGZvciBhIHNpYmxpbmcgdG8gc2VuZCB3aXRoLlxuICBjb25zdCBwbHVnaW5zID0gYXdhaXQgY3JlYXRlQXBwKHtcbiAgICBjbGllbnQsXG4gICAgcGx1Z2luczogW1xuICAgICAgLi4uKHNob3VsZFVzZUxha2ViYXNlKGNvbmZpZykgPyBbbGFrZWJhc2UoeyBwb29sOiBwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKHt9KSB9KV0gOiBbXSksXG4gICAgICAuLi4oY29uZmlnLnNlbmRDb2RlID8gW10gOiBbZW1haWwoKV0pLFxuICAgICAgYXV0aEdhdGUoY29uZmlnKSxcbiAgICBdLFxuICB9KTtcbiAgY29uc3QgYXBpID0gUmVmbGVjdC5nZXQocGx1Z2lucywgXCJhdXRoR2F0ZVwiKTtcbiAgaWYgKCFpc0F1dGhHYXRlQXBpKGFwaSkpIHRocm93IG5ldyBFcnJvcihcInRoZSBhdXRoR2F0ZSBwbHVnaW4gZXhwb3NlZCBubyBhcGlcIik7XG4gIHJldHVybiBhcGk7XG59XG5cbmZ1bmN0aW9uIGlzQXV0aEdhdGVBcGkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBdXRoR2F0ZUFwaSB7XG4gIHJldHVybiAoXG4gICAgaXNSZWNvcmQodmFsdWUpICYmXG4gICAgdHlwZW9mIHZhbHVlLmJhc2VQYXRoID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIHZhbHVlLnBhc3NrZXlzRW5hYmxlZCA9PT0gXCJib29sZWFuXCIgJiZcbiAgICB0eXBlb2YgdmFsdWUuaXNQcm90ZWN0ZWRIb3N0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2YgdmFsdWUuaGFuZGxlciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHZhbHVlLnNlc3Npb24gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2YWx1ZS5zdGF0dXMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2YWx1ZS5jbG9zZSA9PT0gXCJmdW5jdGlvblwiXG4gICk7XG59XG4iXX0=
|
package/lib/src/tunnel/cli.d.ts
CHANGED
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
*
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
|
-
import { Command
|
|
25
|
-
export { CommanderError };
|
|
24
|
+
import { Command } from "commander";
|
|
26
25
|
/** The `dbx tunnel` program. No side effects until parsed. */
|
|
27
26
|
export declare function buildProgram(name?: string): Command;
|
package/lib/src/tunnel/cli.js
CHANGED
|
@@ -23,13 +23,12 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { createServer } from "node:net";
|
|
25
25
|
import { addArgs, parseArgs } from "@dbx-tools/cli-args";
|
|
26
|
-
import {
|
|
26
|
+
import { spawn } from "@dbx-tools/core";
|
|
27
27
|
import { log } from "@dbx-tools/shared-core";
|
|
28
|
-
import {
|
|
28
|
+
import { installFrp, writeFrpConfig, startFrp, TunnelTransportSchema, installPortr, writePortrConfig, startPortr, } from "@dbx-tools/tunnel";
|
|
29
29
|
import { Command, CommanderError } from "commander";
|
|
30
30
|
import { resolveTunnelOptions, TunnelOptionsSchema } from "./options.js";
|
|
31
31
|
import { startProxy } from "./proxy.js";
|
|
32
|
-
export { CommanderError };
|
|
33
32
|
const logger = log.logger("tunnel");
|
|
34
33
|
/**
|
|
35
34
|
* A free loopback port, from the OS rather than a random guess: binding `0` and
|
|
@@ -81,7 +80,7 @@ async function run(raw, command) {
|
|
|
81
80
|
let appPort;
|
|
82
81
|
if (executable) {
|
|
83
82
|
appPort = resolved.appPort ?? (await freePort());
|
|
84
|
-
const app =
|
|
83
|
+
const app = spawn(executable, args, {
|
|
85
84
|
env: {
|
|
86
85
|
...process.env,
|
|
87
86
|
DATABRICKS_APP_PORT: String(appPort),
|
|
@@ -123,14 +122,14 @@ async function run(raw, command) {
|
|
|
123
122
|
bindHosts: resolved.bindHosts,
|
|
124
123
|
});
|
|
125
124
|
if ((resolved.transport === "portr" || resolved.transport === "both") && resolved.portr) {
|
|
126
|
-
const portrEnv = await
|
|
127
|
-
await
|
|
128
|
-
children.push(
|
|
125
|
+
const portrEnv = await installPortr();
|
|
126
|
+
await writePortrConfig(resolved.portr, portrEnv);
|
|
127
|
+
children.push(startPortr(resolved.portr, portrEnv));
|
|
129
128
|
}
|
|
130
129
|
if ((resolved.transport === "frp" || resolved.transport === "both") && resolved.frp) {
|
|
131
|
-
const frpEnv = await
|
|
132
|
-
const configPath = await
|
|
133
|
-
children.push(
|
|
130
|
+
const frpEnv = await installFrp();
|
|
131
|
+
const configPath = await writeFrpConfig(resolved.frp, frpEnv);
|
|
132
|
+
children.push(startFrp(resolved.frp, frpEnv, configPath));
|
|
134
133
|
}
|
|
135
134
|
const activeTunnelCount = children.length - (executable ? 1 : 0);
|
|
136
135
|
if (!activeTunnelCount) {
|
|
@@ -173,12 +172,12 @@ export function buildProgram(name = "dbx tunnel") {
|
|
|
173
172
|
.argument("[transport]", "portr, frp, or both", "portr")
|
|
174
173
|
.description("Install public tunnel client binaries and exit")
|
|
175
174
|
.action(async (transport) => {
|
|
176
|
-
const parsed =
|
|
175
|
+
const parsed = TunnelTransportSchema.parse(transport);
|
|
177
176
|
if (parsed === "portr" || parsed === "both")
|
|
178
|
-
await
|
|
177
|
+
await installPortr();
|
|
179
178
|
if (parsed === "frp" || parsed === "both")
|
|
180
|
-
await
|
|
179
|
+
await installFrp();
|
|
181
180
|
});
|
|
182
181
|
return program;
|
|
183
182
|
}
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R1bm5lbC9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQXNCLE1BQU0sY0FBYyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO0FBRTFCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFcEM7Ozs7R0FJRztBQUNILFNBQVMsUUFBUTtJQUNmLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFB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T0FBTztTQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDbEIsUUFBUSxDQUFDLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUM7U0FDdkQsV0FBVyxDQUFDLGdEQUFnRCxDQUFDO1NBQzdELE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxNQUFNO1lBQUUsTUFBTSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEUsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxNQUFNO1lBQUUsTUFBTSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZGJ4IHR1bm5lbGAgLSBmcm9udCBhIGNvbW1hbmQgd2l0aCBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgYW5kIHBhc3N3b3JkbGVzcyBnYXRlLlxuICpcbiAqIFRoaXMgaXMgdGhlIFdSQVBQRVIgcGF0aCwgYW5kIGl0IGV4aXN0cyBmb3Igb25lIGNhc2U6IGEgcHJvamVjdCB0aGF0IGRvZXMgbm90XG4gKiB1c2UgYEBkYngtdG9vbHMvYXBwa2l0YCdzIGBjcmVhdGVBcHBgLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZWdpc3RlclxuICogYHR1bm5lbEludGVyY2VwdG9yKClgICsgdGhlIGBhdXRoR2F0ZWAgcGx1Z2luIGluLXByb2Nlc3MuIEFuIEFwcEtpdCBhcHAgc2hvdWxkXG4gKiBzdGlsbCB0YWtlIHRoZSBwbHVnaW4gcGF0aCAtIG9uZSBwcm9jZXNzLCBubyBwcm94eSBob3AsIG5vIGR1cGxpY2F0ZWQgaGVhZGVyXG4gKiBoYW5kbGluZy5cbiAqXG4gKiBUaGUgd3JhcHBlciBjbGFpbXMgdGhlIFBVQkxJQyBwb3J0IChgREFUQUJSSUNLU19BUFBfUE9SVGAsIHRoZSBwb3J0IHRoZVxuICogcGxhdGZvcm0gYW5kIHBvcnRyIHJvdXRlIHRvKSwgbW92ZXMgdGhlIHdyYXBwZWQgYXBwIHRvIGEgcHJpdmF0ZSBvbmUsIGFuZFxuICogcmV2ZXJzZS1wcm94aWVzIGJldHdlZW4gdGhlbSBzbyB0aGUgZ2F0ZSBzaXRzIGluIGZyb250IG9mIHRyYWZmaWMgaXQgd291bGRcbiAqIG90aGVyd2lzZSBoYXZlIG5vIHdheSB0byBpbnRlcmNlcHQuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBkZWxlZ2F0ZWQ6IHRoZSBnYXRlXG4gKiBjb25maWcgY29tZXMgZnJvbSBgcGx1Z2luLnJlc29sdmVBdXRoR2F0ZUNvbmZpZ2AsIHRoZSBwb3J0ciBsaWZlY3ljbGUgZnJvbVxuICogYHBvcnRyLipgIC0gYm90aCB0aGUgc2FtZSBmdW5jdGlvbnMgdGhlIGluLXByb2Nlc3MgcGF0aCB1c2VzLlxuICpcbiAqIFNoaXBzIG5vIGJpbi4gYEBkYngtdG9vbHMvY2xpYCBtb3VudHMgYGJ1aWxkUHJvZ3JhbSgpYCBhcyBgZGJ4IHR1bm5lbGAgbGF6aWx5LFxuICogc28gYGRieCBkZXZgIHBheXMgZm9yIG5vbmUgb2YgdGhpcywgYW5kIGAtLWluc2VjdXJlYCAvIGBzdGF0dXNgIC8gYGluc3RhbGxgXG4gKiBuZXZlciBsb2FkIEFwcEtpdCBvciB0aGUgU01UUCBzdGFjayBlaXRoZXIgKHRoZSBnYXRlIGFwcCBpcyBiZWhpbmQgYSBkeW5hbWljXG4gKiBpbXBvcnQpLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXIgfSBmcm9tIFwibm9kZTpuZXRcIjtcbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3NSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9jb3JlL2V4ZWNcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBmcnAsIGludGVyY2VwdG9yLCBwb3J0ciB9IGZyb20gXCJAZGJ4LXRvb2xzL3R1bm5lbFwiO1xuaW1wb3J0IHsgQ29tbWFuZCwgQ29tbWFuZGVyRXJyb3IgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7IHJlc29sdmVUdW5uZWxPcHRpb25zLCBUdW5uZWxPcHRpb25zU2NoZW1hLCB0eXBlIFR1bm5lbE9wdGlvbnMgfSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5pbXBvcnQgeyBzdGFydFByb3h5IH0gZnJvbSBcIi4vcHJveHkudHNcIjtcblxuZXhwb3J0IHsgQ29tbWFuZGVyRXJyb3IgfTtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbFwiKTtcblxuLyoqXG4gKiBBIGZyZWUgbG9vcGJhY2sgcG9ydCwgZnJvbSB0aGUgT1MgcmF0aGVyIHRoYW4gYSByYW5kb20gZ3Vlc3M6IGJpbmRpbmcgYDBgIGFuZFxuICogcmVhZGluZyBiYWNrIHdoYXQgd2FzIGFzc2lnbmVkIGlzIHRoZSBvbmx5IHdheSB0byBrbm93IHRoZSBwb3J0IGlzIGFjdHVhbGx5XG4gKiBhdmFpbGFibGUsIHNvIHR3byB0dW5uZWxzIGNhbiBydW4gc2lkZSBieSBzaWRlIHdpdGhvdXQgY29sbGlkaW5nLlxuICovXG5mdW5jdGlvbiBmcmVlUG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb2JlID0gY3JlYXRlU2VydmVyKCk7XG4gICAgcHJvYmUub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIHByb2JlLmxpc3RlbigwLCBcIjEyNy4wLjAuMVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gcHJvYmUuYWRkcmVzcygpO1xuICAgICAgY29uc3QgcG9ydCA9IHR5cGVvZiBhZGRyZXNzID09PSBcIm9iamVjdFwiICYmIGFkZHJlc3MgPyBhZGRyZXNzLnBvcnQgOiAwO1xuICAgICAgcHJvYmUuY2xvc2UoKCkgPT4gKHBvcnQgPiAwID8gcmVzb2x2ZShwb3J0KSA6IHJlamVjdChuZXcgRXJyb3IoXCJubyBmcmVlIHBvcnRcIikpKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRpZSB0aGUgd3JhcHBlcidzIGxpZmV0aW1lIHRvIGl0cyBjaGlsZHJlbjogYSBjaGlsZCB0aGF0IGV4aXRzIHRha2VzIHRoZVxuICogd3JhcHBlciBkb3duIHdpdGggaXRzIGNvZGUuIENvcmUgZXhlYyBvd25zIHBhcmVudCB0ZXJtaW5hdGlvbiBmb3J3YXJkaW5nIGZvclxuICogZXZlcnkgc3Bhd25lZCBjaGlsZC4gV2l0aG91dCB0aGlzIGEgY3Jhc2hlZCBhcHAgbGVhdmVzIGEgcG9ydHIgdHVubmVsIHNlcnZpbmdcbiAqIGEgZGVhZCBwb3J0LCB3aGljaCBsb29rcyBsaWtlIGEgaGFuZyByYXRoZXIgdGhhbiBhIGZhaWx1cmUuXG4gKi9cbmZ1bmN0aW9uIHN1cGVydmlzZShjaGlsZHJlbjogcmVhZG9ubHkgQ2hpbGRQcm9jZXNzUmVzdWx0W10pOiB2b2lkIHtcbiAgbGV0IHN0b3BwaW5nID0gZmFsc2U7XG4gIGNvbnN0IHN0b3AgPSAoY29kZTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgaWYgKHN0b3BwaW5nKSByZXR1cm47XG4gICAgc3RvcHBpbmcgPSB0cnVlO1xuICAgIHZvaWQgUHJvbWlzZS5hbGxTZXR0bGVkKGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IGNoaWxkLnNodXRkb3duKCkpKS50aGVuKCgpID0+IHtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9KTtcbiAgfTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIHZvaWQgY2hpbGQub24oXCJleGl0XCIsIChjb2RlKSA9PiBzdG9wKGNvZGUgPz8gMSkpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bihyYXc6IFR1bm5lbE9wdGlvbnMsIGNvbW1hbmQ6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IFtleGVjdXRhYmxlLCAuLi5hcmdzXSA9IGNvbW1hbmQ7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVR1bm5lbE9wdGlvbnMocmF3KTtcbiAgY29uc3QgY2hpbGRyZW46IENoaWxkUHJvY2Vzc1Jlc3VsdFtdID0gW107XG5cbiAgLy8gVHdvIHVwc3RyZWFtIG1vZGVzOlxuICAvLyAgIC0gV1JBUDogYSBjb21tYW5kIGFmdGVyIGAtLWAuIFRoZSB3cmFwcGVyIHNwYXducyBpdCBvbiBhIHByaXZhdGUgbG9vcGJhY2tcbiAgLy8gICAgIHBvcnQgYW5kIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgdGFsa3MgdG8gaXQuXG4gIC8vICAgLSBBVFRBQ0g6IG5vIGNvbW1hbmQsIGJ1dCBgLS1hcHAtcG9ydGAgbmFtZXMgYW4gYWxyZWFkeS1ydW5uaW5nIHVwc3RyZWFtXG4gIC8vICAgICAoZS5nLiBhIGxvY2FsIHJldmVyc2UgcHJveHkpLiBUaGUgZ2F0ZSBmcm9udHMgaXQgd2l0aG91dCBzcGF3bmluZyBhXG4gIC8vICAgICBjaGlsZC4gVGhpcyBpcyB3aGF0IGxldHMgdGhlIGdhdGUgc2l0IG9uIGFuIGludGVyZmFjZSBpbiBmcm9udCBvZiBhXG4gIC8vICAgICBzZXBhcmF0ZWx5LXN1cGVydmlzZWQgc3RhY2suXG4gIGxldCBhcHBQb3J0OiBudW1iZXI7XG4gIGlmIChleGVjdXRhYmxlKSB7XG4gICAgYXBwUG9ydCA9IHJlc29sdmVkLmFwcFBvcnQgPz8gKGF3YWl0IGZyZWVQb3J0KCkpO1xuICAgIGNvbnN0IGFwcCA9IGV4ZWMuc3Bhd24oZXhlY3V0YWJsZSwgYXJncywge1xuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBEQVRBQlJJQ0tTX0FQUF9QT1JUOiBTdHJpbmcoYXBwUG9ydCksXG4gICAgICAgIFBPUlQ6IFN0cmluZyhhcHBQb3J0KSxcbiAgICAgICAgSE9TVDogXCIxMjcuMC4wLjFcIixcbiAgICAgIH0sXG4gICAgICBzdGRpbjogXCJpbmhlcml0XCIsXG4gICAgICBzdGRvdXQ6IFwiaW5oZXJpdFwiLFxuICAgICAgc3RkZXJyOiBcImluaGVyaXRcIixcbiAgICAgIHRlcm1pbmF0ZVRpbWVvdXQ6IDEwXzAwMCxcbiAgICB9KTtcbiAgICBjaGlsZHJlbi5wdXNoKGFwcCk7XG4gIH0gZWxzZSBpZiAocmVzb2x2ZWQuYXBwUG9ydCkge1xuICAgIGFwcFBvcnQgPSByZXNvbHZlZC5hcHBQb3J0O1xuICAgIGxvZ2dlci5pbmZvKFwiYXR0YWNoaW5nIGdhdGUgdG8gZXhpc3RpbmcgdXBzdHJlYW1cIiwgeyBhcHBQb3J0IH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgIDEsXG4gICAgICBcInR1bm5lbC5uby11cHN0cmVhbVwiLFxuICAgICAgXCJubyBjb21tYW5kIGdpdmVuIChwYXNzIGl0IGFmdGVyIGAtLWApIGFuZCBubyAtLWFwcC1wb3J0IHRvIGF0dGFjaCB0b1wiLFxuICAgICk7XG4gIH1cblxuICAvLyBEeW5hbWljIGltcG9ydDogdGhlIGdhdGUgaXMgdGhlIG9ubHkgdGhpbmcgaGVyZSB0aGF0IG5lZWRzIEFwcEtpdCArIFNNVFAsIHNvXG4gIC8vIGFuIGAtLWluc2VjdXJlYCBydW4gbmV2ZXIgbG9hZHMgZWl0aGVyLlxuICBjb25zdCBnYXRlID0gcmVzb2x2ZWQuZ2F0ZS5pbnNlY3VyZVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydChcIi4vYXBwLnRzXCIpXG4gICAgICApLnN0YXJ0R2F0ZUFwcCh7XG4gICAgICAgIC4uLnJlc29sdmVkLmdhdGVDb25maWcsXG4gICAgICAgIHB1YmxpY0RvbWFpbjogcmVzb2x2ZWQuZ2F0ZS5wdWJsaWNEb21haW4gPz8gYGxvY2FsaG9zdDoke3Jlc29sdmVkLnB1YmxpY1BvcnR9YCxcbiAgICAgIH0pO1xuICBpZiAoIWdhdGUpIGxvZ2dlci53YXJuKFwicnVubmluZyBPUEVOIC0gbm8gZ2F0ZSBpcyBpbiBmcm9udCBvZiB0aGlzIHR1bm5lbFwiKTtcblxuICBhd2FpdCBzdGFydFByb3h5KHtcbiAgICBwdWJsaWNQb3J0OiByZXNvbHZlZC5wdWJsaWNQb3J0LFxuICAgIGFwcFBvcnQsXG4gICAgZ2F0ZSxcbiAgICBmb3J3YXJkSGVhZGVyczogcmVzb2x2ZWQuZ2F0ZS5mb3J3YXJkSGVhZGVycyxcbiAgICBnYXRlUGF0aHM6IHJlc29sdmVkLmdhdGUuZ2F0ZVBhdGhzLFxuICAgIGJyYW5kTmFtZTogcmVzb2x2ZWQuZ2F0ZS5icmFuZE5hbWUsXG4gICAgcGFzc2tleU5hbWVQcmVmaXg6IHJlc29sdmVkLmdhdGUucGFzc2tleU5hbWVQcmVmaXgsXG4gICAgYmluZEhvc3RzOiByZXNvbHZlZC5iaW5kSG9zdHMsXG4gIH0pO1xuXG4gIGlmICgocmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcInBvcnRyXCIgfHwgcmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcImJvdGhcIikgJiYgcmVzb2x2ZWQucG9ydHIpIHtcbiAgICBjb25zdCBwb3J0ckVudiA9IGF3YWl0IHBvcnRyLmluc3RhbGxQb3J0cigpO1xuICAgIGF3YWl0IHBvcnRyLndyaXRlUG9ydHJDb25maWcocmVzb2x2ZWQucG9ydHIsIHBvcnRyRW52KTtcbiAgICBjaGlsZHJlbi5wdXNoKHBvcnRyLnN0YXJ0UG9ydHIocmVzb2x2ZWQucG9ydHIsIHBvcnRyRW52KSk7XG4gIH1cbiAgaWYgKChyZXNvbHZlZC50cmFuc3BvcnQgPT09IFwiZnJwXCIgfHwgcmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcImJvdGhcIikgJiYgcmVzb2x2ZWQuZnJwKSB7XG4gICAgY29uc3QgZnJwRW52ID0gYXdhaXQgZnJwLmluc3RhbGxGcnAoKTtcbiAgICBjb25zdCBjb25maWdQYXRoID0gYXdhaXQgZnJwLndyaXRlRnJwQ29uZmlnKHJlc29sdmVkLmZycCwgZnJwRW52KTtcbiAgICBjaGlsZHJlbi5wdXNoKGZycC5zdGFydEZycChyZXNvbHZlZC5mcnAsIGZycEVudiwgY29uZmlnUGF0aCkpO1xuICB9XG4gIGNvbnN0IGFjdGl2ZVR1bm5lbENvdW50ID0gY2hpbGRyZW4ubGVuZ3RoIC0gKGV4ZWN1dGFibGUgPyAxIDogMCk7XG4gIGlmICghYWN0aXZlVHVubmVsQ291bnQpIHtcbiAgICBsb2dnZXIuaW5mbyhcIm5vIHNlbGVjdGVkIHB1YmxpYyB0dW5uZWwgaXMgY29uZmlndXJlZFwiLCB7XG4gICAgICB0cmFuc3BvcnQ6IHJlc29sdmVkLnRyYW5zcG9ydCxcbiAgICAgIHB1YmxpY1BvcnQ6IHJlc29sdmVkLnB1YmxpY1BvcnQsXG4gICAgfSk7XG4gIH1cbiAgc3VwZXJ2aXNlKGNoaWxkcmVuKTtcbn1cblxuLyoqIFRoZSBgZGJ4IHR1bm5lbGAgcHJvZ3JhbS4gTm8gc2lkZSBlZmZlY3RzIHVudGlsIHBhcnNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZSA9IFwiZGJ4IHR1bm5lbFwiKTogQ29tbWFuZCB7XG4gIGNvbnN0IHByb2dyYW0gPSBhZGRBcmdzKFxuICAgIG5ldyBDb21tYW5kKClcbiAgICAgIC5uYW1lKG5hbWUpXG4gICAgICAuZGVzY3JpcHRpb24oXCJGcm9udCBhIGNvbW1hbmQgd2l0aCBhIHB1YmxpYyB0dW5uZWwgYW5kIHBhc3N3b3JkbGVzcyBhdXRoXCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG5cbiAgLy8gYHJ1bmAgaXMgdGhlIERFRkFVTFQgYWN0aW9uIGFzIHdlbGwgYXMgYSBuYW1lZCBzdWJjb21tYW5kLCBwcmVzZXJ2aW5nIHRoZSBvbGRcbiAgLy8gd3JhcHBlcidzIGVyZ29ub21pY3MgKGBkYnggdHVubmVsIC0tYWxsb3cgeCAtLSBidW4gc3JjL3NlcnZlci50c2ApIHdoaWxlXG4gIC8vIGxlYXZpbmcgc29tZXdoZXJlIGZvciBgc3RhdHVzYCBhbmQgYGluc3RhbGxgIHRvIGxpdmUuXG4gIHByb2dyYW1cbiAgICAuYXJndW1lbnQoXCJbY29tbWFuZC4uLl1cIiwgXCJ0aGUgY29tbWFuZCB0byB3cmFwLCBhZnRlciBgLS1gXCIpXG4gICAgLmFjdGlvbihhc3luYyAoY29tbWFuZDogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHJ1bihwYXJzZUFyZ3MocHJvZ3JhbSwgVHVubmVsT3B0aW9uc1NjaGVtYSksIGNvbW1hbmQpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHJ1bkNvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInJ1blwiKS5kZXNjcmlwdGlvbihcIldyYXAgYSBjb21tYW5kICh0aGUgZGVmYXVsdCBhY3Rpb24pXCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG4gIHJ1bkNvbW1hbmRcbiAgICAuYXJndW1lbnQoXCI8Y29tbWFuZC4uLj5cIiwgXCJ0aGUgY29tbWFuZCB0byB3cmFwLCBhZnRlciBgLS1gXCIpXG4gICAgLmFjdGlvbihhc3luYyAoY29tbWFuZDogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHJ1bihwYXJzZUFyZ3MocnVuQ29tbWFuZCwgVHVubmVsT3B0aW9uc1NjaGVtYSksIGNvbW1hbmQpO1xuICAgIH0pO1xuXG4gIC8vIFdvcnRoIGl0cyBvd24gY29tbWFuZDogdGhlIG1vc3QgY29tbW9uIGZhaWx1cmUgaXMgYSB0dW5uZWwgdGhhdCBzaWxlbnRseVxuICAvLyBkb2VzIG5vdGhpbmcgYmVjYXVzZSBubyB0b2tlbiBvciBkb21haW4gcmVzb2x2ZWQsIGFuZCB0aGlzIHByaW50cyBleGFjdGx5XG4gIC8vIHdoYXQgd291bGQgaGFwcGVuIHdpdGhvdXQgc3RhcnRpbmcgYW55dGhpbmcuXG4gIGNvbnN0IHN0YXR1c0NvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInN0YXR1c1wiKS5kZXNjcmlwdGlvbihcIlJlc29sdmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHByaW50IGl0XCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG4gIHN0YXR1c0NvbW1hbmQuYWN0aW9uKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUdW5uZWxPcHRpb25zKHBhcnNlQXJncyhzdGF0dXNDb21tYW5kLCBUdW5uZWxPcHRpb25zU2NoZW1hKSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkocmVzb2x2ZWQsIG51bGwsIDIpfVxcbmApO1xuICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJpbnN0YWxsXCIpXG4gICAgLmFyZ3VtZW50KFwiW3RyYW5zcG9ydF1cIiwgXCJwb3J0ciwgZnJwLCBvciBib3RoXCIsIFwicG9ydHJcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnN0YWxsIHB1YmxpYyB0dW5uZWwgY2xpZW50IGJpbmFyaWVzIGFuZCBleGl0XCIpXG4gICAgLmFjdGlvbihhc3luYyAodHJhbnNwb3J0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGludGVyY2VwdG9yLlR1bm5lbFRyYW5zcG9ydFNjaGVtYS5wYXJzZSh0cmFuc3BvcnQpO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gXCJwb3J0clwiIHx8IHBhcnNlZCA9PT0gXCJib3RoXCIpIGF3YWl0IHBvcnRyLmluc3RhbGxQb3J0cigpO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gXCJmcnBcIiB8fCBwYXJzZWQgPT09IFwiYm90aFwiKSBhd2FpdCBmcnAuaW5zdGFsbEZycCgpO1xuICAgIH0pO1xuXG4gIHJldHVybiBwcm9ncmFtO1xufVxuIl19
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R1bm5lbC9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxRQUFRLEVBQ1IscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxHQUNYLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFzQixNQUFNLGNBQWMsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXhDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFcEM7Ozs7R0FJRztBQUNILFNBQVMsUUFBUTtJQUNmLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFF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LHFCQUFxQixFQUFFLE9BQU8sQ0FBQztTQUN2RCxXQUFXLENBQUMsZ0RBQWdELENBQUM7U0FDN0QsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDbEMsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssTUFBTTtZQUFFLE1BQU0sWUFBWSxFQUFFLENBQUM7UUFDbEUsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxNQUFNO1lBQUUsTUFBTSxVQUFVLEVBQUUsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBkYnggdHVubmVsYCAtIGZyb250IGEgY29tbWFuZCB3aXRoIGEgcHVibGljIHBvcnRyIHR1bm5lbCBhbmQgcGFzc3dvcmRsZXNzIGdhdGUuXG4gKlxuICogVGhpcyBpcyB0aGUgV1JBUFBFUiBwYXRoLCBhbmQgaXQgZXhpc3RzIGZvciBvbmUgY2FzZTogYSBwcm9qZWN0IHRoYXQgZG9lcyBub3RcbiAqIHVzZSBgQGRieC10b29scy9hcHBraXRgJ3MgYGNyZWF0ZUFwcGAsIGFuZCB0aGVyZWZvcmUgY2Fubm90IHJlZ2lzdGVyXG4gKiBgdHVubmVsSW50ZXJjZXB0b3IoKWAgKyB0aGUgYGF1dGhHYXRlYCBwbHVnaW4gaW4tcHJvY2Vzcy4gQW4gQXBwS2l0IGFwcCBzaG91bGRcbiAqIHN0aWxsIHRha2UgdGhlIHBsdWdpbiBwYXRoIC0gb25lIHByb2Nlc3MsIG5vIHByb3h5IGhvcCwgbm8gZHVwbGljYXRlZCBoZWFkZXJcbiAqIGhhbmRsaW5nLlxuICpcbiAqIFRoZSB3cmFwcGVyIGNsYWltcyB0aGUgUFVCTElDIHBvcnQgKGBEQVRBQlJJQ0tTX0FQUF9QT1JUYCwgdGhlIHBvcnQgdGhlXG4gKiBwbGF0Zm9ybSBhbmQgcG9ydHIgcm91dGUgdG8pLCBtb3ZlcyB0aGUgd3JhcHBlZCBhcHAgdG8gYSBwcml2YXRlIG9uZSwgYW5kXG4gKiByZXZlcnNlLXByb3hpZXMgYmV0d2VlbiB0aGVtIHNvIHRoZSBnYXRlIHNpdHMgaW4gZnJvbnQgb2YgdHJhZmZpYyBpdCB3b3VsZFxuICogb3RoZXJ3aXNlIGhhdmUgbm8gd2F5IHRvIGludGVyY2VwdC4gRXZlcnl0aGluZyBlbHNlIGlzIGRlbGVnYXRlZDogdGhlIGdhdGVcbiAqIGNvbmZpZyBjb21lcyBmcm9tIGBwbHVnaW4ucmVzb2x2ZUF1dGhHYXRlQ29uZmlnYCwgdGhlIHBvcnRyIGxpZmVjeWNsZSBmcm9tXG4gKiBgcG9ydHIuKmAgLSBib3RoIHRoZSBzYW1lIGZ1bmN0aW9ucyB0aGUgaW4tcHJvY2VzcyBwYXRoIHVzZXMuXG4gKlxuICogU2hpcHMgbm8gYmluLiBgQGRieC10b29scy9jbGlgIG1vdW50cyBgYnVpbGRQcm9ncmFtKClgIGFzIGBkYnggdHVubmVsYCBsYXppbHksXG4gKiBzbyBgZGJ4IGRldmAgcGF5cyBmb3Igbm9uZSBvZiB0aGlzLCBhbmQgYC0taW5zZWN1cmVgIC8gYHN0YXR1c2AgLyBgaW5zdGFsbGBcbiAqIG5ldmVyIGxvYWQgQXBwS2l0IG9yIHRoZSBTTVRQIHN0YWNrIGVpdGhlciAodGhlIGdhdGUgYXBwIGlzIGJlaGluZCBhIGR5bmFtaWNcbiAqIGltcG9ydCkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVNlcnZlciB9IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHsgYWRkQXJncywgcGFyc2VBcmdzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLWFyZ3NcIjtcbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3NSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgaW5zdGFsbEZycCxcbiAgd3JpdGVGcnBDb25maWcsXG4gIHN0YXJ0RnJwLFxuICBUdW5uZWxUcmFuc3BvcnRTY2hlbWEsXG4gIGluc3RhbGxQb3J0cixcbiAgd3JpdGVQb3J0ckNvbmZpZyxcbiAgc3RhcnRQb3J0cixcbn0gZnJvbSBcIkBkYngtdG9vbHMvdHVubmVsXCI7XG5pbXBvcnQgeyBDb21tYW5kLCBDb21tYW5kZXJFcnJvciB9IGZyb20gXCJjb21tYW5kZXJcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZVR1bm5lbE9wdGlvbnMsIFR1bm5lbE9wdGlvbnNTY2hlbWEsIHR5cGUgVHVubmVsT3B0aW9ucyB9IGZyb20gXCIuL29wdGlvbnMudHNcIjtcbmltcG9ydCB7IHN0YXJ0UHJveHkgfSBmcm9tIFwiLi9wcm94eS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwidHVubmVsXCIpO1xuXG4vKipcbiAqIEEgZnJlZSBsb29wYmFjayBwb3J0LCBmcm9tIHRoZSBPUyByYXRoZXIgdGhhbiBhIHJhbmRvbSBndWVzczogYmluZGluZyBgMGAgYW5kXG4gKiByZWFkaW5nIGJhY2sgd2hhdCB3YXMgYXNzaWduZWQgaXMgdGhlIG9ubHkgd2F5IHRvIGtub3cgdGhlIHBvcnQgaXMgYWN0dWFsbHlcbiAqIGF2YWlsYWJsZSwgc28gdHdvIHR1bm5lbHMgY2FuIHJ1biBzaWRlIGJ5IHNpZGUgd2l0aG91dCBjb2xsaWRpbmcuXG4gKi9cbmZ1bmN0aW9uIGZyZWVQb3J0KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcHJvYmUgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBwcm9iZS5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgcHJvYmUubGlzdGVuKDAsIFwiMTI3LjAuMC4xXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBwcm9iZS5hZGRyZXNzKCk7XG4gICAgICBjb25zdCBwb3J0ID0gdHlwZW9mIGFkZHJlc3MgPT09IFwib2JqZWN0XCIgJiYgYWRkcmVzcyA/IGFkZHJlc3MucG9ydCA6IDA7XG4gICAgICBwcm9iZS5jbG9zZSgoKSA9PiAocG9ydCA+IDAgPyByZXNvbHZlKHBvcnQpIDogcmVqZWN0KG5ldyBFcnJvcihcIm5vIGZyZWUgcG9ydFwiKSkpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGllIHRoZSB3cmFwcGVyJ3MgbGlmZXRpbWUgdG8gaXRzIGNoaWxkcmVuOiBhIGNoaWxkIHRoYXQgZXhpdHMgdGFrZXMgdGhlXG4gKiB3cmFwcGVyIGRvd24gd2l0aCBpdHMgY29kZS4gQ29yZSBleGVjIG93bnMgcGFyZW50IHRlcm1pbmF0aW9uIGZvcndhcmRpbmcgZm9yXG4gKiBldmVyeSBzcGF3bmVkIGNoaWxkLiBXaXRob3V0IHRoaXMgYSBjcmFzaGVkIGFwcCBsZWF2ZXMgYSBwb3J0ciB0dW5uZWwgc2VydmluZ1xuICogYSBkZWFkIHBvcnQsIHdoaWNoIGxvb2tzIGxpa2UgYSBoYW5nIHJhdGhlciB0aGFuIGEgZmFpbHVyZS5cbiAqL1xuZnVuY3Rpb24gc3VwZXJ2aXNlKGNoaWxkcmVuOiByZWFkb25seSBDaGlsZFByb2Nlc3NSZXN1bHRbXSk6IHZvaWQge1xuICBsZXQgc3RvcHBpbmcgPSBmYWxzZTtcbiAgY29uc3Qgc3RvcCA9IChjb2RlOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBpZiAoc3RvcHBpbmcpIHJldHVybjtcbiAgICBzdG9wcGluZyA9IHRydWU7XG4gICAgdm9pZCBQcm9taXNlLmFsbFNldHRsZWQoY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gY2hpbGQuc2h1dGRvd24oKSkpLnRoZW4oKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH0pO1xuICB9O1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgdm9pZCBjaGlsZC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHN0b3AoY29kZSA/PyAxKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuKHJhdzogVHVubmVsT3B0aW9ucywgY29tbWFuZDogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgW2V4ZWN1dGFibGUsIC4uLmFyZ3NdID0gY29tbWFuZDtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlVHVubmVsT3B0aW9ucyhyYXcpO1xuICBjb25zdCBjaGlsZHJlbjogQ2hpbGRQcm9jZXNzUmVzdWx0W10gPSBbXTtcblxuICAvLyBUd28gdXBzdHJlYW0gbW9kZXM6XG4gIC8vICAgLSBXUkFQOiBhIGNvbW1hbmQgYWZ0ZXIgYC0tYC4gVGhlIHdyYXBwZXIgc3Bhd25zIGl0IG9uIGEgcHJpdmF0ZSBsb29wYmFja1xuICAvLyAgICAgcG9ydCBhbmQgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCB0YWxrcyB0byBpdC5cbiAgLy8gICAtIEFUVEFDSDogbm8gY29tbWFuZCwgYnV0IGAtLWFwcC1wb3J0YCBuYW1lcyBhbiBhbHJlYWR5LXJ1bm5pbmcgdXBzdHJlYW1cbiAgLy8gICAgIChlLmcuIGEgbG9jYWwgcmV2ZXJzZSBwcm94eSkuIFRoZSBnYXRlIGZyb250cyBpdCB3aXRob3V0IHNwYXduaW5nIGFcbiAgLy8gICAgIGNoaWxkLiBUaGlzIGlzIHdoYXQgbGV0cyB0aGUgZ2F0ZSBzaXQgb24gYW4gaW50ZXJmYWNlIGluIGZyb250IG9mIGFcbiAgLy8gICAgIHNlcGFyYXRlbHktc3VwZXJ2aXNlZCBzdGFjay5cbiAgbGV0IGFwcFBvcnQ6IG51bWJlcjtcbiAgaWYgKGV4ZWN1dGFibGUpIHtcbiAgICBhcHBQb3J0ID0gcmVzb2x2ZWQuYXBwUG9ydCA/PyAoYXdhaXQgZnJlZVBvcnQoKSk7XG4gICAgY29uc3QgYXBwID0gc3Bhd24oZXhlY3V0YWJsZSwgYXJncywge1xuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBEQVRBQlJJQ0tTX0FQUF9QT1JUOiBTdHJpbmcoYXBwUG9ydCksXG4gICAgICAgIFBPUlQ6IFN0cmluZyhhcHBQb3J0KSxcbiAgICAgICAgSE9TVDogXCIxMjcuMC4wLjFcIixcbiAgICAgIH0sXG4gICAgICBzdGRpbjogXCJpbmhlcml0XCIsXG4gICAgICBzdGRvdXQ6IFwiaW5oZXJpdFwiLFxuICAgICAgc3RkZXJyOiBcImluaGVyaXRcIixcbiAgICAgIHRlcm1pbmF0ZVRpbWVvdXQ6IDEwXzAwMCxcbiAgICB9KTtcbiAgICBjaGlsZHJlbi5wdXNoKGFwcCk7XG4gIH0gZWxzZSBpZiAocmVzb2x2ZWQuYXBwUG9ydCkge1xuICAgIGFwcFBvcnQgPSByZXNvbHZlZC5hcHBQb3J0O1xuICAgIGxvZ2dlci5pbmZvKFwiYXR0YWNoaW5nIGdhdGUgdG8gZXhpc3RpbmcgdXBzdHJlYW1cIiwgeyBhcHBQb3J0IH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgIDEsXG4gICAgICBcInR1bm5lbC5uby11cHN0cmVhbVwiLFxuICAgICAgXCJubyBjb21tYW5kIGdpdmVuIChwYXNzIGl0IGFmdGVyIGAtLWApIGFuZCBubyAtLWFwcC1wb3J0IHRvIGF0dGFjaCB0b1wiLFxuICAgICk7XG4gIH1cblxuICAvLyBEeW5hbWljIGltcG9ydDogdGhlIGdhdGUgaXMgdGhlIG9ubHkgdGhpbmcgaGVyZSB0aGF0IG5lZWRzIEFwcEtpdCArIFNNVFAsIHNvXG4gIC8vIGFuIGAtLWluc2VjdXJlYCBydW4gbmV2ZXIgbG9hZHMgZWl0aGVyLlxuICBjb25zdCBnYXRlID0gcmVzb2x2ZWQuZ2F0ZS5pbnNlY3VyZVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydChcIi4vYXBwLnRzXCIpXG4gICAgICApLnN0YXJ0R2F0ZUFwcCh7XG4gICAgICAgIC4uLnJlc29sdmVkLmdhdGVDb25maWcsXG4gICAgICAgIHB1YmxpY0RvbWFpbjogcmVzb2x2ZWQuZ2F0ZS5wdWJsaWNEb21haW4gPz8gYGxvY2FsaG9zdDoke3Jlc29sdmVkLnB1YmxpY1BvcnR9YCxcbiAgICAgIH0pO1xuICBpZiAoIWdhdGUpIGxvZ2dlci53YXJuKFwicnVubmluZyBPUEVOIC0gbm8gZ2F0ZSBpcyBpbiBmcm9udCBvZiB0aGlzIHR1bm5lbFwiKTtcblxuICBhd2FpdCBzdGFydFByb3h5KHtcbiAgICBwdWJsaWNQb3J0OiByZXNvbHZlZC5wdWJsaWNQb3J0LFxuICAgIGFwcFBvcnQsXG4gICAgZ2F0ZSxcbiAgICBmb3J3YXJkSGVhZGVyczogcmVzb2x2ZWQuZ2F0ZS5mb3J3YXJkSGVhZGVycyxcbiAgICBnYXRlUGF0aHM6IHJlc29sdmVkLmdhdGUuZ2F0ZVBhdGhzLFxuICAgIGJyYW5kTmFtZTogcmVzb2x2ZWQuZ2F0ZS5icmFuZE5hbWUsXG4gICAgcGFzc2tleU5hbWVQcmVmaXg6IHJlc29sdmVkLmdhdGUucGFzc2tleU5hbWVQcmVmaXgsXG4gICAgYmluZEhvc3RzOiByZXNvbHZlZC5iaW5kSG9zdHMsXG4gIH0pO1xuXG4gIGlmICgocmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcInBvcnRyXCIgfHwgcmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcImJvdGhcIikgJiYgcmVzb2x2ZWQucG9ydHIpIHtcbiAgICBjb25zdCBwb3J0ckVudiA9IGF3YWl0IGluc3RhbGxQb3J0cigpO1xuICAgIGF3YWl0IHdyaXRlUG9ydHJDb25maWcocmVzb2x2ZWQucG9ydHIsIHBvcnRyRW52KTtcbiAgICBjaGlsZHJlbi5wdXNoKHN0YXJ0UG9ydHIocmVzb2x2ZWQucG9ydHIsIHBvcnRyRW52KSk7XG4gIH1cbiAgaWYgKChyZXNvbHZlZC50cmFuc3BvcnQgPT09IFwiZnJwXCIgfHwgcmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcImJvdGhcIikgJiYgcmVzb2x2ZWQuZnJwKSB7XG4gICAgY29uc3QgZnJwRW52ID0gYXdhaXQgaW5zdGFsbEZycCgpO1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBhd2FpdCB3cml0ZUZycENvbmZpZyhyZXNvbHZlZC5mcnAsIGZycEVudik7XG4gICAgY2hpbGRyZW4ucHVzaChzdGFydEZycChyZXNvbHZlZC5mcnAsIGZycEVudiwgY29uZmlnUGF0aCkpO1xuICB9XG4gIGNvbnN0IGFjdGl2ZVR1bm5lbENvdW50ID0gY2hpbGRyZW4ubGVuZ3RoIC0gKGV4ZWN1dGFibGUgPyAxIDogMCk7XG4gIGlmICghYWN0aXZlVHVubmVsQ291bnQpIHtcbiAgICBsb2dnZXIuaW5mbyhcIm5vIHNlbGVjdGVkIHB1YmxpYyB0dW5uZWwgaXMgY29uZmlndXJlZFwiLCB7XG4gICAgICB0cmFuc3BvcnQ6IHJlc29sdmVkLnRyYW5zcG9ydCxcbiAgICAgIHB1YmxpY1BvcnQ6IHJlc29sdmVkLnB1YmxpY1BvcnQsXG4gICAgfSk7XG4gIH1cbiAgc3VwZXJ2aXNlKGNoaWxkcmVuKTtcbn1cblxuLyoqIFRoZSBgZGJ4IHR1bm5lbGAgcHJvZ3JhbS4gTm8gc2lkZSBlZmZlY3RzIHVudGlsIHBhcnNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZSA9IFwiZGJ4IHR1bm5lbFwiKTogQ29tbWFuZCB7XG4gIGNvbnN0IHByb2dyYW0gPSBhZGRBcmdzKFxuICAgIG5ldyBDb21tYW5kKClcbiAgICAgIC5uYW1lKG5hbWUpXG4gICAgICAuZGVzY3JpcHRpb24oXCJGcm9udCBhIGNvbW1hbmQgd2l0aCBhIHB1YmxpYyB0dW5uZWwgYW5kIHBhc3N3b3JkbGVzcyBhdXRoXCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG5cbiAgLy8gYHJ1bmAgaXMgdGhlIERFRkFVTFQgYWN0aW9uIGFzIHdlbGwgYXMgYSBuYW1lZCBzdWJjb21tYW5kLCBwcmVzZXJ2aW5nIHRoZSBvbGRcbiAgLy8gd3JhcHBlcidzIGVyZ29ub21pY3MgKGBkYnggdHVubmVsIC0tYWxsb3cgeCAtLSBidW4gc3JjL3NlcnZlci50c2ApIHdoaWxlXG4gIC8vIGxlYXZpbmcgc29tZXdoZXJlIGZvciBgc3RhdHVzYCBhbmQgYGluc3RhbGxgIHRvIGxpdmUuXG4gIHByb2dyYW1cbiAgICAuYXJndW1lbnQoXCJbY29tbWFuZC4uLl1cIiwgXCJ0aGUgY29tbWFuZCB0byB3cmFwLCBhZnRlciBgLS1gXCIpXG4gICAgLmFjdGlvbihhc3luYyAoY29tbWFuZDogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHJ1bihwYXJzZUFyZ3MocHJvZ3JhbSwgVHVubmVsT3B0aW9uc1NjaGVtYSksIGNvbW1hbmQpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHJ1bkNvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInJ1blwiKS5kZXNjcmlwdGlvbihcIldyYXAgYSBjb21tYW5kICh0aGUgZGVmYXVsdCBhY3Rpb24pXCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG4gIHJ1bkNvbW1hbmRcbiAgICAuYXJndW1lbnQoXCI8Y29tbWFuZC4uLj5cIiwgXCJ0aGUgY29tbWFuZCB0byB3cmFwLCBhZnRlciBgLS1gXCIpXG4gICAgLmFjdGlvbihhc3luYyAoY29tbWFuZDogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHJ1bihwYXJzZUFyZ3MocnVuQ29tbWFuZCwgVHVubmVsT3B0aW9uc1NjaGVtYSksIGNvbW1hbmQpO1xuICAgIH0pO1xuXG4gIC8vIFdvcnRoIGl0cyBvd24gY29tbWFuZDogdGhlIG1vc3QgY29tbW9uIGZhaWx1cmUgaXMgYSB0dW5uZWwgdGhhdCBzaWxlbnRseVxuICAvLyBkb2VzIG5vdGhpbmcgYmVjYXVzZSBubyB0b2tlbiBvciBkb21haW4gcmVzb2x2ZWQsIGFuZCB0aGlzIHByaW50cyBleGFjdGx5XG4gIC8vIHdoYXQgd291bGQgaGFwcGVuIHdpdGhvdXQgc3RhcnRpbmcgYW55dGhpbmcuXG4gIGNvbnN0IHN0YXR1c0NvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInN0YXR1c1wiKS5kZXNjcmlwdGlvbihcIlJlc29sdmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHByaW50IGl0XCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG4gIHN0YXR1c0NvbW1hbmQuYWN0aW9uKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUdW5uZWxPcHRpb25zKHBhcnNlQXJncyhzdGF0dXNDb21tYW5kLCBUdW5uZWxPcHRpb25zU2NoZW1hKSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkocmVzb2x2ZWQsIG51bGwsIDIpfVxcbmApO1xuICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJpbnN0YWxsXCIpXG4gICAgLmFyZ3VtZW50KFwiW3RyYW5zcG9ydF1cIiwgXCJwb3J0ciwgZnJwLCBvciBib3RoXCIsIFwicG9ydHJcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnN0YWxsIHB1YmxpYyB0dW5uZWwgY2xpZW50IGJpbmFyaWVzIGFuZCBleGl0XCIpXG4gICAgLmFjdGlvbihhc3luYyAodHJhbnNwb3J0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IFR1bm5lbFRyYW5zcG9ydFNjaGVtYS5wYXJzZSh0cmFuc3BvcnQpO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gXCJwb3J0clwiIHx8IHBhcnNlZCA9PT0gXCJib3RoXCIpIGF3YWl0IGluc3RhbGxQb3J0cigpO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gXCJmcnBcIiB8fCBwYXJzZWQgPT09IFwiYm90aFwiKSBhd2FpdCBpbnN0YWxsRnJwKCk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG4iXX0=
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module
|
|
13
13
|
*/
|
|
14
|
-
import { type AuthGateConfig,
|
|
14
|
+
import { type AuthGateConfig, resolveFrpConfig, type TunnelTransport, type ResolvedAuthGateConfig, resolvePortrConfig } from "@dbx-tools/tunnel";
|
|
15
15
|
import { z } from "zod";
|
|
16
16
|
export declare const TunnelOptionsSchema: z.ZodObject<{
|
|
17
17
|
transport: z.ZodOptional<z.ZodEnum<{
|
|
@@ -57,7 +57,7 @@ export interface ResolvedTunnelOptions {
|
|
|
57
57
|
appPort?: number;
|
|
58
58
|
/** Interface IPs the gate listens on. Empty means the default (0.0.0.0). */
|
|
59
59
|
bindHosts: string[];
|
|
60
|
-
transport:
|
|
60
|
+
transport: TunnelTransport;
|
|
61
61
|
/**
|
|
62
62
|
* The gate config as the `authGate` PLUGIN takes it - flags only, nothing
|
|
63
63
|
* resolved. Passed straight to the plugin so it applies its own fallbacks
|
|
@@ -65,9 +65,9 @@ export interface ResolvedTunnelOptions {
|
|
|
65
65
|
*/
|
|
66
66
|
gateConfig: AuthGateConfig;
|
|
67
67
|
/** The same config after the plugin's resolution, for `status` and for routing. */
|
|
68
|
-
gate:
|
|
69
|
-
portr: ReturnType<typeof
|
|
70
|
-
frp: ReturnType<typeof
|
|
68
|
+
gate: ResolvedAuthGateConfig;
|
|
69
|
+
portr: ReturnType<typeof resolvePortrConfig>;
|
|
70
|
+
frp: ReturnType<typeof resolveFrpConfig>;
|
|
71
71
|
}
|
|
72
72
|
/** Resolve CLI flag values through the owning tunnel and auth-gate configuration rules. */
|
|
73
73
|
export declare function resolveTunnelOptions(options: TunnelOptions): ResolvedTunnelOptions;
|
|
@@ -12,24 +12,24 @@
|
|
|
12
12
|
* @module
|
|
13
13
|
*/
|
|
14
14
|
import { configUtils } from "@dbx-tools/core";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import { tcpPortOrZeroSchema, databricksEnvironmentNames, parseList } from "@dbx-tools/shared-core";
|
|
16
|
+
import { resolveFrpConfig, TunnelTransportSchema, resolveTunnelTransport, resolveAuthGateConfig, resolvePortrConfig, } from "@dbx-tools/tunnel";
|
|
17
17
|
import { z } from "zod";
|
|
18
18
|
const text = (description) => z.string().trim().min(1).optional().describe(description);
|
|
19
|
-
const port = (description) =>
|
|
19
|
+
const port = (description) => tcpPortOrZeroSchema.optional().describe(description);
|
|
20
20
|
const list = (description) => z
|
|
21
|
-
.preprocess((value) => (typeof value === "string" ?
|
|
21
|
+
.preprocess((value) => (typeof value === "string" ? parseList(value) : value), z.array(z.string().trim().min(1)))
|
|
22
22
|
.optional()
|
|
23
23
|
.describe(description);
|
|
24
24
|
export const TunnelOptionsSchema = z
|
|
25
25
|
.object({
|
|
26
|
-
transport:
|
|
26
|
+
transport: TunnelTransportSchema.optional()
|
|
27
27
|
.describe("Public tunnel transport.")
|
|
28
28
|
.meta({ env: "TUNNEL_TRANSPORT" }),
|
|
29
29
|
publicDomain: text("Public tunnel domain.").meta({ env: "TUNNEL_PUBLIC_DOMAIN" }),
|
|
30
30
|
subdomain: text("Portr subdomain."),
|
|
31
31
|
port: port("Public listener port.").meta({
|
|
32
|
-
env:
|
|
32
|
+
env: databricksEnvironmentNames.appPort,
|
|
33
33
|
}),
|
|
34
34
|
appPort: port("Private wrapped application port.").meta({
|
|
35
35
|
env: ["TUNNEL_APP_PORT", "APP_PORT"],
|
|
@@ -114,8 +114,8 @@ export function resolveTunnelOptions(options) {
|
|
|
114
114
|
publicDomain: options.publicDomain,
|
|
115
115
|
publicDomains: options.frpPublicDomain ? [options.frpPublicDomain] : undefined,
|
|
116
116
|
};
|
|
117
|
-
const gate =
|
|
118
|
-
const transport =
|
|
117
|
+
const gate = resolveAuthGateConfig(gateConfig);
|
|
118
|
+
const transport = resolveTunnelTransport(options.transport);
|
|
119
119
|
return {
|
|
120
120
|
publicPort,
|
|
121
121
|
...(appPort > 0 ? { appPort } : {}),
|
|
@@ -123,12 +123,12 @@ export function resolveTunnelOptions(options) {
|
|
|
123
123
|
transport,
|
|
124
124
|
gateConfig,
|
|
125
125
|
gate,
|
|
126
|
-
portr:
|
|
126
|
+
portr: resolvePortrConfig({
|
|
127
127
|
publicDomain: gate.publicDomain,
|
|
128
128
|
subdomain: options.subdomain,
|
|
129
129
|
port: publicPort,
|
|
130
130
|
}),
|
|
131
|
-
frp:
|
|
131
|
+
frp: resolveFrpConfig({
|
|
132
132
|
publicDomain: options.frpPublicDomain,
|
|
133
133
|
server: options.frpServer,
|
|
134
134
|
serverPort: options.frpServerPort,
|
|
@@ -139,4 +139,4 @@ export function resolveTunnelOptions(options) {
|
|
|
139
139
|
}),
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90dW5uZWwvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0UsT0FBTyxFQUF1QixHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDaEcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxXQUFtQixFQUFFLEVBQUUsQ0FDbkMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNyRSxNQUFNLElBQUksR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUNuQyxDQUFDO0tBQ0UsVUFBVSxDQUNULENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQzdFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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Q1YsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO1FBQ2xDLFNBQVM7UUFDVCxVQUFVO1FBQ1YsSUFBSTtRQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7WUFDOUIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixJQUFJLEVBQUUsVUFBVTtTQUNqQixDQUFDO1FBQ0YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN4QixZQUFZLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDckMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQ3pCLFVBQVUsRUFBRSxPQUFPLENBQUMsYUFBYTtZQUNqQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVc7WUFDN0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQ3ZCLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWTtZQUMvQixJQUFJLEVBQUUsVUFBVTtTQUNqQixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZsYWcgLT4gY29uZmlnIC0+IGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYGRieCB0dW5uZWxgLlxuICpcbiAqIFRoZSBwb2ludCBvZiB0aGlzIG1vZHVsZSBpcyB0aGF0IGl0IGRvZXMgYWxtb3N0IE5PVEhJTkcgaXRzZWxmOiBldmVyeSBnYXRlXG4gKiBzZXR0aW5nIGlzIGhhbmRlZCBzdHJhaWdodCB0byBgQGRieC10b29scy90dW5uZWxgJ3Mgb3duXG4gKiBgcGx1Z2luLnJlc29sdmVBdXRoR2F0ZUNvbmZpZ2AsIHdoaWNoIGlzIHRoZSBzYW1lIGZ1bmN0aW9uIHRoZSBpbi1wcm9jZXNzXG4gKiBwbHVnaW4gcGF0aCBjYWxscy4gVGhlIENMSSB0aGVyZWZvcmUgY2Fubm90IGRyaWZ0IGZyb20gdGhlIHBsdWdpbiBvbiBhIGRlZmF1bHQsXG4gKiBhbiBlbnYgbmFtZSwgb3IgYSBjb2VyY2lvbiBydWxlIC0gYSBmbGFnIGlzIGp1c3QgYSB2YWx1ZSBwYXNzZWQgd2hlcmUgdGhlXG4gKiBwbHVnaW4ncyBgY29uZmlnYCBvYmplY3Qgd291bGQgZ28sIGFuZCBgY29uZmlnLipgIGZpbGxzIHRoZSByZXN0IGluIGZyb20gdGhlXG4gKiBlbnZpcm9ubWVudCwgYSBgLmVudmAgZmlsZSwgb3IgYGRhdGFicmlja3MueW1sYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBvcHRpb25zIGFzIHNoYXJlZE9wdGlvbnMsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXV0aEdhdGVDb25maWcsIGZycCwgaW50ZXJjZXB0b3IsIHBsdWdpbiwgcG9ydHIgfSBmcm9tIFwiQGRieC10b29scy90dW5uZWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IHRleHQgPSAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoZGVzY3JpcHRpb24pO1xuY29uc3QgcG9ydCA9IChkZXNjcmlwdGlvbjogc3RyaW5nKSA9PlxuICBzaGFyZWRPcHRpb25zLnRjcFBvcnRPclplcm9TY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShkZXNjcmlwdGlvbik7XG5jb25zdCBsaXN0ID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+XG4gIHpcbiAgICAucHJlcHJvY2VzcyhcbiAgICAgICh2YWx1ZSkgPT4gKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHN0cmluZ1V0aWxzLnBhcnNlTGlzdCh2YWx1ZSkgOiB2YWx1ZSksXG4gICAgICB6LmFycmF5KHouc3RyaW5nKCkudHJpbSgpLm1pbigxKSksXG4gICAgKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKGRlc2NyaXB0aW9uKTtcblxuZXhwb3J0IGNvbnN0IFR1bm5lbE9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHRyYW5zcG9ydDogaW50ZXJjZXB0b3IuVHVubmVsVHJhbnNwb3J0U2NoZW1hLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIlB1YmxpYyB0dW5uZWwgdHJhbnNwb3J0LlwiKVxuICAgICAgLm1ldGEoeyBlbnY6IFwiVFVOTkVMX1RSQU5TUE9SVFwiIH0pLFxuICAgIHB1YmxpY0RvbWFpbjogdGV4dChcIlB1YmxpYyB0dW5uZWwgZG9tYWluLlwiKS5tZXRhKHsgZW52OiBcIlRVTk5FTF9QVUJMSUNfRE9NQUlOXCIgfSksXG4gICAgc3ViZG9tYWluOiB0ZXh0KFwiUG9ydHIgc3ViZG9tYWluLlwiKSxcbiAgICBwb3J0OiBwb3J0KFwiUHVibGljIGxpc3RlbmVyIHBvcnQuXCIpLm1ldGEoe1xuICAgICAgZW52OiBzaGFyZWRPcHRpb25zLmRhdGFicmlja3NFbnZpcm9ubWVudE5hbWVzLmFwcFBvcnQsXG4gICAgfSksXG4gICAgYXBwUG9ydDogcG9ydChcIlByaXZhdGUgd3JhcHBlZCBhcHBsaWNhdGlvbiBwb3J0LlwiKS5tZXRhKHtcbiAgICAgIGVudjogW1wiVFVOTkVMX0FQUF9QT1JUXCIsIFwiQVBQX1BPUlRcIl0sXG4gICAgfSksXG4gICAgYWxsb3c6IGxpc3QoXCJFbWFpbCBhbGxvdy1saXN0IHBhdHRlcm5zLlwiKS5tZXRhKHsgZW52OiBcIlRVTk5FTF9BVVRIX0FMTE9XXCIgfSksXG4gICAgc3ViamVjdDogdGV4dChcIlZlcmlmaWNhdGlvbiBlbWFpbCBzdWJqZWN0LlwiKS5tZXRhKHsgZW52OiBcIlRVTk5FTF9BVVRIX1NVQkpFQ1RcIiB9KSxcbiAgICBicmFuZE5hbWU6IHRleHQoXCJWZXJpZmljYXRpb24gZW1haWwgYnJhbmQgbmFtZS5cIikubWV0YSh7IGVudjogXCJUVU5ORUxfQVVUSF9CUkFORF9OQU1FXCIgfSksXG4gICAgcGFzc2tleU5hbWVQcmVmaXg6IHRleHQoXCJQcmVmaXggZm9yIGh1bWFuaXplZCB0dW5uZWwgcGFzc2tleSBuYW1lcy5cIikubWV0YSh7XG4gICAgICBlbnY6IFwiVFVOTkVMX0FVVEhfUEFTU0tFWV9OQU1FX1BSRUZJWFwiLFxuICAgIH0pLFxuICAgIG1lc3NhZ2U6IHRleHQoXCJWZXJpZmljYXRpb24gZW1haWwgbWVzc2FnZS5cIikubWV0YSh7IGVudjogXCJUVU5ORUxfQVVUSF9NRVNTQUdFXCIgfSksXG4gICAgc2Vzc2lvblR0bFNlY29uZHM6IHouY29lcmNlXG4gICAgICAubnVtYmVyPG51bWJlcj4oKVxuICAgICAgLnBvc2l0aXZlKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJTZXNzaW9uIGxpZmV0aW1lIGluIHNlY29uZHMuXCIpXG4gICAgICAubWV0YSh7IGVudjogXCJUVU5ORUxfQVVUSF9TRVNTSU9OX1RUTFwiIH0pLFxuICAgIGNvZGVUdGxTZWNvbmRzOiB6LmNvZXJjZVxuICAgICAgLm51bWJlcjxudW1iZXI+KClcbiAgICAgIC5wb3NpdGl2ZSgpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiT25lLXRpbWUtY29kZSBsaWZldGltZSBpbiBzZWNvbmRzLlwiKVxuICAgICAgLm1ldGEoeyBlbnY6IFwiVFVOTkVMX0FVVEhfQ09ERV9UVExcIiB9KSxcbiAgICBzZXNzaW9uQ3V0b2ZmOiB0ZXh0KFwiSW52YWxpZGF0ZSBzZXNzaW9ucyBpc3N1ZWQgYmVmb3JlIHRoaXMgdmFsdWUuXCIpLm1ldGEoe1xuICAgICAgZW52OiBcIlRVTk5FTF9BVVRIX1NFU1NJT05fQ1VUT0ZGXCIsXG4gICAgfSksXG4gICAgc3RvcmFnZTogelxuICAgICAgLmVudW0oW1wiYXV0b1wiLCBcImxha2ViYXNlXCIsIFwic3FsaXRlXCJdKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkF1dGhlbnRpY2F0aW9uIGRhdGFiYXNlIG1vZGUuXCIpXG4gICAgICAubWV0YSh7IGVudjogXCJUVU5ORUxfQVVUSF9TVE9SQUdFXCIgfSksXG4gICAgc3FsaXRlUGF0aDogdGV4dChcIkxvY2FsIGF1dGhlbnRpY2F0aW9uIFNRTGl0ZSBmaWxlLlwiKS5tZXRhKHtcbiAgICAgIGVudjogXCJUVU5ORUxfQVVUSF9TUUxJVEVfUEFUSFwiLFxuICAgIH0pLFxuICAgIGZvcndhcmRIZWFkZXJzOiBsaXN0KFwiQWRkaXRpb25hbCBmb3J3YXJkZWQgcmVxdWVzdCBoZWFkZXIgcGF0dGVybnMuXCIpLm1ldGEoe1xuICAgICAgZW52OiBcIlRVTk5FTF9GT1JXQVJEX0hFQURFUlNcIixcbiAgICB9KSxcbiAgICBnYXRlUGF0aHM6IGxpc3QoXCJBZGRpdGlvbmFsIHBhdGggcHJlZml4ZXMgcmVxdWlyaW5nIGF1dGhlbnRpY2F0aW9uLlwiKS5tZXRhKHtcbiAgICAgIGVudjogXCJUVU5ORUxfR0FURV9QQVRIU1wiLFxuICAgIH0pLFxuICAgIGJpbmRIb3N0czogbGlzdChcIkludGVyZmFjZSBJUHMgdGhlIGdhdGUgbGlzdGVucyBvbi5cIiksXG4gICAgaW5zZWN1cmU6IHpcbiAgICAgIC5ib29sZWFuKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJSdW4gd2l0aG91dCBhbiBhdXRoZW50aWNhdGlvbiBnYXRlLlwiKVxuICAgICAgLm1ldGEoeyBlbnY6IFwiVFVOTkVMX0lOU0VDVVJFXCIgfSksXG4gICAgZnJwU2VydmVyOiB0ZXh0KFwiRlJQIGNvbnRyb2wgaG9zdC5cIikubWV0YSh7IGVudjogXCJGUlBfU0VSVkVSXCIgfSksXG4gICAgZnJwUHVibGljRG9tYWluOiB0ZXh0KFwiRlJQIHB1YmxpYyBIVFRQIGRvbWFpbi5cIikubWV0YSh7XG4gICAgICBlbnY6IFwiVFVOTkVMX0ZSUF9QVUJMSUNfRE9NQUlOXCIsXG4gICAgfSksXG4gICAgZnJwU2VydmVyUG9ydDogcG9ydChcIkZSUCBjb250cm9sIHBvcnQuXCIpLm1ldGEoeyBlbnY6IFwiRlJQX1NFUlZFUl9QT1JUXCIgfSksXG4gICAgZnJwUHJvdG9jb2w6IHRleHQoXCJGUlAgdHJhbnNwb3J0IHByb3RvY29sLlwiKS5tZXRhKHsgZW52OiBcIkZSUF9QUk9UT0NPTFwiIH0pLFxuICAgIGZycFRva2VuOiB0ZXh0KFwiRlJQIGF1dGhlbnRpY2F0aW9uIHRva2VuLlwiKS5tZXRhKHsgZW52OiBbXCJGUlBfVE9LRU5cIiwgXCJUVU5ORUxfVE9LRU5cIl0gfSksXG4gICAgZnJwUHJveHlOYW1lOiB0ZXh0KFwiRlJQIHByb3h5IHJlZ2lzdHJhdGlvbiBuYW1lLlwiKS5tZXRhKHsgZW52OiBcIkZSUF9QUk9YWV9OQU1FXCIgfSksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJQdWJsaWMgdHVubmVsIHdyYXBwZXIgY29tbWFuZC1saW5lIG9wdGlvbnMuXCIpO1xuXG5leHBvcnQgdHlwZSBUdW5uZWxPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIFR1bm5lbE9wdGlvbnNTY2hlbWE+O1xuXG4vKiogRnVsbHkgcmVzb2x2ZWQgbGlzdGVuZXIsIGdhdGUsIGFuZCB0cmFuc3BvcnQgc2V0dGluZ3MgdXNlZCB0byBzdGFydCBhIHR1bm5lbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRUdW5uZWxPcHRpb25zIHtcbiAgLyoqIFRoZSBwb3J0IHRoZSB3cmFwcGVyIGl0c2VsZiBsaXN0ZW5zIG9uIC0gd2hhdCBwb3J0ciBmb3J3YXJkcyB0by4gKi9cbiAgcHVibGljUG9ydDogbnVtYmVyO1xuICAvKiogVGhlIHByaXZhdGUgcG9ydCB0aGUgd3JhcHBlZCBhcHAgaXMgdG9sZCB0byBiaW5kLiBVbnNldCBtZWFucyBcInBpY2sgb25lXCIuICovXG4gIGFwcFBvcnQ/OiBudW1iZXI7XG4gIC8qKiBJbnRlcmZhY2UgSVBzIHRoZSBnYXRlIGxpc3RlbnMgb24uIEVtcHR5IG1lYW5zIHRoZSBkZWZhdWx0ICgwLjAuMC4wKS4gKi9cbiAgYmluZEhvc3RzOiBzdHJpbmdbXTtcbiAgdHJhbnNwb3J0OiBpbnRlcmNlcHRvci5UdW5uZWxUcmFuc3BvcnQ7XG4gIC8qKlxuICAgKiBUaGUgZ2F0ZSBjb25maWcgYXMgdGhlIGBhdXRoR2F0ZWAgUExVR0lOIHRha2VzIGl0IC0gZmxhZ3Mgb25seSwgbm90aGluZ1xuICAgKiByZXNvbHZlZC4gUGFzc2VkIHN0cmFpZ2h0IHRvIHRoZSBwbHVnaW4gc28gaXQgYXBwbGllcyBpdHMgb3duIGZhbGxiYWNrc1xuICAgKiBleGFjdGx5IG9uY2UsIGluIHRoZSBvbmUgcGxhY2UgdGhhdCBvd25zIHRoZW0uXG4gICAqL1xuICBnYXRlQ29uZmlnOiBBdXRoR2F0ZUNvbmZpZztcbiAgLyoqIFRoZSBzYW1lIGNvbmZpZyBhZnRlciB0aGUgcGx1Z2luJ3MgcmVzb2x1dGlvbiwgZm9yIGBzdGF0dXNgIGFuZCBmb3Igcm91dGluZy4gKi9cbiAgZ2F0ZTogcGx1Z2luLlJlc29sdmVkQXV0aEdhdGVDb25maWc7XG4gIHBvcnRyOiBSZXR1cm5UeXBlPHR5cGVvZiBwb3J0ci5yZXNvbHZlUG9ydHJDb25maWc+O1xuICBmcnA6IFJldHVyblR5cGU8dHlwZW9mIGZycC5yZXNvbHZlRnJwQ29uZmlnPjtcbn1cblxuLyoqIFJlc29sdmUgQ0xJIGZsYWcgdmFsdWVzIHRocm91Z2ggdGhlIG93bmluZyB0dW5uZWwgYW5kIGF1dGgtZ2F0ZSBjb25maWd1cmF0aW9uIHJ1bGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUdW5uZWxPcHRpb25zKG9wdGlvbnM6IFR1bm5lbE9wdGlvbnMpOiBSZXNvbHZlZFR1bm5lbE9wdGlvbnMge1xuICAvLyBUaGUgRGF0YWJyaWNrcyBBcHBzIHJ1bnRpbWUgY29udHJhY3Q6IHRoZSBwbGF0Zm9ybSByb3V0ZXMgdG9cbiAgLy8gREFUQUJSSUNLU19BUFBfUE9SVCwgc28gdGhlIFdSQVBQRVIgY2xhaW1zIGl0IGFuZCB0aGUgd3JhcHBlZCBhcHAgaXMgbW92ZWRcbiAgLy8gdG8gYSBwcml2YXRlIG9uZS5cbiAgY29uc3QgcHVibGljUG9ydCA9IGNvbmZpZ1V0aWxzLnBvcnQob3B0aW9ucy5wb3J0LCBcIkRBVEFCUklDS1NfQVBQX1BPUlRcIiwgODAwMCk7XG4gIGNvbnN0IGFwcFBvcnQgPSBjb25maWdVdGlscy5wb3J0KG9wdGlvbnMuYXBwUG9ydCwgXCJBUFBfUE9SVFwiLCAwLCB7IHByZWZpeDogXCJUVU5ORUxcIiB9KTtcbiAgY29uc3QgZ2F0ZUNvbmZpZzogQXV0aEdhdGVDb25maWcgPSB7XG4gICAgYWxsb3c6IG9wdGlvbnMuYWxsb3csXG4gICAgc3ViamVjdDogb3B0aW9ucy5zdWJqZWN0LFxuICAgIGJyYW5kTmFtZTogb3B0aW9ucy5icmFuZE5hbWUsXG4gICAgcGFzc2tleU5hbWVQcmVmaXg6IG9wdGlvbnMucGFzc2tleU5hbWVQcmVmaXgsXG4gICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgIC8vIENvZXJjZWQsIG5vdCByZXNvbHZlZDogdGhlIHBsdWdpbiBvd25zIHRoZSBlbnYgbmFtZSBhbmQgdGhlIGRlZmF1bHQgZm9yXG4gICAgLy8gdGhlc2UsIHNvIHRoZSBmbGFnIGlzIHBhc3NlZCB0aHJvdWdoIGFzIHRoZSBgY29uZmlnYCB2YWx1ZSBpdCBleHBlY3RzIGFuZFxuICAgIC8vIG9ubHkgbmVlZHMgYSBzdHJpbmcgLT4gbnVtYmVyIG51ZGdlIG9uIHRoZSB3YXkuXG4gICAgc2Vzc2lvblR0bFNlY29uZHM6IG9wdGlvbnMuc2Vzc2lvblR0bFNlY29uZHMsXG4gICAgY29kZVR0bFNlY29uZHM6IG9wdGlvbnMuY29kZVR0bFNlY29uZHMsXG4gICAgc2Vzc2lvbkN1dG9mZjogb3B0aW9ucy5zZXNzaW9uQ3V0b2ZmLFxuICAgIHN0b3JhZ2U6IG9wdGlvbnMuc3RvcmFnZSxcbiAgICBzcWxpdGVQYXRoOiBvcHRpb25zLnNxbGl0ZVBhdGgsXG4gICAgZm9yd2FyZEhlYWRlcnM6IG9wdGlvbnMuZm9yd2FyZEhlYWRlcnMsXG4gICAgZ2F0ZVBhdGhzOiBvcHRpb25zLmdhdGVQYXRocyxcbiAgICBpbnNlY3VyZTogb3B0aW9ucy5pbnNlY3VyZSxcbiAgICBwdWJsaWNEb21haW46IG9wdGlvbnMucHVibGljRG9tYWluLFxuICAgIHB1YmxpY0RvbWFpbnM6IG9wdGlvbnMuZnJwUHVibGljRG9tYWluID8gW29wdGlvbnMuZnJwUHVibGljRG9tYWluXSA6IHVuZGVmaW5lZCxcbiAgfTtcbiAgY29uc3QgZ2F0ZSA9IHBsdWdpbi5yZXNvbHZlQXV0aEdhdGVDb25maWcoZ2F0ZUNvbmZpZyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGludGVyY2VwdG9yLnJlc29sdmVUdW5uZWxUcmFuc3BvcnQob3B0aW9ucy50cmFuc3BvcnQpO1xuICByZXR1cm4ge1xuICAgIHB1YmxpY1BvcnQsXG4gICAgLi4uKGFwcFBvcnQgPiAwID8geyBhcHBQb3J0IH0gOiB7fSksXG4gICAgYmluZEhvc3RzOiBvcHRpb25zLmJpbmRIb3N0cyA/PyBbXSxcbiAgICB0cmFuc3BvcnQsXG4gICAgZ2F0ZUNvbmZpZyxcbiAgICBnYXRlLFxuICAgIHBvcnRyOiBwb3J0ci5yZXNvbHZlUG9ydHJDb25maWcoe1xuICAgICAgcHVibGljRG9tYWluOiBnYXRlLnB1YmxpY0RvbWFpbixcbiAgICAgIHN1YmRvbWFpbjogb3B0aW9ucy5zdWJkb21haW4sXG4gICAgICBwb3J0OiBwdWJsaWNQb3J0LFxuICAgIH0pLFxuICAgIGZycDogZnJwLnJlc29sdmVGcnBDb25maWcoe1xuICAgICAgcHVibGljRG9tYWluOiBvcHRpb25zLmZycFB1YmxpY0RvbWFpbixcbiAgICAgIHNlcnZlcjogb3B0aW9ucy5mcnBTZXJ2ZXIsXG4gICAgICBzZXJ2ZXJQb3J0OiBvcHRpb25zLmZycFNlcnZlclBvcnQsXG4gICAgICBwcm90b2NvbDogb3B0aW9ucy5mcnBQcm90b2NvbCxcbiAgICAgIHRva2VuOiBvcHRpb25zLmZycFRva2VuLFxuICAgICAgcHJveHlOYW1lOiBvcHRpb25zLmZycFByb3h5TmFtZSxcbiAgICAgIHBvcnQ6IHB1YmxpY1BvcnQsXG4gICAgfSksXG4gIH07XG59XG4iXX0=
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90dW5uZWwvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BHLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBRXJCLHNCQUFzQixFQUV0QixxQkFBcUIsRUFDckIsa0JBQWtCLEdBQ25CLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixNQUFNLElBQUksR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2hHLE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNGLE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQ25DLENBQUM7S0FDRSxVQUFVLENBQ1QsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNqRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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Q0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO1FBQ2xDLFNBQVM7UUFDVCxVQUFVO1FBQ1YsSUFBSTtRQUNKLEtBQUssRUFBRSxrQkFBa0IsQ0FBQztZQUN4QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUM7UUFDRixHQUFHLEVBQUUsZ0JBQWdCLENBQUM7WUFDcEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxlQUFlO1lBQ3JDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUztZQUN6QixVQUFVLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDakMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQzdCLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUTtZQUN2QixTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDL0IsSUFBSSxFQUFFLFVBQVU7U0FDakIsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGbGFnIC0+IGNvbmZpZyAtPiBkZWZhdWx0IHJlc29sdXRpb24gZm9yIGBkYnggdHVubmVsYC5cbiAqXG4gKiBUaGUgcG9pbnQgb2YgdGhpcyBtb2R1bGUgaXMgdGhhdCBpdCBkb2VzIGFsbW9zdCBOT1RISU5HIGl0c2VsZjogZXZlcnkgZ2F0ZVxuICogc2V0dGluZyBpcyBoYW5kZWQgc3RyYWlnaHQgdG8gYEBkYngtdG9vbHMvdHVubmVsYCdzIG93blxuICogYHBsdWdpbi5yZXNvbHZlQXV0aEdhdGVDb25maWdgLCB3aGljaCBpcyB0aGUgc2FtZSBmdW5jdGlvbiB0aGUgaW4tcHJvY2Vzc1xuICogcGx1Z2luIHBhdGggY2FsbHMuIFRoZSBDTEkgdGhlcmVmb3JlIGNhbm5vdCBkcmlmdCBmcm9tIHRoZSBwbHVnaW4gb24gYSBkZWZhdWx0LFxuICogYW4gZW52IG5hbWUsIG9yIGEgY29lcmNpb24gcnVsZSAtIGEgZmxhZyBpcyBqdXN0IGEgdmFsdWUgcGFzc2VkIHdoZXJlIHRoZVxuICogcGx1Z2luJ3MgYGNvbmZpZ2Agb2JqZWN0IHdvdWxkIGdvLCBhbmQgYGNvbmZpZy4qYCBmaWxscyB0aGUgcmVzdCBpbiBmcm9tIHRoZVxuICogZW52aXJvbm1lbnQsIGEgYC5lbnZgIGZpbGUsIG9yIGBkYXRhYnJpY2tzLnltbGAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNvbmZpZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgdGNwUG9ydE9yWmVyb1NjaGVtYSwgZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMsIHBhcnNlTGlzdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIEF1dGhHYXRlQ29uZmlnLFxuICByZXNvbHZlRnJwQ29uZmlnLFxuICBUdW5uZWxUcmFuc3BvcnRTY2hlbWEsXG4gIHR5cGUgVHVubmVsVHJhbnNwb3J0LFxuICByZXNvbHZlVHVubmVsVHJhbnNwb3J0LFxuICB0eXBlIFJlc29sdmVkQXV0aEdhdGVDb25maWcsXG4gIHJlc29sdmVBdXRoR2F0ZUNvbmZpZyxcbiAgcmVzb2x2ZVBvcnRyQ29uZmlnLFxufSBmcm9tIFwiQGRieC10b29scy90dW5uZWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IHRleHQgPSAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoZGVzY3JpcHRpb24pO1xuY29uc3QgcG9ydCA9IChkZXNjcmlwdGlvbjogc3RyaW5nKSA9PiB0Y3BQb3J0T3JaZXJvU2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoZGVzY3JpcHRpb24pO1xuY29uc3QgbGlzdCA9IChkZXNjcmlwdGlvbjogc3RyaW5nKSA9PlxuICB6XG4gICAgLnByZXByb2Nlc3MoXG4gICAgICAodmFsdWUpID0+ICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBwYXJzZUxpc3QodmFsdWUpIDogdmFsdWUpLFxuICAgICAgei5hcnJheSh6LnN0cmluZygpLnRyaW0oKS5taW4oMSkpLFxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShkZXNjcmlwdGlvbik7XG5cbmV4cG9ydCBjb25zdCBUdW5uZWxPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0cmFuc3BvcnQ6IFR1bm5lbFRyYW5zcG9ydFNjaGVtYS5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJQdWJsaWMgdHVubmVsIHRyYW5zcG9ydC5cIilcbiAgICAgIC5tZXRhKHsgZW52OiBcIlRVTk5FTF9UUkFOU1BPUlRcIiB9KSxcbiAgICBwdWJsaWNEb21haW46IHRleHQoXCJQdWJsaWMgdHVubmVsIGRvbWFpbi5cIikubWV0YSh7IGVudjogXCJUVU5ORUxfUFVCTElDX0RPTUFJTlwiIH0pLFxuICAgIHN1YmRvbWFpbjogdGV4dChcIlBvcnRyIHN1YmRvbWFpbi5cIiksXG4gICAgcG9ydDogcG9ydChcIlB1YmxpYyBsaXN0ZW5lciBwb3J0LlwiKS5tZXRhKHtcbiAgICAgIGVudjogZGF0YWJyaWNrc0Vudmlyb25tZW50TmFtZXMuYXBwUG9ydCxcbiAgICB9KSxcbiAgICBhcHBQb3J0OiBwb3J0KFwiUHJpdmF0ZSB3cmFwcGVkIGFwcGxpY2F0aW9uIHBvcnQuXCIpLm1ldGEoe1xuICAgICAgZW52OiBbXCJUVU5ORUxfQVBQX1BPUlRcIiwgXCJBUFBfUE9SVFwiXSxcbiAgICB9KSxcbiAgICBhbGxvdzogbGlzdChcIkVtYWlsIGFsbG93LWxpc3QgcGF0dGVybnMuXCIpLm1ldGEoeyBlbnY6IFwiVFVOTkVMX0FVVEhfQUxMT1dcIiB9KSxcbiAgICBzdWJqZWN0OiB0ZXh0KFwiVmVyaWZpY2F0aW9uIGVtYWlsIHN1YmplY3QuXCIpLm1ldGEoeyBlbnY6IFwiVFVOTkVMX0FVVEhfU1VCSkVDVFwiIH0pLFxuICAgIGJyYW5kTmFtZTogdGV4dChcIlZlcmlmaWNhdGlvbiBlbWFpbCBicmFuZCBuYW1lLlwiKS5tZXRhKHsgZW52OiBcIlRVTk5FTF9BVVRIX0JSQU5EX05BTUVcIiB9KSxcbiAgICBwYXNza2V5TmFtZVByZWZpeDogdGV4dChcIlByZWZpeCBmb3IgaHVtYW5pemVkIHR1bm5lbCBwYXNza2V5IG5hbWVzLlwiKS5tZXRhKHtcbiAgICAgIGVudjogXCJUVU5ORUxfQVVUSF9QQVNTS0VZX05BTUVfUFJFRklYXCIsXG4gICAgfSksXG4gICAgbWVzc2FnZTogdGV4dChcIlZlcmlmaWNhdGlvbiBlbWFpbCBtZXNzYWdlLlwiKS5tZXRhKHsgZW52OiBcIlRVTk5FTF9BVVRIX01FU1NBR0VcIiB9KSxcbiAgICBzZXNzaW9uVHRsU2Vjb25kczogei5jb2VyY2VcbiAgICAgIC5udW1iZXI8bnVtYmVyPigpXG4gICAgICAucG9zaXRpdmUoKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIlNlc3Npb24gbGlmZXRpbWUgaW4gc2Vjb25kcy5cIilcbiAgICAgIC5tZXRhKHsgZW52OiBcIlRVTk5FTF9BVVRIX1NFU1NJT05fVFRMXCIgfSksXG4gICAgY29kZVR0bFNlY29uZHM6IHouY29lcmNlXG4gICAgICAubnVtYmVyPG51bWJlcj4oKVxuICAgICAgLnBvc2l0aXZlKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJPbmUtdGltZS1jb2RlIGxpZmV0aW1lIGluIHNlY29uZHMuXCIpXG4gICAgICAubWV0YSh7IGVudjogXCJUVU5ORUxfQVVUSF9DT0RFX1RUTFwiIH0pLFxuICAgIHNlc3Npb25DdXRvZmY6IHRleHQoXCJJbnZhbGlkYXRlIHNlc3Npb25zIGlzc3VlZCBiZWZvcmUgdGhpcyB2YWx1ZS5cIikubWV0YSh7XG4gICAgICBlbnY6IFwiVFVOTkVMX0FVVEhfU0VTU0lPTl9DVVRPRkZcIixcbiAgICB9KSxcbiAgICBzdG9yYWdlOiB6XG4gICAgICAuZW51bShbXCJhdXRvXCIsIFwibGFrZWJhc2VcIiwgXCJzcWxpdGVcIl0pXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiQXV0aGVudGljYXRpb24gZGF0YWJhc2UgbW9kZS5cIilcbiAgICAgIC5tZXRhKHsgZW52OiBcIlRVTk5FTF9BVVRIX1NUT1JBR0VcIiB9KSxcbiAgICBzcWxpdGVQYXRoOiB0ZXh0KFwiTG9jYWwgYXV0aGVudGljYXRpb24gU1FMaXRlIGZpbGUuXCIpLm1ldGEoe1xuICAgICAgZW52OiBcIlRVTk5FTF9BVVRIX1NRTElURV9QQVRIXCIsXG4gICAgfSksXG4gICAgZm9yd2FyZEhlYWRlcnM6IGxpc3QoXCJBZGRpdGlvbmFsIGZvcndhcmRlZCByZXF1ZXN0IGhlYWRlciBwYXR0ZXJucy5cIikubWV0YSh7XG4gICAgICBlbnY6IFwiVFVOTkVMX0ZPUldBUkRfSEVBREVSU1wiLFxuICAgIH0pLFxuICAgIGdhdGVQYXRoczogbGlzdChcIkFkZGl0aW9uYWwgcGF0aCBwcmVmaXhlcyByZXF1aXJpbmcgYXV0aGVudGljYXRpb24uXCIpLm1ldGEoe1xuICAgICAgZW52OiBcIlRVTk5FTF9HQVRFX1BBVEhTXCIsXG4gICAgfSksXG4gICAgYmluZEhvc3RzOiBsaXN0KFwiSW50ZXJmYWNlIElQcyB0aGUgZ2F0ZSBsaXN0ZW5zIG9uLlwiKSxcbiAgICBpbnNlY3VyZTogelxuICAgICAgLmJvb2xlYW4oKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIlJ1biB3aXRob3V0IGFuIGF1dGhlbnRpY2F0aW9uIGdhdGUuXCIpXG4gICAgICAubWV0YSh7IGVudjogXCJUVU5ORUxfSU5TRUNVUkVcIiB9KSxcbiAgICBmcnBTZXJ2ZXI6IHRleHQoXCJGUlAgY29udHJvbCBob3N0LlwiKS5tZXRhKHsgZW52OiBcIkZSUF9TRVJWRVJcIiB9KSxcbiAgICBmcnBQdWJsaWNEb21haW46IHRleHQoXCJGUlAgcHVibGljIEhUVFAgZG9tYWluLlwiKS5tZXRhKHtcbiAgICAgIGVudjogXCJUVU5ORUxfRlJQX1BVQkxJQ19ET01BSU5cIixcbiAgICB9KSxcbiAgICBmcnBTZXJ2ZXJQb3J0OiBwb3J0KFwiRlJQIGNvbnRyb2wgcG9ydC5cIikubWV0YSh7IGVudjogXCJGUlBfU0VSVkVSX1BPUlRcIiB9KSxcbiAgICBmcnBQcm90b2NvbDogdGV4dChcIkZSUCB0cmFuc3BvcnQgcHJvdG9jb2wuXCIpLm1ldGEoeyBlbnY6IFwiRlJQX1BST1RPQ09MXCIgfSksXG4gICAgZnJwVG9rZW46IHRleHQoXCJGUlAgYXV0aGVudGljYXRpb24gdG9rZW4uXCIpLm1ldGEoeyBlbnY6IFtcIkZSUF9UT0tFTlwiLCBcIlRVTk5FTF9UT0tFTlwiXSB9KSxcbiAgICBmcnBQcm94eU5hbWU6IHRleHQoXCJGUlAgcHJveHkgcmVnaXN0cmF0aW9uIG5hbWUuXCIpLm1ldGEoeyBlbnY6IFwiRlJQX1BST1hZX05BTUVcIiB9KSxcbiAgfSlcbiAgLnN0cmljdCgpXG4gIC5kZXNjcmliZShcIlB1YmxpYyB0dW5uZWwgd3JhcHBlciBjb21tYW5kLWxpbmUgb3B0aW9ucy5cIik7XG5cbmV4cG9ydCB0eXBlIFR1bm5lbE9wdGlvbnMgPSB6Lm91dHB1dDx0eXBlb2YgVHVubmVsT3B0aW9uc1NjaGVtYT47XG5cbi8qKiBGdWxseSByZXNvbHZlZCBsaXN0ZW5lciwgZ2F0ZSwgYW5kIHRyYW5zcG9ydCBzZXR0aW5ncyB1c2VkIHRvIHN0YXJ0IGEgdHVubmVsLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFR1bm5lbE9wdGlvbnMge1xuICAvKiogVGhlIHBvcnQgdGhlIHdyYXBwZXIgaXRzZWxmIGxpc3RlbnMgb24gLSB3aGF0IHBvcnRyIGZvcndhcmRzIHRvLiAqL1xuICBwdWJsaWNQb3J0OiBudW1iZXI7XG4gIC8qKiBUaGUgcHJpdmF0ZSBwb3J0IHRoZSB3cmFwcGVkIGFwcCBpcyB0b2xkIHRvIGJpbmQuIFVuc2V0IG1lYW5zIFwicGljayBvbmVcIi4gKi9cbiAgYXBwUG9ydD86IG51bWJlcjtcbiAgLyoqIEludGVyZmFjZSBJUHMgdGhlIGdhdGUgbGlzdGVucyBvbi4gRW1wdHkgbWVhbnMgdGhlIGRlZmF1bHQgKDAuMC4wLjApLiAqL1xuICBiaW5kSG9zdHM6IHN0cmluZ1tdO1xuICB0cmFuc3BvcnQ6IFR1bm5lbFRyYW5zcG9ydDtcbiAgLyoqXG4gICAqIFRoZSBnYXRlIGNvbmZpZyBhcyB0aGUgYGF1dGhHYXRlYCBQTFVHSU4gdGFrZXMgaXQgLSBmbGFncyBvbmx5LCBub3RoaW5nXG4gICAqIHJlc29sdmVkLiBQYXNzZWQgc3RyYWlnaHQgdG8gdGhlIHBsdWdpbiBzbyBpdCBhcHBsaWVzIGl0cyBvd24gZmFsbGJhY2tzXG4gICAqIGV4YWN0bHkgb25jZSwgaW4gdGhlIG9uZSBwbGFjZSB0aGF0IG93bnMgdGhlbS5cbiAgICovXG4gIGdhdGVDb25maWc6IEF1dGhHYXRlQ29uZmlnO1xuICAvKiogVGhlIHNhbWUgY29uZmlnIGFmdGVyIHRoZSBwbHVnaW4ncyByZXNvbHV0aW9uLCBmb3IgYHN0YXR1c2AgYW5kIGZvciByb3V0aW5nLiAqL1xuICBnYXRlOiBSZXNvbHZlZEF1dGhHYXRlQ29uZmlnO1xuICBwb3J0cjogUmV0dXJuVHlwZTx0eXBlb2YgcmVzb2x2ZVBvcnRyQ29uZmlnPjtcbiAgZnJwOiBSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlRnJwQ29uZmlnPjtcbn1cblxuLyoqIFJlc29sdmUgQ0xJIGZsYWcgdmFsdWVzIHRocm91Z2ggdGhlIG93bmluZyB0dW5uZWwgYW5kIGF1dGgtZ2F0ZSBjb25maWd1cmF0aW9uIHJ1bGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUdW5uZWxPcHRpb25zKG9wdGlvbnM6IFR1bm5lbE9wdGlvbnMpOiBSZXNvbHZlZFR1bm5lbE9wdGlvbnMge1xuICAvLyBUaGUgRGF0YWJyaWNrcyBBcHBzIHJ1bnRpbWUgY29udHJhY3Q6IHRoZSBwbGF0Zm9ybSByb3V0ZXMgdG9cbiAgLy8gREFUQUJSSUNLU19BUFBfUE9SVCwgc28gdGhlIFdSQVBQRVIgY2xhaW1zIGl0IGFuZCB0aGUgd3JhcHBlZCBhcHAgaXMgbW92ZWRcbiAgLy8gdG8gYSBwcml2YXRlIG9uZS5cbiAgY29uc3QgcHVibGljUG9ydCA9IGNvbmZpZ1V0aWxzLnBvcnQob3B0aW9ucy5wb3J0LCBcIkRBVEFCUklDS1NfQVBQX1BPUlRcIiwgODAwMCk7XG4gIGNvbnN0IGFwcFBvcnQgPSBjb25maWdVdGlscy5wb3J0KG9wdGlvbnMuYXBwUG9ydCwgXCJBUFBfUE9SVFwiLCAwLCB7IHByZWZpeDogXCJUVU5ORUxcIiB9KTtcbiAgY29uc3QgZ2F0ZUNvbmZpZzogQXV0aEdhdGVDb25maWcgPSB7XG4gICAgYWxsb3c6IG9wdGlvbnMuYWxsb3csXG4gICAgc3ViamVjdDogb3B0aW9ucy5zdWJqZWN0LFxuICAgIGJyYW5kTmFtZTogb3B0aW9ucy5icmFuZE5hbWUsXG4gICAgcGFzc2tleU5hbWVQcmVmaXg6IG9wdGlvbnMucGFzc2tleU5hbWVQcmVmaXgsXG4gICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgIC8vIENvZXJjZWQsIG5vdCByZXNvbHZlZDogdGhlIHBsdWdpbiBvd25zIHRoZSBlbnYgbmFtZSBhbmQgdGhlIGRlZmF1bHQgZm9yXG4gICAgLy8gdGhlc2UsIHNvIHRoZSBmbGFnIGlzIHBhc3NlZCB0aHJvdWdoIGFzIHRoZSBgY29uZmlnYCB2YWx1ZSBpdCBleHBlY3RzIGFuZFxuICAgIC8vIG9ubHkgbmVlZHMgYSBzdHJpbmcgLT4gbnVtYmVyIG51ZGdlIG9uIHRoZSB3YXkuXG4gICAgc2Vzc2lvblR0bFNlY29uZHM6IG9wdGlvbnMuc2Vzc2lvblR0bFNlY29uZHMsXG4gICAgY29kZVR0bFNlY29uZHM6IG9wdGlvbnMuY29kZVR0bFNlY29uZHMsXG4gICAgc2Vzc2lvbkN1dG9mZjogb3B0aW9ucy5zZXNzaW9uQ3V0b2ZmLFxuICAgIHN0b3JhZ2U6IG9wdGlvbnMuc3RvcmFnZSxcbiAgICBzcWxpdGVQYXRoOiBvcHRpb25zLnNxbGl0ZVBhdGgsXG4gICAgZm9yd2FyZEhlYWRlcnM6IG9wdGlvbnMuZm9yd2FyZEhlYWRlcnMsXG4gICAgZ2F0ZVBhdGhzOiBvcHRpb25zLmdhdGVQYXRocyxcbiAgICBpbnNlY3VyZTogb3B0aW9ucy5pbnNlY3VyZSxcbiAgICBwdWJsaWNEb21haW46IG9wdGlvbnMucHVibGljRG9tYWluLFxuICAgIHB1YmxpY0RvbWFpbnM6IG9wdGlvbnMuZnJwUHVibGljRG9tYWluID8gW29wdGlvbnMuZnJwUHVibGljRG9tYWluXSA6IHVuZGVmaW5lZCxcbiAgfTtcbiAgY29uc3QgZ2F0ZSA9IHJlc29sdmVBdXRoR2F0ZUNvbmZpZyhnYXRlQ29uZmlnKTtcbiAgY29uc3QgdHJhbnNwb3J0ID0gcmVzb2x2ZVR1bm5lbFRyYW5zcG9ydChvcHRpb25zLnRyYW5zcG9ydCk7XG4gIHJldHVybiB7XG4gICAgcHVibGljUG9ydCxcbiAgICAuLi4oYXBwUG9ydCA+IDAgPyB7IGFwcFBvcnQgfSA6IHt9KSxcbiAgICBiaW5kSG9zdHM6IG9wdGlvbnMuYmluZEhvc3RzID8/IFtdLFxuICAgIHRyYW5zcG9ydCxcbiAgICBnYXRlQ29uZmlnLFxuICAgIGdhdGUsXG4gICAgcG9ydHI6IHJlc29sdmVQb3J0ckNvbmZpZyh7XG4gICAgICBwdWJsaWNEb21haW46IGdhdGUucHVibGljRG9tYWluLFxuICAgICAgc3ViZG9tYWluOiBvcHRpb25zLnN1YmRvbWFpbixcbiAgICAgIHBvcnQ6IHB1YmxpY1BvcnQsXG4gICAgfSksXG4gICAgZnJwOiByZXNvbHZlRnJwQ29uZmlnKHtcbiAgICAgIHB1YmxpY0RvbWFpbjogb3B0aW9ucy5mcnBQdWJsaWNEb21haW4sXG4gICAgICBzZXJ2ZXI6IG9wdGlvbnMuZnJwU2VydmVyLFxuICAgICAgc2VydmVyUG9ydDogb3B0aW9ucy5mcnBTZXJ2ZXJQb3J0LFxuICAgICAgcHJvdG9jb2w6IG9wdGlvbnMuZnJwUHJvdG9jb2wsXG4gICAgICB0b2tlbjogb3B0aW9ucy5mcnBUb2tlbixcbiAgICAgIHByb3h5TmFtZTogb3B0aW9ucy5mcnBQcm94eU5hbWUsXG4gICAgICBwb3J0OiBwdWJsaWNQb3J0LFxuICAgIH0pLFxuICB9O1xufVxuIl19
|