UNPKG

@xman.io/xman-js-sdk

Version:

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

2 lines (1 loc) 4.68 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("lodash")):"function"==typeof define&&define.amd?define(["exports","lodash"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).XManIO={},e._)}(this,function(e,t){"use strict";const s="https://moade.xman.live",a="https://xman.live",r="live",n=e=>t.omitBy(e,e=>t.isUndefined(e)||t.isNull(e));class i{constructor(e,t,n=r,i=a,o=s,c){this.clientId=e,this.workspace=t,this.stageId=n,this.cdnServer=i,this.moadeServer=o,this.imageBaseUrl=`${i}/i/${t}/${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(e,s=!1){return({payload:a,instance:r})=>{var i,o;const c=null!==(i=null!=e?e: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=n({userId:d,anonymousId:l,properties:h,eventName:c});if(s){const e=null==r?void 0:r.getState(),s=null===(o=null==e?void 0:e.context)||void 0===o?void 0:o.campaign;t.isEmpty(s)||t.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 r=`${this.moadeServer}/decider`,i=await fetch(r,{method:"POST",headers:a,body:JSON.stringify(n({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 o=(e,t,n=r,c=a,d=s,l)=>{const h=new i(e,t,n,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:(s=r)=>o(e,t,s,c,d,l),cdn:(s=a)=>o(e,t,n,s,d,l),moade:(a=s)=>o(e,t,n,c,a,l),secret:s=>o(e,t,n,c,d,s)}};e.getWorkspace=o});