@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) • 12.2 kB
JavaScript
;var ee=Object.create;var v=Object.defineProperty,te=Object.defineProperties,re=Object.getOwnPropertyDescriptor,ne=Object.getOwnPropertyDescriptors,ie=Object.getOwnPropertyNames,_=Object.getOwnPropertySymbols,se=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable;var I=(n,t,e)=>t in n?v(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,h=(n,t)=>{for(var e in t||(t={}))M.call(t,e)&&I(n,e,t[e]);if(_)for(var e of _(t))oe.call(t,e)&&I(n,e,t[e]);return n},U=(n,t)=>te(n,ne(t));var ae=(n,t)=>{for(var e in t)v(n,e,{get:t[e],enumerable:!0})},H=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ie(t))!M.call(n,i)&&i!==e&&v(n,i,{get:()=>t[i],enumerable:!(r=re(t,i))||r.enumerable});return n};var B=(n,t,e)=>(e=n!=null?ee(se(n)):{},H(t||!n||!n.__esModule?v(e,"default",{value:n,enumerable:!0}):e,n)),pe=n=>H(v({},"__esModule",{value:!0}),n);var he={};ae(he,{TextStreamingResponse:()=>w,createBucketClient:()=>X});module.exports=pe(he);var ce={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"}}},F=ce;function K(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 F[n.apiEnvironment][n.apiVersion]}var L=B(require("form-data"));var me={POST:"post",GET:"get",FETCH:"fetch",PUT:"put",PATCH:"patch",DELETE:"delete"},m=me;var G=B(require("axios"));var c=(n,t,e,r,i)=>{let o={method:n,url:t,data:e,headers:r,responseType:i?"stream":"json"};return i?(0,G.default)(o).then(s=>s.data).catch(s=>{throw s.response?s.response.data:s.response}):(0,G.default)(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")}var D=B(require("axios")),W=(n,t,e,r)=>(0,D.default)({method:n,url:t,data:e,headers:r});var ue=n=>new Promise((t,e)=>{W(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 ue(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 O=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 k=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 S,q=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}${T(e)}`;return new O(r)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/media?read_key=${n.readKey}&limit=1${T(e)}`;return new k(r)},async insertOne(e){let r=`${t.uploadUrl}/buckets/${n.bucketSlug}/media`,i=new L.default;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((C,Y)=>{C&&p(C);let Z=h({"Content-Length":Y},s.getHeaders());a(Z)}):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 S=u(n.writeKey),c(m.PATCH,i,r,S)},async deleteOne(e,r=!1){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/media/${e}${r?"?trigger_webhook=true":""}`;return S=u(n.writeKey),c(m.DELETE,i,null,S)}});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 de=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},le=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)]},fe=(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 C=h({},r.get(p));Object.assign(o[s],C)}}i(o[s])}})};i(n)},g=async(n,t,e)=>{let r=async i=>{let o=le(i);if(o.length>0){let s=await de(t,o,e);fe(i,s,e)}return i};return Array.isArray(n)?Promise.all(n.map(i=>r(i))):r(n)};var P=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 j=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,N=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}${T(e)}`;return new P(r,n)},findOne(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects?read_key=${n.readKey}&limit=1${T(e)}`;return new j(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 $,z=(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 R=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 E=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 J,Q=(n,t)=>({find(e){let r=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions?read_key=${n.readKey}`;return new E(r,n)},findOne({objectId:e,revisionId:r}){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions/${r}?read_key=${n.readKey}`;return new R(i,n)},async insertOne(e,r){let i=`${t.apiUrl}/buckets/${n.bucketSlug}/objects/${e}/revisions`;return J=u(n.writeKey),c(m.POST,i,r,J)}});var A=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 w=class extends A{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})}}}},V=(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 w(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,U(h({},s),{stream:!0}),o,!0);return new w(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=K(t);return{objects:N(t,e),objectTypes:z(t,e),objectRevisions:Q(t,e),media:q(t,e),ai:V(t,e)}},X=f;0&&(module.exports={TextStreamingResponse,createBucketClient});