UNPKG

@xman.io/xman-js-sdk

Version:

Javascript/typescript SDK to access the data published using XMan.io

2 lines (1 loc) 4.45 kB
"use strict";var e=require("lodash");const t="https://moade.xman.live",s="https://xman.live",a="live",r=t=>e.omitBy(t,t=>e.isUndefined(t)||e.isNull(t));class n{constructor(e,r,n=a,i=s,o=t,c){this.clientId=e,this.workspace=r,this.stageId=n,this.cdnServer=i,this.moadeServer=o,this.imageBaseUrl=`${i}/i/${r}/${n}/`,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(t,s=!1){return({payload:a,instance:n})=>{var i,o;const c=null!==(i=null!=t?t:null==a?void 0:a.event)&&void 0!==i?i:"unspecified_event",{userId:d,anonymousId:l,properties:h}=a,u=this.getAuthHeaders();u.set("Content-Type","text/plain;charset=UTF-8");const g=`${this.moadeServer}/event/${this.workspace}/${this.stageId}`,m=r({userId:d,anonymousId:l,properties:h,eventName:c});if(s){const t=null==n?void 0:n.getState(),s=null===(o=null==t?void 0:t.context)||void 0===o?void 0:o.campaign;e.isEmpty(s)||e.set(m,"properties.campaign",s)}fetch(g,{method:"POST",headers:u,body:JSON.stringify(m),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 n=`${this.moadeServer}/decider`,i=await fetch(n,{method:"POST",headers:a,body:JSON.stringify(r({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(!i.ok){const e=`XMan Response Status: ${i.status} message: ${await i.text()}`;return console.log(e),{success:!1,response:i}}return{success:!0,data:await i.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 i=(e,r,o=a,c=s,d=t,l)=>{const h=new n(e,r,o,c,d,l);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:(t=a)=>i(e,r,t,c,d,l),cdn:(t=s)=>i(e,r,o,t,d,l),moade:(s=t)=>i(e,r,o,c,s,l),secret:t=>i(e,r,o,c,d,t)}};exports.getWorkspace=i;