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";
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;