storytellurx-v1/app/utils/database.ts

32 lines
1.1 KiB
TypeScript

import { S3Client } from "@bradenmacdonald/s3-lite-client";
import { createDatabase } from "@bureaudouble/deno-sqlite-blob";
import type { Database } from "@/default.sqlite.d.ts";
export const env = <T extends boolean | undefined = false>(
name: string,
opt?: { optional?: T },
): T extends true ? string | undefined : string => {
const value = Deno.env.get(name);
if (value) return value as T extends true ? string | undefined : string;
if (!opt?.optional) throw new Error(`Missing env ${name}`);
return undefined as T extends true ? string | undefined : string;
};
export const getS3Uri = (key?: string): URL =>
new URL(key ?? "", Deno.env.get("S3_PUBLIC_URL") ?? "");
export const s3Client = new S3Client({
accessKey: env("S3_ACCESS_KEY_ID"),
secretKey: env("S3_SECRET_ACCESS_KEY"),
endPoint: env("S3_ENDPOINT_URL"),
region: env("S3_BUCKET_REGION"),
bucket: env("S3_DEFAULT_BUCKET"),
useSSL: true,
pathStyle: true,
});
export const database = await createDatabase<Database>({
s3Client,
typesFileName: "default.sqlite.d.ts",
verbose: "error",
}).catch(() => null);