@dollhousemcp/mcp-server 2.0.40 → 2.0.41
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/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +10 -7
- package/dist/elements/agents/AgentManager.d.ts +25 -6
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +127 -21
- package/dist/elements/base/BaseElementManager.d.ts +18 -2
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +36 -3
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts +36 -8
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +227 -96
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +3 -3
- package/dist/handlers/strategies/AgentActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/AgentActivationStrategy.js +5 -2
- package/dist/handlers/strategies/ElementActivationStrategy.d.ts +2 -0
- package/dist/handlers/strategies/ElementActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/ElementActivationStrategy.js +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/services/ActivationStore.d.ts +5 -4
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +35 -9
- package/dist/services/PolicyExportService.d.ts +8 -2
- package/dist/services/PolicyExportService.d.ts.map +1 -1
- package/dist/services/PolicyExportService.js +37 -6
- package/dist/storage/ElementStorageLayer.d.ts +3 -3
- package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
- package/dist/storage/ElementStorageLayer.js +33 -7
- package/dist/storage/IStorageLayer.d.ts +8 -1
- package/dist/storage/IStorageLayer.d.ts.map +1 -1
- package/dist/storage/IStorageLayer.js +1 -1
- package/dist/storage/MemoryStorageLayer.d.ts +4 -3
- package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
- package/dist/storage/MemoryStorageLayer.js +43 -13
- package/dist/storage/types.d.ts +7 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +17 -2
- package/oauth-helper.mjs +19 -26
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
import { logger } from '../utils/logger.js';
|
|
16
|
+
import { mergeManifestDiffResults } from './types.js';
|
|
16
17
|
import { StorageManifest } from './StorageManifest.js';
|
|
17
18
|
import { MetadataIndex } from './MetadataIndex.js';
|
|
18
19
|
import { FileStorageBackend } from './FileStorageBackend.js';
|
|
@@ -50,28 +51,57 @@ export class MemoryStorageLayer {
|
|
|
50
51
|
});
|
|
51
52
|
}
|
|
52
53
|
// ---- IStorageLayer implementation ----
|
|
53
|
-
async scan() {
|
|
54
|
+
async scan(options = {}) {
|
|
55
|
+
let drainedDiff;
|
|
56
|
+
const existingScan = this.scanInProgress;
|
|
57
|
+
if (existingScan) {
|
|
58
|
+
if (!options.freshAfterInFlight) {
|
|
59
|
+
return existingScan;
|
|
60
|
+
}
|
|
61
|
+
drainedDiff = await this.drainInFlightScan(existingScan);
|
|
62
|
+
this.invalidate();
|
|
63
|
+
}
|
|
54
64
|
// Cold start: try loading from _index.json first
|
|
65
|
+
let scan;
|
|
55
66
|
if (!this.coldStartDone) {
|
|
56
67
|
this.coldStartDone = true;
|
|
57
|
-
|
|
68
|
+
scan = this.coldStart();
|
|
58
69
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
else {
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
if (now - this.lastScanTimestamp < this.scanCooldownMs) {
|
|
73
|
+
logger.debug(`MemoryStorageLayer.scan: COOLDOWN ACTIVE — skipping disk I/O (${this.scanCooldownMs - (now - this.lastScanTimestamp)}ms remaining)`);
|
|
74
|
+
return EMPTY_DIFF;
|
|
75
|
+
}
|
|
76
|
+
if (this.scanInProgress) {
|
|
77
|
+
const result = await this.scanInProgress;
|
|
78
|
+
return drainedDiff ? mergeManifestDiffResults(drainedDiff, result) : result;
|
|
79
|
+
}
|
|
80
|
+
scan = this.performScan();
|
|
67
81
|
}
|
|
68
|
-
this.scanInProgress =
|
|
82
|
+
this.scanInProgress = scan;
|
|
69
83
|
try {
|
|
70
|
-
|
|
84
|
+
const result = await scan;
|
|
85
|
+
return drainedDiff ? mergeManifestDiffResults(drainedDiff, result) : result;
|
|
71
86
|
}
|
|
72
87
|
finally {
|
|
88
|
+
if (this.scanInProgress === scan) {
|
|
89
|
+
this.scanInProgress = null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async drainInFlightScan(existingScan) {
|
|
94
|
+
let drainedDiff;
|
|
95
|
+
try {
|
|
96
|
+
drainedDiff = await existingScan;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// The trailing scan gets an independent chance to recover.
|
|
100
|
+
}
|
|
101
|
+
if (this.scanInProgress === existingScan) {
|
|
73
102
|
this.scanInProgress = null;
|
|
74
103
|
}
|
|
104
|
+
return drainedDiff;
|
|
75
105
|
}
|
|
76
106
|
async listSummaries() {
|
|
77
107
|
await this.scan();
|
|
@@ -349,4 +379,4 @@ export class MemoryStorageLayer {
|
|
|
349
379
|
}
|
|
350
380
|
}
|
|
351
381
|
}
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5U3RvcmFnZUxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQWU5RSxNQUFNLFVBQVUsR0FBdUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDL0YsTUFBTSxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztBQUVsRCxNQUFNLE9BQU8sa0JBQWtCO0lBY1Y7SUFiRixPQUFPLENBQWtCO0lBQ3pCLFFBQVEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ2pDLEtBQUssR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzVCLFNBQVMsQ0FBa0I7SUFDM0IsV0FBVyxDQUFTO0lBQ3BCLGNBQWMsQ0FBUztJQUN2QixVQUFVLENBQWlDO0lBRXBELGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QixjQUFjLEdBQXVDLElBQUksQ0FBQztJQUMxRCxhQUFhLEdBQUcs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QUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLENBQUM7WUFFRCxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUVwQywyREFBMkQ7WUFDM0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsdUJBQXVCO1lBQzVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1lbW9yeVN0b3JhZ2VMYXllciAtIElTdG9yYWdlTGF5ZXIgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpLWRpcmVjdG9yeSBtZW1vcnkgc2Nhbm5pbmcuXG4gKlxuICogTWVtb3JpZXMgdXNlIHB1cmUgWUFNTCBhY3Jvc3MgYSBtdWx0aS1kaXJlY3RvcnkgbGF5b3V0OlxuICogICBzeXN0ZW0vICAgICAgIOKAlCBTeXN0ZW0tcHJvdmlkZWQgbWVtb3JpZXNcbiAqICAgYWRhcHRlcnMvICAgICDigJQgQWRhcHRlci1zcGVjaWZpYyBtZW1vcmllc1xuICogICBZWVlZLU1NLURELyAgIOKAlCBVc2VyLWNyZWF0ZWQgZGF0ZS1mb2xkZXIgbWVtb3JpZXNcbiAqICAgKHJvb3QpICAgICAgICDigJQgTGVnYWN5IHJvb3QtbGV2ZWwgbWVtb3JpZXNcbiAqXG4gKiBSZXVzZXMgdGhlIHNhbWUgaW50ZXJuYWwgY29tcG9uZW50cyBhcyBFbGVtZW50U3RvcmFnZUxheWVyIChNZXRhZGF0YUluZGV4LFxuICogU3RvcmFnZU1hbmlmZXN0LCBGaWxlU3RvcmFnZUJhY2tlbmQpIGJ1dCB3aXRoIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IHNjYW5cbiAqIGxvZ2ljOiBtdWx0aS1kaXJlY3RvcnkgZW51bWVyYXRpb24gKyBfaW5kZXguanNvbiBjb2xkLXN0YXJ0IHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBJU3RvcmFnZUxheWVyIH0gZnJvbSAnLi9JU3RvcmFnZUxheWVyLmpzJztcbmltcG9ydCB0eXBlIHsgSVN0b3JhZ2VCYWNrZW5kIH0gZnJvbSAnLi9JU3RvcmFnZUJhY2tlbmQuanMnO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50SW5kZXhFbnRyeSwgTWFuaWZlc3REaWZmUmVzdWx0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTdG9yYWdlTWFuaWZlc3QgfSBmcm9tICcuL1N0b3JhZ2VNYW5pZmVzdC5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YUluZGV4IH0gZnJvbSAnLi9NZXRhZGF0YUluZGV4LmpzJztcbmltcG9ydCB7IEZpbGVTdG9yYWdlQmFja2VuZCB9IGZyb20gJy4vRmlsZVN0b3JhZ2VCYWNrZW5kLmpzJztcbmltcG9ydCB7IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yIH0gZnJvbSAnLi9NZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5qcyc7XG5pbXBvcnQgeyBNZW1vcnlJbmRleEZpbGUgfSBmcm9tICcuL01lbW9yeUluZGV4RmlsZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlTdG9yYWdlTGF5ZXJPcHRpb25zIHtcbiAgLyoqIEFic29sdXRlIHBhdGggdG8gdGhlIG1lbW9yaWVzIGRpcmVjdG9yeSAqL1xuICBtZW1vcmllc0Rpcjogc3RyaW5nO1xuICAvKiogTWluaW11bSBtaWxsaXNlY29uZHMgYmV0d2VlbiBmdWxsIHNjYW5zIChkZWZhdWx0OiAxMDAwKSAqL1xuICBzY2FuQ29vbGRvd25Ncz86IG51bWJlcjtcbiAgLyoqIE92ZXJyaWRlIHRoZSBzdG9yYWdlIGJhY2tlbmQgKHVzZWZ1bCBmb3IgdGVzdGluZykgKi9cbiAgc3RvcmFnZUJhY2tlbmQ/OiBJU3RvcmFnZUJhY2tlbmQ7XG4gIC8qKiBEZWJvdW5jZSBpbnRlcnZhbCBmb3IgX2luZGV4Lmpzb24gd3JpdGVzIChkZWZhdWx0OiAyMDAwKSAqL1xuICBpbmRleERlYm91bmNlTXM/OiBudW1iZXI7XG4gIC8qKiBGaWxlIGZpbHRlciBwcmVkaWNhdGUgKGUuZy4sIGV4Y2x1ZGUgYmFja3VwIGZpbGVzKSAqL1xuICBmaWxlRmlsdGVyPzogKGZpbGVuYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbmNvbnN0IEVNUFRZX0RJRkY6IE1hbmlmZXN0RGlmZlJlc3VsdCA9IHsgYWRkZWQ6IFtdLCBtb2RpZmllZDogW10sIHJlbW92ZWQ6IFtdLCB1bmNoYW5nZWQ6IFtdIH07XG5jb25zdCBEQVRFX0ZPTERFUl9QQVRURVJOID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvO1xuXG5leHBvcnQgY2xhc3MgTWVtb3J5U3RvcmFnZUxheWVyIGltcGxlbWVudHMgSVN0b3JhZ2VMYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFja2VuZDogSVN0b3JhZ2VCYWNrZW5kO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0ID0gbmV3IFN0b3JhZ2VNYW5pZmVzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGV4ID0gbmV3IE1ldGFkYXRhSW5kZXgoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmRleEZpbGU6IE1lbW9yeUluZGV4RmlsZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZW1vcmllc0Rpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjYW5Db29sZG93bk1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZUZpbHRlcj86IChmaWxlbmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIHByaXZhdGUgbGFzdFNjYW5UaW1lc3RhbXAgPSAwO1xuICBwcml2YXRlIHNjYW5JblByb2dyZXNzOiBQcm9taXNlPE1hbmlmZXN0RGlmZlJlc3VsdD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb2xkU3RhcnREb25lID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BzOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgb3B0aW9uczogTWVtb3J5U3RvcmFnZUxheWVyT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLm1lbW9yaWVzRGlyID0gb3B0aW9ucy5tZW1vcmllc0RpcjtcbiAgICB0aGlzLnNjYW5Db29sZG93bk1zID0gb3B0aW9ucy5zY2FuQ29vbGRvd25NcyA/PyAxMDAwO1xuICAgIHRoaXMuZmlsZUZpbHRlciA9IG9wdGlvbnMuZmlsZUZpbHRlcjtcblxuICAgIGlmIChvcHRpb25zLnN0b3JhZ2VCYWNrZW5kKSB7XG4gICAgICB0aGlzLmJhY2tlbmQgPSBvcHRpb25zLnN0b3JhZ2VCYWNrZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJhY2tlbmQgPSBuZXcgRmlsZVN0b3JhZ2VCYWNrZW5kKGZpbGVPcHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4UGF0aCA9IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCAnX2luZGV4Lmpzb24nKTtcbiAgICB0aGlzLmluZGV4RmlsZSA9IG5ldyBNZW1vcnlJbmRleEZpbGUoaW5kZXhQYXRoLCBmaWxlT3BzLCB7XG4gICAgICBkZWJvdW5jZU1zOiBvcHRpb25zLmluZGV4RGVib3VuY2VNcyA/PyAyMDAwLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLSBJU3RvcmFnZUxheWVyIGltcGxlbWVudGF0aW9uIC0tLS1cblxuICBhc3luYyBzY2FuKCk6IFByb21pc2U8TWFuaWZlc3REaWZmUmVzdWx0PiB7XG4gICAgLy8gQ29sZCBzdGFydDogdHJ5IGxvYWRpbmcgZnJvbSBfaW5kZXguanNvbiBmaXJzdFxuICAgIGlmICghdGhpcy5jb2xkU3RhcnREb25lKSB7XG4gICAgICB0aGlzLmNvbGRTdGFydERvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuY29sZFN0YXJ0KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAobm93IC0gdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA8IHRoaXMuc2NhbkNvb2xkb3duTXMpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTWVtb3J5U3RvcmFnZUxheWVyLnNjYW46IENPT0xET1dOIEFDVElWRSDigJQgc2tpcHBpbmcgZGlzayBJL08gKCR7dGhpcy5zY2FuQ29vbGRvd25NcyAtIChub3cgLSB0aGlzLmxhc3RTY2FuVGltZXN0YW1wKX1tcyByZW1haW5pbmcpYCk7XG4gICAgICByZXR1cm4gRU1QVFlfRElGRjtcbiAgICB9XG5cbiAgICAvLyBEZWR1cGxpY2F0ZSBjb25jdXJyZW50IHNjYW5zXG4gICAgaWYgKHRoaXMuc2NhbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjYW5JblByb2dyZXNzO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbkluUHJvZ3Jlc3MgPSB0aGlzLnBlcmZvcm1TY2FuKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNjYW5JblByb2dyZXNzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNjYW5JblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0U3VtbWFyaWVzKCk6IFByb21pc2U8RWxlbWVudEluZGV4RW50cnlbXT4ge1xuICAgIGF3YWl0IHRoaXMuc2NhbigpO1xuICAgIHJldHVybiB0aGlzLmRlZHVwbGljYXRlQnlOYW1lKHRoaXMuaW5kZXguZ2V0QWxsKCkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5kZXhlZFBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBhd2FpdCB0aGlzLnNjYW4oKTtcbiAgICBjb25zdCBkZWR1cGxpY2F0ZWQgPSB0aGlzLmRlZHVwbGljYXRlQnlOYW1lKHRoaXMuaW5kZXguZ2V0QWxsKCkpO1xuICAgIHJldHVybiBkZWR1cGxpY2F0ZWQubWFwKGVudHJ5ID0+IGVudHJ5LmZpbGVQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWR1cGxpY2F0ZSBpbmRleCBlbnRyaWVzIGJ5IG5vcm1hbGl6ZWQgbmFtZS5cbiAgICogV2hlbiB0aGUgc2FtZSBtZW1vcnkgYXBwZWFycyBpbiBtdWx0aXBsZSBkYXRlIGZvbGRlcnMsIGtlZXAgdGhlIG9uZVxuICAgKiB3aXRoIHRoZSBoaWdoZXN0IG10aW1lTXMgKG1vc3QgcmVjZW50bHkgbW9kaWZpZWQpLlxuICAgKlxuICAgKiBJc3N1ZSAjNjU0OiBTYW1lIG1lbW9yeSBmaWxlcyBkdXBsaWNhdGVkIGFjcm9zcyB+MTUwIGRhdGUgZm9sZGVyc1xuICAgKiBpbmZsYXRlZCBjb3VudHMgZnJvbSB+NzUwIHVuaXF1ZSB0byB+MywxMDArIGxvYWRlZCBtZW1vcmllcy5cbiAgICovXG4gIHByaXZhdGUgZGVkdXBsaWNhdGVCeU5hbWUoZW50cmllczogRWxlbWVudEluZGV4RW50cnlbXSk6IEVsZW1lbnRJbmRleEVudHJ5W10ge1xuICAgIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBFbGVtZW50SW5kZXhFbnRyeT4oKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGtleSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGVudHJ5Lm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGJ5TmFtZS5nZXQoa2V5KTtcbiAgICAgIGlmICghZXhpc3RpbmcgfHwgZW50cnkubXRpbWVNcyA+IGV4aXN0aW5nLm10aW1lTXMpIHtcbiAgICAgICAgYnlOYW1lLnNldChrZXksIGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFsuLi5ieU5hbWUudmFsdWVzKCldO1xuICB9XG5cbiAgZ2V0UGF0aEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXguZ2V0UGF0aEJ5TmFtZShub3JtYWxpemVkTmFtZSk7XG4gIH1cblxuICBoYXNDb21wbGV0ZWRTY2FuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxhc3RTY2FuVGltZXN0YW1wID4gMDtcbiAgfVxuXG4gIGFzeW5jIG5vdGlmeVNhdmVkKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBhYnNvbHV0ZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5iYWNrZW5kLnJlYWRGaWxlKGFic29sdXRlUGF0aCk7XG4gICAgICBjb25zdCBtZXRhID0gYXdhaXQgdGhpcy5iYWNrZW5kLnN0YXQoYWJzb2x1dGVQYXRoKTtcbiAgICAgIGNvbnN0IGV4dHJhY3RlZCA9IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLmV4dHJhY3RNZXRhZGF0YShjb250ZW50LCByZWxhdGl2ZVBhdGgpO1xuXG4gICAgICBjb25zdCBlbnRyeTogRWxlbWVudEluZGV4RW50cnkgPSB7XG4gICAgICAgIGZpbGVQYXRoOiByZWxhdGl2ZVBhdGgsXG4gICAgICAgIG5hbWU6IGV4dHJhY3RlZC5uYW1lID8/ICd1bm5hbWVkJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGV4dHJhY3RlZC5kZXNjcmlwdGlvbiA/PyAnJyxcbiAgICAgICAgdmVyc2lvbjogZXh0cmFjdGVkLnZlcnNpb24gPz8gJzEuMC4wJyxcbiAgICAgICAgYXV0aG9yOiBleHRyYWN0ZWQuYXV0aG9yID8/ICcnLFxuICAgICAgICB0YWdzOiBleHRyYWN0ZWQudGFncyA/PyBbXSxcbiAgICAgICAgbXRpbWVNczogbWV0YS5tdGltZU1zLFxuICAgICAgICBzaXplQnl0ZXM6IG1ldGEuc2l6ZUJ5dGVzLFxuICAgICAgICBhdXRvTG9hZDogZXh0cmFjdGVkLmF1dG9Mb2FkLFxuICAgICAgICBwcmlvcml0eTogZXh0cmFjdGVkLnByaW9yaXR5LFxuICAgICAgICBtZW1vcnlUeXBlOiBleHRyYWN0ZWQubWVtb3J5VHlwZSxcbiAgICAgICAgdG90YWxFbnRyaWVzOiBleHRyYWN0ZWQudG90YWxFbnRyaWVzLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5pbmRleC5zZXQoZW50cnkpO1xuICAgICAgdGhpcy5tYW5pZmVzdC5zZXQocmVsYXRpdmVQYXRoLCBtZXRhLm10aW1lTXMpO1xuICAgICAgdGhpcy5pbmRleEZpbGUuc2NoZWR1bGVXcml0ZSh0aGlzLmluZGV4LmdldEFsbCgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdNZW1vcnlTdG9yYWdlTGF5ZXIubm90aWZ5U2F2ZWQgZmFpbGVkLCBpbnZhbGlkYXRpbmcnLCB7XG4gICAgICAgIHJlbGF0aXZlUGF0aCxcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgbm90aWZ5RGVsZXRlZChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW5kZXgucmVtb3ZlKHJlbGF0aXZlUGF0aCk7XG4gICAgdGhpcy5tYW5pZmVzdC5yZW1vdmUocmVsYXRpdmVQYXRoKTtcbiAgICB0aGlzLmluZGV4RmlsZS5zY2hlZHVsZVdyaXRlKHRoaXMuaW5kZXguZ2V0QWxsKCkpO1xuICB9XG5cbiAgaW52YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxhc3RTY2FuVGltZXN0YW1wID0gMDtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuaW5kZXhGaWxlLmRpc3Bvc2UoKTsgIC8vIENhbmNlbCBwZW5kaW5nIGRlYm91bmNlZCB3cml0ZSAocHJldmVudHMgRU5PVEVNUFRZIGluIHRlc3RzKVxuICAgIHRoaXMuaW5kZXguY2xlYXIoKTtcbiAgICB0aGlzLm1hbmlmZXN0LmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IDA7XG4gIH1cblxuICAvLyAtLS0tIE1lbW9yeS1zcGVjaWZpYyBtZXRob2RzIC0tLS1cblxuICAvKipcbiAgICogUmV0dXJuIGluZGV4IGVudHJpZXMgd2hlcmUgYXV0b0xvYWQgPT09IHRydWUsIHNvcnRlZCBieSBwcmlvcml0eSBhc2NlbmRpbmcuXG4gICAqIFB1cmUgaW4tbWVtb3J5IOKAlCBkb2VzIE5PVCB0cmlnZ2VyIGEgc2Nhbi5cbiAgICovXG4gIGdldEF1dG9Mb2FkRW50cmllcygpOiBFbGVtZW50SW5kZXhFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleC5nZXRBbGwoKVxuICAgICAgLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5hdXRvTG9hZCA9PT0gdHJ1ZSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5wcmlvcml0eSA/PyA5OTkpIC0gKGIucHJpb3JpdHkgPz8gOTk5KSk7XG4gIH1cblxuICAvKipcbiAgICogRnVsbCBkaXNrIHNjYW4gb2YgYWxsIHN1YmRpcmVjdG9yaWVzICsgd3JpdGUgX2luZGV4Lmpzb24uXG4gICAqL1xuICBhc3luYyByZWJ1aWxkSW5kZXgoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmluZm8oJ01lbW9yeVN0b3JhZ2VMYXllcjogcmVidWlsZGluZyBpbmRleCBmcm9tIGRpc2suLi4nKTtcbiAgICB0aGlzLmluZGV4LmNsZWFyKCk7XG4gICAgdGhpcy5tYW5pZmVzdC5jbGVhcigpO1xuXG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtU2NhbigpO1xuICAgIGF3YWl0IHRoaXMuaW5kZXhGaWxlLndyaXRlKHRoaXMuaW5kZXguZ2V0QWxsKCkpO1xuXG4gICAgbG9nZ2VyLmluZm8oYE1lbW9yeVN0b3JhZ2VMYXllcjogcmVidWlsZCBjb21wbGV0ZSDigJQgJHt0aGlzLmluZGV4LnNpemV9IGVudHJpZXMgaW5kZXhlZGApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoIHBlbmRpbmcgX2luZGV4Lmpzb24gd3JpdGUgYW5kIHJlbGVhc2UgcmVzb3VyY2VzLlxuICAgKi9cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluZGV4RmlsZS5mbHVzaCgpO1xuICAgIHRoaXMuaW5kZXhGaWxlLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIC0tLS0gUHJpdmF0ZSAtLS0tXG5cbiAgLyoqXG4gICAqIENvbGQgc3RhcnQ6IHRyeSB0byByZXN0b3JlIGZyb20gX2luZGV4Lmpzb24sIHRoZW4gcnVuIGluY3JlbWVudGFsIHNjYW4uXG4gICAqIEZhbGxzIGJhY2sgdG8gZnVsbCByZWJ1aWxkIGlmIGluZGV4IGlzIG1pc3NpbmcvY29ycnVwdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29sZFN0YXJ0KCk6IFByb21pc2U8TWFuaWZlc3REaWZmUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHRoaXMuaW5kZXhGaWxlLnJlYWQoKTtcblxuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAvLyBQb3B1bGF0ZSBpbmRleCBhbmQgbWFuaWZlc3QgZnJvbSBjYWNoZWQgZGF0YVxuICAgICAgICBmb3IgKGNvbnN0IFtyZWxQYXRoLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoY2FjaGVkLmVudHJpZXMpKSB7XG4gICAgICAgICAgdGhpcy5pbmRleC5zZXQoZW50cnkpO1xuICAgICAgICAgIHRoaXMubWFuaWZlc3Quc2V0KHJlbFBhdGgsIGVudHJ5Lm10aW1lTXMpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBNZW1vcnlTdG9yYWdlTGF5ZXI6IGNvbGQgc3RhcnQg4oCUIGxvYWRlZCAke09iamVjdC5rZXlzKGNhY2hlZC5lbnRyaWVzKS5sZW5ndGh9IGVudHJpZXMgZnJvbSBfaW5kZXguanNvbmApO1xuXG4gICAgICAgIC8vIFJ1biBpbmNyZW1lbnRhbCBzY2FuIHRvIGNhdGNoIGNoYW5nZXMgc2luY2UgX2luZGV4Lmpzb24gd2FzIHdyaXR0ZW5cbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVNjYW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdNZW1vcnlTdG9yYWdlTGF5ZXI6IGNvbGQgc3RhcnQgX2luZGV4Lmpzb24gcmVhZCBmYWlsZWQsIHJlYnVpbGRpbmcnLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBObyB2YWxpZCBfaW5kZXguanNvbiDigJQgZnVsbCByZWJ1aWxkXG4gICAgYXdhaXQgdGhpcy5yZWJ1aWxkSW5kZXgoKTtcbiAgICByZXR1cm4gRU1QVFlfRElGRjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb3ZlciBhbGwgc3ViZGlyZWN0b3JpZXMgdG8gc2Nhbi5cbiAgICogUmV0dXJucyBbJ3N5c3RlbScsICdhZGFwdGVycycsIC4uLmRhdGVGb2xkZXJzLCAnJ10gd2hlcmUgJycgPSByb290LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlclN1YmRpcmVjdG9yaWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBzdWJkaXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmZpbGVPcHMubGlzdERpcmVjdG9yeSh0aGlzLm1lbW9yaWVzRGlyKTtcblxuICAgICAgY29uc3QgZGF0ZUZvbGRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgLy8gSW5jbHVkZSBrbm93biBmaXhlZCBkaXJlY3Rvcmllc1xuICAgICAgICBpZiAoZW50cnkgPT09ICdzeXN0ZW0nIHx8IGVudHJ5ID09PSAnYWRhcHRlcnMnKSB7XG4gICAgICAgICAgc3ViZGlycy5wdXNoKGVudHJ5KTtcbiAgICAgICAgfSBlbHNlIGlmIChEQVRFX0ZPTERFUl9QQVRURVJOLnRlc3QoZW50cnkpKSB7XG4gICAgICAgICAgZGF0ZUZvbGRlcnMucHVzaChlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2tpcCBiYWNrdXBzLywgX2luZGV4Lmpzb24sIGFuZCBvdGhlciBub24tbWVtb3J5IGRpcmVjdG9yaWVzXG4gICAgICB9XG4gICAgICAvLyBTb3J0IGRhdGUgZm9sZGVycyBjaHJvbm9sb2dpY2FsbHkgKG9sZGVzdCBmaXJzdCDihpIgbmV3ZXN0IGxhc3QpXG4gICAgICAvLyBzbyB0aGF0IG5hbWVUb1BhdGggaW4gTWV0YWRhdGFJbmRleCBlbmRzIHVwIHBvaW50aW5nIHRvIHRoZSBuZXdlc3QgY29weVxuICAgICAgZGF0ZUZvbGRlcnMuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgICAgIHN1YmRpcnMucHVzaCguLi5kYXRlRm9sZGVycyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ01lbW9yeVN0b3JhZ2VMYXllcjogZmFpbGVkIHRvIGxpc3Qgc3ViZGlyZWN0b3JpZXMnLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWx3YXlzIGluY2x1ZGUgcm9vdCAoZW1wdHkgc3RyaW5nID0gcm9vdCBkaXJlY3RvcnkpXG4gICAgc3ViZGlycy5wdXNoKCcnKTtcblxuICAgIHJldHVybiBzdWJkaXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBmdWxsIGluY3JlbWVudGFsIHNjYW4gYWNyb3NzIGFsbCBzdWJkaXJlY3Rvcmllcy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybVNjYW4oKTogUHJvbWlzZTxNYW5pZmVzdERpZmZSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5iYWNrZW5kLmRpcmVjdG9yeUV4aXN0cyh0aGlzLm1lbW9yaWVzRGlyKTtcbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYXRocyA9IHRoaXMuaW5kZXguZ2V0UGF0aHMoKTtcbiAgICAgICAgdGhpcy5pbmRleC5jbGVhcigpO1xuICAgICAgICB0aGlzLm1hbmlmZXN0LmNsZWFyKCk7XG4gICAgICAgIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICBtb2RpZmllZDogW10sXG4gICAgICAgICAgcmVtb3ZlZDogcmVtb3ZlZFBhdGhzLFxuICAgICAgICAgIHVuY2hhbmdlZDogW10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIDEuIERpc2NvdmVyIHN1YmRpcmVjdG9yaWVzXG4gICAgICBjb25zdCBzdWJkaXJzID0gYXdhaXQgdGhpcy5kaXNjb3ZlclN1YmRpcmVjdG9yaWVzKCk7XG5cbiAgICAgIC8vIDIuIEVudW1lcmF0ZSBhbGwgLnlhbWwgZmlsZXMgYWNyb3NzIHN1YmRpcmVjdG9yaWVzXG4gICAgICBjb25zdCBhbGxSZWxhdGl2ZVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHN1YmRpciBvZiBzdWJkaXJzKSB7XG4gICAgICAgIGNvbnN0IGFic0RpciA9IHN1YmRpciA/IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCBzdWJkaXIpIDogdGhpcy5tZW1vcmllc0RpcjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5iYWNrZW5kLmxpc3RGaWxlcyhhYnNEaXIsICcueWFtbCcpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICAvLyBBcHBseSBmaWxlIGZpbHRlciAoZS5nLiwgZXhjbHVkZSBiYWNrdXAgZmlsZXMpXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlRmlsdGVyICYmICF0aGlzLmZpbGVGaWx0ZXIoZmlsZSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFByZWZpeCB3aXRoIHN1YmRpciBmb3IgcmVsYXRpdmUgcGF0aFxuICAgICAgICAgICAgY29uc3QgcmVsUGF0aCA9IHN1YmRpciA/IGAke3N1YmRpcn0vJHtmaWxlfWAgOiBmaWxlO1xuICAgICAgICAgICAgYWxsUmVsYXRpdmVQYXRocy5wdXNoKHJlbFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBEaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0IChlLmcuLCBubyBzeXN0ZW0vIGZvbGRlciB5ZXQpXG4gICAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYE1lbW9yeVN0b3JhZ2VMYXllcjogZmFpbGVkIHRvIGxpc3QgJHthYnNEaXJ9YCwge1xuICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFN0YXQgYWxsIGZpbGVzXG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHRoaXMuYmFja2VuZC5zdGF0TWFueSh0aGlzLm1lbW9yaWVzRGlyLCBhbGxSZWxhdGl2ZVBhdGhzKTtcblxuICAgICAgLy8gNC4gRGlmZiBhZ2FpbnN0IG1hbmlmZXN0XG4gICAgICBjb25zdCBkaWZmID0gdGhpcy5tYW5pZmVzdC5kaWZmKHN0YXRzKTtcblxuICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGRpZmYuYWRkZWQubGVuZ3RoID4gMCB8fCBkaWZmLm1vZGlmaWVkLmxlbmd0aCA+IDAgfHwgZGlmZi5yZW1vdmVkLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgICBsb2dnZXIuZGVidWcoYE1lbW9yeVN0b3JhZ2VMYXllci5zY2FuOiBESVNLIFNDQU4g4oCUICR7YWxsUmVsYXRpdmVQYXRocy5sZW5ndGh9IGZpbGVzLCAke2RpZmYuYWRkZWQubGVuZ3RofSBhZGRlZCwgJHtkaWZmLm1vZGlmaWVkLmxlbmd0aH0gbW9kaWZpZWQsICR7ZGlmZi5yZW1vdmVkLmxlbmd0aH0gcmVtb3ZlZGApO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBGb3IgYWRkZWQvbW9kaWZpZWQ6IHJlYWQgZmlsZSwgZXh0cmFjdCBtZXRhZGF0YSwgdXBkYXRlIGluZGV4XG4gICAgICBjb25zdCB0b0luZGV4ID0gWy4uLmRpZmYuYWRkZWQsIC4uLmRpZmYubW9kaWZpZWRdO1xuICAgICAgbGV0IGluZGV4VXBkYXRlZCA9IGZhbHNlO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdG9JbmRleC5tYXAoYXN5bmMgKHJlbFBhdGgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWJzUGF0aCA9IHBhdGguam9pbih0aGlzLm1lbW9yaWVzRGlyLCByZWxQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmJhY2tlbmQucmVhZEZpbGUoYWJzUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBleHRyYWN0ZWQgPSBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5leHRyYWN0TWV0YWRhdGEoY29udGVudCwgcmVsUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc3RhdHMuZ2V0KHJlbFBhdGgpO1xuXG4gICAgICAgICAgICB0aGlzLmluZGV4LnNldCh7XG4gICAgICAgICAgICAgIGZpbGVQYXRoOiByZWxQYXRoLFxuICAgICAgICAgICAgICBuYW1lOiBleHRyYWN0ZWQubmFtZSA/PyAndW5uYW1lZCcsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBleHRyYWN0ZWQuZGVzY3JpcHRpb24gPz8gJycsXG4gICAgICAgICAgICAgIHZlcnNpb246IGV4dHJhY3RlZC52ZXJzaW9uID8/ICcxLjAuMCcsXG4gICAgICAgICAgICAgIGF1dGhvcjogZXh0cmFjdGVkLmF1dGhvciA/PyAnJyxcbiAgICAgICAgICAgICAgdGFnczogZXh0cmFjdGVkLnRhZ3MgPz8gW10sXG4gICAgICAgICAgICAgIG10aW1lTXM6IG1ldGE/Lm10aW1lTXMgPz8gMCxcbiAgICAgICAgICAgICAgc2l6ZUJ5dGVzOiBtZXRhPy5zaXplQnl0ZXMgPz8gMCxcbiAgICAgICAgICAgICAgYXV0b0xvYWQ6IGV4dHJhY3RlZC5hdXRvTG9hZCxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6IGV4dHJhY3RlZC5wcmlvcml0eSxcbiAgICAgICAgICAgICAgbWVtb3J5VHlwZTogZXh0cmFjdGVkLm1lbW9yeVR5cGUsXG4gICAgICAgICAgICAgIHRvdGFsRW50cmllczogZXh0cmFjdGVkLnRvdGFsRW50cmllcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5kZXhVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBNZW1vcnlTdG9yYWdlTGF5ZXI6IGZhaWxlZCB0byBpbmRleCAke3JlbFBhdGh9YCwge1xuICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gNi4gRm9yIHJlbW92ZWQ6IHJlbW92ZSBmcm9tIGluZGV4XG4gICAgICBmb3IgKGNvbnN0IHJlbFBhdGggb2YgZGlmZi5yZW1vdmVkKSB7XG4gICAgICAgIHRoaXMuaW5kZXgucmVtb3ZlKHJlbFBhdGgpO1xuICAgICAgICBpbmRleFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyA3LiBVcGRhdGUgbWFuaWZlc3QgYW5kIHRpbWVzdGFtcFxuICAgICAgdGhpcy5tYW5pZmVzdC51cGRhdGUoc3RhdHMpO1xuICAgICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgIC8vIDguIFNjaGVkdWxlIGRlYm91bmNlZCBfaW5kZXguanNvbiB3cml0ZSBpZiBpbmRleCBjaGFuZ2VkXG4gICAgICBpZiAoaW5kZXhVcGRhdGVkKSB7XG4gICAgICAgIHRoaXMuaW5kZXhGaWxlLnNjaGVkdWxlV3JpdGUodGhpcy5pbmRleC5nZXRBbGwoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaWZmO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ01lbW9yeVN0b3JhZ2VMYXllci5wZXJmb3JtU2NhbiBmYWlsZWQnLCBlcnJvcik7XG4gICAgICB0aGlzLmxhc3RTY2FuVGltZXN0YW1wID0gRGF0ZS5ub3coKTsgLy8gUHJldmVudCByZXRyeSBzdG9ybXNcbiAgICAgIHJldHVybiBFTVBUWV9ESUZGO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5U3RvcmFnZUxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQW1ELE1BQU0sWUFBWSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBZTlFLE1BQU0sVUFBVSxHQUF1QixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMvRixNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDO0FBRWxELE1BQU0sT0FBTyxrQkFBa0I7SUFjVjtJQWJGLE9BQU8sQ0FBa0I7SUFDekIsUUFBUSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7SUFDakMsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDNUIsU0FBUyxDQUFrQjtJQUMzQixXQUFXLENBQVM7SUFDcEIsY0FBYyxDQUFTO0lBQ3ZCLFVBQVUsQ0FBaUM7SUFFcEQsaUJBQWlCLEdBQUcsQ0FBQyxDQUFD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QUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0IsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFcEMsMkRBQTJEO1lBQzNELElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtZQUM1RCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZW1vcnlTdG9yYWdlTGF5ZXIgLSBJU3RvcmFnZUxheWVyIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aS1kaXJlY3RvcnkgbWVtb3J5IHNjYW5uaW5nLlxuICpcbiAqIE1lbW9yaWVzIHVzZSBwdXJlIFlBTUwgYWNyb3NzIGEgbXVsdGktZGlyZWN0b3J5IGxheW91dDpcbiAqICAgc3lzdGVtLyAgICAgICDigJQgU3lzdGVtLXByb3ZpZGVkIG1lbW9yaWVzXG4gKiAgIGFkYXB0ZXJzLyAgICAg4oCUIEFkYXB0ZXItc3BlY2lmaWMgbWVtb3JpZXNcbiAqICAgWVlZWS1NTS1ERC8gICDigJQgVXNlci1jcmVhdGVkIGRhdGUtZm9sZGVyIG1lbW9yaWVzXG4gKiAgIChyb290KSAgICAgICAg4oCUIExlZ2FjeSByb290LWxldmVsIG1lbW9yaWVzXG4gKlxuICogUmV1c2VzIHRoZSBzYW1lIGludGVybmFsIGNvbXBvbmVudHMgYXMgRWxlbWVudFN0b3JhZ2VMYXllciAoTWV0YWRhdGFJbmRleCxcbiAqIFN0b3JhZ2VNYW5pZmVzdCwgRmlsZVN0b3JhZ2VCYWNrZW5kKSBidXQgd2l0aCBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBzY2FuXG4gKiBsb2dpYzogbXVsdGktZGlyZWN0b3J5IGVudW1lcmF0aW9uICsgX2luZGV4Lmpzb24gY29sZC1zdGFydCBwZXJzaXN0ZW5jZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgSVN0b3JhZ2VMYXllciwgU3RvcmFnZVNjYW5PcHRpb25zIH0gZnJvbSAnLi9JU3RvcmFnZUxheWVyLmpzJztcbmltcG9ydCB0eXBlIHsgSVN0b3JhZ2VCYWNrZW5kIH0gZnJvbSAnLi9JU3RvcmFnZUJhY2tlbmQuanMnO1xuaW1wb3J0IHsgbWVyZ2VNYW5pZmVzdERpZmZSZXN1bHRzLCB0eXBlIEVsZW1lbnRJbmRleEVudHJ5LCB0eXBlIE1hbmlmZXN0RGlmZlJlc3VsdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgU3RvcmFnZU1hbmlmZXN0IH0gZnJvbSAnLi9TdG9yYWdlTWFuaWZlc3QuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFJbmRleCB9IGZyb20gJy4vTWV0YWRhdGFJbmRleC5qcyc7XG5pbXBvcnQgeyBGaWxlU3RvcmFnZUJhY2tlbmQgfSBmcm9tICcuL0ZpbGVTdG9yYWdlQmFja2VuZC5qcyc7XG5pbXBvcnQgeyBNZW1vcnlNZXRhZGF0YUV4dHJhY3RvciB9IGZyb20gJy4vTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuanMnO1xuaW1wb3J0IHsgTWVtb3J5SW5kZXhGaWxlIH0gZnJvbSAnLi9NZW1vcnlJbmRleEZpbGUuanMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5U3RvcmFnZUxheWVyT3B0aW9ucyB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBtZW1vcmllcyBkaXJlY3RvcnkgKi9cbiAgbWVtb3JpZXNEaXI6IHN0cmluZztcbiAgLyoqIE1pbmltdW0gbWlsbGlzZWNvbmRzIGJldHdlZW4gZnVsbCBzY2FucyAoZGVmYXVsdDogMTAwMCkgKi9cbiAgc2NhbkNvb2xkb3duTXM/OiBudW1iZXI7XG4gIC8qKiBPdmVycmlkZSB0aGUgc3RvcmFnZSBiYWNrZW5kICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG4gIHN0b3JhZ2VCYWNrZW5kPzogSVN0b3JhZ2VCYWNrZW5kO1xuICAvKiogRGVib3VuY2UgaW50ZXJ2YWwgZm9yIF9pbmRleC5qc29uIHdyaXRlcyAoZGVmYXVsdDogMjAwMCkgKi9cbiAgaW5kZXhEZWJvdW5jZU1zPzogbnVtYmVyO1xuICAvKiogRmlsZSBmaWx0ZXIgcHJlZGljYXRlIChlLmcuLCBleGNsdWRlIGJhY2t1cCBmaWxlcykgKi9cbiAgZmlsZUZpbHRlcj86IChmaWxlbmFtZTogc3RyaW5nKSA9PiBib29sZWFuO1xufVxuXG5jb25zdCBFTVBUWV9ESUZGOiBNYW5pZmVzdERpZmZSZXN1bHQgPSB7IGFkZGVkOiBbXSwgbW9kaWZpZWQ6IFtdLCByZW1vdmVkOiBbXSwgdW5jaGFuZ2VkOiBbXSB9O1xuY29uc3QgREFURV9GT0xERVJfUEFUVEVSTiA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLztcblxuZXhwb3J0IGNsYXNzIE1lbW9yeVN0b3JhZ2VMYXllciBpbXBsZW1lbnRzIElTdG9yYWdlTGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhY2tlbmQ6IElTdG9yYWdlQmFja2VuZDtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5pZmVzdCA9IG5ldyBTdG9yYWdlTWFuaWZlc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmRleCA9IG5ldyBNZXRhZGF0YUluZGV4KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kZXhGaWxlOiBNZW1vcnlJbmRleEZpbGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVtb3JpZXNEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzY2FuQ29vbGRvd25NczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVGaWx0ZXI/OiAoZmlsZW5hbWU6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICBwcml2YXRlIGxhc3RTY2FuVGltZXN0YW1wID0gMDtcbiAgcHJpdmF0ZSBzY2FuSW5Qcm9ncmVzczogUHJvbWlzZTxNYW5pZmVzdERpZmZSZXN1bHQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29sZFN0YXJ0RG9uZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLFxuICAgIG9wdGlvbnM6IE1lbW9yeVN0b3JhZ2VMYXllck9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5tZW1vcmllc0RpciA9IG9wdGlvbnMubWVtb3JpZXNEaXI7XG4gICAgdGhpcy5zY2FuQ29vbGRvd25NcyA9IG9wdGlvbnMuc2NhbkNvb2xkb3duTXMgPz8gMTAwMDtcbiAgICB0aGlzLmZpbGVGaWx0ZXIgPSBvcHRpb25zLmZpbGVGaWx0ZXI7XG5cbiAgICBpZiAob3B0aW9ucy5zdG9yYWdlQmFja2VuZCkge1xuICAgICAgdGhpcy5iYWNrZW5kID0gb3B0aW9ucy5zdG9yYWdlQmFja2VuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYWNrZW5kID0gbmV3IEZpbGVTdG9yYWdlQmFja2VuZChmaWxlT3BzKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleFBhdGggPSBwYXRoLmpvaW4odGhpcy5tZW1vcmllc0RpciwgJ19pbmRleC5qc29uJyk7XG4gICAgdGhpcy5pbmRleEZpbGUgPSBuZXcgTWVtb3J5SW5kZXhGaWxlKGluZGV4UGF0aCwgZmlsZU9wcywge1xuICAgICAgZGVib3VuY2VNczogb3B0aW9ucy5pbmRleERlYm91bmNlTXMgPz8gMjAwMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0gSVN0b3JhZ2VMYXllciBpbXBsZW1lbnRhdGlvbiAtLS0tXG5cbiAgYXN5bmMgc2NhbihvcHRpb25zOiBTdG9yYWdlU2Nhbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8TWFuaWZlc3REaWZmUmVzdWx0PiB7XG4gICAgbGV0IGRyYWluZWREaWZmOiBNYW5pZmVzdERpZmZSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZXhpc3RpbmdTY2FuID0gdGhpcy5zY2FuSW5Qcm9ncmVzcztcbiAgICBpZiAoZXhpc3RpbmdTY2FuKSB7XG4gICAgICBpZiAoIW9wdGlvbnMuZnJlc2hBZnRlckluRmxpZ2h0KSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1NjYW47XG4gICAgICB9XG5cbiAgICAgIGRyYWluZWREaWZmID0gYXdhaXQgdGhpcy5kcmFpbkluRmxpZ2h0U2NhbihleGlzdGluZ1NjYW4pO1xuICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gQ29sZCBzdGFydDogdHJ5IGxvYWRpbmcgZnJvbSBfaW5kZXguanNvbiBmaXJzdFxuICAgIGxldCBzY2FuOiBQcm9taXNlPE1hbmlmZXN0RGlmZlJlc3VsdD47XG4gICAgaWYgKCF0aGlzLmNvbGRTdGFydERvbmUpIHtcbiAgICAgIHRoaXMuY29sZFN0YXJ0RG9uZSA9IHRydWU7XG4gICAgICBzY2FuID0gdGhpcy5jb2xkU3RhcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmIChub3cgLSB0aGlzLmxhc3RTY2FuVGltZXN0YW1wIDwgdGhpcy5zY2FuQ29vbGRvd25Ncykge1xuICAgICAgICBsb2dnZXIuZGVidWcoYE1lbW9yeVN0b3JhZ2VMYXllci5zY2FuOiBDT09MRE9XTiBBQ1RJVkUg4oCUIHNraXBwaW5nIGRpc2sgSS9PICgke3RoaXMuc2NhbkNvb2xkb3duTXMgLSAobm93IC0gdGhpcy5sYXN0U2NhblRpbWVzdGFtcCl9bXMgcmVtYWluaW5nKWApO1xuICAgICAgICByZXR1cm4gRU1QVFlfRElGRjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2NhbkluUHJvZ3Jlc3MpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zY2FuSW5Qcm9ncmVzcztcbiAgICAgICAgcmV0dXJuIGRyYWluZWREaWZmID8gbWVyZ2VNYW5pZmVzdERpZmZSZXN1bHRzKGRyYWluZWREaWZmLCByZXN1bHQpIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgc2NhbiA9IHRoaXMucGVyZm9ybVNjYW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjYW5JblByb2dyZXNzID0gc2NhbjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NhbjtcbiAgICAgIHJldHVybiBkcmFpbmVkRGlmZiA/IG1lcmdlTWFuaWZlc3REaWZmUmVzdWx0cyhkcmFpbmVkRGlmZiwgcmVzdWx0KSA6IHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMuc2NhbkluUHJvZ3Jlc3MgPT09IHNjYW4pIHtcbiAgICAgICAgdGhpcy5zY2FuSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkcmFpbkluRmxpZ2h0U2NhbihcbiAgICBleGlzdGluZ1NjYW46IFByb21pc2U8TWFuaWZlc3REaWZmUmVzdWx0PixcbiAgKTogUHJvbWlzZTxNYW5pZmVzdERpZmZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgZHJhaW5lZERpZmY6IE1hbmlmZXN0RGlmZlJlc3VsdCB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgZHJhaW5lZERpZmYgPSBhd2FpdCBleGlzdGluZ1NjYW47XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgdHJhaWxpbmcgc2NhbiBnZXRzIGFuIGluZGVwZW5kZW50IGNoYW5jZSB0byByZWNvdmVyLlxuICAgIH1cbiAgICBpZiAodGhpcy5zY2FuSW5Qcm9ncmVzcyA9PT0gZXhpc3RpbmdTY2FuKSB7XG4gICAgICB0aGlzLnNjYW5JblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGRyYWluZWREaWZmO1xuICB9XG5cbiAgYXN5bmMgbGlzdFN1bW1hcmllcygpOiBQcm9taXNlPEVsZW1lbnRJbmRleEVudHJ5W10+IHtcbiAgICBhd2FpdCB0aGlzLnNjYW4oKTtcbiAgICByZXR1cm4gdGhpcy5kZWR1cGxpY2F0ZUJ5TmFtZSh0aGlzLmluZGV4LmdldEFsbCgpKTtcbiAgfVxuXG4gIGFzeW5jIGdldEluZGV4ZWRQYXRocygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5zY2FuKCk7XG4gICAgY29uc3QgZGVkdXBsaWNhdGVkID0gdGhpcy5kZWR1cGxpY2F0ZUJ5TmFtZSh0aGlzLmluZGV4LmdldEFsbCgpKTtcbiAgICByZXR1cm4gZGVkdXBsaWNhdGVkLm1hcChlbnRyeSA9PiBlbnRyeS5maWxlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRGVkdXBsaWNhdGUgaW5kZXggZW50cmllcyBieSBub3JtYWxpemVkIG5hbWUuXG4gICAqIFdoZW4gdGhlIHNhbWUgbWVtb3J5IGFwcGVhcnMgaW4gbXVsdGlwbGUgZGF0ZSBmb2xkZXJzLCBrZWVwIHRoZSBvbmVcbiAgICogd2l0aCB0aGUgaGlnaGVzdCBtdGltZU1zIChtb3N0IHJlY2VudGx5IG1vZGlmaWVkKS5cbiAgICpcbiAgICogSXNzdWUgIzY1NDogU2FtZSBtZW1vcnkgZmlsZXMgZHVwbGljYXRlZCBhY3Jvc3MgfjE1MCBkYXRlIGZvbGRlcnNcbiAgICogaW5mbGF0ZWQgY291bnRzIGZyb20gfjc1MCB1bmlxdWUgdG8gfjMsMTAwKyBsb2FkZWQgbWVtb3JpZXMuXG4gICAqL1xuICBwcml2YXRlIGRlZHVwbGljYXRlQnlOYW1lKGVudHJpZXM6IEVsZW1lbnRJbmRleEVudHJ5W10pOiBFbGVtZW50SW5kZXhFbnRyeVtdIHtcbiAgICBjb25zdCBieU5hbWUgPSBuZXcgTWFwPHN0cmluZywgRWxlbWVudEluZGV4RW50cnk+KCk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShlbnRyeS5uYW1lKS5ub3JtYWxpemVkQ29udGVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBieU5hbWUuZ2V0KGtleSk7XG4gICAgICBpZiAoIWV4aXN0aW5nIHx8IGVudHJ5Lm10aW1lTXMgPiBleGlzdGluZy5tdGltZU1zKSB7XG4gICAgICAgIGJ5TmFtZS5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbLi4uYnlOYW1lLnZhbHVlcygpXTtcbiAgfVxuXG4gIGdldFBhdGhCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG5hbWUpLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIHJldHVybiB0aGlzLmluZGV4LmdldFBhdGhCeU5hbWUobm9ybWFsaXplZE5hbWUpO1xuICB9XG5cbiAgaGFzQ29tcGxldGVkU2NhbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA+IDA7XG4gIH1cblxuICBhc3luYyBub3RpZnlTYXZlZChyZWxhdGl2ZVBhdGg6IHN0cmluZywgYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuYmFja2VuZC5yZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xuICAgICAgY29uc3QgbWV0YSA9IGF3YWl0IHRoaXMuYmFja2VuZC5zdGF0KGFic29sdXRlUGF0aCk7XG4gICAgICBjb25zdCBleHRyYWN0ZWQgPSBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5leHRyYWN0TWV0YWRhdGEoY29udGVudCwgcmVsYXRpdmVQYXRoKTtcblxuICAgICAgY29uc3QgZW50cnk6IEVsZW1lbnRJbmRleEVudHJ5ID0ge1xuICAgICAgICBmaWxlUGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICBuYW1lOiBleHRyYWN0ZWQubmFtZSA/PyAndW5uYW1lZCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBleHRyYWN0ZWQuZGVzY3JpcHRpb24gPz8gJycsXG4gICAgICAgIHZlcnNpb246IGV4dHJhY3RlZC52ZXJzaW9uID8/ICcxLjAuMCcsXG4gICAgICAgIGF1dGhvcjogZXh0cmFjdGVkLmF1dGhvciA/PyAnJyxcbiAgICAgICAgdGFnczogZXh0cmFjdGVkLnRhZ3MgPz8gW10sXG4gICAgICAgIG10aW1lTXM6IG1ldGEubXRpbWVNcyxcbiAgICAgICAgc2l6ZUJ5dGVzOiBtZXRhLnNpemVCeXRlcyxcbiAgICAgICAgYXV0b0xvYWQ6IGV4dHJhY3RlZC5hdXRvTG9hZCxcbiAgICAgICAgcHJpb3JpdHk6IGV4dHJhY3RlZC5wcmlvcml0eSxcbiAgICAgICAgbWVtb3J5VHlwZTogZXh0cmFjdGVkLm1lbW9yeVR5cGUsXG4gICAgICAgIHRvdGFsRW50cmllczogZXh0cmFjdGVkLnRvdGFsRW50cmllcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuaW5kZXguc2V0KGVudHJ5KTtcbiAgICAgIHRoaXMubWFuaWZlc3Quc2V0KHJlbGF0aXZlUGF0aCwgbWV0YS5tdGltZU1zKTtcbiAgICAgIHRoaXMuaW5kZXhGaWxlLnNjaGVkdWxlV3JpdGUodGhpcy5pbmRleC5nZXRBbGwoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTWVtb3J5U3RvcmFnZUxheWVyLm5vdGlmeVNhdmVkIGZhaWxlZCwgaW52YWxpZGF0aW5nJywge1xuICAgICAgICByZWxhdGl2ZVBhdGgsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5vdGlmeURlbGV0ZWQocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmluZGV4LnJlbW92ZShyZWxhdGl2ZVBhdGgpO1xuICAgIHRoaXMubWFuaWZlc3QucmVtb3ZlKHJlbGF0aXZlUGF0aCk7XG4gICAgdGhpcy5pbmRleEZpbGUuc2NoZWR1bGVXcml0ZSh0aGlzLmluZGV4LmdldEFsbCgpKTtcbiAgfVxuXG4gIGludmFsaWRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IDA7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmluZGV4RmlsZS5kaXNwb3NlKCk7ICAvLyBDYW5jZWwgcGVuZGluZyBkZWJvdW5jZWQgd3JpdGUgKHByZXZlbnRzIEVOT1RFTVBUWSBpbiB0ZXN0cylcbiAgICB0aGlzLmluZGV4LmNsZWFyKCk7XG4gICAgdGhpcy5tYW5pZmVzdC5jbGVhcigpO1xuICAgIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPSAwO1xuICB9XG5cbiAgLy8gLS0tLSBNZW1vcnktc3BlY2lmaWMgbWV0aG9kcyAtLS0tXG5cbiAgLyoqXG4gICAqIFJldHVybiBpbmRleCBlbnRyaWVzIHdoZXJlIGF1dG9Mb2FkID09PSB0cnVlLCBzb3J0ZWQgYnkgcHJpb3JpdHkgYXNjZW5kaW5nLlxuICAgKiBQdXJlIGluLW1lbW9yeSDigJQgZG9lcyBOT1QgdHJpZ2dlciBhIHNjYW4uXG4gICAqL1xuICBnZXRBdXRvTG9hZEVudHJpZXMoKTogRWxlbWVudEluZGV4RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXguZ2V0QWxsKClcbiAgICAgIC5maWx0ZXIoZW50cnkgPT4gZW50cnkuYXV0b0xvYWQgPT09IHRydWUpXG4gICAgICAuc29ydCgoYSwgYikgPT4gKGEucHJpb3JpdHkgPz8gOTk5KSAtIChiLnByaW9yaXR5ID8/IDk5OSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bGwgZGlzayBzY2FuIG9mIGFsbCBzdWJkaXJlY3RvcmllcyArIHdyaXRlIF9pbmRleC5qc29uLlxuICAgKi9cbiAgYXN5bmMgcmVidWlsZEluZGV4KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKCdNZW1vcnlTdG9yYWdlTGF5ZXI6IHJlYnVpbGRpbmcgaW5kZXggZnJvbSBkaXNrLi4uJyk7XG4gICAgdGhpcy5pbmRleC5jbGVhcigpO1xuICAgIHRoaXMubWFuaWZlc3QuY2xlYXIoKTtcblxuICAgIGF3YWl0IHRoaXMucGVyZm9ybVNjYW4oKTtcbiAgICBhd2FpdCB0aGlzLmluZGV4RmlsZS53cml0ZSh0aGlzLmluZGV4LmdldEFsbCgpKTtcblxuICAgIGxvZ2dlci5pbmZvKGBNZW1vcnlTdG9yYWdlTGF5ZXI6IHJlYnVpbGQgY29tcGxldGUg4oCUICR7dGhpcy5pbmRleC5zaXplfSBlbnRyaWVzIGluZGV4ZWRgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBwZW5kaW5nIF9pbmRleC5qc29uIHdyaXRlIGFuZCByZWxlYXNlIHJlc291cmNlcy5cbiAgICovXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbmRleEZpbGUuZmx1c2goKTtcbiAgICB0aGlzLmluZGV4RmlsZS5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyAtLS0tIFByaXZhdGUgLS0tLVxuXG4gIC8qKlxuICAgKiBDb2xkIHN0YXJ0OiB0cnkgdG8gcmVzdG9yZSBmcm9tIF9pbmRleC5qc29uLCB0aGVuIHJ1biBpbmNyZW1lbnRhbCBzY2FuLlxuICAgKiBGYWxscyBiYWNrIHRvIGZ1bGwgcmVidWlsZCBpZiBpbmRleCBpcyBtaXNzaW5nL2NvcnJ1cHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGRTdGFydCgpOiBQcm9taXNlPE1hbmlmZXN0RGlmZlJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYWNoZWQgPSBhd2FpdCB0aGlzLmluZGV4RmlsZS5yZWFkKCk7XG5cbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgLy8gUG9wdWxhdGUgaW5kZXggYW5kIG1hbmlmZXN0IGZyb20gY2FjaGVkIGRhdGFcbiAgICAgICAgZm9yIChjb25zdCBbcmVsUGF0aCwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKGNhY2hlZC5lbnRyaWVzKSkge1xuICAgICAgICAgIHRoaXMuaW5kZXguc2V0KGVudHJ5KTtcbiAgICAgICAgICB0aGlzLm1hbmlmZXN0LnNldChyZWxQYXRoLCBlbnRyeS5tdGltZU1zKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgTWVtb3J5U3RvcmFnZUxheWVyOiBjb2xkIHN0YXJ0IOKAlCBsb2FkZWQgJHtPYmplY3Qua2V5cyhjYWNoZWQuZW50cmllcykubGVuZ3RofSBlbnRyaWVzIGZyb20gX2luZGV4Lmpzb25gKTtcblxuICAgICAgICAvLyBSdW4gaW5jcmVtZW50YWwgc2NhbiB0byBjYXRjaCBjaGFuZ2VzIHNpbmNlIF9pbmRleC5qc29uIHdhcyB3cml0dGVuXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm1TY2FuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTWVtb3J5U3RvcmFnZUxheWVyOiBjb2xkIHN0YXJ0IF9pbmRleC5qc29uIHJlYWQgZmFpbGVkLCByZWJ1aWxkaW5nJywge1xuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTm8gdmFsaWQgX2luZGV4Lmpzb24g4oCUIGZ1bGwgcmVidWlsZFxuICAgIGF3YWl0IHRoaXMucmVidWlsZEluZGV4KCk7XG4gICAgcmV0dXJuIEVNUFRZX0RJRkY7XG4gIH1cblxuICAvKipcbiAgICogRGlzY292ZXIgYWxsIHN1YmRpcmVjdG9yaWVzIHRvIHNjYW4uXG4gICAqIFJldHVybnMgWydzeXN0ZW0nLCAnYWRhcHRlcnMnLCAuLi5kYXRlRm9sZGVycywgJyddIHdoZXJlICcnID0gcm9vdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGlzY292ZXJTdWJkaXJlY3RvcmllcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgc3ViZGlyczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5maWxlT3BzLmxpc3REaXJlY3RvcnkodGhpcy5tZW1vcmllc0Rpcik7XG5cbiAgICAgIGNvbnN0IGRhdGVGb2xkZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIC8vIEluY2x1ZGUga25vd24gZml4ZWQgZGlyZWN0b3JpZXNcbiAgICAgICAgaWYgKGVudHJ5ID09PSAnc3lzdGVtJyB8fCBlbnRyeSA9PT0gJ2FkYXB0ZXJzJykge1xuICAgICAgICAgIHN1YmRpcnMucHVzaChlbnRyeSk7XG4gICAgICAgIH0gZWxzZSBpZiAoREFURV9GT0xERVJfUEFUVEVSTi50ZXN0KGVudHJ5KSkge1xuICAgICAgICAgIGRhdGVGb2xkZXJzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNraXAgYmFja3Vwcy8sIF9pbmRleC5qc29uLCBhbmQgb3RoZXIgbm9uLW1lbW9yeSBkaXJlY3Rvcmllc1xuICAgICAgfVxuICAgICAgLy8gU29ydCBkYXRlIGZvbGRlcnMgY2hyb25vbG9naWNhbGx5IChvbGRlc3QgZmlyc3Qg4oaSIG5ld2VzdCBsYXN0KVxuICAgICAgLy8gc28gdGhhdCBuYW1lVG9QYXRoIGluIE1ldGFkYXRhSW5kZXggZW5kcyB1cCBwb2ludGluZyB0byB0aGUgbmV3ZXN0IGNvcHlcbiAgICAgIGRhdGVGb2xkZXJzLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gICAgICBzdWJkaXJzLnB1c2goLi4uZGF0ZUZvbGRlcnMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdNZW1vcnlTdG9yYWdlTGF5ZXI6IGZhaWxlZCB0byBsaXN0IHN1YmRpcmVjdG9yaWVzJywge1xuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsd2F5cyBpbmNsdWRlIHJvb3QgKGVtcHR5IHN0cmluZyA9IHJvb3QgZGlyZWN0b3J5KVxuICAgIHN1YmRpcnMucHVzaCgnJyk7XG5cbiAgICByZXR1cm4gc3ViZGlycztcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgZnVsbCBpbmNyZW1lbnRhbCBzY2FuIGFjcm9zcyBhbGwgc3ViZGlyZWN0b3JpZXMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1TY2FuKCk6IFByb21pc2U8TWFuaWZlc3REaWZmUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuYmFja2VuZC5kaXJlY3RvcnlFeGlzdHModGhpcy5tZW1vcmllc0Rpcik7XG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCByZW1vdmVkUGF0aHMgPSB0aGlzLmluZGV4LmdldFBhdGhzKCk7XG4gICAgICAgIHRoaXMuaW5kZXguY2xlYXIoKTtcbiAgICAgICAgdGhpcy5tYW5pZmVzdC5jbGVhcigpO1xuICAgICAgICB0aGlzLmxhc3RTY2FuVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgbW9kaWZpZWQ6IFtdLFxuICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWRQYXRocyxcbiAgICAgICAgICB1bmNoYW5nZWQ6IFtdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAxLiBEaXNjb3ZlciBzdWJkaXJlY3Rvcmllc1xuICAgICAgY29uc3Qgc3ViZGlycyA9IGF3YWl0IHRoaXMuZGlzY292ZXJTdWJkaXJlY3RvcmllcygpO1xuXG4gICAgICAvLyAyLiBFbnVtZXJhdGUgYWxsIC55YW1sIGZpbGVzIGFjcm9zcyBzdWJkaXJlY3Rvcmllc1xuICAgICAgY29uc3QgYWxsUmVsYXRpdmVQYXRoczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBzdWJkaXIgb2Ygc3ViZGlycykge1xuICAgICAgICBjb25zdCBhYnNEaXIgPSBzdWJkaXIgPyBwYXRoLmpvaW4odGhpcy5tZW1vcmllc0Rpciwgc3ViZGlyKSA6IHRoaXMubWVtb3JpZXNEaXI7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMuYmFja2VuZC5saXN0RmlsZXMoYWJzRGlyLCAnLnlhbWwnKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgLy8gQXBwbHkgZmlsZSBmaWx0ZXIgKGUuZy4sIGV4Y2x1ZGUgYmFja3VwIGZpbGVzKVxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZpbHRlciAmJiAhdGhpcy5maWxlRmlsdGVyKGZpbGUpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcmVmaXggd2l0aCBzdWJkaXIgZm9yIHJlbGF0aXZlIHBhdGhcbiAgICAgICAgICAgIGNvbnN0IHJlbFBhdGggPSBzdWJkaXIgPyBgJHtzdWJkaXJ9LyR7ZmlsZX1gIDogZmlsZTtcbiAgICAgICAgICAgIGFsbFJlbGF0aXZlUGF0aHMucHVzaChyZWxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gRGlyZWN0b3J5IG1pZ2h0IG5vdCBleGlzdCAoZS5nLiwgbm8gc3lzdGVtLyBmb2xkZXIgeWV0KVxuICAgICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBNZW1vcnlTdG9yYWdlTGF5ZXI6IGZhaWxlZCB0byBsaXN0ICR7YWJzRGlyfWAsIHtcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTdGF0IGFsbCBmaWxlc1xuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCB0aGlzLmJhY2tlbmQuc3RhdE1hbnkodGhpcy5tZW1vcmllc0RpciwgYWxsUmVsYXRpdmVQYXRocyk7XG5cbiAgICAgIC8vIDQuIERpZmYgYWdhaW5zdCBtYW5pZmVzdFxuICAgICAgY29uc3QgZGlmZiA9IHRoaXMubWFuaWZlc3QuZGlmZihzdGF0cyk7XG5cbiAgICAgIGNvbnN0IGhhc0NoYW5nZXMgPSBkaWZmLmFkZGVkLmxlbmd0aCA+IDAgfHwgZGlmZi5tb2RpZmllZC5sZW5ndGggPiAwIHx8IGRpZmYucmVtb3ZlZC5sZW5ndGggPiAwO1xuICAgICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBNZW1vcnlTdG9yYWdlTGF5ZXIuc2NhbjogRElTSyBTQ0FOIOKAlCAke2FsbFJlbGF0aXZlUGF0aHMubGVuZ3RofSBmaWxlcywgJHtkaWZmLmFkZGVkLmxlbmd0aH0gYWRkZWQsICR7ZGlmZi5tb2RpZmllZC5sZW5ndGh9IG1vZGlmaWVkLCAke2RpZmYucmVtb3ZlZC5sZW5ndGh9IHJlbW92ZWRgKTtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRm9yIGFkZGVkL21vZGlmaWVkOiByZWFkIGZpbGUsIGV4dHJhY3QgbWV0YWRhdGEsIHVwZGF0ZSBpbmRleFxuICAgICAgY29uc3QgdG9JbmRleCA9IFsuLi5kaWZmLmFkZGVkLCAuLi5kaWZmLm1vZGlmaWVkXTtcbiAgICAgIGxldCBpbmRleFVwZGF0ZWQgPSBmYWxzZTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHRvSW5kZXgubWFwKGFzeW5jIChyZWxQYXRoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFic1BhdGggPSBwYXRoLmpvaW4odGhpcy5tZW1vcmllc0RpciwgcmVsUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5iYWNrZW5kLnJlYWRGaWxlKGFic1BhdGgpO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkID0gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuZXh0cmFjdE1ldGFkYXRhKGNvbnRlbnQsIHJlbFBhdGgpO1xuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHN0YXRzLmdldChyZWxQYXRoKTtcblxuICAgICAgICAgICAgdGhpcy5pbmRleC5zZXQoe1xuICAgICAgICAgICAgICBmaWxlUGF0aDogcmVsUGF0aCxcbiAgICAgICAgICAgICAgbmFtZTogZXh0cmFjdGVkLm5hbWUgPz8gJ3VubmFtZWQnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXh0cmFjdGVkLmRlc2NyaXB0aW9uID8/ICcnLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiBleHRyYWN0ZWQudmVyc2lvbiA/PyAnMS4wLjAnLFxuICAgICAgICAgICAgICBhdXRob3I6IGV4dHJhY3RlZC5hdXRob3IgPz8gJycsXG4gICAgICAgICAgICAgIHRhZ3M6IGV4dHJhY3RlZC50YWdzID8/IFtdLFxuICAgICAgICAgICAgICBtdGltZU1zOiBtZXRhPy5tdGltZU1zID8/IDAsXG4gICAgICAgICAgICAgIHNpemVCeXRlczogbWV0YT8uc2l6ZUJ5dGVzID8/IDAsXG4gICAgICAgICAgICAgIGF1dG9Mb2FkOiBleHRyYWN0ZWQuYXV0b0xvYWQsXG4gICAgICAgICAgICAgIHByaW9yaXR5OiBleHRyYWN0ZWQucHJpb3JpdHksXG4gICAgICAgICAgICAgIG1lbW9yeVR5cGU6IGV4dHJhY3RlZC5tZW1vcnlUeXBlLFxuICAgICAgICAgICAgICB0b3RhbEVudHJpZXM6IGV4dHJhY3RlZC50b3RhbEVudHJpZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluZGV4VXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgTWVtb3J5U3RvcmFnZUxheWVyOiBmYWlsZWQgdG8gaW5kZXggJHtyZWxQYXRofWAsIHtcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIDYuIEZvciByZW1vdmVkOiByZW1vdmUgZnJvbSBpbmRleFxuICAgICAgZm9yIChjb25zdCByZWxQYXRoIG9mIGRpZmYucmVtb3ZlZCkge1xuICAgICAgICB0aGlzLmluZGV4LnJlbW92ZShyZWxQYXRoKTtcbiAgICAgICAgaW5kZXhVcGRhdGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gVXBkYXRlIG1hbmlmZXN0IGFuZCB0aW1lc3RhbXBcbiAgICAgIHRoaXMubWFuaWZlc3QudXBkYXRlKHN0YXRzKTtcbiAgICAgIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgICAvLyA4LiBTY2hlZHVsZSBkZWJvdW5jZWQgX2luZGV4Lmpzb24gd3JpdGUgaWYgaW5kZXggY2hhbmdlZFxuICAgICAgaWYgKGluZGV4VXBkYXRlZCkge1xuICAgICAgICB0aGlzLmluZGV4RmlsZS5zY2hlZHVsZVdyaXRlKHRoaXMuaW5kZXguZ2V0QWxsKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdNZW1vcnlTdG9yYWdlTGF5ZXIucGVyZm9ybVNjYW4gZmFpbGVkJywgZXJyb3IpO1xuICAgICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IERhdGUubm93KCk7IC8vIFByZXZlbnQgcmV0cnkgc3Rvcm1zXG4gICAgICByZXR1cm4gRU1QVFlfRElGRjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/dist/storage/types.d.ts
CHANGED
|
@@ -62,4 +62,11 @@ export interface ManifestDiffResult {
|
|
|
62
62
|
/** Files whose mtime matches the manifest (no change) */
|
|
63
63
|
unchanged: string[];
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Merge sequential scan results without losing an earlier invalidation when a
|
|
67
|
+
* trailing scan observes the same path as unchanged. Changed categories are
|
|
68
|
+
* intentionally retained as unions; consumers that evict caches must see any
|
|
69
|
+
* modification/removal observed during the freshness window.
|
|
70
|
+
*/
|
|
71
|
+
export declare function mergeManifestDiffResults(first: ManifestDiffResult, second: ManifestDiffResult): ManifestDiffResult;
|
|
65
72
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAGlB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAGlB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,kBAAkB,GACzB,kBAAkB,CAUpB"}
|
package/dist/storage/types.js
CHANGED
|
@@ -4,5 +4,20 @@
|
|
|
4
4
|
* Phase 1: Provides lightweight metadata indexing to avoid
|
|
5
5
|
* full file reads during list() operations.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Merge sequential scan results without losing an earlier invalidation when a
|
|
9
|
+
* trailing scan observes the same path as unchanged. Changed categories are
|
|
10
|
+
* intentionally retained as unions; consumers that evict caches must see any
|
|
11
|
+
* modification/removal observed during the freshness window.
|
|
12
|
+
*/
|
|
13
|
+
export function mergeManifestDiffResults(first, second) {
|
|
14
|
+
const unique = (values) => Array.from(new Set(values));
|
|
15
|
+
const added = unique([...first.added, ...second.added]);
|
|
16
|
+
const modified = unique([...first.modified, ...second.modified]);
|
|
17
|
+
const removed = unique([...first.removed, ...second.removed]);
|
|
18
|
+
const changed = new Set([...added, ...modified, ...removed]);
|
|
19
|
+
const unchanged = unique([...first.unchanged, ...second.unchanged])
|
|
20
|
+
.filter((filePath) => !changed.has(filePath));
|
|
21
|
+
return { added, modified, removed, unchanged };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWlFSDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsS0FBeUIsRUFDekIsTUFBMEI7SUFFMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFnQixFQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0b3JhZ2UgbGF5ZXIgdHlwZXMgZm9yIGNhY2hlLWF3YXJlIGVsZW1lbnQgbGlzdGluZy5cbiAqXG4gKiBQaGFzZSAxOiBQcm92aWRlcyBsaWdodHdlaWdodCBtZXRhZGF0YSBpbmRleGluZyB0byBhdm9pZFxuICogZnVsbCBmaWxlIHJlYWRzIGR1cmluZyBsaXN0KCkgb3BlcmF0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEZpbGVzeXN0ZW0gbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHN0b3JhZ2UgaXRlbS5cbiAqIFJldHVybmVkIGJ5IHN0YXQgb3BlcmF0aW9ucyBvbiB0aGUgc3RvcmFnZSBiYWNrZW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VJdGVtTWV0YWRhdGEge1xuICAvKiogUGF0aCByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCBkaXJlY3RvcnkgKi9cbiAgcmVsYXRpdmVQYXRoOiBzdHJpbmc7XG4gIC8qKiBGdWxseSByZXNvbHZlZCBhYnNvbHV0ZSBwYXRoICovXG4gIGFic29sdXRlUGF0aDogc3RyaW5nO1xuICAvKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgZXBvY2ggKi9cbiAgbXRpbWVNczogbnVtYmVyO1xuICAvKiogRmlsZSBzaXplIGluIGJ5dGVzICovXG4gIHNpemVCeXRlczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEluZGV4ZWQgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIGVsZW1lbnQuXG4gKiBFeHRyYWN0ZWQgZnJvbSBmcm9udG1hdHRlciB3aXRob3V0IGxvYWRpbmcgZnVsbCBlbGVtZW50IGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudEluZGV4RW50cnkge1xuICAvKiogUmVsYXRpdmUgcGF0aCB3aXRoaW4gdGhlIGVsZW1lbnQgZGlyZWN0b3J5ICovXG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIC8qKiBFbGVtZW50IG5hbWUgZnJvbSBmcm9udG1hdHRlciAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBFbGVtZW50IGRlc2NyaXB0aW9uIGZyb20gZnJvbnRtYXR0ZXIgKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFNlbWFudGljIHZlcnNpb24gc3RyaW5nICovXG4gIHZlcnNpb246IHN0cmluZztcbiAgLyoqIEF1dGhvciBuYW1lICovXG4gIGF1dGhvcjogc3RyaW5nO1xuICAvKiogQ2xhc3NpZmljYXRpb24gdGFncyAqL1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgLyoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzIChtaXJyb3JzIFN0b3JhZ2VJdGVtTWV0YWRhdGEubXRpbWVNcykgKi9cbiAgbXRpbWVNczogbnVtYmVyO1xuICAvKiogRmlsZSBzaXplIGluIGJ5dGVzIChtaXJyb3JzIFN0b3JhZ2VJdGVtTWV0YWRhdGEuc2l6ZUJ5dGVzKSAqL1xuICBzaXplQnl0ZXM6IG51bWJlcjtcblxuICAvLyBQaGFzZSAyOiBtZW1vcnktc3BlY2lmaWMgb3B0aW9uYWwgZmllbGRzXG4gIC8qKiBXaGV0aGVyIHRoaXMgbWVtb3J5IHNob3VsZCBiZSBhdXRvLWxvYWRlZCBvbiBzZXJ2ZXIgc3RhcnR1cCAqL1xuICBhdXRvTG9hZD86IGJvb2xlYW47XG4gIC8qKiBMb2FkIHByaW9yaXR5IChsb3dlciA9IGhpZ2hlciBwcmlvcml0eSkgKi9cbiAgcHJpb3JpdHk/OiBudW1iZXI7XG4gIC8qKiBNZW1vcnkgdHlwZSBjbGFzc2lmaWNhdGlvbiAoc3lzdGVtLCBhZGFwdGVyLCB1c2VyKSAqL1xuICBtZW1vcnlUeXBlPzogc3RyaW5nO1xuICAvKiogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1lbW9yeSAqL1xuICB0b3RhbEVudHJpZXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGRpZmZpbmcgY3VycmVudCBmaWxlc3lzdGVtIHN0YXRlIGFnYWluc3QgYSBzdG9yZWQgbWFuaWZlc3QuXG4gKiBFYWNoIGFycmF5IGNvbnRhaW5zIHJlbGF0aXZlIHBhdGhzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0RGlmZlJlc3VsdCB7XG4gIC8qKiBGaWxlcyBwcmVzZW50IG9uIGRpc2sgYnV0IG5vdCBpbiBtYW5pZmVzdCAobmV3IGZpbGVzKSAqL1xuICBhZGRlZDogc3RyaW5nW107XG4gIC8qKiBGaWxlcyB3aG9zZSBtdGltZSBjaGFuZ2VkIHNpbmNlIGxhc3QgbWFuaWZlc3Qgc25hcHNob3QgKi9cbiAgbW9kaWZpZWQ6IHN0cmluZ1tdO1xuICAvKiogRmlsZXMgaW4gbWFuaWZlc3QgYnV0IG5vIGxvbmdlciBvbiBkaXNrICovXG4gIHJlbW92ZWQ6IHN0cmluZ1tdO1xuICAvKiogRmlsZXMgd2hvc2UgbXRpbWUgbWF0Y2hlcyB0aGUgbWFuaWZlc3QgKG5vIGNoYW5nZSkgKi9cbiAgdW5jaGFuZ2VkOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzZXF1ZW50aWFsIHNjYW4gcmVzdWx0cyB3aXRob3V0IGxvc2luZyBhbiBlYXJsaWVyIGludmFsaWRhdGlvbiB3aGVuIGFcbiAqIHRyYWlsaW5nIHNjYW4gb2JzZXJ2ZXMgdGhlIHNhbWUgcGF0aCBhcyB1bmNoYW5nZWQuIENoYW5nZWQgY2F0ZWdvcmllcyBhcmVcbiAqIGludGVudGlvbmFsbHkgcmV0YWluZWQgYXMgdW5pb25zOyBjb25zdW1lcnMgdGhhdCBldmljdCBjYWNoZXMgbXVzdCBzZWUgYW55XG4gKiBtb2RpZmljYXRpb24vcmVtb3ZhbCBvYnNlcnZlZCBkdXJpbmcgdGhlIGZyZXNobmVzcyB3aW5kb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU1hbmlmZXN0RGlmZlJlc3VsdHMoXG4gIGZpcnN0OiBNYW5pZmVzdERpZmZSZXN1bHQsXG4gIHNlY29uZDogTWFuaWZlc3REaWZmUmVzdWx0LFxuKTogTWFuaWZlc3REaWZmUmVzdWx0IHtcbiAgY29uc3QgdW5pcXVlID0gKHZhbHVlczogc3RyaW5nW10pOiBzdHJpbmdbXSA9PiBBcnJheS5mcm9tKG5ldyBTZXQodmFsdWVzKSk7XG4gIGNvbnN0IGFkZGVkID0gdW5pcXVlKFsuLi5maXJzdC5hZGRlZCwgLi4uc2Vjb25kLmFkZGVkXSk7XG4gIGNvbnN0IG1vZGlmaWVkID0gdW5pcXVlKFsuLi5maXJzdC5tb2RpZmllZCwgLi4uc2Vjb25kLm1vZGlmaWVkXSk7XG4gIGNvbnN0IHJlbW92ZWQgPSB1bmlxdWUoWy4uLmZpcnN0LnJlbW92ZWQsIC4uLnNlY29uZC5yZW1vdmVkXSk7XG4gIGNvbnN0IGNoYW5nZWQgPSBuZXcgU2V0KFsuLi5hZGRlZCwgLi4ubW9kaWZpZWQsIC4uLnJlbW92ZWRdKTtcbiAgY29uc3QgdW5jaGFuZ2VkID0gdW5pcXVlKFsuLi5maXJzdC51bmNoYW5nZWQsIC4uLnNlY29uZC51bmNoYW5nZWRdKVxuICAgIC5maWx0ZXIoKGZpbGVQYXRoKSA9PiAhY2hhbmdlZC5oYXMoZmlsZVBhdGgpKTtcblxuICByZXR1cm4geyBhZGRlZCwgbW9kaWZpZWQsIHJlbW92ZWQsIHVuY2hhbmdlZCB9O1xufVxuIl19
|
package/oauth-helper.mjs
CHANGED
|
@@ -330,6 +330,25 @@ async function writePidFile() {
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
async function main() {
|
|
333
|
+
let attempts = 0;
|
|
334
|
+
|
|
335
|
+
// Install termination handling before the first await and before publishing
|
|
336
|
+
// the PID file. Callers use that file as the helper readiness signal.
|
|
337
|
+
process.on('exit', cleanupPidFileSync);
|
|
338
|
+
process.on('beforeExit', async () => {
|
|
339
|
+
await log('OAuth helper completing cleanup');
|
|
340
|
+
await cleanupPidFile();
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
const handleInterruption = () => {
|
|
344
|
+
writeTerminalResultSync('failed', attempts, 'interrupted');
|
|
345
|
+
cleanupStateFileSync();
|
|
346
|
+
cleanupPidFileSync();
|
|
347
|
+
process.exit(1);
|
|
348
|
+
};
|
|
349
|
+
process.once('SIGINT', handleInterruption);
|
|
350
|
+
process.once('SIGTERM', handleInterruption);
|
|
351
|
+
|
|
333
352
|
await log(`[START] OAuth helper started - PID: ${process.pid}`);
|
|
334
353
|
await log('[CONFIG] Device code received');
|
|
335
354
|
await log(`[CONFIG] Poll interval: ${pollIntervalSeconds}s, Expires in: ${expiresIn}s`);
|
|
@@ -349,35 +368,9 @@ async function main() {
|
|
|
349
368
|
|
|
350
369
|
const startTime = Date.now();
|
|
351
370
|
const timeout = startTime + (expiresIn * 1000);
|
|
352
|
-
let attempts = 0;
|
|
353
371
|
let consecutiveErrors = 0;
|
|
354
372
|
let currentPollIntervalMs = pollIntervalSeconds * 1000;
|
|
355
373
|
const MAX_CONSECUTIVE_ERRORS = 5;
|
|
356
|
-
|
|
357
|
-
// Set up cleanup on exit - use synchronous cleanup for exit event
|
|
358
|
-
process.on('exit', () => {
|
|
359
|
-
cleanupPidFileSync();
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
// Use beforeExit for async cleanup when possible
|
|
363
|
-
process.on('beforeExit', async () => {
|
|
364
|
-
await log('OAuth helper completing cleanup');
|
|
365
|
-
await cleanupPidFile();
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
process.on('SIGINT', () => {
|
|
369
|
-
writeTerminalResultSync('failed', attempts, 'interrupted');
|
|
370
|
-
cleanupStateFileSync();
|
|
371
|
-
cleanupPidFileSync();
|
|
372
|
-
process.exit(1);
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
process.on('SIGTERM', () => {
|
|
376
|
-
writeTerminalResultSync('failed', attempts, 'interrupted');
|
|
377
|
-
cleanupStateFileSync();
|
|
378
|
-
cleanupPidFileSync();
|
|
379
|
-
process.exit(1);
|
|
380
|
-
});
|
|
381
374
|
|
|
382
375
|
async function finish(status, errorCode, exitCode) {
|
|
383
376
|
clearInterval(heartbeatInterval);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.41",
|
|
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",
|
package/server.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.DollhouseMCP/mcp-server",
|
|
4
4
|
"title": "DollhouseMCP",
|
|
5
5
|
"description": "OSS to create Personas, Skills, Templates, Agents, and Memories to customize your AI experience.",
|
|
6
|
-
"version": "2.0.
|
|
6
|
+
"version": "2.0.41",
|
|
7
7
|
"homepage": "https://dollhousemcp.com",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
{
|
|
30
30
|
"registryType": "npm",
|
|
31
31
|
"identifier": "@dollhousemcp/mcp-server",
|
|
32
|
-
"version": "2.0.
|
|
32
|
+
"version": "2.0.41",
|
|
33
33
|
"transport": {
|
|
34
34
|
"type": "stdio"
|
|
35
35
|
}
|