surveysparrow-ionic-plugin 1.0.7-beta.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/angular-ui/esm2022/angular-ui.mjs +5 -0
  2. package/dist/angular-ui/esm2022/public-api.mjs +3 -0
  3. package/dist/angular-ui/esm2022/spotcheck.component.mjs +17 -0
  4. package/dist/angular-ui/esm2022/spotchecks/SpotCheck.mjs +51 -0
  5. package/dist/angular-ui/esm2022/spotchecks/SpotCheckComponent.mjs +323 -0
  6. package/dist/angular-ui/esm2022/spotchecks/SpotcheckStateService.mjs +65 -0
  7. package/dist/angular-ui/esm2022/spotchecks/api.mjs +230 -0
  8. package/dist/angular-ui/esm2022/spotchecks/helpers.mjs +328 -0
  9. package/dist/angular-ui/esm2022/spotchecks/index.mjs +2 -0
  10. package/dist/angular-ui/esm2022/spotchecks/storage.mjs +7 -0
  11. package/dist/angular-ui/esm2022/spotchecks/types.mjs +2 -0
  12. package/dist/angular-ui/fesm2022/angular-ui.mjs +1013 -0
  13. package/dist/angular-ui/fesm2022/angular-ui.mjs.map +1 -0
  14. package/dist/angular-ui/index.d.ts +5 -0
  15. package/dist/angular-ui/public-api.d.ts +2 -0
  16. package/dist/angular-ui/spotcheck.component.d.ts +5 -0
  17. package/dist/angular-ui/spotchecks/SpotCheckComponent.d.ts +56 -0
  18. package/dist/angular-ui/spotchecks/SpotcheckStateService.d.ts +12 -0
  19. package/dist/{esm → angular-ui}/spotchecks/helpers.d.ts +1 -4
  20. package/dist/angular-ui/spotchecks/index.d.ts +2 -0
  21. package/dist/angular-ui/spotchecks/storage.d.ts +2 -0
  22. package/dist/{esm → angular-ui}/spotchecks/types.d.ts +5 -4
  23. package/dist/esm/angular-ui/lib/public-api.d.ts +2 -0
  24. package/dist/esm/angular-ui/lib/public-api.js +3 -0
  25. package/dist/esm/angular-ui/lib/public-api.js.map +1 -0
  26. package/dist/esm/angular-ui/lib/spotcheck.component.d.ts +2 -0
  27. package/dist/esm/angular-ui/lib/spotcheck.component.js +20 -0
  28. package/dist/esm/angular-ui/lib/spotcheck.component.js.map +1 -0
  29. package/dist/esm/angular-ui/lib/spotchecks/SpotCheck.d.ts +4 -0
  30. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotCheck.js +1 -3
  31. package/dist/esm/angular-ui/lib/spotchecks/SpotCheck.js.map +1 -0
  32. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotCheckComponent.d.ts +1 -0
  33. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotCheckComponent.js +13 -7
  34. package/dist/esm/angular-ui/lib/spotchecks/SpotCheckComponent.js.map +1 -0
  35. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotcheckStateService.js +1 -0
  36. package/dist/esm/angular-ui/lib/spotchecks/SpotcheckStateService.js.map +1 -0
  37. package/dist/esm/angular-ui/lib/spotchecks/api.d.ts +15 -0
  38. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/api.js +20 -29
  39. package/dist/esm/angular-ui/lib/spotchecks/api.js.map +1 -0
  40. package/dist/esm/angular-ui/lib/spotchecks/helpers.d.ts +29 -0
  41. package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/helpers.js +6 -19
  42. package/dist/esm/angular-ui/lib/spotchecks/helpers.js.map +1 -0
  43. package/dist/esm/angular-ui/lib/spotchecks/index.d.ts +2 -0
  44. package/dist/esm/angular-ui/lib/spotchecks/index.js +2 -0
  45. package/dist/esm/angular-ui/lib/spotchecks/index.js.map +1 -0
  46. package/dist/esm/angular-ui/lib/spotchecks/storage.js.map +1 -0
  47. package/dist/esm/angular-ui/lib/spotchecks/types.d.ts +78 -0
  48. package/dist/esm/angular-ui/lib/spotchecks/types.js.map +1 -0
  49. package/dist/esm/index.d.ts +1 -1
  50. package/dist/esm/index.js +1 -1
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/plugin.cjs.js +51510 -527
  53. package/dist/plugin.cjs.js.map +1 -1
  54. package/dist/plugin.js +51511 -524
  55. package/dist/plugin.js.map +1 -1
  56. package/package.json +31 -4
  57. package/src/angular-ui/lib/public-api.ts +2 -0
  58. package/src/angular-ui/lib/spotcheck.component.ts +10 -0
  59. package/src/angular-ui/lib/spotchecks/SpotCheck.ts +54 -0
  60. package/src/angular-ui/lib/spotchecks/SpotCheckComponent.css +7 -0
  61. package/src/angular-ui/lib/spotchecks/SpotCheckComponent.html +27 -0
  62. package/src/angular-ui/lib/spotchecks/SpotCheckComponent.ts +295 -0
  63. package/src/angular-ui/lib/spotchecks/SpotcheckStateService.ts +64 -0
  64. package/src/angular-ui/lib/spotchecks/api.ts +286 -0
  65. package/src/angular-ui/lib/spotchecks/helpers.ts +401 -0
  66. package/src/angular-ui/lib/spotchecks/index.ts +9 -0
  67. package/src/angular-ui/lib/spotchecks/storage.ts +7 -0
  68. package/src/angular-ui/lib/spotchecks/types.ts +84 -0
  69. package/src/angular-ui/ng-package.json +13 -0
  70. package/src/angular-ui/package.json +10 -0
  71. package/src/definitions.ts +17 -0
  72. package/src/index.ts +10 -0
  73. package/dist/esm/spotchecks/SpotCheck.js.map +0 -1
  74. package/dist/esm/spotchecks/SpotCheckComponent.js.map +0 -1
  75. package/dist/esm/spotchecks/SpotCheckService.d.ts +0 -8
  76. package/dist/esm/spotchecks/SpotCheckService.js +0 -45
  77. package/dist/esm/spotchecks/SpotCheckService.js.map +0 -1
  78. package/dist/esm/spotchecks/SpotcheckStateService.js.map +0 -1
  79. package/dist/esm/spotchecks/SpotchecksListener.d.ts +0 -9
  80. package/dist/esm/spotchecks/SpotchecksListener.js +0 -37
  81. package/dist/esm/spotchecks/SpotchecksListener.js.map +0 -1
  82. package/dist/esm/spotchecks/api.js.map +0 -1
  83. package/dist/esm/spotchecks/helpers.js.map +0 -1
  84. package/dist/esm/spotchecks/index.d.ts +0 -5
  85. package/dist/esm/spotchecks/index.js +0 -6
  86. package/dist/esm/spotchecks/index.js.map +0 -1
  87. package/dist/esm/spotchecks/storage.js.map +0 -1
  88. package/dist/esm/spotchecks/types.js.map +0 -1
  89. /package/dist/{esm → angular-ui}/spotchecks/SpotCheck.d.ts +0 -0
  90. /package/dist/{esm → angular-ui}/spotchecks/api.d.ts +0 -0
  91. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/SpotcheckStateService.d.ts +0 -0
  92. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/storage.d.ts +0 -0
  93. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/storage.js +0 -0
  94. /package/dist/esm/{spotchecks → angular-ui/lib/spotchecks}/types.js +0 -0
@@ -0,0 +1,328 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { Device } from '@capacitor/device';
3
+ import axios from 'axios';
4
+ import { SpotcheckStateService } from './SpotcheckStateService';
5
+ let globalSpotcheckStateService;
6
+ export const getSpotcheckStateService = () => {
7
+ if (!globalSpotcheckStateService) {
8
+ globalSpotcheckStateService = new SpotcheckStateService();
9
+ }
10
+ return globalSpotcheckStateService;
11
+ };
12
+ export function generateTraceId() {
13
+ const uuidString = uuidv4();
14
+ const timestamp = Date.now();
15
+ return `${uuidString}-${timestamp}`;
16
+ }
17
+ export const ischatSurvey = (type) => {
18
+ return (type === 'Conversational' ||
19
+ type === 'CESChat' ||
20
+ type === 'NPSChat' ||
21
+ type === 'CSATChat');
22
+ };
23
+ export const getOS = async () => {
24
+ const info = await Device.getInfo();
25
+ return info.operatingSystem;
26
+ };
27
+ export const setAppearance = async (responseJson, screen, domainName, traceId, variables) => {
28
+ try {
29
+ const spotcheckStateService = getSpotcheckStateService();
30
+ let state = spotcheckStateService.getState();
31
+ if (responseJson) {
32
+ const currentSpotcheck = state.filteredSpotChecks.find((spotcheck) => spotcheck['id'] === responseJson?.spotCheckId ||
33
+ spotcheck['id'] === responseJson?.id);
34
+ const appearance = responseJson?.appearance;
35
+ let chat = false;
36
+ let updatedState = {};
37
+ if (appearance) {
38
+ const { position, closeButton, colors, cardProperties, mode, bannerImage, } = appearance;
39
+ const { maxHeight } = cardProperties || {};
40
+ updatedState = {
41
+ spotcheckPosition: position === 'top_full' || position === 'center_top'
42
+ ? 'top'
43
+ : position === 'center_center'
44
+ ? 'center'
45
+ : 'bottom',
46
+ isCloseButtonEnabled: closeButton ?? true,
47
+ closeButtonStyle: colors?.overrides ?? {},
48
+ maxHeight: maxHeight ? parseFloat(maxHeight) / 100 : 0,
49
+ spotCheckType: ischatSurvey(currentSpotcheck?.['survey']?.surveyType) &&
50
+ mode === 'fullScreen'
51
+ ? 'chat'
52
+ : 'classic',
53
+ isFullScreenMode: mode === 'fullScreen',
54
+ isBannerImageOn: bannerImage?.enabled ?? false,
55
+ spotChecksMode: mode,
56
+ avatarEnabled: appearance?.avatar?.enabled ?? false,
57
+ avatarUrl: appearance?.avatar?.avatarUrl ?? '',
58
+ };
59
+ chat = updatedState.spotCheckType === 'chat';
60
+ }
61
+ const spotCheckId = responseJson?.spotCheckId ?? 0;
62
+ const spotCheckContactId = responseJson?.spotCheckContactId ??
63
+ responseJson?.spotCheckContact?.id ??
64
+ 0;
65
+ const triggerToken = responseJson?.triggerToken ?? '';
66
+ updatedState = {
67
+ ...updatedState,
68
+ spotcheckID: spotCheckId,
69
+ spotcheckContactID: spotCheckContactId,
70
+ triggerToken,
71
+ };
72
+ const baseSpotcheckURL = `https://${domainName}/s/spotcheck/${triggerToken}/${chat ? 'config' : 'bootstrap'}?spotcheckContactId=${spotCheckContactId}&traceId=${traceId}&spotcheckUrl=${screen}`;
73
+ let fullSpotcheckURL = baseSpotcheckURL;
74
+ Object.entries(variables).forEach(([key, value]) => {
75
+ fullSpotcheckURL += `&${key}=${value}`;
76
+ });
77
+ updatedState.spotcheckURL = fullSpotcheckURL;
78
+ spotcheckStateService.setState(updatedState);
79
+ try {
80
+ const response = await axios.get(fullSpotcheckURL);
81
+ const themeInfo = response.data.config.generatedCSS;
82
+ const theme_payload = { type: 'THEME_UPDATE_SPOTCHECK', themeInfo };
83
+ state = spotcheckStateService.getState();
84
+ let webViewRef = chat ? state.chatWebViewRef : state.classicWebViewRef;
85
+ let isLoading = chat ? state.isChatLoading : state.isClassicLoading;
86
+ const resetStateData = {
87
+ type: 'RESET_STATE',
88
+ state: {
89
+ ...(response.data || {}),
90
+ skip: true,
91
+ spotCheckAppearance: {
92
+ ...(appearance || {}),
93
+ targetType: 'MOBILE',
94
+ },
95
+ spotcheckUrl: screen,
96
+ traceId,
97
+ elementBuilderParams: {
98
+ ...(variables || {}),
99
+ },
100
+ },
101
+ };
102
+ const sendMessageToIframe = (iframe, data) => {
103
+ if (iframe && iframe.contentWindow) {
104
+ try {
105
+ iframe.contentWindow.postMessage(data, '*');
106
+ }
107
+ catch (error) {
108
+ console.error('❌ Failed to send message to iframe:', error);
109
+ }
110
+ }
111
+ };
112
+ const communicateWithWebView = async (iframe) => {
113
+ await new Promise(resolve => setTimeout(() => {
114
+ sendMessageToIframe(iframe, resetStateData);
115
+ sendMessageToIframe(iframe, theme_payload);
116
+ resolve(true);
117
+ }, 2000));
118
+ };
119
+ if (webViewRef) {
120
+ if (isLoading === false) {
121
+ communicateWithWebView(webViewRef);
122
+ start();
123
+ return true;
124
+ }
125
+ else {
126
+ // todo: recheck this
127
+ const unsubscribe = spotcheckStateService.state$.subscribe((currentState) => {
128
+ const { isChatLoading, isClassicLoading, chatWebViewRef, classicWebViewRef, } = currentState;
129
+ if ((!isChatLoading && chat) || (!isClassicLoading && !chat)) {
130
+ unsubscribe.unsubscribe();
131
+ const activeWebViewRef = chat
132
+ ? chatWebViewRef
133
+ : classicWebViewRef;
134
+ if (activeWebViewRef) {
135
+ communicateWithWebView(activeWebViewRef);
136
+ start();
137
+ }
138
+ else {
139
+ console.warn('⚠️ Active WebView ref is null after loading completed');
140
+ }
141
+ }
142
+ });
143
+ return true;
144
+ }
145
+ }
146
+ else {
147
+ const unsubscribeWebView = spotcheckStateService.state$.subscribe((currentState) => {
148
+ const updatedWebViewRef = chat
149
+ ? currentState.chatWebViewRef
150
+ : currentState.classicWebViewRef;
151
+ const updatedIsLoading = chat
152
+ ? currentState.isChatLoading
153
+ : currentState.isClassicLoading;
154
+ if (updatedWebViewRef) {
155
+ if (!updatedIsLoading) {
156
+ unsubscribeWebView.unsubscribe();
157
+ communicateWithWebView(updatedWebViewRef);
158
+ start();
159
+ }
160
+ else {
161
+ console.log('⏳ WebView ref available but still loading...');
162
+ }
163
+ }
164
+ });
165
+ return true;
166
+ }
167
+ }
168
+ catch (error) {
169
+ throw new Error(error.message);
170
+ }
171
+ }
172
+ throw new Error('Something went wrong');
173
+ }
174
+ catch (error) {
175
+ throw new Error(error.message);
176
+ }
177
+ };
178
+ export const start = () => {
179
+ const state = getSpotcheckStateService().getState();
180
+ setTimeout(() => {
181
+ getSpotcheckStateService().setState({ isVisible: true });
182
+ }, state.afterDelay * 1000);
183
+ };
184
+ export const closeSpotCheck = async () => {
185
+ try {
186
+ const stateService = getSpotcheckStateService();
187
+ const state = stateService.getState();
188
+ const payload = {
189
+ traceId: state.traceId,
190
+ triggerToken: state.triggerToken,
191
+ };
192
+ const response = await fetch(`https://${state.domainName}/api/internal/spotcheck/dismiss/${state.spotcheckContactID}`, {
193
+ method: 'PUT',
194
+ headers: {
195
+ 'Content-Type': 'application/json',
196
+ },
197
+ body: JSON.stringify(payload),
198
+ });
199
+ if (response.status != 200) {
200
+ console.log(`Error: ${response.status}`);
201
+ }
202
+ }
203
+ catch (error) {
204
+ console.log('Error parsing JSON:', error);
205
+ }
206
+ };
207
+ export const handleSurveyEnd = () => {
208
+ const stateService = getSpotcheckStateService();
209
+ const state = stateService.getState();
210
+ const webViewRef = state.spotCheckType === 'chat'
211
+ ? state.chatWebViewRef
212
+ : state.classicWebViewRef;
213
+ webViewRef?.current?.injectJavaScript(`
214
+ (function() {
215
+ window.dispatchEvent(new MessageEvent('message', {
216
+ data: ${JSON.stringify({ type: 'UNMOUNT_APP' })}
217
+ }));
218
+ })();
219
+ `);
220
+ const updatedState = {
221
+ isVisible: false,
222
+ isCloseButtonEnabled: false,
223
+ isFullScreenMode: false,
224
+ spotcheckID: 0,
225
+ currentQuestionHeight: 0,
226
+ closeButtonStyle: {},
227
+ spotcheckContactID: 0,
228
+ spotcheckURL: '',
229
+ spotcheckPosition: 'bottom',
230
+ isMounted: false,
231
+ spotCheckType: '',
232
+ screenHeight: 0,
233
+ keyBoardHeight: 0,
234
+ textPosition: 0,
235
+ spotChecksMode: '',
236
+ avatarEnabled: false,
237
+ avatarUrl: '',
238
+ };
239
+ stateService.setState(updatedState);
240
+ };
241
+ export const getSpotcheckComponentCssStyles = (state) => {
242
+ let styles = {};
243
+ let wrapperStyles = {};
244
+ let extraPaddingForMiniCardCloseButtonIfTopPosition = 0;
245
+ if (state.isFullScreenMode && state.isVisible) {
246
+ wrapperStyles = {
247
+ display: 'flex',
248
+ height: '100%',
249
+ };
250
+ styles = {
251
+ display: 'flex',
252
+ height: '100%',
253
+ };
254
+ }
255
+ if (state.isVisible && state.isMounted) {
256
+ let height = Math.min(state.currentQuestionHeight, (state.maxHeight * window.innerHeight));
257
+ if (state.spotChecksMode === 'miniCard') {
258
+ if (state.avatarEnabled) {
259
+ height = height - 56;
260
+ }
261
+ if (state.isCloseButtonEnabled) {
262
+ height = height - 40;
263
+ }
264
+ }
265
+ switch (state.spotcheckPosition) {
266
+ case 'bottom':
267
+ styles = {
268
+ display: 'flex',
269
+ height: height + 'px',
270
+ };
271
+ wrapperStyles = {
272
+ display: 'flex',
273
+ justifyContent: 'flex-end',
274
+ };
275
+ break;
276
+ case 'top':
277
+ styles = {
278
+ display: 'flex',
279
+ height: height + 'px',
280
+ };
281
+ wrapperStyles = {
282
+ display: 'flex',
283
+ justifyContent: 'flex-start',
284
+ };
285
+ if (state.spotChecksMode === 'miniCard' && state.isCloseButtonEnabled) {
286
+ extraPaddingForMiniCardCloseButtonIfTopPosition = 30;
287
+ }
288
+ break;
289
+ case 'center':
290
+ styles = {
291
+ display: 'flex',
292
+ height: height + 'px',
293
+ };
294
+ wrapperStyles = {
295
+ display: 'flex',
296
+ justifyContent: 'center',
297
+ };
298
+ break;
299
+ default:
300
+ break;
301
+ }
302
+ }
303
+ return {
304
+ wrapperStyles: {
305
+ position: 'fixed',
306
+ width: '100%',
307
+ height: '100%',
308
+ top: '0',
309
+ left: '0',
310
+ backgroundColor: 'rgba(0, 0, 0, 0.3)',
311
+ zIndex: '99999999',
312
+ display: 'none',
313
+ flexDirection: 'column',
314
+ ...wrapperStyles
315
+ },
316
+ styles: {
317
+ display: 'none',
318
+ flexDirection: 'column',
319
+ paddingTop: extraPaddingForMiniCardCloseButtonIfTopPosition + 'px',
320
+ ...styles,
321
+ }
322
+ };
323
+ };
324
+ export const closeSpotCheckAndHandleSurveyEnd = async () => {
325
+ await closeSpotCheck();
326
+ handleSurveyEnd();
327
+ };
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmd1bGFyLXVpL2xpYi9zcG90Y2hlY2tzL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRSxJQUFJLDJCQUFrRCxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEdBQTBCLEVBQUU7SUFDbEUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDakMsMkJBQTJCLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLDJCQUEyQixDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sVUFBVSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixPQUFPLEdBQUcsVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUMzQyxPQUFPLENBQ0wsSUFBSSxLQUFLLGdCQUFnQjtRQUN6QixJQUFJLEtBQUssU0FBUztRQUNsQixJQUFJLEtBQUssU0FBUztRQUNsQixJQUFJLEtBQUssVUFBVSxDQUNwQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxD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O29CQUNyRSwrQ0FBK0MsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZELENBQUM7Z0JBQ0gsTUFBTTtZQUVOLEtBQUssUUFBUTtnQkFDWCxNQUFNLEdBQUc7b0JBQ1AsT0FBTyxFQUFFLE1BQU07b0JBQ2YsTUFBTSxFQUFFLE1BQU0sR0FBQyxJQUFJO2lCQUNwQixDQUFDO2dCQUNGLGFBQWEsR0FBRztvQkFDZCxPQUFPLEVBQUUsTUFBTTtvQkFDZixjQUFjLEVBQUUsUUFBUTtpQkFDekIsQ0FBQztnQkFDSixNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLGFBQWEsRUFBRTtZQUNiLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsR0FBRztZQUNSLElBQUksRUFBRSxHQUFHO1lBQ1QsZUFBZSxFQUFFLG9CQUFvQjtZQUNyQyxNQUFNLEVBQUUsVUFBVTtZQUNsQixPQUFPLEVBQUUsTUFBTTtZQUNmLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLEdBQUcsYUFBYTtTQUNqQjtRQUNELE1BQU0sRUFBRTtZQUNOLE9BQU8sRUFBRSxNQUFNO1lBQ2YsYUFBYSxFQUFFLFFBQVE7WUFDdkIsVUFBVSxFQUFFLCtDQUErQyxHQUFDLElBQUk7WUFDaEUsR0FBRyxNQUFNO1NBQ1Y7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDekQsTUFBTSxjQUFjLEVBQUUsQ0FBQztJQUN2QixlQUFlLEVBQUUsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IERldmljZSB9IGZyb20gJ0BjYXBhY2l0b3IvZGV2aWNlJztcbmltcG9ydCB7IFNwb3RjaGVja1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgU3BvdGNoZWNrU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9TcG90Y2hlY2tTdGF0ZVNlcnZpY2UnO1xuXG5sZXQgZ2xvYmFsU3BvdGNoZWNrU3RhdGVTZXJ2aWNlOiBTcG90Y2hlY2tTdGF0ZVNlcnZpY2U7XG5cbmV4cG9ydCBjb25zdCBnZXRTcG90Y2hlY2tTdGF0ZVNlcnZpY2UgPSAoKTogU3BvdGNoZWNrU3RhdGVTZXJ2aWNlID0+IHtcbiAgaWYgKCFnbG9iYWxTcG90Y2hlY2tTdGF0ZVNlcnZpY2UpIHtcbiAgICBnbG9iYWxTcG90Y2hlY2tTdGF0ZVNlcnZpY2UgPSBuZXcgU3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCk7XG4gIH1cbiAgcmV0dXJuIGdsb2JhbFNwb3RjaGVja1N0YXRlU2VydmljZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRyYWNlSWQoKSB7XG4gIGNvbnN0IHV1aWRTdHJpbmcgPSB1dWlkdjQoKTtcbiAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgcmV0dXJuIGAke3V1aWRTdHJpbmd9LSR7dGltZXN0YW1wfWA7XG59XG5cbmV4cG9ydCBjb25zdCBpc2NoYXRTdXJ2ZXkgPSAodHlwZTogU3RyaW5nKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZSA9PT0gJ0NvbnZlcnNhdGlvbmFsJyB8fFxuICAgIHR5cGUgPT09ICdDRVNDaGF0JyB8fFxuICAgIHR5cGUgPT09ICdOUFNDaGF0JyB8fFxuICAgIHR5cGUgPT09ICdDU0FUQ2hhdCdcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPUyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgaW5mbyA9IGF3YWl0IERldmljZS5nZXRJbmZvKCk7XG4gIHJldHVybiBpbmZvLm9wZXJhdGluZ1N5c3RlbTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRBcHBlYXJhbmNlID0gYXN5bmMgKFxuICByZXNwb25zZUpzb246IGFueSxcbiAgc2NyZWVuOiBzdHJpbmcsXG4gIGRvbWFpbk5hbWU6IHN0cmluZyxcbiAgdHJhY2VJZDogc3RyaW5nLFxuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT5cbikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNwb3RjaGVja1N0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICAgIGxldCBzdGF0ZSA9IHNwb3RjaGVja1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuXG4gICAgaWYgKHJlc3BvbnNlSnNvbikge1xuICAgICAgY29uc3QgY3VycmVudFNwb3RjaGVjayA9IHN0YXRlLmZpbHRlcmVkU3BvdENoZWNrcy5maW5kKFxuICAgICAgICAoc3BvdGNoZWNrKSA9PlxuICAgICAgICAgIHNwb3RjaGVja1snaWQnXSA9PT0gcmVzcG9uc2VKc29uPy5zcG90Q2hlY2tJZCB8fFxuICAgICAgICAgIHNwb3RjaGVja1snaWQnXSA9PT0gcmVzcG9uc2VKc29uPy5pZFxuICAgICAgKTtcblxuICAgICAgY29uc3QgYXBwZWFyYW5jZSA9IHJlc3BvbnNlSnNvbj8uYXBwZWFyYW5jZTtcbiAgICAgIGxldCBjaGF0ID0gZmFsc2U7XG5cbiAgICAgIGxldCB1cGRhdGVkU3RhdGU6IFBhcnRpYWw8U3BvdGNoZWNrU3RhdGU+ID0ge307XG5cbiAgICAgIGlmIChhcHBlYXJhbmNlKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICBjbG9zZUJ1dHRvbixcbiAgICAgICAgICBjb2xvcnMsXG4gICAgICAgICAgY2FyZFByb3BlcnRpZXMsXG4gICAgICAgICAgbW9kZSxcbiAgICAgICAgICBiYW5uZXJJbWFnZSxcbiAgICAgICAgfSA9IGFwcGVhcmFuY2U7XG4gICAgICAgIGNvbnN0IHsgbWF4SGVpZ2h0IH0gPSBjYXJkUHJvcGVydGllcyB8fCB7fTtcblxuICAgICAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAgICAgc3BvdGNoZWNrUG9zaXRpb246XG4gICAgICAgICAgICBwb3NpdGlvbiA9PT0gJ3RvcF9mdWxsJyB8fCBwb3NpdGlvbiA9PT0gJ2NlbnRlcl90b3AnXG4gICAgICAgICAgICAgID8gJ3RvcCdcbiAgICAgICAgICAgICAgOiBwb3NpdGlvbiA9PT0gJ2NlbnRlcl9jZW50ZXInXG4gICAgICAgICAgICAgID8gJ2NlbnRlcidcbiAgICAgICAgICAgICAgOiAnYm90dG9tJyxcbiAgICAgICAgICBpc0Nsb3NlQnV0dG9uRW5hYmxlZDogY2xvc2VCdXR0b24gPz8gdHJ1ZSxcbiAgICAgICAgICBjbG9zZUJ1dHRvblN0eWxlOiBjb2xvcnM/Lm92ZXJyaWRlcyA/PyB7fSxcbiAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCA/IHBhcnNlRmxvYXQobWF4SGVpZ2h0KSAvIDEwMCA6IDAsXG4gICAgICAgICAgc3BvdENoZWNrVHlwZTpcbiAgICAgICAgICAgIGlzY2hhdFN1cnZleShjdXJyZW50U3BvdGNoZWNrPy5bJ3N1cnZleSddPy5zdXJ2ZXlUeXBlKSAmJlxuICAgICAgICAgICAgbW9kZSA9PT0gJ2Z1bGxTY3JlZW4nXG4gICAgICAgICAgICAgID8gJ2NoYXQnXG4gICAgICAgICAgICAgIDogJ2NsYXNzaWMnLFxuICAgICAgICAgIGlzRnVsbFNjcmVlbk1vZGU6IG1vZGUgPT09ICdmdWxsU2NyZWVuJyxcbiAgICAgICAgICBpc0Jhbm5lckltYWdlT246IGJhbm5lckltYWdlPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgICAgIHNwb3RDaGVja3NNb2RlOiBtb2RlLFxuICAgICAgICAgIGF2YXRhckVuYWJsZWQ6IGFwcGVhcmFuY2U/LmF2YXRhcj8uZW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgICAgICBhdmF0YXJVcmw6IGFwcGVhcmFuY2U/LmF2YXRhcj8uYXZhdGFyVXJsID8/ICcnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNoYXQgPSB1cGRhdGVkU3RhdGUuc3BvdENoZWNrVHlwZSA9PT0gJ2NoYXQnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzcG90Q2hlY2tJZCA9IHJlc3BvbnNlSnNvbj8uc3BvdENoZWNrSWQgPz8gMDtcbiAgICAgIGNvbnN0IHNwb3RDaGVja0NvbnRhY3RJZCA9XG4gICAgICAgIHJlc3BvbnNlSnNvbj8uc3BvdENoZWNrQ29udGFjdElkID8/XG4gICAgICAgIHJlc3BvbnNlSnNvbj8uc3BvdENoZWNrQ29udGFjdD8uaWQgPz9cbiAgICAgICAgMDtcbiAgICAgIGNvbnN0IHRyaWdnZXJUb2tlbiA9IHJlc3BvbnNlSnNvbj8udHJpZ2dlclRva2VuID8/ICcnO1xuXG4gICAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgc3BvdGNoZWNrSUQ6IHNwb3RDaGVja0lkLFxuICAgICAgICBzcG90Y2hlY2tDb250YWN0SUQ6IHNwb3RDaGVja0NvbnRhY3RJZCxcbiAgICAgICAgdHJpZ2dlclRva2VuLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYmFzZVNwb3RjaGVja1VSTCA9IGBodHRwczovLyR7ZG9tYWluTmFtZX0vcy9zcG90Y2hlY2svJHt0cmlnZ2VyVG9rZW59LyR7XG4gICAgICAgIGNoYXQgPyAnY29uZmlnJyA6ICdib290c3RyYXAnXG4gICAgICB9P3Nwb3RjaGVja0NvbnRhY3RJZD0ke3Nwb3RDaGVja0NvbnRhY3RJZH0mdHJhY2VJZD0ke3RyYWNlSWR9JnNwb3RjaGVja1VybD0ke3NjcmVlbn1gO1xuXG4gICAgICBsZXQgZnVsbFNwb3RjaGVja1VSTCA9IGJhc2VTcG90Y2hlY2tVUkw7XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGZ1bGxTcG90Y2hlY2tVUkwgKz0gYCYke2tleX09JHt2YWx1ZX1gO1xuICAgICAgfSk7XG5cbiAgICAgIHVwZGF0ZWRTdGF0ZS5zcG90Y2hlY2tVUkwgPSBmdWxsU3BvdGNoZWNrVVJMO1xuICAgICAgc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLnNldFN0YXRlKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGZ1bGxTcG90Y2hlY2tVUkwpO1xuICAgICAgICBjb25zdCB0aGVtZUluZm8gPSByZXNwb25zZS5kYXRhLmNvbmZpZy5nZW5lcmF0ZWRDU1M7XG4gICAgICAgIGNvbnN0IHRoZW1lX3BheWxvYWQgPSB7IHR5cGU6ICdUSEVNRV9VUERBVEVfU1BPVENIRUNLJywgdGhlbWVJbmZvIH07XG4gICAgICAgIHN0YXRlID0gc3BvdGNoZWNrU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCk7XG5cbiAgICAgICAgbGV0IHdlYlZpZXdSZWYgPSBjaGF0ID8gc3RhdGUuY2hhdFdlYlZpZXdSZWYgOiBzdGF0ZS5jbGFzc2ljV2ViVmlld1JlZjtcbiAgICAgICAgbGV0IGlzTG9hZGluZyA9IGNoYXQgPyBzdGF0ZS5pc0NoYXRMb2FkaW5nIDogc3RhdGUuaXNDbGFzc2ljTG9hZGluZztcblxuICAgICAgICBjb25zdCByZXNldFN0YXRlRGF0YSA9IHtcbiAgICAgICAgICB0eXBlOiAnUkVTRVRfU1RBVEUnLFxuICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAuLi4ocmVzcG9uc2UuZGF0YSB8fCB7fSksXG4gICAgICAgICAgICBza2lwOiB0cnVlLFxuICAgICAgICAgICAgc3BvdENoZWNrQXBwZWFyYW5jZToge1xuICAgICAgICAgICAgICAuLi4oYXBwZWFyYW5jZSB8fCB7fSksXG4gICAgICAgICAgICAgIHRhcmdldFR5cGU6ICdNT0JJTEUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNwb3RjaGVja1VybDogc2NyZWVuLFxuICAgICAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgICAgIGVsZW1lbnRCdWlsZGVyUGFyYW1zOiB7XG4gICAgICAgICAgICAgIC4uLih2YXJpYWJsZXMgfHwge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNlbmRNZXNzYWdlVG9JZnJhbWUgPSAoaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCwgZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGlmcmFtZSAmJiBpZnJhbWUuY29udGVudFdpbmRvdykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoZGF0YSwgJyonKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIHRvIGlmcmFtZTonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbW11bmljYXRlV2l0aFdlYlZpZXcgPSBhc3luYyAoaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCkgPT4ge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZW5kTWVzc2FnZVRvSWZyYW1lKGlmcmFtZSwgcmVzZXRTdGF0ZURhdGEpO1xuICAgICAgICAgICAgc2VuZE1lc3NhZ2VUb0lmcmFtZShpZnJhbWUsIHRoZW1lX3BheWxvYWQpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICB9LCAyMDAwKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHdlYlZpZXdSZWYpIHtcbiAgICAgICAgICBpZiAoaXNMb2FkaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29tbXVuaWNhdGVXaXRoV2ViVmlldyh3ZWJWaWV3UmVmKTtcbiAgICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdG9kbzogcmVjaGVjayB0aGlzXG4gICAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHNwb3RjaGVja1N0YXRlU2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAoY3VycmVudFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgaXNDaGF0TG9hZGluZyxcbiAgICAgICAgICAgICAgICAgIGlzQ2xhc3NpY0xvYWRpbmcsXG4gICAgICAgICAgICAgICAgICBjaGF0V2ViVmlld1JlZixcbiAgICAgICAgICAgICAgICAgIGNsYXNzaWNXZWJWaWV3UmVmLFxuICAgICAgICAgICAgICAgIH0gPSBjdXJyZW50U3RhdGU7XG5cbiAgICAgICAgICAgICAgICBpZiAoKCFpc0NoYXRMb2FkaW5nICYmIGNoYXQpIHx8ICghaXNDbGFzc2ljTG9hZGluZyAmJiAhY2hhdCkpIHtcbiAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVXZWJWaWV3UmVmID0gY2hhdFxuICAgICAgICAgICAgICAgICAgICA/IGNoYXRXZWJWaWV3UmVmXG4gICAgICAgICAgICAgICAgICAgIDogY2xhc3NpY1dlYlZpZXdSZWY7XG4gICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlV2ViVmlld1JlZikge1xuICAgICAgICAgICAgICAgICAgICBjb21tdW5pY2F0ZVdpdGhXZWJWaWV3KGFjdGl2ZVdlYlZpZXdSZWYpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydCgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICfimqDvuI8gQWN0aXZlIFdlYlZpZXcgcmVmIGlzIG51bGwgYWZ0ZXIgbG9hZGluZyBjb21wbGV0ZWQnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlV2ViVmlldyA9IHNwb3RjaGVja1N0YXRlU2VydmljZS5zdGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGN1cnJlbnRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkV2ViVmlld1JlZiA9IGNoYXRcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRTdGF0ZS5jaGF0V2ViVmlld1JlZlxuICAgICAgICAgICAgICAgIDogY3VycmVudFN0YXRlLmNsYXNzaWNXZWJWaWV3UmVmO1xuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSXNMb2FkaW5nID0gY2hhdFxuICAgICAgICAgICAgICAgID8gY3VycmVudFN0YXRlLmlzQ2hhdExvYWRpbmdcbiAgICAgICAgICAgICAgICA6IGN1cnJlbnRTdGF0ZS5pc0NsYXNzaWNMb2FkaW5nO1xuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkV2ViVmlld1JlZikge1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZElzTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmVXZWJWaWV3LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICBjb21tdW5pY2F0ZVdpdGhXZWJWaWV3KHVwZGF0ZWRXZWJWaWV3UmVmKTtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfij7MgV2ViVmlldyByZWYgYXZhaWxhYmxlIGJ1dCBzdGlsbCBsb2FkaW5nLi4uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpLmdldFN0YXRlKCk7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpLnNldFN0YXRlKHsgaXNWaXNpYmxlOiB0cnVlIH0pO1xuICB9LCBzdGF0ZS5hZnRlckRlbGF5ICogMTAwMCk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xvc2VTcG90Q2hlY2sgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdGVTZXJ2aWNlID0gZ2V0U3BvdGNoZWNrU3RhdGVTZXJ2aWNlKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBzdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgdHJhY2VJZDogc3RhdGUudHJhY2VJZCxcbiAgICAgIHRyaWdnZXJUb2tlbjogc3RhdGUudHJpZ2dlclRva2VuLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYGh0dHBzOi8vJHtzdGF0ZS5kb21haW5OYW1lfS9hcGkvaW50ZXJuYWwvc3BvdGNoZWNrL2Rpc21pc3MvJHtzdGF0ZS5zcG90Y2hlY2tDb250YWN0SUR9YCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9IDIwMCkge1xuICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coJ0Vycm9yIHBhcnNpbmcgSlNPTjonLCBlcnJvcik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVTdXJ2ZXlFbmQgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlU2VydmljZSA9IGdldFNwb3RjaGVja1N0YXRlU2VydmljZSgpO1xuICBjb25zdCBzdGF0ZSA9IHN0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuICBjb25zdCB3ZWJWaWV3UmVmID1cbiAgICBzdGF0ZS5zcG90Q2hlY2tUeXBlID09PSAnY2hhdCdcbiAgICAgID8gc3RhdGUuY2hhdFdlYlZpZXdSZWZcbiAgICAgIDogc3RhdGUuY2xhc3NpY1dlYlZpZXdSZWY7XG5cbiAgd2ViVmlld1JlZj8uY3VycmVudD8uaW5qZWN0SmF2YVNjcmlwdChgXG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBNZXNzYWdlRXZlbnQoJ21lc3NhZ2UnLCB7XG4gICAgICAgICAgZGF0YTogJHtKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdVTk1PVU5UX0FQUCcgfSl9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pKCk7XG4gICAgYCk7XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlOiBQYXJ0aWFsPFNwb3RjaGVja1N0YXRlPiA9IHtcbiAgICBpc1Zpc2libGU6IGZhbHNlLFxuICAgIGlzQ2xvc2VCdXR0b25FbmFibGVkOiBmYWxzZSxcbiAgICBpc0Z1bGxTY3JlZW5Nb2RlOiBmYWxzZSxcbiAgICBzcG90Y2hlY2tJRDogMCxcbiAgICBjdXJyZW50UXVlc3Rpb25IZWlnaHQ6IDAsXG4gICAgY2xvc2VCdXR0b25TdHlsZToge30sXG4gICAgc3BvdGNoZWNrQ29udGFjdElEOiAwLFxuICAgIHNwb3RjaGVja1VSTDogJycsXG4gICAgc3BvdGNoZWNrUG9zaXRpb246ICdib3R0b20nLFxuICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgc3BvdENoZWNrVHlwZTogJycsXG4gICAgc2NyZWVuSGVpZ2h0OiAwLFxuICAgIGtleUJvYXJkSGVpZ2h0OiAwLFxuICAgIHRleHRQb3NpdGlvbjogMCxcbiAgICBzcG90Q2hlY2tzTW9kZTogJycsXG4gICAgYXZhdGFyRW5hYmxlZDogZmFsc2UsXG4gICAgYXZhdGFyVXJsOiAnJyxcbiAgfTtcblxuICBzdGF0ZVNlcnZpY2Uuc2V0U3RhdGUodXBkYXRlZFN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTcG90Y2hlY2tDb21wb25lbnRDc3NTdHlsZXMgPSAoc3RhdGU6IFNwb3RjaGVja1N0YXRlKSA9PiB7IFxuICBsZXQgc3R5bGVzID0ge31cbiAgbGV0IHdyYXBwZXJTdHlsZXMgPSB7fVxuICBsZXQgZXh0cmFQYWRkaW5nRm9yTWluaUNhcmRDbG9zZUJ1dHRvbklmVG9wUG9zaXRpb24gPSAwO1xuICBpZiAoc3RhdGUuaXNGdWxsU2NyZWVuTW9kZSAmJiBzdGF0ZS5pc1Zpc2libGUpIHtcbiAgICB3cmFwcGVyU3R5bGVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgfTtcbiAgICBzdHlsZXMgPSB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB9O1xuICB9XG4gIFxuICBpZiAoc3RhdGUuaXNWaXNpYmxlICYmIHN0YXRlLmlzTW91bnRlZCkge1xuXG4gICAgbGV0IGhlaWdodCA9IE1hdGgubWluKHN0YXRlLmN1cnJlbnRRdWVzdGlvbkhlaWdodCwgKHN0YXRlLm1heEhlaWdodCAqIHdpbmRvdy5pbm5lckhlaWdodCkpO1xuICAgIGlmKHN0YXRlLnNwb3RDaGVja3NNb2RlID09PSAnbWluaUNhcmQnKSB7XG4gICAgICBpZihzdGF0ZS5hdmF0YXJFbmFibGVkKSB7XG4gICAgICAgIGhlaWdodCA9IGhlaWdodCAtIDU2O1xuICAgICAgfVxuICAgICAgaWYoc3RhdGUuaXNDbG9zZUJ1dHRvbkVuYWJsZWQpIHtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IC0gNDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChzdGF0ZS5zcG90Y2hlY2tQb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgc3R5bGVzID0ge1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCsncHgnLFxuICAgICAgICB9O1xuICAgICAgICB3cmFwcGVyU3R5bGVzID0ge1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0KydweCcsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB3cmFwcGVyU3R5bGVzID0ge1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmKHN0YXRlLnNwb3RDaGVja3NNb2RlID09PSAnbWluaUNhcmQnICYmIHN0YXRlLmlzQ2xvc2VCdXR0b25FbmFibGVkKSB7XG4gICAgICAgICAgICBleHRyYVBhZGRpbmdGb3JNaW5pQ2FyZENsb3NlQnV0dG9uSWZUb3BQb3NpdGlvbiA9IDMwO1xuICAgICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgc3R5bGVzID0ge1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQrJ3B4JyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHdyYXBwZXJTdHlsZXMgPSB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4ge1xuICAgIHdyYXBwZXJTdHlsZXM6IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLCBcbiAgICAgIHdpZHRoOiAnMTAwJScsIFxuICAgICAgaGVpZ2h0OiAnMTAwJScsIFxuICAgICAgdG9wOiAnMCcsIFxuICAgICAgbGVmdDogJzAnLCBcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4zKScsIFxuICAgICAgekluZGV4OiAnOTk5OTk5OTknLFxuICAgICAgZGlzcGxheTogJ25vbmUnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAuLi53cmFwcGVyU3R5bGVzXG4gICAgfSxcbiAgICBzdHlsZXM6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgcGFkZGluZ1RvcDogZXh0cmFQYWRkaW5nRm9yTWluaUNhcmRDbG9zZUJ1dHRvbklmVG9wUG9zaXRpb24rJ3B4JyxcbiAgICAgIC4uLnN0eWxlcyxcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgY2xvc2VTcG90Q2hlY2tBbmRIYW5kbGVTdXJ2ZXlFbmQgPSBhc3luYyAoKSA9PiB7XG4gIGF3YWl0IGNsb3NlU3BvdENoZWNrKCk7XG4gIGhhbmRsZVN1cnZleUVuZCgpO1xufTsiXX0=
@@ -0,0 +1,2 @@
1
+ export { initializeSpotChecks, trackScreen, trackEvent } from './SpotCheck';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYW5ndWxhci11aS9saWIvc3BvdGNoZWNrcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGluaXRpYWxpemVTcG90Q2hlY2tzLCB0cmFja1NjcmVlbiwgdHJhY2tFdmVudCB9IGZyb20gJy4vU3BvdENoZWNrJztcbmV4cG9ydCB0eXBlIHtcbiAgVXNlckRldGFpbHMsXG4gIFZhcmlhYmxlcyxcbiAgQ3VzdG9tUHJvcGVydGllcyxcbiAgVHJhY2tTY3JlZW5Qcm9wcyxcbiAgVHJhY2tFdmVudFByb3BzLFxuICBJbml0aWFsaXplU3BvdENoZWNrc1Byb3BzLFxufSBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export const getStoredUUID = () => {
2
+ return localStorage.getItem('SurveySparrowUUID') || null;
3
+ };
4
+ export const setUUID = (uuid) => {
5
+ localStorage.setItem('SurveySparrowUUID', uuid);
6
+ };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hbmd1bGFyLXVpL2xpYi9zcG90Y2hlY2tzL3N0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtJQUM5QixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDN0QsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7SUFDcEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZ2V0U3RvcmVkVVVJRCA9ICgpID0+IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1N1cnZleVNwYXJyb3dVVUlEJykgfHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFVVSUQgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1N1cnZleVNwYXJyb3dVVUlEJywgdXVpZCk7XG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYW5ndWxhci11aS9saWIvc3BvdGNoZWNrcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTcG90Y2hlY2tTdGF0ZSB7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgc3BvdGNoZWNrUG9zaXRpb246IHN0cmluZztcbiAgc3BvdGNoZWNrVVJMOiBzdHJpbmc7XG4gIHNwb3RjaGVja0lEOiBudW1iZXI7XG4gIHNwb3RjaGVja0NvbnRhY3RJRDogbnVtYmVyO1xuICBhZnRlckRlbGF5OiBudW1iZXI7XG4gIG1heEhlaWdodDogbnVtYmVyO1xuICBjdXJyZW50UXVlc3Rpb25IZWlnaHQ6IG51bWJlcjtcbiAgaXNGdWxsU2NyZWVuTW9kZTogYm9vbGVhbjtcbiAgaXNCYW5uZXJJbWFnZU9uOiBib29sZWFuO1xuICB0cmlnZ2VyVG9rZW46IHN0cmluZztcbiAgY2xvc2VCdXR0b25TdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaXNDbG9zZUJ1dHRvbkVuYWJsZWQ6IGJvb2xlYW47XG4gIGlzU3BvdFBhc3NlZDogYm9vbGVhbjtcbiAgaXNDaGVja3NQYXNzZWQ6IGJvb2xlYW47XG4gIGN1c3RvbUV2ZW50c1Nwb3RDaGVja3M6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFyZ2V0VG9rZW46IHN0cmluZztcbiAgZG9tYWluTmFtZTogc3RyaW5nO1xuICB1c2VyRGV0YWlsczogVXNlckRldGFpbHM7XG4gIHZhcmlhYmxlczogVmFyaWFibGVzO1xuICBjdXN0b21Qcm9wZXJ0aWVzOiBDdXN0b21Qcm9wZXJ0aWVzO1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIGlzQ2xhc3NpY0xvYWRpbmc6IGJvb2xlYW47XG4gIGlzQ2hhdExvYWRpbmc6IGJvb2xlYW47XG4gIGNsYXNzaWNVcmw6IHN0cmluZztcbiAgY2hhdFVybDogc3RyaW5nO1xuICBjbGFzc2ljV2ViVmlld1JlZjogYW55IHwgbnVsbDtcbiAgY2hhdFdlYlZpZXdSZWY6IGFueSB8IG51bGw7XG4gIGZpbHRlcmVkU3BvdENoZWNrczogUmVjb3JkPHN0cmluZywgYW55PltdO1xuICBzcG90Q2hlY2tUeXBlOiBTdHJpbmc7XG4gIGlzTW91bnRlZDogYm9vbGVhbjtcbiAgdGV4dFBvc2l0aW9uOiBudW1iZXI7XG4gIHNjcmVlbkhlaWdodDogbnVtYmVyO1xuICBrZXlCb2FyZEhlaWdodDogbnVtYmVyO1xuICBzcG90Q2hlY2tzTW9kZTogc3RyaW5nO1xuICBhdmF0YXJFbmFibGVkOiBib29sZWFuO1xuICBhdmF0YXJVcmw6IHN0cmluZztcbiAgc2NyZWVud2lzZVVzZXJEZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCBVc2VyRGV0YWlscyB8IHVuZGVmaW5lZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRldGFpbHMge1xuICB1dWlkPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgZmlyc3ROYW1lPzogc3RyaW5nO1xuICBsYXN0TmFtZT86IHN0cmluZztcbiAgbW9iaWxlPzogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVzIHtcbiAgc3BhcnJvd0xhbmc/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Qcm9wZXJ0aWVzIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrU2NyZWVuUHJvcHMge1xuICBzY3JlZW46IHN0cmluZztcbiAgb3B0aW9ucz86IHtcbiAgICB2YXJpYWJsZXM/OiBWYXJpYWJsZXM7XG4gICAgY3VzdG9tUHJvcGVydGllcz86IEN1c3RvbVByb3BlcnRpZXM7XG4gICAgdXNlckRldGFpbHM/OiBVc2VyRGV0YWlscztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja0V2ZW50UHJvcHMge1xuICBzY3JlZW46IHN0cmluZztcbiAgZXZlbnQ6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplU3BvdENoZWNrc1Byb3BzIHtcbiAgZG9tYWluTmFtZTogc3RyaW5nO1xuICB0YXJnZXRUb2tlbjogc3RyaW5nO1xuICB1c2VyRGV0YWlscz86IFVzZXJEZXRhaWxzO1xuICB2YXJpYWJsZXM/OiBWYXJpYWJsZXM7XG4gIGN1c3RvbVByb3BlcnRpZXM/OiBDdXN0b21Qcm9wZXJ0aWVzO1xufVxuIl19