1 line
No EOL
8.8 KiB
JavaScript
1 line
No EOL
8.8 KiB
JavaScript
(()=>{var e={};e.id=6190,e.ids=[6190],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,s)=>{"use strict";s.d(t,{Kk:()=>l,Me:()=>g,QM:()=>m,bY:()=>h,co:()=>_,pN:()=>a});let r=process.env.DIRECTUS_URL,n=process.env.DIRECTUS_TOKEN_SUBMIT,i=process.env.DIRECTUS_PROJECTS_COLLECTION||"projects";function a(e){return Math.round(1024*e*1024)}async function o(e){let t=await e.text(),s=null;try{s=t?JSON.parse(t):null}catch{}return{json:s,text:t}}async function l(e,t){let s=await fetch(`${r}${e}`,{...t,headers:{Accept:"application/json",Authorization:`Bearer ${n}`,...t?.headers||{}}}),{json:i,text:a}=await o(s);if(!s.ok)throw Error(`Directus error ${s.status}: ${a||s.statusText}`);return i??{}}r||console.warn("[directus] Missing DIRECTUS_URL"),n||console.warn("[directus] Missing DIRECTUS_TOKEN_SUBMIT");let u=new Map,p=null,c=0;async function d(){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 f(e){let t;if(!e)return;if(u.has(e))return u.get(e);let s=Date.now();(!p||s-c>6e4)&&(p=await d(),c=s);let r=p;if(!r)return void u.set(e,void 0);let n=e.split("/").map(e=>e.trim()).filter(Boolean),[i,a]=n,o=(e,t)=>String(e??"").toLowerCase()===String(t??"").toLowerCase();t=n.length>=2?r.find(e=>o(e.name,a)&&o(e.parent?.name??"",i)):r.find(e=>o(e.name,n[0]));let l=t?.id?String(t.id):void 0;return u.set(e,l),l}async function m(e,t,s){let i=new FormData;i.set("file",e,t),i.set("filename_download",t),s?.title&&i.set("title",s.title);let a=s?.folderId;!a&&s?.folderNamePath&&(a=await f(s.folderNamePath)),a&&i.set("folder",a);let l=await fetch(`${r}/files`,{method:"POST",headers:{Authorization:`Bearer ${n}`,Accept:"application/json"},body:i}),{json:u,text:p}=await o(l);if(!l.ok)throw Error(`File upload failed: status=${l.status} ${l.statusText} body=${(p||"").slice(0,400)||"<empty>"}`);let c=u?.data?.id??u?.id;if(!c)throw Error("File upload succeeded but no id returned");return{id:String(c)}}async function h(e,t){return l(`/items/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function g(e){return l(`/items/${i}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async function _(e,t){return l(`/items/${i}/${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")},50350:(e,t,s)=>{"use strict";s.r(t),s.d(t,{patchFetch:()=>R,routeModule:()=>T,serverHooks:()=>M,workAsyncStorage:()=>j,workUnitAsyncStorage:()=>A});var r={};s.r(r),s.d(r,{POST:()=>N,runtime:()=>u});var n=s(96559),i=s(48088),a=s(37719),o=s(32190),l=s(33145);let u="nodejs",p=Number(process.env.FILE_MAX_MB||25),c=(0,l.pN)(p),d=new Map,f=1e3*Number(process.env.RATE_LIMIT_WINDOW||60),m=Number(process.env.RATE_LIMIT_MAX||15);function h(e,t){let s="settings_fiber"===e?"le_fiber_settings":"settings_uv"===e?"le_uv_settings":"settings_co2gal"===e?"le_co2gal_settings":"le_co2gan_settings";return"photo"===t?`${s}_photos`:`${s}_screenshots`}async function g(e){try{let t=await (0,l.Kk)(`/folders?limit=1&fields=id&filter[name][_eq]=${encodeURIComponent(e)}`);return(t?.data?.[0]?.id??null)||null}catch{return null}}async function _(e,t){e&&t&&await (0,l.Kk)(`/files/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({folder:t})})}let w=new Set(["name","power","speed","interval","pass","type","flood","air","frequency","pulse","angle","auto","increment","cross"]),y=new Set(["name","power","speed","perf","cut","skip","pass","air","frequency","pulse","wobble","step","size"]),b=new Set(["name","power","speed","type","dither","halftone_cell","halftone_angle","inversion","interval","dot","pass","air","frequency","pulse","cross"]);function S(e,t=null){if(null==e||""===e)return t;let s=Number(e);return Number.isFinite(s)?s:t}function v(e,t){let s={};for(let r of Object.keys(e||{}))t.has(r)&&(["power","speed","interval","pass","halftone_cell","halftone_angle","dot","frequency","pulse","angle","increment","step","size"].includes(r)?s[r]=S(e[r]):["auto","cross","wobble","perf","air","flood","inversion"].includes(r)?s[r]=!!e[r]:s[r]=e[r]);return s}async function x(e){let t=e.headers.get("content-type")||"";if(t.includes("multipart/form-data")){let t=await e.formData(),s=String(t.get("payload")||"{}"),r={};try{r=JSON.parse(s)}catch{throw Error("Invalid JSON in 'payload' field")}return{mode:"multipart",body:r,files:{photo:t.get("photo")||null,screen:t.get("screen")||null}}}if(t.includes("application/json"))return{mode:"json",body:await e.json(),files:{photo:null,screen:null}};throw Error("Unsupported content-type. Use JSON or multipart/form-data.")}async function N(e){let t=Date.now();try{let s=e.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"0.0.0.0";if(!function(e){let t=Date.now(),s=d.get(e);return!s||t>s.resetAt?(d.set(e,{c:1,resetAt:t+f}),!0):!(s.c>=m)&&(s.c+=1,!0)}(s))return o.NextResponse.json({error:"Rate limited"},{status:429});let{mode:r,body:n,files:i}=await x(e),a=n?.target;if(!["settings_fiber","settings_co2gan","settings_co2gal","settings_uv"].includes(a))return o.NextResponse.json({error:"Invalid target"},{status:400});let u=String(n?.setting_title||n?.title||"").trim(),N=String(n?.uploader||"").trim(),T=n?.mat??null,j=n?.mat_coat??null,A=n?.mat_color??null,M=n?.mat_opacity??null,R=n?.source??null,$=n?.lens??null,O=S(n?.mat_thickness,null),k=S(n?.focus,null),C=String(n?.setting_notes||n?.notes||"").trim()||"",E="settings_fiber"===a?n?.laser_soft??null:null,I="settings_fiber"===a?S(n?.repeat_all,null):null,P=[];u||P.push("setting_title"),N||P.push("uploader"),R||P.push("source"),$||P.push("lens"),null!==k&&Number.isFinite(k)||P.push("focus"),T||P.push("mat"),j||P.push("mat_coat"),A||P.push("mat_color"),M||P.push("mat_opacity"),"settings_fiber"===a&&(E||P.push("laser_soft"),null!==I&&Number.isFinite(I)||P.push("repeat_all"));let U=null,D=null;if("multipart"===r){if(i.photo||P.push("photo"),i.photo){if(i.photo.size>c)return o.NextResponse.json({error:`Photo exceeds ${p} MB`},{status:400});let e=await (0,l.QM)(i.photo,i.photo.name||"photo");U=e?.id??null;let t=await g(h(a,"photo"));await _(String(U),t)}if(i.screen){if(i.screen.size>c)return o.NextResponse.json({error:`Screenshot exceeds ${p} MB`},{status:400});let e=await (0,l.QM)(i.screen,i.screen.name||"screen");D=e?.id??null;let t=await g(h(a,"screen"));await _(String(D),t)}}else{let e=async(e,t)=>{let s=(e||"").split(",")[1]||"";if(!s)return null;let r=Buffer.from(s,"base64");if(r.byteLength>c)throw Error(`${t} exceeds ${p} MB`);let n=new Blob([r]),i=await (0,l.QM)(n,t);return i?.id??null};if(n?.photo_data){U=await e(n.photo_data,"photo");let t=await g(h(a,"photo"));await _(String(U),t)}else P.push("photo");if(n?.screen_data){D=await e(n.screen_data,"screen");let t=await g(h(a,"screen"));await _(String(D),t)}}if(P.length)return o.NextResponse.json({error:`Missing required: ${P.join(", ")}`},{status:400});let q=Array.isArray(n?.fill_settings)?n.fill_settings:n?.fills||[],B=Array.isArray(n?.line_settings)?n.line_settings:n?.lines||[],F=Array.isArray(n?.raster_settings)?n.raster_settings:n?.rasters||[],L=q.map(e=>v(e,w)),J=B.map(e=>v(e,y)),z=F.map(e=>v(e,b)),K=new Date().toISOString(),Q={setting_title:u,uploader:N,setting_notes:C,mat:T,mat_coat:j,mat_color:A,mat_opacity:M,source:R,lens:$,focus:k,mat_thickness:O,photo:U,screen:D,fill_settings:L,line_settings:J,raster_settings:z,submission_date:K,last_modified_date:K,status:"pending",submitted_via:"makearmy-app",submitted_at:K};"settings_fiber"===a&&(Q.laser_soft=E,Q.repeat_all=I);let H=await (0,l.bY)(a,Q),X=H?.submission_id??H?.data?.submission_id??H?.id??H?.data?.id??null;return o.NextResponse.json({ok:!0,id:X,submission_id:X,took_ms:Date.now()-t})}catch(t){let e=t?.message||"Unknown error";return o.NextResponse.json({error:e},{status:500})}}let T=new n.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/submit/settings/route",pathname:"/api/submit/settings",filename:"route",bundlePath:"app/api/submit/settings/route"},resolvedPagePath:"/app/app/api/submit/settings/route.ts",nextConfigOutput:"",userland:r}),{workAsyncStorage:j,workUnitAsyncStorage:A,serverHooks:M}=T;function R(){return(0,a.patchFetch)({workAsyncStorage:j,workUnitAsyncStorage:A})}},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},78335:()=>{},96487:()=>{}};var t=require("../../../../webpack-runtime.js");t.C(e);var s=e=>t(t.s=e),r=t.X(0,[7719,580],()=>s(50350));module.exports=r})(); |