@tonk/cli 0.0.6 → 0.0.7
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAuBlC,eAAO,MAAM,aAAa,SAsStB,CAAC"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -4,11 +4,26 @@ import fs from 'fs';
|
|
|
4
4
|
import { execSync } from 'child_process';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { createRequire } from 'module';
|
|
7
|
+
import readline from 'readline';
|
|
8
|
+
// Create readline interface for user input
|
|
9
|
+
const rl = readline.createInterface({
|
|
10
|
+
input: process.stdin,
|
|
11
|
+
output: process.stdout,
|
|
12
|
+
});
|
|
13
|
+
// Promise-based prompt function
|
|
14
|
+
const promptUser = (question) => {
|
|
15
|
+
return new Promise(resolve => {
|
|
16
|
+
rl.question(question, answer => {
|
|
17
|
+
resolve(answer);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
};
|
|
7
21
|
export const deployCommand = new Command('deploy')
|
|
8
22
|
.description('Deploy a Tonk app to EC2')
|
|
9
23
|
.option('-i, --instance <address>', 'EC2 instance address')
|
|
10
24
|
.option('-k, --key <path>', 'Path to SSH key file')
|
|
11
25
|
.option('-u, --user <name>', 'SSH username', 'ec2-user')
|
|
26
|
+
.option('-t, --token <token>', 'Pinggy.io access token')
|
|
12
27
|
.action(async (options) => {
|
|
13
28
|
const projectRoot = process.cwd();
|
|
14
29
|
const configFilePath = path.join(projectRoot, 'tonk.config.json');
|
|
@@ -38,6 +53,11 @@ You can provision a new EC2 instance with 'tonk config --provision' or configure
|
|
|
38
53
|
options.user = configData.ec2.user;
|
|
39
54
|
console.log(chalk.blue(`Using SSH user from config: ${options.user}`));
|
|
40
55
|
}
|
|
56
|
+
// Check for Pinggy token in config
|
|
57
|
+
if (!options.token && configData.pinggy && configData.pinggy.token) {
|
|
58
|
+
options.token = configData.pinggy.token;
|
|
59
|
+
console.log(chalk.blue(`Using Pinggy token from config`));
|
|
60
|
+
}
|
|
41
61
|
}
|
|
42
62
|
catch (error) {
|
|
43
63
|
console.error(chalk.red(`Error: Could not parse config file at ${configFilePath}. Please run 'tonk config' again.`));
|
|
@@ -106,14 +126,43 @@ Your app is now running at http://${options.instance}
|
|
|
106
126
|
`));
|
|
107
127
|
// 7. Set up reverse proxy with pinggy.io
|
|
108
128
|
console.log(chalk.blue('Setting up secure public access via pinggy.io...'));
|
|
129
|
+
// Prompt user for Pinggy token if not provided
|
|
130
|
+
if (!options.token) {
|
|
131
|
+
console.log(chalk.yellow(`
|
|
132
|
+
No Pinggy.io access token found. You'll need a token to create a secure public URL.
|
|
133
|
+
`));
|
|
134
|
+
options.token = await promptUser(chalk.yellow('Please enter your Pinggy.io access token (or visit https://pinggy.io/ to sign up): '));
|
|
135
|
+
if (!options.token.trim()) {
|
|
136
|
+
console.log(chalk.yellow(`
|
|
137
|
+
No token provided. Skipping public URL setup.
|
|
138
|
+
You can manually set up a tunnel later by SSH-ing into your EC2 instance.
|
|
139
|
+
`));
|
|
140
|
+
rl.close();
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Ask if user wants to save the token in config
|
|
144
|
+
const saveToken = await promptUser(chalk.yellow('Would you like to save this token in your tonk.config.json for future deployments? (yes/no): '));
|
|
145
|
+
if (saveToken.toLowerCase().startsWith('y')) {
|
|
146
|
+
try {
|
|
147
|
+
const configData = JSON.parse(fs.readFileSync(configFilePath, 'utf8'));
|
|
148
|
+
configData.pinggy = configData.pinggy || {};
|
|
149
|
+
configData.pinggy.token = options.token;
|
|
150
|
+
fs.writeFileSync(configFilePath, JSON.stringify(configData, null, 2), 'utf8');
|
|
151
|
+
console.log(chalk.green('Token saved to configuration file.'));
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
console.log(chalk.yellow(`Could not save token to config file: ${error.message}`));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
109
158
|
try {
|
|
110
|
-
// Run the pinggy.io command on the EC2 instance
|
|
159
|
+
// Run the pinggy.io command on the EC2 instance with user's token
|
|
111
160
|
const pinggySetupCommand = `ssh -i "${options.key}" ${options.user}@${options.instance} '
|
|
112
161
|
# Kill any existing pinggy sessions
|
|
113
162
|
screen -ls | grep pinggy && screen -S pinggy -X quit || true
|
|
114
163
|
|
|
115
164
|
# Start a new detached screen session for the pinggy tunnel
|
|
116
|
-
screen -dmS pinggy bash -c "ssh -p 443 -R0:localhost:8080 -L4300:localhost:4300 -o StrictHostKeyChecking=no -o ServerAliveInterval=30
|
|
165
|
+
screen -dmS pinggy bash -c "ssh -p 443 -R0:localhost:8080 -L4300:localhost:4300 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 ${options.token}@pro.pinggy.io x:https 2>&1 | tee /tmp/pinggy.log"
|
|
117
166
|
|
|
118
167
|
# Wait for the URL to appear in the log
|
|
119
168
|
echo "Waiting for pinggy.io to establish connection..."
|
|
@@ -167,14 +216,18 @@ ${pinggyOutput}
|
|
|
167
216
|
Note: Could not establish reverse proxy tunnel.
|
|
168
217
|
You can manually run the following command in the EC2 instance to create a public URL:
|
|
169
218
|
|
|
170
|
-
ssh -p 443 -R0:localhost:8080 -L4300:localhost:4300 -o StrictHostKeyChecking=no -o ServerAliveInterval=30
|
|
219
|
+
ssh -p 443 -R0:localhost:8080 -L4300:localhost:4300 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 YOUR_PINGGY_TOKEN@pro.pinggy.io x:https
|
|
171
220
|
|
|
172
221
|
Error details: ${error}
|
|
173
222
|
`));
|
|
174
223
|
}
|
|
224
|
+
// Close readline interface
|
|
225
|
+
rl.close();
|
|
175
226
|
}
|
|
176
227
|
catch (error) {
|
|
177
228
|
console.error(chalk.red('Deployment failed:'), error);
|
|
229
|
+
// Make sure to close readline interface even on error
|
|
230
|
+
rl.close();
|
|
178
231
|
process.exit(1);
|
|
179
232
|
}
|
|
180
233
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|