@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) • 11.6 kB
JavaScript
var z=Object.defineProperty,J=Object.defineProperties;var Q=Object.getOwnPropertyDescriptors;var A=Object.getOwnPropertySymbols;var V=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable;var B=(n,t,e)=>t in n?z(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,h=(n,t)=>{for(var e in t||(t={}))V.call(t,e)&&B(n,e,t[e]);if(A)for(var e of A(t))X.call(t,e)&&B(n,e,t[e]);return n},G=(n,t)=>J(n,Q(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"}}},_=Y;function I(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 _[n.apiEnvironment][n.apiVersion]}import re from"form-data";var Z={POST:"post",GET:"get",FETCH:"fetch",PUT:"put",PATCH:"patch",DELETE:"delete"},m=Z;import M from"axios";var c=(n,t,e,r,i)=>{let o={method:n,url:t,data:e,headers:r,responseType:i?"stream":"json"};return i?M(o).then(s=>s.data).catch(s=>{throw s.response?s.response.data:s.response}):M(o).then(s=>s.data).catch(s=>{throw s.response?s.response.data:s.response})};function u(n){if(n&&n.trim())return{Authorization:`Bearer ${n}`};throw new Error("'writeKey' should be a valid string")}import ee from"axios";var U=(n,t,e,r)=>ee({method:n,url:t,data:e,headers:r});var te=n=>new Promise((t,e)=>{U(m.GET,n).then(r=>t(r.data)).catch(r=>e(r.response?r.response.data:r.response))}),d=async(n,t,e)=>{try{let r=await te(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(o=>o.trim()).filter(Boolean),r=[],i=[];for(let o of e)if(o.includes("{")){let[s]=o.split("{");s!==void 0&&i.push(s.trim())}else o==="}"?i.pop():r.push([...i,o].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 w=class extends l{limit(t){return this.endpoint+=`&limit=${t}`,this}async then(t,e){await d(this.endpoint,e,r=>t==null?void 0:t(r))}};var v=class extends l{async then(t,e){await d(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 C,H=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}${T(e)}`;return new w(r)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}&limit=1${T(e)}`;return new v(r)},async insertOne(e){let r=`${t.uploadUrl}/buckets/${n.bucketSlug}/media`,i=new re;return e.media.buffer?i.append("media",e.media.buffer,e.media.originalname):i.append("media",e.media,e.media.name),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()),(s=>new Promise((a,p)=>{e.media.buffer?s.getLength((E,q)=>{E&&p(E);let N=h({"Content-Length":q},s.getHeaders());a(N)}):a({"Content-Type":"multipart/form-data"})}))(i).then(s=>{let a=s;return n.writeKey&&(a.Authorization=`Bearer ${n.writeKey}`),c(m.POST,r,i,a)}).catch(s=>{throw s.response.data})},async updateOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/media/${e}`;return C=u(n.writeKey),c(m.PATCH,i,r,C)},async deleteOne(e,r=!1){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/media/${e}${r?"?trigger_webhook=true":""}`;return C=u(n.writeKey),c(m.DELETE,i,null,C)}});var y=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(o=>[o.name,o])),i=o=>{o&&typeof o=="object"&&Object.keys(o).forEach(s=>{if(o[s]&&typeof o[s]=="object"){let a=o[s].imgix_url||o[s].url;if(a){let p=a.split("/").pop().split("?")[0];if(r.has(p)){e.includes("name")||delete r.get(p).name;let E=h({},r.get(p));Object.assign(o[s],E)}}i(o[s])}})};i(n)},g=async(n,t,e)=>{let r=async i=>{let o=ie(i);if(o.length>0){let s=await ne(t,o,e);se(i,s,e)}return i};return Array.isArray(n)?Promise.all(n.map(i=>r(i))):r(n)};var O=class extends y{constructor(e,r){super(e);this.bucketConfig=r}limit(e){return this.endpoint+=`&limit=${e}`,this}async then(e,r){await d(this.endpoint,r,async i=>{this.opts&&this.opts.media&&i.objects&&(i.objects=await g(i.objects,f(this.bucketConfig),this.opts.media.props)),e==null||e(i)})}};var k=class extends y{constructor(e,r){super(e);this.bucketConfig=r}async then(e,r){await d(this.endpoint,r,async i=>{let o=i.objects&&i.objects.length?i.objects[0]:null;this.opts&&this.opts.media&&o&&(o=await g(o,f(this.bucketConfig),this.opts.media.props)),e==null||e({object:o})})}};var x,F=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}${T(e)}`;return new O(r,n)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}&limit=1${T(e)}`;return new k(r,n)},async insertOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects`;return x=u(n.writeKey),c(m.POST,r,e,x)},async updateOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}`;return x=u(n.writeKey),c(m.PATCH,i,r,x)},async deleteOne(e,r=!1){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}${r?"?trigger_webhook=true":""}`;return x=u(n.writeKey),c(m.DELETE,i,null,x)}});var $,K=(n,t)=>({find(){let e=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types?read_key=${n.readKey}`;return c(m.GET,e)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}?read_key=${n.readKey}`;return c(m.GET,r)},async insertOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types`;return $=u(n.writeKey),c(m.POST,r,e,$)},async updateOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}`;return $=u(n.writeKey),c(m.PATCH,i,r,$)},async deleteOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}`;return $=u(n.writeKey),c(m.DELETE,r,null,$)}});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 P=class extends b{constructor(e,r){super(e);this.bucketConfig=r}async then(e,r){await d(this.endpoint,r,async i=>{let{revision:o}=i;this.opts&&this.opts.media&&o&&(o=await g(o,f(this.bucketConfig),this.opts.media.props)),e==null||e({revision:o})})}};var j=class extends b{constructor(e,r){super(e);this.bucketConfig=r}limit(e){return this.endpoint+=`&limit=${e}`,this}async then(e,r){await d(this.endpoint,r,async i=>{this.opts&&this.opts.media&&i.revisions&&(i.revisions=await g(i.revisions,f(this.bucketConfig),this.opts.media.props)),e==null||e(i)})}};var D,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 P(i,n)},async insertOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions`;return D=u(n.writeKey),c(m.POST,i,r,D)}});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(o){console.error("Error in event listener:",o)}}),!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 R=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 o of i)if(o.trim()){let s=o.split(`
`).filter(a=>a.startsWith("data: ")).map(a=>a.replace(/^data: /,""));for(let a of s)try{let p=JSON.parse(a);p.error?this.emit("error",new Error(p.error.message||"An error occurred")):(p.text&&(this.text+=p.text,this.emit("text",p.text)),p.token_count&&(this.usageInfo=p.token_count,this.emit("usage",p.token_count)),p.event==="end"&&this.emit("end",p.data))}catch(p){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 o=JSON.parse(i);o.text&&(this.text+=o.text,this.emit("text",o.text)),o.event==="end"&&this.emit("end",o.data)}catch(o){}}this.emit("end",{usage:this.usageInfo})})}get usage(){return this.usageInfo}[Symbol.asyncIterator](){let e=[],r=null,i=!1,o=!1;return this.on("text",s=>{r?(r({value:{text:s},done:!1}),r=null):e.push({text:s})}),this.on("usage",s=>{r?(r({value:{usage:s},done:!1}),r=null):e.push({usage:s})}),this.on("end",()=>{i=!0,r&&(r({value:void 0,done:!0}),r=null)}),this.on("error",s=>{o=!0,r?(r({value:{error:s},done:!1}),r=null):e.push({error:s})}),{next:async()=>{if(e.length>0){let s=e.shift();if(s.error)throw s.error;return{value:s,done:!1}}if(i)return{value:void 0,done:!0};if(o)throw new Error("Stream encountered an error");return new Promise(s=>{r=s})}}}},L=(n,t)=>{let{uploadUrl:e}=t,{bucketSlug:r,writeKey:i}=n,o={"Content-Type":"application/json"};return i&&(o.Authorization=`Bearer ${i}`),{generateText:async s=>{if(!s.prompt&&!s.messages)throw new Error("Either prompt or messages must be provided");let a=`${e}/buckets/${r}/ai/text`;if(s.stream){let p=await c("POST",a,s,o,!0);return new R(p)}return c("POST",a,s,o)},stream:async s=>{if(!s.prompt&&!s.messages)throw new Error("Either prompt or messages must be provided");let a=`${e}/buckets/${r}/ai/text`,p=await c("POST",a,G(h({},s),{stream:!0}),o,!0);return new R(p)},generateImage:async s=>{let a=`${e}/buckets/${r}/ai/image`;return c("POST",a,s,o)}}};var f=n=>{let t=h({apiVersion:"v3",apiEnvironment:"production"},n),e=I(t);return{objects:F(t,e),objectTypes:K(t,e),objectRevisions:W(t,e),media:H(t,e),ai:L(t,e)}},oe=f;export{R as TextStreamingResponse,oe as createBucketClient};