@dbx-tools/cli-tunnel 0.6.88 → 0.6.89
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/lib/src/options.js +3 -3
- package/lib/src/proxy.js +9 -9
- package/package.json +7 -7
- package/src/options.ts +2 -2
- package/src/proxy.ts +10 -10
package/lib/src/options.js
CHANGED
|
@@ -18,8 +18,8 @@ export function resolveTunnelOptions(options) {
|
|
|
18
18
|
// The Databricks Apps runtime contract: the platform routes to
|
|
19
19
|
// DATABRICKS_APP_PORT, so the WRAPPER claims it and the wrapped app is moved
|
|
20
20
|
// to a private one.
|
|
21
|
-
const publicPort = config.
|
|
22
|
-
const appPort = config.
|
|
21
|
+
const publicPort = config.port(options.port, "DATABRICKS_APP_PORT", 8000);
|
|
22
|
+
const appPort = config.port(options.appPort, "APP_PORT", 0, { prefix: "TUNNEL" });
|
|
23
23
|
const gateConfig = {
|
|
24
24
|
allow: options.allow,
|
|
25
25
|
subject: options.subject,
|
|
@@ -48,4 +48,4 @@ export function resolveTunnelOptions(options) {
|
|
|
48
48
|
}),
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUF1QixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFtQ3ZFLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUFzQjtJQUN6RCwrREFBK0Q7SUFDL0QsNkVBQTZFO0lBQzdFLG9CQUFvQjtJQUNwQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRixNQUFNLFVBQVUsR0FBbUI7UUFDakMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLDBFQUEwRTtRQUMxRSw0RUFBNEU7UUFDNUUsa0RBQWtEO1FBQ2xELGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN0RCxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2hELGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtRQUNwQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7UUFDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtLQUNuQyxDQUFDO0lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELE9BQU87UUFDTCxVQUFVO1FBQ1YsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxVQUFVO1FBQ1YsSUFBSTtRQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7WUFDOUIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixJQUFJLEVBQUUsVUFBVTtTQUNqQixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZsYWcgLT4gY29uZmlnIC0+IGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYGRieCB0dW5uZWxgLlxuICpcbiAqIFRoZSBwb2ludCBvZiB0aGlzIG1vZHVsZSBpcyB0aGF0IGl0IGRvZXMgYWxtb3N0IE5PVEhJTkcgaXRzZWxmOiBldmVyeSBnYXRlXG4gKiBzZXR0aW5nIGlzIGhhbmRlZCBzdHJhaWdodCB0byBgQGRieC10b29scy90dW5uZWxgJ3Mgb3duXG4gKiBgcGx1Z2luLnJlc29sdmVBdXRoR2F0ZUNvbmZpZ2AsIHdoaWNoIGlzIHRoZSBzYW1lIGZ1bmN0aW9uIHRoZSBpbi1wcm9jZXNzXG4gKiBwbHVnaW4gcGF0aCBjYWxscy4gVGhlIENMSSB0aGVyZWZvcmUgY2Fubm90IGRyaWZ0IGZyb20gdGhlIHBsdWdpbiBvbiBhIGRlZmF1bHQsXG4gKiBhbiBlbnYgbmFtZSwgb3IgYSBjb2VyY2lvbiBydWxlIC0gYSBmbGFnIGlzIGp1c3QgYSB2YWx1ZSBwYXNzZWQgd2hlcmUgdGhlXG4gKiBwbHVnaW4ncyBgY29uZmlnYCBvYmplY3Qgd291bGQgZ28sIGFuZCBgY29uZmlnLipgIGZpbGxzIHRoZSByZXN0IGluIGZyb20gdGhlXG4gKiBlbnZpcm9ubWVudCwgYSBgLmVudmAgZmlsZSwgb3IgYGRhdGFicmlja3MueW1sYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXV0aEdhdGVDb25maWcsIHBsdWdpbiwgcG9ydHIgfSBmcm9tIFwiQGRieC10b29scy90dW5uZWxcIjtcblxuLyoqIFJhdyBjb21tYW5kZXIgZmxhZyB2YWx1ZXMgKGV2ZXJ5IG51bWVyaWMgZmxhZyBhcnJpdmVzIGFzIGEgc3RyaW5nKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHVubmVsT3B0aW9ucyB7XG4gIHB1YmxpY0RvbWFpbj86IHN0cmluZztcbiAgc3ViZG9tYWluPzogc3RyaW5nO1xuICBwb3J0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICBhcHBQb3J0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICBhbGxvdz86IHN0cmluZ1tdO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICBicmFuZE5hbWU/OiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHNlc3Npb25UdGw/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNvZGVUdGw/OiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlc3Npb25DdXRvZmY/OiBzdHJpbmc7XG4gIGZvcndhcmRIZWFkZXJzPzogc3RyaW5nW107XG4gIGluc2VjdXJlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFR1bm5lbE9wdGlvbnMge1xuICAvKiogVGhlIHBvcnQgdGhlIHdyYXBwZXIgaXRzZWxmIGxpc3RlbnMgb24gLSB3aGF0IHBvcnRyIGZvcndhcmRzIHRvLiAqL1xuICBwdWJsaWNQb3J0OiBudW1iZXI7XG4gIC8qKiBUaGUgcHJpdmF0ZSBwb3J0IHRoZSB3cmFwcGVkIGFwcCBpcyB0b2xkIHRvIGJpbmQuIFVuc2V0IG1lYW5zIFwicGljayBvbmVcIi4gKi9cbiAgYXBwUG9ydD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBnYXRlIGNvbmZpZyBhcyB0aGUgYGF1dGhHYXRlYCBQTFVHSU4gdGFrZXMgaXQgLSBmbGFncyBvbmx5LCBub3RoaW5nXG4gICAqIHJlc29sdmVkLiBQYXNzZWQgc3RyYWlnaHQgdG8gdGhlIHBsdWdpbiBzbyBpdCBhcHBsaWVzIGl0cyBvd24gZmFsbGJhY2tzXG4gICAqIGV4YWN0bHkgb25jZSwgaW4gdGhlIG9uZSBwbGFjZSB0aGF0IG93bnMgdGhlbS5cbiAgICovXG4gIGdhdGVDb25maWc6IEF1dGhHYXRlQ29uZmlnO1xuICAvKiogVGhlIHNhbWUgY29uZmlnIGFmdGVyIHRoZSBwbHVnaW4ncyByZXNvbHV0aW9uLCBmb3IgYHN0YXR1c2AgYW5kIGZvciByb3V0aW5nLiAqL1xuICBnYXRlOiBwbHVnaW4uUmVzb2x2ZWRBdXRoR2F0ZUNvbmZpZztcbiAgcG9ydHI6IFJldHVyblR5cGU8dHlwZW9mIHBvcnRyLnJlc29sdmVQb3J0ckNvbmZpZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHVubmVsT3B0aW9ucyhvcHRpb25zOiBUdW5uZWxPcHRpb25zKTogUmVzb2x2ZWRUdW5uZWxPcHRpb25zIHtcbiAgLy8gVGhlIERhdGFicmlja3MgQXBwcyBydW50aW1lIGNvbnRyYWN0OiB0aGUgcGxhdGZvcm0gcm91dGVzIHRvXG4gIC8vIERBVEFCUklDS1NfQVBQX1BPUlQsIHNvIHRoZSBXUkFQUEVSIGNsYWltcyBpdCBhbmQgdGhlIHdyYXBwZWQgYXBwIGlzIG1vdmVkXG4gIC8vIHRvIGEgcHJpdmF0ZSBvbmUuXG4gIGNvbnN0IHB1YmxpY1BvcnQgPSBjb25maWcucG9ydChvcHRpb25zLnBvcnQsIFwiREFUQUJSSUNLU19BUFBfUE9SVFwiLCA4MDAwKTtcbiAgY29uc3QgYXBwUG9ydCA9IGNvbmZpZy5wb3J0KG9wdGlvbnMuYXBwUG9ydCwgXCJBUFBfUE9SVFwiLCAwLCB7IHByZWZpeDogXCJUVU5ORUxcIiB9KTtcbiAgY29uc3QgZ2F0ZUNvbmZpZzogQXV0aEdhdGVDb25maWcgPSB7XG4gICAgYWxsb3c6IG9wdGlvbnMuYWxsb3csXG4gICAgc3ViamVjdDogb3B0aW9ucy5zdWJqZWN0LFxuICAgIGJyYW5kTmFtZTogb3B0aW9ucy5icmFuZE5hbWUsXG4gICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgIC8vIENvZXJjZWQsIG5vdCByZXNvbHZlZDogdGhlIHBsdWdpbiBvd25zIHRoZSBlbnYgbmFtZSBhbmQgdGhlIGRlZmF1bHQgZm9yXG4gICAgLy8gdGhlc2UsIHNvIHRoZSBmbGFnIGlzIHBhc3NlZCB0aHJvdWdoIGFzIHRoZSBgY29uZmlnYCB2YWx1ZSBpdCBleHBlY3RzIGFuZFxuICAgIC8vIG9ubHkgbmVlZHMgYSBzdHJpbmcgLT4gbnVtYmVyIG51ZGdlIG9uIHRoZSB3YXkuXG4gICAgc2Vzc2lvblR0bFNlY29uZHM6IG9iamVjdC50b051bWJlcihvcHRpb25zLnNlc3Npb25UdGwpLFxuICAgIGNvZGVUdGxTZWNvbmRzOiBvYmplY3QudG9OdW1iZXIob3B0aW9ucy5jb2RlVHRsKSxcbiAgICBzZXNzaW9uQ3V0b2ZmOiBvcHRpb25zLnNlc3Npb25DdXRvZmYsXG4gICAgZm9yd2FyZEhlYWRlcnM6IG9wdGlvbnMuZm9yd2FyZEhlYWRlcnMsXG4gICAgaW5zZWN1cmU6IG9wdGlvbnMuaW5zZWN1cmUsXG4gICAgcHVibGljRG9tYWluOiBvcHRpb25zLnB1YmxpY0RvbWFpbixcbiAgfTtcbiAgY29uc3QgZ2F0ZSA9IHBsdWdpbi5yZXNvbHZlQXV0aEdhdGVDb25maWcoZ2F0ZUNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgcHVibGljUG9ydCxcbiAgICAuLi4oYXBwUG9ydCA+IDAgPyB7IGFwcFBvcnQgfSA6IHt9KSxcbiAgICBnYXRlQ29uZmlnLFxuICAgIGdhdGUsXG4gICAgcG9ydHI6IHBvcnRyLnJlc29sdmVQb3J0ckNvbmZpZyh7XG4gICAgICBwdWJsaWNEb21haW46IGdhdGUucHVibGljRG9tYWluLFxuICAgICAgc3ViZG9tYWluOiBvcHRpb25zLnN1YmRvbWFpbixcbiAgICAgIHBvcnQ6IHB1YmxpY1BvcnQsXG4gICAgfSksXG4gIH07XG59XG4iXX0=
|
package/lib/src/proxy.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
import { createServer } from "node:http";
|
|
20
20
|
import { http, json, log } from "@dbx-tools/shared-core";
|
|
21
21
|
import { authRequestSchema, authVerifySchema, SESSION_COOKIE_NAME } from "@dbx-tools/shared-email";
|
|
22
|
-
import { gate as
|
|
22
|
+
import { gate as tunnelGate, headers as tunnelHeaders } from "@dbx-tools/tunnel";
|
|
23
23
|
import ProxyModule from "http-proxy-3";
|
|
24
24
|
const logger = log.logger("tunnel:proxy");
|
|
25
25
|
/** Read a request body as text; a transport error yields whatever arrived. */
|
|
@@ -47,8 +47,8 @@ function sessionCookieValue(request) {
|
|
|
47
47
|
* success (anti-enumeration) and `verify` sets the session cookie on success.
|
|
48
48
|
*/
|
|
49
49
|
async function handleAuthRoute(request, response, path, gate) {
|
|
50
|
-
const prefix =
|
|
51
|
-
const ip =
|
|
50
|
+
const prefix = tunnelGate.AUTH_PREFIX;
|
|
51
|
+
const ip = tunnelGate.clientIp(request);
|
|
52
52
|
if (path === `${prefix}/status`) {
|
|
53
53
|
sendJson(response, 200, await gate.status(sessionCookieValue(request)));
|
|
54
54
|
return true;
|
|
@@ -66,13 +66,13 @@ async function handleAuthRoute(request, response, path, gate) {
|
|
|
66
66
|
}
|
|
67
67
|
const result = await gate.verify(parsed.data.email, parsed.data.code, ip);
|
|
68
68
|
const cookie = result.ok && result.token
|
|
69
|
-
?
|
|
69
|
+
? tunnelGate.sessionSetCookie(result.token, gate.sessionTtlSeconds)
|
|
70
70
|
: undefined;
|
|
71
71
|
sendJson(response, 200, { ok: result.ok, ...(result.retryAfter ? { retryAfter: result.retryAfter } : {}) }, cookie);
|
|
72
72
|
return true;
|
|
73
73
|
}
|
|
74
74
|
if (path === `${prefix}/logout` && request.method === "POST") {
|
|
75
|
-
sendJson(response, 200, { ok: true },
|
|
75
|
+
sendJson(response, 200, { ok: true }, tunnelGate.LOGOUT_SET_COOKIE);
|
|
76
76
|
return true;
|
|
77
77
|
}
|
|
78
78
|
return false;
|
|
@@ -92,10 +92,10 @@ export function startProxy(options) {
|
|
|
92
92
|
ws: true,
|
|
93
93
|
xfwd: true,
|
|
94
94
|
});
|
|
95
|
-
const headerPolicy =
|
|
95
|
+
const headerPolicy = tunnelHeaders.toHeaderPolicy(options.forwardHeaders);
|
|
96
96
|
const gate = options.gate;
|
|
97
97
|
const decide = (request) => gate
|
|
98
|
-
?
|
|
98
|
+
? tunnelGate.gateRequest(request, {
|
|
99
99
|
gate,
|
|
100
100
|
publicDomain: (request.headers.host ?? "").split(":")[0] || "localhost",
|
|
101
101
|
headerPolicy,
|
|
@@ -107,7 +107,7 @@ export function startProxy(options) {
|
|
|
107
107
|
if (gate && (await handleAuthRoute(request, response, path, gate)))
|
|
108
108
|
return;
|
|
109
109
|
if ((await decide(request)) === "deny") {
|
|
110
|
-
sendJson(response, 401,
|
|
110
|
+
sendJson(response, 401, tunnelGate.UNAUTHORIZED_BODY);
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
113
|
proxy.web(request, response);
|
|
@@ -139,4 +139,4 @@ export function startProxy(options) {
|
|
|
139
139
|
});
|
|
140
140
|
});
|
|
141
141
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBNkMsTUFBTSxXQUFXLENBQUM7QUFFcEYsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRyxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFFdkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQWExQyw4RUFBOEU7QUFDOUUsU0FBUyxRQUFRLENBQUMsT0FBd0I7SUFDeEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUNmLFFBQXdCLEVBQ3hC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QUE0RTtJQUM1RSxtQ0FBbUM7SUFDbkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUF3QixFQUFFLE1BQWMsRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUM5RSxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDakIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixJQUFJLE1BQU0sS0FBSyxNQUFNO2dCQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7Z0JBQ25DLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM3RixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgcmV2ZXJzZSBwcm94eSB0aGF0IG1ha2VzIHRoZSB3cmFwcGVyIHBhdGggcG9zc2libGUuXG4gKlxuICogVGhlIHdyYXBwZXIgY2xhaW1zIHRoZSBQVUJMSUMgcG9ydCBhbmQgdGhlIHdyYXBwZWQgYXBwIHJ1bnMgYXMgYSBjaGlsZCBwcm9jZXNzXG4gKiBvbiBhIHByaXZhdGUgbG9vcGJhY2sgcG9ydCwgc28gLSB1bmxpa2UgdGhlIGluLXByb2Nlc3MgcGx1Z2luIC0gdGhlcmUgaXMgbm9cbiAqIG1pZGRsZXdhcmUgY2hhaW4gdG8gaW5zZXJ0IHRoZSBnYXRlIGludG8uIFRoaXMgcHJveHkgaXMgdGhhdCBpbnNlcnRpb24gcG9pbnQ6IGl0XG4gKiBhbnN3ZXJzIHRoZSBsb2dpbiByb3V0ZXMgaXRzZWxmLCBhcHBsaWVzIHRoZSBnYXRlIHRvIGV2ZXJ5dGhpbmcgZWxzZSwgYW5kXG4gKiBmb3J3YXJkcyB3aGF0IHN1cnZpdmVzIHRvIHRoZSBjaGlsZC5cbiAqXG4gKiBUaGUgZ2F0aW5nIERFQ0lTSU9OIGlzIG5vdCByZWltcGxlbWVudGVkIGhlcmUuIGBAZGJ4LXRvb2xzL3R1bm5lbGAnc1xuICogYGdhdGUuZ2F0ZVJlcXVlc3RgIG1ha2VzIGl0IC0gdGhlIHNhbWUgZnVuY3Rpb24gdGhlIEV4cHJlc3MgbWlkZGxld2FyZSBjYWxscyAtXG4gKiBhbmQgdGhpcyBtb2R1bGUgb25seSBkaWZmZXJzIGluIGhvdyB0aGUgb3V0Y29tZSBpcyB3cml0dGVuOiBhIHByb3hpZWQgcmVxdWVzdFxuICogaW5zdGVhZCBvZiBgbmV4dCgpYCwgYSBgd3JpdGVIZWFkYCBpbnN0ZWFkIG9mIGByZXMuanNvbmAuIFRoYXQgaXMgZGVsaWJlcmF0ZTpcbiAqIHR3byBpbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMgb2YgXCJ3aGljaCByZXF1ZXN0cyBhcmUgZ2F0ZWQgYW5kIHdoaWNoIGhlYWRlcnNcbiAqIGFyZSBzdHJpcHBlZFwiIGlzIHRoZSBvbmUgd2F5IHRoaXMgcGFja2FnZSBjb3VsZCBiZWNvbWUgYSBzZWN1cml0eSBidWcuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVNlcnZlciwgdHlwZSBJbmNvbWluZ01lc3NhZ2UsIHR5cGUgU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwibm9kZTpodHRwXCI7XG5pbXBvcnQgdHlwZSB7IFNvY2tldCB9IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHsgaHR0cCwganNvbiwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGF1dGhSZXF1ZXN0U2NoZW1hLCBhdXRoVmVyaWZ5U2NoZW1hLCBTRVNTSU9OX0NPT0tJRV9OQU1FIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgeyBnYXRlIGFzIGdhdGVNb2R1bGUsIGhlYWRlcnMgYXMgaGVhZGVyc01vZHVsZSwgdHlwZSBBdXRoR2F0ZUFwaSB9IGZyb20gXCJAZGJ4LXRvb2xzL3R1bm5lbFwiO1xuaW1wb3J0IFByb3h5TW9kdWxlIGZyb20gXCJodHRwLXByb3h5LTNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbDpwcm94eVwiKTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm94eU9wdGlvbnMge1xuICAvKiogVGhlIHBvcnQgdGhpcyBwcm94eSBsaXN0ZW5zIG9uIC0gdGhlIHBvcnQgcG9ydHIgYW5kIHRoZSBwbGF0Zm9ybSByb3V0ZSB0by4gKi9cbiAgcHVibGljUG9ydDogbnVtYmVyO1xuICAvKiogVGhlIHByaXZhdGUgbG9vcGJhY2sgcG9ydCB0aGUgd3JhcHBlZCBhcHAgbGlzdGVucyBvbi4gKi9cbiAgYXBwUG9ydDogbnVtYmVyO1xuICAvKiogVGhlIGdhdGUgaGFuZGxlcnMuIE9taXR0ZWQgKGFuIGAtLWluc2VjdXJlYCBydW4pIGZvcndhcmRzIGV2ZXJ5dGhpbmcuICovXG4gIGdhdGU/OiBBdXRoR2F0ZUFwaTtcbiAgLyoqIEV4dHJhIGB4LWAgaGVhZGVycyB0dW5uZWwgdHJhZmZpYyBtYXkgZm9yd2FyZC4gKi9cbiAgZm9yd2FyZEhlYWRlcnM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIFJlYWQgYSByZXF1ZXN0IGJvZHkgYXMgdGV4dDsgYSB0cmFuc3BvcnQgZXJyb3IgeWllbGRzIHdoYXRldmVyIGFycml2ZWQuICovXG5mdW5jdGlvbiByZWFkQm9keShyZXF1ZXN0OiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBsZXQgYm9keSA9IFwiXCI7XG4gICAgcmVxdWVzdC5vbihcImRhdGFcIiwgKGNodW5rKSA9PiAoYm9keSArPSBjaHVuaykpO1xuICAgIHJlcXVlc3Qub24oXCJlbmRcIiwgKCkgPT4gcmVzb2x2ZShib2R5KSk7XG4gICAgcmVxdWVzdC5vbihcImVycm9yXCIsICgpID0+IHJlc29sdmUoYm9keSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2VuZEpzb24oXG4gIHJlc3BvbnNlOiBTZXJ2ZXJSZXNwb25zZSxcbiAgc3RhdHVzOiBudW1iZXIsXG4gIGJvZHk6IHVua25vd24sXG4gIHNldENvb2tpZT86IHN0cmluZyxcbik6IHZvaWQge1xuICByZXNwb25zZS53cml0ZUhlYWQoc3RhdHVzLCB7XG4gICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgLi4uKHNldENvb2tpZSA/IHsgXCJzZXQtY29va2llXCI6IHNldENvb2tpZSB9IDoge30pLFxuICB9KTtcbiAgcmVzcG9uc2UuZW5kKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gc2Vzc2lvbkNvb2tpZVZhbHVlKHJlcXVlc3Q6IEluY29taW5nTWVzc2FnZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBodHRwLnBhcnNlQ29va2llcyhyZXF1ZXN0LmhlYWRlcnMuY29va2llID8/IG51bGwpW1NFU1NJT05fQ09PS0lFX05BTUVdO1xufVxuXG4vKipcbiAqIEFuc3dlciBvbmUgb2YgdGhlIGZvdXIgbG9naW4gcm91dGVzLCBvciByZXR1cm4gYGZhbHNlYCB3aGVuIHRoZSByZXF1ZXN0IGlzIG5vdFxuICogb25lIG9mIHRoZW0uIE1pcnJvcnMgdGhlIHBsdWdpbidzIHJvdXRlIGhhbmRsZXJzOiBgcmVxdWVzdGAgYWx3YXlzIHJlcG9ydHNcbiAqIHN1Y2Nlc3MgKGFudGktZW51bWVyYXRpb24pIGFuZCBgdmVyaWZ5YCBzZXRzIHRoZSBzZXNzaW9uIGNvb2tpZSBvbiBzdWNjZXNzLlxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBdXRoUm91dGUoXG4gIHJlcXVlc3Q6IEluY29taW5nTWVzc2FnZSxcbiAgcmVzcG9uc2U6IFNlcnZlclJlc3BvbnNlLFxuICBwYXRoOiBzdHJpbmcsXG4gIGdhdGU6IEF1dGhHYXRlQXBpLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHByZWZpeCA9IGdhdGVNb2R1bGUuQVVUSF9QUkVGSVg7XG4gIGNvbnN0IGlwID0gZ2F0ZU1vZHVsZS5jbGllbnRJcChyZXF1ZXN0KTtcblxuICBpZiAocGF0aCA9PT0gYCR7cHJlZml4fS9zdGF0dXNgKSB7XG4gICAgc2VuZEpzb24ocmVzcG9uc2UsIDIwMCwgYXdhaXQgZ2F0ZS5zdGF0dXMoc2Vzc2lvbkNvb2tpZVZhbHVlKHJlcXVlc3QpKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHBhdGggPT09IGAke3ByZWZpeH0vcmVxdWVzdGAgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXV0aFJlcXVlc3RTY2hlbWEuc2FmZVBhcnNlKGpzb24ucGFyc2VSZWNvcmQoYXdhaXQgcmVhZEJvZHkocmVxdWVzdCkpKTtcbiAgICBzZW5kSnNvbihcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgMjAwLFxuICAgICAgcGFyc2VkLnN1Y2Nlc3MgPyBhd2FpdCBnYXRlLnJlcXVlc3QocGFyc2VkLmRhdGEuZW1haWwsIGlwKSA6IHsgb2s6IHRydWUgfSxcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwYXRoID09PSBgJHtwcmVmaXh9L3ZlcmlmeWAgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXV0aFZlcmlmeVNjaGVtYS5zYWZlUGFyc2UoanNvbi5wYXJzZVJlY29yZChhd2FpdCByZWFkQm9keShyZXF1ZXN0KSkpO1xuICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgIHNlbmRKc29uKHJlc3BvbnNlLCAyMDAsIHsgb2s6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdhdGUudmVyaWZ5KHBhcnNlZC5kYXRhLmVtYWlsLCBwYXJzZWQuZGF0YS5jb2RlLCBpcCk7XG4gICAgY29uc3QgY29va2llID1cbiAgICAgIHJlc3VsdC5vayAmJiByZXN1bHQudG9rZW5cbiAgICAgICAgPyBnYXRlTW9kdWxlLnNlc3Npb25TZXRDb29raWUocmVzdWx0LnRva2VuLCBnYXRlLnNlc3Npb25UdGxTZWNvbmRzKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBzZW5kSnNvbihcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgMjAwLFxuICAgICAgeyBvazogcmVzdWx0Lm9rLCAuLi4ocmVzdWx0LnJldHJ5QWZ0ZXIgPyB7IHJldHJ5QWZ0ZXI6IHJlc3VsdC5yZXRyeUFmdGVyIH0gOiB7fSkgfSxcbiAgICAgIGNvb2tpZSxcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwYXRoID09PSBgJHtwcmVmaXh9L2xvZ291dGAgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgc2VuZEpzb24ocmVzcG9uc2UsIDIwMCwgeyBvazogdHJ1ZSB9LCBnYXRlTW9kdWxlLkxPR09VVF9TRVRfQ09PS0lFKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHByb3h5IGFuZCByZXNvbHZlIG9uY2UgaXQgaXMgbGlzdGVuaW5nLlxuICpcbiAqIGBwdWJsaWNEb21haW5gIGlzIGludGVudGlvbmFsbHkgTk9UIHBhc3NlZCB0byBgZ2F0ZVJlcXVlc3RgOiBvbiB0aGlzIHBhdGggZXZlcnlcbiAqIHJlcXVlc3QgYXJyaXZlZCBvbiB0aGUgcHVibGljIHBvcnQsIHNvIGl0IElTIHR1bm5lbCB0cmFmZmljIGJ5IGNvbnN0cnVjdGlvbiAtXG4gKiB3aGVyZWFzIHRoZSBpbi1wcm9jZXNzIGdhdGUgc2hhcmVzIGEgcG9ydCB3aXRoIHRoZSBwbGF0Zm9ybSBmcm9udCBkb29yIGFuZCBoYXNcbiAqIHRvIHRlbGwgdGhlbSBhcGFydCBieSBgSG9zdGAuIFBhc3NpbmcgdGhlIHJlcXVlc3QncyBvd24gaG9zdCBrZWVwcyB0aGUgc2hhcmVkXG4gKiBkZWNpc2lvbiBmdW5jdGlvbidzIGNvbnRyYWN0IHNhdGlzZmllZCB3aXRob3V0IHdlYWtlbmluZyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UHJveHkob3B0aW9uczogUHJveHlPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3h5ID0gUHJveHlNb2R1bGUuY3JlYXRlUHJveHlTZXJ2ZXIoe1xuICAgIHRhcmdldDogYGh0dHA6Ly8xMjcuMC4wLjE6JHtvcHRpb25zLmFwcFBvcnR9YCxcbiAgICB3czogdHJ1ZSxcbiAgICB4ZndkOiB0cnVlLFxuICB9KTtcbiAgY29uc3QgaGVhZGVyUG9saWN5ID0gaGVhZGVyc01vZHVsZS50b0hlYWRlclBvbGljeShvcHRpb25zLmZvcndhcmRIZWFkZXJzKTtcbiAgY29uc3QgZ2F0ZSA9IG9wdGlvbnMuZ2F0ZTtcblxuICBjb25zdCBkZWNpZGUgPSAocmVxdWVzdDogSW5jb21pbmdNZXNzYWdlKTogUHJvbWlzZTxnYXRlTW9kdWxlLkdhdGVBY3Rpb24+ID0+XG4gICAgZ2F0ZVxuICAgICAgPyBnYXRlTW9kdWxlLmdhdGVSZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgICBnYXRlLFxuICAgICAgICAgIHB1YmxpY0RvbWFpbjogKHJlcXVlc3QuaGVhZGVycy5ob3N0ID8/IFwiXCIpLnNwbGl0KFwiOlwiKVswXSB8fCBcImxvY2FsaG9zdFwiLFxuICAgICAgICAgIGhlYWRlclBvbGljeSxcbiAgICAgICAgfSlcbiAgICAgIDogUHJvbWlzZS5yZXNvbHZlPGdhdGVNb2R1bGUuR2F0ZUFjdGlvbj4oXCJwYXNzXCIpO1xuXG4gIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigocmVxdWVzdCwgcmVzcG9uc2UpID0+IHtcbiAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gKHJlcXVlc3QudXJsID8/IFwiL1wiKS5zcGxpdChcIj9cIilbMF0gPz8gXCIvXCI7XG4gICAgICBpZiAoZ2F0ZSAmJiAoYXdhaXQgaGFuZGxlQXV0aFJvdXRlKHJlcXVlc3QsIHJlc3BvbnNlLCBwYXRoLCBnYXRlKSkpIHJldHVybjtcbiAgICAgIGlmICgoYXdhaXQgZGVjaWRlKHJlcXVlc3QpKSA9PT0gXCJkZW55XCIpIHtcbiAgICAgICAgc2VuZEpzb24ocmVzcG9uc2UsIDQwMSwgZ2F0ZU1vZHVsZS5VTkFVVEhPUklaRURfQk9EWSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByb3h5LndlYihyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfSkoKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcInByb3h5IHJlcXVlc3QgZmFpbGVkXCIsIHsgZXJyb3IgfSk7XG4gICAgICBpZiAoIXJlc3BvbnNlLmhlYWRlcnNTZW50KSBzZW5kSnNvbihyZXNwb25zZSwgNTAyLCB7IGVycm9yOiBcImJhZCBnYXRld2F5XCIgfSk7XG4gICAgICBlbHNlIHJlc3BvbnNlLmVuZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBBIHdlYnNvY2tldCB1cGdyYWRlIGNhbm5vdCBiZSBhbnN3ZXJlZCB3aXRoIGEgNDAxIGJvZHksIHNvIGEgZGVuaWVkIG9uZSBpc1xuICAvLyBkZXN0cm95ZWQgLSB0aGUgY2xpZW50IHNlZXMgdGhlIGhhbmRzaGFrZSBmYWlsLCB3aGljaCBpcyB3aGF0IGEgYnJvd3NlcidzXG4gIC8vIFdlYlNvY2tldCBlcnJvciBoYW5kbGVyIGV4cGVjdHMuXG4gIHNlcnZlci5vbihcInVwZ3JhZGVcIiwgKHJlcXVlc3Q6IEluY29taW5nTWVzc2FnZSwgc29ja2V0OiBTb2NrZXQsIGhlYWQ6IEJ1ZmZlcikgPT4ge1xuICAgIHZvaWQgZGVjaWRlKHJlcXVlc3QpXG4gICAgICAudGhlbigoYWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwiZGVueVwiKSBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICBlbHNlIHByb3h5LndzKHJlcXVlc3QsIHNvY2tldCwgaGVhZCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHNvY2tldC5kZXN0cm95KCkpO1xuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXJ2ZXIubGlzdGVuKG9wdGlvbnMucHVibGljUG9ydCwgXCIwLjAuMC4wXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwicHJveHkgbGlzdGVuaW5nXCIsIHsgcHVibGljUG9ydDogb3B0aW9ucy5wdWJsaWNQb3J0LCBhcHBQb3J0OiBvcHRpb25zLmFwcFBvcnQgfSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBNkMsTUFBTSxXQUFXLENBQUM7QUFFcEYsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRyxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFFdkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQWExQyw4RUFBOEU7QUFDOUUsU0FBUyxRQUFRLENBQUMsT0FBd0I7SUFDeEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUNmLFFBQXdCLEVBQ3hC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QUE0RTtJQUM1RSxtQ0FBbUM7SUFDbkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUF3QixFQUFFLE1BQWMsRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUM5RSxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDakIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixJQUFJLE1BQU0sS0FBSyxNQUFNO2dCQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7Z0JBQ25DLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM3RixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgcmV2ZXJzZSBwcm94eSB0aGF0IG1ha2VzIHRoZSB3cmFwcGVyIHBhdGggcG9zc2libGUuXG4gKlxuICogVGhlIHdyYXBwZXIgY2xhaW1zIHRoZSBQVUJMSUMgcG9ydCBhbmQgdGhlIHdyYXBwZWQgYXBwIHJ1bnMgYXMgYSBjaGlsZCBwcm9jZXNzXG4gKiBvbiBhIHByaXZhdGUgbG9vcGJhY2sgcG9ydCwgc28gLSB1bmxpa2UgdGhlIGluLXByb2Nlc3MgcGx1Z2luIC0gdGhlcmUgaXMgbm9cbiAqIG1pZGRsZXdhcmUgY2hhaW4gdG8gaW5zZXJ0IHRoZSBnYXRlIGludG8uIFRoaXMgcHJveHkgaXMgdGhhdCBpbnNlcnRpb24gcG9pbnQ6IGl0XG4gKiBhbnN3ZXJzIHRoZSBsb2dpbiByb3V0ZXMgaXRzZWxmLCBhcHBsaWVzIHRoZSBnYXRlIHRvIGV2ZXJ5dGhpbmcgZWxzZSwgYW5kXG4gKiBmb3J3YXJkcyB3aGF0IHN1cnZpdmVzIHRvIHRoZSBjaGlsZC5cbiAqXG4gKiBUaGUgZ2F0aW5nIERFQ0lTSU9OIGlzIG5vdCByZWltcGxlbWVudGVkIGhlcmUuIGBAZGJ4LXRvb2xzL3R1bm5lbGAnc1xuICogYGdhdGUuZ2F0ZVJlcXVlc3RgIG1ha2VzIGl0IC0gdGhlIHNhbWUgZnVuY3Rpb24gdGhlIEV4cHJlc3MgbWlkZGxld2FyZSBjYWxscyAtXG4gKiBhbmQgdGhpcyBtb2R1bGUgb25seSBkaWZmZXJzIGluIGhvdyB0aGUgb3V0Y29tZSBpcyB3cml0dGVuOiBhIHByb3hpZWQgcmVxdWVzdFxuICogaW5zdGVhZCBvZiBgbmV4dCgpYCwgYSBgd3JpdGVIZWFkYCBpbnN0ZWFkIG9mIGByZXMuanNvbmAuIFRoYXQgaXMgZGVsaWJlcmF0ZTpcbiAqIHR3byBpbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMgb2YgXCJ3aGljaCByZXF1ZXN0cyBhcmUgZ2F0ZWQgYW5kIHdoaWNoIGhlYWRlcnNcbiAqIGFyZSBzdHJpcHBlZFwiIGlzIHRoZSBvbmUgd2F5IHRoaXMgcGFja2FnZSBjb3VsZCBiZWNvbWUgYSBzZWN1cml0eSBidWcuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVNlcnZlciwgdHlwZSBJbmNvbWluZ01lc3NhZ2UsIHR5cGUgU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwibm9kZTpodHRwXCI7XG5pbXBvcnQgdHlwZSB7IFNvY2tldCB9IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHsgaHR0cCwganNvbiwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGF1dGhSZXF1ZXN0U2NoZW1hLCBhdXRoVmVyaWZ5U2NoZW1hLCBTRVNTSU9OX0NPT0tJRV9OQU1FIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgeyBnYXRlIGFzIHR1bm5lbEdhdGUsIGhlYWRlcnMgYXMgdHVubmVsSGVhZGVycywgdHlwZSBBdXRoR2F0ZUFwaSB9IGZyb20gXCJAZGJ4LXRvb2xzL3R1bm5lbFwiO1xuaW1wb3J0IFByb3h5TW9kdWxlIGZyb20gXCJodHRwLXByb3h5LTNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbDpwcm94eVwiKTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm94eU9wdGlvbnMge1xuICAvKiogVGhlIHBvcnQgdGhpcyBwcm94eSBsaXN0ZW5zIG9uIC0gdGhlIHBvcnQgcG9ydHIgYW5kIHRoZSBwbGF0Zm9ybSByb3V0ZSB0by4gKi9cbiAgcHVibGljUG9ydDogbnVtYmVyO1xuICAvKiogVGhlIHByaXZhdGUgbG9vcGJhY2sgcG9ydCB0aGUgd3JhcHBlZCBhcHAgbGlzdGVucyBvbi4gKi9cbiAgYXBwUG9ydDogbnVtYmVyO1xuICAvKiogVGhlIGdhdGUgaGFuZGxlcnMuIE9taXR0ZWQgKGFuIGAtLWluc2VjdXJlYCBydW4pIGZvcndhcmRzIGV2ZXJ5dGhpbmcuICovXG4gIGdhdGU/OiBBdXRoR2F0ZUFwaTtcbiAgLyoqIEV4dHJhIGB4LWAgaGVhZGVycyB0dW5uZWwgdHJhZmZpYyBtYXkgZm9yd2FyZC4gKi9cbiAgZm9yd2FyZEhlYWRlcnM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIFJlYWQgYSByZXF1ZXN0IGJvZHkgYXMgdGV4dDsgYSB0cmFuc3BvcnQgZXJyb3IgeWllbGRzIHdoYXRldmVyIGFycml2ZWQuICovXG5mdW5jdGlvbiByZWFkQm9keShyZXF1ZXN0OiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBsZXQgYm9keSA9IFwiXCI7XG4gICAgcmVxdWVzdC5vbihcImRhdGFcIiwgKGNodW5rKSA9PiAoYm9keSArPSBjaHVuaykpO1xuICAgIHJlcXVlc3Qub24oXCJlbmRcIiwgKCkgPT4gcmVzb2x2ZShib2R5KSk7XG4gICAgcmVxdWVzdC5vbihcImVycm9yXCIsICgpID0+IHJlc29sdmUoYm9keSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2VuZEpzb24oXG4gIHJlc3BvbnNlOiBTZXJ2ZXJSZXNwb25zZSxcbiAgc3RhdHVzOiBudW1iZXIsXG4gIGJvZHk6IHVua25vd24sXG4gIHNldENvb2tpZT86IHN0cmluZyxcbik6IHZvaWQge1xuICByZXNwb25zZS53cml0ZUhlYWQoc3RhdHVzLCB7XG4gICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgLi4uKHNldENvb2tpZSA/IHsgXCJzZXQtY29va2llXCI6IHNldENvb2tpZSB9IDoge30pLFxuICB9KTtcbiAgcmVzcG9uc2UuZW5kKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gc2Vzc2lvbkNvb2tpZVZhbHVlKHJlcXVlc3Q6IEluY29taW5nTWVzc2FnZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBodHRwLnBhcnNlQ29va2llcyhyZXF1ZXN0LmhlYWRlcnMuY29va2llID8/IG51bGwpW1NFU1NJT05fQ09PS0lFX05BTUVdO1xufVxuXG4vKipcbiAqIEFuc3dlciBvbmUgb2YgdGhlIGZvdXIgbG9naW4gcm91dGVzLCBvciByZXR1cm4gYGZhbHNlYCB3aGVuIHRoZSByZXF1ZXN0IGlzIG5vdFxuICogb25lIG9mIHRoZW0uIE1pcnJvcnMgdGhlIHBsdWdpbidzIHJvdXRlIGhhbmRsZXJzOiBgcmVxdWVzdGAgYWx3YXlzIHJlcG9ydHNcbiAqIHN1Y2Nlc3MgKGFudGktZW51bWVyYXRpb24pIGFuZCBgdmVyaWZ5YCBzZXRzIHRoZSBzZXNzaW9uIGNvb2tpZSBvbiBzdWNjZXNzLlxuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBdXRoUm91dGUoXG4gIHJlcXVlc3Q6IEluY29taW5nTWVzc2FnZSxcbiAgcmVzcG9uc2U6IFNlcnZlclJlc3BvbnNlLFxuICBwYXRoOiBzdHJpbmcsXG4gIGdhdGU6IEF1dGhHYXRlQXBpLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHByZWZpeCA9IHR1bm5lbEdhdGUuQVVUSF9QUkVGSVg7XG4gIGNvbnN0IGlwID0gdHVubmVsR2F0ZS5jbGllbnRJcChyZXF1ZXN0KTtcblxuICBpZiAocGF0aCA9PT0gYCR7cHJlZml4fS9zdGF0dXNgKSB7XG4gICAgc2VuZEpzb24ocmVzcG9uc2UsIDIwMCwgYXdhaXQgZ2F0ZS5zdGF0dXMoc2Vzc2lvbkNvb2tpZVZhbHVlKHJlcXVlc3QpKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHBhdGggPT09IGAke3ByZWZpeH0vcmVxdWVzdGAgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXV0aFJlcXVlc3RTY2hlbWEuc2FmZVBhcnNlKGpzb24ucGFyc2VSZWNvcmQoYXdhaXQgcmVhZEJvZHkocmVxdWVzdCkpKTtcbiAgICBzZW5kSnNvbihcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgMjAwLFxuICAgICAgcGFyc2VkLnN1Y2Nlc3MgPyBhd2FpdCBnYXRlLnJlcXVlc3QocGFyc2VkLmRhdGEuZW1haWwsIGlwKSA6IHsgb2s6IHRydWUgfSxcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwYXRoID09PSBgJHtwcmVmaXh9L3ZlcmlmeWAgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gYXV0aFZlcmlmeVNjaGVtYS5zYWZlUGFyc2UoanNvbi5wYXJzZVJlY29yZChhd2FpdCByZWFkQm9keShyZXF1ZXN0KSkpO1xuICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgIHNlbmRKc29uKHJlc3BvbnNlLCAyMDAsIHsgb2s6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdhdGUudmVyaWZ5KHBhcnNlZC5kYXRhLmVtYWlsLCBwYXJzZWQuZGF0YS5jb2RlLCBpcCk7XG4gICAgY29uc3QgY29va2llID1cbiAgICAgIHJlc3VsdC5vayAmJiByZXN1bHQudG9rZW5cbiAgICAgICAgPyB0dW5uZWxHYXRlLnNlc3Npb25TZXRDb29raWUocmVzdWx0LnRva2VuLCBnYXRlLnNlc3Npb25UdGxTZWNvbmRzKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBzZW5kSnNvbihcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgMjAwLFxuICAgICAgeyBvazogcmVzdWx0Lm9rLCAuLi4ocmVzdWx0LnJldHJ5QWZ0ZXIgPyB7IHJldHJ5QWZ0ZXI6IHJlc3VsdC5yZXRyeUFmdGVyIH0gOiB7fSkgfSxcbiAgICAgIGNvb2tpZSxcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwYXRoID09PSBgJHtwcmVmaXh9L2xvZ291dGAgJiYgcmVxdWVzdC5tZXRob2QgPT09IFwiUE9TVFwiKSB7XG4gICAgc2VuZEpzb24ocmVzcG9uc2UsIDIwMCwgeyBvazogdHJ1ZSB9LCB0dW5uZWxHYXRlLkxPR09VVF9TRVRfQ09PS0lFKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHByb3h5IGFuZCByZXNvbHZlIG9uY2UgaXQgaXMgbGlzdGVuaW5nLlxuICpcbiAqIGBwdWJsaWNEb21haW5gIGlzIGludGVudGlvbmFsbHkgTk9UIHBhc3NlZCB0byBgZ2F0ZVJlcXVlc3RgOiBvbiB0aGlzIHBhdGggZXZlcnlcbiAqIHJlcXVlc3QgYXJyaXZlZCBvbiB0aGUgcHVibGljIHBvcnQsIHNvIGl0IElTIHR1bm5lbCB0cmFmZmljIGJ5IGNvbnN0cnVjdGlvbiAtXG4gKiB3aGVyZWFzIHRoZSBpbi1wcm9jZXNzIGdhdGUgc2hhcmVzIGEgcG9ydCB3aXRoIHRoZSBwbGF0Zm9ybSBmcm9udCBkb29yIGFuZCBoYXNcbiAqIHRvIHRlbGwgdGhlbSBhcGFydCBieSBgSG9zdGAuIFBhc3NpbmcgdGhlIHJlcXVlc3QncyBvd24gaG9zdCBrZWVwcyB0aGUgc2hhcmVkXG4gKiBkZWNpc2lvbiBmdW5jdGlvbidzIGNvbnRyYWN0IHNhdGlzZmllZCB3aXRob3V0IHdlYWtlbmluZyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UHJveHkob3B0aW9uczogUHJveHlPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3h5ID0gUHJveHlNb2R1bGUuY3JlYXRlUHJveHlTZXJ2ZXIoe1xuICAgIHRhcmdldDogYGh0dHA6Ly8xMjcuMC4wLjE6JHtvcHRpb25zLmFwcFBvcnR9YCxcbiAgICB3czogdHJ1ZSxcbiAgICB4ZndkOiB0cnVlLFxuICB9KTtcbiAgY29uc3QgaGVhZGVyUG9saWN5ID0gdHVubmVsSGVhZGVycy50b0hlYWRlclBvbGljeShvcHRpb25zLmZvcndhcmRIZWFkZXJzKTtcbiAgY29uc3QgZ2F0ZSA9IG9wdGlvbnMuZ2F0ZTtcblxuICBjb25zdCBkZWNpZGUgPSAocmVxdWVzdDogSW5jb21pbmdNZXNzYWdlKTogUHJvbWlzZTx0dW5uZWxHYXRlLkdhdGVBY3Rpb24+ID0+XG4gICAgZ2F0ZVxuICAgICAgPyB0dW5uZWxHYXRlLmdhdGVSZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgICBnYXRlLFxuICAgICAgICAgIHB1YmxpY0RvbWFpbjogKHJlcXVlc3QuaGVhZGVycy5ob3N0ID8/IFwiXCIpLnNwbGl0KFwiOlwiKVswXSB8fCBcImxvY2FsaG9zdFwiLFxuICAgICAgICAgIGhlYWRlclBvbGljeSxcbiAgICAgICAgfSlcbiAgICAgIDogUHJvbWlzZS5yZXNvbHZlPHR1bm5lbEdhdGUuR2F0ZUFjdGlvbj4oXCJwYXNzXCIpO1xuXG4gIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigocmVxdWVzdCwgcmVzcG9uc2UpID0+IHtcbiAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gKHJlcXVlc3QudXJsID8/IFwiL1wiKS5zcGxpdChcIj9cIilbMF0gPz8gXCIvXCI7XG4gICAgICBpZiAoZ2F0ZSAmJiAoYXdhaXQgaGFuZGxlQXV0aFJvdXRlKHJlcXVlc3QsIHJlc3BvbnNlLCBwYXRoLCBnYXRlKSkpIHJldHVybjtcbiAgICAgIGlmICgoYXdhaXQgZGVjaWRlKHJlcXVlc3QpKSA9PT0gXCJkZW55XCIpIHtcbiAgICAgICAgc2VuZEpzb24ocmVzcG9uc2UsIDQwMSwgdHVubmVsR2F0ZS5VTkFVVEhPUklaRURfQk9EWSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByb3h5LndlYihyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfSkoKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcInByb3h5IHJlcXVlc3QgZmFpbGVkXCIsIHsgZXJyb3IgfSk7XG4gICAgICBpZiAoIXJlc3BvbnNlLmhlYWRlcnNTZW50KSBzZW5kSnNvbihyZXNwb25zZSwgNTAyLCB7IGVycm9yOiBcImJhZCBnYXRld2F5XCIgfSk7XG4gICAgICBlbHNlIHJlc3BvbnNlLmVuZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBBIHdlYnNvY2tldCB1cGdyYWRlIGNhbm5vdCBiZSBhbnN3ZXJlZCB3aXRoIGEgNDAxIGJvZHksIHNvIGEgZGVuaWVkIG9uZSBpc1xuICAvLyBkZXN0cm95ZWQgLSB0aGUgY2xpZW50IHNlZXMgdGhlIGhhbmRzaGFrZSBmYWlsLCB3aGljaCBpcyB3aGF0IGEgYnJvd3NlcidzXG4gIC8vIFdlYlNvY2tldCBlcnJvciBoYW5kbGVyIGV4cGVjdHMuXG4gIHNlcnZlci5vbihcInVwZ3JhZGVcIiwgKHJlcXVlc3Q6IEluY29taW5nTWVzc2FnZSwgc29ja2V0OiBTb2NrZXQsIGhlYWQ6IEJ1ZmZlcikgPT4ge1xuICAgIHZvaWQgZGVjaWRlKHJlcXVlc3QpXG4gICAgICAudGhlbigoYWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwiZGVueVwiKSBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgICBlbHNlIHByb3h5LndzKHJlcXVlc3QsIHNvY2tldCwgaGVhZCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHNvY2tldC5kZXN0cm95KCkpO1xuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXJ2ZXIubGlzdGVuKG9wdGlvbnMucHVibGljUG9ydCwgXCIwLjAuMC4wXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwicHJveHkgbGlzdGVuaW5nXCIsIHsgcHVibGljUG9ydDogb3B0aW9ucy5wdWJsaWNQb3J0LCBhcHBQb3J0OiBvcHRpb25zLmFwcFBvcnQgfSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
"typescript": "^5.9.3"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@dbx-tools/appkit": "0.6.
|
|
27
|
-
"@dbx-tools/core": "0.6.
|
|
28
|
-
"@dbx-tools/email": "0.6.
|
|
29
|
-
"@dbx-tools/shared-core": "0.6.
|
|
30
|
-
"@dbx-tools/shared-email": "0.6.
|
|
31
|
-
"@dbx-tools/tunnel": "0.6.
|
|
26
|
+
"@dbx-tools/appkit": "0.6.89",
|
|
27
|
+
"@dbx-tools/core": "0.6.89",
|
|
28
|
+
"@dbx-tools/email": "0.6.89",
|
|
29
|
+
"@dbx-tools/shared-core": "0.6.89",
|
|
30
|
+
"@dbx-tools/shared-email": "0.6.89",
|
|
31
|
+
"@dbx-tools/tunnel": "0.6.89",
|
|
32
32
|
"commander": "^15.0.0",
|
|
33
33
|
"http-proxy-3": "^1.23.1"
|
|
34
34
|
},
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"./package.json": "./package.json"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
|
-
"version": "0.6.
|
|
65
|
+
"version": "0.6.89",
|
|
66
66
|
"types": "./lib/index.d.ts",
|
|
67
67
|
"type": "module",
|
|
68
68
|
"exports": {
|
package/src/options.ts
CHANGED
|
@@ -53,8 +53,8 @@ export function resolveTunnelOptions(options: TunnelOptions): ResolvedTunnelOpti
|
|
|
53
53
|
// The Databricks Apps runtime contract: the platform routes to
|
|
54
54
|
// DATABRICKS_APP_PORT, so the WRAPPER claims it and the wrapped app is moved
|
|
55
55
|
// to a private one.
|
|
56
|
-
const publicPort = config.
|
|
57
|
-
const appPort = config.
|
|
56
|
+
const publicPort = config.port(options.port, "DATABRICKS_APP_PORT", 8000);
|
|
57
|
+
const appPort = config.port(options.appPort, "APP_PORT", 0, { prefix: "TUNNEL" });
|
|
58
58
|
const gateConfig: AuthGateConfig = {
|
|
59
59
|
allow: options.allow,
|
|
60
60
|
subject: options.subject,
|
package/src/proxy.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { createServer, type IncomingMessage, type ServerResponse } from "node:ht
|
|
|
21
21
|
import type { Socket } from "node:net";
|
|
22
22
|
import { http, json, log } from "@dbx-tools/shared-core";
|
|
23
23
|
import { authRequestSchema, authVerifySchema, SESSION_COOKIE_NAME } from "@dbx-tools/shared-email";
|
|
24
|
-
import { gate as
|
|
24
|
+
import { gate as tunnelGate, headers as tunnelHeaders, type AuthGateApi } from "@dbx-tools/tunnel";
|
|
25
25
|
import ProxyModule from "http-proxy-3";
|
|
26
26
|
|
|
27
27
|
const logger = log.logger("tunnel:proxy");
|
|
@@ -75,8 +75,8 @@ async function handleAuthRoute(
|
|
|
75
75
|
path: string,
|
|
76
76
|
gate: AuthGateApi,
|
|
77
77
|
): Promise<boolean> {
|
|
78
|
-
const prefix =
|
|
79
|
-
const ip =
|
|
78
|
+
const prefix = tunnelGate.AUTH_PREFIX;
|
|
79
|
+
const ip = tunnelGate.clientIp(request);
|
|
80
80
|
|
|
81
81
|
if (path === `${prefix}/status`) {
|
|
82
82
|
sendJson(response, 200, await gate.status(sessionCookieValue(request)));
|
|
@@ -100,7 +100,7 @@ async function handleAuthRoute(
|
|
|
100
100
|
const result = await gate.verify(parsed.data.email, parsed.data.code, ip);
|
|
101
101
|
const cookie =
|
|
102
102
|
result.ok && result.token
|
|
103
|
-
?
|
|
103
|
+
? tunnelGate.sessionSetCookie(result.token, gate.sessionTtlSeconds)
|
|
104
104
|
: undefined;
|
|
105
105
|
sendJson(
|
|
106
106
|
response,
|
|
@@ -111,7 +111,7 @@ async function handleAuthRoute(
|
|
|
111
111
|
return true;
|
|
112
112
|
}
|
|
113
113
|
if (path === `${prefix}/logout` && request.method === "POST") {
|
|
114
|
-
sendJson(response, 200, { ok: true },
|
|
114
|
+
sendJson(response, 200, { ok: true }, tunnelGate.LOGOUT_SET_COOKIE);
|
|
115
115
|
return true;
|
|
116
116
|
}
|
|
117
117
|
return false;
|
|
@@ -132,24 +132,24 @@ export function startProxy(options: ProxyOptions): Promise<void> {
|
|
|
132
132
|
ws: true,
|
|
133
133
|
xfwd: true,
|
|
134
134
|
});
|
|
135
|
-
const headerPolicy =
|
|
135
|
+
const headerPolicy = tunnelHeaders.toHeaderPolicy(options.forwardHeaders);
|
|
136
136
|
const gate = options.gate;
|
|
137
137
|
|
|
138
|
-
const decide = (request: IncomingMessage): Promise<
|
|
138
|
+
const decide = (request: IncomingMessage): Promise<tunnelGate.GateAction> =>
|
|
139
139
|
gate
|
|
140
|
-
?
|
|
140
|
+
? tunnelGate.gateRequest(request, {
|
|
141
141
|
gate,
|
|
142
142
|
publicDomain: (request.headers.host ?? "").split(":")[0] || "localhost",
|
|
143
143
|
headerPolicy,
|
|
144
144
|
})
|
|
145
|
-
: Promise.resolve<
|
|
145
|
+
: Promise.resolve<tunnelGate.GateAction>("pass");
|
|
146
146
|
|
|
147
147
|
const server = createServer((request, response) => {
|
|
148
148
|
void (async () => {
|
|
149
149
|
const path = (request.url ?? "/").split("?")[0] ?? "/";
|
|
150
150
|
if (gate && (await handleAuthRoute(request, response, path, gate))) return;
|
|
151
151
|
if ((await decide(request)) === "deny") {
|
|
152
|
-
sendJson(response, 401,
|
|
152
|
+
sendJson(response, 401, tunnelGate.UNAUTHORIZED_BODY);
|
|
153
153
|
return;
|
|
154
154
|
}
|
|
155
155
|
proxy.web(request, response);
|