forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1import { RockskyClient } from "client";
2import dayjs from "dayjs";
3import relative from "dayjs/plugin/relativeTime.js";
4import fs from "fs/promises";
5import os from "os";
6import path from "path";
7
8dayjs.extend(relative);
9
10export async function myscrobbles({ skip, limit }): Promise<string> {
11 const tokenPath = path.join(os.homedir(), ".rocksky", "token.json");
12 try {
13 await fs.access(tokenPath);
14 } catch (err) {
15 return "You are not logged in. Please run `rocksky login <username>.bsky.social` first.";
16 }
17
18 const tokenData = await fs.readFile(tokenPath, "utf-8");
19 const { token } = JSON.parse(tokenData);
20 if (!token) {
21 return "You are not logged in. Please run `rocksky login <username>.bsky.social` first.";
22 }
23
24 const client = new RockskyClient(token);
25 try {
26 const { did } = await client.getCurrentUser();
27 const scrobbles = await client.scrobbles(did, { skip, limit });
28
29 return JSON.stringify(
30 scrobbles.map((scrobble) => ({
31 title: scrobble.title,
32 artist: scrobble.artist,
33 date: dayjs(scrobble.created_at + "Z").fromNow(),
34 isoDate: scrobble.created_at,
35 })),
36 null,
37 2
38 );
39 } catch (err) {
40 return `Failed to fetch scrobbles data. Please check your token and try again, error: ${err.message}`;
41 }
42}