@saasquatch/squatch-js 2.6.0-4 → 2.6.0-6

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 (37) hide show
  1. package/coverage/clover.xml +849 -64
  2. package/coverage/coverage-final.json +19 -1
  3. package/coverage/lcov-report/DeclarativeWidget.ts.html +298 -118
  4. package/coverage/lcov-report/Widgets.ts.html +70 -22
  5. package/coverage/lcov-report/api/AnalyticsApi.ts.html +38 -38
  6. package/coverage/lcov-report/api/EventsApi.ts.html +352 -0
  7. package/coverage/lcov-report/api/WidgetApi.ts.html +57 -30
  8. package/coverage/lcov-report/api/graphql.ts.html +1 -1
  9. package/coverage/lcov-report/squatch.ts.html +721 -0
  10. package/coverage/lcov-report/utils/cookieUtils.ts.html +10 -10
  11. package/coverage/lcov-report/utils/decodeUserJwt.ts.html +19 -19
  12. package/coverage/lcov-report/utils/domready.ts.html +1 -1
  13. package/coverage/lcov-report/utils/io.ts.html +7 -7
  14. package/coverage/lcov-report/utils/utmUtils.ts.html +1 -1
  15. package/coverage/lcov-report/utils/validate.ts.html +37 -37
  16. package/coverage/lcov-report/validate.ts.html +1 -1
  17. package/coverage/lcov-report/widgets/EmbedWidget.ts.html +67 -19
  18. package/coverage/lcov-report/widgets/PopupWidget.ts.html +23 -8
  19. package/coverage/lcov-report/widgets/Widget.ts.html +7 -16
  20. package/coverage/lcov-report/widgets/Widgets.ts.html +61 -16
  21. package/coverage/lcov-report/widgets/declarative/DeclarativeWidget.ts.html +373 -82
  22. package/coverage/lcov-report/widgets/declarative/DeclarativeWidgets.ts.html +388 -0
  23. package/coverage/lcov.info +1559 -125
  24. package/dist/api/WidgetApi.d.ts +2 -2
  25. package/dist/squatch.d.ts +28 -1
  26. package/dist/squatch.esm.js +274 -121
  27. package/dist/squatch.esm.js.map +1 -1
  28. package/dist/squatch.js +274 -121
  29. package/dist/squatch.js.map +1 -1
  30. package/dist/squatch.min.js +1 -1
  31. package/dist/types.d.ts +8 -6
  32. package/dist/widgets/EmbedWidget.d.ts +6 -0
  33. package/dist/widgets/PopupWidget.d.ts +6 -1
  34. package/dist/widgets/Widgets.d.ts +15 -2
  35. package/dist/widgets/declarative/DeclarativeWidget.d.ts +57 -1
  36. package/dist/widgets/declarative/DeclarativeWidgets.d.ts +22 -0
  37. package/package.json +1 -1
@@ -0,0 +1,352 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for api/EventsApi.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">api</a> EventsApi.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>32/32</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>6/6</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>4/4</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>27/27</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
156
+ <span class="cline-any cline-neutral">&nbsp;</span>
157
+ <span class="cline-any cline-yes">1x</span>
158
+ <span class="cline-any cline-neutral">&nbsp;</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-neutral">&nbsp;</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span>
163
+ <span class="cline-any cline-neutral">&nbsp;</span>
164
+ <span class="cline-any cline-neutral">&nbsp;</span>
165
+ <span class="cline-any cline-neutral">&nbsp;</span>
166
+ <span class="cline-any cline-neutral">&nbsp;</span>
167
+ <span class="cline-any cline-neutral">&nbsp;</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
169
+ <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-yes">1x</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
+ <span class="cline-any cline-neutral">&nbsp;</span>
187
+ <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-neutral">&nbsp;</span>
189
+ <span class="cline-any cline-neutral">&nbsp;</span>
190
+ <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-neutral">&nbsp;</span>
192
+ <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-neutral">&nbsp;</span>
196
+ <span class="cline-any cline-neutral">&nbsp;</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-yes">10x</span>
201
+ <span class="cline-any cline-yes">10x</span>
202
+ <span class="cline-any cline-yes">10x</span>
203
+ <span class="cline-any cline-yes">10x</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-neutral">&nbsp;</span>
215
+ <span class="cline-any cline-yes">10x</span>
216
+ <span class="cline-any cline-yes">10x</span>
217
+ <span class="cline-any cline-yes">10x</span>
218
+ <span class="cline-any cline-yes">5x</span>
219
+ <span class="cline-any cline-yes">4x</span>
220
+ <span class="cline-any cline-yes">4x</span>
221
+ <span class="cline-any cline-yes">4x</span>
222
+ <span class="cline-any cline-yes">4x</span>
223
+ <span class="cline-any cline-yes">4x</span>
224
+ <span class="cline-any cline-yes">4x</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-yes">10x</span>
230
+ <span class="cline-any cline-yes">9x</span>
231
+ <span class="cline-any cline-yes">8x</span>
232
+ <span class="cline-any cline-yes">7x</span>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-yes">6x</span>
235
+ <span class="cline-any cline-yes">6x</span>
236
+ <span class="cline-any cline-yes">1x</span>
237
+ <span class="cline-any cline-yes">5x</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-yes">5x</span>
242
+ <span class="cline-any cline-yes">4x</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { doPost } from "../utils/io";
245
+ import { ConfigOptions, JWT } from "../types";
246
+ import { isObject, validateConfig } from "../utils/validate";
247
+ &nbsp;
248
+ type TrackOptions = { jwt?: JWT };
249
+ &nbsp;
250
+ interface UserEventInput {
251
+ userId: string;
252
+ accountId: string;
253
+ idempotencyKey?: string;
254
+ events: UserEventDataInput[];
255
+ }
256
+ &nbsp;
257
+ interface UserEventDataInput {
258
+ key: string; // Require -- the name of the event
259
+ id?: string; // Optional -- a globally unique ID for the event
260
+ fields?: object; // Arbitrary JSON data
261
+ dateTriggered?: number; // The date triggered
262
+ }
263
+ &nbsp;
264
+ /**
265
+ *
266
+ * The EventsApi class is a wrapper around the open endpoints of the SaaSquatch REST API.
267
+ *
268
+ */
269
+ export default class EventsApi {
270
+ tenantAlias: string;
271
+ domain: string;
272
+ /**
273
+ * Initialize a new {@link EventsApi} instance.
274
+ *
275
+ * @param {ConfigOptions} config Config details
276
+ *
277
+ * @example &lt;caption&gt;Browser example&lt;/caption&gt;
278
+ * var squatchApi = new squatch.EventsApi({tenantAlias:'test_12b5bo1b25125'});
279
+ *
280
+ * @example &lt;caption&gt;Browserify/Webpack example&lt;/caption&gt;
281
+ * var EventsApi = require('@saasquatch/squatch-js').EventsApi;
282
+ * var squatchApi = new EventsApi({tenantAlias:'test_12b5bo1b25125'});
283
+ *
284
+ * @example &lt;caption&gt;Babel+Browserify/Webpack example&lt;/caption&gt;
285
+ * import {EventsApi} from '@saasquatch/squatch-js';
286
+ * let squatchApi = new EventsApi({tenantAlias:'test_12b5bo1b25125'});
287
+ */
288
+ constructor(config: ConfigOptions) {
289
+ const raw = config as unknown | undefined; // Flags that we need to validate anything we use from this type
290
+ const clean = validateConfig(raw);
291
+ this.tenantAlias = clean.tenantAlias;
292
+ this.domain = clean.domain;
293
+ }
294
+ &nbsp;
295
+ /**
296
+ * Track an event for a user
297
+ *
298
+ * @param params Parameters for request
299
+ * @param options.jwt the JSON Web Token (JWT) that is used to authenticate the user
300
+ *
301
+ * @return An ID to confirm the event has been accepted for asynchronous processing
302
+ */
303
+ track(params: UserEventInput, options?: TrackOptions): Promise&lt;any&gt; {
304
+ const raw = params as unknown;
305
+ const rawOpts = options as unknown;
306
+ const body = _validateEvent(raw);
307
+ const { jwt } = _validateTrackOptions(rawOpts);
308
+ const ta = encodeURIComponent(this.tenantAlias);
309
+ const userId = encodeURIComponent(body.userId);
310
+ const accountId = encodeURIComponent(body.accountId);
311
+ const path = `/api/v1/${ta}/open/account/${accountId}/user/${userId}/events`;
312
+ const url = this.domain + path;
313
+ return doPost(url, JSON.stringify(body), jwt);
314
+ }
315
+ }
316
+ &nbsp;
317
+ function _validateEvent(raw: unknown | undefined): UserEventInput {
318
+ if (!isObject(raw)) throw new Error("tracking parameter must be an object");
319
+ if (!raw?.["accountId"]) throw new Error("accountId field is required");
320
+ if (!raw?.["events"]) throw new Error("events field is required");
321
+ if (!raw?.["userId"]) throw new Error("userId field is required");
322
+ &nbsp;
323
+ const clean = raw as UserEventInput;
324
+ if (!Array.isArray(clean.events))
325
+ throw new Error("'events' should be an array");
326
+ return clean;
327
+ }
328
+ &nbsp;
329
+ function _validateTrackOptions(raw: unknown): TrackOptions {
330
+ if (!isObject(raw)) throw new Error("'options' should be an object");
331
+ return raw as TrackOptions;
332
+ }
333
+ &nbsp;</pre></td></tr></table></pre>
334
+
335
+ <div class='push'></div><!-- for sticky footer -->
336
+ </div><!-- /wrapper -->
337
+ <div class='footer quiet pad2 space-top1 center small'>
338
+ Code coverage generated by
339
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
340
+ at 2023-07-21T21:34:58.776Z
341
+ </div>
342
+ <script src="../prettify.js"></script>
343
+ <script>
344
+ window.onload = function () {
345
+ prettyPrint();
346
+ };
347
+ </script>
348
+ <script src="../sorter.js"></script>
349
+ <script src="../block-navigation.js"></script>
350
+ </body>
351
+ </html>
352
+
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">21.27% </span>
26
+ <span class="strong">20% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/47</span>
28
+ <span class='fraction'>10/50</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">16.66% </span>
40
+ <span class="strong">14.28% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/6</span>
42
+ <span class='fraction'>1/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">21.73% </span>
47
+ <span class="strong">20.83% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/46</span>
49
+ <span class='fraction'>10/48</span>
50
50
  </div>
51
51
 
52
52
 
@@ -245,7 +245,16 @@
245
245
  <a name='L180'></a><a href='#L180'>180</a>
246
246
  <a name='L181'></a><a href='#L181'>181</a>
247
247
  <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
249
258
  <span class="cline-any cline-neutral">&nbsp;</span>
250
259
  <span class="cline-any cline-neutral">&nbsp;</span>
251
260
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -254,21 +263,21 @@
254
263
  <span class="cline-any cline-neutral">&nbsp;</span>
255
264
  <span class="cline-any cline-neutral">&nbsp;</span>
256
265
  <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-yes">2x</span>
258
- <span class="cline-any cline-yes">2x</span>
266
+ <span class="cline-any cline-yes">1x</span>
267
+ <span class="cline-any cline-yes">1x</span>
259
268
  <span class="cline-any cline-neutral">&nbsp;</span>
260
269
  <span class="cline-any cline-neutral">&nbsp;</span>
261
270
  <span class="cline-any cline-neutral">&nbsp;</span>
262
271
  <span class="cline-any cline-neutral">&nbsp;</span>
263
272
  <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-yes">2x</span>
273
+ <span class="cline-any cline-yes">1x</span>
265
274
  <span class="cline-any cline-neutral">&nbsp;</span>
266
275
  <span class="cline-any cline-neutral">&nbsp;</span>
267
276
  <span class="cline-any cline-neutral">&nbsp;</span>
268
277
  <span class="cline-any cline-neutral">&nbsp;</span>
269
278
  <span class="cline-any cline-neutral">&nbsp;</span>
270
279
  <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-yes">2x</span>
280
+ <span class="cline-any cline-yes">1x</span>
272
281
  <span class="cline-any cline-neutral">&nbsp;</span>
273
282
  <span class="cline-any cline-neutral">&nbsp;</span>
274
283
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -290,12 +299,12 @@
290
299
  <span class="cline-any cline-neutral">&nbsp;</span>
291
300
  <span class="cline-any cline-neutral">&nbsp;</span>
292
301
  <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-yes">71x</span>
294
- <span class="cline-any cline-yes">71x</span>
302
+ <span class="cline-any cline-yes">5x</span>
303
+ <span class="cline-any cline-yes">5x</span>
295
304
  <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-yes">71x</span>
297
- <span class="cline-any cline-yes">71x</span>
298
- <span class="cline-any cline-yes">71x</span>
305
+ <span class="cline-any cline-yes">5x</span>
306
+ <span class="cline-any cline-yes">5x</span>
307
+ <span class="cline-any cline-yes">5x</span>
299
308
  <span class="cline-any cline-neutral">&nbsp;</span>
300
309
  <span class="cline-any cline-neutral">&nbsp;</span>
301
310
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -320,6 +329,7 @@
320
329
  <span class="cline-any cline-neutral">&nbsp;</span>
321
330
  <span class="cline-any cline-neutral">&nbsp;</span>
322
331
  <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
333
  <span class="cline-any cline-no">&nbsp;</span>
324
334
  <span class="cline-any cline-neutral">&nbsp;</span>
325
335
  <span class="cline-any cline-no">&nbsp;</span>
@@ -330,6 +340,10 @@
330
340
  <span class="cline-any cline-neutral">&nbsp;</span>
331
341
  <span class="cline-any cline-no">&nbsp;</span>
332
342
  <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
347
  <span class="cline-any cline-no">&nbsp;</span>
334
348
  <span class="cline-any cline-no">&nbsp;</span>
335
349
  <span class="cline-any cline-no">&nbsp;</span>
@@ -418,12 +432,16 @@
418
432
  <span class="cline-any cline-neutral">&nbsp;</span>
419
433
  <span class="cline-any cline-neutral">&nbsp;</span>
420
434
  <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-no">&nbsp;</span>
422
435
  <span class="cline-any cline-neutral">&nbsp;</span>
423
436
  <span class="cline-any cline-neutral">&nbsp;</span>
424
437
  <span class="cline-any cline-no">&nbsp;</span>
425
438
  <span class="cline-any cline-neutral">&nbsp;</span>
426
439
  <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
427
445
  <span class="cline-any cline-no">&nbsp;</span>
428
446
  <span class="cline-any cline-no">&nbsp;</span>
429
447
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -481,7 +499,7 @@ export default class WidgetApi {
481
499
  }
482
500
  &nbsp;
483
501
  /**
484
- * Creates/upserts user.
502
+ * Creates/upserts user, requests widget template.
485
503
  *
486
504
  * @param {Object} params Parameters for request
487
505
  * @param {Object?} params.user The user details
@@ -501,6 +519,7 @@ export default class WidgetApi {
501
519
  widgetType,
502
520
  engagementMedium = <span class="branch-0 cbranch-no" title="branch not covered" >"POPUP",</span>
503
521
  jwt,
522
+ locale,
504
523
  user,
505
524
  } = <span class="cstat-no" title="statement not covered" >clean as WithRequired&lt;WidgetConfig, "user"&gt;;</span>
506
525
  &nbsp;
@@ -510,7 +529,11 @@ export default class WidgetApi {
510
529
  : null;
511
530
  const userId = <span class="cstat-no" title="statement not covered" >user.id ? encodeURIComponent(user.id) : null;</span>
512
531
  &nbsp;
513
- const optionalParams = <span class="cstat-no" title="statement not covered" >_buildParams({ widgetType, engagementMedium });</span>
532
+ const optionalParams = <span class="cstat-no" title="statement not covered" >_buildParams({</span>
533
+ widgetType,
534
+ engagementMedium,
535
+ locale,
536
+ });
514
537
  &nbsp;
515
538
  const path = <span class="cstat-no" title="statement not covered" >`/api/v1/${tenantAlias}/widget/account/${accountId}/user/${userId}/upsert${optionalParams}`;</span>
516
539
  const url = <span class="cstat-no" title="statement not covered" >this.domain + path;</span>
@@ -520,7 +543,7 @@ export default class WidgetApi {
520
543
  }
521
544
  &nbsp;
522
545
  /**
523
- * Description here.
546
+ * Requests widget template
524
547
  *
525
548
  * @param {Object} params Parameters for request
526
549
  * @param {Object} params.user The user details
@@ -596,18 +619,22 @@ export default class WidgetApi {
596
619
  function <span class="fstat-no" title="function not covered" >_buildParams(</span>{
597
620
  widgetType,
598
621
  engagementMedium,
622
+ locale,
599
623
  }: {
600
- widgetType?: WidgetType;
601
624
  engagementMedium: EngagementMedium;
625
+ widgetType?: WidgetType;
626
+ locale?: string;
602
627
  }) {
603
- const widgetTypeP = <span class="cstat-no" title="statement not covered" >widgetType</span>
604
- ? `?widgetType=${encodeURIComponent(widgetType)}`
605
- : ``;
606
- const engagementMediumP = <span class="cstat-no" title="statement not covered" >`${</span>
607
- widgetType ? "&amp;" : "?"
608
- }engagementMedium=${encodeURIComponent(engagementMedium)}`;
609
- const optionalParams = <span class="cstat-no" title="statement not covered" >widgetTypeP + engagementMediumP;</span>
610
- <span class="cstat-no" title="statement not covered" > return optionalParams;</span>
628
+ const engagementMediumP = <span class="cstat-no" title="statement not covered" >`engagementMedium=${encodeURIComponent(</span>
629
+ engagementMedium
630
+ )}`;
631
+ const widgetTypeP =
632
+ <span class="cstat-no" title="statement not covered" > widgetType &amp;&amp; `widgetType=${encodeURIComponent(widgetType)}`;</span>
633
+ const localeP = <span class="cstat-no" title="statement not covered" >locale &amp;&amp; `locale=${encodeURIComponent(locale)}`;</span>
634
+ &nbsp;
635
+ const params = <span class="cstat-no" title="statement not covered" >[engagementMediumP, widgetTypeP, localeP].filter(<span class="fstat-no" title="function not covered" >(x</span>) =&gt; <span class="cstat-no" title="statement not covered" >!!x)</span>;</span>
636
+ const queryString = <span class="cstat-no" title="statement not covered" >`?${params.join("&amp;")}`;</span>
637
+ <span class="cstat-no" title="statement not covered" > return queryString;</span>
611
638
  }
612
639
  &nbsp;</pre></td></tr></table></pre>
613
640
 
@@ -616,7 +643,7 @@ function <span class="fstat-no" title="function not covered" >_buildParams(</spa
616
643
  <div class='footer quiet pad2 space-top1 center small'>
617
644
  Code coverage generated by
618
645
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
619
- at 2023-07-19T23:25:49.700Z
646
+ at 2023-07-24T22:01:41.987Z
620
647
  </div>
621
648
  <script src="../prettify.js"></script>
622
649
  <script>
@@ -115,7 +115,7 @@
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
118
- at 2023-07-19T21:42:01.083Z
118
+ at 2023-07-24T22:01:41.987Z
119
119
  </div>
120
120
  <script src="../prettify.js"></script>
121
121
  <script>