From 23b629f82cfecf5656bb91c0524d9e04679454fa Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 30 Aug 2023 09:36:45 +0200 Subject: [PATCH] :recycle: Move s3-related files to specific lib folder --- .../ImageUploadContent/UploadButton.tsx | 2 +- .../src/pages/api/storage/upload-url.ts | 2 +- .../inputs/fileUpload/api/getUploadUrl.ts | 2 +- .../whatsApp/helpers/downloadMedia.ts | 2 +- .../fileUpload/components/FileUploadForm.tsx | 2 +- .../fileUpload/components/FileUploadForm.tsx | 2 +- packages/lib/api/helpers/archiveResults.ts | 32 +------------------ packages/lib/api/index.ts | 1 - .../lib/{api => s3}/deleteFilesFromBucket.ts | 2 +- .../lib/{api => s3}/generatePresignedUrl.ts | 0 .../lib/{api => s3}/uploadFileToBucket.ts | 0 packages/lib/{ => s3}/uploadFiles.ts | 2 +- 12 files changed, 9 insertions(+), 40 deletions(-) rename packages/lib/{api => s3}/deleteFilesFromBucket.ts (94%) rename packages/lib/{api => s3}/generatePresignedUrl.ts (100%) rename packages/lib/{api => s3}/uploadFileToBucket.ts (100%) rename packages/lib/{ => s3}/uploadFiles.ts (96%) diff --git a/apps/builder/src/components/ImageUploadContent/UploadButton.tsx b/apps/builder/src/components/ImageUploadContent/UploadButton.tsx index d568f6a1a..544717ac4 100644 --- a/apps/builder/src/components/ImageUploadContent/UploadButton.tsx +++ b/apps/builder/src/components/ImageUploadContent/UploadButton.tsx @@ -1,7 +1,7 @@ import { useToast } from '@/hooks/useToast' import { Button, ButtonProps, chakra } from '@chakra-ui/react' import { ChangeEvent, useState } from 'react' -import { uploadFiles } from '@typebot.io/lib/uploadFiles' +import { uploadFiles } from '@typebot.io/lib/s3/uploadFiles' import { compressFile } from '@/helpers/compressFile' type UploadButtonProps = { diff --git a/apps/builder/src/pages/api/storage/upload-url.ts b/apps/builder/src/pages/api/storage/upload-url.ts index 8abc21a99..a6cce8897 100644 --- a/apps/builder/src/pages/api/storage/upload-url.ts +++ b/apps/builder/src/pages/api/storage/upload-url.ts @@ -2,10 +2,10 @@ import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/helpers/getAuthenticatedUser' import { badRequest, - generatePresignedUrl, methodNotAllowed, notAuthenticated, } from '@typebot.io/lib/api' +import { generatePresignedUrl } from '@typebot.io/lib/s3/generatePresignedUrl' import { env } from '@typebot.io/env' const handler = async ( diff --git a/apps/viewer/src/features/blocks/inputs/fileUpload/api/getUploadUrl.ts b/apps/viewer/src/features/blocks/inputs/fileUpload/api/getUploadUrl.ts index 87936ee8e..f6b3ca854 100644 --- a/apps/viewer/src/features/blocks/inputs/fileUpload/api/getUploadUrl.ts +++ b/apps/viewer/src/features/blocks/inputs/fileUpload/api/getUploadUrl.ts @@ -10,7 +10,7 @@ import { } from '@typebot.io/schemas' import { byId, isDefined } from '@typebot.io/lib' import { z } from 'zod' -import { generatePresignedUrl } from '@typebot.io/lib/api/generatePresignedUrl' +import { generatePresignedUrl } from '@typebot.io/lib/s3/generatePresignedUrl' import { env } from '@typebot.io/env' export const getUploadUrl = publicProcedure diff --git a/apps/viewer/src/features/whatsApp/helpers/downloadMedia.ts b/apps/viewer/src/features/whatsApp/helpers/downloadMedia.ts index b47397874..b002318c2 100644 --- a/apps/viewer/src/features/whatsApp/helpers/downloadMedia.ts +++ b/apps/viewer/src/features/whatsApp/helpers/downloadMedia.ts @@ -1,6 +1,6 @@ import got from 'got' import { TRPCError } from '@trpc/server' -import { uploadFileToBucket } from '@typebot.io/lib/api/uploadFileToBucket' +import { uploadFileToBucket } from '@typebot.io/lib/s3/uploadFileToBucket' type Props = { mediaId: string diff --git a/packages/deprecated/bot-engine/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx b/packages/deprecated/bot-engine/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx index 7c2becc26..f60a4c502 100644 --- a/packages/deprecated/bot-engine/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx +++ b/packages/deprecated/bot-engine/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx @@ -4,7 +4,7 @@ import { useTypebot } from '@/providers/TypebotProvider' import { InputSubmitContent } from '@/types' import { defaultFileInputOptions, FileInputBlock } from '@typebot.io/schemas' import React, { ChangeEvent, FormEvent, useState, DragEvent } from 'react' -import { uploadFiles } from '@typebot.io/lib/uploadFiles' +import { uploadFiles } from '@typebot.io/lib/s3/uploadFiles' type Props = { block: FileInputBlock diff --git a/packages/embeds/js/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx b/packages/embeds/js/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx index 74f1cd719..036b7d4d9 100644 --- a/packages/embeds/js/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx +++ b/packages/embeds/js/src/features/blocks/inputs/fileUpload/components/FileUploadForm.tsx @@ -4,7 +4,7 @@ import { guessApiHost } from '@/utils/guessApiHost' import { FileInputBlock } from '@typebot.io/schemas' import { defaultFileInputOptions } from '@typebot.io/schemas/features/blocks/inputs/file' import { createSignal, Match, Show, Switch } from 'solid-js' -import { uploadFiles } from '@typebot.io/lib/uploadFiles' +import { uploadFiles } from '@typebot.io/lib/s3/uploadFiles' import { Button } from '@/components/Button' import { Spinner } from '@/components/Spinner' diff --git a/packages/lib/api/helpers/archiveResults.ts b/packages/lib/api/helpers/archiveResults.ts index 33f87dbb6..c6f8286b9 100644 --- a/packages/lib/api/helpers/archiveResults.ts +++ b/packages/lib/api/helpers/archiveResults.ts @@ -1,7 +1,6 @@ -import { env } from '@typebot.io/env' import { Prisma, PrismaClient } from '@typebot.io/prisma' import { InputBlockType, Typebot } from '@typebot.io/schemas' -import { Client } from 'minio' +import { deleteFilesFromBucket } from '../../s3/deleteFilesFromBucket' type ArchiveResultsProps = { typebot: Pick @@ -90,32 +89,3 @@ export const archiveResults = return { success: true } } - -const deleteFilesFromBucket = async ({ - urls, -}: { - urls: string[] -}): 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 ?? true, - accessKey: env.S3_ACCESS_KEY, - secretKey: env.S3_SECRET_KEY, - region: env.S3_REGION, - }) - - const bucket = env.S3_BUCKET ?? 'typebot' - - return minioClient.removeObjects( - bucket, - urls - .filter((url) => url.includes(env.S3_ENDPOINT as string)) - .map((url) => url.split(`/${bucket}/`)[1]) - ) -} diff --git a/packages/lib/api/index.ts b/packages/lib/api/index.ts index ceb911860..2230c46ed 100644 --- a/packages/lib/api/index.ts +++ b/packages/lib/api/index.ts @@ -1,3 +1,2 @@ export * from './utils' -export * from './generatePresignedUrl' export * from './encryption' diff --git a/packages/lib/api/deleteFilesFromBucket.ts b/packages/lib/s3/deleteFilesFromBucket.ts similarity index 94% rename from packages/lib/api/deleteFilesFromBucket.ts rename to packages/lib/s3/deleteFilesFromBucket.ts index b6983d5ee..aaed76a59 100644 --- a/packages/lib/api/deleteFilesFromBucket.ts +++ b/packages/lib/s3/deleteFilesFromBucket.ts @@ -20,7 +20,7 @@ export const deleteFilesFromBucket = async ({ region: env.S3_REGION, }) - const bucket = env.S3_BUCKET ?? 'typebot' + const bucket = env.S3_BUCKET return minioClient.removeObjects( bucket, diff --git a/packages/lib/api/generatePresignedUrl.ts b/packages/lib/s3/generatePresignedUrl.ts similarity index 100% rename from packages/lib/api/generatePresignedUrl.ts rename to packages/lib/s3/generatePresignedUrl.ts diff --git a/packages/lib/api/uploadFileToBucket.ts b/packages/lib/s3/uploadFileToBucket.ts similarity index 100% rename from packages/lib/api/uploadFileToBucket.ts rename to packages/lib/s3/uploadFileToBucket.ts diff --git a/packages/lib/uploadFiles.ts b/packages/lib/s3/uploadFiles.ts similarity index 96% rename from packages/lib/uploadFiles.ts rename to packages/lib/s3/uploadFiles.ts index 055c68238..ddbbae438 100644 --- a/packages/lib/uploadFiles.ts +++ b/packages/lib/s3/uploadFiles.ts @@ -1,4 +1,4 @@ -import { sendRequest } from './utils' +import { sendRequest } from '../utils' type UploadFileProps = { basePath?: string