A decentralized music tracking and discovery platform built on AT Protocol 馃幍
at feat/like-scrobble 49 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"; 12 13const { DB_PATH } = env; 14export const db = createDb(DB_PATH); 15await migrateToLatest(db); 16 17const kv = createStorage({ 18 driver: sqliteKv({ location: env.KV_DB_PATH, table: "kv" }), 19}); 20 21const baseIdResolver = createIdResolver(kv); 22 23export const ctx = { 24 oauthClient: await createClient(db), 25 resolver: createBidirectionalResolver(baseIdResolver), 26 baseIdResolver, 27 kv: new Map<string, string>(), 28 db: drizzle.db, 29 nc: await connect({ servers: env.NATS_URL }), 30 analytics: axios.create({ baseURL: env.ANALYTICS }), 31 dropbox: axios.create({ baseURL: env.DROPBOX }), 32 googledrive: axios.create({ baseURL: env.GOOGLE_DRIVE }), 33 tracklist: axios.create({ baseURL: env.TRACKLIST }), 34 musicbrainz: axios.create({ baseURL: env.MUSICBRAINZ_URL }), 35 redis: await redis 36 .createClient({ url: env.REDIS_URL }) 37 .on("error", (err) => { 38 console.error("Uncaught Redis Client Error", err); 39 process.exit(1); 40 }) 41 .connect(), 42 meilisearch: axios.create({ 43 baseURL: env.MEILISEARCH_URL, 44 headers: { Authorization: `Bearer ${env.MEILISEARCH_API_KEY}` }, 45 }), 46 authVerifier, 47}; 48 49export type Context = typeof ctx;