azion
Version:
Azion Packages for Edge Computing.
2 lines (1 loc) • 15.5 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function S(r){return r.replace(/^\//,"")}const v=async(r,e=1e3,o)=>{let n=0;const t=12e4,a=Date.now();for(;Date.now()-a<t;)try{return await r()}catch(s){if(o&&console.error("Error in retryWithBackoff:",s),n===0&&console.warn("Attempting to synchronize. The content may not be synchronized on the edge yet."),Date.now()-a>=t)throw new Error("Max retry time reached");console.log(`Retry attempt ${n+1} failed. Retrying in ${e*Math.pow(2,n)} ms...`),await new Promise(c=>setTimeout(c,e*Math.pow(2,n))),n++}throw new Error("Max retry time reached")};async function P(r,e,o){const n=r.headers.get("Content-Type"),t=n?.includes("application/json");if(!t&&e){const s=`Expected JSON response, but got: ${await r.text()}`;throw o&&console.log(`Error in fetch: ${s}`),new Error(s)}return t?r.json():(n?.includes("application/octet-stream"),r.text())}async function p(r,e,o,n=!0){const t=await fetch(r,e);if(!t.ok)try{const s=await P(t,!0,o);if(o&&console.log("Error response body:",s),s.errors&&Array.isArray(s.errors)&&s.errors.length>0||s.detail||s.message)return s;const c=`HTTP error! Status: ${t.status} - ${t.statusText}`;throw o&&console.log(`Error in fetch: ${c}`),new Error(c)}catch{const s=`HTTP error! Status: ${t.status} - ${t.statusText}`;throw o&&console.log(`Error in fetch: ${s}`),new Error(s)}return await P(t,n,o)}const g=(r="production")=>({production:"https://api.azion.com/v4/workspace/storage",development:"/v4/workspace/storage",staging:"https://stage-api.azion.com/v4/workspace/storage"})[r],T=(r,e={})=>{const o={Accept:"application/json",...e};return r?{...o,Authorization:`Token ${r}`}:o},R=(r,e,o)=>({method:r,headers:e,credentials:"include"}),b=(r,e,o)=>{let n={message:"Error unknown",operation:o};if(e.errors&&Array.isArray(e.errors)&&e.errors.length>0){const t=e.errors[0];if(t.detail)return n={message:t.detail,operation:o},n;if(t.title)return n={message:t.title,operation:o},n}return r.forEach(t=>{e[t]&&(n={message:Array.isArray(e[t])?e[t].join(", "):e[t],operation:o})}),n},J=async(r,e,o,n="production")=>{try{const{page_size:t=10,page:a=1,search:s,ordering:c,fields:i}=e||{},u=new URLSearchParams({page_size:String(t),page:String(a)});s&&u.append("search",s),c&&u.append("ordering",c),i&&u.append("fields",i);const h=T(r,{Accept:"application/json; version=3"}),N=R("GET",h),W=g(n),y=await p(`${W}/buckets?${u.toString()}`,N,o);return y.results?(o&&console.log("Response:",y),y):(y.error=b(["detail"],y,"get all buckets"),{error:y.error??JSON.stringify(y)})}catch(t){return o&&console.error("Error getting all buckets:",t),{error:{message:t.toString(),operation:"get all buckets"}}}},D=async(r,e,o,n,t="production")=>{try{const a=new URLSearchParams,s=T(r,{Accept:"application/json; version=3"}),c=R("GET",s),u=`${g(t)}/buckets/${e}${a.toString()?`?${a.toString()}`:""}`;n&&console.log(`GET bucket URL: ${u}`);const h=await p(u,c,n);return h.data?(n&&console.log("Response:",h),h):{error:b(["detail"],h,"get bucket by name")}}catch(a){return n&&console.error("Error getting bucket by name:",a),{error:{message:a.toString(),operation:"get bucket by name"}}}},L=async(r,e,o,n,t="production")=>{try{const a=g(t),s=await p(`${a}/buckets`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Token ${r}`},body:JSON.stringify({name:e,workloads_access:o})},n);return s?.state?(n&&console.log("Response:",s),s):(s.error=b(["name","workloads_access","detail"],s,"create bucket"),{error:s.error??JSON.stringify(s)})}catch(a){return n&&console.error("Error creating bucket:",a),{error:{message:a.toString(),operation:"create bucket"}}}},F=async(r,e,o,n,t="production")=>{try{const a=g(t),s=await p(`${a}/buckets/${e}`,{method:"PATCH",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Token ${r}`},body:JSON.stringify({workloads_access:o})},n);return s?.state?(n&&console.log("Response:",s),s):(s.error=b(["name","workloads_access","detail"],s,"update bucket"),{error:s.error??JSON.stringify(s)})}catch(a){return n&&console.error("Error updating bucket:",a),{error:{message:a.toString(),operation:"update bucket"}}}},G=async(r,e,o,n="production")=>{try{const t=g(n),a=await p(`${t}/buckets/${e}`,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Token ${r}`}},o);return a?.state?(o&&console.log("Response Delete Bucket:",a),a):(a.error=b(["detail"],a,"delete bucket"),{error:a.error??JSON.stringify(a)})}catch(t){return o&&console.error("Error deleting bucket:",t),{error:{message:t.toString(),operation:"delete bucket"}}}},H=async(r,e,o,n,t="production")=>{try{const{max_object_count:a=1e4}=o||{},s=new URLSearchParams({max_object_count:String(a)}),c=g(t),i=await p(`${c}/buckets/${e}/objects?${s.toString()}`,{method:"GET",headers:{Accept:"application/json",Authorization:`Token ${r}`}},n);return i.results?(n&&console.log("Response:",i),i):(i.error=b(["detail"],i,"get all objects"),{error:i.error??JSON.stringify(i)})}catch(a){return n&&console.error("Error getting all objects:",a),{error:{message:a.toString(),operation:"get all objects"}}}},I=async(r,e,o,n,t="application/octet-stream",a,s="production")=>{try{const c=g(s),i=typeof n=="string"?new TextEncoder().encode(n):n,u=await p(`${c}/buckets/${e}/objects/${o}`,{method:"POST",headers:{Accept:"application/json","Content-Type":t,Authorization:`Token ${r}`},body:i},a);return u?.state?(a&&console.log("Response:",u),u):(u.error=b(["detail"],u,"create object"),{error:u.error??JSON.stringify(u)})}catch(c){return a&&console.error("Error posting object:",c),{error:{message:c.toString(),operation:"create object"}}}},q=async(r,e,o,n,t="production")=>{try{const a=g(t),s=T(r),c=R("GET",s),i=await p(`${a}/buckets/${e}/objects/${o}`,c,n,!1);return i.error||i.errors?{error:b(["detail"],i,"get object by key")}:(n&&console.log("Response:",i),{data:i})}catch(a){return n&&console.error("Error getting object by name:",a),{error:{message:a.toString(),operation:"get object by key"}}}},Z=async(r,e,o,n,t="application/octet-stream",a,s="production")=>{try{const c=g(s),i=typeof n=="string"?new TextEncoder().encode(n):n,u=await p(`${c}/buckets/${e}/objects/${o}`,{method:"PUT",headers:{Accept:"application/json","Content-Type":t,Authorization:`Token ${r}`},body:i},a);return u.error||u.errors?(u.error=b(["detail"],u,"put object"),{error:u.error??JSON.stringify(u)}):(a&&console.log("Response:",u),u)}catch(c){return a&&console.error("Error putting object:",c),{error:{message:c.toString(),operation:"put object"}}}},V=async(r,e,o,n,t="production")=>{try{const a=g(t),s=await p(`${a}/buckets/${e}/objects/${o}`,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Token ${r}`}},n);return s?.state?(n&&console.log("Response:",s),s):(s.error=b(["detail"],s,"delete object"),{error:s.error??JSON.stringify(s)})}catch(a){return n&&console.error("Error deleting object:",a),{error:{message:a.toString(),operation:"delete object"}}}},Q=()=>globalThis.Azion?.Storage||null;class f{constructor(e,o){this.token=e,this.debug=o}token;debug;storage=null;initializeStorage(e){this.storage||(this.storage=new globalThis.Azion.Storage(e),this.name=e)}name="";workloads_access="unknown";async getBucket({name:e}){return this.initializeStorage(e),this.storage?(this.name=e,{name:e,workloads_access:"unknown",state:"executed-runtime",getObjects:this.getObjects.bind(this),getObjectByKey:this.getObjectByKey.bind(this),createObject:this.createObject.bind(this),updateObject:this.updateObject.bind(this),deleteObject:this.deleteObject.bind(this)}):null}async getObjects({params:e}){this.initializeStorage(this.name);try{const o=await v(()=>this.storage.list()),n=e?.max_object_count??o.entries.length,t=await Promise.all(o.entries.slice(0,n).map(async a=>({key:S(a.key),size:a.content_length,state:"executed-runtime"})));return{data:{objects:t,count:t.length}}}catch(o){return this.debug&&console.error("Error getting objects:",o),{error:{message:o?.message??"Error getting objects",operation:"getObjects"}}}}async getObjectByKey({key:e}){this.initializeStorage(this.name);try{const o=await v(()=>this.storage.get(e)),n=await o.arrayBuffer();return{data:{state:"executed-runtime",key:S(e),size:o.contentLength,content:n,content_type:o.metadata?.get("content-type")}}}catch(o){return this.debug&&console.error("Error getting object by key:",o),{error:{message:o?.message??"Error getting object by key",operation:"getObjectByKey"}}}}async createObject({key:e,content:o,options:n}){this.initializeStorage(this.name);try{const t=typeof o=="string"?new TextEncoder().encode(o):o;await v(()=>this.storage.put(e,t,{"content-type":n?.content_type}),1e3,this.debug);const a=o instanceof ArrayBuffer?o.byteLength:o.toString().length;return{data:{state:"executed-runtime",key:S(e),size:a,content_type:n?.content_type}}}catch(t){return this.debug&&console.error("Error creating object:",t),{error:{message:t?.message??"Error creating object",operation:"createObject"}}}}async updateObject({key:e,content:o,options:n}){return this.createObject({key:e,content:o,options:n})}async deleteObject({key:e}){this.initializeStorage(this.name);try{return await v(()=>this.storage.delete(e)),{data:{key:S(e),state:"executed-runtime"}}}catch(o){return this.debug&&console.error("Error deleting object:",o),{error:{message:o?.message??"Error deleting object",operation:"deleteObject"}}}}}const A=()=>typeof window<"u"&&typeof window.document<"u",X=!A()&&process?.env.AZION_DEBUG==="true",d=r=>A()?r??"":r??process?.env.AZION_TOKEN??"",j=r=>r??!!X,m=r=>A()?r??"production":r??process?.env.AZION_ENV??"production",l=r=>({...r,debug:j(r?.debug),env:m(r?.env)}),O=(r,e)=>((...o)=>{const n=o[o.length-1];return l(n).external||!Q()?e(...o):r(...o)}),$=async(r,e,o,n)=>{const t=l(n),a=await L(d(r),e,o,t.debug,t.env);return a.data?{data:{...a.data,workloads_access:a.data.workloads_access,last_editor:a.data.last_editor,last_modified:a.data.last_modified,product_version:a.data.product_version,getObjects:({params:s})=>w(r,e,s,t),getObjectByKey:({key:s})=>k(r,e,s,t),createObject:({key:s,content:c,params:i})=>_(r,e,s,c,i,t),updateObject:({key:s,content:c,params:i})=>B(r,e,s,c,i,t),deleteObject:({key:s})=>E(r,e,s,t)}}:{error:a.error}},x=async(r,e,o)=>{const n=l(o),t=await G(d(r),e,n.debug,n.env);return t.data?{data:{name:t.data.name,state:t.state}}:{error:t.error}},z=async(r,e,o)=>{const n=l(o),t=await J(d(r),e,n.debug,n.env);if(t?.results){const a=t.results?.map(s=>({...s,workloads_access:s.workloads_access,last_editor:s.last_editor,last_modified:s.last_modified,product_version:s.product_version,getObjects:({params:c})=>w(r,s.name,c,n),getObjectByKey:({key:c})=>k(r,s.name,c,n),createObject:({key:c,content:i,params:u})=>_(r,s.name,c,i,u,n),updateObject:({key:c,content:i,params:u})=>B(r,s.name,c,i,u,n),deleteObject:({key:c})=>E(r,s.name,c,n)}));return{data:{buckets:a,count:t.count??a.length}}}return{error:t.error}},M=async(r,e,o)=>{const n=l(o),t=await D(d(r),e,void 0,n.debug,n.env);if(t.data){const a=t.data;return{data:{name:a.name,workloads_access:a.workloads_access,last_editor:a.last_editor,last_modified:a.last_modified,product_version:a.product_version,getObjects:({params:s})=>w(r,e,s,n),getObjectByKey:({key:s})=>k(r,e,s,n),createObject:({key:s,content:c,params:i})=>_(r,e,s,c,i,n),updateObject:({key:s,content:c,params:i})=>B(r,e,s,c,i,n),deleteObject:({key:s})=>E(r,e,s,n)}}}return{error:{message:t.error?.message??"Bucket not found",operation:"get bucket"}}},U=async(r,e,o,n)=>{const t=l(n),a=await F(d(r),e,o,t.debug,t.env);return a?.data?{data:{...a.data,workloads_access:a.data.workloads_access,last_editor:a.data.last_editor,last_modified:a.data.last_modified,product_version:a.data.product_version,getObjects:({params:s})=>w(r,e,s,t),getObjectByKey:({key:s})=>k(r,e,s,t),createObject:({key:s,content:c,params:i})=>_(r,e,s,c,i,t),updateObject:({key:s,content:c,params:i})=>B(r,e,s,c,i,t),deleteObject:({key:s})=>E(r,e,s,t)}}:{error:a.error}},C=async(r,e,o,n)=>{const t=l(n),a=await M(r,e,t);if(a.data)return t.debug&&console.log(`Bucket '${e}' already exists`),a;t.debug&&console.log(`Bucket '${e}' not found, creating...`);const s=await $(r,e,o,t);return s.data?(t.debug&&console.log(`Bucket '${e}' created successfully`),s):{error:{message:s.error?.message??`Failed to setup storage bucket '${e}'`,operation:"setup storage"}}},w=O(async(r,e,o,n)=>{const t=new f(r,n?.debug);t.name=e;const a=await t.getObjects({params:o});return a.data?{data:a.data}:{error:{message:"Failed to retrieve objects",operation:"get objects"}}},async(r,e,o,n)=>{const t=await H(d(r),e,o,n?.debug,n?.env);return t.results?{data:{objects:t.results,count:t.results.length}}:{error:t?.error}}),k=O(async(r,e,o,n)=>{const t=new f(r,n?.debug);t.name=e;const a=await t.getObjectByKey({key:o});return a.data?{data:a.data}:{error:{message:"Failed to retrieve object",operation:"get object by key"}}},async(r,e,o,n)=>{const t=await q(d(r),e,o,j(n?.debug),m(n?.env));return t.data?{data:{key:o,content:t.data}}:{error:t.error}}),_=O(async(r,e,o,n,t,a)=>{const s=new f(r,a?.debug);s.name=e;const c=await s.createObject({key:o,content:n,options:t});return c?.data?{data:c.data}:{error:{message:"Failed to create object",operation:"create object"}}},async(r,e,o,n,t,a)=>{const s=await I(d(r),e,o,n,t?.content_type??"application/octet-stream",j(a?.debug),m(a?.env));return s.data?{data:{key:s.data.object_key,content_type:t?.content_type,state:s.state}}:{error:s.error}}),B=O(async(r,e,o,n,t,a)=>{const s=new f(r,a?.debug);s.name=e;const c=await s.updateObject({key:o,content:n,options:t});return c?.data?{data:c.data}:{error:c.error}},async(r,e,o,n,t,a)=>{const s=await Z(d(r),e,o,n,t?.content_type??"application/octet-stream",j(a?.debug),m(a?.env));return s.data?{data:{key:s.data.object_key,content:n,content_type:t?.content_type,state:s.state}}:{error:s.error}}),E=O(async(r,e,o,n)=>{const t=new f(r,n?.debug);t.name=e;const a=await t.deleteObject({key:o});return a.data?{data:a.data}:{error:a.error}},async(r,e,o,n)=>{const t=await V(d(r),e,o,j(n?.debug),m(n?.env));return t.data?{data:{key:o,state:t.state}}:{error:t.error}}),Y=({name:r,workloads_access:e,options:o})=>$(d(),r,e,l(o)),ee=({name:r,options:e})=>x(d(),r,l(e)),te=({params:r,options:e})=>z(d(),r,l(e)),re=({name:r,options:e})=>M(d(),r,l(e)),oe=({name:r,workloads_access:e,options:o})=>U(d(),r,e,l(o)),ne=({name:r,workloads_access:e,options:o})=>C(d(),r,e,l(o)),se=({bucket:r,params:e,options:o})=>w(d(),r,e,l(o)),ae=({bucket:r,key:e,content:o,params:n,options:t})=>_(d(),r,e,o,n,l(t)),ce=({bucket:r,key:e,options:o})=>k(d(),r,e,l(o)),ie=({bucket:r,key:e,content:o,params:n,options:t})=>B(d(),r,e,o,n,l(t)),ue=({bucket:r,key:e,options:o})=>E(d(),r,e,l(o)),K=r=>{const e=d(r?.token),o=l(r?.options);return{getBuckets:t=>z(e,t?.params,o),createBucket:({name:t,workloads_access:a})=>$(e,t,a,o),updateBucket:({name:t,workloads_access:a})=>U(e,t,a,o),deleteBucket:({name:t})=>x(e,t,o),getBucket:({name:t})=>M(e,t,o),setupStorage:({name:t,workloads_access:a})=>C(e,t,a,o)}};exports.createBucket=Y;exports.createBucketMethod=$;exports.createClient=K;exports.createObject=ae;exports.default=K;exports.deleteBucket=ee;exports.deleteBucketMethod=x;exports.deleteObject=ue;exports.getBucket=re;exports.getBuckets=te;exports.getBucketsMethod=z;exports.getObjectByKey=ce;exports.getObjects=se;exports.setupStorage=ne;exports.setupStorageMethod=C;exports.updateBucket=oe;exports.updateBucketMethod=U;exports.updateObject=ie;