checkpoint-cli 1.0.0 → 1.0.2

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 (2) hide show
  1. package/dist/index.js +39 -20
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -12,6 +12,8 @@ const chalk_1 = __importDefault(require("chalk"));
12
12
  const supabase_js_1 = require("@supabase/supabase-js");
13
13
  const config_js_1 = require("./config.js");
14
14
  const tracking_script_minimal_js_1 = require("./tracking-script-minimal.js");
15
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
16
+ const { version: cliVersion } = require('../package.json');
15
17
  /* ── Authenticated Supabase Client ── */
16
18
  function getSupabase() {
17
19
  const config = (0, config_js_1.loadConfig)();
@@ -29,6 +31,40 @@ function getSupabase() {
29
31
  },
30
32
  });
31
33
  }
34
+ async function ensureAuthenticatedClient() {
35
+ let sb = await getAuthenticatedClient();
36
+ if (sb)
37
+ return sb;
38
+ console.log(chalk_1.default.yellow(' No active login found. Starting browser sign-in...'));
39
+ console.log('');
40
+ try {
41
+ const tokens = await loginWithBrowser();
42
+ (0, config_js_1.saveConfig)({
43
+ access_token: tokens.access_token,
44
+ refresh_token: tokens.refresh_token,
45
+ app_url: (0, config_js_1.getAppUrl)(),
46
+ });
47
+ sb = await getAuthenticatedClient();
48
+ if (sb) {
49
+ const { data } = await sb.auth.getUser();
50
+ if (data.user?.email) {
51
+ console.log(chalk_1.default.green(` ✓ Logged in as ${chalk_1.default.white(data.user.email)}`));
52
+ }
53
+ else {
54
+ console.log(chalk_1.default.green(' ✓ Logged in'));
55
+ }
56
+ console.log('');
57
+ return sb;
58
+ }
59
+ }
60
+ catch (err) {
61
+ console.log(chalk_1.default.red(` ${err.message}`));
62
+ }
63
+ console.log(chalk_1.default.red(' Could not establish an authenticated session.'));
64
+ console.log(` Run ${chalk_1.default.cyan('checkpoint login')} and try again.`);
65
+ console.log('');
66
+ return null;
67
+ }
32
68
  /** Get an authenticated Supabase client, refreshing the token if needed. */
33
69
  async function getAuthenticatedClient() {
34
70
  const config = (0, config_js_1.loadConfig)();
@@ -68,17 +104,6 @@ async function getAuthenticatedClient() {
68
104
  }
69
105
  return sb;
70
106
  }
71
- function requireAuth() {
72
- const config = (0, config_js_1.loadConfig)();
73
- if (!config) {
74
- console.log('');
75
- console.log(chalk_1.default.red(' Not logged in.'));
76
- console.log('');
77
- console.log(` Run ${chalk_1.default.cyan('checkpoint login')} first.`);
78
- console.log('');
79
- process.exit(1);
80
- }
81
- }
82
107
  /* ── Injection Proxy ── */
83
108
  function startInjectionProxy(targetPort) {
84
109
  const scriptBody = (0, tracking_script_minimal_js_1.buildMinimalTrackingScript)().replace(/<\/script/gi, '<\\/script');
@@ -532,7 +557,7 @@ const program = new commander_1.Command();
532
557
  program
533
558
  .name('checkpoint')
534
559
  .description('Share your localhost with reviewers — get visual feedback directly on the page.\n\nQuick start:\n 1. checkpoint login Sign in to your Checkpoint account\n 2. checkpoint start -p 3000 Start tunneling and get a share link\n\nReuse a tunnel name to keep the same share URL and preserve all comments.')
535
- .version('0.5.2');
560
+ .version(cliVersion);
536
561
  // ── checkpoint login ──
537
562
  program
538
563
  .command('login')
@@ -599,7 +624,6 @@ program
599
624
  .option('-n, --name <name>', 'Tunnel name. Reuse a name to resume the same share URL.')
600
625
  .option('--provider <provider>', 'Tunnel provider: cloudflared (default) or ngrok')
601
626
  .action(async (opts) => {
602
- requireAuth();
603
627
  const port = parseInt(opts.port, 10);
604
628
  console.log('');
605
629
  console.log(chalk_1.default.blue.bold(' ⟐ Checkpoint'));
@@ -628,10 +652,8 @@ program
628
652
  process.exit(1);
629
653
  }
630
654
  // Authenticate
631
- const sb = await getAuthenticatedClient();
655
+ const sb = await ensureAuthenticatedClient();
632
656
  if (!sb) {
633
- console.log(chalk_1.default.red(' Session expired. Run `checkpoint login` again.'));
634
- console.log('');
635
657
  process.exit(1);
636
658
  }
637
659
  // Detect provider
@@ -701,14 +723,11 @@ program
701
723
  .option('-n, --name <name>', 'Name for this tunnel', 'My Tunnel')
702
724
  .option('-p, --port <port>', 'Local port for reference', '3000')
703
725
  .action(async (opts) => {
704
- requireAuth();
705
726
  console.log('');
706
727
  console.log(chalk_1.default.blue.bold(' ⟐ Checkpoint'));
707
728
  console.log('');
708
- const sb = await getAuthenticatedClient();
729
+ const sb = await ensureAuthenticatedClient();
709
730
  if (!sb) {
710
- console.log(chalk_1.default.red(' Session expired. Run `checkpoint login` again.'));
711
- console.log('');
712
731
  process.exit(1);
713
732
  }
714
733
  if (!isValidUrl(opts.url)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "checkpoint-cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Share your localhost with reviewers — get visual feedback directly on the page",
5
5
  "keywords": [
6
6
  "checkpoint",