A decentralized music tracking and discovery platform built on AT Protocol 馃幍
at 692a1fa204c2aa2bcd7219993c8b91c814c4720c 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;