import { PostgresDialect, CamelCasePlugin } from "kysely"; import type { GeneratedAlways, Generated, ColumnType, Selectable, Insertable, Updateable, } from "kysely"; import pg from "pg"; import { KyselyAuth } from "@auth/kysely-adapter"; const { Pool, types } = pg; type Timestamp = ColumnType; types.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => new Date(val).toISOString(), ); type GraphileJob = { taskIdentifier: string; payload: Record; priority: number; maxAttempts: number; key: string; queueName: string; }; export const addGraphileJob = async (jobInfo: GraphileJob) => { // await db.insertInto("graphile_worker.jobs").values(jobInfo).execute(); }; export interface Database { User: { id: string; name: string | null; email: string; emailVerified: Date | null; image: string | null; }; Account: { id: GeneratedAlways; userId: string; type: "oidc" | "oauth" | "email" | "webauthn"; provider: string; providerAccountId: string; refresh_token: string | undefined; access_token: string | undefined; expires_at: number | undefined; token_type: Lowercase | undefined; scope: string | undefined; id_token: string | undefined; session_state: string | undefined; }; Session: { id: GeneratedAlways; userId: string; sessionToken: string; expires: Date; }; VerificationToken: { identifier: string; token: string; expires: Date; }; WhatsappBot: { id: GeneratedAlways; name: string; description: string; phoneNumber: string; createdBy: string; createdAt: Date; updatedAt: Date; }; FacebookBot: { id: GeneratedAlways; name: string | null; description: string | null; token: string | null; pageAccessToken: string | null; appSecret: string | null; verifyToken: string | null; pageId: string | null; appId: string | null; userId: string | null; isVerified: Generated; createdAt: GeneratedAlways; updatedAt: GeneratedAlways; }; VoiceLine: { id: GeneratedAlways; name: string; description: string; createdBy: string; createdAt: Date; updatedAt: Date; }; SignalBot: { id: GeneratedAlways; name: string; description: string; phoneNumber: string; createdBy: string; createdAt: Date; updatedAt: Date; }; Webhook: { id: GeneratedAlways; name: string; description: string; backendType: string; backendId: string; endpointUrl: string; httpMethod: "post" | "put"; headers: Record; createdBy: string; createdAt: Date; updatedAt: Date; }; } export type FacebookBot = Selectable; export type SignalBot = Selectable; export type WhatsappBot = Selectable; export type VoiceLine = Selectable; export type Webhook = Selectable; export type User = Selectable; export const db = new KyselyAuth({ dialect: new PostgresDialect({ pool: new Pool({ host: process.env.DATABASE_HOST, database: process.env.DATABASE_NAME, port: parseInt(process.env.DATABASE_PORT!), user: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, }), }), plugins: [new CamelCasePlugin()], });