@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">11.11% </span>
26
+ <span class="strong">29.62% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>3/27</span>
28
+ <span class='fraction'>8/27</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">11.11% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/9</span>
35
+ <span class='fraction'>1/9</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/4</span>
42
+ <span class='fraction'>2/4</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">12% </span>
47
+ <span class="strong">32% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>3/25</span>
49
+ <span class='fraction'>8/25</span>
50
50
  </div>
51
51
 
52
52
 
@@ -158,9 +158,9 @@
158
158
  <span class="cline-any cline-neutral">&nbsp;</span>
159
159
  <span class="cline-any cline-neutral">&nbsp;</span>
160
160
  <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-no">&nbsp;</span>
162
- <span class="cline-any cline-no">&nbsp;</span>
163
- <span class="cline-any cline-no">&nbsp;</span>
161
+ <span class="cline-any cline-yes">1x</span>
162
+ <span class="cline-any cline-yes">1x</span>
163
+ <span class="cline-any cline-yes">1x</span>
164
164
  <span class="cline-any cline-neutral">&nbsp;</span>
165
165
  <span class="cline-any cline-neutral">&nbsp;</span>
166
166
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -198,8 +198,8 @@
198
198
  <span class="cline-any cline-neutral">&nbsp;</span>
199
199
  <span class="cline-any cline-neutral">&nbsp;</span>
200
200
  <span class="cline-any cline-neutral">&nbsp;</span>
201
- <span class="cline-any cline-no">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
201
+ <span class="cline-any cline-yes">1x</span>
202
+ <span class="cline-any cline-yes">1x</span>
203
203
  <span class="cline-any cline-neutral">&nbsp;</span>
204
204
  <span class="cline-any cline-neutral">&nbsp;</span>
205
205
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -230,11 +230,11 @@ export default class AnalyticsApi {
230
230
  * @param {string} [config.domain='https://app.referralsaasquatch.com'] The server domain.
231
231
  *
232
232
  */
233
- <span class="fstat-no" title="function not covered" > constructor(c</span>onfig: { domain: string }) {
234
- const raw = <span class="cstat-no" title="statement not covered" >config as unknown | undefined;</span>
235
- const clean = <span class="cstat-no" title="statement not covered" >_validateAnalyticsConfig(raw);</span>
236
- <span class="cstat-no" title="statement not covered" > this.domain =</span>
237
- clean?.["domain"] || window.squatchConfig?.domain || DEFAULT_DOMAIN;
233
+ constructor(config: { domain: string }) {
234
+ const raw = config as unknown | undefined;
235
+ const clean = _validateAnalyticsConfig(raw);
236
+ this.domain =
237
+ clean?.["domain"] || <span class="branch-1 cbranch-no" title="branch not covered" >window.squatchConfig?.domain </span>|| <span class="branch-2 cbranch-no" title="branch not covered" >DEFAULT_DOMAIN;</span>
238
238
  }
239
239
  &nbsp;
240
240
  <span class="fstat-no" title="function not covered" > pushAnalyticsLoadEvent(</span>params: SQHDetails) {
@@ -268,11 +268,11 @@ export default class AnalyticsApi {
268
268
  }
269
269
  }
270
270
  &nbsp;
271
- function <span class="fstat-no" title="function not covered" >_validateAnalyticsConfig(</span>raw: unknown | undefined): {
271
+ function _validateAnalyticsConfig(raw: unknown | undefined): {
272
272
  domain?: string;
273
273
  } {
274
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isObject(raw)) <span class="cstat-no" title="statement not covered" >throw new Error("'options' should be an object");</span></span>
275
- <span class="cstat-no" title="statement not covered" > return raw as { domain?: string };</span>
274
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!isObject(raw)) <span class="cstat-no" title="statement not covered" >throw new Error("'options' should be an object");</span>
275
+ return raw as { domain?: string };
276
276
  }
277
277
  &nbsp;
278
278
  export type SQHDetails = {
@@ -289,7 +289,7 @@ export type SQHDetails = {
289
289
  <div class='footer quiet pad2 space-top1 center small'>
290
290
  Code coverage generated by
291
291
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
292
- at 2023-07-19T17:47:30.555Z
292
+ at 2023-07-21T18:05:37.786Z
293
293
  </div>
294
294
  <script src="../prettify.js"></script>
295
295
  <script>
@@ -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
+