A decentralized music tracking and discovery platform built on AT Protocol 馃幍
at main 42 lines 1.3 kB view raw
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}