aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared
diff options
context:
space:
mode:
Diffstat (limited to 'packages/shared')
-rw-r--r--packages/shared/assetdb.ts64
-rw-r--r--packages/shared/config.ts13
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;