forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
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}