@careevolution/mydatahelps-js 2.3.0 → 3.0.0

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.
@@ -1,2 +1,2 @@
1
- var e={},n={},t=1,a=[],o={};function r(e){if("*"===e)return!0;for(var n=["localhost","careevolution.com","internal","b3-deploys.com","mydatahelps.org","platform.joinallofus.org","careevolution.dev","ce.dev"],t=new URL(e),a=0;a<n.length;a++)if(t.hostname===n[a]||t.hostname.endsWith("."+n[a]))return!0;return!1}var s,i,c=(s=document.location.ancestorOrigins)&&s[0]?s[0]:"*";if(!r(c))throw console.error("Application is not hosted at an approved origin."),"Application is not hosted at an approved origin.";i=window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.ResearchKit?{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},c)},GetDeviceInfo:function(e){window.parent.postMessage({name:"GetDeviceInfo",messageID:e.messageID},c)}}:{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},c)},GetDeviceInfo:function(e){window.parent.postMessage({name:"GetDeviceInfo",messageID:e.messageID},c)},StartParticipantSurvey:function(e){window.parent.postMessage({name:"StartParticipantSurvey",messageID:e.messageID,surveyName:e.surveyName},c)},OpenExternalLink:function(e){window.parent.postMessage({name:"OpenExternalUrl",url:e},c)},OpenEmbeddedLink:function(e){window.parent.postMessage({name:"OpenEmbeddedUrl",url:e},c)},OpenExternalApplication:function(e){window.parent.postMessage({name:"OpenApplication",messageID:e.messageID,url:e.url,modal:e.modal},c)},Dismiss:function(){window.parent.postMessage({name:"Dismiss"},c)},PopNavigation:function(){window.parent.postMessage({name:"Back"},c)},ShowTab:function(e){window.parent.postMessage({name:"ShowTab",tabKey:e},c)},ShowParticipantDashboard:function(e){window.parent.postMessage({name:"ShowParticipantDashboard",dashboardKey:e.dashboardKey,modal:e.modal},c)},ShowParticipantWebVisualization:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualization",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal},c)},ShowParticipantWebVisualizationPDF:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualizationPDF",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal,landscape:e.landscape,htmlViewerZoom:e.htmlViewerZoom},c)},DeleteProviderAccount:function(e){window.parent.postMessage({name:"DeleteProviderAccount",messageID:e.messageID,accountID:e.accountID},c)},ConnectExternalAccount:function(e){window.parent.postMessage({name:"ConnectExternalAccount",externalAccountProviderID:e.externalAccountProviderID},c)},ShowProject:function(e){window.parent.postMessage({name:"ShowProject",code:e.code},c)},JoinProject:function(e){window.parent.postMessage({name:"JoinProject",code:e.code},c)}};var u=["SetHeight","ResearchKit"],l=["surveyDidFinish","applicationDidBecomeVisible","externalAccountSyncComplete","tokenWillExpire"];for(var d in window.webkit&&window.webkit.messageHandlers&&function(){for(var e in i)if(window.webkit.messageHandlers[e])return!0;for(var e in u)if(window.webkit.messageHandlers[u[e]])return!0;return!1}()||(window.webkit={messageHandlers:{}}),i)window.webkit.messageHandlers[d]=window.webkit.messageHandlers[d]||{postMessage:i[d]};var w=function(){return t++};window.addEventListener("message",(function(n){if(!function(e){return"*"===c?r(e.origin):e.origin===c}(n))throw console.error("message.origin '"+n.origin+"' is not allowed."),"message.origin '"+n.origin+"' is not allowed.";n.data.messageID?e.setActionResult(n.data):e.triggerEvent(n.data)}),!1),e.setActionResult=function(e){a[e.messageID](e)},n.setActionResult=function(n){e.setActionResult(n)},e.triggerEvent=function(e){var n=e.type;l.includes(n)&&o[n]&&o[n].forEach((function(n){n(e)}))};var p=null;e.connect=function(){var n=function(){e.token=null,p=new Promise((function(t,o){var r=w();a[r]=function(s){s.success?(e.tokenExpires=Date.now()+1e3*s.data.expires_in,e.token=s.data,e.baseUrl=s.baseUrl,window.setTimeout(n,1e3*(s.data.expires_in-120)),t()):(e.token=null,o(s.message)),a[r]=null,p=null},window.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({messageID:r})}))};return e.token&&Date.now()<e.tokenExpires?Promise.resolve():(p||n(),p)},e.setParticipantAccessToken=function(n,t){e.token=n,t&&(e.baseUrl=t),e.tokenExpires=Date.now()+1e3*n.expires_in,window.setTimeout((function(){e.triggerEvent({type:"tokenWillExpire"})}),1e3*(n.expires_in-120))},e.completeStep=function(e){null==e&&(e=""),window.webkit.messageHandlers.ResearchKit&&window.webkit.messageHandlers.ResearchKit.postMessage(e)},e.startSurvey=function(e){var n=w();window.webkit.messageHandlers.StartParticipantSurvey.postMessage({messageID:n,surveyName:e})},e.openExternalUrl=function(e){window.webkit.messageHandlers.OpenExternalLink.postMessage(e)},e.openEmbeddedUrl=function(e){window.webkit.messageHandlers.OpenEmbeddedLink.postMessage(e)},e.openApplication=function(e,n){var t=w();window.webkit.messageHandlers.OpenExternalApplication.postMessage({messageID:t,url:e,modal:!(!n||!n.modal)})},e.dismiss=function(){window.webkit.messageHandlers.Dismiss.postMessage({})},e.back=function(){window.webkit.messageHandlers.PopNavigation.postMessage({})},e.showTab=function(e){window.webkit.messageHandlers.ShowTab.postMessage(e)},e.showDashboard=function(e,n){window.webkit.messageHandlers.ShowParticipantDashboard.postMessage({dashboardKey:e,modal:!(!n||!n.modal),title:n&&n.title?n.title:void 0})},e.showWebVisualization=function(e,n,t){window.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({visualizationKey:e,parameters:n,modal:!(!t||!t.modal),title:t&&t.title?t.title:void 0})},e.showWebVisualizationPdf=function(e,n,t){window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({visualizationKey:e,parameters:n,landscape:!(!t||!t.landscape),htmlViewerZoom:t&&t.htmlViewerZoom})},e.setStatusBarStyle=function(e){window.webkit.messageHandlers.SetStatusBarStyle&&window.webkit.messageHandlers.SetStatusBarStyle.postMessage({style:e})},e.requestReview=function(e){window.webkit.messageHandlers.RequestReview&&window.webkit.messageHandlers.RequestReview.postMessage({cooldownDays:e})},e.getDeviceInfo=function(){return new Promise((function(e,n){var t=w();a[t]=function(n){e(n.data)},window.webkit.messageHandlers.GetDeviceInfo?window.webkit.messageHandlers.GetDeviceInfo.postMessage({messageID:t}):n()}))},e.deleteExternalAccount=function(e){return new Promise((function(n,t){var o=w();a[o]=function(e){e.success?n(e):t(e)},window.webkit.messageHandlers.DeleteProviderAccount?window.webkit.messageHandlers.DeleteProviderAccount.postMessage({messageID:o,accountID:e}):t()}))},e.connectExternalAccount=function(e){window.webkit.messageHandlers.ConnectExternalAccount&&window.webkit.messageHandlers.ConnectExternalAccount.postMessage({externalAccountProviderID:e})},e.showProject=function(e){window.webkit.messageHandlers.ShowProject&&window.webkit.messageHandlers.ShowProject.postMessage({code:e})},e.joinProject=function(e){window.webkit.messageHandlers.JoinProject&&window.webkit.messageHandlers.JoinProject.postMessage({code:e})},e.getCurrentLanguage=function(){var e=new URLSearchParams(window.location.search);return e.has("lang")?e.get("lang"):navigator.language},e.showGoogleFitSettings=function(){window.webkit.messageHandlers.ShowGoogleFitSettings&&window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({})},e.on=function(e,n){if(!l.includes(e))throw new Error(e+" is not a supported event type.");o[e]||(o[e]=[]),o[e].push(n)},e.off=function(e,n){if(!l.includes(e))throw new Error(e+" is not a supported event type.");if(o[e]){var t=o[e].indexOf(n);-1!==t&&o[e].splice(t,1)}};var m=function(n,t,a){if(!e.token||!e.token.access_token)throw"No access_token available for request authorization.";var o=function(n){if(!e.baseUrl)throw console.error("Cannot use makeUrl without MyDataHelps.baseUrl."),"Cannot use makeUrl without MyDataHelps.baseUrl.";return e.baseUrl+"api/v1/delegated/"+n}(n),r=new Headers;r.append("Authorization","Bearer "+e.token.access_token),r.append("Accept","application/json, text/javascript, */*; q=0.01"),r.append("Accept-Language",e.getCurrentLanguage()),a&&r.append("Content-Type","application/json");var s={method:t,headers:r};return a&&(s.body=JSON.stringify(a)),fetch(o,s)},f=function(e){if(!e.ok)throw e.statusText;return e},g=function(e){return String(e).replace("\\","\\\\").replace(",","\\,")},h=function(e){return Array.isArray(e)?e.map((function(e){return g(e)})).join(","):g(e)},v=function(e){var n=new Date(e);if(isNaN(n.getTime()))throw"Cannot interpret parameter as Date";return n.toISOString()};function y(){return e.baseUrl||"https://mydatahelps.org/"}function b(e){var n="mydatahelps-survey-modal";return new Promise((function(t,a){if(document.getElementById(n))a("Survey already in progress");else{window.addEventListener("message",(function e(a){if(a.origin===new URL(y()).origin){var o=document.getElementById("mydatahelps-survey-frame").contentWindow;a.source===o&&("SurveyWindowInitialized"==a.data.name?document.getElementById(n).className+=" loaded":"SurveyFinished"==a.data.name&&(document.getElementById(n).remove(),document.body.className=document.body.className.replace("no-scroll",""),window.removeEventListener("message",e,!0),t(a.data)))}}),!0);var o=document.createElement("div");o.className="mydatahelps-survey-modal",o.id=n,o.innerHTML="<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='"+e+"'></iframe></div>",document.body.append(o),document.body.className+=" no-scroll"}}))}e.getParticipantInfo=function(){return e.connect().then((function(){return m("participant","GET",null)})).then((function(e){return f(e)})).then((function(e){return e.json()}))},e.querySurveyAnswers=function(n){n.hasOwnProperty("surveyName")&&(n.surveyName=h(n.surveyName)),n.hasOwnProperty("stepIdentifier")&&(n.stepIdentifier=h(n.stepIdentifier)),n.hasOwnProperty("resultIdentifier")&&(n.resultIdentifier=h(n.resultIdentifier)),n.hasOwnProperty("answer")&&(n.answer=h(n.answer)),n.hasOwnProperty("before")&&(n.before=v(n.before)),n.hasOwnProperty("after")&&(n.after=v(n.after));var t="surveyanswers?"+new URLSearchParams(n).toString();return e.connect().then((function(){return m(t,"GET",null)})).then((function(e){return f(e)})).then((function(e){return e.json()}))},e.deleteSurveyResult=function(n){var t="surveyresults/"+encodeURIComponent(n);return e.connect().then((function(){return m(t,"DELETE",null)})).then((function(e){return f(e)})).then((function(e){}))},e.queryDeviceData=function(n){n.hasOwnProperty("type")&&(n.type=h(n.type)),n.hasOwnProperty("observedBefore")&&(n.observedBefore=v(n.observedBefore)),n.hasOwnProperty("observedAfter")&&(n.observedAfter=v(n.observedAfter));var t="devicedata?"+new URLSearchParams(n).toString();return e.connect().then((function(){return m(t,"GET",null)})).then((function(e){return f(e)})).then((function(e){return e.json()}))},e.persistDeviceData=function(n){return e.connect().then((function(){return m("devicedata","POST",n)})).then((function(e){return f(e)})).then((function(e){}))},e.trackCustomEvent=function(n){return e.connect().then((function(){return m("customevents","POST",n)})).then((function(e){return f(e)})).then((function(e){}))},e.querySurveyTasks=function(n){n.hasOwnProperty("status")&&(n.status=h(n.status)),n.hasOwnProperty("surveyName")&&(n.surveyName=h(n.surveyName));var t="surveytasks?"+new URLSearchParams(n).toString();return e.connect().then((function(){return m(t,"GET",null)})).then((function(e){return f(e)})).then((function(e){return e.json()}))},e.queryNotifications=function(n){n.hasOwnProperty("sentBefore")&&(n.sentBefore=v(n.sentBefore)),n.hasOwnProperty("sentAfter")&&(n.sentAfter=v(n.sentAfter));var t="notifications?"+new URLSearchParams(n).toString();return e.connect().then((function(){return m(t,"GET",null)})).then((function(e){return f(e)})).then((function(e){return e.json()}))},e.getExternalAccountProviders=function(n,t,a,o){var r={};n&&(r.search=n),t&&(r.category=t),a&&(r.pageSize=a),o&&(r.pageNumber=o);var s="externalaccountproviders?"+new URLSearchParams(r).toString();return e.connect().then((function(){return m(s,"GET",null)})).then((function(e){return f(e)})).then((function(e){return e.json()}))},e.getExternalAccounts=function(){return e.connect().then((function(){return m("externalaccounts","GET",null)})).then((function(e){return f(e)})).then((function(e){return e.json()}))},e.refreshExternalAccount=function(n){var t="externalaccounts/refresh/"+n;return e.connect().then((function(){return m(t,"POST",null)})).then((function(e){return f(e)})).then((function(e){}))},e.invokeCustomApi=function(n,t,a,o){if(n.includes("?"))throw new Error('Cannot include query parameters directly in the "customApi" string. Provide as an argument for "queryParameters" instead.');var r="custom/"+n;if(t=t.toUpperCase(),null!=a&&("GET"===t||"DELETE"===t)){var s=new URLSearchParams(a).toString();r+="?"+s,a=null}return e.connect().then((function(){return m(r,t,a)})).then((function(e){return f(e)})).then((function(e){return o?e.json():void 0}))},e.startEmbeddedSurvey=function(e,n,t){return t||(t=this.getCurrentLanguage()),b(y()+"mydatahelps/"+e+"/surveylink/"+n+"?lang="+t)},e.startEmbeddedTask=function(e,n,t){return t||(t=this.getCurrentLanguage()),b(y()+"mydatahelps/"+e+"/tasklink/"+n+"?lang="+t)},window.MyDataHelps=e,window.RKStudioClient=n;export{e as default};
1
+ class e{constructor(){this.allowedApplicationHosts=["localhost","careevolution.com","internal","b3-deploys.com","mydatahelps.org","platform.joinallofus.org","careevolution.dev","ce.dev"],this.accessTokenRenewalBufferSeconds=120,this.apiBasePath="api/v1/delegated/",this.unsupportedActions=["SetHeight","ResearchKit"],this.supportedEvents=["surveyDidFinish","applicationDidBecomeVisible","externalAccountSyncComplete","tokenWillExpire"],this.currentMessageID=1,this.messageHandlers=[],this.registeredEventHandlers={},this.refreshTokenPromise=null;let e,t=this,n=function(){let e=document.location.ancestorOrigins;if(e&&e[0])return e[0];return"*"}();function s(e){if("*"===e)return!0;let n=new URL(e);for(let e=0;e<t.allowedApplicationHosts.length;e++)if(n.hostname===t.allowedApplicationHosts[e]||n.hostname.endsWith("."+t.allowedApplicationHosts[e]))return!0;return!1}if(!s(n))throw console.error("Application is not hosted at an approved origin."),"Application is not hosted at an approved origin.";e=window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.ResearchKit?{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},n)},GetDeviceInfo:function(e){window.parent.postMessage({name:"GetDeviceInfo",messageID:e.messageID},n)}}:{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},n)},GetDeviceInfo:function(e){window.parent.postMessage({name:"GetDeviceInfo",messageID:e.messageID},n)},StartParticipantSurvey:function(e){window.parent.postMessage({name:"StartParticipantSurvey",messageID:e.messageID,surveyName:e.surveyName},n)},OpenExternalLink:function(e){window.parent.postMessage({name:"OpenExternalUrl",url:e},n)},OpenEmbeddedLink:function(e){window.parent.postMessage({name:"OpenEmbeddedUrl",url:e},n)},OpenExternalApplication:function(e){window.parent.postMessage({name:"OpenApplication",messageID:e.messageID,url:e.url,modal:e.modal},n)},Dismiss:function(){window.parent.postMessage({name:"Dismiss"},n)},PopNavigation:function(){window.parent.postMessage({name:"Back"},n)},ShowTab:function(e){window.parent.postMessage({name:"ShowTab",tabKey:e},n)},ShowParticipantDashboard:function(e){window.parent.postMessage({name:"ShowParticipantDashboard",dashboardKey:e.dashboardKey,modal:e.modal},n)},ShowParticipantWebVisualization:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualization",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal},n)},ShowParticipantWebVisualizationPDF:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualizationPDF",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal,landscape:e.landscape,htmlViewerZoom:e.htmlViewerZoom},n)},DeleteProviderAccount:function(e){window.parent.postMessage({name:"DeleteProviderAccount",messageID:e.messageID,accountID:e.accountID},n)},ConnectExternalAccount:function(e){window.parent.postMessage({name:"ConnectExternalAccount",externalAccountProviderID:e.externalAccountProviderID},n)},ShowProject:function(e){window.parent.postMessage({name:"ShowProject",code:e.code},n)},JoinProject:function(e){window.parent.postMessage({name:"JoinProject",code:e.code},n)}},window.webkit&&window.webkit.messageHandlers&&function(){for(let t in e)if(window.webkit.messageHandlers[t])return!0;for(let e in t.unsupportedActions)if(window.webkit.messageHandlers[t.unsupportedActions[e]])return!0;return!1}()||(window.webkit={messageHandlers:{}});for(let t in e)window.webkit.messageHandlers[t]=window.webkit.messageHandlers[t]||{postMessage:e[t]};window.addEventListener("message",(function(e){if(!function(e){return"*"===n?s(e.origin):e.origin===n}(e))throw console.error("message.origin '"+e.origin+"' is not allowed."),"message.origin '"+e.origin+"' is not allowed.";e.data.messageID?t.setActionResult(e.data):t.triggerEvent(e.data)}),!1)}startSurvey(e){let t=this.nextMessageID();window.webkit.messageHandlers.StartParticipantSurvey.postMessage({messageID:t,surveyName:e})}completeStep(e){null==e&&(e=""),window.webkit.messageHandlers.ResearchKit&&window.webkit.messageHandlers.ResearchKit.postMessage(e)}querySurveyAnswers(t){t.hasOwnProperty("surveyName")&&(t.surveyName=e.reduceArrayAndEscape(t.surveyName)),t.hasOwnProperty("stepIdentifier")&&(t.stepIdentifier=e.reduceArrayAndEscape(t.stepIdentifier)),t.hasOwnProperty("resultIdentifier")&&(t.resultIdentifier=e.reduceArrayAndEscape(t.resultIdentifier)),t.hasOwnProperty("answer")&&(t.answer=e.reduceArrayAndEscape(t.answer)),t.hasOwnProperty("before")&&(t.before=e.convertDateToIsoString(t.before)),t.hasOwnProperty("after")&&(t.after=e.convertDateToIsoString(t.after));const n="surveyanswers?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}deleteSurveyResult(t){const n="surveyresults/"+encodeURIComponent(t),s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}querySurveyTasks(t){t.hasOwnProperty("status")&&(t.status=e.reduceArrayAndEscape(t.status)),t.hasOwnProperty("surveyName")&&(t.surveyName=e.reduceArrayAndEscape(t.surveyName));const n="surveytasks?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}startEmbeddedSurvey(e,t,n){n||(n=this.getCurrentLanguage());let s=this.getBaseUrl()+"mydatahelps/"+e+"/surveylink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}startEmbeddedTask(e,t,n){n||(n=this.getCurrentLanguage());let s=this.getBaseUrl()+"mydatahelps/"+e+"/tasklink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}openExternalUrl(e){window.webkit.messageHandlers.OpenExternalLink.postMessage(e)}openEmbeddedUrl(e){window.webkit.messageHandlers.OpenEmbeddedLink.postMessage(e)}showTab(e){window.webkit.messageHandlers.ShowTab.postMessage(e)}openApplication(e,t){let n=this.nextMessageID();window.webkit.messageHandlers.OpenExternalApplication.postMessage({messageID:n,url:e,modal:!(!t||!t.modal)})}dismiss(){window.webkit.messageHandlers.Dismiss.postMessage({})}back(){window.webkit.messageHandlers.PopNavigation.postMessage({})}showDashboard(e,t){window.webkit.messageHandlers.ShowParticipantDashboard.postMessage({dashboardKey:e,modal:!(!t||!t.modal),title:t&&t.title?t.title:void 0})}showWebVisualization(e,t,n){window.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({visualizationKey:e,parameters:t,modal:!(!n||!n.modal),title:n&&n.title?n.title:void 0})}showWebVisualizationPdf(e,t,n){window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({visualizationKey:e,parameters:t,landscape:!(!n||!n.landscape),htmlViewerZoom:n&&n.htmlViewerZoom})}showProject(e){window.webkit.messageHandlers.ShowProject&&window.webkit.messageHandlers.ShowProject.postMessage({code:e})}joinProject(e){window.webkit.messageHandlers.JoinProject&&window.webkit.messageHandlers.JoinProject.postMessage({code:e})}on(e,t){if(!this.supportedEvents.includes(e))throw new Error(e+" is not a supported event type.");this.registeredEventHandlers[e]||(this.registeredEventHandlers[e]=[]),this.registeredEventHandlers[e].push(t)}off(e,t){if(!this.supportedEvents.includes(e))throw new Error(e+" is not a supported event type.");if(!this.registeredEventHandlers[e])return;let n=this.registeredEventHandlers[e].indexOf(t);-1!==n&&this.registeredEventHandlers[e].splice(n,1)}triggerEvent(e){let t=e.type;this.supportedEvents.includes(t)&&this.registeredEventHandlers[t]&&this.registeredEventHandlers[t].forEach((function(t){t(e)}))}setActionResult(e){this.messageHandlers[e.messageID](e)}getParticipantInfo(){const t=this;return this.connect().then((function(){return t.makeRequest("participant","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}getProjectInfo(){const t=this;return this.connect().then((function(){return t.makeRequest("project","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}queryDeviceData(t){t.hasOwnProperty("type")&&(t.type=e.reduceArrayAndEscape(t.type)),t.hasOwnProperty("observedBefore")&&(t.observedBefore=e.convertDateToIsoString(t.observedBefore)),t.hasOwnProperty("observedAfter")&&(t.observedAfter=e.convertDateToIsoString(t.observedAfter));const n="devicedata?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}persistDeviceData(t){const n=this;return this.connect().then((function(){return n.makeRequest("devicedata","POST",t)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}getExternalAccountProviders(t,n,s,a){let r={};t&&(r.search=t),n&&(r.category=n),s&&(r.pageSize=s),a&&(r.pageNumber=a);const o="externalaccountproviders?"+new URLSearchParams(r).toString(),i=this;return this.connect().then((function(){return i.makeRequest(o,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}connectExternalAccount(e){window.webkit.messageHandlers.ConnectExternalAccount&&window.webkit.messageHandlers.ConnectExternalAccount.postMessage({externalAccountProviderID:e})}getExternalAccounts(){const t=this;return this.connect().then((function(){return t.makeRequest("externalaccounts","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}refreshExternalAccount(t){const n="externalaccounts/refresh/"+t,s=this;return this.connect().then((function(){return s.makeRequest(n,"POST",null)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}deleteExternalAccount(e){let t=this;return new Promise((function(n,s){let a=t.nextMessageID();t.messageHandlers[a]=function(e){e.success?n(e):s(e)},window.webkit.messageHandlers.DeleteProviderAccount?window.webkit.messageHandlers.DeleteProviderAccount.postMessage({messageID:a,accountID:e}):s()}))}queryNotifications(t){t.hasOwnProperty("sentBefore")&&(t.sentBefore=e.convertDateToIsoString(t.sentBefore)),t.hasOwnProperty("sentAfter")&&(t.sentAfter=e.convertDateToIsoString(t.sentAfter));const n="notifications?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}connect(){const e=this;let t=function(){e.token=null,e.refreshTokenPromise=new Promise((function(n,s){let a=e.nextMessageID();e.messageHandlers[a]=function(r){r.success?(e.tokenExpires=Date.now()+1e3*r.data.expires_in,e.token=r.data,e.baseUrl=r.baseUrl,setTimeout(t,1e3*(r.data.expires_in-e.accessTokenRenewalBufferSeconds)),n(null)):(e.token=null,s(r.message)),e.messageHandlers[a]=null,e.refreshTokenPromise=null},window.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({messageID:a})}))};return this.token&&Date.now()<this.tokenExpires?Promise.resolve():(this.refreshTokenPromise||t(),this.refreshTokenPromise)}setParticipantAccessToken(e,t){this.token=e,t&&(this.baseUrl=t),this.tokenExpires=Date.now()+1e3*this.token.expires_in;const n=this;setTimeout((function(){n.triggerEvent({type:"tokenWillExpire"})}),1e3*(this.token.expires_in-this.accessTokenRenewalBufferSeconds))}setStatusBarStyle(e){window.webkit.messageHandlers.SetStatusBarStyle&&window.webkit.messageHandlers.SetStatusBarStyle.postMessage({style:e})}getDeviceInfo(){let e=this;return new Promise((function(t,n){let s=e.nextMessageID();e.messageHandlers[s]=function(e){t(e.data)},window.webkit.messageHandlers.GetDeviceInfo?window.webkit.messageHandlers.GetDeviceInfo.postMessage({messageID:s}):n()}))}getCurrentLanguage(){let e=new URLSearchParams(window.location.search);return e.has("lang")?e.get("lang"):navigator.language}showGoogleFitSettings(){window.webkit.messageHandlers.ShowGoogleFitSettings&&window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({})}requestReview(e){window.webkit.messageHandlers.RequestReview&&window.webkit.messageHandlers.RequestReview.postMessage({cooldownDays:e})}trackCustomEvent(t){const n=this;return this.connect().then((function(){return n.makeRequest("customevents","POST",t)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}getDataCollectionSettings(){const t=this;return this.connect().then((function(){return t.makeRequest("datacollectionsettings","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}invokeCustomApi(t,n,s,a){if(t.includes("?"))throw new Error('Cannot include query parameters directly in the "customApi" string. Provide as an argument for "queryParameters" instead.');let r="custom/"+t;if(n=n.toUpperCase(),null!=s&&("GET"===n||"DELETE"===n)){let e=new URLSearchParams(s).toString();r+="?"+e,s=null}const o=this;return this.connect().then((function(){return o.makeRequest(r,n,s)})).then((function(t){return e.validateResponse(t)})).then((function(e){return a?e.json():void 0}))}nextMessageID(){return this.currentMessageID++}getBaseUrl(){return this.baseUrl||"https://mydatahelps.org/"}makeUrl(e){if(!this.baseUrl)throw console.error("Cannot use makeUrl without MyDataHelps.baseUrl."),"Cannot use makeUrl without MyDataHelps.baseUrl.";return this.baseUrl+this.apiBasePath+e}makeRequest(e,t,n){if(!this.token||!this.token.access_token)throw"No access_token available for request authorization.";let s=this.makeUrl(e),a=new Headers;a.append("Authorization","Bearer "+this.token.access_token),a.append("Accept","application/json, text/javascript, */*; q=0.01"),a.append("Accept-Language",this.getCurrentLanguage()),n&&a.append("Content-Type","application/json");let r={method:t,headers:a};return n&&(r.body=JSON.stringify(n)),fetch(s,r)}static validateResponse(e){if(!e.ok)throw e.statusText;return e}static escapeParam(e){return String(e).replace("\\","\\\\").replace(",","\\,")}static reduceArrayAndEscape(t){if(Array.isArray(t)){return t.map((function(t){return e.escapeParam(t)})).join(",")}return this.escapeParam(t)}static convertDateToIsoString(e){let t=new Date(e);if(isNaN(t.getTime()))throw"Cannot interpret parameter as Date";return t.toISOString()}startEmbeddedSurveyInternal(e){let t="mydatahelps-survey-modal",n=this;return new Promise((function(s,a){if(document.getElementById(t))return void a("Survey already in progress");window.addEventListener("message",(function e(a){if(a.origin!==new URL(n.getBaseUrl()).origin)return;let r=document.getElementById("mydatahelps-survey-frame").contentWindow;a.source===r&&("SurveyWindowInitialized"===a.data.name?document.getElementById(t).className+=" loaded":"SurveyFinished"===a.data.name&&(document.getElementById(t).remove(),document.body.className=document.body.className.replace("no-scroll",""),window.removeEventListener("message",e,!0),s(a.data)))}),!0);let r=document.createElement("div");r.className="mydatahelps-survey-modal",r.id=t,r.innerHTML="<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='"+e+"'></iframe></div>",document.body.append(r),document.body.className+=" no-scroll"}))}}const t=new e;window.MyDataHelps=t,window.RKStudioClient={},window.RKStudioClient.setActionResult=function(e){window.MyDataHelps.setActionResult(e)};export{e as MyDataHelps,t as default};
2
2
  //# sourceMappingURL=MyDataHelps.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MyDataHelps.min.js","sources":["../../MyDataHelps.js"],"sourcesContent":["var MyDataHelps = {};\n// For backwards compatibility\nvar RKStudioClient = {};\n\nvar accessTokenRenewalBufferSeconds = 120;\nvar currentMessageID = 1;\nvar messageHandlers = [];\nvar registeredEventHandlers = {};\nvar apiBasePath = 'api/v1/delegated/';\n\nfunction getParentOrigin() {\n\tvar ancestorOrigins = document.location.ancestorOrigins;\n\tif (ancestorOrigins && ancestorOrigins[0]) {\n\t\treturn ancestorOrigins[0];\n\t}\n\n\treturn '*';\n}\n\nfunction acceptableOrigin(origin) {\n\tif (origin === '*') return true;\n\n\tvar allowedApplicationHosts = [\n\t\t'localhost',\n\t\t'careevolution.com',\n\t\t'internal',\n\t\t'b3-deploys.com',\n\t\t'mydatahelps.org',\n\t\t'platform.joinallofus.org',\n\t\t'careevolution.dev',\n\t\t'ce.dev'\n\t];\n\n\tvar sourceURL = new URL(origin);\n\tfor (var k = 0; k < allowedApplicationHosts.length; k++) {\n\t\tif (sourceURL.hostname === allowedApplicationHosts[k] || sourceURL.hostname.endsWith(\".\" + allowedApplicationHosts[k])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nvar applicationHost = getParentOrigin();\nif (!acceptableOrigin(applicationHost)) {\n\tconsole.error(\"Application is not hosted at an approved origin.\");\n\tthrow \"Application is not hosted at an approved origin.\";\n}\n\nvar supportedActions;\nif (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.ResearchKit) {\n\tsupportedActions = {\n\t\t\"GetDelegatedAccessToken\": function (data) { window.parent.postMessage({ name: 'GetDelegatedAccessToken', messageID: data.messageID }, applicationHost) },\n\t\t\"GetDeviceInfo\": function (data) { window.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost) }\n\t};\n}\nelse {\n\tsupportedActions = {\n\t\t\"GetDelegatedAccessToken\": function (data) { window.parent.postMessage({ name: 'GetDelegatedAccessToken', messageID: data.messageID }, applicationHost) },\n\t\t\"GetDeviceInfo\": function (data) { window.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost) },\n\t\t\"StartParticipantSurvey\": function (data) { window.parent.postMessage({ name: 'StartParticipantSurvey', messageID: data.messageID, surveyName: data.surveyName }, applicationHost) },\n\t\t\"OpenExternalLink\": function (data) { window.parent.postMessage({ name: 'OpenExternalUrl', url: data }, applicationHost) },\n\t\t\"OpenEmbeddedLink\": function (data) { window.parent.postMessage({ name: 'OpenEmbeddedUrl', url: data }, applicationHost) },\n\t\t\"OpenExternalApplication\": function (data) { window.parent.postMessage({ name: 'OpenApplication', messageID: data.messageID, url: data.url, modal: data.modal }, applicationHost) },\n\t\t\"Dismiss\": function () { window.parent.postMessage({ name: 'Dismiss' }, applicationHost) },\n\t\t\"PopNavigation\": function () { window.parent.postMessage({ name: 'Back' }, applicationHost) },\n\t\t\"ShowTab\": function (data) { window.parent.postMessage({ name: 'ShowTab', tabKey: data }, applicationHost) },\n\t\t\"ShowParticipantDashboard\": function (data) { window.parent.postMessage({ name: 'ShowParticipantDashboard', dashboardKey: data.dashboardKey, modal: data.modal }, applicationHost) },\n\t\t\"ShowParticipantWebVisualization\": function (data) { window.parent.postMessage({ name: 'ShowParticipantWebVisualization', visualizationKey: data.visualizationKey, parameters: data.parameters, modal: data.modal }, applicationHost) },\n\t\t\"ShowParticipantWebVisualizationPDF\": function (data) { window.parent.postMessage({ name: 'ShowParticipantWebVisualizationPDF', visualizationKey: data.visualizationKey, parameters: data.parameters, modal: data.modal, landscape: data.landscape, htmlViewerZoom: data.htmlViewerZoom }, applicationHost) },\n\t\t\"DeleteProviderAccount\": function (data) { window.parent.postMessage({ name: 'DeleteProviderAccount', messageID: data.messageID, accountID: data.accountID }, applicationHost) },\n\t\t\"ConnectExternalAccount\": function (data) { window.parent.postMessage({ name: 'ConnectExternalAccount', externalAccountProviderID: data.externalAccountProviderID }, applicationHost) },\n\t\t\"ShowProject\": function (data) { window.parent.postMessage({ name: 'ShowProject', code: data.code }, applicationHost) },\n\t\t\"JoinProject\": function (data) { window.parent.postMessage({ name: 'JoinProject', code: data.code }, applicationHost) }\n\t};\n}\n\nvar unsupportedActions = [\"SetHeight\", \"ResearchKit\"];\n\nvar supportedEvents = [\"surveyDidFinish\", \"applicationDidBecomeVisible\", \"externalAccountSyncComplete\", \"tokenWillExpire\"];\n\nfunction windowHasAnyActions() {\n\tfor (var action in supportedActions) {\n\t\tif (window.webkit.messageHandlers[action]) {\n\t\t\treturn true;\n\t\t}\n\t}\n\tfor (var action in unsupportedActions) {\n\t\tif (window.webkit.messageHandlers[unsupportedActions[action]]) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nif (!window.webkit || !window.webkit.messageHandlers || !windowHasAnyActions()) {\n\twindow.webkit = {\n\t\tmessageHandlers: {}\n\t};\n}\n\nfor (var action in supportedActions) {\n\twindow.webkit.messageHandlers[action] = window.webkit.messageHandlers[action] || { postMessage: supportedActions[action] };\n}\n\nvar nextMessageID = function () {\n\treturn currentMessageID++;\n};\n\nfunction validateWindowMessageOrigin(message) {\n\tif (applicationHost === \"*\") {\n\t\treturn acceptableOrigin(message.origin);\n\t}\n\n\treturn message.origin === applicationHost;\n}\n\nvar receiveWindowMessage = function (message) {\n\tif (!validateWindowMessageOrigin(message)) {\n\t\tconsole.error(\"message.origin '\" + message.origin + \"' is not allowed.\");\n\t\tthrow \"message.origin '\" + message.origin + \"' is not allowed.\";\n\t}\n\n\tif (message.data.messageID) {\n\t\tMyDataHelps.setActionResult(message.data);\n\t}\n\telse {\n\t\tMyDataHelps.triggerEvent(message.data);\n\t}\n};\n\nwindow.addEventListener(\"message\", receiveWindowMessage, false);\n\nMyDataHelps.setActionResult = function (data) {\n\tmessageHandlers[data.messageID](data);\n};\n\nRKStudioClient.setActionResult = function (data) {\n\tMyDataHelps.setActionResult(data);\n};\n\nMyDataHelps.triggerEvent = function (event) {\n\tvar eventName = event.type;\n\tif (supportedEvents.includes(eventName) && registeredEventHandlers[eventName]) {\n\t\tregisteredEventHandlers[eventName].forEach(function (handler) {\n\t\t\thandler(event);\n\t\t});\n\t}\n}\n\n//Authorization\n\nvar refreshTokenPromise = null;\nMyDataHelps.connect = function () {\n\tvar refreshDelegatedAccessToken = function () {\n\t\tMyDataHelps.token = null;\n\n\t\trefreshTokenPromise = new Promise(function (resolve, reject) {\n\t\t\tvar messageID = nextMessageID();\n\t\t\tmessageHandlers[messageID] = function (tokenResponse) {\n\t\t\t\tif (tokenResponse.success) {\n\t\t\t\t\tMyDataHelps.tokenExpires = Date.now() + (tokenResponse.data.expires_in * 1000);\n\t\t\t\t\tMyDataHelps.token = tokenResponse.data;\n\t\t\t\t\tMyDataHelps.baseUrl = tokenResponse.baseUrl;\n\t\t\t\t\twindow.setTimeout(refreshDelegatedAccessToken, ((tokenResponse.data.expires_in - accessTokenRenewalBufferSeconds) * 1000));\n\t\t\t\t\tresolve();\n\t\t\t\t} else {\n\t\t\t\t\tMyDataHelps.token = null;\n\t\t\t\t\treject(tokenResponse.message);\n\t\t\t\t}\n\t\t\t\tmessageHandlers[messageID] = null;\n\t\t\t\trefreshTokenPromise = null;\n\t\t\t};\n\n\t\t\twindow.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({ messageID: messageID });\n\t\t});\n\t};\n\n\tif (MyDataHelps.token && Date.now() < MyDataHelps.tokenExpires) {\n\t\treturn Promise.resolve();\n\t}\n\n\tif (!refreshTokenPromise) {\n\t\trefreshDelegatedAccessToken();\n\t}\n\n\t// Re-use promise if refresh already in progress\n\treturn refreshTokenPromise;\n};\n\n//Initializing access token manually\nMyDataHelps.setParticipantAccessToken = function (token, baseUrl) {\n\tMyDataHelps.token = token;\n\tif (baseUrl) {\n\t\tMyDataHelps.baseUrl = baseUrl;\n\t}\n\tMyDataHelps.tokenExpires = Date.now() + (token.expires_in * 1000);\n\twindow.setTimeout(function () {\n\t\tMyDataHelps.triggerEvent({ type: \"tokenWillExpire\" });\n\t}, ((token.expires_in - accessTokenRenewalBufferSeconds) * 1000));\n};\n\n//Actions\n\nMyDataHelps.completeStep = function (answer) {\n\tif (answer === undefined || answer === null) answer = '';\n\n\tif (window.webkit.messageHandlers.ResearchKit) {\n\t\twindow.webkit.messageHandlers.ResearchKit.postMessage(answer);\n\t}\n}\n\nMyDataHelps.startSurvey = function (surveyName) {\n\tvar messageID = nextMessageID();\n\twindow.webkit.messageHandlers.StartParticipantSurvey.postMessage({ messageID: messageID, surveyName: surveyName });\n};\n\nMyDataHelps.openExternalUrl = function (url) {\n\twindow.webkit.messageHandlers.OpenExternalLink.postMessage(url);\n};\n\nMyDataHelps.openEmbeddedUrl = function (url) {\n\twindow.webkit.messageHandlers.OpenEmbeddedLink.postMessage(url);\n};\n\nMyDataHelps.openApplication = function (url, options) {\n\tvar messageID = nextMessageID();\n\twindow.webkit.messageHandlers.OpenExternalApplication.postMessage({ messageID: messageID, url: url, modal: options && options.modal ? true : false });\n};\n\nMyDataHelps.dismiss = function () {\n\twindow.webkit.messageHandlers.Dismiss.postMessage({});\n};\n\nMyDataHelps.back = function () {\n\twindow.webkit.messageHandlers.PopNavigation.postMessage({});\n};\n\nMyDataHelps.showTab = function (tabKey) {\n\twindow.webkit.messageHandlers.ShowTab.postMessage(tabKey);\n};\n\nMyDataHelps.showDashboard = function (dashboardKey, options) {\n\twindow.webkit.messageHandlers.ShowParticipantDashboard.postMessage({\n\t\tdashboardKey: dashboardKey,\n\t\tmodal: options && options.modal ? true : false,\n\t\ttitle: options && options.title ? options.title : undefined\n\t});\n};\n\nMyDataHelps.showWebVisualization = function (visualizationKey, parameters, options) {\n\twindow.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({\n\t\tvisualizationKey: visualizationKey,\n\t\tparameters: parameters,\n\t\tmodal: options && options.modal ? true : false,\n\t\ttitle: options && options.title ? options.title : undefined\n\t});\n};\n\nMyDataHelps.showWebVisualizationPdf = function (visualizationKey, parameters, options) {\n\twindow.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({\n\t\tvisualizationKey: visualizationKey,\n\t\tparameters: parameters,\n\t\tlandscape: options && options.landscape ? true : false,\n\t\thtmlViewerZoom: options && options.htmlViewerZoom\n\t});\n};\n\nMyDataHelps.setStatusBarStyle = function (style) {\n\tif (window.webkit.messageHandlers.SetStatusBarStyle) {\n\t\twindow.webkit.messageHandlers.SetStatusBarStyle.postMessage({ style: style });\n\t}\n};\n\nMyDataHelps.requestReview = function (cooldownDays) {\n\tif (window.webkit.messageHandlers.RequestReview) {\n\t\twindow.webkit.messageHandlers.RequestReview.postMessage({ cooldownDays: cooldownDays });\n\t}\n};\n\nMyDataHelps.getDeviceInfo = function () {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar messageID = nextMessageID();\n\t\tmessageHandlers[messageID] = function (deviceInfoResponse) {\n\t\t\tresolve(deviceInfoResponse.data);\n\t\t};\n\n\t\tif (window.webkit.messageHandlers.GetDeviceInfo) {\n\t\t\twindow.webkit.messageHandlers.GetDeviceInfo.postMessage({ messageID: messageID });\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n};\n\nMyDataHelps.deleteExternalAccount = function (accountID) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar messageID = nextMessageID();\n\t\tmessageHandlers[messageID] = function (deleteProviderAccountResponse) {\n\t\t\tif (!deleteProviderAccountResponse.success) {\n\t\t\t\treject(deleteProviderAccountResponse)\n\t\t\t} else {\n\t\t\t\tresolve(deleteProviderAccountResponse);\n\t\t\t}\n\t\t};\n\n\t\tif (window.webkit.messageHandlers.DeleteProviderAccount) {\n\t\t\twindow.webkit.messageHandlers.DeleteProviderAccount.postMessage({ messageID: messageID, accountID: accountID });\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n}\n\nMyDataHelps.connectExternalAccount = function (externalAccountProviderID) {\n\tif (window.webkit.messageHandlers.ConnectExternalAccount) {\n\t\twindow.webkit.messageHandlers.ConnectExternalAccount.postMessage({ externalAccountProviderID: externalAccountProviderID });\n\t}\n}\n\nMyDataHelps.showProject = function (projectCode) {\n\tif (window.webkit.messageHandlers.ShowProject) {\n\t\twindow.webkit.messageHandlers.ShowProject.postMessage({ code: projectCode });\n\t}\n};\n\nMyDataHelps.joinProject = function (projectCode) {\n\tif (window.webkit.messageHandlers.JoinProject) {\n\t\twindow.webkit.messageHandlers.JoinProject.postMessage({ code: projectCode });\n\t}\n};\n\nMyDataHelps.getCurrentLanguage = function () {\n\tvar searchParams = new URLSearchParams(window.location.search);\n\tif (searchParams.has(\"lang\")) {\n\t\treturn searchParams.get(\"lang\");\n\t}\n\telse {\n\t\treturn navigator.language;\n\t}\n};\n\nMyDataHelps.showGoogleFitSettings = function () {\n\tif (window.webkit.messageHandlers.ShowGoogleFitSettings) {\n\t\twindow.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({});\n\t}\n};\n\n//Events\n\nMyDataHelps.on = function (eventName, eventHandler) {\n\n\tif (!supportedEvents.includes(eventName)) {\n\t\tthrow new Error(eventName + \" is not a supported event type.\");\n\t}\n\n\tif (!registeredEventHandlers[eventName]) {\n\t\tregisteredEventHandlers[eventName] = [];\n\t}\n\n\tregisteredEventHandlers[eventName].push(eventHandler);\n};\n\nMyDataHelps.off = function (eventName, eventHandler) {\n\n\tif (!supportedEvents.includes(eventName)) {\n\t\tthrow new Error(eventName + \" is not a supported event type.\");\n\t}\n\n\tif (!registeredEventHandlers[eventName]) return;\n\n\tvar eventHandlerIndex = registeredEventHandlers[eventName].indexOf(eventHandler);\n\n\tif (eventHandlerIndex !== -1) {\n\t\tregisteredEventHandlers[eventName].splice(eventHandlerIndex, 1);\n\t}\n}\n\n//Data\n\nvar makeUrl = function (endpoint) {\n\tif (!MyDataHelps.baseUrl) {\n\t\tconsole.error(\"Cannot use makeUrl without MyDataHelps.baseUrl.\");\n\t\tthrow \"Cannot use makeUrl without MyDataHelps.baseUrl.\";\n\t}\n\n\treturn MyDataHelps.baseUrl + apiBasePath + endpoint;\n}\n\nvar makeRequest = function (endpoint, method, body) {\n\tif (!MyDataHelps.token || !MyDataHelps.token.access_token) {\n\t\tthrow \"No access_token available for request authorization.\";\n\t}\n\n\tvar url = makeUrl(endpoint);\n\n\tvar headers = new Headers();\n\theaders.append('Authorization', 'Bearer ' + MyDataHelps.token.access_token);\n\theaders.append('Accept', 'application/json, text/javascript, */*; q=0.01');\n\theaders.append('Accept-Language', MyDataHelps.getCurrentLanguage());\n\tif (!!body) {\n\t\theaders.append('Content-Type', 'application/json');\n\t}\n\n\tvar init = {\n\t\tmethod: method,\n\t\theaders: headers\n\t};\n\tif (!!body) {\n\t\tinit.body = JSON.stringify(body);\n\t}\n\n\treturn fetch(url, init);\n};\n\nvar validateResponse = function (response) {\n\tif (!response.ok) {\n\t\tthrow response.statusText;\n\t}\n\n\treturn response;\n};\n\nvar escapeParam = function (param) {\n\treturn String(param)\n\t\t.replace(\"\\\\\", \"\\\\\\\\\")\n\t\t.replace(\",\", \"\\\\,\");\n};\n\nvar reduceArrayAndEscape = function (param) {\n\tif (Array.isArray(param)) {\n\t\tvar escapedParams = param.map(function (elem) { return escapeParam(elem); });\n\t\treturn escapedParams.join(\",\");\n\t}\n\n\treturn escapeParam(param);\n};\n\nvar convertDateToIsoString = function (date) {\n\tvar paramAsDate = new Date(date);\n\tif (isNaN(paramAsDate.getTime())) {\n\t\tthrow \"Cannot interpret parameter as Date\";\n\t}\n\n\treturn paramAsDate.toISOString();\n};\n\nMyDataHelps.getParticipantInfo = function () {\n\tvar endpoint = 'participant';\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'GET', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return response.json(); });\n};\n\nMyDataHelps.querySurveyAnswers = function (queryParameters) {\n\tif (queryParameters.hasOwnProperty(\"surveyName\")) {\n\t\tqueryParameters.surveyName = reduceArrayAndEscape(queryParameters.surveyName);\n\t}\n\tif (queryParameters.hasOwnProperty(\"stepIdentifier\")) {\n\t\tqueryParameters.stepIdentifier = reduceArrayAndEscape(queryParameters.stepIdentifier);\n\t}\n\tif (queryParameters.hasOwnProperty(\"resultIdentifier\")) {\n\t\tqueryParameters.resultIdentifier = reduceArrayAndEscape(queryParameters.resultIdentifier);\n\t}\n\tif (queryParameters.hasOwnProperty(\"answer\")) {\n\t\tqueryParameters.answer = reduceArrayAndEscape(queryParameters.answer);\n\t}\n\tif (queryParameters.hasOwnProperty(\"before\")) {\n\t\tqueryParameters.before = convertDateToIsoString(queryParameters.before);\n\t}\n\tif (queryParameters.hasOwnProperty(\"after\")) {\n\t\tqueryParameters.after = convertDateToIsoString(queryParameters.after);\n\t}\n\n\tvar queryString = new URLSearchParams(queryParameters).toString();\n\tvar endpoint = 'surveyanswers?' + queryString;\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'GET', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return response.json(); });\n};\n\nMyDataHelps.deleteSurveyResult = function (resultID) {\n\tvar endpoint = 'surveyresults/' + encodeURIComponent(resultID);\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'DELETE', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return; });\n};\n\nMyDataHelps.queryDeviceData = function (queryParameters) {\n\tif (queryParameters.hasOwnProperty(\"type\")) {\n\t\tqueryParameters.type = reduceArrayAndEscape(queryParameters.type);\n\t}\n\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\tqueryParameters.observedBefore = convertDateToIsoString(queryParameters.observedBefore);\n\t}\n\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\tqueryParameters.observedAfter = convertDateToIsoString(queryParameters.observedAfter);\n\t}\n\n\tvar queryString = new URLSearchParams(queryParameters).toString();\n\tvar endpoint = 'devicedata?' + queryString;\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'GET', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return response.json(); });\n};\n\nMyDataHelps.persistDeviceData = function (deviceDataPoints) {\n\tvar endpoint = 'devicedata';\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'POST', deviceDataPoints); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return; });\n};\n\nMyDataHelps.trackCustomEvent = function (event) {\n\tvar endpoint = 'customevents';\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'POST', event); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return; });\n};\n\nMyDataHelps.querySurveyTasks = function (queryParameters) {\n\tif (queryParameters.hasOwnProperty(\"status\")) {\n\t\tqueryParameters.status = reduceArrayAndEscape(queryParameters.status);\n\t}\n\tif (queryParameters.hasOwnProperty(\"surveyName\")) {\n\t\tqueryParameters.surveyName = reduceArrayAndEscape(queryParameters.surveyName);\n\t}\n\n\tvar queryString = new URLSearchParams(queryParameters).toString();\n\tvar endpoint = 'surveytasks?' + queryString;\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'GET', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return response.json(); });\n};\n\nMyDataHelps.queryNotifications = function (queryParameters) {\n\tif (queryParameters.hasOwnProperty(\"sentBefore\")) {\n\t\tqueryParameters.sentBefore = convertDateToIsoString(queryParameters.sentBefore);\n\t}\n\tif (queryParameters.hasOwnProperty(\"sentAfter\")) {\n\t\tqueryParameters.sentAfter = convertDateToIsoString(queryParameters.sentAfter);\n\t}\n\n\tvar queryString = new URLSearchParams(queryParameters).toString();\n\tvar endpoint = 'notifications?' + queryString;\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'GET', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return response.json(); });\n};\n\n\tMyDataHelps.getExternalAccountProviders = function (search, category, pageSize, pageNumber) {\n\tvar searchParameters = {};\n\tif (!!search) searchParameters.search = search;\n\tif (!!category) searchParameters.category = category;\n\t\tif (!!pageSize) searchParameters.pageSize = pageSize;\n\t\tif (!!pageNumber) searchParameters.pageNumber = pageNumber;\n\n\tvar queryString = new URLSearchParams(searchParameters).toString();\n\tvar endpoint = 'externalaccountproviders?' + queryString;\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'GET', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return response.json(); });\n};\n\nMyDataHelps.getExternalAccounts = function () {\n\tvar endpoint = 'externalaccounts';\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'GET', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return response.json(); });\n};\n\nMyDataHelps.refreshExternalAccount = function (accountId) {\n\tvar endpoint = 'externalaccounts/refresh/' + accountId;\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, 'POST', null); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return; });\n};\n\nMyDataHelps.invokeCustomApi = function (customApi, method, queryParameters, jsonResponse) {\n\tif (customApi.includes('?')) {\n\t\tthrow new Error(\"Cannot include query parameters directly in the \\\"customApi\\\" string. Provide as an argument for \\\"queryParameters\\\" instead.\");\n\t}\n\n\tvar endpoint = 'custom/' + customApi;\n\tmethod = method.toUpperCase();\n\tif (queryParameters !== null && queryParameters !== undefined && (method === 'GET' || method === 'DELETE')) {\n\t\tvar parameterString = new URLSearchParams(queryParameters).toString();\n\t\tendpoint += \"?\" + parameterString;\n\t\tqueryParameters = null;\n\t}\n\n\treturn MyDataHelps\n\t\t.connect()\n\t\t.then(function () { return makeRequest(endpoint, method, queryParameters); })\n\t\t.then(function (response) { return validateResponse(response); })\n\t\t.then(function (response) { return jsonResponse ? response.json() : undefined; });\n};\n\n//Embedded surveys and tasks\n\nfunction getBaseUrl() {\n\treturn MyDataHelps.baseUrl || 'https://mydatahelps.org/';\n}\n\nMyDataHelps.startEmbeddedSurvey = function (linkIdentifier, surveyName, language) {\n\tif (!language) { language = this.getCurrentLanguage(); }\n\tvar surveyUrl = getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/surveylink/' + surveyName + \"?lang=\" + language;\n\treturn startEmbeddedSurvey(surveyUrl);\n};\n\nMyDataHelps.startEmbeddedTask = function (linkIdentifier, taskLinkIdentifier, language) {\n\tif (!language) { language = this.getCurrentLanguage(); }\n\tvar surveyUrl = getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/tasklink/' + taskLinkIdentifier + \"?lang=\" + language;\n\treturn startEmbeddedSurvey(surveyUrl);\n};\n\nfunction startEmbeddedSurvey(surveyUrl) {\n\tvar mdhSurveyModalId = 'mydatahelps-survey-modal';\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (document.getElementById(mdhSurveyModalId)) {\n\t\t\treject(\"Survey already in progress\");\n\t\t\treturn;\n\t\t}\n\n\t\twindow.addEventListener(\"message\", function listener(message) {\n\t\t\tif (message.origin !== new URL(getBaseUrl()).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar frame = document.getElementById('mydatahelps-survey-frame').contentWindow;\n\t\t\tif (message.source !== frame) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.data.name == 'SurveyWindowInitialized') {\n\t\t\t\tdocument.getElementById(mdhSurveyModalId).className += \" loaded\";\n\t\t\t} else if (message.data.name == 'SurveyFinished') {\n\t\t\t\tdocument.getElementById(mdhSurveyModalId).remove();\n\t\t\t\tdocument.body.className = document.body.className.replace(\"no-scroll\", \"\");\n\t\t\t\twindow.removeEventListener(\"message\", listener, true);\n\t\t\t\tresolve(message.data);\n\t\t\t}\n\t\t}, true);\n\n\t\tvar surveyModal = document.createElement('div');\n\t\tsurveyModal.className = 'mydatahelps-survey-modal';\n\t\tsurveyModal.id = mdhSurveyModalId;\n\t\tsurveyModal.innerHTML = \"<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='\" + surveyUrl + \"'></iframe></div>\";\n\t\tdocument.body.append(surveyModal);\n\t\tdocument.body.className += ' no-scroll';\n\t});\n}\n\n//iOS/Android directly invoke window.MyDataHelps and window.RKStudioClient\n//so it's necessary to explicitly ensure they are present on the window\nwindow.MyDataHelps = MyDataHelps;\nwindow.RKStudioClient = RKStudioClient;\n\nexport default MyDataHelps;"],"names":["MyDataHelps","RKStudioClient","currentMessageID","messageHandlers","registeredEventHandlers","acceptableOrigin","origin","allowedApplicationHosts","sourceURL","URL","k","length","hostname","endsWith","ancestorOrigins","supportedActions","applicationHost","document","location","console","error","window","webkit","ResearchKit","GetDelegatedAccessToken","data","parent","postMessage","name","messageID","GetDeviceInfo","StartParticipantSurvey","surveyName","OpenExternalLink","url","OpenEmbeddedLink","OpenExternalApplication","modal","Dismiss","PopNavigation","ShowTab","tabKey","ShowParticipantDashboard","dashboardKey","ShowParticipantWebVisualization","visualizationKey","parameters","ShowParticipantWebVisualizationPDF","landscape","htmlViewerZoom","DeleteProviderAccount","accountID","ConnectExternalAccount","externalAccountProviderID","ShowProject","code","JoinProject","unsupportedActions","supportedEvents","action","windowHasAnyActions","nextMessageID","addEventListener","message","validateWindowMessageOrigin","setActionResult","triggerEvent","event","eventName","type","includes","forEach","handler","refreshTokenPromise","connect","refreshDelegatedAccessToken","token","Promise","resolve","reject","tokenResponse","success","tokenExpires","Date","now","expires_in","baseUrl","setTimeout","setParticipantAccessToken","completeStep","answer","startSurvey","openExternalUrl","openEmbeddedUrl","openApplication","options","dismiss","back","showTab","showDashboard","title","undefined","showWebVisualization","showWebVisualizationPdf","setStatusBarStyle","style","SetStatusBarStyle","requestReview","cooldownDays","RequestReview","getDeviceInfo","deviceInfoResponse","deleteExternalAccount","deleteProviderAccountResponse","connectExternalAccount","showProject","projectCode","joinProject","getCurrentLanguage","searchParams","URLSearchParams","search","has","get","navigator","language","showGoogleFitSettings","ShowGoogleFitSettings","on","eventHandler","Error","push","off","eventHandlerIndex","indexOf","splice","makeRequest","endpoint","method","body","access_token","makeUrl","headers","Headers","append","init","JSON","stringify","fetch","validateResponse","response","ok","statusText","escapeParam","param","String","replace","reduceArrayAndEscape","Array","isArray","map","elem","join","convertDateToIsoString","date","paramAsDate","isNaN","getTime","toISOString","getBaseUrl","startEmbeddedSurvey","surveyUrl","mdhSurveyModalId","getElementById","listener","frame","contentWindow","source","className","remove","removeEventListener","surveyModal","createElement","id","innerHTML","getParticipantInfo","then","json","querySurveyAnswers","queryParameters","hasOwnProperty","stepIdentifier","resultIdentifier","before","after","toString","deleteSurveyResult","resultID","encodeURIComponent","queryDeviceData","observedBefore","observedAfter","persistDeviceData","deviceDataPoints","trackCustomEvent","querySurveyTasks","status","queryNotifications","sentBefore","sentAfter","getExternalAccountProviders","category","pageSize","pageNumber","searchParameters","getExternalAccounts","refreshExternalAccount","accountId","invokeCustomApi","customApi","jsonResponse","toUpperCase","parameterString","linkIdentifier","this","startEmbeddedTask","taskLinkIdentifier"],"mappings":"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"}
1
+ {"version":3,"file":"MyDataHelps.min.js","sources":["../MyDataHelps.js"],"sourcesContent":["export class MyDataHelps {\n constructor() {\n this.allowedApplicationHosts = [\n 'localhost',\n 'careevolution.com',\n 'internal',\n 'b3-deploys.com',\n 'mydatahelps.org',\n 'platform.joinallofus.org',\n 'careevolution.dev',\n 'ce.dev'\n ];\n this.accessTokenRenewalBufferSeconds = 120;\n this.apiBasePath = 'api/v1/delegated/';\n this.unsupportedActions = [\"SetHeight\", \"ResearchKit\"];\n this.supportedEvents = [\"surveyDidFinish\", \"applicationDidBecomeVisible\", \"externalAccountSyncComplete\", \"tokenWillExpire\"];\n this.currentMessageID = 1;\n this.messageHandlers = [];\n this.registeredEventHandlers = {};\n this.refreshTokenPromise = null;\n let mdh = this;\n let applicationHost = getParentOrigin();\n let supportedActions;\n function getParentOrigin() {\n let ancestorOrigins = document.location.ancestorOrigins;\n if (ancestorOrigins && ancestorOrigins[0]) {\n return ancestorOrigins[0];\n }\n return '*';\n }\n function acceptableOrigin(origin) {\n if (origin === '*')\n return true;\n let sourceURL = new URL(origin);\n for (let k = 0; k < mdh.allowedApplicationHosts.length; k++) {\n if (sourceURL.hostname === mdh.allowedApplicationHosts[k] || sourceURL.hostname.endsWith(\".\" + mdh.allowedApplicationHosts[k])) {\n return true;\n }\n }\n return false;\n }\n function validateWindowMessageOrigin(message) {\n if (applicationHost === \"*\") {\n return acceptableOrigin(message.origin);\n }\n return message.origin === applicationHost;\n }\n function receiveWindowMessage(message) {\n if (!validateWindowMessageOrigin(message)) {\n console.error(\"message.origin '\" + message.origin + \"' is not allowed.\");\n throw \"message.origin '\" + message.origin + \"' is not allowed.\";\n }\n if (message.data.messageID) {\n mdh.setActionResult(message.data);\n }\n else {\n mdh.triggerEvent(message.data);\n }\n }\n if (!acceptableOrigin(applicationHost)) {\n console.error(\"Application is not hosted at an approved origin.\");\n throw \"Application is not hosted at an approved origin.\";\n }\n if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.ResearchKit) {\n supportedActions = {\n \"GetDelegatedAccessToken\": function (data) {\n window.parent.postMessage({\n name: 'GetDelegatedAccessToken',\n messageID: data.messageID\n }, applicationHost);\n },\n \"GetDeviceInfo\": function (data) {\n window.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost);\n }\n };\n }\n else {\n supportedActions = {\n \"GetDelegatedAccessToken\": function (data) {\n window.parent.postMessage({\n name: 'GetDelegatedAccessToken',\n messageID: data.messageID\n }, applicationHost);\n },\n \"GetDeviceInfo\": function (data) {\n window.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost);\n },\n \"StartParticipantSurvey\": function (data) {\n window.parent.postMessage({\n name: 'StartParticipantSurvey',\n messageID: data.messageID,\n surveyName: data.surveyName\n }, applicationHost);\n },\n \"OpenExternalLink\": function (data) {\n window.parent.postMessage({ name: 'OpenExternalUrl', url: data }, applicationHost);\n },\n \"OpenEmbeddedLink\": function (data) {\n window.parent.postMessage({ name: 'OpenEmbeddedUrl', url: data }, applicationHost);\n },\n \"OpenExternalApplication\": function (data) {\n window.parent.postMessage({\n name: 'OpenApplication',\n messageID: data.messageID,\n url: data.url,\n modal: data.modal\n }, applicationHost);\n },\n \"Dismiss\": function () {\n window.parent.postMessage({ name: 'Dismiss' }, applicationHost);\n },\n \"PopNavigation\": function () {\n window.parent.postMessage({ name: 'Back' }, applicationHost);\n },\n \"ShowTab\": function (data) {\n window.parent.postMessage({ name: 'ShowTab', tabKey: data }, applicationHost);\n },\n \"ShowParticipantDashboard\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantDashboard',\n dashboardKey: data.dashboardKey,\n modal: data.modal\n }, applicationHost);\n },\n \"ShowParticipantWebVisualization\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantWebVisualization',\n visualizationKey: data.visualizationKey,\n parameters: data.parameters,\n modal: data.modal\n }, applicationHost);\n },\n \"ShowParticipantWebVisualizationPDF\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantWebVisualizationPDF',\n visualizationKey: data.visualizationKey,\n parameters: data.parameters,\n modal: data.modal,\n landscape: data.landscape,\n htmlViewerZoom: data.htmlViewerZoom\n }, applicationHost);\n },\n \"DeleteProviderAccount\": function (data) {\n window.parent.postMessage({\n name: 'DeleteProviderAccount',\n messageID: data.messageID,\n accountID: data.accountID\n }, applicationHost);\n },\n \"ConnectExternalAccount\": function (data) {\n window.parent.postMessage({\n name: 'ConnectExternalAccount',\n externalAccountProviderID: data.externalAccountProviderID\n }, applicationHost);\n },\n \"ShowProject\": function (data) {\n window.parent.postMessage({ name: 'ShowProject', code: data.code }, applicationHost);\n },\n \"JoinProject\": function (data) {\n window.parent.postMessage({ name: 'JoinProject', code: data.code }, applicationHost);\n }\n };\n }\n function windowHasAnyActions() {\n for (let action in supportedActions) {\n if (window.webkit.messageHandlers[action]) {\n return true;\n }\n }\n for (let action in mdh.unsupportedActions) {\n if (window.webkit.messageHandlers[mdh.unsupportedActions[action]]) {\n return true;\n }\n }\n return false;\n }\n if (!window.webkit || !window.webkit.messageHandlers || !windowHasAnyActions()) {\n window.webkit = {\n messageHandlers: {}\n };\n }\n for (let action in supportedActions) {\n window.webkit.messageHandlers[action] = window.webkit.messageHandlers[action] || { postMessage: supportedActions[action] };\n }\n window.addEventListener(\"message\", receiveWindowMessage, false);\n }\n // Surveys\n startSurvey(surveyName) {\n let messageID = this.nextMessageID();\n window.webkit.messageHandlers.StartParticipantSurvey.postMessage({\n messageID: messageID,\n surveyName: surveyName\n });\n }\n completeStep(answer) {\n if (answer === undefined || answer === null)\n answer = '';\n if (window.webkit.messageHandlers.ResearchKit) {\n window.webkit.messageHandlers.ResearchKit.postMessage(answer);\n }\n }\n querySurveyAnswers(queryParameters) {\n if (queryParameters.hasOwnProperty(\"surveyName\")) {\n queryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n }\n if (queryParameters.hasOwnProperty(\"stepIdentifier\")) {\n queryParameters.stepIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.stepIdentifier);\n }\n if (queryParameters.hasOwnProperty(\"resultIdentifier\")) {\n queryParameters.resultIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.resultIdentifier);\n }\n if (queryParameters.hasOwnProperty(\"answer\")) {\n queryParameters.answer = MyDataHelps.reduceArrayAndEscape(queryParameters.answer);\n }\n if (queryParameters.hasOwnProperty(\"before\")) {\n queryParameters.before = MyDataHelps.convertDateToIsoString(queryParameters.before);\n }\n if (queryParameters.hasOwnProperty(\"after\")) {\n queryParameters.after = MyDataHelps.convertDateToIsoString(queryParameters.after);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'surveyanswers?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n deleteSurveyResult(resultID) {\n const endpoint = 'surveyresults/' + encodeURIComponent(resultID);\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'DELETE', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n querySurveyTasks(queryParameters) {\n if (queryParameters.hasOwnProperty(\"status\")) {\n queryParameters.status = MyDataHelps.reduceArrayAndEscape(queryParameters.status);\n }\n if (queryParameters.hasOwnProperty(\"surveyName\")) {\n queryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'surveytasks?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n startEmbeddedSurvey(linkIdentifier, surveyName, language) {\n if (!language) {\n language = this.getCurrentLanguage();\n }\n let surveyUrl = this.getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/surveylink/' + surveyName + \"?lang=\" + language;\n return this.startEmbeddedSurveyInternal(surveyUrl);\n }\n startEmbeddedTask(linkIdentifier, taskLinkIdentifier, language) {\n if (!language) {\n language = this.getCurrentLanguage();\n }\n let surveyUrl = this.getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/tasklink/' + taskLinkIdentifier + \"?lang=\" + language;\n return this.startEmbeddedSurveyInternal(surveyUrl);\n }\n // Navigation\n openExternalUrl(url) {\n window.webkit.messageHandlers.OpenExternalLink.postMessage(url);\n }\n openEmbeddedUrl(url) {\n window.webkit.messageHandlers.OpenEmbeddedLink.postMessage(url);\n }\n showTab(tabKey) {\n window.webkit.messageHandlers.ShowTab.postMessage(tabKey);\n }\n openApplication(url, options) {\n let messageID = this.nextMessageID();\n window.webkit.messageHandlers.OpenExternalApplication.postMessage({\n messageID: messageID,\n url: url,\n modal: !!(options && options.modal)\n });\n }\n dismiss() {\n window.webkit.messageHandlers.Dismiss.postMessage({});\n }\n back() {\n window.webkit.messageHandlers.PopNavigation.postMessage({});\n }\n showDashboard(dashboardKey, options) {\n window.webkit.messageHandlers.ShowParticipantDashboard.postMessage({\n dashboardKey: dashboardKey,\n modal: !!(options && options.modal),\n title: options && options.title ? options.title : undefined\n });\n }\n showWebVisualization(visualizationKey, parameters, options) {\n window.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({\n visualizationKey: visualizationKey,\n parameters: parameters,\n modal: !!(options && options.modal),\n title: options && options.title ? options.title : undefined\n });\n }\n showWebVisualizationPdf(visualizationKey, parameters, options) {\n window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({\n visualizationKey: visualizationKey,\n parameters: parameters,\n landscape: !!(options && options.landscape),\n htmlViewerZoom: options && options.htmlViewerZoom\n });\n }\n showProject(projectCode) {\n if (window.webkit.messageHandlers.ShowProject) {\n window.webkit.messageHandlers.ShowProject.postMessage({ code: projectCode });\n }\n }\n joinProject(projectCode) {\n if (window.webkit.messageHandlers.JoinProject) {\n window.webkit.messageHandlers.JoinProject.postMessage({ code: projectCode });\n }\n }\n //Events\n on(eventName, callback) {\n if (!this.supportedEvents.includes(eventName)) {\n throw new Error(eventName + \" is not a supported event type.\");\n }\n if (!this.registeredEventHandlers[eventName]) {\n this.registeredEventHandlers[eventName] = [];\n }\n this.registeredEventHandlers[eventName].push(callback);\n }\n off(eventName, callback) {\n if (!this.supportedEvents.includes(eventName)) {\n throw new Error(eventName + \" is not a supported event type.\");\n }\n if (!this.registeredEventHandlers[eventName])\n return;\n let eventHandlerIndex = this.registeredEventHandlers[eventName].indexOf(callback);\n if (eventHandlerIndex !== -1) {\n this.registeredEventHandlers[eventName].splice(eventHandlerIndex, 1);\n }\n }\n triggerEvent(event) {\n let eventName = event.type;\n if (this.supportedEvents.includes(eventName) && this.registeredEventHandlers[eventName]) {\n this.registeredEventHandlers[eventName].forEach(function (handler) {\n handler(event);\n });\n }\n }\n setActionResult(data) {\n this.messageHandlers[data.messageID](data);\n }\n // Participant Info\n getParticipantInfo() {\n const mdh = this;\n const endpoint = 'participant';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n getProjectInfo() {\n const mdh = this;\n const endpoint = 'project';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Device Data\n queryDeviceData(queryParameters) {\n if (queryParameters.hasOwnProperty(\"type\")) {\n queryParameters.type = MyDataHelps.reduceArrayAndEscape(queryParameters.type);\n }\n if (queryParameters.hasOwnProperty(\"observedBefore\")) {\n queryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n }\n if (queryParameters.hasOwnProperty(\"observedAfter\")) {\n queryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'devicedata?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n persistDeviceData(deviceDataPoints) {\n const endpoint = 'devicedata';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', deviceDataPoints);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n // External Accounts\n getExternalAccountProviders(search, category, pageSize, pageNumber) {\n let searchParameters = {};\n if (!!search)\n searchParameters.search = search;\n if (!!category)\n searchParameters.category = category;\n if (!!pageSize)\n searchParameters.pageSize = pageSize;\n if (!!pageNumber)\n searchParameters.pageNumber = pageNumber;\n const queryString = new URLSearchParams(searchParameters).toString();\n const endpoint = 'externalaccountproviders?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n connectExternalAccount(externalAccountProviderID) {\n if (window.webkit.messageHandlers.ConnectExternalAccount) {\n window.webkit.messageHandlers.ConnectExternalAccount.postMessage({ externalAccountProviderID: externalAccountProviderID });\n }\n }\n getExternalAccounts() {\n const endpoint = 'externalaccounts';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n refreshExternalAccount(accountID) {\n const endpoint = 'externalaccounts/refresh/' + accountID;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n deleteExternalAccount(accountID) {\n let mdh = this;\n return new Promise(function (resolve, reject) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (deleteProviderAccountResponse) {\n if (!deleteProviderAccountResponse.success) {\n reject(deleteProviderAccountResponse);\n }\n else {\n resolve(deleteProviderAccountResponse);\n }\n };\n if (window.webkit.messageHandlers.DeleteProviderAccount) {\n window.webkit.messageHandlers.DeleteProviderAccount.postMessage({\n messageID: messageID,\n accountID: accountID\n });\n }\n else {\n reject();\n }\n });\n }\n // Notifications\n queryNotifications(queryParameters) {\n if (queryParameters.hasOwnProperty(\"sentBefore\")) {\n queryParameters.sentBefore = MyDataHelps.convertDateToIsoString(queryParameters.sentBefore);\n }\n if (queryParameters.hasOwnProperty(\"sentAfter\")) {\n queryParameters.sentAfter = MyDataHelps.convertDateToIsoString(queryParameters.sentAfter);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'notifications?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Authorization\n connect() {\n const mdh = this;\n let refreshDelegatedAccessToken = function () {\n mdh.token = null;\n mdh.refreshTokenPromise = new Promise(function (resolve, reject) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (tokenResponse) {\n if (tokenResponse.success) {\n mdh.tokenExpires = Date.now() + (tokenResponse.data.expires_in * 1000);\n mdh.token = tokenResponse.data;\n mdh.baseUrl = tokenResponse.baseUrl;\n setTimeout(refreshDelegatedAccessToken, ((tokenResponse.data.expires_in - mdh.accessTokenRenewalBufferSeconds) * 1000));\n resolve(null);\n }\n else {\n mdh.token = null;\n reject(tokenResponse.message);\n }\n mdh.messageHandlers[messageID] = null;\n mdh.refreshTokenPromise = null;\n };\n window.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({ messageID: messageID });\n });\n };\n if (this.token && Date.now() < this.tokenExpires) {\n return Promise.resolve();\n }\n if (!this.refreshTokenPromise) {\n refreshDelegatedAccessToken();\n }\n // Re-use promise if refresh already in progress\n return this.refreshTokenPromise;\n }\n setParticipantAccessToken(token, baseUrl) {\n this.token = token;\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n this.tokenExpires = Date.now() + (this.token.expires_in * 1000);\n const mdh = this;\n setTimeout(function () {\n mdh.triggerEvent({ type: \"tokenWillExpire\" });\n }, ((this.token.expires_in - this.accessTokenRenewalBufferSeconds) * 1000));\n }\n // Miscellaneous\n setStatusBarStyle(style) {\n if (window.webkit.messageHandlers.SetStatusBarStyle) {\n window.webkit.messageHandlers.SetStatusBarStyle.postMessage({ style: style });\n }\n }\n getDeviceInfo() {\n let mdh = this;\n return new Promise(function (resolve, reject) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (deviceInfoResponse) {\n resolve(deviceInfoResponse.data);\n };\n if (window.webkit.messageHandlers.GetDeviceInfo) {\n window.webkit.messageHandlers.GetDeviceInfo.postMessage({ messageID: messageID });\n }\n else {\n reject();\n }\n });\n }\n getCurrentLanguage() {\n let searchParams = new URLSearchParams(window.location.search);\n if (searchParams.has(\"lang\")) {\n return searchParams.get(\"lang\");\n }\n else {\n return navigator.language;\n }\n }\n showGoogleFitSettings() {\n if (window.webkit.messageHandlers.ShowGoogleFitSettings) {\n window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({});\n }\n }\n requestReview(cooldownDays) {\n if (window.webkit.messageHandlers.RequestReview) {\n window.webkit.messageHandlers.RequestReview.postMessage({ cooldownDays: cooldownDays });\n }\n }\n trackCustomEvent(event) {\n const endpoint = 'customevents';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', event);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n getDataCollectionSettings() {\n const mdh = this;\n const endpoint = 'datacollectionsettings';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n invokeCustomApi(customApi, method, queryParameters, jsonResponse) {\n if (customApi.includes('?')) {\n throw new Error(\"Cannot include query parameters directly in the \\\"customApi\\\" string. Provide as an argument for \\\"queryParameters\\\" instead.\");\n }\n let endpoint = 'custom/' + customApi;\n method = method.toUpperCase();\n if (queryParameters !== null && queryParameters !== undefined && (method === 'GET' || method === 'DELETE')) {\n let parameterString = new URLSearchParams(queryParameters).toString();\n endpoint += \"?\" + parameterString;\n queryParameters = null;\n }\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, method, queryParameters);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return jsonResponse ? response.json() : undefined;\n });\n }\n nextMessageID() {\n return this.currentMessageID++;\n }\n getBaseUrl() {\n return this.baseUrl || 'https://mydatahelps.org/';\n }\n makeUrl(endpoint) {\n if (!this.baseUrl) {\n console.error(\"Cannot use makeUrl without MyDataHelps.baseUrl.\");\n throw \"Cannot use makeUrl without MyDataHelps.baseUrl.\";\n }\n return this.baseUrl + this.apiBasePath + endpoint;\n }\n makeRequest(endpoint, method, body) {\n if (!this.token || !this.token.access_token) {\n throw \"No access_token available for request authorization.\";\n }\n let url = this.makeUrl(endpoint);\n let headers = new Headers();\n headers.append('Authorization', 'Bearer ' + this.token.access_token);\n headers.append('Accept', 'application/json, text/javascript, */*; q=0.01');\n headers.append('Accept-Language', this.getCurrentLanguage());\n if (!!body) {\n headers.append('Content-Type', 'application/json');\n }\n let init = {\n method: method,\n headers: headers\n };\n if (!!body) {\n init.body = JSON.stringify(body);\n }\n return fetch(url, init);\n }\n static validateResponse(response) {\n if (!response.ok) {\n throw response.statusText;\n }\n return response;\n }\n static escapeParam(param) {\n return String(param)\n .replace(\"\\\\\", \"\\\\\\\\\")\n .replace(\",\", \"\\\\,\");\n }\n static reduceArrayAndEscape(param) {\n if (Array.isArray(param)) {\n let escapedParams = param.map(function (elem) {\n return MyDataHelps.escapeParam(elem);\n });\n return escapedParams.join(\",\");\n }\n return this.escapeParam(param);\n }\n static convertDateToIsoString(date) {\n let paramAsDate = new Date(date);\n if (isNaN(paramAsDate.getTime())) {\n throw \"Cannot interpret parameter as Date\";\n }\n return paramAsDate.toISOString();\n }\n startEmbeddedSurveyInternal(surveyUrl) {\n let mdhSurveyModalId = 'mydatahelps-survey-modal';\n let mdh = this;\n return new Promise(function (resolve, reject) {\n if (document.getElementById(mdhSurveyModalId)) {\n reject(\"Survey already in progress\");\n return;\n }\n window.addEventListener(\"message\", function listener(message) {\n if (message.origin !== new URL(mdh.getBaseUrl()).origin) {\n return;\n }\n let frame = document.getElementById('mydatahelps-survey-frame').contentWindow;\n if (message.source !== frame) {\n return;\n }\n if (message.data.name === 'SurveyWindowInitialized') {\n document.getElementById(mdhSurveyModalId).className += \" loaded\";\n }\n else if (message.data.name === 'SurveyFinished') {\n document.getElementById(mdhSurveyModalId).remove();\n document.body.className = document.body.className.replace(\"no-scroll\", \"\");\n window.removeEventListener(\"message\", listener, true);\n resolve(message.data);\n }\n }, true);\n let surveyModal = document.createElement('div');\n surveyModal.className = 'mydatahelps-survey-modal';\n surveyModal.id = mdhSurveyModalId;\n surveyModal.innerHTML = \"<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='\" + surveyUrl + \"'></iframe></div>\";\n document.body.append(surveyModal);\n document.body.className += ' no-scroll';\n });\n }\n}\n//iOS/Android directly invoke window.MyDataHelps and window.RKStudioClient\n//so it's necessary to explicitly ensure they are present on the window\nconst mdh = new MyDataHelps();\nwindow.MyDataHelps = mdh;\n// For backwards compatibility\nwindow.RKStudioClient = {};\nwindow.RKStudioClient.setActionResult = function (data) {\n window.MyDataHelps.setActionResult(data);\n};\nexport default mdh;\nexport * from './types';\n"],"names":["MyDataHelps","constructor","this","allowedApplicationHosts","accessTokenRenewalBufferSeconds","apiBasePath","unsupportedActions","supportedEvents","currentMessageID","messageHandlers","registeredEventHandlers","refreshTokenPromise","supportedActions","mdh","applicationHost","ancestorOrigins","document","location","getParentOrigin","acceptableOrigin","origin","sourceURL","URL","k","length","hostname","endsWith","console","error","window","webkit","ResearchKit","GetDelegatedAccessToken","data","parent","postMessage","name","messageID","GetDeviceInfo","StartParticipantSurvey","surveyName","OpenExternalLink","url","OpenEmbeddedLink","OpenExternalApplication","modal","Dismiss","PopNavigation","ShowTab","tabKey","ShowParticipantDashboard","dashboardKey","ShowParticipantWebVisualization","visualizationKey","parameters","ShowParticipantWebVisualizationPDF","landscape","htmlViewerZoom","DeleteProviderAccount","accountID","ConnectExternalAccount","externalAccountProviderID","ShowProject","code","JoinProject","action","windowHasAnyActions","addEventListener","message","validateWindowMessageOrigin","setActionResult","triggerEvent","startSurvey","nextMessageID","completeStep","answer","querySurveyAnswers","queryParameters","hasOwnProperty","reduceArrayAndEscape","stepIdentifier","resultIdentifier","before","convertDateToIsoString","after","endpoint","URLSearchParams","toString","connect","then","makeRequest","response","validateResponse","json","deleteSurveyResult","resultID","encodeURIComponent","querySurveyTasks","status","startEmbeddedSurvey","linkIdentifier","language","getCurrentLanguage","surveyUrl","getBaseUrl","startEmbeddedSurveyInternal","startEmbeddedTask","taskLinkIdentifier","openExternalUrl","openEmbeddedUrl","showTab","openApplication","options","dismiss","back","showDashboard","title","undefined","showWebVisualization","showWebVisualizationPdf","showProject","projectCode","joinProject","on","eventName","callback","includes","Error","push","off","eventHandlerIndex","indexOf","splice","event","type","forEach","handler","getParticipantInfo","getProjectInfo","queryDeviceData","observedBefore","observedAfter","persistDeviceData","deviceDataPoints","getExternalAccountProviders","search","category","pageSize","pageNumber","searchParameters","connectExternalAccount","getExternalAccounts","refreshExternalAccount","deleteExternalAccount","Promise","resolve","reject","deleteProviderAccountResponse","success","queryNotifications","sentBefore","sentAfter","refreshDelegatedAccessToken","token","tokenResponse","tokenExpires","Date","now","expires_in","baseUrl","setTimeout","setParticipantAccessToken","setStatusBarStyle","style","SetStatusBarStyle","getDeviceInfo","deviceInfoResponse","searchParams","has","get","navigator","showGoogleFitSettings","ShowGoogleFitSettings","requestReview","cooldownDays","RequestReview","trackCustomEvent","getDataCollectionSettings","invokeCustomApi","customApi","method","jsonResponse","toUpperCase","parameterString","makeUrl","body","access_token","headers","Headers","append","init","JSON","stringify","fetch","static","ok","statusText","param","String","replace","Array","isArray","map","elem","escapeParam","join","date","paramAsDate","isNaN","getTime","toISOString","mdhSurveyModalId","getElementById","listener","frame","contentWindow","source","className","remove","removeEventListener","surveyModal","createElement","id","innerHTML","RKStudioClient"],"mappings":"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"}
package/package.json CHANGED
@@ -1,19 +1,22 @@
1
1
  {
2
2
  "name": "@careevolution/mydatahelps-js",
3
- "version": "2.3.0",
3
+ "version": "3.0.0",
4
4
  "description": "MyDataHelps client to be used by external applications for integrations inside the MyDataHelps platform",
5
+ "type": "module",
6
+ "types": "MyDataHelps.d.ts",
5
7
  "main": "MyDataHelps.js",
6
8
  "module": "MyDataHelps.js",
7
9
  "scripts": {
8
- "build": "rollup -c"
10
+ "build": "tsc && rollup -c"
9
11
  },
10
12
  "author": "CareEvolution",
11
13
  "license": "Apache-2.0",
12
14
  "homepage": "https://developer.rkstudio.careevolution.com/sdk/",
13
15
  "devDependencies": {
14
16
  "rollup": "^2.69.0",
17
+ "rollup-plugin-copy": "^3.4.0",
15
18
  "rollup-plugin-terser": "^7.0.2",
16
- "rollup-plugin-copy": "^3.4.0"
19
+ "typescript": "^4.6.3"
17
20
  },
18
21
  "keywords": [
19
22
  "MDH",
package/types.d.ts ADDED
@@ -0,0 +1,257 @@
1
+ export declare type SurveyTaskStatus = "incomplete" | "closed" | "complete";
2
+ export declare type SortOrder = "descending" | "ascending";
3
+ export declare type EventName = "applicationDidBecomeVisible" | "surveyDidFinish" | "externalAccountSyncComplete" | "tokenWillExpire";
4
+ export declare type DeviceDataNamespace = "Project" | "Fitbit" | "AppleHealth" | "GoogleFit" | "AirNowApi" | "WeatherBit";
5
+ export declare type ExternalAccountStatus = "unauthorized" | "fetchComplete" | "error" | "fetchingData";
6
+ export declare type NotificationType = "Sms" | "Push" | "Email";
7
+ export declare type NotificationStatusCode = "Succeeded" | "Unsubscribed" | "MissingContactInfo" | "NoRegisteredMobileDevice" | "NoAssociatedUser" | "ServiceError";
8
+ export declare type StatusBarStyle = "lightContent" | "darkContent" | "default";
9
+ export interface Guid extends String {
10
+ }
11
+ export interface QueryParameters {
12
+ limit?: number;
13
+ pageID?: Guid;
14
+ }
15
+ export interface ExternalAccount {
16
+ id: number;
17
+ provider: ExternalAccountProvider;
18
+ status: ExternalAccountStatus;
19
+ lastRefreshDate: string;
20
+ }
21
+ export interface ExternalAccountProvider {
22
+ id: number;
23
+ name: string;
24
+ category: string;
25
+ logoUrl: string;
26
+ }
27
+ export interface ExternalAccountProvidersPage {
28
+ externalAccountProviders: ExternalAccountProvider[];
29
+ totalExternalAccountProviders: number;
30
+ }
31
+ export interface ProjectInfo {
32
+ id: Guid;
33
+ name: string;
34
+ description: string;
35
+ code: string;
36
+ type: string;
37
+ organization: {
38
+ id: Guid;
39
+ name: string;
40
+ description: string;
41
+ logoUrl: string;
42
+ color: string;
43
+ };
44
+ supportEmail: string;
45
+ supportPhone: string;
46
+ learnMoreLink: string;
47
+ learnMoreTitle: string;
48
+ }
49
+ export interface DeviceInfo {
50
+ offset: string;
51
+ device: {
52
+ identifier: Guid;
53
+ platform: string;
54
+ properties: {
55
+ [key: string]: string;
56
+ };
57
+ };
58
+ timeZone: string;
59
+ }
60
+ export interface ParticipantInfo {
61
+ participantID: Guid;
62
+ participantIdentifier: string;
63
+ secondaryIdentifier: string;
64
+ linkIdentifier: string;
65
+ demographics: ParticipantDemographics;
66
+ customFields: {
67
+ [key: string]: string;
68
+ };
69
+ enrollmentDate: string;
70
+ projectID: string;
71
+ }
72
+ export interface ParticipantDemographics extends Record<string, string> {
73
+ email: string;
74
+ mobilePhone: string;
75
+ firstName: string;
76
+ middleName: string;
77
+ lastName: string;
78
+ dateOfBirth: string;
79
+ gender: string;
80
+ preferredLanguage: string;
81
+ street1: string;
82
+ street2: string;
83
+ city: string;
84
+ state: string;
85
+ postalCode: string;
86
+ utcOffset: string;
87
+ unsubscribedFromEmails: string;
88
+ timeZone: string;
89
+ unsubscribedFromSms: string;
90
+ }
91
+ export interface NotificationQueryParameters extends QueryParameters {
92
+ sentBefore?: string;
93
+ sentAfter?: string;
94
+ identifier?: string;
95
+ type?: NotificationType;
96
+ statusCode?: NotificationStatusCode;
97
+ }
98
+ export interface NotificationsPage {
99
+ notifications: Notification[];
100
+ nextPageID?: Guid;
101
+ }
102
+ export interface Notification {
103
+ id: Guid;
104
+ participantID: Guid;
105
+ participantIdentifier: string;
106
+ identifier: string;
107
+ contentVersion?: number;
108
+ sentDate: string;
109
+ statusCode: NotificationStatusCode;
110
+ type: NotificationType;
111
+ recipients: string[];
112
+ content?: {
113
+ body?: string;
114
+ title?: string;
115
+ subject?: string;
116
+ };
117
+ }
118
+ export interface SurveyTaskQueryParameters extends QueryParameters {
119
+ status?: SurveyTaskStatus;
120
+ surveyID?: Guid;
121
+ surveyName?: string | string[];
122
+ linkIdentifier?: string;
123
+ sortOrder?: SortOrder;
124
+ }
125
+ export interface SurveyTasksPage {
126
+ notifications: SurveyTask[];
127
+ nextPageID?: Guid;
128
+ }
129
+ export interface SurveyTask {
130
+ id: Guid;
131
+ participantID: Guid;
132
+ participantIdentifier: string;
133
+ linkIdentifier: string;
134
+ surveyID: Guid;
135
+ surveyName?: string;
136
+ surveyDisplayName: string;
137
+ surveyDescription: string;
138
+ startDate?: string;
139
+ endDate?: string;
140
+ status: SurveyTaskStatus;
141
+ hasSavedProgress: boolean;
142
+ dueDate: string;
143
+ insertedDate: string;
144
+ modifiedDate: string;
145
+ }
146
+ export interface CustomEventInfo {
147
+ eventType: string;
148
+ properties: {
149
+ [key: string]: object;
150
+ };
151
+ }
152
+ export interface DeviceDataPointsPage {
153
+ deviceDataPoints: DeviceDataPoint[];
154
+ nextPageID?: Guid;
155
+ }
156
+ export interface PersistableDeviceDataPoint {
157
+ participantID?: Guid;
158
+ participantIdentifier: string;
159
+ identifier: string;
160
+ type: string;
161
+ value: string;
162
+ units?: string;
163
+ properties?: {
164
+ [key: string]: any;
165
+ };
166
+ source?: {
167
+ identifier: string;
168
+ properties?: {
169
+ [key: string]: any;
170
+ };
171
+ };
172
+ startDate?: Date;
173
+ observationDate?: Date;
174
+ }
175
+ export interface DeviceDataPoint extends PersistableDeviceDataPoint {
176
+ id: Guid;
177
+ namespace: DeviceDataNamespace;
178
+ limit?: number;
179
+ deviceDataContextID: string;
180
+ insertedDate: string;
181
+ modifiedDate: string;
182
+ }
183
+ export interface DeviceDataPointQuery extends QueryParameters {
184
+ namespace: DeviceDataNamespace;
185
+ type?: string | string[];
186
+ observedBefore?: string;
187
+ observedAfter?: string;
188
+ modifiedBefore?: string;
189
+ modifiedAfter?: string;
190
+ }
191
+ export interface SurveyAnswersQuery extends QueryParameters {
192
+ surveyResultID?: string;
193
+ surveyID?: string;
194
+ surveyName?: string | string[];
195
+ after?: string;
196
+ before?: string;
197
+ stepIdentifier?: string | string[];
198
+ resultIdentifier?: string | string[];
199
+ answer?: string | string[];
200
+ insertedAfter?: string;
201
+ insertedBefore?: string;
202
+ }
203
+ export interface SurveyAnswersPage {
204
+ surveyAnswers: SurveyAnswer[];
205
+ nextPageID?: Guid;
206
+ }
207
+ export interface SurveyAnswer {
208
+ id: Guid;
209
+ participantID: Guid;
210
+ surveyResultID: Guid;
211
+ surveyID: Guid;
212
+ surveyVersion: number;
213
+ taskID?: Guid;
214
+ surveyName: string;
215
+ surveyDisplayName: string;
216
+ date: string;
217
+ stepIdentifier: string;
218
+ resultIdentifier: string;
219
+ answers: string[];
220
+ insertedDate: string;
221
+ }
222
+ export interface EventData {
223
+ type: string;
224
+ messageID?: number;
225
+ }
226
+ export interface Token {
227
+ expires_in: number;
228
+ access_token: string;
229
+ token_type: string;
230
+ }
231
+ export interface OpenApplicationOptions {
232
+ modal: boolean;
233
+ }
234
+ export interface ShowDashboardOptions {
235
+ modal: boolean;
236
+ title?: string;
237
+ }
238
+ export interface ShowWebVisualizationOptions {
239
+ modal: boolean;
240
+ title?: string;
241
+ }
242
+ export interface ShowWebVisualizationPdfOptions {
243
+ landscape: boolean;
244
+ htmlViewerZoom: number;
245
+ }
246
+ export interface DataCollectionSettings {
247
+ fitbitEnabled: boolean;
248
+ ehrEnabled: boolean;
249
+ airQualityEnabled: boolean;
250
+ weatherEnabled: boolean;
251
+ queryableDeviceDataTypes: QueryableDeviceDataType[];
252
+ sensorDataCollectionEndDate: string;
253
+ }
254
+ export interface QueryableDeviceDataType {
255
+ namespace: DeviceDataNamespace;
256
+ type: string;
257
+ }