A decentralized music tracking and discovery platform built on AT Protocol 馃幍
at bb78ac5bfdffe97e585d90fa2f2e1b28d475dce6 51 lines 1.5 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 redis: await redis 38 .createClient({ url: env.REDIS_URL }) 39 .on("error", (err) => { 40 console.error("Uncaught Redis Client Error", err); 41 process.exit(1); 42 }) 43 .connect(), 44 meilisearch: axios.create({ 45 baseURL: env.MEILISEARCH_URL, 46 headers: { Authorization: `Bearer ${env.MEILISEARCH_API_KEY}` }, 47 }), 48 authVerifier, 49}; 50 51export type Context = typeof ctx;