import * as dotenv from 'dotenv' dotenv.config() import { InsertObject, Kysely, PostgresDialect } from 'kysely' import { Pool } from 'pg' import migrateToLatest from './migrations' import Database, { KillTable } from './model' const migration = migrateToLatest() const db = new Kysely({ dialect: new PostgresDialect({ pool: new Pool({ host: process.env.POSTGRES_HOST, database: process.env.POSTGRES_DATABASE, user: process.env.POSTGRES_USER, password: process.env.POSTGRES_PASSWORD, max: 30 }) }), log(event) { if (process.env.ENVIRONMENT != 'production') { return } if (event.level === 'query') { console.log(event.query.sql) console.log(event.query.parameters) } } }) interface RemoveFromKill { id: unknown unix_time: unknown } type KillRecord = Omit export async function CreateKillRecord(data: KillRecord) { await db .insertInto('kill') .values({ ...data }) .execute() } export async function getHostList() { return await db.selectFrom("host").select(['id', 'host.name']).execute() } //tokens are stored in raw... maybe we should use something better in the future //Using callback for express-basic-auth export function CheckServerToken(token: string) { return db.selectFrom('host').select('id') .where('token', '=', Buffer.from(token, 'base64').toString()) .executeTakeFirst() .then((result) => { return result }) } export async function dbReady(): Promise> { await migration return db } export default db