@dollhousemcp/mcp-server 1.5.1 → 1.5.2
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 +34 -0
- package/README.md +9 -5
- package/dist/auth/GitHubAuthManager.js +2 -2
- package/dist/cache/CollectionCache.d.ts +65 -0
- package/dist/cache/CollectionCache.d.ts.map +1 -0
- package/dist/cache/CollectionCache.js +162 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +2 -1
- package/dist/collection/CollectionBrowser.d.ts +24 -1
- package/dist/collection/CollectionBrowser.d.ts.map +1 -1
- package/dist/collection/CollectionBrowser.js +135 -23
- package/dist/collection/CollectionSearch.d.ts +20 -1
- package/dist/collection/CollectionSearch.d.ts.map +1 -1
- package/dist/collection/CollectionSearch.js +110 -6
- package/dist/collection/CollectionSeeder.d.ts +36 -0
- package/dist/collection/CollectionSeeder.d.ts.map +1 -0
- package/dist/collection/CollectionSeeder.js +230 -0
- package/dist/collection/PersonaSubmitter.d.ts +48 -1
- package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
- package/dist/collection/PersonaSubmitter.js +170 -34
- package/dist/collection/index.d.ts +1 -0
- package/dist/collection/index.d.ts.map +1 -1
- package/dist/collection/index.js +2 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -25
- package/dist/server/tools/CollectionTools.d.ts.map +1 -1
- package/dist/server/tools/CollectionTools.js +12 -1
- package/dist/server/types.d.ts +1 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/utils/searchUtils.d.ts +23 -0
- package/dist/utils/searchUtils.d.ts.map +1 -0
- package/dist/utils/searchUtils.js +57 -0
- package/package.json +1 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection seeder for anonymous/offline browsing
|
|
3
|
+
* Provides basic collection data that doesn't require GitHub authentication
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Basic collection data that can be used without GitHub API access
|
|
7
|
+
* This provides a minimal set of well-known collection items
|
|
8
|
+
*/
|
|
9
|
+
export class CollectionSeeder {
|
|
10
|
+
// Cache the seed data as a static property for memory efficiency
|
|
11
|
+
static cachedSeedData = null;
|
|
12
|
+
/**
|
|
13
|
+
* Get seed data for the collection cache
|
|
14
|
+
* This includes popular/essential items that are commonly requested
|
|
15
|
+
* Data is cached as a static property to avoid recreation on every call
|
|
16
|
+
*/
|
|
17
|
+
static getSeedData() {
|
|
18
|
+
// Return cached data if available
|
|
19
|
+
if (CollectionSeeder.cachedSeedData) {
|
|
20
|
+
return CollectionSeeder.cachedSeedData;
|
|
21
|
+
}
|
|
22
|
+
// Create and cache the seed data
|
|
23
|
+
CollectionSeeder.cachedSeedData = [
|
|
24
|
+
// Popular Personas
|
|
25
|
+
{
|
|
26
|
+
name: 'creative-writer.md',
|
|
27
|
+
path: 'library/personas/creative-writer.md',
|
|
28
|
+
sha: 'seed-data',
|
|
29
|
+
last_modified: new Date().toISOString()
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'eli5-explainer.md',
|
|
33
|
+
path: 'library/personas/eli5-explainer.md',
|
|
34
|
+
sha: 'seed-data',
|
|
35
|
+
last_modified: new Date().toISOString()
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'debug-detective.md',
|
|
39
|
+
path: 'library/personas/debug-detective.md',
|
|
40
|
+
sha: 'seed-data',
|
|
41
|
+
last_modified: new Date().toISOString()
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'technical-analyst.md',
|
|
45
|
+
path: 'library/personas/technical-analyst.md',
|
|
46
|
+
sha: 'seed-data',
|
|
47
|
+
last_modified: new Date().toISOString()
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'business-consultant.md',
|
|
51
|
+
path: 'library/personas/business-consultant.md',
|
|
52
|
+
sha: 'seed-data',
|
|
53
|
+
last_modified: new Date().toISOString()
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'security-analyst.md',
|
|
57
|
+
path: 'library/personas/security-analyst.md',
|
|
58
|
+
sha: 'seed-data',
|
|
59
|
+
last_modified: new Date().toISOString()
|
|
60
|
+
},
|
|
61
|
+
// Popular Skills
|
|
62
|
+
{
|
|
63
|
+
name: 'code-review.md',
|
|
64
|
+
path: 'library/skills/code-review.md',
|
|
65
|
+
sha: 'seed-data',
|
|
66
|
+
last_modified: new Date().toISOString()
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'creative-writing.md',
|
|
70
|
+
path: 'library/skills/creative-writing.md',
|
|
71
|
+
sha: 'seed-data',
|
|
72
|
+
last_modified: new Date().toISOString()
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'data-analysis.md',
|
|
76
|
+
path: 'library/skills/data-analysis.md',
|
|
77
|
+
sha: 'seed-data',
|
|
78
|
+
last_modified: new Date().toISOString()
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'research.md',
|
|
82
|
+
path: 'library/skills/research.md',
|
|
83
|
+
sha: 'seed-data',
|
|
84
|
+
last_modified: new Date().toISOString()
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'translation.md',
|
|
88
|
+
path: 'library/skills/translation.md',
|
|
89
|
+
sha: 'seed-data',
|
|
90
|
+
last_modified: new Date().toISOString()
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'threat-modeling.md',
|
|
94
|
+
path: 'library/skills/threat-modeling.md',
|
|
95
|
+
sha: 'seed-data',
|
|
96
|
+
last_modified: new Date().toISOString()
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'penetration-testing.md',
|
|
100
|
+
path: 'library/skills/penetration-testing.md',
|
|
101
|
+
sha: 'seed-data',
|
|
102
|
+
last_modified: new Date().toISOString()
|
|
103
|
+
},
|
|
104
|
+
// Popular Agents
|
|
105
|
+
{
|
|
106
|
+
name: 'code-reviewer.md',
|
|
107
|
+
path: 'library/agents/code-reviewer.md',
|
|
108
|
+
sha: 'seed-data',
|
|
109
|
+
last_modified: new Date().toISOString()
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'research-assistant.md',
|
|
113
|
+
path: 'library/agents/research-assistant.md',
|
|
114
|
+
sha: 'seed-data',
|
|
115
|
+
last_modified: new Date().toISOString()
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'task-manager.md',
|
|
119
|
+
path: 'library/agents/task-manager.md',
|
|
120
|
+
sha: 'seed-data',
|
|
121
|
+
last_modified: new Date().toISOString()
|
|
122
|
+
},
|
|
123
|
+
// Popular Templates
|
|
124
|
+
{
|
|
125
|
+
name: 'code-documentation.md',
|
|
126
|
+
path: 'library/templates/code-documentation.md',
|
|
127
|
+
sha: 'seed-data',
|
|
128
|
+
last_modified: new Date().toISOString()
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'email-professional.md',
|
|
132
|
+
path: 'library/templates/email-professional.md',
|
|
133
|
+
sha: 'seed-data',
|
|
134
|
+
last_modified: new Date().toISOString()
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'meeting-notes.md',
|
|
138
|
+
path: 'library/templates/meeting-notes.md',
|
|
139
|
+
sha: 'seed-data',
|
|
140
|
+
last_modified: new Date().toISOString()
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'project-brief.md',
|
|
144
|
+
path: 'library/templates/project-brief.md',
|
|
145
|
+
sha: 'seed-data',
|
|
146
|
+
last_modified: new Date().toISOString()
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'report-executive.md',
|
|
150
|
+
path: 'library/templates/report-executive.md',
|
|
151
|
+
sha: 'seed-data',
|
|
152
|
+
last_modified: new Date().toISOString()
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'penetration-test-report.md',
|
|
156
|
+
path: 'library/templates/penetration-test-report.md',
|
|
157
|
+
sha: 'seed-data',
|
|
158
|
+
last_modified: new Date().toISOString()
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'security-vulnerability-report.md',
|
|
162
|
+
path: 'library/templates/security-vulnerability-report.md',
|
|
163
|
+
sha: 'seed-data',
|
|
164
|
+
last_modified: new Date().toISOString()
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'threat-assessment-report.md',
|
|
168
|
+
path: 'library/templates/threat-assessment-report.md',
|
|
169
|
+
sha: 'seed-data',
|
|
170
|
+
last_modified: new Date().toISOString()
|
|
171
|
+
},
|
|
172
|
+
// Popular Ensembles
|
|
173
|
+
{
|
|
174
|
+
name: 'business-advisor.md',
|
|
175
|
+
path: 'library/ensembles/business-advisor.md',
|
|
176
|
+
sha: 'seed-data',
|
|
177
|
+
last_modified: new Date().toISOString()
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
name: 'creative-studio.md',
|
|
181
|
+
path: 'library/ensembles/creative-studio.md',
|
|
182
|
+
sha: 'seed-data',
|
|
183
|
+
last_modified: new Date().toISOString()
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: 'development-team.md',
|
|
187
|
+
path: 'library/ensembles/development-team.md',
|
|
188
|
+
sha: 'seed-data',
|
|
189
|
+
last_modified: new Date().toISOString()
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: 'security-analysis-team.md',
|
|
193
|
+
path: 'library/ensembles/security-analysis-team.md',
|
|
194
|
+
sha: 'seed-data',
|
|
195
|
+
last_modified: new Date().toISOString()
|
|
196
|
+
}
|
|
197
|
+
];
|
|
198
|
+
return CollectionSeeder.cachedSeedData;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get collection statistics from seed data
|
|
202
|
+
*/
|
|
203
|
+
static getSeedStats() {
|
|
204
|
+
const seedData = this.getSeedData();
|
|
205
|
+
const typeCount = new Map();
|
|
206
|
+
seedData.forEach(item => {
|
|
207
|
+
// Extract type from path (library/personas/name.md -> personas)
|
|
208
|
+
const pathParts = item.path.split('/');
|
|
209
|
+
const type = pathParts[1] || 'unknown';
|
|
210
|
+
typeCount.set(type, (typeCount.get(type) || 0) + 1);
|
|
211
|
+
});
|
|
212
|
+
return {
|
|
213
|
+
total: seedData.length,
|
|
214
|
+
byType: Object.fromEntries(typeCount)
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check if an item is available in seed data
|
|
219
|
+
*/
|
|
220
|
+
static isItemInSeedData(path) {
|
|
221
|
+
return this.getSeedData().some(item => item.path === path);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get seed item by path
|
|
225
|
+
*/
|
|
226
|
+
static getSeedItem(path) {
|
|
227
|
+
return this.getSeedData().find(item => item.path === path);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlZWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBSUg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixpRUFBaUU7SUFDekQsTUFBTSxDQUFDLGNBQWMsR0FBNEIsSUFBSSxDQUFDO0lBRTlEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsV0FBVztRQUNoQixrQ0FBa0M7UUFDbEMsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLGdCQUFnQixDQUFDLGNBQWMsR0FBRztZQUNoQyxtQkFBbUI7WUFDbkI7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLElBQUksRUFBRSx5Q0FBeUM7Z0JBQy9DLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsc0NBQXNDO2dCQUM1QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBRUQsaUJBQWlCO1lBQ2pCO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsSUFBSSxFQUFFLCtCQUErQjtnQkFDckMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLElBQUksRUFBRSxtQ0FBbUM7Z0JBQ3pDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBRUQsaUJBQWlCO1lBQ2pCO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxpQ0FBaUM7Z0JBQ3ZDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixJQUFJLEVBQUUsc0NBQXNDO2dCQUM1QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsSUFBSSxFQUFFLGdDQUFnQztnQkFDdEMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUVELG9CQUFvQjtZQUNwQjtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixJQUFJLEVBQUUseUNBQXlDO2dCQUMvQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsSUFBSSxFQUFFLHlDQUF5QztnQkFDL0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLElBQUksRUFBRSw4Q0FBOEM7Z0JBQ3BELEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0NBQWtDO2dCQUN4QyxJQUFJLEVBQUUsb0RBQW9EO2dCQUMxRCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDZCQUE2QjtnQkFDbkMsSUFBSSxFQUFFLCtDQUErQztnQkFDckQsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUVELG9CQUFvQjtZQUNwQjtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsSUFBSSxFQUFFLHNDQUFzQztnQkFDNUMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLElBQUksRUFBRSx1Q0FBdUM7Z0JBQzdDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxJQUFJLEVBQUUsNkNBQTZDO2dCQUNuRCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1NBQ0YsQ0FBQztRQUVGLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU1QyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLGdFQUFnRTtZQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ3RDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUM3QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3Rpb24gc2VlZGVyIGZvciBhbm9ueW1vdXMvb2ZmbGluZSBicm93c2luZ1xuICogUHJvdmlkZXMgYmFzaWMgY29sbGVjdGlvbiBkYXRhIHRoYXQgZG9lc24ndCByZXF1aXJlIEdpdEh1YiBhdXRoZW50aWNhdGlvblxuICovXG5cbmltcG9ydCB7IENvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkNhY2hlLmpzJztcblxuLyoqXG4gKiBCYXNpYyBjb2xsZWN0aW9uIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB3aXRob3V0IEdpdEh1YiBBUEkgYWNjZXNzXG4gKiBUaGlzIHByb3ZpZGVzIGEgbWluaW1hbCBzZXQgb2Ygd2VsbC1rbm93biBjb2xsZWN0aW9uIGl0ZW1zXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uU2VlZGVyIHtcbiAgLy8gQ2FjaGUgdGhlIHNlZWQgZGF0YSBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBmb3IgbWVtb3J5IGVmZmljaWVuY3lcbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGVkU2VlZERhdGE6IENvbGxlY3Rpb25JdGVtW10gfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VlZCBkYXRhIGZvciB0aGUgY29sbGVjdGlvbiBjYWNoZVxuICAgKiBUaGlzIGluY2x1ZGVzIHBvcHVsYXIvZXNzZW50aWFsIGl0ZW1zIHRoYXQgYXJlIGNvbW1vbmx5IHJlcXVlc3RlZFxuICAgKiBEYXRhIGlzIGNhY2hlZCBhcyBhIHN0YXRpYyBwcm9wZXJ0eSB0byBhdm9pZCByZWNyZWF0aW9uIG9uIGV2ZXJ5IGNhbGxcbiAgICovXG4gIHN0YXRpYyBnZXRTZWVkRGF0YSgpOiBDb2xsZWN0aW9uSXRlbVtdIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIGRhdGEgaWYgYXZhaWxhYmxlXG4gICAgaWYgKENvbGxlY3Rpb25TZWVkZXIuY2FjaGVkU2VlZERhdGEpIHtcbiAgICAgIHJldHVybiBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhO1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIHRoZSBzZWVkIGRhdGFcbiAgICBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhID0gW1xuICAgICAgLy8gUG9wdWxhciBQZXJzb25hc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpdmUtd3JpdGVyLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvY3JlYXRpdmUtd3JpdGVyLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZWxpNS1leHBsYWluZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9wZXJzb25hcy9lbGk1LWV4cGxhaW5lci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RlYnVnLWRldGVjdGl2ZS5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3BlcnNvbmFzL2RlYnVnLWRldGVjdGl2ZS5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RlY2huaWNhbC1hbmFseXN0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvdGVjaG5pY2FsLWFuYWx5c3QubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdidXNpbmVzcy1jb25zdWx0YW50Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvYnVzaW5lc3MtY29uc3VsdGFudC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyaXR5LWFuYWx5c3QubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9wZXJzb25hcy9zZWN1cml0eS1hbmFseXN0Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBQb3B1bGFyIFNraWxsc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY29kZS1yZXZpZXcubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvY29kZS1yZXZpZXcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjcmVhdGl2ZS13cml0aW5nLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL2NyZWF0aXZlLXdyaXRpbmcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkYXRhLWFuYWx5c2lzLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL2RhdGEtYW5hbHlzaXMubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXNlYXJjaC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3NraWxscy9yZXNlYXJjaC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RyYW5zbGF0aW9uLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3RyYW5zbGF0aW9uLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGhyZWF0LW1vZGVsaW5nLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3RocmVhdC1tb2RlbGluZy5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3BlbmV0cmF0aW9uLXRlc3RpbmcubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvcGVuZXRyYXRpb24tdGVzdGluZy5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBBZ2VudHNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvZGUtcmV2aWV3ZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9hZ2VudHMvY29kZS1yZXZpZXdlci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3Jlc2VhcmNoLWFzc2lzdGFudC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2FnZW50cy9yZXNlYXJjaC1hc3Npc3RhbnQubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0YXNrLW1hbmFnZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9hZ2VudHMvdGFzay1tYW5hZ2VyLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBQb3B1bGFyIFRlbXBsYXRlc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY29kZS1kb2N1bWVudGF0aW9uLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL2NvZGUtZG9jdW1lbnRhdGlvbi5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2VtYWlsLXByb2Zlc3Npb25hbC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9lbWFpbC1wcm9mZXNzaW9uYWwubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdtZWV0aW5nLW5vdGVzLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL21lZXRpbmctbm90ZXMubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwcm9qZWN0LWJyaWVmLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3Byb2plY3QtYnJpZWYubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXBvcnQtZXhlY3V0aXZlLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3JlcG9ydC1leGVjdXRpdmUubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwZW5ldHJhdGlvbi10ZXN0LXJlcG9ydC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9wZW5ldHJhdGlvbi10ZXN0LXJlcG9ydC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyaXR5LXZ1bG5lcmFiaWxpdHktcmVwb3J0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3NlY3VyaXR5LXZ1bG5lcmFiaWxpdHktcmVwb3J0Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGhyZWF0LWFzc2Vzc21lbnQtcmVwb3J0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3RocmVhdC1hc3Nlc3NtZW50LXJlcG9ydC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBFbnNlbWJsZXNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2J1c2luZXNzLWFkdmlzb3IubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9lbnNlbWJsZXMvYnVzaW5lc3MtYWR2aXNvci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NyZWF0aXZlLXN0dWRpby5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2Vuc2VtYmxlcy9jcmVhdGl2ZS1zdHVkaW8ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkZXZlbG9wbWVudC10ZWFtLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvZW5zZW1ibGVzL2RldmVsb3BtZW50LXRlYW0ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzZWN1cml0eS1hbmFseXNpcy10ZWFtLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvZW5zZW1ibGVzL3NlY3VyaXR5LWFuYWx5c2lzLXRlYW0ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH1cbiAgICBdO1xuICAgIFxuICAgIHJldHVybiBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gc3RhdGlzdGljcyBmcm9tIHNlZWQgZGF0YVxuICAgKi9cbiAgc3RhdGljIGdldFNlZWRTdGF0cygpIHtcbiAgICBjb25zdCBzZWVkRGF0YSA9IHRoaXMuZ2V0U2VlZERhdGEoKTtcbiAgICBjb25zdCB0eXBlQ291bnQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIFxuICAgIHNlZWREYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAvLyBFeHRyYWN0IHR5cGUgZnJvbSBwYXRoIChsaWJyYXJ5L3BlcnNvbmFzL25hbWUubWQgLT4gcGVyc29uYXMpXG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBpdGVtLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBwYXRoUGFydHNbMV0gfHwgJ3Vua25vd24nO1xuICAgICAgdHlwZUNvdW50LnNldCh0eXBlLCAodHlwZUNvdW50LmdldCh0eXBlKSB8fCAwKSArIDEpO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbDogc2VlZERhdGEubGVuZ3RoLFxuICAgICAgYnlUeXBlOiBPYmplY3QuZnJvbUVudHJpZXModHlwZUNvdW50KVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBpdGVtIGlzIGF2YWlsYWJsZSBpbiBzZWVkIGRhdGFcbiAgICovXG4gIHN0YXRpYyBpc0l0ZW1JblNlZWREYXRhKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNlZWREYXRhKCkuc29tZShpdGVtID0+IGl0ZW0ucGF0aCA9PT0gcGF0aCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VlZCBpdGVtIGJ5IHBhdGhcbiAgICovXG4gIHN0YXRpYyBnZXRTZWVkSXRlbShwYXRoOiBzdHJpbmcpOiBDb2xsZWN0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VlZERhdGEoKS5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoID09PSBwYXRoKTtcbiAgfVxufSJdfQ==
|
|
@@ -1,19 +1,66 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Submit personas to the collection
|
|
3
|
+
* Handles both authenticated and anonymous submission workflows
|
|
4
|
+
*
|
|
5
|
+
* Security Features:
|
|
6
|
+
* - Rate limiting to prevent spam (5 submissions per hour per session)
|
|
7
|
+
* - URL length validation for GitHub limits
|
|
8
|
+
* - No email submission pathway (GitHub account required)
|
|
3
9
|
*/
|
|
4
10
|
import { Persona } from '../types/persona.js';
|
|
11
|
+
import { RateLimitStatus } from '../update/RateLimiter.js';
|
|
5
12
|
export declare class PersonaSubmitter {
|
|
13
|
+
private rateLimiter;
|
|
14
|
+
constructor();
|
|
6
15
|
/**
|
|
7
16
|
* Generate GitHub issue for persona submission
|
|
17
|
+
* Includes URL length validation to comply with GitHub's ~8KB limit
|
|
8
18
|
*/
|
|
9
19
|
generateSubmissionIssue(persona: Persona): {
|
|
10
20
|
issueTitle: string;
|
|
11
21
|
issueBody: string;
|
|
12
22
|
githubIssueUrl: string;
|
|
23
|
+
rateLimitStatus?: RateLimitStatus;
|
|
13
24
|
};
|
|
14
25
|
/**
|
|
15
|
-
* Format submission response
|
|
26
|
+
* Format submission response for authenticated users
|
|
16
27
|
*/
|
|
17
28
|
formatSubmissionResponse(persona: Persona, githubIssueUrl: string, personaIndicator?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Format anonymous submission response for unauthenticated users
|
|
31
|
+
*/
|
|
32
|
+
formatAnonymousSubmissionResponse(persona: Persona, githubIssueUrl: string, personaIndicator?: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Build the full issue body with all persona details
|
|
35
|
+
*/
|
|
36
|
+
private buildIssueBody;
|
|
37
|
+
/**
|
|
38
|
+
* Build a truncated issue body to fit within URL limits
|
|
39
|
+
*/
|
|
40
|
+
private buildTruncatedIssueBody;
|
|
41
|
+
/**
|
|
42
|
+
* Serialize persona metadata to YAML format
|
|
43
|
+
*/
|
|
44
|
+
private serializeMetadata;
|
|
45
|
+
/**
|
|
46
|
+
* Build the GitHub issue URL
|
|
47
|
+
*/
|
|
48
|
+
private buildGitHubIssueUrl;
|
|
49
|
+
/**
|
|
50
|
+
* Build common response header used by both authenticated and anonymous responses
|
|
51
|
+
*/
|
|
52
|
+
private buildResponseHeader;
|
|
53
|
+
/**
|
|
54
|
+
* Build standard submission steps for authenticated users
|
|
55
|
+
*/
|
|
56
|
+
private buildStandardSubmissionSteps;
|
|
57
|
+
/**
|
|
58
|
+
* Build anonymous submission process instructions
|
|
59
|
+
*/
|
|
60
|
+
private buildAnonymousSubmissionProcess;
|
|
61
|
+
/**
|
|
62
|
+
* Build anonymous submission next steps and expectations
|
|
63
|
+
*/
|
|
64
|
+
private buildAnonymousNextSteps;
|
|
18
65
|
}
|
|
19
66
|
//# sourceMappingURL=PersonaSubmitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonaSubmitter.d.ts","sourceRoot":"","sources":["../../src/collection/PersonaSubmitter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PersonaSubmitter.d.ts","sourceRoot":"","sources":["../../src/collection/PersonaSubmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAe,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAgBxE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAc;;IAUjC;;;OAGG;IACH,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG;QACzC,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,eAAe,CAAC;KACnC;IAsCD;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAW,GAAG,MAAM;IAczG;;OAEG;IACH,iCAAiC,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAW,GAAG,MAAM;IAiBlH;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IASpC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAYvC;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAOhC"}
|
|
@@ -1,57 +1,193 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Submit personas to the collection
|
|
3
|
+
* Handles both authenticated and anonymous submission workflows
|
|
4
|
+
*
|
|
5
|
+
* Security Features:
|
|
6
|
+
* - Rate limiting to prevent spam (5 submissions per hour per session)
|
|
7
|
+
* - URL length validation for GitHub limits
|
|
8
|
+
* - No email submission pathway (GitHub account required)
|
|
3
9
|
*/
|
|
10
|
+
import { RateLimiter } from '../update/RateLimiter.js';
|
|
11
|
+
import { SecurityMonitor } from '../security/securityMonitor.js';
|
|
12
|
+
// Configuration constants
|
|
13
|
+
const GITHUB_URL_LIMIT = 8192; // GitHub's URL length limit (~8KB)
|
|
14
|
+
const COLLECTION_REPO_OWNER = 'DollhouseMCP';
|
|
15
|
+
const COLLECTION_REPO_NAME = 'collection';
|
|
16
|
+
// Common response components
|
|
17
|
+
const RESPONSE_COMPONENTS = {
|
|
18
|
+
SUBMISSION_ICON: '📤',
|
|
19
|
+
PERSONA_ICON: '🎭',
|
|
20
|
+
TIP_ICON: '⭐',
|
|
21
|
+
PRO_TIP_ICON: '💡'
|
|
22
|
+
};
|
|
4
23
|
export class PersonaSubmitter {
|
|
24
|
+
rateLimiter;
|
|
25
|
+
constructor() {
|
|
26
|
+
// Initialize rate limiter: 5 submissions per hour
|
|
27
|
+
this.rateLimiter = new RateLimiter({
|
|
28
|
+
maxRequests: 5,
|
|
29
|
+
windowMs: 60 * 60 * 1000, // 1 hour
|
|
30
|
+
minDelayMs: 10000 // Minimum 10 seconds between submissions
|
|
31
|
+
});
|
|
32
|
+
}
|
|
5
33
|
/**
|
|
6
34
|
* Generate GitHub issue for persona submission
|
|
35
|
+
* Includes URL length validation to comply with GitHub's ~8KB limit
|
|
7
36
|
*/
|
|
8
37
|
generateSubmissionIssue(persona) {
|
|
38
|
+
// Check rate limit
|
|
39
|
+
const rateLimitStatus = this.rateLimiter.checkLimit();
|
|
40
|
+
if (!rateLimitStatus.allowed) {
|
|
41
|
+
// Log potential abuse attempt
|
|
42
|
+
SecurityMonitor.logSecurityEvent({
|
|
43
|
+
type: 'RATE_LIMIT_EXCEEDED',
|
|
44
|
+
severity: 'MEDIUM',
|
|
45
|
+
source: 'PersonaSubmitter.generateSubmissionIssue',
|
|
46
|
+
details: `Submission rate limit exceeded. Retry after ${rateLimitStatus.retryAfterMs}ms`
|
|
47
|
+
});
|
|
48
|
+
throw new Error(`Submission rate limit exceeded. Please wait ${Math.ceil(rateLimitStatus.retryAfterMs / 1000)} seconds before submitting again. ` +
|
|
49
|
+
`This limit helps prevent spam and ensures quality submissions.`);
|
|
50
|
+
}
|
|
9
51
|
const issueTitle = `New Persona Submission: ${persona.metadata.name}`;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
\`\`\`markdown
|
|
19
|
-
---
|
|
20
|
-
${Object.entries(persona.metadata)
|
|
21
|
-
.map(([key, value]) => `${key}: ${Array.isArray(value) ? JSON.stringify(value) : JSON.stringify(value)}`)
|
|
22
|
-
.join('\n')}
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
${persona.content}
|
|
26
|
-
\`\`\`
|
|
27
|
-
|
|
28
|
-
### Submission Details:
|
|
29
|
-
- Submitted via DollhouseMCP client
|
|
30
|
-
- Filename: ${persona.filename}
|
|
31
|
-
- Unique ID: ${persona.unique_id}
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
*Please review this persona for inclusion in the collection.*`;
|
|
35
|
-
const githubIssueUrl = `https://github.com/DollhouseMCP/collection/issues/new?title=${encodeURIComponent(issueTitle)}&body=${encodeURIComponent(issueBody)}`;
|
|
52
|
+
let issueBody = this.buildIssueBody(persona);
|
|
53
|
+
// Check URL length and truncate if necessary
|
|
54
|
+
let githubIssueUrl = this.buildGitHubIssueUrl(issueTitle, issueBody);
|
|
55
|
+
// If URL exceeds GitHub's limit, truncate the content
|
|
56
|
+
if (githubIssueUrl.length >= GITHUB_URL_LIMIT) {
|
|
57
|
+
issueBody = this.buildTruncatedIssueBody(persona);
|
|
58
|
+
githubIssueUrl = this.buildGitHubIssueUrl(issueTitle, issueBody);
|
|
59
|
+
}
|
|
36
60
|
return {
|
|
37
61
|
issueTitle,
|
|
38
62
|
issueBody,
|
|
39
|
-
githubIssueUrl
|
|
63
|
+
githubIssueUrl,
|
|
64
|
+
rateLimitStatus
|
|
40
65
|
};
|
|
41
66
|
}
|
|
42
67
|
/**
|
|
43
|
-
* Format submission response
|
|
68
|
+
* Format submission response for authenticated users
|
|
44
69
|
*/
|
|
45
70
|
formatSubmissionResponse(persona, githubIssueUrl, personaIndicator = '') {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
71
|
+
const header = this.buildResponseHeader('Persona Submission Prepared', persona.metadata.name, 'is ready for collection submission!', personaIndicator);
|
|
72
|
+
const steps = this.buildStandardSubmissionSteps(githubIssueUrl);
|
|
73
|
+
const tip = `${RESPONSE_COMPONENTS.TIP_ICON} **Tip:** You can also submit via pull request if you're familiar with Git!`;
|
|
74
|
+
return `${header}\n\n${steps}\n\n${tip}`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Format anonymous submission response for unauthenticated users
|
|
78
|
+
*/
|
|
79
|
+
formatAnonymousSubmissionResponse(persona, githubIssueUrl, personaIndicator = '') {
|
|
80
|
+
const header = this.buildResponseHeader('Anonymous Submission Path Available', persona.metadata.name, 'can be submitted without GitHub authentication!', personaIndicator);
|
|
81
|
+
const process = this.buildAnonymousSubmissionProcess(githubIssueUrl);
|
|
82
|
+
const nextSteps = this.buildAnonymousNextSteps();
|
|
83
|
+
const proTip = `${RESPONSE_COMPONENTS.PRO_TIP_ICON} **Pro tip:** Creating a free GitHub account unlocks additional features, but it's completely optional for submissions!`;
|
|
84
|
+
return `${header}\n\n${process}\n\n${nextSteps}\n\n${proTip}`;
|
|
85
|
+
}
|
|
86
|
+
// Private helper methods for building response components
|
|
87
|
+
/**
|
|
88
|
+
* Build the full issue body with all persona details
|
|
89
|
+
*/
|
|
90
|
+
buildIssueBody(persona) {
|
|
91
|
+
return `## Persona Submission\n\n` +
|
|
92
|
+
`**Name:** ${persona.metadata.name}\n` +
|
|
93
|
+
`**Author:** ${persona.metadata.author || 'Unknown'}\n` +
|
|
94
|
+
`**Category:** ${persona.metadata.category || 'General'}\n` +
|
|
95
|
+
`**Description:** ${persona.metadata.description}\n\n` +
|
|
96
|
+
`### Persona Content:\n` +
|
|
97
|
+
`\`\`\`markdown\n` +
|
|
98
|
+
`---\n` +
|
|
99
|
+
`${this.serializeMetadata(persona.metadata)}\n` +
|
|
100
|
+
`---\n\n` +
|
|
101
|
+
`${persona.content}\n` +
|
|
102
|
+
`\`\`\`\n\n` +
|
|
103
|
+
`### Submission Details:\n` +
|
|
104
|
+
`- Submitted via DollhouseMCP client\n` +
|
|
105
|
+
`- Filename: ${persona.filename}\n` +
|
|
106
|
+
`- Unique ID: ${persona.unique_id}\n\n` +
|
|
107
|
+
`---\n` +
|
|
108
|
+
`*Please review this persona for inclusion in the collection.*`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Build a truncated issue body to fit within URL limits
|
|
112
|
+
*/
|
|
113
|
+
buildTruncatedIssueBody(persona) {
|
|
114
|
+
const truncatedContent = persona.content.length > 500
|
|
115
|
+
? `${persona.content.substring(0, 500)}...\n\n[Content truncated due to length]`
|
|
116
|
+
: persona.content;
|
|
117
|
+
return `## Persona Submission\n\n` +
|
|
118
|
+
`**Name:** ${persona.metadata.name}\n` +
|
|
119
|
+
`**Author:** ${persona.metadata.author || 'Unknown'}\n` +
|
|
120
|
+
`**Category:** ${persona.metadata.category || 'General'}\n` +
|
|
121
|
+
`**Description:** ${persona.metadata.description}\n\n` +
|
|
122
|
+
`### Persona Content (Truncated):\n` +
|
|
123
|
+
`\`\`\`markdown\n` +
|
|
124
|
+
`---\n` +
|
|
125
|
+
`${this.serializeMetadata(persona.metadata)}\n` +
|
|
126
|
+
`---\n\n` +
|
|
127
|
+
`${truncatedContent}\n` +
|
|
128
|
+
`\`\`\`\n\n` +
|
|
129
|
+
`### Submission Details:\n` +
|
|
130
|
+
`- Submitted via DollhouseMCP client\n` +
|
|
131
|
+
`- Filename: ${persona.filename}\n` +
|
|
132
|
+
`- Unique ID: ${persona.unique_id}\n\n` +
|
|
133
|
+
`---\n` +
|
|
134
|
+
`*Please review this persona for inclusion in the collection.*`;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Serialize persona metadata to YAML format
|
|
138
|
+
*/
|
|
139
|
+
serializeMetadata(metadata) {
|
|
140
|
+
return Object.entries(metadata)
|
|
141
|
+
.map(([key, value]) => `${key}: ${Array.isArray(value) ? JSON.stringify(value) : JSON.stringify(value)}`)
|
|
142
|
+
.join('\n');
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build the GitHub issue URL
|
|
146
|
+
*/
|
|
147
|
+
buildGitHubIssueUrl(title, body) {
|
|
148
|
+
return `https://github.com/${COLLECTION_REPO_OWNER}/${COLLECTION_REPO_NAME}/issues/new?title=${encodeURIComponent(title)}&body=${encodeURIComponent(body)}`;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Build common response header used by both authenticated and anonymous responses
|
|
152
|
+
*/
|
|
153
|
+
buildResponseHeader(title, personaName, subtitle, personaIndicator) {
|
|
154
|
+
return `${personaIndicator}${RESPONSE_COMPONENTS.SUBMISSION_ICON} **${title}**\n\n` +
|
|
155
|
+
`${RESPONSE_COMPONENTS.PERSONA_ICON} **${personaName}** ${subtitle}`;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Build standard submission steps for authenticated users
|
|
159
|
+
*/
|
|
160
|
+
buildStandardSubmissionSteps(githubIssueUrl) {
|
|
161
|
+
return `**Next Steps:**\n` +
|
|
49
162
|
`1. Click this link to create a GitHub issue: \n` +
|
|
50
163
|
` ${githubIssueUrl}\n\n` +
|
|
51
164
|
`2. Review the pre-filled content\n` +
|
|
52
165
|
`3. Click "Submit new issue"\n` +
|
|
53
|
-
`4. The maintainers will review your submission
|
|
54
|
-
|
|
166
|
+
`4. The maintainers will review your submission`;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Build anonymous submission process instructions
|
|
170
|
+
*/
|
|
171
|
+
buildAnonymousSubmissionProcess(githubIssueUrl) {
|
|
172
|
+
return `**Anonymous Submission Process:**\n` +
|
|
173
|
+
`1. Click this link to create a GitHub issue:\n` +
|
|
174
|
+
` ${githubIssueUrl}\n\n` +
|
|
175
|
+
`2. **To submit your persona:**\n` +
|
|
176
|
+
` • You'll need a GitHub account (free to create)\n` +
|
|
177
|
+
` • Click "Submit new issue" to submit directly\n` +
|
|
178
|
+
` • The form is pre-filled with all your persona details\n\n` +
|
|
179
|
+
`**Note:** GitHub account is required for submission to prevent spam and maintain quality.\n` +
|
|
180
|
+
`Creating an account is free and takes less than a minute: https://github.com/signup`;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Build anonymous submission next steps and expectations
|
|
184
|
+
*/
|
|
185
|
+
buildAnonymousNextSteps() {
|
|
186
|
+
return `**What happens next:**\n` +
|
|
187
|
+
`• Community maintainers review all submissions\n` +
|
|
188
|
+
`• Anonymous submissions get the same consideration as authenticated ones\n` +
|
|
189
|
+
`• If accepted, your persona joins the collection with attribution to "Community Contributor"\n` +
|
|
190
|
+
`• The review typically takes 2-3 business days`;
|
|
55
191
|
}
|
|
56
192
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYVN1Ym1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL1BlcnNvbmFTdWJtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOztPQUVHO0lBQ0gsdUJBQXVCLENBQUMsT0FBZ0I7UUFLdEMsTUFBTSxVQUFVLEdBQUcsMkJBQTJCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEUsTUFBTSxTQUFTLEdBQUc7O1lBRVYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO2NBQ25CLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFNBQVM7Z0JBQ2xDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLFNBQVM7bUJBQ25DLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVzs7Ozs7RUFLN0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDeEcsSUFBSSxDQUFDLElBQUksQ0FBQzs7O0VBR1gsT0FBTyxDQUFDLE9BQU87Ozs7O2NBS0gsT0FBTyxDQUFDLFFBQVE7ZUFDZixPQUFPLENBQUMsU0FBUzs7OzhEQUc4QixDQUFDO1FBRTNELE1BQU0sY0FBYyxHQUFHLCtEQUErRCxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBRTdKLE9BQU87WUFDTCxVQUFVO1lBQ1YsU0FBUztZQUNULGNBQWM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsd0JBQXdCLENBQUMsT0FBZ0IsRUFBRSxjQUFzQixFQUFFLG1CQUEyQixFQUFFO1FBQzlGLE9BQU8sR0FBRyxnQkFBZ0Isd0NBQXdDO1lBQ2hFLFFBQVEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLDRDQUE0QztZQUN6RSxtQkFBbUI7WUFDbkIsaURBQWlEO1lBQ2pELE1BQU0sY0FBYyxNQUFNO1lBQzFCLG9DQUFvQztZQUNwQywrQkFBK0I7WUFDL0Isb0RBQW9EO1lBQ3BELDhFQUE4RSxDQUFDO0lBQ25GLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3VibWl0IHBlcnNvbmFzIHRvIHRoZSBjb2xsZWN0aW9uXG4gKi9cblxuaW1wb3J0IHsgUGVyc29uYSB9IGZyb20gJy4uL3R5cGVzL3BlcnNvbmEuanMnO1xuXG5leHBvcnQgY2xhc3MgUGVyc29uYVN1Ym1pdHRlciB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBHaXRIdWIgaXNzdWUgZm9yIHBlcnNvbmEgc3VibWlzc2lvblxuICAgKi9cbiAgZ2VuZXJhdGVTdWJtaXNzaW9uSXNzdWUocGVyc29uYTogUGVyc29uYSk6IHsgXG4gICAgaXNzdWVUaXRsZTogc3RyaW5nOyBcbiAgICBpc3N1ZUJvZHk6IHN0cmluZzsgXG4gICAgZ2l0aHViSXNzdWVVcmw6IHN0cmluZyBcbiAgfSB7XG4gICAgY29uc3QgaXNzdWVUaXRsZSA9IGBOZXcgUGVyc29uYSBTdWJtaXNzaW9uOiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX1gO1xuICAgIGNvbnN0IGlzc3VlQm9keSA9IGAjIyBQZXJzb25hIFN1Ym1pc3Npb25cblxuKipOYW1lOioqICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfVxuKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XG4qKkNhdGVnb3J5OioqICR7cGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeSB8fCAnR2VuZXJhbCd9XG4qKkRlc2NyaXB0aW9uOioqICR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cblxuIyMjIFBlcnNvbmEgQ29udGVudDpcblxcYFxcYFxcYG1hcmtkb3duXG4tLS1cbiR7T2JqZWN0LmVudHJpZXMocGVyc29uYS5tZXRhZGF0YSlcbiAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke0FycmF5LmlzQXJyYXkodmFsdWUpID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpfWApXG4gIC5qb2luKCdcXG4nKX1cbi0tLVxuXG4ke3BlcnNvbmEuY29udGVudH1cblxcYFxcYFxcYFxuXG4jIyMgU3VibWlzc2lvbiBEZXRhaWxzOlxuLSBTdWJtaXR0ZWQgdmlhIERvbGxob3VzZU1DUCBjbGllbnRcbi0gRmlsZW5hbWU6ICR7cGVyc29uYS5maWxlbmFtZX1cbi0gVW5pcXVlIElEOiAke3BlcnNvbmEudW5pcXVlX2lkfVxuXG4tLS1cbipQbGVhc2UgcmV2aWV3IHRoaXMgcGVyc29uYSBmb3IgaW5jbHVzaW9uIGluIHRoZSBjb2xsZWN0aW9uLipgO1xuICAgIFxuICAgIGNvbnN0IGdpdGh1Yklzc3VlVXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9pc3N1ZXMvbmV3P3RpdGxlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGlzc3VlVGl0bGUpfSZib2R5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGlzc3VlQm9keSl9YDtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXNzdWVUaXRsZSxcbiAgICAgIGlzc3VlQm9keSxcbiAgICAgIGdpdGh1Yklzc3VlVXJsXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBzdWJtaXNzaW9uIHJlc3BvbnNlXG4gICAqL1xuICBmb3JtYXRTdWJtaXNzaW9uUmVzcG9uc2UocGVyc29uYTogUGVyc29uYSwgZ2l0aHViSXNzdWVVcmw6IHN0cmluZywgcGVyc29uYUluZGljYXRvcjogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwZXJzb25hSW5kaWNhdG9yffCfk6QgKipQZXJzb25hIFN1Ym1pc3Npb24gUHJlcGFyZWQqKlxcblxcbmAgK1xuICAgICAgYPCfjq0gKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKiBpcyByZWFkeSBmb3IgY29sbGVjdGlvbiBzdWJtaXNzaW9uIVxcblxcbmAgK1xuICAgICAgYCoqTmV4dCBTdGVwczoqKlxcbmAgK1xuICAgICAgYDEuIENsaWNrIHRoaXMgbGluayB0byBjcmVhdGUgYSBHaXRIdWIgaXNzdWU6IFxcbmAgK1xuICAgICAgYCAgICR7Z2l0aHViSXNzdWVVcmx9XFxuXFxuYCArXG4gICAgICBgMi4gUmV2aWV3IHRoZSBwcmUtZmlsbGVkIGNvbnRlbnRcXG5gICtcbiAgICAgIGAzLiBDbGljayBcIlN1Ym1pdCBuZXcgaXNzdWVcIlxcbmAgK1xuICAgICAgYDQuIFRoZSBtYWludGFpbmVycyB3aWxsIHJldmlldyB5b3VyIHN1Ym1pc3Npb25cXG5cXG5gICtcbiAgICAgIGDirZAgKipUaXA6KiogWW91IGNhbiBhbHNvIHN1Ym1pdCB2aWEgcHVsbCByZXF1ZXN0IGlmIHlvdSdyZSBmYW1pbGlhciB3aXRoIEdpdCFgO1xuICB9XG59Il19
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYVN1Ym1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL1BlcnNvbmFTdWJtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFHSCxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSwwQkFBMEI7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxtQ0FBbUM7QUFDbEUsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUM7QUFDN0MsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUM7QUFFMUMsNkJBQTZCO0FBQzdCLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsZUFBZSxFQUFFLElBQUk7SUFDckIsWUFBWSxFQUFFLElBQUk7SUFDbEIsUUFBUSxFQUFFLEdBQUc7SUFDYixZQUFZLEVBQUUsSUFBSTtDQUNWLENBQUM7QUFFWCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLFdBQVcsQ0FBYztJQUVqQztRQUNFLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQ2pDLFdBQVcsRUFBRSxDQUFDO1lBQ2QsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVM7WUFDbkMsVUFBVSxFQUFFLEtBQUssQ0FBQyx5Q0FBeUM7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLE9BQWdCO1FBTXRDLG1CQUFtQjtRQUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXRELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsOEJBQThCO1lBQzlCLGVBQWUsQ0FBQyxnQkFBZ0Is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a0M7WUFDbEMsc0RBQXNEO1lBQ3RELG9EQUFvRDtZQUNwRCwrREFBK0Q7WUFDL0QsNkZBQTZGO1lBQzdGLHFGQUFxRixDQUFDO0lBQzFGLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QjtRQUM3QixPQUFPLDBCQUEwQjtZQUMvQixrREFBa0Q7WUFDbEQsNEVBQTRFO1lBQzVFLGdHQUFnRztZQUNoRyxnREFBZ0QsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1Ym1pdCBwZXJzb25hcyB0byB0aGUgY29sbGVjdGlvblxuICogSGFuZGxlcyBib3RoIGF1dGhlbnRpY2F0ZWQgYW5kIGFub255bW91cyBzdWJtaXNzaW9uIHdvcmtmbG93c1xuICogXG4gKiBTZWN1cml0eSBGZWF0dXJlczpcbiAqIC0gUmF0ZSBsaW1pdGluZyB0byBwcmV2ZW50IHNwYW0gKDUgc3VibWlzc2lvbnMgcGVyIGhvdXIgcGVyIHNlc3Npb24pXG4gKiAtIFVSTCBsZW5ndGggdmFsaWRhdGlvbiBmb3IgR2l0SHViIGxpbWl0c1xuICogLSBObyBlbWFpbCBzdWJtaXNzaW9uIHBhdGh3YXkgKEdpdEh1YiBhY2NvdW50IHJlcXVpcmVkKVxuICovXG5cbmltcG9ydCB7IFBlcnNvbmEgfSBmcm9tICcuLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IFJhdGVMaW1pdGVyLCBSYXRlTGltaXRTdGF0dXMgfSBmcm9tICcuLi91cGRhdGUvUmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuLy8gQ29uZmlndXJhdGlvbiBjb25zdGFudHNcbmNvbnN0IEdJVEhVQl9VUkxfTElNSVQgPSA4MTkyOyAvLyBHaXRIdWIncyBVUkwgbGVuZ3RoIGxpbWl0ICh+OEtCKVxuY29uc3QgQ09MTEVDVElPTl9SRVBPX09XTkVSID0gJ0RvbGxob3VzZU1DUCc7XG5jb25zdCBDT0xMRUNUSU9OX1JFUE9fTkFNRSA9ICdjb2xsZWN0aW9uJztcblxuLy8gQ29tbW9uIHJlc3BvbnNlIGNvbXBvbmVudHNcbmNvbnN0IFJFU1BPTlNFX0NPTVBPTkVOVFMgPSB7XG4gIFNVQk1JU1NJT05fSUNPTjogJ/Cfk6QnLFxuICBQRVJTT05BX0lDT046ICfwn46tJyxcbiAgVElQX0lDT046ICfirZAnLFxuICBQUk9fVElQX0lDT046ICfwn5KhJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFTdWJtaXR0ZXIge1xuICBwcml2YXRlIHJhdGVMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEluaXRpYWxpemUgcmF0ZSBsaW1pdGVyOiA1IHN1Ym1pc3Npb25zIHBlciBob3VyXG4gICAgdGhpcy5yYXRlTGltaXRlciA9IG5ldyBSYXRlTGltaXRlcih7XG4gICAgICBtYXhSZXF1ZXN0czogNSxcbiAgICAgIHdpbmRvd01zOiA2MCAqIDYwICogMTAwMCwgLy8gMSBob3VyXG4gICAgICBtaW5EZWxheU1zOiAxMDAwMCAvLyBNaW5pbXVtIDEwIHNlY29uZHMgYmV0d2VlbiBzdWJtaXNzaW9uc1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBHaXRIdWIgaXNzdWUgZm9yIHBlcnNvbmEgc3VibWlzc2lvblxuICAgKiBJbmNsdWRlcyBVUkwgbGVuZ3RoIHZhbGlkYXRpb24gdG8gY29tcGx5IHdpdGggR2l0SHViJ3MgfjhLQiBsaW1pdFxuICAgKi9cbiAgZ2VuZXJhdGVTdWJtaXNzaW9uSXNzdWUocGVyc29uYTogUGVyc29uYSk6IHsgXG4gICAgaXNzdWVUaXRsZTogc3RyaW5nOyBcbiAgICBpc3N1ZUJvZHk6IHN0cmluZzsgXG4gICAgZ2l0aHViSXNzdWVVcmw6IHN0cmluZztcbiAgICByYXRlTGltaXRTdGF0dXM/OiBSYXRlTGltaXRTdGF0dXM7XG4gIH0ge1xuICAgIC8vIENoZWNrIHJhdGUgbGltaXRcbiAgICBjb25zdCByYXRlTGltaXRTdGF0dXMgPSB0aGlzLnJhdGVMaW1pdGVyLmNoZWNrTGltaXQoKTtcbiAgICBcbiAgICBpZiAoIXJhdGVMaW1pdFN0YXR1cy5hbGxvd2VkKSB7XG4gICAgICAvLyBMb2cgcG90ZW50aWFsIGFidXNlIGF0dGVtcHRcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1BlcnNvbmFTdWJtaXR0ZXIuZ2VuZXJhdGVTdWJtaXNzaW9uSXNzdWUnLFxuICAgICAgICBkZXRhaWxzOiBgU3VibWlzc2lvbiByYXRlIGxpbWl0IGV4Y2VlZGVkLiBSZXRyeSBhZnRlciAke3JhdGVMaW1pdFN0YXR1cy5yZXRyeUFmdGVyTXN9bXNgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3VibWlzc2lvbiByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2Ugd2FpdCAke01hdGguY2VpbChyYXRlTGltaXRTdGF0dXMucmV0cnlBZnRlck1zISAvIDEwMDApfSBzZWNvbmRzIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLiBgICtcbiAgICAgICAgYFRoaXMgbGltaXQgaGVscHMgcHJldmVudCBzcGFtIGFuZCBlbnN1cmVzIHF1YWxpdHkgc3VibWlzc2lvbnMuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaXNzdWVUaXRsZSA9IGBOZXcgUGVyc29uYSBTdWJtaXNzaW9uOiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX1gO1xuICAgIGxldCBpc3N1ZUJvZHkgPSB0aGlzLmJ1aWxkSXNzdWVCb2R5KHBlcnNvbmEpO1xuICAgIFxuICAgIC8vIENoZWNrIFVSTCBsZW5ndGggYW5kIHRydW5jYXRlIGlmIG5lY2Vzc2FyeVxuICAgIGxldCBnaXRodWJJc3N1ZVVybCA9IHRoaXMuYnVpbGRHaXRIdWJJc3N1ZVVybChpc3N1ZVRpdGxlLCBpc3N1ZUJvZHkpO1xuICAgIFxuICAgIC8vIElmIFVSTCBleGNlZWRzIEdpdEh1YidzIGxpbWl0LCB0cnVuY2F0ZSB0aGUgY29udGVudFxuICAgIGlmIChnaXRodWJJc3N1ZVVybC5sZW5ndGggPj0gR0lUSFVCX1VSTF9MSU1JVCkge1xuICAgICAgaXNzdWVCb2R5ID0gdGhpcy5idWlsZFRydW5jYXRlZElzc3VlQm9keShwZXJzb25hKTtcbiAgICAgIGdpdGh1Yklzc3VlVXJsID0gdGhpcy5idWlsZEdpdEh1Yklzc3VlVXJsKGlzc3VlVGl0bGUsIGlzc3VlQm9keSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpc3N1ZVRpdGxlLFxuICAgICAgaXNzdWVCb2R5LFxuICAgICAgZ2l0aHViSXNzdWVVcmwsXG4gICAgICByYXRlTGltaXRTdGF0dXNcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IHN1Ym1pc3Npb24gcmVzcG9uc2UgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnNcbiAgICovXG4gIGZvcm1hdFN1Ym1pc3Npb25SZXNwb25zZShwZXJzb25hOiBQZXJzb25hLCBnaXRodWJJc3N1ZVVybDogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5idWlsZFJlc3BvbnNlSGVhZGVyKFxuICAgICAgJ1BlcnNvbmEgU3VibWlzc2lvbiBQcmVwYXJlZCcsXG4gICAgICBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICAnaXMgcmVhZHkgZm9yIGNvbGxlY3Rpb24gc3VibWlzc2lvbiEnLFxuICAgICAgcGVyc29uYUluZGljYXRvclxuICAgICk7XG4gICAgXG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLmJ1aWxkU3RhbmRhcmRTdWJtaXNzaW9uU3RlcHMoZ2l0aHViSXNzdWVVcmwpO1xuICAgIGNvbnN0IHRpcCA9IGAke1JFU1BPTlNFX0NPTVBPTkVOVFMuVElQX0lDT059ICoqVGlwOioqIFlvdSBjYW4gYWxzbyBzdWJtaXQgdmlhIHB1bGwgcmVxdWVzdCBpZiB5b3UncmUgZmFtaWxpYXIgd2l0aCBHaXQhYDtcbiAgICBcbiAgICByZXR1cm4gYCR7aGVhZGVyfVxcblxcbiR7c3RlcHN9XFxuXFxuJHt0aXB9YDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBhbm9ueW1vdXMgc3VibWlzc2lvbiByZXNwb25zZSBmb3IgdW5hdXRoZW50aWNhdGVkIHVzZXJzXG4gICAqL1xuICBmb3JtYXRBbm9ueW1vdXNTdWJtaXNzaW9uUmVzcG9uc2UocGVyc29uYTogUGVyc29uYSwgZ2l0aHViSXNzdWVVcmw6IHN0cmluZywgcGVyc29uYUluZGljYXRvcjogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuYnVpbGRSZXNwb25zZUhlYWRlcihcbiAgICAgICdBbm9ueW1vdXMgU3VibWlzc2lvbiBQYXRoIEF2YWlsYWJsZScsXG4gICAgICBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICAnY2FuIGJlIHN1Ym1pdHRlZCB3aXRob3V0IEdpdEh1YiBhdXRoZW50aWNhdGlvbiEnLFxuICAgICAgcGVyc29uYUluZGljYXRvclxuICAgICk7XG4gICAgXG4gICAgY29uc3QgcHJvY2VzcyA9IHRoaXMuYnVpbGRBbm9ueW1vdXNTdWJtaXNzaW9uUHJvY2VzcyhnaXRodWJJc3N1ZVVybCk7XG4gICAgY29uc3QgbmV4dFN0ZXBzID0gdGhpcy5idWlsZEFub255bW91c05leHRTdGVwcygpO1xuICAgIGNvbnN0IHByb1RpcCA9IGAke1JFU1BPTlNFX0NPTVBPTkVOVFMuUFJPX1RJUF9JQ09OfSAqKlBybyB0aXA6KiogQ3JlYXRpbmcgYSBmcmVlIEdpdEh1YiBhY2NvdW50IHVubG9ja3MgYWRkaXRpb25hbCBmZWF0dXJlcywgYnV0IGl0J3MgY29tcGxldGVseSBvcHRpb25hbCBmb3Igc3VibWlzc2lvbnMhYDtcbiAgICBcbiAgICByZXR1cm4gYCR7aGVhZGVyfVxcblxcbiR7cHJvY2Vzc31cXG5cXG4ke25leHRTdGVwc31cXG5cXG4ke3Byb1RpcH1gO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kcyBmb3IgYnVpbGRpbmcgcmVzcG9uc2UgY29tcG9uZW50c1xuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZnVsbCBpc3N1ZSBib2R5IHdpdGggYWxsIHBlcnNvbmEgZGV0YWlsc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZElzc3VlQm9keShwZXJzb25hOiBQZXJzb25hKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCMjIFBlcnNvbmEgU3VibWlzc2lvblxcblxcbmAgK1xuICAgICAgYCoqTmFtZToqKiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX1cXG5gICtcbiAgICAgIGAqKkF1dGhvcjoqKiAke3BlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31cXG5gICtcbiAgICAgIGAqKkNhdGVnb3J5OioqICR7cGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeSB8fCAnR2VuZXJhbCd9XFxuYCArXG4gICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYCArXG4gICAgICBgIyMjIFBlcnNvbmEgQ29udGVudDpcXG5gICtcbiAgICAgIGBcXGBcXGBcXGBtYXJrZG93blxcbmAgK1xuICAgICAgYC0tLVxcbmAgK1xuICAgICAgYCR7dGhpcy5zZXJpYWxpemVNZXRhZGF0YShwZXJzb25hLm1ldGFkYXRhKX1cXG5gICtcbiAgICAgIGAtLS1cXG5cXG5gICtcbiAgICAgIGAke3BlcnNvbmEuY29udGVudH1cXG5gICtcbiAgICAgIGBcXGBcXGBcXGBcXG5cXG5gICtcbiAgICAgIGAjIyMgU3VibWlzc2lvbiBEZXRhaWxzOlxcbmAgK1xuICAgICAgYC0gU3VibWl0dGVkIHZpYSBEb2xsaG91c2VNQ1AgY2xpZW50XFxuYCArXG4gICAgICBgLSBGaWxlbmFtZTogJHtwZXJzb25hLmZpbGVuYW1lfVxcbmAgK1xuICAgICAgYC0gVW5pcXVlIElEOiAke3BlcnNvbmEudW5pcXVlX2lkfVxcblxcbmAgK1xuICAgICAgYC0tLVxcbmAgK1xuICAgICAgYCpQbGVhc2UgcmV2aWV3IHRoaXMgcGVyc29uYSBmb3IgaW5jbHVzaW9uIGluIHRoZSBjb2xsZWN0aW9uLipgO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgdHJ1bmNhdGVkIGlzc3VlIGJvZHkgdG8gZml0IHdpdGhpbiBVUkwgbGltaXRzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVHJ1bmNhdGVkSXNzdWVCb2R5KHBlcnNvbmE6IFBlcnNvbmEpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRydW5jYXRlZENvbnRlbnQgPSBwZXJzb25hLmNvbnRlbnQubGVuZ3RoID4gNTAwIFxuICAgICAgPyBgJHtwZXJzb25hLmNvbnRlbnQuc3Vic3RyaW5nKDAsIDUwMCl9Li4uXFxuXFxuW0NvbnRlbnQgdHJ1bmNhdGVkIGR1ZSB0byBsZW5ndGhdYFxuICAgICAgOiBwZXJzb25hLmNvbnRlbnQ7XG4gICAgXG4gICAgcmV0dXJuIGAjIyBQZXJzb25hIFN1Ym1pc3Npb25cXG5cXG5gICtcbiAgICAgIGAqKk5hbWU6KiogJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9XFxuYCArXG4gICAgICBgKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCArXG4gICAgICBgKipDYXRlZ29yeToqKiAke3BlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ0dlbmVyYWwnfVxcbmAgK1xuICAgICAgYCoqRGVzY3JpcHRpb246KiogJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbmAgK1xuICAgICAgYCMjIyBQZXJzb25hIENvbnRlbnQgKFRydW5jYXRlZCk6XFxuYCArXG4gICAgICBgXFxgXFxgXFxgbWFya2Rvd25cXG5gICtcbiAgICAgIGAtLS1cXG5gICtcbiAgICAgIGAke3RoaXMuc2VyaWFsaXplTWV0YWRhdGEocGVyc29uYS5tZXRhZGF0YSl9XFxuYCArXG4gICAgICBgLS0tXFxuXFxuYCArXG4gICAgICBgJHt0cnVuY2F0ZWRDb250ZW50fVxcbmAgK1xuICAgICAgYFxcYFxcYFxcYFxcblxcbmAgK1xuICAgICAgYCMjIyBTdWJtaXNzaW9uIERldGFpbHM6XFxuYCArXG4gICAgICBgLSBTdWJtaXR0ZWQgdmlhIERvbGxob3VzZU1DUCBjbGllbnRcXG5gICtcbiAgICAgIGAtIEZpbGVuYW1lOiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICBgLSBVbmlxdWUgSUQ6ICR7cGVyc29uYS51bmlxdWVfaWR9XFxuXFxuYCArXG4gICAgICBgLS0tXFxuYCArXG4gICAgICBgKlBsZWFzZSByZXZpZXcgdGhpcyBwZXJzb25hIGZvciBpbmNsdXNpb24gaW4gdGhlIGNvbGxlY3Rpb24uKmA7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHBlcnNvbmEgbWV0YWRhdGEgdG8gWUFNTCBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgc2VyaWFsaXplTWV0YWRhdGEobWV0YWRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke0FycmF5LmlzQXJyYXkodmFsdWUpID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpfWApXG4gICAgICAuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIEdpdEh1YiBpc3N1ZSBVUkxcbiAgICovXG4gIHByaXZhdGUgYnVpbGRHaXRIdWJJc3N1ZVVybCh0aXRsZTogc3RyaW5nLCBib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7Q09MTEVDVElPTl9SRVBPX09XTkVSfS8ke0NPTExFQ1RJT05fUkVQT19OQU1FfS9pc3N1ZXMvbmV3P3RpdGxlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRpdGxlKX0mYm9keT0ke2VuY29kZVVSSUNvbXBvbmVudChib2R5KX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNvbW1vbiByZXNwb25zZSBoZWFkZXIgdXNlZCBieSBib3RoIGF1dGhlbnRpY2F0ZWQgYW5kIGFub255bW91cyByZXNwb25zZXNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRSZXNwb25zZUhlYWRlcih0aXRsZTogc3RyaW5nLCBwZXJzb25hTmFtZTogc3RyaW5nLCBzdWJ0aXRsZTogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwZXJzb25hSW5kaWNhdG9yfSR7UkVTUE9OU0VfQ09NUE9ORU5UUy5TVUJNSVNTSU9OX0lDT059ICoqJHt0aXRsZX0qKlxcblxcbmAgK1xuICAgICAgYCR7UkVTUE9OU0VfQ09NUE9ORU5UUy5QRVJTT05BX0lDT059ICoqJHtwZXJzb25hTmFtZX0qKiAke3N1YnRpdGxlfWA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgc3RhbmRhcmQgc3VibWlzc2lvbiBzdGVwcyBmb3IgYXV0aGVudGljYXRlZCB1c2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFN0YW5kYXJkU3VibWlzc2lvblN0ZXBzKGdpdGh1Yklzc3VlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgKipOZXh0IFN0ZXBzOioqXFxuYCArXG4gICAgICBgMS4gQ2xpY2sgdGhpcyBsaW5rIHRvIGNyZWF0ZSBhIEdpdEh1YiBpc3N1ZTogXFxuYCArXG4gICAgICBgICAgJHtnaXRodWJJc3N1ZVVybH1cXG5cXG5gICtcbiAgICAgIGAyLiBSZXZpZXcgdGhlIHByZS1maWxsZWQgY29udGVudFxcbmAgK1xuICAgICAgYDMuIENsaWNrIFwiU3VibWl0IG5ldyBpc3N1ZVwiXFxuYCArXG4gICAgICBgNC4gVGhlIG1haW50YWluZXJzIHdpbGwgcmV2aWV3IHlvdXIgc3VibWlzc2lvbmA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5vbnltb3VzIHN1Ym1pc3Npb24gcHJvY2VzcyBpbnN0cnVjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRBbm9ueW1vdXNTdWJtaXNzaW9uUHJvY2VzcyhnaXRodWJJc3N1ZVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCoqQW5vbnltb3VzIFN1Ym1pc3Npb24gUHJvY2VzczoqKlxcbmAgK1xuICAgICAgYDEuIENsaWNrIHRoaXMgbGluayB0byBjcmVhdGUgYSBHaXRIdWIgaXNzdWU6XFxuYCArXG4gICAgICBgICAgJHtnaXRodWJJc3N1ZVVybH1cXG5cXG5gICtcbiAgICAgIGAyLiAqKlRvIHN1Ym1pdCB5b3VyIHBlcnNvbmE6KipcXG5gICtcbiAgICAgIGAgICDigKIgWW91J2xsIG5lZWQgYSBHaXRIdWIgYWNjb3VudCAoZnJlZSB0byBjcmVhdGUpXFxuYCArXG4gICAgICBgICAg4oCiIENsaWNrIFwiU3VibWl0IG5ldyBpc3N1ZVwiIHRvIHN1Ym1pdCBkaXJlY3RseVxcbmAgK1xuICAgICAgYCAgIOKAoiBUaGUgZm9ybSBpcyBwcmUtZmlsbGVkIHdpdGggYWxsIHlvdXIgcGVyc29uYSBkZXRhaWxzXFxuXFxuYCArXG4gICAgICBgKipOb3RlOioqIEdpdEh1YiBhY2NvdW50IGlzIHJlcXVpcmVkIGZvciBzdWJtaXNzaW9uIHRvIHByZXZlbnQgc3BhbSBhbmQgbWFpbnRhaW4gcXVhbGl0eS5cXG5gICtcbiAgICAgIGBDcmVhdGluZyBhbiBhY2NvdW50IGlzIGZyZWUgYW5kIHRha2VzIGxlc3MgdGhhbiBhIG1pbnV0ZTogaHR0cHM6Ly9naXRodWIuY29tL3NpZ251cGA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5vbnltb3VzIHN1Ym1pc3Npb24gbmV4dCBzdGVwcyBhbmQgZXhwZWN0YXRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQW5vbnltb3VzTmV4dFN0ZXBzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAqKldoYXQgaGFwcGVucyBuZXh0OioqXFxuYCArXG4gICAgICBg4oCiIENvbW11bml0eSBtYWludGFpbmVycyByZXZpZXcgYWxsIHN1Ym1pc3Npb25zXFxuYCArXG4gICAgICBg4oCiIEFub255bW91cyBzdWJtaXNzaW9ucyBnZXQgdGhlIHNhbWUgY29uc2lkZXJhdGlvbiBhcyBhdXRoZW50aWNhdGVkIG9uZXNcXG5gICtcbiAgICAgIGDigKIgSWYgYWNjZXB0ZWQsIHlvdXIgcGVyc29uYSBqb2lucyB0aGUgY29sbGVjdGlvbiB3aXRoIGF0dHJpYnV0aW9uIHRvIFwiQ29tbXVuaXR5IENvbnRyaWJ1dG9yXCJcXG5gICtcbiAgICAgIGDigKIgVGhlIHJldmlldyB0eXBpY2FsbHkgdGFrZXMgMi0zIGJ1c2luZXNzIGRheXNgO1xuICB9XG59Il19
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export * from './GitHubClient.js';
|
|
5
5
|
export * from './CollectionBrowser.js';
|
|
6
6
|
export * from './CollectionSearch.js';
|
|
7
|
+
export * from './CollectionSeeder.js';
|
|
7
8
|
export * from './PersonaDetails.js';
|
|
8
9
|
export * from './ElementInstaller.js';
|
|
9
10
|
export * from './PersonaSubmitter.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
package/dist/collection/index.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
export * from './GitHubClient.js';
|
|
5
5
|
export * from './CollectionBrowser.js';
|
|
6
6
|
export * from './CollectionSearch.js';
|
|
7
|
+
export * from './CollectionSeeder.js';
|
|
7
8
|
export * from './PersonaDetails.js';
|
|
8
9
|
export * from './ElementInstaller.js';
|
|
9
10
|
export * from './PersonaSubmitter.js';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3Rpb24gbW9kdWxlIGV4cG9ydHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25Ccm93c2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblNlYXJjaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25TZWVkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hRGV0YWlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0VsZW1lbnRJbnN0YWxsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hU3VibWl0dGVyLmpzJzsiXX0=
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export declare const PACKAGE_VERSION = "1.5.
|
|
6
|
-
export declare const BUILD_TIMESTAMP = "2025-08-
|
|
5
|
+
export declare const PACKAGE_VERSION = "1.5.2";
|
|
6
|
+
export declare const BUILD_TIMESTAMP = "2025-08-06T20:36:22.499Z";
|
|
7
7
|
export declare const BUILD_TYPE: 'npm' | 'git';
|
|
8
8
|
export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
|
|
9
9
|
//# sourceMappingURL=version.d.ts.map
|