forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
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;