@dollhousemcp/mcp-server 2.0.35 → 2.0.37
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 +11 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +6 -2
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +9 -2
- package/dist/elements/memories/MemoryManager.d.ts +13 -0
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
- package/dist/elements/memories/MemoryManager.js +57 -44
- package/dist/elements/memories/constants.js +2 -2
- package/dist/elements/templates/Template.d.ts +2 -0
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +9 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/GitHubAuthHandler.d.ts +12 -0
- package/dist/handlers/GitHubAuthHandler.d.ts.map +1 -1
- package/dist/handlers/GitHubAuthHandler.js +303 -60
- package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
- package/dist/handlers/element-crud/editElement.js +24 -11
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +62 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +209 -34
- package/dist/security/contentValidator.d.ts +32 -1
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +79 -33
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +5 -2
- package/dist/security/tokenManager.d.ts +1 -1
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +10 -7
- package/dist/storage/MemoryMetadataExtractor.d.ts +4 -1
- package/dist/storage/MemoryMetadataExtractor.d.ts.map +1 -1
- package/dist/storage/MemoryMetadataExtractor.js +7 -3
- package/dist/utils/pathSecurity.d.ts +3 -1
- package/dist/utils/pathSecurity.d.ts.map +1 -1
- package/dist/utils/pathSecurity.js +38 -2
- package/dist/web/routes/setupRoutes.d.ts +23 -7
- package/dist/web/routes/setupRoutes.d.ts.map +1 -1
- package/dist/web/routes/setupRoutes.js +138 -20
- package/oauth-helper.mjs +233 -92
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -9,10 +9,14 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { SecureYamlParser } from '../security/secureYamlParser.js';
|
|
11
11
|
import { UnicodeValidator } from '../security/validators/unicodeValidator.js';
|
|
12
|
+
import { MEMORY_CONSTANTS } from '../elements/memories/constants.js';
|
|
12
13
|
import { logger } from '../utils/logger.js';
|
|
13
14
|
export class MemoryMetadataExtractor {
|
|
14
|
-
/**
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Align with the memory save/load limit (256KB). Issue #2329: this was 64KB,
|
|
17
|
+
* so memories that grew past it indexed as 'unnamed' with default metadata.
|
|
18
|
+
*/
|
|
19
|
+
static MAX_YAML_SIZE = MEMORY_CONSTANTS.MAX_YAML_SIZE;
|
|
16
20
|
/**
|
|
17
21
|
* Extract index-relevant metadata from raw YAML memory content.
|
|
18
22
|
*
|
|
@@ -174,4 +178,4 @@ export class MemoryMetadataExtractor {
|
|
|
174
178
|
return UnicodeValidator.normalize(value).normalizedContent;
|
|
175
179
|
}
|
|
176
180
|
}
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9NZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLGlFQUFpRTtJQUN6RCxNQUFNLENBQVUsYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFbEQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFrQixFQUFFLFlBQW9CO1FBQzdELElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEYsT0FBTyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsMEVBQTBFO1lBQzFFLCtEQUErRDtZQUMvRCxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxLQUFL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RSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQ2pHLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTztnQkFDTCxZQUFZLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNyRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxnRUFBZ0U7SUFDeEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFvQjtRQUM5QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLFlBQVk7WUFDdEIsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsSUFBSSxFQUFFLEVBQUU7WUFDUixVQUFVLEVBQUUsdUJBQXVCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztTQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBYTtRQUN4QyxPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeHRyYWN0cyBtZXRhZGF0YSBmcm9tIHB1cmUgWUFNTCBtZW1vcnkgZmlsZXMgZm9yIGxpZ2h0d2VpZ2h0IGluZGV4aW5nLlxuICpcbiAqIE1lbW9yeSBmaWxlcyBkaWZmZXIgZnJvbSBvdGhlciBlbGVtZW50czogdGhleSBhcmUgcHVyZSBZQU1MIChub3QgbWFya2Rvd25cbiAqIHdpdGggZnJvbnRtYXR0ZXIpLiBNZXRhZGF0YSBsaXZlcyB1bmRlciBhIHRvcC1sZXZlbCBgbWV0YWRhdGFgIGtleSBvclxuICogZGlyZWN0bHkgYXMgdG9wLWxldmVsIGtleXMuIFRoaXMgZXh0cmFjdG9yIHJlYWRzIHJhdyBZQU1MIGFuZCByZXR1cm5zXG4gKiB0aGUgc3Vic2V0IG9mIGZpZWxkcyBuZWVkZWQgZm9yIEVsZW1lbnRJbmRleEVudHJ5IHdpdGhvdXQgY29uc3RydWN0aW5nXG4gKiBhIGZ1bGwgTWVtb3J5IG9iamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEluZGV4RW50cnkgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBNZW1vcnlNZXRhZGF0YUV4dHJhY3RvciB7XG4gIC8qKiBBbGlnbiB3aXRoIFNlY3VyZVlhbWxQYXJzZXIgZGVmYXVsdCByYXcgWUFNTCBsaW1pdCAoNjRLQikuICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9ZQU1MX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgaW5kZXgtcmVsZXZhbnQgbWV0YWRhdGEgZnJvbSByYXcgWUFNTCBtZW1vcnkgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHJhd0NvbnRlbnQgLSBGdWxsIFlBTUwgZmlsZSBjb250ZW50XG4gICAqIEBwYXJhbSByZWxhdGl2ZVBhdGggLSBQYXRoIHJlbGF0aXZlIHRvIHRoZSBtZW1vcmllcyBlbGVtZW50IGRpcmVjdG9yeVxuICAgKiBAcmV0dXJucyBQYXJ0aWFsIEVsZW1lbnRJbmRleEVudHJ5IHdpdGggZXh0cmFjdGVkIGZpZWxkc1xuICAgKi9cbiAgc3RhdGljIGV4dHJhY3RNZXRhZGF0YShyYXdDb250ZW50OiBzdHJpbmcsIHJlbGF0aXZlUGF0aDogc3RyaW5nKTogUGFydGlhbDxFbGVtZW50SW5kZXhFbnRyeT4ge1xuICAgIGlmICghcmF3Q29udGVudCB8fCB0eXBlb2YgcmF3Q29udGVudCAhPT0gJ3N0cmluZycgfHwgcmF3Q29udGVudC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuZGVmYXVsdEVudHJ5KHJlbGF0aXZlUGF0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJpbWFyeVBhcnNlID0gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IudHJ5UGFyc2VZYW1sT2JqZWN0KHJhd0NvbnRlbnQpO1xuICAgIGxldCB5YW1sRGF0YSA9IHByaW1hcnlQYXJzZS5kYXRhO1xuICAgIGlmICgheWFtbERhdGEpIHtcbiAgICAgIC8vIE11bHRpLWRvY3VtZW50IHN0cmVhbXMgKGZyb250bWF0dGVyICsgY29udGVudCkgZmFpbCBzaW5nbGUtZG9jIHBhcnNpbmcuXG4gICAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIGZyb250bWF0dGVyIGJsb2NrIGFuZCByZXRyeSBwYXJzaW5nIHNhZmVseS5cbiAgICAgIGNvbnN0IGZtQ29udGVudCA9IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLmV4dHJhY3RGcm9udG1hdHRlcihyYXdDb250ZW50KTtcbiAgICAgIGlmICghZm1Db250ZW50KSB7XG4gICAgICAgIGlmIChwcmltYXJ5UGFyc2UuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdNZW1vcnlNZXRhZGF0YUV4dHJhY3RvcjogZmFpbGVkIHRvIHBhcnNlIFlBTUwsIHJldHVybmluZyBkZWZhdWx0IG1ldGFkYXRhJywge1xuICAgICAgICAgICAgcmVsYXRpdmVQYXRoLFxuICAgICAgICAgICAgc3RhZ2U6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgIGVycm9yOiBwcmltYXJ5UGFyc2UuZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5kZWZhdWx0RW50cnkocmVsYXRpdmVQYXRoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZhbGxiYWNrUGFyc2UgPSBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci50cnlQYXJzZVlhbWxPYmplY3QoZm1Db250ZW50KTtcbiAgICAgIHlhbWxEYXRhID0gZmFsbGJhY2tQYXJzZS5kYXRhO1xuICAgICAgaWYgKCF5YW1sRGF0YSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ01lbW9yeU1ldGFkYXRhRXh0cmFjdG9yOiBmYWlsZWQgdG8gcGFyc2UgWUFNTCAocHJpbWFyeSArIGZyb250bWF0dGVyIGZhbGxiYWNrKSwgcmV0dXJuaW5nIGRlZmF1bHQgbWV0YWRhdGEnLCB7XG4gICAgICAgICAgcmVsYXRpdmVQYXRoLFxuICAgICAgICAgIHByaW1hcnlFcnJvcjogcHJpbWFyeVBhcnNlLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICBmYWxsYmFja0Vycm9yOiBmYWxsYmFja1BhcnNlLmVycm9yTWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5kZWZhdWx0RW50cnkocmVsYXRpdmVQYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZW1vcnkgZmlsZXMgc3RvcmUgbWV0YWRhdGEgdW5kZXIgYSB0b3AtbGV2ZWwgYG1ldGFkYXRhYCBrZXkgb3IgZGlyZWN0bHkgYXMgdG9wLWxldmVsIGtleXNcbiAgICBjb25zdCBtZXRhZGF0YVNvdXJjZSA9IChcbiAgICAgIHlhbWxEYXRhLm1ldGFkYXRhICYmIHR5cGVvZiB5YW1sRGF0YS5tZXRhZGF0YSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoeWFtbERhdGEubWV0YWRhdGEpXG4gICAgICAgID8geWFtbERhdGEubWV0YWRhdGFcbiAgICAgICAgOiB5YW1sRGF0YVxuICAgICkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IHR5cGVvZiBtZXRhZGF0YVNvdXJjZS5uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgPyBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5ub3JtYWxpemVUZXh0KG1ldGFkYXRhU291cmNlLm5hbWUpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IG5hbWUgPSBub3JtYWxpemVkTmFtZS5sZW5ndGggPiAwXG4gICAgICA/IG5vcm1hbGl6ZWROYW1lXG4gICAgICA6ICd1bm5hbWVkJztcblxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdHlwZW9mIG1ldGFkYXRhU291cmNlLmRlc2NyaXB0aW9uID09PSAnc3RyaW5nJ1xuICAgICAgPyBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5ub3JtYWxpemVUZXh0KG1ldGFkYXRhU291cmNlLmRlc2NyaXB0aW9uKVxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gdHlwZW9mIG1ldGFkYXRhU291cmNlLnZlcnNpb24gPT09ICdzdHJpbmcnXG4gICAgICA/IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLm5vcm1hbGl6ZVRleHQobWV0YWRhdGFTb3VyY2UudmVyc2lvbilcbiAgICAgIDogJyc7XG4gICAgY29uc3QgdmVyc2lvbiA9IG5vcm1hbGl6ZWRWZXJzaW9uLmxlbmd0aCA+IDBcbiAgICAgID8gbm9ybWFsaXplZFZlcnNpb25cbiAgICAgIDogJzEuMC4wJztcblxuICAgIGNvbnN0IGF1dGhvciA9IHR5cGVvZiBtZXRhZGF0YVNvdXJjZS5hdXRob3IgPT09ICdzdHJpbmcnXG4gICAgICA/IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLm5vcm1hbGl6ZVRleHQobWV0YWRhdGFTb3VyY2UuYXV0aG9yKVxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5pc0FycmF5KG1ldGFkYXRhU291cmNlLnRhZ3MpICYmIG1ldGFkYXRhU291cmNlLnRhZ3MuZXZlcnkoKHQ6IHVua25vd24pID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJylcbiAgICAgID8gKG1ldGFkYXRhU291cmNlLnRhZ3MgYXMgc3RyaW5nW10pXG4gICAgICAgIC5tYXAodGFnID0+IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLm5vcm1hbGl6ZVRleHQodGFnKSlcbiAgICAgICAgLmZpbHRlcih0YWcgPT4gdGFnLmxlbmd0aCA+IDApXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgYXV0b0xvYWQgPSB0eXBlb2YgbWV0YWRhdGFTb3VyY2UuYXV0b0xvYWQgPT09ICdib29sZWFuJ1xuICAgICAgPyBtZXRhZGF0YVNvdXJjZS5hdXRvTG9hZFxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBwcmlvcml0eSA9IHR5cGVvZiBtZXRhZGF0YVNvdXJjZS5wcmlvcml0eSA9PT0gJ251bWJlcidcbiAgICAgID8gbWV0YWRhdGFTb3VyY2UucHJpb3JpdHlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZE1lbW9yeVR5cGUgPSB0eXBlb2YgbWV0YWRhdGFTb3VyY2UubWVtb3J5VHlwZSA9PT0gJ3N0cmluZydcbiAgICAgID8gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3Iubm9ybWFsaXplVGV4dChtZXRhZGF0YVNvdXJjZS5tZW1vcnlUeXBlKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBtZW1vcnlUeXBlID0gbm9ybWFsaXplZE1lbW9yeVR5cGUubGVuZ3RoID4gMFxuICAgICAgPyBub3JtYWxpemVkTWVtb3J5VHlwZVxuICAgICAgOiBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5pbmZlck1lbW9yeVR5cGUocmVsYXRpdmVQYXRoKTtcblxuICAgIC8vIHRvdGFsRW50cmllczogcHJlZmVyIHN0YXRzLnRvdGFsRW50cmllcywgZmFsbCBiYWNrIHRvIGVudHJpZXMgYXJyYXkgbGVuZ3RoXG4gICAgbGV0IHRvdGFsRW50cmllczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YXRzID0geWFtbERhdGEuc3RhdHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRzICYmIHR5cGVvZiBzdGF0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHN0YXRzLnRvdGFsRW50cmllcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvdGFsRW50cmllcyA9IHN0YXRzLnRvdGFsRW50cmllcztcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeWFtbERhdGEuZW50cmllcykpIHtcbiAgICAgIHRvdGFsRW50cmllcyA9IHlhbWxEYXRhLmVudHJpZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5OiBQYXJ0aWFsPEVsZW1lbnRJbmRleEVudHJ5PiA9IHtcbiAgICAgIGZpbGVQYXRoOiByZWxhdGl2ZVBhdGgsXG4gICAgICBuYW1lLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICB2ZXJzaW9uLFxuICAgICAgYXV0aG9yLFxuICAgICAgdGFncyxcbiAgICAgIG1lbW9yeVR5cGUsXG4gICAgfTtcblxuICAgIGlmIChhdXRvTG9hZCAhPT0gdW5kZWZpbmVkKSBlbnRyeS5hdXRvTG9hZCA9IGF1dG9Mb2FkO1xuICAgIGlmIChwcmlvcml0eSAhPT0gdW5kZWZpbmVkKSBlbnRyeS5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgIGlmICh0b3RhbEVudHJpZXMgIT09IHVuZGVmaW5lZCkgZW50cnkudG90YWxFbnRyaWVzID0gdG90YWxFbnRyaWVzO1xuXG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZmVyIHRoZSBtZW1vcnkgdHlwZSBmcm9tIHRoZSBmaWxlJ3MgcmVsYXRpdmUgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHJlbGF0aXZlUGF0aCAtIFBhdGggcmVsYXRpdmUgdG8gdGhlIG1lbW9yaWVzIGRpcmVjdG9yeVxuICAgKiBAcmV0dXJucyAnc3lzdGVtJyB8ICdhZGFwdGVyJyB8ICd1c2VyJ1xuICAgKi9cbiAgc3RhdGljIGluZmVyTWVtb3J5VHlwZShyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTm9ybWFsaXplIHNlcGFyYXRvcnMgdG8gZm9yd2FyZCBzbGFzaCBmb3IgY29uc2lzdGVudCBtYXRjaGluZ1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSByZWxhdGl2ZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnc3lzdGVtLycpKSByZXR1cm4gJ3N5c3RlbSc7XG4gICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnYWRhcHRlcnMvJykpIHJldHVybiAnYWRhcHRlcic7XG4gICAgcmV0dXJuICd1c2VyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IFlBTUwgY29udGVudCBiZXR3ZWVuIC0tLSBmcm9udG1hdHRlciBtYXJrZXJzLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgbm8gdmFsaWQgZnJvbnRtYXR0ZXIgYmxvY2sgZm91bmQuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBleHRyYWN0RnJvbnRtYXR0ZXIocmF3Q29udGVudDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHJhd0NvbnRlbnQudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCctLS0nKSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBlbmRJbmRleCA9IHRyaW1tZWQuaW5kZXhPZignXFxuLS0tJywgMyk7XG4gICAgaWYgKGVuZEluZGV4ID09PSAtMSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gdHJpbW1lZC5zdWJzdHJpbmcoMywgZW5kSW5kZXgpLnRyaW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSByYXcgWUFNTCB1c2luZyB0aGUgY2VudHJhbGl6ZWQgc2VjdXJlIHBhcnNlci5cbiAgICogUmV0dXJucyBwYXJzZSBkaWFnbm9zdGljcyBzbyBjYWxsZXJzIGNhbiBmYWlsIGNsb3NlZCB3aGlsZSBwcmVzZXJ2aW5nIGVycm9yIGNvbnRleHQuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB0cnlQYXJzZVlhbWxPYmplY3QoY29udGVudDogc3RyaW5nKTogeyBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGVycm9yTWVzc2FnZT86IHN0cmluZyB9IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgZGF0YTogU2VjdXJlWWFtbFBhcnNlci5wYXJzZVJhd1lhbWwoY29udGVudCwgTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuTUFYX1lBTUxfU0laRSkgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXR1cm4gYSBtaW5pbWFsIGRlZmF1bHQgZW50cnkgZm9yIGVtcHR5L2NvcnJ1cHQgY29udGVudC4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdEVudHJ5KHJlbGF0aXZlUGF0aDogc3RyaW5nKTogUGFydGlhbDxFbGVtZW50SW5kZXhFbnRyeT4ge1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlUGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgbmFtZTogJ3VubmFtZWQnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGF1dGhvcjogJycsXG4gICAgICB0YWdzOiBbXSxcbiAgICAgIG1lbW9yeVR5cGU6IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLmluZmVyTWVtb3J5VHlwZShyZWxhdGl2ZVBhdGgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVUZXh0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh2YWx1ZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gIH1cbn1cbiJdfQ==
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9NZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDOzs7T0FHRztJQUNLLE1BQU0sQ0FBVSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO0lBRXZFOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBa0IsRUFBRSxZQUFvQjtRQUM3RCxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BGLE9BQU8sdUJBQXVCLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RSxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLDBFQUEwRTtZQUMxRSwrREFBK0Q7WUFDL0QsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLElBQUks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a0JBQWtCLENBQUMsT0FBZTtRQUMvQyxJQUFJLENBQUM7WUFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUNqRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDckUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ3hELE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBb0I7UUFDOUMsT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUFFLEVBQUU7WUFDZixPQUFPLEVBQUUsT0FBTztZQUNoQixNQUFNLEVBQUUsRUFBRTtZQUNWLElBQUksRUFBRSxFQUFFO1lBQ1IsVUFBVSxFQUFFLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7U0FDbEUsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWE7UUFDeEMsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXh0cmFjdHMgbWV0YWRhdGEgZnJvbSBwdXJlIFlBTUwgbWVtb3J5IGZpbGVzIGZvciBsaWdodHdlaWdodCBpbmRleGluZy5cbiAqXG4gKiBNZW1vcnkgZmlsZXMgZGlmZmVyIGZyb20gb3RoZXIgZWxlbWVudHM6IHRoZXkgYXJlIHB1cmUgWUFNTCAobm90IG1hcmtkb3duXG4gKiB3aXRoIGZyb250bWF0dGVyKS4gTWV0YWRhdGEgbGl2ZXMgdW5kZXIgYSB0b3AtbGV2ZWwgYG1ldGFkYXRhYCBrZXkgb3JcbiAqIGRpcmVjdGx5IGFzIHRvcC1sZXZlbCBrZXlzLiBUaGlzIGV4dHJhY3RvciByZWFkcyByYXcgWUFNTCBhbmQgcmV0dXJuc1xuICogdGhlIHN1YnNldCBvZiBmaWVsZHMgbmVlZGVkIGZvciBFbGVtZW50SW5kZXhFbnRyeSB3aXRob3V0IGNvbnN0cnVjdGluZ1xuICogYSBmdWxsIE1lbW9yeSBvYmplY3QuXG4gKi9cblxuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBNRU1PUllfQ09OU1RBTlRTIH0gZnJvbSAnLi4vZWxlbWVudHMvbWVtb3JpZXMvY29uc3RhbnRzLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEluZGV4RW50cnkgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBNZW1vcnlNZXRhZGF0YUV4dHJhY3RvciB7XG4gIC8qKlxuICAgKiBBbGlnbiB3aXRoIHRoZSBtZW1vcnkgc2F2ZS9sb2FkIGxpbWl0ICgyNTZLQikuIElzc3VlICMyMzI5OiB0aGlzIHdhcyA2NEtCLFxuICAgKiBzbyBtZW1vcmllcyB0aGF0IGdyZXcgcGFzdCBpdCBpbmRleGVkIGFzICd1bm5hbWVkJyB3aXRoIGRlZmF1bHQgbWV0YWRhdGEuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfWUFNTF9TSVpFID0gTUVNT1JZX0NPTlNUQU5UUy5NQVhfWUFNTF9TSVpFO1xuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGluZGV4LXJlbGV2YW50IG1ldGFkYXRhIGZyb20gcmF3IFlBTUwgbWVtb3J5IGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSByYXdDb250ZW50IC0gRnVsbCBZQU1MIGZpbGUgY29udGVudFxuICAgKiBAcGFyYW0gcmVsYXRpdmVQYXRoIC0gUGF0aCByZWxhdGl2ZSB0byB0aGUgbWVtb3JpZXMgZWxlbWVudCBkaXJlY3RvcnlcbiAgICogQHJldHVybnMgUGFydGlhbCBFbGVtZW50SW5kZXhFbnRyeSB3aXRoIGV4dHJhY3RlZCBmaWVsZHNcbiAgICovXG4gIHN0YXRpYyBleHRyYWN0TWV0YWRhdGEocmF3Q29udGVudDogc3RyaW5nLCByZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFBhcnRpYWw8RWxlbWVudEluZGV4RW50cnk+IHtcbiAgICBpZiAoIXJhd0NvbnRlbnQgfHwgdHlwZW9mIHJhd0NvbnRlbnQgIT09ICdzdHJpbmcnIHx8IHJhd0NvbnRlbnQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLmRlZmF1bHRFbnRyeShyZWxhdGl2ZVBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHByaW1hcnlQYXJzZSA9IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLnRyeVBhcnNlWWFtbE9iamVjdChyYXdDb250ZW50KTtcbiAgICBsZXQgeWFtbERhdGEgPSBwcmltYXJ5UGFyc2UuZGF0YTtcbiAgICBpZiAoIXlhbWxEYXRhKSB7XG4gICAgICAvLyBNdWx0aS1kb2N1bWVudCBzdHJlYW1zIChmcm9udG1hdHRlciArIGNvbnRlbnQpIGZhaWwgc2luZ2xlLWRvYyBwYXJzaW5nLlxuICAgICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBmcm9udG1hdHRlciBibG9jayBhbmQgcmV0cnkgcGFyc2luZyBzYWZlbHkuXG4gICAgICBjb25zdCBmbUNvbnRlbnQgPSBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5leHRyYWN0RnJvbnRtYXR0ZXIocmF3Q29udGVudCk7XG4gICAgICBpZiAoIWZtQ29udGVudCkge1xuICAgICAgICBpZiAocHJpbWFyeVBhcnNlLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3I6IGZhaWxlZCB0byBwYXJzZSBZQU1MLCByZXR1cm5pbmcgZGVmYXVsdCBtZXRhZGF0YScsIHtcbiAgICAgICAgICAgIHJlbGF0aXZlUGF0aCxcbiAgICAgICAgICAgIHN0YWdlOiAncHJpbWFyeScsXG4gICAgICAgICAgICBlcnJvcjogcHJpbWFyeVBhcnNlLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuZGVmYXVsdEVudHJ5KHJlbGF0aXZlUGF0aCk7XG4gICAgICB9XG4gICAgICBjb25zdCBmYWxsYmFja1BhcnNlID0gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IudHJ5UGFyc2VZYW1sT2JqZWN0KGZtQ29udGVudCk7XG4gICAgICB5YW1sRGF0YSA9IGZhbGxiYWNrUGFyc2UuZGF0YTtcbiAgICAgIGlmICgheWFtbERhdGEpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdNZW1vcnlNZXRhZGF0YUV4dHJhY3RvcjogZmFpbGVkIHRvIHBhcnNlIFlBTUwgKHByaW1hcnkgKyBmcm9udG1hdHRlciBmYWxsYmFjayksIHJldHVybmluZyBkZWZhdWx0IG1ldGFkYXRhJywge1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCxcbiAgICAgICAgICBwcmltYXJ5RXJyb3I6IHByaW1hcnlQYXJzZS5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgZmFsbGJhY2tFcnJvcjogZmFsbGJhY2tQYXJzZS5lcnJvck1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuZGVmYXVsdEVudHJ5KHJlbGF0aXZlUGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVtb3J5IGZpbGVzIHN0b3JlIG1ldGFkYXRhIHVuZGVyIGEgdG9wLWxldmVsIGBtZXRhZGF0YWAga2V5IG9yIGRpcmVjdGx5IGFzIHRvcC1sZXZlbCBrZXlzXG4gICAgY29uc3QgbWV0YWRhdGFTb3VyY2UgPSAoXG4gICAgICB5YW1sRGF0YS5tZXRhZGF0YSAmJiB0eXBlb2YgeWFtbERhdGEubWV0YWRhdGEgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHlhbWxEYXRhLm1ldGFkYXRhKVxuICAgICAgICA/IHlhbWxEYXRhLm1ldGFkYXRhXG4gICAgICAgIDogeWFtbERhdGFcbiAgICApIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSB0eXBlb2YgbWV0YWRhdGFTb3VyY2UubmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3Iubm9ybWFsaXplVGV4dChtZXRhZGF0YVNvdXJjZS5uYW1lKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBuYW1lID0gbm9ybWFsaXplZE5hbWUubGVuZ3RoID4gMFxuICAgICAgPyBub3JtYWxpemVkTmFtZVxuICAgICAgOiAndW5uYW1lZCc7XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHR5cGVvZiBtZXRhZGF0YVNvdXJjZS5kZXNjcmlwdGlvbiA9PT0gJ3N0cmluZydcbiAgICAgID8gTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3Iubm9ybWFsaXplVGV4dChtZXRhZGF0YVNvdXJjZS5kZXNjcmlwdGlvbilcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBub3JtYWxpemVkVmVyc2lvbiA9IHR5cGVvZiBtZXRhZGF0YVNvdXJjZS52ZXJzaW9uID09PSAnc3RyaW5nJ1xuICAgICAgPyBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5ub3JtYWxpemVUZXh0KG1ldGFkYXRhU291cmNlLnZlcnNpb24pXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IHZlcnNpb24gPSBub3JtYWxpemVkVmVyc2lvbi5sZW5ndGggPiAwXG4gICAgICA/IG5vcm1hbGl6ZWRWZXJzaW9uXG4gICAgICA6ICcxLjAuMCc7XG5cbiAgICBjb25zdCBhdXRob3IgPSB0eXBlb2YgbWV0YWRhdGFTb3VyY2UuYXV0aG9yID09PSAnc3RyaW5nJ1xuICAgICAgPyBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5ub3JtYWxpemVUZXh0KG1ldGFkYXRhU291cmNlLmF1dGhvcilcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCB0YWdzID0gQXJyYXkuaXNBcnJheShtZXRhZGF0YVNvdXJjZS50YWdzKSAmJiBtZXRhZGF0YVNvdXJjZS50YWdzLmV2ZXJ5KCh0OiB1bmtub3duKSA9PiB0eXBlb2YgdCA9PT0gJ3N0cmluZycpXG4gICAgICA/IChtZXRhZGF0YVNvdXJjZS50YWdzIGFzIHN0cmluZ1tdKVxuICAgICAgICAubWFwKHRhZyA9PiBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5ub3JtYWxpemVUZXh0KHRhZykpXG4gICAgICAgIC5maWx0ZXIodGFnID0+IHRhZy5sZW5ndGggPiAwKVxuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IGF1dG9Mb2FkID0gdHlwZW9mIG1ldGFkYXRhU291cmNlLmF1dG9Mb2FkID09PSAnYm9vbGVhbidcbiAgICAgID8gbWV0YWRhdGFTb3VyY2UuYXV0b0xvYWRcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcHJpb3JpdHkgPSB0eXBlb2YgbWV0YWRhdGFTb3VyY2UucHJpb3JpdHkgPT09ICdudW1iZXInXG4gICAgICA/IG1ldGFkYXRhU291cmNlLnByaW9yaXR5XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRNZW1vcnlUeXBlID0gdHlwZW9mIG1ldGFkYXRhU291cmNlLm1lbW9yeVR5cGUgPT09ICdzdHJpbmcnXG4gICAgICA/IE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLm5vcm1hbGl6ZVRleHQobWV0YWRhdGFTb3VyY2UubWVtb3J5VHlwZSlcbiAgICAgIDogJyc7XG4gICAgY29uc3QgbWVtb3J5VHlwZSA9IG5vcm1hbGl6ZWRNZW1vcnlUeXBlLmxlbmd0aCA+IDBcbiAgICAgID8gbm9ybWFsaXplZE1lbW9yeVR5cGVcbiAgICAgIDogTWVtb3J5TWV0YWRhdGFFeHRyYWN0b3IuaW5mZXJNZW1vcnlUeXBlKHJlbGF0aXZlUGF0aCk7XG5cbiAgICAvLyB0b3RhbEVudHJpZXM6IHByZWZlciBzdGF0cy50b3RhbEVudHJpZXMsIGZhbGwgYmFjayB0byBlbnRyaWVzIGFycmF5IGxlbmd0aFxuICAgIGxldCB0b3RhbEVudHJpZXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdGF0cyA9IHlhbWxEYXRhLnN0YXRzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0cyAmJiB0eXBlb2Ygc3RhdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBzdGF0cy50b3RhbEVudHJpZXMgPT09ICdudW1iZXInKSB7XG4gICAgICB0b3RhbEVudHJpZXMgPSBzdGF0cy50b3RhbEVudHJpZXM7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHlhbWxEYXRhLmVudHJpZXMpKSB7XG4gICAgICB0b3RhbEVudHJpZXMgPSB5YW1sRGF0YS5lbnRyaWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeTogUGFydGlhbDxFbGVtZW50SW5kZXhFbnRyeT4gPSB7XG4gICAgICBmaWxlUGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGF1dGhvcixcbiAgICAgIHRhZ3MsXG4gICAgICBtZW1vcnlUeXBlLFxuICAgIH07XG5cbiAgICBpZiAoYXV0b0xvYWQgIT09IHVuZGVmaW5lZCkgZW50cnkuYXV0b0xvYWQgPSBhdXRvTG9hZDtcbiAgICBpZiAocHJpb3JpdHkgIT09IHVuZGVmaW5lZCkgZW50cnkucHJpb3JpdHkgPSBwcmlvcml0eTtcbiAgICBpZiAodG90YWxFbnRyaWVzICE9PSB1bmRlZmluZWQpIGVudHJ5LnRvdGFsRW50cmllcyA9IHRvdGFsRW50cmllcztcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmZlciB0aGUgbWVtb3J5IHR5cGUgZnJvbSB0aGUgZmlsZSdzIHJlbGF0aXZlIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSByZWxhdGl2ZVBhdGggLSBQYXRoIHJlbGF0aXZlIHRvIHRoZSBtZW1vcmllcyBkaXJlY3RvcnlcbiAgICogQHJldHVybnMgJ3N5c3RlbScgfCAnYWRhcHRlcicgfCAndXNlcidcbiAgICovXG4gIHN0YXRpYyBpbmZlck1lbW9yeVR5cGUocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIE5vcm1hbGl6ZSBzZXBhcmF0b3JzIHRvIGZvcndhcmQgc2xhc2ggZm9yIGNvbnNpc3RlbnQgbWF0Y2hpbmdcbiAgICBjb25zdCBub3JtYWxpemVkID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ3N5c3RlbS8nKSkgcmV0dXJuICdzeXN0ZW0nO1xuICAgIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ2FkYXB0ZXJzLycpKSByZXR1cm4gJ2FkYXB0ZXInO1xuICAgIHJldHVybiAndXNlcic7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBZQU1MIGNvbnRlbnQgYmV0d2VlbiAtLS0gZnJvbnRtYXR0ZXIgbWFya2Vycy5cbiAgICogUmV0dXJucyBudWxsIGlmIG5vIHZhbGlkIGZyb250bWF0dGVyIGJsb2NrIGZvdW5kLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZXh0cmFjdEZyb250bWF0dGVyKHJhd0NvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHRyaW1tZWQgPSByYXdDb250ZW50LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aCgnLS0tJykpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZW5kSW5kZXggPSB0cmltbWVkLmluZGV4T2YoJ1xcbi0tLScsIDMpO1xuICAgIGlmIChlbmRJbmRleCA9PT0gLTEpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRyaW1tZWQuc3Vic3RyaW5nKDMsIGVuZEluZGV4KS50cmltKCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgcmF3IFlBTUwgdXNpbmcgdGhlIGNlbnRyYWxpemVkIHNlY3VyZSBwYXJzZXIuXG4gICAqIFJldHVybnMgcGFyc2UgZGlhZ25vc3RpY3Mgc28gY2FsbGVycyBjYW4gZmFpbCBjbG9zZWQgd2hpbGUgcHJlc2VydmluZyBlcnJvciBjb250ZXh0LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdHJ5UGFyc2VZYW1sT2JqZWN0KGNvbnRlbnQ6IHN0cmluZyk6IHsgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBlcnJvck1lc3NhZ2U/OiBzdHJpbmcgfSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IGRhdGE6IFNlY3VyZVlhbWxQYXJzZXIucGFyc2VSYXdZYW1sKGNvbnRlbnQsIE1lbW9yeU1ldGFkYXRhRXh0cmFjdG9yLk1BWF9ZQU1MX1NJWkUpIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKiogUmV0dXJuIGEgbWluaW1hbCBkZWZhdWx0IGVudHJ5IGZvciBlbXB0eS9jb3JydXB0IGNvbnRlbnQuICovXG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRFbnRyeShyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFBhcnRpYWw8RWxlbWVudEluZGV4RW50cnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsZVBhdGg6IHJlbGF0aXZlUGF0aCxcbiAgICAgIG5hbWU6ICd1bm5hbWVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBhdXRob3I6ICcnLFxuICAgICAgdGFnczogW10sXG4gICAgICBtZW1vcnlUeXBlOiBNZW1vcnlNZXRhZGF0YUV4dHJhY3Rvci5pbmZlck1lbW9yeVR5cGUocmVsYXRpdmVQYXRoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbm9ybWFsaXplVGV4dCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodmFsdWUpLm5vcm1hbGl6ZWRDb250ZW50O1xuICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resolve a target path and verify that it remains inside the intended base
|
|
3
3
|
* directory. This is separator-aware, so sibling paths such as `/tmp/base2`
|
|
4
|
-
* are not treated as children of `/tmp/base`.
|
|
4
|
+
* are not treated as children of `/tmp/base`. Existing symlinked base paths
|
|
5
|
+
* and symlinked descendants under the base are rejected because writes would
|
|
6
|
+
* follow them outside the lexical containment boundary.
|
|
5
7
|
*/
|
|
6
8
|
export declare function resolvePathWithinBase(baseDir: string, ...segments: string[]): string;
|
|
7
9
|
//# sourceMappingURL=pathSecurity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathSecurity.d.ts","sourceRoot":"","sources":["../../src/utils/pathSecurity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pathSecurity.d.ts","sourceRoot":"","sources":["../../src/utils/pathSecurity.ts"],"names":[],"mappings":"AAqCA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CA4BpF"}
|
|
@@ -1,8 +1,42 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
1
2
|
import * as path from 'node:path';
|
|
3
|
+
function assertNotSymlink(pathToCheck, message) {
|
|
4
|
+
try {
|
|
5
|
+
const stats = fs.lstatSync(pathToCheck);
|
|
6
|
+
if (stats.isSymbolicLink()) {
|
|
7
|
+
throw new Error(message);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const code = typeof error === 'object' && error !== null && 'code' in error
|
|
12
|
+
? error.code
|
|
13
|
+
: undefined;
|
|
14
|
+
if (code === 'ENOENT' || code === 'ENOTDIR') {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function assertNoSymlinkedDescendants(resolvedBase, resolvedTarget) {
|
|
21
|
+
const relativePath = path.relative(resolvedBase, resolvedTarget);
|
|
22
|
+
if (!relativePath) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
let currentPath = resolvedBase;
|
|
26
|
+
for (const segment of relativePath.split(path.sep)) {
|
|
27
|
+
if (!segment) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
currentPath = path.join(currentPath, segment);
|
|
31
|
+
assertNotSymlink(currentPath, 'Path segment resolves through a symbolic link');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
2
34
|
/**
|
|
3
35
|
* Resolve a target path and verify that it remains inside the intended base
|
|
4
36
|
* directory. This is separator-aware, so sibling paths such as `/tmp/base2`
|
|
5
|
-
* are not treated as children of `/tmp/base`.
|
|
37
|
+
* are not treated as children of `/tmp/base`. Existing symlinked base paths
|
|
38
|
+
* and symlinked descendants under the base are rejected because writes would
|
|
39
|
+
* follow them outside the lexical containment boundary.
|
|
6
40
|
*/
|
|
7
41
|
export function resolvePathWithinBase(baseDir, ...segments) {
|
|
8
42
|
if (!baseDir || typeof baseDir !== 'string') {
|
|
@@ -23,8 +57,10 @@ export function resolvePathWithinBase(baseDir, ...segments) {
|
|
|
23
57
|
|| relativePath.startsWith('..' + path.sep)
|
|
24
58
|
|| path.isAbsolute(relativePath);
|
|
25
59
|
if (!isTraversal) {
|
|
60
|
+
assertNotSymlink(resolvedBase, 'Base directory resolves through a symbolic link');
|
|
61
|
+
assertNoSymlinkedDescendants(resolvedBase, resolvedTarget);
|
|
26
62
|
return resolvedTarget;
|
|
27
63
|
}
|
|
28
64
|
throw new Error('Resolved path escapes the base directory');
|
|
29
65
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aFNlY3VyaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhdGhTZWN1cml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUVsQyxTQUFTLGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsT0FBZTtJQUM1RCxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLElBQUksS0FBSztZQUN6RSxDQUFDLENBQUUsS0FBK0IsQ0FBQyxJQUFJO1lBQ3ZDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsWUFBb0IsRUFBRSxjQUFzQjtJQUNoRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUM7SUFDL0IsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLFNBQVM7UUFDWCxDQUFDO1FBRUQsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE9BQWUsRUFBRSxHQUFHLFFBQWtCO0lBQzFFLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLFNBQVMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDakUsTUFBTSxXQUFXLEdBQUcsWUFBWSxLQUFLLElBQUk7V0FDcEMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztXQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRW5DLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsaURBQWlELENBQUMsQ0FBQztRQUNsRiw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbmZ1bmN0aW9uIGFzc2VydE5vdFN5bWxpbmsocGF0aFRvQ2hlY2s6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBmcy5sc3RhdFN5bmMocGF0aFRvQ2hlY2spO1xuICAgIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGNvZGUgPSB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsICYmICdjb2RlJyBpbiBlcnJvclxuICAgICAgPyAoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAoY29kZSA9PT0gJ0VOT0VOVCcgfHwgY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vU3ltbGlua2VkRGVzY2VuZGFudHMocmVzb2x2ZWRCYXNlOiBzdHJpbmcsIHJlc29sdmVkVGFyZ2V0OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShyZXNvbHZlZEJhc2UsIHJlc29sdmVkVGFyZ2V0KTtcbiAgaWYgKCFyZWxhdGl2ZVBhdGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgY3VycmVudFBhdGggPSByZXNvbHZlZEJhc2U7XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiByZWxhdGl2ZVBhdGguc3BsaXQocGF0aC5zZXApKSB7XG4gICAgaWYgKCFzZWdtZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjdXJyZW50UGF0aCA9IHBhdGguam9pbihjdXJyZW50UGF0aCwgc2VnbWVudCk7XG4gICAgYXNzZXJ0Tm90U3ltbGluayhjdXJyZW50UGF0aCwgJ1BhdGggc2VnbWVudCByZXNvbHZlcyB0aHJvdWdoIGEgc3ltYm9saWMgbGluaycpO1xuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHRhcmdldCBwYXRoIGFuZCB2ZXJpZnkgdGhhdCBpdCByZW1haW5zIGluc2lkZSB0aGUgaW50ZW5kZWQgYmFzZVxuICogZGlyZWN0b3J5LiBUaGlzIGlzIHNlcGFyYXRvci1hd2FyZSwgc28gc2libGluZyBwYXRocyBzdWNoIGFzIGAvdG1wL2Jhc2UyYFxuICogYXJlIG5vdCB0cmVhdGVkIGFzIGNoaWxkcmVuIG9mIGAvdG1wL2Jhc2VgLiBFeGlzdGluZyBzeW1saW5rZWQgYmFzZSBwYXRoc1xuICogYW5kIHN5bWxpbmtlZCBkZXNjZW5kYW50cyB1bmRlciB0aGUgYmFzZSBhcmUgcmVqZWN0ZWQgYmVjYXVzZSB3cml0ZXMgd291bGRcbiAqIGZvbGxvdyB0aGVtIG91dHNpZGUgdGhlIGxleGljYWwgY29udGFpbm1lbnQgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aFdpdGhpbkJhc2UoYmFzZURpcjogc3RyaW5nLCAuLi5zZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAoIWJhc2VEaXIgfHwgdHlwZW9mIGJhc2VEaXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQmFzZSBkaXJlY3RvcnkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgIGlmICh0eXBlb2Ygc2VnbWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhdGggc2VnbWVudHMgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxuICAgIGlmIChzZWdtZW50LmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIHNlZ21lbnQgY29udGFpbnMgYSBudWxsIGJ5dGUnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXNvbHZlZEJhc2UgPSBwYXRoLnJlc29sdmUoYmFzZURpcik7XG4gIGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gcGF0aC5yZXNvbHZlKHJlc29sdmVkQmFzZSwgLi4uc2VnbWVudHMpO1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHJlc29sdmVkQmFzZSwgcmVzb2x2ZWRUYXJnZXQpO1xuICBjb25zdCBpc1RyYXZlcnNhbCA9IHJlbGF0aXZlUGF0aCA9PT0gJy4uJ1xuICAgIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLicgKyBwYXRoLnNlcClcbiAgICB8fCBwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmVQYXRoKTtcblxuICBpZiAoIWlzVHJhdmVyc2FsKSB7XG4gICAgYXNzZXJ0Tm90U3ltbGluayhyZXNvbHZlZEJhc2UsICdCYXNlIGRpcmVjdG9yeSByZXNvbHZlcyB0aHJvdWdoIGEgc3ltYm9saWMgbGluaycpO1xuICAgIGFzc2VydE5vU3ltbGlua2VkRGVzY2VuZGFudHMocmVzb2x2ZWRCYXNlLCByZXNvbHZlZFRhcmdldCk7XG4gICAgcmV0dXJuIHJlc29sdmVkVGFyZ2V0O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdSZXNvbHZlZCBwYXRoIGVzY2FwZXMgdGhlIGJhc2UgZGlyZWN0b3J5Jyk7XG59XG4iXX0=
|
|
@@ -33,6 +33,13 @@ export declare function createSetupRoutes(opts?: {
|
|
|
33
33
|
_installPermissionHook?: (client: string) => Promise<InstallPermissionHookResult>;
|
|
34
34
|
/** Override permission hook status reconciler. For testing only. */
|
|
35
35
|
_reconcilePermissionHookStatus?: (client: string) => Promise<PermissionHookStatus>;
|
|
36
|
+
/**
|
|
37
|
+
* Override the NVM launcher mitigation applied after a successful install.
|
|
38
|
+
* For testing only. Without this seam the install handler runs the real
|
|
39
|
+
* applyNvmLauncherIfNeeded against the real homedir(); on a machine WITH NVM
|
|
40
|
+
* that patches the developer's real client configs (issue #2338).
|
|
41
|
+
*/
|
|
42
|
+
_applyNvmLauncher?: (client: string) => Promise<NvmLauncherResult>;
|
|
36
43
|
/** Enable automatic hook asset repair during detect. Defaults off in tests. */
|
|
37
44
|
_autoRepairPermissionHooksOnDetect?: boolean;
|
|
38
45
|
/** Skip the sliding-window rate limiter. For testing only. */
|
|
@@ -59,18 +66,27 @@ export type NvmLauncherResult = 'applied' | 'not-applicable' | 'failed';
|
|
|
59
66
|
*/
|
|
60
67
|
export declare function applyNvmLauncherIfNeeded(client: string, home?: string): Promise<NvmLauncherResult>;
|
|
61
68
|
/**
|
|
62
|
-
* Startup repair
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
69
|
+
* Startup repair + self-heal: reconciles every known JSON-format client config
|
|
70
|
+
* on each server start. Behaviour depends on whether NVM is installed, matching
|
|
71
|
+
* the acceptance matrix in https://github.com/DollhouseMCP/mcp-server/issues/2338:
|
|
72
|
+
*
|
|
73
|
+
* • NVM present → (re)create the wrapper and point each config at it. Covers a
|
|
74
|
+
* deleted wrapper, a pre-fix install still on bare `npx`, and a config left
|
|
75
|
+
* pointing at a dead temp-dir wrapper (regenerates the real one). Healthy
|
|
76
|
+
* configs re-serialise byte-identically, so this is a no-op for them.
|
|
77
|
+
* • NVM absent → never create a wrapper, but SELF-HEAL any config whose
|
|
78
|
+
* command points at a `dollhousemcp-nvm.sh` that no longer exists (e.g. the
|
|
79
|
+
* #2338 test leak, or a user who removed ~/.dollhouse/bin) back to bare `npx`,
|
|
80
|
+
* preserving args so the client can launch DollhouseMCP again.
|
|
67
81
|
*
|
|
68
82
|
* Fire-and-forget from startWebServer. All errors are swallowed and logged.
|
|
69
83
|
*
|
|
70
84
|
* @param home - Override home directory (injectable for tests)
|
|
71
85
|
* @param configPathResolver - Override config path lookup (injectable for tests).
|
|
72
|
-
* Return null to skip a client entirely.
|
|
73
|
-
*
|
|
86
|
+
* Return null to skip a client entirely. Defaults to a
|
|
87
|
+
* home-derived resolver so `home` stays authoritative
|
|
88
|
+
* — the default must NOT reach the real homedir() when
|
|
89
|
+
* a fake home is supplied (#2338).
|
|
74
90
|
*/
|
|
75
91
|
export declare function repairNvmLauncherOnStartup(home?: string, configPathResolver?: (client: string) => string | null): Promise<void>;
|
|
76
92
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/setupRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAajD,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EAC1B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"setupRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/setupRoutes.ts"],"names":[],"mappings":"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"}
|