runway-cli 0.8.0 → 1.0.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/README.md +3 -48
- package/dist/commands/deploy.js +122 -49
- package/dist/commands/domain.d.ts +1 -0
- package/dist/commands/domain.js +176 -0
- package/dist/commands/metrics.d.ts +1 -0
- package/dist/commands/metrics.js +51 -0
- package/dist/commands/reset.d.ts +1 -0
- package/dist/commands/reset.js +36 -0
- package/dist/index.js +19 -1
- package/dist/services/packageService.d.ts +1 -0
- package/dist/services/packageService.js +11 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Runway CLI
|
|
2
2
|
|
|
3
|
-
Command-line tool for deploying projects to Runway deployment server
|
|
3
|
+
Command-line tool for deploying projects to Runway deployment server
|
|
4
|
+
|
|
5
|
+
https://github.com/Ironicdegawd/runway
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
@@ -327,50 +329,3 @@ This appears when connecting to a server without HTTPS:
|
|
|
327
329
|
- Verify the server URL is correct
|
|
328
330
|
- Ensure the Runway server is running
|
|
329
331
|
- Check network connectivity to the server
|
|
330
|
-
|
|
331
|
-
## Development
|
|
332
|
-
|
|
333
|
-
### Building from Source
|
|
334
|
-
|
|
335
|
-
```bash
|
|
336
|
-
# Clone the repository
|
|
337
|
-
git clone https://github.com/your-org/runway.git
|
|
338
|
-
cd runway
|
|
339
|
-
|
|
340
|
-
# Install dependencies
|
|
341
|
-
npm install
|
|
342
|
-
|
|
343
|
-
# Build shared types and CLI
|
|
344
|
-
npm run build:cli
|
|
345
|
-
|
|
346
|
-
# Run CLI in development
|
|
347
|
-
cd cli
|
|
348
|
-
npm run dev -- deploy
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
### Project Structure
|
|
352
|
-
|
|
353
|
-
```
|
|
354
|
-
cli/
|
|
355
|
-
├── src/
|
|
356
|
-
│ ├── index.ts # Entry point, Commander setup
|
|
357
|
-
│ ├── commands/
|
|
358
|
-
│ │ ├── init.ts # runway init
|
|
359
|
-
│ │ ├── deploy.ts # runway deploy
|
|
360
|
-
│ │ ├── list.ts # runway list
|
|
361
|
-
│ │ └── status.ts # runway status
|
|
362
|
-
│ ├── services/
|
|
363
|
-
│ │ ├── authService.ts # Authentication (RSA + standard flows)
|
|
364
|
-
│ │ ├── projectDetector.ts # Auto-detect project type
|
|
365
|
-
│ │ ├── buildService.ts # Run local builds
|
|
366
|
-
│ │ ├── packageService.ts # Create deployment zip
|
|
367
|
-
│ │ └── uploadService.ts # Upload to server
|
|
368
|
-
│ └── utils/
|
|
369
|
-
│ ├── config.ts # CLI configuration & token management
|
|
370
|
-
│ └── logger.ts # Colored output
|
|
371
|
-
└── package.json
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
## License
|
|
375
|
-
|
|
376
|
-
MIT
|
package/dist/commands/deploy.js
CHANGED
|
@@ -8,6 +8,7 @@ const inquirer_1 = __importDefault(require("inquirer"));
|
|
|
8
8
|
const ora_1 = __importDefault(require("ora"));
|
|
9
9
|
const fs_1 = __importDefault(require("fs"));
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const axios_1 = __importDefault(require("axios"));
|
|
11
12
|
const projectDetector_1 = require("../services/projectDetector");
|
|
12
13
|
const buildService_1 = require("../services/buildService");
|
|
13
14
|
const packageService_1 = require("../services/packageService");
|
|
@@ -67,6 +68,55 @@ async function promptManualEnvVars() {
|
|
|
67
68
|
}
|
|
68
69
|
return vars;
|
|
69
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Prompt user for environment variable options when no .env file exists
|
|
73
|
+
*/
|
|
74
|
+
async function promptEnvOptions() {
|
|
75
|
+
const { envChoice } = await inquirer_1.default.prompt([
|
|
76
|
+
{
|
|
77
|
+
type: 'list',
|
|
78
|
+
name: 'envChoice',
|
|
79
|
+
message: 'How would you like to provide environment variables?',
|
|
80
|
+
choices: [
|
|
81
|
+
{ name: 'Specify path to .env file', value: 'path' },
|
|
82
|
+
{ name: 'Enter variables manually (creates .env)', value: 'manual' },
|
|
83
|
+
{ name: 'Continue without environment variables', value: 'skip' },
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
]);
|
|
87
|
+
if (envChoice === 'path') {
|
|
88
|
+
const { envPath } = await inquirer_1.default.prompt([
|
|
89
|
+
{
|
|
90
|
+
type: 'input',
|
|
91
|
+
name: 'envPath',
|
|
92
|
+
message: 'Path to env file:',
|
|
93
|
+
validate: (input) => {
|
|
94
|
+
if (!input.trim())
|
|
95
|
+
return 'Please enter a path';
|
|
96
|
+
if (!fs_1.default.existsSync(input))
|
|
97
|
+
return 'File not found';
|
|
98
|
+
return true;
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
]);
|
|
102
|
+
logger_1.logger.success(`Using env file: ${envPath}`);
|
|
103
|
+
return envPath;
|
|
104
|
+
}
|
|
105
|
+
if (envChoice === 'manual') {
|
|
106
|
+
const vars = await promptManualEnvVars();
|
|
107
|
+
if (Object.keys(vars).length > 0) {
|
|
108
|
+
// Write to .env file in project
|
|
109
|
+
const envContent = Object.entries(vars)
|
|
110
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
111
|
+
.join('\n');
|
|
112
|
+
const envPath = path_1.default.join(process.cwd(), '.env');
|
|
113
|
+
fs_1.default.writeFileSync(envPath, envContent);
|
|
114
|
+
logger_1.logger.success(`Created .env with ${Object.keys(vars).length} variables`);
|
|
115
|
+
return envPath;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
70
120
|
async function deployCommand(options) {
|
|
71
121
|
logger_1.logger.header('Runway Deploy');
|
|
72
122
|
// Check configuration
|
|
@@ -110,6 +160,56 @@ async function deployCommand(options) {
|
|
|
110
160
|
]);
|
|
111
161
|
projectName = answers.name;
|
|
112
162
|
}
|
|
163
|
+
// Ask if environment variables are required
|
|
164
|
+
const { needsEnv } = await inquirer_1.default.prompt([
|
|
165
|
+
{
|
|
166
|
+
type: 'confirm',
|
|
167
|
+
name: 'needsEnv',
|
|
168
|
+
message: 'Does this project require environment variables?',
|
|
169
|
+
default: false,
|
|
170
|
+
},
|
|
171
|
+
]);
|
|
172
|
+
let envFilePath;
|
|
173
|
+
let envVars = {};
|
|
174
|
+
let envInjected = false;
|
|
175
|
+
if (needsEnv) {
|
|
176
|
+
const defaultEnvPath = path_1.default.join(process.cwd(), '.env');
|
|
177
|
+
const hasEnvFile = fs_1.default.existsSync(defaultEnvPath);
|
|
178
|
+
if (hasEnvFile) {
|
|
179
|
+
// .env found - confirm with user
|
|
180
|
+
const { useExisting } = await inquirer_1.default.prompt([
|
|
181
|
+
{
|
|
182
|
+
type: 'confirm',
|
|
183
|
+
name: 'useExisting',
|
|
184
|
+
message: 'Found .env file in project. Use it?',
|
|
185
|
+
default: true,
|
|
186
|
+
},
|
|
187
|
+
]);
|
|
188
|
+
if (useExisting) {
|
|
189
|
+
envFilePath = defaultEnvPath;
|
|
190
|
+
envVars = parseEnvFile(defaultEnvPath);
|
|
191
|
+
envInjected = Object.keys(envVars).length > 0;
|
|
192
|
+
logger_1.logger.success(`Loaded ${Object.keys(envVars).length} variables from .env`);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// User declined existing .env - show other options
|
|
196
|
+
envFilePath = await promptEnvOptions();
|
|
197
|
+
if (envFilePath) {
|
|
198
|
+
envVars = parseEnvFile(envFilePath);
|
|
199
|
+
envInjected = Object.keys(envVars).length > 0;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// No .env found - show options
|
|
205
|
+
logger_1.logger.warn('No .env file found in project directory.');
|
|
206
|
+
envFilePath = await promptEnvOptions();
|
|
207
|
+
if (envFilePath) {
|
|
208
|
+
envVars = parseEnvFile(envFilePath);
|
|
209
|
+
envInjected = Object.keys(envVars).length > 0;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
113
213
|
// Determine project type
|
|
114
214
|
const projectType = options.type || detectedProject.type;
|
|
115
215
|
// Determine build mode
|
|
@@ -145,52 +245,6 @@ async function deployCommand(options) {
|
|
|
145
245
|
return;
|
|
146
246
|
}
|
|
147
247
|
logger_1.logger.blank();
|
|
148
|
-
// ENV source prompt for React/Next local builds
|
|
149
|
-
let envVars = {};
|
|
150
|
-
let envInjected = false;
|
|
151
|
-
let envFilePath = options.envFile;
|
|
152
|
-
if (buildMode === 'local' && (projectType === 'react' || projectType === 'next')) {
|
|
153
|
-
const defaultEnvPath = path_1.default.join(process.cwd(), '.env');
|
|
154
|
-
const hasEnvFile = fs_1.default.existsSync(defaultEnvPath);
|
|
155
|
-
if (!options.skipEnvPrompt && !options.envFile) {
|
|
156
|
-
const envChoices = [
|
|
157
|
-
...(hasEnvFile ? [{ name: 'Use .env file', value: 'file' }] : []),
|
|
158
|
-
{ name: 'Enter variables manually', value: 'manual' },
|
|
159
|
-
{ name: 'Skip (ENV will be locked after deploy)', value: 'skip' },
|
|
160
|
-
];
|
|
161
|
-
const { envSource } = await inquirer_1.default.prompt([
|
|
162
|
-
{
|
|
163
|
-
type: 'list',
|
|
164
|
-
name: 'envSource',
|
|
165
|
-
message: 'Environment variables for build:',
|
|
166
|
-
choices: envChoices,
|
|
167
|
-
default: hasEnvFile ? 'file' : 'skip',
|
|
168
|
-
},
|
|
169
|
-
]);
|
|
170
|
-
if (envSource === 'file') {
|
|
171
|
-
envFilePath = defaultEnvPath;
|
|
172
|
-
envVars = parseEnvFile(defaultEnvPath);
|
|
173
|
-
envInjected = Object.keys(envVars).length > 0;
|
|
174
|
-
logger_1.logger.success(`Loaded ${Object.keys(envVars).length} variables from .env`);
|
|
175
|
-
}
|
|
176
|
-
else if (envSource === 'manual') {
|
|
177
|
-
envVars = await promptManualEnvVars();
|
|
178
|
-
envInjected = Object.keys(envVars).length > 0;
|
|
179
|
-
if (envInjected) {
|
|
180
|
-
logger_1.logger.success(`Added ${Object.keys(envVars).length} environment variables`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
logger_1.logger.warn('Skipping ENV injection - environment variables will be locked after deployment.');
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
else if (options.envFile && fs_1.default.existsSync(options.envFile)) {
|
|
188
|
-
envVars = parseEnvFile(options.envFile);
|
|
189
|
-
envInjected = Object.keys(envVars).length > 0;
|
|
190
|
-
logger_1.logger.success(`Loaded ${Object.keys(envVars).length} variables from ${options.envFile}`);
|
|
191
|
-
}
|
|
192
|
-
logger_1.logger.blank();
|
|
193
|
-
}
|
|
194
248
|
// Step 1: Build (for local-build mode)
|
|
195
249
|
let buildOutputDir = detectedProject.buildOutputDir;
|
|
196
250
|
if (buildMode === 'local') {
|
|
@@ -221,6 +275,7 @@ async function deployCommand(options) {
|
|
|
221
275
|
projectType,
|
|
222
276
|
buildOutputDir,
|
|
223
277
|
includeSource: buildMode === 'server',
|
|
278
|
+
envFile: projectType === 'node' ? envFilePath : undefined,
|
|
224
279
|
});
|
|
225
280
|
}
|
|
226
281
|
catch (error) {
|
|
@@ -307,8 +362,26 @@ async function deployCommand(options) {
|
|
|
307
362
|
logger_1.logger.blank();
|
|
308
363
|
logger_1.logger.success('Deployment successful!');
|
|
309
364
|
const safeName = projectName.toLowerCase().replace(/[^a-z0-9]/g, '-');
|
|
310
|
-
|
|
311
|
-
|
|
365
|
+
// Fetch domain config to show proper URL
|
|
366
|
+
try {
|
|
367
|
+
const domainResponse = await axios_1.default.get(`${config.serverUrl}/api/domain`, {
|
|
368
|
+
headers: config.token ? { Authorization: `Bearer ${config.token}` } : {},
|
|
369
|
+
});
|
|
370
|
+
const domainConfig = domainResponse.data;
|
|
371
|
+
if (domainConfig.domain?.active && domainConfig.securityMode === 'domain-https') {
|
|
372
|
+
logger_1.logger.blank();
|
|
373
|
+
logger_1.logger.info(`Your app is available at: https://${domainConfig.domain.domain}/app/${safeName}`);
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
logger_1.logger.blank();
|
|
377
|
+
logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
// Fallback to server URL if domain fetch fails
|
|
382
|
+
logger_1.logger.blank();
|
|
383
|
+
logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
|
|
384
|
+
}
|
|
312
385
|
}
|
|
313
386
|
else {
|
|
314
387
|
logger_1.logger.error(`Deployment failed: ${finalStatus.error || 'Unknown error'}`);
|
|
@@ -331,4 +404,4 @@ async function deployCommand(options) {
|
|
|
331
404
|
}
|
|
332
405
|
logger_1.logger.blank();
|
|
333
406
|
}
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXFGQSxzQ0F5U0M7QUE5WEQsd0RBQWdDO0FBQ2hDLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBRXhCLGlFQUE0RDtBQUM1RCwyREFBd0Q7QUFDeEQsK0RBQTREO0FBQzVELDZEQUFnRTtBQUNoRSw0Q0FBMEQ7QUFDMUQsNENBQXlDO0FBWXpDOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsUUFBZ0I7SUFDcEMsTUFBTSxPQUFPLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQTJCLEVBQUUsQ0FBQztJQUV4QyxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxTQUFTO1FBRWxELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0MsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUMsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FB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QUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdEUsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLE1BQU0sQ0FBQyxTQUFTLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsV0FBVyxDQUFDLEtBQUssSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDckIsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNmLGVBQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ2pELGVBQU0sQ0FBQyxHQUFHLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckMsZUFBTSxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBQcm9qZWN0VHlwZSwgQnVpbGRNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGV0ZWN0UHJvamVjdCB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2plY3REZXRlY3Rvcic7XG5pbXBvcnQgeyBidWlsZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9idWlsZFNlcnZpY2UnO1xuaW1wb3J0IHsgcGFja2FnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWNrYWdlU2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXBsb2FkU2VydmljZSc7XG5pbXBvcnQgeyBpc0NvbmZpZ3VyZWQsIGdldENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGxvZ2dlci5kaW0oYFNlcnZlcjogJHtjb25maWcuc2VydmVyVXJsfWApO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBEZXRlY3QgcHJvamVjdFxuICBjb25zdCBzcGlubmVyID0gb3JhKCdEZXRlY3RpbmcgcHJvamVjdC4uLicpLnN0YXJ0KCk7XG4gIGxldCBkZXRlY3RlZFByb2plY3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXRlY3RlZFByb2plY3QgPSBhd2FpdCBkZXRlY3RQcm9qZWN0KCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBEZXRlY3RlZDogJHtkZXRlY3RlZFByb2plY3QudHlwZX0gcHJvamVjdCAoJHtkZXRlY3RlZFByb2plY3QucGFja2FnZU1hbmFnZXJ9KWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGRldGVjdCBwcm9qZWN0Jyk7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgcHJvamVjdCBuYW1lXG4gIGxldCBwcm9qZWN0TmFtZSA9IG9wdGlvbnMubmFtZSB8fCBkZXRlY3RlZFByb2plY3QubmFtZTtcblxuICAvLyBJbnRlcmFjdGl2ZSBtb2RlIGlmIG5hbWUgbm90IHByb3ZpZGVkXG4gIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgbWVzc2FnZTogJ1Byb2plY3QgbmFtZTonLFxuICAgICAgICBkZWZhdWx0OiBwcm9qZWN0TmFtZSxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IDIpIHJldHVybiAnTmFtZSBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyc7XG4gICAgICAgICAgaWYgKCEvXlthLXpBLVowLTktX10rJC8udGVzdChpbnB1dCkpIHJldHVybiAnTmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlcyc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHByb2plY3ROYW1lID0gYW5zd2Vycy5uYW1lO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHByb2plY3QgdHlwZVxuICBjb25zdCBwcm9qZWN0VHlwZSA9IG9wdGlvbnMudHlwZSB8fCBkZXRlY3RlZFByb2plY3QudHlwZTtcblxuICAvLyBEZXRlcm1pbmUgYnVpbGQgbW9kZVxuICBsZXQgYnVpbGRNb2RlOiBCdWlsZE1vZGU7XG4gIGlmIChvcHRpb25zLmJ1aWxkU2VydmVyKSB7XG4gICAgYnVpbGRNb2RlID0gJ3NlcnZlcic7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5idWlsZExvY2FsKSB7XG4gICAgYnVpbGRNb2RlID0gJ2xvY2FsJztcbiAgfSBlbHNlIHtcbiAgICBidWlsZE1vZGUgPSBjb25maWcuZGVmYXVsdEJ1aWxkTW9kZSB8fCAnbG9jYWwnO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGxvZ2dlci5pbmZvKGBQcm9qZWN0OiAke3Byb2plY3ROYW1lfWApO1xuICBsb2dnZXIuaW5mbyhgVHlwZTogJHtwcm9qZWN0VHlwZX1gKTtcbiAgbG9nZ2VyLmluZm8oYEJ1aWxkIG1vZGU6ICR7YnVpbGRNb2RlfWApO1xuICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYFZlcnNpb246ICR7b3B0aW9ucy52ZXJzaW9ufWApO1xuICB9XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIENvbmZpcm0gZGVwbG95bWVudFxuICBjb25zdCB7IGNvbmZpcm0gfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ2NvbmZpcm0nLFxuICAgICAgbWVzc2FnZTogJ1Byb2NlZWQgd2l0aCBkZXBsb3ltZW50PycsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmICghY29uZmlybSkge1xuICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBFTlYgc291cmNlIHByb21wdCBmb3IgUmVhY3QvTmV4dCBsb2NhbCBidWlsZHNcbiAgbGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgbGV0IGVudkluamVjdGVkID0gZmFsc2U7XG4gIGxldCBlbnZGaWxlUGF0aCA9IG9wdGlvbnMuZW52RmlsZTtcblxuICBpZiAoYnVpbGRNb2RlID09PSAnbG9jYWwnICYmIChwcm9qZWN0VHlwZSA9PT0gJ3JlYWN0JyB8fCBwcm9qZWN0VHlwZSA9PT0gJ25leHQnKSkge1xuICAgIGNvbnN0IGRlZmF1bHRFbnZQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZW52Jyk7XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudlBhdGgpO1xuXG4gICAgaWYgKCFvcHRpb25zLnNraXBFbnZQcm9tcHQgJiYgIW9wdGlvbnMuZW52RmlsZSkge1xuICAgICAgY29uc3QgZW52Q2hvaWNlcyA9IFtcbiAgICAgICAgLi4uKGhhc0VudkZpbGUgPyBbeyBuYW1lOiAnVXNlIC5lbnYgZmlsZScsIHZhbHVlOiAnZmlsZScgfV0gOiBbXSksXG4gICAgICAgIHsgbmFtZTogJ0VudGVyIHZhcmlhYmxlcyBtYW51YWxseScsIHZhbHVlOiAnbWFudWFsJyB9LFxuICAgICAgICB7IG5hbWU6ICdTa2lwIChFTlYgd2lsbCBiZSBsb2NrZWQgYWZ0ZXIgZGVwbG95KScsIHZhbHVlOiAnc2tpcCcgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHsgZW52U291cmNlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgIG5hbWU6ICdlbnZTb3VyY2UnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGJ1aWxkOicsXG4gICAgICAgICAgY2hvaWNlczogZW52Q2hvaWNlcyxcbiAgICAgICAgICBkZWZhdWx0OiBoYXNFbnZGaWxlID8gJ2ZpbGUnIDogJ3NraXAnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGlmIChlbnZTb3VyY2UgPT09ICdmaWxlJykge1xuICAgICAgICBlbnZGaWxlUGF0aCA9IGRlZmF1bHRFbnZQYXRoO1xuICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGRlZmF1bHRFbnZQYXRoKTtcbiAgICAgICAgZW52SW5qZWN0ZWQgPSBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBsb2dnZXIuc3VjY2VzcyhgTG9hZGVkICR7T2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RofSB2YXJpYWJsZXMgZnJvbSAuZW52YCk7XG4gICAgICB9IGVsc2UgaWYgKGVudlNvdXJjZSA9PT0gJ21hbnVhbCcpIHtcbiAgICAgICAgZW52VmFycyA9IGF3YWl0IHByb21wdE1hbnVhbEVudlZhcnMoKTtcbiAgICAgICAgZW52SW5qZWN0ZWQgPSBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoZW52SW5qZWN0ZWQpIHtcbiAgICAgICAgICBsb2dnZXIuc3VjY2VzcyhgQWRkZWQgJHtPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGh9IGVudmlyb25tZW50IHZhcmlhYmxlc2ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybignU2tpcHBpbmcgRU5WIGluamVjdGlvbiAtIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGJlIGxvY2tlZCBhZnRlciBkZXBsb3ltZW50LicpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5lbnZGaWxlICYmIGZzLmV4aXN0c1N5bmMob3B0aW9ucy5lbnZGaWxlKSkge1xuICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShvcHRpb25zLmVudkZpbGUpO1xuICAgICAgZW52SW5qZWN0ZWQgPSBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPiAwO1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYExvYWRlZCAke09iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aH0gdmFyaWFibGVzIGZyb20gJHtvcHRpb25zLmVudkZpbGV9YCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gIH1cblxuICAvLyBTdGVwIDE6IEJ1aWxkIChmb3IgbG9jYWwtYnVpbGQgbW9kZSlcbiAgbGV0IGJ1aWxkT3V0cHV0RGlyID0gZGV0ZWN0ZWRQcm9qZWN0LmJ1aWxkT3V0cHV0RGlyO1xuXG4gIGlmIChidWlsZE1vZGUgPT09ICdsb2NhbCcpIHtcbiAgICBsb2dnZXIuc3RlcCgxLCA0LCAnQnVpbGRpbmcgcHJvamVjdC4uLicpO1xuXG4gICAgY29uc3QgYnVpbGRSZXN1bHQgPSBhd2FpdCBidWlsZFNlcnZpY2UuYnVpbGQoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIHByb2plY3ROYW1lLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IGRldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcixcbiAgICAgIGVudkZpbGU6IGVudkZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgaWYgKCFidWlsZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEJ1aWxkIGZhaWxlZDogJHtidWlsZFJlc3VsdC5lcnJvcn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWlsZE91dHB1dERpciA9IGJ1aWxkUmVzdWx0Lm91dHB1dERpcjtcbiAgICBsb2dnZXIuc3VjY2VzcyhgQnVpbGQgY29tcGxldGVkIGluICR7KGJ1aWxkUmVzdWx0LmR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgxKX1zYCk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gIH1cblxuICAvLyBTdGVwIDI6IFBhY2thZ2VcbiAgY29uc3QgcGFja2FnZVN0ZXAgPSBidWlsZE1vZGUgPT09ICdsb2NhbCcgPyAyIDogMTtcbiAgY29uc3QgdG90YWxTdGVwcyA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDQgOiAzO1xuXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwLCB0b3RhbFN0ZXBzLCAnQ3JlYXRpbmcgZGVwbG95bWVudCBwYWNrYWdlLi4uJyk7XG5cbiAgbGV0IHBhY2thZ2VSZXN1bHQ7XG4gIHRyeSB7XG4gICAgcGFja2FnZVJlc3VsdCA9IGF3YWl0IHBhY2thZ2VTZXJ2aWNlLnBhY2thZ2Uoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIGJ1aWxkT3V0cHV0RGlyLFxuICAgICAgaW5jbHVkZVNvdXJjZTogYnVpbGRNb2RlID09PSAnc2VydmVyJyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFBhY2thZ2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCAzOiBBbmFseXplICYgVXBsb2FkXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMSwgdG90YWxTdGVwcywgJ0FuYWx5emluZyBhbmQgdXBsb2FkaW5nIHRvIHNlcnZlci4uLicpO1xuXG4gIGxldCB1cGxvYWRTZXJ2aWNlO1xuICB0cnkge1xuICAgIHVwbG9hZFNlcnZpY2UgPSBjcmVhdGVVcGxvYWRTZXJ2aWNlKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW5hbHl6ZSBwYWNrYWdlIGZpcnN0IChmb3Igc2VydmVyLWJ1aWxkIG1vZGUgdG8gZ2V0IHdhcm5pbmdzKVxuICBsZXQgY29uZmlybVNlcnZlckJ1aWxkID0gZmFsc2U7XG4gIGlmIChidWlsZE1vZGUgPT09ICdzZXJ2ZXInKSB7XG4gICAgY29uc3QgYW5hbHl6ZVJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UuYW5hbHl6ZVBhY2thZ2UocGFja2FnZVJlc3VsdC56aXBQYXRoLCBwcm9qZWN0VHlwZSk7XG5cbiAgICBpZiAoYW5hbHl6ZVJlc3VsdC5zdWNjZXNzICYmIGFuYWx5emVSZXN1bHQuYW5hbHlzaXMpIHtcbiAgICAgIGNvbnN0IGFuYWx5c2lzID0gYW5hbHl6ZVJlc3VsdC5hbmFseXNpcztcblxuICAgICAgLy8gRGlzcGxheSB3YXJuaW5nc1xuICAgICAgaWYgKGFuYWx5c2lzLndhcm5pbmdzICYmIGFuYWx5c2lzLndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdTZXJ2ZXIgQW5hbHlzaXM6Jyk7XG4gICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBhbmFseXNpcy53YXJuaW5ncykge1xuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhcm5pbmcubGV2ZWwgPT09ICdjcml0aWNhbCcgPyAn4p2MJyA6IHdhcm5pbmcubGV2ZWwgPT09ICd3YXJuaW5nJyA/ICfimqDvuI8nIDogJ+KEue+4jyc7XG4gICAgICAgICAgbG9nZ2VyLmRpbShgICAke3ByZWZpeH0gJHt3YXJuaW5nLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBjb25maXJtYXRpb24gZm9yIHNlcnZlci1zaWRlIGJ1aWxkXG4gICAgICBpZiAoYW5hbHlzaXMucmVxdWlyZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgY29uc3QgeyBjb25maXJtQnVpbGQgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgbmFtZTogJ2NvbmZpcm1CdWlsZCcsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHthbmFseXNpcy5jb25maXJtYXRpb25SZWFzb24gfHwgJ1NlcnZlci1zaWRlIGJ1aWxkIHJlcXVpcmVkJ30uIFRoaXMgbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDb250aW51ZT9gLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoIWNvbmZpcm1CdWlsZCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZCBieSB1c2VyLicpO1xuICAgICAgICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybVNlcnZlckJ1aWxkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB1cGxvYWRSZXN1bHQgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnVwbG9hZCh7XG4gICAgemlwUGF0aDogcGFja2FnZVJlc3VsdC56aXBQYXRoLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHByb2plY3RUeXBlLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICBidWlsZE1vZGUsXG4gICAgY29uZmlybVNlcnZlckJ1aWxkLFxuICAgIC8vIEVOViBtdXRhYmlsaXR5IHRyYWNraW5nXG4gICAgZGVwbG95bWVudFNvdXJjZTogJ2NsaScsXG4gICAgZW52SW5qZWN0ZWQsXG4gIH0pO1xuXG4gIC8vIENsZWFudXAgemlwIGZpbGVcbiAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuXG4gIGlmICghdXBsb2FkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFVwbG9hZCBmYWlsZWQ6ICR7dXBsb2FkUmVzdWx0LmVycm9yfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5zdWNjZXNzKCdVcGxvYWQgY29tcGxldGUnKTtcbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCA0OiBXYWl0IGZvciBkZXBsb3ltZW50IChpZiBkZXBsb3ltZW50IElEIGF2YWlsYWJsZSlcbiAgaWYgKHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQpIHtcbiAgICBsb2dnZXIuc3RlcChwYWNrYWdlU3RlcCArIDIsIHRvdGFsU3RlcHMsICdXYWl0aW5nIGZvciBkZXBsb3ltZW50IHRvIGNvbXBsZXRlLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnBvbGxEZXBsb3ltZW50U3RhdHVzKFxuICAgICAgICB1cGxvYWRSZXN1bHQuZGVwbG95bWVudElkLFxuICAgICAgICAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cy5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxyICBQcm9ncmVzczogJHtzdGF0dXMucHJvZ3Jlc3N9JWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAoZmluYWxTdGF0dXMuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBsb3ltZW50IHN1Y2Nlc3NmdWwhJyk7XG5cbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBwcm9qZWN0TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnLScpO1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRGVwbG95bWVudCBmYWlsZWQ6ICR7ZmluYWxTdGF0dXMuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICBpZiAoZmluYWxTdGF0dXMubG9ncykge1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5kaW0oJ0xvZ3M6Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZmluYWxTdGF0dXMubG9ncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCB0cmFjayBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgICAgbG9nZ2VyLmRpbSgnQ2hlY2sgdGhlIHdlYiBVSSBmb3IgZGVwbG95bWVudCBzdGF0dXMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBzdWNjZXNzZnVsIScpO1xuICAgIGxvZ2dlci5kaW0oJ0RlcGxveW1lbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLiBDaGVjayB0aGUgd2ViIFVJIGZvciBzdGF0dXMuJyk7XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcbn1cbiJdfQ==
|
|
407
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXlJQSxzQ0FnVUM7QUF6Y0Qsd0RBQWdDO0FBQ2hDLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGtEQUEwQjtBQUUxQixpRUFBNEQ7QUFDNUQsMkRBQXdEO0FBQ3hELCtEQUE0RDtBQUM1RCw2REFBZ0U7QUFDaEUsNENBQTBEO0FBQzFELDRDQUF5QztBQVl6Qzs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFFBQWdCO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7SUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUVsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUs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LE1BQU0sQ0FBQyxTQUFTLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixlQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixXQUFXLENBQUMsS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQzNFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2YsZUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDakQsZUFBTSxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLGVBQU0sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNyQyxlQUFNLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcm9qZWN0VHlwZSwgQnVpbGRNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGV0ZWN0UHJvamVjdCB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2plY3REZXRlY3Rvcic7XG5pbXBvcnQgeyBidWlsZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9idWlsZFNlcnZpY2UnO1xuaW1wb3J0IHsgcGFja2FnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWNrYWdlU2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXBsb2FkU2VydmljZSc7XG5pbXBvcnQgeyBpc0NvbmZpZ3VyZWQsIGdldENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBQcm9tcHQgdXNlciBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgb3B0aW9ucyB3aGVuIG5vIC5lbnYgZmlsZSBleGlzdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0RW52T3B0aW9ucygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGVudkNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnZW52Q2hvaWNlJyxcbiAgICAgIG1lc3NhZ2U6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvdmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM/JyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnU3BlY2lmeSBwYXRoIHRvIC5lbnYgZmlsZScsIHZhbHVlOiAncGF0aCcgfSxcbiAgICAgICAgeyBuYW1lOiAnRW50ZXIgdmFyaWFibGVzIG1hbnVhbGx5IChjcmVhdGVzIC5lbnYpJywgdmFsdWU6ICdtYW51YWwnIH0sXG4gICAgICAgIHsgbmFtZTogJ0NvbnRpbnVlIHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoZW52Q2hvaWNlID09PSAncGF0aCcpIHtcbiAgICBjb25zdCB7IGVudlBhdGggfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdlbnZQYXRoJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZW52IGZpbGU6JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFpbnB1dC50cmltKCkpIHJldHVybiAnUGxlYXNlIGVudGVyIGEgcGF0aCc7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlucHV0KSkgcmV0dXJuICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBVc2luZyBlbnYgZmlsZTogJHtlbnZQYXRofWApO1xuICAgIHJldHVybiBlbnZQYXRoO1xuICB9XG5cbiAgaWYgKGVudkNob2ljZSA9PT0gJ21hbnVhbCcpIHtcbiAgICBjb25zdCB2YXJzID0gYXdhaXQgcHJvbXB0TWFudWFsRW52VmFycygpO1xuICAgIGlmIChPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBXcml0ZSB0byAuZW52IGZpbGUgaW4gcHJvamVjdFxuICAgICAgY29uc3QgZW52Q29udGVudCA9IE9iamVjdC5lbnRyaWVzKHZhcnMpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW52UGF0aCwgZW52Q29udGVudCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuZW52IHdpdGggJHtPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGh9IHZhcmlhYmxlc2ApO1xuICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGxvZ2dlci5kaW0oYFNlcnZlcjogJHtjb25maWcuc2VydmVyVXJsfWApO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBEZXRlY3QgcHJvamVjdFxuICBjb25zdCBzcGlubmVyID0gb3JhKCdEZXRlY3RpbmcgcHJvamVjdC4uLicpLnN0YXJ0KCk7XG4gIGxldCBkZXRlY3RlZFByb2plY3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXRlY3RlZFByb2plY3QgPSBhd2FpdCBkZXRlY3RQcm9qZWN0KCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBEZXRlY3RlZDogJHtkZXRlY3RlZFByb2plY3QudHlwZX0gcHJvamVjdCAoJHtkZXRlY3RlZFByb2plY3QucGFja2FnZU1hbmFnZXJ9KWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGRldGVjdCBwcm9qZWN0Jyk7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgcHJvamVjdCBuYW1lXG4gIGxldCBwcm9qZWN0TmFtZSA9IG9wdGlvbnMubmFtZSB8fCBkZXRlY3RlZFByb2plY3QubmFtZTtcblxuICAvLyBJbnRlcmFjdGl2ZSBtb2RlIGlmIG5hbWUgbm90IHByb3ZpZGVkXG4gIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgbWVzc2FnZTogJ1Byb2plY3QgbmFtZTonLFxuICAgICAgICBkZWZhdWx0OiBwcm9qZWN0TmFtZSxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IDIpIHJldHVybiAnTmFtZSBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyc7XG4gICAgICAgICAgaWYgKCEvXlthLXpBLVowLTktX10rJC8udGVzdChpbnB1dCkpIHJldHVybiAnTmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlcyc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHByb2plY3ROYW1lID0gYW5zd2Vycy5uYW1lO1xuICB9XG5cbiAgLy8gQXNrIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVxdWlyZWRcbiAgY29uc3QgeyBuZWVkc0VudiB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnbmVlZHNFbnYnLFxuICAgICAgbWVzc2FnZTogJ0RvZXMgdGhpcyBwcm9qZWN0IHJlcXVpcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzPycsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICBdKTtcblxuICBsZXQgZW52RmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgbGV0IGVudkluamVjdGVkID0gZmFsc2U7XG5cbiAgaWYgKG5lZWRzRW52KSB7XG4gICAgY29uc3QgZGVmYXVsdEVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICBjb25zdCBoYXNFbnZGaWxlID0gZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52UGF0aCk7XG5cbiAgICBpZiAoaGFzRW52RmlsZSkge1xuICAgICAgLy8gLmVudiBmb3VuZCAtIGNvbmZpcm0gd2l0aCB1c2VyXG4gICAgICBjb25zdCB7IHVzZUV4aXN0aW5nIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIG5hbWU6ICd1c2VFeGlzdGluZycsXG4gICAgICAgICAgbWVzc2FnZTogJ0ZvdW5kIC5lbnYgZmlsZSBpbiBwcm9qZWN0LiBVc2UgaXQ/JyxcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGlmICh1c2VFeGlzdGluZykge1xuICAgICAgICBlbnZGaWxlUGF0aCA9IGRlZmF1bHRFbnZQYXRoO1xuICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGRlZmF1bHRFbnZQYXRoKTtcbiAgICAgICAgZW52SW5qZWN0ZWQgPSBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBsb2dnZXIuc3VjY2VzcyhgTG9hZGVkICR7T2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RofSB2YXJpYWJsZXMgZnJvbSAuZW52YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVc2VyIGRlY2xpbmVkIGV4aXN0aW5nIC5lbnYgLSBzaG93IG90aGVyIG9wdGlvbnNcbiAgICAgICAgZW52RmlsZVBhdGggPSBhd2FpdCBwcm9tcHRFbnZPcHRpb25zKCk7XG4gICAgICAgIGlmIChlbnZGaWxlUGF0aCkge1xuICAgICAgICAgIGVudlZhcnMgPSBwYXJzZUVudkZpbGUoZW52RmlsZVBhdGgpO1xuICAgICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyAuZW52IGZvdW5kIC0gc2hvdyBvcHRpb25zXG4gICAgICBsb2dnZXIud2FybignTm8gLmVudiBmaWxlIGZvdW5kIGluIHByb2plY3QgZGlyZWN0b3J5LicpO1xuICAgICAgZW52RmlsZVBhdGggPSBhd2FpdCBwcm9tcHRFbnZPcHRpb25zKCk7XG4gICAgICBpZiAoZW52RmlsZVBhdGgpIHtcbiAgICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShlbnZGaWxlUGF0aCk7XG4gICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgcHJvamVjdCB0eXBlXG4gIGNvbnN0IHByb2plY3RUeXBlID0gb3B0aW9ucy50eXBlIHx8IGRldGVjdGVkUHJvamVjdC50eXBlO1xuXG4gIC8vIERldGVybWluZSBidWlsZCBtb2RlXG4gIGxldCBidWlsZE1vZGU6IEJ1aWxkTW9kZTtcbiAgaWYgKG9wdGlvbnMuYnVpbGRTZXJ2ZXIpIHtcbiAgICBidWlsZE1vZGUgPSAnc2VydmVyJztcbiAgfSBlbHNlIGlmIChvcHRpb25zLmJ1aWxkTG9jYWwpIHtcbiAgICBidWlsZE1vZGUgPSAnbG9jYWwnO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkTW9kZSA9IGNvbmZpZy5kZWZhdWx0QnVpbGRNb2RlIHx8ICdsb2NhbCc7XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcbiAgbG9nZ2VyLmluZm8oYFByb2plY3Q6ICR7cHJvamVjdE5hbWV9YCk7XG4gIGxvZ2dlci5pbmZvKGBUeXBlOiAke3Byb2plY3RUeXBlfWApO1xuICBsb2dnZXIuaW5mbyhgQnVpbGQgbW9kZTogJHtidWlsZE1vZGV9YCk7XG4gIGlmIChvcHRpb25zLnZlcnNpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgVmVyc2lvbjogJHtvcHRpb25zLnZlcnNpb259YCk7XG4gIH1cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gQ29uZmlybSBkZXBsb3ltZW50XG4gIGNvbnN0IHsgY29uZmlybSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnY29uZmlybScsXG4gICAgICBtZXNzYWdlOiAnUHJvY2VlZCB3aXRoIGRlcGxveW1lbnQ/JyxcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgXSk7XG5cbiAgaWYgKCFjb25maXJtKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0RlcGxveW1lbnQgY2FuY2VsbGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIFN0ZXAgMTogQnVpbGQgKGZvciBsb2NhbC1idWlsZCBtb2RlKVxuICBsZXQgYnVpbGRPdXRwdXREaXIgPSBkZXRlY3RlZFByb2plY3QuYnVpbGRPdXRwdXREaXI7XG5cbiAgaWYgKGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJykge1xuICAgIGxvZ2dlci5zdGVwKDEsIDQsICdCdWlsZGluZyBwcm9qZWN0Li4uJyk7XG5cbiAgICBjb25zdCBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkU2VydmljZS5idWlsZCh7XG4gICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHByb2plY3RUeXBlLFxuICAgICAgcHJvamVjdE5hbWUsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogZGV0ZWN0ZWRQcm9qZWN0LnBhY2thZ2VNYW5hZ2VyLFxuICAgICAgZW52RmlsZTogZW52RmlsZVBhdGgsXG4gICAgfSk7XG5cbiAgICBpZiAoIWJ1aWxkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgQnVpbGQgZmFpbGVkOiAke2J1aWxkUmVzdWx0LmVycm9yfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1aWxkT3V0cHV0RGlyID0gYnVpbGRSZXN1bHQub3V0cHV0RGlyO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBCdWlsZCBjb21wbGV0ZWQgaW4gJHsoYnVpbGRSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDEpfXNgKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgfVxuXG4gIC8vIFN0ZXAgMjogUGFja2FnZVxuICBjb25zdCBwYWNrYWdlU3RlcCA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDIgOiAxO1xuICBjb25zdCB0b3RhbFN0ZXBzID0gYnVpbGRNb2RlID09PSAnbG9jYWwnID8gNCA6IDM7XG5cbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAsIHRvdGFsU3RlcHMsICdDcmVhdGluZyBkZXBsb3ltZW50IHBhY2thZ2UuLi4nKTtcblxuICBsZXQgcGFja2FnZVJlc3VsdDtcbiAgdHJ5IHtcbiAgICBwYWNrYWdlUmVzdWx0ID0gYXdhaXQgcGFja2FnZVNlcnZpY2UucGFja2FnZSh7XG4gICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHByb2plY3RUeXBlLFxuICAgICAgYnVpbGRPdXRwdXREaXIsXG4gICAgICBpbmNsdWRlU291cmNlOiBidWlsZE1vZGUgPT09ICdzZXJ2ZXInLFxuICAgICAgZW52RmlsZTogcHJvamVjdFR5cGUgPT09ICdub2RlJyA/IGVudkZpbGVQYXRoIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihgUGFja2FnaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDM6IEFuYWx5emUgJiBVcGxvYWRcbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAgKyAxLCB0b3RhbFN0ZXBzLCAnQW5hbHl6aW5nIGFuZCB1cGxvYWRpbmcgdG8gc2VydmVyLi4uJyk7XG5cbiAgbGV0IHVwbG9hZFNlcnZpY2U7XG4gIHRyeSB7XG4gICAgdXBsb2FkU2VydmljZSA9IGNyZWF0ZVVwbG9hZFNlcnZpY2UoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBbmFseXplIHBhY2thZ2UgZmlyc3QgKGZvciBzZXJ2ZXItYnVpbGQgbW9kZSB0byBnZXQgd2FybmluZ3MpXG4gIGxldCBjb25maXJtU2VydmVyQnVpbGQgPSBmYWxzZTtcbiAgaWYgKGJ1aWxkTW9kZSA9PT0gJ3NlcnZlcicpIHtcbiAgICBjb25zdCBhbmFseXplUmVzdWx0ID0gYXdhaXQgdXBsb2FkU2VydmljZS5hbmFseXplUGFja2FnZShwYWNrYWdlUmVzdWx0LnppcFBhdGgsIHByb2plY3RUeXBlKTtcblxuICAgIGlmIChhbmFseXplUmVzdWx0LnN1Y2Nlc3MgJiYgYW5hbHl6ZVJlc3VsdC5hbmFseXNpcykge1xuICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplUmVzdWx0LmFuYWx5c2lzO1xuXG4gICAgICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gICAgICBpZiAoYW5hbHlzaXMud2FybmluZ3MgJiYgYW5hbHlzaXMud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZlciBBbmFseXNpczonKTtcbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIGFuYWx5c2lzLndhcm5pbmdzKSB7XG4gICAgICAgICAgY29uc3QgcHJlZml4ID0gd2FybmluZy5sZXZlbCA9PT0gJ2NyaXRpY2FsJyA/ICfinYwnIDogd2FybmluZy5sZXZlbCA9PT0gJ3dhcm5pbmcnID8gJ+KaoO+4jycgOiAn4oS577iPJztcbiAgICAgICAgICBsb2dnZXIuZGltKGAgICR7cHJlZml4fSAke3dhcm5pbmcubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGNvbmZpcm1hdGlvbiBmb3Igc2VydmVyLXNpZGUgYnVpbGRcbiAgICAgIGlmIChhbmFseXNpcy5yZXF1aXJlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICBjb25zdCB7IGNvbmZpcm1CdWlsZCB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgICAgICBuYW1lOiAnY29uZmlybUJ1aWxkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2FuYWx5c2lzLmNvbmZpcm1hdGlvblJlYXNvbiB8fCAnU2VydmVyLXNpZGUgYnVpbGQgcmVxdWlyZWQnfS4gVGhpcyBtYXkgY29uc3VtZSBzaWduaWZpY2FudCByZXNvdXJjZXMuIENvbnRpbnVlP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmICghY29uZmlybUJ1aWxkKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0RlcGxveW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXIuJyk7XG4gICAgICAgICAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtU2VydmVyQnVpbGQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UudXBsb2FkKHtcbiAgICB6aXBQYXRoOiBwYWNrYWdlUmVzdWx0LnppcFBhdGgsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgcHJvamVjdFR5cGUsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgIGJ1aWxkTW9kZSxcbiAgICBjb25maXJtU2VydmVyQnVpbGQsXG4gICAgLy8gRU5WIG11dGFiaWxpdHkgdHJhY2tpbmdcbiAgICBkZXBsb3ltZW50U291cmNlOiAnY2xpJyxcbiAgICBlbnZJbmplY3RlZCxcbiAgfSk7XG5cbiAgLy8gQ2xlYW51cCB6aXAgZmlsZVxuICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG5cbiAgaWYgKCF1cGxvYWRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGxvZ2dlci5lcnJvcihgVXBsb2FkIGZhaWxlZDogJHt1cGxvYWRSZXN1bHQuZXJyb3J9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBjb21wbGV0ZScpO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDQ6IFdhaXQgZm9yIGRlcGxveW1lbnQgKGlmIGRlcGxveW1lbnQgSUQgYXZhaWxhYmxlKVxuICBpZiAodXBsb2FkUmVzdWx0LmRlcGxveW1lbnRJZCkge1xuICAgIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMiwgdG90YWxTdGVwcywgJ1dhaXRpbmcgZm9yIGRlcGxveW1lbnQgdG8gY29tcGxldGUuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IGF3YWl0IHVwbG9hZFNlcnZpY2UucG9sbERlcGxveW1lbnRTdGF0dXMoXG4gICAgICAgIHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQsXG4gICAgICAgIChzdGF0dXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzLnByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHIgIFByb2dyZXNzOiAke3N0YXR1cy5wcm9ncmVzc30lYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIGlmIChmaW5hbFN0YXR1cy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0RlcGxveW1lbnQgc3VjY2Vzc2Z1bCEnKTtcblxuICAgICAgICBjb25zdCBzYWZlTmFtZSA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICctJyk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZG9tYWluIGNvbmZpZyB0byBzaG93IHByb3BlciBVUkxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkb21haW5SZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtjb25maWcuc2VydmVyVXJsfS9hcGkvZG9tYWluYCwge1xuICAgICAgICAgICAgaGVhZGVyczogY29uZmlnLnRva2VuID8geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLnRva2VufWAgfSA6IHt9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRvbWFpbkNvbmZpZyA9IGRvbWFpblJlc3BvbnNlLmRhdGE7XG5cbiAgICAgICAgICBpZiAoZG9tYWluQ29uZmlnLmRvbWFpbj8uYWN0aXZlICYmIGRvbWFpbkNvbmZpZy5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnKSB7XG4gICAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6IGh0dHBzOi8vJHtkb21haW5Db25maWcuZG9tYWluLmRvbWFpbn0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNlcnZlciBVUkwgaWYgZG9tYWluIGZldGNoIGZhaWxzXG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBEZXBsb3ltZW50IGZhaWxlZDogJHtmaW5hbFN0YXR1cy5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cy5sb2dzKSB7XG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmRpbSgnTG9nczonKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmaW5hbFN0YXR1cy5sb2dzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IHRyYWNrIGRlcGxveW1lbnQgc3RhdHVzJyk7XG4gICAgICBsb2dnZXIuZGltKCdDaGVjayB0aGUgd2ViIFVJIGZvciBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuc3VjY2VzcygnVXBsb2FkIHN1Y2Nlc3NmdWwhJyk7XG4gICAgbG9nZ2VyLmRpbSgnRGVwbG95bWVudCBpcyBiZWluZyBwcm9jZXNzZWQuIENoZWNrIHRoZSB3ZWIgVUkgZm9yIHN0YXR1cy4nKTtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function domainCommand(): Promise<void>;
|
|
@@ -0,0 +1,176 @@
|
|
|
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.domainCommand = domainCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const config_1 = require("../utils/config");
|
|
11
|
+
const logger_1 = require("../utils/logger");
|
|
12
|
+
async function domainCommand() {
|
|
13
|
+
logger_1.logger.header('Runway Domain Configuration');
|
|
14
|
+
if (!(0, config_1.isConfigured)()) {
|
|
15
|
+
logger_1.logger.error('CLI not configured. Run "runway init" first.');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const config = (0, config_1.getConfig)();
|
|
19
|
+
const baseUrl = config.serverUrl;
|
|
20
|
+
// Fetch current domain config
|
|
21
|
+
const spinner = (0, ora_1.default)('Fetching domain configuration...').start();
|
|
22
|
+
let domainConfig;
|
|
23
|
+
try {
|
|
24
|
+
const response = await axios_1.default.get(`${baseUrl}/api/domain`, {
|
|
25
|
+
headers: config.token ? { Authorization: `Bearer ${config.token}` } : {},
|
|
26
|
+
});
|
|
27
|
+
domainConfig = response.data;
|
|
28
|
+
spinner.succeed('Configuration loaded');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
spinner.fail('Failed to fetch configuration');
|
|
32
|
+
if (error.response?.status === 401) {
|
|
33
|
+
logger_1.logger.error('Authentication failed. Run "runway init" to re-authenticate.');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
logger_1.logger.error(error.response?.data?.error || error.message);
|
|
37
|
+
}
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
logger_1.logger.blank();
|
|
41
|
+
// Display current status
|
|
42
|
+
logger_1.logger.info(`Server IP: ${domainConfig.serverIp || 'Unknown'}`);
|
|
43
|
+
logger_1.logger.info(`Security Mode: ${domainConfig.securityMode}`);
|
|
44
|
+
if (domainConfig.domain) {
|
|
45
|
+
const d = domainConfig.domain;
|
|
46
|
+
logger_1.logger.info(`Domain: ${d.domain}`);
|
|
47
|
+
logger_1.logger.info(`Status: ${d.verificationStatus}${d.active ? ' (Active)' : ''}`);
|
|
48
|
+
if (d.failureReason) {
|
|
49
|
+
logger_1.logger.warn(`Failure: ${d.failureReason}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
logger_1.logger.dim('No domain configured');
|
|
54
|
+
}
|
|
55
|
+
logger_1.logger.blank();
|
|
56
|
+
// Show action menu
|
|
57
|
+
const choices = domainConfig.domain
|
|
58
|
+
? [
|
|
59
|
+
{ name: 'Re-verify domain', value: 'verify' },
|
|
60
|
+
{ name: 'Change domain', value: 'change' },
|
|
61
|
+
{ name: 'Remove domain', value: 'remove' },
|
|
62
|
+
{ name: 'Exit', value: 'exit' },
|
|
63
|
+
]
|
|
64
|
+
: [
|
|
65
|
+
{ name: 'Configure domain', value: 'add' },
|
|
66
|
+
{ name: 'Exit', value: 'exit' },
|
|
67
|
+
];
|
|
68
|
+
const { action } = await inquirer_1.default.prompt([
|
|
69
|
+
{
|
|
70
|
+
type: 'list',
|
|
71
|
+
name: 'action',
|
|
72
|
+
message: 'What would you like to do?',
|
|
73
|
+
choices,
|
|
74
|
+
},
|
|
75
|
+
]);
|
|
76
|
+
if (action === 'exit')
|
|
77
|
+
return;
|
|
78
|
+
if (action === 'verify') {
|
|
79
|
+
await verifyDomain(baseUrl, config.token);
|
|
80
|
+
}
|
|
81
|
+
else if (action === 'add' || action === 'change') {
|
|
82
|
+
await configureDomain(baseUrl, config.token, domainConfig.serverIp);
|
|
83
|
+
}
|
|
84
|
+
else if (action === 'remove') {
|
|
85
|
+
await removeDomain(baseUrl, config.token);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function configureDomain(baseUrl, token, serverIp) {
|
|
89
|
+
logger_1.logger.blank();
|
|
90
|
+
if (serverIp) {
|
|
91
|
+
logger_1.logger.info('Before configuring, ensure your domain has an A record pointing to:');
|
|
92
|
+
logger_1.logger.success(` ${serverIp}`);
|
|
93
|
+
logger_1.logger.blank();
|
|
94
|
+
}
|
|
95
|
+
const { domain } = await inquirer_1.default.prompt([
|
|
96
|
+
{
|
|
97
|
+
type: 'input',
|
|
98
|
+
name: 'domain',
|
|
99
|
+
message: 'Enter domain (e.g., app.example.com):',
|
|
100
|
+
validate: (input) => {
|
|
101
|
+
if (!input.trim())
|
|
102
|
+
return 'Domain is required';
|
|
103
|
+
if (!/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(input)) {
|
|
104
|
+
return 'Invalid domain format';
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
]);
|
|
110
|
+
const spinner = (0, ora_1.default)('Verifying domain DNS...').start();
|
|
111
|
+
try {
|
|
112
|
+
const response = await axios_1.default.post(`${baseUrl}/api/domain`, { domain: domain.toLowerCase() }, { headers: token ? { Authorization: `Bearer ${token}` } : {} });
|
|
113
|
+
if (response.data.success) {
|
|
114
|
+
spinner.succeed('Domain configured successfully!');
|
|
115
|
+
logger_1.logger.success("HTTPS is now active via Let's Encrypt");
|
|
116
|
+
logger_1.logger.blank();
|
|
117
|
+
logger_1.logger.info(`Your server is now accessible at: https://${domain.toLowerCase()}`);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
spinner.fail('Domain verification failed');
|
|
121
|
+
if (response.data.verificationResult?.error) {
|
|
122
|
+
logger_1.logger.error(response.data.verificationResult.error);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
spinner.fail('Failed to configure domain');
|
|
128
|
+
logger_1.logger.error(error.response?.data?.error || error.message);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async function verifyDomain(baseUrl, token) {
|
|
132
|
+
const spinner = (0, ora_1.default)('Re-verifying domain...').start();
|
|
133
|
+
try {
|
|
134
|
+
const response = await axios_1.default.post(`${baseUrl}/api/domain/verify`, {}, { headers: token ? { Authorization: `Bearer ${token}` } : {} });
|
|
135
|
+
if (response.data.success) {
|
|
136
|
+
spinner.succeed('Domain verified successfully!');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
spinner.fail('Verification failed');
|
|
140
|
+
if (response.data.verificationResult?.error) {
|
|
141
|
+
logger_1.logger.error(response.data.verificationResult.error);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
spinner.fail('Verification failed');
|
|
147
|
+
logger_1.logger.error(error.response?.data?.error || error.message);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function removeDomain(baseUrl, token) {
|
|
151
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
152
|
+
{
|
|
153
|
+
type: 'confirm',
|
|
154
|
+
name: 'confirm',
|
|
155
|
+
message: 'This will remove HTTPS and revert to IP-based access. Continue?',
|
|
156
|
+
default: false,
|
|
157
|
+
},
|
|
158
|
+
]);
|
|
159
|
+
if (!confirm) {
|
|
160
|
+
logger_1.logger.warn('Cancelled.');
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const spinner = (0, ora_1.default)('Removing domain...').start();
|
|
164
|
+
try {
|
|
165
|
+
await axios_1.default.delete(`${baseUrl}/api/domain`, {
|
|
166
|
+
headers: token ? { Authorization: `Bearer ${token}` } : {},
|
|
167
|
+
});
|
|
168
|
+
spinner.succeed('Domain removed');
|
|
169
|
+
logger_1.logger.dim('Server is now accessible via IP address only');
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
spinner.fail('Failed to remove domain');
|
|
173
|
+
logger_1.logger.error(error.response?.data?.error || error.message);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RvbWFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlCQSxzQ0FpRkM7QUFsR0Qsd0RBQWdDO0FBQ2hDLGtEQUEwQjtBQUMxQiw4Q0FBc0I7QUFDdEIsNENBQTBEO0FBQzFELDRDQUF5QztBQWFsQyxLQUFLLFVBQVUsYUFBYTtJQUNqQyxlQUFNLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFFN0MsSUFBSSxDQUFDLElBQUEscUJBQVksR0FBRSxFQUFFLENBQUM7UUFDcEIsZUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzdELE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBUyxHQUFFLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUVqQyw4QkFBOEI7SUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFHLEVBQUMsa0NBQWtDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoRSxJQUFJLFlBQTBCLENBQUM7SUFFL0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxhQUFhLEVBQUU7WUFDeEQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDekUsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMs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VCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFHLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVsRCxJQUFJLENBQUM7UUFDSCxNQUFNLGVBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLGFBQWEsRUFBRTtZQUMxQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDM0QsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xDLGVBQU0sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDeEMsZUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgeyBnZXRDb25maWcsIGlzQ29uZmlndXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRG9tYWluQ29uZmlnIHtcbiAgZG9tYWluPzoge1xuICAgIGRvbWFpbjogc3RyaW5nO1xuICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICB2ZXJpZmljYXRpb25TdGF0dXM6ICdwZW5kaW5nJyB8ICd2ZXJpZmllZCcgfCAnZmFpbGVkJztcbiAgICBmYWlsdXJlUmVhc29uPzogc3RyaW5nO1xuICB9O1xuICBzZWN1cml0eU1vZGU6ICdpcC1odHRwJyB8ICdkb21haW4taHR0cHMnO1xuICBzZXJ2ZXJJcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvbWFpbkNvbW1hbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxvZ2dlci5oZWFkZXIoJ1J1bndheSBEb21haW4gQ29uZmlndXJhdGlvbicpO1xuXG4gIGlmICghaXNDb25maWd1cmVkKCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0NMSSBub3QgY29uZmlndXJlZC4gUnVuIFwicnVud2F5IGluaXRcIiBmaXJzdC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgYmFzZVVybCA9IGNvbmZpZy5zZXJ2ZXJVcmw7XG5cbiAgLy8gRmV0Y2ggY3VycmVudCBkb21haW4gY29uZmlnXG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0ZldGNoaW5nIGRvbWFpbiBjb25maWd1cmF0aW9uLi4uJykuc3RhcnQoKTtcbiAgbGV0IGRvbWFpbkNvbmZpZzogRG9tYWluQ29uZmlnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vYXBpL2RvbWFpbmAsIHtcbiAgICAgIGhlYWRlcnM6IGNvbmZpZy50b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH0gOiB7fSxcbiAgICB9KTtcbiAgICBkb21haW5Db25maWcgPSByZXNwb25zZS5kYXRhO1xuICAgIHNwaW5uZXIuc3VjY2VlZCgnQ29uZmlndXJhdGlvbiBsb2FkZWQnKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGZldGNoIGNvbmZpZ3VyYXRpb24nKTtcbiAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUnVuIFwicnVud2F5IGluaXRcIiB0byByZS1hdXRoZW50aWNhdGUuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIERpc3BsYXkgY3VycmVudCBzdGF0dXNcbiAgbG9nZ2VyLmluZm8oYFNlcnZlciBJUDogJHtkb21haW5Db25maWcuc2VydmVySXAgfHwgJ1Vua25vd24nfWApO1xuICBsb2dnZXIuaW5mbyhgU2VjdXJpdHkgTW9kZTogJHtkb21haW5Db25maWcuc2VjdXJpdHlNb2RlfWApO1xuXG4gIGlmIChkb21haW5Db25maWcuZG9tYWluKSB7XG4gICAgY29uc3QgZCA9IGRvbWFpbkNvbmZpZy5kb21haW47XG4gICAgbG9nZ2VyLmluZm8oYERvbWFpbjogJHtkLmRvbWFpbn1gKTtcbiAgICBsb2dnZXIuaW5mbyhgU3RhdHVzOiAke2QudmVyaWZpY2F0aW9uU3RhdHVzfSR7ZC5hY3RpdmUgPyAnIChBY3RpdmUpJyA6ICcnfWApO1xuICAgIGlmIChkLmZhaWx1cmVSZWFzb24pIHtcbiAgICAgIGxvZ2dlci53YXJuKGBGYWlsdXJlOiAke2QuZmFpbHVyZVJlYXNvbn1gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRpbSgnTm8gZG9tYWluIGNvbmZpZ3VyZWQnKTtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIFNob3cgYWN0aW9uIG1lbnVcbiAgY29uc3QgY2hvaWNlcyA9IGRvbWFpbkNvbmZpZy5kb21haW5cbiAgICA/IFtcbiAgICAgICAgeyBuYW1lOiAnUmUtdmVyaWZ5IGRvbWFpbicsIHZhbHVlOiAndmVyaWZ5JyB9LFxuICAgICAgICB7IG5hbWU6ICdDaGFuZ2UgZG9tYWluJywgdmFsdWU6ICdjaGFuZ2UnIH0sXG4gICAgICAgIHsgbmFtZTogJ1JlbW92ZSBkb21haW4nLCB2YWx1ZTogJ3JlbW92ZScgfSxcbiAgICAgICAgeyBuYW1lOiAnRXhpdCcsIHZhbHVlOiAnZXhpdCcgfSxcbiAgICAgIF1cbiAgICA6IFtcbiAgICAgICAgeyBuYW1lOiAnQ29uZmlndXJlIGRvbWFpbicsIHZhbHVlOiAnYWRkJyB9LFxuICAgICAgICB7IG5hbWU6ICdFeGl0JywgdmFsdWU6ICdleGl0JyB9LFxuICAgICAgXTtcblxuICBjb25zdCB7IGFjdGlvbiB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnYWN0aW9uJyxcbiAgICAgIG1lc3NhZ2U6ICdXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRvPycsXG4gICAgICBjaG9pY2VzLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmIChhY3Rpb24gPT09ICdleGl0JykgcmV0dXJuO1xuXG4gIGlmIChhY3Rpb24gPT09ICd2ZXJpZnknKSB7XG4gICAgYXdhaXQgdmVyaWZ5RG9tYWluKGJhc2VVcmwhLCBjb25maWcudG9rZW4pO1xuICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2FkZCcgfHwgYWN0aW9uID09PSAnY2hhbmdlJykge1xuICAgIGF3YWl0IGNvbmZpZ3VyZURvbWFpbihiYXNlVXJsISwgY29uZmlnLnRva2VuLCBkb21haW5Db25maWcuc2VydmVySXApO1xuICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICBhd2FpdCByZW1vdmVEb21haW4oYmFzZVVybCEsIGNvbmZpZy50b2tlbik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlRG9tYWluKFxuICBiYXNlVXJsOiBzdHJpbmcsXG4gIHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlcnZlcklwPzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGlmIChzZXJ2ZXJJcCkge1xuICAgIGxvZ2dlci5pbmZvKCdCZWZvcmUgY29uZmlndXJpbmcsIGVuc3VyZSB5b3VyIGRvbWFpbiBoYXMgYW4gQSByZWNvcmQgcG9pbnRpbmcgdG86Jyk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYCAgJHtzZXJ2ZXJJcH1gKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgfVxuXG4gIGNvbnN0IHsgZG9tYWluIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBuYW1lOiAnZG9tYWluJyxcbiAgICAgIG1lc3NhZ2U6ICdFbnRlciBkb21haW4gKGUuZy4sIGFwcC5leGFtcGxlLmNvbSk6JyxcbiAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIWlucHV0LnRyaW0oKSkgcmV0dXJuICdEb21haW4gaXMgcmVxdWlyZWQnO1xuICAgICAgICBpZiAoIS9eKFthLXowLTldKygtW2EtejAtOV0rKSpcXC4pK1thLXpdezIsfSQvaS50ZXN0KGlucHV0KSkge1xuICAgICAgICAgIHJldHVybiAnSW52YWxpZCBkb21haW4gZm9ybWF0JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnVmVyaWZ5aW5nIGRvbWFpbiBETlMuLi4nKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgYCR7YmFzZVVybH0vYXBpL2RvbWFpbmAsXG4gICAgICB7IGRvbWFpbjogZG9tYWluLnRvTG93ZXJDYXNlKCkgfSxcbiAgICAgIHsgaGVhZGVyczogdG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gOiB7fSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnRG9tYWluIGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoXCJIVFRQUyBpcyBub3cgYWN0aXZlIHZpYSBMZXQncyBFbmNyeXB0XCIpO1xuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICBsb2dnZXIuaW5mbyhgWW91ciBzZXJ2ZXIgaXMgbm93IGFjY2Vzc2libGUgYXQ6IGh0dHBzOi8vJHtkb21haW4udG9Mb3dlckNhc2UoKX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Bpbm5lci5mYWlsKCdEb21haW4gdmVyaWZpY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudmVyaWZpY2F0aW9uUmVzdWx0Py5lcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IocmVzcG9uc2UuZGF0YS52ZXJpZmljYXRpb25SZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNvbmZpZ3VyZSBkb21haW4nKTtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2UpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeURvbWFpbihiYXNlVXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnUmUtdmVyaWZ5aW5nIGRvbWFpbi4uLicpLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICBgJHtiYXNlVXJsfS9hcGkvZG9tYWluL3ZlcmlmeWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogdG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gOiB7fSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnRG9tYWluIHZlcmlmaWVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Bpbm5lci5mYWlsKCdWZXJpZmljYXRpb24gZmFpbGVkJyk7XG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS52ZXJpZmljYXRpb25SZXN1bHQ/LmVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihyZXNwb25zZS5kYXRhLnZlcmlmaWNhdGlvblJlc3VsdC5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgc3Bpbm5lci5mYWlsKCdWZXJpZmljYXRpb24gZmFpbGVkJyk7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCBlcnJvci5tZXNzYWdlKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZW1vdmVEb21haW4oYmFzZVVybDogc3RyaW5nLCB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY29uZmlybSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnY29uZmlybScsXG4gICAgICBtZXNzYWdlOiAnVGhpcyB3aWxsIHJlbW92ZSBIVFRQUyBhbmQgcmV2ZXJ0IHRvIElQLWJhc2VkIGFjY2Vzcy4gQ29udGludWU/JyxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmICghY29uZmlybSkge1xuICAgIGxvZ2dlci53YXJuKCdDYW5jZWxsZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnUmVtb3ZpbmcgZG9tYWluLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGF4aW9zLmRlbGV0ZShgJHtiYXNlVXJsfS9hcGkvZG9tYWluYCwge1xuICAgICAgaGVhZGVyczogdG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gOiB7fSxcbiAgICB9KTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ0RvbWFpbiByZW1vdmVkJyk7XG4gICAgbG9nZ2VyLmRpbSgnU2VydmVyIGlzIG5vdyBhY2Nlc3NpYmxlIHZpYSBJUCBhZGRyZXNzIG9ubHknKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHJlbW92ZSBkb21haW4nKTtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2UpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function metricsCommand(): Promise<void>;
|
|
@@ -0,0 +1,51 @@
|
|
|
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.metricsCommand = metricsCommand;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const config_1 = require("../utils/config");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
async function metricsCommand() {
|
|
12
|
+
logger_1.logger.header('Runway System Metrics');
|
|
13
|
+
if (!(0, config_1.isConfigured)()) {
|
|
14
|
+
logger_1.logger.error('CLI not configured. Run "runway init" first.');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const config = (0, config_1.getConfig)();
|
|
18
|
+
const spinner = (0, ora_1.default)('Fetching system metrics...').start();
|
|
19
|
+
try {
|
|
20
|
+
const response = await axios_1.default.get(`${config.serverUrl}/api/metrics`, {
|
|
21
|
+
headers: { Authorization: `Bearer ${config.token}` },
|
|
22
|
+
});
|
|
23
|
+
spinner.succeed('Metrics loaded');
|
|
24
|
+
logger_1.logger.blank();
|
|
25
|
+
const m = response.data.data;
|
|
26
|
+
// Format uptime
|
|
27
|
+
const days = Math.floor(m.uptime / 86400);
|
|
28
|
+
const hours = Math.floor((m.uptime % 86400) / 3600);
|
|
29
|
+
const minutes = Math.floor((m.uptime % 3600) / 60);
|
|
30
|
+
const uptimeStr = `${days}d ${hours}h ${minutes}m`;
|
|
31
|
+
// Format memory
|
|
32
|
+
const totalGB = (m.totalMemory / 1024 / 1024 / 1024).toFixed(1);
|
|
33
|
+
const usedGB = (m.usedMemory / 1024 / 1024 / 1024).toFixed(1);
|
|
34
|
+
// Display metrics
|
|
35
|
+
logger_1.logger.info(`CPU Usage: ${m.cpu.toFixed(1)}%`);
|
|
36
|
+
logger_1.logger.info(`Memory: ${m.memory.toFixed(1)}% (${usedGB}GB / ${totalGB}GB)`);
|
|
37
|
+
logger_1.logger.info(`Disk: ${m.disk.toFixed(1)}%`);
|
|
38
|
+
logger_1.logger.info(`Uptime: ${uptimeStr}`);
|
|
39
|
+
logger_1.logger.blank();
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
spinner.fail('Failed to fetch metrics');
|
|
43
|
+
if (error.response?.status === 401) {
|
|
44
|
+
logger_1.logger.error('Authentication failed. Run "runway init" to re-authenticate.');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
logger_1.logger.error(error.response?.data?.error || error.message);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBY0Esd0NBOENDO0FBNURELGtEQUEwQjtBQUMxQiw4Q0FBc0I7QUFDdEIsNENBQTBEO0FBQzFELDRDQUF5QztBQVdsQyxLQUFLLFVBQVUsY0FBYztJQUNsQyxlQUFNLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFdkMsSUFBSSxDQUFDLElBQUEscUJBQVksR0FBRSxFQUFFLENBQUM7UUFDcEIsZUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzdELE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBUyxHQUFFLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFHLEVBQUMsNEJBQTRCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUUxRCxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxjQUFjLEVBQUU7WUFDbEUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFO1NBQ3JELENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsQyxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFZixNQUFNLENBQUMsR0FBWSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUV0QyxnQkFBZ0I7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUssS0FBSyxPQUFPLEdBQUcsQ0FBQztRQUVuRCxnQkFBZ0I7UUFDaEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RCxrQkFBa0I7UUFDbEIsZUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELGVBQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sUUFBUSxPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQ2xGLGVBQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxlQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTFDLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNuQyxlQUFNLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDL0UsQ0FBQzthQUFNLENBQUM7WUFDTixlQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IGdldENvbmZpZywgaXNDb25maWd1cmVkIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlcic7XG5cbmludGVyZmFjZSBNZXRyaWNzIHtcbiAgY3B1OiBudW1iZXI7XG4gIG1lbW9yeTogbnVtYmVyO1xuICBkaXNrOiBudW1iZXI7XG4gIHVwdGltZTogbnVtYmVyO1xuICB0b3RhbE1lbW9yeTogbnVtYmVyO1xuICB1c2VkTWVtb3J5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXRyaWNzQ29tbWFuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nZ2VyLmhlYWRlcignUnVud2F5IFN5c3RlbSBNZXRyaWNzJyk7XG5cbiAgaWYgKCFpc0NvbmZpZ3VyZWQoKSkge1xuICAgIGxvZ2dlci5lcnJvcignQ0xJIG5vdCBjb25maWd1cmVkLiBSdW4gXCJydW53YXkgaW5pdFwiIGZpcnN0LicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdGZXRjaGluZyBzeXN0ZW0gbWV0cmljcy4uLicpLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtjb25maWcuc2VydmVyVXJsfS9hcGkvbWV0cmljc2AsIHtcbiAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH0sXG4gICAgfSk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoJ01ldHJpY3MgbG9hZGVkJyk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgICBjb25zdCBtOiBNZXRyaWNzID0gcmVzcG9uc2UuZGF0YS5kYXRhO1xuXG4gICAgLy8gRm9ybWF0IHVwdGltZVxuICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKG0udXB0aW1lIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigobS51cHRpbWUgJSA4NjQwMCkgLyAzNjAwKTtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigobS51cHRpbWUgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCB1cHRpbWVTdHIgPSBgJHtkYXlzfWQgJHtob3Vyc31oICR7bWludXRlc31tYDtcblxuICAgIC8vIEZvcm1hdCBtZW1vcnlcbiAgICBjb25zdCB0b3RhbEdCID0gKG0udG90YWxNZW1vcnkgLyAxMDI0IC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMSk7XG4gICAgY29uc3QgdXNlZEdCID0gKG0udXNlZE1lbW9yeSAvIDEwMjQgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgxKTtcblxuICAgIC8vIERpc3BsYXkgbWV0cmljc1xuICAgIGxvZ2dlci5pbmZvKGBDUFUgVXNhZ2U6ICAgICR7bS5jcHUudG9GaXhlZCgxKX0lYCk7XG4gICAgbG9nZ2VyLmluZm8oYE1lbW9yeTogICAgICAgJHttLm1lbW9yeS50b0ZpeGVkKDEpfSUgKCR7dXNlZEdCfUdCIC8gJHt0b3RhbEdCfUdCKWApO1xuICAgIGxvZ2dlci5pbmZvKGBEaXNrOiAgICAgICAgICR7bS5kaXNrLnRvRml4ZWQoMSl9JWApO1xuICAgIGxvZ2dlci5pbmZvKGBVcHRpbWU6ICAgICAgICR7dXB0aW1lU3RyfWApO1xuXG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBmZXRjaCBtZXRyaWNzJyk7XG4gICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJ1biBcInJ1bndheSBpbml0XCIgdG8gcmUtYXV0aGVudGljYXRlLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function resetCommand(): Promise<void>;
|
|
@@ -0,0 +1,36 @@
|
|
|
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.resetCommand = resetCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const config_1 = require("../utils/config");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
const init_1 = require("./init");
|
|
11
|
+
async function resetCommand() {
|
|
12
|
+
logger_1.logger.header('Runway Reset');
|
|
13
|
+
if (!(0, config_1.isConfigured)()) {
|
|
14
|
+
logger_1.logger.warn('CLI is not configured. Running init...');
|
|
15
|
+
await (0, init_1.initCommand)({});
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
19
|
+
{
|
|
20
|
+
type: 'confirm',
|
|
21
|
+
name: 'confirm',
|
|
22
|
+
message: 'This will clear all CLI configuration. Continue?',
|
|
23
|
+
default: false,
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
26
|
+
if (!confirm) {
|
|
27
|
+
logger_1.logger.warn('Reset cancelled.');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
(0, config_1.clearConfig)();
|
|
31
|
+
logger_1.logger.success('Configuration cleared.');
|
|
32
|
+
logger_1.logger.blank();
|
|
33
|
+
// Re-run init
|
|
34
|
+
await (0, init_1.initCommand)({});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcmVzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxvQ0E2QkM7QUFsQ0Qsd0RBQWdDO0FBQ2hDLDRDQUE0RDtBQUM1RCw0Q0FBeUM7QUFDekMsaUNBQXFDO0FBRTlCLEtBQUssVUFBVSxZQUFZO0lBQ2hDLGVBQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFOUIsSUFBSSxDQUFDLElBQUEscUJBQVksR0FBRSxFQUFFLENBQUM7UUFDcEIsZUFBTSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBQSxrQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7UUFDeEM7WUFDRSxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLGtEQUFrRDtZQUMzRCxPQUFPLEVBQUUsS0FBSztTQUNmO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsZUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBQSxvQkFBVyxHQUFFLENBQUM7SUFDZCxlQUFNLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDekMsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWYsY0FBYztJQUNkLE1BQU0sSUFBQSxrQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IHsgY2xlYXJDb25maWcsIGlzQ29uZmlndXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgaW5pdENvbW1hbmQgfSBmcm9tICcuL2luaXQnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzZXRDb21tYW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgUmVzZXQnKTtcblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0NMSSBpcyBub3QgY29uZmlndXJlZC4gUnVubmluZyBpbml0Li4uJyk7XG4gICAgYXdhaXQgaW5pdENvbW1hbmQoe30pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgY29uZmlybSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnY29uZmlybScsXG4gICAgICBtZXNzYWdlOiAnVGhpcyB3aWxsIGNsZWFyIGFsbCBDTEkgY29uZmlndXJhdGlvbi4gQ29udGludWU/JyxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmICghY29uZmlybSkge1xuICAgIGxvZ2dlci53YXJuKCdSZXNldCBjYW5jZWxsZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2xlYXJDb25maWcoKTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoJ0NvbmZpZ3VyYXRpb24gY2xlYXJlZC4nKTtcbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gUmUtcnVuIGluaXRcbiAgYXdhaXQgaW5pdENvbW1hbmQoe30pO1xufVxuIl19
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,9 @@ const init_1 = require("./commands/init");
|
|
|
6
6
|
const deploy_1 = require("./commands/deploy");
|
|
7
7
|
const list_1 = require("./commands/list");
|
|
8
8
|
const status_1 = require("./commands/status");
|
|
9
|
+
const reset_1 = require("./commands/reset");
|
|
10
|
+
const domain_1 = require("./commands/domain");
|
|
11
|
+
const metrics_1 = require("./commands/metrics");
|
|
9
12
|
const program = new commander_1.Command();
|
|
10
13
|
program
|
|
11
14
|
.name('runway')
|
|
@@ -39,6 +42,21 @@ program
|
|
|
39
42
|
.command('status <project>')
|
|
40
43
|
.description('Get status of a deployed project')
|
|
41
44
|
.action(status_1.statusCommand);
|
|
45
|
+
// Reset command
|
|
46
|
+
program
|
|
47
|
+
.command('reset')
|
|
48
|
+
.description('Reset CLI configuration and re-run init')
|
|
49
|
+
.action(reset_1.resetCommand);
|
|
50
|
+
// Domain command
|
|
51
|
+
program
|
|
52
|
+
.command('domain')
|
|
53
|
+
.description('Configure server domain (same as UI)')
|
|
54
|
+
.action(domain_1.domainCommand);
|
|
55
|
+
// Metrics command
|
|
56
|
+
program
|
|
57
|
+
.command('metrics')
|
|
58
|
+
.description('Display server system metrics')
|
|
59
|
+
.action(metrics_1.metricsCommand);
|
|
42
60
|
// Parse command line arguments
|
|
43
61
|
program.parse();
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUNBQW9DO0FBQ3BDLDBDQUE4QztBQUM5Qyw4Q0FBa0Q7QUFDbEQsMENBQThDO0FBQzlDLDhDQUFrRDtBQUNsRCw0Q0FBZ0Q7QUFDaEQsOENBQWtEO0FBQ2xELGdEQUFvRDtBQUVwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUNkLFdBQVcsQ0FBQywyQ0FBMkMsQ0FBQztLQUN4RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFcEIsZUFBZTtBQUNmLE9BQU87S0FDSixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLDBCQUEwQixDQUFDO0tBQ3ZDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7S0FDMUMsTUFBTSxDQUFDLGtCQUFXLENBQUMsQ0FBQztBQUV2QixpQkFBaUI7QUFDakIsT0FBTztLQUNKLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDakIsV0FBVyxDQUFDLDRCQUE0QixDQUFDO0tBQ3pDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUM7S0FDM0MsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGtDQUFrQyxDQUFDO0tBQy9ELE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxnQkFBZ0IsQ0FBQztLQUNuRCxNQUFNLENBQUMsZUFBZSxFQUFFLDBDQUEwQyxDQUFDO0tBQ25FLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxtQ0FBbUMsQ0FBQztLQUM3RCxNQUFNLENBQUMsdUJBQXVCLEVBQUUsMEJBQTBCLENBQUM7S0FDM0QsTUFBTSxDQUFDLHNCQUFhLENBQUMsQ0FBQztBQUV6QixlQUFlO0FBQ2YsT0FBTztLQUNKLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ1gsV0FBVyxDQUFDLHdCQUF3QixDQUFDO0tBQ3JDLE1BQU0sQ0FBQyxrQkFBVyxDQUFDLENBQUM7QUFFdkIsaUJBQWlCO0FBQ2pCLE9BQU87S0FDSixPQUFPLENBQUMsa0JBQWtCLENBQUM7S0FDM0IsV0FBVyxDQUFDLGtDQUFrQyxDQUFDO0tBQy9DLE1BQU0sQ0FBQyxzQkFBYSxDQUFDLENBQUM7QUFFekIsZ0JBQWdCO0FBQ2hCLE9BQU87S0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ2hCLFdBQVcsQ0FBQyx5Q0FBeUMsQ0FBQztLQUN0RCxNQUFNLENBQUMsb0JBQVksQ0FBQyxDQUFDO0FBRXhCLGlCQUFpQjtBQUNqQixPQUFPO0tBQ0osT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixXQUFXLENBQUMsc0NBQXNDLENBQUM7S0FDbkQsTUFBTSxDQUFDLHNCQUFhLENBQUMsQ0FBQztBQUV6QixrQkFBa0I7QUFDbEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUM7S0FDbEIsV0FBVyxDQUFDLCtCQUErQixDQUFDO0tBQzVDLE1BQU0sQ0FBQyx3QkFBYyxDQUFDLENBQUM7QUFFMUIsK0JBQStCO0FBQy9CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBpbml0Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvaW5pdCc7XG5pbXBvcnQgeyBkZXBsb3lDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9kZXBsb3knO1xuaW1wb3J0IHsgbGlzdENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2xpc3QnO1xuaW1wb3J0IHsgc3RhdHVzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvc3RhdHVzJztcbmltcG9ydCB7IHJlc2V0Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvcmVzZXQnO1xuaW1wb3J0IHsgZG9tYWluQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvZG9tYWluJztcbmltcG9ydCB7IG1ldHJpY3NDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9tZXRyaWNzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ3J1bndheScpXG4gIC5kZXNjcmlwdGlvbignQ0xJIHRvb2wgZm9yIGRlcGxveWluZyBwcm9qZWN0cyB0byBSdW53YXknKVxuICAudmVyc2lvbignMC4wLjEnKTtcblxuLy8gSW5pdCBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbml0JylcbiAgLmRlc2NyaXB0aW9uKCdDb25maWd1cmUgdGhlIFJ1bndheSBDTEknKVxuICAub3B0aW9uKCctcywgLS1zZXJ2ZXIgPHVybD4nLCAnU2VydmVyIFVSTCcpXG4gIC5hY3Rpb24oaW5pdENvbW1hbmQpO1xuXG4vLyBEZXBsb3kgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnZGVwbG95JylcbiAgLmRlc2NyaXB0aW9uKCdEZXBsb3kgdGhlIGN1cnJlbnQgcHJvamVjdCcpXG4gIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1Byb2plY3QgbmFtZScpXG4gIC5vcHRpb24oJy10LCAtLXR5cGUgPHR5cGU+JywgJ1Byb2plY3QgdHlwZSAocmVhY3QsIG5leHQsIG5vZGUpJylcbiAgLm9wdGlvbignLXYsIC0tdmVyc2lvbiA8dmVyc2lvbj4nLCAnVmVyc2lvbiBzdHJpbmcnKVxuICAub3B0aW9uKCctLWJ1aWxkLWxvY2FsJywgJ0J1aWxkIGxvY2FsbHkgYmVmb3JlIHVwbG9hZGluZyAoZGVmYXVsdCknKVxuICAub3B0aW9uKCctLWJ1aWxkLXNlcnZlcicsICdVcGxvYWQgc291cmNlIGFuZCBidWlsZCBvbiBzZXJ2ZXInKVxuICAub3B0aW9uKCctZSwgLS1lbnYtZmlsZSA8cGF0aD4nLCAnUGF0aCB0byBlbnZpcm9ubWVudCBmaWxlJylcbiAgLmFjdGlvbihkZXBsb3lDb21tYW5kKTtcblxuLy8gTGlzdCBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmFsaWFzKCdscycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBkZXBsb3llZCBwcm9qZWN0cycpXG4gIC5hY3Rpb24obGlzdENvbW1hbmQpO1xuXG4vLyBTdGF0dXMgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnc3RhdHVzIDxwcm9qZWN0PicpXG4gIC5kZXNjcmlwdGlvbignR2V0IHN0YXR1cyBvZiBhIGRlcGxveWVkIHByb2plY3QnKVxuICAuYWN0aW9uKHN0YXR1c0NvbW1hbmQpO1xuXG4vLyBSZXNldCBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNldCcpXG4gIC5kZXNjcmlwdGlvbignUmVzZXQgQ0xJIGNvbmZpZ3VyYXRpb24gYW5kIHJlLXJ1biBpbml0JylcbiAgLmFjdGlvbihyZXNldENvbW1hbmQpO1xuXG4vLyBEb21haW4gY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnZG9tYWluJylcbiAgLmRlc2NyaXB0aW9uKCdDb25maWd1cmUgc2VydmVyIGRvbWFpbiAoc2FtZSBhcyBVSSknKVxuICAuYWN0aW9uKGRvbWFpbkNvbW1hbmQpO1xuXG4vLyBNZXRyaWNzIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ21ldHJpY3MnKVxuICAuZGVzY3JpcHRpb24oJ0Rpc3BsYXkgc2VydmVyIHN5c3RlbSBtZXRyaWNzJylcbiAgLmFjdGlvbihtZXRyaWNzQ29tbWFuZCk7XG5cbi8vIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
|
|
@@ -37,7 +37,7 @@ class PackageService {
|
|
|
37
37
|
}
|
|
38
38
|
else {
|
|
39
39
|
// Local-build mode: include only build artifacts
|
|
40
|
-
this.addBuildArtifacts(archive, projectPath, projectType, buildOutputDir);
|
|
40
|
+
this.addBuildArtifacts(archive, projectPath, projectType, buildOutputDir, options.envFile);
|
|
41
41
|
}
|
|
42
42
|
archive.finalize();
|
|
43
43
|
});
|
|
@@ -62,7 +62,7 @@ class PackageService {
|
|
|
62
62
|
});
|
|
63
63
|
logger_1.logger.dim('Including source files for server-side build');
|
|
64
64
|
}
|
|
65
|
-
addBuildArtifacts(archive, projectPath, projectType, buildOutputDir) {
|
|
65
|
+
addBuildArtifacts(archive, projectPath, projectType, buildOutputDir, envFile) {
|
|
66
66
|
// Include package.json if it exists (optional for static sites)
|
|
67
67
|
const packageJsonPath = path_1.default.join(projectPath, 'package.json');
|
|
68
68
|
if (fs_1.default.existsSync(packageJsonPath)) {
|
|
@@ -94,18 +94,25 @@ class PackageService {
|
|
|
94
94
|
logger_1.logger.dim('Including Next.js build artifacts');
|
|
95
95
|
break;
|
|
96
96
|
case 'node':
|
|
97
|
-
// For Node.js, include everything except node_modules
|
|
97
|
+
// For Node.js, include everything except node_modules and env files
|
|
98
98
|
const nodeIgnorePatterns = [
|
|
99
99
|
'node_modules/**',
|
|
100
100
|
'.git/**',
|
|
101
101
|
'.runway-deploy.zip',
|
|
102
102
|
'*.log',
|
|
103
|
+
'.env', // Exclude default .env (we'll add specified one explicitly)
|
|
104
|
+
'.env.*',
|
|
103
105
|
];
|
|
104
106
|
archive.glob('**/*', {
|
|
105
107
|
cwd: projectPath,
|
|
106
108
|
ignore: nodeIgnorePatterns,
|
|
107
109
|
dot: true,
|
|
108
110
|
});
|
|
111
|
+
// Include the specified env file as .env
|
|
112
|
+
if (envFile && fs_1.default.existsSync(envFile)) {
|
|
113
|
+
archive.file(envFile, { name: '.env' });
|
|
114
|
+
logger_1.logger.dim('Including environment file');
|
|
115
|
+
}
|
|
109
116
|
logger_1.logger.dim('Including Node.js project files');
|
|
110
117
|
break;
|
|
111
118
|
case 'static':
|
|
@@ -150,4 +157,4 @@ class PackageService {
|
|
|
150
157
|
}
|
|
151
158
|
exports.PackageService = PackageService;
|
|
152
159
|
exports.packageService = new PackageService();
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcGFja2FnZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix3REFBZ0M7QUFFaEMsNENBQXlDO0FBY3pDLE1BQWEsY0FBYztJQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQXVCO1FBQ25DLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFNUUsTUFBTSxPQUFPLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUU3RCxpQ0FBaUM7UUFDakMsSUFBSSxZQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsWUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsZUFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sTUFBTSxHQUFHLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFBLGtCQUFRLEVBQUMsS0FBSyxFQUFFO1lBQzlCLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxzQkFBc0I7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3RCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDL0IsZUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdB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QUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQzFDLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxPQUEwQixFQUFFLE9BQWUsRUFBRSxRQUFnQjtRQUNoRixJQUFJLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUEwQixFQUFFLFdBQW1CO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFdkUsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFFBQVEsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNsRCxJQUFJLFlBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLElBQUksWUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNCLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTVLRCx3Q0E0S0M7QUFFWSxRQUFBLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGFyY2hpdmVyIGZyb20gJ2FyY2hpdmVyJztcbmltcG9ydCB7IFByb2plY3RUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlT3B0aW9ucyB7XG4gIHByb2plY3RQYXRoOiBzdHJpbmc7XG4gIHByb2plY3RUeXBlOiBQcm9qZWN0VHlwZTtcbiAgYnVpbGRPdXRwdXREaXI6IHN0cmluZztcbiAgaW5jbHVkZVNvdXJjZTogYm9vbGVhbjsgLy8gRm9yIHNlcnZlci1idWlsZCBtb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZVJlc3VsdCB7XG4gIHppcFBhdGg6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUGFja2FnZVNlcnZpY2Uge1xuICBhc3luYyBwYWNrYWdlKG9wdGlvbnM6IFBhY2thZ2VPcHRpb25zKTogUHJvbWlzZTxQYWNrYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgeyBwcm9qZWN0UGF0aCwgcHJvamVjdFR5cGUsIGJ1aWxkT3V0cHV0RGlyLCBpbmNsdWRlU291cmNlIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgemlwUGF0aCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJy5ydW53YXktZGVwbG95LnppcCcpO1xuXG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHppcCBpZiBwcmVzZW50XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoemlwUGF0aCkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMoemlwUGF0aCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIGRlcGxveW1lbnQgcGFja2FnZS4uLicpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oemlwUGF0aCk7XG4gICAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgICB6bGliOiB7IGxldmVsOiA5IH0sIC8vIE1heGltdW0gY29tcHJlc3Npb25cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBvdXRwdXQub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBzaXplID0gYXJjaGl2ZS5wb2ludGVyKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGBQYWNrYWdlIGNyZWF0ZWQ6ICR7KHNpemUgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKX0gTUJgKTtcbiAgICAgICAgcmVzb2x2ZSh7IHppcFBhdGgsIHNpemUgfSk7XG4gICAgICB9KTtcblxuICAgICAgYXJjaGl2ZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGFyY2hpdmUucGlwZShvdXRwdXQpO1xuXG4gICAgICBpZiAoaW5jbHVkZVNvdXJjZSkge1xuICAgICAgICAvLyBTZXJ2ZXItYnVpbGQgbW9kZTogaW5jbHVkZSBzb3VyY2UgZmlsZXNcbiAgICAgICAgdGhpcy5hZGRTb3VyY2VGaWxlcyhhcmNoaXZlLCBwcm9qZWN0UGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb2NhbC1idWlsZCBtb2RlOiBpbmNsdWRlIG9ubHkgYnVpbGQgYXJ0aWZhY3RzXG4gICAgICAgIHRoaXMuYWRkQnVpbGRBcnRpZmFjdHMoYXJjaGl2ZSwgcHJvamVjdFBhdGgsIHByb2plY3RUeXBlLCBidWlsZE91dHB1dERpcik7XG4gICAgICB9XG5cbiAgICAgIGFyY2hpdmUuZmluYWxpemUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU291cmNlRmlsZXMoYXJjaGl2ZTogYXJjaGl2ZXIuQXJjaGl2ZXIsIHByb2plY3RQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBJbmNsdWRlIGFsbCBmaWxlcyBleGNlcHQgbm9kZV9tb2R1bGVzLCAuZ2l0LCBhbmQgYnVpbGQgb3V0cHV0c1xuICAgIGNvbnN0IGlnbm9yZVBhdHRlcm5zID0gW1xuICAgICAgJ25vZGVfbW9kdWxlcy8qKicsXG4gICAgICAnLmdpdC8qKicsXG4gICAgICAnLm5leHQvKionLFxuICAgICAgJ2Rpc3QvKionLFxuICAgICAgJ2J1aWxkLyoqJyxcbiAgICAgICcucnVud2F5LWRlcGxveS56aXAnLFxuICAgICAgJyoubG9nJyxcbiAgICAgICcuZW52LmxvY2FsJyxcbiAgICAgICcuZW52LioubG9jYWwnLFxuICAgIF07XG5cbiAgICBhcmNoaXZlLmdsb2IoJyoqLyonLCB7XG4gICAgICBjd2Q6IHByb2plY3RQYXRoLFxuICAgICAgaWdub3JlOiBpZ25vcmVQYXR0ZXJucyxcbiAgICAgIGRvdDogdHJ1ZSwgLy8gSW5jbHVkZSBkb3RmaWxlc1xuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmRpbSgnSW5jbHVkaW5nIHNvdXJjZSBmaWxlcyBmb3Igc2VydmVyLXNpZGUgYnVpbGQnKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQnVpbGRBcnRpZmFjdHMoXG4gICAgYXJjaGl2ZTogYXJjaGl2ZXIuQXJjaGl2ZXIsXG4gICAgcHJvamVjdFBhdGg6IHN0cmluZyxcbiAgICBwcm9qZWN0VHlwZTogUHJvamVjdFR5cGUsXG4gICAgYnVpbGRPdXRwdXREaXI6IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICAvLyBJbmNsdWRlIHBhY2thZ2UuanNvbiBpZiBpdCBleGlzdHMgKG9wdGlvbmFsIGZvciBzdGF0aWMgc2l0ZXMpXG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAncGFja2FnZS5qc29uJyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgYXJjaGl2ZS5maWxlKHBhY2thZ2VKc29uUGF0aCwgeyBuYW1lOiAncGFja2FnZS5qc29uJyB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHByb2plY3RUeXBlKSB7XG4gICAgICBjYXNlICdyZWFjdCc6XG4gICAgICAgIC8vIEluY2x1ZGUgYnVpbHQgc3RhdGljIGZpbGVzXG4gICAgICAgIHRoaXMuYWRkRGlyZWN0b3J5KGFyY2hpdmUsIGJ1aWxkT3V0cHV0RGlyLCAnZGlzdCcpO1xuICAgICAgICBsb2dnZXIuZGltKGBJbmNsdWRpbmcgYnVpbGQgb3V0cHV0IGZyb20gJHtidWlsZE91dHB1dERpcn1gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAvLyBJbmNsdWRlIC5uZXh0IGRpcmVjdG9yeVxuICAgICAgICB0aGlzLmFkZERpcmVjdG9yeShhcmNoaXZlLCBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICcubmV4dCcpLCAnLm5leHQnKTtcblxuICAgICAgICAvLyBJbmNsdWRlIHB1YmxpYyBkaXJlY3RvcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHB1YmxpY0RpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ3B1YmxpYycpO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwdWJsaWNEaXIpKSB7XG4gICAgICAgICAgdGhpcy5hZGREaXJlY3RvcnkoYXJjaGl2ZSwgcHVibGljRGlyLCAncHVibGljJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNsdWRlIG5leHQuY29uZmlnLmpzIGlmIGV4aXN0c1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZ0ZpbGUgb2YgWyduZXh0LmNvbmZpZy5qcycsICduZXh0LmNvbmZpZy5tanMnLCAnbmV4dC5jb25maWcudHMnXSkge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsIGNvbmZpZ0ZpbGUpO1xuICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgICAgICAgICBhcmNoaXZlLmZpbGUoY29uZmlnUGF0aCwgeyBuYW1lOiBjb25maWdGaWxlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY2x1ZGUgcGFja2FnZS1sb2NrLmpzb24gb3IgeWFybi5sb2NrIGZvciBwcm9kdWN0aW9uIGRlcGVuZGVuY2llc1xuICAgICAgICB0aGlzLmFkZExvY2tGaWxlKGFyY2hpdmUsIHByb2plY3RQYXRoKTtcblxuICAgICAgICBsb2dnZXIuZGltKCdJbmNsdWRpbmcgTmV4dC5qcyBidWlsZCBhcnRpZmFjdHMnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAvLyBGb3IgTm9kZS5qcywgaW5jbHVkZSBldmVyeXRoaW5nIGV4Y2VwdCBub2RlX21vZHVsZXNcbiAgICAgICAgY29uc3Qgbm9kZUlnbm9yZVBhdHRlcm5zID0gW1xuICAgICAgICAgICdub2RlX21vZHVsZXMvKionLFxuICAgICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgICAnLnJ1bndheS1kZXBsb3kuemlwJyxcbiAgICAgICAgICAnKi5sb2cnLFxuICAgICAgICBdO1xuXG4gICAgICAgIGFyY2hpdmUuZ2xvYignKiovKicsIHtcbiAgICAgICAgICBjd2Q6IHByb2plY3RQYXRoLFxuICAgICAgICAgIGlnbm9yZTogbm9kZUlnbm9yZVBhdHRlcm5zLFxuICAgICAgICAgIGRvdDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbG9nZ2VyLmRpbSgnSW5jbHVkaW5nIE5vZGUuanMgcHJvamVjdCBmaWxlcycpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3RhdGljJzpcbiAgICAgICAgLy8gRm9yIHN0YXRpYyBzaXRlcywgaW5jbHVkZSBIVE1MLCBDU1MsIEpTLCBhbmQgY29tbW9uIGFzc2V0c1xuICAgICAgICBjb25zdCBzdGF0aWNJZ25vcmVQYXR0ZXJucyA9IFtcbiAgICAgICAgICAnbm9kZV9tb2R1bGVzLyoqJyxcbiAgICAgICAgICAnLmdpdC8qKicsXG4gICAgICAgICAgJy5ydW53YXktZGVwbG95LnppcCcsXG4gICAgICAgICAgJyoubG9nJyxcbiAgICAgICAgICAnLmVudicsXG4gICAgICAgICAgJy5lbnYuKicsXG4gICAgICAgIF07XG5cbiAgICAgICAgYXJjaGl2ZS5nbG9iKCcqKi8qJywge1xuICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgsXG4gICAgICAgICAgaWdub3JlOiBzdGF0aWNJZ25vcmVQYXR0ZXJucyxcbiAgICAgICAgICBkb3Q6IGZhbHNlLCAvLyBEb24ndCBpbmNsdWRlIGRvdGZpbGVzIGZvciBzdGF0aWMgc2l0ZXNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbG9nZ2VyLmRpbSgnSW5jbHVkaW5nIHN0YXRpYyBzaXRlIGZpbGVzJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRGlyZWN0b3J5KGFyY2hpdmU6IGFyY2hpdmVyLkFyY2hpdmVyLCBkaXJQYXRoOiBzdHJpbmcsIGRlc3RQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkaXJQYXRoKSkge1xuICAgICAgYXJjaGl2ZS5kaXJlY3RvcnkoZGlyUGF0aCwgZGVzdFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkTG9ja0ZpbGUoYXJjaGl2ZTogYXJjaGl2ZXIuQXJjaGl2ZXIsIHByb2plY3RQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBsb2NrRmlsZXMgPSBbJ3BhY2thZ2UtbG9jay5qc29uJywgJ3lhcm4ubG9jaycsICdwbnBtLWxvY2sueWFtbCddO1xuXG4gICAgZm9yIChjb25zdCBsb2NrRmlsZSBvZiBsb2NrRmlsZXMpIHtcbiAgICAgIGNvbnN0IGxvY2tQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCBsb2NrRmlsZSk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2NrUGF0aCkpIHtcbiAgICAgICAgYXJjaGl2ZS5maWxlKGxvY2tQYXRoLCB7IG5hbWU6IGxvY2tGaWxlIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhbnVwKHppcFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHppcFBhdGgpKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKHppcFBhdGgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcGFja2FnZVNlcnZpY2UgPSBuZXcgUGFja2FnZVNlcnZpY2UoKTtcbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcGFja2FnZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix3REFBZ0M7QUFFaEMsNENBQXlDO0FBZXpDLE1BQWEsY0FBYztJQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQXVCO1FBQ25DLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFNUUsTUFBTSxPQUFPLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUU3RCxpQ0FBaUM7UUFDakMsSUFBSSxZQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsWUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsZUFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sTUFBTSxHQUFHLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFBLGtCQUFRLEVBQUMsS0FBSyxFQUFFO1lBQzlCLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxzQkFBc0I7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3RCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDL0IsZUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdB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QVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNCLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXJMRCx3Q0FxTEM7QUFFWSxRQUFBLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGFyY2hpdmVyIGZyb20gJ2FyY2hpdmVyJztcbmltcG9ydCB7IFByb2plY3RUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlT3B0aW9ucyB7XG4gIHByb2plY3RQYXRoOiBzdHJpbmc7XG4gIHByb2plY3RUeXBlOiBQcm9qZWN0VHlwZTtcbiAgYnVpbGRPdXRwdXREaXI6IHN0cmluZztcbiAgaW5jbHVkZVNvdXJjZTogYm9vbGVhbjsgLy8gRm9yIHNlcnZlci1idWlsZCBtb2RlXG4gIGVudkZpbGU/OiBzdHJpbmc7IC8vIFBhdGggdG8gZW52IGZpbGUgdG8gaW5jbHVkZSAoZm9yIE5vZGUuanMgcHJvamVjdHMpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZVJlc3VsdCB7XG4gIHppcFBhdGg6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUGFja2FnZVNlcnZpY2Uge1xuICBhc3luYyBwYWNrYWdlKG9wdGlvbnM6IFBhY2thZ2VPcHRpb25zKTogUHJvbWlzZTxQYWNrYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgeyBwcm9qZWN0UGF0aCwgcHJvamVjdFR5cGUsIGJ1aWxkT3V0cHV0RGlyLCBpbmNsdWRlU291cmNlIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgemlwUGF0aCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJy5ydW53YXktZGVwbG95LnppcCcpO1xuXG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHppcCBpZiBwcmVzZW50XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoemlwUGF0aCkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMoemlwUGF0aCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIGRlcGxveW1lbnQgcGFja2FnZS4uLicpO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oemlwUGF0aCk7XG4gICAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgICB6bGliOiB7IGxldmVsOiA5IH0sIC8vIE1heGltdW0gY29tcHJlc3Npb25cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBvdXRwdXQub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBzaXplID0gYXJjaGl2ZS5wb2ludGVyKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGBQYWNrYWdlIGNyZWF0ZWQ6ICR7KHNpemUgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKX0gTUJgKTtcbiAgICAgICAgcmVzb2x2ZSh7IHppcFBhdGgsIHNpemUgfSk7XG4gICAgICB9KTtcblxuICAgICAgYXJjaGl2ZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGFyY2hpdmUucGlwZShvdXRwdXQpO1xuXG4gICAgICBpZiAoaW5jbHVkZVNvdXJjZSkge1xuICAgICAgICAvLyBTZXJ2ZXItYnVpbGQgbW9kZTogaW5jbHVkZSBzb3VyY2UgZmlsZXNcbiAgICAgICAgdGhpcy5hZGRTb3VyY2VGaWxlcyhhcmNoaXZlLCBwcm9qZWN0UGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb2NhbC1idWlsZCBtb2RlOiBpbmNsdWRlIG9ubHkgYnVpbGQgYXJ0aWZhY3RzXG4gICAgICAgIHRoaXMuYWRkQnVpbGRBcnRpZmFjdHMoYXJjaGl2ZSwgcHJvamVjdFBhdGgsIHByb2plY3RUeXBlLCBidWlsZE91dHB1dERpciwgb3B0aW9ucy5lbnZGaWxlKTtcbiAgICAgIH1cblxuICAgICAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTb3VyY2VGaWxlcyhhcmNoaXZlOiBhcmNoaXZlci5BcmNoaXZlciwgcHJvamVjdFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluY2x1ZGUgYWxsIGZpbGVzIGV4Y2VwdCBub2RlX21vZHVsZXMsIC5naXQsIGFuZCBidWlsZCBvdXRwdXRzXG4gICAgY29uc3QgaWdub3JlUGF0dGVybnMgPSBbXG4gICAgICAnbm9kZV9tb2R1bGVzLyoqJyxcbiAgICAgICcuZ2l0LyoqJyxcbiAgICAgICcubmV4dC8qKicsXG4gICAgICAnZGlzdC8qKicsXG4gICAgICAnYnVpbGQvKionLFxuICAgICAgJy5ydW53YXktZGVwbG95LnppcCcsXG4gICAgICAnKi5sb2cnLFxuICAgICAgJy5lbnYubG9jYWwnLFxuICAgICAgJy5lbnYuKi5sb2NhbCcsXG4gICAgXTtcblxuICAgIGFyY2hpdmUuZ2xvYignKiovKicsIHtcbiAgICAgIGN3ZDogcHJvamVjdFBhdGgsXG4gICAgICBpZ25vcmU6IGlnbm9yZVBhdHRlcm5zLFxuICAgICAgZG90OiB0cnVlLCAvLyBJbmNsdWRlIGRvdGZpbGVzXG4gICAgfSk7XG5cbiAgICBsb2dnZXIuZGltKCdJbmNsdWRpbmcgc291cmNlIGZpbGVzIGZvciBzZXJ2ZXItc2lkZSBidWlsZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRCdWlsZEFydGlmYWN0cyhcbiAgICBhcmNoaXZlOiBhcmNoaXZlci5BcmNoaXZlcixcbiAgICBwcm9qZWN0UGF0aDogc3RyaW5nLFxuICAgIHByb2plY3RUeXBlOiBQcm9qZWN0VHlwZSxcbiAgICBidWlsZE91dHB1dERpcjogc3RyaW5nLFxuICAgIGVudkZpbGU/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgLy8gSW5jbHVkZSBwYWNrYWdlLmpzb24gaWYgaXQgZXhpc3RzIChvcHRpb25hbCBmb3Igc3RhdGljIHNpdGVzKVxuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgIGFyY2hpdmUuZmlsZShwYWNrYWdlSnNvblBhdGgsIHsgbmFtZTogJ3BhY2thZ2UuanNvbicgfSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChwcm9qZWN0VHlwZSkge1xuICAgICAgY2FzZSAncmVhY3QnOlxuICAgICAgICAvLyBJbmNsdWRlIGJ1aWx0IHN0YXRpYyBmaWxlc1xuICAgICAgICB0aGlzLmFkZERpcmVjdG9yeShhcmNoaXZlLCBidWlsZE91dHB1dERpciwgJ2Rpc3QnKTtcbiAgICAgICAgbG9nZ2VyLmRpbShgSW5jbHVkaW5nIGJ1aWxkIG91dHB1dCBmcm9tICR7YnVpbGRPdXRwdXREaXJ9YCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgLy8gSW5jbHVkZSAubmV4dCBkaXJlY3RvcnlcbiAgICAgICAgdGhpcy5hZGREaXJlY3RvcnkoYXJjaGl2ZSwgcGF0aC5qb2luKHByb2plY3RQYXRoLCAnLm5leHQnKSwgJy5uZXh0Jyk7XG5cbiAgICAgICAgLy8gSW5jbHVkZSBwdWJsaWMgZGlyZWN0b3J5IGlmIGV4aXN0c1xuICAgICAgICBjb25zdCBwdWJsaWNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdwdWJsaWMnKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocHVibGljRGlyKSkge1xuICAgICAgICAgIHRoaXMuYWRkRGlyZWN0b3J5KGFyY2hpdmUsIHB1YmxpY0RpciwgJ3B1YmxpYycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5jbHVkZSBuZXh0LmNvbmZpZy5qcyBpZiBleGlzdHNcbiAgICAgICAgZm9yIChjb25zdCBjb25maWdGaWxlIG9mIFsnbmV4dC5jb25maWcuanMnLCAnbmV4dC5jb25maWcubWpzJywgJ25leHQuY29uZmlnLnRzJ10pIHtcbiAgICAgICAgICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCBjb25maWdGaWxlKTtcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgICAgICAgICAgYXJjaGl2ZS5maWxlKGNvbmZpZ1BhdGgsIHsgbmFtZTogY29uZmlnRmlsZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmNsdWRlIHBhY2thZ2UtbG9jay5qc29uIG9yIHlhcm4ubG9jayBmb3IgcHJvZHVjdGlvbiBkZXBlbmRlbmNpZXNcbiAgICAgICAgdGhpcy5hZGRMb2NrRmlsZShhcmNoaXZlLCBwcm9qZWN0UGF0aCk7XG5cbiAgICAgICAgbG9nZ2VyLmRpbSgnSW5jbHVkaW5nIE5leHQuanMgYnVpbGQgYXJ0aWZhY3RzJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgLy8gRm9yIE5vZGUuanMsIGluY2x1ZGUgZXZlcnl0aGluZyBleGNlcHQgbm9kZV9tb2R1bGVzIGFuZCBlbnYgZmlsZXNcbiAgICAgICAgY29uc3Qgbm9kZUlnbm9yZVBhdHRlcm5zID0gW1xuICAgICAgICAgICdub2RlX21vZHVsZXMvKionLFxuICAgICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgICAnLnJ1bndheS1kZXBsb3kuemlwJyxcbiAgICAgICAgICAnKi5sb2cnLFxuICAgICAgICAgICcuZW52JywgICAgICAvLyBFeGNsdWRlIGRlZmF1bHQgLmVudiAod2UnbGwgYWRkIHNwZWNpZmllZCBvbmUgZXhwbGljaXRseSlcbiAgICAgICAgICAnLmVudi4qJyxcbiAgICAgICAgXTtcblxuICAgICAgICBhcmNoaXZlLmdsb2IoJyoqLyonLCB7XG4gICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCxcbiAgICAgICAgICBpZ25vcmU6IG5vZGVJZ25vcmVQYXR0ZXJucyxcbiAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEluY2x1ZGUgdGhlIHNwZWNpZmllZCBlbnYgZmlsZSBhcyAuZW52XG4gICAgICAgIGlmIChlbnZGaWxlICYmIGZzLmV4aXN0c1N5bmMoZW52RmlsZSkpIHtcbiAgICAgICAgICBhcmNoaXZlLmZpbGUoZW52RmlsZSwgeyBuYW1lOiAnLmVudicgfSk7XG4gICAgICAgICAgbG9nZ2VyLmRpbSgnSW5jbHVkaW5nIGVudmlyb25tZW50IGZpbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5kaW0oJ0luY2x1ZGluZyBOb2RlLmpzIHByb2plY3QgZmlsZXMnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N0YXRpYyc6XG4gICAgICAgIC8vIEZvciBzdGF0aWMgc2l0ZXMsIGluY2x1ZGUgSFRNTCwgQ1NTLCBKUywgYW5kIGNvbW1vbiBhc3NldHNcbiAgICAgICAgY29uc3Qgc3RhdGljSWdub3JlUGF0dGVybnMgPSBbXG4gICAgICAgICAgJ25vZGVfbW9kdWxlcy8qKicsXG4gICAgICAgICAgJy5naXQvKionLFxuICAgICAgICAgICcucnVud2F5LWRlcGxveS56aXAnLFxuICAgICAgICAgICcqLmxvZycsXG4gICAgICAgICAgJy5lbnYnLFxuICAgICAgICAgICcuZW52LionLFxuICAgICAgICBdO1xuXG4gICAgICAgIGFyY2hpdmUuZ2xvYignKiovKicsIHtcbiAgICAgICAgICBjd2Q6IHByb2plY3RQYXRoLFxuICAgICAgICAgIGlnbm9yZTogc3RhdGljSWdub3JlUGF0dGVybnMsXG4gICAgICAgICAgZG90OiBmYWxzZSwgLy8gRG9uJ3QgaW5jbHVkZSBkb3RmaWxlcyBmb3Igc3RhdGljIHNpdGVzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxvZ2dlci5kaW0oJ0luY2x1ZGluZyBzdGF0aWMgc2l0ZSBmaWxlcycpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERpcmVjdG9yeShhcmNoaXZlOiBhcmNoaXZlci5BcmNoaXZlciwgZGlyUGF0aDogc3RyaW5nLCBkZXN0UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGlyUGF0aCkpIHtcbiAgICAgIGFyY2hpdmUuZGlyZWN0b3J5KGRpclBhdGgsIGRlc3RQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZExvY2tGaWxlKGFyY2hpdmU6IGFyY2hpdmVyLkFyY2hpdmVyLCBwcm9qZWN0UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbG9ja0ZpbGVzID0gWydwYWNrYWdlLWxvY2suanNvbicsICd5YXJuLmxvY2snLCAncG5wbS1sb2NrLnlhbWwnXTtcblxuICAgIGZvciAoY29uc3QgbG9ja0ZpbGUgb2YgbG9ja0ZpbGVzKSB7XG4gICAgICBjb25zdCBsb2NrUGF0aCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgbG9ja0ZpbGUpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobG9ja1BhdGgpKSB7XG4gICAgICAgIGFyY2hpdmUuZmlsZShsb2NrUGF0aCwgeyBuYW1lOiBsb2NrRmlsZSB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYW51cCh6aXBQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyh6aXBQYXRoKSkge1xuICAgICAgZnMudW5saW5rU3luYyh6aXBQYXRoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHBhY2thZ2VTZXJ2aWNlID0gbmV3IFBhY2thZ2VTZXJ2aWNlKCk7XG4iXX0=
|