UNPKG

@neurosity/notion

Version:
52 lines 56.4 kB
process.env.HMR_PORT=0;process.env.HMR_HOSTNAME="localhost";parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"TX5A":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.config={apiKey:"AIzaSyB0TkZ83Fj0CIzn8AAmE-Osc92s3ER8hy8",authDomain:"neurosity-device.firebaseapp.com",databaseURL:"https://neurosity-device.firebaseio.com",projectId:"neurosity-device",storageBucket:"neurosity-device.appspot.com",messagingSenderId:"212595049674"}; },{}],"OERo":[function(require,module,exports) { "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const t=e(require("firebase/app"));require("firebase/database"),require("firebase/auth"),require("firebase/functions"),require("firebase/firestore");const a=require("./config");exports.SERVER_TIMESTAMP=t.default.database.ServerValue.TIMESTAMP;class i{constructor(e){this.app=this.getApp(e.deviceId),this.standalone=this.app.name===e.deviceId,e.emulator&&this.connectEmulators(e)}getApp(e){const i=t.default.apps,s="undefined"!=typeof window&&"firebase"in window&&"apps"in window.firebase?window.firebase.apps:[],r=[...i,...s].find(e=>"[DEFAULT]"===e.name&&e.options.databaseURL===a.config.databaseURL);if(r)return r;if(e){const s=e,r=i.find(e=>e.name===s);return r||t.default.initializeApp(a.config,s)}return t.default.initializeApp(a.config)}connectEmulators(e){const{emulatorHost:t,emulatorAuthPort:a,emulatorDatabasePort:i,emulatorFunctionsPort:s,emulatorFirestorePort:r,emulatorOptions:o}=e;this.app.auth().useEmulator(`http://${t}:${a}`),this.app.database().useEmulator(t,i,o),this.app.functions().useEmulator(t,s),this.app.firestore().useEmulator(t,r,o)}goOnline(){this.app.database().goOnline()}goOffline(){this.app.database().goOffline()}disconnect(){return this.standalone?this.app.delete():Promise.resolve()}}exports.FirebaseApp=i; },{"./config":"TX5A"}],"Cc51":[function(require,module,exports) { "use strict";var e=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))(function(n,s){function a(e){try{c(r.next(e))}catch(t){s(t)}}function o(e){try{c(r.throw(e))}catch(t){s(t)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,o)}c((r=r.apply(e,t||[])).next())})},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const i=require("rxjs"),r=require("rxjs/operators"),n=t(require("firebase/app")),s=n.default.database.ServerValue.TIMESTAMP;function a(...e){return new n.default.User(...e)}exports.credentialWithLink=n.default.auth.EmailAuthProvider.credentialWithLink,exports.createUser=a;class o{constructor(e){this.app=e.app,this.app.auth().onAuthStateChanged(e=>{this.user=e})}auth(){return this.app.auth()}createAccount(t){return e(this,void 0,void 0,function*(){const{email:e,password:i}=t,[r,n]=yield this.app.auth().createUserWithEmailAndPassword(e,i).then(e=>[null,e]).catch(e=>[e,null]);return r?Promise.reject(r):n})}deleteAccount(){return e(this,void 0,void 0,function*(){const e=this.app.auth().currentUser;if(!e)return Promise.reject(new Error("You are trying to delete an account that is not authenticated. To delete an account, the account must have signed in recently."));const[t,i]=yield this.getDevices().then(e=>[null,e]).catch(e=>[e,null]);if(t)return Promise.reject(t);if(i.length){const e=yield Promise.all(i.map(e=>this.removeDevice(e.deviceId))).then(()=>null).catch(e=>e);if(e)return Promise.reject(e)}return e.delete()})}onAuthStateChanged(){return new i.Observable(e=>{try{this.app.auth().onAuthStateChanged(t=>{e.next(t)},t=>{e.error(t)})}catch(t){e.error(t)}})}onLogin(){return new i.Observable(e=>{const t=this.app.auth().onAuthStateChanged(t=>{t&&(e.next(t),e.complete())});return()=>t()})}login(e){if("customToken"in e){const{customToken:t}=e;return this.app.auth().signInWithCustomToken(t)}if("idToken"in e&&"providerId"in e){const t=new n.default.auth.OAuthProvider(e.providerId).credential(e.idToken);return this.app.auth().signInWithCredential(t)}if("email"in e&&"password"in e){const{email:t,password:i}=e;return this.app.auth().signInWithEmailAndPassword(t,i)}throw new Error("Either {email,password}, {customToken}, or {idToken,providerId} is required")}logout(){return this.app.auth().signOut()}createCustomToken(){return e(this,void 0,void 0,function*(){const[e,t]=yield this.app.functions().httpsCallable("createCustomToken")().then(({data:e})=>[null,e]).catch(e=>[e,null]);return e?Promise.reject(e):t})}removeOAuthAccess(){var t;return e(this,void 0,void 0,function*(){if(!(null===(t=this.user)||void 0===t?void 0:t.uid))return Promise.reject("OAuth access can only be removed while logged in via OAuth.");const[e,i]=yield this.app.functions().httpsCallable("removeAccessOAuthApp")().then(({data:e})=>[null,e]).catch(e=>[e,null]);if(e)return Promise.reject(e);const r=yield this.logout().then(()=>!1).catch(e=>e);return r?Promise.reject(r):i})}getDevices(){var t;return e(this,void 0,void 0,function*(){if(!(null===(t=this.user)||void 0===t?void 0:t.uid))return Promise.reject("Please login.");const e=(yield this.app.database().ref(this.getUserDevicesPath()).once("value")).val();return this.userDevicesToDeviceInfoList(e)})}addDevice(t){var i;return e(this,void 0,void 0,function*(){const e=null===(i=this.user)||void 0===i?void 0:i.uid;if(!e)return Promise.reject("Please login.");const r=yield this.getDevices().catch(e=>{console.log(e)});if(r&&r.length&&r.map(({deviceId:e})=>e).includes(t))return Promise.reject("The device is already added to this account.");const[n,a]=yield this.isDeviceIdValid(t).then(e=>[e]).catch(e=>[!1,e]);if(!n)return Promise.reject(a);const o=this.getDeviceClaimedByPath(t),c=this.getUserClaimedDevicePath(t),[u,d]=yield this.app.database().ref().update({[o]:e,[c]:{claimedOn:s}}).then(()=>[!1]).catch(e=>[!0,e]);return u?Promise.reject(d):void 0})}removeDevice(t){var i;return e(this,void 0,void 0,function*(){if(!(null===(i=this.user)||void 0===i?void 0:i.uid))return Promise.reject("Please login.");const e=this.getDeviceClaimedByPath(t),r=this.getUserClaimedDevicePath(t),n=this.app.database().ref(e),s=this.app.database().ref(r),[a,o]=yield Promise.all([n.remove(),s.remove()]).then(()=>[!1]).catch(e=>[!0,e]);return a?Promise.reject(o):void 0})}transferDevice(t){var i;return e(this,void 0,void 0,function*(){if(!(null===(i=this.user)||void 0===i?void 0:i.uid))return Promise.reject(new Error("transferDevice: auth is required."));if(!("recipientsEmail"in t||"recipientsUserId"in t))return Promise.reject(new Error("transferDevice: either 'recipientsEmail' or 'recipientsUserId' key is required."));if(!(null==t?void 0:t.deviceId))return Promise.reject(new Error("transferDevice: a deviceId is required."));const[e,r]=yield this.app.functions().httpsCallable("transferDeviceOwnership")(t).then(({data:e})=>[null,e]).catch(e=>[e,null]);return e?Promise.reject(e):void 0})}isDeviceIdValid(t){return e(this,void 0,void 0,function*(){if(!t||32!==t.length||!/[0-9A-Fa-f]{32}/g.test(t))return Promise.reject("The device id is incorrectly formatted.");const e=this.getDeviceClaimedByPath(t),i=this.app.database().ref(e),r=yield i.once("value").catch(()=>null);return!(!r||r.exists())||Promise.reject("The device has already been claimed.")})}onUserDevicesChange(){return this.onAuthStateChanged().pipe(r.switchMap(e=>{if(!e)return i.empty();const t=this.getUserDevicesPath(),n=this.app.database().ref(t);return i.fromEventPattern(e=>n.on("value",e),e=>n.off("value",e)).pipe(r.map(([e])=>e.val()),r.switchMap(e=>i.from(this.userDevicesToDeviceInfoList(e))))}))}onUserClaimsChange(){return this.onAuthStateChanged().pipe(r.switchMap(e=>{if(!e)return i.empty();const t=this.getUserClaimsUpdatedOnPath(),n=this.app.database().ref(t);return i.fromEventPattern(e=>n.on("value",e),e=>n.off("value",e)).pipe(r.map(([e])=>e.val()),r.switchMap(()=>i.from(this.getIdToken(!0)).pipe(r.switchMap(()=>i.from(this.getClaims())))))}))}getIdToken(t=!1){var i;return e(this,void 0,void 0,function*(){const e=null===(i=this.app.auth())||void 0===i?void 0:i.currentUser;if(!e)return Promise.reject("getUserIdToken: unable to get currentUser");yield e.getIdToken(t).catch(e=>{console.error(e)})})}getClaims(){var e;const t=null===(e=this.app.auth())||void 0===e?void 0:e.currentUser;return t?t.getIdTokenResult().then(e=>e.claims).catch(e=>(console.error(e),null)):Promise.reject("getUserClaims: unable to get currentUser")}userDevicesToDeviceInfoList(t){return e(this,void 0,void 0,function*(){const e=Object.keys(null!=t?t:{}).map(e=>this.app.database().ref(this.getDeviceInfoPath(e)).once("value")),i=(yield Promise.all(e).then(e=>e.map(e=>e.val()))).filter(e=>!!e);return i.sort((e,i)=>t[e.deviceId].claimedOn-t[i.deviceId].claimedOn),i})}hasDevicePermission(t){return e(this,void 0,void 0,function*(){const e=this.getDeviceInfoPath(t);return yield this.app.database().ref(e).once("value").then(()=>!0).catch(()=>!1)})}getDeviceClaimedByPath(e){return`devices/${e}/status/claimedBy`}getUserClaimedDevicePath(e){return`users/${this.user.uid}/devices/${e}`}getUserDevicesPath(){return`users/${this.user.uid}/devices`}getUserClaimsUpdatedOnPath(){return`users/${this.user.uid}/claimsUpdatedOn`}getDeviceInfoPath(e){return`devices/${e}/info`}onUserExperiments(){return this.onAuthStateChanged().pipe(r.switchMap(e=>{if(!e)return i.empty();const t=this.user.uid,n=this.app.database().ref("experiments").orderByChild("userId").equalTo(t).limitToFirst(100);return i.fromEventPattern(e=>n.on("value",e),e=>n.off("value",e)).pipe(r.map(([e])=>e.val()),r.map(e=>Object.entries(null!=e?e:{}).map(([e,t])=>{var i;return Object.assign({id:null!==(i=null==t?void 0:t.id)&&void 0!==i?i:e},t)}).sort((e,t)=>new Date(null==t?void 0:t.timestamp).getTime()-new Date(null==e?void 0:e.timestamp).getTime())))}))}deleteUserExperiment(t){return e(this,void 0,void 0,function*(){if(!t)return Promise.reject("deleteUserExperiment: please provide an experiment id");yield Promise.all([(e=>this.app.database().ref("experiments").child(e).remove())(t),(e=>this.app.functions().httpsCallable("removeRelations")({experimentId:e}))(t)]).catch(()=>{})})}}exports.FirebaseUser=o; },{}],"mSvX":[function(require,module,exports) { "use strict";var e=this&&this.__awaiter||function(e,t,i,o){return new(i||(i=Promise))(function(n,c){function s(e){try{u(o.next(e))}catch(t){c(t)}}function r(e){try{u(o.throw(e))}catch(t){c(t)}}function u(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,r)}u((o=o.apply(e,t||[])).next())})},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const i=t(require("firebase/app")),o=i.default.database.ServerValue.TIMESTAMP;exports.createDeviceStore=((t,i,n)=>{const c=t.database().ref(`devices/${i}`),s=c.child("subscriptions").push().key,r=c.child(`clients/${s}`);let u=[];const a=(e,t)=>c.child(e).set(t),l=(e,t)=>c.child(e).update(t),d=(e="value",t,i)=>{const o=c.child(t).on(e,e=>{i(e.val(),e)});return u.push(()=>{c.child(t).off(e,o)}),o},v=(e,t,i)=>{i?c.child(e).off(t,i):c.child(e).off(t)},f=t.database().ref(".info/connected").on("value",e=>{e.val()&&r.onDisconnect().remove().then(()=>{r.set(o),l("subscriptions",n.get()).then(()=>{n.toList().forEach(e=>{const t=`subscriptions/${e.id}`;c.child(t).onDisconnect().remove()})})})});return u.push(()=>{t.database().ref(".info/connected").off("value",f)}),{set:a,once:(t,i="value")=>e(void 0,void 0,void 0,function*(){return(yield c.child(t).once(i)).val()}),update:l,lastOfChildValue:(t,i,o)=>e(void 0,void 0,void 0,function*(){const e=(yield c.child(t).orderByChild(i).equalTo(o).limitToLast(1).once("value")).val(),[n]=Object.values(e||{});return n||null}),onNamespace:(e,t)=>d("value",e,e=>{t(e)}),offNamespace:(e,t)=>{v(e,"value",t)},dispatchAction:t=>e(void 0,void 0,void 0,function*(){const e=yield((e,t)=>c.child(e).push(t))("actions",t),i=e.key,o=`actions/${i}`;if(e.onDisconnect().remove(),t.responseRequired){const i=t.responseTimeout||6e5,n=new Promise((t,o)=>{const n=setTimeout(()=>{clearTimeout(n),e.remove(),o(`Action response timed out in ${i}ms.`)},i)}),c=new Promise(e=>{((e,t,i,o)=>{d(e,t,n=>{null!==n&&(v(t,e),i(o||n))})})("value",`${o}/response`,e)});return Promise.race([c,n])}return i}),nextMetric:(t,i)=>e(void 0,void 0,void 0,function*(){a(`metrics/${t}`,i)}),onMetric:(e,t)=>{const{atomic:i,metric:o,labels:n}=e,c=i?`metrics/${o}`:`metrics/${o}/${n[0]}`;return d("value",c,e=>{null!==e&&t(e)})},subscribeToMetric:e=>{const t=c.child("subscriptions").push().key,i=`subscriptions/${t}`,o=Object.assign({id:t,clientId:s},e);return a(i,o),c.child(i).onDisconnect().remove(),o},unsubscribeFromMetric:e=>{(e=>{c.child(e).remove()})(`subscriptions/${e.id}`)},removeMetricListener(e,t){const{atomic:i,metric:o,labels:n}=e,c=i?`metrics/${o}`:`metrics/${o}/${n[0]}`;v(c,"value",t)},disconnect(){r.remove(),u.forEach(e=>{e()}),n.toList().filter(e=>e.clientId===s).forEach(e=>{const t=`subscriptions/${e.id}`;c.child(t).remove()})}}}); },{}],"KzOJ":[function(require,module,exports) { "use strict";var e=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))(function(n,c){function s(e){try{u(r.next(e))}catch(t){c(t)}}function o(e){try{u(r.throw(e))}catch(t){c(t)}}function u(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,o)}u((r=r.apply(e,t||[])).next())})},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const i=t(require("firebase/app")),r=require("./deviceStore"),n=i.default.database.ServerValue.TIMESTAMP;class c{constructor({deviceId:e,firebaseApp:t,dependencies:i}){this.app=t.app,this.deviceStore=r.createDeviceStore(this.app,e,i.subscriptionManager)}get timestamp(){return n}dispatchAction(e){return this.deviceStore.dispatchAction(e)}getInfo(){return e(this,void 0,void 0,function*(){return yield this.deviceStore.once("info")})}onNamespace(e,t){return this.deviceStore.onNamespace(e,t)}onceNamespace(t){return e(this,void 0,void 0,function*(){return yield this.deviceStore.once(t)})}offNamespace(e,t){this.deviceStore.offNamespace(e,t)}getTimesync(){return e(this,void 0,void 0,function*(){return(yield this.dispatchAction({command:"timesync",action:"get",responseRequired:!0,responseTimeout:250})).timestamp})}nextMetric(e,t){this.deviceStore.nextMetric(e,t)}onMetric(e,t){return this.deviceStore.onMetric(e,t)}subscribeToMetric(e){return this.deviceStore.subscribeToMetric(e)}unsubscribeFromMetric(e){this.deviceStore.unsubscribeFromMetric(e)}removeMetricListener(e,t){this.deviceStore.removeMetricListener(e,t)}changeSettings(t){return e(this,void 0,void 0,function*(){return this.deviceStore.update("settings",t)})}getSkill(t){return e(this,void 0,void 0,function*(){return yield this.deviceStore.lastOfChildValue("skills","bundleId",t)})}disconnect(){this.deviceStore.disconnect()}}exports.FirebaseDevice=c,c.serverType="firebase"; },{"./deviceStore":"mSvX"}],"kM30":[function(require,module,exports) { "use strict";function e(e){for(var r in e)exports.hasOwnProperty(r)||(exports[r]=e[r])}Object.defineProperty(exports,"__esModule",{value:!0}),e(require("./FirebaseApp")),e(require("./FirebaseUser")),e(require("./FirebaseDevice")); },{"./FirebaseApp":"OERo","./FirebaseUser":"Cc51","./FirebaseDevice":"KzOJ"}],"nVpT":[function(require,module,exports) { "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const t=e(require("socket.io-client")),s={secure:!0};class i{constructor(e){this.options=Object.freeze(Object.assign(Object.assign({},s),e)),this.socket=t.default(this.options.socketUrl,{path:`/${this.options.deviceId}`})}onMetric(e,t){return this.socket.on(`metrics/${e.id}`,t)}removeMetricListener(e,t){this.socket.off(`metrics/${e.id}`,t)}disconnect(){this.socket.removeAllListeners(),this.socket.connected&&this.socket.disconnect()}}exports.WebsocketClient=i,i.serverType="websocket"; },{}],"s7Vt":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require("rxjs"),t=require("rxjs/operators");function r({status$:r,allowWhileOnSleepMode:s}){return e.pipe(t.withLatestFrom(r),t.flatMap(([t,r])=>o(r,s)?e.of(t):e.empty()))}function o(e,t){return!("online"!==e.state||!t&&e.sleepMode)}exports.whileOnline=r; },{}],"iVIU":[function(require,module,exports) { "use strict";var t=this&&this.__awaiter||function(t,e,i,r){return new(i||(i=Promise))(function(s,n){function o(t){try{u(r.next(t))}catch(e){n(e)}}function a(t){try{u(r.throw(t))}catch(e){n(e)}}function u(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i(function(t){t(e)})).then(o,a)}u((r=r.apply(t,e||[])).next())})},e=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const i=require("rxjs"),r=require("rxjs/operators"),s=require("rxjs/operators"),n=e(require("outliers")),o=require("../utils/whileOnline"),a={bufferSize:100,updateInterval:6e4};class u{constructor(t){this._offset=0,this.options=Object.assign(Object.assign({},a),t),this.start()}start(){const{bufferSize:t,updateInterval:e,status$:n}=this.options,a=i.range(0,t),u=i.timer(e,e).pipe(r.map(e=>t+e),o.whileOnline({status$:n,allowWhileOnSleepMode:!0}));n.pipe(r.filter(t=>"online"===t.state),r.take(1)).pipe(s.switchMap(()=>a.pipe(r.concat(u),this.toOffset(),s.bufferCount(t,1),this.filterOutliers(),r.map(t=>this.average(t))))).subscribe(t=>{this._offset=t})}filterOutliers(){return i.pipe(r.map(t=>t.filter(n.default())))}toOffset(){const{getTimesync:e}=this.options;return i.pipe(s.concatMap(()=>t(this,void 0,void 0,function*(){const t=Date.now(),[i,r]=yield e().then(t=>[null,t]).catch(t=>[t]);if(i)return 0;const s=Date.now();return s-(s-t)/2-r})))}average(t){return Math.round(t.reduce((t,e)=>t+e)/t.length)}get offset(){return this._offset}get timestamp(){return Date.now()+this._offset}}exports.Timesync=u; },{"../utils/whileOnline":"s7Vt"}],"CXqr":[function(require,module,exports) { "use strict";function e(e){for(var r in e)exports.hasOwnProperty(r)||(exports[r]=e[r])}Object.defineProperty(exports,"__esModule",{value:!0}),e(require("./Timesync")); },{"./Timesync":"iVIU"}],"BX8M":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class s{constructor(){this._subscriptions={}}get(){return this._subscriptions}toList(){return Object.values(this._subscriptions)}add(s){this._subscriptions[s.id]=s}remove(s){s.id in this._subscriptions&&Reflect.deleteProperty(this._subscriptions,s.id)}}exports.SubscriptionManager=s; },{}],"ImaE":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const t=require("rxjs"),e=require("rxjs/operators"),r=3e4,i=3,s=5e3,n=95e3;function o(){return t.pipe(e.switchMap(r=>t.timer(0,n).pipe(e.map(()=>a(r)?Object.assign(Object.assign({},r),{state:"offline"}):r))),e.distinctUntilChanged(p))}function a(t){if(!("lastHeartbeat"in t))return!1;const{lastHeartbeat:e}=t;return Date.now()-e>n}function p(t,e){return JSON.stringify(t).split("").sort().join("")===JSON.stringify(e).split("").sort().join("")}exports.offlineIfLostHeartbeat=o,exports.deviceHasLostHeartbeat=a; },{}],"qny3":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require("rxjs"),r=require("rxjs/operators");function t(){return e.pipe(r.map(e=>{if(!e)return e;return Object.entries(e).reduce((e,[r,t])=>(r.startsWith("__")||(e[r]=t),e),{})}))}exports.filterInternalKeys=t; },{}],"LXvB":[function(require,module,exports) { "use strict";var e=this&&this.__awaiter||function(e,i,t,s){return new(t||(t=Promise))(function(r,n){function c(e){try{a(s.next(e))}catch(i){n(i)}}function o(e){try{a(s.throw(e))}catch(i){n(i)}}function a(e){var i;e.done?r(e.value):(i=e.value,i instanceof t?i:new t(function(e){e(i)})).then(c,o)}a((s=s.apply(e,i||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0});const i=require("rxjs"),t=require("rxjs/operators"),s=require("./firebase"),r=require("./websocket"),n=require("../timesync"),c=require("../subscriptions/SubscriptionManager"),o=require("../utils/heartbeat"),a=require("../utils/filterInternalKeys");var u=require("./firebase");exports.credentialWithLink=u.credentialWithLink,exports.createUser=u.createUser,exports.SERVER_TIMESTAMP=u.SERVER_TIMESTAMP;class h{constructor(e){this.defaultServerType=s.FirebaseDevice.serverType,this.localServerType=r.WebsocketClient.serverType,this._selectedDevice=new i.BehaviorSubject(void 0),this.options=e,this.subscriptionManager=new c.SubscriptionManager,this.firebaseApp=new s.FirebaseApp(e),this.firebaseUser=new s.FirebaseUser(this.firebaseApp),this.firebaseUser.onAuthStateChanged().subscribe(e=>{this.user=e}),this.firebaseUser.onUserClaimsChange().subscribe(e=>{this.userClaims=e}),this.onDeviceChange().subscribe(e=>{this.firebaseDevice&&this.firebaseDevice.disconnect(),e&&(this.firebaseDevice=new s.FirebaseDevice({deviceId:e.deviceId,firebaseApp:this.firebaseApp,dependencies:{subscriptionManager:this.subscriptionManager}}),this.options.timesync&&(this.timesync=new n.Timesync({status$:this.status(),getTimesync:this.firebaseDevice.getTimesync.bind(this.firebaseDevice)})))})}onDeviceChange(){return this._selectedDevice.asObservable().pipe(t.shareReplay(1),t.filter(e=>void 0!==e))}setAutoSelectedDevice(){return e(this,void 0,void 0,function*(){return this.options.deviceId?yield this.selectDevice(e=>e.find(e=>e.deviceId===this.options.deviceId)):!this.options.deviceId&&this.options.autoSelectDevice?yield this.selectDevice(e=>e[0]):null})}setWebsocket(i,t){return e(this,void 0,void 0,function*(){this.websocket=new r.WebsocketClient({socketUrl:i,deviceId:t})})}unsetWebsocket(){this.websocket&&(this.websocket.disconnect(),this.websocket=null)}get actions(){return{dispatch:e=>this.firebaseDevice.dispatchAction(e)}}disconnect(){return e(this,void 0,void 0,function*(){return this.websocket&&this.websocket.disconnect(),this.firebaseApp.disconnect()})}getInfo(){return e(this,void 0,void 0,function*(){return yield this.firebaseDevice.getInfo()})}login(i){return e(this,void 0,void 0,function*(){if(this.user)return Promise.reject("Already logged in.");const e=yield this.firebaseUser.login(i),t=yield this.setAutoSelectedDevice();return Object.assign(Object.assign({},e),{selectedDevice:t})})}logout(){return e(this,void 0,void 0,function*(){return this.firebaseDevice&&this.firebaseDevice.disconnect(),yield this.firebaseUser.logout()})}onAuthStateChanged(){return this.firebaseUser.onAuthStateChanged().pipe(t.switchMap(i=>e(this,void 0,void 0,function*(){if(!i)return null;const e=this.didSelectDevice()?yield this.getSelectedDevice():yield this.setAutoSelectedDevice();return Object.assign(Object.assign({},i),{selectedDevice:e})})))}getDevices(){return this.firebaseUser.getDevices()}addDevice(e){return this.firebaseUser.addDevice(e)}removeDevice(i){return e(this,void 0,void 0,function*(){const[e,t]=yield this.firebaseUser.removeDevice(i).then(()=>[!1]).catch(e=>[!0,e]);if(e)return Promise.reject(t);const s=this._selectedDevice.getValue();(null==s?void 0:s.deviceId)===i&&this._selectedDevice.next(null)})}transferDevice(i){return e(this,void 0,void 0,function*(){const[e,t]=yield this.firebaseUser.transferDevice(i).then(()=>[!1]).catch(e=>[!0,e]);if(e)return Promise.reject(t);const s=this._selectedDevice.getValue();(null==s?void 0:s.deviceId)===i.deviceId&&this._selectedDevice.next(null)})}onUserDevicesChange(){return this.firebaseUser.onUserDevicesChange()}onUserClaimsChange(){return this.firebaseUser.onUserClaimsChange()}didSelectDevice(){return!!this._selectedDevice.getValue()}selectDevice(i){return e(this,void 0,void 0,function*(){const e=yield this.getDevices();if(!e)return Promise.reject("Did not find any devices for this user. Make sure your device is claimed by your Neurosity account.");const t="function"==typeof i?i(e):(e=>e.find(e=>{if(!Array.isArray(i))return!1;const[t,s]=i;return JSON.stringify(null==e?void 0:e[t])===JSON.stringify(s)}))(e);return t?(yield this.firebaseUser.hasDevicePermission(t.deviceId))?(this._selectedDevice.next(t),t):Promise.reject("Rejected device access due to permissions."):Promise.reject("A device was not provided. Try returning a device from the devicesList provided in the callback.")})}getSelectedDevice(){return e(this,void 0,void 0,function*(){const e=this._selectedDevice.getValue();if(!e)return Promise.reject("There is no device currently selected.");const i=yield this.getDevices();return i?i.find(i=>i.deviceId===e.deviceId):Promise.reject("Did not find any devices for this user. Make sure your device is claimed by your Neurosity account.")})}status(){return this.observeNamespace("status").pipe(o.offlineIfLostHeartbeat(),a.filterInternalKeys())}observeNamespace(e){const s=i.fromEventPattern(i=>this.firebaseDevice.onNamespace(e,i),i=>this.firebaseDevice.offNamespace(e,i));return this.onDeviceChange().pipe(t.switchMap(e=>e?s:i.empty()))}onceNamespace(i){return e(this,void 0,void 0,function*(){return yield this.firebaseDevice.onceNamespace(i)})}get metrics(){const e=e=>e.serverType===r.WebsocketClient.serverType;return{next:(e,i)=>{this.firebaseDevice.nextMetric(e,i)},on:(i,t)=>e(i)?this.websocket.onMetric(i,t):this.firebaseDevice.onMetric(i,t),subscribe:e=>{const i=this.firebaseDevice.subscribeToMetric(e);return this.subscriptionManager.add(i),i},unsubscribe:(i,t)=>{this.subscriptionManager.remove(i),this.firebaseDevice.unsubscribeFromMetric(i),e(i)?this.websocket&&this.websocket.removeMetricListener(i,t):this.firebaseDevice.removeMetricListener(i,t)}}}createAccount(e){return this.firebaseUser.createAccount(e)}deleteAccount(){return this.firebaseUser.deleteAccount()}createCustomToken(){return this.firebaseUser.createCustomToken()}removeOAuthAccess(){return this.firebaseUser.removeOAuthAccess()}onUserExperiments(){return this.firebaseUser.onUserExperiments()}deleteUserExperiment(e){return this.firebaseUser.deleteUserExperiment(e)}get skills(){return{get:i=>e(this,void 0,void 0,function*(){return this.firebaseDevice.getSkill(i)})}}get timestamp(){return this.options.timesync?this.timesync.timestamp:Date.now()}getTimesyncOffset(){return this.timesync.offset}changeSettings(e){return this.firebaseDevice.changeSettings(e)}goOffline(){this.firebaseApp.goOffline()}goOnline(){this.firebaseApp.goOnline()}__getApp(){return this.firebaseApp.app}}exports.ApiClient=h; },{"./firebase":"kM30","./websocket":"nVpT","../timesync":"CXqr","../subscriptions/SubscriptionManager":"BX8M","../utils/heartbeat":"ImaE","../utils/filterInternalKeys":"qny3"}],"WDyG":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.prefix="Neurosity SDK: ",exports.mustSelectDevice=new Error(`${exports.prefix}A device must be selected. Make sure to call "notion.selectDevice()"`),exports.metricNotSupportedByModel=((e,o)=>new Error(`${exports.prefix}${e} not supported on model version ${o}. See docs.neurosity.co for more info.`)),exports.locationNotFound=((e,o)=>new Error(`${exports.prefix}${e} location not supported on model version ${o}. Check spelling or see docs.neurosity.co for more info.`)),exports.exceededMaxItems=(e=>new Error(`${exports.prefix}Maximum items in array is ${e}`)); },{}],"yLLB":[function(require,module,exports) { "use strict";var e=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var s in e)Object.hasOwnProperty.call(e,s)&&(r[s]=e[s]);return r.default=e,r};Object.defineProperty(exports,"__esModule",{value:!0});const r=require("@neurosity/ipk"),s=e(require("../utils/errors"));exports.isNotionMetric=(e=>Object.keys(r.metrics).includes(e)),exports.getLabels=(e=>Object.keys(r.metrics[e])),exports.hasInvalidLabels=((e,r)=>{const s=exports.getLabels(e);return!r.every(e=>s.includes(e))}),exports.isMetricDisallowed=((e,r)=>"skill"in r&&"metrics"in r.skill&&!r.skill.metrics.includes(e)),exports.validate=((e,r,i)=>{const t=exports.getLabels(e).join(", ");return r.length?exports.isMetricDisallowed(e,i)?new Error(`${s.prefix}No permission to access the ${e} metric. To access this metric, edit the skill's permissions`):!!exports.hasInvalidLabels(e,r)&&new Error(`${s.prefix}One ore more labels provided to ${e} are invalid. The valid labels for ${e} are ${t}`):new Error(`${s.prefix}At least one label is required for ${e} metric. Please add one of the following labels: ${t}`)}); },{"../utils/errors":"WDyG"}],"wAkn":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.MODEL_VERSION_1="1",exports.MODEL_VERSION_2="2",exports.MODEL_VERSION_3="3",exports.FEATURE_HAPTICS="haptics",exports.FEATURE_ACCEL="accel",exports.HAPTIC_P7="P7",exports.HAPTIC_P8="P8",exports.platformFeaturesByModelVersion={[exports.MODEL_VERSION_1]:[],[exports.MODEL_VERSION_2]:[exports.FEATURE_HAPTICS,exports.FEATURE_ACCEL],[exports.MODEL_VERSION_3]:[exports.FEATURE_HAPTICS,exports.FEATURE_ACCEL]},exports.platformConfigByModelVersion={[exports.MODEL_VERSION_1]:{},[exports.MODEL_VERSION_2]:{motorByMotorName:{[exports.HAPTIC_P7]:[],[exports.HAPTIC_P8]:[]}},[exports.MODEL_VERSION_3]:{motorByMotorName:{[exports.HAPTIC_P7]:[],[exports.HAPTIC_P8]:[]}}},exports.supportsHaptics=(o=>{return exports.platformFeaturesByModelVersion[o].includes(exports.FEATURE_HAPTICS)}),exports.supportsAccel=(o=>{return exports.platformFeaturesByModelVersion[o].includes(exports.FEATURE_ACCEL)}),exports.getPlatformHapticMotors=(o=>{var e;const r=exports.platformConfigByModelVersion[o],t=null!==(e=null==r?void 0:r.motorByMotorName)&&void 0!==e?e:{};return Object.assign({},t)}); },{}],"lLai":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.strongClick100="strongClick100",exports.strongClick60="strongClick60",exports.strongClick30="strongClick30",exports.sharpClick100="sharpClick100",exports.sharpClick60="sharpClick60",exports.sharpClick30="sharpClick30",exports.softBump100="softBump100",exports.softBump60="softBump60",exports.softBump30="softBump30",exports.doubleClick100="doubleClick100",exports.doubleClick60="doubleClick60",exports.tripleClick100="tripleClick100",exports.softFuzz60="softFuzz60",exports.strongBuzz100="strongBuzz100",exports.alert750ms="alert750ms",exports.alert1000ms="alert1000ms",exports.strongClick1_100="strongClick1_100",exports.strongClick2_80="strongClick2_80",exports.strongClick3_60="strongClick3_60",exports.strongClick4_30="strongClick4_30",exports.mediumClick1_100="mediumClick1_100",exports.mediumClick2_80="mediumClick2_80",exports.mediumClick3_60="mediumClick3_60",exports.sharpTick1_100="sharpTick1_100",exports.sharpTick2_80="sharpTick2_80",exports.sharpTick3_60="sharpTick3_60",exports.shortDoubleClickStrong1_100="shortDoubleClickStrong1_100",exports.shortDoubleClickStrong2_80="shortDoubleClickStrong2_80",exports.shortDoubleClickStrong3_60="shortDoubleClickStrong3_60",exports.shortDoubleClickStrong4_30="shortDoubleClickStrong4_30",exports.shortDoubleClickMedium1_100="shortDoubleClickMedium1_100",exports.shortDoubleClickMedium2_80="shortDoubleClickMedium2_80",exports.shortDoubleClickMedium3_60="shortDoubleClickMedium3_60",exports.shortDoubleSharpTick1_100="shortDoubleSharpTick1_100",exports.shortDoubleSharpTick2_80="shortDoubleSharpTick2_80",exports.shortDoubleSharpTick3_60="shortDoubleSharpTick3_60",exports.longDoubleSharpClickStrong1_100="longDoubleSharpClickStrong1_100",exports.longDoubleSharpClickStrong2_80="longDoubleSharpClickStrong2_80",exports.longDoubleSharpClickStrong3_60="longDoubleSharpClickStrong3_60",exports.longDoubleSharpClickStrong4_30="longDoubleSharpClickStrong4_30",exports.longDoubleSharpClickMedium1_100="longDoubleSharpClickMedium1_100",exports.longDoubleSharpClickMedium2_80="longDoubleSharpClickMedium2_80",exports.longDoubleSharpClickMedium3_60="longDoubleSharpClickMedium3_60",exports.longDoubleSharpTick1_100="longDoubleSharpTick1_100",exports.longDoubleSharpTick2_80="longDoubleSharpTick2_80",exports.longDoubleSharpTick3_60="longDoubleSharpTick3_60",exports.buzz1_100="buzz1_100",exports.buzz2_80="buzz2_80",exports.buzz3_60="buzz3_60",exports.buzz4_40="buzz4_40",exports.buzz5_20="buzz5_20",exports.pulsingStong1_100="pulsingStong1_100",exports.pulsingStong2_60="pulsingStong2_60",exports.pulsingMedium1_100="pulsingMedium1_100",exports.pulsingMedium2_60="pulsingMedium2_60",exports.pulsingSharp1_100="pulsingSharp1_100",exports.pulsingSharp2_60="pulsingSharp2_60",exports.transistionClick1_100="transistionClick1_100",exports.transistionClick2_80="transistionClick2_80",exports.transistionClick3_60="transistionClick3_60",exports.transistionClick4_40="transistionClick4_40",exports.transistionClick5_20="transistionClick5_20",exports.transistionClick6_10="transistionClick6_10",exports.transistionHum1_100="transistionHum1_100",exports.transistionHum2_80="transistionHum2_80",exports.transistionHum3_60="transistionHum3_60",exports.transistionHum4_40="transistionHum4_40",exports.transistionHum5_20="transistionHum5_20",exports.transistionHum6_10="transistionHum6_10",exports.transitionRampDownLongSmooth1_100_to_0="transitionRampDownLongSmooth1_100_to_0",exports.transitionRampDownLongSmooth2_100_to_0="transitionRampDownLongSmooth2_100_to_0",exports.transitionRampDownMediumSmooth1_100_to_0="transitionRampDownMediumSmooth1_100_to_0",exports.transitionRampDownMediumSmooth2_100_to_0="transitionRampDownMediumSmooth2_100_to_0",exports.transitionRampDownShortSmooth1_100_to_0="transitionRampDownShortSmooth1_100_to_0",exports.transitionRampDownShortSmooth2_100_to_0="transitionRampDownShortSmooth2_100_to_0",exports.transitionRampDownLongSharp1_100_to_0="transitionRampDownLongSharp1_100_to_0",exports.transitionRampDownLongSharp2_100_to_0="transitionRampDownLongSharp2_100_to_0",exports.transitionRampDownLongMedium1_100_to_0="transitionRampDownLongMedium1_100_to_0",exports.transitionRampDownLongMedium2_100_to_0="transitionRampDownLongMedium2_100_to_0",exports.transitionRampDownShortSharp1_100_to_0="transitionRampDownShortSharp1_100_to_0",exports.transitionRampDownShortSharp2_100_to_0="transitionRampDownShortSharp2_100_to_0",exports.transitionRampUpLongSmooth1_0_to_100="transitionRampUpLongSmooth1_0_to_100",exports.transitionRampUpLongSmooth2_0_to_100="transitionRampUpLongSmooth2_0_to_100",exports.transitionRampUpMediumSmooth1_0_to_100="transitionRampUpMediumSmooth1_0_to_100",exports.transitionRampUpMediumSmooth2_0_to_100="transitionRampUpMediumSmooth2_0_to_100",exports.transitionRampUpShortSmooth1_0_to_100="transitionRampUpShortSmooth1_0_to_100",exports.transitionRampUpShortSmooth2_0_to_100="transitionRampUpShortSmooth2_0_to_100",exports.transitionRampUpLongSharp1_0_to_100="transitionRampUpLongSharp1_0_to_100",exports.transitionRampUpLongSharp2_0_to_100="transitionRampUpLongSharp2_0_to_100",exports.transitionRampUpMediumSharp1_0_to_100="transitionRampUpMediumSharp1_0_to_100",exports.transitionRampUpMediumSharp2_0_to_100="transitionRampUpMediumSharp2_0_to_100",exports.transitionRampUpShortSharp1_0_to_100="transitionRampUpShortSharp1_0_to_100",exports.transitionRampUpShortSharp2_0_to_100="transitionRampUpShortSharp2_0_to_100",exports.transitionRampDownLongSmooth1_50_to_0="transitionRampDownLongSmooth1_50_to_0",exports.transitionRampDownLongSmooth2_50_to_0="transitionRampDownLongSmooth2_50_to_0",exports.transitionRampDownMediumSmooth1_50_to_0="transitionRampDownMediumSmooth1_50_to_0",exports.transitionRampDownMediumSmooth2_50_to_0="transitionRampDownMediumSmooth2_50_to_0",exports.transitionRampDownShortSmooth1_50_to_0="transitionRampDownShortSmooth1_50_to_0",exports.transitionRampDownShortSmooth2_50_to_0="transitionRampDownShortSmooth2_50_to_0",exports.transitionRampDownLongSharp1_50_to_0="transitionRampDownLongSharp1_50_to_0",exports.transitionRampDownLongSharp2_50_to_0="transitionRampDownLongSharp2_50_to_0",exports.transitionRampDownMediumSharp1_50_to_0="transitionRampDownMediumSharp1_50_to_0",exports.transitionRampDownMediumSharp2_50_to_0="transitionRampDownMediumSharp2_50_to_0",exports.transitionRampDownShortSharp1_50_to_0="transitionRampDownShortSharp1_50_to_0",exports.transitionRampDownShortSharp2_50_to_0="transitionRampDownShortSharp2_50_to_0",exports.transitionRampUpLongSmooth1_0_to_50="transitionRampUpLongSmooth1_0_to_50",exports.transitionRampUpLongSmooth2_0_to_50="transitionRampUpLongSmooth2_0_to_50",exports.transitionRampUpMediumSmooth1_0_to_50="transitionRampUpMediumSmooth1_0_to_50",exports.transitionRampUpMediumSmooth2_0_to_50="transitionRampUpMediumSmooth2_0_to_50",exports.transitionRampUpShortSmooth1_0_to_50="transitionRampUpShortSmooth1_0_to_50",exports.transitionRampUpShortSmooth2_0_to_50="transitionRampUpShortSmooth2_0_to_50",exports.transitionRampUpLongSharp1_0_to_50="transitionRampUpLongSharp1_0_to_50",exports.transitionRampUpLongSharp2_0_to_50="transitionRampUpLongSharp2_0_to_50",exports.transitionRampUpMediumSharp1_0_to_50="transitionRampUpMediumSharp1_0_to_50",exports.transitionRampUpMediumSharp2_0_to_50="transitionRampUpMediumSharp2_0_to_50",exports.transitionRampUpShortSharp1_0_to_50="transitionRampUpShortSharp1_0_to_50",exports.transitionRampUpShortSharp2_0_to_50="transitionRampUpShortSharp2_0_to_50",exports.longBuzzForProgrammaticStopping_100="longBuzzForProgrammaticStopping_100",exports.smoothHum1_50="smoothHum1_50",exports.smoothHum2_40="smoothHum2_40",exports.smoothHum3_30="smoothHum3_30",exports.smoothHum4_20="smoothHum4_20",exports.smoothHum5_10="smoothHum5_10"; },{}],"xIH5":[function(require,module,exports) { "use strict";var e=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var i={};if(null!=e)for(var t in e)Object.hasOwnProperty.call(e,t)&&(i[t]=e[t]);return i.default=e,i};Object.defineProperty(exports,"__esModule",{value:!0});const i=e(require("../utils/errors")),t={"marker/add":"write:brainwave-markers","brainwaves/record":"write:brainwaves","haptics/queue":"write:haptics","training/record":"write:kinesis","training/stop":"write:kinesis","training/stopAll":"write:kinesis","wifi/reset":"write:wifi-settings"},r={accelerometer:"read:accelerometer",brainwaves:"read:brainwaves",calm:"read:calm",focus:"read:focus",kinesis:"read:kinesis",predictions:"read:kinesis",signalQuality:"read:signal-quality",getInfo:"read:devices-info",getSelectedDevice:"read:devices-info",selectDevice:"read:devices-info",onDeviceChange:"read:devices-info",onUserDevicesChange:"read:devices-info",settings:"read:devices-settings",changeSettings:"write:devices-settings",status:"read:devices-status",addDevice:"write:devices-add",removeDevice:"write:devices-remove",transferDevice:"write:devices-remove"};function s(e,i){const{oauth:r,scopes:s}=null!=e?e:{};if(!r)return[!1,null];const n=s.split(","),{command:c,action:o}=i,d=t[`${c}/${o}`];return n.includes(d)?[!1,null]:[!0,a(d)]}function n(e,i){const{oauth:t,scopes:s}=null!=e?e:{};if(!t)return[!1,null];const n=s.split(","),c=r[i];return n.includes(c)?[!1,null]:[!0,a(c)]}function a(...e){return new Error(`${i.prefix}You are trying to access data with an OAuth token without access to the following scopes: ${e.join(", ")}.`)}exports.validateOAuthScopeForAction=s,exports.validateOAuthScopeForFunctionName=n; },{"../utils/errors":"WDyG"}],"kRnD":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.prodFunctionsBaseUrl="https://us-central1-neurosity-device.cloudfunctions.net"; },{}],"RIhy":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require("./config");function t(t){if(!t.emulator)return e.prodFunctionsBaseUrl;const{emulatorHost:r,emulatorFunctionsPort:o}=t;return`http://${r}:${o}/neurosity-device/us-central1`}exports.getFunctionsBaseURL=t; },{"./config":"kRnD"}],"MDrB":[function(require,module,exports) { "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const t=e(require("axios")),r=require("./utils");function s(e,s){const{clientId:i,clientSecret:n,responseType:c,redirectUri:u,scope:a,state:o}=e,l=r.getFunctionsBaseURL(s);return t.default.get(`${l}/authorize/entry`,{params:Object.assign(Object.assign({client_id:i},n?{client_secret:n}:{}),{response_type:c,redirect_uri:u,scope:a.join(","),state:o,redirect:"false"})}).then(e=>`${l}${e.data.url}`)}exports.createOAuthURL=s; },{"./utils":"RIhy"}],"nfg4":[function(require,module,exports) { "use strict";var t=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(e){o(e)}}function s(t){try{c(r.throw(t))}catch(e){o(e)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,s)}c((r=r.apply(t,e||[])).next())})},e=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const n=e(require("axios")),r=require("./utils");function i(e,i){return t(this,void 0,void 0,function*(){const t=r.getFunctionsBaseURL(i),o=(yield n.default.post(`${t}/getOAuthRefreshToken`,e)).data;return n.default.post(`${t}/token`,{grant_type:"refresh_token",refresh_token:o.data,client_id:e.clientId,client_secret:e.clientSecret}).then(t=>JSON.parse(t.data).access_token)})}exports.getOAuthToken=i; },{"./utils":"RIhy"}],"vsps":[function(require,module,exports) { "use strict";function e(){return"undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node}Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNode=e; },{}],"DCuD":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require("rxjs"),r=require("rxjs/operators"),t=require("./whileOnline"),s=require("./subscription");function i(i,c){const{options:o,api:n,onDeviceChange:p,isLocalMode:a,socketUrl:l,status:u}=i,{metric:b,labels:m,atomic:h}=c,v=s.validate(b,m,o);if(v)return e.throwError(v);const w=r=>new e.Observable(e=>{const t=(h?[n.metrics.subscribe({metric:b,labels:m,atomic:h,serverType:r})]:m.map(e=>n.metrics.subscribe({metric:b,labels:[e],atomic:h,serverType:r}))).map(r=>({subscription:r,listener:n.metrics.on(r,(...r)=>{e.next(...r)})}));return()=>{t.forEach(({subscription:e,listener:r})=>{n.metrics.unsubscribe(e,r)})}});return p().pipe(r.switchMap(t=>{if(!t)return e.empty();const{deviceId:i}=t;return a().pipe(r.switchMap(e=>e&&s.isNotionMetric(b)?l().pipe(r.switchMap(e=>n.setWebsocket(e,i)),r.switchMap(()=>w(n.localServerType))):(n.unsetWebsocket(),w(n.defaultServerType))))}),t.whileOnline({status$:u(),allowWhileOnSleepMode:!1}))}exports.getMetric=i; },{"./whileOnline":"s7Vt","./subscription":"yLLB"}],"KQ4u":[function(require,module,exports) { "use strict";var e=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))(function(s,o){function n(e){try{a(r.next(e))}catch(t){o(t)}}function c(e){try{a(r.throw(e))}catch(t){o(t)}}function a(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(n,c)}a((r=r.apply(e,t||[])).next())})},t=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t.default=e,t};Object.defineProperty(exports,"__esModule",{value:!0});const i=require("rxjs"),r=require("rxjs/operators"),s=require("./api/index"),o=require("./utils/subscription"),n=t(require("./utils/errors")),c=t(require("./utils/platform")),a=t(require("./utils/hapticEffects")),u=require("./utils/oauth"),h=require("./api/https/createOAuthURL"),l=require("./api/https/getOAuthToken"),p=require("./utils/is-node"),d=require("./utils/metrics"),m={timesync:!1,autoSelectDevice:!0,emulator:!1,emulatorHost:"localhost",emulatorAuthPort:9099,emulatorDatabasePort:9e3,emulatorFunctionsPort:5001,emulatorFirestorePort:8080,emulatorOptions:{}};class v{constructor(e={}){this._localModeSubject=new i.BehaviorSubject(!1),this.options=Object.freeze(Object.assign(Object.assign({},m),e)),this.api=new s.ApiClient(this.options)}_getMetricDependencies(){return{options:this.options,api:this.api,onDeviceChange:this.onDeviceChange.bind(this),isLocalMode:this.isLocalMode.bind(this),socketUrl:this.socketUrl.bind(this),status:this.status.bind(this)}}login(t){return e(this,void 0,void 0,function*(){return yield this.api.login(t)})}logout(){return e(this,void 0,void 0,function*(){return yield this.api.logout()})}__getApp(){return this.api.__getApp()}onAuthStateChanged(){return this.api.onAuthStateChanged()}addDevice(e){const[t,i]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"addDevice");return t?Promise.reject(i):this.api.addDevice(e)}removeDevice(e){const[t,i]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"removeDevice");return t?Promise.reject(i):this.api.removeDevice(e)}transferDevice(e){const[t,i]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"transferDevice");return t?Promise.reject(i):this.api.transferDevice(e)}onUserDevicesChange(){const[e,t]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"onUserDevicesChange");return e?i.throwError(t):this.api.onUserDevicesChange()}onUserClaimsChange(){return this.api.onUserClaimsChange()}getDevices(){return e(this,void 0,void 0,function*(){return yield this.api.getDevices()})}selectDevice(t){return e(this,void 0,void 0,function*(){const[e,i]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"selectDevice");return e?Promise.reject(i):yield this.api.selectDevice(t)})}getSelectedDevice(){return e(this,void 0,void 0,function*(){const[e,t]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"getSelectedDevice");return e?Promise.reject(t):yield this.api.getSelectedDevice()})}getInfo(){return e(this,void 0,void 0,function*(){if(!this.api.didSelectDevice())return Promise.reject(n.mustSelectDevice);const[e,t]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"getInfo");return e?Promise.reject(t):yield this.api.getInfo()})}isLocalMode(){return this._localModeSubject.asObservable().pipe(r.share())}onDeviceChange(){const[e,t]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"onDeviceChange");return e?i.throwError(t):this.api.onDeviceChange()}enableLocalMode(t){return e(this,void 0,void 0,function*(){if("boolean"!=typeof t)return Promise.reject(new TypeError("enableLocalMode can only accept a boolean"));if(!t)return this._localModeSubject.next(t),t;const[e,i]=yield this.api.onceNamespace("context/socketUrl").then(e=>{if(!e){const e=`${n.prefix}Your device's OS does not support localMode. Try updating to the latest OS.`;return[!1,new Error(e)]}return[!0,null]}).catch(e=>[!1,e]);return e?(this._localModeSubject.next(t),t):Promise.reject(i)})}disconnect(){return e(this,void 0,void 0,function*(){return yield this.api.disconnect()})}socketUrl(){const{onDeviceSocketUrl:e}=this.options;return e?i.of(e):this.api.observeNamespace("context/socketUrl")}dispatchAction(e){if(!this.api.didSelectDevice())return Promise.reject(n.mustSelectDevice);const[t,i]=u.validateOAuthScopeForAction(this.api.userClaims,e);return t?Promise.reject(i):this.api.actions.dispatch(e)}addMarker(e){if(!this.api.didSelectDevice())throw n.mustSelectDevice;if(!e)throw new Error(`${n.prefix}A label is required for addMarker`);return this.dispatchAction({command:"marker",action:"add",message:{label:e,timestamp:this.api.timestamp}})}haptics(t){return e(this,void 0,void 0,function*(){if(!this.api.didSelectDevice())return Promise.reject(n.mustSelectDevice);const e=(yield this.getSelectedDevice()).modelVersion;if(!c.supportsHaptics(e))return Promise.reject(n.metricNotSupportedByModel("haptics",e));const i=c.getPlatformHapticMotors(e);for(const r in t){if(!Object.keys(i).includes(r))return Promise.reject(n.locationNotFound(r,e));const s=t[r],o=7;if(s.length>o)return Promise.reject(n.exceededMaxItems(o));i[r]=s}return this.dispatchAction({command:"haptics",action:"queue",responseRequired:!0,responseTimeout:1e3,message:{effects:i}})})}getHapticEffects(){return a}accelerometer(){const e="accelerometer",[t,s]=u.validateOAuthScopeForFunctionName(this.api.userClaims,e);return t?i.throwError(s):i.from(this.getSelectedDevice()).pipe(r.switchMap(t=>{const r=(null==t?void 0:t.modelVersion)||c.MODEL_VERSION_1;return c.supportsAccel(r)?d.getMetric(this._getMetricDependencies(),{metric:e,labels:o.getLabels(e),atomic:!0}):i.throwError(n.metricNotSupportedByModel(e,r))}))}brainwaves(e,...t){const[r,s]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"brainwaves");return r?i.throwError(s):d.getMetric(this._getMetricDependencies(),{metric:"brainwaves",labels:e?[e,...t]:[],atomic:!1})}calm(){const[e,t]=u.validateOAuthScopeForFunctionName(this.api.userClaims,"calm");return e?i.throwError(t):d.get