From 85272af8f3c3ef9a9b8fed6161a85d1632404e9b Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Thu, 21 Sep 2023 18:29:48 +0200 Subject: [PATCH] :ambulance: (upload) Fix upload in embed --- .../fileUpload/api/deprecated/getUploadUrl.ts | 9 ++---- packages/embeds/js/package.json | 2 +- packages/embeds/nextjs/package.json | 2 +- packages/embeds/react/package.json | 2 +- .../lib/s3/deprecated/generatePresignedUrl.ts | 32 +++++++++++++++++++ 5 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 packages/lib/s3/deprecated/generatePresignedUrl.ts diff --git a/apps/viewer/src/features/fileUpload/api/deprecated/getUploadUrl.ts b/apps/viewer/src/features/fileUpload/api/deprecated/getUploadUrl.ts index 9de92b7c7a..63b2727a37 100644 --- a/apps/viewer/src/features/fileUpload/api/deprecated/getUploadUrl.ts +++ b/apps/viewer/src/features/fileUpload/api/deprecated/getUploadUrl.ts @@ -9,7 +9,7 @@ import { } from '@typebot.io/schemas' import { byId, isDefined } from '@typebot.io/lib' import { z } from 'zod' -import { generatePresignedPostPolicy } from '@typebot.io/lib/s3/generatePresignedPostPolicy' +import { generatePresignedUrl } from '@typebot.io/lib/s3/deprecated/generatePresignedUrl' import { env } from '@typebot.io/env' import prisma from '@typebot.io/lib/prisma' @@ -34,7 +34,6 @@ export const getUploadUrl = publicProcedure .output( z.object({ presignedUrl: z.string(), - formData: z.record(z.string(), z.any()), hasReachedStorageLimit: z.boolean(), }) ) @@ -62,15 +61,13 @@ export const getUploadUrl = publicProcedure message: 'File upload block not found', }) - const presignedPostPolicy = await generatePresignedPostPolicy({ + const presignedUrl = await generatePresignedUrl({ fileType, filePath, - maxFileSize: env.NEXT_PUBLIC_BOT_FILE_UPLOAD_MAX_SIZE, }) return { - presignedUrl: `${presignedPostPolicy.postURL}/${presignedPostPolicy.formData.key}`, - formData: presignedPostPolicy.formData, + presignedUrl, hasReachedStorageLimit: false, } }) diff --git a/packages/embeds/js/package.json b/packages/embeds/js/package.json index f439eb89bc..41fd992a3d 100644 --- a/packages/embeds/js/package.json +++ b/packages/embeds/js/package.json @@ -1,6 +1,6 @@ { "name": "@typebot.io/js", - "version": "0.1.27", + "version": "0.1.28", "description": "Javascript library to display typebots on your website", "type": "module", "main": "dist/index.js", diff --git a/packages/embeds/nextjs/package.json b/packages/embeds/nextjs/package.json index df251d1dd5..402f1a07ec 100644 --- a/packages/embeds/nextjs/package.json +++ b/packages/embeds/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@typebot.io/nextjs", - "version": "0.1.27", + "version": "0.1.28", "description": "Convenient library to display typebots on your Next.js website", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/embeds/react/package.json b/packages/embeds/react/package.json index d6156f122e..5be5173358 100644 --- a/packages/embeds/react/package.json +++ b/packages/embeds/react/package.json @@ -1,6 +1,6 @@ { "name": "@typebot.io/react", - "version": "0.1.27", + "version": "0.1.28", "description": "Convenient library to display typebots on your React app", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/lib/s3/deprecated/generatePresignedUrl.ts b/packages/lib/s3/deprecated/generatePresignedUrl.ts new file mode 100644 index 0000000000..2003cf8057 --- /dev/null +++ b/packages/lib/s3/deprecated/generatePresignedUrl.ts @@ -0,0 +1,32 @@ +import { env } from '@typebot.io/env' +import { Client } from 'minio' + +type GeneratePresignedUrlProps = { + filePath: string + fileType?: string +} + +const tenMinutes = 10 * 60 + +export const generatePresignedUrl = async ({ + filePath, + fileType, +}: GeneratePresignedUrlProps): Promise => { + if (!env.S3_ENDPOINT || !env.S3_ACCESS_KEY || !env.S3_SECRET_KEY) + throw new Error( + 'S3 not properly configured. Missing one of those variables: S3_ENDPOINT, S3_ACCESS_KEY, S3_SECRET_KEY' + ) + + const minioClient = new Client({ + endPoint: env.S3_ENDPOINT, + port: env.S3_PORT, + useSSL: env.S3_SSL, + accessKey: env.S3_ACCESS_KEY, + secretKey: env.S3_SECRET_KEY, + region: env.S3_REGION, + }) + + return minioClient.presignedUrl('PUT', env.S3_BUCKET, filePath, tenMinutes, { + 'Content-Type': fileType, + }) +}