@xman.io/xman-js-sdk
Version:
Javascript/typescript SDK to access the data published using XMan.io
2 lines (1 loc) • 4.46 kB
JavaScript
import{omitBy as e,isEmpty as t,set as s,isUndefined as a,isNull as r}from"lodash";const n="https://moade.xman.live",i="https://xman.live",o="live",c=t=>e(t,e=>a(e)||r(e));class d{constructor(e,t,s=o,a=i,r=n,c){this.clientId=e,this.workspace=t,this.stageId=s,this.cdnServer=a,this.moadeServer=r,this.imageBaseUrl=`${a}/i/${t}/${s}/`,this.secret=c}async fetchContent(e,t){const s=this.getAuthHeaders();let a=`${this.cdnServer}/c/${this.workspace}/${this.stageId}/${e}`;t&&(a=`${a}?${new URLSearchParams(t)}`);const r=await fetch(a,{method:"GET",headers:s});if(!r.ok){const e=`XMan Response Status: ${r.status} message: ${await r.text()}`;return console.log(e),{success:!1,response:r}}return{success:!0,data:await r.json()}}getAuthHeaders(){const e=new Headers;return e.set("Authorization","Bearer "+this.clientId),this.secret&&e.set("XMAN-CLIENT-SECRET",this.secret),e}getMoadeTracker(e,a=!1){return({payload:r,instance:n})=>{var i,o;const d=null!==(i=null!=e?e:null==r?void 0:r.event)&&void 0!==i?i:"unspecified_event",{userId:l,anonymousId:h,properties:u}=r,g=this.getAuthHeaders();g.set("Content-Type","text/plain;charset=UTF-8");const m=`${this.moadeServer}/event/${this.workspace}/${this.stageId}`,p=c({userId:l,anonymousId:h,properties:u,eventName:d});if(a){const e=null==n?void 0:n.getState(),a=null===(o=null==e?void 0:e.context)||void 0===o?void 0:o.campaign;t(a)||s(p,"properties.campaign",a)}fetch(m,{method:"POST",headers:g,body:JSON.stringify(p),mode:"no-cors"}).then(()=>{}).catch(e=>{console.error("Error sending analytics event:",e)})}}async decide(e,t,s){const a=this.getAuthHeaders();a.set("Content-Type","application/json");const r=`${this.moadeServer}/decider`,n=await fetch(r,{method:"POST",headers:a,body:JSON.stringify(c({workspace:this.workspace,stage:this.stageId,decisionFlowId:e,pid:e,userId:t.userId,anonymousId:t.anonymousId,uid:t.userId||t.anonymousId,properties:t.properties,_mock:s}))});if(!n.ok){const e=`XMan Response Status: ${n.status} message: ${await n.text()}`;return console.log(e),{success:!1,response:n}}return{success:!0,data:await n.json()}}async list(e,t={}){const s=await this.fetchContent(e,t);if(s.success)return s.data;throw new Error(`XMan Response Status: ${s.response.status} message: ${await s.response.text()}`)}async read(e,t){const s=await this.fetchContent(e+"/"+t);if(s.success)return s.data;if(404===s.response.status)return null;throw new Error(`XMan Response Status: ${s.response.status} message: ${await s.response.text()}`)}async readReferencedItem(e){return Array.isArray(e)?0===e.length?null:this.read(e[0].collection,e[0].id):null}async readReferencedItems(e,t){if(!Array.isArray(e))return[];const s=e.filter(e=>e&&e.collection&&e.id),a=await Promise.allSettled(s.map(e=>this.read(e.collection,e.id))),r=a.filter(e=>"fulfilled"===e.status&&Boolean(e.value));if(t&&a.length!==r.length){const e=a.filter(e=>"rejected"===e.status).map(e=>{var t;return null===(t=e.reason)||void 0===t?void 0:t.message}).join(";");throw new Error(e)}return r.map(e=>e.value)}async getImages(e,t){return Promise.all(e.map(e=>this.getImage(e,t)))}async getImage(e,t){if(!e)throw new Error("Invalid Image Reference");const{collection:s,id:a}=e;if(!s||!a)throw new Error("Invalid Image Reference");const r=await this.read(e.collection,e.id);return{alt:(null==r?void 0:r.data.altText)||e.altText||e.label||"",variations:this.generateImageVariations(e,t)}}generateImageVariations(e,t=[{key:"main"}]){const s=this.imageBaseUrl+e.id;return t.reduce((e,t)=>{const a=new URL(s),{key:r,width:n,height:i,fit:o}=t;if(!r)throw new Error("key is required for each image setting");n&&a.searchParams.set("width",`${n}`),i&&a.searchParams.set("height",`${i}`),o&&a.searchParams.set("fit",o),a.searchParams.set("xacid",this.clientId);const c={src:a.href};return n&&(c.width=n),i&&(c.height=i),{[r]:c,...e}},{})}}const l=(e,t,s=o,a=i,r=n,c)=>{const h=new d(e,t,s,a,r,c);return{read:(e,t)=>h.read(e,t),readReferencedItem:e=>h.readReferencedItem(e),readReferencedItems:(e,t)=>h.readReferencedItems(e,t),generateImageVariations:(e,t)=>h.generateImageVariations(e,t),getImages:(e,t)=>h.getImages(e,t),getImage:(e,t)=>h.getImage(e,t),list:(e,t)=>h.list(e,t),decide:(e,t,s)=>h.decide(e,t,s),getMoadeAnalyticsPlugin:()=>({name:"MoadeAnalytics",track:h.getMoadeTracker(),page:h.getMoadeTracker("page_view",!0)}),stage:(s=o)=>l(e,t,s,a,r,c),cdn:(a=i)=>l(e,t,s,a,r,c),moade:(r=n)=>l(e,t,s,a,r,c),secret:n=>l(e,t,s,a,r,n)}};export{l as getWorkspace};