@cosmicjs/sdk
Version:
The official client module for Cosmic. This module helps you easily add dynamic content to your website or application using the Cosmic headless CMS.
7 lines (5 loc) • 14.1 kB
JavaScript
var L=Object.defineProperty,N=Object.defineProperties;var z=Object.getOwnPropertyDescriptors;var B=Object.getOwnPropertySymbols;var J=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable;var G=(n,t,e)=>t in n?L(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,f=(n,t)=>{for(var e in t||(t={}))J.call(t,e)&&G(n,e,t[e]);if(B)for(var e of B(t))Q.call(t,e)&&G(n,e,t[e]);return n},C=(n,t)=>N(n,z(t));var Y={production:{v3:{apiUrl:"https://api.cosmicjs.com/v3",uploadUrl:"https://workers.cosmicjs.com/v3"}},staging:{v3:{apiUrl:"https://api.cosmic-staging.com/v3",uploadUrl:"https://workers.cosmic-staging.com/v3"}}},I=Y;function A(n){if(n.custom){if(!n.custom.apiUrl||!n.custom.uploadUrl)throw new Error("apiUrl or uploadUrl is missing from 'custom' option");return{apiUrl:n.custom.apiUrl,uploadUrl:n.custom.uploadUrl}}if(!n.apiVersion||!["v3"].includes(n.apiVersion))throw new Error("apiVersion value can only be from 'v1', 'v2' & 'v3'");if(!n.apiEnvironment||!["production","staging"].includes(n.apiEnvironment))throw new Error("apiEnvironment value can only be from 'production' & 'staging'");return I[n.apiEnvironment][n.apiVersion]}var X={POST:"POST",GET:"GET",FETCH:"FETCH",PUT:"PUT",PATCH:"PATCH",DELETE:"DELETE"},c=X;var H,Z=typeof process!="undefined"&&((H=process.versions)==null?void 0:H.node),p=async(n,t,e,r,i)=>{let s={method:n,headers:f({},r)};e!=null&&(typeof FormData!="undefined"&&e instanceof FormData||e&&typeof e.getHeaders=="function"?s.body=e:(s.body=JSON.stringify(e),s.headers&&!s.headers["Content-Type"]&&(s.headers["Content-Type"]="application/json")));let o=await fetch(t,s);if(!o.ok){let a;try{a=await o.json()}catch(m){throw new Error(`HTTP ${o.status}: ${o.statusText}`)}throw a}if(i){if(Z){let{Readable:a}=await import("stream");return a.fromWeb(o.body)}return o.body}return o.json()};function d(n){if(n&&n.trim())return{Authorization:`Bearer ${n}`};throw new Error("'writeKey' should be a valid string")}var U=async(n,t,e,r)=>{let i={method:n,headers:f({},r)};e!=null&&(i.body=JSON.stringify(e),i.headers&&!i.headers["Content-Type"]&&(i.headers["Content-Type"]="application/json"));let s=await fetch(t,i);if(!s.ok){let o;try{o=await s.json()}catch(m){let R=new Error(`HTTP ${s.status}: ${s.statusText}`);throw R.response={data:`HTTP ${s.status}: ${s.statusText}`},R}let a=new Error((o==null?void 0:o.message)||`HTTP ${s.status}`);throw a.response={data:o},a}return{data:await s.json()}};var ee=n=>new Promise((t,e)=>{U(c.GET,n).then(r=>t(r.data)).catch(r=>e(r.response?r.response.data:r.response))}),u=async(n,t,e)=>{try{let r=await ee(n);e(r)}catch(r){if(t&&typeof t=="function")t(r);else throw r}};var l=class{constructor(t){this.endpoint="";this.endpoint=t}props(t){let e;if(typeof t=="string")e=t.startsWith("{")&&t.endsWith("}")?this.parseGraphQLProps(t.slice(1,-1)):t;else if(Array.isArray(t))e=t.filter(r=>typeof r=="string").map(r=>r.trim()).filter(Boolean).join(",");else throw new Error("Invalid props type");return this.endpoint+=`&props=${encodeURIComponent(e)}`,this}parseGraphQLProps(t){let e=t.split(`
`).map(s=>s.trim()).filter(Boolean),r=[],i=[];for(let s of e)if(s.includes("{")){let[o]=s.split("{");o!==void 0&&i.push(o.trim())}else s==="}"?i.pop():r.push([...i,s].join("."));return r.join(",")}sort(t){return this.endpoint+=`&sort=${t}`,this}skip(t){return this.endpoint+=`&skip=${t}`,this}useCache(){return this.endpoint+="&use_cache=true",this}};var v=class extends l{limit(t){return this.endpoint+=`&limit=${t}`,this}async then(t,e){await u(this.endpoint,e,r=>t==null?void 0:t(r))}};var $=class extends l{async then(t,e){await u(this.endpoint,e,r=>{let i=r.media&&r.media.length?r.media[0]:null;t==null||t({media:i})})}};var T=n=>n?`&query=${encodeURIComponent(JSON.stringify(n))}`:"";var te=typeof window=="undefined",re={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".bmp":"image/bmp",".ico":"image/x-icon",".tiff":"image/tiff",".tif":"image/tiff",".avif":"image/avif",".mp4":"video/mp4",".webm":"video/webm",".mov":"video/quicktime",".avi":"video/x-msvideo",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".pdf":"application/pdf",".json":"application/json",".xml":"application/xml",".zip":"application/zip",".csv":"text/csv",".txt":"text/plain",".html":"text/html",".css":"text/css",".js":"application/javascript",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf"};function M(n){let t=n.slice(n.lastIndexOf(".")).toLowerCase();return re[t]||"application/octet-stream"}var E,F=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}${T(e)}`;return new v(r)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}&limit=1${T(e)}`;return new $(r)},async insertOne(e){let r=`${t.uploadUrl}/buckets/${n.bucketSlug}/media`,i=new FormData;if(te)if(Buffer.isBuffer(e.media)){let o=e.filename||"file",a=new Blob([e.media],{type:e.contentType||M(o)});i.append("media",a,o)}else if(typeof e.media=="object"&&"buffer"in e.media&&Buffer.isBuffer(e.media.buffer)){let o=e.media,a=new Blob([o.buffer],{type:o.type||M(o.originalname)});i.append("media",a,o.originalname)}else throw new Error("In Node.js environment, media must be a Buffer or { buffer: Buffer, originalname: string }");else if(e.media instanceof File||e.media instanceof Blob){let o=e.media instanceof File?e.media.name:"file";i.append("media",e.media,o)}else throw new Error("In browser environment, media must be a File or Blob");n.writeKey&&i.append("write_key",n.writeKey),e.folder&&i.append("folder",e.folder),e.metadata&&i.append("metadata",JSON.stringify(e.metadata)),e.trigger_webhook&&i.append("trigger_webhook",e.trigger_webhook.toString());let s={};return n.writeKey&&(s.Authorization=`Bearer ${n.writeKey}`),p(c.POST,r,i,s)},async updateOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/media/${e}`;return E=d(n.writeKey),p(c.PATCH,i,r,E)},async deleteOne(e,r=!1){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/media/${e}${r?"?trigger_webhook=true":""}`;return E=d(n.writeKey),p(c.DELETE,i,null,E)}});var b=class extends l{depth(t){return this.endpoint+=`&depth=${t}`,this}status(t){return this.endpoint+=`&status=${t}`,this}after(t){return this.endpoint+=`&after=${t}`,this}options(t){return t&&(this.opts=t),this}};var ne=async(n,t,e)=>{let r={name:{$in:t}},{media:i}=await n.media.find(r).props(!e||e==="all"?"":`name,url,imgix_url,${e}`);return i},ie=n=>{let t=[];return JSON.stringify(n,(e,r)=>{if(r&&typeof r=="object"){let i=r.imgix_url||r.url;i&&t.push(i.split("/").pop().split("?")[0])}return r}),[...new Set(t)]},se=(n,t,e)=>{let r=new Map(t.map(s=>[s.name,s])),i=s=>{s&&typeof s=="object"&&Object.keys(s).forEach(o=>{if(s[o]&&typeof s[o]=="object"){let a=s[o].imgix_url||s[o].url;if(a){let m=a.split("/").pop().split("?")[0];if(r.has(m)){e.includes("name")||delete r.get(m).name;let R=f({},r.get(m));Object.assign(s[o],R)}}i(s[o])}})};i(n)},h=async(n,t,e)=>{let r=async i=>{let s=ie(i);if(s.length>0){let o=await ne(t,s,e);se(i,o,e)}return i};return Array.isArray(n)?Promise.all(n.map(i=>r(i))):r(n)};var k=class extends b{constructor(e,r){super(e);this.bucketConfig=r}limit(e){return this.endpoint+=`&limit=${e}`,this}async then(e,r){await u(this.endpoint,r,async i=>{this.opts&&this.opts.media&&i.objects&&(i.objects=await h(i.objects,g(this.bucketConfig),this.opts.media.props)),e==null||e(i)})}};var O=class extends b{constructor(e,r){super(e);this.bucketConfig=r}async then(e,r){await u(this.endpoint,r,async i=>{let s=i.objects&&i.objects.length?i.objects[0]:null;this.opts&&this.opts.media&&s&&(s=await h(s,g(this.bucketConfig),this.opts.media.props)),e==null||e({object:s})})}};var y,K=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}${T(e)}`;return new k(r,n)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}&limit=1${T(e)}`;return new O(r,n)},async insertOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects`;return y=d(n.writeKey),p(c.POST,r,e,y)},async updateOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}`;return y=d(n.writeKey),p(c.PATCH,i,r,y)},async deleteOne(e,r=!1){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}${r?"?trigger_webhook=true":""}`;return y=d(n.writeKey),p(c.DELETE,i,null,y)},async batch(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/batch`;return y=d(n.writeKey),p(c.POST,r,{operations:e},y)}});var w,D=(n,t)=>({find(){let e=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types?read_key=${n.readKey}`;return p(c.GET,e)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}?read_key=${n.readKey}`;return p(c.GET,r)},async insertOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types`;return w=d(n.writeKey),p(c.POST,r,e,w)},async updateOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}`;return w=d(n.writeKey),p(c.PATCH,i,r,w)},async deleteOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}`;return w=d(n.writeKey),p(c.DELETE,r,null,w)}});var x=class extends l{depth(t){return this.endpoint+=`&depth=${t}`,this}status(t){return this.endpoint+=`&status=${t}`,this}after(t){return this.endpoint+=`&after=${t}`,this}options(t){return t&&(this.opts=t),this}};var _=class extends x{constructor(e,r){super(e);this.bucketConfig=r}async then(e,r){await u(this.endpoint,r,async i=>{let{revision:s}=i;this.opts&&this.opts.media&&s&&(s=await h(s,g(this.bucketConfig),this.opts.media.props)),e==null||e({revision:s})})}};var j=class extends x{constructor(e,r){super(e);this.bucketConfig=r}limit(e){return this.endpoint+=`&limit=${e}`,this}async then(e,r){await u(this.endpoint,r,async i=>{this.opts&&this.opts.media&&i.revisions&&(i.revisions=await h(i.revisions,g(this.bucketConfig),this.opts.media.props)),e==null||e(i)})}};var V,W=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions?read_key=${n.readKey}`;return new j(r,n)},findOne({objectId:e,revisionId:r}){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions/${r}?read_key=${n.readKey}`;return new _(i,n)},async insertOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions`;return V=d(n.writeKey),p(c.POST,i,r,V)}});var S=class{constructor(){this.events={}}on(t,e){return this.events[t]||(this.events[t]=[]),this.events[t].push(e),this}emit(t,...e){let r=this.events[t];return!r||r.length===0?!1:(r.forEach(i=>{try{i.apply(this,e)}catch(s){console.error("Error in event listener:",s)}}),!0)}off(t,e){if(!e)return delete this.events[t],this;let r=this.events[t];if(r){let i=r.indexOf(e);i>-1&&r.splice(i,1),r.length===0&&delete this.events[t]}return this}removeListener(t,e){return this.off(t,e)}removeAllListeners(t){return t?delete this.events[t]:this.events={},this}listeners(t){let e=this.events[t];return e?[...e]:[]}listenerCount(t){let e=this.events[t];return e?e.length:0}once(t,e){let r=(...i)=>{this.off(t,r),e.apply(this,i)};return this.on(t,r)}};var P=class extends S{constructor(e){super();this.stream=e;this.usageInfo=null;this.text="";this.setupListeners()}setupListeners(){let e="";this.stream.on("data",r=>{e+=r.toString();let i=e.split(`
`);e=i.pop()||"";for(let s of i)if(s.trim()){let o=s.split(`
`).filter(a=>a.startsWith("data: ")).map(a=>a.replace(/^data: /,""));for(let a of o)try{let m=JSON.parse(a);m.error?this.emit("error",new Error(m.error.message||"An error occurred")):(m.text&&(this.text+=m.text,this.emit("text",m.text)),m.token_count&&(this.usageInfo=m.token_count,this.emit("usage",m.token_count)),m.event==="end"&&this.emit("end",m.data))}catch(m){a.includes("error")&&this.emit("error",new Error(a))}}}),this.stream.on("error",r=>{this.emit("error",r)}),this.stream.on("end",()=>{if(e.trim()){let r=e.split(`
`).filter(i=>i.startsWith("data: ")).map(i=>i.replace(/^data: /,""));for(let i of r)try{let s=JSON.parse(i);s.text&&(this.text+=s.text,this.emit("text",s.text)),s.event==="end"&&this.emit("end",s.data)}catch(s){}}this.emit("end",{usage:this.usageInfo})})}get usage(){return this.usageInfo}[Symbol.asyncIterator](){let e=[],r=null,i=!1,s=!1;return this.on("text",o=>{r?(r({value:{text:o},done:!1}),r=null):e.push({text:o})}),this.on("usage",o=>{r?(r({value:{usage:o},done:!1}),r=null):e.push({usage:o})}),this.on("end",()=>{i=!0,r&&(r({value:void 0,done:!0}),r=null)}),this.on("error",o=>{s=!0,r?(r({value:{error:o},done:!1}),r=null):e.push({error:o})}),{next:async()=>{if(e.length>0){let o=e.shift();if(o.error)throw o.error;return{value:o,done:!1}}if(i)return{value:void 0,done:!0};if(s)throw new Error("Stream encountered an error");return new Promise(o=>{r=o})}}}},q=(n,t)=>{let{uploadUrl:e}=t,{bucketSlug:r,writeKey:i}=n,s={"Content-Type":"application/json"};return i&&(s.Authorization=`Bearer ${i}`),{generateText:async o=>{if(!o.prompt&&!o.messages)throw new Error("Either prompt or messages must be provided");let a=`${e}/buckets/${r}/ai/text`;if(o.stream){let m=await p("POST",a,o,s,!0);return new P(m)}return p("POST",a,o,s)},stream:async o=>{if(!o.prompt&&!o.messages)throw new Error("Either prompt or messages must be provided");let a=`${e}/buckets/${r}/ai/text`,m=await p("POST",a,C(f({},o),{stream:!0}),s,!0);return new P(m)},generateImage:async o=>{let a=`${e}/buckets/${r}/ai/image`;return p("POST",a,o,s)},generateVideo:async o=>{if(!o.prompt)throw new Error("prompt is required");let a=`${e}/buckets/${r}/ai/video`;return p("POST",a,o,s)},extendVideo:async o=>{if(!o.prompt)throw new Error("prompt is required");if(!o.media_id)throw new Error("media_id is required - provide the ID of the Veo video to extend");let a=`${e}/buckets/${r}/ai/video/extend`;return p("POST",a,o,s)},generateAudio:async o=>{if(!o.prompt)throw new Error("prompt is required");let a=`${e}/buckets/${r}/ai/audio`;return p("POST",a,o,s)}}};var g=n=>{let t=f({apiVersion:"v3",apiEnvironment:"production"},n),e=A(t);return{objects:K(t,e),objectTypes:D(t,e),objectRevisions:W(t,e),media:F(t,e),ai:q(t,e)}},oe=g;export{P as TextStreamingResponse,oe as createBucketClient};