@tonk/cli 0.1.14 → 0.2.1

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.
Files changed (59) hide show
  1. package/README.md +84 -5
  2. package/dist/commands/hello/index.d.ts +3 -0
  3. package/dist/commands/hello/index.d.ts.map +1 -0
  4. package/dist/commands/hello/index.js +291 -0
  5. package/dist/commands/hello/index.js.map +1 -0
  6. package/dist/commands/hello.d.ts.map +1 -1
  7. package/dist/commands/hello.js +69 -6
  8. package/dist/commands/hello.js.map +1 -1
  9. package/dist/commands/init.d.ts +3 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +66 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/kill.d.ts +3 -0
  14. package/dist/commands/kill.d.ts.map +1 -0
  15. package/dist/commands/kill.js +38 -0
  16. package/dist/commands/kill.js.map +1 -0
  17. package/dist/commands/ls.d.ts +3 -0
  18. package/dist/commands/ls.d.ts.map +1 -0
  19. package/dist/commands/ls.js +31 -0
  20. package/dist/commands/ls.js.map +1 -0
  21. package/dist/commands/ps.d.ts +3 -0
  22. package/dist/commands/ps.d.ts.map +1 -0
  23. package/dist/commands/ps.js +34 -0
  24. package/dist/commands/ps.js.map +1 -0
  25. package/dist/commands/push.d.ts +3 -0
  26. package/dist/commands/push.d.ts.map +1 -0
  27. package/dist/commands/push.js +150 -0
  28. package/dist/commands/push.js.map +1 -0
  29. package/dist/commands/start.d.ts +3 -0
  30. package/dist/commands/start.d.ts.map +1 -0
  31. package/dist/commands/start.js +43 -0
  32. package/dist/commands/start.js.map +1 -0
  33. package/dist/tonk.js +71 -12
  34. package/dist/tonk.js.map +1 -1
  35. package/package.json +12 -4
  36. package/dist/commands/config.d.ts +0 -3
  37. package/dist/commands/config.d.ts.map +0 -1
  38. package/dist/commands/config.js +0 -338
  39. package/dist/commands/config.js.map +0 -1
  40. package/dist/commands/deploy.d.ts +0 -3
  41. package/dist/commands/deploy.d.ts.map +0 -1
  42. package/dist/commands/deploy.js +0 -460
  43. package/dist/commands/deploy.js.map +0 -1
  44. package/dist/commands/dev.d.ts +0 -3
  45. package/dist/commands/dev.d.ts.map +0 -1
  46. package/dist/commands/dev.js +0 -89
  47. package/dist/commands/dev.js.map +0 -1
  48. package/dist/commands/prettyPrint.d.ts +0 -3
  49. package/dist/commands/prettyPrint.d.ts.map +0 -1
  50. package/dist/commands/prettyPrint.js +0 -51
  51. package/dist/commands/prettyPrint.js.map +0 -1
  52. package/dist/commands/serve.d.ts +0 -3
  53. package/dist/commands/serve.d.ts.map +0 -1
  54. package/dist/commands/serve.js +0 -212
  55. package/dist/commands/serve.js.map +0 -1
  56. package/dist/lib/launchGUI.d.ts +0 -2
  57. package/dist/lib/launchGUI.d.ts.map +0 -1
  58. package/dist/lib/launchGUI.js +0 -175
  59. package/dist/lib/launchGUI.js.map +0 -1
@@ -1,460 +0,0 @@
1
- import { Command } from 'commander';
2
- import path from 'path';
3
- import fs from 'fs';
4
- import { execSync } from 'child_process';
5
- import chalk from 'chalk';
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
- };
21
- export const deployCommand = new Command('deploy')
22
- .description('Deploy a Tonk app to EC2')
23
- .option('-i, --instance <address>', 'EC2 instance address')
24
- .option('-k, --key <path>', 'Path to SSH key file')
25
- .option('-u, --user <name>', 'SSH username', 'ec2-user')
26
- .option('-t, --token <token>', 'Pinggy.io access token')
27
- .option('-b, --backblaze', 'Enable Backblaze B2 storage for document backup')
28
- .option('-f, --filesystem', 'Enable filesystem storage for document backup')
29
- .action(async (options) => {
30
- const projectRoot = process.cwd();
31
- const configFilePath = path.join(projectRoot, 'tonk.config.json');
32
- // Check if config file exists
33
- if (!fs.existsSync(configFilePath)) {
34
- console.error(chalk.red(`
35
- Error: No configuration file found at ${configFilePath}
36
-
37
- Please run 'tonk config' first to set up your EC2 instance and create a configuration file.
38
- You can provision a new EC2 instance with 'tonk config --provision' or configure an existing one.
39
- `));
40
- process.exit(1);
41
- }
42
- // Load settings from config file
43
- let configData;
44
- try {
45
- configData = JSON.parse(fs.readFileSync(configFilePath, 'utf8'));
46
- // Use config values as defaults if not provided in command options
47
- if (!options.instance && configData.ec2 && configData.ec2.instance) {
48
- options.instance = configData.ec2.instance;
49
- console.log(chalk.blue(`Using EC2 instance from config: ${options.instance}`));
50
- }
51
- if (!options.key && configData.ec2 && configData.ec2.keyPath) {
52
- options.key = configData.ec2.keyPath;
53
- console.log(chalk.blue(`Using SSH key from config: ${options.key}`));
54
- }
55
- if (!options.user && configData.ec2 && configData.ec2.user) {
56
- options.user = configData.ec2.user;
57
- console.log(chalk.blue(`Using SSH user from config: ${options.user}`));
58
- }
59
- // Check for Pinggy token in config
60
- if (!options.token && configData.pinggy && configData.pinggy.token) {
61
- options.token = configData.pinggy.token;
62
- console.log(chalk.blue(`Using Pinggy token from config`));
63
- }
64
- // Check if Backblaze is already configured
65
- if (configData.backblaze && configData.backblaze.enabled) {
66
- options.backblaze = true;
67
- console.log(chalk.blue(`Backblaze B2 backup enabled from config`));
68
- }
69
- // Check if Filesystem storage is already configured
70
- if (configData.filesystem && configData.filesystem.enabled) {
71
- options.filesystem = true;
72
- if (configData.filesystem.storagePath) {
73
- options.filesystemPath = configData.filesystem.storagePath;
74
- }
75
- console.log(chalk.blue(`Filesystem storage enabled from config`));
76
- }
77
- // Check if primary storage is already configured
78
- if (configData.primaryStorage) {
79
- options.primaryStorage = configData.primaryStorage;
80
- console.log(chalk.blue(`Primary storage set to ${options.primaryStorage} from config`));
81
- }
82
- }
83
- catch (error) {
84
- console.error(chalk.red(`Error: Could not parse config file at ${configFilePath}. Please run 'tonk config' again.`));
85
- process.exit(1);
86
- }
87
- // Verify required options are present after loading from config
88
- if (!options.instance) {
89
- console.error(chalk.red('Error: EC2 instance address not found in config file and not provided as an option.'));
90
- console.error(chalk.yellow("Please run 'tonk config' again."));
91
- process.exit(1);
92
- }
93
- if (!options.key || !fs.existsSync(options.key)) {
94
- console.error(chalk.red('Error: Valid SSH key file path not found in config file and not provided as an option.'));
95
- console.error(chalk.yellow("Please run 'tonk config' again."));
96
- process.exit(1);
97
- }
98
- // If backblaze option wasn't explicitly set
99
- // ask the user if they want to enable it
100
- if (options.backblaze === undefined) {
101
- const enableBackblaze = await promptUser(chalk.yellow('Would you like to enable Backblaze B2 backup for your document data? (yes/no): '));
102
- options.backblaze = enableBackblaze
103
- .toLowerCase()
104
- .startsWith('y');
105
- if (options.backblaze) {
106
- console.log(chalk.green('Backblaze B2 backup will be enabled'));
107
- }
108
- else {
109
- console.log(chalk.blue('Backblaze B2 backup will not be enabled'));
110
- }
111
- }
112
- // If filesystem option wasn't explicitly set
113
- // ask the user if they want to enable it
114
- if (options.filesystem === undefined) {
115
- const enableFilesystem = await promptUser(chalk.yellow('Would you like to enable filesystem storage for your document data? (yes/no): '));
116
- options.filesystem = enableFilesystem
117
- .toLowerCase()
118
- .startsWith('y');
119
- if (options.filesystem) {
120
- console.log(chalk.green('Filesystem storage will be enabled'));
121
- // Ask for storage path if not provided
122
- if (!options.filesystemPath &&
123
- (!configData.filesystem || !configData.filesystem.storagePath)) {
124
- options.filesystemPath = (await promptUser(chalk.yellow(`Enter path for filesystem storage (default: ~/tonk-data): `)));
125
- // Use default if empty
126
- if (!options.filesystemPath.trim()) {
127
- options.filesystemPath = '~/tonk-data';
128
- }
129
- // If path starts with / and is not in the user's home directory, modify it
130
- if (options.filesystemPath.startsWith('/') &&
131
- !options.filesystemPath.startsWith('/home/') &&
132
- !options.filesystemPath.startsWith('~/')) {
133
- const originalPath = options.filesystemPath;
134
- options.filesystemPath = `~/tonk-data${options.filesystemPath}`;
135
- console.log(chalk.yellow(`Storage path changed from ${originalPath} to ${options.filesystemPath} to avoid permission issues`));
136
- }
137
- }
138
- // Ask for sync interval
139
- if (!configData.filesystem || !configData.filesystem.syncInterval) {
140
- const syncIntervalInput = await promptUser(chalk.yellow(`Enter sync interval in milliseconds (default: 30000 - 30 seconds): `));
141
- // Parse the input or use default
142
- options.filesystemSyncInterval = syncIntervalInput.trim()
143
- ? parseInt(syncIntervalInput, 10)
144
- : 30000;
145
- if (isNaN(options.filesystemSyncInterval) ||
146
- options.filesystemSyncInterval < 1000) {
147
- console.log(chalk.yellow('Invalid sync interval. Using default of 30000ms (30 seconds).'));
148
- options.filesystemSyncInterval = 30000;
149
- }
150
- }
151
- // Ask about creating missing directories
152
- if (!configData.filesystem ||
153
- configData.filesystem.createIfMissing === undefined) {
154
- const createMissingInput = await promptUser(chalk.yellow(`Create missing directories automatically? (yes/no, default: yes): `));
155
- // Default to true if empty or starts with 'y'
156
- const inputStr = createMissingInput.toLowerCase().trim();
157
- options.filesystemCreateMissing =
158
- !inputStr || inputStr.startsWith('y');
159
- }
160
- }
161
- else {
162
- console.log(chalk.blue('Filesystem storage will not be enabled'));
163
- }
164
- }
165
- // If both storage options are enabled, ask for primary storage
166
- if (options.backblaze && options.filesystem && !options.primaryStorage) {
167
- const primaryStorage = (await promptUser(chalk.yellow('Which storage should be primary? (backblaze/filesystem): ')));
168
- if (primaryStorage.toLowerCase().startsWith('f')) {
169
- options.primaryStorage = 'filesystem';
170
- }
171
- else {
172
- options.primaryStorage = 'backblaze';
173
- }
174
- console.log(chalk.green(`Primary storage set to ${options.primaryStorage}`));
175
- }
176
- // Set up Backblaze if requested and not already configured
177
- if (options.backblaze &&
178
- (!configData.backblaze || !configData.backblaze.enabled)) {
179
- console.log(chalk.blue('Setting up Backblaze B2 backup for Automerge documents...'));
180
- const b2KeyId = await promptUser(chalk.yellow('Enter your Backblaze B2 Application Key ID: '));
181
- const b2Key = await promptUser(chalk.yellow('Enter your Backblaze B2 Application Key: '));
182
- const b2BucketId = await promptUser(chalk.yellow('Enter your Backblaze B2 Bucket ID: '));
183
- const b2BucketName = await promptUser(chalk.yellow('Enter your Backblaze B2 Bucket Name: '));
184
- // Update config
185
- configData.backblaze = {
186
- enabled: true,
187
- applicationKeyId: b2KeyId,
188
- applicationKey: b2Key,
189
- bucketId: b2BucketId,
190
- bucketName: b2BucketName,
191
- syncInterval: 5 * 60 * 1000, // 5 minutes default
192
- maxRetries: 3,
193
- };
194
- // Save updated config
195
- fs.writeFileSync(configFilePath, JSON.stringify(configData, null, 2), 'utf8');
196
- console.log(chalk.green('Backblaze B2 configuration saved'));
197
- }
198
- // Set up Filesystem storage if requested and not already configured
199
- if (options.filesystem &&
200
- (!configData.filesystem || !configData.filesystem.enabled)) {
201
- console.log(chalk.blue('Setting up Filesystem storage for Automerge documents...'));
202
- // Update config with all the options
203
- configData.filesystem = {
204
- enabled: true,
205
- storagePath: options.filesystemPath || '~/tonk-data',
206
- syncInterval: options.filesystemSyncInterval || 30 * 1000, // 30 seconds default
207
- createIfMissing: options.filesystemCreateMissing !== false, // default to true
208
- };
209
- // Save updated config
210
- fs.writeFileSync(configFilePath, JSON.stringify(configData, null, 2), 'utf8');
211
- console.log(chalk.green('Filesystem storage configuration saved'));
212
- }
213
- // Set primary storage if both storage types are enabled
214
- if (options.backblaze && options.filesystem) {
215
- configData.primaryStorage = options.primaryStorage || 'backblaze';
216
- // Save updated config
217
- fs.writeFileSync(configFilePath, JSON.stringify(configData, null, 2), 'utf8');
218
- console.log(chalk.green(`Primary storage set to ${configData.primaryStorage}`));
219
- }
220
- try {
221
- // 1. Build the application
222
- console.log(chalk.blue('Building application...'));
223
- execSync('npm run build', { cwd: projectRoot, stdio: 'inherit' });
224
- // 2. Copy Dockerfile if it doesn't exist
225
- const dockerfilePath = path.join(projectRoot, 'Dockerfile');
226
- if (!fs.existsSync(dockerfilePath)) {
227
- const require = createRequire(import.meta.url);
228
- const templatePath = path.join(require.resolve('@tonk/server/package.json'), '..', 'templates', 'Dockerfile');
229
- fs.copyFileSync(templatePath, dockerfilePath);
230
- console.log(chalk.green('Created Dockerfile from template'));
231
- }
232
- // 3. Package the application
233
- console.log(chalk.blue('Packaging application...'));
234
- // Create a tarball
235
- const packOutput = execSync('npm pack', {
236
- cwd: projectRoot,
237
- encoding: 'utf8',
238
- }).trim();
239
- // npm pack creates a file with a name like: package-name-version.tgz
240
- const npmPackageFile = path.join(projectRoot, packOutput);
241
- const tarFileName = 'tonk-app.tgz';
242
- const tarFilePath = path.join(projectRoot, tarFileName);
243
- // Rename the npm package to our standard name
244
- if (fs.existsSync(tarFilePath)) {
245
- fs.unlinkSync(tarFilePath);
246
- }
247
- fs.renameSync(npmPackageFile, tarFilePath);
248
- // 4. Copy to EC2
249
- console.log(chalk.blue(`Copying to EC2 instance ${options.instance}...`));
250
- execSync(`scp -i "${options.key}" "${tarFileName}" ${options.user}@${options.instance}:~/`, { cwd: projectRoot, stdio: 'inherit' });
251
- // Copy the config too if storage is configured
252
- if (options.backblaze || options.filesystem) {
253
- // Create the directory first
254
- execSync(`ssh -i "${options.key}" ${options.user}@${options.instance} "mkdir -p ~/tonk-app"`, { cwd: projectRoot, stdio: 'inherit' });
255
- execSync(`scp -i "${options.key}" "${configFilePath}" ${options.user}@${options.instance}:~/tonk-app/tonk.config.json`, { cwd: projectRoot, stdio: 'inherit' });
256
- }
257
- // 5. SSH into EC2 and deploy with Docker
258
- console.log(chalk.blue('Deploying on EC2...'));
259
- // Build the Docker run command with environment variables for storage if configured
260
- let dockerRunCmd = 'docker run -d --name tonk-app-container -p 8080:8080 -e PORT=8080';
261
- // Add Backblaze environment variables if enabled
262
- if (options.backblaze &&
263
- configData.backblaze &&
264
- configData.backblaze.enabled) {
265
- dockerRunCmd += ` -e BACKBLAZE_ENABLED=true`;
266
- dockerRunCmd += ` -e BACKBLAZE_APP_KEY_ID='${configData.backblaze.applicationKeyId}'`;
267
- dockerRunCmd += ` -e BACKBLAZE_APP_KEY='${configData.backblaze.applicationKey}'`;
268
- dockerRunCmd += ` -e BACKBLAZE_BUCKET_ID='${configData.backblaze.bucketId}'`;
269
- dockerRunCmd += ` -e BACKBLAZE_BUCKET_NAME='${configData.backblaze.bucketName}'`;
270
- dockerRunCmd += ` -e BACKBLAZE_SYNC_INTERVAL='${configData.backblaze.syncInterval || 300000}'`;
271
- }
272
- function formatDockerPath(storagePath) {
273
- // Remove trailing slashes for consistency
274
- storagePath = storagePath.replace(/\/+$/, '');
275
- // If path starts with tilde, we need to resolve it on the EC2 host
276
- if (storagePath.startsWith('~/')) {
277
- // This will be run on the EC2 instance to resolve the tilde
278
- const resolvePathCmd = `echo ${storagePath}`;
279
- const resolvedPath = execSync(`ssh -i "${options.key}" ${options.user}@${options.instance} "${resolvePathCmd}"`, { cwd: projectRoot, encoding: 'utf8' }).trim();
280
- return resolvedPath;
281
- }
282
- return storagePath;
283
- }
284
- // Add Filesystem environment variables if enabled
285
- if (options.filesystem &&
286
- configData.filesystem &&
287
- configData.filesystem.enabled) {
288
- let storagePath = configData.filesystem.storagePath || '~/tonk-data';
289
- // Get the fully resolved path on the EC2 host
290
- const resolvedPath = formatDockerPath(storagePath);
291
- // Create the directory on the host machine with proper permissions
292
- const createDirCmd = `mkdir -p ${resolvedPath} && chmod 755 ${resolvedPath}`;
293
- console.log(chalk.blue(`Creating storage directory on host: ${resolvedPath}`));
294
- execSync(`ssh -i "${options.key}" ${options.user}@${options.instance} "${createDirCmd}"`, { cwd: projectRoot, stdio: 'inherit' });
295
- // Add volume mount to Docker run command
296
- dockerRunCmd += ` -v ${resolvedPath}:${resolvedPath}`;
297
- // Pass the exact same path to the container
298
- dockerRunCmd += ` -e FILESYSTEM_ENABLED=true`;
299
- dockerRunCmd += ` -e FILESYSTEM_STORAGE_PATH='${resolvedPath}'`;
300
- dockerRunCmd += ` -e FILESYSTEM_SYNC_INTERVAL='${configData.filesystem.syncInterval || 30000}'`;
301
- dockerRunCmd += ` -e FILESYSTEM_CREATE_MISSING='true'`;
302
- // Add this to the Docker run command to ensure proper volume permissions
303
- dockerRunCmd += ' --mount type=tmpfs,destination=/tmp,tmpfs-mode=1777';
304
- }
305
- // Set primary storage if both are enabled
306
- if (options.backblaze &&
307
- options.filesystem &&
308
- configData.primaryStorage) {
309
- dockerRunCmd += ` -e PRIMARY_STORAGE='${configData.primaryStorage}'`;
310
- }
311
- dockerRunCmd += ' tonk-app';
312
- const sshCommand = `ssh -i "${options.key}" ${options.user}@${options.instance} '
313
- mkdir -p tonk-app &&
314
- tar -xzf ${tarFileName} -C tonk-app --strip-components=1 &&
315
- cd tonk-app &&
316
- docker build -t tonk-app . &&
317
- docker stop tonk-app-container || true &&
318
- docker rm tonk-app-container || true &&
319
- ${dockerRunCmd} &&
320
- sudo systemctl restart nginx.service
321
- '`;
322
- execSync(sshCommand, { cwd: projectRoot, stdio: 'inherit' });
323
- // 6. Clean up
324
- fs.unlinkSync(tarFilePath);
325
- console.log(chalk.green(`
326
- ✅ Deployment successful!
327
- Your app is now running at http://${options.instance}
328
- `));
329
- // Print storage info if enabled
330
- if (options.backblaze &&
331
- configData.backblaze &&
332
- configData.backblaze.enabled) {
333
- console.log(chalk.green(`
334
- Backblaze B2 backup is enabled for your Automerge documents.
335
- Documents will be synced to your B2 bucket: ${configData.backblaze.bucketName}
336
- `));
337
- }
338
- if (options.filesystem &&
339
- configData.filesystem &&
340
- configData.filesystem.enabled) {
341
- console.log(chalk.green(`
342
- Filesystem storage is enabled for your Automerge documents.
343
- Documents will be stored at: ${configData.filesystem.storagePath}
344
- `));
345
- }
346
- if (options.backblaze &&
347
- options.filesystem &&
348
- configData.primaryStorage) {
349
- console.log(chalk.green(`
350
- Primary storage is set to: ${configData.primaryStorage}
351
- `));
352
- }
353
- // 7. Set up reverse proxy with pinggy.io
354
- console.log(chalk.blue('Setting up secure public access via pinggy.io...'));
355
- // Prompt user for Pinggy token if not provided
356
- if (!options.token) {
357
- console.log(chalk.yellow(`
358
- No Pinggy.io access token found. You'll need a token to create a secure public URL.
359
- `));
360
- options.token = await promptUser(chalk.yellow('Please enter your Pinggy.io access token (or visit https://pinggy.io/ to sign up): '));
361
- if (!options.token.trim()) {
362
- console.log(chalk.yellow(`
363
- No token provided. Skipping public URL setup.
364
- You can manually set up a tunnel later by SSH-ing into your EC2 instance.
365
- `));
366
- rl.close();
367
- return;
368
- }
369
- // Ask if user wants to save the token in config
370
- const saveToken = await promptUser(chalk.yellow('Would you like to save this token in your tonk.config.json for future deployments? (yes/no): '));
371
- if (saveToken.toLowerCase().startsWith('y')) {
372
- try {
373
- const configData = JSON.parse(fs.readFileSync(configFilePath, 'utf8'));
374
- configData.pinggy = configData.pinggy || {};
375
- configData.pinggy.token = options.token;
376
- fs.writeFileSync(configFilePath, JSON.stringify(configData, null, 2), 'utf8');
377
- console.log(chalk.green('Token saved to configuration file.'));
378
- }
379
- catch (error) {
380
- console.log(chalk.yellow(`Could not save token to config file: ${error.message}`));
381
- }
382
- }
383
- }
384
- try {
385
- // Run the pinggy.io command on the EC2 instance with user's token
386
- const pinggySetupCommand = `ssh -i "${options.key}" ${options.user}@${options.instance} '
387
- # Kill any existing pinggy sessions
388
- screen -ls | grep pinggy && screen -S pinggy -X quit || true
389
-
390
- # Start a new detached screen session for the pinggy tunnel
391
- 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"
392
-
393
- # Wait for the URL to appear in the log
394
- echo "Waiting for pinggy.io to establish connection..."
395
- timeout=30
396
- while [ $timeout -gt 0 ] && ! grep -q "https://" /tmp/pinggy.log; do
397
- sleep 1
398
- timeout=$((timeout-1))
399
- done
400
-
401
- # Extract and display the URL
402
- if grep -q "https://" /tmp/pinggy.log; then
403
- grep -o "https://[^ ]*" /tmp/pinggy.log
404
- echo "Tunnel is running in the background. To view logs: screen -r pinggy"
405
- echo "To terminate: screen -S pinggy -X quit"
406
- else
407
- echo "Timed out waiting for pinggy.io URL"
408
- cat /tmp/pinggy.log
409
- fi
410
- '`;
411
- const pinggyOutput = execSync(pinggySetupCommand, {
412
- encoding: 'utf8',
413
- stdio: ['ignore', 'pipe', 'pipe'],
414
- });
415
- // Extract the HTTPS URL from the output
416
- const urlMatch = pinggyOutput.match(/https:\/\/[^\s"']+/);
417
- const publicUrl = urlMatch ? urlMatch[0] : null;
418
- if (publicUrl) {
419
- console.log(chalk.green(`
420
- 🌐 Public access URL:
421
- ${publicUrl}
422
-
423
- This URL will remain active as long as the EC2 instance is running.
424
- The tunnel is running in a detached screen session on your EC2 instance.
425
-
426
- To view tunnel logs: ssh into your EC2 instance and run 'screen -r pinggy'
427
- To terminate the tunnel: ssh into your EC2 instance and run 'screen -S pinggy -X quit'
428
- `));
429
- }
430
- else {
431
- console.log(chalk.yellow(`
432
- Could not extract public URL from pinggy.io output.
433
- The tunnel might still be running. SSH into your EC2 instance to check.
434
-
435
- Output from setup command:
436
- ${pinggyOutput}
437
- `));
438
- }
439
- }
440
- catch (error) {
441
- console.log(chalk.yellow(`
442
- Note: Could not establish reverse proxy tunnel.
443
- You can manually run the following command in the EC2 instance to create a public URL:
444
-
445
- ssh -p 443 -R0:localhost:8080 -L4300:localhost:4300 -o StrictHostKeyChecking=no -o ServerAliveInterval=30 YOUR_PINGGY_TOKEN@pro.pinggy.io x:https
446
-
447
- Error details: ${error}
448
- `));
449
- }
450
- // Close readline interface
451
- rl.close();
452
- }
453
- catch (error) {
454
- console.error(chalk.red('Deployment failed:'), error);
455
- // Make sure to close readline interface even on error
456
- rl.close();
457
- process.exit(1);
458
- }
459
- });
460
- //# sourceMappingURL=deploy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const devCommand: Command;
3
- //# sourceMappingURL=dev.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAMlC,eAAO,MAAM,UAAU,SAwGnB,CAAC"}
@@ -1,89 +0,0 @@
1
- import { Command } from 'commander';
2
- import path from 'path';
3
- import { spawn } from 'child_process';
4
- import chalk from 'chalk';
5
- import fs from 'fs';
6
- export const devCommand = new Command('dev')
7
- .description('Start a Tonk app in development mode')
8
- .option('-p, --port <port>', 'Port to run the sync server on', '4080')
9
- .option('-f, --frontend-port <port>', 'Port to run the frontend dev server on', '3000')
10
- .option('--open', 'Enable auto-opening the browser')
11
- .action(async (options) => {
12
- const projectRoot = process.cwd();
13
- const port = parseInt(options.port, 10);
14
- const frontendPort = parseInt(options.frontendPort, 10);
15
- // Ensure we have a package.json
16
- const packageJsonPath = path.join(projectRoot, 'package.json');
17
- if (!fs.existsSync(packageJsonPath)) {
18
- console.error(chalk.red('Error: package.json not found. Make sure you are in a Tonk project directory.'));
19
- process.exit(1);
20
- }
21
- console.log(chalk.blue('Starting Tonk development environment...'));
22
- // Start webpack dev server
23
- const webpackArgs = [
24
- 'webpack',
25
- 'serve',
26
- '--mode',
27
- 'development',
28
- '--port',
29
- frontendPort.toString(),
30
- ];
31
- // Add --open flag if needed
32
- if (options.open) {
33
- webpackArgs.push('--open');
34
- }
35
- console.log(chalk.blue(`Starting webpack dev server on port ${frontendPort}...`));
36
- console.log(chalk.blue(`Sync server running on port ${port}`));
37
- const webpackProcess = spawn('npx', webpackArgs, {
38
- cwd: projectRoot,
39
- stdio: 'inherit',
40
- shell: true,
41
- env: {
42
- ...process.env,
43
- // PORT: frontendPort.toString(),
44
- // We now assume server is running on 8080 at all times with the hub
45
- PORT: '8080',
46
- },
47
- });
48
- let serverProcess;
49
- const serverPath = path.join(projectRoot, 'server', 'dist', 'index.js');
50
- try {
51
- if (fs.existsSync(serverPath)) {
52
- serverProcess = spawn('node', [serverPath], {
53
- cwd: projectRoot,
54
- stdio: 'inherit',
55
- shell: true,
56
- env: {
57
- ...process.env,
58
- },
59
- });
60
- serverProcess.on('exit', code => {
61
- if (code !== 0 && code !== null) {
62
- console.error(chalk.red(`Webpack process exited with code ${code}`));
63
- }
64
- process.exit(code || 0);
65
- });
66
- }
67
- }
68
- catch (e) {
69
- console.error(e);
70
- }
71
- // Handle process termination
72
- const cleanup = () => {
73
- console.log(chalk.yellow('\nShutting down servers...'));
74
- webpackProcess.kill();
75
- if (serverProcess) {
76
- serverProcess.kill();
77
- }
78
- };
79
- process.on('SIGINT', cleanup);
80
- process.on('SIGTERM', cleanup);
81
- // Handle webpack process exit
82
- webpackProcess.on('exit', code => {
83
- if (code !== 0 && code !== null) {
84
- console.error(chalk.red(`Webpack process exited with code ${code}`));
85
- }
86
- process.exit(code || 0);
87
- });
88
- });
89
- //# sourceMappingURL=dev.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const printMarkdown: Command;
3
- //# sourceMappingURL=prettyPrint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prettyPrint.d.ts","sourceRoot":"","sources":["../../src/commands/prettyPrint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAsDlC,eAAO,MAAM,aAAa,SAWtB,CAAC"}
@@ -1,51 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import { marked } from 'marked';
4
- import fs from 'fs';
5
- import path from 'path';
6
- // Create custom renderer extension
7
- const renderer = {
8
- // Block-level renderer methods
9
- heading(token) {
10
- const prefix = '#'.repeat(token.depth);
11
- return chalk.bold.cyan(`\n${prefix} ${this.parser.parseInline(token.tokens)}\n\n`);
12
- },
13
- paragraph(token) {
14
- return `${this.parser.parseInline(token.tokens)}\n\n`;
15
- },
16
- list(token) {
17
- const items = token.items.map((item, index) => chalk.yellow(`${token.ordered ? `${index + 1}.` : '•'} ${this.parser.parseInline(item.tokens)}`));
18
- return items.join('\n') + '\n';
19
- },
20
- code(token) {
21
- return chalk.greenBright(token.text) + '\n\n';
22
- },
23
- codespan(token) {
24
- return chalk.greenBright(token.text);
25
- },
26
- // Inline-level renderer methods
27
- link(token) {
28
- return chalk.blue.underline(token.href);
29
- },
30
- em(token) {
31
- return chalk.italic(this.parser.parseInline(token.tokens));
32
- },
33
- strong(token) {
34
- return chalk.bold(this.parser.parseInline(token.tokens));
35
- },
36
- };
37
- // Configure marked with our custom renderer
38
- marked.use({ renderer });
39
- export const printMarkdown = new Command('markdown')
40
- .description('Pretty prints markdown files')
41
- .argument('[path to markdown file]', 'Path of the markdown file to print')
42
- .action(markdownPath => {
43
- // Convert markdown to formatted text
44
- const contents = fs
45
- .readFileSync(path.normalize(markdownPath))
46
- .toString('utf8');
47
- const formattedMessage = marked.parse(contents);
48
- console.log(formattedMessage);
49
- process.exit(0);
50
- });
51
- //# sourceMappingURL=prettyPrint.js.map