@saasquatch/squatch-js 2.6.0-3 → 2.6.0-5

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/.github/workflows/static.yml +89 -0
  2. package/coverage/clover.xml +843 -3
  3. package/coverage/coverage-final.json +20 -1
  4. package/coverage/lcov-report/DeclarativeWidget.ts.html +790 -0
  5. package/coverage/lcov-report/Widgets.ts.html +1105 -0
  6. package/coverage/lcov-report/api/AnalyticsApi.ts.html +22 -22
  7. package/coverage/lcov-report/api/EventsApi.ts.html +352 -0
  8. package/coverage/lcov-report/api/WidgetApi.ts.html +84 -57
  9. package/coverage/lcov-report/api/graphql.ts.html +1 -1
  10. package/coverage/lcov-report/squatch.ts.html +721 -0
  11. package/coverage/lcov-report/utils/cookieUtils.ts.html +1 -1
  12. package/coverage/lcov-report/utils/decodeUserJwt.ts.html +1 -1
  13. package/coverage/lcov-report/utils/domready.ts.html +1 -1
  14. package/coverage/lcov-report/utils/io.ts.html +7 -7
  15. package/coverage/lcov-report/utils/utmUtils.ts.html +22 -22
  16. package/coverage/lcov-report/utils/validate.ts.html +41 -41
  17. package/coverage/lcov-report/validate.ts.html +1 -1
  18. package/coverage/lcov-report/widgets/EmbedWidget.ts.html +24 -3
  19. package/coverage/lcov-report/widgets/PopupWidget.ts.html +17 -2
  20. package/coverage/lcov-report/widgets/Widget.ts.html +1 -1
  21. package/coverage/lcov-report/widgets/Widgets.ts.html +110 -68
  22. package/coverage/lcov-report/widgets/declarative/DeclarativeWidget.ts.html +368 -74
  23. package/coverage/lcov-report/widgets/declarative/DeclarativeWidgets.ts.html +388 -0
  24. package/coverage/lcov.info +1561 -0
  25. package/dist/api/WidgetApi.d.ts +2 -2
  26. package/dist/squatch.d.ts +28 -1
  27. package/dist/squatch.esm.js +205 -47
  28. package/dist/squatch.esm.js.map +1 -1
  29. package/dist/squatch.js +205 -47
  30. package/dist/squatch.js.map +1 -1
  31. package/dist/squatch.min.js +1 -1
  32. package/dist/widgets/EmbedWidget.d.ts +8 -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 +66 -2
  36. package/dist/widgets/declarative/DeclarativeWidgets.d.ts +22 -0
  37. package/package.json +2 -2
@@ -23,30 +23,30 @@
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">46% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/47</span>
28
+ <span class='fraction'>23/50</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">24.13% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/29</span>
35
+ <span class='fraction'>7/29</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">16.66% </span>
40
+ <span class="strong">42.85% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/6</span>
42
+ <span class='fraction'>3/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">47.91% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/46</span>
49
+ <span class='fraction'>23/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">1x</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>
@@ -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">32x</span>
294
- <span class="cline-any cline-yes">32x</span>
302
+ <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">1x</span>
295
304
  <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-yes">32x</span>
297
- <span class="cline-any cline-yes">32x</span>
298
- <span class="cline-any cline-yes">32x</span>
305
+ <span class="cline-any cline-yes">1x</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">1x</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>
@@ -351,24 +365,24 @@
351
365
  <span class="cline-any cline-neutral">&nbsp;</span>
352
366
  <span class="cline-any cline-neutral">&nbsp;</span>
353
367
  <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-no">&nbsp;</span>
355
- <span class="cline-any cline-no">&nbsp;</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">1x</span>
370
+ <span class="cline-any cline-yes">1x</span>
357
371
  <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-yes">1x</span>
373
+ <span class="cline-any cline-yes">1x</span>
360
374
  <span class="cline-any cline-neutral">&nbsp;</span>
361
375
  <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-yes">1x</span>
363
377
  <span class="cline-any cline-neutral">&nbsp;</span>
364
378
  <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-no">&nbsp;</span>
379
+ <span class="cline-any cline-yes">1x</span>
366
380
  <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
369
- <span class="cline-any cline-no">&nbsp;</span>
370
- <span class="cline-any cline-no">&nbsp;</span>
371
- <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-yes">1x</span>
383
+ <span class="cline-any cline-yes">1x</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-yes">1x</span>
372
386
  <span class="cline-any cline-neutral">&nbsp;</span>
373
387
  <span class="cline-any cline-neutral">&nbsp;</span>
374
388
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -381,7 +395,7 @@
381
395
  <span class="cline-any cline-neutral">&nbsp;</span>
382
396
  <span class="cline-any cline-no">&nbsp;</span>
383
397
  <span class="cline-any cline-neutral">&nbsp;</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-yes">1x</span>
385
399
  <span class="cline-any cline-neutral">&nbsp;</span>
386
400
  <span class="cline-any cline-neutral">&nbsp;</span>
387
401
  <span class="cline-any cline-neutral">&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
@@ -532,29 +555,29 @@ export default class WidgetApi {
532
555
  * to validate the data (can be disabled)
533
556
  * @return {Promise} template html if true.
534
557
  */
535
- <span class="fstat-no" title="function not covered" > render(</span>params: WidgetConfig): Promise&lt;any&gt; {
536
- const raw = <span class="cstat-no" title="statement not covered" >params as unknown;</span>
537
- const clean = <span class="cstat-no" title="statement not covered" >validatePasswordlessConfig(raw);</span>
538
- const { widgetType, engagementMedium = <span class="branch-0 cbranch-no" title="branch not covered" >"POPUP",</span> jwt, user } = <span class="cstat-no" title="statement not covered" >clean;</span>
558
+ render(params: WidgetConfig): Promise&lt;any&gt; {
559
+ const raw = params as unknown;
560
+ const clean = validatePasswordlessConfig(raw);
561
+ const { widgetType, engagementMedium = "POPUP", jwt, user } = clean;
539
562
  &nbsp;
540
- const tenantAlias = <span class="cstat-no" title="statement not covered" >encodeURIComponent(this.tenantAlias);</span>
541
- const accountId = <span class="cstat-no" title="statement not covered" >user?.accountId</span>
542
- ? encodeURIComponent(user.accountId)
563
+ const tenantAlias = encodeURIComponent(this.tenantAlias);
564
+ const accountId = user?.accountId
565
+ ? <span class="branch-0 cbranch-no" title="branch not covered" >encodeURIComponent(user.accountId)</span>
543
566
  : null;
544
- const userId = <span class="cstat-no" title="statement not covered" >user?.id ? encodeURIComponent(user.id) : null;</span>
567
+ const userId = user?.id ? <span class="branch-0 cbranch-no" title="branch not covered" >encodeURIComponent(user.id) </span>: null;
545
568
  &nbsp;
546
569
  const locale =
547
- <span class="cstat-no" title="statement not covered" > clean.locale ?? validateLocale(navigator.language.replace(/\-/g, "_"));</span>
570
+ clean.locale ?? validateLocale(navigator.language.replace(/\-/g, "_"));
548
571
  &nbsp;
549
- const path = <span class="cstat-no" title="statement not covered" >`/api/v1/${tenantAlias}/graphql`;</span>
550
- const url = <span class="cstat-no" title="statement not covered" >this.domain + path;</span>
551
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >async </span>(resolve, reject) =&gt; {</span>
552
- <span class="cstat-no" title="statement not covered" > try {</span>
553
- const res = <span class="cstat-no" title="statement not covered" >await doQuery(</span>
572
+ const path = `/api/v1/${tenantAlias}/graphql`;
573
+ const url = this.domain + path;
574
+ return new Promise(async (resolve, reject) =&gt; {
575
+ try {
576
+ const res = await doQuery(
554
577
  url,
555
578
  RENDER_WIDGET_QUERY,
556
579
  {
557
- user: userId &amp;&amp; accountId ? { id: userId, accountId } : null,
580
+ user: userId &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >accountId </span>? <span class="branch-0 cbranch-no" title="branch not covered" >{ id: userId, accountId } </span>: null,
558
581
  engagementMedium,
559
582
  widgetType,
560
583
  locale,
@@ -563,7 +586,7 @@ export default class WidgetApi {
563
586
  );
564
587
  <span class="cstat-no" title="statement not covered" > resolve(res?.data?.renderWidget);</span>
565
588
  } catch (e) {
566
- <span class="cstat-no" title="statement not covered" > reject(e);</span>
589
+ reject(e);
567
590
  }
568
591
  });
569
592
  }
@@ -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-19T17:47:30.555Z
646
+ at 2023-07-21T18:05:37.786Z
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-19T17:47:30.555Z
118
+ at 2023-07-21T18:05:37.786Z
119
119
  </div>
120
120
  <script src="../prettify.js"></script>
121
121
  <script>