@brainfish-ai/devdoc 0.1.30 → 0.1.32

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.
@@ -0,0 +1,407 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.domainAdd = domainAdd;
7
+ exports.domainStatus = domainStatus;
8
+ exports.domainVerify = domainVerify;
9
+ exports.domainRemove = domainRemove;
10
+ const path_1 = __importDefault(require("path"));
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const logger_1 = require("../../utils/logger");
13
+ const constants_1 = require("../../constants");
14
+ /**
15
+ * Load .devdoc.json and get API key
16
+ */
17
+ function loadDevDocConfig(projectRoot) {
18
+ const configPath = path_1.default.join(projectRoot, '.devdoc.json');
19
+ if (!fs_extra_1.default.existsSync(configPath)) {
20
+ return null;
21
+ }
22
+ try {
23
+ return fs_extra_1.default.readJsonSync(configPath);
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ /**
30
+ * Get API key from options, env, or config
31
+ */
32
+ function getApiKey(options, config) {
33
+ return options.apiKey || process.env.DEVDOC_API_KEY || config?.apiKey || null;
34
+ }
35
+ /**
36
+ * Validate domain format
37
+ */
38
+ function isValidDomainFormat(domain) {
39
+ if (!domain) {
40
+ return { valid: false, error: 'Domain is required' };
41
+ }
42
+ if (domain.length < 4) {
43
+ return { valid: false, error: 'Domain must be at least 4 characters' };
44
+ }
45
+ // Basic domain format check
46
+ const domainRegex = /^(?!-)[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,}$/;
47
+ if (!domainRegex.test(domain)) {
48
+ return { valid: false, error: 'Invalid domain format. Example: docs.example.com' };
49
+ }
50
+ // Check for reserved domains
51
+ const reserved = ['devdoc.sh', 'devdoc.io', 'devdoc.com'];
52
+ if (reserved.some(r => domain === r || domain.endsWith(`.${r}`))) {
53
+ return { valid: false, error: 'Cannot use a reserved DevDoc domain' };
54
+ }
55
+ return { valid: true };
56
+ }
57
+ /**
58
+ * Normalize domain (lowercase, remove protocol/path)
59
+ */
60
+ function normalizeDomain(domain) {
61
+ let normalized = domain.toLowerCase().trim();
62
+ normalized = normalized.replace(/^https?:\/\//, '');
63
+ normalized = normalized.split('/')[0];
64
+ normalized = normalized.split(':')[0];
65
+ return normalized;
66
+ }
67
+ // =============================================================================
68
+ // Domain Add Command
69
+ // =============================================================================
70
+ /**
71
+ * Add a custom domain to the project
72
+ */
73
+ async function domainAdd(customDomain, options) {
74
+ const projectRoot = process.cwd();
75
+ const apiUrl = options.url || process.env.DEVDOC_API_URL || constants_1.DEFAULT_API_URL;
76
+ logger_1.logger.info('Adding custom domain...\n');
77
+ // Load config
78
+ const config = loadDevDocConfig(projectRoot);
79
+ if (!config) {
80
+ logger_1.logger.error('Project not initialized.');
81
+ console.log('');
82
+ logger_1.logger.info('Run "devdoc init" to initialize, then "devdoc deploy" to deploy.');
83
+ process.exit(1);
84
+ }
85
+ // Get API key - required because custom domains need a deployed project
86
+ const apiKey = getApiKey(options, config);
87
+ if (!apiKey) {
88
+ logger_1.logger.error('Project not deployed yet.');
89
+ console.log('');
90
+ console.log(' Custom domains require a deployed project.');
91
+ console.log('');
92
+ console.log(' To set up a custom domain:');
93
+ console.log(' 1. Deploy your project first: devdoc deploy');
94
+ console.log(' 2. Then add your domain: devdoc domain add ' + customDomain);
95
+ console.log('');
96
+ process.exit(1);
97
+ }
98
+ // Normalize and validate domain
99
+ const domain = normalizeDomain(customDomain);
100
+ const validation = isValidDomainFormat(domain);
101
+ if (!validation.valid) {
102
+ logger_1.logger.error(validation.error);
103
+ process.exit(1);
104
+ }
105
+ logger_1.logger.info(`Domain: ${domain}`);
106
+ console.log('');
107
+ try {
108
+ const response = await fetch(`${apiUrl}/api/domains/add`, {
109
+ method: 'POST',
110
+ headers: {
111
+ 'Content-Type': 'application/json',
112
+ 'Authorization': `Bearer ${apiKey}`,
113
+ },
114
+ body: JSON.stringify({ customDomain: domain }),
115
+ });
116
+ const result = await response.json();
117
+ if (!response.ok || !result.success) {
118
+ logger_1.logger.error(result.error || 'Failed to add domain');
119
+ process.exit(1);
120
+ }
121
+ logger_1.logger.success(`✓ Domain ${domain} added!`);
122
+ console.log('');
123
+ console.log(' Next, add these DNS records to your domain provider:');
124
+ console.log('');
125
+ console.log(' 1. CNAME Record:');
126
+ console.log(` Name: ${result.verification.cname.name}`);
127
+ console.log(` Value: ${result.verification.cname.value}`);
128
+ console.log('');
129
+ console.log(' 2. TXT Record (for verification):');
130
+ console.log(` Name: ${result.verification.txt.name}`);
131
+ console.log(` Value: ${result.verification.txt.value}`);
132
+ console.log('');
133
+ logger_1.logger.info('After adding DNS records, run:');
134
+ console.log(' devdoc domain verify');
135
+ console.log('');
136
+ }
137
+ catch (error) {
138
+ const message = error instanceof Error ? error.message : String(error);
139
+ logger_1.logger.error(`Failed to add domain: ${message}`);
140
+ process.exit(1);
141
+ }
142
+ }
143
+ // =============================================================================
144
+ // Domain Status Command
145
+ // =============================================================================
146
+ /**
147
+ * Check status of custom domain
148
+ */
149
+ async function domainStatus(options) {
150
+ const projectRoot = process.cwd();
151
+ const apiUrl = options.url || process.env.DEVDOC_API_URL || constants_1.DEFAULT_API_URL;
152
+ // Load config
153
+ const config = loadDevDocConfig(projectRoot);
154
+ if (!config) {
155
+ logger_1.logger.error('Project not initialized.');
156
+ console.log('');
157
+ logger_1.logger.info('Run "devdoc init" to initialize, then "devdoc deploy" to deploy.');
158
+ process.exit(1);
159
+ }
160
+ // Get API key
161
+ const apiKey = getApiKey(options, config);
162
+ if (!apiKey) {
163
+ logger_1.logger.error('Project not deployed yet.');
164
+ console.log('');
165
+ logger_1.logger.info('Deploy your project first with "devdoc deploy"');
166
+ process.exit(1);
167
+ }
168
+ try {
169
+ const response = await fetch(`${apiUrl}/api/domains/status`, {
170
+ method: 'GET',
171
+ headers: {
172
+ 'Authorization': `Bearer ${apiKey}`,
173
+ },
174
+ });
175
+ const result = await response.json();
176
+ if (!response.ok) {
177
+ logger_1.logger.error(result.error || 'Failed to get domain status');
178
+ process.exit(1);
179
+ }
180
+ console.log('');
181
+ console.log(' Custom Domain Status');
182
+ console.log(' --------------------');
183
+ if (!result.hasCustomDomain) {
184
+ console.log('');
185
+ console.log(' No custom domain configured.');
186
+ console.log('');
187
+ console.log(' Your docs are available at:');
188
+ console.log(` ${logger_1.logger.cyan(result.projectUrl)}`);
189
+ console.log('');
190
+ logger_1.logger.info('To add a custom domain, run:');
191
+ console.log(' devdoc domain add docs.yourdomain.com');
192
+ console.log('');
193
+ return;
194
+ }
195
+ console.log('');
196
+ console.log(` Domain: ${result.domain}`);
197
+ console.log(` Status: ${getStatusDisplay(result.status || 'unknown')}`);
198
+ console.log('');
199
+ if (result.status === 'active') {
200
+ console.log(' Your docs are available at:');
201
+ console.log(` ${logger_1.logger.cyan(result.customUrl || `https://${result.domain}`)}`);
202
+ console.log('');
203
+ console.log(' Also accessible at:');
204
+ console.log(` ${result.projectUrl}`);
205
+ }
206
+ else if (result.status === 'pending' && result.dnsRecords) {
207
+ console.log(' Add these DNS records to your domain:');
208
+ console.log('');
209
+ console.log(' CNAME Record:');
210
+ console.log(` Name: ${result.dnsRecords.cname.name}`);
211
+ console.log(` Value: ${result.dnsRecords.cname.value}`);
212
+ console.log('');
213
+ console.log(' TXT Record:');
214
+ console.log(` Name: ${result.dnsRecords.txt.name}`);
215
+ console.log(` Value: ${result.dnsRecords.txt.value}`);
216
+ console.log('');
217
+ logger_1.logger.info('After adding DNS records, run: devdoc domain verify');
218
+ }
219
+ else if (result.message) {
220
+ console.log(` ${result.message}`);
221
+ }
222
+ if (result.nextStep) {
223
+ console.log('');
224
+ logger_1.logger.info(`Next: ${result.nextStep}`);
225
+ }
226
+ console.log('');
227
+ }
228
+ catch (error) {
229
+ const message = error instanceof Error ? error.message : String(error);
230
+ logger_1.logger.error(`Failed to get domain status: ${message}`);
231
+ process.exit(1);
232
+ }
233
+ }
234
+ /**
235
+ * Get display string for status
236
+ */
237
+ function getStatusDisplay(status) {
238
+ switch (status) {
239
+ case 'pending':
240
+ return logger_1.logger.yellow('⏳ Pending DNS configuration');
241
+ case 'dns_verified':
242
+ return logger_1.logger.cyan('✓ DNS verified, SSL provisioning...');
243
+ case 'ssl_provisioning':
244
+ return logger_1.logger.cyan('🔒 SSL certificate provisioning...');
245
+ case 'active':
246
+ return logger_1.logger.green('✓ Active');
247
+ case 'error':
248
+ return logger_1.logger.red('✗ Error');
249
+ default:
250
+ return status;
251
+ }
252
+ }
253
+ // =============================================================================
254
+ // Domain Verify Command
255
+ // =============================================================================
256
+ /**
257
+ * Verify DNS configuration for custom domain
258
+ */
259
+ async function domainVerify(options) {
260
+ const projectRoot = process.cwd();
261
+ const apiUrl = options.url || process.env.DEVDOC_API_URL || constants_1.DEFAULT_API_URL;
262
+ logger_1.logger.info('Verifying DNS configuration...\n');
263
+ // Load config
264
+ const config = loadDevDocConfig(projectRoot);
265
+ if (!config) {
266
+ logger_1.logger.error('Project not initialized.');
267
+ console.log('');
268
+ logger_1.logger.info('Run "devdoc init" to initialize, then "devdoc deploy" to deploy.');
269
+ process.exit(1);
270
+ }
271
+ // Get API key
272
+ const apiKey = getApiKey(options, config);
273
+ if (!apiKey) {
274
+ logger_1.logger.error('Project not deployed yet.');
275
+ console.log('');
276
+ logger_1.logger.info('Deploy your project first with "devdoc deploy"');
277
+ process.exit(1);
278
+ }
279
+ try {
280
+ const response = await fetch(`${apiUrl}/api/domains/verify`, {
281
+ method: 'POST',
282
+ headers: {
283
+ 'Content-Type': 'application/json',
284
+ 'Authorization': `Bearer ${apiKey}`,
285
+ },
286
+ body: JSON.stringify({}),
287
+ });
288
+ const result = await response.json();
289
+ if (!response.ok) {
290
+ logger_1.logger.error(result.error || 'Failed to verify domain');
291
+ process.exit(1);
292
+ }
293
+ console.log('');
294
+ console.log(' DNS Verification Results');
295
+ console.log(' ------------------------');
296
+ console.log('');
297
+ console.log(` Domain: ${result.domain}`);
298
+ console.log('');
299
+ // CNAME check
300
+ console.log(' CNAME Record:');
301
+ if (result.checks.cname.valid) {
302
+ console.log(` ${logger_1.logger.green('✓')} Found: ${result.checks.cname.value}`);
303
+ }
304
+ else if (result.checks.cname.found) {
305
+ console.log(` ${logger_1.logger.yellow('!')} Found but incorrect: ${result.checks.cname.value}`);
306
+ console.log(` Expected: ${result.checks.cname.expected}`);
307
+ }
308
+ else {
309
+ console.log(` ${logger_1.logger.red('✗')} Not found`);
310
+ console.log(` Expected: ${result.checks.cname.expected}`);
311
+ }
312
+ // TXT check
313
+ console.log('');
314
+ console.log(' TXT Verification Record:');
315
+ if (result.checks.txt.verified) {
316
+ console.log(` ${logger_1.logger.green('✓')} Verified`);
317
+ }
318
+ else if (result.checks.txt.found) {
319
+ console.log(` ${logger_1.logger.yellow('!')} Found but value doesn't match`);
320
+ }
321
+ else {
322
+ console.log(` ${logger_1.logger.red('✗')} Not found`);
323
+ console.log(` Expected: ${result.checks.txt.expected}`);
324
+ }
325
+ console.log('');
326
+ if (result.success) {
327
+ logger_1.logger.success('DNS verified!');
328
+ console.log('');
329
+ console.log(` ${result.message}`);
330
+ console.log('');
331
+ logger_1.logger.info('Run "devdoc domain status" to check SSL provisioning progress.');
332
+ }
333
+ else {
334
+ logger_1.logger.warn('DNS verification incomplete');
335
+ console.log('');
336
+ console.log(` ${result.message}`);
337
+ console.log('');
338
+ logger_1.logger.info('DNS changes can take 1-24 hours to propagate.');
339
+ logger_1.logger.info('Run "devdoc domain verify" again later.');
340
+ }
341
+ console.log('');
342
+ }
343
+ catch (error) {
344
+ const message = error instanceof Error ? error.message : String(error);
345
+ logger_1.logger.error(`Failed to verify domain: ${message}`);
346
+ process.exit(1);
347
+ }
348
+ }
349
+ // =============================================================================
350
+ // Domain Remove Command
351
+ // =============================================================================
352
+ /**
353
+ * Remove custom domain from project
354
+ */
355
+ async function domainRemove(customDomain, options) {
356
+ const projectRoot = process.cwd();
357
+ const apiUrl = options.url || process.env.DEVDOC_API_URL || constants_1.DEFAULT_API_URL;
358
+ logger_1.logger.info('Removing custom domain...\n');
359
+ // Load config
360
+ const config = loadDevDocConfig(projectRoot);
361
+ if (!config) {
362
+ logger_1.logger.error('Project not initialized.');
363
+ console.log('');
364
+ logger_1.logger.info('Run "devdoc init" to initialize, then "devdoc deploy" to deploy.');
365
+ process.exit(1);
366
+ }
367
+ // Get API key
368
+ const apiKey = getApiKey(options, config);
369
+ if (!apiKey) {
370
+ logger_1.logger.error('Project not deployed yet.');
371
+ console.log('');
372
+ logger_1.logger.info('Deploy your project first with "devdoc deploy"');
373
+ process.exit(1);
374
+ }
375
+ try {
376
+ const body = {};
377
+ if (customDomain) {
378
+ body.customDomain = normalizeDomain(customDomain);
379
+ }
380
+ const response = await fetch(`${apiUrl}/api/domains/remove`, {
381
+ method: 'DELETE',
382
+ headers: {
383
+ 'Content-Type': 'application/json',
384
+ 'Authorization': `Bearer ${apiKey}`,
385
+ },
386
+ body: JSON.stringify(body),
387
+ });
388
+ const result = await response.json();
389
+ if (!response.ok || !result.success) {
390
+ logger_1.logger.error(result.error || 'Failed to remove domain');
391
+ process.exit(1);
392
+ }
393
+ logger_1.logger.success(`✓ Domain ${result.domain} removed`);
394
+ console.log('');
395
+ console.log(' Your docs remain accessible at the default subdomain.');
396
+ console.log('');
397
+ logger_1.logger.info('You can add a new custom domain anytime with:');
398
+ console.log(' devdoc domain add docs.yourdomain.com');
399
+ console.log('');
400
+ }
401
+ catch (error) {
402
+ const message = error instanceof Error ? error.message : String(error);
403
+ logger_1.logger.error(`Failed to remove domain: ${message}`);
404
+ process.exit(1);
405
+ }
406
+ }
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9kb21haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUF3SUEsOEJBOEVDO0FBU0Qsb0NBNkZDO0FBNkJELG9DQWdHQztBQVNELG9DQTJEQztBQTdmRCxnREFBdUI7QUFDdkIsd0RBQXlCO0FBQ3pCLCtDQUEyQztBQUMzQywrQ0FBaUQ7QUFrRWpEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxXQUFtQjtJQUMzQyxNQUFNLFVBQVUsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUN6RCxJQUFJLENBQUMsa0JBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLGtCQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBaUIsQ0FBQTtJQUNwRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxTQUFTLENBQUMsT0FBc0IsRUFBRSxNQUEyQjtJQUNwRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUE7QUFDL0UsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjO0lBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFBO0lBQ3RELENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxF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QUFRLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLGVBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSx5QkFBeUIsQ0FBQyxDQUFBO1lBQ3ZELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakIsQ0FBQztRQUVELGVBQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxNQUFNLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQTtRQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBQ3RFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLCtDQUErQyxDQUFDLENBQUE7UUFDNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBO1FBQ3RELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFakIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLE9BQU8sR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEUsZUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlcidcbmltcG9ydCB7IERFRkFVTFRfQVBJX1VSTCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cydcblxuaW50ZXJmYWNlIERvbWFpbk9wdGlvbnMge1xuICB1cmw/OiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEZXZEb2NDb25maWcge1xuICBwcm9qZWN0SWQ/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBzbHVnPzogc3RyaW5nXG4gIHN1YmRvbWFpbj86IHN0cmluZ1xuICBhcGlLZXk/OiBzdHJpbmdcbiAgdXJsPzogc3RyaW5nXG4gIGxhc3REZXBsb3llZD86IHN0cmluZ1xuICBjcmVhdGVkQXQ/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERvbWFpbkFkZFJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhblxuICBkb21haW46IHN0cmluZ1xuICBwcm9qZWN0U2x1Zzogc3RyaW5nXG4gIHN0YXR1czogc3RyaW5nXG4gIHZlcmlmaWNhdGlvbjoge1xuICAgIGNuYW1lOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9XG4gICAgdHh0OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9XG4gIH1cbiAgaW5zdHJ1Y3Rpb25zOiBzdHJpbmdbXVxuICBlcnJvcj86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRG9tYWluU3RhdHVzUmVzcG9uc2Uge1xuICBoYXNDdXN0b21Eb21haW46IGJvb2xlYW5cbiAgZG9tYWluPzogc3RyaW5nXG4gIHN0YXR1cz86IHN0cmluZ1xuICBwcm9qZWN0U2x1Zzogc3RyaW5nXG4gIHByb2plY3RVcmw6IHN0cmluZ1xuICBjdXN0b21Vcmw/OiBzdHJpbmdcbiAgbWVzc2FnZT86IHN0cmluZ1xuICBkbnNSZWNvcmRzPzoge1xuICAgIGNuYW1lOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9XG4gICAgdHh0OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9XG4gIH1cbiAgbmV4dFN0ZXA/OiBzdHJpbmdcbiAgZXJyb3I/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERvbWFpblZlcmlmeVJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhblxuICBkb21haW46IHN0cmluZ1xuICBzdGF0dXM6IHN0cmluZ1xuICBtZXNzYWdlOiBzdHJpbmdcbiAgY2hlY2tzOiB7XG4gICAgY25hbWU6IHsgZm91bmQ6IGJvb2xlYW47IHZhbHVlOiBzdHJpbmcgfCBudWxsOyB2YWxpZDogYm9vbGVhbjsgZXhwZWN0ZWQ6IHN0cmluZyB9XG4gICAgdHh0OiB7IGZvdW5kOiBib29sZWFuOyB2ZXJpZmllZDogYm9vbGVhbjsgZXhwZWN0ZWQ6IHN0cmluZyB9XG4gIH1cbiAgZXJyb3I/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERvbWFpblJlbW92ZVJlc3BvbnNlIHtcbiAgc3VjY2VzczogYm9vbGVhblxuICBtZXNzYWdlOiBzdHJpbmdcbiAgZG9tYWluOiBzdHJpbmdcbiAgZXJyb3I/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBMb2FkIC5kZXZkb2MuanNvbiBhbmQgZ2V0IEFQSSBrZXlcbiAqL1xuZnVuY3Rpb24gbG9hZERldkRvY0NvbmZpZyhwcm9qZWN0Um9vdDogc3RyaW5nKTogRGV2RG9jQ29uZmlnIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICcuZGV2ZG9jLmpzb24nKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZzLnJlYWRKc29uU3luYyhjb25maWdQYXRoKSBhcyBEZXZEb2NDb25maWdcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG4vKipcbiAqIEdldCBBUEkga2V5IGZyb20gb3B0aW9ucywgZW52LCBvciBjb25maWdcbiAqL1xuZnVuY3Rpb24gZ2V0QXBpS2V5KG9wdGlvbnM6IERvbWFpbk9wdGlvbnMsIGNvbmZpZzogRGV2RG9jQ29uZmlnIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gb3B0aW9ucy5hcGlLZXkgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9LRVkgfHwgY29uZmlnPy5hcGlLZXkgfHwgbnVsbFxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGRvbWFpbiBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZERvbWFpbkZvcm1hdChkb21haW46IHN0cmluZyk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICBpZiAoIWRvbWFpbikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdEb21haW4gaXMgcmVxdWlyZWQnIH1cbiAgfVxuICBcbiAgaWYgKGRvbWFpbi5sZW5ndGggPCA0KSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ0RvbWFpbiBtdXN0IGJlIGF0IGxlYXN0IDQgY2hhcmFjdGVycycgfVxuICB9XG4gIFxuICAvLyBCYXNpYyBkb21haW4gZm9ybWF0IGNoZWNrXG4gIGNvbnN0IGRvbWFpblJlZ2V4ID0gL14oPyEtKVthLXpBLVowLTktXSsoPzpcXC5bYS16QS1aMC05LV0rKSpcXC5bYS16QS1aXXsyLH0kL1xuICBpZiAoIWRvbWFpblJlZ2V4LnRlc3QoZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdJbnZhbGlkIGRvbWFpbiBmb3JtYXQuIEV4YW1wbGU6IGRvY3MuZXhhbXBsZS5jb20nIH1cbiAgfVxuICBcbiAgLy8gQ2hlY2sgZm9yIHJlc2VydmVkIGRvbWFpbnNcbiAgY29uc3QgcmVzZXJ2ZWQgPSBbJ2RldmRvYy5zaCcsICdkZXZkb2MuaW8nLCAnZGV2ZG9jLmNvbSddXG4gIGlmIChyZXNlcnZlZC5zb21lKHIgPT4gZG9tYWluID09PSByIHx8IGRvbWFpbi5lbmRzV2l0aChgLiR7cn1gKSkpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnQ2Fubm90IHVzZSBhIHJlc2VydmVkIERldkRvYyBkb21haW4nIH1cbiAgfVxuICBcbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBkb21haW4gKGxvd2VyY2FzZSwgcmVtb3ZlIHByb3RvY29sL3BhdGgpXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZURvbWFpbihkb21haW46IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBub3JtYWxpemVkID0gZG9tYWluLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgJycpXG4gIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnNwbGl0KCcvJylbMF1cbiAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3BsaXQoJzonKVswXVxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRG9tYWluIEFkZCBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEFkZCBhIGN1c3RvbSBkb21haW4gdG8gdGhlIHByb2plY3RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvbWFpbkFkZChjdXN0b21Eb21haW46IHN0cmluZywgb3B0aW9uczogRG9tYWluT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMXG4gIFxuICBsb2dnZXIuaW5mbygnQWRkaW5nIGN1c3RvbSBkb21haW4uLi5cXG4nKVxuICBcbiAgLy8gTG9hZCBjb25maWdcbiAgY29uc3QgY29uZmlnID0gbG9hZERldkRvY0NvbmZpZyhwcm9qZWN0Um9vdClcbiAgaWYgKCFjb25maWcpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1Byb2plY3Qgbm90IGluaXRpYWxpemVkLicpXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBpbml0XCIgdG8gaW5pdGlhbGl6ZSwgdGhlbiBcImRldmRvYyBkZXBsb3lcIiB0byBkZXBsb3kuJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gR2V0IEFQSSBrZXkgLSByZXF1aXJlZCBiZWNhdXNlIGN1c3RvbSBkb21haW5zIG5lZWQgYSBkZXBsb3llZCBwcm9qZWN0XG4gIGNvbnN0IGFwaUtleSA9IGdldEFwaUtleShvcHRpb25zLCBjb25maWcpXG4gIGlmICghYXBpS2V5KSB7XG4gICAgbG9nZ2VyLmVycm9yKCdQcm9qZWN0IG5vdCBkZXBsb3llZCB5ZXQuJylcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBjb25zb2xlLmxvZygnICBDdXN0b20gZG9tYWlucyByZXF1aXJlIGEgZGVwbG95ZWQgcHJvamVjdC4nKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGNvbnNvbGUubG9nKCcgIFRvIHNldCB1cCBhIGN1c3RvbSBkb21haW46JylcbiAgICBjb25zb2xlLmxvZygnICAgIDEuIERlcGxveSB5b3VyIHByb2plY3QgZmlyc3Q6ICBkZXZkb2MgZGVwbG95JylcbiAgICBjb25zb2xlLmxvZygnICAgIDIuIFRoZW4gYWRkIHlvdXIgZG9tYWluOiAgICAgICBkZXZkb2MgZG9tYWluIGFkZCAnICsgY3VzdG9tRG9tYWluKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBOb3JtYWxpemUgYW5kIHZhbGlkYXRlIGRvbWFpblxuICBjb25zdCBkb21haW4gPSBub3JtYWxpemVEb21haW4oY3VzdG9tRG9tYWluKVxuICBjb25zdCB2YWxpZGF0aW9uID0gaXNWYWxpZERvbWFpbkZvcm1hdChkb21haW4pXG4gIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgIGxvZ2dlci5lcnJvcih2YWxpZGF0aW9uLmVycm9yISlcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgbG9nZ2VyLmluZm8oYERvbWFpbjogJHtkb21haW59YClcbiAgY29uc29sZS5sb2coJycpXG4gIFxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YXBpVXJsfS9hcGkvZG9tYWlucy9hZGRgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7YXBpS2V5fWAsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBjdXN0b21Eb21haW46IGRvbWFpbiB9KSxcbiAgICB9KVxuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBEb21haW5BZGRSZXNwb25zZVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IocmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gYWRkIGRvbWFpbicpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG4gICAgXG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYOKckyBEb21haW4gJHtkb21haW59IGFkZGVkIWApXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgY29uc29sZS5sb2coJyAgTmV4dCwgYWRkIHRoZXNlIEROUyByZWNvcmRzIHRvIHlvdXIgZG9tYWluIHByb3ZpZGVyOicpXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgY29uc29sZS5sb2coJyAgMS4gQ05BTUUgUmVjb3JkOicpXG4gICAgY29uc29sZS5sb2coYCAgICAgTmFtZTogICR7cmVzdWx0LnZlcmlmaWNhdGlvbi5jbmFtZS5uYW1lfWApXG4gICAgY29uc29sZS5sb2coYCAgICAgVmFsdWU6ICR7cmVzdWx0LnZlcmlmaWNhdGlvbi5jbmFtZS52YWx1ZX1gKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGNvbnNvbGUubG9nKCcgIDIuIFRYVCBSZWNvcmQgKGZvciB2ZXJpZmljYXRpb24pOicpXG4gICAgY29uc29sZS5sb2coYCAgICAgTmFtZTogICR7cmVzdWx0LnZlcmlmaWNhdGlvbi50eHQubmFtZX1gKVxuICAgIGNvbnNvbGUubG9nKGAgICAgIFZhbHVlOiAke3Jlc3VsdC52ZXJpZmljYXRpb24udHh0LnZhbHVlfWApXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgbG9nZ2VyLmluZm8oJ0FmdGVyIGFkZGluZyBETlMgcmVjb3JkcywgcnVuOicpXG4gICAgY29uc29sZS5sb2coJyAgZGV2ZG9jIGRvbWFpbiB2ZXJpZnknKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhZGQgZG9tYWluOiAke21lc3NhZ2V9YClcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRG9tYWluIFN0YXR1cyBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENoZWNrIHN0YXR1cyBvZiBjdXN0b20gZG9tYWluXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb21haW5TdGF0dXMob3B0aW9uczogRG9tYWluT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMXG4gIFxuICAvLyBMb2FkIGNvbmZpZ1xuICBjb25zdCBjb25maWcgPSBsb2FkRGV2RG9jQ29uZmlnKHByb2plY3RSb290KVxuICBpZiAoIWNvbmZpZykge1xuICAgIGxvZ2dlci5lcnJvcignUHJvamVjdCBub3QgaW5pdGlhbGl6ZWQuJylcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGluaXRcIiB0byBpbml0aWFsaXplLCB0aGVuIFwiZGV2ZG9jIGRlcGxveVwiIHRvIGRlcGxveS4nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBHZXQgQVBJIGtleVxuICBjb25zdCBhcGlLZXkgPSBnZXRBcGlLZXkob3B0aW9ucywgY29uZmlnKVxuICBpZiAoIWFwaUtleSkge1xuICAgIGxvZ2dlci5lcnJvcignUHJvamVjdCBub3QgZGVwbG95ZWQgeWV0LicpXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgbG9nZ2VyLmluZm8oJ0RlcGxveSB5b3VyIHByb2plY3QgZmlyc3Qgd2l0aCBcImRldmRvYyBkZXBsb3lcIicpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kb21haW5zL3N0YXR1c2AsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICB9KVxuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBEb21haW5TdGF0dXNSZXNwb25zZVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGxvZ2dlci5lcnJvcihyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBnZXQgZG9tYWluIHN0YXR1cycpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgY29uc29sZS5sb2coJyAgQ3VzdG9tIERvbWFpbiBTdGF0dXMnKVxuICAgIGNvbnNvbGUubG9nKCcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tJylcbiAgICBcbiAgICBpZiAoIXJlc3VsdC5oYXNDdXN0b21Eb21haW4pIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgY29uc29sZS5sb2coJyAgTm8gY3VzdG9tIGRvbWFpbiBjb25maWd1cmVkLicpXG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGNvbnNvbGUubG9nKCcgIFlvdXIgZG9jcyBhcmUgYXZhaWxhYmxlIGF0OicpXG4gICAgICBjb25zb2xlLmxvZyhgICAke2xvZ2dlci5jeWFuKHJlc3VsdC5wcm9qZWN0VXJsKX1gKVxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBsb2dnZXIuaW5mbygnVG8gYWRkIGEgY3VzdG9tIGRvbWFpbiwgcnVuOicpXG4gICAgICBjb25zb2xlLmxvZygnICBkZXZkb2MgZG9tYWluIGFkZCBkb2NzLnlvdXJkb21haW4uY29tJylcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIFxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGNvbnNvbGUubG9nKGAgIERvbWFpbjogICR7cmVzdWx0LmRvbWFpbn1gKVxuICAgIGNvbnNvbGUubG9nKGAgIFN0YXR1czogICR7Z2V0U3RhdHVzRGlzcGxheShyZXN1bHQuc3RhdHVzIHx8ICd1bmtub3duJyl9YClcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcgIFlvdXIgZG9jcyBhcmUgYXZhaWxhYmxlIGF0OicpXG4gICAgICBjb25zb2xlLmxvZyhgICAke2xvZ2dlci5jeWFuKHJlc3VsdC5jdXN0b21VcmwgfHwgYGh0dHBzOi8vJHtyZXN1bHQuZG9tYWlufWApfWApXG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGNvbnNvbGUubG9nKCcgIEFsc28gYWNjZXNzaWJsZSBhdDonKVxuICAgICAgY29uc29sZS5sb2coYCAgJHtyZXN1bHQucHJvamVjdFVybH1gKVxuICAgIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3BlbmRpbmcnICYmIHJlc3VsdC5kbnNSZWNvcmRzKSB7XG4gICAgICBjb25zb2xlLmxvZygnICBBZGQgdGhlc2UgRE5TIHJlY29yZHMgdG8geW91ciBkb21haW46JylcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgY29uc29sZS5sb2coJyAgQ05BTUUgUmVjb3JkOicpXG4gICAgICBjb25zb2xlLmxvZyhgICAgIE5hbWU6ICAke3Jlc3VsdC5kbnNSZWNvcmRzLmNuYW1lLm5hbWV9YClcbiAgICAgIGNvbnNvbGUubG9nKGAgICAgVmFsdWU6ICR7cmVzdWx0LmRuc1JlY29yZHMuY25hbWUudmFsdWV9YClcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgY29uc29sZS5sb2coJyAgVFhUIFJlY29yZDonKVxuICAgICAgY29uc29sZS5sb2coYCAgICBOYW1lOiAgJHtyZXN1bHQuZG5zUmVjb3Jkcy50eHQubmFtZX1gKVxuICAgICAgY29uc29sZS5sb2coYCAgICBWYWx1ZTogJHtyZXN1bHQuZG5zUmVjb3Jkcy50eHQudmFsdWV9YClcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ0FmdGVyIGFkZGluZyBETlMgcmVjb3JkcywgcnVuOiBkZXZkb2MgZG9tYWluIHZlcmlmeScpXG4gICAgfSBlbHNlIGlmIChyZXN1bHQubWVzc2FnZSkge1xuICAgICAgY29uc29sZS5sb2coYCAgJHtyZXN1bHQubWVzc2FnZX1gKVxuICAgIH1cbiAgICBcbiAgICBpZiAocmVzdWx0Lm5leHRTdGVwKSB7XG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGxvZ2dlci5pbmZvKGBOZXh0OiAke3Jlc3VsdC5uZXh0U3RlcH1gKVxuICAgIH1cbiAgICBcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0IGRvbWFpbiBzdGF0dXM6ICR7bWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5cbi8qKlxuICogR2V0IGRpc3BsYXkgc3RyaW5nIGZvciBzdGF0dXNcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzRGlzcGxheShzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgY2FzZSAncGVuZGluZyc6XG4gICAgICByZXR1cm4gbG9nZ2VyLnllbGxvdygn4o+zIFBlbmRpbmcgRE5TIGNvbmZpZ3VyYXRpb24nKVxuICAgIGNhc2UgJ2Ruc192ZXJpZmllZCc6XG4gICAgICByZXR1cm4gbG9nZ2VyLmN5YW4oJ+KckyBETlMgdmVyaWZpZWQsIFNTTCBwcm92aXNpb25pbmcuLi4nKVxuICAgIGNhc2UgJ3NzbF9wcm92aXNpb25pbmcnOlxuICAgICAgcmV0dXJuIGxvZ2dlci5jeWFuKCfwn5SSIFNTTCBjZXJ0aWZpY2F0ZSBwcm92aXNpb25pbmcuLi4nKVxuICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICByZXR1cm4gbG9nZ2VyLmdyZWVuKCfinJMgQWN0aXZlJylcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gbG9nZ2VyLnJlZCgn4pyXIEVycm9yJylcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXR1c1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEb21haW4gVmVyaWZ5IENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVmVyaWZ5IEROUyBjb25maWd1cmF0aW9uIGZvciBjdXN0b20gZG9tYWluXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb21haW5WZXJpZnkob3B0aW9uczogRG9tYWluT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMXG4gIFxuICBsb2dnZXIuaW5mbygnVmVyaWZ5aW5nIEROUyBjb25maWd1cmF0aW9uLi4uXFxuJylcbiAgXG4gIC8vIExvYWQgY29uZmlnXG4gIGNvbnN0IGNvbmZpZyA9IGxvYWREZXZEb2NDb25maWcocHJvamVjdFJvb3QpXG4gIGlmICghY29uZmlnKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdQcm9qZWN0IG5vdCBpbml0aWFsaXplZC4nKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgaW5pdFwiIHRvIGluaXRpYWxpemUsIHRoZW4gXCJkZXZkb2MgZGVwbG95XCIgdG8gZGVwbG95LicpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIC8vIEdldCBBUEkga2V5XG4gIGNvbnN0IGFwaUtleSA9IGdldEFwaUtleShvcHRpb25zLCBjb25maWcpXG4gIGlmICghYXBpS2V5KSB7XG4gICAgbG9nZ2VyLmVycm9yKCdQcm9qZWN0IG5vdCBkZXBsb3llZCB5ZXQuJylcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBsb2dnZXIuaW5mbygnRGVwbG95IHlvdXIgcHJvamVjdCBmaXJzdCB3aXRoIFwiZGV2ZG9jIGRlcGxveVwiJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL2RvbWFpbnMvdmVyaWZ5YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHt9KSxcbiAgICB9KVxuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBEb21haW5WZXJpZnlSZXNwb25zZVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGxvZ2dlci5lcnJvcihyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byB2ZXJpZnkgZG9tYWluJylcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBjb25zb2xlLmxvZygnICBETlMgVmVyaWZpY2F0aW9uIFJlc3VsdHMnKVxuICAgIGNvbnNvbGUubG9nKCcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgY29uc29sZS5sb2coYCAgRG9tYWluOiAke3Jlc3VsdC5kb21haW59YClcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBcbiAgICAvLyBDTkFNRSBjaGVja1xuICAgIGNvbnNvbGUubG9nKCcgIENOQU1FIFJlY29yZDonKVxuICAgIGlmIChyZXN1bHQuY2hlY2tzLmNuYW1lLnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZyhgICAgICR7bG9nZ2VyLmdyZWVuKCfinJMnKX0gRm91bmQ6ICR7cmVzdWx0LmNoZWNrcy5jbmFtZS52YWx1ZX1gKVxuICAgIH0gZWxzZSBpZiAocmVzdWx0LmNoZWNrcy5jbmFtZS5mb3VuZCkge1xuICAgICAgY29uc29sZS5sb2coYCAgICAke2xvZ2dlci55ZWxsb3coJyEnKX0gRm91bmQgYnV0IGluY29ycmVjdDogJHtyZXN1bHQuY2hlY2tzLmNuYW1lLnZhbHVlfWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgICAgRXhwZWN0ZWQ6ICR7cmVzdWx0LmNoZWNrcy5jbmFtZS5leHBlY3RlZH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgICAgICR7bG9nZ2VyLnJlZCgn4pyXJyl9IE5vdCBmb3VuZGApXG4gICAgICBjb25zb2xlLmxvZyhgICAgICAgRXhwZWN0ZWQ6ICR7cmVzdWx0LmNoZWNrcy5jbmFtZS5leHBlY3RlZH1gKVxuICAgIH1cbiAgICBcbiAgICAvLyBUWFQgY2hlY2tcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBjb25zb2xlLmxvZygnICBUWFQgVmVyaWZpY2F0aW9uIFJlY29yZDonKVxuICAgIGlmIChyZXN1bHQuY2hlY2tzLnR4dC52ZXJpZmllZCkge1xuICAgICAgY29uc29sZS5sb2coYCAgICAke2xvZ2dlci5ncmVlbign4pyTJyl9IFZlcmlmaWVkYClcbiAgICB9IGVsc2UgaWYgKHJlc3VsdC5jaGVja3MudHh0LmZvdW5kKSB7XG4gICAgICBjb25zb2xlLmxvZyhgICAgICR7bG9nZ2VyLnllbGxvdygnIScpfSBGb3VuZCBidXQgdmFsdWUgZG9lc24ndCBtYXRjaGApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICAgJHtsb2dnZXIucmVkKCfinJcnKX0gTm90IGZvdW5kYClcbiAgICAgIGNvbnNvbGUubG9nKGAgICAgICBFeHBlY3RlZDogJHtyZXN1bHQuY2hlY2tzLnR4dC5leHBlY3RlZH1gKVxuICAgIH1cbiAgICBcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdETlMgdmVyaWZpZWQhJylcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgY29uc29sZS5sb2coYCAgJHtyZXN1bHQubWVzc2FnZX1gKVxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBzdGF0dXNcIiB0byBjaGVjayBTU0wgcHJvdmlzaW9uaW5nIHByb2dyZXNzLicpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci53YXJuKCdETlMgdmVyaWZpY2F0aW9uIGluY29tcGxldGUnKVxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBjb25zb2xlLmxvZyhgICAke3Jlc3VsdC5tZXNzYWdlfWApXG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGxvZ2dlci5pbmZvKCdETlMgY2hhbmdlcyBjYW4gdGFrZSAxLTI0IGhvdXJzIHRvIHByb3BhZ2F0ZS4nKVxuICAgICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBkb21haW4gdmVyaWZ5XCIgYWdhaW4gbGF0ZXIuJylcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHZlcmlmeSBkb21haW46ICR7bWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEb21haW4gUmVtb3ZlIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVtb3ZlIGN1c3RvbSBkb21haW4gZnJvbSBwcm9qZWN0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb21haW5SZW1vdmUoY3VzdG9tRG9tYWluOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM6IERvbWFpbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBwcm9jZXNzLmN3ZCgpXG4gIGNvbnN0IGFwaVVybCA9IG9wdGlvbnMudXJsIHx8IHByb2Nlc3MuZW52LkRFVkRPQ19BUElfVVJMIHx8IERFRkFVTFRfQVBJX1VSTFxuICBcbiAgbG9nZ2VyLmluZm8oJ1JlbW92aW5nIGN1c3RvbSBkb21haW4uLi5cXG4nKVxuICBcbiAgLy8gTG9hZCBjb25maWdcbiAgY29uc3QgY29uZmlnID0gbG9hZERldkRvY0NvbmZpZyhwcm9qZWN0Um9vdClcbiAgaWYgKCFjb25maWcpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1Byb2plY3Qgbm90IGluaXRpYWxpemVkLicpXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBpbml0XCIgdG8gaW5pdGlhbGl6ZSwgdGhlbiBcImRldmRvYyBkZXBsb3lcIiB0byBkZXBsb3kuJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gR2V0IEFQSSBrZXlcbiAgY29uc3QgYXBpS2V5ID0gZ2V0QXBpS2V5KG9wdGlvbnMsIGNvbmZpZylcbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1Byb2plY3Qgbm90IGRlcGxveWVkIHlldC4nKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5pbmZvKCdEZXBsb3kgeW91ciBwcm9qZWN0IGZpcnN0IHdpdGggXCJkZXZkb2MgZGVwbG95XCInKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICB0cnkge1xuICAgIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICAgIGlmIChjdXN0b21Eb21haW4pIHtcbiAgICAgIGJvZHkuY3VzdG9tRG9tYWluID0gbm9ybWFsaXplRG9tYWluKGN1c3RvbURvbWFpbilcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kb21haW5zL3JlbW92ZWAsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pXG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIERvbWFpblJlbW92ZVJlc3BvbnNlXG4gICAgXG4gICAgaWYgKCFyZXNwb25zZS5vayB8fCAhcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byByZW1vdmUgZG9tYWluJylcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBcbiAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIERvbWFpbiAke3Jlc3VsdC5kb21haW59IHJlbW92ZWRgKVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGNvbnNvbGUubG9nKCcgIFlvdXIgZG9jcyByZW1haW4gYWNjZXNzaWJsZSBhdCB0aGUgZGVmYXVsdCBzdWJkb21haW4uJylcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBsb2dnZXIuaW5mbygnWW91IGNhbiBhZGQgYSBuZXcgY3VzdG9tIGRvbWFpbiBhbnl0aW1lIHdpdGg6JylcbiAgICBjb25zb2xlLmxvZygnICBkZXZkb2MgZG9tYWluIGFkZCBkb2NzLnlvdXJkb21haW4uY29tJylcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcmVtb3ZlIGRvbWFpbjogJHttZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cbiJdfQ==
package/dist/cli/index.js CHANGED
@@ -12,6 +12,7 @@ const keys_1 = require("./commands/keys");
12
12
  const whoami_1 = require("./commands/whoami");
13
13
  const upload_1 = require("./commands/upload");
14
14
  const ai_1 = require("./commands/ai");
15
+ const domain_1 = require("./commands/domain");
15
16
  const packageJson = require('../../package.json');
16
17
  const program = new commander_1.Command();
17
18
  program
@@ -112,5 +113,33 @@ program
112
113
  .option('-u, --url <url>', 'API URL')
113
114
  .option('-k, --api-key <key>', 'API key for authentication')
114
115
  .action(upload_1.upload);
116
+ // Domain management - custom domains (one per project, free)
117
+ const domainCmd = program
118
+ .command('domain')
119
+ .description('Manage custom domain for your documentation');
120
+ domainCmd
121
+ .command('add <custom-domain>')
122
+ .description('Add a custom domain (e.g., docs.example.com)')
123
+ .option('-u, --url <url>', 'API URL')
124
+ .option('-k, --api-key <key>', 'API key for authentication')
125
+ .action(domain_1.domainAdd);
126
+ domainCmd
127
+ .command('status')
128
+ .description('Check custom domain status and DNS configuration')
129
+ .option('-u, --url <url>', 'API URL')
130
+ .option('-k, --api-key <key>', 'API key for authentication')
131
+ .action(domain_1.domainStatus);
132
+ domainCmd
133
+ .command('verify')
134
+ .description('Verify DNS configuration for your custom domain')
135
+ .option('-u, --url <url>', 'API URL')
136
+ .option('-k, --api-key <key>', 'API key for authentication')
137
+ .action(domain_1.domainVerify);
138
+ domainCmd
139
+ .command('remove [custom-domain]')
140
+ .description('Remove custom domain from project')
141
+ .option('-u, --url <url>', 'API URL')
142
+ .option('-k, --api-key <key>', 'API key for authentication')
143
+ .action(domain_1.domainRemove);
115
144
  program.parse(process.argv);
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUN2RCxzQ0FBbUM7QUFFbkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDZCxXQUFXLENBQUMsd0NBQXdDLENBQUM7S0FDckQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVoQyxPQUFPO0tBQ0osT0FBTyxDQUFDLDRCQUE0QixDQUFDO0tBQ3JDLFdBQVcsQ0FBQyx3Q0FBd0MsQ0FBQztLQUNyRCxNQUFNLENBQUMsdUJBQXVCLEVBQUUsMkNBQTJDLENBQUM7S0FDNUUsTUFBTSxDQUFDLDZCQUE2QixFQUFFLG1EQUFtRCxDQUFDO0tBQzFGLE1BQU0sQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUM7S0FDN0MsTUFBTSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQztLQUN0RCxNQUFNLENBQUMsYUFBYSxFQUFFLGlFQUFpRSxDQUFDO0tBQ3hGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUNqRSxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsNENBQTRDLENBQUM7S0FDekQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQztLQUMzQyxNQUFN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QThDLENBQUM7S0FDM0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztLQUNwQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLENBQUM7S0FDM0QsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLFNBQVM7S0FDTixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLHNCQUFzQixDQUFDO0tBQ25DLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxtQkFBVSxDQUFDLENBQUM7QUFFdEIsc0JBQXNCO0FBQ3RCLE9BQU87S0FDSixPQUFPLENBQUMsbUJBQW1CLENBQUM7S0FDNUIsV0FBVyxDQUFDLGdFQUFnRSxDQUFDO0tBQzdFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxlQUFNLENBQUMsQ0FBQztBQUVsQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUnO1xuaW1wb3J0IHsgaW5pdCB9IGZyb20gJy4vY29tbWFuZHMvaW5pdCc7XG5pbXBvcnQgeyBkZXYgfSBmcm9tICcuL2NvbW1hbmRzL2Rldic7XG5pbXBvcnQgeyBidWlsZCB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQnO1xuaW1wb3J0IHsgc3RhcnQgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXJ0JztcbmltcG9ydCB7IGNoZWNrIH0gZnJvbSAnLi9jb21tYW5kcy9jaGVjayc7XG5pbXBvcnQgeyBkZXBsb3kgfSBmcm9tICcuL2NvbW1hbmRzL2RlcGxveSc7XG5pbXBvcnQgeyBsaXN0S2V5cywgcmVnZW5lcmF0ZUtleSB9IGZyb20gJy4vY29tbWFuZHMva2V5cyc7XG5pbXBvcnQgeyB3aG9hbWkgfSBmcm9tICcuL2NvbW1hbmRzL3dob2FtaSc7XG5pbXBvcnQgeyB1cGxvYWQsIGxpc3RBc3NldHMgfSBmcm9tICcuL2NvbW1hbmRzL3VwbG9hZCc7XG5pbXBvcnQgeyBhaSB9IGZyb20gJy4vY29tbWFuZHMvYWknO1xuXG5jb25zdCBwYWNrYWdlSnNvbiA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAubmFtZSgnZGV2ZG9jJylcbiAgLmRlc2NyaXB0aW9uKCdEb2N1bWVudGF0aW9uIGZyYW1ld29yayBmb3IgZGV2ZWxvcGVycycpXG4gIC52ZXJzaW9uKHBhY2thZ2VKc29uLnZlcnNpb24pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjcmVhdGUgW3Byb2plY3QtZGlyZWN0b3J5XScpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmV3IERldkRvYyBkb2N1bWVudGF0aW9uIHNpdGUnKVxuICAub3B0aW9uKCctdCwgLS10ZW1wbGF0ZSA8dHlwZT4nLCAnVGVtcGxhdGUgdG8gdXNlIChiYXNpYywgb3BlbmFwaSwgZ3JhcGhxbCknKVxuICAub3B0aW9uKCctcywgLS1zdWJkb21haW4gPHN1YmRvbWFpbj4nLCAnU3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKGUuZy4sIG15LWRvY3MuZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy0tbm8tZ2l0JywgJ1NraXAgZ2l0IGluaXRpYWxpemF0aW9uJylcbiAgLm9wdGlvbignLS1uby1pbnN0YWxsJywgJ1NraXAgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMnKVxuICAub3B0aW9uKCctLWFpIFt0b29sXScsICdTZXQgdXAgQUkgYWdlbnRzIChjbGF1ZGUsIGN1cnNvciwgYm90aCwgb3IganVzdCAtLWFpIHRvIGNob29zZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLmFjdGlvbihjcmVhdGUpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbml0JylcbiAgLmRlc2NyaXB0aW9uKCdJbml0aWFsaXplL3JlZ2lzdGVyIHByb2plY3Qgd2l0aCBCcmFpbmZpc2gnKVxuICAub3B0aW9uKCctcywgLS1zbHVnIDxzbHVnPicsICdQcm9qZWN0IHNsdWcnKVxuICAub3B0aW9uKCctLXN1YmRvbWFpbiA8c3ViZG9tYWluPicsICdTdWJkb21haW4gZm9yIHlvdXIgZG9jcyAoZS5nLiwgbXktZG9jcy5kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLWYsIC0tZm9yY2UnLCAnT3ZlcndyaXRlIGV4aXN0aW5nIC5kZXZkb2MuanNvbicpXG4gIC5vcHRpb24oJy0tYWkgW3Rvb2xdJywgJ1NldCB1cCBBSSBhZ2VudHMgKGNsYXVkZSwgY3Vyc29yLCBib3RoLCBvciBqdXN0IC0tYWkgdG8gY2hvb3NlKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAuYWN0aW9uKGluaXQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdkZXYnKVxuICAuZGVzY3JpcHRpb24oJ1N0YXJ0IGRldmVsb3BtZW50IHNlcnZlciB3aXRoIGhvdCByZWxvYWQnKVxuICAub3B0aW9uKCctcCwgLS1wb3J0IDxwb3J0PicsICdQb3J0IHRvIHJ1biB0aGUgc2VydmVyIG9uJywgJzMzMzMnKVxuICAub3B0aW9uKCctSCwgLS1ob3N0IDxob3N0PicsICdIb3N0IHRvIGJpbmQgdGhlIHNlcnZlciB0bycsICdsb2NhbGhvc3QnKVxuICAub3B0aW9uKCctbywgLS1vcGVuJywgJ09wZW4gYnJvd3NlciBhdXRvbWF0aWNhbGx5JywgdHJ1ZSlcbiAgLm9wdGlvbignLS1uby1vcGVuJywgJ0RvIG5vdCBvcGVuIGJyb3dzZXIgYXV0b21hdGljYWxseScpXG4gIC5hY3Rpb24oZGV2KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnYnVpbGQnKVxuICAuZGVzY3JpcHRpb24oJ0J1aWxkIGRvY3VtZW50YXRpb24gZm9yIHByb2R1Y3Rpb24nKVxuICAub3B0aW9uKCctbywgLS1vdXRwdXQgPGRpcj4nLCAnT3V0cHV0IGRpcmVjdG9yeScsICdkaXN0JylcbiAgLmFjdGlvbihidWlsZCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3N0YXJ0JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBwcm9kdWN0aW9uIHNlcnZlcicpXG4gIC5vcHRpb24oJy1wLCAtLXBvcnQgPHBvcnQ+JywgJ1BvcnQgdG8gcnVuIHRoZSBzZXJ2ZXIgb24nLCAnMzAwMCcpXG4gIC5hY3Rpb24oc3RhcnQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjaycpXG4gIC5kZXNjcmlwdGlvbignVmFsaWRhdGUgZG9jcy5qc29uIGFuZCBNRFggZmlsZXMnKVxuICAuYWN0aW9uKGNoZWNrKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnYWknKVxuICAuZGVzY3JpcHRpb24oJ1NldCB1cCBBSSBhZ2VudCBjb25maWd1cmF0aW9uIChDbGF1ZGUgQ29kZSBza2lsbHMsIEN1cnNvciBydWxlcyknKVxuICAub3B0aW9uKCctdCwgLS10b29sIDx0b29sPicsICdBSSB0b29sIHRvIGNvbmZpZ3VyZSAoY2xhdWRlLCBjdXJzb3IsIGJvdGgpJylcbiAgLmFjdGlvbihhaSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2RlcGxveScpXG4gIC5kZXNjcmlwdGlvbignRGVwbG95IGRvY3VtZW50YXRpb24gdG8gRGV2RG9jIHBsYXRmb3JtJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRlcGxveSk7XG5cbi8vIEtleXMgbWFuYWdlbWVudFxuY29uc3Qga2V5c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2tleXMnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSBBUEkga2V5cyBmb3IgeW91ciBwcm9qZWN0Jyk7XG5cbmtleXNDbWRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgY3VycmVudCBBUEkga2V5IGluZm8nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24obGlzdEtleXMpO1xuXG5rZXlzQ21kXG4gIC5jb21tYW5kKCdyZWdlbmVyYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBhIG5ldyBBUEkga2V5IChpbnZhbGlkYXRlcyB0aGUgb2xkIG9uZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24ocmVnZW5lcmF0ZUtleSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3dob2FtaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBjdXJyZW50IHByb2plY3QgaW5mb3JtYXRpb24nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24od2hvYW1pKTtcblxuLy8gQXNzZXRzIG1hbmFnZW1lbnRcbmNvbnN0IGFzc2V0c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2Fzc2V0cycpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIHByb2plY3QgYXNzZXRzIChpbWFnZXMsIGZpbGVzKScpO1xuXG5hc3NldHNDbWRcbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKG1heCAyNU1CIHBlciBmaWxlKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24odXBsb2FkKTtcblxuYXNzZXRzQ21kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVwbG9hZGVkIGFzc2V0cycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24obGlzdEFzc2V0cyk7XG5cbi8vIFNob3J0Y3V0IGZvciB1cGxvYWRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKHNob3J0Y3V0IGZvciBcImRldmRvYyBhc3NldHMgdXBsb2FkXCIpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbih1cGxvYWQpO1xuXG5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXX0=
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUN2RCxzQ0FBbUM7QUFDbkMsOENBQXdGO0FBRXhGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWxELE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQU8sRUFBRSxDQUFDO0FBRTlCLE9BQU87S0FDSixJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ2QsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO0tBQ3JELE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFaEMsT0FBTztLQUNKLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztLQUNyQyxXQUFXLENBQUMsd0NBQXdDLENBQUM7S0FDckQsTUFBTSxDQUFDLHVCQUF1QixFQUFFLDJDQUEyQyxDQUFDO0tBQzVFLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxtREFBbUQsQ0FBQztLQUMxRixNQUFNLENBQUMsVUFBVSxFQUFFLHlCQUF5QixDQUFDO0tBQzdDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsOEJBQThCLENBQUM7S0FDdEQsTUFBTSxDQUFDLGFBQWEsRUFBRSxpRUFBaUUsQ0FBQztLQUN4RixNQUFNLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUM7S0FDakUsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLE9BQU87S0FDSixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLDRDQUE0QyxDQUFDO0tBQ3pELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENB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NEIsQ0FBQztLQUMzRCxNQUFNLENBQUMscUJBQVksQ0FBQyxDQUFDO0FBRXhCLFNBQVM7S0FDTixPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ2pCLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0tBQ3BDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw0QkFBNEIsQ0FBQztLQUMzRCxNQUFNLENBQUMscUJBQVksQ0FBQyxDQUFDO0FBRXhCLFNBQVM7S0FDTixPQUFPLENBQUMsd0JBQXdCLENBQUM7S0FDakMsV0FBVyxDQUFDLG1DQUFtQyxDQUFDO0tBQ2hELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxxQkFBWSxDQUFDLENBQUM7QUFFeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJy4vY29tbWFuZHMvY3JlYXRlJztcbmltcG9ydCB7IGluaXQgfSBmcm9tICcuL2NvbW1hbmRzL2luaXQnO1xuaW1wb3J0IHsgZGV2IH0gZnJvbSAnLi9jb21tYW5kcy9kZXYnO1xuaW1wb3J0IHsgYnVpbGQgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkJztcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSAnLi9jb21tYW5kcy9zdGFydCc7XG5pbXBvcnQgeyBjaGVjayB9IGZyb20gJy4vY29tbWFuZHMvY2hlY2snO1xuaW1wb3J0IHsgZGVwbG95IH0gZnJvbSAnLi9jb21tYW5kcy9kZXBsb3knO1xuaW1wb3J0IHsgbGlzdEtleXMsIHJlZ2VuZXJhdGVLZXkgfSBmcm9tICcuL2NvbW1hbmRzL2tleXMnO1xuaW1wb3J0IHsgd2hvYW1pIH0gZnJvbSAnLi9jb21tYW5kcy93aG9hbWknO1xuaW1wb3J0IHsgdXBsb2FkLCBsaXN0QXNzZXRzIH0gZnJvbSAnLi9jb21tYW5kcy91cGxvYWQnO1xuaW1wb3J0IHsgYWkgfSBmcm9tICcuL2NvbW1hbmRzL2FpJztcbmltcG9ydCB7IGRvbWFpbkFkZCwgZG9tYWluU3RhdHVzLCBkb21haW5WZXJpZnksIGRvbWFpblJlbW92ZSB9IGZyb20gJy4vY29tbWFuZHMvZG9tYWluJztcblxuY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKTtcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2RldmRvYycpXG4gIC5kZXNjcmlwdGlvbignRG9jdW1lbnRhdGlvbiBmcmFtZXdvcmsgZm9yIGRldmVsb3BlcnMnKVxuICAudmVyc2lvbihwYWNrYWdlSnNvbi52ZXJzaW9uKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY3JlYXRlIFtwcm9qZWN0LWRpcmVjdG9yeV0nKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5ldyBEZXZEb2MgZG9jdW1lbnRhdGlvbiBzaXRlJylcbiAgLm9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHR5cGU+JywgJ1RlbXBsYXRlIHRvIHVzZSAoYmFzaWMsIG9wZW5hcGksIGdyYXBocWwpJylcbiAgLm9wdGlvbignLXMsIC0tc3ViZG9tYWluIDxzdWJkb21haW4+JywgJ1N1YmRvbWFpbiBmb3IgeW91ciBkb2NzIChlLmcuLCBteS1kb2NzLmRldmRvYy5zaCknKVxuICAub3B0aW9uKCctLW5vLWdpdCcsICdTa2lwIGdpdCBpbml0aWFsaXphdGlvbicpXG4gIC5vcHRpb24oJy0tbm8taW5zdGFsbCcsICdTa2lwIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzJylcbiAgLm9wdGlvbignLS1haSBbdG9vbF0nLCAnU2V0IHVwIEFJIGFnZW50cyAoY2xhdWRlLCBjdXJzb3IsIGJvdGgsIG9yIGp1c3QgLS1haSB0byBjaG9vc2UpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5hY3Rpb24oY3JlYXRlKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnaW5pdCcpXG4gIC5kZXNjcmlwdGlvbignSW5pdGlhbGl6ZS9yZWdpc3RlciBwcm9qZWN0IHdpdGggQnJhaW5maXNoJylcbiAgLm9wdGlvbignLXMsIC0tc2x1ZyA8c2x1Zz4nLCAnUHJvamVjdCBzbHVnJylcbiAgLm9wdGlvbignLS1zdWJkb21haW4gPHN1YmRvbWFpbj4nLCAnU3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKGUuZy4sIG15LWRvY3MuZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy1mLCAtLWZvcmNlJywgJ092ZXJ3cml0ZSBleGlzdGluZyAuZGV2ZG9jLmpzb24nKVxuICAub3B0aW9uKCctLWFpIFt0b29sXScsICdTZXQgdXAgQUkgYWdlbnRzIChjbGF1ZGUsIGN1cnNvciwgYm90aCwgb3IganVzdCAtLWFpIHRvIGNob29zZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLmFjdGlvbihpbml0KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZGV2JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aCBob3QgcmVsb2FkJylcbiAgLm9wdGlvbignLXAsIC0tcG9ydCA8cG9ydD4nLCAnUG9ydCB0byBydW4gdGhlIHNlcnZlciBvbicsICczMzMzJylcbiAgLm9wdGlvbignLUgsIC0taG9zdCA8aG9zdD4nLCAnSG9zdCB0byBiaW5kIHRoZSBzZXJ2ZXIgdG8nLCAnbG9jYWxob3N0JylcbiAgLm9wdGlvbignLW8sIC0tb3BlbicsICdPcGVuIGJyb3dzZXIgYXV0b21hdGljYWxseScsIHRydWUpXG4gIC5vcHRpb24oJy0tbm8tb3BlbicsICdEbyBub3Qgb3BlbiBicm93c2VyIGF1dG9tYXRpY2FsbHknKVxuICAuYWN0aW9uKGRldik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2J1aWxkJylcbiAgLmRlc2NyaXB0aW9uKCdCdWlsZCBkb2N1bWVudGF0aW9uIGZvciBwcm9kdWN0aW9uJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxkaXI+JywgJ091dHB1dCBkaXJlY3RvcnknLCAnZGlzdCcpXG4gIC5hY3Rpb24oYnVpbGQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzdGFydCcpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgcHJvZHVjdGlvbiBzZXJ2ZXInKVxuICAub3B0aW9uKCctcCwgLS1wb3J0IDxwb3J0PicsICdQb3J0IHRvIHJ1biB0aGUgc2VydmVyIG9uJywgJzMwMDAnKVxuICAuYWN0aW9uKHN0YXJ0KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2snKVxuICAuZGVzY3JpcHRpb24oJ1ZhbGlkYXRlIGRvY3MuanNvbiBhbmQgTURYIGZpbGVzJylcbiAgLmFjdGlvbihjaGVjayk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2FpJylcbiAgLmRlc2NyaXB0aW9uKCdTZXQgdXAgQUkgYWdlbnQgY29uZmlndXJhdGlvbiAoQ2xhdWRlIENvZGUgc2tpbGxzLCBDdXJzb3IgcnVsZXMpJylcbiAgLm9wdGlvbignLXQsIC0tdG9vbCA8dG9vbD4nLCAnQUkgdG9vbCB0byBjb25maWd1cmUgKGNsYXVkZSwgY3Vyc29yLCBib3RoKScpXG4gIC5hY3Rpb24oYWkpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdkZXBsb3knKVxuICAuZGVzY3JpcHRpb24oJ0RlcGxveSBkb2N1bWVudGF0aW9uIHRvIERldkRvYyBwbGF0Zm9ybScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihkZXBsb3kpO1xuXG4vLyBLZXlzIG1hbmFnZW1lbnRcbmNvbnN0IGtleXNDbWQgPSBwcm9ncmFtXG4gIC5jb21tYW5kKCdrZXlzJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgQVBJIGtleXMgZm9yIHlvdXIgcHJvamVjdCcpO1xuXG5rZXlzQ21kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGN1cnJlbnQgQVBJIGtleSBpbmZvJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAuYWN0aW9uKGxpc3RLZXlzKTtcblxua2V5c0NtZFxuICAuY29tbWFuZCgncmVnZW5lcmF0ZScpXG4gIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgYSBuZXcgQVBJIGtleSAoaW52YWxpZGF0ZXMgdGhlIG9sZCBvbmUpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAuYWN0aW9uKHJlZ2VuZXJhdGVLZXkpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd3aG9hbWknKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgY3VycmVudCBwcm9qZWN0IGluZm9ybWF0aW9uJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAuYWN0aW9uKHdob2FtaSk7XG5cbi8vIEFzc2V0cyBtYW5hZ2VtZW50XG5jb25zdCBhc3NldHNDbWQgPSBwcm9ncmFtXG4gIC5jb21tYW5kKCdhc3NldHMnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSBwcm9qZWN0IGFzc2V0cyAoaW1hZ2VzLCBmaWxlcyknKTtcblxuYXNzZXRzQ21kXG4gIC5jb21tYW5kKCd1cGxvYWQgPGZpbGVzLi4uPicpXG4gIC5kZXNjcmlwdGlvbignVXBsb2FkIGFzc2V0cyB0byBzdG9yYWdlIChtYXggMjVNQiBwZXIgZmlsZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKHVwbG9hZCk7XG5cbmFzc2V0c0NtZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1cGxvYWRlZCBhc3NldHMnKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGxpc3RBc3NldHMpO1xuXG4vLyBTaG9ydGN1dCBmb3IgdXBsb2FkXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGxvYWQgPGZpbGVzLi4uPicpXG4gIC5kZXNjcmlwdGlvbignVXBsb2FkIGFzc2V0cyB0byBzdG9yYWdlIChzaG9ydGN1dCBmb3IgXCJkZXZkb2MgYXNzZXRzIHVwbG9hZFwiKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24odXBsb2FkKTtcblxuLy8gRG9tYWluIG1hbmFnZW1lbnQgLSBjdXN0b20gZG9tYWlucyAob25lIHBlciBwcm9qZWN0LCBmcmVlKVxuY29uc3QgZG9tYWluQ21kID0gcHJvZ3JhbVxuICAuY29tbWFuZCgnZG9tYWluJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgY3VzdG9tIGRvbWFpbiBmb3IgeW91ciBkb2N1bWVudGF0aW9uJyk7XG5cbmRvbWFpbkNtZFxuICAuY29tbWFuZCgnYWRkIDxjdXN0b20tZG9tYWluPicpXG4gIC5kZXNjcmlwdGlvbignQWRkIGEgY3VzdG9tIGRvbWFpbiAoZS5nLiwgZG9jcy5leGFtcGxlLmNvbSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRvbWFpbkFkZCk7XG5cbmRvbWFpbkNtZFxuICAuY29tbWFuZCgnc3RhdHVzJylcbiAgLmRlc2NyaXB0aW9uKCdDaGVjayBjdXN0b20gZG9tYWluIHN0YXR1cyBhbmQgRE5TIGNvbmZpZ3VyYXRpb24nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRvbWFpblN0YXR1cyk7XG5cbmRvbWFpbkNtZFxuICAuY29tbWFuZCgndmVyaWZ5JylcbiAgLmRlc2NyaXB0aW9uKCdWZXJpZnkgRE5TIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY3VzdG9tIGRvbWFpbicpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24oZG9tYWluVmVyaWZ5KTtcblxuZG9tYWluQ21kXG4gIC5jb21tYW5kKCdyZW1vdmUgW2N1c3RvbS1kb21haW5dJylcbiAgLmRlc2NyaXB0aW9uKCdSZW1vdmUgY3VzdG9tIGRvbWFpbiBmcm9tIHByb2plY3QnKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRvbWFpblJlbW92ZSk7XG5cbnByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainfish-ai/devdoc",
3
- "version": "0.1.30",
3
+ "version": "0.1.32",
4
4
  "description": "Documentation framework for developers. Write docs in MDX, preview locally, deploy to Brainfish.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",