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.
- package/dist/index.js +39 -20
- 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(
|
|
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
|
|
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
|
|
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)) {
|