NeahNew/.next/server/app/api/missions/image/[...path]/route.js
2025-05-06 23:01:34 +02:00

1 line
7.5 KiB
JavaScript

(()=>{var e={};e.id=4839,e.ids=[4839],e.modules={3295:e=>{"use strict";e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},14182:(e,t,r)=>{"use strict";r.d(t,{$R:()=>l,Ui:()=>c,XB:()=>a,XR:()=>u,YE:()=>s,ZT:()=>p,b4:()=>d,oD:()=>i});var o=r(91043);r(11046);let s={endpoint:process.env.MINIO_S3_UPLOAD_BUCKET_URL,region:process.env.MINIO_AWS_REGION,bucket:process.env.MINIO_AWS_S3_UPLOAD_BUCKET_NAME,missionsBucket:process.env.MINIO_MISSIONS_BUCKET||"missions",accessKey:process.env.MINIO_ACCESS_KEY||process.env.AWS_ACCESS_KEY_ID,secretKey:process.env.MINIO_SECRET_KEY||process.env.AWS_SECRET_ACCESS_KEY},n={region:s.region,endpoint:s.endpoint,forcePathStyle:!0};s.accessKey&&s.secretKey&&Object.assign(n,{credentials:{accessKeyId:s.accessKey,secretAccessKey:s.secretKey}});let i=new o.S3Client(n);async function c(e,t){try{let r=`user-${e}/${t}/`;console.log(`Listing objects with prefix: ${r}`);let n=new o.ListObjectsV2Command({Bucket:s.bucket,Prefix:r,Delimiter:"/"}),c=await i.send(n);return c.Contents?.map(e=>({id:e.Key,title:e.Key?.split("/").pop()?.replace(".md","")||"",lastModified:e.LastModified?.toISOString(),size:e.Size,type:"file",mime:e.Key?.endsWith(".md")?"text/markdown":"application/octet-stream",etag:e.ETag})).filter(e=>!e.title.startsWith(".placeholder")&&""!==e.title)||[]}catch(e){throw console.error("Error listing objects:",e),e}}async function a(e){try{let t=new o.GetObjectCommand({Bucket:s.bucket,Key:e}),r=await i.send(t);return await r.Body?.transformToString()}catch(e){throw console.error("Error getting object content:",e),e}}async function l(e,t,r){try{if(console.log(`Attempting to upload to S3/Minio: ${e}`),!s.bucket)throw Error("S3 bucket name is not configured");let n=new o.PutObjectCommand({Bucket:s.bucket,Key:e,Body:t,ContentType:r||(e.endsWith(".md")?"text/markdown":"text/plain")});console.log(`S3 PutObject request prepared for ${e}`);let c=await i.send(n);return console.log(`S3 PutObject successful for ${e}, ETag: ${c.ETag}`),{id:e,title:e.split("/").pop()?.replace(".md","")||"",lastModified:new Date().toISOString(),size:t.length,type:"file",mime:r||(e.endsWith(".md")?"text/markdown":"text/plain"),etag:c.ETag}}catch(t){throw console.error(`Error putting object to S3/Minio (${e}):`,t),t?.name==="NoSuchBucket"&&console.error(`Bucket "${s.bucket}" does not exist. Please create it first.`),t}}async function u(e){try{let t=new o.DeleteObjectCommand({Bucket:s.bucket,Key:e});return await i.send(t),!0}catch(e){throw console.error("Error deleting object:",e),e}}async function p(e){try{console.log(`Creating folder structure for user: ${e}`);let t=[];for(let r of["notes","diary","health","contacts"])try{let o=`user-${e}/${r}/`;console.log(`Creating folder: ${o}`),await l(o,"","application/x-directory");let s=`user-${e}/${r}/.placeholder`;await l(s,"Folder placeholder","text/plain"),t.push(r)}catch(e){console.error(`Error creating folder ${r}:`,e)}return console.log(`Successfully created ${t.length} folders for user ${e}: ${t.join(", ")}`),!0}catch(e){throw console.error("Error creating folder structure:",e),e}}function d(e,t){if(!e)return"";if(e.startsWith("http"))return e;console.log("Generating public URL for:",e);let r=e.startsWith("/")?e.substring(1):e;if(r.startsWith("pages/")){let e=process.env.NEXT_PUBLIC_MINIO_BASE_URL||process.env.MINIO_PUBLIC_URL;if(e){let t=e.replace(/\/$/,""),o=`${t}/${r}`;return console.log("Generated special public URL for pages path:",o),o}}let o=t||s.bucket,n=s.endpoint?.replace(/\/$/,"");if(console.log("S3 Config for URL generation:",{endpoint:n,bucket:o,cleanPath:r}),!n)return console.warn("No S3/Minio endpoint configured, returning original path"),r;let i=`${n}/${o}/${r}`;return console.log("Generated public URL:",i),i}(async()=>{try{console.log("Testing Minio/S3 connection...");let e=new o.ListObjectsV2Command({Bucket:s.bucket,MaxKeys:1}),t=await i.send(e);console.log("Minio/S3 connection successful! Bucket exists and is accessible."),console.log(`Bucket details: ${s.bucket}, contains ${t.KeyCount||0} objects`)}catch(e){console.error("CRITICAL ERROR: Failed to connect to Minio/S3 server!"),console.error("File uploads will fail until this is resolved."),console.error("Error details:",e),console.error("Please check your S3/Minio configuration and server status.")}})(),s.endpoint&&s.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")),console.log("S3 Configuration:",{endpoint:s.endpoint||"MISSING!",region:s.region||"MISSING!",bucket:s.bucket||"MISSING!",hasAccessKey:!!s.accessKey||"MISSING!",hasSecretKey:!!s.secretKey||"MISSING!"})},21820:e=>{"use strict";e.exports=require("os")},27910:e=>{"use strict";e.exports=require("stream")},29021:e=>{"use strict";e.exports=require("fs")},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:e=>{"use strict";e.exports=require("path")},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},47493:(e,t,r)=>{"use strict";r.r(t),r.d(t,{patchFetch:()=>f,routeModule:()=>d,serverHooks:()=>m,workAsyncStorage:()=>g,workUnitAsyncStorage:()=>S});var o={};r.r(o),r.d(o,{GET:()=>p});var s=r(96559),n=r(48088),i=r(37719),c=r(32190),a=r(91043),l=r(14182);let u=new a.S3Client({region:l.YE.region,endpoint:l.YE.endpoint,credentials:{accessKeyId:l.YE.accessKey||"",secretAccessKey:l.YE.secretKey||""},forcePathStyle:!0});async function p(e,{params:t}){try{let{path:e}=await t;if(!e||0===e.length)return new c.NextResponse("Path is required",{status:400});let r=e.join("/");console.log("Fetching mission image:",r);let o=new a.GetObjectCommand({Bucket:l.YE.bucket,Key:r}),s=await u.send(o);if(!s.Body)return console.error("File not found in Minio:",r),new c.NextResponse("File not found",{status:404});let n=s.Body.transformToWebStream(),i=s.ContentType||"application/octet-stream";return new c.NextResponse(n,{headers:{"Content-Type":i,"Cache-Control":"public, max-age=31536000"}})}catch(e){return console.error("Error serving mission image:",e),console.error("Error details:",JSON.stringify(e,null,2)),new c.NextResponse("Internal Server Error",{status:500})}}let d=new s.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/missions/image/[...path]/route",pathname:"/api/missions/image/[...path]",filename:"route",bundlePath:"app/api/missions/image/[...path]/route"},resolvedPagePath:"/Users/alma/Documents/NeahNew/app/api/missions/image/[...path]/route.ts",nextConfigOutput:"",userland:o}),{workAsyncStorage:g,workUnitAsyncStorage:S,serverHooks:m}=d;function f(){return(0,i.patchFetch)({workAsyncStorage:g,workUnitAsyncStorage:S})}},55511:e=>{"use strict";e.exports=require("crypto")},55591:e=>{"use strict";e.exports=require("https")},57075:e=>{"use strict";e.exports=require("node:stream")},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73496:e=>{"use strict";e.exports=require("http2")},78335:()=>{},79428:e=>{"use strict";e.exports=require("buffer")},81630:e=>{"use strict";e.exports=require("http")},91043:e=>{"use strict";e.exports=require("@aws-sdk/client-s3")},96487:()=>{}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),o=t.X(0,[4243,580,1046],()=>r(47493));module.exports=o})();