A decentralized music tracking and discovery platform built on AT Protocol 馃幍 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz
96
fork

Configure Feed

Select the types of activity you want to include in your feed.

at feat/pgpull 52 lines 1.6 kB view raw
1import { createClient } from "auth/client"; 2import axios from "axios"; 3import { createDb, migrateToLatest } from "db"; 4import drizzle from "drizzle"; 5import authVerifier from "lib/authVerifier"; 6import { env } from "lib/env"; 7import { createBidirectionalResolver, createIdResolver } from "lib/idResolver"; 8import { connect } from "nats"; 9import redis from "redis"; 10import sqliteKv from "sqliteKv"; 11import { createStorage } from "unstorage"; 12import { getXataClient } from "xata"; 13 14const { DB_PATH } = env; 15export const db = createDb(DB_PATH); 16await migrateToLatest(db); 17 18const kv = createStorage({ 19 driver: sqliteKv({ location: env.KV_DB_PATH, table: "kv" }), 20}); 21 22const baseIdResolver = createIdResolver(kv); 23 24const client = getXataClient(); 25 26export const ctx = { 27 oauthClient: await createClient(db), 28 resolver: createBidirectionalResolver(baseIdResolver), 29 baseIdResolver, 30 kv: new Map<string, string>(), 31 client, 32 db: drizzle.db, 33 nc: await connect({ servers: env.NATS_URL }), 34 analytics: axios.create({ baseURL: env.ANALYTICS }), 35 dropbox: axios.create({ baseURL: env.DROPBOX }), 36 googledrive: axios.create({ baseURL: env.GOOGLE_DRIVE }), 37 tracklist: axios.create({ baseURL: env.TRACKLIST }), 38 redis: await redis 39 .createClient({ url: env.REDIS_URL }) 40 .on("error", (err) => { 41 console.error("Uncaught Redis Client Error", err); 42 process.exit(1); 43 }) 44 .connect(), 45 meilisearch: axios.create({ 46 baseURL: env.MEILISEARCH_URL, 47 headers: { Authorization: `Bearer ${env.MEILISEARCH_API_KEY}` }, 48 }), 49 authVerifier, 50}; 51 52export type Context = typeof ctx;