@wemap/providers 14.8.0-beta.0 → 14.8.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/wemap-providers.umd.js +1 -1
- package/dist/index.js +8 -8
- package/package.json +8 -8
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@wemap/geo"),require("@wemap/maths"),require("@wemap/routers"),require("@wemap/utils"),require("@wemap/camera")):typeof define==`function`&&define.amd?define([`exports`,`@wemap/geo`,`@wemap/maths`,`@wemap/routers`,`@wemap/utils`,`@wemap/camera`],t):(e=typeof globalThis<`u`?globalThis:e||self,t((e.Wemap=e.Wemap||{},e.Wemap.Providers={}),e.Wemap.Geo,e.Wemap.Maths,e.Wemap.Routers,e.Wemap.Utils,e.Wemap.Camera))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=class e extends t.UserPosition{source;static fromUserPosition(t,n){let r=new e(t.lat,t.lng,t.alt,t.level,t.time,t.accuracy,t.bearing);return r.source=n,r}clone(){return e.fromUserPosition(super.clone(),this.source)}},s=class extends t.Attitude{},c=class extends t.Attitude{},l={useMapMatching:!0,ignoreProviders:[],optionalProviders:[],stopOnError:!0,checkAvailabilityOnStart:!0,get hasPoleStar(){return this.optionalProviders.includes(`PoleStar`)}},u=Object.defineProperty,d=(e,t,n)=>t in e?u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,f=(e,t,n)=>(d(e,typeof t==`symbol`?t:t+``,n),n),p=[`error`,`ok`,`warn`,`flux`,`deprecated`,`info`,`log`,`debug`];function m(e){return`wemap`in e}var h=class e{static enable(t){e.ENABLED=!!t}static level(t){return arguments.length&&(e.LOG_LEVEL=t),e.LOG_LEVEL}static clearHistory(){e.HISTORY=[]}static _canUseLog(t){let n=p.indexOf(t),r=p.indexOf(e.LOG_LEVEL);return r!==-1&&n<=r}static _getColorByType(e){let t=null;switch(e){case`flux`:t=`background-color: #0083E0; color: #FFFFFF;`;break;case`ok`:t=`background-color: #00FF22; color: #272727;`;break;case`deprecated`:t=`background-color: #CA0AFA; color: #FFFFFF;`;break;case`error`:t=`background-color: #CC0000; color: #FFFFFF;`;break;case`warn`:t=`background-color: #DD7908; color: #FFFFFF;`;break;case`debug`:t=`background-color: #999999; color: #FFFFFF;`;break;case`info`:t=`background-color: #DCFF4E; color: #000000;`;break;default:t=`background-color: #F4F4F4; color: #999999;`;break}return t}static _getOriginByType(e,t){let n=null,r=null,i=t;if(arguments.length<2)return``;try{for(n=``,r=e.stack&&e.stack.length?e.stack.split(`
|
|
2
2
|
`).splice(3):[],(i<0||i>=r.length)&&(i=r.length);i;)n+=`\r
|
|
3
|
-
`+r[0].trim(),r=r.splice(1),i--;return n}catch{return``}}static _log(t,n,r){let i=`color: auto;`,a=`color: #6A6A6A;`,o=typeof window<`u`,s,c=null,l=null,u=null,d=null,f=``,h=!1;if(c=t,d=Error(n),o&&(l=e._getColorByType(t)),u=e._getOriginByType(d,r),c===`deprecated`&&(c=`warn`,h=`deprecated`),o&&(u=e._COLOR_TOKEN+u),s=(o?e._COLOR_TOKEN:``)+` `+d.message,f=o?e._COLOR_TOKEN:``,f+=e._TYPE_PREFIX,f+=h||t,f+=e._TYPE_SUFFIX,typeof window<`u`&&m(window)){let e=performance&&performance.now?performance.now():new Date().getTime();f+=`[`+Math.round(e-window.wemap.startTime)+`ms]`}return s=f+s,e.SHOW_ORIGIN&&(s+=u),e.HISTORY.push(s),!this._canUseLog(t)||arguments.length<2||!e.ENABLED?!1:(o?console&&t!==`ok`&&t!==`flux`&&t!==`deprecated`&&console[t]&&p.indexOf(t)<=p.indexOf(`info`)?console[t](s,l,i,a):console.log(s,l,i,a):console.log(s),!0)}static external(e){return console.log(`LIVEMAP :: `+e)}static flux(t){return e._log(`flux`,t,0)}static ok(t){return e._log(`ok`,t,1)}static error(t,n=-1){return e._log(`error`,t,n)}static warn(t,n=2){return e._log(`warn`,t,n)}static deprecated(t,n=2){return e._log(`deprecated`,t,n)}static debug(t,n=-1){return e._log(`debug`,t,n)}static info(t,n=0){return e._log(`info`,t,n)}static log(t,n=1){return e._log(`log`,t,n)}};f(h,`LOG_LEVEL`,`debug`),f(h,`SHOW_ORIGIN`,!0),f(h,`ENABLED`,!0),f(h,`HISTORY`,[]),f(h,`_COLOR_TOKEN`,`%c`),f(h,`_TYPE_PREFIX`,`<<<< `),f(h,`_TYPE_SUFFIX`,` >>>>`);for(var g=h,_=new class{_enabled=!1;currentId=0;objectsIdMap=new WeakMap;pushEvents={};pushEventsRef={};interval;initDate;get enabled(){return this._enabled}set enabled(e){this._enabled=e}initializeInterval(){this.interval||=window.setInterval(()=>{for(let[e,t]of Object.entries(this.pushEvents))g.debug(`Received `+t+` notifications from `+this.pushEventsRef[Number(e)].getName()+` last second`);this.pushEvents={},this.pushEventsRef={}},1e3)}getObjectId(e){return this.objectsIdMap.has(e)||this.objectsIdMap.set(e,++this.currentId),this.objectsIdMap.get(e)}addEvent(e,t){if(!this.enabled)return;this.initDate||=Date.now(),this.initializeInterval();let n=this.getObjectId(e),r=e.getName();g.debug(r+`[`+n+`].`+t)}incrementNotifications(e){if(!this.enabled)return;let t=this.getObjectId(e),n=this.pushEvents[t];n||(n=0,this.pushEventsRef[t]=e),this.pushEvents[t]=n+1}},v=class e extends Error{static DEFAULT_MESSAGE=`Contains ignored provider`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},y=class e{static _callbackUniqueId=0;static _uniqueId=1;id;state=`stopped`;_lastEvent=null;_eventsCallbacks=[];_monitoringCallbacks=[];constructor(){this.id=e._uniqueId++,_.addEvent(this,`constructor`)}getAvailability(){return l.ignoreProviders.includes(this.getName())?Promise.resolve(new v):this.availability()}get hasNativeInterface(){return!!this.nativeInterface}get nativeInterface(){return typeof window<`u`&&window.__nativeProviders||null}get nativeJsInterface(){return typeof window>`u`?null:(window.__nativeJsProviders||(window.__nativeJsProviders={}),window.__nativeJsProviders)}get useCameraNatively(){return!1}addEventListener(t=null,n=null,r=!0){let i=++e._callbackUniqueId;if(this._eventsCallbacks.push({id:i,onEvent:t||(()=>{}),onError:n||(()=>{}),optional:!r}),!r||this.state!==`stopped`)return i;this.state=`starting`;let a=Promise.resolve();return l.checkAvailabilityOnStart&&(a=this.getAvailability()),(async()=>{let e=await a;if(e){this.state=`stopped`,this.notifyError(e);return}_.addEvent(this,`start`),this.start(),this.state=`started`,this._monitoringCallbacks.forEach(e=>e.onStarted?.())})(),i}removeEventListener(e){let t=this._eventsCallbacks.find(t=>t.id===e);t&&(this._eventsCallbacks=this._eventsCallbacks.filter(e=>e!==t),!t.optional&&(this._eventsCallbacks.find(e=>!e.optional)||this.state!==`stopped`&&(_.addEvent(this,`stop`),this.stop(),this.state=`stopped`,this._monitoringCallbacks.forEach(e=>e.onStopped?.()))))}addMonitoringListener(t,n){let r=e._callbackUniqueId++;return this._monitoringCallbacks.push({id:r,onStarted:t||null,onStopped:n||null}),r}removeMonitoringListener(e){this._monitoringCallbacks=this._monitoringCallbacks.filter(t=>t.id!==e)}notify=e=>{let t=this._adaptBeforeNotify(e);_.incrementNotifications(this),this._eventsCallbacks.forEach(e=>e.onEvent?.(t)),this._lastEvent=t};_adaptBeforeNotify(e){return e}notifyError=e=>{this._eventsCallbacks.forEach(({id:t,onError:n})=>{l.stopOnError&&this.removeEventListener(t),n?.(e)})};get lastEvent(){return this._lastEvent}},b=class{static async every(e){for(let t of e){let e=await t;if(e)return e}return null}static async some(e){let t;for(let n of e){let e=await n;if(e)t||=e;else return null}return t||null}},ee=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[-29404.5,-1450.7,0,0,0,0,0,0,0,0,0,0,0],[-2500,2982,1676.8,0,0,0,0,0,0,0,0,0,0],[1363.9,-2381,1236.2,525.7,0,0,0,0,0,0,0,0,0],[903.1,809.4,86.2,-309.4,47.9,0,0,0,0,0,0,0,0],[-234.4,363.1,187.8,-140.7,-151.2,13.7,0,0,0,0,0,0,0],[65.9,65.6,73,-121.5,-36.2,13.5,-64.7,0,0,0,0,0,0],[80.6,-76.8,-8.3,56.5,15.8,6.4,-7.2,9.8,0,0,0,0,0],[23.6,9.8,-17.5,-.4,-21.1,15.3,13.7,-16.5,-.3,0,0,0,0],[5,8.2,2.9,-1.4,-1.1,-13.3,1.1,8.9,-9.3,-11.9,0,0,0],[-1.9,-6.2,-.1,1.7,-.9,.6,-.9,1.9,1.4,-2.4,-3.9,0,0],[3,-1.4,-2.5,2.4,-.9,.3,-.7,-.1,1.4,-.6,.2,3.1,0],[-2,-.1,.5,1.3,-1.2,.7,.3,.5,-.2,-.5,.1,-1.1,-.3]],te=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[0,4652.9,0,0,0,0,0,0,0,0,0,0,0],[0,-2991.6,-734.8,0,0,0,0,0,0,0,0,0,0],[0,-82.2,241.8,-542.9,0,0,0,0,0,0,0,0,0],[0,282,-158.4,199.8,-350.1,0,0,0,0,0,0,0,0],[0,47.7,208.4,-121.3,32.2,99.1,0,0,0,0,0,0,0],[0,-19.1,25,52.7,-64.4,9,68.1,0,0,0,0,0,0],[0,-51.4,-16.8,2.3,23.5,-2.2,-27.2,-1.9,0,0,0,0,0],[0,8.4,-15.3,12.8,-11.8,14.9,3.6,-6.9,2.8,0,0,0,0],[0,-23.3,11.1,9.8,-5.1,-6.2,7.8,.4,-1.5,9.7,0,0,0],[0,3.4,-.2,3.5,4.8,-8.6,-.1,-4.2,-3.4,-.1,-8.8,0,0],[0,0,2.6,-.5,-.4,.6,-.2,-1.7,-1.6,-3,-2,-2.6,0],[0,-1.2,.5,1.3,-1.8,.1,.7,-.1,.6,.2,-.9,0,.5]],ne=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[6.7,7.7,0,0,0,0,0,0,0,0,0,0,0],[-11.5,-7.1,-2.2,0,0,0,0,0,0,0,0,0,0],[2.8,-6.2,3.4,-12.2,0,0,0,0,0,0,0,0,0],[-1.1,-1.6,-6,5.4,-5.5,0,0,0,0,0,0,0,0],[-.3,.6,-.7,.1,1.2,1,0,0,0,0,0,0,0],[-.6,-.4,.5,1.4,-1.4,0,.8,0,0,0,0,0,0],[-.1,-.3,-.1,.7,.2,-.5,-.8,1,0,0,0,0,0],[-.1,.1,-.1,.5,-.1,.4,.5,0,.4,0,0,0,0],[-.1,-.2,0,.4,-.3,0,.3,0,0,-.4,0,0,0],[0,0,0,.2,-.1,-.2,0,-.1,-.2,-.1,0,0,0],[0,-.1,0,0,0,-.1,0,0,-.1,-.1,-.1,-.1,0],[0,0,0,0,0,0,0,0,0,0,0,0,-.1]],re=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[0,-25.1,0,0,0,0,0,0,0,0,0,0,0],[0,-30.2,-23.9,0,0,0,0,0,0,0,0,0,0],[0,5.7,-1,1.1,0,0,0,0,0,0,0,0,0],[0,.2,6.9,3.7,-5.6,0,0,0,0,0,0,0,0],[0,.1,2.5,-.9,3,.5,0,0,0,0,0,0,0],[0,.1,-1.8,-1.4,.9,.1,1,0,0,0,0,0,0],[0,.5,.6,-.7,-.2,-1.2,.2,.3,0,0,0,0,0],[0,-.3,.7,-.2,.5,-.3,-.5,.4,.1,0,0,0,0],[0,-.3,.2,-.4,.4,.1,0,-.2,.5,.2,0,0,0],[0,0,.1,-.3,.1,-.2,.1,0,-.1,.2,0,0,0],[0,0,.1,0,.2,0,0,.1,0,-.1,0,0,0],[0,0,0,-.1,.1,0,0,0,.1,0,0,0,-.1]],x={a:6378.137,b:6356.7523142,r0:6371.2},S=function(e,t){return Array(e).fill(``).map(function(e){return Array(t).fill(0)})},ie=function(){return(new Date(Date.now()).valueOf()/864e5+2440587.5-2458850)/365.25},ae=function(e,t){return Number(Math.round(Number(e+`e+`+t))+`e-`+t)},oe=function(e){return e>90?e-180:e<-90?e+180:e},C=function(e){return e*.017453292519943295},se=function(e){return e*57.29577951308232},w=S(13,13),T=S(13,13),ce=S(13,13),le=S(13,13),ue=Array(13).fill(0),de=Array(13).fill(0),fe=Array(13).fill(0),E=S(13,13).map(function(e){return e.map(function(e){return[0,0]})}),D=2;D<=12;D++)fe[D]=Math.sqrt((2*D-1)/(2*D));for(var O=0;O<=12;O++)for(var k=O*O,D=Math.max(O+1,2);D<=12;D++)E[O][D][0]=Math.sqrt((D-1)*(D-1)-k),E[O][D][1]=1/Math.sqrt(D*D-k);var pe=function(e,t,n){n===void 0&&(n=0);var r=Math.cos(C(e)),i=Math.sin(C(e)),a=Math.sqrt(x.a**2*r**2+x.b**2*i**2),o=Math.atan2(r*(n*a+x.a**2),i*(n*a+x.b**2)),s=Math.sqrt(n**2+2*n*a+(x.a**4-(x.a**4-x.b**4)*i**2)/(x.a**2-(x.a**2-x.b**2)*i**2)),c=Math.cos(o),l=Math.sin(o),u=1/(l+(l===0?1e-8:0));w[0][0]=1,w[1][1]=l,w[1][0]=c,T[1][0]=-l,T[1][1]=c;for(var d=2;d<=12;d++)w[d][d]=w[d-1][d-1]*l*fe[d],T[d][d]=(T[d-1][d-1]*l+w[d-1][d-1]*c)*fe[d];for(var f=0;f<=12;f++)for(var d=Math.max(f+1,2);d<=12;d++)w[d][f]=(w[d-1][f]*c*(2*d-1)-w[d-2][f]*E[f][d][0])*E[f][d][1],T[d][f]=((T[d-1][f]*c-w[d-1][f]*l)*(2*d-1)-T[d-2][f]*E[f][d][0])*E[f][d][1];for(var p=ie(),d=1;d<=12;d++)for(var f=0;f<=12;f++)ce[d][f]=ee[d][f]+p*ne[d][f],le[d][f]=te[d][f]+p*re[d][f];for(var f=0;f<=12;f++)ue[f]=Math.sin(f*C(t)),de[f]=Math.cos(f*C(t));for(var m=0,h=0,g=0,_=x.r0/s,v=_**2,d=1;d<=12;d++){for(var y=0,b=0,S=0,f=0;f<=d;f++){var D=ce[d][f]*de[f]+le[d][f]*ue[f];y+=D*w[d][f],b+=D*T[d][f],S+=f*(ce[d][f]*ue[f]-le[d][f]*de[f])*w[d][f]}v*=_,m+=(d+1)*y*v,h-=b*v,g+=S*v*u}var O=o-(Math.PI/2-C(e)),k=Math.sin(O),pe=Math.cos(O),A=-h*pe-m*k,j=g,M=h*k-m*pe,me=A!==0||j!==0?ae(se(Math.atan2(j,A)),2):0,he=j!==0||A!==0&&M!==0?oe(se(Math.atan2(M*Math.sin(Math.atan2(j,A)),j))):0;return{declination:ae(me,2),inclination:ae(he,2),intensity:Math.round(Math.sqrt(A**2+j**2+M**2)),northIntensity:Math.round(A),eastIntensity:Math.round(j),verticalIntensity:Math.round(M),horizontalIntensity:Math.round(Math.sqrt(A**2+j**2))}},A=class e extends Error{static DEFAULT_MESSAGE=`It seems that you ask for IMU events on a desktop browser`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},j=class e extends Error{static DEFAULT_MESSAGE=`Impossible to retrieve events, a sensor is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}from(e){return this.message+=` from `+e,this}},M=class extends j{constructor(e){super(e)}},me=class e extends Error{static DEFAULT_MESSAGE=`Geolocation api is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},he=class e extends Error{static DEFAULT_MESSAGE=`Geolocation permission denied`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},ge=class e extends Error{static DEFAULT_MESSAGE=`Geolocation position unavailable`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},_e={DEFAULT_ALTITUDE:1.6},N=new class e extends y{static DEFAULT_DISCARD_POSITIONS_ABOVE=50;discardPositionsAbove=e.DEFAULT_DISCARD_POSITIONS_ABOVE;enableHighAccuracy=!0;geoLocationId;getName=()=>`GnssWifi`;get positionOptions(){return{enableHighAccuracy:this.enableHighAccuracy,timeout:1/0,maximumAge:0}}availability(){return typeof navigator==`object`&&navigator.geolocation?Promise.resolve():Promise.resolve(new me)}start(){navigator.geolocation.getCurrentPosition(this.onNewPosition,this.onPositionError,this.positionOptions),setTimeout(()=>{this.geoLocationId=navigator.geolocation.watchPosition(this.onNewPosition,this.onPositionError,this.positionOptions)},150)}stop(){this.geoLocationId!==void 0&&navigator.geolocation.clearWatch(this.geoLocationId)}onNewPosition=e=>{let{coords:r}=e;if(!r)return;let a;r.heading&&(a=(0,n.deg2rad)(r.heading));let o=i.TimeUtils.unixTimestampToPreciseTime(e.timestamp)/1e3,s=new t.UserPosition(r.latitude,r.longitude,_e.DEFAULT_ALTITUDE,null,o,r.accuracy,a);this.enableHighAccuracy&&typeof this.discardPositionsAbove==`number`&&r.accuracy>this.discardPositionsAbove||this.notify(s)};onPositionError=e=>{g.warn(`[Providers] watchPosition error: [${e.code}] ${e.message}`);let t;switch(e.code){case 1:t=new he(e.message);break;case 2:t=new ge(e.message);break;default:t=Error(e.message)}this.notifyError(t)}},ve=class e extends Error{static DEFAULT_MESSAGE=`ARCore is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},ye=class e extends Error{static DEFAULT_MESSAGE=`Native interface is missing. You are maybe trying to execute a code which is not available in a web browser`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},P=new class e extends y{static Payload={Pose:{ref:1,size:7},Barcode:{ref:2**1,size:1},ProjMat:{ref:2**2,size:16},ImageRef:{ref:2**3,size:1}};static RELATIVE_ATTITUDE_DRIFT=(0,n.deg2rad)(3)/60;_nativeProvider;previousPosition=[0,0,0];getName=()=>`ArCore`;availability(){try{if(!this.nativeProvider.checkAvailability())return Promise.resolve(new ve)}catch(e){return Promise.resolve(e)}return Promise.resolve()}start(){this.nativeProvider?.start(),this.pullDataLoop()}stop(){this.nativeProvider?.stop()}pullDataLoop=()=>{if(this.state===`stopped`)return;let e=JSON.parse(this.nativeProvider.getInfo());e.length>1&&this.parsePayload(e),requestAnimationFrame(this.pullDataLoop)};parsePayload(n){let r=n[0],a=1,o,c,l,u,d=i.TimeUtils.preciseTime()/1e3;if(r&e.Payload.Pose.ref){o=new s(n.slice(a,a+4),d,e.RELATIVE_ATTITUDE_DRIFT);let r=[n[a+4],n[a+5],n[a+6]];c=new t.RelativePosition(r[0]-this.previousPosition[0],r[1]-this.previousPosition[1],r[2]-this.previousPosition[2],d,1e-4),this.previousPosition=r,a+=e.Payload.Pose.size}r&e.Payload.Barcode.ref&&(u=n[a],a+=e.Payload.Barcode.size),r&e.Payload.ProjMat.ref&&(l=n.slice(a,a+e.Payload.ProjMat.size),a+=e.Payload.ProjMat.size),this.notify({relativePosition:c,relativeAttitude:o,...u&&{barcode:u},...l&&{cameraProjection:l}})}get nativeProvider(){if(!this._nativeProvider){if(!this.nativeInterface)throw new ye;if(this._nativeProvider=this.nativeInterface.getArCoreProvider(),!this._nativeProvider)throw new ve}return this._nativeProvider}enableBarcodeScanner(){try{this.nativeProvider.enableBarcodeScanner()}catch(e){this.notifyError(e)}}disableBarcodeScanner(){try{this.nativeProvider.disableBarcodeScanner()}catch(e){this.notifyError(e)}}get useCameraNatively(){return!0}},be=new class extends y{absoluteAttitudeProviderId;arCoreProviderId;absoluteAttitudeEvent;getName=()=>`GeoRelativePositionFromArCore`;availability(){return b.every([P.getAvailability(),X.getAvailability()])}start(){this.arCoreProviderId=P.addEventListener(this.onArCoreEvents,this.notifyError),this.absoluteAttitudeProviderId=X.addEventListener(e=>this.absoluteAttitudeEvent=e,this.notifyError)}stop(){P.removeEventListener(this.arCoreProviderId),X.removeEventListener(this.absoluteAttitudeProviderId)}onArCoreEvents=e=>{let t=e.relativeAttitude,n=e.relativePosition;t&&n&&this.absoluteAttitudeEvent&&this.compute(n,t,this.absoluteAttitudeEvent)};compute(e,n,r){let i=r.heading-n.heading,a=Math.cos(i)*e.x-Math.sin(i)*e.z,o=-Math.sin(i)*e.x-Math.cos(i)*e.z,s=e.y,c=new t.GeoRelativePosition(a,o,s,e.time,0,r.heading);this.notify(c)}},xe={acc:.5,gyr:.3},Se={acc:.5,gyr:.3,yc:2},Ce=class{P;accRef;cRef;noises;quaternion;constructor(e=[0,0,1],t=[-1,0,0]){this.accRef=e,this.cRef=t,this.P=n.Matrix4.fromDiagVector([,,,,].fill(.1**2)),this.quaternion=null,this.noises={},this.setRelativeNoises(xe),this.setAbsoluteNoises(Se)}setRelativeNoises(e){this.noises.relative={acc:n.Matrix3.diag([,,,].fill(e.acc**2)),gyr:n.Matrix3.diag([,,,].fill(e.gyr**2))}}setAbsoluteNoises(e){this.noises.absolute={acc:n.Matrix3.diag([,,,].fill(e.acc**2)),gyr:n.Matrix3.diag([,,,].fill(e.gyr**2)),yc:n.Matrix3.diag([,,,].fill(e.yc**2))}}tryInitialize(e,t){let r=n.Vector3.normalize(e);if(t){let e=n.Vector3.normalize(t),i=n.Vector3.normalize(n.Vector3.cross(e,r)),a=n.Vector3.cross(r,i),o=[[i[0],a[0],r[0]],[i[1],a[1],r[1]],[i[2],a[2],r[2]]];this.quaternion=n.Quaternion.fromMatrix3Matlab(o)}else{let e=n.Vector3.dot(r,this.accRef)+1,t=n.Vector3.cross(r,this.accRef),i=[e,t[0],t[1],t[2]];i=n.Quaternion.normalize(i),this.quaternion=i}return this.quaternion}update(e,t,r,i){if(!this.quaternion)return this.tryInitialize(t,i);let a=this.quaternion,o=a,s=n.Vector3.multiplyScalar(r,.5*e),c=this.computeC([1,s[0],s[1],s[2]]),l=n.Matrix4.multiplyVector(c,a),u=n.Matrix3.diag([o[0],o[0],o[0]]),d=n.Matrix3.skew([o[1],o[2],o[3]]),f=[-1*o[1],-1*o[2],-1*o[3]],p=n.Matrix.concatRow([f],n.Matrix3.sum(d,u)),m=n.Matrix4.multiplyScalar(n.Matrix.multiply(n.Matrix.multiply(p,this.noises[i?`absolute`:`relative`].gyr),n.Matrix.transpose(p)),(e/2)**2),h=n.Matrix4.sum(n.Matrix4.multiply(n.Matrix4.multiply(c,this.P),n.Matrix4.transpose(c)),m),g=n.Vector3.normalize(t),_,v,y;if(i){let e=n.Vector3.normalize(i),t=n.Vector3.cross(g,e),r=n.Vector3.normalize(t),a=n.Vector3.subtract(r,n.Quaternion.rotateMatlab(l,this.cRef)),o=n.Vector3.subtract(g,n.Quaternion.rotateMatlab(l,this.accRef));_=n.Vector.concat(a,o);let s=this.jacobianES(l,this.cRef),c=this.jacobianES(l,this.accRef);y=n.Matrix.concatRow(s,c);let u=n.Matrix.concatLine(this.noises.absolute.yc,n.Matrix3.zeros),d=n.Matrix.concatLine(n.Matrix3.zeros,this.noises.absolute.acc),f=n.Matrix.concatRow(u,d);v=n.Matrix.multiply(n.Matrix.multiply(h,n.Matrix.transpose(y)),n.Matrix.inverse(n.Matrix.sum(n.Matrix.multiply(n.Matrix.multiply(y,h),n.Matrix.transpose(y)),f)))}else{_=n.Vector3.subtract(g,n.Quaternion.rotateMatlab(l,this.accRef)),y=this.jacobianES(l,this.accRef);let e=this.noises.relative.acc;v=n.Matrix.multiply(n.Matrix.multiply(h,n.Matrix.transpose(y)),n.Matrix3.inverse(n.Matrix3.sum(n.Matrix.multiply(n.Matrix.multiply(y,h),n.Matrix.transpose(y)),e)))}a=n.Quaternion.sum(l,n.Matrix.multiplyVector(v,_));let b=n.Matrix4.multiply(n.Matrix4.subtract(n.Matrix4.identity,n.Matrix.multiply(v,y)),h);return a=n.Quaternion.normalize(a),this.quaternion=a,this.P=b,a}computeC(e){return[[e[0],-e[1],-e[2],-e[3]],[e[1],e[0],e[3],-e[2]],[e[2],-e[3],e[0],e[1]],[e[3],e[2],-e[1],e[0]]]}jacobianES(e,t){let[n,r,i,a]=e,[o,s,c]=t;return[[2*a*s-2*i*c,2*i*s+2*a*c,2*r*s-2*n*c-4*i*o,2*n*s+2*r*c-4*a*o],[2*r*c-2*a*o,2*n*c-4*r*s+2*i*o,2*r*o+2*a*c,2*i*c-2*n*o-4*a*s],[2*i*o-2*r*s,2*a*o-4*r*c-2*n*s,2*n*o-4*i*c+2*a*s,2*r*o+2*i*s]]}},F=new class extends y{getName=()=>`IMU`;availability(){return i.BrowserUtils.isMobile?Promise.resolve():Promise.resolve(new A)}start(){let e=()=>window.addEventListener(`devicemotion`,this.parseDeviceMotionEvent,!0),t=DeviceMotionEvent.requestPermission||void 0;t?t().then(t=>{if(t!==`granted`)throw Error(`Permission not granted`);e()}).catch(this.notifyError):e()}stop(){window.removeEventListener(`devicemotion`,this.parseDeviceMotionEvent,!0)}parseDeviceMotionEvent=e=>{let t=e.timeStamp/1e3,r;if(e.accelerationIncludingGravity){let{x:t,y:n,z:a}=e.accelerationIncludingGravity;typeof t==`number`&&typeof n==`number`&&typeof a==`number`&&(r=[t,n,a],(i.BrowserUtils.getName()===i.Browser.SAFARI||i.BrowserUtils.getName()===i.Browser.IOS_WEBVIEW)&&(r[0]*=-1,r[1]*=-1,r[2]*=-1))}let a;if(e.rotationRate){let{alpha:t,beta:r,gamma:i}=e.rotationRate;typeof t==`number`&&typeof r==`number`&&typeof i==`number`&&(a=[(0,n.deg2rad)(t),(0,n.deg2rad)(r),(0,n.deg2rad)(i)])}(r||a)&&this.notify({...r&&{acceleration:{timestamp:t,values:r}},...a&&{angularRate:{timestamp:t,values:a}}})}},we=class e extends j{static DEFAULT_MESSAGE=`Impossible to retrieve Acceleration data`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},I=new class extends y{imuProviderId;getName=()=>`Accelerometer`;availability=()=>F.getAvailability();start(){this.imuProviderId=F.addEventListener(e=>{e.acceleration?this.notify(e.acceleration):this.notifyError(new we().from(`devicemotion`))},this.notifyError)}stop(){F.removeEventListener(this.imuProviderId)}},Te=class extends j{static DEFAULT_MESSAGE=`Impossible to retrieve Angular Rate data`;constructor(e){super(e||j.DEFAULT_MESSAGE)}},L=new class extends y{imuProviderId;getName=()=>`Gyroscope`;availability=()=>F.getAvailability();start(){this.imuProviderId=F.addEventListener(e=>{e.angularRate?this.notify(e.angularRate):this.notifyError(new Te().from(`devicemotion`))},this.notifyError)}stop(){F.removeEventListener(this.imuProviderId)}},Ee=new class e extends y{static DEFAULT_DRIFT=(0,n.deg2rad)(5)/60;accelerometerProviderId;ekfAttitude=new Ce;gyroscopeEvent;gyroscopeProviderId;lastTimestamp=0;getName=()=>`RelativeAttitudeFromEkf`;availability(){return b.every([I.getAvailability(),L.getAvailability()])}start(){this.accelerometerProviderId=I.addEventListener(e=>this.onAccelerometerEvent(e),e=>this.notifyError(e)),this.gyroscopeProviderId=L.addEventListener(e=>this.gyroscopeEvent=e,e=>this.notifyError(e))}stop(){I.removeEventListener(this.accelerometerProviderId),L.removeEventListener(this.gyroscopeProviderId)}onAccelerometerEvent=t=>{if(!this.gyroscopeEvent)return;let{values:n,timestamp:r}=t;if(this.lastTimestamp===0){this.lastTimestamp=r;return}let i=r-this.lastTimestamp;this.lastTimestamp=r;let a=this.ekfAttitude.update(i,n,this.gyroscopeEvent.values);if(a){let t=new s(a,r,e.DEFAULT_DRIFT);this.notify(t)}}},R=new class e extends y{static DEFAULT_DRIFT=(0,n.deg2rad)(5)/60;getName=()=>`RelativeAttitudeFromBrowser`;availability(){return i.BrowserUtils.isMobile?Promise.resolve():Promise.resolve(new A)}start(){let e=()=>window.addEventListener(`deviceorientation`,this.onDeviceOrientationEvent,!0),t=DeviceOrientationEvent.requestPermission||void 0;t?t().then(t=>{if(t!==`granted`)throw Error(`Permission not granted`);e()}).catch(e=>this.notifyError(e)):e()}stop(){window.removeEventListener(`deviceorientation`,this.onDeviceOrientationEvent,!0)}onDeviceOrientationEvent=t=>{if(typeof t.alpha!=`number`||typeof t.beta!=`number`||typeof t.gamma!=`number`){this.notifyError(new j().from(`deviceorientation`));return}let r=new s(n.Rotations.eulerToQuaternionZXYDegrees([t.alpha,t.beta,t.gamma]),t.timeStamp/1e3,e.DEFAULT_DRIFT);this.notify(r)}},z=new class e extends y{static THRESHOLD=10;static DELAY_CONSIDERATION=3;gyroscopeProviderId;getName=()=>`HighRotationsProvider`;availability=()=>L.getAvailability();start(){this.gyroscopeProviderId=L.addEventListener(this._parseGyroscopeEvent,this.notifyError)}stop(){L.removeEventListener(this.gyroscopeProviderId)}isInProgress(){return!this.lastEvent||!L.lastEvent?!1:L.lastEvent.timestamp-this.lastEvent.timestamp<e.DELAY_CONSIDERATION}_parseGyroscopeEvent=t=>{let{values:r,timestamp:i}=t;n.Vector3.norm(r)>e.THRESHOLD&&this.notify({timestamp:i})}},B=new class e extends y{static DEFAULT_DRIFT=(0,n.deg2rad)(5)/60;_highRotationsProviderId;listenerId;provider;getName=()=>`RelativeAttitudeFromInertial`;availability(){return b.some([Ee.getAvailability(),R.getAvailability()])}start(){Ee.getAvailability().then(e=>{this.provider=e?R:Ee,this.listenerId=this.provider.addEventListener(e=>this._parseEvent(e),this.notifyError),this._highRotationsProviderId=z.addEventListener(null,this.notifyError)})}_parseEvent(t){let n=t.clone();if(z.isInProgress()){let t=(n.accuracy||0)+e.DEFAULT_DRIFT*100;t=Math.min(t,Math.PI),n.accuracy=t}this.notify(n)}stop(){this.provider&&(this.provider.removeEventListener(this.listenerId),delete this.provider),z.removeEventListener(this._highRotationsProviderId)}},De=class e{static MIN_TIME_BETWEEN_STEPS=.4;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=1;frequency=0;lastVerticalAcc=0;maxAcceleration=0;lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;compute(t,n){let r=!1,i=n[2],a=t-this.lastStepTimestamp;if(i>this.lastVerticalAcc)i>this.maxAcceleration&&(this.maxAcceleration=i);else if(this.maxAcceleration>e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&a>e.MIN_TIME_BETWEEN_STEPS){this.maxAcceleration=0;let n=t-this.lastStepTimestamp;this.frequency=Math.min(Math.max(1/n,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),r=!0,this.lastStepTimestamp=t}else this.maxAcceleration=0;return this.lastVerticalAcc=i,r}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepTimestamp?this.lastStepSize*this.frequency:0}},Oe=class e{static WINDOW_TIME=.3;static MIN_TIME_BETWEEN_STEPS=.4;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=1.5;static VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD=-1;frequency=0;lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;slidingWindow=[];compute(t,n){if(this.lastStepTimestamp&&this.lastStepTimestamp+e.MIN_TIME_BETWEEN_STEPS>t)return!1;let r=-(2**53-1),i=2**53-1,a=e.WINDOW_TIME;if(this.slidingWindow.forEach((e,n,o)=>{e.timestamp<t-a?o.splice(n,1):(r=Math.max(e.verticalAcc,r),i=Math.min(e.verticalAcc,i))}),this.slidingWindow.push({timestamp:t,verticalAcc:n[2]}),r>e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&i<e.VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD){let n=this.lastStepTimestamp?t-this.lastStepTimestamp:1;return this.frequency=Math.min(Math.max(1/n,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),this.lastStepTimestamp=t,!0}return!1}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepTimestamp?this.lastStepSize*this.frequency:0}},ke=class e{static WINDOW_TIME=.3;static MIN_TIME_BETWEEN_STEPS=.4;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=.75;static VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD=-.3;frequency=0;influence=.2;slidingWindow=[];lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;previousVerticalAcc=0;compute(t,n,r){let i=this.influence*(n[2]*2)+(1-this.influence)*this.previousVerticalAcc;if(this.previousVerticalAcc=i,Math.sqrt(r[0]**2+r[1]**2+r[2]**2)>.75||this.lastStepTimestamp&&this.lastStepTimestamp+e.MIN_TIME_BETWEEN_STEPS>t)return!1;let a=-(2**53-1),o=2**53-1;if(this.slidingWindow.forEach((n,r,i)=>{n.timestamp<t-e.WINDOW_TIME?i.splice(r,1):(a=Math.max(n.verticalAcc,a),o=Math.min(n.verticalAcc,o))}),this.slidingWindow.push({timestamp:t,verticalAcc:i}),a>e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&o<e.VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD){let n=this.lastStepTimestamp?t-this.lastStepTimestamp:1;return this.frequency=Math.min(Math.max(1/n,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),this.lastStepTimestamp=t,!0}return!1}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepSize&&this.frequency?this.lastStepSize*this.frequency:0}mean(e){let t=0,n=0;for(let n=0;n<e.length;++n)t+=e[n].verticalAcc;return n=t/e.length,n}stddev(e){let t=this.mean(e),n=0;for(let r=0;r<e.length;++r)n+=(e[r].verticalAcc-t)**2;return Math.sqrt(n/e.length)}},Ae=class e{static WINDOW_TIME=.6;static MIN_TIME_BETWEEN_STEPS=.6;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=.2;static VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD=-.1;frequency=0;influence=.05;slidingWindow=[];lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;previousVerticalAcc=0;previousHorizontalAcc=0;compute(t,n){let r=this.influence*n[2]+(1-this.influence)*this.previousVerticalAcc;if(this.previousVerticalAcc=r,this.slidingWindow=this.slidingWindow.filter(n=>n.timestamp>=t-e.WINDOW_TIME),this.slidingWindow.push({timestamp:t,verticalAcc:r}),this.lastStepTimestamp&&this.lastStepTimestamp+e.MIN_TIME_BETWEEN_STEPS>t)return!1;let i=Number.MIN_VALUE,a=-1,o=!1;if(this.slidingWindow.forEach((t,n)=>{t.verticalAcc>i&&t.verticalAcc>=e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&(i=t.verticalAcc,a=n,o=!0)}),!o)return!1;let s=!1,c=Number.MAX_VALUE;for(let t=0;t<a;t++){let n=this.slidingWindow[t].verticalAcc;if(c=Math.min(c,n),n<e.VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD){s=!0;break}}if(!s)return!1;let l=i-c,u=i-.5*l,d=!1;for(let e=a+1;e<this.slidingWindow.length;e++)if(this.slidingWindow[e].verticalAcc<=u){d=!0;break}if(!d)return!1;let f=this.lastStepTimestamp?t-this.lastStepTimestamp:1;return this.frequency=Math.min(Math.max(1/f,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),this.lastStepTimestamp=t,!0}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepSize&&this.frequency?this.lastStepSize*this.frequency:0}mean(e){let t=0,n=0;for(let n=0;n<e.length;++n)t+=e[n];return n=t/e.length,n}stddev(e){let t=this.mean(e),n=0;for(let r=0;r<e.length;++r)n+=(e[r]-t)**2;return Math.sqrt(n/e.length)}},V=new class e extends y{static DEFAULT_STEP_SIZE_MULTIPLIER=1;static DEFAULT_ALGORITHM=`minMaxPeaks3`;accelerometerProviderId;attitudeProviderId;gyroscopeProviderId;angularRateEvent;attitudeEvent;numOfSteps=0;stepDetector;_stepSizeMultiplier=e.DEFAULT_STEP_SIZE_MULTIPLIER;_algorithm=e.DEFAULT_ALGORITHM;_accValues=[];constructor(){super(),this.algorithm=this._algorithm}getName=()=>`StepDetector`;availability(){return b.every([I.getAvailability(),L.getAvailability(),B.getAvailability()])}start(){this.numOfSteps=0,this.accelerometerProviderId=I.addEventListener(this.onAccelerometerEvent,this.notifyError),this.gyroscopeProviderId=L.addEventListener(e=>this.angularRateEvent=e,this.notifyError),this.attitudeProviderId=B.addEventListener(e=>this.attitudeEvent=e,this.notifyError)}stop(){I.removeEventListener(this.accelerometerProviderId),L.removeEventListener(this.gyroscopeProviderId),B.removeEventListener(this.attitudeProviderId)}onAccelerometerEvent=t=>{if(!this.attitudeEvent||!this.angularRateEvent)return;let{values:n,timestamp:r}=t,i=e.computeLinearAcceleration(this.attitudeEvent.quaternion,n);if(this.stepDetector.compute(r,i,this.angularRateEvent.values)){let e=this.stepDetector.lastStepSize*this._stepSizeMultiplier;this.numOfSteps++,this.notify({size:e,number:this.numOfSteps})}};static computeLinearAcceleration(e,r){let i=n.Quaternion.rotateMatlab(n.Quaternion.inverse(e),r);return i[2]-=t.Constants.EARTH_GRAVITY,i}set stepSizeMultiplier(e){this._stepSizeMultiplier=e}get stepSizeMultiplier(){return this._stepSizeMultiplier}set algorithm(e){switch(e){case`ladetto`:this.stepDetector=new De;break;case`minMaxPeaks`:this.stepDetector=new Oe;break;case`minMaxPeaks2`:this.stepDetector=new ke;break;default:e=`minMaxPeaks3`,this.stepDetector=new Ae;break}this._algorithm=e}get algorithm(){return this._algorithm}},je=new class extends y{absoluteAttitudeProviderId;stepDetectionProviderId;attitudeEvent;misalignmentError=(0,n.deg2rad)(3);getName=()=>`Pdr`;availability(){return b.every([V.getAvailability(),X.getAvailability()])}start(){this.stepDetectionProviderId=V.addEventListener(this.onStepEvent,this.notifyError),this.absoluteAttitudeProviderId=X.addEventListener(e=>this.attitudeEvent=e,this.notifyError)}stop(){V.removeEventListener(this.stepDetectionProviderId),X.removeEventListener(this.absoluteAttitudeProviderId)}onStepEvent=e=>{if(!this.attitudeEvent)return;let n=e.size,r=this.attitudeEvent,i=r.heading,a=r.accuracy+this.misalignmentError,o=n/2*Math.sin(a/2),s=r.time,c=new t.GeoRelativePosition(n*Math.sin(i),n*Math.cos(i),0,s,o,i);this.notify(c)}},H=new class extends y{providerId;geoRelativeProvider;getName=()=>`GeoRelativePosition`;availability(){return b.some([je.getAvailability(),be.getAvailability()])}async start(){let e=await be.getAvailability();this.geoRelativeProvider=e?je:be,this.providerId=this.geoRelativeProvider.addEventListener(this.notify,this.notifyError)}stop(){this.geoRelativeProvider?.removeEventListener(this.providerId),delete this.geoRelativeProvider}},Me={name:`@wemap/providers`,version:`14.7.1`,description:`Sensor, positioning and VPS providers for the Wemap SDK.`,license:`UNLICENSED`,author:`Wemap SAS`,homepage:`https://github.com/wemap/wemap-sdk-js#readme`,repository:{type:`git`,url:`git+https://github.com/wemap/wemap-sdk-js.git`,directory:`packages/providers`},bugs:{url:`https://github.com/wemap/wemap-sdk-js/issues`},keywords:[`wemap`,`sdk`,`providers`,`vps`],type:`module`,publishConfig:{access:`public`},main:`./dist/index.js`,types:`./dist/index.d.ts`,exports:{".":{import:`./dist/index.js`,types:`./dist/index.d.ts`}},sideEffects:!1,files:[`dist`],dependencies:{"@wemap/camera":`14.7.1`,"@wemap/core":`14.7.1`,"@wemap/geo":`14.7.1`,"@wemap/maths":`14.7.1`,"@wemap/osm":`14.7.1`,"@wemap/routers":`14.7.1`,"@wemap/utils":`14.7.1`},devDependencies:{"@wemap/logger-legacy":`^13.3.0`,geomag:`^1.0.0`}},Ne=new class extends y{providerId;getName=()=>`InclinationFromAcc`;availability=()=>I.getAvailability();start(){this.providerId=I.addEventListener(this.onAccelerometerEvent,this.notifyError)}stop(){I.removeEventListener(this.providerId)}onAccelerometerEvent=e=>{let t=e.values,n=window.orientation||0,r=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]),i=[t[0]/r,t[1]/r,t[2]/r],a=[i[2]+1,i[1],-i[0],0],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),s=[a[0]/o,a[1]/o,a[2]/o,0],c;c=n===0?Math.asin(2*s[1]*s[0]):n===90?-Math.asin(2*s[2]*s[0]):n===-90?Math.asin(2*s[2]*s[0]):-Math.asin(2*s[1]*s[0]),this.notify(c)}},U=new class extends y{providerId;getName=()=>`InclinationFromRelativeAttitude`;availability=()=>B.getAvailability();start(){this.providerId=B.addEventListener(e=>{let t=this.enuQuatToInclination(e.quaternion);this.notify(t)},this.notifyError)}stop(){B.removeEventListener(this.providerId)}enuQuatToInclination(e){let t=window.orientation||0;return t===0?Math.asin(2*(e[2]*e[3]+e[1]*e[0])):t===90?Math.asin(2*(e[1]*e[3]-e[2]*e[0])):t===-90?Math.asin(2*(e[2]*e[0]-e[1]*e[3])):-Math.asin(2*(e[2]*e[3]+e[1]*e[0]))}},W=new class extends y{provider;providerId;getName=()=>`Inclination`;availability(){return b.some([Ne.getAvailability(),U.getAvailability()])}async start(){let e=()=>{this.provider=Ne,this.providerId=this.provider.addEventListener(this.notify,this.notifyError)};await U.getAvailability()?(this.provider=U,this.providerId=this.provider.addEventListener(this.notify,()=>{U.removeEventListener(this.providerId),e()})):e()}stop(){this.provider&&this.provider.removeEventListener(this.providerId)}},Pe=class e{size;calibration;coarse;device;constructor(e,t=null,n=null,r=null){this.size=e,this.calibration=t,this.coarse=n,this.device=r}toJson(){return{size:[this.size.width,this.size.height],...this.calibration&&{calibration:this.calibration},...this.coarse&&{coarse:{...this.coarse.attitude&&{attitude:this.coarse.attitude.toJson()},...this.coarse.position&&{position:this.coarse.position.toJson()}}},...this.device!==null&&{device:this.device}}}static fromJson(n){return new e({width:n.size[0],height:n.size[1]},n.calibration,{...n.coarse?.position&&{position:t.UserPosition.fromJson(n.coarse.position)},...n.coarse?.attitude&&{attitude:t.Attitude.fromJson(n.coarse.attitude)}},n.device)}},Fe=class e{metadata;image;imageQuality;localPose;constructor(e,t,n=.8,r=null){this.metadata=e,this.image=t,this.imageQuality=n,this.localPose=r}toJson(){return{image:(0,a.canvasToBase64)(this.image,`image/jpeg`,this.imageQuality),...this.localPose&&{local_pose:this.localPose},...this.metadata.toJson()}}static fromJson(t){return new e(Pe.fromJson(t),(0,a.base64ToCanvas)(t.image))}toFormData(){let e=this.image.toDataURL(`image/jpeg`,this.imageQuality).split(`,`)[1]||``,t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);let r=new FormData;r.append(`image`,new Blob([n],{type:`image/jpeg`}),`image.jpg`);let i=this.metadata.toJson();return i.calibration&&r.append(`calibration`,JSON.stringify(i.calibration)),i.coarse&&r.append(`coarse`,JSON.stringify(i.coarse)),i.device&&r.append(`device`,JSON.stringify(i.device)),this.localPose&&r.append(`local_pose`,JSON.stringify(this.localPose)),r}},Ie=class e{success;attitude;position;constructor(e,t=null,n=null){this.success=e,this.attitude=t,this.position=n}toJson(){return{success:this.success,attitude:this.attitude?.toJson(),position:this.position?.toJson()}}static fromJson(n,r=null){let i=null;n.attitude&&(i=t.Attitude.fromJson(n.attitude),i.time=r);let a=null;return n.position&&(a=t.UserPosition.fromJson(n.position),a.time=r),new e(n.success,i,a)}},Le=class{static REQUEST_TIMEOUT_MS=2e4;static _prepareRequest(e,t=null,n=null,r=null,o=null){let s=(0,a.reduceImageSize)(e,720,720),c=i.UserAgentUtils.getDeviceFromUserAgent()||{};return r&&(c.session_id=r.session_id,c.installation_id=r.installation_id,c.attempt_id=r.attempt_id,c.caller=r.caller),new Fe(new Pe({width:s.width,height:s.height},t,n,c),s,.8,o)}static async relocalize(e,t,n=null,r=null,a=null,o=null,s=null){let c=i.TimeUtils.preciseTime()/1e3,l=this._prepareRequest(t,n,r,a,o),u;try{let t=l.toFormData();u=await fetch(e,{method:`POST`,body:t,signal:AbortSignal.timeout(this.REQUEST_TIMEOUT_MS),headers:Object.assign({Accept:`application/vnd.geopose+json; version=1`},s||{})})}catch{return g.debug(`[VPS] Server respond error`),null}if(u.status!==200)return g.debug(`[VPS] Server respond error`),null;let d=await u.json(),f=Ie.fromJson(d,c);return g.debug(`[VPS] Server respond ${f.success?`success`:`not found`}`),f}static getHeadingFromQuaternion(e){let[t,n,r,i]=e,a=Math.sqrt(2)/2,o=[a*(t-n),a*(t+n),a*(r+i),a*(i-r)];return-Math.atan2(2*o[3]*o[0]-2*o[2]*o[1],1-2*o[1]**2-2*o[3]**2)}},G=new class extends y{arCoreMonitoringId;arCoreProviderId;inertialProviderId;getName=()=>`RelativeAttitude`;availability=()=>B.getAvailability();start(){this.arCoreMonitoringId=P.addMonitoringListener(()=>{this.listenArCore(),this.unlistenInertial()},()=>{this.unlistenArCore(),this.listenInertial()}),P.state===`started`?this.listenArCore():this.listenInertial()}stop(){P.removeMonitoringListener(this.arCoreMonitoringId),this.unlistenArCore(),this.unlistenInertial()}listenInertial=()=>{this.inertialProviderId=B.addEventListener(this.notify,this.notifyError)};unlistenInertial=()=>{B.removeEventListener(this.inertialProviderId)};listenArCore=()=>{this.arCoreProviderId=P.addEventListener(e=>this.notify(e.relativeAttitude),null,!1)};unlistenArCore=()=>{P.removeEventListener(this.arCoreProviderId)}},Re=class{_providerId;_isRunning=!1;_dataOnStart=null;tickStart(){this._dataOnStart=null,!this._isRunning&&(this._isRunning=!0,this._providerId=R.addEventListener(e=>{this._dataOnStart||=e}))}tickEnd(){if(!this._isRunning)return g.warn(`You have to call tickStart before tickEnd`),null;if(this._internalStop(),!this._dataOnStart)return g.warn(`Delay was too short between tickStart and tickEnd or RelativeAttitudeProvider cannot be retrieved.`),null;let e=R.lastEvent;return t.Attitude.diff(this._dataOnStart,e)}_internalStop(){R.removeEventListener(this._providerId),delete this._providerId,this._isRunning=!1}release(){this._isRunning&&this._internalStop()}},ze=class e extends Error{static DEFAULT_MESSAGE=`PoleStar is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},K=new class extends y{getName=()=>`PoleStar`;constructor(){super(),this.addMethodsToNativeJsProvider()}availability(){try{return this.nativeProvider.checkAvailability(),Promise.resolve()}catch(e){return Promise.resolve(e)}}setApiKey(e){this.nativeProvider.setApiKey(e)}start(){this.nativeProvider.start()}stop(){this.nativeProvider.stop()}get nativeProvider(){if(!this.nativeInterface)throw new ye;let e=this.nativeInterface.getPoleStarProvider();if(!e)throw new ze;return e}addMethodsToNativeJsProvider(){this.nativeJsInterface&&(this.nativeJsInterface.polestar={callbackError:e=>this.notifyError(Error(e)),callbackPosition:e=>{let t=JSON.parse(e),r=i.TimeUtils.unixTimestampToPreciseTime(t.time)/1e3,a=new o(t.lat,t.lng,_e.DEFAULT_ALTITUDE,t.alt/5,r,t.accuracy,(0,n.deg2rad)(t.bearing));this.notify(a)}})}},q=new class e extends y{static MIN_TIME_BETWEEN_TWO_REQUESTS=1e3;static DEFAULT_MAX_SCAN_DURATION=12e4;static DEFAULT_MIN_INCLINATION_FOR_REQUEST=(0,n.deg2rad)(60);static DEFAULT_WAIT_TIME_MIN_INCLINATION_FOR_REQUEST=200;static DEFAULT_USE_COARSE_POSE=!0;static DEFAULT_REQUEST_CALLER=`@wemap/providers(VpsProvider) ${Me.version}`;static CAMERA_TO_SMARTPHONE_ROT=n.Quaternion.fromAxisAngle([1,0,0],Math.PI);static ENU_TO_ARCORE_ROT=n.Quaternion.fromAxisAngle([1,0,0],-Math.PI/2);static _scanFailureCallbackUniqueId=0;_relativeRotationCalc;_serverError=!1;_cameraError=!1;_camera=null;_endpoint=null;_inclinationProviderId;_maxScanDuration=e.DEFAULT_MAX_SCAN_DURATION;_minInclinationForRequest=e.DEFAULT_MIN_INCLINATION_FOR_REQUEST;_waitTimeMinInclinationForRequest=e.DEFAULT_WAIT_TIME_MIN_INCLINATION_FOR_REQUEST;_useCoarsePose=e.DEFAULT_USE_COARSE_POSE;_requestCaller=e.DEFAULT_REQUEST_CALLER;_sessionId;_loopId=0;_attemptIdCounter=0;_currentAttemptId=null;_scanFailureCallbacks=[];constructor(){super(),this._sessionId=this._generateUuid()}getName=()=>`Vps`;availability=()=>a.Camera.checkAvailability();start(){this._inclinationProviderId=W.addEventListener(),this._relativeRotationCalc=new Re,a.SharedCameras.on(`added`,this._onCameraDetected),a.SharedCameras.on(`removed`,this._onCameraRemoved),a.SharedCameras.list.length&&(a.SharedCameras.list.length>1&&g.warn(`It seems that more than 1 camera has been detected for VPS. Taking the first...`),this._useCamera(a.SharedCameras.list[0].camera))}stop(){W.removeEventListener(this._inclinationProviderId),this._relativeRotationCalc?.release(),a.SharedCameras.off(`added`,this._onCameraDetected),a.SharedCameras.off(`removed`,this._onCameraRemoved),this._camera?.off(`started`,this._internalStart),this._camera?.off(`stopped`,this._internalStop),this._camera=null}_onCameraDetected=({camera:e})=>{this._camera&&g.warn(`It seems that more than 1 camera has been detected for VPS. Taking the first...`),this._useCamera(e)};_onCameraRemoved=()=>{this._camera?(this._camera.off(`started`,this._internalStart),this._camera.off(`stopped`,this._internalStop)):g.warn(`There is no previously detected camera but once has stopped`),this._camera=null};_useCamera(e){this._camera=e,e.on(`started`,this._internalStart),e.on(`stopped`,this._internalStop),e.state===`started`&&this._internalStart()}_internalStart=async()=>{if(!this._endpoint){this.notifyError(Error(`VPS endpoint has not been set before calling start()`));return}let r=null,a=++this._loopId,o=()=>this.state===`stopped`||a!==this._loopId,s=this._maxScanDuration>0?i.TimeUtils.preciseTime()+this._maxScanDuration:null;for(;!o();){if(r!==null){let t=i.TimeUtils.preciseTime()-r,n=Math.max(0,e.MIN_TIME_BETWEEN_TWO_REQUESTS-t);await new Promise(e=>setTimeout(e,n))}if(r=i.TimeUtils.preciseTime(),o()||!this._camera||this._camera.state!==`started`)break;if(s!==null&&i.TimeUtils.preciseTime()>s){this.notifyError(Error(`VPS scan gave up after ${this._maxScanDuration} ms without a match`));break}let a=W.lastEvent?W.lastEvent:null;if(a!==null&&a<this._minInclinationForRequest){await new Promise(e=>setTimeout(e,this._waitTimeMinInclinationForRequest));continue}if(typeof document<`u`&&document.hidden){await new Promise(e=>setTimeout(e,this._waitTimeMinInclinationForRequest));continue}this._relativeRotationCalc?.tickStart();let l=await this._camera.currentImage;if(!l)continue;let u=null,d=J.getBestPositionEvent(N.lastEvent,K.lastEvent);this._useCoarsePose&&(d||X.lastEvent)&&(u={...d&&{position:d},...X.lastEvent&&{attitude:X.lastEvent}}),this._currentAttemptId===null&&(this._attemptIdCounter+=1,this._currentAttemptId=this._attemptIdCounter);let f=G.lastEvent,p=H.lastEvent,m=f&&p?{position:n.Quaternion.rotate(e.ENU_TO_ARCORE_ROT,[p.x,p.y,p.z]),orientation:n.Quaternion.multiply(e.ENU_TO_ARCORE_ROT,f.quaternion)}:null,h=await Le.relocalize(this._endpoint,l,null,u,{session_id:this._sessionId,installation_id:null,...this._currentAttemptId!==null&&{attempt_id:this._currentAttemptId},caller:this._requestCaller},m);if(!h||!h.success){this._scanFailureCallbacks.forEach(({id:e,callback:t})=>t({listenerId:e,sessionId:this._sessionId,attemptId:this._currentAttemptId}));continue}this._currentAttemptId=null;let g=h.attitude.quaternion,_=n.Quaternion.multiply(g,e.CAMERA_TO_SMARTPHONE_ROT),v=n.Quaternion.multiply(n.Quaternion.fromAxisAngle([0,0,1],(0,n.deg2rad)(window.orientation||0)),_),y=this._relativeRotationCalc?.tickEnd()||new t.Attitude([1,0,0,0]),b=new c(n.Quaternion.multiply(v,y.quaternion),h.attitude.time,h.attitude.accuracy),ee=h.position.clone();if(ee.accuracy===null&&(ee.accuracy=5),o())break;this.notify({absoluteAttitude:b,absolutePosition:ee})}};_internalStop=()=>{};_generateUuid(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}addScanFailureListener(t){let n=++e._scanFailureCallbackUniqueId;return this._scanFailureCallbacks.push({id:n,callback:t}),n}removeScanFailureListener(e){this._scanFailureCallbacks=this._scanFailureCallbacks.filter(({id:t})=>t!==e)}resetCurrentAttempt(){this._currentAttemptId=null}get endpoint(){return this._endpoint}set endpoint(e){this._endpoint=e}get maxScanDuration(){return this._maxScanDuration}set maxScanDuration(e){this._maxScanDuration=e}get minInclinationForRequest(){return this._minInclinationForRequest}set minInclinationForRequest(e){this._minInclinationForRequest=e}get waitTimeMinInclinationForRequest(){return this._waitTimeMinInclinationForRequest}set waitTimeMinInclinationForRequest(e){this._waitTimeMinInclinationForRequest=e}get useCoarsePose(){return this._useCoarsePose}set useCoarsePose(e){this._useCoarsePose=e}get requestCaller(){return this._requestCaller}set requestCaller(e){this._requestCaller=e}},J=new class e extends y{static ACCURACY_RELOC_RATIO=1;static USE_MM_FOR_FEED=!0;_polestarProviderId;_vpsProviderId;_gnssWifiProviderId;_relativePositionProviderId;_mapMatchingHandlerId;useAllAbsolutePositions=!1;_waitUntilNextVpsPosition=!1;_lastPolestarFix=null;ignoreGnssWifi=!1;_lastKnownLevel=null;getName=()=>`AbsolutePosition`;_adaptBeforeNotify(e){return e.level===null?e.level=this._lastKnownLevel:this._lastKnownLevel=e.level,e}availability(){return b.some([H.getAvailability(),N.getAvailability(),...l.hasPoleStar?[K.getAvailability()]:[],q.getAvailability()])}start(){H.getAvailability().then(e=>{e||(this._relativePositionProviderId=H.addEventListener(e=>this._onRelativePosition(e)))}),this._gnssWifiProviderId=N.addEventListener(e=>{if(this.ignoreGnssWifi)return;let t=e.clone();t.bearing=null,this._onAbsolutePosition(t,`gnss-wifi`,!1)}),this._vpsProviderId=q.addEventListener(e=>this._onAbsolutePosition(e.absolutePosition,`vps`),this.notifyError,!1),l.hasPoleStar&&(this._polestarProviderId=K.addEventListener(e=>{if(this._lastPolestarFix=i.TimeUtils.preciseTime(),!this._onAbsolutePosition(e,`polestar`)&&this.lastEvent?.level===null){let t=this.lastEvent.clone();t.level=e.level,this.notify(t)}})),this._mapMatchingHandlerId=$.addEventListener()}stop(){this._relativePositionProviderId&&(H.removeEventListener(this._relativePositionProviderId),delete this._relativePositionProviderId),this._gnssWifiProviderId&&(N.removeEventListener(this._gnssWifiProviderId),delete this._gnssWifiProviderId),this._vpsProviderId&&(q.removeEventListener(this._vpsProviderId),delete this._vpsProviderId),this._polestarProviderId&&(K.removeEventListener(this._polestarProviderId),delete this._polestarProviderId),$.removeEventListener(this._mapMatchingHandlerId)}_shouldTakeIntoAccountNewAbsolutePosition(n,r=!0){let i=n,a=this.lastEvent||null;if(!a)return!0;let o=i.accuracy*e.ACCURACY_RELOC_RATIO<=a.accuracy;if(o)return!0;let s=a.distanceTo(i)>a.accuracy+i.accuracy;if(s)return!0;let c=s&&i.accuracy<=a.accuracy;return!!(o&&c||r&&!t.Level.equals(i.level,a.level))}_onAbsolutePosition(e,t,n=!0){if(!this._shouldTakeIntoAccountNewAbsolutePosition(e,n)&&!this.useAllAbsolutePositions)return!1;let r=o.fromUserPosition(e,t),i=this.lastEvent?this.lastEvent:null;return i&&(n||(r.level=i.level),r.bearing===null&&(r.bearing=i.bearing)),$.canUseMapMatching()?$.notifyPositionFromAbsolute(r):(this.notify(r),!0)}_onRelativePosition(e){if(!this.lastEvent||this._waitUntilNextVpsPosition)return!1;let t=this.lastEvent,n=e,r=Math.sqrt(n.x**2+n.y**2),i=Math.atan2(n.x,n.y),a=t.alt===null?null:n.z,s=t.destinationPoint(r,i,a);s.bearing=n.bearing,s.time=n.time,s.accuracy+=n.accuracy;let c=o.fromUserPosition(s,`relative`);return $.canUseMapMatching()?$.notifyPositionFromRelative(c):(this.notify(c),!0)}feed(n){let r;if(n instanceof t.UserPosition){if(n.time===null)throw Error(`the time of the position is not defined`);if(n.accuracy===null)throw Error(`the accuracy of the position is not defined`);r=o.fromUserPosition(n,n.source??`feed`)}else throw Error(`data is nor an UserPosition or an AbsolutePositionEvent`);if(!e.USE_MM_FOR_FEED||!$.canUseMapMatching()){this.notify(r);return}$.notifyPositionFromFeed(r)}getBestPositionEvent(...e){return e.reduce((e,t)=>{if(!e)return t;if(!t||t.accuracy===null||t.time===null)return e;let{accuracy:n,time:r}=t,{accuracy:i,time:a}=e;return n<i+1.3888*(r-a)?t:e},null)}},Y=new class e extends y{DEFAULT_ACCURACY=(0,n.deg2rad)(15);absolutePositionProviderId;absolutePositionEvent;declinationQuaternion;magQuaternion;magQuaternionTimestamp;iosPreviousQuat;iosIsSkyMode=null;getName=()=>`AbsoluteAttitudeFromBrowser`;availability(){return i.BrowserUtils.isMobile?Promise.resolve():Promise.resolve(new A)}start(){let e=()=>{switch(i.BrowserUtils.getName()){case i.Browser.CHROME:window.addEventListener(`deviceorientationabsolute`,this.onDeviceOrientationChromeEvent,!0);break;case i.Browser.SAFARI:case i.Browser.IOS_WEBVIEW:window.addEventListener(`deviceorientation`,this.onDeviceOrientationSafariEvent,!0);break}},t=DeviceOrientationEvent.requestPermission||void 0;t?t().then(t=>{if(t!==`granted`)throw Error(`Permission not granted`);e()}).catch(this.notifyError):e();let n=J.lastEvent;n?this.onAbsolutePositionEvent(n):this.absolutePositionProviderId=J.addEventListener(this.onAbsolutePositionEvent,this.notifyError,!1)}stop(){switch(i.BrowserUtils.getName()){case i.Browser.CHROME:window.removeEventListener(`deviceorientationabsolute`,this.onDeviceOrientationChromeEvent,!0);break;case i.Browser.SAFARI:case i.Browser.IOS_WEBVIEW:window.removeEventListener(`deviceorientation`,this.onDeviceOrientationSafariEvent,!0);break}J.removeEventListener(this.absolutePositionProviderId)}onDeviceOrientationChromeEvent=e=>{if(this.magQuaternionTimestamp=e.timeStamp/1e3,typeof e.alpha!=`number`||typeof e.beta!=`number`||typeof e.gamma!=`number`){this.notifyError(new j().from(`deviceorientationabsolute`));return}this.magQuaternion=n.Rotations.eulerToQuaternionZXYDegrees([e.alpha,e.beta,e.gamma]),this.compute()};onDeviceOrientationSafariEvent=t=>{if(this.magQuaternionTimestamp=t.timeStamp/1e3,typeof t.beta!=`number`||typeof t.gamma!=`number`){this.notifyError(new j().from(`deviceorientation`));return}if(typeof t.webkitCompassHeading!=`number`){this.notifyError(new M().from(`deviceorientation`));return}let r,[i,a,o,s]=n.Rotations.eulerToQuaternionZXYDegrees([t.webkitCompassHeading,t.beta,t.gamma]),c=(0,n.rad2deg)(Math.acos(i**2-a**2-o**2+s**2)),l=null;c>136?l=!0:c<134?l=!1:this.iosPreviousQuat&&this.iosIsSkyMode!==null&&(l=n.Quaternion.distance([i,a,o,s],this.iosPreviousQuat)<.5?this.iosIsSkyMode:!this.iosIsSkyMode),this.iosPreviousQuat=[i,a,o,s],this.iosIsSkyMode=l,l!==void 0&&(r=l?180-t.webkitCompassHeading:e.webkitCompassToHeading(t.webkitCompassHeading,t.beta,t.gamma),this.magQuaternion=n.Rotations.eulerToQuaternionZXYDegrees([r,t.beta,t.gamma]),this.compute())};compute(){if(!this.declinationQuaternion||!this.magQuaternion||!this.absolutePositionEvent)return;let e=new c(n.Quaternion.multiply(this.declinationQuaternion,this.magQuaternion),this.magQuaternionTimestamp,this.DEFAULT_ACCURACY);this.notify(e)}onAbsolutePositionEvent=e=>{this.absolutePositionEvent=e;let t=pe(e.lat,e.lng);this.declinationQuaternion=n.Quaternion.fromAxisAngle([0,0,1],-(0,n.deg2rad)(t.declination)),J.removeEventListener(this.absolutePositionProviderId),delete this.absolutePositionProviderId,this.compute()};static webkitCompassToHeading(e,t,r){let i=(0,n.deg2rad)(e),a=(0,n.deg2rad)(t),o=(0,n.deg2rad)(r),s=Math.cos(i/2),c=Math.cos(a/2),l=Math.cos(o/2),u=Math.sin(i/2),d=Math.sin(a/2),f=Math.sin(o/2),p=s*c*l-u*d*f,m=u*c*l+s*d*f;return(0,n.rad2deg)(-2*Math.atan(m/p))}},X=new class e extends y{static REL_ABS_DIVERGENCE_ANGLE_THRESHOLD=(0,n.deg2rad)(25);static REL_ABS_DIVERGENCE_TIME_THRESHOLD=2.5;static REL_ABS_DIVERGENCE_INCLINATION_THRESHOLD=(0,n.deg2rad)(15);_absAttitudeFromBrowser;_vpsProviderId;fromBrowserProviderId;highRotationProviderId;inclinationProviderId;relativeAttitudeProviderId;_attitudeFromBrowserErrored=!1;_attitudeFromRelativeErrored=!1;_relativeAttitude=null;_relativeAccuracy=0;_lastForcedHeadingEvent;_relAbsQuat;_wasHighRotationInProgress=!1;_timeFirstDivergence=null;_callbackMagCalibration;getName=()=>`AbsoluteAttitude`;availability(){return b.some([Y.getAvailability(),G.getAvailability()])}start(){this.fromBrowserProviderId=Y.addEventListener(this._onAttitudeFromBrowser,e=>{this._attitudeFromBrowserErrored=!0,this._onError(e)}),this._vpsProviderId=q.addEventListener(e=>this._onAttitudeFromVps(e.absoluteAttitude),e=>this.notifyError(e),!1),this.relativeAttitudeProviderId=G.addEventListener(this._onRelativeAttitudeEvent,e=>{this._attitudeFromRelativeErrored=!0,this._onError(e)}),this.inclinationProviderId=W.addEventListener(),this.highRotationProviderId=z.addEventListener()}stop(){Y.removeEventListener(this.fromBrowserProviderId),G.removeEventListener(this.relativeAttitudeProviderId),W.removeEventListener(this.inclinationProviderId),z.removeEventListener(this.highRotationProviderId),q.removeEventListener(this._vpsProviderId)}_setCallbackMagCalibration(e){this._callbackMagCalibration=e}_onError=e=>{this._attitudeFromBrowserErrored&&this._attitudeFromRelativeErrored&&this.notifyError(e)};_forceHeadingForRelative=e=>{if(this.lastEvent&&e.accuracy>this.lastEvent.accuracy)return;let t=t=>{let r=t.heading;this._relAbsQuat=n.Quaternion.fromAxisAngle([0,0,1],r-e.heading),this._relativeAccuracy=0,this._lastForcedHeadingEvent=e};if(this._relativeAttitude){t(this._relativeAttitude);return}let r=G.addEventListener(e=>{t(e),G.removeEventListener(r)})};_onRelativeAttitudeEvent=r=>{let{quaternion:i,accuracy:a,time:o}=r;if(this._relativeAttitude&&(this._relativeAccuracy+=(o-this._relativeAttitude.time)*a),this._relativeAttitude=r,!this._lastForcedHeadingEvent||!this._relAbsQuat)return;let s=Math.min((this._lastForcedHeadingEvent.accuracy||0)+this._relativeAccuracy,Math.PI),l=z.isInProgress(),u=!1;if(this._absAttitudeFromBrowser){let{accuracy:r,heading:a}=this._absAttitudeFromBrowser;if(this._wasHighRotationInProgress&&!l)this._forceHeadingForRelative(this._absAttitudeFromBrowser);else if(r<s){let r=new t.Attitude(n.Quaternion.multiply(this._relAbsQuat,i)),s=Math.abs((0,n.diffAngle)(r.heading,a)),c=W.lastEvent;s>e.REL_ABS_DIVERGENCE_ANGLE_THRESHOLD&&c!==null&&Math.abs(c-Math.PI/4)>e.REL_ABS_DIVERGENCE_INCLINATION_THRESHOLD&&(u=!0,this._timeFirstDivergence!==null&&o-this._timeFirstDivergence>e.REL_ABS_DIVERGENCE_TIME_THRESHOLD?(this._forceHeadingForRelative(this._absAttitudeFromBrowser),this._callbackMagCalibration?.({angle:s}),this._timeFirstDivergence=null):this._timeFirstDivergence===null&&(this._timeFirstDivergence=o))}}u||(this._timeFirstDivergence=null),this._wasHighRotationInProgress=l;let d=new c(n.Quaternion.multiply(this._relAbsQuat,i),o,s);this.notify(d)};_onAttitudeFromBrowser=e=>{if(this._absAttitudeFromBrowser=e,!this._lastForcedHeadingEvent){this._forceHeadingForRelative(e);return}};_onAttitudeFromVps=e=>{this._forceHeadingForRelative(e)};feed(e){if(e instanceof t.AbsoluteHeading){if(e.time===null)throw Error(`the time of the absolute heading is not defined`);if(e.accuracy===null)throw Error(`the accuracy of the absolute heading is not defined`);this._forceHeadingForRelative(e)}else if(e instanceof c){if(e.time===null)throw Error(`the time of the attitude is not defined`);if(e.accuracy===null)throw Error(`the accuracy of the attitude is not defined`);this._forceHeadingForRelative(e)}else throw Error(`data is nor an AbsoluteHeading or an Attitude object`)}},Z=new class e extends y{static SLIDING_WINDOW_TIME=.3;static STD_THRESHOLD=.075;static CONSIDER_TURN_UNTIL=1;providerId;slidingWindow=[];getName=()=>`Turn`;availability=()=>G.getAvailability();start(){this.providerId=G.addEventListener(this._parseRelativeAttitude,this.notifyError)}stop(){G.removeEventListener(this.providerId)}isTurning(){return!this.lastEvent||!G.lastEvent?!1:G.lastEvent.time-this.lastEvent.timestamp<e.CONSIDER_TURN_UNTIL}_parseRelativeAttitude=t=>{let{heading:r}=t,i=t.time;this.slidingWindow=this.slidingWindow.filter(t=>t[0]>=i-e.SLIDING_WINDOW_TIME),this.slidingWindow.push([i,r]),(0,n.std)(this.slidingWindow.map(e=>e[1]))>e.STD_THRESHOLD&&this.notify({timestamp:i})}},Q=new class e extends y{static DEFAULT_STEPS_CONSIDERED_FOR_STRAIGHT_LINE=2;_turnProviderId;_stepProviderId;_countSteps=0;_stepsConsideredForStraightLine=e.DEFAULT_STEPS_CONSIDERED_FOR_STRAIGHT_LINE;getName=()=>`StraightLine`;availability(){return b.every([Z.getAvailability(),V.getAvailability()])}start(){this._turnProviderId=Z.addEventListener(this._onTurn),this._stepProviderId=V.addEventListener(this._onStep)}stop(){Z.removeEventListener(this._turnProviderId),V.removeEventListener(this._stepProviderId)}_onTurn=()=>{this._countSteps>=this._stepsConsideredForStraightLine&&this.notify(!1),this._countSteps=0};_onStep=()=>{this._countSteps++,this._countSteps===this._stepsConsideredForStraightLine&&this.notify(!0)};isStraight(){return this._countSteps>=this._stepsConsideredForStraightLine}get numStepsDetectedFromLastTurn(){return this._countSteps}get stepsConsideredForStraightLine(){return this._stepsConsideredForStraightLine}set stepsConsideredForStraightLine(e){this._stepsConsideredForStraightLine=e}},$=new class e extends y{static DEFAULT_MM_MAX_ANGLE=(0,n.deg2rad)(30);static DEFAULT_MM_MAX_DIST=30;static DEFAULT_USE_ITINERARY_START_AS_POSITION=!1;static DEFAULT_USE_ORIENTATION_MATCHING=!1;static DEFAULT_MM_HUGE_JUMP_DISTANCE=3;static DEFAULT_DISABLE_MM_CLOSE_TO_A_TURN_DISTANCE=2;static DEFAULT_MIN_STEPS_BETWEEN_ORIENTATION_MATCHING=3;static DEFAULT_MIN_STEPS_FOR_ORIENTATION_MATCHING=5;static DEFAULT_LAST_PROJECTIONS_WINDOW_SIZE=3;static DEFAULT_LAST_PROJECTIONS_EDGE_ANGLE_THRESHOLD=(0,n.deg2rad)(3);static DEFAULT_USE_STRICT=!1;_mapMatchingMaxDistance=e.DEFAULT_MM_MAX_DIST;_mapMatchingMaxAngleBearing=e.DEFAULT_MM_MAX_ANGLE;_useItineraryStartAsPosition=e.DEFAULT_USE_ITINERARY_START_AS_POSITION;_useOrientationMatching=e.DEFAULT_USE_ORIENTATION_MATCHING;_hugeJumpDistance=e.DEFAULT_MM_HUGE_JUMP_DISTANCE;_disableMMCloseToATurnDistance=e.DEFAULT_DISABLE_MM_CLOSE_TO_A_TURN_DISTANCE;_minStepsBetweenOrientationMatching=e.DEFAULT_MIN_STEPS_BETWEEN_ORIENTATION_MATCHING;_minStepsForOrientationMatching=e.DEFAULT_MIN_STEPS_FOR_ORIENTATION_MATCHING;_lastProjectionsWindowSize=e.DEFAULT_LAST_PROJECTIONS_WINDOW_SIZE;_lastProjectionsEdgeAngleThreshold=e.DEFAULT_LAST_PROJECTIONS_EDGE_ANGLE_THRESHOLD;_useStrict=e.DEFAULT_USE_STRICT;_graph=null;_internalProvidersStarted=!1;_straightLineProviderId;_turnProviderId;_stepProviderId;_projectionsWithAbsAndWithoutRelAttitudeInARow=[];_countStepsFromLastMatching=0;_lastProjections=[];_itineraryInfoManager=null;getName=()=>`MapMatchingHandler`;availability=()=>Promise.resolve();start(){this.graph&&this._startInternalProviders()}stop(){this._stopInternalProviders()}_manageStartStop=()=>{this.graph&&!this._internalProvidersStarted?this._startInternalProviders():!this.graph&&this._internalProvidersStarted&&this._stopInternalProviders()};_startInternalProviders(){this.enabled&&this._internalProvidersStarted||(this._straightLineProviderId=Q.addEventListener(),this._turnProviderId=Z.addEventListener(),this._stepProviderId=V.addEventListener(()=>this._countStepsFromLastMatching++),this._internalProvidersStarted=!0)}_stopInternalProviders(){this.enabled&&!this._internalProvidersStarted||(Q.removeEventListener(this._straightLineProviderId),Z.removeEventListener(this._turnProviderId),V.removeEventListener(this._stepProviderId),this._internalProvidersStarted=!1)}get enabled(){return l.useMapMatching}get graph(){return this._graph}set graph(e){this._graph=e,this._itineraryInfoManager=null,this.notify({...e&&{graph:e}}),this._manageStartStop(),this.canUseMapMatching()}set itinerary(e){this._graph=e?e.toGraph():null,this._itineraryInfoManager=new r.ItineraryInfoManager(e),this.notify({...e&&{itinerary:e}}),this._manageStartStop(),this.canUseMapMatching()&&e&&this._notifyPositionFromItineraryInput(e)}canUseMapMatching(){return this.enabled&&this.graph}_notifyPositionFromItineraryInput(e){if(!this._useItineraryStartAsPosition||!e.origin)return;let n=J.lastEvent||null,r=t.UserPosition.fromCoordinates(e.origin);if(n)r.alt=n.alt,r.time=n.time,r.accuracy=n.accuracy+r.distanceTo(n),r.bearing=n.bearing;else if(e.coords.length>=2)r.alt=_e.DEFAULT_ALTITUDE,r.time=i.TimeUtils.preciseTime(),r.accuracy=0,r.bearing=e.coords[0].bearingTo(e.coords[1]);else return;let a=this.getProjection(r,!0);a?J.notify(a.coords):J.notify(r)}notifyPositionFromFeed(e){let t=this.getProjection(e,!0,!1);if(this._useStrict&&t){J.notify(t.coords);return}if(!t){J.notify(e);return}J.notify(t.coords)}notifyPositionFromAbsolute(e){if(this._useStrict){let t=this.getProjection(e);if(t)return J.notify(t.coords),!0}let t=null;if(e.bearing!==null&&(t=this.getProjection(e,!0,!0)),!t)return J.notify(e),!0;let n=t.distanceFromNearestElement>this._hugeJumpDistance;return n&&!Q.isStraight()||n&&this._detectWrongBigJump(t)?!1:(J.notify(t.coords),this.tryOrientationMatching(t),!0)}notifyPositionFromRelative(e){let t=this.getProjection(e,!0,!0);if(this._useStrict&&t)return J.notify(t.coords),!0;if(Z.isTurning())return this._projectionsWithAbsAndWithoutRelAttitudeInARow=[],this._lastProjections=[],J.notify(e),!0;if(t){this._projectionsWithAbsAndWithoutRelAttitudeInARow=[],this._lastProjections.push(t),this._lastProjections.length>this._lastProjectionsWindowSize&&this._lastProjections.shift();let n=t.distanceFromNearestElement>this._hugeJumpDistance;return n&&!Q.isStraight()||n&&this._detectWrongBigJump(t)||!this._areLastProjectionsInTheSameDirection()||this._disableMMCloseToATurnDistance>0&&this._hasTurnInCircle(t.coords,this._disableMMCloseToATurnDistance)?(J.notify(e),!0):(J.notify(t.coords),this.tryOrientationMatching(t),!0)}if(Q.isStraight()){let t=e.clone();t.bearing=Y.lastEvent?.heading||null;let n=this.getProjection(t,!0,!0);if(n)return this._projectionsWithAbsAndWithoutRelAttitudeInARow.push(n),this._projectionsWithAbsAndWithoutRelAttitudeInARow.length<3||(this._lastProjections.push(n),this._lastProjections.length>this._lastProjectionsWindowSize&&this._lastProjections.shift(),!this._areLastProjectionsInTheSameDirection())?(J.notify(e),!0):(J.notify(n.coords),this.tryOrientationMatching(n),!0)}return this._projectionsWithAbsAndWithoutRelAttitudeInARow=[],this._lastProjections=[],J.notify(e),!0}_detectWrongBigJump(e){if(this._itineraryInfoManager&&J.lastEvent){let t=this._itineraryInfoManager.getInfo(J.lastEvent),n=this._itineraryInfoManager.getInfo(e.coords);if(t&&n&&t.traveledDistance>n.traveledDistance&&t.traveledDistance-n.traveledDistance>e.origin.accuracy&&e.distanceFromNearestElement>e.origin.accuracy&&e.origin.distanceTo(J.lastEvent)<e.origin.accuracy+J.lastEvent.accuracy)return!0}return!1}_areLastProjectionsInTheSameDirection(){if(this._lastProjections.length===0)return!1;let e=this._lastProjections[0];return!this._lastProjections.some(t=>!(t.nearestElement instanceof r.Edge)||!(e.nearestElement instanceof r.Edge)||(0,n.diffAngleLines)(t.nearestElement.bearing,e.nearestElement.bearing)>this._lastProjectionsEdgeAngleThreshold)}_nodeHasTurn(t){if(!this._graph)return;let r=this._graph.edges.filter(e=>e.vertex1===t||e.vertex2===t);for(let t=0;t<r.length;t++)for(let i=t+1;i<r.length;i++)if((0,n.diffAngleLines)(r[t].bearing,r[i].bearing)>e.DEFAULT_MM_MAX_ANGLE)return!0;return!1}_hasTurnInCircle(e,n){let r=this._graph;return r?r.vertices.filter(r=>r.coords.distanceTo(e)<=n&&t.Level.intersect(r.coords.level,e.level)).some(e=>this._nodeHasTurn(e)):!1}tryOrientationMatching(e){if(!this._useOrientationMatching||this.state!==`started`||this._countStepsFromLastMatching<this._minStepsBetweenOrientationMatching||Q.numStepsDetectedFromLastTurn<this._minStepsForOrientationMatching)return;let{nearestElement:i,origin:a}=e;if(!(i instanceof r.Edge))return;let o,s=(0,n.diffAngle)(i.bearing,a.bearing),c=(0,n.diffAngle)(i.bearing+Math.PI,a.bearing);o=Math.abs(s)<Math.abs(c)?i.bearing:(i.bearing+Math.PI)%(2*Math.PI);let l=new t.AbsoluteHeading(o,a.time,0);X._forceHeadingForRelative(l),this._countStepsFromLastMatching=0}getProjection(e,t,n){let r={...t&&!this._useStrict&&{maxDistance:this._mapMatchingMaxDistance},...n&&!this._useStrict&&{maxBearingAngle:this._mapMatchingMaxAngleBearing}};return this._graph?.getProjection(e,r)}get maxDistance(){return this._mapMatchingMaxDistance}set maxDistance(e){this._mapMatchingMaxDistance=e}get maxAngleBearing(){return this._mapMatchingMaxAngleBearing}set maxAngleBearing(e){this._mapMatchingMaxAngleBearing=e}get useItineraryStartAsPosition(){return this._useItineraryStartAsPosition}set useItineraryStartAsPosition(e){this._useItineraryStartAsPosition=e}get useOrientationMatching(){return this._useOrientationMatching}set useOrientationMatching(e){this._useOrientationMatching=e}get hugeJumpDistance(){return this._hugeJumpDistance}set hugeJumpDistance(e){this._hugeJumpDistance=e}get disableMMCloseToATurnDistance(){return this._disableMMCloseToATurnDistance}set disableMMCloseToATurnDistance(e){this._disableMMCloseToATurnDistance=e}get minStepsBetweenOrientationMatching(){return this._minStepsBetweenOrientationMatching}set minStepsBetweenOrientationMatching(e){this._minStepsBetweenOrientationMatching=e}get minStepsForOrientationMatching(){return this._minStepsForOrientationMatching}set minStepsForOrientationMatching(e){this._minStepsForOrientationMatching=e}get lastProjectionsWindowSize(){return this._lastProjectionsWindowSize}set lastProjectionsWindowSize(e){this._lastProjectionsWindowSize=e}get lastProjectionsEdgeAngleThreshold(){return this._lastProjectionsEdgeAngleThreshold}set lastProjectionsEdgeAngleThreshold(e){this._lastProjectionsEdgeAngleThreshold=e}get useStrict(){return this._useStrict}set useStrict(e){this._useStrict=e}},Be=class e{static DEFAULT_FREQUENCY=60;static DEFAULT_FLYBY_TIME=1;positionsQueue=[];previousPosition=null;timeoutNotify;callback;frequency;constructor(t,n=e.DEFAULT_FREQUENCY){this.callback=t,this.frequency=n}feed(n,r=e.DEFAULT_FLYBY_TIME){if(!(n instanceof t.UserPosition))throw TypeError(`newPosition is not instance of UserPosition`);if(n.time===null)throw Error(`newPosition does not have time property`);let i;if(this.positionsQueue.length===0?i=this.previousPosition:(i=this.positionsQueue[0],this.positionsQueue=[]),i){let e=n.time,a=i.distanceTo(n),o=i.bearingTo(n),s=1,c=this.frequency*r+1,l=t.Level.clone(n.level);for(;s<c+1;){let t=i.destinationPoint(a*s/c,o);t.time=e+(s-1)/this.frequency,t.level=l,t.bearing=n.bearing,t.accuracy=Math.max(t.accuracy+(n.accuracy-t.accuracy)*s/c,0),this.positionsQueue.push(t),s++}this.timeoutNotify&&clearTimeout(this.timeoutNotify)}else this.positionsQueue.push(n.clone());this.previousPosition=n,this._notifyNext()}_notifyNext=()=>{this.positionsQueue.length&&(this.callback?.(this.positionsQueue.shift()),this.positionsQueue.length===0?delete this.timeoutNotify:this.timeoutNotify=setTimeout(this._notifyNext,1e3/this.frequency))};clear(){clearTimeout(this.timeoutNotify),delete this.timeoutNotify,this.positionsQueue=[]}},Ve=class e{static ROTATION_SPEED_JUMP_THRESHOLD=(0,n.deg2rad)(180);static ROTATION_SPEED_CONVERGENCE=(0,n.deg2rad)(10);static HIGH_JUMP_THRESHOLD=(0,n.deg2rad)(20);static ROTATION_SPEED_HIGH_JUMP_CONVERGENCE=(0,n.deg2rad)(100);static PITCH_UNCERTAINITY_HEADING_THRESHOLD=(0,n.deg2rad)(5);_previousAttitude;_smoothing=null;callback;constructor(e){this.callback=e}feed(r){if(r.time===null)throw Error(`newAttitude does not have time property`);let{_previousAttitude:i}=this;if(this._previousAttitude=r,!i){this.callback(r);return}if(e.isJump(i,r)){let a=this._smoothing===null?i:this._smoothing.interpAttitude(i),o=a.heading,s=r.heading,c=(0,n.diffAngle)(s,o),l=Math.abs(c)<e.HIGH_JUMP_THRESHOLD?e.ROTATION_SPEED_CONVERGENCE:e.ROTATION_SPEED_HIGH_JUMP_CONVERGENCE,u=a.time,d=Math.abs(c)/l,f=c<0?-1:1;this._smoothing={toTime:u+d,interpAttitude:e=>{let r=l*(e.time-u),i=o+r*f,a=n.Quaternion.fromAxisAngle([0,0,1],s-i);return new t.Attitude(n.Quaternion.multiply(a,e.quaternion),e.time,e.accuracy)}}}if(this._smoothing!==null)if(r.time>=this._smoothing.toTime)this._smoothing=null;else{let e=this._smoothing.interpAttitude(r);this.callback(e);return}this.callback(r)}static isJump(t,r){let i=t.heading,a=r.heading,o=(0,n.diffAngle)(a,i),s=r.time-t.time,[c,l,u,d]=r.quaternion;return Math.abs(Math.asin(2*(c*l+u*d))-Math.PI/4)<e.PITCH_UNCERTAINITY_HEADING_THRESHOLD?!1:Math.abs(o)>e.ROTATION_SPEED_JUMP_THRESHOLD*s}},He=new class extends y{getName=()=>`MagnetometerCalibrationProvider`;availability=()=>X.getAvailability();constructor(){super(),X._setCallbackMagCalibration(e=>this.state===`started`&&this.notify(e))}start(){}stop(){}},Ue=class e extends Error{static DEFAULT_MESSAGE=`IP Resolver failed`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},We=new class extends y{getName=()=>`Ip`;availability=()=>Promise.resolve();async start(){let e=await fetch(`https://ipinfo.io/geo?token=24a7ca2f3b489d`);if(!e){this.notifyError(new Ue);return}let n=i.TimeUtils.preciseTime()/1e3,r=(await e.json()).loc.split(`,`),a=new t.UserPosition(parseFloat(r[0]),parseFloat(r[1]),null,null,n,1e5);this.notify(a)}stop(){}},Ge=class e{static MAX_CONSECUTIVE_FAILURES=10;intervalMs;maxDurationMs;expiresAt=null;enabled;timeoutId=null;listenerId=null;scanFailureListenerId=null;isBackgroundScanRunning=!1;consecutiveFailures=0;_status;statusCallbacks=new Set;onResult;onError;constructor(e,t,n){this.onResult=t,this.onError=n,this.intervalMs=e.intervalMs??3e4,this.maxDurationMs=e.maxDurationMs??30*6e4,this.enabled=e.enabled??!1,this._status=this.enabled?`idle`:`disabled`}get status(){return this._status}setEnabled(e){this.enabled=e,e?!this.isBackgroundScanRunning&&!this.timeoutId&&this.setStatus(`idle`):(this.clear(),this.setStatus(`disabled`))}onStatusChange(e){return this.statusCallbacks.add(e),()=>{this.offStatusChange(e)}}offStatusChange(e){this.statusCallbacks.delete(e)}schedule(){if(this.enabled){if(this.maxDurationMs>0&&this.expiresAt===null&&(this.expiresAt=Date.now()+this.maxDurationMs),this.expired){this.clearTimeoutOnly();return}this.clearTimeoutOnly(),this.timeoutId=setTimeout(()=>{this.timeoutId=null,this.startBackgroundScan()},this.intervalMs),this.setStatus(`scheduled`)}}async cancelRunningScan(){this.isBackgroundScanRunning&&(this.listenerId!==null&&(q.removeEventListener(this.listenerId),this.listenerId=null,q.stop()),this.scanFailureListenerId!==null&&(q.removeScanFailureListener(this.scanFailureListenerId),this.scanFailureListenerId=null),this.isBackgroundScanRunning=!1,this.setStatus(this.enabled?`idle`:`disabled`))}clear(){this.expiresAt=null,this.clearTimeoutOnly(),this.listenerId!==null&&(q.removeEventListener(this.listenerId),this.listenerId=null),this.scanFailureListenerId!==null&&(q.removeScanFailureListener(this.scanFailureListenerId),this.scanFailureListenerId=null),this.isBackgroundScanRunning=!1,this.setStatus(this.enabled?`idle`:`disabled`)}runNow(){if(this.enabled){if(this.expired){this.clearTimeoutOnly();return}this.clearTimeoutOnly(),this.startBackgroundScan()}}resetBudget(){this.expiresAt=null}get expired(){return this.expiresAt!==null&&Date.now()>=this.expiresAt}clearTimeoutOnly(){this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.enabled&&!this.isBackgroundScanRunning&&this.setStatus(`idle`)}async startBackgroundScan(){if(!this.enabled||this.isBackgroundScanRunning||this.listenerId!==null)return;if(this.expired){this.setStatus(`idle`);return}let t=await q.getAvailability();if(t instanceof Error){this.onError(t),this.setStatus(`idle`);return}this.isBackgroundScanRunning=!0,this.setStatus(`scanning`),this.scanFailureListenerId=q.addScanFailureListener(t=>{!this.isBackgroundScanRunning||this.scanFailureListenerId===null||t.listenerId!==this.scanFailureListenerId||(this.consecutiveFailures+=1,this.consecutiveFailures>=e.MAX_CONSECUTIVE_FAILURES&&(this.consecutiveFailures=0,q.resetCurrentAttempt(),this.cleanupListener(),this.schedule()))}),this.listenerId=q.addEventListener(e=>{this.consecutiveFailures=0,this.cleanupListener(),this.onResult(e),this.schedule()},e=>{this.cleanupListener(),this.onError(e),this.schedule()})}cleanupListener(){this.listenerId!==null&&(q.removeEventListener(this.listenerId),this.listenerId=null),this.scanFailureListenerId!==null&&(q.removeScanFailureListener(this.scanFailureListenerId),this.scanFailureListenerId=null),q.stop(),this.isBackgroundScanRunning=!1,this.enabled?this.setStatus(`idle`):this.setStatus(`disabled`)}setStatus(e){this._status!==e&&(this._status=e,this.statusCallbacks.forEach(t=>{try{t(e)}catch(e){console.error(`[VpsBackgroundScanner] Error in status listener`,e)}}))}},Ke=new class extends y{providerId;getName=()=>`Barcode`;availability=()=>P.getAvailability();start(){P.enableBarcodeScanner(),this.providerId=P.addEventListener(e=>e.barcode&&this.notify(e.barcode),this.notifyError)}stop(){P.disableBarcodeScanner(),P.removeEventListener(this.providerId)}},qe=new class extends y{providerId;getName=()=>`CameraNative`;availability=()=>Promise.resolve();start(){P.state!==`stopped`&&this.notify(`started`),this.providerId=P.addMonitoringListener(()=>this.notify(`started`),()=>this.notify(`stopped`))}stop(){P.removeMonitoringListener(this.providerId)}},Je=new class extends y{providerId;getName=()=>`CameraProjectionMatrix`;availability=()=>P.getAvailability();start(){this.providerId=P.addEventListener(e=>e.cameraProjection&&this.notify(e.cameraProjection),this.notifyError)}stop(){P.removeEventListener(this.providerId)}};e.AbsoluteAttitude=c,e.AbsoluteAttitudeFromBrowserProvider=Y,e.AbsoluteAttitudeProvider=X,e.AbsolutePosition=o,e.AbsolutePositionProvider=J,e.AccelerometerProvider=I,e.ArCoreProvider=P,e.AttitudeSmoother=Ve,e.BarcodeProvider=Ke,e.CameraNativeProvider=qe,e.CameraProjectionMatrixProvider=Je,e.Constants=_e,e.GeoRelativePositionFromArCoreProvider=be,e.GeoRelativePositionProvider=H,e.GnssWifiProvider=N,e.GyroscopeProvider=L,e.HighRotationsProvider=z,e.ImageRelocalization=Le,e.ImuProvider=F,e.InclinationFromAccProvider=Ne,e.InclinationFromRelativeAttitudeProvider=U,e.InclinationProvider=W,e.IpProvider=We,e.MagnetometerCalibrationProvider=He,e.MapMatchingHandler=$,e.PdrProvider=je,e.PoleStarProvider=K,e.PositionSmoother=Be,e.ProvidersLoggerOld=_,e.ProvidersOptions=l,e.RelativeAttitude=s,e.RelativeAttitudeFromBrowserProvider=R,e.RelativeAttitudeFromEkfProvider=Ee,e.RelativeAttitudeFromInertialProvider=B,e.RelativeAttitudeProvider=G,e.RelativeRotationCalc=Re,e.StepDetectionMinMaxPeaks2=ke,e.StepDetectionMinMaxPeaks3=Ae,e.StepProvider=V,e.StraightLineProvider=Q,e.TurnProvider=Z,e.VpsBackgroundScanner=Ge,e.VpsMetadata=Pe,e.VpsProvider=q,e.VpsRequest=Fe,e.VpsResponse=Ie});
|
|
3
|
+
`+r[0].trim(),r=r.splice(1),i--;return n}catch{return``}}static _log(t,n,r){let i=`color: auto;`,a=`color: #6A6A6A;`,o=typeof window<`u`,s,c=null,l=null,u=null,d=null,f=``,h=!1;if(c=t,d=Error(n),o&&(l=e._getColorByType(t)),u=e._getOriginByType(d,r),c===`deprecated`&&(c=`warn`,h=`deprecated`),o&&(u=e._COLOR_TOKEN+u),s=(o?e._COLOR_TOKEN:``)+` `+d.message,f=o?e._COLOR_TOKEN:``,f+=e._TYPE_PREFIX,f+=h||t,f+=e._TYPE_SUFFIX,typeof window<`u`&&m(window)){let e=performance&&performance.now?performance.now():new Date().getTime();f+=`[`+Math.round(e-window.wemap.startTime)+`ms]`}return s=f+s,e.SHOW_ORIGIN&&(s+=u),e.HISTORY.push(s),!this._canUseLog(t)||arguments.length<2||!e.ENABLED?!1:(o?console&&t!==`ok`&&t!==`flux`&&t!==`deprecated`&&console[t]&&p.indexOf(t)<=p.indexOf(`info`)?console[t](s,l,i,a):console.log(s,l,i,a):console.log(s),!0)}static external(e){return console.log(`LIVEMAP :: `+e)}static flux(t){return e._log(`flux`,t,0)}static ok(t){return e._log(`ok`,t,1)}static error(t,n=-1){return e._log(`error`,t,n)}static warn(t,n=2){return e._log(`warn`,t,n)}static deprecated(t,n=2){return e._log(`deprecated`,t,n)}static debug(t,n=-1){return e._log(`debug`,t,n)}static info(t,n=0){return e._log(`info`,t,n)}static log(t,n=1){return e._log(`log`,t,n)}};f(h,`LOG_LEVEL`,`debug`),f(h,`SHOW_ORIGIN`,!0),f(h,`ENABLED`,!0),f(h,`HISTORY`,[]),f(h,`_COLOR_TOKEN`,`%c`),f(h,`_TYPE_PREFIX`,`<<<< `),f(h,`_TYPE_SUFFIX`,` >>>>`);for(var g=h,_=new class{_enabled=!1;currentId=0;objectsIdMap=new WeakMap;pushEvents={};pushEventsRef={};interval;initDate;get enabled(){return this._enabled}set enabled(e){this._enabled=e}initializeInterval(){this.interval||=window.setInterval(()=>{for(let[e,t]of Object.entries(this.pushEvents))g.debug(`Received `+t+` notifications from `+this.pushEventsRef[Number(e)].getName()+` last second`);this.pushEvents={},this.pushEventsRef={}},1e3)}getObjectId(e){return this.objectsIdMap.has(e)||this.objectsIdMap.set(e,++this.currentId),this.objectsIdMap.get(e)}addEvent(e,t){if(!this.enabled)return;this.initDate||=Date.now(),this.initializeInterval();let n=this.getObjectId(e),r=e.getName();g.debug(r+`[`+n+`].`+t)}incrementNotifications(e){if(!this.enabled)return;let t=this.getObjectId(e),n=this.pushEvents[t];n||(n=0,this.pushEventsRef[t]=e),this.pushEvents[t]=n+1}},v=class e extends Error{static DEFAULT_MESSAGE=`Contains ignored provider`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},y=class e{static _callbackUniqueId=0;static _uniqueId=1;id;state=`stopped`;_lastEvent=null;_eventsCallbacks=[];_monitoringCallbacks=[];constructor(){this.id=e._uniqueId++,_.addEvent(this,`constructor`)}getAvailability(){return l.ignoreProviders.includes(this.getName())?Promise.resolve(new v):this.availability()}get hasNativeInterface(){return!!this.nativeInterface}get nativeInterface(){return typeof window<`u`&&window.__nativeProviders||null}get nativeJsInterface(){return typeof window>`u`?null:(window.__nativeJsProviders||(window.__nativeJsProviders={}),window.__nativeJsProviders)}get useCameraNatively(){return!1}addEventListener(t=null,n=null,r=!0){let i=++e._callbackUniqueId;if(this._eventsCallbacks.push({id:i,onEvent:t||(()=>{}),onError:n||(()=>{}),optional:!r}),!r||this.state!==`stopped`)return i;this.state=`starting`;let a=Promise.resolve();return l.checkAvailabilityOnStart&&(a=this.getAvailability()),(async()=>{let e=await a;if(e){this.state=`stopped`,this.notifyError(e);return}_.addEvent(this,`start`),this.start(),this.state=`started`,this._monitoringCallbacks.forEach(e=>e.onStarted?.())})(),i}removeEventListener(e){let t=this._eventsCallbacks.find(t=>t.id===e);t&&(this._eventsCallbacks=this._eventsCallbacks.filter(e=>e!==t),!t.optional&&(this._eventsCallbacks.find(e=>!e.optional)||this.state!==`stopped`&&(_.addEvent(this,`stop`),this.stop(),this.state=`stopped`,this._monitoringCallbacks.forEach(e=>e.onStopped?.()))))}addMonitoringListener(t,n){let r=e._callbackUniqueId++;return this._monitoringCallbacks.push({id:r,onStarted:t||null,onStopped:n||null}),r}removeMonitoringListener(e){this._monitoringCallbacks=this._monitoringCallbacks.filter(t=>t.id!==e)}notify=e=>{let t=this._adaptBeforeNotify(e);_.incrementNotifications(this),this._eventsCallbacks.forEach(e=>e.onEvent?.(t)),this._lastEvent=t};_adaptBeforeNotify(e){return e}notifyError=e=>{this._eventsCallbacks.forEach(({id:t,onError:n})=>{l.stopOnError&&this.removeEventListener(t),n?.(e)})};get lastEvent(){return this._lastEvent}},b=class{static async every(e){for(let t of e){let e=await t;if(e)return e}return null}static async some(e){let t;for(let n of e){let e=await n;if(e)t||=e;else return null}return t||null}},ee=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[-29404.5,-1450.7,0,0,0,0,0,0,0,0,0,0,0],[-2500,2982,1676.8,0,0,0,0,0,0,0,0,0,0],[1363.9,-2381,1236.2,525.7,0,0,0,0,0,0,0,0,0],[903.1,809.4,86.2,-309.4,47.9,0,0,0,0,0,0,0,0],[-234.4,363.1,187.8,-140.7,-151.2,13.7,0,0,0,0,0,0,0],[65.9,65.6,73,-121.5,-36.2,13.5,-64.7,0,0,0,0,0,0],[80.6,-76.8,-8.3,56.5,15.8,6.4,-7.2,9.8,0,0,0,0,0],[23.6,9.8,-17.5,-.4,-21.1,15.3,13.7,-16.5,-.3,0,0,0,0],[5,8.2,2.9,-1.4,-1.1,-13.3,1.1,8.9,-9.3,-11.9,0,0,0],[-1.9,-6.2,-.1,1.7,-.9,.6,-.9,1.9,1.4,-2.4,-3.9,0,0],[3,-1.4,-2.5,2.4,-.9,.3,-.7,-.1,1.4,-.6,.2,3.1,0],[-2,-.1,.5,1.3,-1.2,.7,.3,.5,-.2,-.5,.1,-1.1,-.3]],te=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[0,4652.9,0,0,0,0,0,0,0,0,0,0,0],[0,-2991.6,-734.8,0,0,0,0,0,0,0,0,0,0],[0,-82.2,241.8,-542.9,0,0,0,0,0,0,0,0,0],[0,282,-158.4,199.8,-350.1,0,0,0,0,0,0,0,0],[0,47.7,208.4,-121.3,32.2,99.1,0,0,0,0,0,0,0],[0,-19.1,25,52.7,-64.4,9,68.1,0,0,0,0,0,0],[0,-51.4,-16.8,2.3,23.5,-2.2,-27.2,-1.9,0,0,0,0,0],[0,8.4,-15.3,12.8,-11.8,14.9,3.6,-6.9,2.8,0,0,0,0],[0,-23.3,11.1,9.8,-5.1,-6.2,7.8,.4,-1.5,9.7,0,0,0],[0,3.4,-.2,3.5,4.8,-8.6,-.1,-4.2,-3.4,-.1,-8.8,0,0],[0,0,2.6,-.5,-.4,.6,-.2,-1.7,-1.6,-3,-2,-2.6,0],[0,-1.2,.5,1.3,-1.8,.1,.7,-.1,.6,.2,-.9,0,.5]],ne=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[6.7,7.7,0,0,0,0,0,0,0,0,0,0,0],[-11.5,-7.1,-2.2,0,0,0,0,0,0,0,0,0,0],[2.8,-6.2,3.4,-12.2,0,0,0,0,0,0,0,0,0],[-1.1,-1.6,-6,5.4,-5.5,0,0,0,0,0,0,0,0],[-.3,.6,-.7,.1,1.2,1,0,0,0,0,0,0,0],[-.6,-.4,.5,1.4,-1.4,0,.8,0,0,0,0,0,0],[-.1,-.3,-.1,.7,.2,-.5,-.8,1,0,0,0,0,0],[-.1,.1,-.1,.5,-.1,.4,.5,0,.4,0,0,0,0],[-.1,-.2,0,.4,-.3,0,.3,0,0,-.4,0,0,0],[0,0,0,.2,-.1,-.2,0,-.1,-.2,-.1,0,0,0],[0,-.1,0,0,0,-.1,0,0,-.1,-.1,-.1,-.1,0],[0,0,0,0,0,0,0,0,0,0,0,0,-.1]],re=[[0,0,0,0,0,0,0,0,0,0,0,0,0],[0,-25.1,0,0,0,0,0,0,0,0,0,0,0],[0,-30.2,-23.9,0,0,0,0,0,0,0,0,0,0],[0,5.7,-1,1.1,0,0,0,0,0,0,0,0,0],[0,.2,6.9,3.7,-5.6,0,0,0,0,0,0,0,0],[0,.1,2.5,-.9,3,.5,0,0,0,0,0,0,0],[0,.1,-1.8,-1.4,.9,.1,1,0,0,0,0,0,0],[0,.5,.6,-.7,-.2,-1.2,.2,.3,0,0,0,0,0],[0,-.3,.7,-.2,.5,-.3,-.5,.4,.1,0,0,0,0],[0,-.3,.2,-.4,.4,.1,0,-.2,.5,.2,0,0,0],[0,0,.1,-.3,.1,-.2,.1,0,-.1,.2,0,0,0],[0,0,.1,0,.2,0,0,.1,0,-.1,0,0,0],[0,0,0,-.1,.1,0,0,0,.1,0,0,0,-.1]],x={a:6378.137,b:6356.7523142,r0:6371.2},S=function(e,t){return Array(e).fill(``).map(function(e){return Array(t).fill(0)})},ie=function(){return(new Date(Date.now()).valueOf()/864e5+2440587.5-2458850)/365.25},ae=function(e,t){return Number(Math.round(Number(e+`e+`+t))+`e-`+t)},oe=function(e){return e>90?e-180:e<-90?e+180:e},C=function(e){return e*.017453292519943295},se=function(e){return e*57.29577951308232},w=S(13,13),T=S(13,13),ce=S(13,13),le=S(13,13),ue=Array(13).fill(0),de=Array(13).fill(0),fe=Array(13).fill(0),E=S(13,13).map(function(e){return e.map(function(e){return[0,0]})}),D=2;D<=12;D++)fe[D]=Math.sqrt((2*D-1)/(2*D));for(var O=0;O<=12;O++)for(var k=O*O,D=Math.max(O+1,2);D<=12;D++)E[O][D][0]=Math.sqrt((D-1)*(D-1)-k),E[O][D][1]=1/Math.sqrt(D*D-k);var pe=function(e,t,n){n===void 0&&(n=0);var r=Math.cos(C(e)),i=Math.sin(C(e)),a=Math.sqrt(x.a**2*r**2+x.b**2*i**2),o=Math.atan2(r*(n*a+x.a**2),i*(n*a+x.b**2)),s=Math.sqrt(n**2+2*n*a+(x.a**4-(x.a**4-x.b**4)*i**2)/(x.a**2-(x.a**2-x.b**2)*i**2)),c=Math.cos(o),l=Math.sin(o),u=1/(l+(l===0?1e-8:0));w[0][0]=1,w[1][1]=l,w[1][0]=c,T[1][0]=-l,T[1][1]=c;for(var d=2;d<=12;d++)w[d][d]=w[d-1][d-1]*l*fe[d],T[d][d]=(T[d-1][d-1]*l+w[d-1][d-1]*c)*fe[d];for(var f=0;f<=12;f++)for(var d=Math.max(f+1,2);d<=12;d++)w[d][f]=(w[d-1][f]*c*(2*d-1)-w[d-2][f]*E[f][d][0])*E[f][d][1],T[d][f]=((T[d-1][f]*c-w[d-1][f]*l)*(2*d-1)-T[d-2][f]*E[f][d][0])*E[f][d][1];for(var p=ie(),d=1;d<=12;d++)for(var f=0;f<=12;f++)ce[d][f]=ee[d][f]+p*ne[d][f],le[d][f]=te[d][f]+p*re[d][f];for(var f=0;f<=12;f++)ue[f]=Math.sin(f*C(t)),de[f]=Math.cos(f*C(t));for(var m=0,h=0,g=0,_=x.r0/s,v=_**2,d=1;d<=12;d++){for(var y=0,b=0,S=0,f=0;f<=d;f++){var D=ce[d][f]*de[f]+le[d][f]*ue[f];y+=D*w[d][f],b+=D*T[d][f],S+=f*(ce[d][f]*ue[f]-le[d][f]*de[f])*w[d][f]}v*=_,m+=(d+1)*y*v,h-=b*v,g+=S*v*u}var O=o-(Math.PI/2-C(e)),k=Math.sin(O),pe=Math.cos(O),A=-h*pe-m*k,j=g,M=h*k-m*pe,me=A!==0||j!==0?ae(se(Math.atan2(j,A)),2):0,he=j!==0||A!==0&&M!==0?oe(se(Math.atan2(M*Math.sin(Math.atan2(j,A)),j))):0;return{declination:ae(me,2),inclination:ae(he,2),intensity:Math.round(Math.sqrt(A**2+j**2+M**2)),northIntensity:Math.round(A),eastIntensity:Math.round(j),verticalIntensity:Math.round(M),horizontalIntensity:Math.round(Math.sqrt(A**2+j**2))}},A=class e extends Error{static DEFAULT_MESSAGE=`It seems that you ask for IMU events on a desktop browser`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},j=class e extends Error{static DEFAULT_MESSAGE=`Impossible to retrieve events, a sensor is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}from(e){return this.message+=` from `+e,this}},M=class extends j{constructor(e){super(e)}},me=class e extends Error{static DEFAULT_MESSAGE=`Geolocation api is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},he=class e extends Error{static DEFAULT_MESSAGE=`Geolocation permission denied`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},ge=class e extends Error{static DEFAULT_MESSAGE=`Geolocation position unavailable`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},_e={DEFAULT_ALTITUDE:1.6},N=new class e extends y{static DEFAULT_DISCARD_POSITIONS_ABOVE=50;discardPositionsAbove=e.DEFAULT_DISCARD_POSITIONS_ABOVE;enableHighAccuracy=!0;geoLocationId;getName=()=>`GnssWifi`;get positionOptions(){return{enableHighAccuracy:this.enableHighAccuracy,timeout:1/0,maximumAge:0}}availability(){return typeof navigator==`object`&&navigator.geolocation?Promise.resolve():Promise.resolve(new me)}start(){navigator.geolocation.getCurrentPosition(this.onNewPosition,this.onPositionError,this.positionOptions),setTimeout(()=>{this.geoLocationId=navigator.geolocation.watchPosition(this.onNewPosition,this.onPositionError,this.positionOptions)},150)}stop(){this.geoLocationId!==void 0&&navigator.geolocation.clearWatch(this.geoLocationId)}onNewPosition=e=>{let{coords:r}=e;if(!r)return;let a;r.heading&&(a=(0,n.deg2rad)(r.heading));let o=i.TimeUtils.unixTimestampToPreciseTime(e.timestamp)/1e3,s=new t.UserPosition(r.latitude,r.longitude,_e.DEFAULT_ALTITUDE,null,o,r.accuracy,a);this.enableHighAccuracy&&typeof this.discardPositionsAbove==`number`&&r.accuracy>this.discardPositionsAbove||this.notify(s)};onPositionError=e=>{g.warn(`[Providers] watchPosition error: [${e.code}] ${e.message}`);let t;switch(e.code){case 1:t=new he(e.message);break;case 2:t=new ge(e.message);break;default:t=Error(e.message)}this.notifyError(t)}},ve=class e extends Error{static DEFAULT_MESSAGE=`ARCore is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},ye=class e extends Error{static DEFAULT_MESSAGE=`Native interface is missing. You are maybe trying to execute a code which is not available in a web browser`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},P=new class e extends y{static Payload={Pose:{ref:1,size:7},Barcode:{ref:2**1,size:1},ProjMat:{ref:2**2,size:16},ImageRef:{ref:2**3,size:1}};static RELATIVE_ATTITUDE_DRIFT=(0,n.deg2rad)(3)/60;_nativeProvider;previousPosition=[0,0,0];getName=()=>`ArCore`;availability(){try{if(!this.nativeProvider.checkAvailability())return Promise.resolve(new ve)}catch(e){return Promise.resolve(e)}return Promise.resolve()}start(){this.nativeProvider?.start(),this.pullDataLoop()}stop(){this.nativeProvider?.stop()}pullDataLoop=()=>{if(this.state===`stopped`)return;let e=JSON.parse(this.nativeProvider.getInfo());e.length>1&&this.parsePayload(e),requestAnimationFrame(this.pullDataLoop)};parsePayload(n){let r=n[0],a=1,o,c,l,u,d=i.TimeUtils.preciseTime()/1e3;if(r&e.Payload.Pose.ref){o=new s(n.slice(a,a+4),d,e.RELATIVE_ATTITUDE_DRIFT);let r=[n[a+4],n[a+5],n[a+6]];c=new t.RelativePosition(r[0]-this.previousPosition[0],r[1]-this.previousPosition[1],r[2]-this.previousPosition[2],d,1e-4),this.previousPosition=r,a+=e.Payload.Pose.size}r&e.Payload.Barcode.ref&&(u=n[a],a+=e.Payload.Barcode.size),r&e.Payload.ProjMat.ref&&(l=n.slice(a,a+e.Payload.ProjMat.size),a+=e.Payload.ProjMat.size),this.notify({relativePosition:c,relativeAttitude:o,...u&&{barcode:u},...l&&{cameraProjection:l}})}get nativeProvider(){if(!this._nativeProvider){if(!this.nativeInterface)throw new ye;if(this._nativeProvider=this.nativeInterface.getArCoreProvider(),!this._nativeProvider)throw new ve}return this._nativeProvider}enableBarcodeScanner(){try{this.nativeProvider.enableBarcodeScanner()}catch(e){this.notifyError(e)}}disableBarcodeScanner(){try{this.nativeProvider.disableBarcodeScanner()}catch(e){this.notifyError(e)}}get useCameraNatively(){return!0}},be=new class extends y{absoluteAttitudeProviderId;arCoreProviderId;absoluteAttitudeEvent;getName=()=>`GeoRelativePositionFromArCore`;availability(){return b.every([P.getAvailability(),X.getAvailability()])}start(){this.arCoreProviderId=P.addEventListener(this.onArCoreEvents,this.notifyError),this.absoluteAttitudeProviderId=X.addEventListener(e=>this.absoluteAttitudeEvent=e,this.notifyError)}stop(){P.removeEventListener(this.arCoreProviderId),X.removeEventListener(this.absoluteAttitudeProviderId)}onArCoreEvents=e=>{let t=e.relativeAttitude,n=e.relativePosition;t&&n&&this.absoluteAttitudeEvent&&this.compute(n,t,this.absoluteAttitudeEvent)};compute(e,n,r){let i=r.heading-n.heading,a=Math.cos(i)*e.x-Math.sin(i)*e.z,o=-Math.sin(i)*e.x-Math.cos(i)*e.z,s=e.y,c=new t.GeoRelativePosition(a,o,s,e.time,0,r.heading);this.notify(c)}},xe={acc:.5,gyr:.3},Se={acc:.5,gyr:.3,yc:2},Ce=class{P;accRef;cRef;noises;quaternion;constructor(e=[0,0,1],t=[-1,0,0]){this.accRef=e,this.cRef=t,this.P=n.Matrix4.fromDiagVector([,,,,].fill(.1**2)),this.quaternion=null,this.noises={},this.setRelativeNoises(xe),this.setAbsoluteNoises(Se)}setRelativeNoises(e){this.noises.relative={acc:n.Matrix3.diag([,,,].fill(e.acc**2)),gyr:n.Matrix3.diag([,,,].fill(e.gyr**2))}}setAbsoluteNoises(e){this.noises.absolute={acc:n.Matrix3.diag([,,,].fill(e.acc**2)),gyr:n.Matrix3.diag([,,,].fill(e.gyr**2)),yc:n.Matrix3.diag([,,,].fill(e.yc**2))}}tryInitialize(e,t){let r=n.Vector3.normalize(e);if(t){let e=n.Vector3.normalize(t),i=n.Vector3.normalize(n.Vector3.cross(e,r)),a=n.Vector3.cross(r,i),o=[[i[0],a[0],r[0]],[i[1],a[1],r[1]],[i[2],a[2],r[2]]];this.quaternion=n.Quaternion.fromMatrix3Matlab(o)}else{let e=n.Vector3.dot(r,this.accRef)+1,t=n.Vector3.cross(r,this.accRef),i=[e,t[0],t[1],t[2]];i=n.Quaternion.normalize(i),this.quaternion=i}return this.quaternion}update(e,t,r,i){if(!this.quaternion)return this.tryInitialize(t,i);let a=this.quaternion,o=a,s=n.Vector3.multiplyScalar(r,.5*e),c=this.computeC([1,s[0],s[1],s[2]]),l=n.Matrix4.multiplyVector(c,a),u=n.Matrix3.diag([o[0],o[0],o[0]]),d=n.Matrix3.skew([o[1],o[2],o[3]]),f=[-1*o[1],-1*o[2],-1*o[3]],p=n.Matrix.concatRow([f],n.Matrix3.sum(d,u)),m=n.Matrix4.multiplyScalar(n.Matrix.multiply(n.Matrix.multiply(p,this.noises[i?`absolute`:`relative`].gyr),n.Matrix.transpose(p)),(e/2)**2),h=n.Matrix4.sum(n.Matrix4.multiply(n.Matrix4.multiply(c,this.P),n.Matrix4.transpose(c)),m),g=n.Vector3.normalize(t),_,v,y;if(i){let e=n.Vector3.normalize(i),t=n.Vector3.cross(g,e),r=n.Vector3.normalize(t),a=n.Vector3.subtract(r,n.Quaternion.rotateMatlab(l,this.cRef)),o=n.Vector3.subtract(g,n.Quaternion.rotateMatlab(l,this.accRef));_=n.Vector.concat(a,o);let s=this.jacobianES(l,this.cRef),c=this.jacobianES(l,this.accRef);y=n.Matrix.concatRow(s,c);let u=n.Matrix.concatLine(this.noises.absolute.yc,n.Matrix3.zeros),d=n.Matrix.concatLine(n.Matrix3.zeros,this.noises.absolute.acc),f=n.Matrix.concatRow(u,d);v=n.Matrix.multiply(n.Matrix.multiply(h,n.Matrix.transpose(y)),n.Matrix.inverse(n.Matrix.sum(n.Matrix.multiply(n.Matrix.multiply(y,h),n.Matrix.transpose(y)),f)))}else{_=n.Vector3.subtract(g,n.Quaternion.rotateMatlab(l,this.accRef)),y=this.jacobianES(l,this.accRef);let e=this.noises.relative.acc;v=n.Matrix.multiply(n.Matrix.multiply(h,n.Matrix.transpose(y)),n.Matrix3.inverse(n.Matrix3.sum(n.Matrix.multiply(n.Matrix.multiply(y,h),n.Matrix.transpose(y)),e)))}a=n.Quaternion.sum(l,n.Matrix.multiplyVector(v,_));let b=n.Matrix4.multiply(n.Matrix4.subtract(n.Matrix4.identity,n.Matrix.multiply(v,y)),h);return a=n.Quaternion.normalize(a),this.quaternion=a,this.P=b,a}computeC(e){return[[e[0],-e[1],-e[2],-e[3]],[e[1],e[0],e[3],-e[2]],[e[2],-e[3],e[0],e[1]],[e[3],e[2],-e[1],e[0]]]}jacobianES(e,t){let[n,r,i,a]=e,[o,s,c]=t;return[[2*a*s-2*i*c,2*i*s+2*a*c,2*r*s-2*n*c-4*i*o,2*n*s+2*r*c-4*a*o],[2*r*c-2*a*o,2*n*c-4*r*s+2*i*o,2*r*o+2*a*c,2*i*c-2*n*o-4*a*s],[2*i*o-2*r*s,2*a*o-4*r*c-2*n*s,2*n*o-4*i*c+2*a*s,2*r*o+2*i*s]]}},F=new class extends y{getName=()=>`IMU`;availability(){return i.BrowserUtils.isMobile?Promise.resolve():Promise.resolve(new A)}start(){let e=()=>window.addEventListener(`devicemotion`,this.parseDeviceMotionEvent,!0),t=DeviceMotionEvent.requestPermission||void 0;t?t().then(t=>{if(t!==`granted`)throw Error(`Permission not granted`);e()}).catch(this.notifyError):e()}stop(){window.removeEventListener(`devicemotion`,this.parseDeviceMotionEvent,!0)}parseDeviceMotionEvent=e=>{let t=e.timeStamp/1e3,r;if(e.accelerationIncludingGravity){let{x:t,y:n,z:a}=e.accelerationIncludingGravity;typeof t==`number`&&typeof n==`number`&&typeof a==`number`&&(r=[t,n,a],(i.BrowserUtils.getName()===i.Browser.SAFARI||i.BrowserUtils.getName()===i.Browser.IOS_WEBVIEW)&&(r[0]*=-1,r[1]*=-1,r[2]*=-1))}let a;if(e.rotationRate){let{alpha:t,beta:r,gamma:i}=e.rotationRate;typeof t==`number`&&typeof r==`number`&&typeof i==`number`&&(a=[(0,n.deg2rad)(t),(0,n.deg2rad)(r),(0,n.deg2rad)(i)])}(r||a)&&this.notify({...r&&{acceleration:{timestamp:t,values:r}},...a&&{angularRate:{timestamp:t,values:a}}})}},we=class e extends j{static DEFAULT_MESSAGE=`Impossible to retrieve Acceleration data`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},I=new class extends y{imuProviderId;getName=()=>`Accelerometer`;availability=()=>F.getAvailability();start(){this.imuProviderId=F.addEventListener(e=>{e.acceleration?this.notify(e.acceleration):this.notifyError(new we().from(`devicemotion`))},this.notifyError)}stop(){F.removeEventListener(this.imuProviderId)}},Te=class extends j{static DEFAULT_MESSAGE=`Impossible to retrieve Angular Rate data`;constructor(e){super(e||j.DEFAULT_MESSAGE)}},L=new class extends y{imuProviderId;getName=()=>`Gyroscope`;availability=()=>F.getAvailability();start(){this.imuProviderId=F.addEventListener(e=>{e.angularRate?this.notify(e.angularRate):this.notifyError(new Te().from(`devicemotion`))},this.notifyError)}stop(){F.removeEventListener(this.imuProviderId)}},Ee=new class e extends y{static DEFAULT_DRIFT=(0,n.deg2rad)(5)/60;accelerometerProviderId;ekfAttitude=new Ce;gyroscopeEvent;gyroscopeProviderId;lastTimestamp=0;getName=()=>`RelativeAttitudeFromEkf`;availability(){return b.every([I.getAvailability(),L.getAvailability()])}start(){this.accelerometerProviderId=I.addEventListener(e=>this.onAccelerometerEvent(e),e=>this.notifyError(e)),this.gyroscopeProviderId=L.addEventListener(e=>this.gyroscopeEvent=e,e=>this.notifyError(e))}stop(){I.removeEventListener(this.accelerometerProviderId),L.removeEventListener(this.gyroscopeProviderId)}onAccelerometerEvent=t=>{if(!this.gyroscopeEvent)return;let{values:n,timestamp:r}=t;if(this.lastTimestamp===0){this.lastTimestamp=r;return}let i=r-this.lastTimestamp;this.lastTimestamp=r;let a=this.ekfAttitude.update(i,n,this.gyroscopeEvent.values);if(a){let t=new s(a,r,e.DEFAULT_DRIFT);this.notify(t)}}},R=new class e extends y{static DEFAULT_DRIFT=(0,n.deg2rad)(5)/60;getName=()=>`RelativeAttitudeFromBrowser`;availability(){return i.BrowserUtils.isMobile?Promise.resolve():Promise.resolve(new A)}start(){let e=()=>window.addEventListener(`deviceorientation`,this.onDeviceOrientationEvent,!0),t=DeviceOrientationEvent.requestPermission||void 0;t?t().then(t=>{if(t!==`granted`)throw Error(`Permission not granted`);e()}).catch(e=>this.notifyError(e)):e()}stop(){window.removeEventListener(`deviceorientation`,this.onDeviceOrientationEvent,!0)}onDeviceOrientationEvent=t=>{if(typeof t.alpha!=`number`||typeof t.beta!=`number`||typeof t.gamma!=`number`){this.notifyError(new j().from(`deviceorientation`));return}let r=new s(n.Rotations.eulerToQuaternionZXYDegrees([t.alpha,t.beta,t.gamma]),t.timeStamp/1e3,e.DEFAULT_DRIFT);this.notify(r)}},z=new class e extends y{static THRESHOLD=10;static DELAY_CONSIDERATION=3;gyroscopeProviderId;getName=()=>`HighRotationsProvider`;availability=()=>L.getAvailability();start(){this.gyroscopeProviderId=L.addEventListener(this._parseGyroscopeEvent,this.notifyError)}stop(){L.removeEventListener(this.gyroscopeProviderId)}isInProgress(){return!this.lastEvent||!L.lastEvent?!1:L.lastEvent.timestamp-this.lastEvent.timestamp<e.DELAY_CONSIDERATION}_parseGyroscopeEvent=t=>{let{values:r,timestamp:i}=t;n.Vector3.norm(r)>e.THRESHOLD&&this.notify({timestamp:i})}},B=new class e extends y{static DEFAULT_DRIFT=(0,n.deg2rad)(5)/60;_highRotationsProviderId;listenerId;provider;getName=()=>`RelativeAttitudeFromInertial`;availability(){return b.some([Ee.getAvailability(),R.getAvailability()])}start(){Ee.getAvailability().then(e=>{this.provider=e?R:Ee,this.listenerId=this.provider.addEventListener(e=>this._parseEvent(e),this.notifyError),this._highRotationsProviderId=z.addEventListener(null,this.notifyError)})}_parseEvent(t){let n=t.clone();if(z.isInProgress()){let t=(n.accuracy||0)+e.DEFAULT_DRIFT*100;t=Math.min(t,Math.PI),n.accuracy=t}this.notify(n)}stop(){this.provider&&(this.provider.removeEventListener(this.listenerId),delete this.provider),z.removeEventListener(this._highRotationsProviderId)}},De=class e{static MIN_TIME_BETWEEN_STEPS=.4;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=1;frequency=0;lastVerticalAcc=0;maxAcceleration=0;lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;compute(t,n){let r=!1,i=n[2],a=t-this.lastStepTimestamp;if(i>this.lastVerticalAcc)i>this.maxAcceleration&&(this.maxAcceleration=i);else if(this.maxAcceleration>e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&a>e.MIN_TIME_BETWEEN_STEPS){this.maxAcceleration=0;let n=t-this.lastStepTimestamp;this.frequency=Math.min(Math.max(1/n,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),r=!0,this.lastStepTimestamp=t}else this.maxAcceleration=0;return this.lastVerticalAcc=i,r}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepTimestamp?this.lastStepSize*this.frequency:0}},Oe=class e{static WINDOW_TIME=.3;static MIN_TIME_BETWEEN_STEPS=.4;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=1.5;static VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD=-1;frequency=0;lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;slidingWindow=[];compute(t,n){if(this.lastStepTimestamp&&this.lastStepTimestamp+e.MIN_TIME_BETWEEN_STEPS>t)return!1;let r=-(2**53-1),i=2**53-1,a=e.WINDOW_TIME;if(this.slidingWindow.forEach((e,n,o)=>{e.timestamp<t-a?o.splice(n,1):(r=Math.max(e.verticalAcc,r),i=Math.min(e.verticalAcc,i))}),this.slidingWindow.push({timestamp:t,verticalAcc:n[2]}),r>e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&i<e.VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD){let n=this.lastStepTimestamp?t-this.lastStepTimestamp:1;return this.frequency=Math.min(Math.max(1/n,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),this.lastStepTimestamp=t,!0}return!1}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepTimestamp?this.lastStepSize*this.frequency:0}},ke=class e{static WINDOW_TIME=.3;static MIN_TIME_BETWEEN_STEPS=.4;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=.75;static VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD=-.3;frequency=0;influence=.2;slidingWindow=[];lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;previousVerticalAcc=0;compute(t,n,r){let i=this.influence*(n[2]*2)+(1-this.influence)*this.previousVerticalAcc;if(this.previousVerticalAcc=i,Math.sqrt(r[0]**2+r[1]**2+r[2]**2)>.75||this.lastStepTimestamp&&this.lastStepTimestamp+e.MIN_TIME_BETWEEN_STEPS>t)return!1;let a=-(2**53-1),o=2**53-1;if(this.slidingWindow.forEach((n,r,i)=>{n.timestamp<t-e.WINDOW_TIME?i.splice(r,1):(a=Math.max(n.verticalAcc,a),o=Math.min(n.verticalAcc,o))}),this.slidingWindow.push({timestamp:t,verticalAcc:i}),a>e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&o<e.VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD){let n=this.lastStepTimestamp?t-this.lastStepTimestamp:1;return this.frequency=Math.min(Math.max(1/n,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),this.lastStepTimestamp=t,!0}return!1}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepSize&&this.frequency?this.lastStepSize*this.frequency:0}mean(e){let t=0,n=0;for(let n=0;n<e.length;++n)t+=e[n].verticalAcc;return n=t/e.length,n}stddev(e){let t=this.mean(e),n=0;for(let r=0;r<e.length;++r)n+=(e[r].verticalAcc-t)**2;return Math.sqrt(n/e.length)}},Ae=class e{static WINDOW_TIME=.6;static MIN_TIME_BETWEEN_STEPS=.6;static MAX_FRENQUENCY=4;static MIN_FRENQUENCY=1;static VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD=.2;static VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD=-.1;frequency=0;influence=.05;slidingWindow=[];lastStepTimestamp=-e.MIN_TIME_BETWEEN_STEPS;previousVerticalAcc=0;previousHorizontalAcc=0;compute(t,n){let r=this.influence*n[2]+(1-this.influence)*this.previousVerticalAcc;if(this.previousVerticalAcc=r,this.slidingWindow=this.slidingWindow.filter(n=>n.timestamp>=t-e.WINDOW_TIME),this.slidingWindow.push({timestamp:t,verticalAcc:r}),this.lastStepTimestamp&&this.lastStepTimestamp+e.MIN_TIME_BETWEEN_STEPS>t)return!1;let i=Number.MIN_VALUE,a=-1,o=!1;if(this.slidingWindow.forEach((t,n)=>{t.verticalAcc>i&&t.verticalAcc>=e.VERTICAL_ACC_POSITIVE_PEAK_THRESHOLD&&(i=t.verticalAcc,a=n,o=!0)}),!o)return!1;let s=!1,c=Number.MAX_VALUE;for(let t=0;t<a;t++){let n=this.slidingWindow[t].verticalAcc;if(c=Math.min(c,n),n<e.VERTICAL_ACC_NEGATIVE_PEAK_THRESHOLD){s=!0;break}}if(!s)return!1;let l=i-c,u=i-.5*l,d=!1;for(let e=a+1;e<this.slidingWindow.length;e++)if(this.slidingWindow[e].verticalAcc<=u){d=!0;break}if(!d)return!1;let f=this.lastStepTimestamp?t-this.lastStepTimestamp:1;return this.frequency=Math.min(Math.max(1/f,e.MIN_FRENQUENCY),e.MAX_FRENQUENCY),this.lastStepTimestamp=t,!0}get lastStepSize(){return this.frequency?.45+.2*this.frequency:0}get speed(){return this.lastStepSize&&this.frequency?this.lastStepSize*this.frequency:0}mean(e){let t=0,n=0;for(let n=0;n<e.length;++n)t+=e[n];return n=t/e.length,n}stddev(e){let t=this.mean(e),n=0;for(let r=0;r<e.length;++r)n+=(e[r]-t)**2;return Math.sqrt(n/e.length)}},V=new class e extends y{static DEFAULT_STEP_SIZE_MULTIPLIER=1;static DEFAULT_ALGORITHM=`minMaxPeaks3`;accelerometerProviderId;attitudeProviderId;gyroscopeProviderId;angularRateEvent;attitudeEvent;numOfSteps=0;stepDetector;_stepSizeMultiplier=e.DEFAULT_STEP_SIZE_MULTIPLIER;_algorithm=e.DEFAULT_ALGORITHM;_accValues=[];constructor(){super(),this.algorithm=this._algorithm}getName=()=>`StepDetector`;availability(){return b.every([I.getAvailability(),L.getAvailability(),B.getAvailability()])}start(){this.numOfSteps=0,this.accelerometerProviderId=I.addEventListener(this.onAccelerometerEvent,this.notifyError),this.gyroscopeProviderId=L.addEventListener(e=>this.angularRateEvent=e,this.notifyError),this.attitudeProviderId=B.addEventListener(e=>this.attitudeEvent=e,this.notifyError)}stop(){I.removeEventListener(this.accelerometerProviderId),L.removeEventListener(this.gyroscopeProviderId),B.removeEventListener(this.attitudeProviderId)}onAccelerometerEvent=t=>{if(!this.attitudeEvent||!this.angularRateEvent)return;let{values:n,timestamp:r}=t,i=e.computeLinearAcceleration(this.attitudeEvent.quaternion,n);if(this.stepDetector.compute(r,i,this.angularRateEvent.values)){let e=this.stepDetector.lastStepSize*this._stepSizeMultiplier;this.numOfSteps++,this.notify({size:e,number:this.numOfSteps})}};static computeLinearAcceleration(e,r){let i=n.Quaternion.rotateMatlab(n.Quaternion.inverse(e),r);return i[2]-=t.Constants.EARTH_GRAVITY,i}set stepSizeMultiplier(e){this._stepSizeMultiplier=e}get stepSizeMultiplier(){return this._stepSizeMultiplier}set algorithm(e){switch(e){case`ladetto`:this.stepDetector=new De;break;case`minMaxPeaks`:this.stepDetector=new Oe;break;case`minMaxPeaks2`:this.stepDetector=new ke;break;default:e=`minMaxPeaks3`,this.stepDetector=new Ae;break}this._algorithm=e}get algorithm(){return this._algorithm}},je=new class extends y{absoluteAttitudeProviderId;stepDetectionProviderId;attitudeEvent;misalignmentError=(0,n.deg2rad)(3);getName=()=>`Pdr`;availability(){return b.every([V.getAvailability(),X.getAvailability()])}start(){this.stepDetectionProviderId=V.addEventListener(this.onStepEvent,this.notifyError),this.absoluteAttitudeProviderId=X.addEventListener(e=>this.attitudeEvent=e,this.notifyError)}stop(){V.removeEventListener(this.stepDetectionProviderId),X.removeEventListener(this.absoluteAttitudeProviderId)}onStepEvent=e=>{if(!this.attitudeEvent)return;let n=e.size,r=this.attitudeEvent,i=r.heading,a=r.accuracy+this.misalignmentError,o=n/2*Math.sin(a/2),s=r.time,c=new t.GeoRelativePosition(n*Math.sin(i),n*Math.cos(i),0,s,o,i);this.notify(c)}},H=new class extends y{providerId;geoRelativeProvider;getName=()=>`GeoRelativePosition`;availability(){return b.some([je.getAvailability(),be.getAvailability()])}async start(){let e=await be.getAvailability();this.geoRelativeProvider=e?je:be,this.providerId=this.geoRelativeProvider.addEventListener(this.notify,this.notifyError)}stop(){this.geoRelativeProvider?.removeEventListener(this.providerId),delete this.geoRelativeProvider}},Me={name:`@wemap/providers`,version:`14.8.0-beta.1`,description:`Sensor, positioning and VPS providers for the Wemap SDK.`,license:`UNLICENSED`,author:`Wemap SAS`,homepage:`https://github.com/wemap/wemap-sdk-js#readme`,repository:{type:`git`,url:`git+https://github.com/wemap/wemap-sdk-js.git`,directory:`packages/providers`},bugs:{url:`https://github.com/wemap/wemap-sdk-js/issues`},keywords:[`wemap`,`sdk`,`providers`,`vps`],type:`module`,publishConfig:{access:`public`},main:`./dist/index.js`,types:`./dist/index.d.ts`,exports:{".":{import:`./dist/index.js`,types:`./dist/index.d.ts`}},sideEffects:!1,files:[`dist`],dependencies:{"@wemap/camera":`14.8.0-beta.1`,"@wemap/core":`14.8.0-beta.1`,"@wemap/geo":`14.8.0-beta.1`,"@wemap/maths":`14.8.0-beta.1`,"@wemap/osm":`14.8.0-beta.1`,"@wemap/routers":`14.8.0-beta.1`,"@wemap/utils":`14.8.0-beta.1`},devDependencies:{"@wemap/logger-legacy":`^13.3.0`,geomag:`^1.0.0`}},Ne=new class extends y{providerId;getName=()=>`InclinationFromAcc`;availability=()=>I.getAvailability();start(){this.providerId=I.addEventListener(this.onAccelerometerEvent,this.notifyError)}stop(){I.removeEventListener(this.providerId)}onAccelerometerEvent=e=>{let t=e.values,n=window.orientation||0,r=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]),i=[t[0]/r,t[1]/r,t[2]/r],a=[i[2]+1,i[1],-i[0],0],o=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]),s=[a[0]/o,a[1]/o,a[2]/o,0],c;c=n===0?Math.asin(2*s[1]*s[0]):n===90?-Math.asin(2*s[2]*s[0]):n===-90?Math.asin(2*s[2]*s[0]):-Math.asin(2*s[1]*s[0]),this.notify(c)}},U=new class extends y{providerId;getName=()=>`InclinationFromRelativeAttitude`;availability=()=>B.getAvailability();start(){this.providerId=B.addEventListener(e=>{let t=this.enuQuatToInclination(e.quaternion);this.notify(t)},this.notifyError)}stop(){B.removeEventListener(this.providerId)}enuQuatToInclination(e){let t=window.orientation||0;return t===0?Math.asin(2*(e[2]*e[3]+e[1]*e[0])):t===90?Math.asin(2*(e[1]*e[3]-e[2]*e[0])):t===-90?Math.asin(2*(e[2]*e[0]-e[1]*e[3])):-Math.asin(2*(e[2]*e[3]+e[1]*e[0]))}},W=new class extends y{provider;providerId;getName=()=>`Inclination`;availability(){return b.some([Ne.getAvailability(),U.getAvailability()])}async start(){let e=()=>{this.provider=Ne,this.providerId=this.provider.addEventListener(this.notify,this.notifyError)};await U.getAvailability()?(this.provider=U,this.providerId=this.provider.addEventListener(this.notify,()=>{U.removeEventListener(this.providerId),e()})):e()}stop(){this.provider&&this.provider.removeEventListener(this.providerId)}},Pe=class e{size;calibration;coarse;device;constructor(e,t=null,n=null,r=null){this.size=e,this.calibration=t,this.coarse=n,this.device=r}toJson(){return{size:[this.size.width,this.size.height],...this.calibration&&{calibration:this.calibration},...this.coarse&&{coarse:{...this.coarse.attitude&&{attitude:this.coarse.attitude.toJson()},...this.coarse.position&&{position:this.coarse.position.toJson()}}},...this.device!==null&&{device:this.device}}}static fromJson(n){return new e({width:n.size[0],height:n.size[1]},n.calibration,{...n.coarse?.position&&{position:t.UserPosition.fromJson(n.coarse.position)},...n.coarse?.attitude&&{attitude:t.Attitude.fromJson(n.coarse.attitude)}},n.device)}},Fe=class e{metadata;image;imageQuality;localPose;constructor(e,t,n=.8,r=null){this.metadata=e,this.image=t,this.imageQuality=n,this.localPose=r}toJson(){return{image:(0,a.canvasToBase64)(this.image,`image/jpeg`,this.imageQuality),...this.localPose&&{local_pose:this.localPose},...this.metadata.toJson()}}static fromJson(t){return new e(Pe.fromJson(t),(0,a.base64ToCanvas)(t.image))}toFormData(){let e=this.image.toDataURL(`image/jpeg`,this.imageQuality).split(`,`)[1]||``,t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);let r=new FormData;r.append(`image`,new Blob([n],{type:`image/jpeg`}),`image.jpg`);let i=this.metadata.toJson();return i.calibration&&r.append(`calibration`,JSON.stringify(i.calibration)),i.coarse&&r.append(`coarse`,JSON.stringify(i.coarse)),i.device&&r.append(`device`,JSON.stringify(i.device)),this.localPose&&r.append(`local_pose`,JSON.stringify(this.localPose)),r}},Ie=class e{success;attitude;position;constructor(e,t=null,n=null){this.success=e,this.attitude=t,this.position=n}toJson(){return{success:this.success,attitude:this.attitude?.toJson(),position:this.position?.toJson()}}static fromJson(n,r=null){let i=null;n.attitude&&(i=t.Attitude.fromJson(n.attitude),i.time=r);let a=null;return n.position&&(a=t.UserPosition.fromJson(n.position),a.time=r),new e(n.success,i,a)}},Le=class{static REQUEST_TIMEOUT_MS=2e4;static _prepareRequest(e,t=null,n=null,r=null,o=null){let s=(0,a.reduceImageSize)(e,720,720),c=i.UserAgentUtils.getDeviceFromUserAgent()||{};return r&&(c.session_id=r.session_id,c.installation_id=r.installation_id,c.attempt_id=r.attempt_id,c.caller=r.caller),new Fe(new Pe({width:s.width,height:s.height},t,n,c),s,.8,o)}static async relocalize(e,t,n=null,r=null,a=null,o=null,s=null){let c=i.TimeUtils.preciseTime()/1e3,l=this._prepareRequest(t,n,r,a,o),u;try{let t=l.toFormData();u=await fetch(e,{method:`POST`,body:t,signal:AbortSignal.timeout(this.REQUEST_TIMEOUT_MS),headers:Object.assign({Accept:`application/vnd.geopose+json; version=1`},s||{})})}catch{return g.debug(`[VPS] Server respond error`),null}if(u.status!==200)return g.debug(`[VPS] Server respond error`),null;let d=await u.json(),f=Ie.fromJson(d,c);return g.debug(`[VPS] Server respond ${f.success?`success`:`not found`}`),f}static getHeadingFromQuaternion(e){let[t,n,r,i]=e,a=Math.sqrt(2)/2,o=[a*(t-n),a*(t+n),a*(r+i),a*(i-r)];return-Math.atan2(2*o[3]*o[0]-2*o[2]*o[1],1-2*o[1]**2-2*o[3]**2)}},G=new class extends y{arCoreMonitoringId;arCoreProviderId;inertialProviderId;getName=()=>`RelativeAttitude`;availability=()=>B.getAvailability();start(){this.arCoreMonitoringId=P.addMonitoringListener(()=>{this.listenArCore(),this.unlistenInertial()},()=>{this.unlistenArCore(),this.listenInertial()}),P.state===`started`?this.listenArCore():this.listenInertial()}stop(){P.removeMonitoringListener(this.arCoreMonitoringId),this.unlistenArCore(),this.unlistenInertial()}listenInertial=()=>{this.inertialProviderId=B.addEventListener(this.notify,this.notifyError)};unlistenInertial=()=>{B.removeEventListener(this.inertialProviderId)};listenArCore=()=>{this.arCoreProviderId=P.addEventListener(e=>this.notify(e.relativeAttitude),null,!1)};unlistenArCore=()=>{P.removeEventListener(this.arCoreProviderId)}},Re=class{_providerId;_isRunning=!1;_dataOnStart=null;tickStart(){this._dataOnStart=null,!this._isRunning&&(this._isRunning=!0,this._providerId=R.addEventListener(e=>{this._dataOnStart||=e}))}tickEnd(){if(!this._isRunning)return g.warn(`You have to call tickStart before tickEnd`),null;if(this._internalStop(),!this._dataOnStart)return g.warn(`Delay was too short between tickStart and tickEnd or RelativeAttitudeProvider cannot be retrieved.`),null;let e=R.lastEvent;return t.Attitude.diff(this._dataOnStart,e)}_internalStop(){R.removeEventListener(this._providerId),delete this._providerId,this._isRunning=!1}release(){this._isRunning&&this._internalStop()}},ze=class e extends Error{static DEFAULT_MESSAGE=`PoleStar is missing`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},K=new class extends y{getName=()=>`PoleStar`;constructor(){super(),this.addMethodsToNativeJsProvider()}availability(){try{return this.nativeProvider.checkAvailability(),Promise.resolve()}catch(e){return Promise.resolve(e)}}setApiKey(e){this.nativeProvider.setApiKey(e)}start(){this.nativeProvider.start()}stop(){this.nativeProvider.stop()}get nativeProvider(){if(!this.nativeInterface)throw new ye;let e=this.nativeInterface.getPoleStarProvider();if(!e)throw new ze;return e}addMethodsToNativeJsProvider(){this.nativeJsInterface&&(this.nativeJsInterface.polestar={callbackError:e=>this.notifyError(Error(e)),callbackPosition:e=>{let t=JSON.parse(e),r=i.TimeUtils.unixTimestampToPreciseTime(t.time)/1e3,a=new o(t.lat,t.lng,_e.DEFAULT_ALTITUDE,t.alt/5,r,t.accuracy,(0,n.deg2rad)(t.bearing));this.notify(a)}})}},q=new class e extends y{static MIN_TIME_BETWEEN_TWO_REQUESTS=1e3;static DEFAULT_MAX_SCAN_DURATION=12e4;static DEFAULT_MIN_INCLINATION_FOR_REQUEST=(0,n.deg2rad)(60);static DEFAULT_WAIT_TIME_MIN_INCLINATION_FOR_REQUEST=200;static DEFAULT_USE_COARSE_POSE=!0;static DEFAULT_REQUEST_CALLER=`@wemap/providers(VpsProvider) ${Me.version}`;static CAMERA_TO_SMARTPHONE_ROT=n.Quaternion.fromAxisAngle([1,0,0],Math.PI);static ENU_TO_ARCORE_ROT=n.Quaternion.fromAxisAngle([1,0,0],-Math.PI/2);static _scanFailureCallbackUniqueId=0;_relativeRotationCalc;_serverError=!1;_cameraError=!1;_camera=null;_endpoint=null;_inclinationProviderId;_maxScanDuration=e.DEFAULT_MAX_SCAN_DURATION;_minInclinationForRequest=e.DEFAULT_MIN_INCLINATION_FOR_REQUEST;_waitTimeMinInclinationForRequest=e.DEFAULT_WAIT_TIME_MIN_INCLINATION_FOR_REQUEST;_useCoarsePose=e.DEFAULT_USE_COARSE_POSE;_requestCaller=e.DEFAULT_REQUEST_CALLER;_sessionId;_loopId=0;_attemptIdCounter=0;_currentAttemptId=null;_scanFailureCallbacks=[];constructor(){super(),this._sessionId=this._generateUuid()}getName=()=>`Vps`;availability=()=>a.Camera.checkAvailability();start(){this._inclinationProviderId=W.addEventListener(),this._relativeRotationCalc=new Re,a.SharedCameras.on(`added`,this._onCameraDetected),a.SharedCameras.on(`removed`,this._onCameraRemoved),a.SharedCameras.list.length&&(a.SharedCameras.list.length>1&&g.warn(`It seems that more than 1 camera has been detected for VPS. Taking the first...`),this._useCamera(a.SharedCameras.list[0].camera))}stop(){W.removeEventListener(this._inclinationProviderId),this._relativeRotationCalc?.release(),a.SharedCameras.off(`added`,this._onCameraDetected),a.SharedCameras.off(`removed`,this._onCameraRemoved),this._camera?.off(`started`,this._internalStart),this._camera?.off(`stopped`,this._internalStop),this._camera=null}_onCameraDetected=({camera:e})=>{this._camera&&g.warn(`It seems that more than 1 camera has been detected for VPS. Taking the first...`),this._useCamera(e)};_onCameraRemoved=()=>{this._camera?(this._camera.off(`started`,this._internalStart),this._camera.off(`stopped`,this._internalStop)):g.warn(`There is no previously detected camera but once has stopped`),this._camera=null};_useCamera(e){this._camera=e,e.on(`started`,this._internalStart),e.on(`stopped`,this._internalStop),e.state===`started`&&this._internalStart()}_internalStart=async()=>{if(!this._endpoint){this.notifyError(Error(`VPS endpoint has not been set before calling start()`));return}let r=null,a=++this._loopId,o=()=>this.state===`stopped`||a!==this._loopId,s=this._maxScanDuration>0?i.TimeUtils.preciseTime()+this._maxScanDuration:null;for(;!o();){if(r!==null){let t=i.TimeUtils.preciseTime()-r,n=Math.max(0,e.MIN_TIME_BETWEEN_TWO_REQUESTS-t);await new Promise(e=>setTimeout(e,n))}if(r=i.TimeUtils.preciseTime(),o()||!this._camera||this._camera.state!==`started`)break;if(s!==null&&i.TimeUtils.preciseTime()>s){this.notifyError(Error(`VPS scan gave up after ${this._maxScanDuration} ms without a match`));break}let a=W.lastEvent?W.lastEvent:null;if(a!==null&&a<this._minInclinationForRequest){await new Promise(e=>setTimeout(e,this._waitTimeMinInclinationForRequest));continue}if(typeof document<`u`&&document.hidden){await new Promise(e=>setTimeout(e,this._waitTimeMinInclinationForRequest));continue}this._relativeRotationCalc?.tickStart();let l=await this._camera.currentImage;if(!l)continue;let u=null,d=J.getBestPositionEvent(N.lastEvent,K.lastEvent);this._useCoarsePose&&(d||X.lastEvent)&&(u={...d&&{position:d},...X.lastEvent&&{attitude:X.lastEvent}}),this._currentAttemptId===null&&(this._attemptIdCounter+=1,this._currentAttemptId=this._attemptIdCounter);let f=G.lastEvent,p=H.lastEvent,m=f&&p?{position:n.Quaternion.rotate(e.ENU_TO_ARCORE_ROT,[p.x,p.y,p.z]),orientation:n.Quaternion.multiply(e.ENU_TO_ARCORE_ROT,f.quaternion)}:null,h=await Le.relocalize(this._endpoint,l,null,u,{session_id:this._sessionId,installation_id:null,...this._currentAttemptId!==null&&{attempt_id:this._currentAttemptId},caller:this._requestCaller},m);if(!h||!h.success){this._scanFailureCallbacks.forEach(({id:e,callback:t})=>t({listenerId:e,sessionId:this._sessionId,attemptId:this._currentAttemptId}));continue}this._currentAttemptId=null;let g=h.attitude.quaternion,_=n.Quaternion.multiply(g,e.CAMERA_TO_SMARTPHONE_ROT),v=n.Quaternion.multiply(n.Quaternion.fromAxisAngle([0,0,1],(0,n.deg2rad)(window.orientation||0)),_),y=this._relativeRotationCalc?.tickEnd()||new t.Attitude([1,0,0,0]),b=new c(n.Quaternion.multiply(v,y.quaternion),h.attitude.time,h.attitude.accuracy),ee=h.position.clone();if(ee.accuracy===null&&(ee.accuracy=5),o())break;this.notify({absoluteAttitude:b,absolutePosition:ee})}};_internalStop=()=>{};_generateUuid(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}addScanFailureListener(t){let n=++e._scanFailureCallbackUniqueId;return this._scanFailureCallbacks.push({id:n,callback:t}),n}removeScanFailureListener(e){this._scanFailureCallbacks=this._scanFailureCallbacks.filter(({id:t})=>t!==e)}resetCurrentAttempt(){this._currentAttemptId=null}get endpoint(){return this._endpoint}set endpoint(e){this._endpoint=e}get maxScanDuration(){return this._maxScanDuration}set maxScanDuration(e){this._maxScanDuration=e}get minInclinationForRequest(){return this._minInclinationForRequest}set minInclinationForRequest(e){this._minInclinationForRequest=e}get waitTimeMinInclinationForRequest(){return this._waitTimeMinInclinationForRequest}set waitTimeMinInclinationForRequest(e){this._waitTimeMinInclinationForRequest=e}get useCoarsePose(){return this._useCoarsePose}set useCoarsePose(e){this._useCoarsePose=e}get requestCaller(){return this._requestCaller}set requestCaller(e){this._requestCaller=e}},J=new class e extends y{static ACCURACY_RELOC_RATIO=1;static USE_MM_FOR_FEED=!0;_polestarProviderId;_vpsProviderId;_gnssWifiProviderId;_relativePositionProviderId;_mapMatchingHandlerId;useAllAbsolutePositions=!1;_waitUntilNextVpsPosition=!1;_lastPolestarFix=null;ignoreGnssWifi=!1;_lastKnownLevel=null;getName=()=>`AbsolutePosition`;_adaptBeforeNotify(e){return e.level===null?e.level=this._lastKnownLevel:this._lastKnownLevel=e.level,e}availability(){return b.some([H.getAvailability(),N.getAvailability(),...l.hasPoleStar?[K.getAvailability()]:[],q.getAvailability()])}start(){H.getAvailability().then(e=>{e||(this._relativePositionProviderId=H.addEventListener(e=>this._onRelativePosition(e)))}),this._gnssWifiProviderId=N.addEventListener(e=>{if(this.ignoreGnssWifi)return;let t=e.clone();t.bearing=null,this._onAbsolutePosition(t,`gnss-wifi`,!1)}),this._vpsProviderId=q.addEventListener(e=>this._onAbsolutePosition(e.absolutePosition,`vps`),this.notifyError,!1),l.hasPoleStar&&(this._polestarProviderId=K.addEventListener(e=>{if(this._lastPolestarFix=i.TimeUtils.preciseTime(),!this._onAbsolutePosition(e,`polestar`)&&this.lastEvent?.level===null){let t=this.lastEvent.clone();t.level=e.level,this.notify(t)}})),this._mapMatchingHandlerId=$.addEventListener()}stop(){this._relativePositionProviderId&&(H.removeEventListener(this._relativePositionProviderId),delete this._relativePositionProviderId),this._gnssWifiProviderId&&(N.removeEventListener(this._gnssWifiProviderId),delete this._gnssWifiProviderId),this._vpsProviderId&&(q.removeEventListener(this._vpsProviderId),delete this._vpsProviderId),this._polestarProviderId&&(K.removeEventListener(this._polestarProviderId),delete this._polestarProviderId),$.removeEventListener(this._mapMatchingHandlerId)}_shouldTakeIntoAccountNewAbsolutePosition(n,r=!0){let i=n,a=this.lastEvent||null;if(!a)return!0;let o=i.accuracy*e.ACCURACY_RELOC_RATIO<=a.accuracy;if(o)return!0;let s=a.distanceTo(i)>a.accuracy+i.accuracy;if(s)return!0;let c=s&&i.accuracy<=a.accuracy;return!!(o&&c||r&&!t.Level.equals(i.level,a.level))}_onAbsolutePosition(e,t,n=!0){if(!this._shouldTakeIntoAccountNewAbsolutePosition(e,n)&&!this.useAllAbsolutePositions)return!1;let r=o.fromUserPosition(e,t),i=this.lastEvent?this.lastEvent:null;return i&&(n||(r.level=i.level),r.bearing===null&&(r.bearing=i.bearing)),$.canUseMapMatching()?$.notifyPositionFromAbsolute(r):(this.notify(r),!0)}_onRelativePosition(e){if(!this.lastEvent||this._waitUntilNextVpsPosition)return!1;let t=this.lastEvent,n=e,r=Math.sqrt(n.x**2+n.y**2),i=Math.atan2(n.x,n.y),a=t.alt===null?null:n.z,s=t.destinationPoint(r,i,a);s.bearing=n.bearing,s.time=n.time,s.accuracy+=n.accuracy;let c=o.fromUserPosition(s,`relative`);return $.canUseMapMatching()?$.notifyPositionFromRelative(c):(this.notify(c),!0)}feed(n){let r;if(n instanceof t.UserPosition){if(n.time===null)throw Error(`the time of the position is not defined`);if(n.accuracy===null)throw Error(`the accuracy of the position is not defined`);r=o.fromUserPosition(n,n.source??`feed`)}else throw Error(`data is nor an UserPosition or an AbsolutePositionEvent`);if(!e.USE_MM_FOR_FEED||!$.canUseMapMatching()){this.notify(r);return}$.notifyPositionFromFeed(r)}getBestPositionEvent(...e){return e.reduce((e,t)=>{if(!e)return t;if(!t||t.accuracy===null||t.time===null)return e;let{accuracy:n,time:r}=t,{accuracy:i,time:a}=e;return n<i+1.3888*(r-a)?t:e},null)}},Y=new class e extends y{DEFAULT_ACCURACY=(0,n.deg2rad)(15);absolutePositionProviderId;absolutePositionEvent;declinationQuaternion;magQuaternion;magQuaternionTimestamp;iosPreviousQuat;iosIsSkyMode=null;getName=()=>`AbsoluteAttitudeFromBrowser`;availability(){return i.BrowserUtils.isMobile?Promise.resolve():Promise.resolve(new A)}start(){let e=()=>{switch(i.BrowserUtils.getName()){case i.Browser.CHROME:window.addEventListener(`deviceorientationabsolute`,this.onDeviceOrientationChromeEvent,!0);break;case i.Browser.SAFARI:case i.Browser.IOS_WEBVIEW:window.addEventListener(`deviceorientation`,this.onDeviceOrientationSafariEvent,!0);break}},t=DeviceOrientationEvent.requestPermission||void 0;t?t().then(t=>{if(t!==`granted`)throw Error(`Permission not granted`);e()}).catch(this.notifyError):e();let n=J.lastEvent;n?this.onAbsolutePositionEvent(n):this.absolutePositionProviderId=J.addEventListener(this.onAbsolutePositionEvent,this.notifyError,!1)}stop(){switch(i.BrowserUtils.getName()){case i.Browser.CHROME:window.removeEventListener(`deviceorientationabsolute`,this.onDeviceOrientationChromeEvent,!0);break;case i.Browser.SAFARI:case i.Browser.IOS_WEBVIEW:window.removeEventListener(`deviceorientation`,this.onDeviceOrientationSafariEvent,!0);break}J.removeEventListener(this.absolutePositionProviderId)}onDeviceOrientationChromeEvent=e=>{if(this.magQuaternionTimestamp=e.timeStamp/1e3,typeof e.alpha!=`number`||typeof e.beta!=`number`||typeof e.gamma!=`number`){this.notifyError(new j().from(`deviceorientationabsolute`));return}this.magQuaternion=n.Rotations.eulerToQuaternionZXYDegrees([e.alpha,e.beta,e.gamma]),this.compute()};onDeviceOrientationSafariEvent=t=>{if(this.magQuaternionTimestamp=t.timeStamp/1e3,typeof t.beta!=`number`||typeof t.gamma!=`number`){this.notifyError(new j().from(`deviceorientation`));return}if(typeof t.webkitCompassHeading!=`number`){this.notifyError(new M().from(`deviceorientation`));return}let r,[i,a,o,s]=n.Rotations.eulerToQuaternionZXYDegrees([t.webkitCompassHeading,t.beta,t.gamma]),c=(0,n.rad2deg)(Math.acos(i**2-a**2-o**2+s**2)),l=null;c>136?l=!0:c<134?l=!1:this.iosPreviousQuat&&this.iosIsSkyMode!==null&&(l=n.Quaternion.distance([i,a,o,s],this.iosPreviousQuat)<.5?this.iosIsSkyMode:!this.iosIsSkyMode),this.iosPreviousQuat=[i,a,o,s],this.iosIsSkyMode=l,l!==void 0&&(r=l?180-t.webkitCompassHeading:e.webkitCompassToHeading(t.webkitCompassHeading,t.beta,t.gamma),this.magQuaternion=n.Rotations.eulerToQuaternionZXYDegrees([r,t.beta,t.gamma]),this.compute())};compute(){if(!this.declinationQuaternion||!this.magQuaternion||!this.absolutePositionEvent)return;let e=new c(n.Quaternion.multiply(this.declinationQuaternion,this.magQuaternion),this.magQuaternionTimestamp,this.DEFAULT_ACCURACY);this.notify(e)}onAbsolutePositionEvent=e=>{this.absolutePositionEvent=e;let t=pe(e.lat,e.lng);this.declinationQuaternion=n.Quaternion.fromAxisAngle([0,0,1],-(0,n.deg2rad)(t.declination)),J.removeEventListener(this.absolutePositionProviderId),delete this.absolutePositionProviderId,this.compute()};static webkitCompassToHeading(e,t,r){let i=(0,n.deg2rad)(e),a=(0,n.deg2rad)(t),o=(0,n.deg2rad)(r),s=Math.cos(i/2),c=Math.cos(a/2),l=Math.cos(o/2),u=Math.sin(i/2),d=Math.sin(a/2),f=Math.sin(o/2),p=s*c*l-u*d*f,m=u*c*l+s*d*f;return(0,n.rad2deg)(-2*Math.atan(m/p))}},X=new class e extends y{static REL_ABS_DIVERGENCE_ANGLE_THRESHOLD=(0,n.deg2rad)(25);static REL_ABS_DIVERGENCE_TIME_THRESHOLD=2.5;static REL_ABS_DIVERGENCE_INCLINATION_THRESHOLD=(0,n.deg2rad)(15);_absAttitudeFromBrowser;_vpsProviderId;fromBrowserProviderId;highRotationProviderId;inclinationProviderId;relativeAttitudeProviderId;_attitudeFromBrowserErrored=!1;_attitudeFromRelativeErrored=!1;_relativeAttitude=null;_relativeAccuracy=0;_lastForcedHeadingEvent;_relAbsQuat;_wasHighRotationInProgress=!1;_timeFirstDivergence=null;_callbackMagCalibration;getName=()=>`AbsoluteAttitude`;availability(){return b.some([Y.getAvailability(),G.getAvailability()])}start(){this.fromBrowserProviderId=Y.addEventListener(this._onAttitudeFromBrowser,e=>{this._attitudeFromBrowserErrored=!0,this._onError(e)}),this._vpsProviderId=q.addEventListener(e=>this._onAttitudeFromVps(e.absoluteAttitude),e=>this.notifyError(e),!1),this.relativeAttitudeProviderId=G.addEventListener(this._onRelativeAttitudeEvent,e=>{this._attitudeFromRelativeErrored=!0,this._onError(e)}),this.inclinationProviderId=W.addEventListener(),this.highRotationProviderId=z.addEventListener()}stop(){Y.removeEventListener(this.fromBrowserProviderId),G.removeEventListener(this.relativeAttitudeProviderId),W.removeEventListener(this.inclinationProviderId),z.removeEventListener(this.highRotationProviderId),q.removeEventListener(this._vpsProviderId)}_setCallbackMagCalibration(e){this._callbackMagCalibration=e}_onError=e=>{this._attitudeFromBrowserErrored&&this._attitudeFromRelativeErrored&&this.notifyError(e)};_forceHeadingForRelative=e=>{if(this.lastEvent&&e.accuracy>this.lastEvent.accuracy)return;let t=t=>{let r=t.heading;this._relAbsQuat=n.Quaternion.fromAxisAngle([0,0,1],r-e.heading),this._relativeAccuracy=0,this._lastForcedHeadingEvent=e};if(this._relativeAttitude){t(this._relativeAttitude);return}let r=G.addEventListener(e=>{t(e),G.removeEventListener(r)})};_onRelativeAttitudeEvent=r=>{let{quaternion:i,accuracy:a,time:o}=r;if(this._relativeAttitude&&(this._relativeAccuracy+=(o-this._relativeAttitude.time)*a),this._relativeAttitude=r,!this._lastForcedHeadingEvent||!this._relAbsQuat)return;let s=Math.min((this._lastForcedHeadingEvent.accuracy||0)+this._relativeAccuracy,Math.PI),l=z.isInProgress(),u=!1;if(this._absAttitudeFromBrowser){let{accuracy:r,heading:a}=this._absAttitudeFromBrowser;if(this._wasHighRotationInProgress&&!l)this._forceHeadingForRelative(this._absAttitudeFromBrowser);else if(r<s){let r=new t.Attitude(n.Quaternion.multiply(this._relAbsQuat,i)),s=Math.abs((0,n.diffAngle)(r.heading,a)),c=W.lastEvent;s>e.REL_ABS_DIVERGENCE_ANGLE_THRESHOLD&&c!==null&&Math.abs(c-Math.PI/4)>e.REL_ABS_DIVERGENCE_INCLINATION_THRESHOLD&&(u=!0,this._timeFirstDivergence!==null&&o-this._timeFirstDivergence>e.REL_ABS_DIVERGENCE_TIME_THRESHOLD?(this._forceHeadingForRelative(this._absAttitudeFromBrowser),this._callbackMagCalibration?.({angle:s}),this._timeFirstDivergence=null):this._timeFirstDivergence===null&&(this._timeFirstDivergence=o))}}u||(this._timeFirstDivergence=null),this._wasHighRotationInProgress=l;let d=new c(n.Quaternion.multiply(this._relAbsQuat,i),o,s);this.notify(d)};_onAttitudeFromBrowser=e=>{if(this._absAttitudeFromBrowser=e,!this._lastForcedHeadingEvent){this._forceHeadingForRelative(e);return}};_onAttitudeFromVps=e=>{this._forceHeadingForRelative(e)};feed(e){if(e instanceof t.AbsoluteHeading){if(e.time===null)throw Error(`the time of the absolute heading is not defined`);if(e.accuracy===null)throw Error(`the accuracy of the absolute heading is not defined`);this._forceHeadingForRelative(e)}else if(e instanceof c){if(e.time===null)throw Error(`the time of the attitude is not defined`);if(e.accuracy===null)throw Error(`the accuracy of the attitude is not defined`);this._forceHeadingForRelative(e)}else throw Error(`data is nor an AbsoluteHeading or an Attitude object`)}},Z=new class e extends y{static SLIDING_WINDOW_TIME=.3;static STD_THRESHOLD=.075;static CONSIDER_TURN_UNTIL=1;providerId;slidingWindow=[];getName=()=>`Turn`;availability=()=>G.getAvailability();start(){this.providerId=G.addEventListener(this._parseRelativeAttitude,this.notifyError)}stop(){G.removeEventListener(this.providerId)}isTurning(){return!this.lastEvent||!G.lastEvent?!1:G.lastEvent.time-this.lastEvent.timestamp<e.CONSIDER_TURN_UNTIL}_parseRelativeAttitude=t=>{let{heading:r}=t,i=t.time;this.slidingWindow=this.slidingWindow.filter(t=>t[0]>=i-e.SLIDING_WINDOW_TIME),this.slidingWindow.push([i,r]),(0,n.std)(this.slidingWindow.map(e=>e[1]))>e.STD_THRESHOLD&&this.notify({timestamp:i})}},Q=new class e extends y{static DEFAULT_STEPS_CONSIDERED_FOR_STRAIGHT_LINE=2;_turnProviderId;_stepProviderId;_countSteps=0;_stepsConsideredForStraightLine=e.DEFAULT_STEPS_CONSIDERED_FOR_STRAIGHT_LINE;getName=()=>`StraightLine`;availability(){return b.every([Z.getAvailability(),V.getAvailability()])}start(){this._turnProviderId=Z.addEventListener(this._onTurn),this._stepProviderId=V.addEventListener(this._onStep)}stop(){Z.removeEventListener(this._turnProviderId),V.removeEventListener(this._stepProviderId)}_onTurn=()=>{this._countSteps>=this._stepsConsideredForStraightLine&&this.notify(!1),this._countSteps=0};_onStep=()=>{this._countSteps++,this._countSteps===this._stepsConsideredForStraightLine&&this.notify(!0)};isStraight(){return this._countSteps>=this._stepsConsideredForStraightLine}get numStepsDetectedFromLastTurn(){return this._countSteps}get stepsConsideredForStraightLine(){return this._stepsConsideredForStraightLine}set stepsConsideredForStraightLine(e){this._stepsConsideredForStraightLine=e}},$=new class e extends y{static DEFAULT_MM_MAX_ANGLE=(0,n.deg2rad)(30);static DEFAULT_MM_MAX_DIST=30;static DEFAULT_USE_ITINERARY_START_AS_POSITION=!1;static DEFAULT_USE_ORIENTATION_MATCHING=!1;static DEFAULT_MM_HUGE_JUMP_DISTANCE=3;static DEFAULT_DISABLE_MM_CLOSE_TO_A_TURN_DISTANCE=2;static DEFAULT_MIN_STEPS_BETWEEN_ORIENTATION_MATCHING=3;static DEFAULT_MIN_STEPS_FOR_ORIENTATION_MATCHING=5;static DEFAULT_LAST_PROJECTIONS_WINDOW_SIZE=3;static DEFAULT_LAST_PROJECTIONS_EDGE_ANGLE_THRESHOLD=(0,n.deg2rad)(3);static DEFAULT_USE_STRICT=!1;_mapMatchingMaxDistance=e.DEFAULT_MM_MAX_DIST;_mapMatchingMaxAngleBearing=e.DEFAULT_MM_MAX_ANGLE;_useItineraryStartAsPosition=e.DEFAULT_USE_ITINERARY_START_AS_POSITION;_useOrientationMatching=e.DEFAULT_USE_ORIENTATION_MATCHING;_hugeJumpDistance=e.DEFAULT_MM_HUGE_JUMP_DISTANCE;_disableMMCloseToATurnDistance=e.DEFAULT_DISABLE_MM_CLOSE_TO_A_TURN_DISTANCE;_minStepsBetweenOrientationMatching=e.DEFAULT_MIN_STEPS_BETWEEN_ORIENTATION_MATCHING;_minStepsForOrientationMatching=e.DEFAULT_MIN_STEPS_FOR_ORIENTATION_MATCHING;_lastProjectionsWindowSize=e.DEFAULT_LAST_PROJECTIONS_WINDOW_SIZE;_lastProjectionsEdgeAngleThreshold=e.DEFAULT_LAST_PROJECTIONS_EDGE_ANGLE_THRESHOLD;_useStrict=e.DEFAULT_USE_STRICT;_graph=null;_internalProvidersStarted=!1;_straightLineProviderId;_turnProviderId;_stepProviderId;_projectionsWithAbsAndWithoutRelAttitudeInARow=[];_countStepsFromLastMatching=0;_lastProjections=[];_itineraryInfoManager=null;getName=()=>`MapMatchingHandler`;availability=()=>Promise.resolve();start(){this.graph&&this._startInternalProviders()}stop(){this._stopInternalProviders()}_manageStartStop=()=>{this.graph&&!this._internalProvidersStarted?this._startInternalProviders():!this.graph&&this._internalProvidersStarted&&this._stopInternalProviders()};_startInternalProviders(){this.enabled&&this._internalProvidersStarted||(this._straightLineProviderId=Q.addEventListener(),this._turnProviderId=Z.addEventListener(),this._stepProviderId=V.addEventListener(()=>this._countStepsFromLastMatching++),this._internalProvidersStarted=!0)}_stopInternalProviders(){this.enabled&&!this._internalProvidersStarted||(Q.removeEventListener(this._straightLineProviderId),Z.removeEventListener(this._turnProviderId),V.removeEventListener(this._stepProviderId),this._internalProvidersStarted=!1)}get enabled(){return l.useMapMatching}get graph(){return this._graph}set graph(e){this._graph=e,this._itineraryInfoManager=null,this.notify({...e&&{graph:e}}),this._manageStartStop(),this.canUseMapMatching()}set itinerary(e){this._graph=e?e.toGraph():null,this._itineraryInfoManager=new r.ItineraryInfoManager(e),this.notify({...e&&{itinerary:e}}),this._manageStartStop(),this.canUseMapMatching()&&e&&this._notifyPositionFromItineraryInput(e)}canUseMapMatching(){return this.enabled&&this.graph}_notifyPositionFromItineraryInput(e){if(!this._useItineraryStartAsPosition||!e.origin)return;let n=J.lastEvent||null,r=t.UserPosition.fromCoordinates(e.origin);if(n)r.alt=n.alt,r.time=n.time,r.accuracy=n.accuracy+r.distanceTo(n),r.bearing=n.bearing;else if(e.coords.length>=2)r.alt=_e.DEFAULT_ALTITUDE,r.time=i.TimeUtils.preciseTime(),r.accuracy=0,r.bearing=e.coords[0].bearingTo(e.coords[1]);else return;let a=this.getProjection(r,!0);a?J.notify(a.coords):J.notify(r)}notifyPositionFromFeed(e){let t=this.getProjection(e,!0,!1);if(this._useStrict&&t){J.notify(t.coords);return}if(!t){J.notify(e);return}J.notify(t.coords)}notifyPositionFromAbsolute(e){if(this._useStrict){let t=this.getProjection(e);if(t)return J.notify(t.coords),!0}let t=null;if(e.bearing!==null&&(t=this.getProjection(e,!0,!0)),!t)return J.notify(e),!0;let n=t.distanceFromNearestElement>this._hugeJumpDistance;return n&&!Q.isStraight()||n&&this._detectWrongBigJump(t)?!1:(J.notify(t.coords),this.tryOrientationMatching(t),!0)}notifyPositionFromRelative(e){let t=this.getProjection(e,!0,!0);if(this._useStrict&&t)return J.notify(t.coords),!0;if(Z.isTurning())return this._projectionsWithAbsAndWithoutRelAttitudeInARow=[],this._lastProjections=[],J.notify(e),!0;if(t){this._projectionsWithAbsAndWithoutRelAttitudeInARow=[],this._lastProjections.push(t),this._lastProjections.length>this._lastProjectionsWindowSize&&this._lastProjections.shift();let n=t.distanceFromNearestElement>this._hugeJumpDistance;return n&&!Q.isStraight()||n&&this._detectWrongBigJump(t)||!this._areLastProjectionsInTheSameDirection()||this._disableMMCloseToATurnDistance>0&&this._hasTurnInCircle(t.coords,this._disableMMCloseToATurnDistance)?(J.notify(e),!0):(J.notify(t.coords),this.tryOrientationMatching(t),!0)}if(Q.isStraight()){let t=e.clone();t.bearing=Y.lastEvent?.heading||null;let n=this.getProjection(t,!0,!0);if(n)return this._projectionsWithAbsAndWithoutRelAttitudeInARow.push(n),this._projectionsWithAbsAndWithoutRelAttitudeInARow.length<3||(this._lastProjections.push(n),this._lastProjections.length>this._lastProjectionsWindowSize&&this._lastProjections.shift(),!this._areLastProjectionsInTheSameDirection())?(J.notify(e),!0):(J.notify(n.coords),this.tryOrientationMatching(n),!0)}return this._projectionsWithAbsAndWithoutRelAttitudeInARow=[],this._lastProjections=[],J.notify(e),!0}_detectWrongBigJump(e){if(this._itineraryInfoManager&&J.lastEvent){let t=this._itineraryInfoManager.getInfo(J.lastEvent),n=this._itineraryInfoManager.getInfo(e.coords);if(t&&n&&t.traveledDistance>n.traveledDistance&&t.traveledDistance-n.traveledDistance>e.origin.accuracy&&e.distanceFromNearestElement>e.origin.accuracy&&e.origin.distanceTo(J.lastEvent)<e.origin.accuracy+J.lastEvent.accuracy)return!0}return!1}_areLastProjectionsInTheSameDirection(){if(this._lastProjections.length===0)return!1;let e=this._lastProjections[0];return!this._lastProjections.some(t=>!(t.nearestElement instanceof r.Edge)||!(e.nearestElement instanceof r.Edge)||(0,n.diffAngleLines)(t.nearestElement.bearing,e.nearestElement.bearing)>this._lastProjectionsEdgeAngleThreshold)}_nodeHasTurn(t){if(!this._graph)return;let r=this._graph.edges.filter(e=>e.vertex1===t||e.vertex2===t);for(let t=0;t<r.length;t++)for(let i=t+1;i<r.length;i++)if((0,n.diffAngleLines)(r[t].bearing,r[i].bearing)>e.DEFAULT_MM_MAX_ANGLE)return!0;return!1}_hasTurnInCircle(e,n){let r=this._graph;return r?r.vertices.filter(r=>r.coords.distanceTo(e)<=n&&t.Level.intersect(r.coords.level,e.level)).some(e=>this._nodeHasTurn(e)):!1}tryOrientationMatching(e){if(!this._useOrientationMatching||this.state!==`started`||this._countStepsFromLastMatching<this._minStepsBetweenOrientationMatching||Q.numStepsDetectedFromLastTurn<this._minStepsForOrientationMatching)return;let{nearestElement:i,origin:a}=e;if(!(i instanceof r.Edge))return;let o,s=(0,n.diffAngle)(i.bearing,a.bearing),c=(0,n.diffAngle)(i.bearing+Math.PI,a.bearing);o=Math.abs(s)<Math.abs(c)?i.bearing:(i.bearing+Math.PI)%(2*Math.PI);let l=new t.AbsoluteHeading(o,a.time,0);X._forceHeadingForRelative(l),this._countStepsFromLastMatching=0}getProjection(e,t,n){let r={...t&&!this._useStrict&&{maxDistance:this._mapMatchingMaxDistance},...n&&!this._useStrict&&{maxBearingAngle:this._mapMatchingMaxAngleBearing}};return this._graph?.getProjection(e,r)}get maxDistance(){return this._mapMatchingMaxDistance}set maxDistance(e){this._mapMatchingMaxDistance=e}get maxAngleBearing(){return this._mapMatchingMaxAngleBearing}set maxAngleBearing(e){this._mapMatchingMaxAngleBearing=e}get useItineraryStartAsPosition(){return this._useItineraryStartAsPosition}set useItineraryStartAsPosition(e){this._useItineraryStartAsPosition=e}get useOrientationMatching(){return this._useOrientationMatching}set useOrientationMatching(e){this._useOrientationMatching=e}get hugeJumpDistance(){return this._hugeJumpDistance}set hugeJumpDistance(e){this._hugeJumpDistance=e}get disableMMCloseToATurnDistance(){return this._disableMMCloseToATurnDistance}set disableMMCloseToATurnDistance(e){this._disableMMCloseToATurnDistance=e}get minStepsBetweenOrientationMatching(){return this._minStepsBetweenOrientationMatching}set minStepsBetweenOrientationMatching(e){this._minStepsBetweenOrientationMatching=e}get minStepsForOrientationMatching(){return this._minStepsForOrientationMatching}set minStepsForOrientationMatching(e){this._minStepsForOrientationMatching=e}get lastProjectionsWindowSize(){return this._lastProjectionsWindowSize}set lastProjectionsWindowSize(e){this._lastProjectionsWindowSize=e}get lastProjectionsEdgeAngleThreshold(){return this._lastProjectionsEdgeAngleThreshold}set lastProjectionsEdgeAngleThreshold(e){this._lastProjectionsEdgeAngleThreshold=e}get useStrict(){return this._useStrict}set useStrict(e){this._useStrict=e}},Be=class e{static DEFAULT_FREQUENCY=60;static DEFAULT_FLYBY_TIME=1;positionsQueue=[];previousPosition=null;timeoutNotify;callback;frequency;constructor(t,n=e.DEFAULT_FREQUENCY){this.callback=t,this.frequency=n}feed(n,r=e.DEFAULT_FLYBY_TIME){if(!(n instanceof t.UserPosition))throw TypeError(`newPosition is not instance of UserPosition`);if(n.time===null)throw Error(`newPosition does not have time property`);let i;if(this.positionsQueue.length===0?i=this.previousPosition:(i=this.positionsQueue[0],this.positionsQueue=[]),i){let e=n.time,a=i.distanceTo(n),o=i.bearingTo(n),s=1,c=this.frequency*r+1,l=t.Level.clone(n.level);for(;s<c+1;){let t=i.destinationPoint(a*s/c,o);t.time=e+(s-1)/this.frequency,t.level=l,t.bearing=n.bearing,t.accuracy=Math.max(t.accuracy+(n.accuracy-t.accuracy)*s/c,0),this.positionsQueue.push(t),s++}this.timeoutNotify&&clearTimeout(this.timeoutNotify)}else this.positionsQueue.push(n.clone());this.previousPosition=n,this._notifyNext()}_notifyNext=()=>{this.positionsQueue.length&&(this.callback?.(this.positionsQueue.shift()),this.positionsQueue.length===0?delete this.timeoutNotify:this.timeoutNotify=setTimeout(this._notifyNext,1e3/this.frequency))};clear(){clearTimeout(this.timeoutNotify),delete this.timeoutNotify,this.positionsQueue=[]}},Ve=class e{static ROTATION_SPEED_JUMP_THRESHOLD=(0,n.deg2rad)(180);static ROTATION_SPEED_CONVERGENCE=(0,n.deg2rad)(10);static HIGH_JUMP_THRESHOLD=(0,n.deg2rad)(20);static ROTATION_SPEED_HIGH_JUMP_CONVERGENCE=(0,n.deg2rad)(100);static PITCH_UNCERTAINITY_HEADING_THRESHOLD=(0,n.deg2rad)(5);_previousAttitude;_smoothing=null;callback;constructor(e){this.callback=e}feed(r){if(r.time===null)throw Error(`newAttitude does not have time property`);let{_previousAttitude:i}=this;if(this._previousAttitude=r,!i){this.callback(r);return}if(e.isJump(i,r)){let a=this._smoothing===null?i:this._smoothing.interpAttitude(i),o=a.heading,s=r.heading,c=(0,n.diffAngle)(s,o),l=Math.abs(c)<e.HIGH_JUMP_THRESHOLD?e.ROTATION_SPEED_CONVERGENCE:e.ROTATION_SPEED_HIGH_JUMP_CONVERGENCE,u=a.time,d=Math.abs(c)/l,f=c<0?-1:1;this._smoothing={toTime:u+d,interpAttitude:e=>{let r=l*(e.time-u),i=o+r*f,a=n.Quaternion.fromAxisAngle([0,0,1],s-i);return new t.Attitude(n.Quaternion.multiply(a,e.quaternion),e.time,e.accuracy)}}}if(this._smoothing!==null)if(r.time>=this._smoothing.toTime)this._smoothing=null;else{let e=this._smoothing.interpAttitude(r);this.callback(e);return}this.callback(r)}static isJump(t,r){let i=t.heading,a=r.heading,o=(0,n.diffAngle)(a,i),s=r.time-t.time,[c,l,u,d]=r.quaternion;return Math.abs(Math.asin(2*(c*l+u*d))-Math.PI/4)<e.PITCH_UNCERTAINITY_HEADING_THRESHOLD?!1:Math.abs(o)>e.ROTATION_SPEED_JUMP_THRESHOLD*s}},He=new class extends y{getName=()=>`MagnetometerCalibrationProvider`;availability=()=>X.getAvailability();constructor(){super(),X._setCallbackMagCalibration(e=>this.state===`started`&&this.notify(e))}start(){}stop(){}},Ue=class e extends Error{static DEFAULT_MESSAGE=`IP Resolver failed`;constructor(t){super(t||e.DEFAULT_MESSAGE)}},We=new class extends y{getName=()=>`Ip`;availability=()=>Promise.resolve();async start(){let e=await fetch(`https://ipinfo.io/geo?token=24a7ca2f3b489d`);if(!e){this.notifyError(new Ue);return}let n=i.TimeUtils.preciseTime()/1e3,r=(await e.json()).loc.split(`,`),a=new t.UserPosition(parseFloat(r[0]),parseFloat(r[1]),null,null,n,1e5);this.notify(a)}stop(){}},Ge=class e{static MAX_CONSECUTIVE_FAILURES=10;intervalMs;maxDurationMs;expiresAt=null;enabled;timeoutId=null;listenerId=null;scanFailureListenerId=null;isBackgroundScanRunning=!1;consecutiveFailures=0;_status;statusCallbacks=new Set;onResult;onError;constructor(e,t,n){this.onResult=t,this.onError=n,this.intervalMs=e.intervalMs??3e4,this.maxDurationMs=e.maxDurationMs??30*6e4,this.enabled=e.enabled??!1,this._status=this.enabled?`idle`:`disabled`}get status(){return this._status}setEnabled(e){this.enabled=e,e?!this.isBackgroundScanRunning&&!this.timeoutId&&this.setStatus(`idle`):(this.clear(),this.setStatus(`disabled`))}onStatusChange(e){return this.statusCallbacks.add(e),()=>{this.offStatusChange(e)}}offStatusChange(e){this.statusCallbacks.delete(e)}schedule(){if(this.enabled){if(this.maxDurationMs>0&&this.expiresAt===null&&(this.expiresAt=Date.now()+this.maxDurationMs),this.expired){this.clearTimeoutOnly();return}this.clearTimeoutOnly(),this.timeoutId=setTimeout(()=>{this.timeoutId=null,this.startBackgroundScan()},this.intervalMs),this.setStatus(`scheduled`)}}async cancelRunningScan(){this.isBackgroundScanRunning&&(this.listenerId!==null&&(q.removeEventListener(this.listenerId),this.listenerId=null,q.stop()),this.scanFailureListenerId!==null&&(q.removeScanFailureListener(this.scanFailureListenerId),this.scanFailureListenerId=null),this.isBackgroundScanRunning=!1,this.setStatus(this.enabled?`idle`:`disabled`))}clear(){this.expiresAt=null,this.clearTimeoutOnly(),this.listenerId!==null&&(q.removeEventListener(this.listenerId),this.listenerId=null),this.scanFailureListenerId!==null&&(q.removeScanFailureListener(this.scanFailureListenerId),this.scanFailureListenerId=null),this.isBackgroundScanRunning=!1,this.setStatus(this.enabled?`idle`:`disabled`)}runNow(){if(this.enabled){if(this.expired){this.clearTimeoutOnly();return}this.clearTimeoutOnly(),this.startBackgroundScan()}}resetBudget(){this.expiresAt=null}get expired(){return this.expiresAt!==null&&Date.now()>=this.expiresAt}clearTimeoutOnly(){this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.enabled&&!this.isBackgroundScanRunning&&this.setStatus(`idle`)}async startBackgroundScan(){if(!this.enabled||this.isBackgroundScanRunning||this.listenerId!==null)return;if(this.expired){this.setStatus(`idle`);return}let t=await q.getAvailability();if(t instanceof Error){this.onError(t),this.setStatus(`idle`);return}this.isBackgroundScanRunning=!0,this.setStatus(`scanning`),this.scanFailureListenerId=q.addScanFailureListener(t=>{!this.isBackgroundScanRunning||this.scanFailureListenerId===null||t.listenerId!==this.scanFailureListenerId||(this.consecutiveFailures+=1,this.consecutiveFailures>=e.MAX_CONSECUTIVE_FAILURES&&(this.consecutiveFailures=0,q.resetCurrentAttempt(),this.cleanupListener(),this.schedule()))}),this.listenerId=q.addEventListener(e=>{this.consecutiveFailures=0,this.cleanupListener(),this.onResult(e),this.schedule()},e=>{this.cleanupListener(),this.onError(e),this.schedule()})}cleanupListener(){this.listenerId!==null&&(q.removeEventListener(this.listenerId),this.listenerId=null),this.scanFailureListenerId!==null&&(q.removeScanFailureListener(this.scanFailureListenerId),this.scanFailureListenerId=null),q.stop(),this.isBackgroundScanRunning=!1,this.enabled?this.setStatus(`idle`):this.setStatus(`disabled`)}setStatus(e){this._status!==e&&(this._status=e,this.statusCallbacks.forEach(t=>{try{t(e)}catch(e){console.error(`[VpsBackgroundScanner] Error in status listener`,e)}}))}},Ke=new class extends y{providerId;getName=()=>`Barcode`;availability=()=>P.getAvailability();start(){P.enableBarcodeScanner(),this.providerId=P.addEventListener(e=>e.barcode&&this.notify(e.barcode),this.notifyError)}stop(){P.disableBarcodeScanner(),P.removeEventListener(this.providerId)}},qe=new class extends y{providerId;getName=()=>`CameraNative`;availability=()=>Promise.resolve();start(){P.state!==`stopped`&&this.notify(`started`),this.providerId=P.addMonitoringListener(()=>this.notify(`started`),()=>this.notify(`stopped`))}stop(){P.removeMonitoringListener(this.providerId)}},Je=new class extends y{providerId;getName=()=>`CameraProjectionMatrix`;availability=()=>P.getAvailability();start(){this.providerId=P.addEventListener(e=>e.cameraProjection&&this.notify(e.cameraProjection),this.notifyError)}stop(){P.removeEventListener(this.providerId)}};e.AbsoluteAttitude=c,e.AbsoluteAttitudeFromBrowserProvider=Y,e.AbsoluteAttitudeProvider=X,e.AbsolutePosition=o,e.AbsolutePositionProvider=J,e.AccelerometerProvider=I,e.ArCoreProvider=P,e.AttitudeSmoother=Ve,e.BarcodeProvider=Ke,e.CameraNativeProvider=qe,e.CameraProjectionMatrixProvider=Je,e.Constants=_e,e.GeoRelativePositionFromArCoreProvider=be,e.GeoRelativePositionProvider=H,e.GnssWifiProvider=N,e.GyroscopeProvider=L,e.HighRotationsProvider=z,e.ImageRelocalization=Le,e.ImuProvider=F,e.InclinationFromAccProvider=Ne,e.InclinationFromRelativeAttitudeProvider=U,e.InclinationProvider=W,e.IpProvider=We,e.MagnetometerCalibrationProvider=He,e.MapMatchingHandler=$,e.PdrProvider=je,e.PoleStarProvider=K,e.PositionSmoother=Be,e.ProvidersLoggerOld=_,e.ProvidersOptions=l,e.RelativeAttitude=s,e.RelativeAttitudeFromBrowserProvider=R,e.RelativeAttitudeFromEkfProvider=Ee,e.RelativeAttitudeFromInertialProvider=B,e.RelativeAttitudeProvider=G,e.RelativeRotationCalc=Re,e.StepDetectionMinMaxPeaks2=ke,e.StepDetectionMinMaxPeaks3=Ae,e.StepProvider=V,e.StraightLineProvider=Q,e.TurnProvider=Z,e.VpsBackgroundScanner=Ge,e.VpsMetadata=Pe,e.VpsProvider=q,e.VpsRequest=Fe,e.VpsResponse=Ie});
|
package/dist/index.js
CHANGED
|
@@ -1919,7 +1919,7 @@ var ke = function(e, t, n) {
|
|
|
1919
1919
|
}
|
|
1920
1920
|
}(), $e = {
|
|
1921
1921
|
name: "@wemap/providers",
|
|
1922
|
-
version: "14.
|
|
1922
|
+
version: "14.8.0-beta.1",
|
|
1923
1923
|
description: "Sensor, positioning and VPS providers for the Wemap SDK.",
|
|
1924
1924
|
license: "UNLICENSED",
|
|
1925
1925
|
author: "Wemap SAS",
|
|
@@ -1947,13 +1947,13 @@ var ke = function(e, t, n) {
|
|
|
1947
1947
|
sideEffects: !1,
|
|
1948
1948
|
files: ["dist"],
|
|
1949
1949
|
dependencies: {
|
|
1950
|
-
"@wemap/camera": "14.
|
|
1951
|
-
"@wemap/core": "14.
|
|
1952
|
-
"@wemap/geo": "14.
|
|
1953
|
-
"@wemap/maths": "14.
|
|
1954
|
-
"@wemap/osm": "14.
|
|
1955
|
-
"@wemap/routers": "14.
|
|
1956
|
-
"@wemap/utils": "14.
|
|
1950
|
+
"@wemap/camera": "14.8.0-beta.1",
|
|
1951
|
+
"@wemap/core": "14.8.0-beta.1",
|
|
1952
|
+
"@wemap/geo": "14.8.0-beta.1",
|
|
1953
|
+
"@wemap/maths": "14.8.0-beta.1",
|
|
1954
|
+
"@wemap/osm": "14.8.0-beta.1",
|
|
1955
|
+
"@wemap/routers": "14.8.0-beta.1",
|
|
1956
|
+
"@wemap/utils": "14.8.0-beta.1"
|
|
1957
1957
|
},
|
|
1958
1958
|
devDependencies: {
|
|
1959
1959
|
"@wemap/logger-legacy": "^13.3.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wemap/providers",
|
|
3
|
-
"version": "14.8.0-beta.
|
|
3
|
+
"version": "14.8.0-beta.2",
|
|
4
4
|
"description": "Sensor, positioning and VPS providers for the Wemap SDK.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "Wemap SAS",
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
"dist"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@wemap/camera": "14.8.0-beta.
|
|
40
|
-
"@wemap/core": "14.8.0-beta.
|
|
41
|
-
"@wemap/geo": "14.8.0-beta.
|
|
42
|
-
"@wemap/maths": "14.8.0-beta.
|
|
43
|
-
"@wemap/osm": "14.8.0-beta.
|
|
44
|
-
"@wemap/routers": "14.8.0-beta.
|
|
45
|
-
"@wemap/utils": "14.8.0-beta.
|
|
39
|
+
"@wemap/camera": "14.8.0-beta.2",
|
|
40
|
+
"@wemap/core": "14.8.0-beta.2",
|
|
41
|
+
"@wemap/geo": "14.8.0-beta.2",
|
|
42
|
+
"@wemap/maths": "14.8.0-beta.2",
|
|
43
|
+
"@wemap/osm": "14.8.0-beta.2",
|
|
44
|
+
"@wemap/routers": "14.8.0-beta.2",
|
|
45
|
+
"@wemap/utils": "14.8.0-beta.2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@wemap/logger-legacy": "^13.3.0",
|