import type { ComAtprotoRepoListRecords } from "@atcute/atproto"; import { AtpSessionData, Client, CredentialManager, ok } from "@atcute/client"; const TEAL_COLLECTION = "fm.teal.alpha.feed.play"; const { AT_USER: username, AT_PASS: password, AT_PDS: pds } = process.env; if (!username || !password || !pds) process.exit(1); console.log("locking tf in"); const manager = new CredentialManager({ service: pds }); const rpc = new Client({ handler: manager }); await manager.login({ identifier: username, password }); const session: AtpSessionData = await ok(rpc.get("com.atproto.server.getSession")) as AtpSessionData; console.log(`locked tf in as ${session.handle} (${session.did})`); let needles = { "83e66b1b-4e54-4a82-88c5-14b61e94443c": "2c1069e4-f30a-490a-b00b-cf1d9804b6fe", // recording (from music video) "eefb0252-9f9e-44f5-aab9-f8c74cdbd022": "a3efa0ae-3be3-4de8-8019-fea7d87ddc1f", // release (from music video) "If I Were To Die": "If I Were to Die", }; let records: ComAtprotoRepoListRecords.Record[] = []; let purrsor = null; while (true) { let response = await ok(rpc.get("com.atproto.repo.listRecords", { params: { repo: session.did, collection: TEAL_COLLECTION, cursor: purrsor, }, })) as any; // typescript coffee emoji purrsor = response.cursor; response.records.forEach((record: ComAtprotoRepoListRecords.Record) => { records.push(record); }); if (!purrsor) break; } console.log(`fetched ${records.length} records`); records.forEach(async (record) => { let v = record.value; let rkey = record.uri.split("/").at(-1) || ""; if (rkey == "") { // this can't happen but whatever console.log("WHAT THE FUCK!!!!!!!!!!"); process.exit(2); } let modified = false; for (const k in needles) { const replacement = needles[k as keyof typeof needles]; if (v.trackName == k || v.releaseName == k || v.releaseMbId == k || v.recordingMbId == k) modified = true; if (v.trackName == k) record.value.trackName = replacement; if (v.releaseName == k) record.value.releaseName = replacement; if (v.releaseMbId == k) record.value.releaseMbId = replacement; if (v.recordingMbId == k) record.value.recordingMbId = replacement; } if (modified) { let response = await ok(rpc.post("com.atproto.repo.putRecord", { input: { collection: TEAL_COLLECTION, repo: session.did, rkey: rkey, record: record.value } })); console.log(`${rkey}: [replace] fixed record:`, response); } });