32 lines
1.1 KiB
TypeScript
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);
|