diff --git a/.changeset/retire-files-sdk-patch.md b/.changeset/retire-files-sdk-patch.md new file mode 100644 index 00000000..f70f9145 --- /dev/null +++ b/.changeset/retire-files-sdk-patch.md @@ -0,0 +1,5 @@ +--- +"@buildinternet/uploads": patch +--- + +Bump files-sdk to 2.3.1 and drop the local pnpm patch; the Workers-safe S3 adapter now comes from the public files-sdk/s3-fetch entry. diff --git a/apps/web/package.json b/apps/web/package.json index b406214d..48992af3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -26,7 +26,7 @@ "@uploads/ui": "workspace:*", "astro": "^7.2.4", "astro-expressive-code": "^0.44.1", - "files-sdk": "^2.2.5", + "files-sdk": "^2.3.1", "img-comparison-slider": "^8.0.7", "lucide-react": "^1.33.0", "markdown-for-agents": "^1.3.4", diff --git a/packages/storage/package.json b/packages/storage/package.json index d40dd75a..a09035a2 100644 --- a/packages/storage/package.json +++ b/packages/storage/package.json @@ -15,7 +15,7 @@ "@aws-sdk/client-s3": "^3.1080.0", "@aws-sdk/s3-presigned-post": "^3.1080.0", "@aws-sdk/s3-request-presigner": "^3.1080.0", - "files-sdk": "^2.2.5" + "files-sdk": "^2.3.1" }, "devDependencies": { "@cloudflare/workers-types": "^5.20260706.1", diff --git a/packages/storage/src/index.ts b/packages/storage/src/index.ts index a4f3f5d8..df6e92dc 100644 --- a/packages/storage/src/index.ts +++ b/packages/storage/src/index.ts @@ -1,6 +1,7 @@ import { Files, type StoredFile } from "files-sdk"; export { createFilesRouter } from "files-sdk/api"; -import { r2, s3FetchAdapter } from "files-sdk/r2"; +import { r2 } from "files-sdk/r2"; +import { s3Fetch } from "files-sdk/s3-fetch"; /** Discriminant for {@link StorageConfig}. Adding a provider = add a case in `createStorage` plus its peer deps. */ export type StorageProvider = "r2" | "s3"; @@ -117,12 +118,10 @@ export function createStorage(config: StorageConfig): Files { if (!config.endpoint || !config.accessKeyId || !config.secretAccessKey) { throw new Error("s3 storage config requires endpoint, accessKeyId, and secretAccessKey"); } - const adapter = s3FetchAdapter({ + const adapter = s3Fetch({ accessKeyId: config.accessKeyId, bucket: config.bucket, endpoint: config.endpoint, - name: "s3-http-fetch", - providerLabel: "S3 error", region: config.region, secretAccessKey: config.secretAccessKey, ...(config.forcePathStyle !== undefined && { forcePathStyle: config.forcePathStyle }), diff --git a/packages/storage/test/s3-provider.test.ts b/packages/storage/test/s3-provider.test.ts index ae6456a5..43f20863 100644 --- a/packages/storage/test/s3-provider.test.ts +++ b/packages/storage/test/s3-provider.test.ts @@ -11,9 +11,9 @@ const base: S3StorageConfig = { }; describe("createStorage s3 provider", () => { - it("returns a Files instance whose adapter name is s3-http-fetch", () => { + it("returns a Files instance backed by files-sdk's public s3-fetch adapter", () => { const files = createStorage(base); - expect(files.adapter.name).toBe("s3-http-fetch"); + expect(files.adapter.name).toBe("s3-fetch"); }); it("rejects a config missing credentials at runtime (backstop for untyped callers)", () => { diff --git a/packages/ui/package.json b/packages/ui/package.json index 606be1fb..818a2d27 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -46,7 +46,7 @@ "typecheck": "tsc --noEmit" }, "peerDependencies": { - "files-sdk": ">=2.2.4", + "files-sdk": ">=2.3.1", "react": ">=18", "react-dom": ">=18" }, @@ -65,7 +65,7 @@ "@types/node": "^26.1.0", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", - "files-sdk": "^2.2.5", + "files-sdk": "^2.3.1", "react": "^19.2.7", "react-dom": "^19.2.7", "tsup": "^8.3.5", diff --git a/packages/uploads/package.json b/packages/uploads/package.json index 74a18763..4de84755 100644 --- a/packages/uploads/package.json +++ b/packages/uploads/package.json @@ -46,7 +46,7 @@ "node": ">=22" }, "peerDependencies": { - "files-sdk": "^2.2.4" + "files-sdk": "^2.3.1" }, "peerDependenciesMeta": { "files-sdk": { @@ -56,7 +56,7 @@ "devDependencies": { "@types/node": "^26.1.0", "ai": "^6.0.0", - "files-sdk": "^2.2.5", + "files-sdk": "^2.3.1", "typescript": "^7.0.2", "vitest": "^4.1.10" }, diff --git a/patches/files-sdk.patch b/patches/files-sdk.patch deleted file mode 100644 index fb27dcee..00000000 --- a/patches/files-sdk.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/dist/r2/index.d.ts b/dist/r2/index.d.ts -index e7e48a466c0115b114b9a043bcb531c59fe329ea..009444bbc35fd968bab93ea93d780bfdd5affc59 100644 ---- a/dist/r2/index.d.ts -+++ b/dist/r2/index.d.ts -@@ -115,3 +115,5 @@ export type R2Adapter = Adapter; - export declare const r2: (opts: R2AdapterOptions) => R2Adapter; - export type { R2Bucket } from "@cloudflare/workers-types"; - //# sourceMappingURL=index.d.ts.map -+export { s3FetchAdapter } from "../internal/s3-fetch.js"; -+export type { S3FetchAdapter, S3FetchAdapterOptions } from "../internal/s3-fetch.js"; -diff --git a/dist/r2/index.js b/dist/r2/index.js -index c085afb21c34d6534b1db4ca288efc2cff2cd99b..996adea59f3c7c2fe1ea1c6b14dbe1818be2a743 100644 ---- a/dist/r2/index.js -+++ b/dist/r2/index.js -@@ -855,7 +855,8 @@ var r2 = (opts) => { - return r2FromHttp(opts); - }; - export { -- r2 -+ r2, -+ s3FetchAdapter - }; - - //# debugId=2F52ECC6661FAB0164756E2164756E21 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a6707eb..686d6796 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,6 @@ settings: patchedDependencies: '@better-auth/oauth-provider': 44cdf8c2aeeab967305abd7fa5ecc4cced9191215780a6e7229b2d23e7f5f84e - files-sdk: 0744b0288e3d37d2265c916db102f8c50a9e75af934e79e18699959f97e13605 importers: @@ -214,8 +213,8 @@ importers: specifier: ^0.44.1 version: 0.44.1(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) files-sdk: - specifier: ^2.2.5 - version: 2.2.5(patch_hash=0744b0288e3d37d2265c916db102f8c50a9e75af934e79e18699959f97e13605)(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) + specifier: ^2.3.1 + version: 2.3.1(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) img-comparison-slider: specifier: ^8.0.7 version: 8.0.7 @@ -339,8 +338,8 @@ importers: specifier: ^3.1080.0 version: 3.1080.0 files-sdk: - specifier: ^2.2.5 - version: 2.2.5(patch_hash=0744b0288e3d37d2265c916db102f8c50a9e75af934e79e18699959f97e13605)(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) + specifier: ^2.3.1 + version: 2.3.1(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) devDependencies: '@cloudflare/workers-types': specifier: ^5.20260706.1 @@ -392,8 +391,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.17) files-sdk: - specifier: ^2.2.5 - version: 2.2.5(patch_hash=0744b0288e3d37d2265c916db102f8c50a9e75af934e79e18699959f97e13605)(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) + specifier: ^2.3.1 + version: 2.3.1(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) react: specifier: ^19.2.7 version: 19.2.7 @@ -438,8 +437,8 @@ importers: specifier: ^6.0.0 version: 6.0.220(zod@4.5.4) files-sdk: - specifier: ^2.2.5 - version: 2.2.5(patch_hash=0744b0288e3d37d2265c916db102f8c50a9e75af934e79e18699959f97e13605)(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) + specifier: ^2.3.1 + version: 2.3.1(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4) typescript: specifier: ^7.0.2 version: 7.0.2 @@ -4580,12 +4579,12 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - files-sdk@2.2.5: - resolution: {integrity: sha512-5aFnCgNaT7UXHAd2HJ9szNQru9u19rYePZ6wX6Y0Rk3gpbpv1yQvQVBwCabRiiF1T/xn/h8Nt9firzS6fLgyPw==} + files-sdk@2.3.1: + resolution: {integrity: sha512-pWscKGCe5/Y2wtMm6Mo91FvZFm1ro/w38nQ63Kozc6spNijwHLy10skp6e7ySkA3A6CLCik1fffpXrQm4Rrs8Q==} hasBin: true peerDependencies: '@anthropic-ai/claude-agent-sdk': ^0.3.0 - '@aws-sdk/client-s3': ^3.700.0 + '@aws-sdk/client-s3': ^3.1079.0 '@aws-sdk/lib-storage': ^3.700.0 '@aws-sdk/s3-presigned-post': ^3.700.0 '@aws-sdk/s3-request-presigner': ^3.700.0 @@ -4596,7 +4595,7 @@ packages: '@google-cloud/storage': ^7.19.0 '@googleapis/drive': ^20.0.0 '@microsoft/microsoft-graph-client': ^3.0.7 - '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 || ^12.0.0 '@netlify/blobs': ^10.7.4 '@openai/agents': ^0.11.0 '@opentelemetry/api': ^1.9.0 @@ -4619,9 +4618,9 @@ packages: hono: ^4.0.0 koa: ^2.0.0 || ^3.0.0 next: ^14.0.0 || ^15.0.0 || ^16.0.0 - node-appwrite: ^26.0.0 + node-appwrite: ^26.0.0 || ^27.0.0 || ^28.0.0 openai: ^6.0.0 - pocketbase: ^0.27.0 + pocketbase: ^0.27.0 || ^0.28.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 ssh2-sftp-client: ^12.1.1 @@ -11201,7 +11200,7 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - files-sdk@2.2.5(patch_hash=0744b0288e3d37d2265c916db102f8c50a9e75af934e79e18699959f97e13605)(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4): + files-sdk@2.3.1(@aws-sdk/client-s3@3.1080.0)(@aws-sdk/s3-presigned-post@3.1080.0)(@aws-sdk/s3-request-presigner@3.1080.0)(@opentelemetry/api@1.9.1)(ai@6.0.220(zod@4.5.4))(astro@7.2.4(@astrojs/markdown-remark@7.2.4)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@26.1.0)(aws4fetch@1.0.20)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))(h3@1.15.11)(hono@4.13.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(zod@4.5.4): dependencies: aws4fetch: 1.0.20 commander: 15.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e6f8af22..67a90926 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,8 +25,7 @@ minimumReleaseAgeExclude: - "@aws-sdk/s3-request-presigner@3.1080.0" - "@aws-sdk/token-providers@3.1080.0" - "@cloudflare/workers-types@5.20260706.1" - - files-sdk@2.2.4 + - files-sdk@2.2.4 || 2.3.1 - hono@4.12.28 patchedDependencies: "@better-auth/oauth-provider": patches/@better-auth__oauth-provider.patch - files-sdk: patches/files-sdk.patch