eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.25 kB
JavaScript
import{getKnownByteLength}from"#internal/attachments/data.js";const DEFAULT_UPLOAD_POLICY=Object.freeze({allowedMediaTypes:`*`,maxBytes:25*1024*1024});function mergeUploadPolicy(e,n=DEFAULT_UPLOAD_POLICY){if(e===`disabled`)return`disabled`;if(e===void 0)return n;let r=e.maxBytes??n.maxBytes,i=e.allowedMediaTypes??n.allowedMediaTypes;if(r<0||!Number.isFinite(r))throw RangeError(`UploadPolicy.maxBytes must be a non-negative finite number. Received: ${String(r)}.`);return{allowedMediaTypes:i,maxBytes:r}}function isUploadsDisabled(e){return!!(e===`disabled`||e.maxBytes===0||Array.isArray(e.allowedMediaTypes)&&e.allowedMediaTypes.length===0)}function isMediaTypeAllowed(e,t){if(t===`disabled`)return!1;if(t.allowedMediaTypes===`*`)return!0;let n=e.toLowerCase();for(let e of t.allowedMediaTypes){let t=e.toLowerCase();if(t===n)return!0;if(t.endsWith(`/*`)){let e=t.slice(0,-1);if(n.startsWith(e))return!0}}return!1}function evaluateFilePart(t,n){if(n===`disabled`||!isMediaTypeAllowed(t.mediaType,n)){let e={allowedMediaTypes:n===`disabled`||n.allowedMediaTypes===`*`?[]:[...n.allowedMediaTypes],kind:`disallowed-media-type`,mediaType:t.mediaType};return t.filename===void 0?e:{...e,filename:t.filename}}let r=getKnownByteLength(t.data);if(r!==null&&r>n.maxBytes){let e={byteLength:r,kind:`too-large`,limit:n.maxBytes,mediaType:t.mediaType};return t.filename===void 0?e:{...e,filename:t.filename}}return null}function collectUploadPolicyViolations(e,t){if(typeof e==`string`)return[];let n=[];for(let r of e){if(r.type!==`file`)continue;let e=evaluateFilePart(r,t);e!==null&&n.push(e)}return n}function stripDisallowedFileParts(e,t){return typeof e==`string`?e:e.filter(e=>e.type===`file`?evaluateFilePart(e,t)===null:!0)}function formatUploadPolicyViolation(e){let t=e.filename??e.mediaType;if(e.kind===`too-large`)return`${t} (${e.byteLength} bytes) exceeds the ${e.limit}-byte upload limit.`;let n=e.allowedMediaTypes.length>0?` Allowed: ${e.allowedMediaTypes.join(`, `)}.`:``;return`${t} has media type "${e.mediaType}" which is not allowed by this route.${n}`}export{DEFAULT_UPLOAD_POLICY,collectUploadPolicyViolations,evaluateFilePart,formatUploadPolicyViolation,isMediaTypeAllowed,isUploadsDisabled,mergeUploadPolicy,stripDisallowedFileParts};