@careevolution/mydatahelps-js 3.33.0 → 3.36.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.
- package/MyDataHelps.js +9 -3
- package/MyDataHelps.min.js +1 -1
- package/MyDataHelps.min.js.map +1 -1
- package/package.json +1 -1
- package/types.d.ts +3 -3
package/MyDataHelps.js
CHANGED
|
@@ -303,7 +303,13 @@ class MyDataHelps {
|
|
|
303
303
|
}
|
|
304
304
|
}
|
|
305
305
|
setActionResult(data) {
|
|
306
|
-
this.messageHandlers
|
|
306
|
+
if (Object.prototype.hasOwnProperty.call(this.messageHandlers, data.messageID) &&
|
|
307
|
+
typeof this.messageHandlers[data.messageID] === 'function') {
|
|
308
|
+
this.messageHandlers[data.messageID](data);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
console.error(`Invalid messageID: ${data.messageID}`);
|
|
312
|
+
}
|
|
307
313
|
}
|
|
308
314
|
// Participant Info
|
|
309
315
|
getParticipantInfo() {
|
|
@@ -1564,8 +1570,8 @@ class MyDataHelps {
|
|
|
1564
1570
|
}
|
|
1565
1571
|
static escapeParam(param) {
|
|
1566
1572
|
return String(param)
|
|
1567
|
-
.
|
|
1568
|
-
.
|
|
1573
|
+
.replaceAll("\\", "\\\\")
|
|
1574
|
+
.replaceAll(",", "\\,");
|
|
1569
1575
|
}
|
|
1570
1576
|
static reduceArrayAndEscape(param) {
|
|
1571
1577
|
if (Array.isArray(param)) {
|
package/MyDataHelps.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function e(e,t,n,s){return new(n||(n=Promise))((function(t,a){function r(e){try{i(s.next(e))}catch(e){a(e)}}function o(e){try{i(s.throw(e))}catch(e){a(e)}}function i(e){var s;e.done?t(e.value):(s=e.value,s instanceof n?s:new n((function(e){e(s)}))).then(r,o)}i((s=s.apply(e,[])).next())}))}class t{startSurvey(e){if(this.isStandaloneMode())this.startDelegatedSurvey(`${this.baseUrl}/survey?surveyName=${encodeURIComponent(e)}`);else if(window.webkit.messageHandlers.StartParticipantSurvey){let t=this.nextMessageID();window.webkit.messageHandlers.StartParticipantSurvey.postMessage({messageID:t,surveyName:e})}}completeStep(e){if(null==e&&(e=""),"string"!=typeof e&&(e=JSON.stringify(e)),window.webkit.messageHandlers.ResearchKit)window.webkit.messageHandlers.ResearchKit.postMessage(e);else if(window.webkit.messageHandlers.CompleteStep){let t=this.nextMessageID();window.webkit.messageHandlers.CompleteStep.postMessage({messageID:t,answer:e})}}querySurveyAnswers(e){(e=Object.assign({},e)).hasOwnProperty("surveyName")&&(e.surveyName=t.reduceArrayAndEscape(e.surveyName)),e.hasOwnProperty("stepIdentifier")&&(e.stepIdentifier=t.reduceArrayAndEscape(e.stepIdentifier)),e.hasOwnProperty("resultIdentifier")&&(e.resultIdentifier=t.reduceArrayAndEscape(e.resultIdentifier)),e.hasOwnProperty("answer")&&(e.answer=t.reduceArrayAndEscape(e.answer)),e.hasOwnProperty("before")&&(e.before=t.convertDateToIsoString(e.before)),e.hasOwnProperty("after")&&(e.after=t.convertDateToIsoString(e.after));const n="surveyanswers?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}deleteSurveyResult(e){const n="surveyresults/"+encodeURIComponent(e),s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}querySurveyTasks(e){(e=Object.assign({},e)).hasOwnProperty("status")&&(e.status=t.reduceArrayAndEscape(e.status)),e.hasOwnProperty("surveyName")&&(e.surveyName=t.reduceArrayAndEscape(e.surveyName));const n="surveytasks?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryInboxItems(e){(e=((e,t)=>{for(const n of Object.keys(t)){const s=t[n];void 0!==s&&(e[n]=s)}return e})({},e)).hasOwnProperty("type")&&(e.type=t.reduceArrayAndEscape(e.type)),e.hasOwnProperty("status")&&(e.status=t.reduceArrayAndEscape(e.status));const n="inbox?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getInboxItem(e){const n=`inbox/${e}`,s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}updateInboxItem(e,n){const s=`inbox/${e}/${n}`,a=this;return this.connect().then((function(){return a.makeRequest(s,"PUT",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}startEmbeddedSurvey(e,t,n){n||(n=this.getCurrentLanguage());let s=this.baseUrl+"mydatahelps/"+e+"/surveylink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}openExternalUrl(e){window.webkit.messageHandlers.OpenExternalLink&&window.webkit.messageHandlers.OpenExternalLink.postMessage(e)}openEmbeddedUrl(e){window.webkit.messageHandlers.OpenEmbeddedLink&&window.webkit.messageHandlers.OpenEmbeddedLink.postMessage(e)}showTab(e){window.webkit.messageHandlers.ShowTab&&window.webkit.messageHandlers.ShowTab.postMessage(e)}openApplication(e,t){if(window.webkit.messageHandlers.OpenExternalApplication){let n=this.nextMessageID();window.webkit.messageHandlers.OpenExternalApplication.postMessage({messageID:n,url:e,modal:!(!t||!t.modal)})}}dismiss(){window.webkit.messageHandlers.Dismiss&&window.webkit.messageHandlers.Dismiss.postMessage({})}back(){window.webkit.messageHandlers.PopNavigation&&window.webkit.messageHandlers.PopNavigation.postMessage({})}showDashboard(e,t){window.webkit.messageHandlers.ShowParticipantDashboard&&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&&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&&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 e=this;return this.connect().then((function(){return e.makeRequest("participant","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}persistParticipantInfo(t,n){const s=this;return this.connect().then((function(){return s.makeRequest("participant","PUT",{demographics:t,customFields:n})})).then((function(t){return e(this,0,void 0,(function*(){if(!t.ok)throw(yield t.json()).message;return t.json()}))})).catch((function(e){console.log("Unable to persist participant: "+e)}))}getProjectInfo(){const e=this;return this.connect().then((function(){return e.makeRequest("project","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getDeviceDataPoint(e){const n="devicedata/"+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}deleteDeviceDataPoint(e){const n="devicedata/"+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}queryDeviceData(e){(e=Object.assign({},e)).hasOwnProperty("type")&&(e.type=t.reduceArrayAndEscape(e.type)),e.hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter));const n="devicedata?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}persistDeviceData(e){const n=this;return this.connect().then((function(){return n.makeRequest("devicedata","POST",e)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}queryDeviceDataV2(e){(e=Object.assign({},e)).hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter)),e.hasOwnProperty("insertedBefore")&&(e.insertedBefore=t.convertDateToIsoString(e.insertedBefore)),e.hasOwnProperty("insertedAfter")&&(e.insertedAfter=t.convertDateToIsoString(e.insertedAfter)),e.hasOwnProperty("modifiedBefore")&&(e.modifiedBefore=t.convertDateToIsoString(e.modifiedBefore)),e.hasOwnProperty("modifiedAfter")&&(e.modifiedAfter=t.convertDateToIsoString(e.modifiedAfter)),t.flattenPropertyShallow(e,"dataSource"),t.flattenPropertyShallow(e,"properties");const n="devicedata?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryDeviceDataV2Aggregate(e){(e=Object.assign({},e)).hasOwnProperty("aggregateFunctions")&&(e.aggregateFunctions=t.reduceArrayAndEscape(e.aggregateFunctions)),e.hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter)),e.hasOwnProperty("insertedBefore")&&(e.insertedBefore=t.convertDateToIsoString(e.insertedBefore)),e.hasOwnProperty("insertedAfter")&&(e.insertedAfter=t.convertDateToIsoString(e.insertedAfter)),e.hasOwnProperty("modifiedBefore")&&(e.modifiedBefore=t.convertDateToIsoString(e.modifiedBefore)),e.hasOwnProperty("modifiedAfter")&&(e.modifiedAfter=t.convertDateToIsoString(e.modifiedAfter)),t.flattenPropertyShallow(e,"dataSource"),t.flattenPropertyShallow(e,"properties");const n="devicedata/aggregate?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryDeviceDataV2DailySleep(e){(e=Object.assign({},e)).hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter)),e.hasOwnProperty("insertedBefore")&&(e.insertedBefore=t.convertDateToIsoString(e.insertedBefore)),e.hasOwnProperty("insertedAfter")&&(e.insertedAfter=t.convertDateToIsoString(e.insertedAfter)),e.hasOwnProperty("modifiedBefore")&&(e.modifiedBefore=t.convertDateToIsoString(e.modifiedBefore)),e.hasOwnProperty("modifiedAfter")&&(e.modifiedAfter=t.convertDateToIsoString(e.modifiedAfter)),t.flattenPropertyShallow(e,"dataSource"),t.flattenPropertyShallow(e,"properties");const n="devicedata/aggregate/dailysleep?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getDeviceDataV2AllDataTypes(e){const n={};void 0!==e&&(n.enabled=e.toString());const s=`devicedata/allDataTypes?${new URLSearchParams(n).toString()}`,a=this;return this.connect().then((function(){return a.makeRequest(s,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getExternalAccountProviders(e,n,s,a){let r={};e&&(r.search=e),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(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}connectExternalAccount(e,s){return new Promise(((a,r)=>{const o=n.nextMessageID();if(n.messageHandlers[o]=function(e){e&&e.success?a():r(e.errorMessage)},this.standaloneMode){let n=(null==s?void 0:s.standaloneModeFinalRedirectPath)||window.location.href;const a=this;let i;if(null==s?void 0:s.openNewWindow){n=`${n.split("?")[0]}?connectExternalAccount=true&messageID=${o}&success=%SUCCESSVALUE%`;let e=null;if((null==s?void 0:s.width)&&(null==s?void 0:s.height)){const t=null==s?void 0:s.width,n=null==s?void 0:s.height;e="width="+t+",height="+n+",top="+(window.outerHeight/2+window.screenY-n/2)+",left="+(window.outerWidth/2+window.screenX-t/2)}i=window.open(`${this.baseUrl}home/loading`,"providerauth",e)}const d=new URLSearchParams({finalRedirectPath:n}).toString(),c="externalaccountproviders/"+e+"/connect?"+d;this.connect().then((function(){return a.makeRequest(c,"POST",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.text()})).then((function(e){i?i.location=e.replace(/['"]+/g,""):window.top.location=e.replace(/['"]+/g,"")})).catch((function(e){r(e)}))}else window.webkit.messageHandlers.ConnectExternalAccount&&window.webkit.messageHandlers.ConnectExternalAccount.postMessage(Object.assign({externalAccountProviderID:e,messageID:o},s))}))}getExternalAccounts(){const e=this;return this.connect().then((function(){return e.makeRequest("externalaccounts","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}refreshExternalAccount(e){const n="externalaccounts/refresh/"+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"POST",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}deleteExternalAccount(e){const n="externalaccounts/delete/"+encodeURIComponent(e),s=this;return this.isStandaloneMode()?this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})):new Promise((function(t,n){if(window.webkit.messageHandlers.DeleteProviderAccount){const a=s.nextMessageID();s.messageHandlers[a]=function(e){e.success?t(e):n(e)},window.webkit.messageHandlers.DeleteProviderAccount.postMessage({messageID:a,accountID:e})}else n()}))}queryNotifications(e){(e=Object.assign({},e)).hasOwnProperty("sentBefore")&&(e.sentBefore=t.convertDateToIsoString(e.sentBefore)),e.hasOwnProperty("sentAfter")&&(e.sentAfter=t.convertDateToIsoString(e.sentAfter));const n="notifications?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryFitbitDailySummaries(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="fitbit/dailySummaries?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryFitbitSleepLogs(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="fitbit/sleepLogs?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryAppleHealthActivitySummaries(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="appleHealth/activitySummaries?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryAppleHealthWorkouts(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="appleHealth/workouts?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}uploadFile(e,n,s){if(e.size>209715200)throw new Error("File size exceeds the maximum allowed size of 200MB.");const a=this,r="files?category="+n+"&fileName="+encodeURIComponent(null!=s?s:e.name);return this.connect().then((function(){return a.makeRequest(r,"POST",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()})).then((function(t){return fetch(t.preSignedUrl,{method:"PUT",body:e,headers:{"Content-Type":e.type,"x-amz-server-side-encryption":"AES256"}})})).then((function(e){return t.validateResponse(e)})).then((function(){}))}queryFiles(e){const n="files?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getFileDownloadUrl(e){if(!e)throw new Error("Please specify the key of the file to download.");const n="files/download?key="+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}deleteFile(e){if(!e)throw new Error("Please specify the key of the file to delete.");const n="files?key="+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}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})}))};if(this.token&&Date.now()<this.tokenExpires)return Promise.resolve();if(this.isStandaloneMode()&&!this.isEmbeddedMode()){let e=this.token?"access token is expired or invalid":"access token must be explicitly provided using the setParticipantAccess method";return console.log(e),Promise.reject(e)}return this.refreshTokenPromise||t(),this.refreshTokenPromise}setParticipantAccessToken(e,t){this.enableStandaloneMode(),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))}isStandaloneMode(){return this.standaloneMode}isEmbeddedMode(){return this.embeddedMode}enableStandaloneMode(e=!1,t){this.standaloneMode=!0,this.embeddedMode=e,t&&(this.baseUrl=t),window.webkit&&(window.webkit.messageHandlers=e?{GetDelegatedAccessToken:window.webkit.messageHandlers.GetDelegatedAccessToken,OpenExternalLink:window.webkit.messageHandlers.OpenExternalLink,OpenEmbeddedLink:window.webkit.messageHandlers.OpenEmbeddedLink,OpenExternalApplication:window.webkit.messageHandlers.OpenExternalApplication,PopNavigation:window.webkit.messageHandlers.PopNavigation,Dismiss:window.webkit.messageHandlers.Dismiss}:{})}setStatusBarStyle(e){window.webkit.messageHandlers.SetStatusBarStyle&&window.webkit.messageHandlers.SetStatusBarStyle.postMessage({style:e})}getDeviceInfo(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.GetDeviceInfo){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetDeviceInfo.postMessage({messageID:n})}else n()}))}setSupportedLanguages(e){this.supportedLanguages.length=0;for(let t=0;t<e.length;t++)this.supportedLanguages.push(e[t].replace("_","-"))}getStepConfiguration(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.GetStepConfiguration){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetStepConfiguration.postMessage({messageID:n})}else n()}))}getSurveyContext(){let e=this;return new Promise((function(t,n){e.isStandaloneMode()&&t(null),e.getDeviceInfo().then((function(s){if("Web"!==s.platform)t({surveyMode:"Survey"});else if(window.webkit.messageHandlers.GetSurveyContext){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetSurveyContext.postMessage({messageID:n})}else n()})).catch((function(e){n()}))}))}getCurrentSurveyAnswers(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.GetCurrentSurveyAnswers){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetCurrentSurveyAnswers.postMessage({messageID:n})}else n()}))}setCurrentLanguage(e){if(e){let t=this.getSupportedLanguage(e);t?this.language=t:console.warn(`language ${e} not supported`)}else this.language=e}getCurrentLanguage(){let e,t=new URLSearchParams(window.location.search);if(t.has("lang")){if(e=this.getSupportedLanguage(t.get("lang")),e)return e;console.warn(`language ${t.get("lang")} not supported`)}return this.language||navigator.language}showGoogleFitSettings(){window.webkit.messageHandlers.ShowGoogleFitSettings&&window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({})}showHealthConnectSettings(){window.webkit.messageHandlers.HealthConnectSettings&&window.webkit.messageHandlers.HealthConnectSettings.postMessage({})}showHealthConnectPrompt(){window.webkit.messageHandlers.HealthConnectPrompt&&window.webkit.messageHandlers.HealthConnectPrompt.postMessage({})}getHealthConnectStatus(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.HealthConnectStatus){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.HealthConnectStatus.postMessage({messageID:n})}else n()}))}showHealthConnectPhrPrompt(){window.webkit.messageHandlers.HealthConnectPhrPrompt&&window.webkit.messageHandlers.HealthConnectPhrPrompt.postMessage({})}getHealthConnectPhrStatus(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.HealthConnectPhrStatus){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.HealthConnectPhrStatus.postMessage({messageID:n})}else n()}))}requestReview(e){window.webkit.messageHandlers.RequestReview&&window.webkit.messageHandlers.RequestReview.postMessage({cooldownDays:e})}trackCustomEvent(e){const n=this;return this.connect().then((function(){return n.makeRequest("customevents","POST",e)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}getDataCollectionSettings(){const e=this;return this.connect().then((function(){return e.makeRequest("datacollectionsettings","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getDataAvailability(){const e=this;return this.connect().then((function(){return e.makeRequest("dataavailability","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}invokeCustomApi(e,n,s,a){if(e.includes("?"))throw new Error('Cannot include query parameters directly in the "customApi" string. Provide as an argument for "queryParameters" instead.');let r="custom/"+e;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(e){return t.validateResponse(e)})).then((function(e){return a?e.json():void 0}))}constructor(){if(this.baseUrl="https://mydatahelps.org/",this.acceptableParentDomains=["localhost","careevolution.com","internal","b3-deploys.com","mydatahelps.org","platform.joinallofus.org","careevolution.dev","ce.dev","mydatahelps.dev"],this.accessTokenRenewalBufferSeconds=120,this.unsupportedActions=["SetHeight","ResearchKit"],this.supportedEvents=["surveyDidFinish","applicationDidBecomeVisible","externalAccountSyncComplete","tokenWillExpire","healthConnectSyncComplete","healthConnectPhrSyncComplete"],this.supportedLanguages=[],this.currentMessageID=1,this.messageHandlers=[],this.registeredEventHandlers={},this.refreshTokenPromise=null,this.standaloneMode=!1,this.embeddedMode=!1,this.handleConnectExternalAccountResponse())return;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.acceptableParentDomains.length;e++)if(n.hostname===t.acceptableParentDomains[e]||n.hostname.endsWith("."+t.acceptableParentDomains[e]))return!0;return!1}s(n)||console.log("Detected unsupported parent origin domain."),e=window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.ResearchKit?{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},n)},OpenExternalLink:function(e){window.parent.postMessage({name:"OpenExternalUrl",url:e},n)},OpenEmbeddedLink:function(e){window.parent.postMessage({name:"OpenEmbeddedUrl",url:e},n)},GetCurrentSurveyAnswers:function(e){window.parent.postMessage({name:"GetCurrentSurveyAnswers",messageID:e.messageID},n)},GetStepConfiguration:function(e){window.parent.postMessage({name:"GetStepConfiguration",messageID:e.messageID},n)},GetSurveyContext:function(e){window.parent.postMessage({name:"GetSurveyContext",messageID:e.messageID},n)},CompleteStep:function(e){window.parent.postMessage({name:"CompleteStep",messageID:e.messageID,answer:e.answer},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,messageID:e.messageID,openNewWindow:e.openNewWindow,width:e.width,height:e.height},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)},GetCurrentSurveyAnswers:function(e){window.parent.postMessage({name:"GetCurrentSurveyAnswers",messageID:e.messageID},n)},GetStepConfiguration:function(e){window.parent.postMessage({name:"GetStepConfiguration",messageID:e.messageID},n)},CompleteStep:function(e){window.parent.postMessage({name:"CompleteStep",messageID:e.messageID,answer:e.answer},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:{}}),function(e){for(let t in e)if(!window.webkit.messageHandlers[t])try{window.webkit.messageHandlers[t]={postMessage:e[t]}}catch(e){return void console.log("Unable to add missing actions on this platform: "+e)}}(e),window.addEventListener("message",(function(e){if(!function(e){return!(!t.isStandaloneMode()||e.origin!==window.location.origin)||("*"===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),this.hasEmbeddedModeUrlParameter()&&t.enableStandaloneMode(!0)}nextMessageID(){return this.currentMessageID++}makeUrl(e,t){if(!this.baseUrl)throw console.error("Cannot use makeUrl without MyDataHelps.baseUrl."),"Cannot use makeUrl without MyDataHelps.baseUrl.";return this.baseUrl+"api/"+t+"/delegated/"+e}makeRequest(e,t,n,s="v1"){if(!this.token||!this.token.access_token)throw"No access_token available for request authorization.";let a=this.makeUrl(e,s),r=new Headers;r.append("Authorization","Bearer "+this.token.access_token),r.append("Accept","application/json, text/javascript, */*; q=0.01"),r.append("Accept-Language",this.getCurrentLanguage()),n&&r.append("Content-Type","application/json");let o={method:t,headers:r};return n&&(o.body=JSON.stringify(n)),fetch(a,o)}getSupportedLanguage(e){return e=e.replace("_","-"),0===this.supportedLanguages.length||this.supportedLanguages.find((t=>t===e))||e.indexOf("-")>0&&(e=e.substring(0,e.indexOf("-")),this.supportedLanguages.find((t=>t===e)))?e:void 0}static validateResponse(e){if(!e.ok)throw e.statusText;return e}static escapeParam(e){return String(e).replace("\\","\\\\").replace(",","\\,")}static reduceArrayAndEscape(e){if(Array.isArray(e)){return e.map((function(e){return t.escapeParam(e)})).join(",")}return this.escapeParam(e)}static convertDateToIsoString(e){let t=new Date(e);if(isNaN(t.getTime()))throw"Cannot interpret parameter as Date";return t.toISOString()}static flattenPropertyShallow(e,n){if(void 0!==e[n]&&null!==e[n]){for(var s in e[n])e[n].hasOwnProperty(s)&&(e[`${n}.${s}`]=t.escapeParam(e[n][s]));delete e[n]}}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.baseUrl).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"}))}startDelegatedSurvey(e){let t="mydatahelps-survey-modal",n=this;if(document.getElementById(t))return;window.addEventListener("message",(function e(s){if(s.origin!==new URL(n.baseUrl).origin)return;let a=document.getElementById("mydatahelps-survey-frame").contentWindow;s.source===a&&("GetDelegatedAccessToken"===s.data.name?n.getParticipantInfo().then((e=>{a.postMessage({name:"DelegatedAccessTokenResponse",accessToken:n.token,baseUrl:n.baseUrl,participantID:e.participantID},"*")})):"SurveyWindowInitialized"===s.data.name?document.getElementById(t).className+=" loaded":"SurveyFinished"===s.data.name&&(document.getElementById(t).remove(),document.body.className=document.body.className.replace("no-scroll",""),window.removeEventListener("message",e,!0),s.data.type="surveyDidFinish",n.triggerEvent(s.data)))}),!0);let s=document.createElement("div");s.className="mydatahelps-survey-modal",s.id=t,s.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}&lang=${n.getCurrentLanguage()}'></iframe></div>`,document.body.append(s),document.body.className+=" no-scroll"}handleConnectExternalAccountResponse(){const e=new URLSearchParams(window.location.search);if(window.opener&&e.get("connectExternalAccount")&&e.get("messageID")&&e.get("success"))return window.opener.postMessage({name:"ConnectExternalAccountResponse",messageID:parseInt(e.get("messageID")),success:"true"===e.get("success")},window.location.origin),window.close(),!0}hasEmbeddedModeUrlParameter(){const e=new URLSearchParams(window.location.search);if(e.has("_e")&&"false"!==e.get("_e"))return!0}}const n=new t;window.MyDataHelps=n,window.RKStudioClient={},window.RKStudioClient.setActionResult=function(e){window.MyDataHelps.setActionResult(e)};export{t as MyDataHelps,n as default};
|
|
1
|
+
function e(e,t,n,s){return new(n||(n=Promise))((function(t,a){function r(e){try{i(s.next(e))}catch(e){a(e)}}function o(e){try{i(s.throw(e))}catch(e){a(e)}}function i(e){var s;e.done?t(e.value):(s=e.value,s instanceof n?s:new n((function(e){e(s)}))).then(r,o)}i((s=s.apply(e,[])).next())}))}class t{startSurvey(e){if(this.isStandaloneMode())this.startDelegatedSurvey(`${this.baseUrl}/survey?surveyName=${encodeURIComponent(e)}`);else if(window.webkit.messageHandlers.StartParticipantSurvey){let t=this.nextMessageID();window.webkit.messageHandlers.StartParticipantSurvey.postMessage({messageID:t,surveyName:e})}}completeStep(e){if(null==e&&(e=""),"string"!=typeof e&&(e=JSON.stringify(e)),window.webkit.messageHandlers.ResearchKit)window.webkit.messageHandlers.ResearchKit.postMessage(e);else if(window.webkit.messageHandlers.CompleteStep){let t=this.nextMessageID();window.webkit.messageHandlers.CompleteStep.postMessage({messageID:t,answer:e})}}querySurveyAnswers(e){(e=Object.assign({},e)).hasOwnProperty("surveyName")&&(e.surveyName=t.reduceArrayAndEscape(e.surveyName)),e.hasOwnProperty("stepIdentifier")&&(e.stepIdentifier=t.reduceArrayAndEscape(e.stepIdentifier)),e.hasOwnProperty("resultIdentifier")&&(e.resultIdentifier=t.reduceArrayAndEscape(e.resultIdentifier)),e.hasOwnProperty("answer")&&(e.answer=t.reduceArrayAndEscape(e.answer)),e.hasOwnProperty("before")&&(e.before=t.convertDateToIsoString(e.before)),e.hasOwnProperty("after")&&(e.after=t.convertDateToIsoString(e.after));const n="surveyanswers?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}deleteSurveyResult(e){const n="surveyresults/"+encodeURIComponent(e),s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}querySurveyTasks(e){(e=Object.assign({},e)).hasOwnProperty("status")&&(e.status=t.reduceArrayAndEscape(e.status)),e.hasOwnProperty("surveyName")&&(e.surveyName=t.reduceArrayAndEscape(e.surveyName));const n="surveytasks?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryInboxItems(e){(e=((e,t)=>{for(const n of Object.keys(t)){const s=t[n];void 0!==s&&(e[n]=s)}return e})({},e)).hasOwnProperty("type")&&(e.type=t.reduceArrayAndEscape(e.type)),e.hasOwnProperty("status")&&(e.status=t.reduceArrayAndEscape(e.status));const n="inbox?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getInboxItem(e){const n=`inbox/${e}`,s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}updateInboxItem(e,n){const s=`inbox/${e}/${n}`,a=this;return this.connect().then((function(){return a.makeRequest(s,"PUT",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}startEmbeddedSurvey(e,t,n){n||(n=this.getCurrentLanguage());let s=this.baseUrl+"mydatahelps/"+e+"/surveylink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}openExternalUrl(e){window.webkit.messageHandlers.OpenExternalLink&&window.webkit.messageHandlers.OpenExternalLink.postMessage(e)}openEmbeddedUrl(e){window.webkit.messageHandlers.OpenEmbeddedLink&&window.webkit.messageHandlers.OpenEmbeddedLink.postMessage(e)}showTab(e){window.webkit.messageHandlers.ShowTab&&window.webkit.messageHandlers.ShowTab.postMessage(e)}openApplication(e,t){if(window.webkit.messageHandlers.OpenExternalApplication){let n=this.nextMessageID();window.webkit.messageHandlers.OpenExternalApplication.postMessage({messageID:n,url:e,modal:!(!t||!t.modal)})}}dismiss(){window.webkit.messageHandlers.Dismiss&&window.webkit.messageHandlers.Dismiss.postMessage({})}back(){window.webkit.messageHandlers.PopNavigation&&window.webkit.messageHandlers.PopNavigation.postMessage({})}showDashboard(e,t){window.webkit.messageHandlers.ShowParticipantDashboard&&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&&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&&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){Object.prototype.hasOwnProperty.call(this.messageHandlers,e.messageID)&&"function"==typeof this.messageHandlers[e.messageID]?this.messageHandlers[e.messageID](e):console.error(`Invalid messageID: ${e.messageID}`)}getParticipantInfo(){const e=this;return this.connect().then((function(){return e.makeRequest("participant","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}persistParticipantInfo(t,n){const s=this;return this.connect().then((function(){return s.makeRequest("participant","PUT",{demographics:t,customFields:n})})).then((function(t){return e(this,0,void 0,(function*(){if(!t.ok)throw(yield t.json()).message;return t.json()}))})).catch((function(e){console.log("Unable to persist participant: "+e)}))}getProjectInfo(){const e=this;return this.connect().then((function(){return e.makeRequest("project","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getDeviceDataPoint(e){const n="devicedata/"+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}deleteDeviceDataPoint(e){const n="devicedata/"+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}queryDeviceData(e){(e=Object.assign({},e)).hasOwnProperty("type")&&(e.type=t.reduceArrayAndEscape(e.type)),e.hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter));const n="devicedata?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}persistDeviceData(e){const n=this;return this.connect().then((function(){return n.makeRequest("devicedata","POST",e)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}queryDeviceDataV2(e){(e=Object.assign({},e)).hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter)),e.hasOwnProperty("insertedBefore")&&(e.insertedBefore=t.convertDateToIsoString(e.insertedBefore)),e.hasOwnProperty("insertedAfter")&&(e.insertedAfter=t.convertDateToIsoString(e.insertedAfter)),e.hasOwnProperty("modifiedBefore")&&(e.modifiedBefore=t.convertDateToIsoString(e.modifiedBefore)),e.hasOwnProperty("modifiedAfter")&&(e.modifiedAfter=t.convertDateToIsoString(e.modifiedAfter)),t.flattenPropertyShallow(e,"dataSource"),t.flattenPropertyShallow(e,"properties");const n="devicedata?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryDeviceDataV2Aggregate(e){(e=Object.assign({},e)).hasOwnProperty("aggregateFunctions")&&(e.aggregateFunctions=t.reduceArrayAndEscape(e.aggregateFunctions)),e.hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter)),e.hasOwnProperty("insertedBefore")&&(e.insertedBefore=t.convertDateToIsoString(e.insertedBefore)),e.hasOwnProperty("insertedAfter")&&(e.insertedAfter=t.convertDateToIsoString(e.insertedAfter)),e.hasOwnProperty("modifiedBefore")&&(e.modifiedBefore=t.convertDateToIsoString(e.modifiedBefore)),e.hasOwnProperty("modifiedAfter")&&(e.modifiedAfter=t.convertDateToIsoString(e.modifiedAfter)),t.flattenPropertyShallow(e,"dataSource"),t.flattenPropertyShallow(e,"properties");const n="devicedata/aggregate?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryDeviceDataV2DailySleep(e){(e=Object.assign({},e)).hasOwnProperty("observedBefore")&&(e.observedBefore=t.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=t.convertDateToIsoString(e.observedAfter)),e.hasOwnProperty("insertedBefore")&&(e.insertedBefore=t.convertDateToIsoString(e.insertedBefore)),e.hasOwnProperty("insertedAfter")&&(e.insertedAfter=t.convertDateToIsoString(e.insertedAfter)),e.hasOwnProperty("modifiedBefore")&&(e.modifiedBefore=t.convertDateToIsoString(e.modifiedBefore)),e.hasOwnProperty("modifiedAfter")&&(e.modifiedAfter=t.convertDateToIsoString(e.modifiedAfter)),t.flattenPropertyShallow(e,"dataSource"),t.flattenPropertyShallow(e,"properties");const n="devicedata/aggregate/dailysleep?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getDeviceDataV2AllDataTypes(e){const n={};void 0!==e&&(n.enabled=e.toString());const s=`devicedata/allDataTypes?${new URLSearchParams(n).toString()}`,a=this;return this.connect().then((function(){return a.makeRequest(s,"GET",null,"v2")})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getExternalAccountProviders(e,n,s,a){let r={};e&&(r.search=e),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(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}connectExternalAccount(e,s){return new Promise(((a,r)=>{const o=n.nextMessageID();if(n.messageHandlers[o]=function(e){e&&e.success?a():r(e.errorMessage)},this.standaloneMode){let n=(null==s?void 0:s.standaloneModeFinalRedirectPath)||window.location.href;const a=this;let i;if(null==s?void 0:s.openNewWindow){n=`${n.split("?")[0]}?connectExternalAccount=true&messageID=${o}&success=%SUCCESSVALUE%`;let e=null;if((null==s?void 0:s.width)&&(null==s?void 0:s.height)){const t=null==s?void 0:s.width,n=null==s?void 0:s.height;e="width="+t+",height="+n+",top="+(window.outerHeight/2+window.screenY-n/2)+",left="+(window.outerWidth/2+window.screenX-t/2)}i=window.open(`${this.baseUrl}home/loading`,"providerauth",e)}const d=new URLSearchParams({finalRedirectPath:n}).toString(),c="externalaccountproviders/"+e+"/connect?"+d;this.connect().then((function(){return a.makeRequest(c,"POST",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.text()})).then((function(e){i?i.location=e.replace(/['"]+/g,""):window.top.location=e.replace(/['"]+/g,"")})).catch((function(e){r(e)}))}else window.webkit.messageHandlers.ConnectExternalAccount&&window.webkit.messageHandlers.ConnectExternalAccount.postMessage(Object.assign({externalAccountProviderID:e,messageID:o},s))}))}getExternalAccounts(){const e=this;return this.connect().then((function(){return e.makeRequest("externalaccounts","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}refreshExternalAccount(e){const n="externalaccounts/refresh/"+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"POST",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}deleteExternalAccount(e){const n="externalaccounts/delete/"+encodeURIComponent(e),s=this;return this.isStandaloneMode()?this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})):new Promise((function(t,n){if(window.webkit.messageHandlers.DeleteProviderAccount){const a=s.nextMessageID();s.messageHandlers[a]=function(e){e.success?t(e):n(e)},window.webkit.messageHandlers.DeleteProviderAccount.postMessage({messageID:a,accountID:e})}else n()}))}queryNotifications(e){(e=Object.assign({},e)).hasOwnProperty("sentBefore")&&(e.sentBefore=t.convertDateToIsoString(e.sentBefore)),e.hasOwnProperty("sentAfter")&&(e.sentAfter=t.convertDateToIsoString(e.sentAfter));const n="notifications?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryFitbitDailySummaries(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="fitbit/dailySummaries?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryFitbitSleepLogs(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="fitbit/sleepLogs?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryAppleHealthActivitySummaries(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="appleHealth/activitySummaries?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}queryAppleHealthWorkouts(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=t.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=t.convertDateToIsoString(e.endDate));const n="appleHealth/workouts?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}uploadFile(e,n,s){if(e.size>209715200)throw new Error("File size exceeds the maximum allowed size of 200MB.");const a=this,r="files?category="+n+"&fileName="+encodeURIComponent(null!=s?s:e.name);return this.connect().then((function(){return a.makeRequest(r,"POST",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()})).then((function(t){return fetch(t.preSignedUrl,{method:"PUT",body:e,headers:{"Content-Type":e.type,"x-amz-server-side-encryption":"AES256"}})})).then((function(e){return t.validateResponse(e)})).then((function(){}))}queryFiles(e){const n="files?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getFileDownloadUrl(e){if(!e)throw new Error("Please specify the key of the file to download.");const n="files/download?key="+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}deleteFile(e){if(!e)throw new Error("Please specify the key of the file to delete.");const n="files?key="+e,s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}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})}))};if(this.token&&Date.now()<this.tokenExpires)return Promise.resolve();if(this.isStandaloneMode()&&!this.isEmbeddedMode()){let e=this.token?"access token is expired or invalid":"access token must be explicitly provided using the setParticipantAccess method";return console.log(e),Promise.reject(e)}return this.refreshTokenPromise||t(),this.refreshTokenPromise}setParticipantAccessToken(e,t){this.enableStandaloneMode(),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))}isStandaloneMode(){return this.standaloneMode}isEmbeddedMode(){return this.embeddedMode}enableStandaloneMode(e=!1,t){this.standaloneMode=!0,this.embeddedMode=e,t&&(this.baseUrl=t),window.webkit&&(window.webkit.messageHandlers=e?{GetDelegatedAccessToken:window.webkit.messageHandlers.GetDelegatedAccessToken,OpenExternalLink:window.webkit.messageHandlers.OpenExternalLink,OpenEmbeddedLink:window.webkit.messageHandlers.OpenEmbeddedLink,OpenExternalApplication:window.webkit.messageHandlers.OpenExternalApplication,PopNavigation:window.webkit.messageHandlers.PopNavigation,Dismiss:window.webkit.messageHandlers.Dismiss}:{})}setStatusBarStyle(e){window.webkit.messageHandlers.SetStatusBarStyle&&window.webkit.messageHandlers.SetStatusBarStyle.postMessage({style:e})}getDeviceInfo(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.GetDeviceInfo){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetDeviceInfo.postMessage({messageID:n})}else n()}))}setSupportedLanguages(e){this.supportedLanguages.length=0;for(let t=0;t<e.length;t++)this.supportedLanguages.push(e[t].replace("_","-"))}getStepConfiguration(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.GetStepConfiguration){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetStepConfiguration.postMessage({messageID:n})}else n()}))}getSurveyContext(){let e=this;return new Promise((function(t,n){e.isStandaloneMode()&&t(null),e.getDeviceInfo().then((function(s){if("Web"!==s.platform)t({surveyMode:"Survey"});else if(window.webkit.messageHandlers.GetSurveyContext){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetSurveyContext.postMessage({messageID:n})}else n()})).catch((function(e){n()}))}))}getCurrentSurveyAnswers(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.GetCurrentSurveyAnswers){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.GetCurrentSurveyAnswers.postMessage({messageID:n})}else n()}))}setCurrentLanguage(e){if(e){let t=this.getSupportedLanguage(e);t?this.language=t:console.warn(`language ${e} not supported`)}else this.language=e}getCurrentLanguage(){let e,t=new URLSearchParams(window.location.search);if(t.has("lang")){if(e=this.getSupportedLanguage(t.get("lang")),e)return e;console.warn(`language ${t.get("lang")} not supported`)}return this.language||navigator.language}showGoogleFitSettings(){window.webkit.messageHandlers.ShowGoogleFitSettings&&window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({})}showHealthConnectSettings(){window.webkit.messageHandlers.HealthConnectSettings&&window.webkit.messageHandlers.HealthConnectSettings.postMessage({})}showHealthConnectPrompt(){window.webkit.messageHandlers.HealthConnectPrompt&&window.webkit.messageHandlers.HealthConnectPrompt.postMessage({})}getHealthConnectStatus(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.HealthConnectStatus){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.HealthConnectStatus.postMessage({messageID:n})}else n()}))}showHealthConnectPhrPrompt(){window.webkit.messageHandlers.HealthConnectPhrPrompt&&window.webkit.messageHandlers.HealthConnectPhrPrompt.postMessage({})}getHealthConnectPhrStatus(){let e=this;return new Promise((function(t,n){if(e.isStandaloneMode())t(null);else if(window.webkit.messageHandlers.HealthConnectPhrStatus){let n=e.nextMessageID();e.messageHandlers[n]=function(e){t(e.data)},window.webkit.messageHandlers.HealthConnectPhrStatus.postMessage({messageID:n})}else n()}))}requestReview(e){window.webkit.messageHandlers.RequestReview&&window.webkit.messageHandlers.RequestReview.postMessage({cooldownDays:e})}trackCustomEvent(e){const n=this;return this.connect().then((function(){return n.makeRequest("customevents","POST",e)})).then((function(e){return t.validateResponse(e)})).then((function(){}))}getDataCollectionSettings(){const e=this;return this.connect().then((function(){return e.makeRequest("datacollectionsettings","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}getDataAvailability(){const e=this;return this.connect().then((function(){return e.makeRequest("dataavailability","GET",null)})).then((function(e){return t.validateResponse(e)})).then((function(e){return e.json()}))}invokeCustomApi(e,n,s,a){if(e.includes("?"))throw new Error('Cannot include query parameters directly in the "customApi" string. Provide as an argument for "queryParameters" instead.');let r="custom/"+e;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(e){return t.validateResponse(e)})).then((function(e){return a?e.json():void 0}))}constructor(){if(this.baseUrl="https://mydatahelps.org/",this.acceptableParentDomains=["localhost","careevolution.com","internal","b3-deploys.com","mydatahelps.org","platform.joinallofus.org","careevolution.dev","ce.dev","mydatahelps.dev"],this.accessTokenRenewalBufferSeconds=120,this.unsupportedActions=["SetHeight","ResearchKit"],this.supportedEvents=["surveyDidFinish","applicationDidBecomeVisible","externalAccountSyncComplete","tokenWillExpire","healthConnectSyncComplete","healthConnectPhrSyncComplete"],this.supportedLanguages=[],this.currentMessageID=1,this.messageHandlers=[],this.registeredEventHandlers={},this.refreshTokenPromise=null,this.standaloneMode=!1,this.embeddedMode=!1,this.handleConnectExternalAccountResponse())return;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.acceptableParentDomains.length;e++)if(n.hostname===t.acceptableParentDomains[e]||n.hostname.endsWith("."+t.acceptableParentDomains[e]))return!0;return!1}s(n)||console.log("Detected unsupported parent origin domain."),e=window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.ResearchKit?{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},n)},OpenExternalLink:function(e){window.parent.postMessage({name:"OpenExternalUrl",url:e},n)},OpenEmbeddedLink:function(e){window.parent.postMessage({name:"OpenEmbeddedUrl",url:e},n)},GetCurrentSurveyAnswers:function(e){window.parent.postMessage({name:"GetCurrentSurveyAnswers",messageID:e.messageID},n)},GetStepConfiguration:function(e){window.parent.postMessage({name:"GetStepConfiguration",messageID:e.messageID},n)},GetSurveyContext:function(e){window.parent.postMessage({name:"GetSurveyContext",messageID:e.messageID},n)},CompleteStep:function(e){window.parent.postMessage({name:"CompleteStep",messageID:e.messageID,answer:e.answer},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,messageID:e.messageID,openNewWindow:e.openNewWindow,width:e.width,height:e.height},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)},GetCurrentSurveyAnswers:function(e){window.parent.postMessage({name:"GetCurrentSurveyAnswers",messageID:e.messageID},n)},GetStepConfiguration:function(e){window.parent.postMessage({name:"GetStepConfiguration",messageID:e.messageID},n)},CompleteStep:function(e){window.parent.postMessage({name:"CompleteStep",messageID:e.messageID,answer:e.answer},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:{}}),function(e){for(let t in e)if(!window.webkit.messageHandlers[t])try{window.webkit.messageHandlers[t]={postMessage:e[t]}}catch(e){return void console.log("Unable to add missing actions on this platform: "+e)}}(e),window.addEventListener("message",(function(e){if(!function(e){return!(!t.isStandaloneMode()||e.origin!==window.location.origin)||("*"===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),this.hasEmbeddedModeUrlParameter()&&t.enableStandaloneMode(!0)}nextMessageID(){return this.currentMessageID++}makeUrl(e,t){if(!this.baseUrl)throw console.error("Cannot use makeUrl without MyDataHelps.baseUrl."),"Cannot use makeUrl without MyDataHelps.baseUrl.";return this.baseUrl+"api/"+t+"/delegated/"+e}makeRequest(e,t,n,s="v1"){if(!this.token||!this.token.access_token)throw"No access_token available for request authorization.";let a=this.makeUrl(e,s),r=new Headers;r.append("Authorization","Bearer "+this.token.access_token),r.append("Accept","application/json, text/javascript, */*; q=0.01"),r.append("Accept-Language",this.getCurrentLanguage()),n&&r.append("Content-Type","application/json");let o={method:t,headers:r};return n&&(o.body=JSON.stringify(n)),fetch(a,o)}getSupportedLanguage(e){return e=e.replace("_","-"),0===this.supportedLanguages.length||this.supportedLanguages.find((t=>t===e))||e.indexOf("-")>0&&(e=e.substring(0,e.indexOf("-")),this.supportedLanguages.find((t=>t===e)))?e:void 0}static validateResponse(e){if(!e.ok)throw e.statusText;return e}static escapeParam(e){return String(e).replaceAll("\\","\\\\").replaceAll(",","\\,")}static reduceArrayAndEscape(e){if(Array.isArray(e)){return e.map((function(e){return t.escapeParam(e)})).join(",")}return this.escapeParam(e)}static convertDateToIsoString(e){let t=new Date(e);if(isNaN(t.getTime()))throw"Cannot interpret parameter as Date";return t.toISOString()}static flattenPropertyShallow(e,n){if(void 0!==e[n]&&null!==e[n]){for(var s in e[n])e[n].hasOwnProperty(s)&&(e[`${n}.${s}`]=t.escapeParam(e[n][s]));delete e[n]}}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.baseUrl).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"}))}startDelegatedSurvey(e){let t="mydatahelps-survey-modal",n=this;if(document.getElementById(t))return;window.addEventListener("message",(function e(s){if(s.origin!==new URL(n.baseUrl).origin)return;let a=document.getElementById("mydatahelps-survey-frame").contentWindow;s.source===a&&("GetDelegatedAccessToken"===s.data.name?n.getParticipantInfo().then((e=>{a.postMessage({name:"DelegatedAccessTokenResponse",accessToken:n.token,baseUrl:n.baseUrl,participantID:e.participantID},"*")})):"SurveyWindowInitialized"===s.data.name?document.getElementById(t).className+=" loaded":"SurveyFinished"===s.data.name&&(document.getElementById(t).remove(),document.body.className=document.body.className.replace("no-scroll",""),window.removeEventListener("message",e,!0),s.data.type="surveyDidFinish",n.triggerEvent(s.data)))}),!0);let s=document.createElement("div");s.className="mydatahelps-survey-modal",s.id=t,s.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}&lang=${n.getCurrentLanguage()}'></iframe></div>`,document.body.append(s),document.body.className+=" no-scroll"}handleConnectExternalAccountResponse(){const e=new URLSearchParams(window.location.search);if(window.opener&&e.get("connectExternalAccount")&&e.get("messageID")&&e.get("success"))return window.opener.postMessage({name:"ConnectExternalAccountResponse",messageID:parseInt(e.get("messageID")),success:"true"===e.get("success")},window.location.origin),window.close(),!0}hasEmbeddedModeUrlParameter(){const e=new URLSearchParams(window.location.search);if(e.has("_e")&&"false"!==e.get("_e"))return!0}}const n=new t;window.MyDataHelps=n,window.RKStudioClient={},window.RKStudioClient.setActionResult=function(e){window.MyDataHelps.setActionResult(e)};export{t as MyDataHelps,n as default};
|
|
2
2
|
//# sourceMappingURL=MyDataHelps.min.js.map
|
package/MyDataHelps.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MyDataHelps.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/MyDataHelps.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","// @ts-ignore : let rollup handle CSS injection\nimport \"../MyDataHelps.css\";\n\nimport * as Model from \"./types\";\nimport { StringMap } from \"./types\";\n\nexport class MyDataHelps {\n\n\tbaseUrl: string = 'https://mydatahelps.org/';\n\tlanguage: string;\n\ttoken: Model.Token;\n\ttokenExpires: number;\n\n\t// Surveys\n\n\tstartSurvey(surveyName: string): void {\n\t\tif (this.isStandaloneMode()) {\n\t\t\tthis.startDelegatedSurvey(`${this.baseUrl}/survey?surveyName=${encodeURIComponent(surveyName)}`);\n\t\t}\n\t\telse if (window.webkit.messageHandlers.StartParticipantSurvey) {\n\t\t\tlet messageID = this.nextMessageID();\n\t\t\twindow.webkit.messageHandlers.StartParticipantSurvey.postMessage({\n\t\t\t\tmessageID: messageID,\n\t\t\t\tsurveyName: surveyName\n\t\t\t});\n\t\t}\n\t}\n\n\tcompleteStep(answer: any): void {\n\t\tif (answer === undefined || answer === null) answer = '';\n\t\tif (typeof answer !== 'string') {\n\t\t\tanswer = JSON.stringify(answer);\n\t\t}\n\t\tif (window.webkit.messageHandlers.ResearchKit) {\n\t\t\twindow.webkit.messageHandlers.ResearchKit.postMessage(answer);\n\t\t}\n\t\telse if (window.webkit.messageHandlers.CompleteStep) {\n\t\t\tlet messageID = this.nextMessageID();\n\t\t\twindow.webkit.messageHandlers.CompleteStep.postMessage({\n\t\t\t\tmessageID: messageID,\n\t\t\t\tanswer: answer\n\t\t\t});\n\t\t}\n\t}\n\n\tquerySurveyAnswers(queryParameters: Model.SurveyAnswersQuery): Promise<Model.SurveyAnswersPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"surveyName\")) {\n\t\t\tqueryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"stepIdentifier\")) {\n\t\t\tqueryParameters.stepIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.stepIdentifier);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"resultIdentifier\")) {\n\t\t\tqueryParameters.resultIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.resultIdentifier);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"answer\")) {\n\t\t\tqueryParameters.answer = MyDataHelps.reduceArrayAndEscape(queryParameters.answer);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"before\")) {\n\t\t\tqueryParameters.before = MyDataHelps.convertDateToIsoString(queryParameters.before);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"after\")) {\n\t\t\tqueryParameters.after = MyDataHelps.convertDateToIsoString(queryParameters.after);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'surveyanswers?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tdeleteSurveyResult(resultID: string): Promise<void> {\n\t\tconst endpoint = 'surveyresults/' + encodeURIComponent(resultID);\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tquerySurveyTasks(queryParameters: Model.SurveyTaskQueryParameters): Promise<Model.SurveyTasksPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"status\")) {\n\t\t\tqueryParameters.status = MyDataHelps.reduceArrayAndEscape(queryParameters.status) as Model.SurveyTaskStatus;\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"surveyName\")) {\n\t\t\tqueryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'surveytasks?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryInboxItems(queryParameters: Model.InboxItemQueryParameters): Promise<Model.InboxItemsPage> {\n\t\tconst assignDefined = (target: any, source: any): any => {\n\t\t\tfor (const key of Object.keys(source)) {\n\t\t\t\tconst value = source[key];\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\ttarget[key] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn target;\n\t\t};\n\n\t\tqueryParameters = assignDefined({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"type\")) {\n\t\t\tqueryParameters.type = MyDataHelps.reduceArrayAndEscape(queryParameters.type) as Model.InboxItemType;\n\t\t}\n\n\t\tif (queryParameters.hasOwnProperty(\"status\")) {\n\t\t\tqueryParameters.status = MyDataHelps.reduceArrayAndEscape(queryParameters.status) as Model.InboxItemStatus;\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'inbox?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetInboxItem(id: Model.Guid): Promise<Model.InboxItem> {\n\t\tconst endpoint = `inbox/${id}`;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tupdateInboxItem(id: Model.Guid, update: Model.InboxItemUpdate): Promise<Model.InboxItemUpdateResult> {\n\t\tconst endpoint = `inbox/${id}/${update}`;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'PUT', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tstartEmbeddedSurvey(linkIdentifier: string, surveyName: string, language: string): Promise<any> {\n\t\tif (!language) {\n\t\t\tlanguage = this.getCurrentLanguage();\n\t\t}\n\t\tlet surveyUrl = this.baseUrl + \"mydatahelps/\" + linkIdentifier + '/surveylink/' + surveyName + \"?lang=\" + language;\n\t\treturn this.startEmbeddedSurveyInternal(surveyUrl);\n\t}\n\n\t// Navigation\n\n\topenExternalUrl(url: string): void {\n\t\tif (window.webkit.messageHandlers.OpenExternalLink) {\n\t\t\twindow.webkit.messageHandlers.OpenExternalLink.postMessage(url);\n\t\t}\n\t}\n\n\topenEmbeddedUrl(url: string): void {\n\t\tif (window.webkit.messageHandlers.OpenEmbeddedLink) {\n\t\t\twindow.webkit.messageHandlers.OpenEmbeddedLink.postMessage(url);\n\t\t}\n\t}\n\n\tshowTab(tabKey: string): void {\n\t\tif (window.webkit.messageHandlers.ShowTab) {\n\t\t\twindow.webkit.messageHandlers.ShowTab.postMessage(tabKey);\n\t\t}\n\t}\n\n\topenApplication(url: string, options?: Model.OpenApplicationOptions): void {\n\t\tif (window.webkit.messageHandlers.OpenExternalApplication) {\n\t\t\tlet messageID = this.nextMessageID();\n\t\t\twindow.webkit.messageHandlers.OpenExternalApplication.postMessage({\n\t\t\t\tmessageID: messageID,\n\t\t\t\turl: url,\n\t\t\t\tmodal: !!(options && options.modal)\n\t\t\t});\n\t\t}\n\t}\n\n\tdismiss(): void {\n\t\tif (window.webkit.messageHandlers.Dismiss) {\n\t\t\twindow.webkit.messageHandlers.Dismiss.postMessage({});\n\t\t}\n\t}\n\n\tback(): void {\n\t\tif (window.webkit.messageHandlers.PopNavigation) {\n\t\t\twindow.webkit.messageHandlers.PopNavigation.postMessage({});\n\t\t}\n\t}\n\n\tshowDashboard(dashboardKey: string, options?: Model.ShowDashboardOptions): void {\n\t\tif (window.webkit.messageHandlers.ShowParticipantDashboard) {\n\t\t\twindow.webkit.messageHandlers.ShowParticipantDashboard.postMessage({\n\t\t\t\tdashboardKey: dashboardKey,\n\t\t\t\tmodal: !!(options && options.modal),\n\t\t\t\ttitle: options && options.title ? options.title : undefined\n\t\t\t});\n\t\t}\n\t}\n\n\tshowWebVisualization(visualizationKey: string, parameters: object, options: Model.ShowWebVisualizationOptions): void {\n\t\tif (window.webkit.messageHandlers.ShowParticipantWebVisualization) {\n\t\t\twindow.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({\n\t\t\t\tvisualizationKey: visualizationKey,\n\t\t\t\tparameters: parameters,\n\t\t\t\tmodal: !!(options && options.modal),\n\t\t\t\ttitle: options && options.title ? options.title : undefined\n\t\t\t});\n\t\t}\n\t}\n\n\tshowWebVisualizationPdf(visualizationKey: string, parameters: object, options: Model.ShowWebVisualizationPdfOptions): void {\n\t\tif (window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF) {\n\t\t\twindow.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({\n\t\t\t\tvisualizationKey: visualizationKey,\n\t\t\t\tparameters: parameters,\n\t\t\t\tlandscape: !!(options && options.landscape),\n\t\t\t\thtmlViewerZoom: options && options.htmlViewerZoom\n\t\t\t});\n\t\t}\n\t}\n\n\tshowProject(projectCode: string): void {\n\t\tif (window.webkit.messageHandlers.ShowProject) {\n\t\t\twindow.webkit.messageHandlers.ShowProject.postMessage({ code: projectCode });\n\t\t}\n\t}\n\n\tjoinProject(projectCode: string): void {\n\t\tif (window.webkit.messageHandlers.JoinProject) {\n\t\t\twindow.webkit.messageHandlers.JoinProject.postMessage({ code: projectCode });\n\t\t}\n\t}\n\n\t//Events\n\n\ton(eventName: Model.EventName, callback: (EventData) => void): void {\n\n\t\tif (!this.supportedEvents.includes(eventName)) {\n\t\t\tthrow new Error(eventName + \" is not a supported event type.\");\n\t\t}\n\n\t\tif (!this.registeredEventHandlers[eventName]) {\n\t\t\tthis.registeredEventHandlers[eventName] = [];\n\t\t}\n\n\t\tthis.registeredEventHandlers[eventName].push(callback);\n\t}\n\n\toff(eventName: Model.EventName, callback: (EventData) => void): void {\n\n\t\tif (!this.supportedEvents.includes(eventName)) {\n\t\t\tthrow new Error(eventName + \" is not a supported event type.\");\n\t\t}\n\n\t\tif (!this.registeredEventHandlers[eventName]) return;\n\n\t\tlet eventHandlerIndex = this.registeredEventHandlers[eventName].indexOf(callback);\n\n\t\tif (eventHandlerIndex !== -1) {\n\t\t\tthis.registeredEventHandlers[eventName].splice(eventHandlerIndex, 1);\n\t\t}\n\t}\n\n\ttriggerEvent(event: Model.EventData): void {\n\t\tlet eventName = event.type;\n\t\tif (this.supportedEvents.includes(eventName) && this.registeredEventHandlers[eventName]) {\n\t\t\tthis.registeredEventHandlers[eventName].forEach(function (handler) {\n\t\t\t\thandler(event);\n\t\t\t});\n\t\t}\n\t}\n\n\tsetActionResult(data: Model.EventData): void {\n\t\tthis.messageHandlers[data.messageID](data);\n\t}\n\n\t// Participant Info\n\n\tgetParticipantInfo(): Promise<Model.ParticipantInfo> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'participant';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tpersistParticipantInfo(demographics: Partial<Model.ParticipantDemographics> | undefined, customFields: StringMap): Promise<Model.ParticipantInfo> {\n\t\tconst endpoint = 'participant';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'PUT', { demographics, customFields });\n\t\t\t})\n\t\t\t.then(async function (response) {\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tvar errorJson = await response.json();\n\t\t\t\t\tthrow errorJson.message;\n\t\t\t\t}\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.catch(function (error) {\n\t\t\t\tconsole.log(\"Unable to persist participant: \" + error);\n\t\t\t});\n\t}\n\n\tgetProjectInfo(): Promise<Model.ProjectInfo> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'project';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// Device Data\n\n\tgetDeviceDataPoint(id: Model.Guid): Promise<Model.DeviceDataPoint> {\n\t\tconst endpoint = 'devicedata/' + id;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tdeleteDeviceDataPoint(id: Model.Guid): Promise<void> {\n\t\tconst endpoint = 'devicedata/' + id;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tqueryDeviceData(queryParameters: Model.DeviceDataPointQuery): Promise<Model.DeviceDataPointsPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"type\")) {\n\t\t\tqueryParameters.type = MyDataHelps.reduceArrayAndEscape(queryParameters.type);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tpersistDeviceData(deviceDataPoints: Model.PersistableDeviceDataPoint[]): Promise<void> {\n\t\tconst endpoint = 'devicedata';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', deviceDataPoints);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\t// Device Data V2\n\n\tqueryDeviceDataV2(queryParameters: Model.DeviceDataV2Query): Promise<Model.DeviceDataV2Page> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedBefore\")) {\n\t\t\tqueryParameters.insertedBefore = MyDataHelps.convertDateToIsoString(queryParameters.insertedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedAfter\")) {\n\t\t\tqueryParameters.insertedAfter = MyDataHelps.convertDateToIsoString(queryParameters.insertedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedBefore\")) {\n\t\t\tqueryParameters.modifiedBefore = MyDataHelps.convertDateToIsoString(queryParameters.modifiedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedAfter\")) {\n\t\t\tqueryParameters.modifiedAfter = MyDataHelps.convertDateToIsoString(queryParameters.modifiedAfter);\n\t\t}\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"dataSource\");\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"properties\");\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryDeviceDataV2Aggregate(queryParameters: Model.DeviceDataV2AggregateQuery): Promise<Model.DeviceDataV2AggregatePage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"aggregateFunctions\")) {\n\t\t\tqueryParameters.aggregateFunctions = MyDataHelps.reduceArrayAndEscape(queryParameters.aggregateFunctions);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedBefore\")) {\n\t\t\tqueryParameters.insertedBefore = MyDataHelps.convertDateToIsoString(queryParameters.insertedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedAfter\")) {\n\t\t\tqueryParameters.insertedAfter = MyDataHelps.convertDateToIsoString(queryParameters.insertedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedBefore\")) {\n\t\t\tqueryParameters.modifiedBefore = MyDataHelps.convertDateToIsoString(queryParameters.modifiedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedAfter\")) {\n\t\t\tqueryParameters.modifiedAfter = MyDataHelps.convertDateToIsoString(queryParameters.modifiedAfter);\n\t\t}\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"dataSource\");\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"properties\");\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata/aggregate?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryDeviceDataV2DailySleep(queryParameters: Model.DeviceDataV2AggregateQuery): Promise<Model.DeviceDataV2DailySleepPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedBefore\")) {\n\t\t\tqueryParameters.insertedBefore = MyDataHelps.convertDateToIsoString(queryParameters.insertedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedAfter\")) {\n\t\t\tqueryParameters.insertedAfter = MyDataHelps.convertDateToIsoString(queryParameters.insertedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedBefore\")) {\n\t\t\tqueryParameters.modifiedBefore = MyDataHelps.convertDateToIsoString(queryParameters.modifiedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedAfter\")) {\n\t\t\tqueryParameters.modifiedAfter = MyDataHelps.convertDateToIsoString(queryParameters.modifiedAfter);\n\t\t}\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"dataSource\");\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"properties\");\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata/aggregate/dailysleep?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetDeviceDataV2AllDataTypes(enabled?: boolean): Promise<Model.SupportedDeviceDataV2DataType[]> {\n\t\tconst queryParameters: Record<string, string> = {};\n\n\t\tif (enabled !== undefined) {\n\t\t\tqueryParameters['enabled'] = enabled.toString();\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters).toString();\n\t\tconst endpoint = `devicedata/allDataTypes?${queryString}`;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// External Accounts\n\n\tgetExternalAccountProviders(search: string | null, category: string | null, pageSize: number, pageNumber: number): Promise<Model.ExternalAccountProvidersPage> {\n\t\tlet searchParameters: any = {};\n\t\tif (!!search) searchParameters.search = search;\n\t\tif (!!category) searchParameters.category = category;\n\t\tif (!!pageSize) searchParameters.pageSize = pageSize;\n\t\tif (!!pageNumber) searchParameters.pageNumber = pageNumber;\n\n\t\tconst queryString = new URLSearchParams(searchParameters).toString();\n\t\tconst endpoint = 'externalaccountproviders?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tconnectExternalAccount(externalAccountProviderID: number, options?: Model.ConnectExternalAccountOptions): Promise<void> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\n\t\t\tconst messageID = mdh.nextMessageID();\n\t\t\tmdh.messageHandlers[messageID] = function (connectProviderAccountResponse) {\n\t\t\t\tif (connectProviderAccountResponse && connectProviderAccountResponse.success) {\n\t\t\t\t\tresolve();\n\t\t\t\t} else {\n\t\t\t\t\treject(connectProviderAccountResponse.errorMessage)\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (this.standaloneMode) {\n\t\t\t\tlet standaloneModeFinalRedirectPath = options?.standaloneModeFinalRedirectPath || window.location.href;\n\t\t\t\tconst mdh = this;\n\n\t\t\t\t// DEV: Safari blocks popups in AJAX responses. Work-around is to open a blank window before the request and set the URL later\n\t\t\t\tlet providerAuthWindow;\n\t\t\t\tif (options?.openNewWindow) {\n\t\t\t\t\tstandaloneModeFinalRedirectPath = `${standaloneModeFinalRedirectPath.split('?')[0]}?connectExternalAccount=true&messageID=${messageID}&success=%SUCCESSVALUE%`;\n\t\t\t\t\tlet windowFeatures = null;\n\t\t\t\t\tif (options?.width && options?.height) {\n\t\t\t\t\t\tconst w = options?.width;\n\t\t\t\t\t\tconst h = options?.height;\n\t\t\t\t\t\tconst y = window.outerHeight / 2 + window.screenY - (h / 2);\n\t\t\t\t\t\tconst x = window.outerWidth / 2 + window.screenX - (w / 2);\n\t\t\t\t\t\twindowFeatures = \"width=\" + w + \",height=\" + h + \",top=\" + y + \",left=\" + x;\n\t\t\t\t\t}\n\t\t\t\t\tproviderAuthWindow = window.open(`${this.baseUrl}home/loading`, 'providerauth', windowFeatures);\n\t\t\t\t}\n\n\t\t\t\tconst searchParameters = { finalRedirectPath: standaloneModeFinalRedirectPath };\n\t\t\t\tconst queryString = new URLSearchParams(searchParameters).toString();\n\t\t\t\tconst endpoint = \"externalaccountproviders/\" + externalAccountProviderID + \"/connect?\" + queryString;\n\n\t\t\t\tthis\n\t\t\t\t\t.connect()\n\t\t\t\t\t.then(function () {\n\t\t\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', null);\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (response) {\n\t\t\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (response) {\n\t\t\t\t\t\treturn response.text();\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (redirectUrl) {\n\t\t\t\t\t\tif (providerAuthWindow) {\n\t\t\t\t\t\t\tproviderAuthWindow.location = redirectUrl.replace(/['\"]+/g, '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twindow.top.location = redirectUrl.replace(/['\"]+/g, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t});\n\t\t\t} else if (window.webkit.messageHandlers.ConnectExternalAccount) {\n\t\t\t\twindow.webkit.messageHandlers.ConnectExternalAccount.postMessage({\n\t\t\t\t\texternalAccountProviderID: externalAccountProviderID,\n\t\t\t\t\tmessageID: messageID,\n\t\t\t\t\t...options\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tgetExternalAccounts(): Promise<Model.ExternalAccount[]> {\n\t\tconst endpoint = 'externalaccounts';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\trefreshExternalAccount(accountID: number): Promise<void> {\n\t\tconst endpoint = 'externalaccounts/refresh/' + accountID;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tdeleteExternalAccount(accountID: number): Promise<any> {\n\t\tconst endpoint = 'externalaccounts/delete/' + encodeURIComponent(accountID);\n\t\tconst mdh = this;\n\n\t\tif (this.isStandaloneMode()) {\n\t\t\treturn this\n\t\t\t\t.connect()\n\t\t\t\t.then(function () {\n\t\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t\t})\n\t\t\t\t.then(function (response) {\n\t\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t\t});\n\t\t}\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (window.webkit.messageHandlers.DeleteProviderAccount) {\n\t\t\t\tconst messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (deleteProviderAccountResponse) {\n\t\t\t\t\tif (!deleteProviderAccountResponse.success) {\n\t\t\t\t\t\treject(deleteProviderAccountResponse)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(deleteProviderAccountResponse);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.DeleteProviderAccount.postMessage({\n\t\t\t\t\tmessageID: messageID,\n\t\t\t\t\taccountID: accountID\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\t// Notifications\n\n\tqueryNotifications(queryParameters: Model.NotificationQueryParameters): Promise<Model.NotificationsPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"sentBefore\")) {\n\t\t\tqueryParameters.sentBefore = MyDataHelps.convertDateToIsoString(queryParameters.sentBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"sentAfter\")) {\n\t\t\tqueryParameters.sentAfter = MyDataHelps.convertDateToIsoString(queryParameters.sentAfter);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'notifications?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// Fitbit\n\n\tqueryFitbitDailySummaries(queryParameters: Model.FitbitQuery): Promise<Model.FitbitDailySummariesPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'fitbit/dailySummaries?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryFitbitSleepLogs(queryParameters: Model.FitbitQuery): Promise<Model.FitbitSleepLogsPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'fitbit/sleepLogs?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// AppleHealth\n\n\tqueryAppleHealthActivitySummaries(queryParameters: Model.AppleHealthQuery): Promise<Model.AppleHealthActivitySummaryPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'appleHealth/activitySummaries?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryAppleHealthWorkouts(queryParameters: Model.AppleHealthQuery): Promise<Model.AppleHealthWorkoutPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'appleHealth/workouts?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// Files\n\n\tuploadFile(file: File, category: string, fileName?: string): Promise<void> {\n\n\t\tif (file.size > 200 * 1024 * 1024) {\n\t\t\tthrow new Error(\"File size exceeds the maximum allowed size of 200MB.\");\n\t\t}\n\n\t\tconst mdh = this;\n\t\tconst endpoint = 'files?category=' + category + '&fileName=' + encodeURIComponent(fileName ?? file.name);\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.then(function (json) {\n\t\t\t\treturn fetch(json.preSignedUrl, {\n\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\tbody: file,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': file.type,\n\t\t\t\t\t\t'x-amz-server-side-encryption': 'AES256'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tqueryFiles(queryParameters: Model.UploadedFileQuery): Promise<Model.UploadedFilesPage> {\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'files?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetFileDownloadUrl(key: string): Promise<Model.DownloadedFile> {\n\n\t\tif (!key) throw new Error(\"Please specify the key of the file to download.\");\n\n\t\tconst endpoint = 'files/download?key=' + key;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tdeleteFile(key: string): Promise<void> {\n\n\t\tif (!key) throw new Error(\"Please specify the key of the file to delete.\");\n\n\t\tconst endpoint = 'files?key=' + key;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\t// Authorization\n\n\tconnect(): Promise<void> {\n\t\tconst mdh = this;\n\t\tlet refreshDelegatedAccessToken = function () {\n\t\t\tmdh.token = null;\n\n\t\t\tmdh.refreshTokenPromise = new Promise(function (resolve, reject) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (tokenResponse) {\n\t\t\t\t\tif (tokenResponse.success) {\n\t\t\t\t\t\tmdh.tokenExpires = Date.now() + (tokenResponse.data.expires_in * 1000);\n\t\t\t\t\t\tmdh.token = tokenResponse.data;\n\t\t\t\t\t\tmdh.baseUrl = tokenResponse.baseUrl;\n\t\t\t\t\t\tsetTimeout(refreshDelegatedAccessToken, ((tokenResponse.data.expires_in - mdh.accessTokenRenewalBufferSeconds) * 1000));\n\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmdh.token = null;\n\t\t\t\t\t\treject(tokenResponse.message);\n\t\t\t\t\t}\n\t\t\t\t\tmdh.messageHandlers[messageID] = null;\n\t\t\t\t\tmdh.refreshTokenPromise = null;\n\t\t\t\t};\n\n\t\t\t\twindow.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({ messageID: messageID });\n\t\t\t});\n\t\t};\n\n\t\tif (this.token && Date.now() < this.tokenExpires) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tif (this.isStandaloneMode() && !this.isEmbeddedMode()) {\n\t\t\tlet error = this.token ? \"access token is expired or invalid\" : \"access token must be explicitly provided using the setParticipantAccess method\";\n\t\t\tconsole.log(error);\n\t\t\treturn Promise.reject(error);\n\t\t}\n\n\t\tif (!this.refreshTokenPromise) {\n\t\t\trefreshDelegatedAccessToken();\n\t\t}\n\n\t\t// Re-use promise if refresh already in progress\n\t\treturn this.refreshTokenPromise;\n\t}\n\n\tsetParticipantAccessToken(token: Model.Token, baseUrl?: string): void {\n\t\tthis.enableStandaloneMode();\n\t\tthis.token = token;\n\t\tif (baseUrl) {\n\t\t\tthis.baseUrl = baseUrl;\n\t\t}\n\t\tthis.tokenExpires = Date.now() + (this.token.expires_in * 1000);\n\t\tconst mdh = this;\n\t\tsetTimeout(function () {\n\t\t\tmdh.triggerEvent({ type: \"tokenWillExpire\" });\n\t\t}, ((this.token.expires_in - this.accessTokenRenewalBufferSeconds) * 1000));\n\t}\n\n\t// Miscellaneous\n\n\tisStandaloneMode() {\n\t\treturn this.standaloneMode;\n\t}\n\n\tisEmbeddedMode() {\n\t\treturn this.embeddedMode;\n\t}\n\n\tenableStandaloneMode(embeddedMode: boolean = false, baseUrl?: string) {\n\t\tthis.standaloneMode = true;\n\t\tthis.embeddedMode = embeddedMode;\n\t\tif (baseUrl) {\n\t\t\tthis.baseUrl = baseUrl;\n\t\t}\n\t\tif (window.webkit) {\n\t\t\twindow.webkit.messageHandlers = embeddedMode ? {\n\t\t\t\tGetDelegatedAccessToken: window.webkit.messageHandlers.GetDelegatedAccessToken,\n\t\t\t\tOpenExternalLink: window.webkit.messageHandlers.OpenExternalLink,\n\t\t\t\tOpenEmbeddedLink: window.webkit.messageHandlers.OpenEmbeddedLink,\n\t\t\t\tOpenExternalApplication: window.webkit.messageHandlers.OpenExternalApplication,\n\t\t\t\tPopNavigation: window.webkit.messageHandlers.PopNavigation,\n\t\t\t\tDismiss: window.webkit.messageHandlers.Dismiss,\n\t\t\t} : {};\n\t\t}\n\t}\n\n\tsetStatusBarStyle(style: Model.StatusBarStyle): void {\n\t\tif (window.webkit.messageHandlers.SetStatusBarStyle) {\n\t\t\twindow.webkit.messageHandlers.SetStatusBarStyle.postMessage({ style: style });\n\t\t}\n\t}\n\n\tgetDeviceInfo(): Promise<Model.DeviceInfo> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.DeviceInfo>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.GetDeviceInfo) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (deviceInfoResponse) {\n\t\t\t\t\tresolve(deviceInfoResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.GetDeviceInfo.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tsetSupportedLanguages(languages: string[]) {\n\t\tthis.supportedLanguages.length = 0;\n\t\tfor (let i = 0; i < languages.length; i++) {\n\t\t\tthis.supportedLanguages.push(languages[i].replace(\"_\", \"-\"));\n\t\t}\n\t}\n\n\tgetStepConfiguration(): Promise<Model.StepConfiguration> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.StepConfiguration>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.GetStepConfiguration) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (stepConfigurationResponse) {\n\t\t\t\t\tresolve(stepConfigurationResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.GetStepConfiguration.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tgetSurveyContext(): Promise<Model.SurveyContext> {\n\t\tlet mdh = this;\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t}\n\t\t\tmdh.getDeviceInfo().then(function (deviceInfo) {\n\t\t\t\tif (deviceInfo.platform !== \"Web\") {\n\t\t\t\t\tresolve({ surveyMode: \"Survey\" });\n\t\t\t\t}\n\t\t\t\telse if (window.webkit.messageHandlers.GetSurveyContext) {\n\t\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\t\tmdh.messageHandlers[messageID] = function (surveyContextResponse) {\n\t\t\t\t\t\tresolve(surveyContextResponse.data);\n\t\t\t\t\t};\n\t\t\t\t\twindow.webkit.messageHandlers.GetSurveyContext.postMessage({ messageID: messageID });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject();\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\treject();\n\t\t\t});\n\t\t});\n\t}\n\n\tgetCurrentSurveyAnswers(): Promise<Model.CurrentSurveyAnswer[]> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.CurrentSurveyAnswer[]>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.GetCurrentSurveyAnswers) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (currentSurveyAnswersResponse) {\n\t\t\t\t\tresolve(currentSurveyAnswersResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.GetCurrentSurveyAnswers.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tsetCurrentLanguage(language: string) {\n\t\tif (language) {\n\t\t\tlet supportedLanguage = this.getSupportedLanguage(language);\n\t\t\tif (supportedLanguage) {\n\t\t\t\tthis.language = supportedLanguage;\n\t\t\t} else {\n\t\t\t\tconsole.warn(`language ${language} not supported`);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.language = language;\n\t\t}\n\t}\n\n\tgetCurrentLanguage(): string {\n\t\tlet searchParams = new URLSearchParams(window.location.search);\n\t\tlet lang;\n\t\tif (searchParams.has(\"lang\")) {\n\t\t\tlang = this.getSupportedLanguage(searchParams.get(\"lang\"));\n\t\t\tif (lang) {\n\t\t\t\treturn lang;\n\t\t\t} else {\n\t\t\t\tconsole.warn(`language ${searchParams.get(\"lang\")} not supported`);\n\t\t\t}\n\t\t}\n\t\treturn this.language || navigator.language;\n\t}\n\n\tshowGoogleFitSettings(): void {\n\t\tif (window.webkit.messageHandlers.ShowGoogleFitSettings) {\n\t\t\twindow.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({});\n\t\t}\n\t}\n\n\tshowHealthConnectSettings(): void {\n\t\tif (window.webkit.messageHandlers.HealthConnectSettings) {\n\t\t\twindow.webkit.messageHandlers.HealthConnectSettings.postMessage({});\n\t\t}\n\t}\n\n\tshowHealthConnectPrompt(): void {\n\t\tif (window.webkit.messageHandlers.HealthConnectPrompt) {\n\t\t\twindow.webkit.messageHandlers.HealthConnectPrompt.postMessage({});\n\t\t}\n\t}\n\n\tgetHealthConnectStatus(): Promise<Model.HealthConnectStatus> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.HealthConnectStatus>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.HealthConnectStatus) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (statusResponse) {\n\t\t\t\t\tresolve(statusResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.HealthConnectStatus.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tshowHealthConnectPhrPrompt(): void {\n\t\tif (window.webkit.messageHandlers.HealthConnectPhrPrompt) {\n\t\t\twindow.webkit.messageHandlers.HealthConnectPhrPrompt.postMessage({});\n\t\t}\n\t}\n\n\tgetHealthConnectPhrStatus(): Promise<Model.HealthConnectPhrStatus> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.HealthConnectPhrStatus>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.HealthConnectPhrStatus) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (statusResponse) {\n\t\t\t\t\tresolve(statusResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.HealthConnectPhrStatus.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\trequestReview(cooldownDays?: number): void {\n\t\tif (window.webkit.messageHandlers.RequestReview) {\n\t\t\twindow.webkit.messageHandlers.RequestReview.postMessage({ cooldownDays: cooldownDays });\n\t\t}\n\t}\n\n\ttrackCustomEvent(event: Model.CustomEventInfo): Promise<void> {\n\t\tconst endpoint = 'customevents';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', event);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tgetDataCollectionSettings(): Promise<Model.DataCollectionSettings> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'datacollectionsettings';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetDataAvailability(): Promise<Model.DataAvailability> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'dataavailability';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tinvokeCustomApi(customApi: string, method: string, queryParameters: string | string[][] | Record<string, string> | URLSearchParams | null | undefined, jsonResponse: boolean): Promise<any> {\n\t\tif (customApi.includes('?')) {\n\t\t\tthrow new Error(\"Cannot include query parameters directly in the \\\"customApi\\\" string. Provide as an argument for \\\"queryParameters\\\" instead.\");\n\t\t}\n\n\t\tlet endpoint = 'custom/' + customApi;\n\t\tmethod = method.toUpperCase();\n\t\tif (queryParameters !== null && queryParameters !== undefined && (method === 'GET' || method === 'DELETE')) {\n\t\t\tlet parameterString = new URLSearchParams(queryParameters).toString();\n\t\t\tendpoint += \"?\" + parameterString;\n\t\t\tqueryParameters = null;\n\t\t}\n\n\t\tconst mdh = this;\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, method, queryParameters);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn jsonResponse ? response.json() : undefined;\n\t\t\t});\n\t}\n\n\tconstructor() {\n\t\tif (this.handleConnectExternalAccountResponse()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet mdh = this;\n\t\tlet applicationHost = getParentOrigin();\n\t\tlet supportedActions;\n\n\t\tfunction getParentOrigin(): string {\n\t\t\tlet ancestorOrigins = document.location.ancestorOrigins;\n\t\t\tif (ancestorOrigins && ancestorOrigins[0]) {\n\t\t\t\treturn ancestorOrigins[0];\n\t\t\t}\n\n\t\t\treturn '*';\n\t\t}\n\n\t\tfunction acceptableOrigin(origin) {\n\t\t\tif (origin === '*') return true;\n\n\t\t\tlet sourceURL = new URL(origin);\n\t\t\tfor (let k = 0; k < mdh.acceptableParentDomains.length; k++) {\n\t\t\t\tif (sourceURL.hostname === mdh.acceptableParentDomains[k] || sourceURL.hostname.endsWith(\".\" + mdh.acceptableParentDomains[k])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction validateWindowMessageOrigin(message) {\n\t\t\tif (mdh.isStandaloneMode() && message.origin === window.location.origin) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (applicationHost === \"*\") {\n\t\t\t\treturn acceptableOrigin(message.origin);\n\t\t\t}\n\n\t\t\treturn message.origin === applicationHost;\n\t\t}\n\n\t\tfunction addActions(actions) {\n\t\t\tfor (let action in actions) {\n\t\t\t\tif (!window.webkit.messageHandlers[action]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\twindow.webkit.messageHandlers[action] = { postMessage: actions[action] };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.log(\"Unable to add missing actions on this platform: \" + error);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction receiveWindowMessage(message) {\n\t\t\tif (!validateWindowMessageOrigin(message)) {\n\t\t\t\t// todo: this can generate tons of console errors when hosting some apps within webappstep (youtube content, for example )\n\t\t\t\tconsole.error(\"message.origin '\" + message.origin + \"' is not allowed.\");\n\t\t\t\tthrow \"message.origin '\" + message.origin + \"' is not allowed.\";\n\t\t\t}\n\n\t\t\tif (message.data.messageID) {\n\t\t\t\tmdh.setActionResult(message.data);\n\t\t\t} else {\n\t\t\t\tmdh.triggerEvent(message.data);\n\t\t\t}\n\t\t}\n\n\t\tfunction windowHasAnyActions() {\n\t\t\tfor (let action in supportedActions) {\n\t\t\t\tif (window.webkit.messageHandlers[action]) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let action in mdh.unsupportedActions) {\n\t\t\t\tif (window.webkit.messageHandlers[mdh.unsupportedActions[action]]) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!acceptableOrigin(applicationHost)) {\n\t\t\tconsole.log(\"Detected unsupported parent origin domain.\");\n\t\t}\n\n\t\tif (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.ResearchKit) {\n\t\t\t// Presence of ResearchKit handler indicates the SDK is being used from within a WebViewStep. For pre-SDK backwards compatiblity,\n\t\t\t// WebViewStep setup registers the following handlers: GetDeviceInfo, DeleteProviderAccount, ConnectExternalAccount\n\t\t\t// ShowParticipantWebVisualizationPDF, ResearchKit\n\t\t\tsupportedActions = {\n\t\t\t\t\"GetDelegatedAccessToken\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetDelegatedAccessToken',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenExternalLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'OpenExternalUrl',\n\t\t\t\t\t\turl: data\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenEmbeddedLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'OpenEmbeddedUrl',\n\t\t\t\t\t\turl: data\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetCurrentSurveyAnswers\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetCurrentSurveyAnswers',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetStepConfiguration\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetStepConfiguration',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetSurveyContext\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetSurveyContext',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost);\n\t\t\t\t},\n\t\t\t\t\"CompleteStep\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'CompleteStep',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\tanswer: data.answer\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\tsupportedActions = {\n\t\t\t\t\"GetDelegatedAccessToken\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetDelegatedAccessToken',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetDeviceInfo\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"StartParticipantSurvey\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'StartParticipantSurvey',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\tsurveyName: data.surveyName\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenExternalLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'OpenExternalUrl', url: data }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenEmbeddedLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'OpenEmbeddedUrl', url: data }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenExternalApplication\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'OpenApplication',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\turl: data.url,\n\t\t\t\t\t\tmodal: data.modal\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"Dismiss\": function () {\n\t\t\t\t\twindow.parent.postMessage({ name: 'Dismiss' }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"PopNavigation\": function () {\n\t\t\t\t\twindow.parent.postMessage({ name: 'Back' }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowTab\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'ShowTab', tabKey: data }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowParticipantDashboard\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ShowParticipantDashboard',\n\t\t\t\t\t\tdashboardKey: data.dashboardKey,\n\t\t\t\t\t\tmodal: data.modal\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowParticipantWebVisualization\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ShowParticipantWebVisualization',\n\t\t\t\t\t\tvisualizationKey: data.visualizationKey,\n\t\t\t\t\t\tparameters: data.parameters,\n\t\t\t\t\t\tmodal: data.modal\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowParticipantWebVisualizationPDF\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ShowParticipantWebVisualizationPDF',\n\t\t\t\t\t\tvisualizationKey: data.visualizationKey,\n\t\t\t\t\t\tparameters: data.parameters,\n\t\t\t\t\t\tmodal: data.modal,\n\t\t\t\t\t\tlandscape: data.landscape,\n\t\t\t\t\t\thtmlViewerZoom: data.htmlViewerZoom\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"DeleteProviderAccount\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'DeleteProviderAccount',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\taccountID: data.accountID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ConnectExternalAccount\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ConnectExternalAccount',\n\t\t\t\t\t\texternalAccountProviderID: data.externalAccountProviderID,\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\topenNewWindow: data.openNewWindow,\n\t\t\t\t\t\twidth: data.width,\n\t\t\t\t\t\theight: data.height\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowProject\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'ShowProject', code: data.code }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"JoinProject\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'JoinProject', code: data.code }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetCurrentSurveyAnswers\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetCurrentSurveyAnswers',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetStepConfiguration\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetStepConfiguration',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"CompleteStep\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'CompleteStep',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\tanswer: data.answer\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!window.webkit || !window.webkit.messageHandlers || !windowHasAnyActions()) {\n\t\t\twindow.webkit = {\n\t\t\t\tmessageHandlers: {}\n\t\t\t};\n\t\t}\n\n\t\taddActions(supportedActions);\n\n\t\twindow.addEventListener(\"message\", receiveWindowMessage, false);\n\n\t\tif (this.hasEmbeddedModeUrlParameter()) {\n\t\t\tmdh.enableStandaloneMode(true);\n\t\t}\n\t}\n\n\tprivate readonly acceptableParentDomains = [\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\t'mydatahelps.dev'\n\t];\n\n\tprivate readonly accessTokenRenewalBufferSeconds = 120;\n\tprivate readonly unsupportedActions = [\"SetHeight\", \"ResearchKit\"];\n\tprivate readonly supportedEvents = [\"surveyDidFinish\", \"applicationDidBecomeVisible\", \"externalAccountSyncComplete\", \"tokenWillExpire\", \"healthConnectSyncComplete\", \"healthConnectPhrSyncComplete\"];\n\tprivate readonly supportedLanguages = [];\n\n\tprivate currentMessageID = 1;\n\tprivate messageHandlers = [];\n\tprivate registeredEventHandlers = {};\n\tprivate refreshTokenPromise = null;\n\tprivate standaloneMode = false;\n\tprivate embeddedMode = false;\n\n\tprivate nextMessageID() {\n\t\treturn this.currentMessageID++;\n\t}\n\n\tprivate makeUrl(endpoint, apiVersion) {\n\t\tif (!this.baseUrl) {\n\t\t\tconsole.error(\"Cannot use makeUrl without MyDataHelps.baseUrl.\");\n\t\t\tthrow \"Cannot use makeUrl without MyDataHelps.baseUrl.\";\n\t\t}\n\n\t\treturn this.baseUrl + 'api/' + apiVersion + '/delegated/' + endpoint;\n\t}\n\n\tprivate makeRequest(endpoint, method, body, apiVersion = \"v1\") {\n\t\tif (!this.token || !this.token.access_token) {\n\t\t\tthrow \"No access_token available for request authorization.\";\n\t\t}\n\n\t\tlet url = this.makeUrl(endpoint, apiVersion);\n\n\t\tlet headers = new Headers();\n\t\theaders.append('Authorization', 'Bearer ' + this.token.access_token);\n\t\theaders.append('Accept', 'application/json, text/javascript, */*; q=0.01');\n\t\theaders.append('Accept-Language', this.getCurrentLanguage());\n\t\tif (!!body) {\n\t\t\theaders.append('Content-Type', 'application/json');\n\t\t}\n\n\t\tlet init: any = {\n\t\t\tmethod: method,\n\t\t\theaders: headers\n\t\t};\n\t\tif (!!body) {\n\t\t\tinit.body = JSON.stringify(body);\n\t\t}\n\n\t\treturn fetch(url, init);\n\t}\n\n\tprivate getSupportedLanguage(language: string): string {\n\t\tlanguage = language.replace(\"_\", \"-\");\n\t\tif (this.supportedLanguages.length === 0) {\n\t\t\treturn language;\n\t\t} else {\n\t\t\tif (this.supportedLanguages.find((l) => l === language)) {\n\t\t\t\treturn language;\n\t\t\t} else if (language.indexOf(\"-\") > 0) {\n\t\t\t\tlanguage = language.substring(0, language.indexOf(\"-\"));\n\t\t\t\tif (this.supportedLanguages.find((l) => l === language)) {\n\t\t\t\t\treturn language;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static validateResponse(response) {\n\t\tif (!response.ok) {\n\t\t\tthrow response.statusText;\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tprivate static escapeParam(param) {\n\t\treturn String(param)\n\t\t\t.replace(\"\\\\\", \"\\\\\\\\\")\n\t\t\t.replace(\",\", \"\\\\,\");\n\t}\n\n\tprivate static reduceArrayAndEscape(param) {\n\t\tif (Array.isArray(param)) {\n\t\t\tlet escapedParams = param.map(function (elem) {\n\t\t\t\treturn MyDataHelps.escapeParam(elem);\n\t\t\t});\n\t\t\treturn escapedParams.join(\",\");\n\t\t}\n\n\t\treturn this.escapeParam(param);\n\t}\n\n\tprivate static convertDateToIsoString(date) {\n\t\tlet paramAsDate = new Date(date);\n\t\tif (isNaN(paramAsDate.getTime())) {\n\t\t\tthrow \"Cannot interpret parameter as Date\";\n\t\t}\n\n\t\treturn paramAsDate.toISOString();\n\t}\n\n\tprivate static flattenPropertyShallow(params, property) {\n\t\tif (params[property] === undefined || params[property] === null) return;\n\n\t\tfor (var key in params[property]) {\n\t\t\tif (params[property].hasOwnProperty(key)) {\n\t\t\t\tparams[`${property}.${key}`] = MyDataHelps.escapeParam(params[property][key]);\n\t\t\t}\n\t\t}\n\n\t\tdelete params[property];\n\t}\n\n\tprivate startEmbeddedSurveyInternal(surveyUrl) {\n\t\tlet mdhSurveyModalId = 'mydatahelps-survey-modal';\n\t\tlet mdh = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (document.getElementById(mdhSurveyModalId)) {\n\t\t\t\treject(\"Survey already in progress\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", function listener(message) {\n\t\t\t\tif (message.origin !== new URL(mdh.baseUrl).origin) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet frame = (document.getElementById('mydatahelps-survey-frame') as HTMLFrameElement).contentWindow;\n\t\t\t\tif (message.source !== frame) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (message.data.name === 'SurveyWindowInitialized') {\n\t\t\t\t\tdocument.getElementById(mdhSurveyModalId).className += \" loaded\";\n\t\t\t\t} else if (message.data.name === 'SurveyFinished') {\n\t\t\t\t\tdocument.getElementById(mdhSurveyModalId).remove();\n\t\t\t\t\tdocument.body.className = document.body.className.replace(\"no-scroll\", \"\");\n\t\t\t\t\twindow.removeEventListener(\"message\", listener, true);\n\t\t\t\t\tresolve(message.data);\n\t\t\t\t}\n\t\t\t}, true);\n\n\t\t\tlet surveyModal = document.createElement('div');\n\t\t\tsurveyModal.className = 'mydatahelps-survey-modal';\n\t\t\tsurveyModal.id = mdhSurveyModalId;\n\t\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\t\tdocument.body.append(surveyModal);\n\t\t\tdocument.body.className += ' no-scroll';\n\t\t});\n\t}\n\n\tprivate startDelegatedSurvey(surveyUrl) {\n\t\tlet mdhSurveyModalId = 'mydatahelps-survey-modal';\n\t\tlet mdh = this;\n\n\t\tif (document.getElementById(mdhSurveyModalId)) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.addEventListener(\"message\", function listener(message) {\n\t\t\tif (message.origin !== new URL(mdh.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet frame = (document.getElementById('mydatahelps-survey-frame') as HTMLFrameElement).contentWindow;\n\t\t\tif (message.source !== frame) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.data.name === 'GetDelegatedAccessToken') {\n\t\t\t\tmdh.getParticipantInfo().then((participant) => {\n\t\t\t\t\tframe.postMessage({ name: \"DelegatedAccessTokenResponse\", accessToken: mdh.token, baseUrl: mdh.baseUrl, participantID: participant.participantID }, '*');\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (message.data.name === 'SurveyWindowInitialized') {\n\t\t\t\tdocument.getElementById(mdhSurveyModalId).className += \" loaded\";\n\t\t\t}\n\t\t\telse 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\tmessage.data.type = 'surveyDidFinish';\n\t\t\t\tmdh.triggerEvent(message.data);\n\t\t\t}\n\t\t}, true);\n\n\t\tlet 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}&lang=${mdh.getCurrentLanguage()}'></iframe></div>`;\n\t\tdocument.body.append(surveyModal);\n\t\tdocument.body.className += ' no-scroll';\n\t}\n\n\tprivate handleConnectExternalAccountResponse() {\n\t\tconst params = new URLSearchParams(window.location.search);\n\t\tif (window.opener && params.get('connectExternalAccount') && params.get('messageID') && params.get('success')) {\n\t\t\twindow.opener.postMessage({\n\t\t\t\tname: 'ConnectExternalAccountResponse',\n\t\t\t\tmessageID: parseInt(params.get('messageID')),\n\t\t\t\tsuccess: params.get('success') === 'true'\n\t\t\t}, window.location.origin);\n\t\t\twindow.close();\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tprivate hasEmbeddedModeUrlParameter() {\n\t\tconst embeddedModeKey = '_e';\n\t\tconst params = new URLSearchParams(window.location.search);\n\t\tif (params.has(embeddedModeKey) && params.get(embeddedModeKey) !== 'false') {\n\t\t\treturn true;\n\t\t}\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\nconst mdh = new MyDataHelps();\n\nwindow.MyDataHelps = mdh;\n\n// For backwards compatibility\nwindow.RKStudioClient = {};\nwindow.RKStudioClient.setActionResult = function (data) {\n\twindow.MyDataHelps.setActionResult(data);\n};\n\nexport default mdh;\nexport * from './types';\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","MyDataHelps","startSurvey","surveyName","this","isStandaloneMode","startDelegatedSurvey","baseUrl","encodeURIComponent","window","webkit","messageHandlers","StartParticipantSurvey","messageID","nextMessageID","postMessage","completeStep","answer","JSON","stringify","ResearchKit","CompleteStep","querySurveyAnswers","queryParameters","Object","assign","hasOwnProperty","reduceArrayAndEscape","stepIdentifier","resultIdentifier","before","convertDateToIsoString","after","endpoint","URLSearchParams","toString","mdh","connect","makeRequest","response","validateResponse","json","deleteSurveyResult","resultID","querySurveyTasks","status","queryInboxItems","target","source","key","keys","undefined","assignDefined","type","getInboxItem","id","updateInboxItem","update","startEmbeddedSurvey","linkIdentifier","language","getCurrentLanguage","surveyUrl","startEmbeddedSurveyInternal","openExternalUrl","url","OpenExternalLink","openEmbeddedUrl","OpenEmbeddedLink","showTab","tabKey","ShowTab","openApplication","options","OpenExternalApplication","modal","dismiss","Dismiss","back","PopNavigation","showDashboard","dashboardKey","ShowParticipantDashboard","title","showWebVisualization","visualizationKey","parameters","ShowParticipantWebVisualization","showWebVisualizationPdf","ShowParticipantWebVisualizationPDF","landscape","htmlViewerZoom","showProject","projectCode","ShowProject","code","joinProject","JoinProject","on","eventName","callback","supportedEvents","includes","Error","registeredEventHandlers","push","off","eventHandlerIndex","indexOf","splice","triggerEvent","event","forEach","handler","setActionResult","data","getParticipantInfo","persistParticipantInfo","demographics","customFields","ok","message","catch","error","console","log","getProjectInfo","getDeviceDataPoint","deleteDeviceDataPoint","queryDeviceData","observedBefore","observedAfter","persistDeviceData","deviceDataPoints","queryDeviceDataV2","insertedBefore","insertedAfter","modifiedBefore","modifiedAfter","flattenPropertyShallow","queryDeviceDataV2Aggregate","aggregateFunctions","queryDeviceDataV2DailySleep","getDeviceDataV2AllDataTypes","enabled","getExternalAccountProviders","search","category","pageSize","pageNumber","searchParameters","connectExternalAccount","externalAccountProviderID","connectProviderAccountResponse","success","errorMessage","standaloneMode","standaloneModeFinalRedirectPath","location","href","providerAuthWindow","openNewWindow","split","windowFeatures","width","height","w","h","outerHeight","screenY","outerWidth","screenX","open","queryString","finalRedirectPath","text","redirectUrl","replace","top","ConnectExternalAccount","getExternalAccounts","refreshExternalAccount","accountID","deleteExternalAccount","DeleteProviderAccount","deleteProviderAccountResponse","queryNotifications","sentBefore","sentAfter","queryFitbitDailySummaries","startDate","endDate","queryFitbitSleepLogs","queryAppleHealthActivitySummaries","queryAppleHealthWorkouts","uploadFile","file","fileName","size","name","fetch","preSignedUrl","method","body","headers","queryFiles","getFileDownloadUrl","deleteFile","refreshDelegatedAccessToken","token","refreshTokenPromise","tokenResponse","tokenExpires","Date","now","expires_in","setTimeout","accessTokenRenewalBufferSeconds","GetDelegatedAccessToken","isEmbeddedMode","setParticipantAccessToken","enableStandaloneMode","embeddedMode","setStatusBarStyle","style","SetStatusBarStyle","getDeviceInfo","GetDeviceInfo","deviceInfoResponse","setSupportedLanguages","languages","supportedLanguages","length","i","getStepConfiguration","GetStepConfiguration","stepConfigurationResponse","getSurveyContext","deviceInfo","platform","surveyMode","GetSurveyContext","surveyContextResponse","getCurrentSurveyAnswers","GetCurrentSurveyAnswers","currentSurveyAnswersResponse","setCurrentLanguage","supportedLanguage","getSupportedLanguage","warn","lang","searchParams","has","get","navigator","showGoogleFitSettings","ShowGoogleFitSettings","showHealthConnectSettings","HealthConnectSettings","showHealthConnectPrompt","HealthConnectPrompt","getHealthConnectStatus","HealthConnectStatus","statusResponse","showHealthConnectPhrPrompt","HealthConnectPhrPrompt","getHealthConnectPhrStatus","HealthConnectPhrStatus","requestReview","cooldownDays","RequestReview","trackCustomEvent","getDataCollectionSettings","getDataAvailability","invokeCustomApi","customApi","jsonResponse","toUpperCase","parameterString","constructor","acceptableParentDomains","unsupportedActions","currentMessageID","handleConnectExternalAccountResponse","supportedActions","applicationHost","ancestorOrigins","document","getParentOrigin","acceptableOrigin","origin","sourceURL","URL","k","hostname","endsWith","parent","action","windowHasAnyActions","actions","addActions","addEventListener","validateWindowMessageOrigin","hasEmbeddedModeUrlParameter","makeUrl","apiVersion","access_token","Headers","append","init","find","l","substring","statusText","escapeParam","param","String","Array","isArray","map","elem","join","date","paramAsDate","isNaN","getTime","toISOString","params","property","mdhSurveyModalId","getElementById","listener","frame","contentWindow","className","remove","removeEventListener","surveyModal","createElement","innerHTML","participant","accessToken","participantID","opener","parseInt","close","RKStudioClient"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"MyDataHelps.min.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/MyDataHelps.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","// @ts-ignore : let rollup handle CSS injection\nimport \"../MyDataHelps.css\";\n\nimport * as Model from \"./types\";\nimport { StringMap } from \"./types\";\n\nexport class MyDataHelps {\n\n\tbaseUrl: string = 'https://mydatahelps.org/';\n\tlanguage: string;\n\ttoken: Model.Token;\n\ttokenExpires: number;\n\n\t// Surveys\n\n\tstartSurvey(surveyName: string): void {\n\t\tif (this.isStandaloneMode()) {\n\t\t\tthis.startDelegatedSurvey(`${this.baseUrl}/survey?surveyName=${encodeURIComponent(surveyName)}`);\n\t\t}\n\t\telse if (window.webkit.messageHandlers.StartParticipantSurvey) {\n\t\t\tlet messageID = this.nextMessageID();\n\t\t\twindow.webkit.messageHandlers.StartParticipantSurvey.postMessage({\n\t\t\t\tmessageID: messageID,\n\t\t\t\tsurveyName: surveyName\n\t\t\t});\n\t\t}\n\t}\n\n\tcompleteStep(answer: any): void {\n\t\tif (answer === undefined || answer === null) answer = '';\n\t\tif (typeof answer !== 'string') {\n\t\t\tanswer = JSON.stringify(answer);\n\t\t}\n\t\tif (window.webkit.messageHandlers.ResearchKit) {\n\t\t\twindow.webkit.messageHandlers.ResearchKit.postMessage(answer);\n\t\t}\n\t\telse if (window.webkit.messageHandlers.CompleteStep) {\n\t\t\tlet messageID = this.nextMessageID();\n\t\t\twindow.webkit.messageHandlers.CompleteStep.postMessage({\n\t\t\t\tmessageID: messageID,\n\t\t\t\tanswer: answer\n\t\t\t});\n\t\t}\n\t}\n\n\tquerySurveyAnswers(queryParameters: Model.SurveyAnswersQuery): Promise<Model.SurveyAnswersPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"surveyName\")) {\n\t\t\tqueryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"stepIdentifier\")) {\n\t\t\tqueryParameters.stepIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.stepIdentifier);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"resultIdentifier\")) {\n\t\t\tqueryParameters.resultIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.resultIdentifier);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"answer\")) {\n\t\t\tqueryParameters.answer = MyDataHelps.reduceArrayAndEscape(queryParameters.answer);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"before\")) {\n\t\t\tqueryParameters.before = MyDataHelps.convertDateToIsoString(queryParameters.before);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"after\")) {\n\t\t\tqueryParameters.after = MyDataHelps.convertDateToIsoString(queryParameters.after);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'surveyanswers?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tdeleteSurveyResult(resultID: string): Promise<void> {\n\t\tconst endpoint = 'surveyresults/' + encodeURIComponent(resultID);\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tquerySurveyTasks(queryParameters: Model.SurveyTaskQueryParameters): Promise<Model.SurveyTasksPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"status\")) {\n\t\t\tqueryParameters.status = MyDataHelps.reduceArrayAndEscape(queryParameters.status) as Model.SurveyTaskStatus;\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"surveyName\")) {\n\t\t\tqueryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'surveytasks?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryInboxItems(queryParameters: Model.InboxItemQueryParameters): Promise<Model.InboxItemsPage> {\n\t\tconst assignDefined = (target: any, source: any): any => {\n\t\t\tfor (const key of Object.keys(source)) {\n\t\t\t\tconst value = source[key];\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\ttarget[key] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn target;\n\t\t};\n\n\t\tqueryParameters = assignDefined({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"type\")) {\n\t\t\tqueryParameters.type = MyDataHelps.reduceArrayAndEscape(queryParameters.type) as Model.InboxItemType;\n\t\t}\n\n\t\tif (queryParameters.hasOwnProperty(\"status\")) {\n\t\t\tqueryParameters.status = MyDataHelps.reduceArrayAndEscape(queryParameters.status) as Model.InboxItemStatus;\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'inbox?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetInboxItem(id: Model.Guid): Promise<Model.InboxItem> {\n\t\tconst endpoint = `inbox/${id}`;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tupdateInboxItem(id: Model.Guid, update: Model.InboxItemUpdate): Promise<Model.InboxItemUpdateResult> {\n\t\tconst endpoint = `inbox/${id}/${update}`;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'PUT', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tstartEmbeddedSurvey(linkIdentifier: string, surveyName: string, language: string): Promise<any> {\n\t\tif (!language) {\n\t\t\tlanguage = this.getCurrentLanguage();\n\t\t}\n\t\tlet surveyUrl = this.baseUrl + \"mydatahelps/\" + linkIdentifier + '/surveylink/' + surveyName + \"?lang=\" + language;\n\t\treturn this.startEmbeddedSurveyInternal(surveyUrl);\n\t}\n\n\t// Navigation\n\n\topenExternalUrl(url: string): void {\n\t\tif (window.webkit.messageHandlers.OpenExternalLink) {\n\t\t\twindow.webkit.messageHandlers.OpenExternalLink.postMessage(url);\n\t\t}\n\t}\n\n\topenEmbeddedUrl(url: string): void {\n\t\tif (window.webkit.messageHandlers.OpenEmbeddedLink) {\n\t\t\twindow.webkit.messageHandlers.OpenEmbeddedLink.postMessage(url);\n\t\t}\n\t}\n\n\tshowTab(tabKey: string): void {\n\t\tif (window.webkit.messageHandlers.ShowTab) {\n\t\t\twindow.webkit.messageHandlers.ShowTab.postMessage(tabKey);\n\t\t}\n\t}\n\n\topenApplication(url: string, options?: Model.OpenApplicationOptions): void {\n\t\tif (window.webkit.messageHandlers.OpenExternalApplication) {\n\t\t\tlet messageID = this.nextMessageID();\n\t\t\twindow.webkit.messageHandlers.OpenExternalApplication.postMessage({\n\t\t\t\tmessageID: messageID,\n\t\t\t\turl: url,\n\t\t\t\tmodal: !!(options && options.modal)\n\t\t\t});\n\t\t}\n\t}\n\n\tdismiss(): void {\n\t\tif (window.webkit.messageHandlers.Dismiss) {\n\t\t\twindow.webkit.messageHandlers.Dismiss.postMessage({});\n\t\t}\n\t}\n\n\tback(): void {\n\t\tif (window.webkit.messageHandlers.PopNavigation) {\n\t\t\twindow.webkit.messageHandlers.PopNavigation.postMessage({});\n\t\t}\n\t}\n\n\tshowDashboard(dashboardKey: string, options?: Model.ShowDashboardOptions): void {\n\t\tif (window.webkit.messageHandlers.ShowParticipantDashboard) {\n\t\t\twindow.webkit.messageHandlers.ShowParticipantDashboard.postMessage({\n\t\t\t\tdashboardKey: dashboardKey,\n\t\t\t\tmodal: !!(options && options.modal),\n\t\t\t\ttitle: options && options.title ? options.title : undefined\n\t\t\t});\n\t\t}\n\t}\n\n\tshowWebVisualization(visualizationKey: string, parameters: object, options: Model.ShowWebVisualizationOptions): void {\n\t\tif (window.webkit.messageHandlers.ShowParticipantWebVisualization) {\n\t\t\twindow.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({\n\t\t\t\tvisualizationKey: visualizationKey,\n\t\t\t\tparameters: parameters,\n\t\t\t\tmodal: !!(options && options.modal),\n\t\t\t\ttitle: options && options.title ? options.title : undefined\n\t\t\t});\n\t\t}\n\t}\n\n\tshowWebVisualizationPdf(visualizationKey: string, parameters: object, options: Model.ShowWebVisualizationPdfOptions): void {\n\t\tif (window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF) {\n\t\t\twindow.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({\n\t\t\t\tvisualizationKey: visualizationKey,\n\t\t\t\tparameters: parameters,\n\t\t\t\tlandscape: !!(options && options.landscape),\n\t\t\t\thtmlViewerZoom: options && options.htmlViewerZoom\n\t\t\t});\n\t\t}\n\t}\n\n\tshowProject(projectCode: string): void {\n\t\tif (window.webkit.messageHandlers.ShowProject) {\n\t\t\twindow.webkit.messageHandlers.ShowProject.postMessage({ code: projectCode });\n\t\t}\n\t}\n\n\tjoinProject(projectCode: string): void {\n\t\tif (window.webkit.messageHandlers.JoinProject) {\n\t\t\twindow.webkit.messageHandlers.JoinProject.postMessage({ code: projectCode });\n\t\t}\n\t}\n\n\t//Events\n\n\ton(eventName: Model.EventName, callback: (EventData) => void): void {\n\n\t\tif (!this.supportedEvents.includes(eventName)) {\n\t\t\tthrow new Error(eventName + \" is not a supported event type.\");\n\t\t}\n\n\t\tif (!this.registeredEventHandlers[eventName]) {\n\t\t\tthis.registeredEventHandlers[eventName] = [];\n\t\t}\n\n\t\tthis.registeredEventHandlers[eventName].push(callback);\n\t}\n\n\toff(eventName: Model.EventName, callback: (EventData) => void): void {\n\n\t\tif (!this.supportedEvents.includes(eventName)) {\n\t\t\tthrow new Error(eventName + \" is not a supported event type.\");\n\t\t}\n\n\t\tif (!this.registeredEventHandlers[eventName]) return;\n\n\t\tlet eventHandlerIndex = this.registeredEventHandlers[eventName].indexOf(callback);\n\n\t\tif (eventHandlerIndex !== -1) {\n\t\t\tthis.registeredEventHandlers[eventName].splice(eventHandlerIndex, 1);\n\t\t}\n\t}\n\n\ttriggerEvent(event: Model.EventData): void {\n\t\tlet eventName = event.type;\n\t\tif (this.supportedEvents.includes(eventName) && this.registeredEventHandlers[eventName]) {\n\t\t\tthis.registeredEventHandlers[eventName].forEach(function (handler) {\n\t\t\t\thandler(event);\n\t\t\t});\n\t\t}\n\t}\n\n\tsetActionResult(data: Model.EventData): void {\n\t\tif (Object.prototype.hasOwnProperty.call(this.messageHandlers, data.messageID) &&\n\t\t\ttypeof this.messageHandlers[data.messageID] === 'function') {\n\t\t\tthis.messageHandlers[data.messageID](data);\n\t\t} else {\n\t\t\tconsole.error(`Invalid messageID: ${data.messageID}`);\n\t\t}\n\t}\n\n\t// Participant Info\n\n\tgetParticipantInfo(): Promise<Model.ParticipantInfo> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'participant';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tpersistParticipantInfo(demographics: Partial<Model.ParticipantDemographics> | undefined, customFields: StringMap): Promise<Model.ParticipantInfo> {\n\t\tconst endpoint = 'participant';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'PUT', { demographics, customFields });\n\t\t\t})\n\t\t\t.then(async function (response) {\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tvar errorJson = await response.json();\n\t\t\t\t\tthrow errorJson.message;\n\t\t\t\t}\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.catch(function (error) {\n\t\t\t\tconsole.log(\"Unable to persist participant: \" + error);\n\t\t\t});\n\t}\n\n\tgetProjectInfo(): Promise<Model.ProjectInfo> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'project';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// Device Data\n\n\tgetDeviceDataPoint(id: Model.Guid): Promise<Model.DeviceDataPoint> {\n\t\tconst endpoint = 'devicedata/' + id;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tdeleteDeviceDataPoint(id: Model.Guid): Promise<void> {\n\t\tconst endpoint = 'devicedata/' + id;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tqueryDeviceData(queryParameters: Model.DeviceDataPointQuery): Promise<Model.DeviceDataPointsPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"type\")) {\n\t\t\tqueryParameters.type = MyDataHelps.reduceArrayAndEscape(queryParameters.type);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tpersistDeviceData(deviceDataPoints: Model.PersistableDeviceDataPoint[]): Promise<void> {\n\t\tconst endpoint = 'devicedata';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', deviceDataPoints);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\t// Device Data V2\n\n\tqueryDeviceDataV2(queryParameters: Model.DeviceDataV2Query): Promise<Model.DeviceDataV2Page> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedBefore\")) {\n\t\t\tqueryParameters.insertedBefore = MyDataHelps.convertDateToIsoString(queryParameters.insertedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedAfter\")) {\n\t\t\tqueryParameters.insertedAfter = MyDataHelps.convertDateToIsoString(queryParameters.insertedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedBefore\")) {\n\t\t\tqueryParameters.modifiedBefore = MyDataHelps.convertDateToIsoString(queryParameters.modifiedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedAfter\")) {\n\t\t\tqueryParameters.modifiedAfter = MyDataHelps.convertDateToIsoString(queryParameters.modifiedAfter);\n\t\t}\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"dataSource\");\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"properties\");\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryDeviceDataV2Aggregate(queryParameters: Model.DeviceDataV2AggregateQuery): Promise<Model.DeviceDataV2AggregatePage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"aggregateFunctions\")) {\n\t\t\tqueryParameters.aggregateFunctions = MyDataHelps.reduceArrayAndEscape(queryParameters.aggregateFunctions);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedBefore\")) {\n\t\t\tqueryParameters.insertedBefore = MyDataHelps.convertDateToIsoString(queryParameters.insertedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedAfter\")) {\n\t\t\tqueryParameters.insertedAfter = MyDataHelps.convertDateToIsoString(queryParameters.insertedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedBefore\")) {\n\t\t\tqueryParameters.modifiedBefore = MyDataHelps.convertDateToIsoString(queryParameters.modifiedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedAfter\")) {\n\t\t\tqueryParameters.modifiedAfter = MyDataHelps.convertDateToIsoString(queryParameters.modifiedAfter);\n\t\t}\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"dataSource\");\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"properties\");\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata/aggregate?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryDeviceDataV2DailySleep(queryParameters: Model.DeviceDataV2AggregateQuery): Promise<Model.DeviceDataV2DailySleepPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"observedBefore\")) {\n\t\t\tqueryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"observedAfter\")) {\n\t\t\tqueryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedBefore\")) {\n\t\t\tqueryParameters.insertedBefore = MyDataHelps.convertDateToIsoString(queryParameters.insertedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"insertedAfter\")) {\n\t\t\tqueryParameters.insertedAfter = MyDataHelps.convertDateToIsoString(queryParameters.insertedAfter);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedBefore\")) {\n\t\t\tqueryParameters.modifiedBefore = MyDataHelps.convertDateToIsoString(queryParameters.modifiedBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"modifiedAfter\")) {\n\t\t\tqueryParameters.modifiedAfter = MyDataHelps.convertDateToIsoString(queryParameters.modifiedAfter);\n\t\t}\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"dataSource\");\n\t\tMyDataHelps.flattenPropertyShallow(queryParameters, \"properties\");\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'devicedata/aggregate/dailysleep?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetDeviceDataV2AllDataTypes(enabled?: boolean): Promise<Model.SupportedDeviceDataV2DataType[]> {\n\t\tconst queryParameters: Record<string, string> = {};\n\n\t\tif (enabled !== undefined) {\n\t\t\tqueryParameters['enabled'] = enabled.toString();\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters).toString();\n\t\tconst endpoint = `devicedata/allDataTypes?${queryString}`;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null, 'v2');\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// External Accounts\n\n\tgetExternalAccountProviders(search: string | null, category: string | null, pageSize: number, pageNumber: number): Promise<Model.ExternalAccountProvidersPage> {\n\t\tlet searchParameters: any = {};\n\t\tif (!!search) searchParameters.search = search;\n\t\tif (!!category) searchParameters.category = category;\n\t\tif (!!pageSize) searchParameters.pageSize = pageSize;\n\t\tif (!!pageNumber) searchParameters.pageNumber = pageNumber;\n\n\t\tconst queryString = new URLSearchParams(searchParameters).toString();\n\t\tconst endpoint = 'externalaccountproviders?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tconnectExternalAccount(externalAccountProviderID: number, options?: Model.ConnectExternalAccountOptions): Promise<void> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\n\t\t\tconst messageID = mdh.nextMessageID();\n\t\t\tmdh.messageHandlers[messageID] = function (connectProviderAccountResponse) {\n\t\t\t\tif (connectProviderAccountResponse && connectProviderAccountResponse.success) {\n\t\t\t\t\tresolve();\n\t\t\t\t} else {\n\t\t\t\t\treject(connectProviderAccountResponse.errorMessage)\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (this.standaloneMode) {\n\t\t\t\tlet standaloneModeFinalRedirectPath = options?.standaloneModeFinalRedirectPath || window.location.href;\n\t\t\t\tconst mdh = this;\n\n\t\t\t\t// DEV: Safari blocks popups in AJAX responses. Work-around is to open a blank window before the request and set the URL later\n\t\t\t\tlet providerAuthWindow;\n\t\t\t\tif (options?.openNewWindow) {\n\t\t\t\t\tstandaloneModeFinalRedirectPath = `${standaloneModeFinalRedirectPath.split('?')[0]}?connectExternalAccount=true&messageID=${messageID}&success=%SUCCESSVALUE%`;\n\t\t\t\t\tlet windowFeatures = null;\n\t\t\t\t\tif (options?.width && options?.height) {\n\t\t\t\t\t\tconst w = options?.width;\n\t\t\t\t\t\tconst h = options?.height;\n\t\t\t\t\t\tconst y = window.outerHeight / 2 + window.screenY - (h / 2);\n\t\t\t\t\t\tconst x = window.outerWidth / 2 + window.screenX - (w / 2);\n\t\t\t\t\t\twindowFeatures = \"width=\" + w + \",height=\" + h + \",top=\" + y + \",left=\" + x;\n\t\t\t\t\t}\n\t\t\t\t\tproviderAuthWindow = window.open(`${this.baseUrl}home/loading`, 'providerauth', windowFeatures);\n\t\t\t\t}\n\n\t\t\t\tconst searchParameters = { finalRedirectPath: standaloneModeFinalRedirectPath };\n\t\t\t\tconst queryString = new URLSearchParams(searchParameters).toString();\n\t\t\t\tconst endpoint = \"externalaccountproviders/\" + externalAccountProviderID + \"/connect?\" + queryString;\n\n\t\t\t\tthis\n\t\t\t\t\t.connect()\n\t\t\t\t\t.then(function () {\n\t\t\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', null);\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (response) {\n\t\t\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (response) {\n\t\t\t\t\t\treturn response.text();\n\t\t\t\t\t})\n\t\t\t\t\t.then(function (redirectUrl) {\n\t\t\t\t\t\tif (providerAuthWindow) {\n\t\t\t\t\t\t\tproviderAuthWindow.location = redirectUrl.replace(/['\"]+/g, '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twindow.top.location = redirectUrl.replace(/['\"]+/g, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t});\n\t\t\t} else if (window.webkit.messageHandlers.ConnectExternalAccount) {\n\t\t\t\twindow.webkit.messageHandlers.ConnectExternalAccount.postMessage({\n\t\t\t\t\texternalAccountProviderID: externalAccountProviderID,\n\t\t\t\t\tmessageID: messageID,\n\t\t\t\t\t...options\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tgetExternalAccounts(): Promise<Model.ExternalAccount[]> {\n\t\tconst endpoint = 'externalaccounts';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\trefreshExternalAccount(accountID: number): Promise<void> {\n\t\tconst endpoint = 'externalaccounts/refresh/' + accountID;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tdeleteExternalAccount(accountID: number): Promise<any> {\n\t\tconst endpoint = 'externalaccounts/delete/' + encodeURIComponent(accountID);\n\t\tconst mdh = this;\n\n\t\tif (this.isStandaloneMode()) {\n\t\t\treturn this\n\t\t\t\t.connect()\n\t\t\t\t.then(function () {\n\t\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t\t})\n\t\t\t\t.then(function (response) {\n\t\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t\t});\n\t\t}\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (window.webkit.messageHandlers.DeleteProviderAccount) {\n\t\t\t\tconst messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (deleteProviderAccountResponse) {\n\t\t\t\t\tif (!deleteProviderAccountResponse.success) {\n\t\t\t\t\t\treject(deleteProviderAccountResponse)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(deleteProviderAccountResponse);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.DeleteProviderAccount.postMessage({\n\t\t\t\t\tmessageID: messageID,\n\t\t\t\t\taccountID: accountID\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\t// Notifications\n\n\tqueryNotifications(queryParameters: Model.NotificationQueryParameters): Promise<Model.NotificationsPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"sentBefore\")) {\n\t\t\tqueryParameters.sentBefore = MyDataHelps.convertDateToIsoString(queryParameters.sentBefore);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"sentAfter\")) {\n\t\t\tqueryParameters.sentAfter = MyDataHelps.convertDateToIsoString(queryParameters.sentAfter);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'notifications?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// Fitbit\n\n\tqueryFitbitDailySummaries(queryParameters: Model.FitbitQuery): Promise<Model.FitbitDailySummariesPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'fitbit/dailySummaries?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryFitbitSleepLogs(queryParameters: Model.FitbitQuery): Promise<Model.FitbitSleepLogsPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'fitbit/sleepLogs?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// AppleHealth\n\n\tqueryAppleHealthActivitySummaries(queryParameters: Model.AppleHealthQuery): Promise<Model.AppleHealthActivitySummaryPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'appleHealth/activitySummaries?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tqueryAppleHealthWorkouts(queryParameters: Model.AppleHealthQuery): Promise<Model.AppleHealthWorkoutPage> {\n\t\tqueryParameters = Object.assign({}, queryParameters);\n\n\t\tif (queryParameters.hasOwnProperty(\"startDate\")) {\n\t\t\tqueryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n\t\t}\n\t\tif (queryParameters.hasOwnProperty(\"endDate\")) {\n\t\t\tqueryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n\t\t}\n\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'appleHealth/workouts?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\t// Files\n\n\tuploadFile(file: File, category: string, fileName?: string): Promise<void> {\n\n\t\tif (file.size > 200 * 1024 * 1024) {\n\t\t\tthrow new Error(\"File size exceeds the maximum allowed size of 200MB.\");\n\t\t}\n\n\t\tconst mdh = this;\n\t\tconst endpoint = 'files?category=' + category + '&fileName=' + encodeURIComponent(fileName ?? file.name);\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t})\n\t\t\t.then(function (json) {\n\t\t\t\treturn fetch(json.preSignedUrl, {\n\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\tbody: file,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Content-Type': file.type,\n\t\t\t\t\t\t'x-amz-server-side-encryption': 'AES256'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tqueryFiles(queryParameters: Model.UploadedFileQuery): Promise<Model.UploadedFilesPage> {\n\t\tconst queryString = new URLSearchParams(queryParameters as Record<string, any>).toString();\n\t\tconst endpoint = 'files?' + queryString;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetFileDownloadUrl(key: string): Promise<Model.DownloadedFile> {\n\n\t\tif (!key) throw new Error(\"Please specify the key of the file to download.\");\n\n\t\tconst endpoint = 'files/download?key=' + key;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tdeleteFile(key: string): Promise<void> {\n\n\t\tif (!key) throw new Error(\"Please specify the key of the file to delete.\");\n\n\t\tconst endpoint = 'files?key=' + key;\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'DELETE', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\t// Authorization\n\n\tconnect(): Promise<void> {\n\t\tconst mdh = this;\n\t\tlet refreshDelegatedAccessToken = function () {\n\t\t\tmdh.token = null;\n\n\t\t\tmdh.refreshTokenPromise = new Promise(function (resolve, reject) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (tokenResponse) {\n\t\t\t\t\tif (tokenResponse.success) {\n\t\t\t\t\t\tmdh.tokenExpires = Date.now() + (tokenResponse.data.expires_in * 1000);\n\t\t\t\t\t\tmdh.token = tokenResponse.data;\n\t\t\t\t\t\tmdh.baseUrl = tokenResponse.baseUrl;\n\t\t\t\t\t\tsetTimeout(refreshDelegatedAccessToken, ((tokenResponse.data.expires_in - mdh.accessTokenRenewalBufferSeconds) * 1000));\n\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmdh.token = null;\n\t\t\t\t\t\treject(tokenResponse.message);\n\t\t\t\t\t}\n\t\t\t\t\tmdh.messageHandlers[messageID] = null;\n\t\t\t\t\tmdh.refreshTokenPromise = null;\n\t\t\t\t};\n\n\t\t\t\twindow.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({ messageID: messageID });\n\t\t\t});\n\t\t};\n\n\t\tif (this.token && Date.now() < this.tokenExpires) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tif (this.isStandaloneMode() && !this.isEmbeddedMode()) {\n\t\t\tlet error = this.token ? \"access token is expired or invalid\" : \"access token must be explicitly provided using the setParticipantAccess method\";\n\t\t\tconsole.log(error);\n\t\t\treturn Promise.reject(error);\n\t\t}\n\n\t\tif (!this.refreshTokenPromise) {\n\t\t\trefreshDelegatedAccessToken();\n\t\t}\n\n\t\t// Re-use promise if refresh already in progress\n\t\treturn this.refreshTokenPromise;\n\t}\n\n\tsetParticipantAccessToken(token: Model.Token, baseUrl?: string): void {\n\t\tthis.enableStandaloneMode();\n\t\tthis.token = token;\n\t\tif (baseUrl) {\n\t\t\tthis.baseUrl = baseUrl;\n\t\t}\n\t\tthis.tokenExpires = Date.now() + (this.token.expires_in * 1000);\n\t\tconst mdh = this;\n\t\tsetTimeout(function () {\n\t\t\tmdh.triggerEvent({ type: \"tokenWillExpire\" });\n\t\t}, ((this.token.expires_in - this.accessTokenRenewalBufferSeconds) * 1000));\n\t}\n\n\t// Miscellaneous\n\n\tisStandaloneMode() {\n\t\treturn this.standaloneMode;\n\t}\n\n\tisEmbeddedMode() {\n\t\treturn this.embeddedMode;\n\t}\n\n\tenableStandaloneMode(embeddedMode: boolean = false, baseUrl?: string) {\n\t\tthis.standaloneMode = true;\n\t\tthis.embeddedMode = embeddedMode;\n\t\tif (baseUrl) {\n\t\t\tthis.baseUrl = baseUrl;\n\t\t}\n\t\tif (window.webkit) {\n\t\t\twindow.webkit.messageHandlers = embeddedMode ? {\n\t\t\t\tGetDelegatedAccessToken: window.webkit.messageHandlers.GetDelegatedAccessToken,\n\t\t\t\tOpenExternalLink: window.webkit.messageHandlers.OpenExternalLink,\n\t\t\t\tOpenEmbeddedLink: window.webkit.messageHandlers.OpenEmbeddedLink,\n\t\t\t\tOpenExternalApplication: window.webkit.messageHandlers.OpenExternalApplication,\n\t\t\t\tPopNavigation: window.webkit.messageHandlers.PopNavigation,\n\t\t\t\tDismiss: window.webkit.messageHandlers.Dismiss,\n\t\t\t} : {};\n\t\t}\n\t}\n\n\tsetStatusBarStyle(style: Model.StatusBarStyle): void {\n\t\tif (window.webkit.messageHandlers.SetStatusBarStyle) {\n\t\t\twindow.webkit.messageHandlers.SetStatusBarStyle.postMessage({ style: style });\n\t\t}\n\t}\n\n\tgetDeviceInfo(): Promise<Model.DeviceInfo> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.DeviceInfo>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.GetDeviceInfo) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (deviceInfoResponse) {\n\t\t\t\t\tresolve(deviceInfoResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.GetDeviceInfo.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tsetSupportedLanguages(languages: string[]) {\n\t\tthis.supportedLanguages.length = 0;\n\t\tfor (let i = 0; i < languages.length; i++) {\n\t\t\tthis.supportedLanguages.push(languages[i].replace(\"_\", \"-\"));\n\t\t}\n\t}\n\n\tgetStepConfiguration(): Promise<Model.StepConfiguration> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.StepConfiguration>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.GetStepConfiguration) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (stepConfigurationResponse) {\n\t\t\t\t\tresolve(stepConfigurationResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.GetStepConfiguration.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tgetSurveyContext(): Promise<Model.SurveyContext> {\n\t\tlet mdh = this;\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t}\n\t\t\tmdh.getDeviceInfo().then(function (deviceInfo) {\n\t\t\t\tif (deviceInfo.platform !== \"Web\") {\n\t\t\t\t\tresolve({ surveyMode: \"Survey\" });\n\t\t\t\t}\n\t\t\t\telse if (window.webkit.messageHandlers.GetSurveyContext) {\n\t\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\t\tmdh.messageHandlers[messageID] = function (surveyContextResponse) {\n\t\t\t\t\t\tresolve(surveyContextResponse.data);\n\t\t\t\t\t};\n\t\t\t\t\twindow.webkit.messageHandlers.GetSurveyContext.postMessage({ messageID: messageID });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject();\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\treject();\n\t\t\t});\n\t\t});\n\t}\n\n\tgetCurrentSurveyAnswers(): Promise<Model.CurrentSurveyAnswer[]> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.CurrentSurveyAnswer[]>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.GetCurrentSurveyAnswers) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (currentSurveyAnswersResponse) {\n\t\t\t\t\tresolve(currentSurveyAnswersResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.GetCurrentSurveyAnswers.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tsetCurrentLanguage(language: string) {\n\t\tif (language) {\n\t\t\tlet supportedLanguage = this.getSupportedLanguage(language);\n\t\t\tif (supportedLanguage) {\n\t\t\t\tthis.language = supportedLanguage;\n\t\t\t} else {\n\t\t\t\tconsole.warn(`language ${language} not supported`);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.language = language;\n\t\t}\n\t}\n\n\tgetCurrentLanguage(): string {\n\t\tlet searchParams = new URLSearchParams(window.location.search);\n\t\tlet lang;\n\t\tif (searchParams.has(\"lang\")) {\n\t\t\tlang = this.getSupportedLanguage(searchParams.get(\"lang\"));\n\t\t\tif (lang) {\n\t\t\t\treturn lang;\n\t\t\t} else {\n\t\t\t\tconsole.warn(`language ${searchParams.get(\"lang\")} not supported`);\n\t\t\t}\n\t\t}\n\t\treturn this.language || navigator.language;\n\t}\n\n\tshowGoogleFitSettings(): void {\n\t\tif (window.webkit.messageHandlers.ShowGoogleFitSettings) {\n\t\t\twindow.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({});\n\t\t}\n\t}\n\n\tshowHealthConnectSettings(): void {\n\t\tif (window.webkit.messageHandlers.HealthConnectSettings) {\n\t\t\twindow.webkit.messageHandlers.HealthConnectSettings.postMessage({});\n\t\t}\n\t}\n\n\tshowHealthConnectPrompt(): void {\n\t\tif (window.webkit.messageHandlers.HealthConnectPrompt) {\n\t\t\twindow.webkit.messageHandlers.HealthConnectPrompt.postMessage({});\n\t\t}\n\t}\n\n\tgetHealthConnectStatus(): Promise<Model.HealthConnectStatus> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.HealthConnectStatus>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.HealthConnectStatus) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (statusResponse) {\n\t\t\t\t\tresolve(statusResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.HealthConnectStatus.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\tshowHealthConnectPhrPrompt(): void {\n\t\tif (window.webkit.messageHandlers.HealthConnectPhrPrompt) {\n\t\t\twindow.webkit.messageHandlers.HealthConnectPhrPrompt.postMessage({});\n\t\t}\n\t}\n\n\tgetHealthConnectPhrStatus(): Promise<Model.HealthConnectPhrStatus> {\n\t\tlet mdh = this;\n\t\treturn new Promise<Model.HealthConnectPhrStatus>(function (resolve, reject) {\n\t\t\tif (mdh.isStandaloneMode()) {\n\t\t\t\tresolve(null);\n\t\t\t} else if (window.webkit.messageHandlers.HealthConnectPhrStatus) {\n\t\t\t\tlet messageID = mdh.nextMessageID();\n\t\t\t\tmdh.messageHandlers[messageID] = function (statusResponse) {\n\t\t\t\t\tresolve(statusResponse.data);\n\t\t\t\t};\n\t\t\t\twindow.webkit.messageHandlers.HealthConnectPhrStatus.postMessage({ messageID: messageID });\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\trequestReview(cooldownDays?: number): void {\n\t\tif (window.webkit.messageHandlers.RequestReview) {\n\t\t\twindow.webkit.messageHandlers.RequestReview.postMessage({ cooldownDays: cooldownDays });\n\t\t}\n\t}\n\n\ttrackCustomEvent(event: Model.CustomEventInfo): Promise<void> {\n\t\tconst endpoint = 'customevents';\n\t\tconst mdh = this;\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'POST', event);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function () {\n\t\t\t\treturn;\n\t\t\t});\n\t}\n\n\tgetDataCollectionSettings(): Promise<Model.DataCollectionSettings> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'datacollectionsettings';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tgetDataAvailability(): Promise<Model.DataAvailability> {\n\t\tconst mdh = this;\n\t\tconst endpoint = 'dataavailability';\n\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, 'GET', null);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t});\n\t}\n\n\tinvokeCustomApi(customApi: string, method: string, queryParameters: string | string[][] | Record<string, string> | URLSearchParams | null | undefined, jsonResponse: boolean): Promise<any> {\n\t\tif (customApi.includes('?')) {\n\t\t\tthrow new Error(\"Cannot include query parameters directly in the \\\"customApi\\\" string. Provide as an argument for \\\"queryParameters\\\" instead.\");\n\t\t}\n\n\t\tlet endpoint = 'custom/' + customApi;\n\t\tmethod = method.toUpperCase();\n\t\tif (queryParameters !== null && queryParameters !== undefined && (method === 'GET' || method === 'DELETE')) {\n\t\t\tlet parameterString = new URLSearchParams(queryParameters).toString();\n\t\t\tendpoint += \"?\" + parameterString;\n\t\t\tqueryParameters = null;\n\t\t}\n\n\t\tconst mdh = this;\n\t\treturn this\n\t\t\t.connect()\n\t\t\t.then(function () {\n\t\t\t\treturn mdh.makeRequest(endpoint, method, queryParameters);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn MyDataHelps.validateResponse(response);\n\t\t\t})\n\t\t\t.then(function (response) {\n\t\t\t\treturn jsonResponse ? response.json() : undefined;\n\t\t\t});\n\t}\n\n\tconstructor() {\n\t\tif (this.handleConnectExternalAccountResponse()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet mdh = this;\n\t\tlet applicationHost = getParentOrigin();\n\t\tlet supportedActions;\n\n\t\tfunction getParentOrigin(): string {\n\t\t\tlet ancestorOrigins = document.location.ancestorOrigins;\n\t\t\tif (ancestorOrigins && ancestorOrigins[0]) {\n\t\t\t\treturn ancestorOrigins[0];\n\t\t\t}\n\n\t\t\treturn '*';\n\t\t}\n\n\t\tfunction acceptableOrigin(origin) {\n\t\t\tif (origin === '*') return true;\n\n\t\t\tlet sourceURL = new URL(origin);\n\t\t\tfor (let k = 0; k < mdh.acceptableParentDomains.length; k++) {\n\t\t\t\tif (sourceURL.hostname === mdh.acceptableParentDomains[k] || sourceURL.hostname.endsWith(\".\" + mdh.acceptableParentDomains[k])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction validateWindowMessageOrigin(message) {\n\t\t\tif (mdh.isStandaloneMode() && message.origin === window.location.origin) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (applicationHost === \"*\") {\n\t\t\t\treturn acceptableOrigin(message.origin);\n\t\t\t}\n\n\t\t\treturn message.origin === applicationHost;\n\t\t}\n\n\t\tfunction addActions(actions) {\n\t\t\tfor (let action in actions) {\n\t\t\t\tif (!window.webkit.messageHandlers[action]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\twindow.webkit.messageHandlers[action] = { postMessage: actions[action] };\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.log(\"Unable to add missing actions on this platform: \" + error);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction receiveWindowMessage(message) {\n\t\t\tif (!validateWindowMessageOrigin(message)) {\n\t\t\t\t// todo: this can generate tons of console errors when hosting some apps within webappstep (youtube content, for example )\n\t\t\t\tconsole.error(\"message.origin '\" + message.origin + \"' is not allowed.\");\n\t\t\t\tthrow \"message.origin '\" + message.origin + \"' is not allowed.\";\n\t\t\t}\n\n\t\t\tif (message.data.messageID) {\n\t\t\t\tmdh.setActionResult(message.data);\n\t\t\t} else {\n\t\t\t\tmdh.triggerEvent(message.data);\n\t\t\t}\n\t\t}\n\n\t\tfunction windowHasAnyActions() {\n\t\t\tfor (let action in supportedActions) {\n\t\t\t\tif (window.webkit.messageHandlers[action]) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let action in mdh.unsupportedActions) {\n\t\t\t\tif (window.webkit.messageHandlers[mdh.unsupportedActions[action]]) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!acceptableOrigin(applicationHost)) {\n\t\t\tconsole.log(\"Detected unsupported parent origin domain.\");\n\t\t}\n\n\t\tif (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.ResearchKit) {\n\t\t\t// Presence of ResearchKit handler indicates the SDK is being used from within a WebViewStep. For pre-SDK backwards compatiblity,\n\t\t\t// WebViewStep setup registers the following handlers: GetDeviceInfo, DeleteProviderAccount, ConnectExternalAccount\n\t\t\t// ShowParticipantWebVisualizationPDF, ResearchKit\n\t\t\tsupportedActions = {\n\t\t\t\t\"GetDelegatedAccessToken\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetDelegatedAccessToken',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenExternalLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'OpenExternalUrl',\n\t\t\t\t\t\turl: data\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenEmbeddedLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'OpenEmbeddedUrl',\n\t\t\t\t\t\turl: data\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetCurrentSurveyAnswers\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetCurrentSurveyAnswers',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetStepConfiguration\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetStepConfiguration',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetSurveyContext\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetSurveyContext',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost);\n\t\t\t\t},\n\t\t\t\t\"CompleteStep\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'CompleteStep',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\tanswer: data.answer\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\tsupportedActions = {\n\t\t\t\t\"GetDelegatedAccessToken\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetDelegatedAccessToken',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetDeviceInfo\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"StartParticipantSurvey\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'StartParticipantSurvey',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\tsurveyName: data.surveyName\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenExternalLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'OpenExternalUrl', url: data }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenEmbeddedLink\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'OpenEmbeddedUrl', url: data }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"OpenExternalApplication\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'OpenApplication',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\turl: data.url,\n\t\t\t\t\t\tmodal: data.modal\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"Dismiss\": function () {\n\t\t\t\t\twindow.parent.postMessage({ name: 'Dismiss' }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"PopNavigation\": function () {\n\t\t\t\t\twindow.parent.postMessage({ name: 'Back' }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowTab\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'ShowTab', tabKey: data }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowParticipantDashboard\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ShowParticipantDashboard',\n\t\t\t\t\t\tdashboardKey: data.dashboardKey,\n\t\t\t\t\t\tmodal: data.modal\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowParticipantWebVisualization\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ShowParticipantWebVisualization',\n\t\t\t\t\t\tvisualizationKey: data.visualizationKey,\n\t\t\t\t\t\tparameters: data.parameters,\n\t\t\t\t\t\tmodal: data.modal\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowParticipantWebVisualizationPDF\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ShowParticipantWebVisualizationPDF',\n\t\t\t\t\t\tvisualizationKey: data.visualizationKey,\n\t\t\t\t\t\tparameters: data.parameters,\n\t\t\t\t\t\tmodal: data.modal,\n\t\t\t\t\t\tlandscape: data.landscape,\n\t\t\t\t\t\thtmlViewerZoom: data.htmlViewerZoom\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"DeleteProviderAccount\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'DeleteProviderAccount',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\taccountID: data.accountID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ConnectExternalAccount\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'ConnectExternalAccount',\n\t\t\t\t\t\texternalAccountProviderID: data.externalAccountProviderID,\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\topenNewWindow: data.openNewWindow,\n\t\t\t\t\t\twidth: data.width,\n\t\t\t\t\t\theight: data.height\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"ShowProject\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'ShowProject', code: data.code }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"JoinProject\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({ name: 'JoinProject', code: data.code }, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetCurrentSurveyAnswers\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetCurrentSurveyAnswers',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"GetStepConfiguration\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'GetStepConfiguration',\n\t\t\t\t\t\tmessageID: data.messageID\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t},\n\t\t\t\t\"CompleteStep\": function (data) {\n\t\t\t\t\twindow.parent.postMessage({\n\t\t\t\t\t\tname: 'CompleteStep',\n\t\t\t\t\t\tmessageID: data.messageID,\n\t\t\t\t\t\tanswer: data.answer\n\t\t\t\t\t}, applicationHost)\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif (!window.webkit || !window.webkit.messageHandlers || !windowHasAnyActions()) {\n\t\t\twindow.webkit = {\n\t\t\t\tmessageHandlers: {}\n\t\t\t};\n\t\t}\n\n\t\taddActions(supportedActions);\n\n\t\twindow.addEventListener(\"message\", receiveWindowMessage, false);\n\n\t\tif (this.hasEmbeddedModeUrlParameter()) {\n\t\t\tmdh.enableStandaloneMode(true);\n\t\t}\n\t}\n\n\tprivate readonly acceptableParentDomains = [\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\t'mydatahelps.dev'\n\t];\n\n\tprivate readonly accessTokenRenewalBufferSeconds = 120;\n\tprivate readonly unsupportedActions = [\"SetHeight\", \"ResearchKit\"];\n\tprivate readonly supportedEvents = [\"surveyDidFinish\", \"applicationDidBecomeVisible\", \"externalAccountSyncComplete\", \"tokenWillExpire\", \"healthConnectSyncComplete\", \"healthConnectPhrSyncComplete\"];\n\tprivate readonly supportedLanguages = [];\n\n\tprivate currentMessageID = 1;\n\tprivate messageHandlers = [];\n\tprivate registeredEventHandlers = {};\n\tprivate refreshTokenPromise = null;\n\tprivate standaloneMode = false;\n\tprivate embeddedMode = false;\n\n\tprivate nextMessageID() {\n\t\treturn this.currentMessageID++;\n\t}\n\n\tprivate makeUrl(endpoint, apiVersion) {\n\t\tif (!this.baseUrl) {\n\t\t\tconsole.error(\"Cannot use makeUrl without MyDataHelps.baseUrl.\");\n\t\t\tthrow \"Cannot use makeUrl without MyDataHelps.baseUrl.\";\n\t\t}\n\n\t\treturn this.baseUrl + 'api/' + apiVersion + '/delegated/' + endpoint;\n\t}\n\n\tprivate makeRequest(endpoint, method, body, apiVersion = \"v1\") {\n\t\tif (!this.token || !this.token.access_token) {\n\t\t\tthrow \"No access_token available for request authorization.\";\n\t\t}\n\n\t\tlet url = this.makeUrl(endpoint, apiVersion);\n\n\t\tlet headers = new Headers();\n\t\theaders.append('Authorization', 'Bearer ' + this.token.access_token);\n\t\theaders.append('Accept', 'application/json, text/javascript, */*; q=0.01');\n\t\theaders.append('Accept-Language', this.getCurrentLanguage());\n\t\tif (!!body) {\n\t\t\theaders.append('Content-Type', 'application/json');\n\t\t}\n\n\t\tlet init: any = {\n\t\t\tmethod: method,\n\t\t\theaders: headers\n\t\t};\n\t\tif (!!body) {\n\t\t\tinit.body = JSON.stringify(body);\n\t\t}\n\n\t\treturn fetch(url, init);\n\t}\n\n\tprivate getSupportedLanguage(language: string): string {\n\t\tlanguage = language.replace(\"_\", \"-\");\n\t\tif (this.supportedLanguages.length === 0) {\n\t\t\treturn language;\n\t\t} else {\n\t\t\tif (this.supportedLanguages.find((l) => l === language)) {\n\t\t\t\treturn language;\n\t\t\t} else if (language.indexOf(\"-\") > 0) {\n\t\t\t\tlanguage = language.substring(0, language.indexOf(\"-\"));\n\t\t\t\tif (this.supportedLanguages.find((l) => l === language)) {\n\t\t\t\t\treturn language;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static validateResponse(response) {\n\t\tif (!response.ok) {\n\t\t\tthrow response.statusText;\n\t\t}\n\n\t\treturn response;\n\t}\n\n\tprivate static escapeParam(param) {\n\t\treturn String(param)\n\t\t\t.replaceAll(\"\\\\\", \"\\\\\\\\\")\n\t\t\t.replaceAll(\",\", \"\\\\,\");\n\t}\n\n\tprivate static reduceArrayAndEscape(param) {\n\t\tif (Array.isArray(param)) {\n\t\t\tlet escapedParams = param.map(function (elem) {\n\t\t\t\treturn MyDataHelps.escapeParam(elem);\n\t\t\t});\n\t\t\treturn escapedParams.join(\",\");\n\t\t}\n\n\t\treturn this.escapeParam(param);\n\t}\n\n\tprivate static convertDateToIsoString(date) {\n\t\tlet paramAsDate = new Date(date);\n\t\tif (isNaN(paramAsDate.getTime())) {\n\t\t\tthrow \"Cannot interpret parameter as Date\";\n\t\t}\n\n\t\treturn paramAsDate.toISOString();\n\t}\n\n\tprivate static flattenPropertyShallow(params, property) {\n\t\tif (params[property] === undefined || params[property] === null) return;\n\n\t\tfor (var key in params[property]) {\n\t\t\tif (params[property].hasOwnProperty(key)) {\n\t\t\t\tparams[`${property}.${key}`] = MyDataHelps.escapeParam(params[property][key]);\n\t\t\t}\n\t\t}\n\n\t\tdelete params[property];\n\t}\n\n\tprivate startEmbeddedSurveyInternal(surveyUrl) {\n\t\tlet mdhSurveyModalId = 'mydatahelps-survey-modal';\n\t\tlet mdh = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (document.getElementById(mdhSurveyModalId)) {\n\t\t\t\treject(\"Survey already in progress\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.addEventListener(\"message\", function listener(message) {\n\t\t\t\tif (message.origin !== new URL(mdh.baseUrl).origin) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet frame = (document.getElementById('mydatahelps-survey-frame') as HTMLFrameElement).contentWindow;\n\t\t\t\tif (message.source !== frame) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (message.data.name === 'SurveyWindowInitialized') {\n\t\t\t\t\tdocument.getElementById(mdhSurveyModalId).className += \" loaded\";\n\t\t\t\t} else if (message.data.name === 'SurveyFinished') {\n\t\t\t\t\tdocument.getElementById(mdhSurveyModalId).remove();\n\t\t\t\t\tdocument.body.className = document.body.className.replace(\"no-scroll\", \"\");\n\t\t\t\t\twindow.removeEventListener(\"message\", listener, true);\n\t\t\t\t\tresolve(message.data);\n\t\t\t\t}\n\t\t\t}, true);\n\n\t\t\tlet surveyModal = document.createElement('div');\n\t\t\tsurveyModal.className = 'mydatahelps-survey-modal';\n\t\t\tsurveyModal.id = mdhSurveyModalId;\n\t\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\t\tdocument.body.append(surveyModal);\n\t\t\tdocument.body.className += ' no-scroll';\n\t\t});\n\t}\n\n\tprivate startDelegatedSurvey(surveyUrl) {\n\t\tlet mdhSurveyModalId = 'mydatahelps-survey-modal';\n\t\tlet mdh = this;\n\n\t\tif (document.getElementById(mdhSurveyModalId)) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.addEventListener(\"message\", function listener(message) {\n\t\t\tif (message.origin !== new URL(mdh.baseUrl).origin) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet frame = (document.getElementById('mydatahelps-survey-frame') as HTMLFrameElement).contentWindow;\n\t\t\tif (message.source !== frame) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.data.name === 'GetDelegatedAccessToken') {\n\t\t\t\tmdh.getParticipantInfo().then((participant) => {\n\t\t\t\t\tframe.postMessage({ name: \"DelegatedAccessTokenResponse\", accessToken: mdh.token, baseUrl: mdh.baseUrl, participantID: participant.participantID }, '*');\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (message.data.name === 'SurveyWindowInitialized') {\n\t\t\t\tdocument.getElementById(mdhSurveyModalId).className += \" loaded\";\n\t\t\t}\n\t\t\telse 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\tmessage.data.type = 'surveyDidFinish';\n\t\t\t\tmdh.triggerEvent(message.data);\n\t\t\t}\n\t\t}, true);\n\n\t\tlet 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}&lang=${mdh.getCurrentLanguage()}'></iframe></div>`;\n\t\tdocument.body.append(surveyModal);\n\t\tdocument.body.className += ' no-scroll';\n\t}\n\n\tprivate handleConnectExternalAccountResponse() {\n\t\tconst params = new URLSearchParams(window.location.search);\n\t\tif (window.opener && params.get('connectExternalAccount') && params.get('messageID') && params.get('success')) {\n\t\t\twindow.opener.postMessage({\n\t\t\t\tname: 'ConnectExternalAccountResponse',\n\t\t\t\tmessageID: parseInt(params.get('messageID')),\n\t\t\t\tsuccess: params.get('success') === 'true'\n\t\t\t}, window.location.origin);\n\t\t\twindow.close();\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tprivate hasEmbeddedModeUrlParameter() {\n\t\tconst embeddedModeKey = '_e';\n\t\tconst params = new URLSearchParams(window.location.search);\n\t\tif (params.has(embeddedModeKey) && params.get(embeddedModeKey) !== 'false') {\n\t\t\treturn true;\n\t\t}\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\nconst mdh = new MyDataHelps();\n\nwindow.MyDataHelps = mdh;\n\n// For backwards compatibility\nwindow.RKStudioClient = {};\nwindow.RKStudioClient.setActionResult = function (data) {\n\twindow.MyDataHelps.setActionResult(data);\n};\n\nexport default mdh;\nexport * from './types';\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","MyDataHelps","startSurvey","surveyName","this","isStandaloneMode","startDelegatedSurvey","baseUrl","encodeURIComponent","window","webkit","messageHandlers","StartParticipantSurvey","messageID","nextMessageID","postMessage","completeStep","answer","JSON","stringify","ResearchKit","CompleteStep","querySurveyAnswers","queryParameters","Object","assign","hasOwnProperty","reduceArrayAndEscape","stepIdentifier","resultIdentifier","before","convertDateToIsoString","after","endpoint","URLSearchParams","toString","mdh","connect","makeRequest","response","validateResponse","json","deleteSurveyResult","resultID","querySurveyTasks","status","queryInboxItems","target","source","key","keys","undefined","assignDefined","type","getInboxItem","id","updateInboxItem","update","startEmbeddedSurvey","linkIdentifier","language","getCurrentLanguage","surveyUrl","startEmbeddedSurveyInternal","openExternalUrl","url","OpenExternalLink","openEmbeddedUrl","OpenEmbeddedLink","showTab","tabKey","ShowTab","openApplication","options","OpenExternalApplication","modal","dismiss","Dismiss","back","PopNavigation","showDashboard","dashboardKey","ShowParticipantDashboard","title","showWebVisualization","visualizationKey","parameters","ShowParticipantWebVisualization","showWebVisualizationPdf","ShowParticipantWebVisualizationPDF","landscape","htmlViewerZoom","showProject","projectCode","ShowProject","code","joinProject","JoinProject","on","eventName","callback","supportedEvents","includes","Error","registeredEventHandlers","push","off","eventHandlerIndex","indexOf","splice","triggerEvent","event","forEach","handler","setActionResult","data","prototype","call","console","error","getParticipantInfo","persistParticipantInfo","demographics","customFields","ok","message","catch","log","getProjectInfo","getDeviceDataPoint","deleteDeviceDataPoint","queryDeviceData","observedBefore","observedAfter","persistDeviceData","deviceDataPoints","queryDeviceDataV2","insertedBefore","insertedAfter","modifiedBefore","modifiedAfter","flattenPropertyShallow","queryDeviceDataV2Aggregate","aggregateFunctions","queryDeviceDataV2DailySleep","getDeviceDataV2AllDataTypes","enabled","getExternalAccountProviders","search","category","pageSize","pageNumber","searchParameters","connectExternalAccount","externalAccountProviderID","connectProviderAccountResponse","success","errorMessage","standaloneMode","standaloneModeFinalRedirectPath","location","href","providerAuthWindow","openNewWindow","split","windowFeatures","width","height","w","h","outerHeight","screenY","outerWidth","screenX","open","queryString","finalRedirectPath","text","redirectUrl","replace","top","ConnectExternalAccount","getExternalAccounts","refreshExternalAccount","accountID","deleteExternalAccount","DeleteProviderAccount","deleteProviderAccountResponse","queryNotifications","sentBefore","sentAfter","queryFitbitDailySummaries","startDate","endDate","queryFitbitSleepLogs","queryAppleHealthActivitySummaries","queryAppleHealthWorkouts","uploadFile","file","fileName","size","name","fetch","preSignedUrl","method","body","headers","queryFiles","getFileDownloadUrl","deleteFile","refreshDelegatedAccessToken","token","refreshTokenPromise","tokenResponse","tokenExpires","Date","now","expires_in","setTimeout","accessTokenRenewalBufferSeconds","GetDelegatedAccessToken","isEmbeddedMode","setParticipantAccessToken","enableStandaloneMode","embeddedMode","setStatusBarStyle","style","SetStatusBarStyle","getDeviceInfo","GetDeviceInfo","deviceInfoResponse","setSupportedLanguages","languages","supportedLanguages","length","i","getStepConfiguration","GetStepConfiguration","stepConfigurationResponse","getSurveyContext","deviceInfo","platform","surveyMode","GetSurveyContext","surveyContextResponse","getCurrentSurveyAnswers","GetCurrentSurveyAnswers","currentSurveyAnswersResponse","setCurrentLanguage","supportedLanguage","getSupportedLanguage","warn","lang","searchParams","has","get","navigator","showGoogleFitSettings","ShowGoogleFitSettings","showHealthConnectSettings","HealthConnectSettings","showHealthConnectPrompt","HealthConnectPrompt","getHealthConnectStatus","HealthConnectStatus","statusResponse","showHealthConnectPhrPrompt","HealthConnectPhrPrompt","getHealthConnectPhrStatus","HealthConnectPhrStatus","requestReview","cooldownDays","RequestReview","trackCustomEvent","getDataCollectionSettings","getDataAvailability","invokeCustomApi","customApi","jsonResponse","toUpperCase","parameterString","constructor","acceptableParentDomains","unsupportedActions","currentMessageID","handleConnectExternalAccountResponse","supportedActions","applicationHost","ancestorOrigins","document","getParentOrigin","acceptableOrigin","origin","sourceURL","URL","k","hostname","endsWith","parent","action","windowHasAnyActions","actions","addActions","addEventListener","validateWindowMessageOrigin","hasEmbeddedModeUrlParameter","makeUrl","apiVersion","access_token","Headers","append","init","find","l","substring","statusText","escapeParam","param","String","replaceAll","Array","isArray","map","elem","join","date","paramAsDate","isNaN","getTime","toISOString","params","property","mdhSurveyModalId","getElementById","listener","frame","contentWindow","className","remove","removeEventListener","surveyModal","createElement","innerHTML","participant","accessToken","participantID","opener","parseInt","close","RKStudioClient"],"mappings":"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","x_google_ignoreList":[0]}
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -35,9 +35,9 @@ export interface ExternalAccountProvider {
|
|
|
35
35
|
category: string;
|
|
36
36
|
logoUrl: string;
|
|
37
37
|
enabled: boolean;
|
|
38
|
-
message
|
|
39
|
-
relatedProvider
|
|
40
|
-
managingOrganization
|
|
38
|
+
message?: string;
|
|
39
|
+
relatedProvider?: string;
|
|
40
|
+
managingOrganization?: string;
|
|
41
41
|
}
|
|
42
42
|
export interface ExternalAccountProvidersPage {
|
|
43
43
|
externalAccountProviders: ExternalAccountProvider[];
|