@dollhousemcp/mcp-server 2.0.4 → 2.0.5
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/CHANGELOG.md +8 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.js +7 -1
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +13 -3
- package/dist/web/console/LeaderElection.d.ts +10 -0
- package/dist/web/console/LeaderElection.d.ts.map +1 -1
- package/dist/web/console/LeaderElection.js +44 -1
- package/dist/web/console/LeaderForwardingSink.d.ts +3 -1
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
- package/dist/web/console/LeaderForwardingSink.js +24 -6
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
- package/dist/web/console/UnifiedConsole.js +12 -3
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +3 -2
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeaderElection.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderElection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAuBH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,sEAAsE;IACtE,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAWxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAM5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAe/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAyD1F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAgBlE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C"}
|
|
1
|
+
{"version":3,"file":"LeaderElection.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderElection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAuBH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,sEAAsE;IACtE,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAWxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAM5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAe/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAyD1F;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYjG;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBnG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAgBlE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C"}
|
|
@@ -170,6 +170,49 @@ export async function electLeader(sessionId, port) {
|
|
|
170
170
|
const actualLeader = await readLeaderLock();
|
|
171
171
|
return { role: 'follower', leaderInfo: actualLeader ?? retryInfo };
|
|
172
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Probe whether the leader's web console is reachable.
|
|
175
|
+
* Returns true if the leader's ingest endpoint responds, false otherwise.
|
|
176
|
+
*/
|
|
177
|
+
export async function isLeaderWebConsoleReachable(leaderInfo) {
|
|
178
|
+
try {
|
|
179
|
+
const controller = new AbortController();
|
|
180
|
+
const timeout = setTimeout(() => controller.abort(), 2_000);
|
|
181
|
+
const res = await fetch(`http://127.0.0.1:${leaderInfo.port}/api/logs/stats`, {
|
|
182
|
+
signal: controller.signal,
|
|
183
|
+
});
|
|
184
|
+
clearTimeout(timeout);
|
|
185
|
+
return res.ok;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Force claim leadership by deleting the existing lock and claiming.
|
|
193
|
+
* Used when the existing leader is alive but not running a web console.
|
|
194
|
+
*/
|
|
195
|
+
export async function forceClaimLeadership(sessionId, port) {
|
|
196
|
+
logger.info('[LeaderElection] Forcing leadership takeover — existing leader has no web console');
|
|
197
|
+
await deleteLeaderLock();
|
|
198
|
+
const now = new Date().toISOString();
|
|
199
|
+
const myInfo = {
|
|
200
|
+
version: LOCK_VERSION,
|
|
201
|
+
pid: process.pid,
|
|
202
|
+
port,
|
|
203
|
+
sessionId: UnicodeValidator.normalize(sessionId).normalizedContent,
|
|
204
|
+
startedAt: now,
|
|
205
|
+
heartbeat: now,
|
|
206
|
+
};
|
|
207
|
+
const claimed = await claimLeadership(myInfo);
|
|
208
|
+
if (claimed) {
|
|
209
|
+
logger.info('[LeaderElection] Forced leadership claimed', { sessionId, port, pid: process.pid });
|
|
210
|
+
return { role: 'leader', leaderInfo: myInfo };
|
|
211
|
+
}
|
|
212
|
+
// Failed — fall back to follower
|
|
213
|
+
const winner = await readLeaderLock();
|
|
214
|
+
return { role: 'follower', leaderInfo: winner ?? myInfo };
|
|
215
|
+
}
|
|
173
216
|
/**
|
|
174
217
|
* Start the leader heartbeat loop.
|
|
175
218
|
* Updates the lock file every HEARTBEAT_INTERVAL_MS so followers know the leader is alive.
|
|
@@ -202,4 +245,4 @@ export function registerLeaderCleanup() {
|
|
|
202
245
|
process.once('SIGTERM', cleanup);
|
|
203
246
|
process.once('SIGINT', cleanup);
|
|
204
247
|
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRWxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLHdDQUF3QztBQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXJELG1DQUFtQztBQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFFdkQsc0RBQXNEO0FBQ3RELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBRXJDLDJEQUEyRDtBQUMzRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUVsQyx1Q0FBdUM7QUFDdkMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBdUJ2Qjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQVc7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FB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QyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExlYWRlciBlbGVjdGlvbiBmb3IgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBNQ1Agc2VydmVyIGluc3RhbmNlcyBydW4gY29uY3VycmVudGx5LCBvbmx5IG9uZSBzaG91bGQgaG9zdFxuICogdGhlIHdlYiBjb25zb2xlICh0aGUgXCJsZWFkZXJcIikuIE90aGVycyBiZWNvbWUgXCJmb2xsb3dlcnNcIiB0aGF0IGZvcndhcmRcbiAqIGV2ZW50cyB0byB0aGUgbGVhZGVyLiBUaGlzIG1vZHVsZSBoYW5kbGVzOlxuICpcbiAqIDEuIFJlYWRpbmcvd3JpdGluZyBhIGxlYWRlciBsb2NrIGZpbGUgYXQgfi8uZG9sbGhvdXNlL3J1bi9jb25zb2xlLWxlYWRlci5sb2NrXG4gKiAyLiBBdG9taWMgY2xhaW0gdmlhIHRlbXArcmVuYW1lIHRvIHByZXZlbnQgVE9DVE9VIHJhY2VzXG4gKiAzLiBQSUQtYmFzZWQgc3RhbGUgZGV0ZWN0aW9uIChzaWduYWwtMCBsaXZlbmVzcyBjaGVjaylcbiAqIDQuIEhlYXJ0YmVhdCB1cGRhdGVzICgxMHMgaW50ZXJ2YWwpIHNvIGZvbGxvd2VycyBjYW4gZGV0ZWN0IGh1bmcgbGVhZGVyc1xuICogNS4gQ2xlYW51cCBvbiBwcm9jZXNzIGV4aXRcbiAqXG4gKiBUaGUgcG9ydCAzOTM5IGJpbmRpbmcgaXMgdGhlIHVsdGltYXRlIHRpZWJyZWFrZXI6IGV2ZW4gaWYgdHdvIHByb2Nlc3Nlc1xuICogYm90aCB3cml0ZSB0aGUgbG9jayBmaWxlLCBvbmx5IG9uZSBjYW4gYmluZCB0aGUgcG9ydC5cbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUsIHJlbmFtZSwgdW5saW5rIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8qKiBEaXJlY3RvcnkgZm9yIHJ1bnRpbWUgc3RhdGUgZmlsZXMgKi9cbmNvbnN0IFJVTl9ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAncnVuJyk7XG5cbi8qKiBQYXRoIHRvIHRoZSBsZWFkZXIgbG9jayBmaWxlICovXG5jb25zdCBMT0NLX0ZJTEUgPSBqb2luKFJVTl9ESVIsICdjb25zb2xlLWxlYWRlci5sb2NrJyk7XG5cbi8qKiBIb3cgb2Z0ZW4gdGhlIGxlYWRlciB1cGRhdGVzIGl0cyBoZWFydGJlYXQgKG1zKSAqL1xuY29uc3QgSEVBUlRCRUFUX0lOVEVSVkFMX01TID0gMTBfMDAwO1xuXG4vKiogSG93IGxvbmcgYmVmb3JlIGEgaGVhcnRiZWF0IGlzIGNvbnNpZGVyZWQgc3RhbGUgKG1zKSAqL1xuY29uc3QgSEVBUlRCRUFUX1NUQUxFX01TID0gMzBfMDAwO1xuXG4vKiogQ3VycmVudCBsb2NrIGZpbGUgc2NoZW1hIHZlcnNpb24gKi9cbmNvbnN0IExPQ0tfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogSW5mb3JtYXRpb24gc3RvcmVkIGluIHRoZSBsZWFkZXIgbG9jayBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBwaWQ6IG51bWJlcjtcbiAgcG9ydDogbnVtYmVyO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIGhlYXJ0YmVhdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIGxlYWRlciBlbGVjdGlvbiBhdHRlbXB0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZWN0aW9uUmVzdWx0IHtcbiAgcm9sZTogJ2xlYWRlcicgfCAnZm9sbG93ZXInO1xuICAvKiogTGVhZGVyIGluZm8g4oCUIGZvciBmb2xsb3dlcnMsIHRoaXMgaXMgdGhlIGV4aXN0aW5nIGxlYWRlcidzIGluZm8gKi9cbiAgbGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm87XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb2Nlc3Mgd2l0aCB0aGUgZ2l2ZW4gUElEIGlzIGFsaXZlLlxuICogVXNlcyBzaWduYWwgMCB3aGljaCBjaGVja3MgZXhpc3RlbmNlIHdpdGhvdXQgc2VuZGluZyBhIHNpZ25hbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvY2Vzc0FsaXZlKHBpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5raWxsKHBpZCwgMCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgYW5kIHBhcnNlIHRoZSBsZWFkZXIgbG9jayBmaWxlLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGlzIHVucmVhZGFibGUsIG9yIGhhcyBpbnZhbGlkIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTGVhZGVyTG9jaygpOiBQcm9taXNlPENvbnNvbGVMZWFkZXJJbmZvIHwgbnVsbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShMT0NLX0ZJTEUsICd1dGYtOCcpO1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIENvbnNvbGVMZWFkZXJJbmZvO1xuICAgIGlmIChkYXRhLnZlcnNpb24gIT09IExPQ0tfVkVSU0lPTiB8fCAhZGF0YS5waWQgfHwgIWRhdGEucG9ydCB8fCAhZGF0YS5zZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGxlYWRlciBsb2NrIGlzIHN0YWxlIChkZWFkIHByb2Nlc3Mgb3IgZXhwaXJlZCBoZWFydGJlYXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMb2NrU3RhbGUoaW5mbzogQ29uc29sZUxlYWRlckluZm8pOiBib29sZWFuIHtcbiAgaWYgKCFpc1Byb2Nlc3NBbGl2ZShpbmZvLnBpZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBoZWFydGJlYXRBZ2UgPSBEYXRlLm5vdygpIC0gbmV3IERhdGUoaW5mby5oZWFydGJlYXQpLmdldFRpbWUoKTtcbiAgcmV0dXJuIGhlYXJ0YmVhdEFnZSA+IEhFQVJUQkVBVF9TVEFMRV9NUztcbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGF0b21pY2FsbHkgY2xhaW0gbGVhZGVyc2hpcC5cbiAqXG4gKiBXcml0ZXMgdG8gYSB0ZW1wIGZpbGUgdGhlbiByZW5hbWVzIHRvIHRoZSBsb2NrIHBhdGguIE9uIFBPU0lYIHN5c3RlbXNcbiAqIHJlbmFtZSBpcyBhdG9taWMsIHNvIG9ubHkgb25lIHdyaXRlciB3aW5zLiBBZnRlciByZW5hbWluZywgcmUtcmVhZHMgdGhlXG4gKiBsb2NrIHRvIHZlcmlmeSBvdXIgUElEIHdvbi5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoaXMgcHJvY2VzcyBzdWNjZXNzZnVsbHkgY2xhaW1lZCBsZWFkZXJzaGlwXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGFpbUxlYWRlcnNoaXAoaW5mbzogQ29uc29sZUxlYWRlckluZm8pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgYXdhaXQgbWtkaXIoUlVOX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IHRtcEZpbGUgPSBqb2luKFJVTl9ESVIsIGBjb25zb2xlLWxlYWRlci5sb2NrLiR7cHJvY2Vzcy5waWR9LnRtcGApO1xuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlRmlsZSh0bXBGaWxlLCBKU09OLnN0cmluZ2lmeShpbmZvLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG4gICAgYXdhaXQgcmVuYW1lKHRtcEZpbGUsIExPQ0tfRklMRSk7XG5cbiAgICAvLyBWZXJpZnkgd2Ugd29uIHRoZSByYWNlXG4gICAgY29uc3Qgd3JpdHRlbiA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrKCk7XG4gICAgcmV0dXJuIHdyaXR0ZW4gIT09IG51bGwgJiYgd3JpdHRlbi5waWQgPT09IGluZm8ucGlkO1xuICB9IGNhdGNoIHtcbiAgICAvLyBDbGVhbiB1cCB0ZW1wIGZpbGUgb24gZmFpbHVyZVxuICAgIHRyeSB7IGF3YWl0IHVubGluayh0bXBGaWxlKTsgfSBjYXRjaCB7IC8qIGlnbm9yZSAqLyB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRGVsZXRlIHRoZSBsZWFkZXIgbG9jayBmaWxlIChmb3IgY2xlYW51cCBvciB0YWtlb3ZlcikuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVMZWFkZXJMb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkgeyBhd2FpdCB1bmxpbmsoTE9DS19GSUxFKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgZ29uZSAqLyB9XG59XG5cbi8qKlxuICogUnVuIHRoZSBsZWFkZXIgZWxlY3Rpb24gcHJvdG9jb2wuXG4gKlxuICogMS4gSWYgbm8gbG9jayBleGlzdHMgb3IgbG9jayBpcyBzdGFsZSDihpIgY2xhaW0gbGVhZGVyc2hpcFxuICogMi4gSWYgbG9jayBleGlzdHMgd2l0aCBhIGxpdmUsIHJlc3BvbnNpdmUgbGVhZGVyIOKGkiBiZWNvbWUgZm9sbG93ZXJcbiAqXG4gKiBAcGFyYW0gc2Vzc2lvbklkIC0gVGhpcyBwcm9jZXNzJ3MgdW5pcXVlIHNlc3Npb24gaWRlbnRpZmllclxuICogQHBhcmFtIHBvcnQgLSBUaGUgcG9ydCB0aGlzIHByb2Nlc3Mgd291bGQgdXNlIGFzIGxlYWRlciAodHlwaWNhbGx5IDM5MzkpXG4gKiBAcmV0dXJucyBFbGVjdGlvbiByZXN1bHQgd2l0aCByb2xlIGFuZCBsZWFkZXIgaW5mb1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWxlY3RMZWFkZXIoc2Vzc2lvbklkOiBzdHJpbmcsIHBvcnQ6IG51bWJlcik6IFByb21pc2U8RWxlY3Rpb25SZXN1bHQ+IHtcbiAgc2Vzc2lvbklkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoc2Vzc2lvbklkKS5ub3JtYWxpemVkQ29udGVudDtcbiAgY29uc3QgZXhpc3RpbmdMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcblxuICBpZiAoZXhpc3RpbmdMb2NrICYmICFpc0xvY2tTdGFsZShleGlzdGluZ0xvY2spKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gRXhpc3RpbmcgbGVhZGVyIGZvdW5kIOKAlCBiZWNvbWluZyBmb2xsb3dlcicsIHtcbiAgICAgIGxlYWRlclNlc3Npb246IGV4aXN0aW5nTG9jay5zZXNzaW9uSWQsIGxlYWRlclBpZDogZXhpc3RpbmdMb2NrLnBpZCxcbiAgICAgIGxlYWRlclBvcnQ6IGV4aXN0aW5nTG9jay5wb3J0LCBteVNlc3Npb246IHNlc3Npb25JZCwgbXlQaWQ6IHByb2Nlc3MucGlkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGV4aXN0aW5nTG9jayB9O1xuICB9XG5cbiAgLy8gTm8gdmFsaWQgbGVhZGVyIOKAlCB0cnkgdG8gY2xhaW1cbiAgaWYgKGV4aXN0aW5nTG9jaykge1xuICAgIGNvbnN0IGFsaXZlID0gaXNQcm9jZXNzQWxpdmUoZXhpc3RpbmdMb2NrLnBpZCk7XG4gICAgY29uc3QgaGVhcnRiZWF0QWdlID0gRGF0ZS5ub3coKSAtIG5ldyBEYXRlKGV4aXN0aW5nTG9jay5oZWFydGJlYXQpLmdldFRpbWUoKTtcbiAgICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBTdGFsZSBsZWFkZXIgbG9jayDigJQgdGFraW5nIG92ZXInLCB7XG4gICAgICBzdGFsZVBpZDogZXhpc3RpbmdMb2NrLnBpZCwgYWxpdmUsIGhlYXJ0YmVhdEFnZU1zOiBoZWFydGJlYXRBZ2UsXG4gICAgICBzdGFsZVNlc3Npb246IGV4aXN0aW5nTG9jay5zZXNzaW9uSWQsIG15U2Vzc2lvbjogc2Vzc2lvbklkLFxuICAgIH0pO1xuICAgIGF3YWl0IGRlbGV0ZUxlYWRlckxvY2soKTtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgY29uc3QgbXlJbmZvOiBDb25zb2xlTGVhZGVySW5mbyA9IHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZCxcbiAgICBzdGFydGVkQXQ6IG5vdyxcbiAgICBoZWFydGJlYXQ6IG5vdyxcbiAgfTtcblxuICBjb25zdCBjbGFpbWVkID0gYXdhaXQgY2xhaW1MZWFkZXJzaGlwKG15SW5mbyk7XG4gIGlmIChjbGFpbWVkKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gQ2xhaW1lZCBsZWFkZXJzaGlwJywgeyBzZXNzaW9uSWQsIHBvcnQsIHBpZDogcHJvY2Vzcy5waWQgfSk7XG4gICAgcmV0dXJuIHsgcm9sZTogJ2xlYWRlcicsIGxlYWRlckluZm86IG15SW5mbyB9O1xuICB9XG5cbiAgLy8gQW5vdGhlciBwcm9jZXNzIHdvbiB0aGUgcmFjZSDigJQgcmUtcmVhZCBhbmQgYmVjb21lIGZvbGxvd2VyXG4gIGNvbnN0IHdpbm5lciA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrKCk7XG4gIGlmICh3aW5uZXIpIHtcbiAgICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBMb3N0IGVsZWN0aW9uIOKAlCBiZWNvbWluZyBmb2xsb3dlcicsIHtcbiAgICAgIHdpbm5lclBpZDogd2lubmVyLnBpZCwgd2lubmVyU2Vzc2lvbjogd2lubmVyLnNlc3Npb25JZCwgbXlTZXNzaW9uOiBzZXNzaW9uSWQsIG15UGlkOiBwcm9jZXNzLnBpZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiB3aW5uZXIgfTtcbiAgfVxuXG4gIC8vIEV4dHJlbWVseSB1bmxpa2VseTogbG9jayBkaXNhcHBlYXJlZCBiZXR3ZWVuIG91ciBjbGFpbSBhbmQgcmUtcmVhZC4gUmV0cnkgb25jZS5cbiAgbG9nZ2VyLndhcm4oJ1tMZWFkZXJFbGVjdGlvbl0gTG9jayB2YW5pc2hlZCBhZnRlciBmYWlsZWQgY2xhaW0uIFJldHJ5aW5nLicpO1xuICBjb25zdCByZXRyeUluZm86IENvbnNvbGVMZWFkZXJJbmZvID0geyAuLi5teUluZm8sIGhlYXJ0YmVhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH07XG4gIGNvbnN0IHJldHJ5Q2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChyZXRyeUluZm8pO1xuICBpZiAocmV0cnlDbGFpbWVkKSB7XG4gICAgcmV0dXJuIHsgcm9sZTogJ2xlYWRlcicsIGxlYWRlckluZm86IHJldHJ5SW5mbyB9O1xuICB9XG4gIGNvbnN0IGFjdHVhbExlYWRlciA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrKCk7XG4gIHJldHVybiB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGFjdHVhbExlYWRlciA/PyByZXRyeUluZm8gfTtcbn1cblxuLyoqXG4gKiBTdGFydCB0aGUgbGVhZGVyIGhlYXJ0YmVhdCBsb29wLlxuICogVXBkYXRlcyB0aGUgbG9jayBmaWxlIGV2ZXJ5IEhFQVJUQkVBVF9JTlRFUlZBTF9NUyBzbyBmb2xsb3dlcnMga25vdyB0aGUgbGVhZGVyIGlzIGFsaXZlLlxuICpcbiAqIEByZXR1cm5zIEEgc3RvcCBmdW5jdGlvbiB0byBjbGVhciB0aGUgaW50ZXJ2YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0SGVhcnRiZWF0KGluZm86IENvbnNvbGVMZWFkZXJJbmZvKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cGRhdGVkOiBDb25zb2xlTGVhZGVySW5mbyA9IHsgLi4uaW5mbywgaGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfTtcbiAgICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKFJVTl9ESVIsIGBjb25zb2xlLWxlYWRlci5sb2NrLiR7cHJvY2Vzcy5waWR9LnRtcGApO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHRtcEZpbGUsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQsIG51bGwsIDIpLCAndXRmLTgnKTtcbiAgICAgIGF3YWl0IHJlbmFtZSh0bXBGaWxlLCBMT0NLX0ZJTEUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbTGVhZGVyRWxlY3Rpb25dIEhlYXJ0YmVhdCB3cml0ZSBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gIH0sIEhFQVJUQkVBVF9JTlRFUlZBTF9NUyk7XG5cbiAgLy8gRG9uJ3QgbGV0IHRoZSBoZWFydGJlYXQgaW50ZXJ2YWwga2VlcCB0aGUgcHJvY2VzcyBhbGl2ZVxuICBpbnRlcnZhbC51bnJlZigpO1xuXG4gIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBjbGVhbnVwIGhhbmRsZXJzIHRvIHJlbW92ZSB0aGUgbGVhZGVyIGxvY2sgb24gcHJvY2VzcyBleGl0LlxuICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBsZWFkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckxlYWRlckNsZWFudXAoKTogdm9pZCB7XG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7IGRlbGV0ZUxlYWRlckxvY2soKS5jYXRjaCgoKSA9PiB7fSk7IH07XG4gIHByb2Nlc3Mub25jZSgnZXhpdCcsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uY2UoJ1NJR1RFUk0nLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdJTlQnLCBjbGVhbnVwKTtcbn1cbiJdfQ==
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRWxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLHdDQUF3QztBQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXJELG1DQUFtQztBQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFFdkQsc0RBQXNEO0FBQ3RELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBRXJDLDJEQUEyRDtBQUMzRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUVsQyx1Q0FBdUM7QUFDdkMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBdUJ2Qjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQVc7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FB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QUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMZWFkZXIgZWxlY3Rpb24gZm9yIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgTUNQIHNlcnZlciBpbnN0YW5jZXMgcnVuIGNvbmN1cnJlbnRseSwgb25seSBvbmUgc2hvdWxkIGhvc3RcbiAqIHRoZSB3ZWIgY29uc29sZSAodGhlIFwibGVhZGVyXCIpLiBPdGhlcnMgYmVjb21lIFwiZm9sbG93ZXJzXCIgdGhhdCBmb3J3YXJkXG4gKiBldmVudHMgdG8gdGhlIGxlYWRlci4gVGhpcyBtb2R1bGUgaGFuZGxlczpcbiAqXG4gKiAxLiBSZWFkaW5nL3dyaXRpbmcgYSBsZWFkZXIgbG9jayBmaWxlIGF0IH4vLmRvbGxob3VzZS9ydW4vY29uc29sZS1sZWFkZXIubG9ja1xuICogMi4gQXRvbWljIGNsYWltIHZpYSB0ZW1wK3JlbmFtZSB0byBwcmV2ZW50IFRPQ1RPVSByYWNlc1xuICogMy4gUElELWJhc2VkIHN0YWxlIGRldGVjdGlvbiAoc2lnbmFsLTAgbGl2ZW5lc3MgY2hlY2spXG4gKiA0LiBIZWFydGJlYXQgdXBkYXRlcyAoMTBzIGludGVydmFsKSBzbyBmb2xsb3dlcnMgY2FuIGRldGVjdCBodW5nIGxlYWRlcnNcbiAqIDUuIENsZWFudXAgb24gcHJvY2VzcyBleGl0XG4gKlxuICogVGhlIHBvcnQgMzkzOSBiaW5kaW5nIGlzIHRoZSB1bHRpbWF0ZSB0aWVicmVha2VyOiBldmVuIGlmIHR3byBwcm9jZXNzZXNcbiAqIGJvdGggd3JpdGUgdGhlIGxvY2sgZmlsZSwgb25seSBvbmUgY2FuIGJpbmQgdGhlIHBvcnQuXG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlLCByZW5hbWUsIHVubGluayB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG4vKiogRGlyZWN0b3J5IGZvciBydW50aW1lIHN0YXRlIGZpbGVzICovXG5jb25zdCBSVU5fRElSID0gam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ3J1bicpO1xuXG4vKiogUGF0aCB0byB0aGUgbGVhZGVyIGxvY2sgZmlsZSAqL1xuY29uc3QgTE9DS19GSUxFID0gam9pbihSVU5fRElSLCAnY29uc29sZS1sZWFkZXIubG9jaycpO1xuXG4vKiogSG93IG9mdGVuIHRoZSBsZWFkZXIgdXBkYXRlcyBpdHMgaGVhcnRiZWF0IChtcykgKi9cbmNvbnN0IEhFQVJUQkVBVF9JTlRFUlZBTF9NUyA9IDEwXzAwMDtcblxuLyoqIEhvdyBsb25nIGJlZm9yZSBhIGhlYXJ0YmVhdCBpcyBjb25zaWRlcmVkIHN0YWxlIChtcykgKi9cbmNvbnN0IEhFQVJUQkVBVF9TVEFMRV9NUyA9IDMwXzAwMDtcblxuLyoqIEN1cnJlbnQgbG9jayBmaWxlIHNjaGVtYSB2ZXJzaW9uICovXG5jb25zdCBMT0NLX1ZFUlNJT04gPSAxO1xuXG4vKipcbiAqIEluZm9ybWF0aW9uIHN0b3JlZCBpbiB0aGUgbGVhZGVyIGxvY2sgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zb2xlTGVhZGVySW5mbyB7XG4gIHZlcnNpb246IG51bWJlcjtcbiAgcGlkOiBudW1iZXI7XG4gIHBvcnQ6IG51bWJlcjtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBoZWFydGJlYXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBsZWFkZXIgZWxlY3Rpb24gYXR0ZW1wdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVjdGlvblJlc3VsdCB7XG4gIHJvbGU6ICdsZWFkZXInIHwgJ2ZvbGxvd2VyJztcbiAgLyoqIExlYWRlciBpbmZvIOKAlCBmb3IgZm9sbG93ZXJzLCB0aGlzIGlzIHRoZSBleGlzdGluZyBsZWFkZXIncyBpbmZvICovXG4gIGxlYWRlckluZm86IENvbnNvbGVMZWFkZXJJbmZvO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm9jZXNzIHdpdGggdGhlIGdpdmVuIFBJRCBpcyBhbGl2ZS5cbiAqIFVzZXMgc2lnbmFsIDAgd2hpY2ggY2hlY2tzIGV4aXN0ZW5jZSB3aXRob3V0IHNlbmRpbmcgYSBzaWduYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2Nlc3NBbGl2ZShwaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbChwaWQsIDApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGFuZCBwYXJzZSB0aGUgbGVhZGVyIGxvY2sgZmlsZS5cbiAqIFJldHVybnMgbnVsbCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCBpcyB1bnJlYWRhYmxlLCBvciBoYXMgaW52YWxpZCBjb250ZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZExlYWRlckxvY2soKTogUHJvbWlzZTxDb25zb2xlTGVhZGVySW5mbyB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoTE9DS19GSUxFLCAndXRmLTgnKTtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDb25zb2xlTGVhZGVySW5mbztcbiAgICBpZiAoZGF0YS52ZXJzaW9uICE9PSBMT0NLX1ZFUlNJT04gfHwgIWRhdGEucGlkIHx8ICFkYXRhLnBvcnQgfHwgIWRhdGEuc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBsZWFkZXIgbG9jayBpcyBzdGFsZSAoZGVhZCBwcm9jZXNzIG9yIGV4cGlyZWQgaGVhcnRiZWF0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTG9ja1N0YWxlKGluZm86IENvbnNvbGVMZWFkZXJJbmZvKTogYm9vbGVhbiB7XG4gIGlmICghaXNQcm9jZXNzQWxpdmUoaW5mby5waWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgaGVhcnRiZWF0QWdlID0gRGF0ZS5ub3coKSAtIG5ldyBEYXRlKGluZm8uaGVhcnRiZWF0KS5nZXRUaW1lKCk7XG4gIHJldHVybiBoZWFydGJlYXRBZ2UgPiBIRUFSVEJFQVRfU1RBTEVfTVM7XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBhdG9taWNhbGx5IGNsYWltIGxlYWRlcnNoaXAuXG4gKlxuICogV3JpdGVzIHRvIGEgdGVtcCBmaWxlIHRoZW4gcmVuYW1lcyB0byB0aGUgbG9jayBwYXRoLiBPbiBQT1NJWCBzeXN0ZW1zXG4gKiByZW5hbWUgaXMgYXRvbWljLCBzbyBvbmx5IG9uZSB3cml0ZXIgd2lucy4gQWZ0ZXIgcmVuYW1pbmcsIHJlLXJlYWRzIHRoZVxuICogbG9jayB0byB2ZXJpZnkgb3VyIFBJRCB3b24uXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGlzIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5IGNsYWltZWQgbGVhZGVyc2hpcFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xhaW1MZWFkZXJzaGlwKGluZm86IENvbnNvbGVMZWFkZXJJbmZvKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGF3YWl0IG1rZGlyKFJVTl9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCB0bXBGaWxlID0gam9pbihSVU5fRElSLCBgY29uc29sZS1sZWFkZXIubG9jay4ke3Byb2Nlc3MucGlkfS50bXBgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZUZpbGUodG1wRmlsZSwgSlNPTi5zdHJpbmdpZnkoaW5mbywgbnVsbCwgMiksICd1dGYtOCcpO1xuICAgIGF3YWl0IHJlbmFtZSh0bXBGaWxlLCBMT0NLX0ZJTEUpO1xuXG4gICAgLy8gVmVyaWZ5IHdlIHdvbiB0aGUgcmFjZVxuICAgIGNvbnN0IHdyaXR0ZW4gPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuICAgIHJldHVybiB3cml0dGVuICE9PSBudWxsICYmIHdyaXR0ZW4ucGlkID09PSBpbmZvLnBpZDtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIG9uIGZhaWx1cmVcbiAgICB0cnkgeyBhd2FpdCB1bmxpbmsodG1wRmlsZSk7IH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIERlbGV0ZSB0aGUgbGVhZGVyIGxvY2sgZmlsZSAoZm9yIGNsZWFudXAgb3IgdGFrZW92ZXIpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlTGVhZGVyTG9jaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHsgYXdhaXQgdW5saW5rKExPQ0tfRklMRSk7IH0gY2F0Y2ggeyAvKiBhbHJlYWR5IGdvbmUgKi8gfVxufVxuXG4vKipcbiAqIFJ1biB0aGUgbGVhZGVyIGVsZWN0aW9uIHByb3RvY29sLlxuICpcbiAqIDEuIElmIG5vIGxvY2sgZXhpc3RzIG9yIGxvY2sgaXMgc3RhbGUg4oaSIGNsYWltIGxlYWRlcnNoaXBcbiAqIDIuIElmIGxvY2sgZXhpc3RzIHdpdGggYSBsaXZlLCByZXNwb25zaXZlIGxlYWRlciDihpIgYmVjb21lIGZvbGxvd2VyXG4gKlxuICogQHBhcmFtIHNlc3Npb25JZCAtIFRoaXMgcHJvY2VzcydzIHVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBwb3J0IC0gVGhlIHBvcnQgdGhpcyBwcm9jZXNzIHdvdWxkIHVzZSBhcyBsZWFkZXIgKHR5cGljYWxseSAzOTM5KVxuICogQHJldHVybnMgRWxlY3Rpb24gcmVzdWx0IHdpdGggcm9sZSBhbmQgbGVhZGVyIGluZm9cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVsZWN0TGVhZGVyKHNlc3Npb25JZDogc3RyaW5nLCBwb3J0OiBudW1iZXIpOiBQcm9taXNlPEVsZWN0aW9uUmVzdWx0PiB7XG4gIHNlc3Npb25JZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHNlc3Npb25JZCkubm9ybWFsaXplZENvbnRlbnQ7XG4gIGNvbnN0IGV4aXN0aW5nTG9jayA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrKCk7XG5cbiAgaWYgKGV4aXN0aW5nTG9jayAmJiAhaXNMb2NrU3RhbGUoZXhpc3RpbmdMb2NrKSkge1xuICAgIGxvZ2dlci5pbmZvKCdbTGVhZGVyRWxlY3Rpb25dIEV4aXN0aW5nIGxlYWRlciBmb3VuZCDigJQgYmVjb21pbmcgZm9sbG93ZXInLCB7XG4gICAgICBsZWFkZXJTZXNzaW9uOiBleGlzdGluZ0xvY2suc2Vzc2lvbklkLCBsZWFkZXJQaWQ6IGV4aXN0aW5nTG9jay5waWQsXG4gICAgICBsZWFkZXJQb3J0OiBleGlzdGluZ0xvY2sucG9ydCwgbXlTZXNzaW9uOiBzZXNzaW9uSWQsIG15UGlkOiBwcm9jZXNzLnBpZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiBleGlzdGluZ0xvY2sgfTtcbiAgfVxuXG4gIC8vIE5vIHZhbGlkIGxlYWRlciDigJQgdHJ5IHRvIGNsYWltXG4gIGlmIChleGlzdGluZ0xvY2spIHtcbiAgICBjb25zdCBhbGl2ZSA9IGlzUHJvY2Vzc0FsaXZlKGV4aXN0aW5nTG9jay5waWQpO1xuICAgIGNvbnN0IGhlYXJ0YmVhdEFnZSA9IERhdGUubm93KCkgLSBuZXcgRGF0ZShleGlzdGluZ0xvY2suaGVhcnRiZWF0KS5nZXRUaW1lKCk7XG4gICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gU3RhbGUgbGVhZGVyIGxvY2sg4oCUIHRha2luZyBvdmVyJywge1xuICAgICAgc3RhbGVQaWQ6IGV4aXN0aW5nTG9jay5waWQsIGFsaXZlLCBoZWFydGJlYXRBZ2VNczogaGVhcnRiZWF0QWdlLFxuICAgICAgc3RhbGVTZXNzaW9uOiBleGlzdGluZ0xvY2suc2Vzc2lvbklkLCBteVNlc3Npb246IHNlc3Npb25JZCxcbiAgICB9KTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrKCk7XG4gIH1cblxuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IG15SW5mbzogQ29uc29sZUxlYWRlckluZm8gPSB7XG4gICAgdmVyc2lvbjogTE9DS19WRVJTSU9OLFxuICAgIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgcG9ydCxcbiAgICBzZXNzaW9uSWQsXG4gICAgc3RhcnRlZEF0OiBub3csXG4gICAgaGVhcnRiZWF0OiBub3csXG4gIH07XG5cbiAgY29uc3QgY2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChteUluZm8pO1xuICBpZiAoY2xhaW1lZCkge1xuICAgIGxvZ2dlci5pbmZvKCdbTGVhZGVyRWxlY3Rpb25dIENsYWltZWQgbGVhZGVyc2hpcCcsIHsgc2Vzc2lvbklkLCBwb3J0LCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICAgIHJldHVybiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBteUluZm8gfTtcbiAgfVxuXG4gIC8vIEFub3RoZXIgcHJvY2VzcyB3b24gdGhlIHJhY2Ug4oCUIHJlLXJlYWQgYW5kIGJlY29tZSBmb2xsb3dlclxuICBjb25zdCB3aW5uZXIgPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuICBpZiAod2lubmVyKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1tMZWFkZXJFbGVjdGlvbl0gTG9zdCBlbGVjdGlvbiDigJQgYmVjb21pbmcgZm9sbG93ZXInLCB7XG4gICAgICB3aW5uZXJQaWQ6IHdpbm5lci5waWQsIHdpbm5lclNlc3Npb246IHdpbm5lci5zZXNzaW9uSWQsIG15U2Vzc2lvbjogc2Vzc2lvbklkLCBteVBpZDogcHJvY2Vzcy5waWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogd2lubmVyIH07XG4gIH1cblxuICAvLyBFeHRyZW1lbHkgdW5saWtlbHk6IGxvY2sgZGlzYXBwZWFyZWQgYmV0d2VlbiBvdXIgY2xhaW0gYW5kIHJlLXJlYWQuIFJldHJ5IG9uY2UuXG4gIGxvZ2dlci53YXJuKCdbTGVhZGVyRWxlY3Rpb25dIExvY2sgdmFuaXNoZWQgYWZ0ZXIgZmFpbGVkIGNsYWltLiBSZXRyeWluZy4nKTtcbiAgY29uc3QgcmV0cnlJbmZvOiBDb25zb2xlTGVhZGVySW5mbyA9IHsgLi4ubXlJbmZvLCBoZWFydGJlYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICBjb25zdCByZXRyeUNsYWltZWQgPSBhd2FpdCBjbGFpbUxlYWRlcnNoaXAocmV0cnlJbmZvKTtcbiAgaWYgKHJldHJ5Q2xhaW1lZCkge1xuICAgIHJldHVybiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiByZXRyeUluZm8gfTtcbiAgfVxuICBjb25zdCBhY3R1YWxMZWFkZXIgPSBhd2FpdCByZWFkTGVhZGVyTG9jaygpO1xuICByZXR1cm4geyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiBhY3R1YWxMZWFkZXIgPz8gcmV0cnlJbmZvIH07XG59XG5cbi8qKlxuICogUHJvYmUgd2hldGhlciB0aGUgbGVhZGVyJ3Mgd2ViIGNvbnNvbGUgaXMgcmVhY2hhYmxlLlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBsZWFkZXIncyBpbmdlc3QgZW5kcG9pbnQgcmVzcG9uZHMsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZShsZWFkZXJJbmZvOiBDb25zb2xlTGVhZGVySW5mbyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCAyXzAwMCk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYGh0dHA6Ly8xMjcuMC4wLjE6JHtsZWFkZXJJbmZvLnBvcnR9L2FwaS9sb2dzL3N0YXRzYCwge1xuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgcmV0dXJuIHJlcy5vaztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRm9yY2UgY2xhaW0gbGVhZGVyc2hpcCBieSBkZWxldGluZyB0aGUgZXhpc3RpbmcgbG9jayBhbmQgY2xhaW1pbmcuXG4gKiBVc2VkIHdoZW4gdGhlIGV4aXN0aW5nIGxlYWRlciBpcyBhbGl2ZSBidXQgbm90IHJ1bm5pbmcgYSB3ZWIgY29uc29sZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcmNlQ2xhaW1MZWFkZXJzaGlwKHNlc3Npb25JZDogc3RyaW5nLCBwb3J0OiBudW1iZXIpOiBQcm9taXNlPEVsZWN0aW9uUmVzdWx0PiB7XG4gIGxvZ2dlci5pbmZvKCdbTGVhZGVyRWxlY3Rpb25dIEZvcmNpbmcgbGVhZGVyc2hpcCB0YWtlb3ZlciDigJQgZXhpc3RpbmcgbGVhZGVyIGhhcyBubyB3ZWIgY29uc29sZScpO1xuICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrKCk7XG5cbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBjb25zdCBteUluZm86IENvbnNvbGVMZWFkZXJJbmZvID0ge1xuICAgIHZlcnNpb246IExPQ0tfVkVSU0lPTixcbiAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgIHBvcnQsXG4gICAgc2Vzc2lvbklkOiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICB9O1xuXG4gIGNvbnN0IGNsYWltZWQgPSBhd2FpdCBjbGFpbUxlYWRlcnNoaXAobXlJbmZvKTtcbiAgaWYgKGNsYWltZWQpIHtcbiAgICBsb2dnZXIuaW5mbygnW0xlYWRlckVsZWN0aW9uXSBGb3JjZWQgbGVhZGVyc2hpcCBjbGFpbWVkJywgeyBzZXNzaW9uSWQsIHBvcnQsIHBpZDogcHJvY2Vzcy5waWQgfSk7XG4gICAgcmV0dXJuIHsgcm9sZTogJ2xlYWRlcicsIGxlYWRlckluZm86IG15SW5mbyB9O1xuICB9XG5cbiAgLy8gRmFpbGVkIOKAlCBmYWxsIGJhY2sgdG8gZm9sbG93ZXJcbiAgY29uc3Qgd2lubmVyID0gYXdhaXQgcmVhZExlYWRlckxvY2soKTtcbiAgcmV0dXJuIHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogd2lubmVyID8/IG15SW5mbyB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBsZWFkZXIgaGVhcnRiZWF0IGxvb3AuXG4gKiBVcGRhdGVzIHRoZSBsb2NrIGZpbGUgZXZlcnkgSEVBUlRCRUFUX0lOVEVSVkFMX01TIHNvIGZvbGxvd2VycyBrbm93IHRoZSBsZWFkZXIgaXMgYWxpdmUuXG4gKlxuICogQHJldHVybnMgQSBzdG9wIGZ1bmN0aW9uIHRvIGNsZWFyIHRoZSBpbnRlcnZhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRIZWFydGJlYXQoaW5mbzogQ29uc29sZUxlYWRlckluZm8pOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQ6IENvbnNvbGVMZWFkZXJJbmZvID0geyAuLi5pbmZvLCBoZWFydGJlYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICAgICAgY29uc3QgdG1wRmlsZSA9IGpvaW4oUlVOX0RJUiwgYGNvbnNvbGUtbGVhZGVyLmxvY2suJHtwcm9jZXNzLnBpZH0udG1wYCk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUodG1wRmlsZSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCwgbnVsbCwgMiksICd1dGYtOCcpO1xuICAgICAgYXdhaXQgcmVuYW1lKHRtcEZpbGUsIExPQ0tfRklMRSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tMZWFkZXJFbGVjdGlvbl0gSGVhcnRiZWF0IHdyaXRlIGZhaWxlZDonLCBlcnIpO1xuICAgIH1cbiAgfSwgSEVBUlRCRUFUX0lOVEVSVkFMX01TKTtcblxuICAvLyBEb24ndCBsZXQgdGhlIGhlYXJ0YmVhdCBpbnRlcnZhbCBrZWVwIHRoZSBwcm9jZXNzIGFsaXZlXG4gIGludGVydmFsLnVucmVmKCk7XG5cbiAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGNsZWFudXAgaGFuZGxlcnMgdG8gcmVtb3ZlIHRoZSBsZWFkZXIgbG9jayBvbiBwcm9jZXNzIGV4aXQuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIGxlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCgpOiB2b2lkIHtcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHsgZGVsZXRlTGVhZGVyTG9jaygpLmNhdGNoKCgpID0+IHt9KTsgfTtcbiAgcHJvY2Vzcy5vbmNlKCdleGl0JywgY2xlYW51cCk7XG4gIHByb2Nlc3Mub25jZSgnU0lHVEVSTScsIGNsZWFudXApO1xuICBwcm9jZXNzLm9uY2UoJ1NJR0lOVCcsIGNsZWFudXApO1xufVxuIl19
|
|
@@ -26,13 +26,15 @@ export declare class LeaderForwardingLogSink implements ILogSink {
|
|
|
26
26
|
private flushTimer;
|
|
27
27
|
private backoffMs;
|
|
28
28
|
private flushing;
|
|
29
|
+
private consecutiveFailures;
|
|
30
|
+
private gaveUp;
|
|
29
31
|
constructor(leaderUrl: string, sessionId: string);
|
|
30
32
|
write(entry: UnifiedLogEntry): void;
|
|
31
33
|
flush(): Promise<void>;
|
|
32
34
|
close(): Promise<void>;
|
|
33
35
|
private flushBuffer;
|
|
34
36
|
private requeueBatch;
|
|
35
|
-
private
|
|
37
|
+
private handleFailure;
|
|
36
38
|
}
|
|
37
39
|
/**
|
|
38
40
|
* Forwards metric snapshots to the leader's /api/ingest/metrics.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeaderForwardingSink.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderForwardingSink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"LeaderForwardingSink.d.ts","sourceRoot":"","sources":["../../../src/web/console/LeaderForwardingSink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAyB7D;;GAEG;AACH,qBAAa,uBAAwB,YAAW,QAAQ;IASpD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAT5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,MAAM,CAAS;gBAGJ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;IAOpC,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAkB7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAQd,WAAW;IAgCzB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;CAmBtB;AAED;;GAEG;AACH,qBAAa,2BAA2B;IAEpC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;IAG9B,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB1D;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,cAAc,CAA+C;gBAGlD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;IAG9B,sDAAsD;IAChD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,sDAAsD;IAChD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQb,SAAS;CAqBxB"}
|
|
@@ -26,6 +26,8 @@ const FLUSH_INTERVAL_MS = 1_000;
|
|
|
26
26
|
const INITIAL_BACKOFF_MS = 1_000;
|
|
27
27
|
/** Maximum backoff delay (ms) */
|
|
28
28
|
const MAX_BACKOFF_MS = 30_000;
|
|
29
|
+
/** Give up forwarding after this many consecutive failures */
|
|
30
|
+
const MAX_CONSECUTIVE_FAILURES = 5;
|
|
29
31
|
/** HTTP request timeout (ms) */
|
|
30
32
|
const REQUEST_TIMEOUT_MS = 5_000;
|
|
31
33
|
/**
|
|
@@ -38,6 +40,8 @@ export class LeaderForwardingLogSink {
|
|
|
38
40
|
flushTimer = null;
|
|
39
41
|
backoffMs = INITIAL_BACKOFF_MS;
|
|
40
42
|
flushing = false;
|
|
43
|
+
consecutiveFailures = 0;
|
|
44
|
+
gaveUp = false;
|
|
41
45
|
constructor(leaderUrl, sessionId) {
|
|
42
46
|
this.leaderUrl = leaderUrl;
|
|
43
47
|
this.sessionId = sessionId;
|
|
@@ -71,7 +75,7 @@ export class LeaderForwardingLogSink {
|
|
|
71
75
|
await this.flushBuffer();
|
|
72
76
|
}
|
|
73
77
|
async flushBuffer() {
|
|
74
|
-
if (this.flushing || this.buffer.length === 0)
|
|
78
|
+
if (this.flushing || this.buffer.length === 0 || this.gaveUp)
|
|
75
79
|
return;
|
|
76
80
|
this.flushing = true;
|
|
77
81
|
const batch = this.buffer.splice(0, BATCH_SIZE);
|
|
@@ -87,15 +91,16 @@ export class LeaderForwardingLogSink {
|
|
|
87
91
|
clearTimeout(timeout);
|
|
88
92
|
if (response.ok) {
|
|
89
93
|
this.backoffMs = INITIAL_BACKOFF_MS;
|
|
94
|
+
this.consecutiveFailures = 0;
|
|
90
95
|
}
|
|
91
96
|
else {
|
|
92
97
|
this.requeueBatch(batch);
|
|
93
|
-
this.
|
|
98
|
+
this.handleFailure();
|
|
94
99
|
}
|
|
95
100
|
}
|
|
96
101
|
catch {
|
|
97
102
|
this.requeueBatch(batch);
|
|
98
|
-
this.
|
|
103
|
+
this.handleFailure();
|
|
99
104
|
}
|
|
100
105
|
finally {
|
|
101
106
|
this.flushing = false;
|
|
@@ -111,8 +116,21 @@ export class LeaderForwardingLogSink {
|
|
|
111
116
|
logger.warn(`[ForwardingSink] Buffer full (${MAX_BUFFER_SIZE}), dropping ${batch.length} entries`);
|
|
112
117
|
}
|
|
113
118
|
}
|
|
114
|
-
|
|
115
|
-
|
|
119
|
+
handleFailure() {
|
|
120
|
+
this.consecutiveFailures++;
|
|
121
|
+
if (this.consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
|
|
122
|
+
if (!this.gaveUp) {
|
|
123
|
+
this.gaveUp = true;
|
|
124
|
+
logger.info(`[ForwardingSink] Leader not running web console — log forwarding disabled after ${this.consecutiveFailures} failed attempts. Buffered ${this.buffer.length} entries discarded.`);
|
|
125
|
+
this.buffer.length = 0;
|
|
126
|
+
if (this.flushTimer) {
|
|
127
|
+
clearInterval(this.flushTimer);
|
|
128
|
+
this.flushTimer = null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
logger.debug(`[ForwardingSink] Leader unreachable, backoff ${this.backoffMs}ms (attempt ${this.consecutiveFailures}/${MAX_CONSECUTIVE_FAILURES}, buffered: ${this.buffer.length})`);
|
|
116
134
|
this.backoffMs = Math.min(this.backoffMs * 2, MAX_BACKOFF_MS);
|
|
117
135
|
}
|
|
118
136
|
}
|
|
@@ -194,4 +212,4 @@ export class SessionHeartbeat {
|
|
|
194
212
|
}
|
|
195
213
|
}
|
|
196
214
|
}
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRm9yd2FyZGluZ1NpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRm9yd2FyZGluZ1NpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLDJEQUEyRDtBQUMzRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFFL0IsaUNBQWlDO0FBQ2pDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUV0QixxQ0FBcUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFFaEMsNENBQTRDO0FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBRWpDLGlDQUFpQztBQUNqQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFFOUIsZ0NBQWdDO0FBQ2hDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQU9mO0lBQ0E7SUFQRixNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUN4QyxVQUFVLEdBQTBDLElBQUksQ0FBQztJQUN6RCxTQUFTLEdBQUcsa0JBQWtCLENBQUM7SUFDL0IsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV6QixZQUNtQixTQUFpQixFQUNqQixTQUFpQjtRQURqQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFFbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDekUsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdB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O1lBQ3hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUEwQztRQUNoRSxJQUFJLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUV6RSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLHFCQUFxQixFQUFFO2dCQUNsRCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLEtBQUs7b0JBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29CQUNiLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtpQkFDcEMsQ0FBQztnQkFDRixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvcndhcmRpbmcgc2lua3MgZm9yIGZvbGxvd2VyIE1DUCBzZXJ2ZXJzLlxuICpcbiAqIFdoZW4gYSBzZXJ2ZXIgYmVjb21lcyBhIGZvbGxvd2VyIGluIHRoZSB1bmlmaWVkIGNvbnNvbGUgZWxlY3Rpb24sIGl0XG4gKiByZWdpc3RlcnMgdGhlc2Ugc2lua3Mgd2l0aCBpdHMgTG9nTWFuYWdlciBhbmQgTWV0cmljc01hbmFnZXIuIEluc3RlYWRcbiAqIG9mIGJyb2FkY2FzdGluZyB0byBsb2NhbCBTU0UgY2xpZW50cywgZW50cmllcyBhcmUgYmF0Y2gtUE9TVGVkIHRvXG4gKiB0aGUgbGVhZGVyJ3MgaW5nZXN0aW9uIGVuZHBvaW50cy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQmF0Y2ggYnVmZmVyaW5nICg1MCBlbnRyaWVzIG9yIDFzIGZsdXNoLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QpXG4gKiAtIEluLW1lbW9yeSBidWZmZXIgdXAgdG8gMTAsMDAwIGVudHJpZXMgb24gbGVhZGVyIGZhaWx1cmVcbiAqIC0gRXhwb25lbnRpYWwgYmFja29mZiBvbiBQT1NUIGZhaWx1cmUgKDFzIOKGkiAycyDihpIgNHMsIG1heCAzMHMpXG4gKiAtIEF1dG9tYXRpYyBkcmFpbiBvbiBsZWFkZXIgcmVjb3ZlcnlcbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB0eXBlIHsgSUxvZ1NpbmssIFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG4vKiogTWF4aW11bSBlbnRyaWVzIHRvIGJ1ZmZlciB3aGVuIGxlYWRlciBpcyB1bnJlYWNoYWJsZSAqL1xuY29uc3QgTUFYX0JVRkZFUl9TSVpFID0gMTBfMDAwO1xuXG4vKiogQmF0Y2ggc2l6ZSBiZWZvcmUgZmx1c2hpbmcgKi9cbmNvbnN0IEJBVENIX1NJWkUgPSA1MDtcblxuLyoqIFRpbWUtYmFzZWQgZmx1c2ggaW50ZXJ2YWwgKG1zKSAqL1xuY29uc3QgRkxVU0hfSU5URVJWQUxfTVMgPSAxXzAwMDtcblxuLyoqIEluaXRpYWwgYmFja29mZiBkZWxheSBvbiBmYWlsdXJlIChtcykgKi9cbmNvbnN0IElOSVRJQUxfQkFDS09GRl9NUyA9IDFfMDAwO1xuXG4vKiogTWF4aW11bSBiYWNrb2ZmIGRlbGF5IChtcykgKi9cbmNvbnN0IE1BWF9CQUNLT0ZGX01TID0gMzBfMDAwO1xuXG4vKiogSFRUUCByZXF1ZXN0IHRpbWVvdXQgKG1zKSAqL1xuY29uc3QgUkVRVUVTVF9USU1FT1VUX01TID0gNV8wMDA7XG5cbi8qKlxuICogSUxvZ1NpbmsgdGhhdCBiYXRjaC1QT1NUcyBlbnRyaWVzIHRvIHRoZSBsZWFkZXIncyAvYXBpL2luZ2VzdC9sb2dzLlxuICovXG5leHBvcnQgY2xhc3MgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsgaW1wbGVtZW50cyBJTG9nU2luayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBVbmlmaWVkTG9nRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIGZsdXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJhY2tvZmZNcyA9IElOSVRJQUxfQkFDS09GRl9NUztcbiAgcHJpdmF0ZSBmbHVzaGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIHRoaXMuZmx1c2hUaW1lciA9IHNldEludGVydmFsKCgpID0+IHRoaXMuZmx1c2hCdWZmZXIoKSwgRkxVU0hfSU5URVJWQUxfTVMpO1xuICAgIHRoaXMuZmx1c2hUaW1lci51bnJlZigpO1xuICB9XG5cbiAgd3JpdGUoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSk6IHZvaWQge1xuICAgIC8vIFN0YW1wIHNlc3Npb24gSUQgYmVmb3JlIGJ1ZmZlcmluZ1xuICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCB9LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID49IE1BWF9CVUZGRVJfU0laRSkge1xuICAgICAgLy8gRXZpY3Qgb2xkZXN0IGVudHJ5IChGSUZPKVxuICAgICAgdGhpcy5idWZmZXIuc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXIucHVzaChzdGFtcGVkKTtcblxuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPj0gQkFUQ0hfU0laRSkge1xuICAgICAgdGhpcy5mbHVzaEJ1ZmZlcigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZmx1c2hCdWZmZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmZsdXNoVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5mbHVzaFRpbWVyKTtcbiAgICAgIHRoaXMuZmx1c2hUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmx1c2hCdWZmZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmx1c2hCdWZmZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZmx1c2hpbmcgfHwgdGhpcy5idWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgdGhpcy5mbHVzaGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMuYnVmZmVyLnNwbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVRVUVTVF9USU1FT1VUX01TKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLmxlYWRlclVybH0vYXBpL2luZ2VzdC9sb2dzYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCwgZW50cmllczogYmF0Y2ggfSksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMuYmFja29mZk1zID0gSU5JVElBTF9CQUNLT0ZGX01TO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXVlQmF0Y2goYmF0Y2gpO1xuICAgICAgICB0aGlzLnNjaGVkdWxlUmV0cnkoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucmVxdWV1ZUJhdGNoKGJhdGNoKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZXRyeSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXVlQmF0Y2goYmF0Y2g6IFVuaWZpZWRMb2dFbnRyeVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc3BhY2VBdmFpbGFibGUgPSBNQVhfQlVGRkVSX1NJWkUgLSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKHNwYWNlQXZhaWxhYmxlID4gMCkge1xuICAgICAgY29uc3QgdG9SZXF1ZXVlID0gYmF0Y2guc2xpY2UoMCwgc3BhY2VBdmFpbGFibGUpO1xuICAgICAgdGhpcy5idWZmZXIudW5zaGlmdCguLi50b1JlcXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihgW0ZvcndhcmRpbmdTaW5rXSBCdWZmZXIgZnVsbCAoJHtNQVhfQlVGRkVSX1NJWkV9KSwgZHJvcHBpbmcgJHtiYXRjaC5sZW5ndGh9IGVudHJpZXNgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlUmV0cnkoKTogdm9pZCB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbRm9yd2FyZGluZ1NpbmtdIExlYWRlciB1bnJlYWNoYWJsZSwgYmFja29mZiAke3RoaXMuYmFja29mZk1zfW1zIChidWZmZXJlZDogJHt0aGlzLmJ1ZmZlci5sZW5ndGh9KWApO1xuICAgIHRoaXMuYmFja29mZk1zID0gTWF0aC5taW4odGhpcy5iYWNrb2ZmTXMgKiAyLCBNQVhfQkFDS09GRl9NUyk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3J3YXJkcyBtZXRyaWMgc25hcHNob3RzIHRvIHRoZSBsZWFkZXIncyAvYXBpL2luZ2VzdC9tZXRyaWNzLlxuICovXG5leHBvcnQgY2xhc3MgTGVhZGVyRm9yd2FyZGluZ01ldHJpY3NTaW5rIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsZWFkZXJVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25JZDogc3RyaW5nLFxuICApIHt9XG5cbiAgYXN5bmMgb25TbmFwc2hvdChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVRVUVTVF9USU1FT1VUX01TKTtcblxuICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5sZWFkZXJVcmx9L2FwaS9pbmdlc3QvbWV0cmljc2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsIHNuYXBzaG90IH0pLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tGb3J3YXJkaW5nU2lua10gRmFpbGVkIHRvIGZvcndhcmQgbWV0cmljcyBzbmFwc2hvdCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlbmRzIHNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cyB0byB0aGUgbGVhZGVyLlxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkhlYXJ0YmVhdCB7XG4gIHByaXZhdGUgaGVhcnRiZWF0VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBpZDogbnVtYmVyLFxuICApIHt9XG5cbiAgLyoqIE5vdGlmeSB0aGUgbGVhZGVyIHRoYXQgdGhpcyBzZXNzaW9uIGhhcyBzdGFydGVkICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KCdzdGFydGVkJyk7XG5cbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZW5kRXZlbnQoJ2hlYXJ0YmVhdCcpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9LCAxMF8wMDApO1xuICAgIHRoaXMuaGVhcnRiZWF0VGltZXIudW5yZWYoKTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGxlYWRlciB0aGF0IHRoaXMgc2Vzc2lvbiBpcyBzdG9wcGluZyAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmhlYXJ0YmVhdFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0VGltZXIpO1xuICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KCdzdG9wcGVkJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRFdmVudChldmVudDogJ3N0YXJ0ZWQnIHwgJ3N0b3BwZWQnIHwgJ2hlYXJ0YmVhdCcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVRVUVTVF9USU1FT1VUX01TKTtcblxuICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5sZWFkZXJVcmx9L2FwaS9pbmdlc3Qvc2Vzc2lvbmAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBwaWQ6IHRoaXMucGlkLFxuICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KSxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2Vzc2lvbkhlYXJ0YmVhdF0gRmFpbGVkIHRvIHNlbmQgJHtldmVudH0gZXZlbnRgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyRm9yd2FyZGluZ1NpbmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvTGVhZGVyRm9yd2FyZGluZ1NpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DLDJEQUEyRDtBQUMzRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFFL0IsaUNBQWlDO0FBQ2pDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUV0QixxQ0FBcUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFFaEMsNENBQTRDO0FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBRWpDLGlDQUFpQztBQUNqQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFFOUIsOERBQThEO0FBQzlELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DLGdDQUFnQztBQUNoQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFTZjtJQUNBO0lBVEYsTUFBTSxHQUFzQixFQUFFLENBQUM7SUFDeEMsVUFBVSxHQUEwQyxJQUFJLENBQUM7SUFDekQsU0FBUyxHQUFHLGtCQUFrQixDQUFDO0lBQy9CLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFdkIsWUFDbUIsU0FBaUIsRUFDakIsU0FBaUI7UUFEakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBRWxDLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMs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QUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXpFLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMscUJBQXFCLEVBQUU7Z0JBQ2xELE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtnQkFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDekIsS0FBSztvQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ2IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUNwQyxDQUFDO2dCQUNGLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTthQUMxQixDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9yd2FyZGluZyBzaW5rcyBmb3IgZm9sbG93ZXIgTUNQIHNlcnZlcnMuXG4gKlxuICogV2hlbiBhIHNlcnZlciBiZWNvbWVzIGEgZm9sbG93ZXIgaW4gdGhlIHVuaWZpZWQgY29uc29sZSBlbGVjdGlvbiwgaXRcbiAqIHJlZ2lzdGVycyB0aGVzZSBzaW5rcyB3aXRoIGl0cyBMb2dNYW5hZ2VyIGFuZCBNZXRyaWNzTWFuYWdlci4gSW5zdGVhZFxuICogb2YgYnJvYWRjYXN0aW5nIHRvIGxvY2FsIFNTRSBjbGllbnRzLCBlbnRyaWVzIGFyZSBiYXRjaC1QT1NUZWQgdG9cbiAqIHRoZSBsZWFkZXIncyBpbmdlc3Rpb24gZW5kcG9pbnRzLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBCYXRjaCBidWZmZXJpbmcgKDUwIGVudHJpZXMgb3IgMXMgZmx1c2gsIHdoaWNoZXZlciBjb21lcyBmaXJzdClcbiAqIC0gSW4tbWVtb3J5IGJ1ZmZlciB1cCB0byAxMCwwMDAgZW50cmllcyBvbiBsZWFkZXIgZmFpbHVyZVxuICogLSBFeHBvbmVudGlhbCBiYWNrb2ZmIG9uIFBPU1QgZmFpbHVyZSAoMXMg4oaSIDJzIOKGkiA0cywgbWF4IDMwcylcbiAqIC0gQXV0b21hdGljIGRyYWluIG9uIGxlYWRlciByZWNvdmVyeVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJTG9nU2luaywgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8qKiBNYXhpbXVtIGVudHJpZXMgdG8gYnVmZmVyIHdoZW4gbGVhZGVyIGlzIHVucmVhY2hhYmxlICovXG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMF8wMDA7XG5cbi8qKiBCYXRjaCBzaXplIGJlZm9yZSBmbHVzaGluZyAqL1xuY29uc3QgQkFUQ0hfU0laRSA9IDUwO1xuXG4vKiogVGltZS1iYXNlZCBmbHVzaCBpbnRlcnZhbCAobXMpICovXG5jb25zdCBGTFVTSF9JTlRFUlZBTF9NUyA9IDFfMDAwO1xuXG4vKiogSW5pdGlhbCBiYWNrb2ZmIGRlbGF5IG9uIGZhaWx1cmUgKG1zKSAqL1xuY29uc3QgSU5JVElBTF9CQUNLT0ZGX01TID0gMV8wMDA7XG5cbi8qKiBNYXhpbXVtIGJhY2tvZmYgZGVsYXkgKG1zKSAqL1xuY29uc3QgTUFYX0JBQ0tPRkZfTVMgPSAzMF8wMDA7XG5cbi8qKiBHaXZlIHVwIGZvcndhcmRpbmcgYWZ0ZXIgdGhpcyBtYW55IGNvbnNlY3V0aXZlIGZhaWx1cmVzICovXG5jb25zdCBNQVhfQ09OU0VDVVRJVkVfRkFJTFVSRVMgPSA1O1xuXG4vKiogSFRUUCByZXF1ZXN0IHRpbWVvdXQgKG1zKSAqL1xuY29uc3QgUkVRVUVTVF9USU1FT1VUX01TID0gNV8wMDA7XG5cbi8qKlxuICogSUxvZ1NpbmsgdGhhdCBiYXRjaC1QT1NUcyBlbnRyaWVzIHRvIHRoZSBsZWFkZXIncyAvYXBpL2luZ2VzdC9sb2dzLlxuICovXG5leHBvcnQgY2xhc3MgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsgaW1wbGVtZW50cyBJTG9nU2luayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBVbmlmaWVkTG9nRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIGZsdXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJhY2tvZmZNcyA9IElOSVRJQUxfQkFDS09GRl9NUztcbiAgcHJpdmF0ZSBmbHVzaGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICBwcml2YXRlIGdhdmVVcCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIHRoaXMuZmx1c2hUaW1lciA9IHNldEludGVydmFsKCgpID0+IHRoaXMuZmx1c2hCdWZmZXIoKSwgRkxVU0hfSU5URVJWQUxfTVMpO1xuICAgIHRoaXMuZmx1c2hUaW1lci51bnJlZigpO1xuICB9XG5cbiAgd3JpdGUoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSk6IHZvaWQge1xuICAgIC8vIFN0YW1wIHNlc3Npb24gSUQgYmVmb3JlIGJ1ZmZlcmluZ1xuICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCB9LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID49IE1BWF9CVUZGRVJfU0laRSkge1xuICAgICAgLy8gRXZpY3Qgb2xkZXN0IGVudHJ5IChGSUZPKVxuICAgICAgdGhpcy5idWZmZXIuc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy5idWZmZXIucHVzaChzdGFtcGVkKTtcblxuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPj0gQkFUQ0hfU0laRSkge1xuICAgICAgdGhpcy5mbHVzaEJ1ZmZlcigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZmx1c2hCdWZmZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmZsdXNoVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5mbHVzaFRpbWVyKTtcbiAgICAgIHRoaXMuZmx1c2hUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZmx1c2hCdWZmZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmx1c2hCdWZmZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZmx1c2hpbmcgfHwgdGhpcy5idWZmZXIubGVuZ3RoID09PSAwIHx8IHRoaXMuZ2F2ZVVwKSByZXR1cm47XG4gICAgdGhpcy5mbHVzaGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMuYnVmZmVyLnNwbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgUkVRVUVTVF9USU1FT1VUX01TKTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLmxlYWRlclVybH0vYXBpL2luZ2VzdC9sb2dzYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCwgZW50cmllczogYmF0Y2ggfSksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMuYmFja29mZk1zID0gSU5JVElBTF9CQUNLT0ZGX01TO1xuICAgICAgICB0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXVlQmF0Y2goYmF0Y2gpO1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWx1cmUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucmVxdWV1ZUJhdGNoKGJhdGNoKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbHVyZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXVlQmF0Y2goYmF0Y2g6IFVuaWZpZWRMb2dFbnRyeVtdKTogdm9pZCB7XG4gICAgY29uc3Qgc3BhY2VBdmFpbGFibGUgPSBNQVhfQlVGRkVSX1NJWkUgLSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKHNwYWNlQXZhaWxhYmxlID4gMCkge1xuICAgICAgY29uc3QgdG9SZXF1ZXVlID0gYmF0Y2guc2xpY2UoMCwgc3BhY2VBdmFpbGFibGUpO1xuICAgICAgdGhpcy5idWZmZXIudW5zaGlmdCguLi50b1JlcXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybihgW0ZvcndhcmRpbmdTaW5rXSBCdWZmZXIgZnVsbCAoJHtNQVhfQlVGRkVSX1NJWkV9KSwgZHJvcHBpbmcgJHtiYXRjaC5sZW5ndGh9IGVudHJpZXNgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZhaWx1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5jb25zZWN1dGl2ZUZhaWx1cmVzKys7XG5cbiAgICBpZiAodGhpcy5jb25zZWN1dGl2ZUZhaWx1cmVzID49IE1BWF9DT05TRUNVVElWRV9GQUlMVVJFUykge1xuICAgICAgaWYgKCF0aGlzLmdhdmVVcCkge1xuICAgICAgICB0aGlzLmdhdmVVcCA9IHRydWU7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbRm9yd2FyZGluZ1NpbmtdIExlYWRlciBub3QgcnVubmluZyB3ZWIgY29uc29sZSDigJQgbG9nIGZvcndhcmRpbmcgZGlzYWJsZWQgYWZ0ZXIgJHt0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXN9IGZhaWxlZCBhdHRlbXB0cy4gQnVmZmVyZWQgJHt0aGlzLmJ1ZmZlci5sZW5ndGh9IGVudHJpZXMgZGlzY2FyZGVkLmApO1xuICAgICAgICB0aGlzLmJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICBpZiAodGhpcy5mbHVzaFRpbWVyKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmZsdXNoVGltZXIpO1xuICAgICAgICAgIHRoaXMuZmx1c2hUaW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtGb3J3YXJkaW5nU2lua10gTGVhZGVyIHVucmVhY2hhYmxlLCBiYWNrb2ZmICR7dGhpcy5iYWNrb2ZmTXN9bXMgKGF0dGVtcHQgJHt0aGlzLmNvbnNlY3V0aXZlRmFpbHVyZXN9LyR7TUFYX0NPTlNFQ1VUSVZFX0ZBSUxVUkVTfSwgYnVmZmVyZWQ6ICR7dGhpcy5idWZmZXIubGVuZ3RofSlgKTtcbiAgICB0aGlzLmJhY2tvZmZNcyA9IE1hdGgubWluKHRoaXMuYmFja29mZk1zICogMiwgTUFYX0JBQ0tPRkZfTVMpO1xuICB9XG59XG5cbi8qKlxuICogRm9yd2FyZHMgbWV0cmljIHNuYXBzaG90cyB0byB0aGUgbGVhZGVyJ3MgL2FwaS9pbmdlc3QvbWV0cmljcy5cbiAqL1xuZXhwb3J0IGNsYXNzIExlYWRlckZvcndhcmRpbmdNZXRyaWNzU2luayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGVhZGVyVXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgKSB7fVxuXG4gIGFzeW5jIG9uU25hcHNob3Qoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFUVVFU1RfVElNRU9VVF9NUyk7XG5cbiAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMubGVhZGVyVXJsfS9hcGkvaW5nZXN0L21ldHJpY3NgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLCBzbmFwc2hvdCB9KSxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbRm9yd2FyZGluZ1NpbmtdIEZhaWxlZCB0byBmb3J3YXJkIG1ldHJpY3Mgc25hcHNob3QnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZW5kcyBzZXNzaW9uIGxpZmVjeWNsZSBldmVudHMgdG8gdGhlIGxlYWRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb25IZWFydGJlYXQge1xuICBwcml2YXRlIGhlYXJ0YmVhdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxlYWRlclVybDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwaWQ6IG51bWJlcixcbiAgKSB7fVxuXG4gIC8qKiBOb3RpZnkgdGhlIGxlYWRlciB0aGF0IHRoaXMgc2Vzc2lvbiBoYXMgc3RhcnRlZCAqL1xuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRFdmVudCgnc3RhcnRlZCcpO1xuXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuc2VuZEV2ZW50KCdoZWFydGJlYXQnKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfSwgMTBfMDAwKTtcbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyLnVucmVmKCk7XG4gIH1cblxuICAvKiogTm90aWZ5IHRoZSBsZWFkZXIgdGhhdCB0aGlzIHNlc3Npb24gaXMgc3RvcHBpbmcgKi9cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5oZWFydGJlYXRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0YmVhdFRpbWVyKTtcbiAgICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnNlbmRFdmVudCgnc3RvcHBlZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRXZlbnQoZXZlbnQ6ICdzdGFydGVkJyB8ICdzdG9wcGVkJyB8ICdoZWFydGJlYXQnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIFJFUVVFU1RfVElNRU9VVF9NUyk7XG5cbiAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMubGVhZGVyVXJsfS9hcGkvaW5nZXN0L3Nlc3Npb25gLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgcGlkOiB0aGlzLnBpZCxcbiAgICAgICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSksXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICB9KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25IZWFydGJlYXRdIEZhaWxlZCB0byBzZW5kICR7ZXZlbnR9IGV2ZW50YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAElF,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAU7B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,EAAE,aAAa,CAAC;IAC1B,0BAA0B;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,qFAAqF;IACrF,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,0DAA0D;IAC1D,eAAe,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;QAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IACzH,8DAA8D;IAC9D,iBAAiB,EAAE,CAAC,SAAS,EAAE;QAAE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;QAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAA;KAAE,EAAE,WAAW,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACtL;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkBvG"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* @since v2.1.0 — Issue #1700
|
|
14
14
|
*/
|
|
15
15
|
import { logger } from '../../utils/logger.js';
|
|
16
|
-
import { electLeader, startHeartbeat, registerLeaderCleanup, } from './LeaderElection.js';
|
|
16
|
+
import { electLeader, isLeaderWebConsoleReachable, forceClaimLeadership, startHeartbeat, registerLeaderCleanup, } from './LeaderElection.js';
|
|
17
17
|
import { createIngestRoutes } from './IngestRoutes.js';
|
|
18
18
|
import { LeaderForwardingLogSink, SessionHeartbeat, } from './LeaderForwardingSink.js';
|
|
19
19
|
/** Fixed port for the unified console leader */
|
|
@@ -25,7 +25,16 @@ const CONSOLE_PORT = 3939;
|
|
|
25
25
|
* or sets up event forwarding (follower).
|
|
26
26
|
*/
|
|
27
27
|
export async function startUnifiedConsole(options) {
|
|
28
|
-
|
|
28
|
+
let election = await electLeader(options.sessionId, CONSOLE_PORT);
|
|
29
|
+
// If we lost the election, check if the leader is actually running a web console.
|
|
30
|
+
// An MCP stdio process may hold leadership but not serve web routes.
|
|
31
|
+
// In that case, force a takeover so the web console works properly.
|
|
32
|
+
if (election.role === 'follower') {
|
|
33
|
+
const reachable = await isLeaderWebConsoleReachable(election.leaderInfo);
|
|
34
|
+
if (!reachable) {
|
|
35
|
+
election = await forceClaimLeadership(options.sessionId, CONSOLE_PORT);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
29
38
|
if (election.role === 'leader') {
|
|
30
39
|
return startAsLeader(options, election);
|
|
31
40
|
}
|
|
@@ -116,4 +125,4 @@ async function startAsFollower(options, election) {
|
|
|
116
125
|
},
|
|
117
126
|
};
|
|
118
127
|
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU1ILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxxQkFBcUIsR0FFdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUNqQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLGdEQUFnRDtBQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFrQzFCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxPQUE4QjtJQUN0RSxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXBFLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixPQUFPLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsYUFBYSxDQUMxQixPQUE4QixFQUM5QixRQUF3QjtJQUV4QixNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFeEQsZ0ZBQWdGO0lBQ2hGLElBQUksYUFBNkQsQ0FBQztJQUNsRSxJQUFJLHFCQUF1RSxDQUFDO0lB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LHdDQUF3QztJQUN4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRTtRQUMvQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVTtRQUNoRSxhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRztRQUNoRixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUztLQUNoRCxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtRQUNSLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCB3ZWIgY29uc29sZSBvcmNoZXN0cmF0b3IuXG4gKlxuICogVGllcyB0b2dldGhlciBsZWFkZXIgZWxlY3Rpb24sIGNvbnNvbGUgc3RhcnR1cCwgZm9sbG93ZXIgd2lyaW5nLFxuICogYW5kIHNlc3Npb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnRcbiAqIGNhbGxlZCBieSB0aGUgREkgY29udGFpbmVyIGR1cmluZyBkZWZlcnJlZCBzZXR1cC5cbiAqXG4gKiBGbG93OlxuICogMS4gUnVuIGxlYWRlciBlbGVjdGlvbiAocmVhZCBsb2NrIGZpbGUsIGNsYWltIG9yIGZvbGxvdylcbiAqIDIuIElmIGxlYWRlcjogc3RhcnQgd2ViIHNlcnZlciBvbiBmaXhlZCBwb3J0LCBtb3VudCBpbmdlc3Qgcm91dGVzLCBzdGFydCBoZWFydGJlYXRcbiAqIDMuIElmIGZvbGxvd2VyOiByZWdpc3RlciBmb3J3YXJkaW5nIHNpbmtzIHdpdGggTG9nTWFuYWdlciwgc3RhcnQgc2Vzc2lvbiBoZWFydGJlYXRcbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uLy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGVsZWN0TGVhZGVyLFxuICBzdGFydEhlYXJ0YmVhdCxcbiAgcmVnaXN0ZXJMZWFkZXJDbGVhbnVwLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcbmltcG9ydCB7IGNyZWF0ZUluZ2VzdFJvdXRlcyB9IGZyb20gJy4vSW5nZXN0Um91dGVzLmpzJztcbmltcG9ydCB7XG4gIExlYWRlckZvcndhcmRpbmdMb2dTaW5rLFxuICBTZXNzaW9uSGVhcnRiZWF0LFxufSBmcm9tICcuL0xlYWRlckZvcndhcmRpbmdTaW5rLmpzJztcblxuLyoqIEZpeGVkIHBvcnQgZm9yIHRoZSB1bmlmaWVkIGNvbnNvbGUgbGVhZGVyICovXG5jb25zdCBDT05TT0xFX1BPUlQgPSAzOTM5O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVPcHRpb25zIHtcbiAgLyoqIFRoaXMgcHJvY2VzcydzIHVuaXF1ZSBzZXNzaW9uIElEICovXG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICAvKiogUG9ydGZvbGlvIGJhc2UgZGlyZWN0b3J5IChmb3Igc3RhcnRXZWJTZXJ2ZXIpICovXG4gIHBvcnRmb2xpb0Rpcjogc3RyaW5nO1xuICAvKiogTG9nIG1lbW9yeSBzaW5rIChmb3IgY29uc29sZSBoaXN0b3J5KSAqL1xuICBtZW1vcnlTaW5rOiBNZW1vcnlMb2dTaW5rO1xuICAvKiogTWV0cmljcyBtZW1vcnkgc2luayAqL1xuICBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rO1xuICAvKiogTUNQLUFRTCBoYW5kbGVyIGZvciBwZXJtaXNzaW9uIHJvdXRlcyAodHlwZWQgYXMgYW55IHRvIGF2b2lkIGNpcmN1bGFyIGltcG9ydHMpICovXG4gIG1jcEFxbEhhbmRsZXI/OiBhbnk7XG4gIC8qKiBDYWxsYmFjayB0byByZWdpc3RlciBhIGxvZyBzaW5rIHdpdGggdGhlIExvZ01hbmFnZXIgKi9cbiAgcmVnaXN0ZXJMb2dTaW5rOiAoc2luazogeyB3cml0ZShlbnRyeTogVW5pZmllZExvZ0VudHJ5KTogdm9pZDsgZmx1c2goKTogUHJvbWlzZTx2b2lkPjsgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB9KSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgdG8gd2lyZSBTU0UgYnJvYWRjYXN0cyBhZnRlciB3ZWIgc2VydmVyIHN0YXJ0cyAqL1xuICB3aXJlU1NFQnJvYWRjYXN0czogKHdlYlJlc3VsdDogeyBsb2dCcm9hZGNhc3Q/OiAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDsgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90KSA9PiB2b2lkIH0sIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1NpbmspID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVSZXN1bHQge1xuICByb2xlOiAnbGVhZGVyJyB8ICdmb2xsb3dlcic7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgLyoqIFBvcnQgdGhlIGNvbnNvbGUgaXMgcnVubmluZyBvbiAobGVhZGVyIG9ubHkpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBDbGVhbnVwIGZ1bmN0aW9uIHRvIGNhbGwgb24gc2h1dGRvd24gKi9cbiAgY2xlYW51cDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBTdGFydCB0aGUgdW5pZmllZCB3ZWIgY29uc29sZS5cbiAqXG4gKiBSdW5zIGxlYWRlciBlbGVjdGlvbiwgdGhlbiBlaXRoZXIgc3RhcnRzIHRoZSBmdWxsIGNvbnNvbGUgKGxlYWRlcilcbiAqIG9yIHNldHMgdXAgZXZlbnQgZm9yd2FyZGluZyAoZm9sbG93ZXIpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRVbmlmaWVkQ29uc29sZShvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMpOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IGVsZWN0aW9uID0gYXdhaXQgZWxlY3RMZWFkZXIob3B0aW9ucy5zZXNzaW9uSWQsIENPTlNPTEVfUE9SVCk7XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdsZWFkZXInKSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNMZWFkZXIob3B0aW9ucywgZWxlY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGFydEFzRm9sbG93ZXIob3B0aW9ucywgZWxlY3Rpb24pO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnQgYXMgdGhlIGNvbnNvbGUgbGVhZGVyLlxuICogQmluZHMgcG9ydCAzOTM5LCBtb3VudHMgYWxsIHJvdXRlcyBpbmNsdWRpbmcgaW5nZXN0aW9uLCBzdGFydHMgaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzTGVhZGVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbik6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgY29uc3QgeyBzdGFydFdlYlNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2ZXIuanMnKTtcblxuICAvLyBQcmUtY3JlYXRlIGEgcGxhY2Vob2xkZXIgYnJvYWRjYXN0IHRoYXQgd2UnbGwgd2lyZSB1cCBhZnRlciB0aGUgc2VydmVyIHN0YXJ0c1xuICBsZXQgbGl2ZUJyb2FkY2FzdDogKChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxpdmVNZXRyaWNzT25TbmFwc2hvdDogKChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIC8vIENyZWF0ZSBpbmdlc3Rpb24gcm91dGVzIHdpdGggYSBkZWZlcnJlZCBicm9hZGNhc3QgKHdpcmVkIGFmdGVyIHNlcnZlciBzdGFydHMpXG4gIGNvbnN0IGluZ2VzdFJlc3VsdCA9IGNyZWF0ZUluZ2VzdFJvdXRlcyh7XG4gICAgbG9nQnJvYWRjYXN0OiAoZW50cnkpID0+IGxpdmVCcm9hZGNhc3Q/LihlbnRyeSksXG4gICAgbWV0cmljc09uU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gbGl2ZU1ldHJpY3NPblNuYXBzaG90Py4oc25hcHNob3QpLFxuICB9KTtcblxuICAvLyBSZWdpc3RlciB0aGUgbGVhZGVyIGFzIGEgc2Vzc2lvblxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJMZWFkZXJTZXNzaW9uKG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG5cbiAgLy8gU3RhcnQgdGhlIHdlYiBzZXJ2ZXIgd2l0aCBpbmdlc3Qgcm91dGVzIG1vdW50ZWQgYmVmb3JlIHRoZSBTUEEgZmFsbGJhY2tcbiAgY29uc3Qgd2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoe1xuICAgIHBvcnRmb2xpb0Rpcjogb3B0aW9ucy5wb3J0Zm9saW9EaXIsXG4gICAgbWVtb3J5U2luazogb3B0aW9ucy5tZW1vcnlTaW5rLFxuICAgIG1ldHJpY3NTaW5rOiBvcHRpb25zLm1ldHJpY3NTaW5rLFxuICAgIHBvcnQ6IENPTlNPTEVfUE9SVCxcbiAgICBhZGRpdGlvbmFsUm91dGVyczogW2luZ2VzdFJlc3VsdC5yb3V0ZXJdLFxuICAgIC4uLihvcHRpb25zLm1jcEFxbEhhbmRsZXIgPyB7IG1jcEFxbEhhbmRsZXI6IG9wdGlvbnMubWNwQXFsSGFuZGxlciB9IDoge30pLFxuICB9KTtcblxuICAvLyBXaXJlIFNTRSBicm9hZGNhc3RzIGZvciB0aGlzIGxlYWRlcidzIG93biBldmVudHNcbiAgb3B0aW9ucy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG9wdGlvbnMubWV0cmljc1NpbmspO1xuXG4gIC8vIE5vdyB3aXJlIHRoZSBsaXZlIGJyb2FkY2FzdCBmdW5jdGlvbnMgaW50byB0aGUgaW5nZXN0IHJvdXRlc1xuICBpZiAod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQnJvYWRjYXN0ID0gd2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdDtcbiAgICAvLyBTdGFtcCBsZWFkZXIncyBvd24gZW50cmllcyB3aXRoIHNlc3Npb24gSURcbiAgICBsaXZlQnJvYWRjYXN0ID0gKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQgfSxcbiAgICAgIH07XG4gICAgICBvcmlnaW5hbEJyb2FkY2FzdChzdGFtcGVkKTtcbiAgICB9O1xuICB9XG4gIGxpdmVNZXRyaWNzT25TbmFwc2hvdCA9IHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdDtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBJbmdlc3Rpb24gcm91dGVzIG1vdW50ZWQnKTtcblxuICAvLyBTdGFydCBoZWFydGJlYXQgYW5kIHJlZ2lzdGVyIGNsZWFudXBcbiAgY29uc3Qgc3RvcEhlYXJ0YmVhdCA9IHN0YXJ0SGVhcnRiZWF0KGVsZWN0aW9uLmxlYWRlckluZm8pO1xuICByZWdpc3RlckxlYWRlckNsZWFudXAoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgc3RhcnRlZCcsIHtcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLCBwb3J0OiBDT05TT0xFX1BPUlQsIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgcm9sZTogJ2xlYWRlcicsIGluZ2VzdFJvdXRlczogWycvYXBpL2luZ2VzdC9sb2dzJywgJy9hcGkvaW5nZXN0L21ldHJpY3MnLCAnL2FwaS9pbmdlc3Qvc2Vzc2lvbicsICcvYXBpL3Nlc3Npb25zJ10sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2xlYWRlcicsXG4gICAgZWxlY3Rpb24sXG4gICAgcG9ydDogQ09OU09MRV9QT1JULFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIHN0b3BIZWFydGJlYXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IGFzIGEgZm9sbG93ZXIuXG4gKiBSZWdpc3RlcnMgZm9yd2FyZGluZyBzaW5rcyB3aXRoIHRoZSBMb2dNYW5hZ2VyLCBzdGFydHMgc2Vzc2lvbiBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNGb2xsb3dlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IGxlYWRlclVybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7ZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0fWA7XG5cbiAgLy8gUmVnaXN0ZXIgYSBmb3J3YXJkaW5nIGxvZyBzaW5rXG4gIGNvbnN0IGZvcndhcmRpbmdTaW5rID0gbmV3IExlYWRlckZvcndhcmRpbmdMb2dTaW5rKGxlYWRlclVybCwgb3B0aW9ucy5zZXNzaW9uSWQpO1xuICBvcHRpb25zLnJlZ2lzdGVyTG9nU2luayhmb3J3YXJkaW5nU2luayk7XG5cbiAgLy8gU3RhcnQgc2Vzc2lvbiBoZWFydGJlYXQgdG8gdGhlIGxlYWRlclxuICBjb25zdCBzZXNzaW9uSGVhcnRiZWF0ID0gbmV3IFNlc3Npb25IZWFydGJlYXQobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQpO1xuICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0YXJ0KCk7XG5cbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgc3RhcnRlZCcsIHtcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLCBwaWQ6IHByb2Nlc3MucGlkLCByb2xlOiAnZm9sbG93ZXInLFxuICAgIGxlYWRlclNlc3Npb246IGVsZWN0aW9uLmxlYWRlckluZm8uc2Vzc2lvbklkLCBsZWFkZXJQaWQ6IGVsZWN0aW9uLmxlYWRlckluZm8ucGlkLFxuICAgIGxlYWRlclBvcnQ6IGVsZWN0aW9uLmxlYWRlckluZm8ucG9ydCwgbGVhZGVyVXJsLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgZWxlY3Rpb24sXG4gICAgY2xlYW51cDogYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdG9wKCk7XG4gICAgICBhd2FpdCBmb3J3YXJkaW5nU2luay5jbG9zZSgpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU1ILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixHQUV0QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsZ0RBQWdEO0FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQWtDMUI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE9BQThCO0lBQ3RFLElBQUksUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFbEUsa0ZBQWtGO0lBQ2xGLHFFQUFxRTtJQUNyRSxvRUFBb0U7SUFDcEUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLE1BQU0sMkJBQTJCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLFFBQVEsR0FBRyxNQUFNLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxhQUFhLENB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biAqIFVuaWZpZWQgd2ViIGNvbnNvbGUgb3JjaGVzdHJhdG9yLlxuICpcbiAqIFRpZXMgdG9nZXRoZXIgbGVhZGVyIGVsZWN0aW9uLCBjb25zb2xlIHN0YXJ0dXAsIGZvbGxvd2VyIHdpcmluZyxcbiAqIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50XG4gKiBjYWxsZWQgYnkgdGhlIERJIGNvbnRhaW5lciBkdXJpbmcgZGVmZXJyZWQgc2V0dXAuXG4gKlxuICogRmxvdzpcbiAqIDEuIFJ1biBsZWFkZXIgZWxlY3Rpb24gKHJlYWQgbG9jayBmaWxlLCBjbGFpbSBvciBmb2xsb3cpXG4gKiAyLiBJZiBsZWFkZXI6IHN0YXJ0IHdlYiBzZXJ2ZXIgb24gZml4ZWQgcG9ydCwgbW91bnQgaW5nZXN0IHJvdXRlcywgc3RhcnQgaGVhcnRiZWF0XG4gKiAzLiBJZiBmb2xsb3dlcjogcmVnaXN0ZXIgZm9yd2FyZGluZyBzaW5rcyB3aXRoIExvZ01hbmFnZXIsIHN0YXJ0IHNlc3Npb24gaGVhcnRiZWF0XG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi8uLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBlbGVjdExlYWRlcixcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlLFxuICBmb3JjZUNsYWltTGVhZGVyc2hpcCxcbiAgc3RhcnRIZWFydGJlYXQsXG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCxcbiAgdHlwZSBFbGVjdGlvblJlc3VsdCxcbn0gZnJvbSAnLi9MZWFkZXJFbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVJbmdlc3RSb3V0ZXMgfSBmcm9tICcuL0luZ2VzdFJvdXRlcy5qcyc7XG5pbXBvcnQge1xuICBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgU2Vzc2lvbkhlYXJ0YmVhdCxcbn0gZnJvbSAnLi9MZWFkZXJGb3J3YXJkaW5nU2luay5qcyc7XG5cbi8qKiBGaXhlZCBwb3J0IGZvciB0aGUgdW5pZmllZCBjb25zb2xlIGxlYWRlciAqL1xuY29uc3QgQ09OU09MRV9QT1JUID0gMzkzOTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlT3B0aW9ucyB7XG4gIC8qKiBUaGlzIHByb2Nlc3MncyB1bmlxdWUgc2Vzc2lvbiBJRCAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFBvcnRmb2xpbyBiYXNlIGRpcmVjdG9yeSAoZm9yIHN0YXJ0V2ViU2VydmVyKSAqL1xuICBwb3J0Zm9saW9EaXI6IHN0cmluZztcbiAgLyoqIExvZyBtZW1vcnkgc2luayAoZm9yIGNvbnNvbGUgaGlzdG9yeSkgKi9cbiAgbWVtb3J5U2luazogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1ldHJpY3MgbWVtb3J5IHNpbmsgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIE1DUC1BUUwgaGFuZGxlciBmb3IgcGVybWlzc2lvbiByb3V0ZXMgKHR5cGVkIGFzIGFueSB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzKSAqL1xuICBtY3BBcWxIYW5kbGVyPzogYW55O1xuICAvKiogQ2FsbGJhY2sgdG8gcmVnaXN0ZXIgYSBsb2cgc2luayB3aXRoIHRoZSBMb2dNYW5hZ2VyICovXG4gIHJlZ2lzdGVyTG9nU2luazogKHNpbms6IHsgd3JpdGUoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSk6IHZvaWQ7IGZsdXNoKCk6IFByb21pc2U8dm9pZD47IGNsb3NlKCk6IFByb21pc2U8dm9pZD4gfSkgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHRvIHdpcmUgU1NFIGJyb2FkY2FzdHMgYWZ0ZXIgd2ViIHNlcnZlciBzdGFydHMgKi9cbiAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQ6IHsgbG9nQnJvYWRjYXN0PzogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7IG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCB9LCBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlUmVzdWx0IHtcbiAgcm9sZTogJ2xlYWRlcicgfCAnZm9sbG93ZXInO1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIC8qKiBQb3J0IHRoZSBjb25zb2xlIGlzIHJ1bm5pbmcgb24gKGxlYWRlciBvbmx5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogQ2xlYW51cCBmdW5jdGlvbiB0byBjYWxsIG9uIHNodXRkb3duICovXG4gIGNsZWFudXA6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBsZXQgZWxlY3Rpb24gPSBhd2FpdCBlbGVjdExlYWRlcihvcHRpb25zLnNlc3Npb25JZCwgQ09OU09MRV9QT1JUKTtcblxuICAvLyBJZiB3ZSBsb3N0IHRoZSBlbGVjdGlvbiwgY2hlY2sgaWYgdGhlIGxlYWRlciBpcyBhY3R1YWxseSBydW5uaW5nIGEgd2ViIGNvbnNvbGUuXG4gIC8vIEFuIE1DUCBzdGRpbyBwcm9jZXNzIG1heSBob2xkIGxlYWRlcnNoaXAgYnV0IG5vdCBzZXJ2ZSB3ZWIgcm91dGVzLlxuICAvLyBJbiB0aGF0IGNhc2UsIGZvcmNlIGEgdGFrZW92ZXIgc28gdGhlIHdlYiBjb25zb2xlIHdvcmtzIHByb3Blcmx5LlxuICBpZiAoZWxlY3Rpb24ucm9sZSA9PT0gJ2ZvbGxvd2VyJykge1xuICAgIGNvbnN0IHJlYWNoYWJsZSA9IGF3YWl0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZShlbGVjdGlvbi5sZWFkZXJJbmZvKTtcbiAgICBpZiAoIXJlYWNoYWJsZSkge1xuICAgICAgZWxlY3Rpb24gPSBhd2FpdCBmb3JjZUNsYWltTGVhZGVyc2hpcChvcHRpb25zLnNlc3Npb25JZCwgQ09OU09MRV9QT1JUKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZWxlY3Rpb24ucm9sZSA9PT0gJ2xlYWRlcicpIHtcbiAgICByZXR1cm4gc3RhcnRBc0xlYWRlcihvcHRpb25zLCBlbGVjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNGb2xsb3dlcihvcHRpb25zLCBlbGVjdGlvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhcyB0aGUgY29uc29sZSBsZWFkZXIuXG4gKiBCaW5kcyBwb3J0IDM5MzksIG1vdW50cyBhbGwgcm91dGVzIGluY2x1ZGluZyBpbmdlc3Rpb24sIHN0YXJ0cyBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNMZWFkZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZlci5qcycpO1xuXG4gIC8vIFByZS1jcmVhdGUgYSBwbGFjZWhvbGRlciBicm9hZGNhc3QgdGhhdCB3ZSdsbCB3aXJlIHVwIGFmdGVyIHRoZSBzZXJ2ZXIgc3RhcnRzXG4gIGxldCBsaXZlQnJvYWRjYXN0OiAoKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgbGl2ZU1ldHJpY3NPblNuYXBzaG90OiAoKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLy8gQ3JlYXRlIGluZ2VzdGlvbiByb3V0ZXMgd2l0aCBhIGRlZmVycmVkIGJyb2FkY2FzdCAod2lyZWQgYWZ0ZXIgc2VydmVyIHN0YXJ0cylcbiAgY29uc3QgaW5nZXN0UmVzdWx0ID0gY3JlYXRlSW5nZXN0Um91dGVzKHtcbiAgICBsb2dCcm9hZGNhc3Q6IChlbnRyeSkgPT4gbGl2ZUJyb2FkY2FzdD8uKGVudHJ5KSxcbiAgICBtZXRyaWNzT25TbmFwc2hvdDogKHNuYXBzaG90KSA9PiBsaXZlTWV0cmljc09uU25hcHNob3Q/LihzbmFwc2hvdCksXG4gIH0pO1xuXG4gIC8vIFJlZ2lzdGVyIHRoZSBsZWFkZXIgYXMgYSBzZXNzaW9uXG4gIGluZ2VzdFJlc3VsdC5yZWdpc3RlckxlYWRlclNlc3Npb24ob3B0aW9ucy5zZXNzaW9uSWQsIHByb2Nlc3MucGlkKTtcblxuICAvLyBTdGFydCB0aGUgd2ViIHNlcnZlciB3aXRoIGluZ2VzdCByb3V0ZXMgbW91bnRlZCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFja1xuICBjb25zdCB3ZWJSZXN1bHQgPSBhd2FpdCBzdGFydFdlYlNlcnZlcih7XG4gICAgcG9ydGZvbGlvRGlyOiBvcHRpb25zLnBvcnRmb2xpb0RpcixcbiAgICBtZW1vcnlTaW5rOiBvcHRpb25zLm1lbW9yeVNpbmssXG4gICAgbWV0cmljc1Npbms6IG9wdGlvbnMubWV0cmljc1NpbmssXG4gICAgcG9ydDogQ09OU09MRV9QT1JULFxuICAgIGFkZGl0aW9uYWxSb3V0ZXJzOiBbaW5nZXN0UmVzdWx0LnJvdXRlcl0sXG4gICAgLi4uKG9wdGlvbnMubWNwQXFsSGFuZGxlciA/IHsgbWNwQXFsSGFuZGxlcjogb3B0aW9ucy5tY3BBcWxIYW5kbGVyIH0gOiB7fSksXG4gIH0pO1xuXG4gIC8vIFdpcmUgU1NFIGJyb2FkY2FzdHMgZm9yIHRoaXMgbGVhZGVyJ3Mgb3duIGV2ZW50c1xuICBvcHRpb25zLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgb3B0aW9ucy5tZXRyaWNzU2luayk7XG5cbiAgLy8gTm93IHdpcmUgdGhlIGxpdmUgYnJvYWRjYXN0IGZ1bmN0aW9ucyBpbnRvIHRoZSBpbmdlc3Qgcm91dGVzXG4gIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxCcm9hZGNhc3QgPSB3ZWJSZXN1bHQubG9nQnJvYWRjYXN0O1xuICAgIC8vIFN0YW1wIGxlYWRlcidzIG93biBlbnRyaWVzIHdpdGggc2Vzc2lvbiBJRFxuICAgIGxpdmVCcm9hZGNhc3QgPSAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIG9yaWdpbmFsQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgIH07XG4gIH1cbiAgbGl2ZU1ldHJpY3NPblNuYXBzaG90ID0gd2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90O1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEluZ2VzdGlvbiByb3V0ZXMgbW91bnRlZCcpO1xuXG4gIC8vIFN0YXJ0IGhlYXJ0YmVhdCBhbmQgcmVnaXN0ZXIgY2xlYW51cFxuICBjb25zdCBzdG9wSGVhcnRiZWF0ID0gc3RhcnRIZWFydGJlYXQoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBvcnQ6IENPTlNPTEVfUE9SVCwgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICByb2xlOiAnbGVhZGVyJywgaW5nZXN0Um91dGVzOiBbJy9hcGkvaW5nZXN0L2xvZ3MnLCAnL2FwaS9pbmdlc3QvbWV0cmljcycsICcvYXBpL2luZ2VzdC9zZXNzaW9uJywgJy9hcGkvc2Vzc2lvbnMnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnbGVhZGVyJyxcbiAgICBlbGVjdGlvbixcbiAgICBwb3J0OiBDT05TT0xFX1BPUlQsXG4gICAgY2xlYW51cDogYXN5bmMgKCkgPT4ge1xuICAgICAgc3RvcEhlYXJ0YmVhdCgpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgYXMgYSBmb2xsb3dlci5cbiAqIFJlZ2lzdGVycyBmb3J3YXJkaW5nIHNpbmtzIHdpdGggdGhlIExvZ01hbmFnZXIsIHN0YXJ0cyBzZXNzaW9uIGhlYXJ0YmVhdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnRBc0ZvbGxvd2VyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbik6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgY29uc3QgbGVhZGVyVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHtlbGVjdGlvbi5sZWFkZXJJbmZvLnBvcnR9YDtcblxuICAvLyBSZWdpc3RlciBhIGZvcndhcmRpbmcgbG9nIHNpbmtcbiAgY29uc3QgZm9yd2FyZGluZ1NpbmsgPSBuZXcgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCk7XG4gIG9wdGlvbnMucmVnaXN0ZXJMb2dTaW5rKGZvcndhcmRpbmdTaW5rKTtcblxuICAvLyBTdGFydCBzZXNzaW9uIGhlYXJ0YmVhdCB0byB0aGUgbGVhZGVyXG4gIGNvbnN0IHNlc3Npb25IZWFydGJlYXQgPSBuZXcgU2Vzc2lvbkhlYXJ0YmVhdChsZWFkZXJVcmwsIG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG4gIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RhcnQoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBpZDogcHJvY2Vzcy5waWQsIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgbGVhZGVyU2Vzc2lvbjogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsIGxlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgbGVhZGVyUG9ydDogZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0LCBsZWFkZXJVcmwsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBlbGVjdGlvbixcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0b3AoKTtcbiAgICAgIGF3YWl0IGZvcndhcmRpbmdTaW5rLmNsb3NlKCk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
package/dist/web/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAW/E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAW/E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkJxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBzI"}
|
package/dist/web/server.js
CHANGED
|
@@ -48,7 +48,8 @@ function openInBrowser(url) {
|
|
|
48
48
|
: 'xdg-open';
|
|
49
49
|
// Security: use execFile with URL as argument array, not string interpolation
|
|
50
50
|
const urlStr = String(url);
|
|
51
|
-
|
|
51
|
+
// Accept localhost, 127.0.0.1, and *.localhost subdomains (RFC 6761)
|
|
52
|
+
if (!/^https?:\/\/(localhost|127\.0\.0\.1|[\w-]+\.localhost)[:/]/.test(urlStr)) {
|
|
52
53
|
resolve({ success: false, error: 'URL must be a localhost HTTP URL' });
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
@@ -240,4 +241,4 @@ export async function openPortfolioBrowser(portfolioDir, port, mcpAqlHandler) {
|
|
|
240
241
|
...(browserResult.error ? { warning: `Browser could not be opened automatically: ${browserResult.error}. Open ${url} manually.` } : {}),
|
|
241
242
|
};
|
|
242
243
|
}
|
|
243
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRTNELGtF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RyxHQUFHLFVBQVUsWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ25ELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQztJQUVyQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsTUFBTSxjQUFjLENBQUM7WUFDbkIsWUFBWTtZQUNaLElBQUksRUFBRSxVQUFVO1lBQ2hCLFdBQVcsRUFBRSxLQUFLLEVBQUUsa0RBQWtEO1lBQ3RFLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxzQ0FBc0M7UUFDdEMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFL0MsT0FBTztRQUNMLEdBQUc7UUFDSCxjQUFjO1FBQ2QsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPO1FBQ3BDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSw4Q0FBOEMsYUFBYSxDQUFDLEtBQUssVUFBVSxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDeEksQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERvbGxob3VzZU1DUCBXZWIgVUkgU2VydmVyXG4gKlxuICogTGlnaHR3ZWlnaHQgRXhwcmVzcyBzZXJ2ZXIgZm9yIGJyb3dzaW5nIHBvcnRmb2xpbyBlbGVtZW50cyBpbiBhIGJyb3dzZXIuXG4gKiBCb3VuZCB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gUmVhZC1vbmx5IGZvciBWMS5cbiAqXG4gKiBDYW4gYmUgc3RhcnRlZCBzdGFuZGFsb25lIChgLS13ZWJgIGZsYWcpIG9yIGZyb20gd2l0aGluIHRoZSBNQ1Agc2VydmVyXG4gKiBwcm9jZXNzIHZpYSBgb3BlblBvcnRmb2xpb0Jyb3dzZXIoKWAuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzcwNFxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc3NFxuICovXG5cbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgam9pbiwgZGlybmFtZSwgZXh0bmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IG1rZGlyLCByZWFkZGlyIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBjcmVhdGVBcGlSb3V0ZXMsIGNyZWF0ZUdhdGV3YXlBcGlSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dSb3V0ZXMsIHR5cGUgTG9nUm91dGVzUmVzdWx0IH0gZnJvbSAnLi9yb3V0ZXMvbG9nUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZU1ldHJpY3NSb3V0ZXMsIHR5cGUgTWV0cmljc1JvdXRlc1Jlc3VsdCB9IGZyb20gJy4vcm91dGVzL21ldHJpY3NSb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlSGVhbHRoUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMvaGVhbHRoUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNldHVwUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMvc2V0dXBSb3V0ZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBERUZBVUxUX1BPUlQgPSAzOTM5O1xuY29uc3QgQ09OU09MRV9IT1NUID0gJ2RvbGxob3VzZS5sb2NhbGhvc3QnO1xuY29uc3QgQUxMT1dFRF9QQUdFX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmh0bWwnLCAnLmh0bSddKTtcblxuLyoqIFRyYWNrIHdoZXRoZXIgdGhlIHdlYiBzZXJ2ZXIgaXMgYWxyZWFkeSBydW5uaW5nIGluLXByb2Nlc3MuICovXG5sZXQgc2VydmVyUnVubmluZyA9IGZhbHNlO1xubGV0IHNlcnZlclBvcnQgPSBERUZBVUxUX1BPUlQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgdGhlIHdlYiBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VydmVyT3B0aW9ucyB7XG4gIC8qKiBQb3J0IHRvIGJpbmQgdG8gKGRlZmF1bHQ6IDM5MzkpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBQYXRoIHRvIHRoZSBwb3J0Zm9saW8gZGlyZWN0b3J5IChlLmcuLCB+Ly5kb2xsaG91c2UvcG9ydGZvbGlvKSAqL1xuICBwb3J0Zm9saW9EaXI6IHN0cmluZztcbiAgLyoqIE9wZW4gdGhlIGJyb3dzZXIgYXV0b21hdGljYWxseSBhZnRlciBzdGFydGluZyAoZGVmYXVsdDogZmFsc2UpICovXG4gIG9wZW5Ccm93c2VyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1DUEFRTEhhbmRsZXIgZm9yIHJvdXRpbmcgdGhyb3VnaCB0aGUgTUNQLUFRTCBwaXBlbGluZS5cbiAgICogV2hlbiBwcm92aWRlZCwgQVBJIHJvdXRlcyB1c2UgdGhlIGdhdGV3YXkgKHZhbGlkYXRlZCwgY2FjaGVkLCBnYXRla2VlcGVyLWNoZWNrZWQpLlxuICAgKiBXaGVuIGFic2VudCwgZmFsbHMgYmFjayB0byBkaXJlY3QgZmlsZXN5c3RlbSBhY2Nlc3MgKGxlZ2FjeSBiZWhhdmlvcikuXG4gICAqIElzc3VlICM3OTY6IFdlYiBNQ1AtQVFMIEdhdGV3YXkuXG4gICAqL1xuICBtY3BBcWxIYW5kbGVyPzogTUNQQVFMSGFuZGxlcjtcbiAgLyoqIE1lbW9yeUxvZ1NpbmsgZm9yIGxvZyByb3V0ZXMgKG9wdGlvbmFsIOKAlCBsb2dzIHRhYiBkaXNhYmxlZCBpZiBub3QgcHJvdmlkZWQpICovXG4gIG1lbW9yeVNpbms/OiBNZW1vcnlMb2dTaW5rO1xuICAvKiogTWVtb3J5TWV0cmljc1NpbmsgZm9yIG1ldHJpY3Mgcm91dGVzIChvcHRpb25hbCDigJQgbWV0cmljcyB0YWIgZGlzYWJsZWQgaWYgbm90IHByb3ZpZGVkKSAqL1xuICBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rO1xuICAvKiogQWRkaXRpb25hbCByb3V0ZXJzIHRvIG1vdW50IGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrIChlLmcuLCBpbmdlc3Qgcm91dGVzKSAqL1xuICBhZGRpdGlvbmFsUm91dGVycz86IGltcG9ydCgnZXhwcmVzcycpLlJvdXRlcltdO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyB0aGUgd2ViIHNlcnZlciwgaW5jbHVkaW5nIGhvb2tzIGZvciBESSB3aXJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VydmVyUmVzdWx0IHtcbiAgLyoqIEV4cHJlc3MgYXBwIGluc3RhbmNlIOKAlCBmb3IgbW91bnRpbmcgYWRkaXRpb25hbCByb3V0ZXMgKGUuZy4sIGluZ2VzdCByb3V0ZXMpICovXG4gIGFwcD86IGltcG9ydCgnZXhwcmVzcycpLkV4cHJlc3M7XG4gIC8qKiBMb2cgYnJvYWRjYXN0IGZ1bmN0aW9uIOKAlCBjYWxsIHdpdGggZWFjaCBlbnRyeSB0byBwdXNoIHRvIFNTRSBjbGllbnRzICovXG4gIGxvZ0Jyb2FkY2FzdD86IChlbnRyeTogaW1wb3J0KCcuLi9sb2dnaW5nL3R5cGVzLmpzJykuVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkO1xuICAvKiogTWV0cmljcyBzbmFwc2hvdCBmdW5jdGlvbiDigJQgY2FsbCB3aXRoIGVhY2ggc25hcHNob3QgdG8gcHVzaCB0byBTU0UgY2xpZW50cyAqL1xuICBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogaW1wb3J0KCcuLi9tZXRyaWNzL3R5cGVzLmpzJykuTWV0cmljU25hcHNob3QpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gb3BlbiB0aGUgYnJvd3Nlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyT3BlblJlc3VsdCB7XG4gIC8qKiBUaGUgVVJMIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBvbiAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhlIHNlcnZlciB3YXMgYWxyZWFkeSBydW5uaW5nICh0cnVlKSBvciBqdXN0IHN0YXJ0ZWQgKGZhbHNlKSAqL1xuICBhbHJlYWR5UnVubmluZzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGJyb3dzZXIgd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQgKi9cbiAgYnJvd3Nlck9wZW5lZDogYm9vbGVhbjtcbiAgLyoqIFdhcm5pbmcgbWVzc2FnZSBpZiB0aGUgYnJvd3NlciBjb3VsZCBub3QgYmUgb3BlbmVkICovXG4gIHdhcm5pbmc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3BlbiBhIFVSTCBpbiB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBicm93c2VyLlxuICpcbiAqIFBsYXRmb3JtLWF3YXJlOlxuICogLSBtYWNPUzogYG9wZW5gXG4gKiAtIExpbnV4OiBgeGRnLW9wZW5gXG4gKiAtIFdpbmRvd3M6IGBzdGFydGBcbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBvcGVuXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgYnJvd3NlciBvcGVuZWQsIGZhbHNlIHdpdGggZXJyb3IgbWVzc2FnZSBpZiBub3RcbiAqL1xuZnVuY3Rpb24gb3BlbkluQnJvd3Nlcih1cmw6IHN0cmluZyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHBsYXQgPSBwbGF0Zm9ybSgpO1xuICAgIGNvbnN0IGNtZCA9IHBsYXQgPT09ICdkYXJ3aW4nID8gJ29wZW4nXG4gICAgICA6IHBsYXQgPT09ICd3aW4zMicgPyAnc3RhcnQnXG4gICAgICA6ICd4ZGctb3Blbic7XG5cbiAgICAvLyBTZWN1cml0eTogdXNlIGV4ZWNGaWxlIHdpdGggVVJMIGFzIGFyZ3VtZW50IGFycmF5LCBub3Qgc3RyaW5nIGludGVycG9sYXRpb25cbiAgICBjb25zdCB1cmxTdHIgPSBTdHJpbmcodXJsKTtcbiAgICBpZiAoIS9eaHR0cHM/OlxcL1xcL2xvY2FsaG9zdFs6L10vLnRlc3QodXJsU3RyKSkge1xuICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ1VSTCBtdXN0IGJlIGEgbG9jYWxob3N0IEhUVFAgVVJMJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY0ZpbGUoY21kLCBbdXJsU3RyXSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBsb2dnZXIud2FybihgW1dlYlVJXSBDb3VsZCBub3QgYXV0by1vcGVuIGJyb3dzZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBwb3J0Zm9saW8gd2ViIHNlcnZlci5cbiAqXG4gKiBCaW5kcyB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gU2VydmVzIHRoZSBwb3J0Zm9saW8gYnJvd3NlclxuICogZnJvbnRlbmQgYW5kIEFQSSByb3V0ZXMgZm9yIHJlYWRpbmcgZWxlbWVudHMuXG4gKlxuICogSWRlbXBvdGVudDogaWYgdGhlIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcsIG9wdGlvbmFsbHkgb3BlbnMgdGhlXG4gKiBicm93c2VyIHdpdGhvdXQgc3RhcnRpbmcgYSBzZWNvbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgSG9va3MgZm9yIERJIHdpcmluZyAobG9nIGJyb2FkY2FzdCwgbWV0cmljcyBvblNuYXBzaG90KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRXZWJTZXJ2ZXIob3B0aW9uczogV2ViU2VydmVyT3B0aW9ucyk6IFByb21pc2U8V2ViU2VydmVyUmVzdWx0PiB7XG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCByZXN1bHQ6IFdlYlNlcnZlclJlc3VsdCA9IHt9O1xuXG4gIGlmIChzZXJ2ZXJSdW5uaW5nKSB7XG4gICAgaWYgKG9wdGlvbnMub3BlbkJyb3dzZXIpIHtcbiAgICAgIG9wZW5JbkJyb3dzZXIoYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtzZXJ2ZXJQb3J0fWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuICByZXN1bHQuYXBwID0gYXBwO1xuICBhcHAuZGlzYWJsZSgneC1wb3dlcmVkLWJ5Jyk7XG5cbiAgLy8gU2VjdXJpdHkgaGVhZGVyc1xuICBhcHAudXNlKChfcmVxLCByZXMsIG5leHQpID0+IHtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUZyYW1lLU9wdGlvbnMnLCAnREVOWScpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtWFNTLVByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1JlZmVycmVyLVBvbGljeScsICduby1yZWZlcnJlcicpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsIGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gKTtcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsIFtcbiAgICAgIFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIsXG4gICAgICBcInNjcmlwdC1zcmMgJ3NlbGYnIGNkbi5qc2RlbGl2ci5uZXQgY2RuanMuY2xvdWRmbGFyZS5jb21cIixcbiAgICAgIFwic3R5bGUtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZScgY2RuanMuY2xvdWRmbGFyZS5jb20gY2RuLmpzZGVsaXZyLm5ldFwiLFxuICAgICAgXCJjb25uZWN0LXNyYyAnc2VsZicgcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbVwiLFxuICAgICAgXCJmb250LXNyYyAnc2VsZidcIixcbiAgICBdLmpvaW4oJzsgJykpO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gU2V0dXAgcm91dGVzOiBhdXRvLWluc3RhbGwgRG9sbGhvdXNlTUNQIHRvIE1DUCBjbGllbnRzIChtb3VudCBCRUZPUkUgQVBJIHJvdXRlcylcbiAgYXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzFrYicsIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KSk7XG4gIGNvbnN0IHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciB9ID0gY3JlYXRlU2V0dXBSb3V0ZXMoKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvaW5zdGFsbCcsIGluc3RhbGxIYW5kbGVyKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvb3Blbi1jb25maWcnLCBvcGVuQ29uZmlnSGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvdmVyc2lvbicsIHZlcnNpb25IYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC9tY3BiJywgbWNwYlJlZGlyZWN0SGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvZGV0ZWN0JywgZGV0ZWN0SGFuZGxlcik7XG4gIGxvZ2dlci5pbmZvKCdbV2ViVUldIFNldHVwIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvc2V0dXAnKTtcblxuICAvLyBBUEkgcm91dGVzIOKAlCB1c2UgTUNQLUFRTCBnYXRld2F5IHdoZW4gaGFuZGxlciBpcyBhdmFpbGFibGUgKElzc3VlICM3OTYpXG4gIGlmIChvcHRpb25zLm1jcEFxbEhhbmRsZXIpIHtcbiAgICBhcHAudXNlKCcvYXBpJywgY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyhvcHRpb25zLm1jcEFxbEhhbmRsZXIsIG9wdGlvbnMucG9ydGZvbGlvRGlyKSk7XG5cbiAgICAvLyBQZXJtaXNzaW9uIGV2YWx1YXRpb24gcm91dGVzIChQT1NUIC9ldmFsdWF0ZV9wZXJtaXNzaW9uLCBHRVQgL3Blcm1pc3Npb25zL3N0YXR1cylcbiAgICBjb25zdCB7IHJlZ2lzdGVyUGVybWlzc2lvblJvdXRlcyB9ID0gYXdhaXQgaW1wb3J0KCcuL3JvdXRlcy9wZXJtaXNzaW9uUm91dGVzLmpzJyk7XG4gICAgY29uc3QgcGVybVJvdXRlciA9IChhd2FpdCBpbXBvcnQoJ2V4cHJlc3MnKSkuUm91dGVyKCk7XG4gICAgcmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzKHBlcm1Sb3V0ZXIsIG9wdGlvbnMubWNwQXFsSGFuZGxlcik7XG4gICAgYXBwLnVzZSgnL2FwaScsIHBlcm1Sb3V0ZXIpO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gQVBJIHJvdXRlcyB1c2luZyBNQ1AtQVFMIEdhdGV3YXkgKyBwZXJtaXNzaW9uIHJvdXRlcycpO1xuICB9IGVsc2Uge1xuICAgIGFwcC51c2UoJy9hcGknLCBjcmVhdGVBcGlSb3V0ZXMob3B0aW9ucy5wb3J0Zm9saW9EaXIpKTtcbiAgICBsb2dnZXIud2FybignW1dlYlVJXSBBUEkgcm91dGVzIHVzaW5nIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcyAobm8gTUNQLUFRTCBoYW5kbGVyIGF2YWlsYWJsZSknKTtcbiAgfVxuXG4gIC8vIENvbnNvbGUgcm91dGVzOiBsb2dzLCBtZXRyaWNzLCBoZWFsdGhcbiAgbGV0IGxvZ1JvdXRlczogTG9nUm91dGVzUmVzdWx0IHwgdW5kZWZpbmVkO1xuICBsZXQgbWV0cmljc1JvdXRlczogTWV0cmljc1JvdXRlc1Jlc3VsdCB8IHVuZGVmaW5lZDtcblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgbG9nUm91dGVzID0gY3JlYXRlTG9nUm91dGVzKG9wdGlvbnMubWVtb3J5U2luayk7XG4gICAgYXBwLnVzZSgnL2FwaScsIGxvZ1JvdXRlcy5yb3V0ZXIpO1xuICAgIHJlc3VsdC5sb2dCcm9hZGNhc3QgPSBsb2dSb3V0ZXMuYnJvYWRjYXN0O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIExvZyB2aWV3ZXIgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9sb2dzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZXRyaWNzU2luaykge1xuICAgIG1ldHJpY3NSb3V0ZXMgPSBjcmVhdGVNZXRyaWNzUm91dGVzKG9wdGlvbnMubWV0cmljc1NpbmspO1xuICAgIGFwcC51c2UoJy9hcGknLCBtZXRyaWNzUm91dGVzLnJvdXRlcik7XG4gICAgcmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90ID0gbWV0cmljc1JvdXRlcy5vblNuYXBzaG90O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIE1ldHJpY3Mgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9tZXRyaWNzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgY29uc3QgaGVhbHRoUm91dGVyID0gY3JlYXRlSGVhbHRoUm91dGVzKHtcbiAgICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICAgIG1ldHJpY3NTaW5rOiBvcHRpb25zLm1ldHJpY3NTaW5rLFxuICAgICAgbG9nQ2xpZW50Q291bnQ6IGxvZ1JvdXRlcyA/IGxvZ1JvdXRlcy5jbGllbnRDb3VudCA6ICgpID0+IDAsXG4gICAgICBtZXRyaWNzQ2xpZW50Q291bnQ6IG1ldHJpY3NSb3V0ZXMgPyBtZXRyaWNzUm91dGVzLmNsaWVudENvdW50IDogKCkgPT4gMCxcbiAgICB9KTtcbiAgICBhcHAudXNlKCcvYXBpJywgaGVhbHRoUm91dGVyKTtcbiAgfVxuXG4gIC8vIFNlcnZlIH4vLmRvbGxob3VzZS9wYWdlcy8gYXQgL3BhZ2VzLyDigJQgZGFzaGJvYXJkcywgZ2VuZXJhdGVkIGNvbnRlbnQsIHN0YWNrIHZpZXdzXG4gIGNvbnN0IHBhZ2VzRGlyID0gam9pbihkaXJuYW1lKG9wdGlvbnMucG9ydGZvbGlvRGlyKSwgJ3BhZ2VzJyk7XG4gIG1rZGlyKHBhZ2VzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KS5jYXRjaChlcnIgPT4ge1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIENvdWxkIG5vdCBjcmVhdGUgcGFnZXMgZGlyZWN0b3J5OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH0pO1xuICBhcHAudXNlKCcvcGFnZXMnLCBleHByZXNzLnN0YXRpYyhwYWdlc0RpcikpO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9wYWdlc1xuICAgKiBMaXN0cyBhdmFpbGFibGUgSFRNTCBwYWdlcyBpbiB+Ly5kb2xsaG91c2UvcGFnZXMvLlxuICAgKiBSZXR1cm5zIHBhZ2UgbmFtZXMgYW5kIHRoZWlyIFVSTHMgZm9yIHRoZSBtYW5hZ2VtZW50IGNvbnNvbGUuXG4gICAqL1xuICBhcHAuZ2V0KCcvYXBpL3BhZ2VzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIocGFnZXNEaXIpO1xuICAgICAgY29uc3QgcGFnZXMgPSBmaWxlc1xuICAgICAgICAuZmlsdGVyKGYgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIEFMTE9XRURfUEFHRV9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSlcbiAgICAgICAgLm1hcChmID0+ICh7IG5hbWU6IGYsIHVybDogYC9wYWdlcy8ke2Z9YCB9KSk7XG4gICAgICByZXMuanNvbih7IHBhZ2VzLCBkaXJlY3Rvcnk6IHBhZ2VzRGlyIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLmpzb24oeyBwYWdlczogW10sIGRpcmVjdG9yeTogcGFnZXNEaXIgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBBZGRpdGlvbmFsIHJvdXRlcnMgKGUuZy4sIHVuaWZpZWQgY29uc29sZSBpbmdlc3Qgcm91dGVzKSDigJQgbXVzdCBtb3VudCBiZWZvcmUgU1BBIGZhbGxiYWNrXG4gIG9wdGlvbnMuYWRkaXRpb25hbFJvdXRlcnM/LmZvckVhY2gocm91dGVyID0+IGFwcC51c2Uocm91dGVyKSk7XG5cbiAgLy8gU3RhdGljIGZyb250ZW5kIGZpbGVzXG4gIGNvbnN0IHB1YmxpY0RpciA9IGpvaW4oX19kaXJuYW1lLCAncHVibGljJyk7XG4gIGFwcC51c2UoZXhwcmVzcy5zdGF0aWMocHVibGljRGlyKSk7XG5cbiAgLy8gU1BBIGZhbGxiYWNrXG4gIGFwcC5nZXQoJy97KnBhdGh9JywgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSByZXEucGF0aC5ub3JtYWxpemUoJ05GQycpO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvYXBpLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgQVBJIHJvdXRlIG5vdCBmb3VuZDogJHtub3JtYWxpemVkUGF0aH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnL3BhZ2VzLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgUGFnZSBub3QgZm91bmQ6ICR7bm9ybWFsaXplZFBhdGh9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVzLnNlbmRGaWxlKGpvaW4ocHVibGljRGlyLCAnaW5kZXguaHRtbCcpKTtcbiAgfSk7XG5cbiAgLy8gQmluZCB0byBsb2NhbGhvc3Qgb25seVxuICBhcHAubGlzdGVuKHBvcnQsICcxMjcuMC4wLjEnLCAoKSA9PiB7XG4gICAgc2VydmVyUnVubmluZyA9IHRydWU7XG4gICAgc2VydmVyUG9ydCA9IHBvcnQ7XG4gICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtwb3J0fWA7XG4gICAgY29uc3QgZmFsbGJhY2tVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke3BvcnR9YDtcbiAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBNYW5hZ2VtZW50IGNvbnNvbGUgcnVubmluZyBhdCAke3VybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgXFxuICBEb2xsaG91c2VNQ1AgTWFuYWdlbWVudCBDb25zb2xlXFxuICAke3VybH1cXG4gICR7ZmFsbGJhY2tVcmx9IChmYWxsYmFjaylcXG5gKTtcblxuICAgIGlmIChvcHRpb25zLm9wZW5Ccm93c2VyKSB7XG4gICAgICBvcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wZW4gdGhlIHBvcnRmb2xpbyBicm93c2VyIGZyb20gd2l0aGluIHRoZSBNQ1Agc2VydmVyIHByb2Nlc3MuXG4gKlxuICogU3RhcnRzIHRoZSB3ZWIgc2VydmVyIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIHRoZW4gb3BlbnMgdGhlIHN5c3RlbVxuICogYnJvd3NlciB0byB0aGUgcG9ydGZvbGlvIFVJLiBSZXR1cm5zIGEgcmVzdWx0IG9iamVjdCBpbmRpY2F0aW5nXG4gKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgc3RhcnRlZCBhbmQgdGhlIGJyb3dzZXIgb3BlbmVkIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBDYWxsZWQgYnkgdGhlIGBvcGVuX3BvcnRmb2xpb19icm93c2VyYCBNQ1AtQVFMIG9wZXJhdGlvbiAoSXNzdWUgIzc3NCkuXG4gKlxuICogQHBhcmFtIHBvcnRmb2xpb0RpciAtIFBhdGggdG8gdGhlIHBvcnRmb2xpbyBkaXJlY3RvcnkgKGUuZy4sIH4vLmRvbGxob3VzZS9wb3J0Zm9saW8pXG4gKiBAcGFyYW0gcG9ydCAtIFBvcnQgdG8gYmluZCB0byAoZGVmYXVsdDogMzkzOSlcbiAqIEByZXR1cm5zIFJlc3VsdCB3aXRoIFVSTCwgc2VydmVyIHN0YXR1cywgYW5kIGJyb3dzZXIgb3BlbiBzdGF0dXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qb3J0Zm9saW9Ccm93c2VyKHBvcnRmb2xpb0Rpcjogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBtY3BBcWxIYW5kbGVyPzogTUNQQVFMSGFuZGxlcik6IFByb21pc2U8QnJvd3Nlck9wZW5SZXN1bHQ+IHtcbiAgY29uc3QgdGFyZ2V0UG9ydCA9IHBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCB1cmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3RhcmdldFBvcnR9YDtcbiAgY29uc3QgYWxyZWFkeVJ1bm5pbmcgPSBzZXJ2ZXJSdW5uaW5nO1xuXG4gIGlmICghc2VydmVyUnVubmluZykge1xuICAgIGF3YWl0IHN0YXJ0V2ViU2VydmVyKHtcbiAgICAgIHBvcnRmb2xpb0RpcixcbiAgICAgIHBvcnQ6IHRhcmdldFBvcnQsXG4gICAgICBvcGVuQnJvd3NlcjogZmFsc2UsIC8vIFdlJ2xsIG9wZW4gbWFudWFsbHkgYmVsb3cgdG8gY2FwdHVyZSB0aGUgcmVzdWx0XG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH0pO1xuICAgIC8vIFdhaXQgYnJpZWZseSBmb3IgdGhlIHNlcnZlciB0byBiaW5kXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMCkpO1xuICB9XG5cbiAgY29uc3QgYnJvd3NlclJlc3VsdCA9IGF3YWl0IG9wZW5JbkJyb3dzZXIodXJsKTtcblxuICByZXR1cm4ge1xuICAgIHVybCxcbiAgICBhbHJlYWR5UnVubmluZyxcbiAgICBicm93c2VyT3BlbmVkOiBicm93c2VyUmVzdWx0LnN1Y2Nlc3MsXG4gICAgLi4uKGJyb3dzZXJSZXN1bHQuZXJyb3IgPyB7IHdhcm5pbmc6IGBCcm93c2VyIGNvdWxkIG5vdCBiZSBvcGVuZWQgYXV0b21hdGljYWxseTogJHticm93c2VyUmVzdWx0LmVycm9yfS4gT3BlbiAke3VybH0gbWFudWFsbHkuYCB9IDoge30pLFxuICB9O1xufVxuIl19
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYi9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUE0QixNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUM7QUFDM0MsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRTNELGtF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QUN4QyxNQUFNLEdBQUcsR0FBRyxVQUFVLFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNuRCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFFckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sY0FBYyxDQUFDO1lBQ25CLFlBQVk7WUFDWixJQUFJLEVBQUUsVUFBVTtZQUNoQixXQUFXLEVBQUUsS0FBSyxFQUFFLGtEQUFrRDtZQUN0RSxhQUFhO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsc0NBQXNDO1FBQ3RDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRS9DLE9BQU87UUFDTCxHQUFHO1FBQ0gsY0FBYztRQUNkLGFBQWEsRUFBRSxhQUFhLENBQUMsT0FBTztRQUNwQyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsOENBQThDLGFBQWEsQ0FBQyxLQUFLLFVBQVUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hJLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEb2xsaG91c2VNQ1AgV2ViIFVJIFNlcnZlclxuICpcbiAqIExpZ2h0d2VpZ2h0IEV4cHJlc3Mgc2VydmVyIGZvciBicm93c2luZyBwb3J0Zm9saW8gZWxlbWVudHMgaW4gYSBicm93c2VyLlxuICogQm91bmQgdG8gMTI3LjAuMC4xIG9ubHkgKGxvY2FsaG9zdCkuIFJlYWQtb25seSBmb3IgVjEuXG4gKlxuICogQ2FuIGJlIHN0YXJ0ZWQgc3RhbmRhbG9uZSAoYC0td2ViYCBmbGFnKSBvciBmcm9tIHdpdGhpbiB0aGUgTUNQIHNlcnZlclxuICogcHJvY2VzcyB2aWEgYG9wZW5Qb3J0Zm9saW9Ccm93c2VyKClgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyLXYyLXJlZmFjdG9yL2lzc3Vlcy83MDRcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyLXYyLXJlZmFjdG9yL2lzc3Vlcy83NzRcbiAqL1xuXG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUsIGV4dG5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgY3JlYXRlQXBpUm91dGVzLCBjcmVhdGVHYXRld2F5QXBpUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nUm91dGVzLCB0eXBlIExvZ1JvdXRlc1Jlc3VsdCB9IGZyb20gJy4vcm91dGVzL2xvZ1JvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVNZXRyaWNzUm91dGVzLCB0eXBlIE1ldHJpY3NSb3V0ZXNSZXN1bHQgfSBmcm9tICcuL3JvdXRlcy9tZXRyaWNzUm91dGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUhlYWx0aFJvdXRlcyB9IGZyb20gJy4vcm91dGVzL2hlYWx0aFJvdXRlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTZXR1cFJvdXRlcyB9IGZyb20gJy4vcm91dGVzL3NldHVwUm91dGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1DUEFRTEhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcblxuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuY29uc3QgREVGQVVMVF9QT1JUID0gMzkzOTtcbmNvbnN0IENPTlNPTEVfSE9TVCA9ICdkb2xsaG91c2UubG9jYWxob3N0JztcbmNvbnN0IEFMTE9XRURfUEFHRV9FWFRFTlNJT05TID0gbmV3IFNldChbJy5odG1sJywgJy5odG0nXSk7XG5cbi8qKiBUcmFjayB3aGV0aGVyIHRoZSB3ZWIgc2VydmVyIGlzIGFscmVhZHkgcnVubmluZyBpbi1wcm9jZXNzLiAqL1xubGV0IHNlcnZlclJ1bm5pbmcgPSBmYWxzZTtcbmxldCBzZXJ2ZXJQb3J0ID0gREVGQVVMVF9QT1JUO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHN0YXJ0aW5nIHRoZSB3ZWIgc2VydmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlck9wdGlvbnMge1xuICAvKiogUG9ydCB0byBiaW5kIHRvIChkZWZhdWx0OiAzOTM5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogUGF0aCB0byB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSAoZS5nLiwgfi8uZG9sbGhvdXNlL3BvcnRmb2xpbykgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBPcGVuIHRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc3RhcnRpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBvcGVuQnJvd3Nlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNQ1BBUUxIYW5kbGVyIGZvciByb3V0aW5nIHRocm91Z2ggdGhlIE1DUC1BUUwgcGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIEFQSSByb3V0ZXMgdXNlIHRoZSBnYXRld2F5ICh2YWxpZGF0ZWQsIGNhY2hlZCwgZ2F0ZWtlZXBlci1jaGVja2VkKS5cbiAgICogV2hlbiBhYnNlbnQsIGZhbGxzIGJhY2sgdG8gZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIChsZWdhY3kgYmVoYXZpb3IpLlxuICAgKiBJc3N1ZSAjNzk2OiBXZWIgTUNQLUFRTCBHYXRld2F5LlxuICAgKi9cbiAgbWNwQXFsSGFuZGxlcj86IE1DUEFRTEhhbmRsZXI7XG4gIC8qKiBNZW1vcnlMb2dTaW5rIGZvciBsb2cgcm91dGVzIChvcHRpb25hbCDigJQgbG9ncyB0YWIgZGlzYWJsZWQgaWYgbm90IHByb3ZpZGVkKSAqL1xuICBtZW1vcnlTaW5rPzogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1lbW9yeU1ldHJpY3NTaW5rIGZvciBtZXRyaWNzIHJvdXRlcyAob3B0aW9uYWwg4oCUIG1ldHJpY3MgdGFiIGRpc2FibGVkIGlmIG5vdCBwcm92aWRlZCkgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIEFkZGl0aW9uYWwgcm91dGVycyB0byBtb3VudCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjayAoZS5nLiwgaW5nZXN0IHJvdXRlcykgKi9cbiAgYWRkaXRpb25hbFJvdXRlcnM/OiBpbXBvcnQoJ2V4cHJlc3MnKS5Sb3V0ZXJbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygc3RhcnRpbmcgdGhlIHdlYiBzZXJ2ZXIsIGluY2x1ZGluZyBob29rcyBmb3IgREkgd2lyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlcnZlclJlc3VsdCB7XG4gIC8qKiBFeHByZXNzIGFwcCBpbnN0YW5jZSDigJQgZm9yIG1vdW50aW5nIGFkZGl0aW9uYWwgcm91dGVzIChlLmcuLCBpbmdlc3Qgcm91dGVzKSAqL1xuICBhcHA/OiBpbXBvcnQoJ2V4cHJlc3MnKS5FeHByZXNzO1xuICAvKiogTG9nIGJyb2FkY2FzdCBmdW5jdGlvbiDigJQgY2FsbCB3aXRoIGVhY2ggZW50cnkgdG8gcHVzaCB0byBTU0UgY2xpZW50cyAqL1xuICBsb2dCcm9hZGNhc3Q/OiAoZW50cnk6IGltcG9ydCgnLi4vbG9nZ2luZy90eXBlcy5qcycpLlVuaWZpZWRMb2dFbnRyeSkgPT4gdm9pZDtcbiAgLyoqIE1ldHJpY3Mgc25hcHNob3QgZnVuY3Rpb24g4oCUIGNhbGwgd2l0aCBlYWNoIHNuYXBzaG90IHRvIHB1c2ggdG8gU1NFIGNsaWVudHMgKi9cbiAgbWV0cmljc09uU25hcHNob3Q/OiAoc25hcHNob3Q6IGltcG9ydCgnLi4vbWV0cmljcy90eXBlcy5qcycpLk1ldHJpY1NuYXBzaG90KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIGJyb3dzZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3Nlck9wZW5SZXN1bHQge1xuICAvKiogVGhlIFVSTCB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2FzIGFscmVhZHkgcnVubmluZyAodHJ1ZSkgb3IganVzdCBzdGFydGVkIChmYWxzZSkgKi9cbiAgYWxyZWFkeVJ1bm5pbmc6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBicm93c2VyIHdhcyBzdWNjZXNzZnVsbHkgb3BlbmVkICovXG4gIGJyb3dzZXJPcGVuZWQ6IGJvb2xlYW47XG4gIC8qKiBXYXJuaW5nIG1lc3NhZ2UgaWYgdGhlIGJyb3dzZXIgY291bGQgbm90IGJlIG9wZW5lZCAqL1xuICB3YXJuaW5nPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wZW4gYSBVUkwgaW4gdGhlIHN5c3RlbSdzIGRlZmF1bHQgYnJvd3Nlci5cbiAqXG4gKiBQbGF0Zm9ybS1hd2FyZTpcbiAqIC0gbWFjT1M6IGBvcGVuYFxuICogLSBMaW51eDogYHhkZy1vcGVuYFxuICogLSBXaW5kb3dzOiBgc3RhcnRgXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gb3BlblxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIGJyb3dzZXIgb3BlbmVkLCBmYWxzZSB3aXRoIGVycm9yIG1lc3NhZ2UgaWYgbm90XG4gKi9cbmZ1bmN0aW9uIG9wZW5JbkJyb3dzZXIodXJsOiBzdHJpbmcpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcbiAgICBjb25zdCBjbWQgPSBwbGF0ID09PSAnZGFyd2luJyA/ICdvcGVuJ1xuICAgICAgOiBwbGF0ID09PSAnd2luMzInID8gJ3N0YXJ0J1xuICAgICAgOiAneGRnLW9wZW4nO1xuXG4gICAgLy8gU2VjdXJpdHk6IHVzZSBleGVjRmlsZSB3aXRoIFVSTCBhcyBhcmd1bWVudCBhcnJheSwgbm90IHN0cmluZyBpbnRlcnBvbGF0aW9uXG4gICAgY29uc3QgdXJsU3RyID0gU3RyaW5nKHVybCk7XG4gICAgLy8gQWNjZXB0IGxvY2FsaG9zdCwgMTI3LjAuMC4xLCBhbmQgKi5sb2NhbGhvc3Qgc3ViZG9tYWlucyAoUkZDIDY3NjEpXG4gICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8obG9jYWxob3N0fDEyN1xcLjBcXC4wXFwuMXxbXFx3LV0rXFwubG9jYWxob3N0KVs6L10vLnRlc3QodXJsU3RyKSkge1xuICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ1VSTCBtdXN0IGJlIGEgbG9jYWxob3N0IEhUVFAgVVJMJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY0ZpbGUoY21kLCBbdXJsU3RyXSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBsb2dnZXIud2FybihgW1dlYlVJXSBDb3VsZCBub3QgYXV0by1vcGVuIGJyb3dzZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBwb3J0Zm9saW8gd2ViIHNlcnZlci5cbiAqXG4gKiBCaW5kcyB0byAxMjcuMC4wLjEgb25seSAobG9jYWxob3N0KS4gU2VydmVzIHRoZSBwb3J0Zm9saW8gYnJvd3NlclxuICogZnJvbnRlbmQgYW5kIEFQSSByb3V0ZXMgZm9yIHJlYWRpbmcgZWxlbWVudHMuXG4gKlxuICogSWRlbXBvdGVudDogaWYgdGhlIHNlcnZlciBpcyBhbHJlYWR5IHJ1bm5pbmcsIG9wdGlvbmFsbHkgb3BlbnMgdGhlXG4gKiBicm93c2VyIHdpdGhvdXQgc3RhcnRpbmcgYSBzZWNvbmQgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgSG9va3MgZm9yIERJIHdpcmluZyAobG9nIGJyb2FkY2FzdCwgbWV0cmljcyBvblNuYXBzaG90KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRXZWJTZXJ2ZXIob3B0aW9uczogV2ViU2VydmVyT3B0aW9ucyk6IFByb21pc2U8V2ViU2VydmVyUmVzdWx0PiB7XG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCByZXN1bHQ6IFdlYlNlcnZlclJlc3VsdCA9IHt9O1xuXG4gIGlmIChzZXJ2ZXJSdW5uaW5nKSB7XG4gICAgaWYgKG9wdGlvbnMub3BlbkJyb3dzZXIpIHtcbiAgICAgIG9wZW5JbkJyb3dzZXIoYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtzZXJ2ZXJQb3J0fWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuICByZXN1bHQuYXBwID0gYXBwO1xuICBhcHAuZGlzYWJsZSgneC1wb3dlcmVkLWJ5Jyk7XG5cbiAgLy8gU2VjdXJpdHkgaGVhZGVyc1xuICBhcHAudXNlKChfcmVxLCByZXMsIG5leHQpID0+IHtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLUZyYW1lLU9wdGlvbnMnLCAnREVOWScpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtWFNTLVByb3RlY3Rpb24nLCAnMTsgbW9kZT1ibG9jaycpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1JlZmVycmVyLVBvbGljeScsICduby1yZWZlcnJlcicpO1xuICAgIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsIGBodHRwOi8vJHtDT05TT0xFX0hPU1R9OiR7cG9ydH1gKTtcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsIFtcbiAgICAgIFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIsXG4gICAgICBcInNjcmlwdC1zcmMgJ3NlbGYnIGNkbi5qc2RlbGl2ci5uZXQgY2RuanMuY2xvdWRmbGFyZS5jb21cIixcbiAgICAgIFwic3R5bGUtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZScgY2RuanMuY2xvdWRmbGFyZS5jb20gY2RuLmpzZGVsaXZyLm5ldFwiLFxuICAgICAgXCJjb25uZWN0LXNyYyAnc2VsZicgcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbVwiLFxuICAgICAgXCJmb250LXNyYyAnc2VsZidcIixcbiAgICBdLmpvaW4oJzsgJykpO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgLy8gU2V0dXAgcm91dGVzOiBhdXRvLWluc3RhbGwgRG9sbGhvdXNlTUNQIHRvIE1DUCBjbGllbnRzIChtb3VudCBCRUZPUkUgQVBJIHJvdXRlcylcbiAgYXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzFrYicsIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KSk7XG4gIGNvbnN0IHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciB9ID0gY3JlYXRlU2V0dXBSb3V0ZXMoKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvaW5zdGFsbCcsIGluc3RhbGxIYW5kbGVyKTtcbiAgYXBwLnBvc3QoJy9hcGkvc2V0dXAvb3Blbi1jb25maWcnLCBvcGVuQ29uZmlnSGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvdmVyc2lvbicsIHZlcnNpb25IYW5kbGVyKTtcbiAgYXBwLmdldCgnL2FwaS9zZXR1cC9tY3BiJywgbWNwYlJlZGlyZWN0SGFuZGxlcik7XG4gIGFwcC5nZXQoJy9hcGkvc2V0dXAvZGV0ZWN0JywgZGV0ZWN0SGFuZGxlcik7XG4gIGxvZ2dlci5pbmZvKCdbV2ViVUldIFNldHVwIHJvdXRlcyBtb3VudGVkIGF0IC9hcGkvc2V0dXAnKTtcblxuICAvLyBBUEkgcm91dGVzIOKAlCB1c2UgTUNQLUFRTCBnYXRld2F5IHdoZW4gaGFuZGxlciBpcyBhdmFpbGFibGUgKElzc3VlICM3OTYpXG4gIGlmIChvcHRpb25zLm1jcEFxbEhhbmRsZXIpIHtcbiAgICBhcHAudXNlKCcvYXBpJywgY3JlYXRlR2F0ZXdheUFwaVJvdXRlcyhvcHRpb25zLm1jcEFxbEhhbmRsZXIsIG9wdGlvbnMucG9ydGZvbGlvRGlyKSk7XG5cbiAgICAvLyBQZXJtaXNzaW9uIGV2YWx1YXRpb24gcm91dGVzIChQT1NUIC9ldmFsdWF0ZV9wZXJtaXNzaW9uLCBHRVQgL3Blcm1pc3Npb25zL3N0YXR1cylcbiAgICBjb25zdCB7IHJlZ2lzdGVyUGVybWlzc2lvblJvdXRlcyB9ID0gYXdhaXQgaW1wb3J0KCcuL3JvdXRlcy9wZXJtaXNzaW9uUm91dGVzLmpzJyk7XG4gICAgY29uc3QgcGVybVJvdXRlciA9IChhd2FpdCBpbXBvcnQoJ2V4cHJlc3MnKSkuUm91dGVyKCk7XG4gICAgcmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzKHBlcm1Sb3V0ZXIsIG9wdGlvbnMubWNwQXFsSGFuZGxlcik7XG4gICAgYXBwLnVzZSgnL2FwaScsIHBlcm1Sb3V0ZXIpO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1tXZWJVSV0gQVBJIHJvdXRlcyB1c2luZyBNQ1AtQVFMIEdhdGV3YXkgKyBwZXJtaXNzaW9uIHJvdXRlcycpO1xuICB9IGVsc2Uge1xuICAgIGFwcC51c2UoJy9hcGknLCBjcmVhdGVBcGlSb3V0ZXMob3B0aW9ucy5wb3J0Zm9saW9EaXIpKTtcbiAgICBsb2dnZXIud2FybignW1dlYlVJXSBBUEkgcm91dGVzIHVzaW5nIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcyAobm8gTUNQLUFRTCBoYW5kbGVyIGF2YWlsYWJsZSknKTtcbiAgfVxuXG4gIC8vIENvbnNvbGUgcm91dGVzOiBsb2dzLCBtZXRyaWNzLCBoZWFsdGhcbiAgbGV0IGxvZ1JvdXRlczogTG9nUm91dGVzUmVzdWx0IHwgdW5kZWZpbmVkO1xuICBsZXQgbWV0cmljc1JvdXRlczogTWV0cmljc1JvdXRlc1Jlc3VsdCB8IHVuZGVmaW5lZDtcblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgbG9nUm91dGVzID0gY3JlYXRlTG9nUm91dGVzKG9wdGlvbnMubWVtb3J5U2luayk7XG4gICAgYXBwLnVzZSgnL2FwaScsIGxvZ1JvdXRlcy5yb3V0ZXIpO1xuICAgIHJlc3VsdC5sb2dCcm9hZGNhc3QgPSBsb2dSb3V0ZXMuYnJvYWRjYXN0O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIExvZyB2aWV3ZXIgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9sb2dzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZXRyaWNzU2luaykge1xuICAgIG1ldHJpY3NSb3V0ZXMgPSBjcmVhdGVNZXRyaWNzUm91dGVzKG9wdGlvbnMubWV0cmljc1NpbmspO1xuICAgIGFwcC51c2UoJy9hcGknLCBtZXRyaWNzUm91dGVzLnJvdXRlcik7XG4gICAgcmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90ID0gbWV0cmljc1JvdXRlcy5vblNuYXBzaG90O1xuICAgIGxvZ2dlci5pbmZvKCdbV2ViVUldIE1ldHJpY3Mgcm91dGVzIG1vdW50ZWQgYXQgL2FwaS9tZXRyaWNzJyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tZW1vcnlTaW5rKSB7XG4gICAgY29uc3QgaGVhbHRoUm91dGVyID0gY3JlYXRlSGVhbHRoUm91dGVzKHtcbiAgICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICAgIG1ldHJpY3NTaW5rOiBvcHRpb25zLm1ldHJpY3NTaW5rLFxuICAgICAgbG9nQ2xpZW50Q291bnQ6IGxvZ1JvdXRlcyA/IGxvZ1JvdXRlcy5jbGllbnRDb3VudCA6ICgpID0+IDAsXG4gICAgICBtZXRyaWNzQ2xpZW50Q291bnQ6IG1ldHJpY3NSb3V0ZXMgPyBtZXRyaWNzUm91dGVzLmNsaWVudENvdW50IDogKCkgPT4gMCxcbiAgICB9KTtcbiAgICBhcHAudXNlKCcvYXBpJywgaGVhbHRoUm91dGVyKTtcbiAgfVxuXG4gIC8vIFNlcnZlIH4vLmRvbGxob3VzZS9wYWdlcy8gYXQgL3BhZ2VzLyDigJQgZGFzaGJvYXJkcywgZ2VuZXJhdGVkIGNvbnRlbnQsIHN0YWNrIHZpZXdzXG4gIGNvbnN0IHBhZ2VzRGlyID0gam9pbihkaXJuYW1lKG9wdGlvbnMucG9ydGZvbGlvRGlyKSwgJ3BhZ2VzJyk7XG4gIG1rZGlyKHBhZ2VzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KS5jYXRjaChlcnIgPT4ge1xuICAgIGxvZ2dlci53YXJuKGBbV2ViVUldIENvdWxkIG5vdCBjcmVhdGUgcGFnZXMgZGlyZWN0b3J5OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH0pO1xuICBhcHAudXNlKCcvcGFnZXMnLCBleHByZXNzLnN0YXRpYyhwYWdlc0RpcikpO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9wYWdlc1xuICAgKiBMaXN0cyBhdmFpbGFibGUgSFRNTCBwYWdlcyBpbiB+Ly5kb2xsaG91c2UvcGFnZXMvLlxuICAgKiBSZXR1cm5zIHBhZ2UgbmFtZXMgYW5kIHRoZWlyIFVSTHMgZm9yIHRoZSBtYW5hZ2VtZW50IGNvbnNvbGUuXG4gICAqL1xuICBhcHAuZ2V0KCcvYXBpL3BhZ2VzJywgYXN5bmMgKF9yZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIocGFnZXNEaXIpO1xuICAgICAgY29uc3QgcGFnZXMgPSBmaWxlc1xuICAgICAgICAuZmlsdGVyKGYgPT4gIWYuc3RhcnRzV2l0aCgnLicpICYmIEFMTE9XRURfUEFHRV9FWFRFTlNJT05TLmhhcyhleHRuYW1lKGYpKSlcbiAgICAgICAgLm1hcChmID0+ICh7IG5hbWU6IGYsIHVybDogYC9wYWdlcy8ke2Z9YCB9KSk7XG4gICAgICByZXMuanNvbih7IHBhZ2VzLCBkaXJlY3Rvcnk6IHBhZ2VzRGlyIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmVzLmpzb24oeyBwYWdlczogW10sIGRpcmVjdG9yeTogcGFnZXNEaXIgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBBZGRpdGlvbmFsIHJvdXRlcnMgKGUuZy4sIHVuaWZpZWQgY29uc29sZSBpbmdlc3Qgcm91dGVzKSDigJQgbXVzdCBtb3VudCBiZWZvcmUgU1BBIGZhbGxiYWNrXG4gIG9wdGlvbnMuYWRkaXRpb25hbFJvdXRlcnM/LmZvckVhY2gocm91dGVyID0+IGFwcC51c2Uocm91dGVyKSk7XG5cbiAgLy8gU3RhdGljIGZyb250ZW5kIGZpbGVzXG4gIGNvbnN0IHB1YmxpY0RpciA9IGpvaW4oX19kaXJuYW1lLCAncHVibGljJyk7XG4gIGFwcC51c2UoZXhwcmVzcy5zdGF0aWMocHVibGljRGlyKSk7XG5cbiAgLy8gU1BBIGZhbGxiYWNrXG4gIGFwcC5nZXQoJy97KnBhdGh9JywgKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSByZXEucGF0aC5ub3JtYWxpemUoJ05GQycpO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvYXBpLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgQVBJIHJvdXRlIG5vdCBmb3VuZDogJHtub3JtYWxpemVkUGF0aH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnL3BhZ2VzLycpKSB7XG4gICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7IGVycm9yOiBgUGFnZSBub3QgZm91bmQ6ICR7bm9ybWFsaXplZFBhdGh9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVzLnNlbmRGaWxlKGpvaW4ocHVibGljRGlyLCAnaW5kZXguaHRtbCcpKTtcbiAgfSk7XG5cbiAgLy8gQmluZCB0byBsb2NhbGhvc3Qgb25seVxuICBhcHAubGlzdGVuKHBvcnQsICcxMjcuMC4wLjEnLCAoKSA9PiB7XG4gICAgc2VydmVyUnVubmluZyA9IHRydWU7XG4gICAgc2VydmVyUG9ydCA9IHBvcnQ7XG4gICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke0NPTlNPTEVfSE9TVH06JHtwb3J0fWA7XG4gICAgY29uc3QgZmFsbGJhY2tVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke3BvcnR9YDtcbiAgICBsb2dnZXIuaW5mbyhgW1dlYlVJXSBNYW5hZ2VtZW50IGNvbnNvbGUgcnVubmluZyBhdCAke3VybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgXFxuICBEb2xsaG91c2VNQ1AgTWFuYWdlbWVudCBDb25zb2xlXFxuICAke3VybH1cXG4gICR7ZmFsbGJhY2tVcmx9IChmYWxsYmFjaylcXG5gKTtcblxuICAgIGlmIChvcHRpb25zLm9wZW5Ccm93c2VyKSB7XG4gICAgICBvcGVuSW5Ccm93c2VyKHVybCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIE9wZW4gdGhlIHBvcnRmb2xpbyBicm93c2VyIGZyb20gd2l0aGluIHRoZSBNQ1Agc2VydmVyIHByb2Nlc3MuXG4gKlxuICogU3RhcnRzIHRoZSB3ZWIgc2VydmVyIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIHRoZW4gb3BlbnMgdGhlIHN5c3RlbVxuICogYnJvd3NlciB0byB0aGUgcG9ydGZvbGlvIFVJLiBSZXR1cm5zIGEgcmVzdWx0IG9iamVjdCBpbmRpY2F0aW5nXG4gKiB3aGV0aGVyIHRoZSBzZXJ2ZXIgc3RhcnRlZCBhbmQgdGhlIGJyb3dzZXIgb3BlbmVkIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBDYWxsZWQgYnkgdGhlIGBvcGVuX3BvcnRmb2xpb19icm93c2VyYCBNQ1AtQVFMIG9wZXJhdGlvbiAoSXNzdWUgIzc3NCkuXG4gKlxuICogQHBhcmFtIHBvcnRmb2xpb0RpciAtIFBhdGggdG8gdGhlIHBvcnRmb2xpbyBkaXJlY3RvcnkgKGUuZy4sIH4vLmRvbGxob3VzZS9wb3J0Zm9saW8pXG4gKiBAcGFyYW0gcG9ydCAtIFBvcnQgdG8gYmluZCB0byAoZGVmYXVsdDogMzkzOSlcbiAqIEByZXR1cm5zIFJlc3VsdCB3aXRoIFVSTCwgc2VydmVyIHN0YXR1cywgYW5kIGJyb3dzZXIgb3BlbiBzdGF0dXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qb3J0Zm9saW9Ccm93c2VyKHBvcnRmb2xpb0Rpcjogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBtY3BBcWxIYW5kbGVyPzogTUNQQVFMSGFuZGxlcik6IFByb21pc2U8QnJvd3Nlck9wZW5SZXN1bHQ+IHtcbiAgY29uc3QgdGFyZ2V0UG9ydCA9IHBvcnQgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCB1cmwgPSBgaHR0cDovLyR7Q09OU09MRV9IT1NUfToke3RhcmdldFBvcnR9YDtcbiAgY29uc3QgYWxyZWFkeVJ1bm5pbmcgPSBzZXJ2ZXJSdW5uaW5nO1xuXG4gIGlmICghc2VydmVyUnVubmluZykge1xuICAgIGF3YWl0IHN0YXJ0V2ViU2VydmVyKHtcbiAgICAgIHBvcnRmb2xpb0RpcixcbiAgICAgIHBvcnQ6IHRhcmdldFBvcnQsXG4gICAgICBvcGVuQnJvd3NlcjogZmFsc2UsIC8vIFdlJ2xsIG9wZW4gbWFudWFsbHkgYmVsb3cgdG8gY2FwdHVyZSB0aGUgcmVzdWx0XG4gICAgICBtY3BBcWxIYW5kbGVyLFxuICAgIH0pO1xuICAgIC8vIFdhaXQgYnJpZWZseSBmb3IgdGhlIHNlcnZlciB0byBiaW5kXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMCkpO1xuICB9XG5cbiAgY29uc3QgYnJvd3NlclJlc3VsdCA9IGF3YWl0IG9wZW5JbkJyb3dzZXIodXJsKTtcblxuICByZXR1cm4ge1xuICAgIHVybCxcbiAgICBhbHJlYWR5UnVubmluZyxcbiAgICBicm93c2VyT3BlbmVkOiBicm93c2VyUmVzdWx0LnN1Y2Nlc3MsXG4gICAgLi4uKGJyb3dzZXJSZXN1bHQuZXJyb3IgPyB7IHdhcm5pbmc6IGBCcm93c2VyIGNvdWxkIG5vdCBiZSBvcGVuZWQgYXV0b21hdGljYWxseTogJHticm93c2VyUmVzdWx0LmVycm9yfS4gT3BlbiAke3VybH0gbWFudWFsbHkuYCB9IDoge30pLFxuICB9O1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.5",
|
|
4
4
|
"description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|