@bunny.net/storage-sdk
Version:
2 lines (1 loc) • 4.96 kB
JavaScript
var U=Object.defineProperty;var l=(e,r)=>{for(var t in r)U(e,t,{get:r[t],enumerable:!0})};var y={};l(y,{StorageRegion:()=>C,addr:()=>S});var C=(h=>(h.Falkenstein="de",h.London="uk",h.NewYork="ny",h.LosAngeles="la",h.Singapore="sg",h.Stockholm="se",h.SaoPaulo="br",h.Johannesburg="jh",h.Sydney="syd",h))(C||{});function S(e){switch(e){case"de":return new URL("https://storage.bunnycdn.com");case"uk":return new URL("https://uk.storage.bunnycdn.com");case"ny":return new URL("https://ny.storage.bunnycdn.com");case"la":return new URL("https://la.storage.bunnycdn.com");case"sg":return new URL("https://sg.storage.bunnycdn.com");case"se":return new URL("https://se.storage.bunnycdn.com");case"br":return new URL("https://br.storage.bunnycdn.com");case"jh":return new URL("https://jh.storage.bunnycdn.com");case"syd":return new URL("https://syd.storage.bunnycdn.com");default:throw new Error("Invalid Storage Region")}}var L={};l(L,{ZoneSchema:()=>w,createDirectory:()=>T,download:()=>R,get:()=>E,list:()=>$,remove:()=>P,removeDirectory:()=>_,upload:()=>N});import{z as c}from"zod";var b={};l(b,{addr:()=>m,connect_with_accesskey:()=>x,key:()=>p,name:()=>Z});function m(e){return new URL(`${S(e.region)}${e.name}/`)}function Z(e){return e.name}function p(e){return["AccessKey",e.accessKey]}function x(e,r,t){return{_tag:"StorageZone",region:e,name:r,accessKey:t}}import{z as a}from"zod";var D=a.string(),I=D.transform(e=>e.split(",").map(t=>t.trim()).filter(t=>t!="").map(t=>w.parse(t))),f=a.object({Guid:a.string(),UserId:a.string(),LastChanged:a.coerce.date(),DateCreated:a.coerce.date(),StorageZoneName:a.string(),Path:a.string(),ObjectName:a.string(),Length:a.number(),StorageZoneId:a.number(),IsDirectory:a.boolean(),ServerId:a.number(),Checksum:a.nullable(a.string()),ReplicatedZones:a.nullable(I),ContentType:a.string()}),k=a.array(f);var w=c.union([c.literal("SE"),c.literal("CZ"),c.literal("UK"),c.literal("ES"),c.literal("NY"),c.literal("WA"),c.literal("MI"),c.literal("LA"),c.literal("JH"),c.literal("HK"),c.literal("BR"),c.literal("SG"),c.literal("JP"),c.literal("SYD")]);async function E(e,r){let t=m(e);t.pathname=`${t.pathname}${r}`;let[s,i]=p(e),o=await fetch(t,{method:"DESCRIBE",headers:{Accept:"application/json",[s]:i}});if(!o.ok)throw u(e,o.status,r);let d=await o.json(),g={...d,LastChanged:new Date(d.LastChanged),DateCreated:new Date(d.DateCreated)},n=f.parse(g);return{_tag:"StorageFile",guid:n.Guid,userId:n.UserId,lastChanged:n.LastChanged,dateCreated:n.DateCreated,storageZoneName:n.StorageZoneName,path:n.Path,objectName:n.ObjectName,length:n.Length,storageZoneId:n.StorageZoneId,isDirectory:n.IsDirectory,serverId:n.ServerId,checksum:n.Checksum,replicatedZones:n.ReplicatedZones,contentType:n.ContentType,data:()=>R(e,r)}}async function $(e,r){let t=m(e),s=r.endsWith("/")?r:`${r}/`;t.pathname=`${t.pathname}${s}`;let[i,o]=p(e),d=await fetch(t,{method:"GET",headers:{Accept:"application/json",[i]:o}});if(!d.ok)throw u(e,d.status,r);let g=await d.json();try{k.parse(g)}catch(n){console.error(n)}return k.parse(g).map(n=>({_tag:"StorageFile",guid:n.Guid,userId:n.UserId,lastChanged:n.LastChanged,dateCreated:n.DateCreated,storageZoneName:n.StorageZoneName,path:n.Path,objectName:n.ObjectName,length:n.Length,storageZoneId:n.StorageZoneId,isDirectory:n.IsDirectory,serverId:n.ServerId,checksum:n.Checksum,replicatedZones:n.ReplicatedZones,contentType:n.ContentType,data:()=>R(e,n.Path)}))}async function P(e,r){let t=m(e);t.pathname=`${t.pathname}${r}`;let[s,i]=p(e);return(await fetch(t,{method:"DELETE",headers:{[s]:i}})).ok}async function T(e,r){let t=m(e),s=r.endsWith("/")?r:`${r}/`;t.pathname=`${t.pathname}${s}`;let[i,o]=p(e);return(await fetch(t,{method:"PUT",headers:{[i]:o}})).ok}async function _(e,r){let t=m(e),s=r.endsWith("/")?r:`${r}/`;t.pathname=`${t.pathname}${s}`;let[i,o]=p(e);return(await fetch(t,{method:"DELETE",headers:{[i]:o}})).ok}async function N(e,r,t,s){let i=m(e);i.pathname=`${i.pathname}${r}`;let[o,d]=p(e),g={[o]:d,"Content-Type":"application/octet-stream"};s?.contentType&&(g["Override-Content-Type"]=s.contentType),s?.sha256Checksum&&(g.Checksum=s.sha256Checksum);let n=await fetch(i,{method:"PUT",headers:g,body:t,duplex:"half"});if(!n.ok)throw u(e,n.status,r);return n.ok}async function R(e,r){let t=m(e);t.pathname=`${t.pathname}${r}`;let[s,i]=p(e),o=await fetch(t,{method:"GET",headers:{[s]:i}});if(!o.ok)throw u(e,o.status,r);let d=o.headers.has("content-length")?parseInt(o.headers.get("content-length")):void 0;if(!o.body)throw new Error("Response has no body");return{stream:o.body,response:o,length:d}}function u(e,r,t){switch(r){case 404:return new Error(`File not found: ${t}`);case 400:return new Error("Unable to upload file. Either invalid path specified, either provided checksum invalid");case 401:return new Error(`Unauthorized access to storage zone: ${Z(e)}`);default:return new Error("An unknown error has occurred during the request.")}}export{L as file,y as regions,b as zone};