diff options
| author | Mohamed Bassem <me@mbassem.com> | 2026-02-09 01:22:30 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2026-02-09 01:22:30 +0000 |
| commit | a04d3c35fc9082e529a713605a038d236bb072c7 (patch) | |
| tree | 3e69735f9762c1739402afe30c26961b7d8e598a /packages | |
| parent | 298a4277da7376ee6e7471f180c0030f35db49e4 (diff) | |
| download | karakeep-a04d3c35fc9082e529a713605a038d236bb072c7.tar.zst | |
refactor: move assetdb to shared-server
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/api/utils/assets.ts | 2 | ||||
| -rw-r--r-- | packages/api/utils/upload.ts | 2 | ||||
| -rw-r--r-- | packages/e2e_tests/package.json | 1 | ||||
| -rw-r--r-- | packages/e2e_tests/tests/assetdb/assetdb-utils.ts | 2 | ||||
| -rw-r--r-- | packages/e2e_tests/tests/assetdb/interface-compliance.test.ts | 2 | ||||
| -rw-r--r-- | packages/e2e_tests/tests/assetdb/local-filesystem-store.test.ts | 2 | ||||
| -rw-r--r-- | packages/e2e_tests/tests/assetdb/s3-store.test.ts | 2 | ||||
| -rw-r--r-- | packages/shared-server/assetdb.ts (renamed from packages/shared/assetdb.ts) | 34 | ||||
| -rw-r--r-- | packages/shared-server/package.json | 8 | ||||
| -rw-r--r-- | packages/shared/package.json | 2 | ||||
| -rw-r--r-- | packages/trpc/models/assets.ts | 2 | ||||
| -rw-r--r-- | packages/trpc/models/backups.ts | 2 | ||||
| -rw-r--r-- | packages/trpc/models/bookmarks.ts | 2 | ||||
| -rw-r--r-- | packages/trpc/models/users.ts | 2 | ||||
| -rw-r--r-- | packages/trpc/routers/bookmarks.ts | 2 |
15 files changed, 41 insertions, 26 deletions
diff --git a/packages/api/utils/assets.ts b/packages/api/utils/assets.ts index 7936f4ba..2ebd691d 100644 --- a/packages/api/utils/assets.ts +++ b/packages/api/utils/assets.ts @@ -5,7 +5,7 @@ import { createAssetReadStream, getAssetSize, readAssetMetadata, -} from "@karakeep/shared/assetdb"; +} from "@karakeep/shared-server/assetdb"; import { toWebReadableStream } from "./upload"; diff --git a/packages/api/utils/upload.ts b/packages/api/utils/upload.ts index b82bc855..f532fc66 100644 --- a/packages/api/utils/upload.ts +++ b/packages/api/utils/upload.ts @@ -11,7 +11,7 @@ import { newAssetId, saveAssetFromFile, SUPPORTED_UPLOAD_ASSET_TYPES, -} from "@karakeep/shared/assetdb"; +} from "@karakeep/shared-server/assetdb"; import serverConfig from "@karakeep/shared/config"; import { AuthedContext } from "@karakeep/trpc"; diff --git a/packages/e2e_tests/package.json b/packages/e2e_tests/package.json index d93318aa..b1c472f4 100644 --- a/packages/e2e_tests/package.json +++ b/packages/e2e_tests/package.json @@ -18,6 +18,7 @@ "@aws-sdk/client-s3": "^3.842.0", "@karakeep/sdk": "workspace:*", "@karakeep/shared": "workspace:^0.1.0", + "@karakeep/shared-server": "workspace:^0.1.0", "@karakeep/trpc": "workspace:^0.1.0", "@trpc/client": "^11.9.0", "superjson": "^2.2.1", diff --git a/packages/e2e_tests/tests/assetdb/assetdb-utils.ts b/packages/e2e_tests/tests/assetdb/assetdb-utils.ts index a8e29ab4..85a3f307 100644 --- a/packages/e2e_tests/tests/assetdb/assetdb-utils.ts +++ b/packages/e2e_tests/tests/assetdb/assetdb-utils.ts @@ -15,7 +15,7 @@ import { AssetStore, LocalFileSystemAssetStore, S3AssetStore, -} from "@karakeep/shared/assetdb"; +} from "@karakeep/shared-server/assetdb"; export interface TestAssetData { userId: string; diff --git a/packages/e2e_tests/tests/assetdb/interface-compliance.test.ts b/packages/e2e_tests/tests/assetdb/interface-compliance.test.ts index d5288c7a..c9efaa5b 100644 --- a/packages/e2e_tests/tests/assetdb/interface-compliance.test.ts +++ b/packages/e2e_tests/tests/assetdb/interface-compliance.test.ts @@ -1,7 +1,7 @@ import * as fs from "fs"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { ASSET_TYPES, AssetStore } from "@karakeep/shared/assetdb"; +import { ASSET_TYPES, AssetStore } from "@karakeep/shared-server/assetdb"; import { assertAssetExists, diff --git a/packages/e2e_tests/tests/assetdb/local-filesystem-store.test.ts b/packages/e2e_tests/tests/assetdb/local-filesystem-store.test.ts index 36ff837f..a6a7e9ca 100644 --- a/packages/e2e_tests/tests/assetdb/local-filesystem-store.test.ts +++ b/packages/e2e_tests/tests/assetdb/local-filesystem-store.test.ts @@ -2,7 +2,7 @@ import * as fs from "fs"; import * as path from "path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { LocalFileSystemAssetStore } from "@karakeep/shared/assetdb"; +import { LocalFileSystemAssetStore } from "@karakeep/shared-server/assetdb"; import { assertAssetNotExists, diff --git a/packages/e2e_tests/tests/assetdb/s3-store.test.ts b/packages/e2e_tests/tests/assetdb/s3-store.test.ts index c573750e..541b8791 100644 --- a/packages/e2e_tests/tests/assetdb/s3-store.test.ts +++ b/packages/e2e_tests/tests/assetdb/s3-store.test.ts @@ -1,7 +1,7 @@ import { HeadObjectCommand, S3Client } from "@aws-sdk/client-s3"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { S3AssetStore } from "@karakeep/shared/assetdb"; +import { S3AssetStore } from "@karakeep/shared-server/assetdb"; import { assertAssetExists, diff --git a/packages/shared/assetdb.ts b/packages/shared-server/assetdb.ts index 2e22faf7..bb6bb75e 100644 --- a/packages/shared/assetdb.ts +++ b/packages/shared-server/assetdb.ts @@ -11,12 +11,12 @@ import { PutObjectCommand, S3Client, } from "@aws-sdk/client-s3"; -import { Glob } from "glob"; +import glob from "glob"; import { z } from "zod"; -import serverConfig from "./config"; -import logger from "./logger"; -import { QuotaApproved } from "./storageQuota"; +import serverConfig from "@karakeep/shared/config"; +import logger from "@karakeep/shared/logger"; +import { QuotaApproved } from "@karakeep/shared/storageQuota"; const ROOT_PATH = serverConfig.assetsDir; @@ -283,18 +283,30 @@ class LocalFileSystemAssetStore implements AssetStore { } async *getAllAssets() { - const g = new Glob(`/**/**/asset.bin`, { - maxDepth: 3, - root: this.rootPath, - cwd: this.rootPath, - absolute: false, + const files = await new Promise<string[]>((resolve, reject) => { + glob( + "*/*/asset.bin", + { + cwd: this.rootPath, + nodir: true, + }, + (err, matches) => { + if (err) { + reject(err); + return; + } + resolve(matches); + }, + ); }); - for await (const file of g) { + + for (const file of files) { const [userId, assetId] = file.split("/").slice(0, 2); const [size, metadata] = await Promise.all([ this.getAssetSize({ userId, assetId }), this.readAssetMetadata({ userId, assetId }), ]); + yield { userId, assetId, @@ -605,7 +617,7 @@ export { LocalFileSystemAssetStore, S3AssetStore }; * Example usage of S3AssetStore: * * import { S3Client } from "@aws-sdk/client-s3"; - * import { S3AssetStore } from "@karakeep/shared/assetdb"; + * import { S3AssetStore } from "@karakeep/shared-server/assetdb"; * * const s3Client = new S3Client({ * region: "us-east-1", diff --git a/packages/shared-server/package.json b/packages/shared-server/package.json index 357248b4..0afc2bf2 100644 --- a/packages/shared-server/package.json +++ b/packages/shared-server/package.json @@ -5,6 +5,7 @@ "private": true, "type": "module", "dependencies": { + "@aws-sdk/client-s3": "^3.842.0", "@karakeep/db": "workspace:^0.1.0", "@karakeep/plugins": "workspace:^0.1.0", "@karakeep/shared": "workspace:^0.1.0", @@ -13,7 +14,9 @@ "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-trace-base": "^2.2.0", "@opentelemetry/sdk-trace-node": "^2.2.0", - "@opentelemetry/semantic-conventions": "^1.38.0" + "@opentelemetry/semantic-conventions": "^1.38.0", + "glob": "^11.0.0", + "zod": "^3.24.2" }, "devDependencies": { "@karakeep/prettier-config": "workspace:^0.1.0", @@ -29,7 +32,8 @@ }, "main": "index.ts", "exports": { - ".": "./index.ts" + ".": "./index.ts", + "./assetdb": "./assetdb.ts" }, "prettier": "@karakeep/prettier-config" } diff --git a/packages/shared/package.json b/packages/shared/package.json index 93739354..a0f5608e 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -5,8 +5,6 @@ "private": true, "type": "module", "dependencies": { - "@aws-sdk/client-s3": "^3.842.0", - "glob": "^11.0.0", "html-to-text": "^9.0.5", "js-tiktoken": "^1.0.20", "nodemailer": "^7.0.4", diff --git a/packages/trpc/models/assets.ts b/packages/trpc/models/assets.ts index f97cfffb..63342896 100644 --- a/packages/trpc/models/assets.ts +++ b/packages/trpc/models/assets.ts @@ -3,7 +3,7 @@ import { and, desc, eq, sql } from "drizzle-orm"; import { z } from "zod"; import { assets } from "@karakeep/db/schema"; -import { deleteAsset } from "@karakeep/shared/assetdb"; +import { deleteAsset } from "@karakeep/shared-server/assetdb"; import serverConfig from "@karakeep/shared/config"; import { createSignedToken } from "@karakeep/shared/signedTokens"; import { zAssetSignedTokenSchema } from "@karakeep/shared/types/assets"; diff --git a/packages/trpc/models/backups.ts b/packages/trpc/models/backups.ts index c7ab99ba..2fd17301 100644 --- a/packages/trpc/models/backups.ts +++ b/packages/trpc/models/backups.ts @@ -4,7 +4,7 @@ import { z } from "zod"; import { assets, backupsTable } from "@karakeep/db/schema"; import { BackupQueue } from "@karakeep/shared-server"; -import { deleteAsset } from "@karakeep/shared/assetdb"; +import { deleteAsset } from "@karakeep/shared-server/assetdb"; import { zBackupSchema } from "@karakeep/shared/types/backups"; import { AuthedContext } from ".."; diff --git a/packages/trpc/models/bookmarks.ts b/packages/trpc/models/bookmarks.ts index c8cd1f00..e0669787 100644 --- a/packages/trpc/models/bookmarks.ts +++ b/packages/trpc/models/bookmarks.ts @@ -30,7 +30,7 @@ import { tagsOnBookmarks, } from "@karakeep/db/schema"; import { SearchIndexingQueue, triggerWebhook } from "@karakeep/shared-server"; -import { deleteAsset, readAsset } from "@karakeep/shared/assetdb"; +import { deleteAsset, readAsset } from "@karakeep/shared-server/assetdb"; import { getAlignedExpiry } from "@karakeep/shared/signedTokens"; import { BookmarkTypes, diff --git a/packages/trpc/models/users.ts b/packages/trpc/models/users.ts index 3340956a..c799f390 100644 --- a/packages/trpc/models/users.ts +++ b/packages/trpc/models/users.ts @@ -18,7 +18,7 @@ import { users, verificationTokens, } from "@karakeep/db/schema"; -import { deleteAsset, deleteUserAssets } from "@karakeep/shared/assetdb"; +import { deleteAsset, deleteUserAssets } from "@karakeep/shared-server/assetdb"; import serverConfig from "@karakeep/shared/config"; import { zResetPasswordSchema, diff --git a/packages/trpc/routers/bookmarks.ts b/packages/trpc/routers/bookmarks.ts index 782566cf..db29bf02 100644 --- a/packages/trpc/routers/bookmarks.ts +++ b/packages/trpc/routers/bookmarks.ts @@ -27,7 +27,7 @@ import { triggerSearchReindex, triggerWebhook, } from "@karakeep/shared-server"; -import { SUPPORTED_BOOKMARK_ASSET_TYPES } from "@karakeep/shared/assetdb"; +import { SUPPORTED_BOOKMARK_ASSET_TYPES } from "@karakeep/shared-server/assetdb"; import serverConfig from "@karakeep/shared/config"; import { InferenceClientFactory } from "@karakeep/shared/inference"; import { buildSummaryPrompt } from "@karakeep/shared/prompts.server"; |
