1.2 KB45 lines
Blame
1import { log } from "@clack/prompts";
2import { loadConfig } from "../config.js";
3
4export async function authStatus() {
5 const config = await loadConfig();
6
7 if (!config.token) {
8 log.warn("Not logged in.\nRun: grove auth login");
9 return;
10 }
11
12 // Decode JWT payload (no verification — just display)
13 const parts = config.token.split(".");
14 if (parts.length !== 3) {
15 log.warn("Invalid token stored.\nRun: grove auth login");
16 return;
17 }
18
19 try {
20 const payload = JSON.parse(
21 Buffer.from(parts[1], "base64url").toString()
22 );
23
24 const lines = [`Hub: ${config.hub}`, `User: ${payload.username}`];
25 if (payload.display_name) lines.push(`Name: ${payload.display_name}`);
26 lines.push(`Type: ${payload.type}`);
27
28 if (payload.exp) {
29 const expires = new Date(payload.exp * 1000);
30 const now = new Date();
31 if (expires < now) {
32 lines.push(`Expired: ${expires.toLocaleDateString()}`);
33 log.warn(lines.join("\n"));
34 return;
35 } else {
36 lines.push(`Expires: ${expires.toLocaleDateString()}`);
37 }
38 }
39
40 log.info(lines.join("\n"));
41 } catch {
42 log.warn("Could not decode token.\nRun: grove auth login");
43 }
44}
45