diff options
Diffstat (limited to 'packages/shared')
| -rw-r--r-- | packages/shared/assetdb.ts | 64 | ||||
| -rw-r--r-- | packages/shared/config.ts | 13 |
2 files changed, 71 insertions, 6 deletions
diff --git a/packages/shared/assetdb.ts b/packages/shared/assetdb.ts new file mode 100644 index 00000000..0840eec2 --- /dev/null +++ b/packages/shared/assetdb.ts @@ -0,0 +1,64 @@ +import * as fs from "fs"; +import * as path from "path"; +import { z } from "zod"; + +import serverConfig from "./config"; + +const ROOT_PATH = path.join(serverConfig.dataDir, "assets"); + +function getAssetDir(userId: string, assetId: string) { + return path.join(ROOT_PATH, userId, assetId); +} + +export const zAssetMetadataSchema = z.object({ + contentType: z.string(), +}); + +export async function saveAsset({ + userId, + assetId, + asset, + metadata, +}: { + userId: string; + assetId: string; + asset: Buffer, + metadata: z.infer<typeof zAssetMetadataSchema>; +}) { + const assetDir = getAssetDir(userId, assetId); + await fs.promises.mkdir(assetDir, { recursive: true }); + + await Promise.all([ + fs.promises.writeFile(path.join(assetDir, "asset.bin"), asset), + fs.promises.writeFile(path.join(assetDir, "metadata.json"), JSON.stringify(metadata)), + ]); +} + +export async function readAsset({ + userId, + assetId, +}: { + userId: string; + assetId: string; +}) { + const assetDir = getAssetDir(userId, assetId); + + const [asset, metadataStr] = await Promise.all([ + fs.promises.readFile(path.join(assetDir, "asset.bin")), + fs.promises.readFile(path.join(assetDir, "metadata.json"), {encoding: "utf8"}), + ]); + + const metadata = zAssetMetadataSchema.parse(JSON.parse(metadataStr)); + return {asset, metadata}; +} + +export async function deleteAsset({ + userId, + assetId, +}: { + userId: string; + assetId: string; +}) { + const assetDir = getAssetDir(userId, assetId); + await fs.promises.rm(path.join(assetDir), {recursive: true}); +} diff --git a/packages/shared/config.ts b/packages/shared/config.ts index 1dee4c4d..6dc5d0d1 100644 --- a/packages/shared/config.ts +++ b/packages/shared/config.ts @@ -13,7 +13,7 @@ function buildAuthentikConfig() { } const serverConfig = { - apiUrl: process.env.API_URL || "http://localhost:3000", + apiUrl: process.env.API_URL ?? "http://localhost:3000", auth: { authentik: buildAuthentikConfig(), }, @@ -21,8 +21,8 @@ const serverConfig = { apiKey: process.env.OPENAI_API_KEY, }, bullMQ: { - redisHost: process.env.REDIS_HOST || "localhost", - redisPort: parseInt(process.env.REDIS_PORT || "6379"), + redisHost: process.env.REDIS_HOST ?? "localhost", + redisPort: parseInt(process.env.REDIS_PORT ?? "6379"), }, crawler: { headlessBrowser: (process.env.CRAWLER_HEADLESS_BROWSER ?? "true") == "true", @@ -31,12 +31,13 @@ const serverConfig = { }, meilisearch: process.env.MEILI_ADDR ? { - address: process.env.MEILI_ADDR || "http://127.0.0.1:7700", - key: process.env.MEILI_MASTER_KEY || "", + address: process.env.MEILI_ADDR ?? "http://127.0.0.1:7700", + key: process.env.MEILI_MASTER_KEY ?? "", } : undefined, - logLevel: process.env.LOG_LEVEL || "debug", + logLevel: process.env.LOG_LEVEL ?? "debug", demoMode: (process.env.DEMO_MODE ?? "false") == "true", + dataDir: process.env.DATA_DIR ?? "", }; export default serverConfig; |
