makearmy-app/.next/server/app/api/submit/project/route.js

1 line
5.7 KiB
JavaScript
Raw Normal View History

2025-09-22 10:37:53 -04:00
(()=>{var e={};e.id=2860,e.ids=[2860],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")},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33145:(e,t,r)=>{"use strict";r.d(t,{Kk:()=>l,Me:()=>h,QM:()=>f,bY:()=>g,co:()=>y,pN:()=>a});let i=process.env.DIRECTUS_URL,s=process.env.DIRECTUS_TOKEN_SUBMIT,n=process.env.DIRECTUS_PROJECTS_COLLECTION||"projects";function a(e){return Math.round(1024*e*1024)}async function o(e){let t=await e.text(),r=null;try{r=t?JSON.parse(t):null}catch{}return{json:r,text:t}}async function l(e,t){let r=await fetch(`${i}${e}`,{...t,headers:{Accept:"application/json",Authorization:`Bearer ${s}`,...t?.headers||{}}}),{json:n,text:a}=await o(r);if(!r.ok)throw Error(`Directus error ${r.status}: ${a||r.statusText}`);return n??{}}i||console.warn("[directus] Missing DIRECTUS_URL"),s||console.warn("[directus] Missing DIRECTUS_TOKEN_SUBMIT");let u=new Map,d=null,p=0;async function c(){try{let e=await l("/folders?fields=id,name,parent.id,parent.name&limit=500");return e?.data??[]}catch(e){return console.warn("[directus] fetchAllFolders failed:",e?.message||e),null}}async function m(e){let t;if(!e)return;if(u.has(e))return u.get(e);let r=Date.now();(!d||r-p>6e4)&&(d=await c(),p=r);let i=d;if(!i)return void u.set(e,void 0);let s=e.split("/").map(e=>e.trim()).filter(Boolean),[n,a]=s,o=(e,t)=>String(e??"").toLowerCase()===String(t??"").toLowerCase();t=s.length>=2?i.find(e=>o(e.name,a)&&o(e.parent?.name??"",n)):i.find(e=>o(e.name,s[0]));let l=t?.id?String(t.id):void 0;return u.set(e,l),l}async function f(e,t,r){let n=new FormData;n.set("file",e,t),n.set("filename_download",t),r?.title&&n.set("title",r.title);let a=r?.folderId;!a&&r?.folderNamePath&&(a=await m(r.folderNamePath)),a&&n.set("folder",a);let l=await fetch(`${i}/files`,{method:"POST",headers:{Authorization:`Bearer ${s}`,Accept:"application/json"},body:n}),{json:u,text:d}=await o(l);if(!l.ok)throw Error(`File upload failed: status=${l.status} ${l.statusText} body=${(d||"").slice(0,400)||"<empty>"}`);let p=u?.data?.id??u?.id;if(!p)throw Error("File upload succeeded but no id returned");return{id:String(p)}}async function g(e,t){return l(`/items/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function h(e){return l(`/items/${n}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async function y(e,t){return l(`/items/${n}/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},78335:()=>{},93421:(e,t,r)=>{"use strict";r.r(t),r.d(t,{patchFetch:()=>S,routeModule:()=>h,serverHooks:()=>x,workAsyncStorage:()=>y,workUnitAsyncStorage:()=>w});var i={};r.r(i),r.d(i,{POST:()=>g,runtime:()=>f});var s=r(96559),n=r(48088),a=r(37719),o=r(32190),l=r(33145);let u=Number(process.env.FILE_MAX_MB||25),d=(0,l.pN)(u),p=new Map,c=1e3*Number(process.env.RATE_LIMIT_WINDOW||60),m=Number(process.env.RATE_LIMIT_MAX||15),f="nodejs";async function g(e){try{let t,r=e.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"0.0.0.0";if(!function(e){let t=Date.now(),r=p.get(e);return!r||t>r.resetAt?(p.set(e,{c:1,resetAt:t+c}),!0):!(r.c>=m)&&(r.c+=1,!0)}(r))return o.NextResponse.json({error:"Rate limited"},{status:429});if(!(e.headers.get("content-type")||"").includes("multipart/form-data"))return o.NextResponse.json({error:"Expected multipart/form-data"},{status:400});let i=await e.formData(),s=String(i.get("title")||"").trim(),n=String(i.get("uploader")||"").trim(),a=String(i.get("category")||"").trim(),f=String(i.get("body")||i.get("description")||"").trim();if(!s||!n||!f)return o.NextResponse.json({error:"Missing required fields: title, uploader