A decentralized music tracking and discovery platform built on AT Protocol 馃幍
at main 74 lines 2.1 kB view raw
1import chalk from "chalk"; 2import { RockskyClient } from "client"; 3import fs from "fs/promises"; 4import { createAgent } from "lib/agent"; 5import { env } from "lib/env"; 6import { getDidAndHandle } from "lib/getDidAndHandle"; 7import os from "os"; 8import path from "path"; 9import { createUser } from "./sync"; 10import { ctx } from "context"; 11import schema from "schema"; 12import { eq } from "drizzle-orm"; 13 14export async function whoami() { 15 if (env.ROCKSKY_IDENTIFIER && env.ROCKSKY_PASSWORD) { 16 const [did, handle] = await getDidAndHandle(); 17 const agent = await createAgent(did, handle); 18 let user = await ctx.db 19 .select() 20 .from(schema.users) 21 .where(eq(schema.users.did, did)) 22 .execute() 23 .then((rows) => rows[0]); 24 25 if (!user) { 26 user = await createUser(agent, did, handle); 27 } 28 29 console.log(`You are logged in as ${user.handle} (${user.displayName}).`); 30 console.log( 31 `View your profile at: ${chalk.magenta( 32 `https://rocksky.app/profile/${user.handle}`, 33 )}`, 34 ); 35 return; 36 } 37 const tokenPath = path.join(os.homedir(), ".rocksky", "token.json"); 38 try { 39 await fs.access(tokenPath); 40 } catch (err) { 41 console.error( 42 `You are not logged in. Please run ${chalk.greenBright( 43 "`rocksky login <username>.bsky.social`", 44 )} first.`, 45 ); 46 return; 47 } 48 49 const tokenData = await fs.readFile(tokenPath, "utf-8"); 50 const { token } = JSON.parse(tokenData); 51 if (!token) { 52 console.error( 53 `You are not logged in. Please run ${chalk.greenBright( 54 "`rocksky login <username>.bsky.social`", 55 )} first.`, 56 ); 57 return; 58 } 59 60 const client = new RockskyClient(token); 61 try { 62 const user = await client.getCurrentUser(); 63 console.log(`You are logged in as ${user.handle} (${user.displayName}).`); 64 console.log( 65 `View your profile at: ${chalk.magenta( 66 `https://rocksky.app/profile/${user.handle}`, 67 )}`, 68 ); 69 } catch (err) { 70 console.error( 71 `Failed to fetch user data. Please check your token and try again.`, 72 ); 73 } 74}