@dbx-tools/tunnel 0.6.120 → 0.6.124
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/index.ts +2 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -1
- package/lib/src/frp.d.ts +2 -0
- package/lib/src/frp.js +10 -1
- package/lib/src/interceptor.d.ts +12 -2
- package/lib/src/interceptor.js +57 -30
- package/lib/src/plugin.d.ts +1 -1
- package/lib/src/plugin.js +39 -26
- package/lib/src/portr.d.ts +2 -0
- package/lib/src/portr.js +9 -1
- package/lib/src/supervisor.d.ts +11 -0
- package/lib/src/supervisor.js +77 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/src/frp.ts +14 -0
- package/src/interceptor.ts +69 -28
- package/src/plugin.ts +41 -28
- package/src/portr.ts +9 -0
- package/src/supervisor.ts +89 -0
package/index.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * as plugin from "./src/plugin.ts";
|
|
|
15
15
|
export * as portr from "./src/portr.ts";
|
|
16
16
|
export * as sendCode from "./src/send-code.ts";
|
|
17
17
|
export * as signingKey from "./src/signing-key.ts";
|
|
18
|
+
export * as supervisor from "./src/supervisor.ts";
|
|
18
19
|
export type { CodeCopy } from "./src/code-email.ts";
|
|
19
20
|
export type { FrpInstallOptions, FrpConfig } from "./src/frp.ts";
|
|
20
21
|
export { AUTH_PREFIX, UNAUTHORIZED_BODY } from "./src/gate.ts";
|
|
@@ -28,3 +29,4 @@ export type { AuthGateConfig, SendCodeOptions, ResolvedAuthGateConfig, AuthGateA
|
|
|
28
29
|
export type { PortrInstallOptions, PortrConfig } from "./src/portr.ts";
|
|
29
30
|
export { KEY_TTL_SECONDS } from "./src/signing-key.ts";
|
|
30
31
|
export type { SigningKey } from "./src/signing-key.ts";
|
|
32
|
+
export type { ProcessSupervisor } from "./src/supervisor.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export * as plugin from "./src/plugin.ts";
|
|
|
11
11
|
export * as portr from "./src/portr.ts";
|
|
12
12
|
export * as sendCode from "./src/send-code.ts";
|
|
13
13
|
export * as signingKey from "./src/signing-key.ts";
|
|
14
|
+
export * as supervisor from "./src/supervisor.ts";
|
|
14
15
|
export type { CodeCopy } from "./src/code-email.ts";
|
|
15
16
|
export type { FrpInstallOptions, FrpConfig } from "./src/frp.ts";
|
|
16
17
|
export { AUTH_PREFIX, UNAUTHORIZED_BODY } from "./src/gate.ts";
|
|
@@ -24,3 +25,4 @@ export type { AuthGateConfig, SendCodeOptions, ResolvedAuthGateConfig, AuthGateA
|
|
|
24
25
|
export type { PortrInstallOptions, PortrConfig } from "./src/portr.ts";
|
|
25
26
|
export { KEY_TTL_SECONDS } from "./src/signing-key.ts";
|
|
26
27
|
export type { SigningKey } from "./src/signing-key.ts";
|
|
28
|
+
export type { ProcessSupervisor } from "./src/supervisor.ts";
|
package/lib/index.js
CHANGED
|
@@ -14,8 +14,9 @@ export * as plugin from "./src/plugin.js";
|
|
|
14
14
|
export * as portr from "./src/portr.js";
|
|
15
15
|
export * as sendCode from "./src/send-code.js";
|
|
16
16
|
export * as signingKey from "./src/signing-key.js";
|
|
17
|
+
export * as supervisor from "./src/supervisor.js";
|
|
17
18
|
export { AUTH_PREFIX, UNAUTHORIZED_BODY } from "./src/gate.js";
|
|
18
19
|
export { PROTECTED_HEADERS, DEFAULT_FORWARD_HEADERS } from "./src/headers.js";
|
|
19
20
|
export { AuthGatePlugin, authGate } from "./src/plugin.js";
|
|
20
21
|
export { KEY_TTL_SECONDS } from "./src/signing-key.js";
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFHbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUk5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvdHVubmVsXCI7XG5leHBvcnQgKiBhcyBhbGxvd2xpc3QgZnJvbSBcIi4vc3JjL2FsbG93bGlzdC50c1wiO1xuZXhwb3J0ICogYXMgY29kZUVtYWlsIGZyb20gXCIuL3NyYy9jb2RlLWVtYWlsLnRzXCI7XG5leHBvcnQgKiBhcyBmcnAgZnJvbSBcIi4vc3JjL2ZycC50c1wiO1xuZXhwb3J0ICogYXMgZ2F0ZSBmcm9tIFwiLi9zcmMvZ2F0ZS50c1wiO1xuZXhwb3J0ICogYXMgaGVhZGVycyBmcm9tIFwiLi9zcmMvaGVhZGVycy50c1wiO1xuZXhwb3J0ICogYXMgaW50ZXJjZXB0b3IgZnJvbSBcIi4vc3JjL2ludGVyY2VwdG9yLnRzXCI7XG5leHBvcnQgKiBhcyBsb2dpblBhZ2UgZnJvbSBcIi4vc3JjL2xvZ2luLXBhZ2UudHNcIjtcbmV4cG9ydCAqIGFzIHBhdGhQcm94eSBmcm9tIFwiLi9zcmMvcGF0aC1wcm94eS50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHBvcnRyIGZyb20gXCIuL3NyYy9wb3J0ci50c1wiO1xuZXhwb3J0ICogYXMgc2VuZENvZGUgZnJvbSBcIi4vc3JjL3NlbmQtY29kZS50c1wiO1xuZXhwb3J0ICogYXMgc2lnbmluZ0tleSBmcm9tIFwiLi9zcmMvc2lnbmluZy1rZXkudHNcIjtcbmV4cG9ydCAqIGFzIHN1cGVydmlzb3IgZnJvbSBcIi4vc3JjL3N1cGVydmlzb3IudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29kZUNvcHkgfSBmcm9tIFwiLi9zcmMvY29kZS1lbWFpbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBGcnBJbnN0YWxsT3B0aW9ucywgRnJwQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2ZycC50c1wiO1xuZXhwb3J0IHsgQVVUSF9QUkVGSVgsIFVOQVVUSE9SSVpFRF9CT0RZIH0gZnJvbSBcIi4vc3JjL2dhdGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2F0ZU9wdGlvbnMsIEdhdGVBY3Rpb24gfSBmcm9tIFwiLi9zcmMvZ2F0ZS50c1wiO1xuZXhwb3J0IHsgUFJPVEVDVEVEX0hFQURFUlMsIERFRkFVTFRfRk9SV0FSRF9IRUFERVJTIH0gZnJvbSBcIi4vc3JjL2hlYWRlcnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgSGVhZGVyUG9saWN5IH0gZnJvbSBcIi4vc3JjL2hlYWRlcnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgVHVubmVsSW50ZXJjZXB0b3JPcHRpb25zLCBUdW5uZWxUcmFuc3BvcnQgfSBmcm9tIFwiLi9zcmMvaW50ZXJjZXB0b3IudHNcIjtcbmV4cG9ydCB0eXBlIHsgTG9naW5QYWdlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9sb2dpbi1wYWdlLnRzXCI7XG5leHBvcnQgeyBBdXRoR2F0ZVBsdWdpbiwgYXV0aEdhdGUgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF1dGhHYXRlQ29uZmlnLCBTZW5kQ29kZU9wdGlvbnMsIFJlc29sdmVkQXV0aEdhdGVDb25maWcsIEF1dGhHYXRlQXBpIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBQb3J0ckluc3RhbGxPcHRpb25zLCBQb3J0ckNvbmZpZyB9IGZyb20gXCIuL3NyYy9wb3J0ci50c1wiO1xuZXhwb3J0IHsgS0VZX1RUTF9TRUNPTkRTIH0gZnJvbSBcIi4vc3JjL3NpZ25pbmcta2V5LnRzXCI7XG5leHBvcnQgdHlwZSB7IFNpZ25pbmdLZXkgfSBmcm9tIFwiLi9zcmMvc2lnbmluZy1rZXkudHNcIjtcbmV4cG9ydCB0eXBlIHsgUHJvY2Vzc1N1cGVydmlzb3IgfSBmcm9tIFwiLi9zcmMvc3VwZXJ2aXNvci50c1wiO1xuIl19
|
package/lib/src/frp.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
11
|
import { spawn } from "node:child_process";
|
|
12
|
+
import { type ProcessSupervisor } from "./supervisor.ts";
|
|
12
13
|
/** Options for installing the frpc executable. */
|
|
13
14
|
export interface FrpInstallOptions {
|
|
14
15
|
/** Home directory containing `.frpc`; defaults to the OS home directory. */
|
|
@@ -48,3 +49,4 @@ export declare function installFrp(options?: FrpInstallOptions): Promise<NodeJS.
|
|
|
48
49
|
export declare function writeFrpConfig(resolved: FrpConfig, childEnv: NodeJS.ProcessEnv): Promise<string>;
|
|
49
50
|
/** Launch frpc as a child process (caller supervises and terminates it). */
|
|
50
51
|
export declare function startFrp(resolved: FrpConfig, childEnv: NodeJS.ProcessEnv, configPath: string): ReturnType<typeof spawn>;
|
|
52
|
+
export declare function superviseFrp(resolved: FrpConfig, childEnv: NodeJS.ProcessEnv, configPath: string): ProcessSupervisor;
|
package/lib/src/frp.js
CHANGED
|
@@ -15,6 +15,7 @@ import { delimiter, join } from "node:path";
|
|
|
15
15
|
import { bin, config } from "@dbx-tools/core";
|
|
16
16
|
import { log } from "@dbx-tools/shared-core";
|
|
17
17
|
import { TUNNEL_CONFIG } from "./_config.js";
|
|
18
|
+
import { superviseProcessForever } from "./supervisor.js";
|
|
18
19
|
const logger = log.logger("tunnel:frp");
|
|
19
20
|
const FRP_VERSION = "0.68.1";
|
|
20
21
|
const FRP_RELEASE_URL = `https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}`;
|
|
@@ -115,6 +116,7 @@ export async function writeFrpConfig(resolved, childEnv) {
|
|
|
115
116
|
`serverAddr = ${tomlString(resolved.server)}`,
|
|
116
117
|
`serverPort = ${resolved.serverPort}`,
|
|
117
118
|
`transport.protocol = ${tomlString(resolved.protocol)}`,
|
|
119
|
+
"loginFailExit = false",
|
|
118
120
|
];
|
|
119
121
|
if (resolved.token)
|
|
120
122
|
lines.push(`auth.token = ${tomlString(resolved.token)}`);
|
|
@@ -127,4 +129,11 @@ export function startFrp(resolved, childEnv, configPath) {
|
|
|
127
129
|
logger.info(`frpc tunneling https://${resolved.publicDomain}${resolved.path === "/" ? "" : resolved.path} -> :${resolved.port}`);
|
|
128
130
|
return spawn("frpc", ["-c", configPath], { env: childEnv, stdio: "inherit" });
|
|
129
131
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQztBQUM3QixNQUFNLGVBQWUsR0FBRyxzREFBc0QsV0FBVyxFQUFFLENBQUM7QUFzQjVGLFNBQVMsUUFBUSxDQUFDLEtBQXlCO0lBQ3pDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzNFLE9BQU8sVUFBVSxJQUFJLFNBQVMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBeUI7SUFDOUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzlCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFL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LGdCQUFnQixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNoRixFQUFFLENBQ0gsQ0FBQztJQUNGLE1BQU0sU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSxRQUFRLENBQ3RCLFFBQW1CLEVBQ25CLFFBQTJCLEVBQzNCLFVBQWtCO0lBRWxCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsMEJBQTBCLFFBQVEsQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQ3BILENBQUM7SUFDRixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGwgYW5kIHJ1biBhbiBmcnAgY2xpZW50IChgZnJwY2ApIGZvciBhIHB1YmxpYyBIVFRQIHR1bm5lbC5cbiAqXG4gKiBUaGUgZGVmYXVsdHMgbWF0Y2ggdGhlIGRlcGxveW1lbnQgc2hhcGUgdXNlZCBieSBpbnNwaXJlLW1lZGlhbWl4OiBhIHNpbmdsZVxuICogVExTLXRlcm1pbmF0aW5nIGhvc3QgaXMgYm90aCB0aGUgV1NTIGNvbnRyb2wgZW5kcG9pbnQgYW5kIHRoZSBIVFRQIGN1c3RvbVxuICogZG9tYWluLiBDYWxsZXJzIG1heSBwb2ludCBgc2VydmVyYCBzb21ld2hlcmUgZWxzZSB3aGVuIGZycHMgaXMgZXhwb3NlZCBvbiBhXG4gKiBzZXBhcmF0ZSBjb250cm9sIGhvc3QuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGRlbGltaXRlciwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcblxuaW1wb3J0IHsgYmluLCBjb25maWcgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgVFVOTkVMX0NPTkZJRyB9IGZyb20gXCIuL19jb25maWcudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbDpmcnBcIik7XG5jb25zdCBGUlBfVkVSU0lPTiA9IFwiMC42OC4xXCI7XG5jb25zdCBGUlBfUkVMRUFTRV9VUkwgPSBgaHR0cHM6Ly9naXRodWIuY29tL2ZhdGVkaWVyL2ZycC9yZWxlYXNlcy9kb3dubG9hZC92JHtGUlBfVkVSU0lPTn1gO1xuXG4vKiogT3B0aW9ucyBmb3IgaW5zdGFsbGluZyB0aGUgZnJwYyBleGVjdXRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcnBJbnN0YWxsT3B0aW9ucyB7XG4gIC8qKiBIb21lIGRpcmVjdG9yeSBjb250YWluaW5nIGAuZnJwY2A7IGRlZmF1bHRzIHRvIHRoZSBPUyBob21lIGRpcmVjdG9yeS4gKi9cbiAgaG9tZURpcj86IHN0cmluZztcbn1cblxuLyoqIFJlc29sdmVkIGZycGMgd2lyaW5nLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIEZSUCB0dW5uZWwgaXMgY29uZmlndXJlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJwQ29uZmlnIHtcbiAgcHVibGljRG9tYWluOiBzdHJpbmc7XG4gIHNlcnZlcjogc3RyaW5nO1xuICBzZXJ2ZXJQb3J0OiBudW1iZXI7XG4gIHByb3RvY29sOiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBwcm94eU5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBzdHJpcFByZWZpeDogYm9vbGVhbjtcbiAgcG9ydDogbnVtYmVyO1xuICB0YXJnZXRQb3J0OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGJhcmVIb3N0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBub3JtYWxpemVkID0gdmFsdWUucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC8vLCBcIlwiKS5zcGxpdChcIi9cIilbMF0/LnRyaW0oKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgfHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gdmFsdWU/LnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkIHx8IHRyaW1tZWQgPT09IFwiL1wiKSByZXR1cm4gXCIvXCI7XG4gIHJldHVybiBgLyR7dHJpbW1lZC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKX1gO1xufVxuXG4vKiogUmVzb2x2ZSBmcnBjIGNvbmZpZyBmcm9tIHRoZSBwdWJsaWMgZG9tYWluIGFuZCBGUlAtc3BlY2lmaWMgZW52aXJvbm1lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZycENvbmZpZyhvcHRzOiB7XG4gIHB1YmxpY0RvbWFpbj86IHN0cmluZztcbiAgc2VydmVyPzogc3RyaW5nO1xuICBzZXJ2ZXJQb3J0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICBwcm90b2NvbD86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHByb3h5TmFtZT86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgc3RyaXBQcmVmaXg/OiBib29sZWFuO1xuICBwb3J0OiBudW1iZXI7XG4gIHRhcmdldFBvcnQ/OiBudW1iZXI7XG59KTogRnJwQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcHVibGljRG9tYWluID0gYmFyZUhvc3QoXG4gICAgY29uZmlnLnN0cmluZyhcbiAgICAgIG9wdHMucHVibGljRG9tYWluLFxuICAgICAgW1wiRlJQX1BVQkxJQ19ET01BSU5cIiwgXCJQVUJMSUNfRE9NQUlOXCJdLFxuICAgICAgVFVOTkVMX0NPTkZJRyxcbiAgICApLFxuICApO1xuICBpZiAoIXB1YmxpY0RvbWFpbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgc2VydmVyID0gYmFyZUhvc3QoY29uZmlnLnN0cmluZyhvcHRzLnNlcnZlciwgXCJGUlBfU0VSVkVSXCIpKSA/PyBwdWJsaWNEb21haW47XG4gIGNvbnN0IHNlcnZlclBvcnQgPSBjb25maWcucG9ydChvcHRzLnNlcnZlclBvcnQsIFwiRlJQX1NFUlZFUl9QT1JUXCIsIDQ0Myk7XG4gIGNvbnN0IHByb3RvY29sID0gY29uZmlnLnN0cmluZyhvcHRzLnByb3RvY29sLCBcIkZSUF9QUk9UT0NPTFwiKSA/PyBcIndzc1wiO1xuICBjb25zdCB0b2tlbiA9IGNvbmZpZy5zdHJpbmcob3B0cy50b2tlbiwgW1wiRlJQX1RPS0VOXCIsIFwiVFVOTkVMX1RPS0VOXCJdKTtcbiAgY29uc3QgcHJveHlOYW1lID1cbiAgICBjb25maWcuc3RyaW5nKG9wdHMucHJveHlOYW1lLCBcIkZSUF9QUk9YWV9OQU1FXCIpID8/IHB1YmxpY0RvbWFpbi5zcGxpdChcIi5cIilbMF0gPz8gXCJhcHBcIjtcbiAgY29uc3QgYXBwTmFtZSA9IGNvbmZpZy5zdHJpbmcodW5kZWZpbmVkLCBcIkRBVEFCUklDS1NfQVBQX05BTUVcIikgPz8gcHJveHlOYW1lO1xuICBjb25zdCBwYXRoID0gbm9ybWFsaXplUGF0aChjb25maWcuc3RyaW5nKG9wdHMucGF0aCwgXCJGUlBfUEFUSFwiKSA/PyBhcHBOYW1lKTtcbiAgY29uc3Qgc3RyaXBQcmVmaXggPSBjb25maWcuYm9vbGVhbihvcHRzLnN0cmlwUHJlZml4LCBcIkZSUF9TVFJJUF9QUkVGSVhcIikgPz8gcGF0aCAhPT0gXCIvXCI7XG4gIHJldHVybiB7XG4gICAgcHVibGljRG9tYWluLFxuICAgIHNlcnZlcixcbiAgICBzZXJ2ZXJQb3J0LFxuICAgIHByb3RvY29sLFxuICAgIC4uLih0b2tlbiA/IHsgdG9rZW4gfSA6IHt9KSxcbiAgICBwcm94eU5hbWUsXG4gICAgcGF0aCxcbiAgICBzdHJpcFByZWZpeCxcbiAgICBwb3J0OiBvcHRzLnBvcnQsXG4gICAgdGFyZ2V0UG9ydDogb3B0cy50YXJnZXRQb3J0ID8/IG9wdHMucG9ydCxcbiAgfTtcbn1cblxuLyoqIEdpdEh1YiByZWxlYXNlIGFzc2V0IG5hbWUgZm9yIHRoZSBjdXJyZW50IG9yIHN1cHBsaWVkIE9TL2FyY2hpdGVjdHVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcnBBc3NldE5hbWUoXG4gIHZlcnNpb246IHN0cmluZyxcbiAgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sXG4gIGFyY2g6IHN0cmluZyA9IHByb2Nlc3MuYXJjaCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG9zTmFtZSA9IHBsYXRmb3JtID09PSBcImRhcndpblwiID8gXCJkYXJ3aW5cIiA6IHBsYXRmb3JtID09PSBcImxpbnV4XCIgPyBcImxpbnV4XCIgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFyY2hOYW1lID0gYXJjaCA9PT0gXCJhcm02NFwiID8gXCJhcm02NFwiIDogYXJjaCA9PT0gXCJ4NjRcIiA/IFwiYW1kNjRcIiA6IHVuZGVmaW5lZDtcbiAgaWYgKCFvc05hbWUgfHwgIWFyY2hOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmcnAgaGFzIG5vIHN1cHBvcnRlZCByZWxlYXNlIGFzc2V0IGZvciAke3BsYXRmb3JtfS8ke2FyY2h9YCk7XG4gIH1cbiAgcmV0dXJuIGBmcnBfJHt2ZXJzaW9ufV8ke29zTmFtZX1fJHthcmNoTmFtZX0udGFyLmd6YDtcbn1cblxuZnVuY3Rpb24gZnJwRG93bmxvYWRVcmwoKTogc3RyaW5nIHtcbiAgY29uc3QgYXNzZXROYW1lID0gZnJwQXNzZXROYW1lKEZSUF9WRVJTSU9OKTtcbiAgbG9nZ2VyLmluZm8oXCJpbnN0YWxsaW5nIGZycGNcIiwgeyB2ZXJzaW9uOiBGUlBfVkVSU0lPTiwgYXNzZXQ6IGFzc2V0TmFtZSB9KTtcbiAgcmV0dXJuIGAke0ZSUF9SRUxFQVNFX1VSTH0vJHthc3NldE5hbWV9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0RnJwYyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHBhdGggPSBqb2luKHNvdXJjZSwgZnJwQXJjaGl2ZURpcmVjdG9yeSgpLCBcImZycGNcIik7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmVyID0gc3Bhd24oXCJjb2Rlc2lnblwiLCBbXCItLWZvcmNlXCIsIFwiLS1zaWduXCIsIFwiLVwiLCBwYXRoXSwgeyBzdGRpbzogXCJpZ25vcmVcIiB9KTtcbiAgICAgIHNpZ25lci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgIHNpZ25lci5vbmNlKFwiZXhpdFwiLCAoY29kZSkgPT5cbiAgICAgICAgY29kZSA9PT0gMCA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYGNvZGVzaWduIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKiBJbnN0YWxsIGZycGMgd2hlbiBhYnNlbnQgYW5kIHJldHVybiB0aGUgZW52aXJvbm1lbnQgdXNlZCBieSBpdHMgcHJvY2Vzcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsRnJwKG9wdGlvbnM6IEZycEluc3RhbGxPcHRpb25zID0ge30pOiBQcm9taXNlPE5vZGVKUy5Qcm9jZXNzRW52PiB7XG4gIGNvbnN0IGhvbWVEaXIgPSBvcHRpb25zLmhvbWVEaXIgPz8gb3MuaG9tZWRpcigpO1xuICBjb25zdCBjb250ZXh0ID0gYXdhaXQgYmluLmVuc3VyZShcImZycGNcIiwgZnJwRG93bmxvYWRVcmwsIHtcbiAgICBhdXRvVW5wYWNrYWdlOiB0cnVlLFxuICAgIGhvbWVEaXIsXG4gICAgbWluVmVyc2lvbjogRlJQX1ZFUlNJT04sXG4gICAgc2VsZWN0b3I6ICh7IHNvdXJjZSB9KSA9PiBzZWxlY3RGcnBjKHNvdXJjZSksXG4gICAgdmVyc2lvblBhcnNlcjogKHsgc3Rkb3V0LCBzdGRlcnIgfSkgPT4ge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGJpbi5wYXJzZVZlcnNpb24oeyBzdGRvdXQsIHN0ZGVyciB9KTtcbiAgICAgIHJldHVybiB2ZXJzaW9uID09PSBGUlBfVkVSU0lPTiA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgSE9NRTogaG9tZURpcixcbiAgICBQQVRIOiBbY29udGV4dC5iaW5EaXIsIHByb2Nlc3MuZW52LlBBVEggPz8gXCJcIl0uam9pbihkZWxpbWl0ZXIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcnBBcmNoaXZlRGlyZWN0b3J5KFxuICBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgYXJjaDogc3RyaW5nID0gcHJvY2Vzcy5hcmNoLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZycEFzc2V0TmFtZShGUlBfVkVSU0lPTiwgcGxhdGZvcm0sIGFyY2gpLnJlcGxhY2UoL1xcLnRhclxcLmd6JC8sIFwiXCIpO1xufVxuXG5mdW5jdGlvbiB0b21sU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xufVxuXG4vKiogUmVuZGVyIGB+Ly5mcnBjL2ZycGMudG9tbGAgZm9yIHRoZSByZXNvbHZlZCB0dW5uZWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGcnBDb25maWcoXG4gIHJlc29sdmVkOiBGcnBDb25maWcsXG4gIGNoaWxkRW52OiBOb2RlSlMuUHJvY2Vzc0Vudixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRpcmVjdG9yeSA9IGpvaW4oY2hpbGRFbnYuSE9NRSA/PyBvcy5ob21lZGlyKCksIFwiLmZycGNcIik7XG4gIGNvbnN0IHBhdGggPSBqb2luKGRpcmVjdG9yeSwgXCJmcnBjLnRvbWxcIik7XG4gIGF3YWl0IG1rZGlyKGRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGBzZXJ2ZXJBZGRyID0gJHt0b21sU3RyaW5nKHJlc29sdmVkLnNlcnZlcil9YCxcbiAgICBgc2VydmVyUG9ydCA9ICR7cmVzb2x2ZWQuc2VydmVyUG9ydH1gLFxuICAgIGB0cmFuc3BvcnQucHJvdG9jb2wgPSAke3RvbWxTdHJpbmcocmVzb2x2ZWQucHJvdG9jb2wpfWAsXG4gIF07XG4gIGlmIChyZXNvbHZlZC50b2tlbikgbGluZXMucHVzaChgYXV0aC50b2tlbiA9ICR7dG9tbFN0cmluZyhyZXNvbHZlZC50b2tlbil9YCk7XG4gIGxpbmVzLnB1c2goXG4gICAgXCJcIixcbiAgICBcIltbcHJveGllc11dXCIsXG4gICAgYG5hbWUgPSAke3RvbWxTdHJpbmcocmVzb2x2ZWQucHJveHlOYW1lKX1gLFxuICAgICd0eXBlID0gXCJodHRwXCInLFxuICAgIGBsb2NhbFBvcnQgPSAke3Jlc29sdmVkLnRhcmdldFBvcnR9YCxcbiAgICBgY3VzdG9tRG9tYWlucyA9IFske3RvbWxTdHJpbmcocmVzb2x2ZWQucHVibGljRG9tYWluKX1dYCxcbiAgICAuLi4ocmVzb2x2ZWQucGF0aCA9PT0gXCIvXCIgPyBbXSA6IFtgbG9jYXRpb25zID0gWyR7dG9tbFN0cmluZyhyZXNvbHZlZC5wYXRoKX1dYF0pLFxuICAgIFwiXCIsXG4gICk7XG4gIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBsaW5lcy5qb2luKFwiXFxuXCIpKTtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKiBMYXVuY2ggZnJwYyBhcyBhIGNoaWxkIHByb2Nlc3MgKGNhbGxlciBzdXBlcnZpc2VzIGFuZCB0ZXJtaW5hdGVzIGl0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEZycChcbiAgcmVzb2x2ZWQ6IEZycENvbmZpZyxcbiAgY2hpbGRFbnY6IE5vZGVKUy5Qcm9jZXNzRW52LFxuICBjb25maWdQYXRoOiBzdHJpbmcsXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBzcGF3bj4ge1xuICBsb2dnZXIuaW5mbyhcbiAgICBgZnJwYyB0dW5uZWxpbmcgaHR0cHM6Ly8ke3Jlc29sdmVkLnB1YmxpY0RvbWFpbn0ke3Jlc29sdmVkLnBhdGggPT09IFwiL1wiID8gXCJcIiA6IHJlc29sdmVkLnBhdGh9IC0+IDoke3Jlc29sdmVkLnBvcnR9YCxcbiAgKTtcbiAgcmV0dXJuIHNwYXduKFwiZnJwY1wiLCBbXCItY1wiLCBjb25maWdQYXRoXSwgeyBlbnY6IGNoaWxkRW52LCBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG59XG4iXX0=
|
|
132
|
+
export function superviseFrp(resolved, childEnv, configPath) {
|
|
133
|
+
return superviseProcessForever({
|
|
134
|
+
name: "frpc",
|
|
135
|
+
logger,
|
|
136
|
+
start: () => startFrp(resolved, childEnv, configPath),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFFbEYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN4QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFDN0IsTUFBTSxlQUFlLEdBQUcsc0RBQXNELFdBQVcsRUFBRSxDQUFDO0FBc0I1RixTQUFTLFFBQVEsQ0FBQyxLQUF5QjtJQUN6QyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzdCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMzRSxPQUFPLFVBQVUsSUFBSSxTQUFTLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQXlCO0lBQzlDLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFJ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Q0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2hGLEVBQUUsQ0FDSCxDQUFDO0lBQ0YsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsUUFBbUIsRUFDbkIsUUFBMkIsRUFDM0IsVUFBa0I7SUFFbEIsTUFBTSxDQUFDLElBQUksQ0FDVCwwQkFBMEIsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FDcEgsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzFCLFFBQW1CLEVBQ25CLFFBQTJCLEVBQzNCLFVBQWtCO0lBRWxCLE9BQU8sdUJBQXVCLENBQUM7UUFDN0IsSUFBSSxFQUFFLE1BQU07UUFDWixNQUFNO1FBQ04sS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQztLQUN0RCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsIGFuZCBydW4gYW4gZnJwIGNsaWVudCAoYGZycGNgKSBmb3IgYSBwdWJsaWMgSFRUUCB0dW5uZWwuXG4gKlxuICogVGhlIGRlZmF1bHRzIG1hdGNoIHRoZSBkZXBsb3ltZW50IHNoYXBlIHVzZWQgYnkgaW5zcGlyZS1tZWRpYW1peDogYSBzaW5nbGVcbiAqIFRMUy10ZXJtaW5hdGluZyBob3N0IGlzIGJvdGggdGhlIFdTUyBjb250cm9sIGVuZHBvaW50IGFuZCB0aGUgSFRUUCBjdXN0b21cbiAqIGRvbWFpbi4gQ2FsbGVycyBtYXkgcG9pbnQgYHNlcnZlcmAgc29tZXdoZXJlIGVsc2Ugd2hlbiBmcnBzIGlzIGV4cG9zZWQgb24gYVxuICogc2VwYXJhdGUgY29udHJvbCBob3N0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IG1rZGlyLCB3cml0ZUZpbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkZWxpbWl0ZXIsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGJpbiwgY29uZmlnIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IFRVTk5FTF9DT05GSUcgfSBmcm9tIFwiLi9fY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBzdXBlcnZpc2VQcm9jZXNzRm9yZXZlciwgdHlwZSBQcm9jZXNzU3VwZXJ2aXNvciB9IGZyb20gXCIuL3N1cGVydmlzb3IudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbDpmcnBcIik7XG5jb25zdCBGUlBfVkVSU0lPTiA9IFwiMC42OC4xXCI7XG5jb25zdCBGUlBfUkVMRUFTRV9VUkwgPSBgaHR0cHM6Ly9naXRodWIuY29tL2ZhdGVkaWVyL2ZycC9yZWxlYXNlcy9kb3dubG9hZC92JHtGUlBfVkVSU0lPTn1gO1xuXG4vKiogT3B0aW9ucyBmb3IgaW5zdGFsbGluZyB0aGUgZnJwYyBleGVjdXRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcnBJbnN0YWxsT3B0aW9ucyB7XG4gIC8qKiBIb21lIGRpcmVjdG9yeSBjb250YWluaW5nIGAuZnJwY2A7IGRlZmF1bHRzIHRvIHRoZSBPUyBob21lIGRpcmVjdG9yeS4gKi9cbiAgaG9tZURpcj86IHN0cmluZztcbn1cblxuLyoqIFJlc29sdmVkIGZycGMgd2lyaW5nLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vIEZSUCB0dW5uZWwgaXMgY29uZmlndXJlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJwQ29uZmlnIHtcbiAgcHVibGljRG9tYWluOiBzdHJpbmc7XG4gIHNlcnZlcjogc3RyaW5nO1xuICBzZXJ2ZXJQb3J0OiBudW1iZXI7XG4gIHByb3RvY29sOiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBwcm94eU5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBzdHJpcFByZWZpeDogYm9vbGVhbjtcbiAgcG9ydDogbnVtYmVyO1xuICB0YXJnZXRQb3J0OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGJhcmVIb3N0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBub3JtYWxpemVkID0gdmFsdWUucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC8vLCBcIlwiKS5zcGxpdChcIi9cIilbMF0/LnRyaW0oKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgfHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gdmFsdWU/LnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkIHx8IHRyaW1tZWQgPT09IFwiL1wiKSByZXR1cm4gXCIvXCI7XG4gIHJldHVybiBgLyR7dHJpbW1lZC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKX1gO1xufVxuXG4vKiogUmVzb2x2ZSBmcnBjIGNvbmZpZyBmcm9tIHRoZSBwdWJsaWMgZG9tYWluIGFuZCBGUlAtc3BlY2lmaWMgZW52aXJvbm1lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZycENvbmZpZyhvcHRzOiB7XG4gIHB1YmxpY0RvbWFpbj86IHN0cmluZztcbiAgc2VydmVyPzogc3RyaW5nO1xuICBzZXJ2ZXJQb3J0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICBwcm90b2NvbD86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHByb3h5TmFtZT86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgc3RyaXBQcmVmaXg/OiBib29sZWFuO1xuICBwb3J0OiBudW1iZXI7XG4gIHRhcmdldFBvcnQ/OiBudW1iZXI7XG59KTogRnJwQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcHVibGljRG9tYWluID0gYmFyZUhvc3QoXG4gICAgY29uZmlnLnN0cmluZyhcbiAgICAgIG9wdHMucHVibGljRG9tYWluLFxuICAgICAgW1wiRlJQX1BVQkxJQ19ET01BSU5cIiwgXCJQVUJMSUNfRE9NQUlOXCJdLFxuICAgICAgVFVOTkVMX0NPTkZJRyxcbiAgICApLFxuICApO1xuICBpZiAoIXB1YmxpY0RvbWFpbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgc2VydmVyID0gYmFyZUhvc3QoY29uZmlnLnN0cmluZyhvcHRzLnNlcnZlciwgXCJGUlBfU0VSVkVSXCIpKSA/PyBwdWJsaWNEb21haW47XG4gIGNvbnN0IHNlcnZlclBvcnQgPSBjb25maWcucG9ydChvcHRzLnNlcnZlclBvcnQsIFwiRlJQX1NFUlZFUl9QT1JUXCIsIDQ0Myk7XG4gIGNvbnN0IHByb3RvY29sID0gY29uZmlnLnN0cmluZyhvcHRzLnByb3RvY29sLCBcIkZSUF9QUk9UT0NPTFwiKSA/PyBcIndzc1wiO1xuICBjb25zdCB0b2tlbiA9IGNvbmZpZy5zdHJpbmcob3B0cy50b2tlbiwgW1wiRlJQX1RPS0VOXCIsIFwiVFVOTkVMX1RPS0VOXCJdKTtcbiAgY29uc3QgcHJveHlOYW1lID1cbiAgICBjb25maWcuc3RyaW5nKG9wdHMucHJveHlOYW1lLCBcIkZSUF9QUk9YWV9OQU1FXCIpID8/IHB1YmxpY0RvbWFpbi5zcGxpdChcIi5cIilbMF0gPz8gXCJhcHBcIjtcbiAgY29uc3QgYXBwTmFtZSA9IGNvbmZpZy5zdHJpbmcodW5kZWZpbmVkLCBcIkRBVEFCUklDS1NfQVBQX05BTUVcIikgPz8gcHJveHlOYW1lO1xuICBjb25zdCBwYXRoID0gbm9ybWFsaXplUGF0aChjb25maWcuc3RyaW5nKG9wdHMucGF0aCwgXCJGUlBfUEFUSFwiKSA/PyBhcHBOYW1lKTtcbiAgY29uc3Qgc3RyaXBQcmVmaXggPSBjb25maWcuYm9vbGVhbihvcHRzLnN0cmlwUHJlZml4LCBcIkZSUF9TVFJJUF9QUkVGSVhcIikgPz8gcGF0aCAhPT0gXCIvXCI7XG4gIHJldHVybiB7XG4gICAgcHVibGljRG9tYWluLFxuICAgIHNlcnZlcixcbiAgICBzZXJ2ZXJQb3J0LFxuICAgIHByb3RvY29sLFxuICAgIC4uLih0b2tlbiA/IHsgdG9rZW4gfSA6IHt9KSxcbiAgICBwcm94eU5hbWUsXG4gICAgcGF0aCxcbiAgICBzdHJpcFByZWZpeCxcbiAgICBwb3J0OiBvcHRzLnBvcnQsXG4gICAgdGFyZ2V0UG9ydDogb3B0cy50YXJnZXRQb3J0ID8/IG9wdHMucG9ydCxcbiAgfTtcbn1cblxuLyoqIEdpdEh1YiByZWxlYXNlIGFzc2V0IG5hbWUgZm9yIHRoZSBjdXJyZW50IG9yIHN1cHBsaWVkIE9TL2FyY2hpdGVjdHVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcnBBc3NldE5hbWUoXG4gIHZlcnNpb246IHN0cmluZyxcbiAgcGxhdGZvcm06IE5vZGVKUy5QbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sXG4gIGFyY2g6IHN0cmluZyA9IHByb2Nlc3MuYXJjaCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG9zTmFtZSA9IHBsYXRmb3JtID09PSBcImRhcndpblwiID8gXCJkYXJ3aW5cIiA6IHBsYXRmb3JtID09PSBcImxpbnV4XCIgPyBcImxpbnV4XCIgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFyY2hOYW1lID0gYXJjaCA9PT0gXCJhcm02NFwiID8gXCJhcm02NFwiIDogYXJjaCA9PT0gXCJ4NjRcIiA/IFwiYW1kNjRcIiA6IHVuZGVmaW5lZDtcbiAgaWYgKCFvc05hbWUgfHwgIWFyY2hOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBmcnAgaGFzIG5vIHN1cHBvcnRlZCByZWxlYXNlIGFzc2V0IGZvciAke3BsYXRmb3JtfS8ke2FyY2h9YCk7XG4gIH1cbiAgcmV0dXJuIGBmcnBfJHt2ZXJzaW9ufV8ke29zTmFtZX1fJHthcmNoTmFtZX0udGFyLmd6YDtcbn1cblxuZnVuY3Rpb24gZnJwRG93bmxvYWRVcmwoKTogc3RyaW5nIHtcbiAgY29uc3QgYXNzZXROYW1lID0gZnJwQXNzZXROYW1lKEZSUF9WRVJTSU9OKTtcbiAgbG9nZ2VyLmluZm8oXCJpbnN0YWxsaW5nIGZycGNcIiwgeyB2ZXJzaW9uOiBGUlBfVkVSU0lPTiwgYXNzZXQ6IGFzc2V0TmFtZSB9KTtcbiAgcmV0dXJuIGAke0ZSUF9SRUxFQVNFX1VSTH0vJHthc3NldE5hbWV9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0RnJwYyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHBhdGggPSBqb2luKHNvdXJjZSwgZnJwQXJjaGl2ZURpcmVjdG9yeSgpLCBcImZycGNcIik7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmVyID0gc3Bhd24oXCJjb2Rlc2lnblwiLCBbXCItLWZvcmNlXCIsIFwiLS1zaWduXCIsIFwiLVwiLCBwYXRoXSwgeyBzdGRpbzogXCJpZ25vcmVcIiB9KTtcbiAgICAgIHNpZ25lci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgIHNpZ25lci5vbmNlKFwiZXhpdFwiLCAoY29kZSkgPT5cbiAgICAgICAgY29kZSA9PT0gMCA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYGNvZGVzaWduIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKiBJbnN0YWxsIGZycGMgd2hlbiBhYnNlbnQgYW5kIHJldHVybiB0aGUgZW52aXJvbm1lbnQgdXNlZCBieSBpdHMgcHJvY2Vzcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsRnJwKG9wdGlvbnM6IEZycEluc3RhbGxPcHRpb25zID0ge30pOiBQcm9taXNlPE5vZGVKUy5Qcm9jZXNzRW52PiB7XG4gIGNvbnN0IGhvbWVEaXIgPSBvcHRpb25zLmhvbWVEaXIgPz8gb3MuaG9tZWRpcigpO1xuICBjb25zdCBjb250ZXh0ID0gYXdhaXQgYmluLmVuc3VyZShcImZycGNcIiwgZnJwRG93bmxvYWRVcmwsIHtcbiAgICBhdXRvVW5wYWNrYWdlOiB0cnVlLFxuICAgIGhvbWVEaXIsXG4gICAgbWluVmVyc2lvbjogRlJQX1ZFUlNJT04sXG4gICAgc2VsZWN0b3I6ICh7IHNvdXJjZSB9KSA9PiBzZWxlY3RGcnBjKHNvdXJjZSksXG4gICAgdmVyc2lvblBhcnNlcjogKHsgc3Rkb3V0LCBzdGRlcnIgfSkgPT4ge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGJpbi5wYXJzZVZlcnNpb24oeyBzdGRvdXQsIHN0ZGVyciB9KTtcbiAgICAgIHJldHVybiB2ZXJzaW9uID09PSBGUlBfVkVSU0lPTiA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgSE9NRTogaG9tZURpcixcbiAgICBQQVRIOiBbY29udGV4dC5iaW5EaXIsIHByb2Nlc3MuZW52LlBBVEggPz8gXCJcIl0uam9pbihkZWxpbWl0ZXIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmcnBBcmNoaXZlRGlyZWN0b3J5KFxuICBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgYXJjaDogc3RyaW5nID0gcHJvY2Vzcy5hcmNoLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZycEFzc2V0TmFtZShGUlBfVkVSU0lPTiwgcGxhdGZvcm0sIGFyY2gpLnJlcGxhY2UoL1xcLnRhclxcLmd6JC8sIFwiXCIpO1xufVxuXG5mdW5jdGlvbiB0b21sU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xufVxuXG4vKiogUmVuZGVyIGB+Ly5mcnBjL2ZycGMudG9tbGAgZm9yIHRoZSByZXNvbHZlZCB0dW5uZWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGcnBDb25maWcoXG4gIHJlc29sdmVkOiBGcnBDb25maWcsXG4gIGNoaWxkRW52OiBOb2RlSlMuUHJvY2Vzc0Vudixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGRpcmVjdG9yeSA9IGpvaW4oY2hpbGRFbnYuSE9NRSA/PyBvcy5ob21lZGlyKCksIFwiLmZycGNcIik7XG4gIGNvbnN0IHBhdGggPSBqb2luKGRpcmVjdG9yeSwgXCJmcnBjLnRvbWxcIik7XG4gIGF3YWl0IG1rZGlyKGRpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGBzZXJ2ZXJBZGRyID0gJHt0b21sU3RyaW5nKHJlc29sdmVkLnNlcnZlcil9YCxcbiAgICBgc2VydmVyUG9ydCA9ICR7cmVzb2x2ZWQuc2VydmVyUG9ydH1gLFxuICAgIGB0cmFuc3BvcnQucHJvdG9jb2wgPSAke3RvbWxTdHJpbmcocmVzb2x2ZWQucHJvdG9jb2wpfWAsXG4gICAgXCJsb2dpbkZhaWxFeGl0ID0gZmFsc2VcIixcbiAgXTtcbiAgaWYgKHJlc29sdmVkLnRva2VuKSBsaW5lcy5wdXNoKGBhdXRoLnRva2VuID0gJHt0b21sU3RyaW5nKHJlc29sdmVkLnRva2VuKX1gKTtcbiAgbGluZXMucHVzaChcbiAgICBcIlwiLFxuICAgIFwiW1twcm94aWVzXV1cIixcbiAgICBgbmFtZSA9ICR7dG9tbFN0cmluZyhyZXNvbHZlZC5wcm94eU5hbWUpfWAsXG4gICAgJ3R5cGUgPSBcImh0dHBcIicsXG4gICAgYGxvY2FsUG9ydCA9ICR7cmVzb2x2ZWQudGFyZ2V0UG9ydH1gLFxuICAgIGBjdXN0b21Eb21haW5zID0gWyR7dG9tbFN0cmluZyhyZXNvbHZlZC5wdWJsaWNEb21haW4pfV1gLFxuICAgIC4uLihyZXNvbHZlZC5wYXRoID09PSBcIi9cIiA/IFtdIDogW2Bsb2NhdGlvbnMgPSBbJHt0b21sU3RyaW5nKHJlc29sdmVkLnBhdGgpfV1gXSksXG4gICAgXCJcIixcbiAgKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqIExhdW5jaCBmcnBjIGFzIGEgY2hpbGQgcHJvY2VzcyAoY2FsbGVyIHN1cGVydmlzZXMgYW5kIHRlcm1pbmF0ZXMgaXQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RnJwKFxuICByZXNvbHZlZDogRnJwQ29uZmlnLFxuICBjaGlsZEVudjogTm9kZUpTLlByb2Nlc3NFbnYsXG4gIGNvbmZpZ1BhdGg6IHN0cmluZyxcbik6IFJldHVyblR5cGU8dHlwZW9mIHNwYXduPiB7XG4gIGxvZ2dlci5pbmZvKFxuICAgIGBmcnBjIHR1bm5lbGluZyBodHRwczovLyR7cmVzb2x2ZWQucHVibGljRG9tYWlufSR7cmVzb2x2ZWQucGF0aCA9PT0gXCIvXCIgPyBcIlwiIDogcmVzb2x2ZWQucGF0aH0gLT4gOiR7cmVzb2x2ZWQucG9ydH1gLFxuICApO1xuICByZXR1cm4gc3Bhd24oXCJmcnBjXCIsIFtcIi1jXCIsIGNvbmZpZ1BhdGhdLCB7IGVudjogY2hpbGRFbnYsIHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVydmlzZUZycChcbiAgcmVzb2x2ZWQ6IEZycENvbmZpZyxcbiAgY2hpbGRFbnY6IE5vZGVKUy5Qcm9jZXNzRW52LFxuICBjb25maWdQYXRoOiBzdHJpbmcsXG4pOiBQcm9jZXNzU3VwZXJ2aXNvciB7XG4gIHJldHVybiBzdXBlcnZpc2VQcm9jZXNzRm9yZXZlcih7XG4gICAgbmFtZTogXCJmcnBjXCIsXG4gICAgbG9nZ2VyLFxuICAgIHN0YXJ0OiAoKSA9PiBzdGFydEZycChyZXNvbHZlZCwgY2hpbGRFbnYsIGNvbmZpZ1BhdGgpLFxuICB9KTtcbn1cbiJdfQ==
|
package/lib/src/interceptor.d.ts
CHANGED
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
*
|
|
17
17
|
* @module
|
|
18
18
|
*/
|
|
19
|
-
import type { Interceptor } from "@dbx-tools/appkit";
|
|
19
|
+
import type { Interceptor, InterceptorContext } from "@dbx-tools/appkit";
|
|
20
|
+
import { resolveFrpConfig } from "./frp.ts";
|
|
21
|
+
import { resolvePortrConfig } from "./portr.ts";
|
|
20
22
|
/** Options for {@link tunnelInterceptor} (each also resolvable from env). */
|
|
21
23
|
export interface TunnelInterceptorOptions {
|
|
22
24
|
/** Tunnel clients to run. Env `DBX_TOOLS_TUNNEL_TRANSPORT`; defaults to `portr`. */
|
|
@@ -50,6 +52,13 @@ export interface TunnelInterceptorOptions {
|
|
|
50
52
|
}
|
|
51
53
|
/** Public tunnel clients supported by the interceptor and CLI. */
|
|
52
54
|
export type TunnelTransport = "portr" | "frp" | "both";
|
|
55
|
+
interface TunnelAuxiliary {
|
|
56
|
+
stop(): void;
|
|
57
|
+
}
|
|
58
|
+
interface TunnelRuntime {
|
|
59
|
+
startPortr(config: NonNullable<ReturnType<typeof resolvePortrConfig>>): Promise<TunnelAuxiliary>;
|
|
60
|
+
startFrp(config: NonNullable<ReturnType<typeof resolveFrpConfig>>, ctx: InterceptorContext): Promise<TunnelAuxiliary>;
|
|
61
|
+
}
|
|
53
62
|
/** Resolve and validate the tunnel transport selector. */
|
|
54
63
|
export declare function resolveTunnelTransport(transport?: string): TunnelTransport;
|
|
55
64
|
/**
|
|
@@ -67,4 +76,5 @@ export declare function resolveTunnelTransport(transport?: string): TunnelTransp
|
|
|
67
76
|
* interceptor: tunnelInterceptor(),
|
|
68
77
|
* });
|
|
69
78
|
*/
|
|
70
|
-
export declare function tunnelInterceptor(options?: TunnelInterceptorOptions): Interceptor;
|
|
79
|
+
export declare function tunnelInterceptor(options?: TunnelInterceptorOptions, runtime?: TunnelRuntime): Interceptor;
|
|
80
|
+
export {};
|
package/lib/src/interceptor.js
CHANGED
|
@@ -17,16 +17,38 @@
|
|
|
17
17
|
* @module
|
|
18
18
|
*/
|
|
19
19
|
import { log, object } from "@dbx-tools/shared-core";
|
|
20
|
-
import { installFrp, resolveFrpConfig,
|
|
21
|
-
import { installPortr, resolvePortrConfig,
|
|
20
|
+
import { installFrp, resolveFrpConfig, superviseFrp, writeFrpConfig } from "./frp.js";
|
|
21
|
+
import { installPortr, resolvePortrConfig, supervisePortr, writePortrConfig } from "./portr.js";
|
|
22
22
|
import { startPathProxy } from "./path-proxy.js";
|
|
23
23
|
const logger = log.logger("tunnel:interceptor");
|
|
24
|
+
const defaultRuntime = {
|
|
25
|
+
async startPortr(config) {
|
|
26
|
+
const portrEnv = await installPortr();
|
|
27
|
+
await writePortrConfig(config, portrEnv);
|
|
28
|
+
return supervisePortr(config, portrEnv);
|
|
29
|
+
},
|
|
30
|
+
async startFrp(config, ctx) {
|
|
31
|
+
const pathProxy = config.stripPrefix && config.path !== "/"
|
|
32
|
+
? await startPathProxy(config.targetPort, config.path)
|
|
33
|
+
: undefined;
|
|
34
|
+
if (pathProxy) {
|
|
35
|
+
config.targetPort = pathProxy.port;
|
|
36
|
+
ctx.onLifecycle("shutdown", () => void pathProxy.close());
|
|
37
|
+
}
|
|
38
|
+
const frpEnv = await installFrp();
|
|
39
|
+
const configPath = await writeFrpConfig(config, frpEnv);
|
|
40
|
+
const supervisor = superviseFrp(config, frpEnv, configPath);
|
|
41
|
+
return {
|
|
42
|
+
stop() {
|
|
43
|
+
supervisor.stop();
|
|
44
|
+
void pathProxy?.close();
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
},
|
|
48
|
+
};
|
|
24
49
|
/** Resolve and validate the tunnel transport selector. */
|
|
25
50
|
export function resolveTunnelTransport(transport) {
|
|
26
|
-
const resolved = transport ??
|
|
27
|
-
process.env.DBX_TOOLS_TUNNEL_TRANSPORT ??
|
|
28
|
-
process.env.TUNNEL_TRANSPORT ??
|
|
29
|
-
"portr";
|
|
51
|
+
const resolved = transport ?? process.env.DBX_TOOLS_TUNNEL_TRANSPORT ?? process.env.TUNNEL_TRANSPORT ?? "portr";
|
|
30
52
|
if (resolved === "portr" || resolved === "frp" || resolved === "both")
|
|
31
53
|
return resolved;
|
|
32
54
|
throw new TypeError(`invalid tunnel transport: ${resolved} (expected portr, frp, or both)`);
|
|
@@ -50,14 +72,14 @@ function resolvePublicPort(port) {
|
|
|
50
72
|
* interceptor: tunnelInterceptor(),
|
|
51
73
|
* });
|
|
52
74
|
*/
|
|
53
|
-
export function tunnelInterceptor(options = {}) {
|
|
75
|
+
export function tunnelInterceptor(options = {}, runtime = defaultRuntime) {
|
|
54
76
|
return async (ctx) => {
|
|
55
77
|
if (ctx.env.databricksHost) {
|
|
56
78
|
process.env.DATABRICKS_HOST ??= ctx.env.databricksHost;
|
|
57
79
|
}
|
|
58
80
|
const port = resolvePublicPort(options.port);
|
|
59
81
|
const transport = resolveTunnelTransport(options.transport);
|
|
60
|
-
const
|
|
82
|
+
const initializers = [];
|
|
61
83
|
if (transport === "portr" || transport === "both") {
|
|
62
84
|
const portrConfig = resolvePortrConfig({
|
|
63
85
|
publicDomain: options.publicDomain,
|
|
@@ -65,9 +87,7 @@ export function tunnelInterceptor(options = {}) {
|
|
|
65
87
|
port,
|
|
66
88
|
});
|
|
67
89
|
if (portrConfig) {
|
|
68
|
-
|
|
69
|
-
await writePortrConfig(portrConfig, portrEnv);
|
|
70
|
-
children.push(await startPortr(portrConfig, portrEnv));
|
|
90
|
+
initializers.push(runtime.startPortr(portrConfig));
|
|
71
91
|
}
|
|
72
92
|
else {
|
|
73
93
|
logger.info("portr not configured (requires PORTR_TOKEN and TUNNEL_PUBLIC_DOMAIN)");
|
|
@@ -86,31 +106,38 @@ export function tunnelInterceptor(options = {}) {
|
|
|
86
106
|
port,
|
|
87
107
|
});
|
|
88
108
|
if (frpConfig) {
|
|
89
|
-
|
|
90
|
-
? await startPathProxy(port, frpConfig.path)
|
|
91
|
-
: undefined;
|
|
92
|
-
if (pathProxy) {
|
|
93
|
-
frpConfig.targetPort = pathProxy.port;
|
|
94
|
-
ctx.onLifecycle("shutdown", () => void pathProxy.close());
|
|
95
|
-
}
|
|
96
|
-
const frpEnv = await installFrp();
|
|
97
|
-
const configPath = await writeFrpConfig(frpConfig, frpEnv);
|
|
98
|
-
children.push(startFrp(frpConfig, frpEnv, configPath));
|
|
109
|
+
initializers.push(runtime.startFrp(frpConfig, ctx));
|
|
99
110
|
}
|
|
100
111
|
else {
|
|
101
112
|
logger.info("frp not configured (requires TUNNEL_PUBLIC_DOMAIN)");
|
|
102
113
|
}
|
|
103
114
|
}
|
|
104
|
-
if (!
|
|
115
|
+
if (!initializers.length)
|
|
105
116
|
return;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
117
|
+
const auxiliaries = [];
|
|
118
|
+
let stopped = false;
|
|
119
|
+
const stop = () => {
|
|
120
|
+
stopped = true;
|
|
121
|
+
for (const auxiliary of auxiliaries)
|
|
122
|
+
auxiliary.stop();
|
|
123
|
+
};
|
|
124
|
+
ctx.onTeardown(stop);
|
|
125
|
+
ctx.onLifecycle("shutdown", stop);
|
|
126
|
+
void Promise.allSettled(initializers).then((results) => {
|
|
127
|
+
for (const result of results) {
|
|
128
|
+
if (result.status === "rejected") {
|
|
129
|
+
logger.error("tunnel failed to start", { error: result.reason });
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (stopped)
|
|
133
|
+
result.value.stop();
|
|
134
|
+
else
|
|
135
|
+
auxiliaries.push(result.value);
|
|
136
|
+
}
|
|
137
|
+
if (!stopped && auxiliaries.length)
|
|
138
|
+
logger.info(`tunnel bound: ${transport} -> :${port}`);
|
|
112
139
|
});
|
|
113
|
-
logger.info(`tunnel
|
|
140
|
+
logger.info(`tunnel initialization scheduled: ${transport} -> :${port}`);
|
|
114
141
|
};
|
|
115
142
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBSUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQXFDaEQsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxTQUFrQjtJQUN2RCxNQUFNLFFBQVEsR0FDWixTQUFTO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEI7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDNUIsT0FBTyxDQUFDO0lBQ1YsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLE1BQU07UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN2RixNQUFNLElBQUksU0FBUyxDQUFDLDZCQUE2QixRQUFRLGlDQUFpQyxDQUFDLENBQUM7QUFDOUYsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixTQUFTLGlCQUFpQixDQUFDLElBQWE7SUFDdEMsT0FBTyxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxDQUFDO0FBQzFFLENBQUM7QUFFRDs7Ozs7Ozs7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UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQzdCLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUTtZQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQy9CLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUTtnQkFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07b0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFNBQVMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGB0dW5uZWxJbnRlcmNlcHRvcigpYCAtIHRoZSB7QGxpbmsgSW50ZXJjZXB0b3J9IHRoYXQgZnJvbnRzIGFuIGFwcCB3aXRoIGEgcHVibGljXG4gKiBwb3J0ciBhbmQvb3IgZnJwIHR1bm5lbCwgY29uc3VtaW5nIHRoZSB7QGxpbmsgSW50ZXJjZXB0b3JDb250ZXh0fSBgQGRieC10b29scy9hcHBraXRgJ3NcbiAqIGBjcmVhdGVBcHBgIGhhbmRzIGl0LlxuICpcbiAqIFRoZSB0dW5uZWwgcnVucyBJTi1QUk9DRVNTOiB0aGUgQVBQIGlzIHRoZSBtYWluIHByb2Nlc3MgYW5kIGhhbmRzIHRoaXMgaW50ZXJjZXB0b3JcbiAqIGl0cyBjb250ZXh0LCByYXRoZXIgdGhhbiBhIHdyYXBwZXIgcHJvY2VzcyBzcGF3bmluZyB0aGUgYXBwIGFzIGEgY2hpbGQuIFRoZVxuICogaW50ZXJjZXB0b3IgYXBwbGllcyB0aGUgY29tcHV0ZWQgd29ya3NwYWNlIGhvc3QsIGluc3RhbGxzIGFuZCBsYXVuY2hlcyBwb3J0ciBvbiB0aGVcbiAqIGFwcCdzIHB1YmxpYyBwb3J0LCBiaW5kcyB0aGUgY2hpbGQgcHJvY2VzcyB0byB0aGUgYXBwLCBhbmQgc3RvcHMgcG9ydHIgZHVyaW5nIGFuXG4gKiBvcmRlcmx5IEFwcEtpdCBzaHV0ZG93bi5cbiAqXG4gKiBUaGUgcGFzc3dvcmRsZXNzIEdBVEUgaXMgYSBzZXBhcmF0ZSBjb25jZXJuOiBpdCBpcyB0aGUgYGF1dGhHYXRlYCBBcHBLaXQgcGx1Z2luLFxuICogd2hpY2ggcmVnaXN0ZXJzIHRoZSBsb2dpbiByb3V0ZXMgKyBhIGdhdGluZyBtaWRkbGV3YXJlIG9uIHRoZSBhcHAncyBvd24gc2VydmVyLlxuICogUmVnaXN0ZXIgaXQgaW4gdGhlIGFwcCdzIGBwbHVnaW5zYCBmb3IgZ2F0ZWQgdHJhZmZpYy4gVGhpcyBpbnRlcmNlcHRvciBpcyBvbmx5XG4gKiB0aGUgcG9ydHIgaGFsZiAtIFwidXBkYXRlIHRoZSBob3N0LCBiaW5kIHBvcnRyXCIgLSB0aGUgc21hbGxlc3QgdXNlZnVsIHVuaXQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmNlcHRvciwgSW50ZXJjZXB0b3JDb250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBpbnN0YWxsRnJwLCByZXNvbHZlRnJwQ29uZmlnLCBzdGFydEZycCwgd3JpdGVGcnBDb25maWcgfSBmcm9tIFwiLi9mcnAudHNcIjtcbmltcG9ydCB7IGluc3RhbGxQb3J0ciwgcmVzb2x2ZVBvcnRyQ29uZmlnLCBzdGFydFBvcnRyLCB3cml0ZVBvcnRyQ29uZmlnIH0gZnJvbSBcIi4vcG9ydHIudHNcIjtcbmltcG9ydCB7IHN0YXJ0UGF0aFByb3h5IH0gZnJvbSBcIi4vcGF0aC1wcm94eS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwidHVubmVsOmludGVyY2VwdG9yXCIpO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHR1bm5lbEludGVyY2VwdG9yfSAoZWFjaCBhbHNvIHJlc29sdmFibGUgZnJvbSBlbnYpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUdW5uZWxJbnRlcmNlcHRvck9wdGlvbnMge1xuICAvKiogVHVubmVsIGNsaWVudHMgdG8gcnVuLiBFbnYgYERCWF9UT09MU19UVU5ORUxfVFJBTlNQT1JUYDsgZGVmYXVsdHMgdG8gYHBvcnRyYC4gKi9cbiAgdHJhbnNwb3J0PzogVHVubmVsVHJhbnNwb3J0O1xuICAvKiogUHVibGljIGhvc3QgdG8gc2VydmUgb24uIEVudiBgVFVOTkVMX1BVQkxJQ19ET01BSU5gLiAqL1xuICBwdWJsaWNEb21haW4/OiBzdHJpbmc7XG4gIC8qKiBwb3J0ciBzdWJkb21haW4gKGVsc2UgZGVyaXZlZCBmcm9tIHtAbGluayBwdWJsaWNEb21haW59KS4gKi9cbiAgc3ViZG9tYWluPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFBVQkxJQyBwb3J0IHBvcnRyIGZvcndhcmRzIHRvIC0gdGhlIHBvcnQgdGhlIGFwcCBpdHNlbGYgbGlzdGVucyBvbi5cbiAgICogRGVmYXVsdHMgdG8gdGhlIERhdGFicmlja3MgQXBwcyBydW50aW1lIGNvbnRyYWN0IGBEQVRBQlJJQ0tTX0FQUF9QT1JUYFxuICAgKiAodGhlbiBgODAwMGApLCB3aGljaCBpcyB0aGUgcG9ydCB0aGUgcGxhdGZvcm0gcm91dGVzIHRvLlxuICAgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIGZycHMgY29udHJvbCBob3N0OyBkZWZhdWx0cyB0byB0aGUgRlJQIHB1YmxpYyBkb21haW4uIEVudiBgRlJQX1NFUlZFUmAuICovXG4gIGZycFNlcnZlcj86IHN0cmluZztcbiAgLyoqIEZSUCBwdWJsaWMgSFRUUCBob3N0LiBFbnYgYFRVTk5FTF9GUlBfUFVCTElDX0RPTUFJTmAuICovXG4gIGZycFB1YmxpY0RvbWFpbj86IHN0cmluZztcbiAgLyoqIGZycHMgY29udHJvbCBwb3J0LiBFbnYgYEZSUF9TRVJWRVJfUE9SVGA7IGRlZmF1bHRzIHRvIGA0NDNgLiAqL1xuICBmcnBTZXJ2ZXJQb3J0PzogbnVtYmVyO1xuICAvKiogZnJwYyB0cmFuc3BvcnQgcHJvdG9jb2wuIEVudiBgRlJQX1BST1RPQ09MYDsgZGVmYXVsdHMgdG8gYHdzc2AuICovXG4gIGZycFByb3RvY29sPzogc3RyaW5nO1xuICAvKiogZnJwcyBhdXRoIHRva2VuLiBFbnYgYEZSUF9UT0tFTmAgKG9yIGBUVU5ORUxfVE9LRU5gKS4gKi9cbiAgZnJwVG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBmcnAgcHJveHkgcmVnaXN0cmF0aW9uIG5hbWUuIEVudiBgRlJQX1BST1hZX05BTUVgLiAqL1xuICBmcnBQcm94eU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBGUlAgcGF0aCBsb2NhdGlvbi4gRW52IGBGUlBfUEFUSGA7IGRlZmF1bHRzIHRvIGBEQVRBQlJJQ0tTX0FQUF9OQU1FYC4gKi9cbiAgZnJwUGF0aD86IHN0cmluZztcbiAgLyoqIFN0cmlwIHRoZSBGUlAgcGF0aCBiZWZvcmUgZm9yd2FyZGluZy4gRW52IGBGUlBfU1RSSVBfUFJFRklYYDsgZGVmYXVsdHMgdHJ1ZSBmb3Igbm9uLXJvb3QgcGF0aHMuICovXG4gIGZycFN0cmlwUHJlZml4PzogYm9vbGVhbjtcbn1cblxuLyoqIFB1YmxpYyB0dW5uZWwgY2xpZW50cyBzdXBwb3J0ZWQgYnkgdGhlIGludGVyY2VwdG9yIGFuZCBDTEkuICovXG5leHBvcnQgdHlwZSBUdW5uZWxUcmFuc3BvcnQgPSBcInBvcnRyXCIgfCBcImZycFwiIHwgXCJib3RoXCI7XG5cbi8qKiBSZXNvbHZlIGFuZCB2YWxpZGF0ZSB0aGUgdHVubmVsIHRyYW5zcG9ydCBzZWxlY3Rvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHVubmVsVHJhbnNwb3J0KHRyYW5zcG9ydD86IHN0cmluZyk6IFR1bm5lbFRyYW5zcG9ydCB7XG4gIGNvbnN0IHJlc29sdmVkID1cbiAgICB0cmFuc3BvcnQgPz9cbiAgICBwcm9jZXNzLmVudi5EQlhfVE9PTFNfVFVOTkVMX1RSQU5TUE9SVCA/P1xuICAgIHByb2Nlc3MuZW52LlRVTk5FTF9UUkFOU1BPUlQgPz9cbiAgICBcInBvcnRyXCI7XG4gIGlmIChyZXNvbHZlZCA9PT0gXCJwb3J0clwiIHx8IHJlc29sdmVkID09PSBcImZycFwiIHx8IHJlc29sdmVkID09PSBcImJvdGhcIikgcmV0dXJuIHJlc29sdmVkO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIHR1bm5lbCB0cmFuc3BvcnQ6ICR7cmVzb2x2ZWR9IChleHBlY3RlZCBwb3J0ciwgZnJwLCBvciBib3RoKWApO1xufVxuXG4vKiogUmVzb2x2ZSB0aGUgcHVibGljIHBvcnQgcG9ydHIgc2hvdWxkIHRhcmdldDogZXhwbGljaXQsIGVsc2UgdGhlIEFwcHMgY29udHJhY3QuICovXG5mdW5jdGlvbiByZXNvbHZlUHVibGljUG9ydChwb3J0PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBvcnQgPz8gb2JqZWN0LnRvTnVtYmVyKHByb2Nlc3MuZW52LkRBVEFCUklDS1NfQVBQX1BPUlQpID8/IDgwMDA7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIHR1bm5lbCB7QGxpbmsgSW50ZXJjZXB0b3J9LiBQYXNzIGl0IHRvIGBjcmVhdGVBcHAoeyBpbnRlcmNlcHRvciB9KWAuXG4gKlxuICogQSBuby1vcCAobG9ncyBhbmQgcmV0dXJucykgd2hlbiBub25lIG9mIHRoZSBzZWxlY3RlZCB0dW5uZWwgY2xpZW50cyByZXNvbHZlXG4gKiB1c2FibGUgY29uZmlndXJhdGlvbiwgc28gYW4gYXBwIGNhbiByZWdpc3RlciBpdCB1bmNvbmRpdGlvbmFsbHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgdHVubmVsSW50ZXJjZXB0b3IgfSBmcm9tIFwiQGRieC10b29scy90dW5uZWxcIjtcbiAqXG4gKiBhd2FpdCBhcHBraXQuY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW3NlcnZlcih7IGhvc3QsIHN0YXRpY1BhdGggfSldLFxuICogICBpbnRlcmNlcHRvcjogdHVubmVsSW50ZXJjZXB0b3IoKSxcbiAqIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHVubmVsSW50ZXJjZXB0b3Iob3B0aW9uczogVHVubmVsSW50ZXJjZXB0b3JPcHRpb25zID0ge30pOiBJbnRlcmNlcHRvciB7XG4gIHJldHVybiBhc3luYyAoY3R4OiBJbnRlcmNlcHRvckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoY3R4LmVudi5kYXRhYnJpY2tzSG9zdCkge1xuICAgICAgcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUID8/PSBjdHguZW52LmRhdGFicmlja3NIb3N0O1xuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSByZXNvbHZlUHVibGljUG9ydChvcHRpb25zLnBvcnQpO1xuICAgIGNvbnN0IHRyYW5zcG9ydCA9IHJlc29sdmVUdW5uZWxUcmFuc3BvcnQob3B0aW9ucy50cmFuc3BvcnQpO1xuICAgIGNvbnN0IGNoaWxkcmVuOiBDaGlsZFByb2Nlc3NbXSA9IFtdO1xuICAgIGlmICh0cmFuc3BvcnQgPT09IFwicG9ydHJcIiB8fCB0cmFuc3BvcnQgPT09IFwiYm90aFwiKSB7XG4gICAgICBjb25zdCBwb3J0ckNvbmZpZyA9IHJlc29sdmVQb3J0ckNvbmZpZyh7XG4gICAgICAgIHB1YmxpY0RvbWFpbjogb3B0aW9ucy5wdWJsaWNEb21haW4sXG4gICAgICAgIHN1YmRvbWFpbjogb3B0aW9ucy5zdWJkb21haW4sXG4gICAgICAgIHBvcnQsXG4gICAgICB9KTtcbiAgICAgIGlmIChwb3J0ckNvbmZpZykge1xuICAgICAgICBjb25zdCBwb3J0ckVudiA9IGF3YWl0IGluc3RhbGxQb3J0cigpO1xuICAgICAgICBhd2FpdCB3cml0ZVBvcnRyQ29uZmlnKHBvcnRyQ29uZmlnLCBwb3J0ckVudik7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYXdhaXQgc3RhcnRQb3J0cihwb3J0ckNvbmZpZywgcG9ydHJFbnYpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwicG9ydHIgbm90IGNvbmZpZ3VyZWQgKHJlcXVpcmVzIFBPUlRSX1RPS0VOIGFuZCBUVU5ORUxfUFVCTElDX0RPTUFJTilcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0cmFuc3BvcnQgPT09IFwiZnJwXCIgfHwgdHJhbnNwb3J0ID09PSBcImJvdGhcIikge1xuICAgICAgY29uc3QgZnJwQ29uZmlnID0gcmVzb2x2ZUZycENvbmZpZyh7XG4gICAgICAgIHB1YmxpY0RvbWFpbjogb3B0aW9ucy5mcnBQdWJsaWNEb21haW4sXG4gICAgICAgIHNlcnZlcjogb3B0aW9ucy5mcnBTZXJ2ZXIsXG4gICAgICAgIHNlcnZlclBvcnQ6IG9wdGlvbnMuZnJwU2VydmVyUG9ydCxcbiAgICAgICAgcHJvdG9jb2w6IG9wdGlvbnMuZnJwUHJvdG9jb2wsXG4gICAgICAgIHRva2VuOiBvcHRpb25zLmZycFRva2VuLFxuICAgICAgICBwcm94eU5hbWU6IG9wdGlvbnMuZnJwUHJveHlOYW1lLFxuICAgICAgICBwYXRoOiBvcHRpb25zLmZycFBhdGgsXG4gICAgICAgIHN0cmlwUHJlZml4OiBvcHRpb25zLmZycFN0cmlwUHJlZml4LFxuICAgICAgICBwb3J0LFxuICAgICAgfSk7XG4gICAgICBpZiAoZnJwQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHBhdGhQcm94eSA9XG4gICAgICAgICAgZnJwQ29uZmlnLnN0cmlwUHJlZml4ICYmIGZycENvbmZpZy5wYXRoICE9PSBcIi9cIlxuICAgICAgICAgICAgPyBhd2FpdCBzdGFydFBhdGhQcm94eShwb3J0LCBmcnBDb25maWcucGF0aClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAocGF0aFByb3h5KSB7XG4gICAgICAgICAgZnJwQ29uZmlnLnRhcmdldFBvcnQgPSBwYXRoUHJveHkucG9ydDtcbiAgICAgICAgICBjdHgub25MaWZlY3ljbGUoXCJzaHV0ZG93blwiLCAoKSA9PiB2b2lkIHBhdGhQcm94eS5jbG9zZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcnBFbnYgPSBhd2FpdCBpbnN0YWxsRnJwKCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBhd2FpdCB3cml0ZUZycENvbmZpZyhmcnBDb25maWcsIGZycEVudik7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goc3RhcnRGcnAoZnJwQ29uZmlnLCBmcnBFbnYsIGNvbmZpZ1BhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiZnJwIG5vdCBjb25maWd1cmVkIChyZXF1aXJlcyBUVU5ORUxfUFVCTElDX0RPTUFJTilcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikgY3R4LmJpbmRQcm9jZXNzKGNoaWxkKTtcbiAgICBjdHgub25MaWZlY3ljbGUoXCJzaHV0ZG93blwiLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSBpZiAoIWNoaWxkLmtpbGxlZCkgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oYHR1bm5lbCBib3VuZDogJHt0cmFuc3BvcnR9IC0+IDoke3BvcnR9YCk7XG4gIH07XG59XG4iXX0=
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBR0gsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQWlEaEQsTUFBTSxjQUFjLEdBQWtCO0lBQ3BDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTTtRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRztRQUN4QixNQUFNLFNBQVMsR0FDYixNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssR0FBRztZQUN2QyxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3RELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxVQUFVLEdBQUcsU0FB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RSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDakUsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQUksT0FBTztvQkFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDOztvQkFDNUIsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU07Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsU0FBUyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxTQUFTLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgdHVubmVsSW50ZXJjZXB0b3IoKWAgLSB0aGUge0BsaW5rIEludGVyY2VwdG9yfSB0aGF0IGZyb250cyBhbiBhcHAgd2l0aCBhIHB1YmxpY1xuICogcG9ydHIgYW5kL29yIGZycCB0dW5uZWwsIGNvbnN1bWluZyB0aGUge0BsaW5rIEludGVyY2VwdG9yQ29udGV4dH0gYEBkYngtdG9vbHMvYXBwa2l0YCdzXG4gKiBgY3JlYXRlQXBwYCBoYW5kcyBpdC5cbiAqXG4gKiBUaGUgdHVubmVsIHJ1bnMgSU4tUFJPQ0VTUzogdGhlIEFQUCBpcyB0aGUgbWFpbiBwcm9jZXNzIGFuZCBoYW5kcyB0aGlzIGludGVyY2VwdG9yXG4gKiBpdHMgY29udGV4dCwgcmF0aGVyIHRoYW4gYSB3cmFwcGVyIHByb2Nlc3Mgc3Bhd25pbmcgdGhlIGFwcCBhcyBhIGNoaWxkLiBUaGVcbiAqIGludGVyY2VwdG9yIGFwcGxpZXMgdGhlIGNvbXB1dGVkIHdvcmtzcGFjZSBob3N0LCBpbnN0YWxscyBhbmQgbGF1bmNoZXMgcG9ydHIgb24gdGhlXG4gKiBhcHAncyBwdWJsaWMgcG9ydCwgYmluZHMgdGhlIGNoaWxkIHByb2Nlc3MgdG8gdGhlIGFwcCwgYW5kIHN0b3BzIHBvcnRyIGR1cmluZyBhblxuICogb3JkZXJseSBBcHBLaXQgc2h1dGRvd24uXG4gKlxuICogVGhlIHBhc3N3b3JkbGVzcyBHQVRFIGlzIGEgc2VwYXJhdGUgY29uY2VybjogaXQgaXMgdGhlIGBhdXRoR2F0ZWAgQXBwS2l0IHBsdWdpbixcbiAqIHdoaWNoIHJlZ2lzdGVycyB0aGUgbG9naW4gcm91dGVzICsgYSBnYXRpbmcgbWlkZGxld2FyZSBvbiB0aGUgYXBwJ3Mgb3duIHNlcnZlci5cbiAqIFJlZ2lzdGVyIGl0IGluIHRoZSBhcHAncyBgcGx1Z2luc2AgZm9yIGdhdGVkIHRyYWZmaWMuIFRoaXMgaW50ZXJjZXB0b3IgaXMgb25seVxuICogdGhlIHBvcnRyIGhhbGYgLSBcInVwZGF0ZSB0aGUgaG9zdCwgYmluZCBwb3J0clwiIC0gdGhlIHNtYWxsZXN0IHVzZWZ1bCB1bml0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEludGVyY2VwdG9yLCBJbnRlcmNlcHRvckNvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGluc3RhbGxGcnAsIHJlc29sdmVGcnBDb25maWcsIHN1cGVydmlzZUZycCwgd3JpdGVGcnBDb25maWcgfSBmcm9tIFwiLi9mcnAudHNcIjtcbmltcG9ydCB7IGluc3RhbGxQb3J0ciwgcmVzb2x2ZVBvcnRyQ29uZmlnLCBzdXBlcnZpc2VQb3J0ciwgd3JpdGVQb3J0ckNvbmZpZyB9IGZyb20gXCIuL3BvcnRyLnRzXCI7XG5pbXBvcnQgeyBzdGFydFBhdGhQcm94eSB9IGZyb20gXCIuL3BhdGgtcHJveHkudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbDppbnRlcmNlcHRvclwiKTtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayB0dW5uZWxJbnRlcmNlcHRvcn0gKGVhY2ggYWxzbyByZXNvbHZhYmxlIGZyb20gZW52KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHVubmVsSW50ZXJjZXB0b3JPcHRpb25zIHtcbiAgLyoqIFR1bm5lbCBjbGllbnRzIHRvIHJ1bi4gRW52IGBEQlhfVE9PTFNfVFVOTkVMX1RSQU5TUE9SVGA7IGRlZmF1bHRzIHRvIGBwb3J0cmAuICovXG4gIHRyYW5zcG9ydD86IFR1bm5lbFRyYW5zcG9ydDtcbiAgLyoqIFB1YmxpYyBob3N0IHRvIHNlcnZlIG9uLiBFbnYgYFRVTk5FTF9QVUJMSUNfRE9NQUlOYC4gKi9cbiAgcHVibGljRG9tYWluPzogc3RyaW5nO1xuICAvKiogcG9ydHIgc3ViZG9tYWluIChlbHNlIGRlcml2ZWQgZnJvbSB7QGxpbmsgcHVibGljRG9tYWlufSkuICovXG4gIHN1YmRvbWFpbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBQVUJMSUMgcG9ydCBwb3J0ciBmb3J3YXJkcyB0byAtIHRoZSBwb3J0IHRoZSBhcHAgaXRzZWxmIGxpc3RlbnMgb24uXG4gICAqIERlZmF1bHRzIHRvIHRoZSBEYXRhYnJpY2tzIEFwcHMgcnVudGltZSBjb250cmFjdCBgREFUQUJSSUNLU19BUFBfUE9SVGBcbiAgICogKHRoZW4gYDgwMDBgKSwgd2hpY2ggaXMgdGhlIHBvcnQgdGhlIHBsYXRmb3JtIHJvdXRlcyB0by5cbiAgICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBmcnBzIGNvbnRyb2wgaG9zdDsgZGVmYXVsdHMgdG8gdGhlIEZSUCBwdWJsaWMgZG9tYWluLiBFbnYgYEZSUF9TRVJWRVJgLiAqL1xuICBmcnBTZXJ2ZXI/OiBzdHJpbmc7XG4gIC8qKiBGUlAgcHVibGljIEhUVFAgaG9zdC4gRW52IGBUVU5ORUxfRlJQX1BVQkxJQ19ET01BSU5gLiAqL1xuICBmcnBQdWJsaWNEb21haW4/OiBzdHJpbmc7XG4gIC8qKiBmcnBzIGNvbnRyb2wgcG9ydC4gRW52IGBGUlBfU0VSVkVSX1BPUlRgOyBkZWZhdWx0cyB0byBgNDQzYC4gKi9cbiAgZnJwU2VydmVyUG9ydD86IG51bWJlcjtcbiAgLyoqIGZycGMgdHJhbnNwb3J0IHByb3RvY29sLiBFbnYgYEZSUF9QUk9UT0NPTGA7IGRlZmF1bHRzIHRvIGB3c3NgLiAqL1xuICBmcnBQcm90b2NvbD86IHN0cmluZztcbiAgLyoqIGZycHMgYXV0aCB0b2tlbi4gRW52IGBGUlBfVE9LRU5gIChvciBgVFVOTkVMX1RPS0VOYCkuICovXG4gIGZycFRva2VuPzogc3RyaW5nO1xuICAvKiogZnJwIHByb3h5IHJlZ2lzdHJhdGlvbiBuYW1lLiBFbnYgYEZSUF9QUk9YWV9OQU1FYC4gKi9cbiAgZnJwUHJveHlOYW1lPzogc3RyaW5nO1xuICAvKiogRlJQIHBhdGggbG9jYXRpb24uIEVudiBgRlJQX1BBVEhgOyBkZWZhdWx0cyB0byBgREFUQUJSSUNLU19BUFBfTkFNRWAuICovXG4gIGZycFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBTdHJpcCB0aGUgRlJQIHBhdGggYmVmb3JlIGZvcndhcmRpbmcuIEVudiBgRlJQX1NUUklQX1BSRUZJWGA7IGRlZmF1bHRzIHRydWUgZm9yIG5vbi1yb290IHBhdGhzLiAqL1xuICBmcnBTdHJpcFByZWZpeD86IGJvb2xlYW47XG59XG5cbi8qKiBQdWJsaWMgdHVubmVsIGNsaWVudHMgc3VwcG9ydGVkIGJ5IHRoZSBpbnRlcmNlcHRvciBhbmQgQ0xJLiAqL1xuZXhwb3J0IHR5cGUgVHVubmVsVHJhbnNwb3J0ID0gXCJwb3J0clwiIHwgXCJmcnBcIiB8IFwiYm90aFwiO1xuXG5pbnRlcmZhY2UgVHVubmVsQXV4aWxpYXJ5IHtcbiAgc3RvcCgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgVHVubmVsUnVudGltZSB7XG4gIHN0YXJ0UG9ydHIoY29uZmlnOiBOb25OdWxsYWJsZTxSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlUG9ydHJDb25maWc+Pik6IFByb21pc2U8VHVubmVsQXV4aWxpYXJ5PjtcbiAgc3RhcnRGcnAoXG4gICAgY29uZmlnOiBOb25OdWxsYWJsZTxSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlRnJwQ29uZmlnPj4sXG4gICAgY3R4OiBJbnRlcmNlcHRvckNvbnRleHQsXG4gICk6IFByb21pc2U8VHVubmVsQXV4aWxpYXJ5Pjtcbn1cblxuY29uc3QgZGVmYXVsdFJ1bnRpbWU6IFR1bm5lbFJ1bnRpbWUgPSB7XG4gIGFzeW5jIHN0YXJ0UG9ydHIoY29uZmlnKSB7XG4gICAgY29uc3QgcG9ydHJFbnYgPSBhd2FpdCBpbnN0YWxsUG9ydHIoKTtcbiAgICBhd2FpdCB3cml0ZVBvcnRyQ29uZmlnKGNvbmZpZywgcG9ydHJFbnYpO1xuICAgIHJldHVybiBzdXBlcnZpc2VQb3J0cihjb25maWcsIHBvcnRyRW52KTtcbiAgfSxcbiAgYXN5bmMgc3RhcnRGcnAoY29uZmlnLCBjdHgpIHtcbiAgICBjb25zdCBwYXRoUHJveHkgPVxuICAgICAgY29uZmlnLnN0cmlwUHJlZml4ICYmIGNvbmZpZy5wYXRoICE9PSBcIi9cIlxuICAgICAgICA/IGF3YWl0IHN0YXJ0UGF0aFByb3h5KGNvbmZpZy50YXJnZXRQb3J0LCBjb25maWcucGF0aClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHBhdGhQcm94eSkge1xuICAgICAgY29uZmlnLnRhcmdldFBvcnQgPSBwYXRoUHJveHkucG9ydDtcbiAgICAgIGN0eC5vbkxpZmVjeWNsZShcInNodXRkb3duXCIsICgpID0+IHZvaWQgcGF0aFByb3h5LmNsb3NlKCkpO1xuICAgIH1cbiAgICBjb25zdCBmcnBFbnYgPSBhd2FpdCBpbnN0YWxsRnJwKCk7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGF3YWl0IHdyaXRlRnJwQ29uZmlnKGNvbmZpZywgZnJwRW52KTtcbiAgICBjb25zdCBzdXBlcnZpc29yID0gc3VwZXJ2aXNlRnJwKGNvbmZpZywgZnJwRW52LCBjb25maWdQYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcCgpIHtcbiAgICAgICAgc3VwZXJ2aXNvci5zdG9wKCk7XG4gICAgICAgIHZvaWQgcGF0aFByb3h5Py5jbG9zZSgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcblxuLyoqIFJlc29sdmUgYW5kIHZhbGlkYXRlIHRoZSB0dW5uZWwgdHJhbnNwb3J0IHNlbGVjdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUdW5uZWxUcmFuc3BvcnQodHJhbnNwb3J0Pzogc3RyaW5nKTogVHVubmVsVHJhbnNwb3J0IHtcbiAgY29uc3QgcmVzb2x2ZWQgPVxuICAgIHRyYW5zcG9ydCA/PyBwcm9jZXNzLmVudi5EQlhfVE9PTFNfVFVOTkVMX1RSQU5TUE9SVCA/PyBwcm9jZXNzLmVudi5UVU5ORUxfVFJBTlNQT1JUID8/IFwicG9ydHJcIjtcbiAgaWYgKHJlc29sdmVkID09PSBcInBvcnRyXCIgfHwgcmVzb2x2ZWQgPT09IFwiZnJwXCIgfHwgcmVzb2x2ZWQgPT09IFwiYm90aFwiKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgdHVubmVsIHRyYW5zcG9ydDogJHtyZXNvbHZlZH0gKGV4cGVjdGVkIHBvcnRyLCBmcnAsIG9yIGJvdGgpYCk7XG59XG5cbi8qKiBSZXNvbHZlIHRoZSBwdWJsaWMgcG9ydCBwb3J0ciBzaG91bGQgdGFyZ2V0OiBleHBsaWNpdCwgZWxzZSB0aGUgQXBwcyBjb250cmFjdC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVQdWJsaWNQb3J0KHBvcnQ/OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gcG9ydCA/PyBvYmplY3QudG9OdW1iZXIocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19BUFBfUE9SVCkgPz8gODAwMDtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgdHVubmVsIHtAbGluayBJbnRlcmNlcHRvcn0uIFBhc3MgaXQgdG8gYGNyZWF0ZUFwcCh7IGludGVyY2VwdG9yIH0pYC5cbiAqXG4gKiBBIG5vLW9wIChsb2dzIGFuZCByZXR1cm5zKSB3aGVuIG5vbmUgb2YgdGhlIHNlbGVjdGVkIHR1bm5lbCBjbGllbnRzIHJlc29sdmVcbiAqIHVzYWJsZSBjb25maWd1cmF0aW9uLCBzbyBhbiBhcHAgY2FuIHJlZ2lzdGVyIGl0IHVuY29uZGl0aW9uYWxseS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyB0dW5uZWxJbnRlcmNlcHRvciB9IGZyb20gXCJAZGJ4LXRvb2xzL3R1bm5lbFwiO1xuICpcbiAqIGF3YWl0IGFwcGtpdC5jcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbc2VydmVyKHsgaG9zdCwgc3RhdGljUGF0aCB9KV0sXG4gKiAgIGludGVyY2VwdG9yOiB0dW5uZWxJbnRlcmNlcHRvcigpLFxuICogfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0dW5uZWxJbnRlcmNlcHRvcihcbiAgb3B0aW9uczogVHVubmVsSW50ZXJjZXB0b3JPcHRpb25zID0ge30sXG4gIHJ1bnRpbWU6IFR1bm5lbFJ1bnRpbWUgPSBkZWZhdWx0UnVudGltZSxcbik6IEludGVyY2VwdG9yIHtcbiAgcmV0dXJuIGFzeW5jIChjdHg6IEludGVyY2VwdG9yQ29udGV4dCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChjdHguZW52LmRhdGFicmlja3NIb3N0KSB7XG4gICAgICBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0hPU1QgPz89IGN0eC5lbnYuZGF0YWJyaWNrc0hvc3Q7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydCA9IHJlc29sdmVQdWJsaWNQb3J0KG9wdGlvbnMucG9ydCk7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gcmVzb2x2ZVR1bm5lbFRyYW5zcG9ydChvcHRpb25zLnRyYW5zcG9ydCk7XG4gICAgY29uc3QgaW5pdGlhbGl6ZXJzOiBBcnJheTxQcm9taXNlPFR1bm5lbEF1eGlsaWFyeT4+ID0gW107XG4gICAgaWYgKHRyYW5zcG9ydCA9PT0gXCJwb3J0clwiIHx8IHRyYW5zcG9ydCA9PT0gXCJib3RoXCIpIHtcbiAgICAgIGNvbnN0IHBvcnRyQ29uZmlnID0gcmVzb2x2ZVBvcnRyQ29uZmlnKHtcbiAgICAgICAgcHVibGljRG9tYWluOiBvcHRpb25zLnB1YmxpY0RvbWFpbixcbiAgICAgICAgc3ViZG9tYWluOiBvcHRpb25zLnN1YmRvbWFpbixcbiAgICAgICAgcG9ydCxcbiAgICAgIH0pO1xuICAgICAgaWYgKHBvcnRyQ29uZmlnKSB7XG4gICAgICAgIGluaXRpYWxpemVycy5wdXNoKHJ1bnRpbWUuc3RhcnRQb3J0cihwb3J0ckNvbmZpZykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJwb3J0ciBub3QgY29uZmlndXJlZCAocmVxdWlyZXMgUE9SVFJfVE9LRU4gYW5kIFRVTk5FTF9QVUJMSUNfRE9NQUlOKVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRyYW5zcG9ydCA9PT0gXCJmcnBcIiB8fCB0cmFuc3BvcnQgPT09IFwiYm90aFwiKSB7XG4gICAgICBjb25zdCBmcnBDb25maWcgPSByZXNvbHZlRnJwQ29uZmlnKHtcbiAgICAgICAgcHVibGljRG9tYWluOiBvcHRpb25zLmZycFB1YmxpY0RvbWFpbixcbiAgICAgICAgc2VydmVyOiBvcHRpb25zLmZycFNlcnZlcixcbiAgICAgICAgc2VydmVyUG9ydDogb3B0aW9ucy5mcnBTZXJ2ZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogb3B0aW9ucy5mcnBQcm90b2NvbCxcbiAgICAgICAgdG9rZW46IG9wdGlvbnMuZnJwVG9rZW4sXG4gICAgICAgIHByb3h5TmFtZTogb3B0aW9ucy5mcnBQcm94eU5hbWUsXG4gICAgICAgIHBhdGg6IG9wdGlvbnMuZnJwUGF0aCxcbiAgICAgICAgc3RyaXBQcmVmaXg6IG9wdGlvbnMuZnJwU3RyaXBQcmVmaXgsXG4gICAgICAgIHBvcnQsXG4gICAgICB9KTtcbiAgICAgIGlmIChmcnBDb25maWcpIHtcbiAgICAgICAgaW5pdGlhbGl6ZXJzLnB1c2gocnVudGltZS5zdGFydEZycChmcnBDb25maWcsIGN0eCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJmcnAgbm90IGNvbmZpZ3VyZWQgKHJlcXVpcmVzIFRVTk5FTF9QVUJMSUNfRE9NQUlOKVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpbml0aWFsaXplcnMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgYXV4aWxpYXJpZXM6IFR1bm5lbEF1eGlsaWFyeVtdID0gW107XG4gICAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcbiAgICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgICAgc3RvcHBlZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGF1eGlsaWFyeSBvZiBhdXhpbGlhcmllcykgYXV4aWxpYXJ5LnN0b3AoKTtcbiAgICB9O1xuICAgIGN0eC5vblRlYXJkb3duKHN0b3ApO1xuICAgIGN0eC5vbkxpZmVjeWNsZShcInNodXRkb3duXCIsIHN0b3ApO1xuICAgIHZvaWQgUHJvbWlzZS5hbGxTZXR0bGVkKGluaXRpYWxpemVycykudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKFwidHVubmVsIGZhaWxlZCB0byBzdGFydFwiLCB7IGVycm9yOiByZXN1bHQucmVhc29uIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9wcGVkKSByZXN1bHQudmFsdWUuc3RvcCgpO1xuICAgICAgICBlbHNlIGF1eGlsaWFyaWVzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RvcHBlZCAmJiBhdXhpbGlhcmllcy5sZW5ndGgpIGxvZ2dlci5pbmZvKGB0dW5uZWwgYm91bmQ6ICR7dHJhbnNwb3J0fSAtPiA6JHtwb3J0fWApO1xuICAgIH0pO1xuICAgIGxvZ2dlci5pbmZvKGB0dW5uZWwgaW5pdGlhbGl6YXRpb24gc2NoZWR1bGVkOiAke3RyYW5zcG9ydH0gLT4gOiR7cG9ydH1gKTtcbiAgfTtcbn1cbiJdfQ==
|
package/lib/src/plugin.d.ts
CHANGED
|
@@ -213,7 +213,7 @@ export declare class AuthGatePlugin extends Plugin<AuthGateConfig> {
|
|
|
213
213
|
};
|
|
214
214
|
};
|
|
215
215
|
private resolved;
|
|
216
|
-
private
|
|
216
|
+
private readonly runtimes;
|
|
217
217
|
static getResourceRequirements(config: AuthGateConfig): ResourceRequirement[];
|
|
218
218
|
setup(): Promise<void>;
|
|
219
219
|
shutdown(): Promise<void>;
|