@careevolution/mydatahelps-js 3.3.0 → 3.5.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.d.ts +8 -1
- package/MyDataHelps.js +199 -29
- package/MyDataHelps.min.js +1 -1
- package/MyDataHelps.min.js.map +1 -1
- package/package.json +3 -2
- package/types.d.ts +23 -0
package/MyDataHelps.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "../MyDataHelps.css";
|
|
1
2
|
import * as Model from "./types";
|
|
2
3
|
export declare class MyDataHelps {
|
|
3
4
|
baseUrl: string;
|
|
@@ -31,7 +32,7 @@ export declare class MyDataHelps {
|
|
|
31
32
|
queryDeviceData(queryParameters: Model.DeviceDataPointQuery): Promise<Model.DeviceDataPointsPage>;
|
|
32
33
|
persistDeviceData(deviceDataPoints: Model.PersistableDeviceDataPoint[]): Promise<void>;
|
|
33
34
|
getExternalAccountProviders(search: string | null, category: string | null, pageSize: number, pageNumber: number): Promise<Model.ExternalAccountProvidersPage>;
|
|
34
|
-
connectExternalAccount(externalAccountProviderID: number,
|
|
35
|
+
connectExternalAccount(externalAccountProviderID: number, options?: Model.ConnectExternalAccountOptions): Promise<void>;
|
|
35
36
|
getExternalAccounts(): Promise<Model.ExternalAccount[]>;
|
|
36
37
|
refreshExternalAccount(accountID: number): Promise<void>;
|
|
37
38
|
deleteExternalAccount(accountID: number): Promise<any>;
|
|
@@ -46,6 +47,9 @@ export declare class MyDataHelps {
|
|
|
46
47
|
enableStandaloneMode(): void;
|
|
47
48
|
setStatusBarStyle(style: Model.StatusBarStyle): void;
|
|
48
49
|
getDeviceInfo(): Promise<Model.DeviceInfo>;
|
|
50
|
+
setSupportedLanguages(languages: string[]): void;
|
|
51
|
+
getStepConfiguration(): Promise<Model.StepConfiguration>;
|
|
52
|
+
getCurrentSurveyAnswers(): Promise<Model.CurrentSurveyAnswers>;
|
|
49
53
|
setCurrentLanguage(language: string): void;
|
|
50
54
|
getCurrentLanguage(): string;
|
|
51
55
|
showGoogleFitSettings(): void;
|
|
@@ -59,6 +63,7 @@ export declare class MyDataHelps {
|
|
|
59
63
|
private readonly apiBasePath;
|
|
60
64
|
private readonly unsupportedActions;
|
|
61
65
|
private readonly supportedEvents;
|
|
66
|
+
private readonly supportedLanguages;
|
|
62
67
|
private currentMessageID;
|
|
63
68
|
private messageHandlers;
|
|
64
69
|
private registeredEventHandlers;
|
|
@@ -68,11 +73,13 @@ export declare class MyDataHelps {
|
|
|
68
73
|
private getBaseUrl;
|
|
69
74
|
private makeUrl;
|
|
70
75
|
private makeRequest;
|
|
76
|
+
private getSupportedLanguage;
|
|
71
77
|
private static validateResponse;
|
|
72
78
|
private static escapeParam;
|
|
73
79
|
private static reduceArrayAndEscape;
|
|
74
80
|
private static convertDateToIsoString;
|
|
75
81
|
private startEmbeddedSurveyInternal;
|
|
82
|
+
private startDelegatedSurvey;
|
|
76
83
|
}
|
|
77
84
|
declare const mdh: MyDataHelps;
|
|
78
85
|
export default mdh;
|
package/MyDataHelps.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
|
|
2
|
+
|
|
3
|
+
var css = "body.no-scroll{height:100%;overflow:hidden!important;position:fixed!important;width:100%}#mydatahelps-survey-modal{background:rgba(0,0,0,.5);bottom:0;left:0;position:fixed;right:0;top:0}#mydatahelps-survey-modal .mydatahelps-survey{background:#fff;border-radius:5px;box-sizing:border-box;height:calc(100% - 32px);margin:16px auto;max-width:768px;overflow:hidden;position:relative;z-index:5002}#mydatahelps-survey-modal .mydatahelps-survey iframe{border:none;bottom:0;height:100%;left:0;opacity:0;position:absolute;right:0;top:0;width:100%}#mydatahelps-survey-modal.loaded .mydatahelps-survey iframe{opacity:1}@media (max-width:768px){#mydatahelps-survey-modal .mydatahelps-survey{border-radius:0;height:100%;margin-bottom:0;margin-top:0}}#mydatahelps-survey-modal .mydatahelps-survey .loader{-webkit-animation:load3 1.4s linear infinite;animation:load3 1.4s linear infinite;background:#fff;background:-moz-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:-webkit-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:-o-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:-ms-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:linear-gradient(90deg,#bbb 10%,hsla(0,0%,100%,0) 42%);border-radius:50%;font-size:5px;height:11em;left:calc(50% - 5.5em);position:absolute;text-indent:-9999em;top:calc(50% - 5.5em);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);width:11em;z-index:1}#mydatahelps-survey-modal .mydatahelps-survey .loader:before{background:#bbb;border-radius:100% 0 0 0;content:\"\";height:50%;left:0;position:absolute;top:0;width:50%}#mydatahelps-survey-modal .mydatahelps-survey .loader:after{background:#fff;border-radius:50%;bottom:0;content:\"\";height:75%;left:0;margin:auto;position:absolute;right:0;top:0;width:75%}#mydatahelps-survey-modal.loaded .mydatahelps-survey .loader{display:none}@-webkit-keyframes load3{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes load3{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}";
|
|
4
|
+
n(css,{});
|
|
5
|
+
|
|
6
|
+
// @ts-ignore : let rollup handle CSS injection
|
|
1
7
|
class MyDataHelps {
|
|
2
8
|
constructor() {
|
|
3
9
|
this.acceptableParentDomains = [
|
|
@@ -15,6 +21,7 @@ class MyDataHelps {
|
|
|
15
21
|
this.apiBasePath = 'api/v1/delegated/';
|
|
16
22
|
this.unsupportedActions = ["SetHeight", "ResearchKit"];
|
|
17
23
|
this.supportedEvents = ["surveyDidFinish", "applicationDidBecomeVisible", "externalAccountSyncComplete", "tokenWillExpire"];
|
|
24
|
+
this.supportedLanguages = [];
|
|
18
25
|
this.currentMessageID = 1;
|
|
19
26
|
this.messageHandlers = [];
|
|
20
27
|
this.registeredEventHandlers = {};
|
|
@@ -54,6 +61,7 @@ class MyDataHelps {
|
|
|
54
61
|
}
|
|
55
62
|
function receiveWindowMessage(message) {
|
|
56
63
|
if (!validateWindowMessageOrigin(message)) {
|
|
64
|
+
// todo: this can generate tons of console errors when hosting some apps within webappstep (youtube content, for example )
|
|
57
65
|
console.error("message.origin '" + message.origin + "' is not allowed.");
|
|
58
66
|
throw "message.origin '" + message.origin + "' is not allowed.";
|
|
59
67
|
}
|
|
@@ -87,6 +95,12 @@ class MyDataHelps {
|
|
|
87
95
|
name: 'GetDelegatedAccessToken',
|
|
88
96
|
messageID: data.messageID
|
|
89
97
|
}, applicationHost);
|
|
98
|
+
},
|
|
99
|
+
"GetCurrentSurveyAnswers": function (data) {
|
|
100
|
+
window.parent.postMessage({
|
|
101
|
+
name: 'GetCurrentSurveyAnswers',
|
|
102
|
+
messageID: data.messageID
|
|
103
|
+
}, applicationHost);
|
|
90
104
|
}
|
|
91
105
|
};
|
|
92
106
|
}
|
|
@@ -166,7 +180,11 @@ class MyDataHelps {
|
|
|
166
180
|
"ConnectExternalAccount": function (data) {
|
|
167
181
|
window.parent.postMessage({
|
|
168
182
|
name: 'ConnectExternalAccount',
|
|
169
|
-
externalAccountProviderID: data.externalAccountProviderID
|
|
183
|
+
externalAccountProviderID: data.externalAccountProviderID,
|
|
184
|
+
messageID: data.messageID,
|
|
185
|
+
openNewWindow: data.openNewWindow,
|
|
186
|
+
width: data.width,
|
|
187
|
+
height: data.height
|
|
170
188
|
}, applicationHost);
|
|
171
189
|
},
|
|
172
190
|
"ShowProject": function (data) {
|
|
@@ -174,6 +192,25 @@ class MyDataHelps {
|
|
|
174
192
|
},
|
|
175
193
|
"JoinProject": function (data) {
|
|
176
194
|
window.parent.postMessage({ name: 'JoinProject', code: data.code }, applicationHost);
|
|
195
|
+
},
|
|
196
|
+
"GetCurrentSurveyAnswers": function (data) {
|
|
197
|
+
window.parent.postMessage({
|
|
198
|
+
name: 'GetCurrentSurveyAnswers',
|
|
199
|
+
messageID: data.messageID
|
|
200
|
+
}, applicationHost);
|
|
201
|
+
},
|
|
202
|
+
"GetStepConfiguration": function (data) {
|
|
203
|
+
window.parent.postMessage({
|
|
204
|
+
name: 'GetStepConfiguration',
|
|
205
|
+
messageID: data.messageID
|
|
206
|
+
}, applicationHost);
|
|
207
|
+
},
|
|
208
|
+
"CompleteStep": function (data) {
|
|
209
|
+
window.parent.postMessage({
|
|
210
|
+
name: 'CompleteStep',
|
|
211
|
+
messageID: data.messageID,
|
|
212
|
+
answer: data.answer
|
|
213
|
+
}, applicationHost);
|
|
177
214
|
}
|
|
178
215
|
};
|
|
179
216
|
}
|
|
@@ -187,7 +224,10 @@ class MyDataHelps {
|
|
|
187
224
|
}
|
|
188
225
|
// Surveys
|
|
189
226
|
startSurvey(surveyName) {
|
|
190
|
-
if (
|
|
227
|
+
if (this.isStandaloneMode()) {
|
|
228
|
+
this.startDelegatedSurvey(`${this.baseUrl}/survey?surveyName=${encodeURIComponent(surveyName)}`);
|
|
229
|
+
}
|
|
230
|
+
else if (window.webkit.messageHandlers.StartParticipantSurvey) {
|
|
191
231
|
let messageID = this.nextMessageID();
|
|
192
232
|
window.webkit.messageHandlers.StartParticipantSurvey.postMessage({
|
|
193
233
|
messageID: messageID,
|
|
@@ -201,6 +241,13 @@ class MyDataHelps {
|
|
|
201
241
|
if (window.webkit.messageHandlers.ResearchKit) {
|
|
202
242
|
window.webkit.messageHandlers.ResearchKit.postMessage(answer);
|
|
203
243
|
}
|
|
244
|
+
else if (window.webkit.messageHandlers.CompleteStep) {
|
|
245
|
+
let messageID = this.nextMessageID();
|
|
246
|
+
window.webkit.messageHandlers.CompleteStep.postMessage({
|
|
247
|
+
messageID: messageID,
|
|
248
|
+
answer: answer
|
|
249
|
+
});
|
|
250
|
+
}
|
|
204
251
|
}
|
|
205
252
|
querySurveyAnswers(queryParameters) {
|
|
206
253
|
queryParameters = Object.assign({}, queryParameters);
|
|
@@ -495,31 +542,45 @@ class MyDataHelps {
|
|
|
495
542
|
return response.json();
|
|
496
543
|
});
|
|
497
544
|
}
|
|
498
|
-
connectExternalAccount(externalAccountProviderID,
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
545
|
+
connectExternalAccount(externalAccountProviderID, options) {
|
|
546
|
+
return new Promise((resolve, reject) => {
|
|
547
|
+
if (this.standaloneMode) {
|
|
548
|
+
let standaloneModeFinalRedirectPath = (options === null || options === void 0 ? void 0 : options.standaloneModeFinalRedirectPath) || window.location.href;
|
|
549
|
+
const searchParameters = { finalRedirectPath: standaloneModeFinalRedirectPath };
|
|
550
|
+
const queryString = new URLSearchParams(searchParameters).toString();
|
|
551
|
+
const endpoint = "externalaccountproviders/" + externalAccountProviderID + "/connect?" + queryString;
|
|
552
|
+
const mdh = this;
|
|
553
|
+
this
|
|
554
|
+
.connect()
|
|
555
|
+
.then(function () {
|
|
556
|
+
return mdh.makeRequest(endpoint, 'POST', null);
|
|
557
|
+
})
|
|
558
|
+
.then(function (response) {
|
|
559
|
+
return MyDataHelps.validateResponse(response);
|
|
560
|
+
})
|
|
561
|
+
.then(function (response) {
|
|
562
|
+
return response.text();
|
|
563
|
+
})
|
|
564
|
+
.then(function (redirectUrl) {
|
|
565
|
+
window.top.location = redirectUrl.replace(/['"]+/g, '');
|
|
566
|
+
})
|
|
567
|
+
.catch(function (error) {
|
|
568
|
+
reject(error);
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
else if (window.webkit.messageHandlers.ConnectExternalAccount) {
|
|
572
|
+
const messageID = mdh.nextMessageID();
|
|
573
|
+
mdh.messageHandlers[messageID] = function (connectProviderAccountResponse) {
|
|
574
|
+
if (connectProviderAccountResponse && connectProviderAccountResponse.success) {
|
|
575
|
+
resolve();
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
reject(connectProviderAccountResponse.errorMessage);
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
window.webkit.messageHandlers.ConnectExternalAccount.postMessage(Object.assign({ externalAccountProviderID: externalAccountProviderID, messageID: messageID }, options));
|
|
582
|
+
}
|
|
583
|
+
});
|
|
523
584
|
}
|
|
524
585
|
getExternalAccounts() {
|
|
525
586
|
const endpoint = 'externalaccounts';
|
|
@@ -787,13 +848,68 @@ class MyDataHelps {
|
|
|
787
848
|
}
|
|
788
849
|
});
|
|
789
850
|
}
|
|
851
|
+
setSupportedLanguages(languages) {
|
|
852
|
+
this.supportedLanguages.length = 0;
|
|
853
|
+
for (let i = 0; i < languages.length; i++) {
|
|
854
|
+
this.supportedLanguages.push(languages[i].replace("_", "-"));
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
getStepConfiguration() {
|
|
858
|
+
let mdh = this;
|
|
859
|
+
return new Promise(function (resolve, reject) {
|
|
860
|
+
if (mdh.isStandaloneMode()) {
|
|
861
|
+
resolve(null);
|
|
862
|
+
}
|
|
863
|
+
else if (window.webkit.messageHandlers.GetStepConfiguration) {
|
|
864
|
+
let messageID = mdh.nextMessageID();
|
|
865
|
+
mdh.messageHandlers[messageID] = function (stepConfigurationResponse) {
|
|
866
|
+
resolve(stepConfigurationResponse.data);
|
|
867
|
+
};
|
|
868
|
+
window.webkit.messageHandlers.GetStepConfiguration.postMessage({ messageID: messageID });
|
|
869
|
+
}
|
|
870
|
+
else {
|
|
871
|
+
reject();
|
|
872
|
+
}
|
|
873
|
+
});
|
|
874
|
+
}
|
|
875
|
+
getCurrentSurveyAnswers() {
|
|
876
|
+
let mdh = this;
|
|
877
|
+
return new Promise(function (resolve, reject) {
|
|
878
|
+
if (mdh.isStandaloneMode()) {
|
|
879
|
+
resolve(null);
|
|
880
|
+
}
|
|
881
|
+
else if (window.webkit.messageHandlers.GetCurrentSurveyAnswers) {
|
|
882
|
+
let messageID = mdh.nextMessageID();
|
|
883
|
+
mdh.messageHandlers[messageID] = function (currentSurveyAnswersResponse) {
|
|
884
|
+
resolve(currentSurveyAnswersResponse.data);
|
|
885
|
+
};
|
|
886
|
+
window.webkit.messageHandlers.GetCurrentSurveyAnswers.postMessage({ messageID: messageID });
|
|
887
|
+
}
|
|
888
|
+
else {
|
|
889
|
+
reject();
|
|
890
|
+
}
|
|
891
|
+
});
|
|
892
|
+
}
|
|
790
893
|
setCurrentLanguage(language) {
|
|
791
|
-
|
|
894
|
+
let supportedLanguage = this.getSupportedLanguage(language);
|
|
895
|
+
if (supportedLanguage) {
|
|
896
|
+
this.language = supportedLanguage;
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
console.warn(`language ${language} not supported`);
|
|
900
|
+
}
|
|
792
901
|
}
|
|
793
902
|
getCurrentLanguage() {
|
|
794
903
|
let searchParams = new URLSearchParams(window.location.search);
|
|
904
|
+
let lang;
|
|
795
905
|
if (searchParams.has("lang")) {
|
|
796
|
-
|
|
906
|
+
lang = this.getSupportedLanguage(searchParams.get("lang"));
|
|
907
|
+
if (lang) {
|
|
908
|
+
return lang;
|
|
909
|
+
}
|
|
910
|
+
else {
|
|
911
|
+
console.warn(`language ${searchParams.get("lang")} not supported`);
|
|
912
|
+
}
|
|
797
913
|
}
|
|
798
914
|
return this.language || navigator.language;
|
|
799
915
|
}
|
|
@@ -895,6 +1011,23 @@ class MyDataHelps {
|
|
|
895
1011
|
}
|
|
896
1012
|
return fetch(url, init);
|
|
897
1013
|
}
|
|
1014
|
+
getSupportedLanguage(language) {
|
|
1015
|
+
language = language.replace("_", "-");
|
|
1016
|
+
if (this.supportedLanguages.length === 0) {
|
|
1017
|
+
return language;
|
|
1018
|
+
}
|
|
1019
|
+
else {
|
|
1020
|
+
if (this.supportedLanguages.find((l) => l === language)) {
|
|
1021
|
+
return language;
|
|
1022
|
+
}
|
|
1023
|
+
else if (language.indexOf("-") > 0) {
|
|
1024
|
+
language = language.substring(0, language.indexOf("-"));
|
|
1025
|
+
if (this.supportedLanguages.find((l) => l === language)) {
|
|
1026
|
+
return language;
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
898
1031
|
static validateResponse(response) {
|
|
899
1032
|
if (!response.ok) {
|
|
900
1033
|
throw response.statusText;
|
|
@@ -956,6 +1089,43 @@ class MyDataHelps {
|
|
|
956
1089
|
document.body.className += ' no-scroll';
|
|
957
1090
|
});
|
|
958
1091
|
}
|
|
1092
|
+
startDelegatedSurvey(surveyUrl) {
|
|
1093
|
+
let mdhSurveyModalId = 'mydatahelps-survey-modal';
|
|
1094
|
+
let mdh = this;
|
|
1095
|
+
if (document.getElementById(mdhSurveyModalId)) {
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
window.addEventListener("message", function listener(message) {
|
|
1099
|
+
if (message.origin !== new URL(mdh.getBaseUrl()).origin) {
|
|
1100
|
+
return;
|
|
1101
|
+
}
|
|
1102
|
+
let frame = document.getElementById('mydatahelps-survey-frame').contentWindow;
|
|
1103
|
+
if (message.source !== frame) {
|
|
1104
|
+
return;
|
|
1105
|
+
}
|
|
1106
|
+
if (message.data.name === 'GetDelegatedAccessToken') {
|
|
1107
|
+
mdh.getParticipantInfo().then((participant) => {
|
|
1108
|
+
frame.postMessage({ name: "DelegatedAccessTokenResponse", accessToken: mdh.token, baseUrl: mdh.baseUrl, participantID: participant.participantID }, '*');
|
|
1109
|
+
});
|
|
1110
|
+
}
|
|
1111
|
+
else if (message.data.name === 'SurveyWindowInitialized') {
|
|
1112
|
+
document.getElementById(mdhSurveyModalId).className += " loaded";
|
|
1113
|
+
}
|
|
1114
|
+
else if (message.data.name === 'SurveyFinished') {
|
|
1115
|
+
document.getElementById(mdhSurveyModalId).remove();
|
|
1116
|
+
document.body.className = document.body.className.replace("no-scroll", "");
|
|
1117
|
+
window.removeEventListener("message", listener, true);
|
|
1118
|
+
message.data.type = 'surveyDidFinish';
|
|
1119
|
+
mdh.triggerEvent(message.data);
|
|
1120
|
+
}
|
|
1121
|
+
}, true);
|
|
1122
|
+
let surveyModal = document.createElement('div');
|
|
1123
|
+
surveyModal.className = 'mydatahelps-survey-modal';
|
|
1124
|
+
surveyModal.id = mdhSurveyModalId;
|
|
1125
|
+
surveyModal.innerHTML = `<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='${surveyUrl}&lang=${mdh.getCurrentLanguage()}'></iframe></div>`;
|
|
1126
|
+
document.body.append(surveyModal);
|
|
1127
|
+
document.body.className += ' no-scroll';
|
|
1128
|
+
}
|
|
959
1129
|
}
|
|
960
1130
|
//iOS/Android directly invoke window.MyDataHelps and window.RKStudioClient
|
|
961
1131
|
//so it's necessary to explicitly ensure they are present on the window
|
package/MyDataHelps.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
class e{constructor(){this.acceptableParentDomains=["localhost","careevolution.com","internal","b3-deploys.com","mydatahelps.org","platform.joinallofus.org","careevolution.dev","ce.dev","mydatahelps.dev"],this.accessTokenRenewalBufferSeconds=120,this.apiBasePath="api/v1/delegated/",this.unsupportedActions=["SetHeight","ResearchKit"],this.supportedEvents=["surveyDidFinish","applicationDidBecomeVisible","externalAccountSyncComplete","tokenWillExpire"],this.currentMessageID=1,this.messageHandlers=[],this.registeredEventHandlers={},this.refreshTokenPromise=null,this.standaloneMode=!1;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)}}:{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},n)},GetDeviceInfo:function(e){window.parent.postMessage({name:"GetDeviceInfo",messageID:e.messageID},n)},StartParticipantSurvey:function(e){window.parent.postMessage({name:"StartParticipantSurvey",messageID:e.messageID,surveyName:e.surveyName},n)},OpenExternalLink:function(e){window.parent.postMessage({name:"OpenExternalUrl",url:e},n)},OpenEmbeddedLink:function(e){window.parent.postMessage({name:"OpenEmbeddedUrl",url:e},n)},OpenExternalApplication:function(e){window.parent.postMessage({name:"OpenApplication",messageID:e.messageID,url:e.url,modal:e.modal},n)},Dismiss:function(){window.parent.postMessage({name:"Dismiss"},n)},PopNavigation:function(){window.parent.postMessage({name:"Back"},n)},ShowTab:function(e){window.parent.postMessage({name:"ShowTab",tabKey:e},n)},ShowParticipantDashboard:function(e){window.parent.postMessage({name:"ShowParticipantDashboard",dashboardKey:e.dashboardKey,modal:e.modal},n)},ShowParticipantWebVisualization:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualization",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal},n)},ShowParticipantWebVisualizationPDF:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualizationPDF",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal,landscape:e.landscape,htmlViewerZoom:e.htmlViewerZoom},n)},DeleteProviderAccount:function(e){window.parent.postMessage({name:"DeleteProviderAccount",messageID:e.messageID,accountID:e.accountID},n)},ConnectExternalAccount:function(e){window.parent.postMessage({name:"ConnectExternalAccount",externalAccountProviderID:e.externalAccountProviderID},n)},ShowProject:function(e){window.parent.postMessage({name:"ShowProject",code:e.code},n)},JoinProject:function(e){window.parent.postMessage({name:"JoinProject",code:e.code},n)}},window.webkit&&window.webkit.messageHandlers&&function(){for(let t in e)if(window.webkit.messageHandlers[t])return!0;for(let e in t.unsupportedActions)if(window.webkit.messageHandlers[t.unsupportedActions[e]])return!0;return!1}()||(window.webkit={messageHandlers:{}}),function(e){for(let t in e)window.webkit.messageHandlers[t]=window.webkit.messageHandlers[t]||{postMessage:e[t]}}(e),window.addEventListener("message",(function(e){if(!function(e){return"*"===n?s(e.origin):e.origin===n}(e))throw console.error("message.origin '"+e.origin+"' is not allowed."),"message.origin '"+e.origin+"' is not allowed.";e.data.messageID?t.setActionResult(e.data):t.triggerEvent(e.data)}),!1)}startSurvey(e){if(window.webkit.messageHandlers.StartParticipantSurvey){let t=this.nextMessageID();window.webkit.messageHandlers.StartParticipantSurvey.postMessage({messageID:t,surveyName:e})}}completeStep(e){null==e&&(e=""),window.webkit.messageHandlers.ResearchKit&&window.webkit.messageHandlers.ResearchKit.postMessage(e)}querySurveyAnswers(t){(t=Object.assign({},t)).hasOwnProperty("surveyName")&&(t.surveyName=e.reduceArrayAndEscape(t.surveyName)),t.hasOwnProperty("stepIdentifier")&&(t.stepIdentifier=e.reduceArrayAndEscape(t.stepIdentifier)),t.hasOwnProperty("resultIdentifier")&&(t.resultIdentifier=e.reduceArrayAndEscape(t.resultIdentifier)),t.hasOwnProperty("answer")&&(t.answer=e.reduceArrayAndEscape(t.answer)),t.hasOwnProperty("before")&&(t.before=e.convertDateToIsoString(t.before)),t.hasOwnProperty("after")&&(t.after=e.convertDateToIsoString(t.after));const n="surveyanswers?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}deleteSurveyResult(t){const n="surveyresults/"+encodeURIComponent(t),s=this;return this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}querySurveyTasks(t){(t=Object.assign({},t)).hasOwnProperty("status")&&(t.status=e.reduceArrayAndEscape(t.status)),t.hasOwnProperty("surveyName")&&(t.surveyName=e.reduceArrayAndEscape(t.surveyName));const n="surveytasks?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}startEmbeddedSurvey(e,t,n){n||(n=this.getCurrentLanguage());let s=this.getBaseUrl()+"mydatahelps/"+e+"/surveylink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}startEmbeddedTask(e,t,n){n||(n=this.getCurrentLanguage());let s=this.getBaseUrl()+"mydatahelps/"+e+"/tasklink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}openExternalUrl(e){window.webkit.messageHandlers.OpenExternalLink&&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 t=this;return this.connect().then((function(){return t.makeRequest("participant","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}getProjectInfo(){const t=this;return this.connect().then((function(){return t.makeRequest("project","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}queryDeviceData(t){(t=Object.assign({},t)).hasOwnProperty("type")&&(t.type=e.reduceArrayAndEscape(t.type)),t.hasOwnProperty("observedBefore")&&(t.observedBefore=e.convertDateToIsoString(t.observedBefore)),t.hasOwnProperty("observedAfter")&&(t.observedAfter=e.convertDateToIsoString(t.observedAfter));const n="devicedata?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}persistDeviceData(t){const n=this;return this.connect().then((function(){return n.makeRequest("devicedata","POST",t)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}getExternalAccountProviders(t,n,s,a){let r={};t&&(r.search=t),n&&(r.category=n),s&&(r.pageSize=s),a&&(r.pageNumber=a);const o="externalaccountproviders?"+new URLSearchParams(r).toString(),i=this;return this.connect().then((function(){return i.makeRequest(o,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}connectExternalAccount(t,n){if(this.standaloneMode){n=n||window.location.href;const s="externalaccountproviders/"+t+"/connect?"+new URLSearchParams({finalRedirectPath:n}).toString(),a=this;this.connect().then((function(){return a.makeRequest(s,"POST",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.text()})).then((function(e){window.top.location=e.replace(/['"]+/g,"")}))}else window.webkit.messageHandlers.ConnectExternalAccount&&window.webkit.messageHandlers.ConnectExternalAccount.postMessage({externalAccountProviderID:t})}getExternalAccounts(){const t=this;return this.connect().then((function(){return t.makeRequest("externalaccounts","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}refreshExternalAccount(t){const n="externalaccounts/refresh/"+t,s=this;return this.connect().then((function(){return s.makeRequest(n,"POST",null)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}deleteExternalAccount(t){const n="externalaccounts/delete/"+encodeURIComponent(t),s=this;return this.isStandaloneMode()?this.connect().then((function(){return s.makeRequest(n,"DELETE",null)})).then((function(t){return e.validateResponse(t)})):new Promise((function(e,n){if(window.webkit.messageHandlers.DeleteProviderAccount){const a=s.nextMessageID();s.messageHandlers[a]=function(t){t.success?e(t):n(t)},window.webkit.messageHandlers.DeleteProviderAccount.postMessage({messageID:a,accountID:t})}else n()}))}queryNotifications(t){(t=Object.assign({},t)).hasOwnProperty("sentBefore")&&(t.sentBefore=e.convertDateToIsoString(t.sentBefore)),t.hasOwnProperty("sentAfter")&&(t.sentAfter=e.convertDateToIsoString(t.sentAfter));const n="notifications?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}queryFitbitDailySummaries(t){(t=Object.assign({},t)).hasOwnProperty("startDate")&&(t.startDate=e.convertDateToIsoString(t.startDate)),t.hasOwnProperty("endDate")&&(t.endDate=e.convertDateToIsoString(t.endDate));const n="fitbit/dailySummaries?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}queryFitbitSleepLogs(t){(t=Object.assign({},t)).hasOwnProperty("startDate")&&(t.startDate=e.convertDateToIsoString(t.startDate)),t.hasOwnProperty("endDate")&&(t.endDate=e.convertDateToIsoString(t.endDate));const n="fitbit/sleepLogs?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}queryAppleHealthActivitySummaries(t){(t=Object.assign({},t)).hasOwnProperty("startDate")&&(t.startDate=e.convertDateToIsoString(t.startDate)),t.hasOwnProperty("endDate")&&(t.endDate=e.convertDateToIsoString(t.endDate));const n="appleHealth/activitySummaries?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}queryAppleHealthWorkouts(t){(t=Object.assign({},t)).hasOwnProperty("startDate")&&(t.startDate=e.convertDateToIsoString(t.startDate)),t.hasOwnProperty("endDate")&&(t.endDate=e.convertDateToIsoString(t.endDate));const n="appleHealth/workouts?"+new URLSearchParams(t).toString(),s=this;return this.connect().then((function(){return s.makeRequest(n,"GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}connect(){const e=this;let t=function(){e.token=null,e.refreshTokenPromise=new Promise((function(n,s){let a=e.nextMessageID();e.messageHandlers[a]=function(r){r.success?(e.tokenExpires=Date.now()+1e3*r.data.expires_in,e.token=r.data,e.baseUrl=r.baseUrl,setTimeout(t,1e3*(r.data.expires_in-e.accessTokenRenewalBufferSeconds)),n(null)):(e.token=null,s(r.message)),e.messageHandlers[a]=null,e.refreshTokenPromise=null},window.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({messageID:a})}))};if(this.token&&Date.now()<this.tokenExpires)return Promise.resolve();if(this.isStandaloneMode()){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}enableStandaloneMode(){this.standaloneMode=!0,window.webkit&&(window.webkit.messageHandlers={})}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()}))}setCurrentLanguage(e){this.language=e}getCurrentLanguage(){let e=new URLSearchParams(window.location.search);return e.has("lang")?e.get("lang"):this.language||navigator.language}showGoogleFitSettings(){window.webkit.messageHandlers.ShowGoogleFitSettings&&window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({})}requestReview(e){window.webkit.messageHandlers.RequestReview&&window.webkit.messageHandlers.RequestReview.postMessage({cooldownDays:e})}trackCustomEvent(t){const n=this;return this.connect().then((function(){return n.makeRequest("customevents","POST",t)})).then((function(t){return e.validateResponse(t)})).then((function(){}))}getDataCollectionSettings(){const t=this;return this.connect().then((function(){return t.makeRequest("datacollectionsettings","GET",null)})).then((function(t){return e.validateResponse(t)})).then((function(e){return e.json()}))}invokeCustomApi(t,n,s,a){if(t.includes("?"))throw new Error('Cannot include query parameters directly in the "customApi" string. Provide as an argument for "queryParameters" instead.');let r="custom/"+t;if(n=n.toUpperCase(),null!=s&&("GET"===n||"DELETE"===n)){let e=new URLSearchParams(s).toString();r+="?"+e,s=null}const o=this;return this.connect().then((function(){return o.makeRequest(r,n,s)})).then((function(t){return e.validateResponse(t)})).then((function(e){return a?e.json():void 0}))}nextMessageID(){return this.currentMessageID++}getBaseUrl(){return this.baseUrl||"https://mydatahelps.org/"}makeUrl(e){if(!this.baseUrl)throw console.error("Cannot use makeUrl without MyDataHelps.baseUrl."),"Cannot use makeUrl without MyDataHelps.baseUrl.";return this.baseUrl+this.apiBasePath+e}makeRequest(e,t,n){if(!this.token||!this.token.access_token)throw"No access_token available for request authorization.";let s=this.makeUrl(e),a=new Headers;a.append("Authorization","Bearer "+this.token.access_token),a.append("Accept","application/json, text/javascript, */*; q=0.01"),a.append("Accept-Language",this.getCurrentLanguage()),n&&a.append("Content-Type","application/json");let r={method:t,headers:a};return n&&(r.body=JSON.stringify(n)),fetch(s,r)}static validateResponse(e){if(!e.ok)throw e.statusText;return e}static escapeParam(e){return String(e).replace("\\","\\\\").replace(",","\\,")}static reduceArrayAndEscape(t){if(Array.isArray(t)){return t.map((function(t){return e.escapeParam(t)})).join(",")}return this.escapeParam(t)}static convertDateToIsoString(e){let t=new Date(e);if(isNaN(t.getTime()))throw"Cannot interpret parameter as Date";return t.toISOString()}startEmbeddedSurveyInternal(e){let t="mydatahelps-survey-modal",n=this;return new Promise((function(s,a){if(document.getElementById(t))return void a("Survey already in progress");window.addEventListener("message",(function e(a){if(a.origin!==new URL(n.getBaseUrl()).origin)return;let r=document.getElementById("mydatahelps-survey-frame").contentWindow;a.source===r&&("SurveyWindowInitialized"===a.data.name?document.getElementById(t).className+=" loaded":"SurveyFinished"===a.data.name&&(document.getElementById(t).remove(),document.body.className=document.body.className.replace("no-scroll",""),window.removeEventListener("message",e,!0),s(a.data)))}),!0);let r=document.createElement("div");r.className="mydatahelps-survey-modal",r.id=t,r.innerHTML="<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='"+e+"'></iframe></div>",document.body.append(r),document.body.className+=" no-scroll"}))}}const t=new e;window.MyDataHelps=t,window.RKStudioClient={},window.RKStudioClient.setActionResult=function(e){window.MyDataHelps.setActionResult(e)};export{e as MyDataHelps,t as default};
|
|
1
|
+
var e=[],t=[];!function(n,s){if(n&&"undefined"!=typeof document){var a,r=!0===s.prepend?"prepend":"append",o=!0===s.singleTag,i="string"==typeof s.container?document.querySelector(s.container):document.getElementsByTagName("head")[0];if(o){var d=e.indexOf(i);-1===d&&(d=e.push(i)-1,t[d]={}),a=t[d]&&t[d][r]?t[d][r]:t[d][r]=l()}else a=l();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n))}function l(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),s.attributes)for(var t=Object.keys(s.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],s.attributes[t[n]]);var a="prepend"===r?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}('body.no-scroll{height:100%;overflow:hidden!important;position:fixed!important;width:100%}#mydatahelps-survey-modal{background:rgba(0,0,0,.5);bottom:0;left:0;position:fixed;right:0;top:0}#mydatahelps-survey-modal .mydatahelps-survey{background:#fff;border-radius:5px;box-sizing:border-box;height:calc(100% - 32px);margin:16px auto;max-width:768px;overflow:hidden;position:relative;z-index:5002}#mydatahelps-survey-modal .mydatahelps-survey iframe{border:none;bottom:0;height:100%;left:0;opacity:0;position:absolute;right:0;top:0;width:100%}#mydatahelps-survey-modal.loaded .mydatahelps-survey iframe{opacity:1}@media (max-width:768px){#mydatahelps-survey-modal .mydatahelps-survey{border-radius:0;height:100%;margin-bottom:0;margin-top:0}}#mydatahelps-survey-modal .mydatahelps-survey .loader{-webkit-animation:load3 1.4s linear infinite;animation:load3 1.4s linear infinite;background:#fff;background:-moz-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:-webkit-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:-o-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:-ms-linear-gradient(left,#bbb 10%,hsla(0,0%,100%,0) 42%);background:linear-gradient(90deg,#bbb 10%,hsla(0,0%,100%,0) 42%);border-radius:50%;font-size:5px;height:11em;left:calc(50% - 5.5em);position:absolute;text-indent:-9999em;top:calc(50% - 5.5em);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);width:11em;z-index:1}#mydatahelps-survey-modal .mydatahelps-survey .loader:before{background:#bbb;border-radius:100% 0 0 0;content:"";height:50%;left:0;position:absolute;top:0;width:50%}#mydatahelps-survey-modal .mydatahelps-survey .loader:after{background:#fff;border-radius:50%;bottom:0;content:"";height:75%;left:0;margin:auto;position:absolute;right:0;top:0;width:75%}#mydatahelps-survey-modal.loaded .mydatahelps-survey .loader{display:none}@-webkit-keyframes load3{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes load3{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}',{});class n{constructor(){this.acceptableParentDomains=["localhost","careevolution.com","internal","b3-deploys.com","mydatahelps.org","platform.joinallofus.org","careevolution.dev","ce.dev","mydatahelps.dev"],this.accessTokenRenewalBufferSeconds=120,this.apiBasePath="api/v1/delegated/",this.unsupportedActions=["SetHeight","ResearchKit"],this.supportedEvents=["surveyDidFinish","applicationDidBecomeVisible","externalAccountSyncComplete","tokenWillExpire"],this.supportedLanguages=[],this.currentMessageID=1,this.messageHandlers=[],this.registeredEventHandlers={},this.refreshTokenPromise=null,this.standaloneMode=!1;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)},GetCurrentSurveyAnswers:function(e){window.parent.postMessage({name:"GetCurrentSurveyAnswers",messageID:e.messageID},n)}}:{GetDelegatedAccessToken:function(e){window.parent.postMessage({name:"GetDelegatedAccessToken",messageID:e.messageID},n)},GetDeviceInfo:function(e){window.parent.postMessage({name:"GetDeviceInfo",messageID:e.messageID},n)},StartParticipantSurvey:function(e){window.parent.postMessage({name:"StartParticipantSurvey",messageID:e.messageID,surveyName:e.surveyName},n)},OpenExternalLink:function(e){window.parent.postMessage({name:"OpenExternalUrl",url:e},n)},OpenEmbeddedLink:function(e){window.parent.postMessage({name:"OpenEmbeddedUrl",url:e},n)},OpenExternalApplication:function(e){window.parent.postMessage({name:"OpenApplication",messageID:e.messageID,url:e.url,modal:e.modal},n)},Dismiss:function(){window.parent.postMessage({name:"Dismiss"},n)},PopNavigation:function(){window.parent.postMessage({name:"Back"},n)},ShowTab:function(e){window.parent.postMessage({name:"ShowTab",tabKey:e},n)},ShowParticipantDashboard:function(e){window.parent.postMessage({name:"ShowParticipantDashboard",dashboardKey:e.dashboardKey,modal:e.modal},n)},ShowParticipantWebVisualization:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualization",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal},n)},ShowParticipantWebVisualizationPDF:function(e){window.parent.postMessage({name:"ShowParticipantWebVisualizationPDF",visualizationKey:e.visualizationKey,parameters:e.parameters,modal:e.modal,landscape:e.landscape,htmlViewerZoom:e.htmlViewerZoom},n)},DeleteProviderAccount:function(e){window.parent.postMessage({name:"DeleteProviderAccount",messageID:e.messageID,accountID:e.accountID},n)},ConnectExternalAccount:function(e){window.parent.postMessage({name:"ConnectExternalAccount",externalAccountProviderID:e.externalAccountProviderID,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)window.webkit.messageHandlers[t]=window.webkit.messageHandlers[t]||{postMessage:e[t]}}(e),window.addEventListener("message",(function(e){if(!function(e){return"*"===n?s(e.origin):e.origin===n}(e))throw console.error("message.origin '"+e.origin+"' is not allowed."),"message.origin '"+e.origin+"' is not allowed.";e.data.messageID?t.setActionResult(e.data):t.triggerEvent(e.data)}),!1)}startSurvey(e){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=""),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=n.reduceArrayAndEscape(e.surveyName)),e.hasOwnProperty("stepIdentifier")&&(e.stepIdentifier=n.reduceArrayAndEscape(e.stepIdentifier)),e.hasOwnProperty("resultIdentifier")&&(e.resultIdentifier=n.reduceArrayAndEscape(e.resultIdentifier)),e.hasOwnProperty("answer")&&(e.answer=n.reduceArrayAndEscape(e.answer)),e.hasOwnProperty("before")&&(e.before=n.convertDateToIsoString(e.before)),e.hasOwnProperty("after")&&(e.after=n.convertDateToIsoString(e.after));const t="surveyanswers?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}deleteSurveyResult(e){const t="surveyresults/"+encodeURIComponent(e),s=this;return this.connect().then((function(){return s.makeRequest(t,"DELETE",null)})).then((function(e){return n.validateResponse(e)})).then((function(){}))}querySurveyTasks(e){(e=Object.assign({},e)).hasOwnProperty("status")&&(e.status=n.reduceArrayAndEscape(e.status)),e.hasOwnProperty("surveyName")&&(e.surveyName=n.reduceArrayAndEscape(e.surveyName));const t="surveytasks?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}startEmbeddedSurvey(e,t,n){n||(n=this.getCurrentLanguage());let s=this.getBaseUrl()+"mydatahelps/"+e+"/surveylink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}startEmbeddedTask(e,t,n){n||(n=this.getCurrentLanguage());let s=this.getBaseUrl()+"mydatahelps/"+e+"/tasklink/"+t+"?lang="+n;return this.startEmbeddedSurveyInternal(s)}openExternalUrl(e){window.webkit.messageHandlers.OpenExternalLink&&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 n.validateResponse(e)})).then((function(e){return e.json()}))}getProjectInfo(){const e=this;return this.connect().then((function(){return e.makeRequest("project","GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}queryDeviceData(e){(e=Object.assign({},e)).hasOwnProperty("type")&&(e.type=n.reduceArrayAndEscape(e.type)),e.hasOwnProperty("observedBefore")&&(e.observedBefore=n.convertDateToIsoString(e.observedBefore)),e.hasOwnProperty("observedAfter")&&(e.observedAfter=n.convertDateToIsoString(e.observedAfter));const t="devicedata?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}persistDeviceData(e){const t=this;return this.connect().then((function(){return t.makeRequest("devicedata","POST",e)})).then((function(e){return n.validateResponse(e)})).then((function(){}))}getExternalAccountProviders(e,t,s,a){let r={};e&&(r.search=e),t&&(r.category=t),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 n.validateResponse(e)})).then((function(e){return e.json()}))}connectExternalAccount(e,t){return new Promise(((a,r)=>{if(this.standaloneMode){let s=(null==t?void 0:t.standaloneModeFinalRedirectPath)||window.location.href;const a=new URLSearchParams({finalRedirectPath:s}).toString(),o="externalaccountproviders/"+e+"/connect?"+a,i=this;this.connect().then((function(){return i.makeRequest(o,"POST",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.text()})).then((function(e){window.top.location=e.replace(/['"]+/g,"")})).catch((function(e){r(e)}))}else if(window.webkit.messageHandlers.ConnectExternalAccount){const n=s.nextMessageID();s.messageHandlers[n]=function(e){e&&e.success?a():r(e.errorMessage)},window.webkit.messageHandlers.ConnectExternalAccount.postMessage(Object.assign({externalAccountProviderID:e,messageID:n},t))}}))}getExternalAccounts(){const e=this;return this.connect().then((function(){return e.makeRequest("externalaccounts","GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}refreshExternalAccount(e){const t="externalaccounts/refresh/"+e,s=this;return this.connect().then((function(){return s.makeRequest(t,"POST",null)})).then((function(e){return n.validateResponse(e)})).then((function(){}))}deleteExternalAccount(e){const t="externalaccounts/delete/"+encodeURIComponent(e),s=this;return this.isStandaloneMode()?this.connect().then((function(){return s.makeRequest(t,"DELETE",null)})).then((function(e){return n.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=n.convertDateToIsoString(e.sentBefore)),e.hasOwnProperty("sentAfter")&&(e.sentAfter=n.convertDateToIsoString(e.sentAfter));const t="notifications?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}queryFitbitDailySummaries(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=n.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=n.convertDateToIsoString(e.endDate));const t="fitbit/dailySummaries?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}queryFitbitSleepLogs(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=n.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=n.convertDateToIsoString(e.endDate));const t="fitbit/sleepLogs?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}queryAppleHealthActivitySummaries(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=n.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=n.convertDateToIsoString(e.endDate));const t="appleHealth/activitySummaries?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}queryAppleHealthWorkouts(e){(e=Object.assign({},e)).hasOwnProperty("startDate")&&(e.startDate=n.convertDateToIsoString(e.startDate)),e.hasOwnProperty("endDate")&&(e.endDate=n.convertDateToIsoString(e.endDate));const t="appleHealth/workouts?"+new URLSearchParams(e).toString(),s=this;return this.connect().then((function(){return s.makeRequest(t,"GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}connect(){const e=this;let t=function(){e.token=null,e.refreshTokenPromise=new Promise((function(n,s){let a=e.nextMessageID();e.messageHandlers[a]=function(r){r.success?(e.tokenExpires=Date.now()+1e3*r.data.expires_in,e.token=r.data,e.baseUrl=r.baseUrl,setTimeout(t,1e3*(r.data.expires_in-e.accessTokenRenewalBufferSeconds)),n(null)):(e.token=null,s(r.message)),e.messageHandlers[a]=null,e.refreshTokenPromise=null},window.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({messageID:a})}))};if(this.token&&Date.now()<this.tokenExpires)return Promise.resolve();if(this.isStandaloneMode()){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}enableStandaloneMode(){this.standaloneMode=!0,window.webkit&&(window.webkit.messageHandlers={})}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()}))}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){let t=this.getSupportedLanguage(e);t?this.language=t:console.warn(`language ${e} not supported`)}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({})}requestReview(e){window.webkit.messageHandlers.RequestReview&&window.webkit.messageHandlers.RequestReview.postMessage({cooldownDays:e})}trackCustomEvent(e){const t=this;return this.connect().then((function(){return t.makeRequest("customevents","POST",e)})).then((function(e){return n.validateResponse(e)})).then((function(){}))}getDataCollectionSettings(){const e=this;return this.connect().then((function(){return e.makeRequest("datacollectionsettings","GET",null)})).then((function(e){return n.validateResponse(e)})).then((function(e){return e.json()}))}invokeCustomApi(e,t,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(t=t.toUpperCase(),null!=s&&("GET"===t||"DELETE"===t)){let e=new URLSearchParams(s).toString();r+="?"+e,s=null}const o=this;return this.connect().then((function(){return o.makeRequest(r,t,s)})).then((function(e){return n.validateResponse(e)})).then((function(e){return a?e.json():void 0}))}nextMessageID(){return this.currentMessageID++}getBaseUrl(){return this.baseUrl||"https://mydatahelps.org/"}makeUrl(e){if(!this.baseUrl)throw console.error("Cannot use makeUrl without MyDataHelps.baseUrl."),"Cannot use makeUrl without MyDataHelps.baseUrl.";return this.baseUrl+this.apiBasePath+e}makeRequest(e,t,n){if(!this.token||!this.token.access_token)throw"No access_token available for request authorization.";let s=this.makeUrl(e),a=new Headers;a.append("Authorization","Bearer "+this.token.access_token),a.append("Accept","application/json, text/javascript, */*; q=0.01"),a.append("Accept-Language",this.getCurrentLanguage()),n&&a.append("Content-Type","application/json");let r={method:t,headers:a};return n&&(r.body=JSON.stringify(n)),fetch(s,r)}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 n.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()}startEmbeddedSurveyInternal(e){let t="mydatahelps-survey-modal",n=this;return new Promise((function(s,a){if(document.getElementById(t))return void a("Survey already in progress");window.addEventListener("message",(function e(a){if(a.origin!==new URL(n.getBaseUrl()).origin)return;let r=document.getElementById("mydatahelps-survey-frame").contentWindow;a.source===r&&("SurveyWindowInitialized"===a.data.name?document.getElementById(t).className+=" loaded":"SurveyFinished"===a.data.name&&(document.getElementById(t).remove(),document.body.className=document.body.className.replace("no-scroll",""),window.removeEventListener("message",e,!0),s(a.data)))}),!0);let r=document.createElement("div");r.className="mydatahelps-survey-modal",r.id=t,r.innerHTML="<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='"+e+"'></iframe></div>",document.body.append(r),document.body.className+=" no-scroll"}))}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.getBaseUrl()).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"}}const s=new n;window.MyDataHelps=s,window.RKStudioClient={},window.RKStudioClient.setActionResult=function(e){window.MyDataHelps.setActionResult(e)};export{n as MyDataHelps,s 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":["../MyDataHelps.js"],"sourcesContent":["export class MyDataHelps {\n constructor() {\n this.acceptableParentDomains = [\n 'localhost',\n 'careevolution.com',\n 'internal',\n 'b3-deploys.com',\n 'mydatahelps.org',\n 'platform.joinallofus.org',\n 'careevolution.dev',\n 'ce.dev',\n 'mydatahelps.dev'\n ];\n this.accessTokenRenewalBufferSeconds = 120;\n this.apiBasePath = 'api/v1/delegated/';\n this.unsupportedActions = [\"SetHeight\", \"ResearchKit\"];\n this.supportedEvents = [\"surveyDidFinish\", \"applicationDidBecomeVisible\", \"externalAccountSyncComplete\", \"tokenWillExpire\"];\n this.currentMessageID = 1;\n this.messageHandlers = [];\n this.registeredEventHandlers = {};\n this.refreshTokenPromise = null;\n this.standaloneMode = false;\n let mdh = this;\n let applicationHost = getParentOrigin();\n let supportedActions;\n function getParentOrigin() {\n let ancestorOrigins = document.location.ancestorOrigins;\n if (ancestorOrigins && ancestorOrigins[0]) {\n return ancestorOrigins[0];\n }\n return '*';\n }\n function acceptableOrigin(origin) {\n if (origin === '*')\n return true;\n let sourceURL = new URL(origin);\n for (let k = 0; k < mdh.acceptableParentDomains.length; k++) {\n if (sourceURL.hostname === mdh.acceptableParentDomains[k] || sourceURL.hostname.endsWith(\".\" + mdh.acceptableParentDomains[k])) {\n return true;\n }\n }\n return false;\n }\n function validateWindowMessageOrigin(message) {\n if (applicationHost === \"*\") {\n return acceptableOrigin(message.origin);\n }\n return message.origin === applicationHost;\n }\n function addActions(actions) {\n for (let action in actions) {\n window.webkit.messageHandlers[action] = window.webkit.messageHandlers[action] || { postMessage: actions[action] };\n }\n }\n function receiveWindowMessage(message) {\n if (!validateWindowMessageOrigin(message)) {\n console.error(\"message.origin '\" + message.origin + \"' is not allowed.\");\n throw \"message.origin '\" + message.origin + \"' is not allowed.\";\n }\n if (message.data.messageID) {\n mdh.setActionResult(message.data);\n }\n else {\n mdh.triggerEvent(message.data);\n }\n }\n function windowHasAnyActions() {\n for (let action in supportedActions) {\n if (window.webkit.messageHandlers[action]) {\n return true;\n }\n }\n for (let action in mdh.unsupportedActions) {\n if (window.webkit.messageHandlers[mdh.unsupportedActions[action]]) {\n return true;\n }\n }\n return false;\n }\n if (!acceptableOrigin(applicationHost)) {\n console.log(\"Detected unsupported parent origin domain.\");\n }\n if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.ResearchKit) {\n supportedActions = {\n \"GetDelegatedAccessToken\": function (data) {\n window.parent.postMessage({\n name: 'GetDelegatedAccessToken',\n messageID: data.messageID\n }, applicationHost);\n }\n };\n }\n else {\n supportedActions = {\n \"GetDelegatedAccessToken\": function (data) {\n window.parent.postMessage({\n name: 'GetDelegatedAccessToken',\n messageID: data.messageID\n }, applicationHost);\n },\n \"GetDeviceInfo\": function (data) {\n window.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost);\n },\n \"StartParticipantSurvey\": function (data) {\n window.parent.postMessage({\n name: 'StartParticipantSurvey',\n messageID: data.messageID,\n surveyName: data.surveyName\n }, applicationHost);\n },\n \"OpenExternalLink\": function (data) {\n window.parent.postMessage({ name: 'OpenExternalUrl', url: data }, applicationHost);\n },\n \"OpenEmbeddedLink\": function (data) {\n window.parent.postMessage({ name: 'OpenEmbeddedUrl', url: data }, applicationHost);\n },\n \"OpenExternalApplication\": function (data) {\n window.parent.postMessage({\n name: 'OpenApplication',\n messageID: data.messageID,\n url: data.url,\n modal: data.modal\n }, applicationHost);\n },\n \"Dismiss\": function () {\n window.parent.postMessage({ name: 'Dismiss' }, applicationHost);\n },\n \"PopNavigation\": function () {\n window.parent.postMessage({ name: 'Back' }, applicationHost);\n },\n \"ShowTab\": function (data) {\n window.parent.postMessage({ name: 'ShowTab', tabKey: data }, applicationHost);\n },\n \"ShowParticipantDashboard\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantDashboard',\n dashboardKey: data.dashboardKey,\n modal: data.modal\n }, applicationHost);\n },\n \"ShowParticipantWebVisualization\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantWebVisualization',\n visualizationKey: data.visualizationKey,\n parameters: data.parameters,\n modal: data.modal\n }, applicationHost);\n },\n \"ShowParticipantWebVisualizationPDF\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantWebVisualizationPDF',\n visualizationKey: data.visualizationKey,\n parameters: data.parameters,\n modal: data.modal,\n landscape: data.landscape,\n htmlViewerZoom: data.htmlViewerZoom\n }, applicationHost);\n },\n \"DeleteProviderAccount\": function (data) {\n window.parent.postMessage({\n name: 'DeleteProviderAccount',\n messageID: data.messageID,\n accountID: data.accountID\n }, applicationHost);\n },\n \"ConnectExternalAccount\": function (data) {\n window.parent.postMessage({\n name: 'ConnectExternalAccount',\n externalAccountProviderID: data.externalAccountProviderID\n }, applicationHost);\n },\n \"ShowProject\": function (data) {\n window.parent.postMessage({ name: 'ShowProject', code: data.code }, applicationHost);\n },\n \"JoinProject\": function (data) {\n window.parent.postMessage({ name: 'JoinProject', code: data.code }, applicationHost);\n }\n };\n }\n if (!window.webkit || !window.webkit.messageHandlers || !windowHasAnyActions()) {\n window.webkit = {\n messageHandlers: {}\n };\n }\n addActions(supportedActions);\n window.addEventListener(\"message\", receiveWindowMessage, false);\n }\n // Surveys\n startSurvey(surveyName) {\n if (window.webkit.messageHandlers.StartParticipantSurvey) {\n let messageID = this.nextMessageID();\n window.webkit.messageHandlers.StartParticipantSurvey.postMessage({\n messageID: messageID,\n surveyName: surveyName\n });\n }\n }\n completeStep(answer) {\n if (answer === undefined || answer === null)\n answer = '';\n if (window.webkit.messageHandlers.ResearchKit) {\n window.webkit.messageHandlers.ResearchKit.postMessage(answer);\n }\n }\n querySurveyAnswers(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"surveyName\")) {\n queryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n }\n if (queryParameters.hasOwnProperty(\"stepIdentifier\")) {\n queryParameters.stepIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.stepIdentifier);\n }\n if (queryParameters.hasOwnProperty(\"resultIdentifier\")) {\n queryParameters.resultIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.resultIdentifier);\n }\n if (queryParameters.hasOwnProperty(\"answer\")) {\n queryParameters.answer = MyDataHelps.reduceArrayAndEscape(queryParameters.answer);\n }\n if (queryParameters.hasOwnProperty(\"before\")) {\n queryParameters.before = MyDataHelps.convertDateToIsoString(queryParameters.before);\n }\n if (queryParameters.hasOwnProperty(\"after\")) {\n queryParameters.after = MyDataHelps.convertDateToIsoString(queryParameters.after);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'surveyanswers?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n deleteSurveyResult(resultID) {\n const endpoint = 'surveyresults/' + encodeURIComponent(resultID);\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'DELETE', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n querySurveyTasks(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"status\")) {\n queryParameters.status = MyDataHelps.reduceArrayAndEscape(queryParameters.status);\n }\n if (queryParameters.hasOwnProperty(\"surveyName\")) {\n queryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'surveytasks?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n startEmbeddedSurvey(linkIdentifier, surveyName, language) {\n if (!language) {\n language = this.getCurrentLanguage();\n }\n let surveyUrl = this.getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/surveylink/' + surveyName + \"?lang=\" + language;\n return this.startEmbeddedSurveyInternal(surveyUrl);\n }\n startEmbeddedTask(linkIdentifier, taskLinkIdentifier, language) {\n if (!language) {\n language = this.getCurrentLanguage();\n }\n let surveyUrl = this.getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/tasklink/' + taskLinkIdentifier + \"?lang=\" + language;\n return this.startEmbeddedSurveyInternal(surveyUrl);\n }\n // Navigation\n openExternalUrl(url) {\n if (window.webkit.messageHandlers.OpenExternalLink) {\n window.webkit.messageHandlers.OpenExternalLink.postMessage(url);\n }\n }\n openEmbeddedUrl(url) {\n if (window.webkit.messageHandlers.OpenEmbeddedLink) {\n window.webkit.messageHandlers.OpenEmbeddedLink.postMessage(url);\n }\n }\n showTab(tabKey) {\n if (window.webkit.messageHandlers.ShowTab) {\n window.webkit.messageHandlers.ShowTab.postMessage(tabKey);\n }\n }\n openApplication(url, options) {\n if (window.webkit.messageHandlers.OpenExternalApplication) {\n let messageID = this.nextMessageID();\n window.webkit.messageHandlers.OpenExternalApplication.postMessage({\n messageID: messageID,\n url: url,\n modal: !!(options && options.modal)\n });\n }\n }\n dismiss() {\n if (window.webkit.messageHandlers.Dismiss) {\n window.webkit.messageHandlers.Dismiss.postMessage({});\n }\n }\n back() {\n if (window.webkit.messageHandlers.PopNavigation) {\n window.webkit.messageHandlers.PopNavigation.postMessage({});\n }\n }\n showDashboard(dashboardKey, options) {\n if (window.webkit.messageHandlers.ShowParticipantDashboard) {\n window.webkit.messageHandlers.ShowParticipantDashboard.postMessage({\n dashboardKey: dashboardKey,\n modal: !!(options && options.modal),\n title: options && options.title ? options.title : undefined\n });\n }\n }\n showWebVisualization(visualizationKey, parameters, options) {\n if (window.webkit.messageHandlers.ShowParticipantWebVisualization) {\n window.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({\n visualizationKey: visualizationKey,\n parameters: parameters,\n modal: !!(options && options.modal),\n title: options && options.title ? options.title : undefined\n });\n }\n }\n showWebVisualizationPdf(visualizationKey, parameters, options) {\n if (window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF) {\n window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({\n visualizationKey: visualizationKey,\n parameters: parameters,\n landscape: !!(options && options.landscape),\n htmlViewerZoom: options && options.htmlViewerZoom\n });\n }\n }\n showProject(projectCode) {\n if (window.webkit.messageHandlers.ShowProject) {\n window.webkit.messageHandlers.ShowProject.postMessage({ code: projectCode });\n }\n }\n joinProject(projectCode) {\n if (window.webkit.messageHandlers.JoinProject) {\n window.webkit.messageHandlers.JoinProject.postMessage({ code: projectCode });\n }\n }\n //Events\n on(eventName, callback) {\n if (!this.supportedEvents.includes(eventName)) {\n throw new Error(eventName + \" is not a supported event type.\");\n }\n if (!this.registeredEventHandlers[eventName]) {\n this.registeredEventHandlers[eventName] = [];\n }\n this.registeredEventHandlers[eventName].push(callback);\n }\n off(eventName, callback) {\n if (!this.supportedEvents.includes(eventName)) {\n throw new Error(eventName + \" is not a supported event type.\");\n }\n if (!this.registeredEventHandlers[eventName])\n return;\n let eventHandlerIndex = this.registeredEventHandlers[eventName].indexOf(callback);\n if (eventHandlerIndex !== -1) {\n this.registeredEventHandlers[eventName].splice(eventHandlerIndex, 1);\n }\n }\n triggerEvent(event) {\n let eventName = event.type;\n if (this.supportedEvents.includes(eventName) && this.registeredEventHandlers[eventName]) {\n this.registeredEventHandlers[eventName].forEach(function (handler) {\n handler(event);\n });\n }\n }\n setActionResult(data) {\n this.messageHandlers[data.messageID](data);\n }\n // Participant Info\n getParticipantInfo() {\n const mdh = this;\n const endpoint = 'participant';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n getProjectInfo() {\n const mdh = this;\n const endpoint = 'project';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Device Data\n queryDeviceData(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"type\")) {\n queryParameters.type = MyDataHelps.reduceArrayAndEscape(queryParameters.type);\n }\n if (queryParameters.hasOwnProperty(\"observedBefore\")) {\n queryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n }\n if (queryParameters.hasOwnProperty(\"observedAfter\")) {\n queryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'devicedata?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n persistDeviceData(deviceDataPoints) {\n const endpoint = 'devicedata';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', deviceDataPoints);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n // External Accounts\n getExternalAccountProviders(search, category, pageSize, pageNumber) {\n let searchParameters = {};\n if (!!search)\n searchParameters.search = search;\n if (!!category)\n searchParameters.category = category;\n if (!!pageSize)\n searchParameters.pageSize = pageSize;\n if (!!pageNumber)\n searchParameters.pageNumber = pageNumber;\n const queryString = new URLSearchParams(searchParameters).toString();\n const endpoint = 'externalaccountproviders?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n connectExternalAccount(externalAccountProviderID, standaloneModeFinalRedirectPath) {\n if (this.standaloneMode) {\n standaloneModeFinalRedirectPath = standaloneModeFinalRedirectPath || window.location.href;\n const searchParameters = { finalRedirectPath: standaloneModeFinalRedirectPath };\n const queryString = new URLSearchParams(searchParameters).toString();\n const endpoint = \"externalaccountproviders/\" + externalAccountProviderID + \"/connect?\" + queryString;\n const mdh = this;\n this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.text();\n })\n .then(function (redirectUrl) {\n window.top.location = redirectUrl.replace(/['\"]+/g, '');\n });\n }\n else if (window.webkit.messageHandlers.ConnectExternalAccount) {\n window.webkit.messageHandlers.ConnectExternalAccount.postMessage({ externalAccountProviderID: externalAccountProviderID });\n }\n }\n getExternalAccounts() {\n const endpoint = 'externalaccounts';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n refreshExternalAccount(accountID) {\n const endpoint = 'externalaccounts/refresh/' + accountID;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n deleteExternalAccount(accountID) {\n const endpoint = 'externalaccounts/delete/' + encodeURIComponent(accountID);\n const mdh = this;\n if (this.isStandaloneMode()) {\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'DELETE', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n });\n }\n return new Promise(function (resolve, reject) {\n if (window.webkit.messageHandlers.DeleteProviderAccount) {\n const messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (deleteProviderAccountResponse) {\n if (!deleteProviderAccountResponse.success) {\n reject(deleteProviderAccountResponse);\n }\n else {\n resolve(deleteProviderAccountResponse);\n }\n };\n window.webkit.messageHandlers.DeleteProviderAccount.postMessage({\n messageID: messageID,\n accountID: accountID\n });\n }\n else {\n reject();\n }\n });\n }\n // Notifications\n queryNotifications(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"sentBefore\")) {\n queryParameters.sentBefore = MyDataHelps.convertDateToIsoString(queryParameters.sentBefore);\n }\n if (queryParameters.hasOwnProperty(\"sentAfter\")) {\n queryParameters.sentAfter = MyDataHelps.convertDateToIsoString(queryParameters.sentAfter);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'notifications?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Fitbit\n queryFitbitDailySummaries(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'fitbit/dailySummaries?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n queryFitbitSleepLogs(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'fitbit/sleepLogs?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // AppleHealth\n queryAppleHealthActivitySummaries(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'appleHealth/activitySummaries?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n queryAppleHealthWorkouts(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'appleHealth/workouts?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Authorization\n connect() {\n const mdh = this;\n let refreshDelegatedAccessToken = function () {\n mdh.token = null;\n mdh.refreshTokenPromise = new Promise(function (resolve, reject) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (tokenResponse) {\n if (tokenResponse.success) {\n mdh.tokenExpires = Date.now() + (tokenResponse.data.expires_in * 1000);\n mdh.token = tokenResponse.data;\n mdh.baseUrl = tokenResponse.baseUrl;\n setTimeout(refreshDelegatedAccessToken, ((tokenResponse.data.expires_in - mdh.accessTokenRenewalBufferSeconds) * 1000));\n resolve(null);\n }\n else {\n mdh.token = null;\n reject(tokenResponse.message);\n }\n mdh.messageHandlers[messageID] = null;\n mdh.refreshTokenPromise = null;\n };\n window.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({ messageID: messageID });\n });\n };\n if (this.token && Date.now() < this.tokenExpires) {\n return Promise.resolve();\n }\n if (this.isStandaloneMode()) {\n let error = this.token ? \"access token is expired or invalid\" : \"access token must be explicitly provided using the setParticipantAccess method\";\n console.log(error);\n return Promise.reject(error);\n }\n if (!this.refreshTokenPromise) {\n refreshDelegatedAccessToken();\n }\n // Re-use promise if refresh already in progress\n return this.refreshTokenPromise;\n }\n setParticipantAccessToken(token, baseUrl) {\n this.enableStandaloneMode();\n this.token = token;\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n this.tokenExpires = Date.now() + (this.token.expires_in * 1000);\n const mdh = this;\n setTimeout(function () {\n mdh.triggerEvent({ type: \"tokenWillExpire\" });\n }, ((this.token.expires_in - this.accessTokenRenewalBufferSeconds) * 1000));\n }\n // Miscellaneous\n isStandaloneMode() {\n return this.standaloneMode;\n }\n enableStandaloneMode() {\n this.standaloneMode = true;\n if (window.webkit) {\n window.webkit.messageHandlers = {};\n }\n }\n setStatusBarStyle(style) {\n if (window.webkit.messageHandlers.SetStatusBarStyle) {\n window.webkit.messageHandlers.SetStatusBarStyle.postMessage({ style: style });\n }\n }\n getDeviceInfo() {\n let mdh = this;\n return new Promise(function (resolve, reject) {\n if (mdh.isStandaloneMode()) {\n resolve(null);\n }\n else if (window.webkit.messageHandlers.GetDeviceInfo) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (deviceInfoResponse) {\n resolve(deviceInfoResponse.data);\n };\n window.webkit.messageHandlers.GetDeviceInfo.postMessage({ messageID: messageID });\n }\n else {\n reject();\n }\n });\n }\n setCurrentLanguage(language) {\n this.language = language;\n }\n getCurrentLanguage() {\n let searchParams = new URLSearchParams(window.location.search);\n if (searchParams.has(\"lang\")) {\n return searchParams.get(\"lang\");\n }\n return this.language || navigator.language;\n }\n showGoogleFitSettings() {\n if (window.webkit.messageHandlers.ShowGoogleFitSettings) {\n window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({});\n }\n }\n requestReview(cooldownDays) {\n if (window.webkit.messageHandlers.RequestReview) {\n window.webkit.messageHandlers.RequestReview.postMessage({ cooldownDays: cooldownDays });\n }\n }\n trackCustomEvent(event) {\n const endpoint = 'customevents';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', event);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n getDataCollectionSettings() {\n const mdh = this;\n const endpoint = 'datacollectionsettings';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n invokeCustomApi(customApi, method, queryParameters, jsonResponse) {\n if (customApi.includes('?')) {\n throw new Error(\"Cannot include query parameters directly in the \\\"customApi\\\" string. Provide as an argument for \\\"queryParameters\\\" instead.\");\n }\n let endpoint = 'custom/' + customApi;\n method = method.toUpperCase();\n if (queryParameters !== null && queryParameters !== undefined && (method === 'GET' || method === 'DELETE')) {\n let parameterString = new URLSearchParams(queryParameters).toString();\n endpoint += \"?\" + parameterString;\n queryParameters = null;\n }\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, method, queryParameters);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return jsonResponse ? response.json() : undefined;\n });\n }\n nextMessageID() {\n return this.currentMessageID++;\n }\n getBaseUrl() {\n return this.baseUrl || 'https://mydatahelps.org/';\n }\n makeUrl(endpoint) {\n if (!this.baseUrl) {\n console.error(\"Cannot use makeUrl without MyDataHelps.baseUrl.\");\n throw \"Cannot use makeUrl without MyDataHelps.baseUrl.\";\n }\n return this.baseUrl + this.apiBasePath + endpoint;\n }\n makeRequest(endpoint, method, body) {\n if (!this.token || !this.token.access_token) {\n throw \"No access_token available for request authorization.\";\n }\n let url = this.makeUrl(endpoint);\n let headers = new Headers();\n headers.append('Authorization', 'Bearer ' + this.token.access_token);\n headers.append('Accept', 'application/json, text/javascript, */*; q=0.01');\n headers.append('Accept-Language', this.getCurrentLanguage());\n if (!!body) {\n headers.append('Content-Type', 'application/json');\n }\n let init = {\n method: method,\n headers: headers\n };\n if (!!body) {\n init.body = JSON.stringify(body);\n }\n return fetch(url, init);\n }\n static validateResponse(response) {\n if (!response.ok) {\n throw response.statusText;\n }\n return response;\n }\n static escapeParam(param) {\n return String(param)\n .replace(\"\\\\\", \"\\\\\\\\\")\n .replace(\",\", \"\\\\,\");\n }\n static reduceArrayAndEscape(param) {\n if (Array.isArray(param)) {\n let escapedParams = param.map(function (elem) {\n return MyDataHelps.escapeParam(elem);\n });\n return escapedParams.join(\",\");\n }\n return this.escapeParam(param);\n }\n static convertDateToIsoString(date) {\n let paramAsDate = new Date(date);\n if (isNaN(paramAsDate.getTime())) {\n throw \"Cannot interpret parameter as Date\";\n }\n return paramAsDate.toISOString();\n }\n startEmbeddedSurveyInternal(surveyUrl) {\n let mdhSurveyModalId = 'mydatahelps-survey-modal';\n let mdh = this;\n return new Promise(function (resolve, reject) {\n if (document.getElementById(mdhSurveyModalId)) {\n reject(\"Survey already in progress\");\n return;\n }\n window.addEventListener(\"message\", function listener(message) {\n if (message.origin !== new URL(mdh.getBaseUrl()).origin) {\n return;\n }\n let frame = document.getElementById('mydatahelps-survey-frame').contentWindow;\n if (message.source !== frame) {\n return;\n }\n if (message.data.name === 'SurveyWindowInitialized') {\n document.getElementById(mdhSurveyModalId).className += \" loaded\";\n }\n else if (message.data.name === 'SurveyFinished') {\n document.getElementById(mdhSurveyModalId).remove();\n document.body.className = document.body.className.replace(\"no-scroll\", \"\");\n window.removeEventListener(\"message\", listener, true);\n resolve(message.data);\n }\n }, true);\n let surveyModal = document.createElement('div');\n surveyModal.className = 'mydatahelps-survey-modal';\n surveyModal.id = mdhSurveyModalId;\n surveyModal.innerHTML = \"<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='\" + surveyUrl + \"'></iframe></div>\";\n document.body.append(surveyModal);\n document.body.className += ' no-scroll';\n });\n }\n}\n//iOS/Android directly invoke window.MyDataHelps and window.RKStudioClient\n//so it's necessary to explicitly ensure they are present on the window\nconst mdh = new MyDataHelps();\nwindow.MyDataHelps = mdh;\n// For backwards compatibility\nwindow.RKStudioClient = {};\nwindow.RKStudioClient.setActionResult = function (data) {\n window.MyDataHelps.setActionResult(data);\n};\nexport default mdh;\nexport * from './types';\n"],"names":["MyDataHelps","constructor","this","acceptableParentDomains","accessTokenRenewalBufferSeconds","apiBasePath","unsupportedActions","supportedEvents","currentMessageID","messageHandlers","registeredEventHandlers","refreshTokenPromise","standaloneMode","supportedActions","mdh","applicationHost","ancestorOrigins","document","location","getParentOrigin","acceptableOrigin","origin","sourceURL","URL","k","length","hostname","endsWith","console","log","window","webkit","ResearchKit","GetDelegatedAccessToken","data","parent","postMessage","name","messageID","GetDeviceInfo","StartParticipantSurvey","surveyName","OpenExternalLink","url","OpenEmbeddedLink","OpenExternalApplication","modal","Dismiss","PopNavigation","ShowTab","tabKey","ShowParticipantDashboard","dashboardKey","ShowParticipantWebVisualization","visualizationKey","parameters","ShowParticipantWebVisualizationPDF","landscape","htmlViewerZoom","DeleteProviderAccount","accountID","ConnectExternalAccount","externalAccountProviderID","ShowProject","code","JoinProject","action","windowHasAnyActions","actions","addActions","addEventListener","message","validateWindowMessageOrigin","error","setActionResult","triggerEvent","startSurvey","nextMessageID","completeStep","answer","querySurveyAnswers","queryParameters","Object","assign","hasOwnProperty","reduceArrayAndEscape","stepIdentifier","resultIdentifier","before","convertDateToIsoString","after","endpoint","URLSearchParams","toString","connect","then","makeRequest","response","validateResponse","json","deleteSurveyResult","resultID","encodeURIComponent","querySurveyTasks","status","startEmbeddedSurvey","linkIdentifier","language","getCurrentLanguage","surveyUrl","getBaseUrl","startEmbeddedSurveyInternal","startEmbeddedTask","taskLinkIdentifier","openExternalUrl","openEmbeddedUrl","showTab","openApplication","options","dismiss","back","showDashboard","title","undefined","showWebVisualization","showWebVisualizationPdf","showProject","projectCode","joinProject","on","eventName","callback","includes","Error","push","off","eventHandlerIndex","indexOf","splice","event","type","forEach","handler","getParticipantInfo","getProjectInfo","queryDeviceData","observedBefore","observedAfter","persistDeviceData","deviceDataPoints","getExternalAccountProviders","search","category","pageSize","pageNumber","searchParameters","connectExternalAccount","standaloneModeFinalRedirectPath","href","finalRedirectPath","text","redirectUrl","top","replace","getExternalAccounts","refreshExternalAccount","deleteExternalAccount","isStandaloneMode","Promise","resolve","reject","deleteProviderAccountResponse","success","queryNotifications","sentBefore","sentAfter","queryFitbitDailySummaries","startDate","endDate","queryFitbitSleepLogs","queryAppleHealthActivitySummaries","queryAppleHealthWorkouts","refreshDelegatedAccessToken","token","tokenResponse","tokenExpires","Date","now","expires_in","baseUrl","setTimeout","setParticipantAccessToken","enableStandaloneMode","setStatusBarStyle","style","SetStatusBarStyle","getDeviceInfo","deviceInfoResponse","setCurrentLanguage","searchParams","has","get","navigator","showGoogleFitSettings","ShowGoogleFitSettings","requestReview","cooldownDays","RequestReview","trackCustomEvent","getDataCollectionSettings","invokeCustomApi","customApi","method","jsonResponse","toUpperCase","parameterString","makeUrl","body","access_token","headers","Headers","append","init","JSON","stringify","fetch","static","ok","statusText","param","String","Array","isArray","map","elem","escapeParam","join","date","paramAsDate","isNaN","getTime","toISOString","mdhSurveyModalId","getElementById","listener","frame","contentWindow","source","className","remove","removeEventListener","surveyModal","createElement","id","innerHTML","RKStudioClient"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MyDataHelps.min.js","sources":["../../node_modules/rollup-plugin-styles/dist/runtime/inject-css.js","../MyDataHelps.js"],"sourcesContent":["var e=[],t=[];function n(n,r){if(n&&\"undefined\"!=typeof document){var a,s=!0===r.prepend?\"prepend\":\"append\",d=!0===r.singleTag,i=\"string\"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName(\"head\")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c()}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n))}function c(){var e=document.createElement(\"style\");if(e.setAttribute(\"type\",\"text/css\"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a=\"prepend\"===s?\"afterbegin\":\"beforeend\";return i.insertAdjacentElement(a,e),e}}export{n as default};\n","// @ts-ignore : let rollup handle CSS injection\nimport \"../MyDataHelps.css\";\nexport class MyDataHelps {\n constructor() {\n this.acceptableParentDomains = [\n 'localhost',\n 'careevolution.com',\n 'internal',\n 'b3-deploys.com',\n 'mydatahelps.org',\n 'platform.joinallofus.org',\n 'careevolution.dev',\n 'ce.dev',\n 'mydatahelps.dev'\n ];\n this.accessTokenRenewalBufferSeconds = 120;\n this.apiBasePath = 'api/v1/delegated/';\n this.unsupportedActions = [\"SetHeight\", \"ResearchKit\"];\n this.supportedEvents = [\"surveyDidFinish\", \"applicationDidBecomeVisible\", \"externalAccountSyncComplete\", \"tokenWillExpire\"];\n this.supportedLanguages = [];\n this.currentMessageID = 1;\n this.messageHandlers = [];\n this.registeredEventHandlers = {};\n this.refreshTokenPromise = null;\n this.standaloneMode = false;\n let mdh = this;\n let applicationHost = getParentOrigin();\n let supportedActions;\n function getParentOrigin() {\n let ancestorOrigins = document.location.ancestorOrigins;\n if (ancestorOrigins && ancestorOrigins[0]) {\n return ancestorOrigins[0];\n }\n return '*';\n }\n function acceptableOrigin(origin) {\n if (origin === '*')\n return true;\n let sourceURL = new URL(origin);\n for (let k = 0; k < mdh.acceptableParentDomains.length; k++) {\n if (sourceURL.hostname === mdh.acceptableParentDomains[k] || sourceURL.hostname.endsWith(\".\" + mdh.acceptableParentDomains[k])) {\n return true;\n }\n }\n return false;\n }\n function validateWindowMessageOrigin(message) {\n if (applicationHost === \"*\") {\n return acceptableOrigin(message.origin);\n }\n return message.origin === applicationHost;\n }\n function addActions(actions) {\n for (let action in actions) {\n window.webkit.messageHandlers[action] = window.webkit.messageHandlers[action] || { postMessage: actions[action] };\n }\n }\n function receiveWindowMessage(message) {\n if (!validateWindowMessageOrigin(message)) {\n // todo: this can generate tons of console errors when hosting some apps within webappstep (youtube content, for example )\n console.error(\"message.origin '\" + message.origin + \"' is not allowed.\");\n throw \"message.origin '\" + message.origin + \"' is not allowed.\";\n }\n if (message.data.messageID) {\n mdh.setActionResult(message.data);\n }\n else {\n mdh.triggerEvent(message.data);\n }\n }\n function windowHasAnyActions() {\n for (let action in supportedActions) {\n if (window.webkit.messageHandlers[action]) {\n return true;\n }\n }\n for (let action in mdh.unsupportedActions) {\n if (window.webkit.messageHandlers[mdh.unsupportedActions[action]]) {\n return true;\n }\n }\n return false;\n }\n if (!acceptableOrigin(applicationHost)) {\n console.log(\"Detected unsupported parent origin domain.\");\n }\n if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.ResearchKit) {\n supportedActions = {\n \"GetDelegatedAccessToken\": function (data) {\n window.parent.postMessage({\n name: 'GetDelegatedAccessToken',\n messageID: data.messageID\n }, applicationHost);\n },\n \"GetCurrentSurveyAnswers\": function (data) {\n window.parent.postMessage({\n name: 'GetCurrentSurveyAnswers',\n messageID: data.messageID\n }, applicationHost);\n }\n };\n }\n else {\n supportedActions = {\n \"GetDelegatedAccessToken\": function (data) {\n window.parent.postMessage({\n name: 'GetDelegatedAccessToken',\n messageID: data.messageID\n }, applicationHost);\n },\n \"GetDeviceInfo\": function (data) {\n window.parent.postMessage({ name: 'GetDeviceInfo', messageID: data.messageID }, applicationHost);\n },\n \"StartParticipantSurvey\": function (data) {\n window.parent.postMessage({\n name: 'StartParticipantSurvey',\n messageID: data.messageID,\n surveyName: data.surveyName\n }, applicationHost);\n },\n \"OpenExternalLink\": function (data) {\n window.parent.postMessage({ name: 'OpenExternalUrl', url: data }, applicationHost);\n },\n \"OpenEmbeddedLink\": function (data) {\n window.parent.postMessage({ name: 'OpenEmbeddedUrl', url: data }, applicationHost);\n },\n \"OpenExternalApplication\": function (data) {\n window.parent.postMessage({\n name: 'OpenApplication',\n messageID: data.messageID,\n url: data.url,\n modal: data.modal\n }, applicationHost);\n },\n \"Dismiss\": function () {\n window.parent.postMessage({ name: 'Dismiss' }, applicationHost);\n },\n \"PopNavigation\": function () {\n window.parent.postMessage({ name: 'Back' }, applicationHost);\n },\n \"ShowTab\": function (data) {\n window.parent.postMessage({ name: 'ShowTab', tabKey: data }, applicationHost);\n },\n \"ShowParticipantDashboard\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantDashboard',\n dashboardKey: data.dashboardKey,\n modal: data.modal\n }, applicationHost);\n },\n \"ShowParticipantWebVisualization\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantWebVisualization',\n visualizationKey: data.visualizationKey,\n parameters: data.parameters,\n modal: data.modal\n }, applicationHost);\n },\n \"ShowParticipantWebVisualizationPDF\": function (data) {\n window.parent.postMessage({\n name: 'ShowParticipantWebVisualizationPDF',\n visualizationKey: data.visualizationKey,\n parameters: data.parameters,\n modal: data.modal,\n landscape: data.landscape,\n htmlViewerZoom: data.htmlViewerZoom\n }, applicationHost);\n },\n \"DeleteProviderAccount\": function (data) {\n window.parent.postMessage({\n name: 'DeleteProviderAccount',\n messageID: data.messageID,\n accountID: data.accountID\n }, applicationHost);\n },\n \"ConnectExternalAccount\": function (data) {\n window.parent.postMessage({\n name: 'ConnectExternalAccount',\n externalAccountProviderID: data.externalAccountProviderID,\n messageID: data.messageID,\n openNewWindow: data.openNewWindow,\n width: data.width,\n height: data.height\n }, applicationHost);\n },\n \"ShowProject\": function (data) {\n window.parent.postMessage({ name: 'ShowProject', code: data.code }, applicationHost);\n },\n \"JoinProject\": function (data) {\n window.parent.postMessage({ name: 'JoinProject', code: data.code }, applicationHost);\n },\n \"GetCurrentSurveyAnswers\": function (data) {\n window.parent.postMessage({\n name: 'GetCurrentSurveyAnswers',\n messageID: data.messageID\n }, applicationHost);\n },\n \"GetStepConfiguration\": function (data) {\n window.parent.postMessage({\n name: 'GetStepConfiguration',\n messageID: data.messageID\n }, applicationHost);\n },\n \"CompleteStep\": function (data) {\n window.parent.postMessage({\n name: 'CompleteStep',\n messageID: data.messageID,\n answer: data.answer\n }, applicationHost);\n }\n };\n }\n if (!window.webkit || !window.webkit.messageHandlers || !windowHasAnyActions()) {\n window.webkit = {\n messageHandlers: {}\n };\n }\n addActions(supportedActions);\n window.addEventListener(\"message\", receiveWindowMessage, false);\n }\n // Surveys\n startSurvey(surveyName) {\n if (this.isStandaloneMode()) {\n this.startDelegatedSurvey(`${this.baseUrl}/survey?surveyName=${encodeURIComponent(surveyName)}`);\n }\n else if (window.webkit.messageHandlers.StartParticipantSurvey) {\n let messageID = this.nextMessageID();\n window.webkit.messageHandlers.StartParticipantSurvey.postMessage({\n messageID: messageID,\n surveyName: surveyName\n });\n }\n }\n completeStep(answer) {\n if (answer === undefined || answer === null)\n answer = '';\n if (window.webkit.messageHandlers.ResearchKit) {\n window.webkit.messageHandlers.ResearchKit.postMessage(answer);\n }\n else if (window.webkit.messageHandlers.CompleteStep) {\n let messageID = this.nextMessageID();\n window.webkit.messageHandlers.CompleteStep.postMessage({\n messageID: messageID,\n answer: answer\n });\n }\n }\n querySurveyAnswers(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"surveyName\")) {\n queryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n }\n if (queryParameters.hasOwnProperty(\"stepIdentifier\")) {\n queryParameters.stepIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.stepIdentifier);\n }\n if (queryParameters.hasOwnProperty(\"resultIdentifier\")) {\n queryParameters.resultIdentifier = MyDataHelps.reduceArrayAndEscape(queryParameters.resultIdentifier);\n }\n if (queryParameters.hasOwnProperty(\"answer\")) {\n queryParameters.answer = MyDataHelps.reduceArrayAndEscape(queryParameters.answer);\n }\n if (queryParameters.hasOwnProperty(\"before\")) {\n queryParameters.before = MyDataHelps.convertDateToIsoString(queryParameters.before);\n }\n if (queryParameters.hasOwnProperty(\"after\")) {\n queryParameters.after = MyDataHelps.convertDateToIsoString(queryParameters.after);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'surveyanswers?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n deleteSurveyResult(resultID) {\n const endpoint = 'surveyresults/' + encodeURIComponent(resultID);\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'DELETE', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n querySurveyTasks(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"status\")) {\n queryParameters.status = MyDataHelps.reduceArrayAndEscape(queryParameters.status);\n }\n if (queryParameters.hasOwnProperty(\"surveyName\")) {\n queryParameters.surveyName = MyDataHelps.reduceArrayAndEscape(queryParameters.surveyName);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'surveytasks?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n startEmbeddedSurvey(linkIdentifier, surveyName, language) {\n if (!language) {\n language = this.getCurrentLanguage();\n }\n let surveyUrl = this.getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/surveylink/' + surveyName + \"?lang=\" + language;\n return this.startEmbeddedSurveyInternal(surveyUrl);\n }\n startEmbeddedTask(linkIdentifier, taskLinkIdentifier, language) {\n if (!language) {\n language = this.getCurrentLanguage();\n }\n let surveyUrl = this.getBaseUrl() + \"mydatahelps/\" + linkIdentifier + '/tasklink/' + taskLinkIdentifier + \"?lang=\" + language;\n return this.startEmbeddedSurveyInternal(surveyUrl);\n }\n // Navigation\n openExternalUrl(url) {\n if (window.webkit.messageHandlers.OpenExternalLink) {\n window.webkit.messageHandlers.OpenExternalLink.postMessage(url);\n }\n }\n openEmbeddedUrl(url) {\n if (window.webkit.messageHandlers.OpenEmbeddedLink) {\n window.webkit.messageHandlers.OpenEmbeddedLink.postMessage(url);\n }\n }\n showTab(tabKey) {\n if (window.webkit.messageHandlers.ShowTab) {\n window.webkit.messageHandlers.ShowTab.postMessage(tabKey);\n }\n }\n openApplication(url, options) {\n if (window.webkit.messageHandlers.OpenExternalApplication) {\n let messageID = this.nextMessageID();\n window.webkit.messageHandlers.OpenExternalApplication.postMessage({\n messageID: messageID,\n url: url,\n modal: !!(options && options.modal)\n });\n }\n }\n dismiss() {\n if (window.webkit.messageHandlers.Dismiss) {\n window.webkit.messageHandlers.Dismiss.postMessage({});\n }\n }\n back() {\n if (window.webkit.messageHandlers.PopNavigation) {\n window.webkit.messageHandlers.PopNavigation.postMessage({});\n }\n }\n showDashboard(dashboardKey, options) {\n if (window.webkit.messageHandlers.ShowParticipantDashboard) {\n window.webkit.messageHandlers.ShowParticipantDashboard.postMessage({\n dashboardKey: dashboardKey,\n modal: !!(options && options.modal),\n title: options && options.title ? options.title : undefined\n });\n }\n }\n showWebVisualization(visualizationKey, parameters, options) {\n if (window.webkit.messageHandlers.ShowParticipantWebVisualization) {\n window.webkit.messageHandlers.ShowParticipantWebVisualization.postMessage({\n visualizationKey: visualizationKey,\n parameters: parameters,\n modal: !!(options && options.modal),\n title: options && options.title ? options.title : undefined\n });\n }\n }\n showWebVisualizationPdf(visualizationKey, parameters, options) {\n if (window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF) {\n window.webkit.messageHandlers.ShowParticipantWebVisualizationPDF.postMessage({\n visualizationKey: visualizationKey,\n parameters: parameters,\n landscape: !!(options && options.landscape),\n htmlViewerZoom: options && options.htmlViewerZoom\n });\n }\n }\n showProject(projectCode) {\n if (window.webkit.messageHandlers.ShowProject) {\n window.webkit.messageHandlers.ShowProject.postMessage({ code: projectCode });\n }\n }\n joinProject(projectCode) {\n if (window.webkit.messageHandlers.JoinProject) {\n window.webkit.messageHandlers.JoinProject.postMessage({ code: projectCode });\n }\n }\n //Events\n on(eventName, callback) {\n if (!this.supportedEvents.includes(eventName)) {\n throw new Error(eventName + \" is not a supported event type.\");\n }\n if (!this.registeredEventHandlers[eventName]) {\n this.registeredEventHandlers[eventName] = [];\n }\n this.registeredEventHandlers[eventName].push(callback);\n }\n off(eventName, callback) {\n if (!this.supportedEvents.includes(eventName)) {\n throw new Error(eventName + \" is not a supported event type.\");\n }\n if (!this.registeredEventHandlers[eventName])\n return;\n let eventHandlerIndex = this.registeredEventHandlers[eventName].indexOf(callback);\n if (eventHandlerIndex !== -1) {\n this.registeredEventHandlers[eventName].splice(eventHandlerIndex, 1);\n }\n }\n triggerEvent(event) {\n let eventName = event.type;\n if (this.supportedEvents.includes(eventName) && this.registeredEventHandlers[eventName]) {\n this.registeredEventHandlers[eventName].forEach(function (handler) {\n handler(event);\n });\n }\n }\n setActionResult(data) {\n this.messageHandlers[data.messageID](data);\n }\n // Participant Info\n getParticipantInfo() {\n const mdh = this;\n const endpoint = 'participant';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n getProjectInfo() {\n const mdh = this;\n const endpoint = 'project';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Device Data\n queryDeviceData(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"type\")) {\n queryParameters.type = MyDataHelps.reduceArrayAndEscape(queryParameters.type);\n }\n if (queryParameters.hasOwnProperty(\"observedBefore\")) {\n queryParameters.observedBefore = MyDataHelps.convertDateToIsoString(queryParameters.observedBefore);\n }\n if (queryParameters.hasOwnProperty(\"observedAfter\")) {\n queryParameters.observedAfter = MyDataHelps.convertDateToIsoString(queryParameters.observedAfter);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'devicedata?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n persistDeviceData(deviceDataPoints) {\n const endpoint = 'devicedata';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', deviceDataPoints);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n // External Accounts\n getExternalAccountProviders(search, category, pageSize, pageNumber) {\n let searchParameters = {};\n if (!!search)\n searchParameters.search = search;\n if (!!category)\n searchParameters.category = category;\n if (!!pageSize)\n searchParameters.pageSize = pageSize;\n if (!!pageNumber)\n searchParameters.pageNumber = pageNumber;\n const queryString = new URLSearchParams(searchParameters).toString();\n const endpoint = 'externalaccountproviders?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n connectExternalAccount(externalAccountProviderID, options) {\n return new Promise((resolve, reject) => {\n if (this.standaloneMode) {\n let standaloneModeFinalRedirectPath = (options === null || options === void 0 ? void 0 : options.standaloneModeFinalRedirectPath) || window.location.href;\n const searchParameters = { finalRedirectPath: standaloneModeFinalRedirectPath };\n const queryString = new URLSearchParams(searchParameters).toString();\n const endpoint = \"externalaccountproviders/\" + externalAccountProviderID + \"/connect?\" + queryString;\n const mdh = this;\n this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.text();\n })\n .then(function (redirectUrl) {\n window.top.location = redirectUrl.replace(/['\"]+/g, '');\n })\n .catch(function (error) {\n reject(error);\n });\n }\n else if (window.webkit.messageHandlers.ConnectExternalAccount) {\n const messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (connectProviderAccountResponse) {\n if (connectProviderAccountResponse && connectProviderAccountResponse.success) {\n resolve();\n }\n else {\n reject(connectProviderAccountResponse.errorMessage);\n }\n };\n window.webkit.messageHandlers.ConnectExternalAccount.postMessage(Object.assign({ externalAccountProviderID: externalAccountProviderID, messageID: messageID }, options));\n }\n });\n }\n getExternalAccounts() {\n const endpoint = 'externalaccounts';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n refreshExternalAccount(accountID) {\n const endpoint = 'externalaccounts/refresh/' + accountID;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n deleteExternalAccount(accountID) {\n const endpoint = 'externalaccounts/delete/' + encodeURIComponent(accountID);\n const mdh = this;\n if (this.isStandaloneMode()) {\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'DELETE', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n });\n }\n return new Promise(function (resolve, reject) {\n if (window.webkit.messageHandlers.DeleteProviderAccount) {\n const messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (deleteProviderAccountResponse) {\n if (!deleteProviderAccountResponse.success) {\n reject(deleteProviderAccountResponse);\n }\n else {\n resolve(deleteProviderAccountResponse);\n }\n };\n window.webkit.messageHandlers.DeleteProviderAccount.postMessage({\n messageID: messageID,\n accountID: accountID\n });\n }\n else {\n reject();\n }\n });\n }\n // Notifications\n queryNotifications(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"sentBefore\")) {\n queryParameters.sentBefore = MyDataHelps.convertDateToIsoString(queryParameters.sentBefore);\n }\n if (queryParameters.hasOwnProperty(\"sentAfter\")) {\n queryParameters.sentAfter = MyDataHelps.convertDateToIsoString(queryParameters.sentAfter);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'notifications?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Fitbit\n queryFitbitDailySummaries(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'fitbit/dailySummaries?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n queryFitbitSleepLogs(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'fitbit/sleepLogs?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // AppleHealth\n queryAppleHealthActivitySummaries(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'appleHealth/activitySummaries?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n queryAppleHealthWorkouts(queryParameters) {\n queryParameters = Object.assign({}, queryParameters);\n if (queryParameters.hasOwnProperty(\"startDate\")) {\n queryParameters.startDate = MyDataHelps.convertDateToIsoString(queryParameters.startDate);\n }\n if (queryParameters.hasOwnProperty(\"endDate\")) {\n queryParameters.endDate = MyDataHelps.convertDateToIsoString(queryParameters.endDate);\n }\n const queryString = new URLSearchParams(queryParameters).toString();\n const endpoint = 'appleHealth/workouts?' + queryString;\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n // Authorization\n connect() {\n const mdh = this;\n let refreshDelegatedAccessToken = function () {\n mdh.token = null;\n mdh.refreshTokenPromise = new Promise(function (resolve, reject) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (tokenResponse) {\n if (tokenResponse.success) {\n mdh.tokenExpires = Date.now() + (tokenResponse.data.expires_in * 1000);\n mdh.token = tokenResponse.data;\n mdh.baseUrl = tokenResponse.baseUrl;\n setTimeout(refreshDelegatedAccessToken, ((tokenResponse.data.expires_in - mdh.accessTokenRenewalBufferSeconds) * 1000));\n resolve(null);\n }\n else {\n mdh.token = null;\n reject(tokenResponse.message);\n }\n mdh.messageHandlers[messageID] = null;\n mdh.refreshTokenPromise = null;\n };\n window.webkit.messageHandlers.GetDelegatedAccessToken.postMessage({ messageID: messageID });\n });\n };\n if (this.token && Date.now() < this.tokenExpires) {\n return Promise.resolve();\n }\n if (this.isStandaloneMode()) {\n let error = this.token ? \"access token is expired or invalid\" : \"access token must be explicitly provided using the setParticipantAccess method\";\n console.log(error);\n return Promise.reject(error);\n }\n if (!this.refreshTokenPromise) {\n refreshDelegatedAccessToken();\n }\n // Re-use promise if refresh already in progress\n return this.refreshTokenPromise;\n }\n setParticipantAccessToken(token, baseUrl) {\n this.enableStandaloneMode();\n this.token = token;\n if (baseUrl) {\n this.baseUrl = baseUrl;\n }\n this.tokenExpires = Date.now() + (this.token.expires_in * 1000);\n const mdh = this;\n setTimeout(function () {\n mdh.triggerEvent({ type: \"tokenWillExpire\" });\n }, ((this.token.expires_in - this.accessTokenRenewalBufferSeconds) * 1000));\n }\n // Miscellaneous\n isStandaloneMode() {\n return this.standaloneMode;\n }\n enableStandaloneMode() {\n this.standaloneMode = true;\n if (window.webkit) {\n window.webkit.messageHandlers = {};\n }\n }\n setStatusBarStyle(style) {\n if (window.webkit.messageHandlers.SetStatusBarStyle) {\n window.webkit.messageHandlers.SetStatusBarStyle.postMessage({ style: style });\n }\n }\n getDeviceInfo() {\n let mdh = this;\n return new Promise(function (resolve, reject) {\n if (mdh.isStandaloneMode()) {\n resolve(null);\n }\n else if (window.webkit.messageHandlers.GetDeviceInfo) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (deviceInfoResponse) {\n resolve(deviceInfoResponse.data);\n };\n window.webkit.messageHandlers.GetDeviceInfo.postMessage({ messageID: messageID });\n }\n else {\n reject();\n }\n });\n }\n setSupportedLanguages(languages) {\n this.supportedLanguages.length = 0;\n for (let i = 0; i < languages.length; i++) {\n this.supportedLanguages.push(languages[i].replace(\"_\", \"-\"));\n }\n }\n getStepConfiguration() {\n let mdh = this;\n return new Promise(function (resolve, reject) {\n if (mdh.isStandaloneMode()) {\n resolve(null);\n }\n else if (window.webkit.messageHandlers.GetStepConfiguration) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (stepConfigurationResponse) {\n resolve(stepConfigurationResponse.data);\n };\n window.webkit.messageHandlers.GetStepConfiguration.postMessage({ messageID: messageID });\n }\n else {\n reject();\n }\n });\n }\n getCurrentSurveyAnswers() {\n let mdh = this;\n return new Promise(function (resolve, reject) {\n if (mdh.isStandaloneMode()) {\n resolve(null);\n }\n else if (window.webkit.messageHandlers.GetCurrentSurveyAnswers) {\n let messageID = mdh.nextMessageID();\n mdh.messageHandlers[messageID] = function (currentSurveyAnswersResponse) {\n resolve(currentSurveyAnswersResponse.data);\n };\n window.webkit.messageHandlers.GetCurrentSurveyAnswers.postMessage({ messageID: messageID });\n }\n else {\n reject();\n }\n });\n }\n setCurrentLanguage(language) {\n let supportedLanguage = this.getSupportedLanguage(language);\n if (supportedLanguage) {\n this.language = supportedLanguage;\n }\n else {\n console.warn(`language ${language} not supported`);\n }\n }\n getCurrentLanguage() {\n let searchParams = new URLSearchParams(window.location.search);\n let lang;\n if (searchParams.has(\"lang\")) {\n lang = this.getSupportedLanguage(searchParams.get(\"lang\"));\n if (lang) {\n return lang;\n }\n else {\n console.warn(`language ${searchParams.get(\"lang\")} not supported`);\n }\n }\n return this.language || navigator.language;\n }\n showGoogleFitSettings() {\n if (window.webkit.messageHandlers.ShowGoogleFitSettings) {\n window.webkit.messageHandlers.ShowGoogleFitSettings.postMessage({});\n }\n }\n requestReview(cooldownDays) {\n if (window.webkit.messageHandlers.RequestReview) {\n window.webkit.messageHandlers.RequestReview.postMessage({ cooldownDays: cooldownDays });\n }\n }\n trackCustomEvent(event) {\n const endpoint = 'customevents';\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'POST', event);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function () {\n return;\n });\n }\n getDataCollectionSettings() {\n const mdh = this;\n const endpoint = 'datacollectionsettings';\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, 'GET', null);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return response.json();\n });\n }\n invokeCustomApi(customApi, method, queryParameters, jsonResponse) {\n if (customApi.includes('?')) {\n throw new Error(\"Cannot include query parameters directly in the \\\"customApi\\\" string. Provide as an argument for \\\"queryParameters\\\" instead.\");\n }\n let endpoint = 'custom/' + customApi;\n method = method.toUpperCase();\n if (queryParameters !== null && queryParameters !== undefined && (method === 'GET' || method === 'DELETE')) {\n let parameterString = new URLSearchParams(queryParameters).toString();\n endpoint += \"?\" + parameterString;\n queryParameters = null;\n }\n const mdh = this;\n return this\n .connect()\n .then(function () {\n return mdh.makeRequest(endpoint, method, queryParameters);\n })\n .then(function (response) {\n return MyDataHelps.validateResponse(response);\n })\n .then(function (response) {\n return jsonResponse ? response.json() : undefined;\n });\n }\n nextMessageID() {\n return this.currentMessageID++;\n }\n getBaseUrl() {\n return this.baseUrl || 'https://mydatahelps.org/';\n }\n makeUrl(endpoint) {\n if (!this.baseUrl) {\n console.error(\"Cannot use makeUrl without MyDataHelps.baseUrl.\");\n throw \"Cannot use makeUrl without MyDataHelps.baseUrl.\";\n }\n return this.baseUrl + this.apiBasePath + endpoint;\n }\n makeRequest(endpoint, method, body) {\n if (!this.token || !this.token.access_token) {\n throw \"No access_token available for request authorization.\";\n }\n let url = this.makeUrl(endpoint);\n let headers = new Headers();\n headers.append('Authorization', 'Bearer ' + this.token.access_token);\n headers.append('Accept', 'application/json, text/javascript, */*; q=0.01');\n headers.append('Accept-Language', this.getCurrentLanguage());\n if (!!body) {\n headers.append('Content-Type', 'application/json');\n }\n let init = {\n method: method,\n headers: headers\n };\n if (!!body) {\n init.body = JSON.stringify(body);\n }\n return fetch(url, init);\n }\n getSupportedLanguage(language) {\n language = language.replace(\"_\", \"-\");\n if (this.supportedLanguages.length === 0) {\n return language;\n }\n else {\n if (this.supportedLanguages.find((l) => l === language)) {\n return language;\n }\n else if (language.indexOf(\"-\") > 0) {\n language = language.substring(0, language.indexOf(\"-\"));\n if (this.supportedLanguages.find((l) => l === language)) {\n return language;\n }\n }\n }\n }\n static validateResponse(response) {\n if (!response.ok) {\n throw response.statusText;\n }\n return response;\n }\n static escapeParam(param) {\n return String(param)\n .replace(\"\\\\\", \"\\\\\\\\\")\n .replace(\",\", \"\\\\,\");\n }\n static reduceArrayAndEscape(param) {\n if (Array.isArray(param)) {\n let escapedParams = param.map(function (elem) {\n return MyDataHelps.escapeParam(elem);\n });\n return escapedParams.join(\",\");\n }\n return this.escapeParam(param);\n }\n static convertDateToIsoString(date) {\n let paramAsDate = new Date(date);\n if (isNaN(paramAsDate.getTime())) {\n throw \"Cannot interpret parameter as Date\";\n }\n return paramAsDate.toISOString();\n }\n startEmbeddedSurveyInternal(surveyUrl) {\n let mdhSurveyModalId = 'mydatahelps-survey-modal';\n let mdh = this;\n return new Promise(function (resolve, reject) {\n if (document.getElementById(mdhSurveyModalId)) {\n reject(\"Survey already in progress\");\n return;\n }\n window.addEventListener(\"message\", function listener(message) {\n if (message.origin !== new URL(mdh.getBaseUrl()).origin) {\n return;\n }\n let frame = document.getElementById('mydatahelps-survey-frame').contentWindow;\n if (message.source !== frame) {\n return;\n }\n if (message.data.name === 'SurveyWindowInitialized') {\n document.getElementById(mdhSurveyModalId).className += \" loaded\";\n }\n else if (message.data.name === 'SurveyFinished') {\n document.getElementById(mdhSurveyModalId).remove();\n document.body.className = document.body.className.replace(\"no-scroll\", \"\");\n window.removeEventListener(\"message\", listener, true);\n resolve(message.data);\n }\n }, true);\n let surveyModal = document.createElement('div');\n surveyModal.className = 'mydatahelps-survey-modal';\n surveyModal.id = mdhSurveyModalId;\n surveyModal.innerHTML = \"<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='\" + surveyUrl + \"'></iframe></div>\";\n document.body.append(surveyModal);\n document.body.className += ' no-scroll';\n });\n }\n startDelegatedSurvey(surveyUrl) {\n let mdhSurveyModalId = 'mydatahelps-survey-modal';\n let mdh = this;\n if (document.getElementById(mdhSurveyModalId)) {\n return;\n }\n window.addEventListener(\"message\", function listener(message) {\n if (message.origin !== new URL(mdh.getBaseUrl()).origin) {\n return;\n }\n let frame = document.getElementById('mydatahelps-survey-frame').contentWindow;\n if (message.source !== frame) {\n return;\n }\n if (message.data.name === 'GetDelegatedAccessToken') {\n mdh.getParticipantInfo().then((participant) => {\n frame.postMessage({ name: \"DelegatedAccessTokenResponse\", accessToken: mdh.token, baseUrl: mdh.baseUrl, participantID: participant.participantID }, '*');\n });\n }\n else if (message.data.name === 'SurveyWindowInitialized') {\n document.getElementById(mdhSurveyModalId).className += \" loaded\";\n }\n else if (message.data.name === 'SurveyFinished') {\n document.getElementById(mdhSurveyModalId).remove();\n document.body.className = document.body.className.replace(\"no-scroll\", \"\");\n window.removeEventListener(\"message\", listener, true);\n message.data.type = 'surveyDidFinish';\n mdh.triggerEvent(message.data);\n }\n }, true);\n let surveyModal = document.createElement('div');\n surveyModal.className = 'mydatahelps-survey-modal';\n surveyModal.id = mdhSurveyModalId;\n surveyModal.innerHTML = `<div class='mydatahelps-survey'><div class='loader'>Loading...</div><iframe id='mydatahelps-survey-frame' allow='camera' sandbox='allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' src='${surveyUrl}&lang=${mdh.getCurrentLanguage()}'></iframe></div>`;\n document.body.append(surveyModal);\n document.body.className += ' no-scroll';\n }\n}\n//iOS/Android directly invoke window.MyDataHelps and window.RKStudioClient\n//so it's necessary to explicitly ensure they are present on the window\nconst mdh = new MyDataHelps();\nwindow.MyDataHelps = mdh;\n// For backwards compatibility\nwindow.RKStudioClient = {};\nwindow.RKStudioClient.setActionResult = function (data) {\n window.MyDataHelps.setActionResult(data);\n};\nexport default mdh;\nexport * from './types';\n"],"names":["e","t","n","r","document","a","s","prepend","d","singleTag","i","container","querySelector","getElementsByTagName","u","indexOf","push","c","charCodeAt","substring","styleSheet","cssText","appendChild","createTextNode","createElement","setAttribute","attributes","Object","keys","length","insertAdjacentElement","MyDataHelps","constructor","this","acceptableParentDomains","accessTokenRenewalBufferSeconds","apiBasePath","unsupportedActions","supportedEvents","supportedLanguages","currentMessageID","messageHandlers","registeredEventHandlers","refreshTokenPromise","standaloneMode","supportedActions","mdh","applicationHost","ancestorOrigins","location","getParentOrigin","acceptableOrigin","origin","sourceURL","URL","k","hostname","endsWith","console","log","window","webkit","ResearchKit","GetDelegatedAccessToken","data","parent","postMessage","name","messageID","GetCurrentSurveyAnswers","GetDeviceInfo","StartParticipantSurvey","surveyName","OpenExternalLink","url","OpenEmbeddedLink","OpenExternalApplication","modal","Dismiss","PopNavigation","ShowTab","tabKey","ShowParticipantDashboard","dashboardKey","ShowParticipantWebVisualization","visualizationKey","parameters","ShowParticipantWebVisualizationPDF","landscape","htmlViewerZoom","DeleteProviderAccount","accountID","ConnectExternalAccount","externalAccountProviderID","openNewWindow","width","height","ShowProject","code","JoinProject","GetStepConfiguration","CompleteStep","answer","action","windowHasAnyActions","actions","addActions","addEventListener","message","validateWindowMessageOrigin","error","setActionResult","triggerEvent","startSurvey","isStandaloneMode","startDelegatedSurvey","baseUrl","encodeURIComponent","nextMessageID","completeStep","querySurveyAnswers","queryParameters","assign","hasOwnProperty","reduceArrayAndEscape","stepIdentifier","resultIdentifier","before","convertDateToIsoString","after","endpoint","URLSearchParams","toString","connect","then","makeRequest","response","validateResponse","json","deleteSurveyResult","resultID","querySurveyTasks","status","startEmbeddedSurvey","linkIdentifier","language","getCurrentLanguage","surveyUrl","getBaseUrl","startEmbeddedSurveyInternal","startEmbeddedTask","taskLinkIdentifier","openExternalUrl","openEmbeddedUrl","showTab","openApplication","options","dismiss","back","showDashboard","title","undefined","showWebVisualization","showWebVisualizationPdf","showProject","projectCode","joinProject","on","eventName","callback","includes","Error","off","eventHandlerIndex","splice","event","type","forEach","handler","getParticipantInfo","getProjectInfo","queryDeviceData","observedBefore","observedAfter","persistDeviceData","deviceDataPoints","getExternalAccountProviders","search","category","pageSize","pageNumber","searchParameters","connectExternalAccount","Promise","resolve","reject","standaloneModeFinalRedirectPath","href","queryString","finalRedirectPath","text","redirectUrl","top","replace","catch","connectProviderAccountResponse","success","errorMessage","getExternalAccounts","refreshExternalAccount","deleteExternalAccount","deleteProviderAccountResponse","queryNotifications","sentBefore","sentAfter","queryFitbitDailySummaries","startDate","endDate","queryFitbitSleepLogs","queryAppleHealthActivitySummaries","queryAppleHealthWorkouts","refreshDelegatedAccessToken","token","tokenResponse","tokenExpires","Date","now","expires_in","setTimeout","setParticipantAccessToken","enableStandaloneMode","setStatusBarStyle","style","SetStatusBarStyle","getDeviceInfo","deviceInfoResponse","setSupportedLanguages","languages","getStepConfiguration","stepConfigurationResponse","getCurrentSurveyAnswers","currentSurveyAnswersResponse","setCurrentLanguage","supportedLanguage","getSupportedLanguage","warn","lang","searchParams","has","get","navigator","showGoogleFitSettings","ShowGoogleFitSettings","requestReview","cooldownDays","RequestReview","trackCustomEvent","getDataCollectionSettings","invokeCustomApi","customApi","method","jsonResponse","toUpperCase","parameterString","makeUrl","body","access_token","headers","Headers","append","init","JSON","stringify","fetch","find","l","static","ok","statusText","param","String","Array","isArray","map","elem","escapeParam","join","date","paramAsDate","isNaN","getTime","toISOString","mdhSurveyModalId","getElementById","listener","frame","contentWindow","source","className","remove","removeEventListener","surveyModal","id","innerHTML","participant","accessToken","participantID","RKStudioClient"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@careevolution/mydatahelps-js",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "MyDataHelps client to be used by external applications for integrations inside the MyDataHelps platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "MyDataHelps.d.ts",
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"rollup": "^2.69.0",
|
|
17
17
|
"rollup-plugin-copy": "^3.4.0",
|
|
18
|
+
"rollup-plugin-styles": "^4.0.0",
|
|
18
19
|
"rollup-plugin-terser": "^7.0.2",
|
|
19
|
-
"typescript": "
|
|
20
|
+
"typescript": "~4.8.4"
|
|
20
21
|
},
|
|
21
22
|
"keywords": [
|
|
22
23
|
"MDH",
|
package/types.d.ts
CHANGED
|
@@ -53,6 +53,23 @@ export interface DeviceInfo {
|
|
|
53
53
|
[key: string]: string;
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
+
export interface StepConfiguration {
|
|
57
|
+
styles: {
|
|
58
|
+
[key: string]: string;
|
|
59
|
+
};
|
|
60
|
+
properties: {
|
|
61
|
+
[key: string]: any;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface CurrentSurveyAnswers {
|
|
65
|
+
answers: CurrentSurveyAnswer[];
|
|
66
|
+
}
|
|
67
|
+
export interface CurrentSurveyAnswer {
|
|
68
|
+
date: string;
|
|
69
|
+
stepIdentifier: string;
|
|
70
|
+
resultIdentifier: string;
|
|
71
|
+
answers: string[];
|
|
72
|
+
}
|
|
56
73
|
export interface ParticipantInfo {
|
|
57
74
|
participantID: Guid;
|
|
58
75
|
participantIdentifier: string;
|
|
@@ -400,3 +417,9 @@ export interface QueryableDeviceDataType {
|
|
|
400
417
|
namespace: DeviceDataNamespace;
|
|
401
418
|
type: string;
|
|
402
419
|
}
|
|
420
|
+
export interface ConnectExternalAccountOptions {
|
|
421
|
+
standaloneModeFinalRedirectPath?: string;
|
|
422
|
+
openNewWindow: boolean;
|
|
423
|
+
width?: number;
|
|
424
|
+
height?: number;
|
|
425
|
+
}
|