UNPKG

@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) 10.9 kB
var N=Object.defineProperty,z=Object.defineProperties;var J=Object.getOwnPropertyDescriptors;var S=Object.getOwnPropertySymbols;var Q=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable;var B=(n,r,e)=>r in n?N(n,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[r]=e,h=(n,r)=>{for(var e in r||(r={}))Q.call(r,e)&&B(n,e,r[e]);if(S)for(var e of S(r))V.call(r,e)&&B(n,e,r[e]);return n},A=(n,r)=>z(n,J(r));var X={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"}}},G=X;function _(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 G[n.apiEnvironment][n.apiVersion]}import te from"form-data";var Y={POST:"post",GET:"get",FETCH:"fetch",PUT:"put",PATCH:"patch",DELETE:"delete"},c=Y;import I from"axios";var m=(n,r,e,t,i)=>{let o={method:n,url:r,data:e,headers:t,responseType:i?"stream":"json"};return i?I(o).then(s=>s.data).catch(s=>{throw s.response?s.response.data:s.response}):I(o).then(s=>s.data).catch(s=>{throw s.response?s.response.data:s.response})};function d(n){if(n&&n.trim())return{Authorization:`Bearer ${n}`};throw new Error("'writeKey' should be a valid string")}import Z from"axios";var M=(n,r,e,t)=>Z({method:n,url:r,data:e,headers:t});var ee=n=>new Promise((r,e)=>{M(c.GET,n).then(t=>r(t.data)).catch(t=>e(t.response?t.response.data:t.response))}),u=async(n,r,e)=>{try{let t=await ee(n);e(t)}catch(t){if(r&&typeof r=="function")r(t);else throw t}};var l=class{constructor(r){this.endpoint="";this.endpoint=r}props(r){let e;if(typeof r=="string")e=r.startsWith("{")&&r.endsWith("}")?this.parseGraphQLProps(r.slice(1,-1)):r;else if(Array.isArray(r))e=r.filter(t=>typeof t=="string").map(t=>t.trim()).filter(Boolean).join(",");else throw new Error("Invalid props type");return this.endpoint+=`&props=${encodeURIComponent(e)}`,this}parseGraphQLProps(r){let e=r.split(` `).map(o=>o.trim()).filter(Boolean),t=[],i=[];for(let o of e)if(o.includes("{")){let[s]=o.split("{");s!==void 0&&i.push(s.trim())}else o==="}"?i.pop():t.push([...i,o].join("."));return t.join(",")}sort(r){return this.endpoint+=`&sort=${r}`,this}skip(r){return this.endpoint+=`&skip=${r}`,this}useCache(){return this.endpoint+="&use_cache=true",this}};var w=class extends l{limit(r){return this.endpoint+=`&limit=${r}`,this}async then(r,e){await u(this.endpoint,e,t=>r==null?void 0:r(t))}};var k=class extends l{async then(r,e){await u(this.endpoint,e,t=>{let i=t.media&&t.media.length?t.media[0]:null;r==null||r({media:i})})}};var T=n=>n?`&query=${encodeURIComponent(JSON.stringify(n))}`:"";var C,U=(n,r)=>({find(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}${T(e)}`;return new w(t)},findOne(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}&limit=1${T(e)}`;return new k(t)},async insertOne(e){let t=`${r.uploadUrl}/buckets/${n.bucketSlug}/media`,i=new te;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 L=h({"Content-Length":q},s.getHeaders());a(L)}):a({"Content-Type":"multipart/form-data"})}))(i).then(s=>{let a=s;return n.writeKey&&(a.Authorization=`Bearer ${n.writeKey}`),m(c.POST,t,i,a)}).catch(s=>{throw s.response.data})},async updateOne(e,t){let i=`${r.apiUrl}/buckets/${n.bucketSlug}/media/${e}`;return C=d(n.writeKey),m(c.PATCH,i,t,C)},async deleteOne(e,t=!1){let i=`${r.apiUrl}/buckets/${n.bucketSlug}/media/${e}${t?"?trigger_webhook=true":""}`;return C=d(n.writeKey),m(c.DELETE,i,null,C)}});var y=class extends l{depth(r){return this.endpoint+=`&depth=${r}`,this}status(r){return this.endpoint+=`&status=${r}`,this}after(r){return this.endpoint+=`&after=${r}`,this}options(r){return r&&(this.opts=r),this}};var re=async(n,r,e)=>{let t={name:{$in:r}},{media:i}=await n.media.find(t).props(!e||e==="all"?"":`name,url,imgix_url,${e}`);return i},ne=n=>{let r=[];return JSON.stringify(n,(e,t)=>{if(t&&typeof t=="object"){let i=t.imgix_url||t.url;i&&r.push(i.split("/").pop().split("?")[0])}return t}),[...new Set(r)]},ie=(n,r,e)=>{let t=new Map(r.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(t.has(p)){e.includes("name")||delete t.get(p).name;let E=h({},t.get(p));Object.assign(o[s],E)}}i(o[s])}})};i(n)},g=async(n,r,e)=>{let t=async i=>{let o=ne(i);if(o.length>0){let s=await re(r,o,e);ie(i,s,e)}return i};return Array.isArray(n)?Promise.all(n.map(i=>t(i))):t(n)};var O=class extends y{constructor(e,t){super(e);this.bucketConfig=t}limit(e){return this.endpoint+=`&limit=${e}`,this}async then(e,t){await u(this.endpoint,t,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 P=class extends y{constructor(e,t){super(e);this.bucketConfig=t}async then(e,t){await u(this.endpoint,t,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,H=(n,r)=>({find(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}${T(e)}`;return new O(t,n)},findOne(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}&limit=1${T(e)}`;return new P(t,n)},async insertOne(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/objects`;return x=d(n.writeKey),m(c.POST,t,e,x)},async updateOne(e,t){let i=`${r.apiUrl}/buckets/${n.bucketSlug}/objects/${e}`;return x=d(n.writeKey),m(c.PATCH,i,t,x)},async deleteOne(e,t=!1){let i=`${r.apiUrl}/buckets/${n.bucketSlug}/objects/${e}${t?"?trigger_webhook=true":""}`;return x=d(n.writeKey),m(c.DELETE,i,null,x)}});var $,K=(n,r)=>({find(){let e=`${r.apiUrl}/buckets/${n.bucketSlug}/object-types?read_key=${n.readKey}`;return m(c.GET,e)},findOne(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}?read_key=${n.readKey}`;return m(c.GET,t)},async insertOne(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/object-types`;return $=d(n.writeKey),m(c.POST,t,e,$)},async updateOne(e,t){let i=`${r.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}`;return $=d(n.writeKey),m(c.PATCH,i,t,$)},async deleteOne(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/object-types/${e}`;return $=d(n.writeKey),m(c.DELETE,t,null,$)}});var b=class extends l{depth(r){return this.endpoint+=`&depth=${r}`,this}status(r){return this.endpoint+=`&status=${r}`,this}after(r){return this.endpoint+=`&after=${r}`,this}options(r){return r&&(this.opts=r),this}};var j=class extends b{constructor(e,t){super(e);this.bucketConfig=t}async then(e,t){await u(this.endpoint,t,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 R=class extends b{constructor(e,t){super(e);this.bucketConfig=t}limit(e){return this.endpoint+=`&limit=${e}`,this}async then(e,t){await u(this.endpoint,t,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,F=(n,r)=>({find(e){let t=`${r.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions?read_key=${n.readKey}`;return new R(t,n)},findOne({objectId:e,revisionId:t}){let i=`${r.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions/${t}?read_key=${n.readKey}`;return new j(i,n)},async insertOne(e,t){let i=`${r.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions`;return D=d(n.writeKey),m(c.POST,i,t,D)}});import{EventEmitter as se}from"events";var v=class extends se{constructor(e){super();this.stream=e;this.usageInfo=null;this.text="";this.setupListeners()}setupListeners(){let e="";this.stream.on("data",t=>{e+=t.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",t=>{this.emit("error",t)}),this.stream.on("end",()=>{if(e.trim()){let t=e.split(` `).filter(i=>i.startsWith("data: ")).map(i=>i.replace(/^data: /,""));for(let i of t)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=[],t=null,i=!1,o=!1;return this.on("text",s=>{t?(t({value:{text:s},done:!1}),t=null):e.push({text:s})}),this.on("usage",s=>{t?(t({value:{usage:s},done:!1}),t=null):e.push({usage:s})}),this.on("end",()=>{i=!0,t&&(t({value:void 0,done:!0}),t=null)}),this.on("error",s=>{o=!0,t?(t({value:{error:s},done:!1}),t=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=>{t=s})}}}},W=(n,r)=>{let{uploadUrl:e}=r,{bucketSlug:t,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/${t}/ai/text`;if(s.stream){let p=await m("POST",a,s,o,!0);return new v(p)}return m("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/${t}/ai/text`,p=await m("POST",a,A(h({},s),{stream:!0}),o,!0);return new v(p)},generateImage:async s=>{let a=`${e}/buckets/${t}/ai/image`;return m("POST",a,s,o)}}};var f=n=>{let r=h({apiVersion:"v3",apiEnvironment:"production"},n),e=_(r);return{objects:H(r,e),objectTypes:K(r,e),objectRevisions:F(r,e),media:U(r,e),ai:W(r,e)}},oe=f;export{v as TextStreamingResponse,oe as createBucketClient};