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) • 1.64 kB
JavaScript
import n from"zousan";import{processParkingPOIS as e,processOpenClosedPois as t,processSecurityWaitTimes as a,mutateSecurityCheckpointLabel as s,processRoutingPois as o}from"./processors.js";let c=3e4;const i="x-account-id";function u(u,r={}){const d={dynamicDataNotPending:new n},p=u.gt();r._overrideRefreshFrequency&&(c=r._overrideRefreshFrequency),u.bus.on("system/readywhenyouare",()=>d.dynamicDataNotPending);const y=async n=>{const e={};for(const t of n){const n=await u.bus.get("poi/getById",{id:t});n&&(e[t]=n.name)}return e};return{init:async()=>{const[n,r]=await Promise.all([u.bus.get("venueData/getAccountId"),u.bus.get("venueData/getVenueId")]),l=`https://marketplace.locuslabs.com/venueId/${r}/dynamic-poi`;let f,m=0,g=0;const D=async()=>{const c=await fetch(l,{headers:{[i]:n}});if(c.ok)return c.json().then(({data:n})=>async function(n){(function(n){const t=e(n);u.bus.send("poi/setDynamicData",{plugin:"parking",idValuesMap:t})})(n),function(n){const e=t(n);u.bus.send("poi/setDynamicData",{plugin:"open-closed-status",idValuesMap:e})}(n),async function(n){const e=a(n);u.bus.send("poi/setDynamicData",{plugin:"security",idValuesMap:e});const t=await y(Object.keys(e));u.bus.send("map/mutateFeature",{functor:s(p,e,t)})}(n),async function(n){const e=await o(n);u.bus.send("poi/setDynamicRouting",{plugin:"routing",idValuesMap:e})}(n)}(n)).then(()=>{g++}).catch(console.error);console.warn("dynamicPois: fetch response status not ok",c),m++,m>=3&&m>g&&clearInterval(f)};return D().then(()=>{f=setInterval(D,c),"function"==typeof f.unref&&f.unref()}).finally(()=>d.dynamicDataNotPending.resolve(!0))}}}export{u as create};