@dollhousemcp/mcp-server 1.4.5 → 1.5.0
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 +31 -0
- package/README.md +68 -7
- package/dist/auth/GitHubAuthManager.d.ts +93 -0
- package/dist/auth/GitHubAuthManager.d.ts.map +1 -0
- package/dist/auth/GitHubAuthManager.js +465 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +222 -30
- package/dist/security/tokenManager.d.ts +34 -0
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +199 -1
- package/dist/server/ServerSetup.d.ts.map +1 -1
- package/dist/server/ServerSetup.js +4 -1
- package/dist/server/tools/AuthTools.d.ts +10 -0
- package/dist/server/tools/AuthTools.d.ts.map +1 -0
- package/dist/server/tools/AuthTools.js +41 -0
- package/dist/server/types.d.ts +3 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub authentication manager using OAuth device flow
|
|
3
|
+
* Handles authentication for MCP servers without requiring client secrets
|
|
4
|
+
*/
|
|
5
|
+
import { TokenManager } from '../security/tokenManager.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { UnicodeValidator } from '../security/validators/unicodeValidator.js';
|
|
8
|
+
import { SecurityMonitor } from '../security/securityMonitor.js';
|
|
9
|
+
/**
|
|
10
|
+
* Manages GitHub authentication using the OAuth device flow
|
|
11
|
+
* This is the recommended approach for CLI/desktop applications
|
|
12
|
+
*/
|
|
13
|
+
export class GitHubAuthManager {
|
|
14
|
+
// GitHub OAuth App Client ID for DollhouseMCP
|
|
15
|
+
// Must be configured via environment variable
|
|
16
|
+
static CLIENT_ID = process.env.DOLLHOUSE_GITHUB_CLIENT_ID;
|
|
17
|
+
// GitHub OAuth endpoints
|
|
18
|
+
static DEVICE_CODE_URL = 'https://github.com/login/device/code';
|
|
19
|
+
static TOKEN_URL = 'https://github.com/login/oauth/access_token';
|
|
20
|
+
static USER_URL = 'https://api.github.com/user';
|
|
21
|
+
// Polling configuration
|
|
22
|
+
static DEFAULT_POLL_INTERVAL = 5000; // 5 seconds
|
|
23
|
+
static MAX_POLL_ATTEMPTS = 180; // 15 minutes total
|
|
24
|
+
apiCache;
|
|
25
|
+
activePolling = null;
|
|
26
|
+
constructor(apiCache) {
|
|
27
|
+
this.apiCache = apiCache;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Execute a network request with retry logic
|
|
31
|
+
*/
|
|
32
|
+
async fetchWithRetry(url, options, maxRetries = 3, retryDelay = 1000) {
|
|
33
|
+
let lastError = null;
|
|
34
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(url, options);
|
|
37
|
+
return response;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
lastError = error;
|
|
41
|
+
// Check if it's a network error that should be retried
|
|
42
|
+
const isNetworkError = error instanceof Error && (error.message.includes('ECONNREFUSED') ||
|
|
43
|
+
error.message.includes('ETIMEDOUT') ||
|
|
44
|
+
error.message.includes('ENOTFOUND') ||
|
|
45
|
+
error.message.includes('network'));
|
|
46
|
+
if (isNetworkError && attempt < maxRetries) {
|
|
47
|
+
logger.debug(`Network request failed, retrying (${attempt}/${maxRetries})`, {
|
|
48
|
+
url,
|
|
49
|
+
error: error.message,
|
|
50
|
+
nextRetryIn: retryDelay * attempt
|
|
51
|
+
});
|
|
52
|
+
// Exponential backoff
|
|
53
|
+
await new Promise(resolve => setTimeout(resolve, retryDelay * attempt));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Not a network error or last attempt, throw immediately
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
throw lastError || new Error('Network request failed after all retries');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check current authentication status
|
|
65
|
+
*/
|
|
66
|
+
async getAuthStatus() {
|
|
67
|
+
const token = await TokenManager.getGitHubTokenAsync();
|
|
68
|
+
if (!token) {
|
|
69
|
+
return {
|
|
70
|
+
isAuthenticated: false,
|
|
71
|
+
hasToken: false
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
// Try to get user info to validate token
|
|
76
|
+
const userInfo = await this.fetchUserInfo(token);
|
|
77
|
+
return {
|
|
78
|
+
isAuthenticated: true,
|
|
79
|
+
hasToken: true,
|
|
80
|
+
username: userInfo.login,
|
|
81
|
+
scopes: userInfo.scopes
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// Token might be invalid or expired
|
|
86
|
+
logger.debug('Token validation failed', { error });
|
|
87
|
+
return {
|
|
88
|
+
isAuthenticated: false,
|
|
89
|
+
hasToken: true // Has token but it's invalid
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Initiate the device flow authentication process
|
|
95
|
+
*/
|
|
96
|
+
async initiateDeviceFlow() {
|
|
97
|
+
if (!GitHubAuthManager.CLIENT_ID) {
|
|
98
|
+
throw new Error('GitHub OAuth is not configured. Please set DOLLHOUSE_GITHUB_CLIENT_ID environment variable. ' +
|
|
99
|
+
'Register an OAuth app at https://github.com/settings/applications/new');
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const response = await this.fetchWithRetry(GitHubAuthManager.DEVICE_CODE_URL, {
|
|
103
|
+
method: 'POST',
|
|
104
|
+
headers: {
|
|
105
|
+
'Accept': 'application/json',
|
|
106
|
+
'Content-Type': 'application/json'
|
|
107
|
+
},
|
|
108
|
+
body: JSON.stringify({
|
|
109
|
+
client_id: GitHubAuthManager.CLIENT_ID,
|
|
110
|
+
scope: 'public_repo read:user'
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
if (!response.ok) {
|
|
114
|
+
// Provide user-friendly error messages based on status codes
|
|
115
|
+
const errorMessage = this.getErrorMessageForStatus(response.status, 'device flow initialization');
|
|
116
|
+
logger.debug('Device flow initiation failed', {
|
|
117
|
+
status: response.status,
|
|
118
|
+
statusText: response.statusText
|
|
119
|
+
});
|
|
120
|
+
throw new Error(errorMessage);
|
|
121
|
+
}
|
|
122
|
+
const data = await response.json();
|
|
123
|
+
// Validate response
|
|
124
|
+
if (!data.device_code || !data.user_code || !data.verification_uri) {
|
|
125
|
+
throw new Error('Invalid device flow response from GitHub');
|
|
126
|
+
}
|
|
127
|
+
// Log security event for audit trail
|
|
128
|
+
SecurityMonitor.logSecurityEvent({
|
|
129
|
+
type: 'TOKEN_VALIDATION_SUCCESS',
|
|
130
|
+
severity: 'LOW',
|
|
131
|
+
source: 'GitHubAuthManager.initiateDeviceFlow',
|
|
132
|
+
details: 'GitHub OAuth device flow initiated',
|
|
133
|
+
metadata: {
|
|
134
|
+
userCode: data.user_code,
|
|
135
|
+
expiresIn: data.expires_in,
|
|
136
|
+
interval: data.interval
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return data;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
logger.error('Failed to initiate device flow', { error });
|
|
143
|
+
throw new Error('Failed to start GitHub authentication. Please check your internet connection.');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Poll for token after user has authorized the device
|
|
148
|
+
*/
|
|
149
|
+
async pollForToken(deviceCode, interval = GitHubAuthManager.DEFAULT_POLL_INTERVAL) {
|
|
150
|
+
// Create new abort controller for this polling session
|
|
151
|
+
this.activePolling = new AbortController();
|
|
152
|
+
const signal = this.activePolling.signal;
|
|
153
|
+
let attempts = 0;
|
|
154
|
+
try {
|
|
155
|
+
while (attempts < GitHubAuthManager.MAX_POLL_ATTEMPTS) {
|
|
156
|
+
// Check if polling was aborted
|
|
157
|
+
if (signal.aborted) {
|
|
158
|
+
throw new Error('Authentication polling was cancelled');
|
|
159
|
+
}
|
|
160
|
+
attempts++;
|
|
161
|
+
try {
|
|
162
|
+
const response = await fetch(GitHubAuthManager.TOKEN_URL, {
|
|
163
|
+
method: 'POST',
|
|
164
|
+
headers: {
|
|
165
|
+
'Accept': 'application/json',
|
|
166
|
+
'Content-Type': 'application/json'
|
|
167
|
+
},
|
|
168
|
+
body: JSON.stringify({
|
|
169
|
+
client_id: GitHubAuthManager.CLIENT_ID,
|
|
170
|
+
device_code: deviceCode,
|
|
171
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code'
|
|
172
|
+
})
|
|
173
|
+
});
|
|
174
|
+
const data = await response.json();
|
|
175
|
+
// Check for various response states
|
|
176
|
+
if (data.error) {
|
|
177
|
+
switch (data.error) {
|
|
178
|
+
case 'authorization_pending':
|
|
179
|
+
// User hasn't authorized yet, keep polling
|
|
180
|
+
break;
|
|
181
|
+
case 'slow_down':
|
|
182
|
+
// Increase polling interval
|
|
183
|
+
interval = Math.min(interval * 1.5, 30000); // Max 30 seconds
|
|
184
|
+
logger.debug('Slowing down polling interval', { newInterval: interval });
|
|
185
|
+
break;
|
|
186
|
+
case 'expired_token':
|
|
187
|
+
throw new Error('The authorization code has expired. Please start over.');
|
|
188
|
+
case 'access_denied':
|
|
189
|
+
throw new Error('Authorization was denied. Please try again.');
|
|
190
|
+
default:
|
|
191
|
+
// Log the actual error for debugging
|
|
192
|
+
logger.debug('OAuth device flow error', {
|
|
193
|
+
error: data.error,
|
|
194
|
+
description: data.error_description
|
|
195
|
+
});
|
|
196
|
+
throw new Error('Authentication failed. Please try starting the process again.');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (data.access_token) {
|
|
200
|
+
// Success!
|
|
201
|
+
return data;
|
|
202
|
+
}
|
|
203
|
+
// Wait before next poll
|
|
204
|
+
// Wait for interval with abort support
|
|
205
|
+
await this.waitWithAbort(interval, signal);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
// Network errors shouldn't stop polling
|
|
209
|
+
logger.debug('Poll attempt failed', { attempt: attempts, error });
|
|
210
|
+
await this.waitWithAbort(interval, signal);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
throw new Error('Authentication timed out. Please try again.');
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
// Clear active polling reference
|
|
217
|
+
this.activePolling = null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Complete the authentication flow and store the token
|
|
222
|
+
*/
|
|
223
|
+
async completeAuthentication(tokenResponse) {
|
|
224
|
+
// Store token securely
|
|
225
|
+
await this.storeToken(tokenResponse.access_token);
|
|
226
|
+
// Get user info
|
|
227
|
+
const userInfo = await this.fetchUserInfo(tokenResponse.access_token);
|
|
228
|
+
// Log successful authentication completion
|
|
229
|
+
SecurityMonitor.logSecurityEvent({
|
|
230
|
+
type: 'TOKEN_VALIDATION_SUCCESS',
|
|
231
|
+
severity: 'LOW',
|
|
232
|
+
source: 'GitHubAuthManager.completeAuthentication',
|
|
233
|
+
details: 'GitHub OAuth device flow completed successfully',
|
|
234
|
+
metadata: {
|
|
235
|
+
username: userInfo.login,
|
|
236
|
+
scopes: tokenResponse.scope.split(' '),
|
|
237
|
+
tokenType: TokenManager.getTokenType(tokenResponse.access_token)
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
return {
|
|
241
|
+
isAuthenticated: true,
|
|
242
|
+
hasToken: true,
|
|
243
|
+
username: userInfo.login,
|
|
244
|
+
scopes: tokenResponse.scope.split(' ')
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Clear stored authentication and revoke token
|
|
249
|
+
*/
|
|
250
|
+
async clearAuthentication() {
|
|
251
|
+
try {
|
|
252
|
+
// Get the token before clearing it
|
|
253
|
+
const token = await TokenManager.getGitHubTokenAsync();
|
|
254
|
+
if (token) {
|
|
255
|
+
// Attempt to revoke the token on GitHub
|
|
256
|
+
// Note: GitHub OAuth tokens don't have a revocation endpoint for device flow tokens
|
|
257
|
+
// But we'll clear the cache and remove from storage
|
|
258
|
+
// Clear cached user info
|
|
259
|
+
this.apiCache.clear();
|
|
260
|
+
// Log security event for audit trail
|
|
261
|
+
SecurityMonitor.logSecurityEvent({
|
|
262
|
+
type: 'TOKEN_CACHE_CLEARED',
|
|
263
|
+
severity: 'LOW',
|
|
264
|
+
source: 'GitHubAuthManager.clearAuthentication',
|
|
265
|
+
details: 'GitHub authentication cleared by user request',
|
|
266
|
+
metadata: {
|
|
267
|
+
hadToken: true,
|
|
268
|
+
tokenPrefix: TokenManager.getTokenPrefix(token)
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
// Remove from secure storage
|
|
273
|
+
await TokenManager.removeStoredToken();
|
|
274
|
+
logger.info('GitHub authentication cleared successfully');
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
logger.error('Error clearing authentication', { error });
|
|
278
|
+
throw new Error('Failed to clear authentication');
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Store token securely using encrypted file storage
|
|
283
|
+
*/
|
|
284
|
+
async storeToken(token) {
|
|
285
|
+
try {
|
|
286
|
+
await TokenManager.storeGitHubToken(token);
|
|
287
|
+
logger.info('GitHub token stored securely. You are now authenticated!');
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
logger.error('Failed to store token securely', { error });
|
|
291
|
+
// Fallback to environment variable instructions
|
|
292
|
+
logger.info('For manual setup, you can set GITHUB_TOKEN environment variable.');
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Fetch user information from GitHub
|
|
298
|
+
*/
|
|
299
|
+
async fetchUserInfo(token) {
|
|
300
|
+
// Check cache first
|
|
301
|
+
const cached = this.apiCache.get(GitHubAuthManager.USER_URL);
|
|
302
|
+
if (cached) {
|
|
303
|
+
return cached;
|
|
304
|
+
}
|
|
305
|
+
const response = await this.fetchWithRetry(GitHubAuthManager.USER_URL, {
|
|
306
|
+
headers: {
|
|
307
|
+
'Authorization': `Bearer ${token}`,
|
|
308
|
+
'Accept': 'application/vnd.github.v3+json'
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
if (!response.ok) {
|
|
312
|
+
const errorMessage = this.getErrorMessageForStatus(response.status, 'user information fetch');
|
|
313
|
+
logger.debug('Failed to fetch user info', { status: response.status });
|
|
314
|
+
throw new Error(errorMessage);
|
|
315
|
+
}
|
|
316
|
+
const data = await response.json();
|
|
317
|
+
// Normalize username and other text fields to prevent Unicode attacks
|
|
318
|
+
if (data.login) {
|
|
319
|
+
const validation = UnicodeValidator.normalize(data.login);
|
|
320
|
+
if (!validation.isValid) {
|
|
321
|
+
SecurityMonitor.logSecurityEvent({
|
|
322
|
+
type: 'UNICODE_VALIDATION_ERROR',
|
|
323
|
+
severity: 'MEDIUM',
|
|
324
|
+
source: 'GitHubAuthManager.fetchUserInfo',
|
|
325
|
+
details: 'GitHub username contains invalid Unicode',
|
|
326
|
+
metadata: {
|
|
327
|
+
originalLength: data.login.length,
|
|
328
|
+
detectedIssues: validation.detectedIssues
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
throw new Error('Invalid username format from GitHub');
|
|
332
|
+
}
|
|
333
|
+
data.login = validation.normalizedContent;
|
|
334
|
+
}
|
|
335
|
+
// Normalize display name if present
|
|
336
|
+
if (data.name) {
|
|
337
|
+
const nameValidation = UnicodeValidator.normalize(data.name);
|
|
338
|
+
if (nameValidation.isValid) {
|
|
339
|
+
data.name = nameValidation.normalizedContent;
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
// Don't fail on display name, just remove it
|
|
343
|
+
delete data.name;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// Add scopes from response headers
|
|
347
|
+
const scopeHeader = response.headers.get('x-oauth-scopes');
|
|
348
|
+
if (scopeHeader) {
|
|
349
|
+
data.scopes = scopeHeader.split(',').map(s => s.trim());
|
|
350
|
+
}
|
|
351
|
+
// Log successful authentication for audit trail
|
|
352
|
+
SecurityMonitor.logSecurityEvent({
|
|
353
|
+
type: 'TOKEN_VALIDATION_SUCCESS',
|
|
354
|
+
severity: 'LOW',
|
|
355
|
+
source: 'GitHubAuthManager.fetchUserInfo',
|
|
356
|
+
details: 'GitHub user authenticated successfully',
|
|
357
|
+
metadata: {
|
|
358
|
+
username: data.login,
|
|
359
|
+
hasEmail: !!data.email,
|
|
360
|
+
scopes: data.scopes || []
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
// Cache the result
|
|
364
|
+
this.apiCache.set(GitHubAuthManager.USER_URL, data);
|
|
365
|
+
return data;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Format authentication instructions for users
|
|
369
|
+
*/
|
|
370
|
+
formatAuthInstructions(deviceResponse) {
|
|
371
|
+
return `🔐 **GitHub Authentication Required**
|
|
372
|
+
|
|
373
|
+
To access all DollhouseMCP features, please authenticate with GitHub:
|
|
374
|
+
|
|
375
|
+
1. Visit: **${deviceResponse.verification_uri}**
|
|
376
|
+
2. Enter code: **${deviceResponse.user_code}**
|
|
377
|
+
3. Authorize 'DollhouseMCP Collection'
|
|
378
|
+
|
|
379
|
+
This will grant access to:
|
|
380
|
+
✅ Browse the public collection
|
|
381
|
+
✅ Install community content
|
|
382
|
+
✅ Submit your own creations
|
|
383
|
+
|
|
384
|
+
Don't have a GitHub account? You'll be prompted to create one (it's free!)
|
|
385
|
+
|
|
386
|
+
⏱️ This code expires in ${Math.floor(deviceResponse.expires_in / 60)} minutes.`;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Check if user needs to authenticate for a specific action
|
|
390
|
+
*/
|
|
391
|
+
needsAuthForAction(action) {
|
|
392
|
+
const authRequiredActions = ['submit', 'create_pr', 'manage_content'];
|
|
393
|
+
return authRequiredActions.includes(action.toLowerCase());
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Wait with abort signal support
|
|
397
|
+
*/
|
|
398
|
+
async waitWithAbort(ms, signal) {
|
|
399
|
+
return new Promise((resolve, reject) => {
|
|
400
|
+
const timeout = setTimeout(resolve, ms);
|
|
401
|
+
// Listen for abort signal
|
|
402
|
+
const abortHandler = () => {
|
|
403
|
+
clearTimeout(timeout);
|
|
404
|
+
reject(new Error('Wait aborted'));
|
|
405
|
+
};
|
|
406
|
+
signal.addEventListener('abort', abortHandler, { once: true });
|
|
407
|
+
// Clean up after timeout
|
|
408
|
+
setTimeout(() => {
|
|
409
|
+
signal.removeEventListener('abort', abortHandler);
|
|
410
|
+
}, ms);
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Clean up any active operations (called on server shutdown)
|
|
415
|
+
*/
|
|
416
|
+
async cleanup() {
|
|
417
|
+
// Abort any active polling
|
|
418
|
+
if (this.activePolling) {
|
|
419
|
+
this.activePolling.abort();
|
|
420
|
+
this.activePolling = null;
|
|
421
|
+
SecurityMonitor.logSecurityEvent({
|
|
422
|
+
type: 'TOKEN_CACHE_CLEARED',
|
|
423
|
+
severity: 'LOW',
|
|
424
|
+
source: 'GitHubAuthManager.cleanup',
|
|
425
|
+
details: 'GitHub auth manager cleaned up on shutdown',
|
|
426
|
+
metadata: {
|
|
427
|
+
hadActivePolling: true
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
logger.info('GitHub authentication polling cancelled due to shutdown');
|
|
431
|
+
}
|
|
432
|
+
// Clear API cache
|
|
433
|
+
this.apiCache.clear();
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Get user-friendly error message based on HTTP status code
|
|
437
|
+
* Avoids exposing sensitive information while providing helpful guidance
|
|
438
|
+
*/
|
|
439
|
+
getErrorMessageForStatus(status, operation) {
|
|
440
|
+
switch (status) {
|
|
441
|
+
case 400:
|
|
442
|
+
return `Invalid request to GitHub. Please ensure the OAuth app is properly configured.`;
|
|
443
|
+
case 401:
|
|
444
|
+
return `Authentication failed. The OAuth app credentials may be invalid.`;
|
|
445
|
+
case 403:
|
|
446
|
+
return `Access denied by GitHub. The OAuth app may lack required permissions.`;
|
|
447
|
+
case 404:
|
|
448
|
+
return `GitHub service not found. This may indicate an API change.`;
|
|
449
|
+
case 422:
|
|
450
|
+
return `Invalid parameters sent to GitHub. Please check your configuration.`;
|
|
451
|
+
case 429:
|
|
452
|
+
return `Too many requests to GitHub. Please wait a moment and try again.`;
|
|
453
|
+
case 500:
|
|
454
|
+
case 502:
|
|
455
|
+
case 503:
|
|
456
|
+
case 504:
|
|
457
|
+
return `GitHub service temporarily unavailable. Please try again in a few moments.`;
|
|
458
|
+
default:
|
|
459
|
+
// Log the actual status for debugging, but don't expose it to users
|
|
460
|
+
logger.debug(`Unexpected status code during ${operation}`, { status });
|
|
461
|
+
return `Failed to complete ${operation}. Please check your internet connection and try again.`;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViQXV0aE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9HaXRIdWJBdXRoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQXdCakU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qiw4Q0FBOEM7SUFDOUMsOENBQThDO0lBQ3RDLE1BQU0sQ0FBVSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztJQUUzRSx5QkFBeUI7SUFDakIsTUFBTSxDQUFVLGVBQWUsR0FBRyxzQ0FBc0MsQ0FBQztJQUN6RSxNQUFNLENBQVUsU0FBUyxHQUFHLDZDQUE2QyxDQUFDO0lBQzFFLE1BQU0sQ0FBVSxRQUFRLEdBQUcsNkJBQTZCLENBQUM7SUFFakUsd0JBQXdCO0lBQ2hCLE1BQU0sQ0FBVSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZO0lBQzFELE1BQU0sQ0FBVSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxtQkFBbUI7SUFFNUQsUUFBUSxDQUFXO0lBQ25CLGFBQWEsR0FBMkIsSUFBSSxDQUFDO0lBRXJELFlBQVksUUFBa0I7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGNBQWMsQ0FDMUIsR0FBVyxFQUNYLE9BQW9CLEVBQ3BCLGFBQXFCLENBQUMsRUFDdEIsYUFBcUIsSUFBSTtRQUV6QixJQUFJLFNBQVMsR0FBaUIsSUFBSSxDQUFD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QUFPLEVBQUUsNENBQTRDO2dCQUNyRCxRQUFRLEVBQUU7b0JBQ1IsZ0JBQWdCLEVBQUUsSUFBSTtpQkFDdkI7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSyx3QkFBd0IsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7UUFDaEUsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssR0FBRztnQkFDTixPQUFPLGdGQUFnRixDQUFDO1lBQzFGLEtBQUssR0FBRztnQkFDTixPQUFPLGtFQUFrRSxDQUFDO1lBQzVFLEtBQUssR0FBRztnQkFDTixPQUFPLHVFQUF1RSxDQUFDO1lBQ2pGLEtBQUssR0FBRztnQkFDTixPQUFPLDREQUE0RCxDQUFDO1lBQ3RFLEtBQUssR0FBRztnQkFDTixPQUFPLHFFQUFxRSxDQUFDO1lBQy9FLEtBQUssR0FBRztnQkFDTixPQUFPLGtFQUFrRSxDQUFDO1lBQzVFLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRztnQkFDTixPQUFPLDRFQUE0RSxDQUFDO1lBQ3RGO2dCQUNFLG9FQUFvRTtnQkFDcEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxPQUFPLHNCQUFzQixTQUFTLHdEQUF3RCxDQUFDO1FBQ25HLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXRIdWIgYXV0aGVudGljYXRpb24gbWFuYWdlciB1c2luZyBPQXV0aCBkZXZpY2UgZmxvd1xuICogSGFuZGxlcyBhdXRoZW50aWNhdGlvbiBmb3IgTUNQIHNlcnZlcnMgd2l0aG91dCByZXF1aXJpbmcgY2xpZW50IHNlY3JldHNcbiAqL1xuXG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEFQSUNhY2hlIH0gZnJvbSAnLi4vY2FjaGUvQVBJQ2FjaGUuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUNvZGVSZXNwb25zZSB7XG4gIGRldmljZV9jb2RlOiBzdHJpbmc7XG4gIHVzZXJfY29kZTogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdXJpOiBzdHJpbmc7XG4gIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgaW50ZXJ2YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblJlc3BvbnNlIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIHRva2VuX3R5cGU6IHN0cmluZztcbiAgc2NvcGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoU3RhdHVzIHtcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICBoYXNUb2tlbjogYm9vbGVhbjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICBleHBpcmVzQXQ/OiBEYXRlO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgR2l0SHViIGF1dGhlbnRpY2F0aW9uIHVzaW5nIHRoZSBPQXV0aCBkZXZpY2UgZmxvd1xuICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggZm9yIENMSS9kZXNrdG9wIGFwcGxpY2F0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgR2l0SHViQXV0aE1hbmFnZXIge1xuICAvLyBHaXRIdWIgT0F1dGggQXBwIENsaWVudCBJRCBmb3IgRG9sbGhvdXNlTUNQXG4gIC8vIE11c3QgYmUgY29uZmlndXJlZCB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ0xJRU5UX0lEID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQ7XG4gIFxuICAvLyBHaXRIdWIgT0F1dGggZW5kcG9pbnRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFVklDRV9DT0RFX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vbG9naW4vZGV2aWNlL2NvZGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUT0tFTl9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL29hdXRoL2FjY2Vzc190b2tlbic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFVTRVJfVVJMID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcic7XG4gIFxuICAvLyBQb2xsaW5nIGNvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QT0xMX0lOVEVSVkFMID0gNTAwMDsgLy8gNSBzZWNvbmRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9QT0xMX0FUVEVNUFRTID0gMTgwOyAvLyAxNSBtaW51dGVzIHRvdGFsXG4gIFxuICBwcml2YXRlIGFwaUNhY2hlOiBBUElDYWNoZTtcbiAgcHJpdmF0ZSBhY3RpdmVQb2xsaW5nOiBBYm9ydENvbnRyb2xsZXIgfCBudWxsID0gbnVsbDtcbiAgXG4gIGNvbnN0cnVjdG9yKGFwaUNhY2hlOiBBUElDYWNoZSkge1xuICAgIHRoaXMuYXBpQ2FjaGUgPSBhcGlDYWNoZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBuZXR3b3JrIHJlcXVlc3Qgd2l0aCByZXRyeSBsb2dpY1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdpdGhSZXRyeShcbiAgICB1cmw6IHN0cmluZywgXG4gICAgb3B0aW9uczogUmVxdWVzdEluaXQsIFxuICAgIG1heFJldHJpZXM6IG51bWJlciA9IDMsXG4gICAgcmV0cnlEZWxheTogbnVtYmVyID0gMTAwMFxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbmV0d29yayBlcnJvciB0aGF0IHNob3VsZCBiZSByZXRyaWVkXG4gICAgICAgIGNvbnN0IGlzTmV0d29ya0Vycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAoXG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRUNPTk5SRUZVU0VEJykgfHxcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFVElNRURPVVQnKSB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VOT1RGT1VORCcpIHx8XG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmV0d29yaycpXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNOZXR3b3JrRXJyb3IgJiYgYXR0ZW1wdCA8IG1heFJldHJpZXMpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYE5ldHdvcmsgcmVxdWVzdCBmYWlsZWQsIHJldHJ5aW5nICgke2F0dGVtcHR9LyR7bWF4UmV0cmllc30pYCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBuZXh0UmV0cnlJbjogcmV0cnlEZWxheSAqIGF0dGVtcHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJldHJ5RGVsYXkgKiBhdHRlbXB0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm90IGEgbmV0d29yayBlcnJvciBvciBsYXN0IGF0dGVtcHQsIHRocm93IGltbWVkaWF0ZWx5XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCBhZnRlciBhbGwgcmV0cmllcycpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgY3VycmVudCBhdXRoZW50aWNhdGlvbiBzdGF0dXNcbiAgICovXG4gIGFzeW5jIGdldEF1dGhTdGF0dXMoKTogUHJvbWlzZTxBdXRoU3RhdHVzPiB7XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgIFxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgIGhhc1Rva2VuOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBnZXQgdXNlciBpbmZvIHRvIHZhbGlkYXRlIHRva2VuXG4gICAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuZmV0Y2hVc2VySW5mbyh0b2tlbik7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgICAgaGFzVG9rZW46IHRydWUsXG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mby5sb2dpbixcbiAgICAgICAgc2NvcGVzOiB1c2VySW5mby5zY29wZXNcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFRva2VuIG1pZ2h0IGJlIGludmFsaWQgb3IgZXhwaXJlZFxuICAgICAgbG9nZ2VyLmRlYnVnKCdUb2tlbiB2YWxpZGF0aW9uIGZhaWxlZCcsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBoYXNUb2tlbjogdHJ1ZSAvLyBIYXMgdG9rZW4gYnV0IGl0J3MgaW52YWxpZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWF0ZSB0aGUgZGV2aWNlIGZsb3cgYXV0aGVudGljYXRpb24gcHJvY2Vzc1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhdGVEZXZpY2VGbG93KCk6IFByb21pc2U8RGV2aWNlQ29kZVJlc3BvbnNlPiB7XG4gICAgaWYgKCFHaXRIdWJBdXRoTWFuYWdlci5DTElFTlRfSUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0dpdEh1YiBPQXV0aCBpcyBub3QgY29uZmlndXJlZC4gUGxlYXNlIHNldCBET0xMSE9VU0VfR0lUSFVCX0NMSUVOVF9JRCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gJyArXG4gICAgICAgICdSZWdpc3RlciBhbiBPQXV0aCBhcHAgYXQgaHR0cHM6Ly9naXRodWIuY29tL3NldHRpbmdzL2FwcGxpY2F0aW9ucy9uZXcnXG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KEdpdEh1YkF1dGhNYW5hZ2VyLkRFVklDRV9DT0RFX1VSTCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgY2xpZW50X2lkOiBHaXRIdWJBdXRoTWFuYWdlci5DTElFTlRfSUQsXG4gICAgICAgICAgc2NvcGU6ICdwdWJsaWNfcmVwbyByZWFkOnVzZXInXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAvLyBQcm92aWRlIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXMgYmFzZWQgb24gc3RhdHVzIGNvZGVzXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlRm9yU3RhdHVzKHJlc3BvbnNlLnN0YXR1cywgJ2RldmljZSBmbG93IGluaXRpYWxpemF0aW9uJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRGV2aWNlIGZsb3cgaW5pdGlhdGlvbiBmYWlsZWQnLCB7IFxuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0IFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHJlc3BvbnNlXG4gICAgICBpZiAoIWRhdGEuZGV2aWNlX2NvZGUgfHwgIWRhdGEudXNlcl9jb2RlIHx8ICFkYXRhLnZlcmlmaWNhdGlvbl91cmkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRldmljZSBmbG93IHJlc3BvbnNlIGZyb20gR2l0SHViJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3IgYXVkaXQgdHJhaWxcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuaW5pdGlhdGVEZXZpY2VGbG93JyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiBPQXV0aCBkZXZpY2UgZmxvdyBpbml0aWF0ZWQnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHVzZXJDb2RlOiBkYXRhLnVzZXJfY29kZSxcbiAgICAgICAgICBleHBpcmVzSW46IGRhdGEuZXhwaXJlc19pbixcbiAgICAgICAgICBpbnRlcnZhbDogZGF0YS5pbnRlcnZhbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGRhdGEgYXMgRGV2aWNlQ29kZVJlc3BvbnNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWF0ZSBkZXZpY2UgZmxvdycsIHsgZXJyb3IgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBHaXRIdWIgYXV0aGVudGljYXRpb24uIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24uJyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogUG9sbCBmb3IgdG9rZW4gYWZ0ZXIgdXNlciBoYXMgYXV0aG9yaXplZCB0aGUgZGV2aWNlXG4gICAqL1xuICBhc3luYyBwb2xsRm9yVG9rZW4oZGV2aWNlQ29kZTogc3RyaW5nLCBpbnRlcnZhbDogbnVtYmVyID0gR2l0SHViQXV0aE1hbmFnZXIuREVGQVVMVF9QT0xMX0lOVEVSVkFMKTogUHJvbWlzZTxUb2tlblJlc3BvbnNlPiB7XG4gICAgLy8gQ3JlYXRlIG5ldyBhYm9ydCBjb250cm9sbGVyIGZvciB0aGlzIHBvbGxpbmcgc2Vzc2lvblxuICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSB0aGlzLmFjdGl2ZVBvbGxpbmcuc2lnbmFsO1xuICAgIFxuICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlIChhdHRlbXB0cyA8IEdpdEh1YkF1dGhNYW5hZ2VyLk1BWF9QT0xMX0FUVEVNUFRTKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHBvbGxpbmcgd2FzIGFib3J0ZWRcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBwb2xsaW5nIHdhcyBjYW5jZWxsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goR2l0SHViQXV0aE1hbmFnZXIuVE9LRU5fVVJMLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGNsaWVudF9pZDogR2l0SHViQXV0aE1hbmFnZXIuQ0xJRU5UX0lELFxuICAgICAgICAgICAgZGV2aWNlX2NvZGU6IGRldmljZUNvZGUsXG4gICAgICAgICAgICBncmFudF90eXBlOiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUnXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHZhcmlvdXMgcmVzcG9uc2Ugc3RhdGVzXG4gICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBjYXNlICdhdXRob3JpemF0aW9uX3BlbmRpbmcnOlxuICAgICAgICAgICAgICAvLyBVc2VyIGhhc24ndCBhdXRob3JpemVkIHlldCwga2VlcCBwb2xsaW5nXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ3Nsb3dfZG93bic6XG4gICAgICAgICAgICAgIC8vIEluY3JlYXNlIHBvbGxpbmcgaW50ZXJ2YWxcbiAgICAgICAgICAgICAgaW50ZXJ2YWwgPSBNYXRoLm1pbihpbnRlcnZhbCAqIDEuNSwgMzAwMDApOyAvLyBNYXggMzAgc2Vjb25kc1xuICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1Nsb3dpbmcgZG93biBwb2xsaW5nIGludGVydmFsJywgeyBuZXdJbnRlcnZhbDogaW50ZXJ2YWwgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ2V4cGlyZWRfdG9rZW4nOlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhdXRob3JpemF0aW9uIGNvZGUgaGFzIGV4cGlyZWQuIFBsZWFzZSBzdGFydCBvdmVyLicpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ2FjY2Vzc19kZW5pZWQnOlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhvcml6YXRpb24gd2FzIGRlbmllZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAvLyBMb2cgdGhlIGFjdHVhbCBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnT0F1dGggZGV2aWNlIGZsb3cgZXJyb3InLCB7IFxuICAgICAgICAgICAgICAgIGVycm9yOiBkYXRhLmVycm9yLCBcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5lcnJvcl9kZXNjcmlwdGlvbiBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgdHJ5IHN0YXJ0aW5nIHRoZSBwcm9jZXNzIGFnYWluLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgIC8vIFN1Y2Nlc3MhXG4gICAgICAgICAgcmV0dXJuIGRhdGEgYXMgVG9rZW5SZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gV2FpdCBiZWZvcmUgbmV4dCBwb2xsXG4gICAgICAgIC8vIFdhaXQgZm9yIGludGVydmFsIHdpdGggYWJvcnQgc3VwcG9ydFxuICAgICAgICBhd2FpdCB0aGlzLndhaXRXaXRoQWJvcnQoaW50ZXJ2YWwsIHNpZ25hbCk7XG4gICAgICAgIFxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gTmV0d29yayBlcnJvcnMgc2hvdWxkbid0IHN0b3AgcG9sbGluZ1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1BvbGwgYXR0ZW1wdCBmYWlsZWQnLCB7IGF0dGVtcHQ6IGF0dGVtcHRzLCBlcnJvciB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0V2l0aEFib3J0KGludGVydmFsLCBzaWduYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIHRpbWVkIG91dC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYXIgYWN0aXZlIHBvbGxpbmcgcmVmZXJlbmNlXG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcgPSBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIHRoZSBhdXRoZW50aWNhdGlvbiBmbG93IGFuZCBzdG9yZSB0aGUgdG9rZW5cbiAgICovXG4gIGFzeW5jIGNvbXBsZXRlQXV0aGVudGljYXRpb24odG9rZW5SZXNwb25zZTogVG9rZW5SZXNwb25zZSk6IFByb21pc2U8QXV0aFN0YXR1cz4ge1xuICAgIC8vIFN0b3JlIHRva2VuIHNlY3VyZWx5XG4gICAgYXdhaXQgdGhpcy5zdG9yZVRva2VuKHRva2VuUmVzcG9uc2UuYWNjZXNzX3Rva2VuKTtcbiAgICBcbiAgICAvLyBHZXQgdXNlciBpbmZvXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmZldGNoVXNlckluZm8odG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4pO1xuICAgIFxuICAgIC8vIExvZyBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uIGNvbXBsZXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNvbXBsZXRlQXV0aGVudGljYXRpb24nLFxuICAgICAgZGV0YWlsczogJ0dpdEh1YiBPQXV0aCBkZXZpY2UgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mby5sb2dpbixcbiAgICAgICAgc2NvcGVzOiB0b2tlblJlc3BvbnNlLnNjb3BlLnNwbGl0KCcgJyksXG4gICAgICAgIHRva2VuVHlwZTogVG9rZW5NYW5hZ2VyLmdldFRva2VuVHlwZSh0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbilcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgaGFzVG9rZW46IHRydWUsXG4gICAgICB1c2VybmFtZTogdXNlckluZm8ubG9naW4sXG4gICAgICBzY29wZXM6IHRva2VuUmVzcG9uc2Uuc2NvcGUuc3BsaXQoJyAnKVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBzdG9yZWQgYXV0aGVudGljYXRpb24gYW5kIHJldm9rZSB0b2tlblxuICAgKi9cbiAgYXN5bmMgY2xlYXJBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSB0b2tlbiBiZWZvcmUgY2xlYXJpbmcgaXRcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICAgIFxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gcmV2b2tlIHRoZSB0b2tlbiBvbiBHaXRIdWJcbiAgICAgICAgLy8gTm90ZTogR2l0SHViIE9BdXRoIHRva2VucyBkb24ndCBoYXZlIGEgcmV2b2NhdGlvbiBlbmRwb2ludCBmb3IgZGV2aWNlIGZsb3cgdG9rZW5zXG4gICAgICAgIC8vIEJ1dCB3ZSdsbCBjbGVhciB0aGUgY2FjaGUgYW5kIHJlbW92ZSBmcm9tIHN0b3JhZ2VcbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFyIGNhY2hlZCB1c2VyIGluZm9cbiAgICAgICAgdGhpcy5hcGlDYWNoZS5jbGVhcigpO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1RPS0VOX0NBQ0hFX0NMRUFSRUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5jbGVhckF1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGNsZWFyZWQgYnkgdXNlciByZXF1ZXN0JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgaGFkVG9rZW46IHRydWUsXG4gICAgICAgICAgICB0b2tlblByZWZpeDogVG9rZW5NYW5hZ2VyLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIHNlY3VyZSBzdG9yYWdlXG4gICAgICBhd2FpdCBUb2tlbk1hbmFnZXIucmVtb3ZlU3RvcmVkVG9rZW4oKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBjbGVhcmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNsZWFyaW5nIGF1dGhlbnRpY2F0aW9uJywgeyBlcnJvciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNsZWFyIGF1dGhlbnRpY2F0aW9uJyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU3RvcmUgdG9rZW4gc2VjdXJlbHkgdXNpbmcgZW5jcnlwdGVkIGZpbGUgc3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgVG9rZW5NYW5hZ2VyLnN0b3JlR2l0SHViVG9rZW4odG9rZW4pO1xuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiB0b2tlbiBzdG9yZWQgc2VjdXJlbHkuIFlvdSBhcmUgbm93IGF1dGhlbnRpY2F0ZWQhJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0b3JlIHRva2VuIHNlY3VyZWx5JywgeyBlcnJvciB9KTtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGVudmlyb25tZW50IHZhcmlhYmxlIGluc3RydWN0aW9uc1xuICAgICAgbG9nZ2VyLmluZm8oJ0ZvciBtYW51YWwgc2V0dXAsIHlvdSBjYW4gc2V0IEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIHVzZXIgaW5mb3JtYXRpb24gZnJvbSBHaXRIdWJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hVc2VySW5mbyh0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuYXBpQ2FjaGUuZ2V0KEdpdEh1YkF1dGhNYW5hZ2VyLlVTRVJfVVJMKTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoR2l0SHViQXV0aE1hbmFnZXIuVVNFUl9VUkwsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2VGb3JTdGF0dXMocmVzcG9uc2Uuc3RhdHVzLCAndXNlciBpbmZvcm1hdGlvbiBmZXRjaCcpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gZmV0Y2ggdXNlciBpbmZvJywgeyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSB1c2VybmFtZSBhbmQgb3RoZXIgdGV4dCBmaWVsZHMgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBpZiAoZGF0YS5sb2dpbikge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEubG9naW4pO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5mZXRjaFVzZXJJbmZvJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHVzZXJuYW1lIGNvbnRhaW5zIGludmFsaWQgVW5pY29kZScsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgICAgICBvcmlnaW5hbExlbmd0aDogZGF0YS5sb2dpbi5sZW5ndGgsXG4gICAgICAgICAgICBkZXRlY3RlZElzc3VlczogdmFsaWRhdGlvbi5kZXRlY3RlZElzc3VlcyBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlcm5hbWUgZm9ybWF0IGZyb20gR2l0SHViJyk7XG4gICAgICB9XG4gICAgICBkYXRhLmxvZ2luID0gdmFsaWRhdGlvbi5ub3JtYWxpemVkQ29udGVudDtcbiAgICB9XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIGRpc3BsYXkgbmFtZSBpZiBwcmVzZW50XG4gICAgaWYgKGRhdGEubmFtZSkge1xuICAgICAgY29uc3QgbmFtZVZhbGlkYXRpb24gPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLm5hbWUpO1xuICAgICAgaWYgKG5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgZGF0YS5uYW1lID0gbmFtZVZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb24ndCBmYWlsIG9uIGRpc3BsYXkgbmFtZSwganVzdCByZW1vdmUgaXRcbiAgICAgICAgZGVsZXRlIGRhdGEubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIHNjb3BlcyBmcm9tIHJlc3BvbnNlIGhlYWRlcnNcbiAgICBjb25zdCBzY29wZUhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW9hdXRoLXNjb3BlcycpO1xuICAgIGlmIChzY29wZUhlYWRlcikge1xuICAgICAgZGF0YS5zY29wZXMgPSBzY29wZUhlYWRlci5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTG9nIHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24gZm9yIGF1ZGl0IHRyYWlsXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5mZXRjaFVzZXJJbmZvJyxcbiAgICAgIGRldGFpbHM6ICdHaXRIdWIgdXNlciBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICB1c2VybmFtZTogZGF0YS5sb2dpbixcbiAgICAgICAgaGFzRW1haWw6ICEhZGF0YS5lbWFpbCxcbiAgICAgICAgc2NvcGVzOiBkYXRhLnNjb3BlcyB8fCBbXVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICB0aGlzLmFwaUNhY2hlLnNldChHaXRIdWJBdXRoTWFuYWdlci5VU0VSX1VSTCwgZGF0YSk7XG4gICAgXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgYXV0aGVudGljYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciB1c2Vyc1xuICAgKi9cbiAgZm9ybWF0QXV0aEluc3RydWN0aW9ucyhkZXZpY2VSZXNwb25zZTogRGV2aWNlQ29kZVJlc3BvbnNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYPCflJAgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxuXG5UbyBhY2Nlc3MgYWxsIERvbGxob3VzZU1DUCBmZWF0dXJlcywgcGxlYXNlIGF1dGhlbnRpY2F0ZSB3aXRoIEdpdEh1YjpcblxuMS4gVmlzaXQ6ICoqJHtkZXZpY2VSZXNwb25zZS52ZXJpZmljYXRpb25fdXJpfSoqXG4yLiBFbnRlciBjb2RlOiAqKiR7ZGV2aWNlUmVzcG9uc2UudXNlcl9jb2RlfSoqXG4zLiBBdXRob3JpemUgJ0RvbGxob3VzZU1DUCBDb2xsZWN0aW9uJ1xuXG5UaGlzIHdpbGwgZ3JhbnQgYWNjZXNzIHRvOlxu4pyFIEJyb3dzZSB0aGUgcHVibGljIGNvbGxlY3Rpb25cbuKchSBJbnN0YWxsIGNvbW11bml0eSBjb250ZW50ICBcbuKchSBTdWJtaXQgeW91ciBvd24gY3JlYXRpb25zXG5cbkRvbid0IGhhdmUgYSBHaXRIdWIgYWNjb3VudD8gWW91J2xsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUgKGl0J3MgZnJlZSEpXG5cbuKPse+4jyBUaGlzIGNvZGUgZXhwaXJlcyBpbiAke01hdGguZmxvb3IoZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbiAvIDYwKX0gbWludXRlcy5gO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBuZWVkcyB0byBhdXRoZW50aWNhdGUgZm9yIGEgc3BlY2lmaWMgYWN0aW9uXG4gICAqL1xuICBuZWVkc0F1dGhGb3JBY3Rpb24oYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhdXRoUmVxdWlyZWRBY3Rpb25zID0gWydzdWJtaXQnLCAnY3JlYXRlX3ByJywgJ21hbmFnZV9jb250ZW50J107XG4gICAgcmV0dXJuIGF1dGhSZXF1aXJlZEFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogV2FpdCB3aXRoIGFib3J0IHNpZ25hbCBzdXBwb3J0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRXaXRoQWJvcnQobXM6IG51bWJlciwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gICAgICBcbiAgICAgIC8vIExpc3RlbiBmb3IgYWJvcnQgc2lnbmFsXG4gICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignV2FpdCBhYm9ydGVkJykpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIC8vIENsZWFuIHVwIGFmdGVyIHRpbWVvdXRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgfSwgbXMpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYW4gdXAgYW55IGFjdGl2ZSBvcGVyYXRpb25zIChjYWxsZWQgb24gc2VydmVyIHNodXRkb3duKVxuICAgKi9cbiAgYXN5bmMgY2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBYm9ydCBhbnkgYWN0aXZlIHBvbGxpbmdcbiAgICBpZiAodGhpcy5hY3RpdmVQb2xsaW5nKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcuYWJvcnQoKTtcbiAgICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG51bGw7XG4gICAgICBcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX0NBQ0hFX0NMRUFSRUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNsZWFudXAnLFxuICAgICAgICBkZXRhaWxzOiAnR2l0SHViIGF1dGggbWFuYWdlciBjbGVhbmVkIHVwIG9uIHNodXRkb3duJyxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBoYWRBY3RpdmVQb2xsaW5nOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIGF1dGhlbnRpY2F0aW9uIHBvbGxpbmcgY2FuY2VsbGVkIGR1ZSB0byBzaHV0ZG93bicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhciBBUEkgY2FjaGVcbiAgICB0aGlzLmFwaUNhY2hlLmNsZWFyKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIEhUVFAgc3RhdHVzIGNvZGVcbiAgICogQXZvaWRzIGV4cG9zaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB3aGlsZSBwcm92aWRpbmcgaGVscGZ1bCBndWlkYW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2VGb3JTdGF0dXMoc3RhdHVzOiBudW1iZXIsIG9wZXJhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSA0MDA6XG4gICAgICAgIHJldHVybiBgSW52YWxpZCByZXF1ZXN0IHRvIEdpdEh1Yi4gUGxlYXNlIGVuc3VyZSB0aGUgT0F1dGggYXBwIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuYDtcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gYEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gVGhlIE9BdXRoIGFwcCBjcmVkZW50aWFscyBtYXkgYmUgaW52YWxpZC5gO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiBgQWNjZXNzIGRlbmllZCBieSBHaXRIdWIuIFRoZSBPQXV0aCBhcHAgbWF5IGxhY2sgcmVxdWlyZWQgcGVybWlzc2lvbnMuYDtcbiAgICAgIGNhc2UgNDA0OlxuICAgICAgICByZXR1cm4gYEdpdEh1YiBzZXJ2aWNlIG5vdCBmb3VuZC4gVGhpcyBtYXkgaW5kaWNhdGUgYW4gQVBJIGNoYW5nZS5gO1xuICAgICAgY2FzZSA0MjI6XG4gICAgICAgIHJldHVybiBgSW52YWxpZCBwYXJhbWV0ZXJzIHNlbnQgdG8gR2l0SHViLiBQbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uLmA7XG4gICAgICBjYXNlIDQyOTpcbiAgICAgICAgcmV0dXJuIGBUb28gbWFueSByZXF1ZXN0cyB0byBHaXRIdWIuIFBsZWFzZSB3YWl0IGEgbW9tZW50IGFuZCB0cnkgYWdhaW4uYDtcbiAgICAgIGNhc2UgNTAwOlxuICAgICAgY2FzZSA1MDI6XG4gICAgICBjYXNlIDUwMzpcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gYEdpdEh1YiBzZXJ2aWNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgZmV3IG1vbWVudHMuYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIExvZyB0aGUgYWN0dWFsIHN0YXR1cyBmb3IgZGVidWdnaW5nLCBidXQgZG9uJ3QgZXhwb3NlIGl0IHRvIHVzZXJzXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgVW5leHBlY3RlZCBzdGF0dXMgY29kZSBkdXJpbmcgJHtvcGVyYXRpb259YCwgeyBzdGF0dXMgfSk7XG4gICAgICAgIHJldHVybiBgRmFpbGVkIHRvIGNvbXBsZXRlICR7b3BlcmF0aW9ufS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgdHJ5IGFnYWluLmA7XG4gICAgfVxuICB9XG59Il19
|
|
@@ -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.
|
|
6
|
-
export declare const BUILD_TIMESTAMP = "2025-08-
|
|
5
|
+
export declare const PACKAGE_VERSION = "1.5.0";
|
|
6
|
+
export declare const BUILD_TIMESTAMP = "2025-08-05T17:55:53.994Z";
|
|
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
|
|
@@ -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 const PACKAGE_VERSION = '1.
|
|
6
|
-
export const BUILD_TIMESTAMP = '2025-08-
|
|
5
|
+
export const PACKAGE_VERSION = '1.5.0';
|
|
6
|
+
export const BUILD_TIMESTAMP = '2025-08-05T17:55:53.994Z';
|
|
7
7
|
export const BUILD_TYPE = 'npm';
|
|
8
8
|
export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjUuMCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjUtMDgtMDVUMTc6NTU6NTMuOTk0Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class DollhouseMCPServer implements IToolHandler {
|
|
|
11
11
|
private rateLimitTracker;
|
|
12
12
|
private indicatorConfig;
|
|
13
13
|
private githubClient;
|
|
14
|
+
private githubAuthManager;
|
|
14
15
|
private collectionBrowser;
|
|
15
16
|
private collectionSearch;
|
|
16
17
|
private personaDetails;
|
|
@@ -216,6 +217,28 @@ export declare class DollhouseMCPServer implements IToolHandler {
|
|
|
216
217
|
}[];
|
|
217
218
|
}>;
|
|
218
219
|
private getCurrentUserForAttribution;
|
|
220
|
+
setupGitHubAuth(): Promise<{
|
|
221
|
+
content: {
|
|
222
|
+
type: string;
|
|
223
|
+
text: string;
|
|
224
|
+
}[];
|
|
225
|
+
}>;
|
|
226
|
+
checkGitHubAuth(): Promise<{
|
|
227
|
+
content: {
|
|
228
|
+
type: string;
|
|
229
|
+
text: string;
|
|
230
|
+
}[];
|
|
231
|
+
}>;
|
|
232
|
+
clearGitHubAuth(): Promise<{
|
|
233
|
+
content: {
|
|
234
|
+
type: string;
|
|
235
|
+
text: string;
|
|
236
|
+
}[];
|
|
237
|
+
}>;
|
|
238
|
+
/**
|
|
239
|
+
* Poll for auth completion in the background
|
|
240
|
+
*/
|
|
241
|
+
private pollForAuthCompletion;
|
|
219
242
|
createPersona(name: string, description: string, category: string, instructions: string, triggers?: string): Promise<{
|
|
220
243
|
content: {
|
|
221
244
|
type: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|