A decentralized music tracking and discovery platform built on AT Protocol 馃幍 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz
at main 52 lines 1.6 kB view raw
1import { createClient } from "auth/client"; 2import axios from "axios"; 3import { consola } from "consola"; 4import { createDb, migrateToLatest } from "db"; 5import drizzle from "drizzle"; 6import authVerifier from "lib/authVerifier"; 7import { env } from "lib/env"; 8import { createBidirectionalResolver, createIdResolver } from "lib/idResolver"; 9import { connect } from "nats"; 10import redis from "redis"; 11import sqliteKv from "sqliteKv"; 12import { createStorage } from "unstorage"; 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 24export const ctx = { 25 oauthClient: await createClient(db), 26 resolver: createBidirectionalResolver(baseIdResolver), 27 baseIdResolver, 28 kv: new Map<string, string>(), 29 db: drizzle.db, 30 nc: await connect({ servers: env.NATS_URL }), 31 analytics: axios.create({ baseURL: env.ANALYTICS }), 32 dropbox: axios.create({ baseURL: env.DROPBOX }), 33 googledrive: axios.create({ baseURL: env.GOOGLE_DRIVE }), 34 tracklist: axios.create({ baseURL: env.TRACKLIST }), 35 musicbrainz: axios.create({ baseURL: env.MUSICBRAINZ_URL }), 36 redis: await redis 37 .createClient({ url: env.REDIS_URL }) 38 .on("error", (err) => { 39 consola.error("Uncaught Redis Client Error", err); 40 process.exit(1); 41 }) 42 .connect(), 43 meilisearch: axios.create({ 44 baseURL: env.MEILISEARCH_URL, 45 headers: { Authorization: `Bearer ${env.MEILISEARCH_API_KEY}` }, 46 }), 47 authVerifier, 48 sqliteDb: db, 49 sqliteKv: kv, 50}; 51 52export type Context = typeof ctx;