Something went wrong. Try again.
A decentralized music tracking and discovery platform built on AT Protocol 🎵 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import type { ArtistViewBasic, ChartsDecadeViewBasic, ChartsScrobblerViewBasic, ChartsView, SongViewBasic,} from "@rocksky/sdk";import { client } from ".";
export type AnalyticsRange = { from: string; to: string; label: string };export type AnalyticsScope = { did?: string; range: AnalyticsRange };const interval = ({ did, range }: AnalyticsScope) => ({ did, startDate: `${range.from}T00:00:00.000Z`, endDate: `${range.to}T23:59:59.999Z`,});export async function getAnalyticsDaily( { did, range }: AnalyticsScope, signal?: AbortSignal,) { const { data } = await client.get<ChartsView>( "/xrpc/app.rocksky.charts.getScrobblesChart", { params: { did, from: range.from, to: range.to }, signal }, ); return data.scrobbles ?? [];}export async function getAnalyticsArtists( scope: AnalyticsScope, signal?: AbortSignal,) { const { data } = await client.get<{ artists?: ArtistViewBasic[] }>( "/xrpc/app.rocksky.charts.getTopArtists", { params: { ...interval(scope), limit: 10, offset: 0 }, signal }, ); return data.artists ?? [];}export async function getAnalyticsTracks( scope: AnalyticsScope, signal?: AbortSignal,) { const { data } = await client.get<{ tracks?: SongViewBasic[] }>( "/xrpc/app.rocksky.charts.getTopTracks", { params: { ...interval(scope), limit: 10, offset: 0 }, signal }, ); return data.tracks ?? [];}export async function getAnalyticsDecades( scope: AnalyticsScope, signal?: AbortSignal,) { const { data } = await client.get<{ decades?: ChartsDecadeViewBasic[] }>( "/xrpc/app.rocksky.charts.getDecades", { params: interval(scope), signal }, ); return data.decades ?? [];}export async function getAnalyticsScrobblers( range: AnalyticsRange, signal?: AbortSignal,) { const { data } = await client.get<{ scrobblers?: ChartsScrobblerViewBasic[]; }>("/xrpc/app.rocksky.charts.getTopScrobblers", { params: { ...interval({ range }), limit: 10, offset: 0 }, signal, }); return data.scrobblers ?? [];}