diff --git a/lib/s3.ts b/lib/s3.ts index 025005eb..fbd98b2d 100644 --- a/lib/s3.ts +++ b/lib/s3.ts @@ -1,13 +1,27 @@ import { S3Client, ListObjectsV2Command, GetObjectCommand, PutObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3'; import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; -// Simplified S3 configuration with consistent naming +/** + * S3/MinIO Configuration + * + * IMPORTANT: Set these environment variables in your .env file: + * + * MINIO_S3_UPLOAD_BUCKET_URL=https://your-minio-instance.com/ + * MINIO_AWS_REGION=your-region + * MINIO_AWS_S3_UPLOAD_BUCKET_NAME=your-bucket-name + * MINIO_ACCESS_KEY=your-access-key + * MINIO_SECRET_KEY=your-secret-key + * + * Alternative credentials (fallback): + * AWS_ACCESS_KEY_ID=your-aws-access-key + * AWS_SECRET_ACCESS_KEY=your-aws-secret-key + */ export const S3_CONFIG = { - endpoint: process.env.S3_ENDPOINT || 'https://dome-api.slm-lab.net/', - region: process.env.S3_REGION || 'eu-east-1', - bucket: process.env.S3_BUCKET || 'pages', - accessKey: process.env.S3_ACCESS_KEY, - secretKey: process.env.S3_SECRET_KEY, + endpoint: process.env.MINIO_S3_UPLOAD_BUCKET_URL, + region: process.env.MINIO_AWS_REGION, + bucket: process.env.MINIO_AWS_S3_UPLOAD_BUCKET_NAME, + accessKey: process.env.MINIO_ACCESS_KEY || process.env.AWS_ACCESS_KEY_ID, + secretKey: process.env.MINIO_SECRET_KEY || process.env.AWS_SECRET_ACCESS_KEY, } // Initialize S3 client with standard configuration @@ -30,6 +44,25 @@ if (S3_CONFIG.accessKey && S3_CONFIG.secretKey) { // Create S3 client export const s3Client = new S3Client(s3Config); +// Check for required environment variables +if (!S3_CONFIG.endpoint || !S3_CONFIG.bucket) { + console.error('ERROR: Missing required S3 environment variables!'); + console.error('Please make sure your .env file contains:'); + console.error('- MINIO_S3_UPLOAD_BUCKET_URL'); + console.error('- MINIO_AWS_S3_UPLOAD_BUCKET_NAME'); + console.error('- MINIO_ACCESS_KEY or AWS_ACCESS_KEY_ID'); + console.error('- MINIO_SECRET_KEY or AWS_SECRET_ACCESS_KEY'); +} + +// Log configuration for debugging (without exposing credentials) +console.log('S3 Configuration:', { + endpoint: S3_CONFIG.endpoint || 'MISSING!', + region: S3_CONFIG.region || 'MISSING!', + bucket: S3_CONFIG.bucket || 'MISSING!', + hasAccessKey: !!S3_CONFIG.accessKey || 'MISSING!', + hasSecretKey: !!S3_CONFIG.secretKey || 'MISSING!', +}); + // Helper functions for S3 operations // List objects in a "folder" for a specific user @@ -165,10 +198,10 @@ export async function generatePresignedUrl(key: string, expiresIn = 3600) { Bucket: S3_CONFIG.bucket, Key: key }); - + return await getSignedUrl(s3Client, command, { expiresIn }); } catch (error) { console.error('Error generating presigned URL:', error); throw error; } -} \ No newline at end of file +} \ No newline at end of file