A decentralized music tracking and discovery platform built on AT Protocol 🎵
listenbrainz spotify atproto lastfm musicbrainz scrobbling

Resolve PDS URL and repo from DID

Call extractPdsFromDid(repo) to obtain the PDS base URL and pass it to
AtpAgent instead of using the hardcoded https://bsky.social. Compute the
repo once from trackWithUri.uri and reuse it for getRecord.

Changed files
+9 -2
apps
api
src
+9 -2
apps/api/src/lovedtracks/lovedtracks.service.ts
··· 13 import artists from "../schema/artists"; 14 import lovedTracks from "../schema/loved-tracks"; 15 import tracks from "../schema/tracks"; 16 17 export async function likeTrack( 18 ctx: Context, ··· 248 249 if (trackWithUri?.uri) { 250 const rkey = TID.nextStr(); 251 const subjectAgent = new AtpAgent({ 252 - service: new URL("https://bsky.social"), 253 }); 254 const subjectRecord = await subjectAgent.com.atproto.repo.getRecord({ 255 - repo: trackWithUri.uri.split("/").slice(0, 3).join("/").split("at://")[1], 256 collection: "app.rocksky.song", 257 rkey: trackWithUri.uri.split("/").pop(), 258 });
··· 13 import artists from "../schema/artists"; 14 import lovedTracks from "../schema/loved-tracks"; 15 import tracks from "../schema/tracks"; 16 + import extractPdsFromDid from "lib/extractPdsFromDid"; 17 18 export async function likeTrack( 19 ctx: Context, ··· 249 250 if (trackWithUri?.uri) { 251 const rkey = TID.nextStr(); 252 + const repo = trackWithUri.uri 253 + .split("/") 254 + .slice(0, 3) 255 + .join("/") 256 + .split("at://")[1]; 257 + const pds = await extractPdsFromDid(repo); 258 const subjectAgent = new AtpAgent({ 259 + service: new URL(pds), 260 }); 261 const subjectRecord = await subjectAgent.com.atproto.repo.getRecord({ 262 + repo, 263 collection: "app.rocksky.song", 264 rkey: trackWithUri.uri.split("/").pop(), 265 });