UNPKG

atriusmaps-node-sdk

Version:

This project provides an API to Atrius Personal Wayfinder maps within a Node environment. See the README.md for more information

2 lines (1 loc) 4.14 kB
import{throttle as e}from"throttle-debounce";import{getStructureAndFloorAtPoint as o}from"../../../src/utils/geom.js";import n from"../../../src/utils/observable.js";import{headlessCommands as t,handleHeadless as a}from"./sdkHeadless.js";let i=null;function r(e,o){return"null"===e?"null-origin":e===o?"same-origin":"cross-origin"}function s(e,o){e.send("appInsights/log",{name:"browserMessageObserved",properties:{command:o.command,deploymentHost:window.location.host,iframeOrigin:o.iframeOrigin,messageType:o.messageType,relation:r(o.senderOrigin,o.iframeOrigin),senderOrigin:o.senderOrigin,wouldRejectCrossOrigin:!l(o.senderOrigin,o.iframeOrigin)}})}function l(e,o){return e===o}function m(e){const o=(e,o)=>{const n={payload:e,type:"LL-server",clientMsgId:o};try{window.postMessage(n,"*")}catch{window.postMessage((t=n,JSON.parse(JSON.stringify(t))),"*")}var t},n=n=>{const t=n.data;if(!t||"LL-client"!==t.type)return;const a=window.location.origin;s(e.bus,{messageType:"LL-client",senderOrigin:n.origin,command:t.payload?.command,iframeOrigin:a}),l(n.origin,a)&&e.bus.get("clientAPI/execute",t.payload).then(e=>o(e,t.msgId)).catch(o=>{var n,a;e.config.debug&&console.error(o),n=o.message,a=t.msgId,window.postMessage({error:!0,payload:n,type:"LL-server",clientMsgId:a},"*")})};return i&&i(),window.addEventListener("message",n),i=()=>window.removeEventListener("message",n),(e,o)=>{window.postMessage({event:e,payload:o,type:"LL-server"},"*")}}async function d(i,r){const s=i.env.isBrowser?m(i):function(e){const o=n();return e.eventListener=o,(e,n)=>o.fire(e,n)}(i);return function(n,t){const a=async(e,o)=>{const{lat:a,lng:i,floorId:r,ordinal:s,structureId:l}=await n.bus.get("map/getMapCenter");t(e,{lat:a,lng:i,floorId:r,ord:s,structureId:l,...o})};n.bus.monitor("map/userMoveStart",e=>{a("userMoveStart",e)}),n.bus.monitor("map/userMoving",e(500,e=>{a("userMoving",e)})),n.bus.monitor("map/moveEnd",e=>{a("moveEnd",e)}),n.bus.monitor("map/floorChanged",({structure:e,floor:o})=>t("levelChange",{floorId:o?.id??null,floorName:o?.name??null,ord:o?.ordinal??null,structureId:e?.id??null,structureName:e?.name??null})),n.bus.monitor("map/poiClicked",({poi:e})=>t("poiSelected",e)),n.bus.monitor("poiDetails/showPoi",({poi:e})=>t("poiShown",e)),n.bus.monitor("map/click",async({lat:e,lng:a,ord:i})=>{const r=await n.bus.get("venueData/getStructures"),s=await n.bus.get("map/getViewBBox"),{building:l,floor:m}=o(r,e,a,i,s,!0);t("mapClicked",{lat:e,lng:a,ord:i,building:l,floor:m})})}(i,s),{init:async()=>{!function(e){[{name:"latLngOrdLocation",spec:{type:"object",props:[{name:"lat",type:"float"},{name:"lng",type:"float"},{name:"ord",type:"integer"}]}},{name:"latLngFloorLocation",spec:{type:"object",props:[{name:"lat",type:"float"},{name:"lng",type:"float"},{name:"floorId",type:"string"}]}},{name:"poiIdLocation",spec:{type:"object",props:[{name:"poiId",type:"integer",min:0}]}},{name:"location",spec:{type:"multi",types:[{type:"poiIdLocation"},{type:"latLngOrdLocation"},{type:"latLngFloorLocation"}]}},{name:"viewSettings",spec:{type:"object",props:[{name:"zoom",type:"float",optional:!0},{name:"pitch",type:"float",optional:!0},{name:"bearing",type:"float",optional:!0}]}}].forEach(o=>{e.bus.send("clientAPI/registerCustomType",o)})}(i),t.forEach(e=>i.bus.send("clientAPI/registerCommand",e)),a(i),r.headless||await import("../../../_virtual/_empty_module_placeholder.js").then(e=>{e.visualCommands.forEach(e=>i.bus.send("clientAPI/registerCommand",e)),e.handleVisual(i,s)});const e=async()=>{await i.bus.send("system/readywhenyouare"),i.bus.get("clientAPI/execute",{command:"getCommandJSON"}).then(e=>s("ready",{commandJSON:e})),!r.headless&&i.config.uiHide?.sidebar&&i.env.isDesktop()&&i.bus.send("map/changePadding",{padding:{left:55,right:55,top:72,bottom:22}})};r.headless?Promise.all([new Promise(e=>i.bus.monitor("venueData/navGraphLoaded",e)),new Promise(e=>i.bus.monitor("venueData/poiDataLoaded",e))]).then(e):i.bus.on("map/mapReadyToShow",e),i.bus.on("sdkServer/sendEvent",({eventName:e,...o})=>s(e,o))}}}export{d as create,r as describeMessageRelation,l as isSameOriginBrowserMessage,s as logBrowserMessageTelemetry};