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