clarity-js 0.7.66 → 0.7.68

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 (102) hide show
  1. package/README.md +26 -26
  2. package/build/clarity.extended.js +1 -1
  3. package/build/clarity.insight.js +1 -1
  4. package/build/clarity.js +5422 -5372
  5. package/build/clarity.min.js +1 -1
  6. package/build/clarity.module.js +5422 -5372
  7. package/build/clarity.performance.js +1 -1
  8. package/package.json +70 -70
  9. package/rollup.config.ts +98 -98
  10. package/src/clarity.ts +60 -60
  11. package/src/core/api.ts +8 -8
  12. package/src/core/config.ts +32 -32
  13. package/src/core/copy.ts +3 -3
  14. package/src/core/event.ts +30 -26
  15. package/src/core/hash.ts +19 -19
  16. package/src/core/history.ts +73 -73
  17. package/src/core/index.ts +83 -83
  18. package/src/core/measure.ts +19 -19
  19. package/src/core/report.ts +28 -28
  20. package/src/core/scrub.ts +196 -196
  21. package/src/core/task.ts +180 -180
  22. package/src/core/time.ts +19 -19
  23. package/src/core/timeout.ts +10 -10
  24. package/src/core/version.ts +2 -2
  25. package/src/data/baseline.ts +123 -92
  26. package/src/data/compress.ts +31 -31
  27. package/src/data/consent.ts +20 -20
  28. package/src/data/custom.ts +23 -23
  29. package/src/data/dimension.ts +53 -53
  30. package/src/data/encode.ts +134 -127
  31. package/src/data/envelope.ts +53 -53
  32. package/src/data/extract.ts +204 -204
  33. package/src/data/index.ts +46 -46
  34. package/src/data/limit.ts +44 -44
  35. package/src/data/metadata.ts +356 -356
  36. package/src/data/metric.ts +51 -51
  37. package/src/data/ping.ts +36 -36
  38. package/src/data/signal.ts +30 -30
  39. package/src/data/summary.ts +34 -34
  40. package/src/data/token.ts +39 -39
  41. package/src/data/upgrade.ts +37 -37
  42. package/src/data/upload.ts +283 -283
  43. package/src/data/variable.ts +83 -83
  44. package/src/diagnostic/encode.ts +40 -40
  45. package/src/diagnostic/fraud.ts +36 -36
  46. package/src/diagnostic/index.ts +15 -15
  47. package/src/diagnostic/internal.ts +28 -28
  48. package/src/diagnostic/script.ts +37 -37
  49. package/src/global.ts +6 -6
  50. package/src/index.ts +9 -9
  51. package/src/insight/blank.ts +14 -14
  52. package/src/insight/encode.ts +60 -60
  53. package/src/insight/snapshot.ts +114 -114
  54. package/src/interaction/change.ts +40 -40
  55. package/src/interaction/click.ts +162 -156
  56. package/src/interaction/clipboard.ts +34 -34
  57. package/src/interaction/encode.ts +193 -191
  58. package/src/interaction/index.ts +59 -59
  59. package/src/interaction/input.ts +59 -59
  60. package/src/interaction/pointer.ts +139 -139
  61. package/src/interaction/resize.ts +47 -47
  62. package/src/interaction/scroll.ts +124 -124
  63. package/src/interaction/selection.ts +68 -68
  64. package/src/interaction/submit.ts +32 -32
  65. package/src/interaction/timeline.ts +65 -65
  66. package/src/interaction/unload.ts +28 -28
  67. package/src/interaction/visibility.ts +26 -26
  68. package/src/layout/animation.ts +133 -133
  69. package/src/layout/discover.ts +31 -31
  70. package/src/layout/document.ts +48 -48
  71. package/src/layout/dom.ts +414 -414
  72. package/src/layout/encode.ts +145 -145
  73. package/src/layout/index.ts +41 -41
  74. package/src/layout/mutation.ts +340 -340
  75. package/src/layout/node.ts +264 -264
  76. package/src/layout/offset.ts +19 -19
  77. package/src/layout/region.ts +153 -153
  78. package/src/layout/schema.ts +63 -63
  79. package/src/layout/selector.ts +82 -82
  80. package/src/layout/style.ts +150 -149
  81. package/src/layout/target.ts +32 -32
  82. package/src/layout/traverse.ts +27 -27
  83. package/src/performance/blank.ts +7 -7
  84. package/src/performance/encode.ts +31 -31
  85. package/src/performance/index.ts +14 -14
  86. package/src/performance/interaction.ts +125 -125
  87. package/src/performance/navigation.ts +31 -31
  88. package/src/performance/observer.ts +108 -108
  89. package/src/queue.ts +33 -33
  90. package/test/core.test.ts +139 -139
  91. package/test/helper.ts +162 -162
  92. package/test/html/core.html +27 -27
  93. package/test/tsconfig.test.json +5 -5
  94. package/tsconfig.json +21 -21
  95. package/tslint.json +32 -32
  96. package/types/core.d.ts +154 -151
  97. package/types/data.d.ts +504 -497
  98. package/types/diagnostic.d.ts +24 -24
  99. package/types/index.d.ts +39 -39
  100. package/types/interaction.d.ts +165 -157
  101. package/types/layout.d.ts +273 -273
  102. package/types/performance.d.ts +64 -64
package/types/data.d.ts CHANGED
@@ -1,498 +1,505 @@
1
- import { Time } from "@clarity-types/core";
2
- export type Target = (number | Node);
3
- export type Token = (string | number | number[] | string[] | (string | number)[]);
4
- export type DecodedToken = (any | any[]);
5
-
6
- export type MetadataCallback = (data: Metadata, playback: boolean) => void;
7
- export interface MetadataCallbackOptions {
8
- callback: MetadataCallback,
9
- wait: boolean,
10
- recall: boolean,
11
- called: boolean
12
- }
13
- export type SignalCallback = (data: ClaritySignal) => void
14
-
15
- /* Enum */
16
- export const enum Event {
17
- /* Data */
18
- Metric = 0,
19
- Dimension = 1,
20
- Upload = 2,
21
- Upgrade = 3,
22
- Baseline = 4,
23
- Discover = 5,
24
- Mutation = 6,
25
- Region = 7,
26
- Document = 8,
27
- Click = 9,
28
- Scroll = 10,
29
- Resize = 11,
30
- MouseMove = 12,
31
- MouseDown = 13,
32
- MouseUp = 14,
33
- MouseWheel = 15,
34
- DoubleClick = 16,
35
- TouchStart = 17,
36
- TouchEnd = 18,
37
- TouchMove = 19,
38
- TouchCancel = 20,
39
- Selection = 21,
40
- Timeline = 22,
41
- Page = 23,
42
- Custom = 24,
43
- Ping = 25,
44
- Unload = 26,
45
- Input = 27,
46
- Visibility = 28,
47
- Navigation = 29,
48
- /**
49
- * @deprecated No longer support Network Connection
50
- */
51
- Connection = 30,
52
- ScriptError = 31,
53
- /**
54
- * @deprecated No longer support Image Error
55
- */
56
- ImageError = 32,
57
- Log = 33,
58
- Variable = 34,
59
- Limit = 35,
60
- Summary = 36,
61
- /**
62
- * @deprecated No longer support Box event
63
- */
64
- Box = 37,
65
- Clipboard = 38,
66
- Submit = 39,
67
- Extract = 40,
68
- Fraud = 41,
69
- Change = 42,
70
- Snapshot = 43,
71
- Animation = 44,
72
- StyleSheetAdoption = 45,
73
- StyleSheetUpdate = 46,
74
-
75
- // Apps specific events
76
- WebViewDiscover = 100,
77
- WebViewMutation = 101,
78
- MutationError = 102,
79
- FragmentVisibility = 103,
80
- Keystrokes = 104,
81
- BackGesture = 105,
82
- WebViewStatus = 106,
83
- AppInstallReferrer = 107
84
- }
85
-
86
- export const enum Metric {
87
- ClientTimestamp = 0,
88
- Playback = 1,
89
- TotalBytes = 2,
90
- LayoutCost = 3,
91
- TotalCost = 4,
92
- InvokeCount = 5,
93
- ThreadBlockedTime = 6,
94
- LongTaskCount = 7,
95
- LargestPaint = 8,
96
- CumulativeLayoutShift = 9,
97
- FirstInputDelay = 10,
98
- RatingValue = 11,
99
- RatingCount = 12,
100
- ProductPrice = 13,
101
- ScreenWidth = 14,
102
- ScreenHeight = 15,
103
- ColorDepth = 16,
104
- ReviewCount = 17,
105
- BestRating = 18,
106
- WorstRating = 19,
107
- CartPrice = 20,
108
- CartShipping = 21,
109
- CartDiscount = 22,
110
- CartTax = 23,
111
- CartTotal = 24,
112
- EventCount = 25,
113
- Automation = 26,
114
- Mobile = 27,
115
- UploadTime = 28,
116
- SinglePage = 29,
117
- /**
118
- * @deprecated Browser API is deprecated. Reference: https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory
119
- */
120
- UsedMemory = 30,
121
- Iframed = 31,
122
- MaxTouchPoints = 32,
123
- HardwareConcurrency = 33,
124
- DeviceMemory = 34,
125
- Electron = 35,
126
- ConstructedStyles = 36,
127
- /**
128
- * @deprecated Move it to dimension as it'll report only last value
129
- */
130
- InteractionNextPaint = 37,
131
- HistoryClear = 38
132
- }
133
-
134
- export const enum Dimension {
135
- UserAgent = 0,
136
- Url = 1,
137
- Referrer = 2,
138
- PageTitle = 3,
139
- NetworkHosts = 4,
140
- SchemaType = 5,
141
- ProductBrand = 6,
142
- ProductAvailability = 7,
143
- AuthorName = 8,
144
- Language = 9,
145
- ProductName = 10,
146
- ProductCategory = 11,
147
- ProductSku = 12,
148
- ProductCurrency = 13,
149
- ProductCondition = 14,
150
- TabId = 15,
151
- PageLanguage = 16,
152
- DocumentDirection = 17,
153
- Headline = 18,
154
- MetaType = 19,
155
- MetaTitle = 20,
156
- Generator = 21,
157
- Platform = 22,
158
- PlatformVersion = 23,
159
- Brand = 24,
160
- Model = 25,
161
- DevicePixelRatio = 26,
162
- ConnectionType = 27,
163
- Dob = 28,
164
- CookieVersion = 29,
165
- DeviceFamily = 30, // Allows iOS SDK to override the DeviceFamily value parsed from UserAgent.
166
- InitialScrollTop = 31,
167
- InitialScrollBottom = 32,
168
- AncestorOrigins = 33,
169
- Timezone = 34,
170
- TimezoneOffset = 35,
171
- Consent = 36,
172
- InteractionNextPaint = 37
173
- }
174
-
175
- export const enum Check {
176
- None = 0,
177
- Payload = 1,
178
- Shutdown = 2,
179
- Retry = 3,
180
- Bytes = 4,
181
- Collection = 5,
182
- Server = 6,
183
- Page = 7
184
- }
185
-
186
- export const enum Code {
187
- RunTask = 0,
188
- CssRules = 1,
189
- MutationObserver = 2,
190
- PerformanceObserver = 3,
191
- CallStackDepth = 4,
192
- Selector = 5,
193
- Metric = 6,
194
- /**
195
- * @deprecated No longer support ContentSecurityPolicy
196
- */
197
- ContentSecurityPolicy = 7,
198
- Config = 8,
199
- FunctionExecutionTime = 9
200
- }
201
-
202
- export const enum Severity {
203
- Info = 0,
204
- Warning = 1,
205
- Error = 2,
206
- Fatal = 3
207
- }
208
-
209
- export const enum Upload {
210
- Async = 0,
211
- Beacon = 1
212
- }
213
-
214
- export const enum BooleanFlag {
215
- False = 0,
216
- True = 1
217
- }
218
-
219
- export const enum IframeStatus {
220
- Unknown = 0,
221
- TopFrame = 1,
222
- Iframe = 2
223
- }
224
-
225
- export const enum Setting {
226
- Expire = 365, // 1 Year
227
- SessionExpire = 1, // 1 Day
228
- CookieVersion = 2, // Increment this version every time there's a cookie schema change
229
- SessionTimeout = 30 * Time.Minute, // 30 minutes
230
- CookieInterval = 1, // 1 Day
231
- PingInterval = 1 * Time.Minute, // 1 Minute
232
- PingTimeout = 5 * Time.Minute, // 5 Minutes
233
- SummaryInterval = 100, // Same events within 100ms will be collapsed into single summary
234
- ClickText = 25, // Maximum number of characters to send as part of Click event's text field
235
- PayloadLimit = 128, // Do not allow more than specified payloads per page
236
- PageLimit = 128, // Do not allow more than 128 pages in a session
237
- ShutdownLimit = 2 * Time.Hour, // Shutdown instrumentation after specified time
238
- RetryLimit = 1, // Maximum number of attempts to upload a payload before giving up
239
- PlaybackBytesLimit = 10 * 1024 * 1024, // 10MB
240
- CollectionLimit = 128, // Number of unique entries for dimensions
241
- ClickPrecision = 32767, // 2^15 - 1
242
- BoxPrecision = 100, // Up to 2 decimal points (e.g. 34.56)
243
- ScriptErrorLimit = 5, // Do not send the same script error more than 5 times per page
244
- DimensionLimit = 256, // Do not extract dimensions which are over 256 characters
245
- WordLength = 5, // Estimated average size of a word,
246
- RestartDelay = 250, // Wait for 250ms before starting to wire up again
247
- CallStackDepth = 20, // Maximum call stack depth before bailing out
248
- RatingScale = 100, // Scale rating to specified scale
249
- ViewportIntersectionRatio = 0.05, // Ratio of intersection area in comparison to viewport area before it's marked visible
250
- IntersectionRatio = 0.8, // Ratio of intersection area in comparison to element's area before it's marked visible
251
- MaxFirstPayloadBytes = 1 * 1024 * 1024, // 1MB: Cap the very first payload to a maximum of 1MB
252
- MegaByte = 1024 * 1024, // 1MB
253
- UploadFactor = 3, // Slow down sequence by specified factor
254
- MinUploadDelay = 100, // Minimum time before we are ready to flush events to the server
255
- MaxUploadDelay = 30 * Time.Second, // Do flush out payload once every 30s,
256
- ExtractLimit = 10000, // Do not extract more than 10000 characters
257
- ChecksumPrecision = 28, // n-bit integer to represent token hash
258
- UploadTimeout = 15000, // Timeout in ms for XHR requests
259
- LongTask = 30, // Long Task threshold in ms
260
- }
261
-
262
- export const enum Character {
263
- Zero = 48,
264
- Nine = 57,
265
- At = 64,
266
- Blank = 32,
267
- Tab = 9,
268
- NewLine = 10,
269
- Return = 13
270
- }
271
-
272
- export const enum ApplicationPlatform {
273
- WebApp = 0
274
- }
275
-
276
- export const enum Constant {
277
- Auto = "Auto",
278
- Config = "Config",
279
- Clarity = "clarity",
280
- Restart = "restart",
281
- Suspend = "suspend",
282
- Pause = "pause",
283
- Resume = "resume",
284
- Report = "report",
285
- Memory = "memory",
286
- Empty = "",
287
- Space = " ",
288
- Expires = "expires=",
289
- Domain = "domain=",
290
- Dropped = "*na*",
291
- Comma = ",",
292
- Dot = ".",
293
- At = "@",
294
- Asterix = "*",
295
- Semicolon = ";",
296
- Equals = "=",
297
- Path = ";path=/",
298
- Target = "target",
299
- Blank = "_blank",
300
- Parent = "_parent",
301
- Top = "_top",
302
- String = "string",
303
- Number = "number",
304
- Email = "email",
305
- CookieKey = "_clck", // Clarity Cookie Key
306
- SessionKey = "_clsk", // Clarity Session Key
307
- TabKey = "_cltk", // Clarity Tab Key
308
- Pipe = "|",
309
- End = "END",
310
- Upgrade = "UPGRADE",
311
- Action = "ACTION",
312
- Signal = "SIGNAL",
313
- Extract = "EXTRACT",
314
- UserHint = "userHint",
315
- UserType = "userType",
316
- UserId = "userId",
317
- SessionId = "sessionId",
318
- PageId = "pageId",
319
- Mask = "•", // Placeholder character for explicitly masked content
320
- Digit = "▫", // Placeholder character for digits
321
- Letter = "▪", // Placeholder character for letters
322
- SessionStorage = "sessionStorage",
323
- Cookie = "cookie",
324
- Navigation = "navigation",
325
- Resource = "resource",
326
- LongTask = "longtask",
327
- FID = "first-input",
328
- CLS = "layout-shift",
329
- LCP = "largest-contentful-paint",
330
- PerformanceEventTiming = "event",
331
- HTTPS = "https://",
332
- CompressionStream = "CompressionStream",
333
- Accept = "Accept",
334
- ClarityGzip = "application/x-clarity-gzip",
335
- Tilde = "~",
336
- ArrayStart = "[",
337
- ConditionStart = "{",
338
- ConditionEnd = "}",
339
- Seperator = "<SEP>",
340
- Timeout = "Timeout",
341
- Bang = "!",
342
- SHA256 = "SHA-256",
343
- Electron = "Electron"
344
- }
345
-
346
- export const enum XMLReadyState {
347
- Unsent = 0,
348
- Opened = 1,
349
- Headers_Recieved = 2,
350
- Loading = 3,
351
- Done = 4
352
- }
353
-
354
-
355
- /* Helper Interfaces */
356
-
357
- export interface Payload {
358
- e: Token[]; /* Envelope */
359
- a: Token[][]; /* Events that are used for data analysis */
360
- p: Token[][]; /* Events that are primarily used for session playback */
361
- }
362
-
363
- export interface EncodedPayload {
364
- e: string; /* Envelope */
365
- a: string; /* Analytics Payload */
366
- p: string; /* Playback Payload */
367
- }
368
-
369
- export interface Metadata {
370
- projectId: string;
371
- userId: string;
372
- sessionId: string;
373
- pageNum: number;
374
- }
375
-
376
- export interface Session {
377
- session: string;
378
- ts: number;
379
- count: number;
380
- upgrade: BooleanFlag;
381
- upload: string;
382
- }
383
-
384
- export interface User {
385
- id: string;
386
- version: number;
387
- expiry: number;
388
- consent: BooleanFlag;
389
- dob: number;
390
- }
391
-
392
- export interface Envelope extends Metadata {
393
- sequence: number;
394
- start: number;
395
- duration: number;
396
- version: string;
397
- upload: Upload;
398
- end: BooleanFlag;
399
- applicationPlatform: number;
400
- url: string;
401
- }
402
-
403
- export interface Transit {
404
- [key: number]: {
405
- data: string;
406
- attempts: number;
407
- };
408
- }
409
-
410
- export interface BaselineState {
411
- time: number;
412
- event: number;
413
- data: BaselineData;
414
- }
415
-
416
- /* Event Data */
417
- export interface BaselineData {
418
- visible: BooleanFlag;
419
- docWidth: number;
420
- docHeight: number;
421
- screenWidth: number;
422
- screenHeight: number;
423
- scrollX: number;
424
- scrollY: number;
425
- pointerX: number;
426
- pointerY: number;
427
- activityTime: number;
428
- scrollTime: number;
429
- }
430
-
431
- export interface IdentityData {
432
- userId: string;
433
- userHint: string;
434
- sessionId?: string;
435
- pageId?: string;
436
- }
437
-
438
- export interface DimensionData {
439
- [key: number]: string[];
440
- }
441
-
442
- export interface VariableData {
443
- [name: string]: string[];
444
- }
445
-
446
- // Eventually custom event can be expanded to contain more properties
447
- // For now, restricting to key value pair where both key & value are strings
448
- // The way it's different from variable is that Custom Event has a notion of time
449
- // Whereas variables have no timing element and eventually will turn into custom dimensions
450
- export interface CustomData {
451
- key?: string;
452
- value: string;
453
- }
454
-
455
- export interface MetricData {
456
- [key: number]: number;
457
- }
458
-
459
- export interface PingData {
460
- gap: number;
461
- }
462
-
463
- export interface LimitData {
464
- check: number;
465
- }
466
-
467
- export interface SummaryData {
468
- [event: number]: [number, number][]; // Array of [start, duration] for every event type
469
- }
470
-
471
- export interface UpgradeData {
472
- key: string;
473
- }
474
-
475
- export interface ExtractData {
476
- [key: number]: { [subkey: number]: string }; // Array of { subkey: number } representing the extracted data
477
- }
478
-
479
- export interface UploadData {
480
- sequence: number;
481
- attempts: number;
482
- status: number;
483
- }
484
-
485
- export interface ClaritySignal {
486
- type: string
487
- value?: number
488
- }
489
-
490
- export interface PerformanceEventTiming extends PerformanceEntry {
491
- duration: DOMHighResTimeStamp;
492
- interactionId: number;
493
- }
494
-
495
- export interface Interaction {
496
- id: number;
497
- latency: number;
1
+ import { Time } from "@clarity-types/core";
2
+ export type Target = (number | Node);
3
+ export type Token = (string | number | number[] | string[] | (string | number)[]);
4
+ export type DecodedToken = (any | any[]);
5
+
6
+ export type MetadataCallback = (data: Metadata, playback: boolean) => void;
7
+ export interface MetadataCallbackOptions {
8
+ callback: MetadataCallback,
9
+ wait: boolean,
10
+ recall: boolean,
11
+ called: boolean
12
+ }
13
+ export type SignalCallback = (data: ClaritySignal) => void
14
+
15
+ /* Enum */
16
+ export const enum Event {
17
+ /* Data */
18
+ Metric = 0,
19
+ Dimension = 1,
20
+ Upload = 2,
21
+ Upgrade = 3,
22
+ Baseline = 4,
23
+ Discover = 5,
24
+ Mutation = 6,
25
+ Region = 7,
26
+ Document = 8,
27
+ Click = 9,
28
+ Scroll = 10,
29
+ Resize = 11,
30
+ MouseMove = 12,
31
+ MouseDown = 13,
32
+ MouseUp = 14,
33
+ MouseWheel = 15,
34
+ DoubleClick = 16,
35
+ TouchStart = 17,
36
+ TouchEnd = 18,
37
+ TouchMove = 19,
38
+ TouchCancel = 20,
39
+ Selection = 21,
40
+ Timeline = 22,
41
+ Page = 23,
42
+ Custom = 24,
43
+ Ping = 25,
44
+ Unload = 26,
45
+ Input = 27,
46
+ Visibility = 28,
47
+ Navigation = 29,
48
+ /**
49
+ * @deprecated No longer support Network Connection
50
+ */
51
+ Connection = 30,
52
+ ScriptError = 31,
53
+ /**
54
+ * @deprecated No longer support Image Error
55
+ */
56
+ ImageError = 32,
57
+ Log = 33,
58
+ Variable = 34,
59
+ Limit = 35,
60
+ Summary = 36,
61
+ /**
62
+ * @deprecated No longer support Box event
63
+ */
64
+ Box = 37,
65
+ Clipboard = 38,
66
+ Submit = 39,
67
+ Extract = 40,
68
+ Fraud = 41,
69
+ Change = 42,
70
+ Snapshot = 43,
71
+ Animation = 44,
72
+ StyleSheetAdoption = 45,
73
+ StyleSheetUpdate = 46,
74
+
75
+ // Apps specific events
76
+ WebViewDiscover = 100,
77
+ WebViewMutation = 101,
78
+ MutationError = 102,
79
+ FragmentVisibility = 103,
80
+ Keystrokes = 104,
81
+ BackGesture = 105,
82
+ WebViewStatus = 106,
83
+ AppInstallReferrer = 107
84
+ }
85
+
86
+ export const enum Metric {
87
+ ClientTimestamp = 0,
88
+ Playback = 1,
89
+ TotalBytes = 2,
90
+ LayoutCost = 3,
91
+ TotalCost = 4,
92
+ InvokeCount = 5,
93
+ ThreadBlockedTime = 6,
94
+ LongTaskCount = 7,
95
+ LargestPaint = 8,
96
+ CumulativeLayoutShift = 9,
97
+ FirstInputDelay = 10,
98
+ RatingValue = 11,
99
+ RatingCount = 12,
100
+ ProductPrice = 13,
101
+ ScreenWidth = 14,
102
+ ScreenHeight = 15,
103
+ ColorDepth = 16,
104
+ ReviewCount = 17,
105
+ BestRating = 18,
106
+ WorstRating = 19,
107
+ CartPrice = 20,
108
+ CartShipping = 21,
109
+ CartDiscount = 22,
110
+ CartTax = 23,
111
+ CartTotal = 24,
112
+ EventCount = 25,
113
+ Automation = 26,
114
+ Mobile = 27,
115
+ UploadTime = 28,
116
+ SinglePage = 29,
117
+ /**
118
+ * @deprecated Browser API is deprecated. Reference: https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory
119
+ */
120
+ UsedMemory = 30,
121
+ Iframed = 31,
122
+ MaxTouchPoints = 32,
123
+ HardwareConcurrency = 33,
124
+ DeviceMemory = 34,
125
+ Electron = 35,
126
+ ConstructedStyles = 36,
127
+ /**
128
+ * @deprecated Move it to dimension as it'll report only last value
129
+ */
130
+ InteractionNextPaint = 37,
131
+ HistoryClear = 38
132
+ }
133
+
134
+ export const enum Dimension {
135
+ UserAgent = 0,
136
+ Url = 1,
137
+ Referrer = 2,
138
+ PageTitle = 3,
139
+ NetworkHosts = 4,
140
+ SchemaType = 5,
141
+ ProductBrand = 6,
142
+ ProductAvailability = 7,
143
+ AuthorName = 8,
144
+ Language = 9,
145
+ ProductName = 10,
146
+ ProductCategory = 11,
147
+ ProductSku = 12,
148
+ ProductCurrency = 13,
149
+ ProductCondition = 14,
150
+ TabId = 15,
151
+ PageLanguage = 16,
152
+ DocumentDirection = 17,
153
+ Headline = 18,
154
+ MetaType = 19,
155
+ MetaTitle = 20,
156
+ Generator = 21,
157
+ Platform = 22,
158
+ PlatformVersion = 23,
159
+ Brand = 24,
160
+ Model = 25,
161
+ DevicePixelRatio = 26,
162
+ ConnectionType = 27,
163
+ Dob = 28,
164
+ CookieVersion = 29,
165
+ DeviceFamily = 30, // Allows iOS SDK to override the DeviceFamily value parsed from UserAgent.
166
+ InitialScrollTop = 31,
167
+ InitialScrollBottom = 32,
168
+ AncestorOrigins = 33,
169
+ Timezone = 34,
170
+ TimezoneOffset = 35,
171
+ Consent = 36,
172
+ InteractionNextPaint = 37
173
+ }
174
+
175
+ export const enum Check {
176
+ None = 0,
177
+ Payload = 1,
178
+ Shutdown = 2,
179
+ Retry = 3,
180
+ Bytes = 4,
181
+ Collection = 5,
182
+ Server = 6,
183
+ Page = 7
184
+ }
185
+
186
+ export const enum Code {
187
+ RunTask = 0,
188
+ CssRules = 1,
189
+ MutationObserver = 2,
190
+ PerformanceObserver = 3,
191
+ CallStackDepth = 4,
192
+ Selector = 5,
193
+ Metric = 6,
194
+ /**
195
+ * @deprecated No longer support ContentSecurityPolicy
196
+ */
197
+ ContentSecurityPolicy = 7,
198
+ Config = 8,
199
+ FunctionExecutionTime = 9
200
+ }
201
+
202
+ export const enum Severity {
203
+ Info = 0,
204
+ Warning = 1,
205
+ Error = 2,
206
+ Fatal = 3
207
+ }
208
+
209
+ export const enum Upload {
210
+ Async = 0,
211
+ Beacon = 1
212
+ }
213
+
214
+ export const enum BooleanFlag {
215
+ False = 0,
216
+ True = 1
217
+ }
218
+
219
+ export const enum IframeStatus {
220
+ Unknown = 0,
221
+ TopFrame = 1,
222
+ Iframe = 2
223
+ }
224
+
225
+ export const enum Setting {
226
+ Expire = 365, // 1 Year
227
+ SessionExpire = 1, // 1 Day
228
+ CookieVersion = 2, // Increment this version every time there's a cookie schema change
229
+ SessionTimeout = 30 * Time.Minute, // 30 minutes
230
+ CookieInterval = 1, // 1 Day
231
+ PingInterval = 1 * Time.Minute, // 1 Minute
232
+ PingTimeout = 5 * Time.Minute, // 5 Minutes
233
+ SummaryInterval = 100, // Same events within 100ms will be collapsed into single summary
234
+ ClickText = 25, // Maximum number of characters to send as part of Click event's text field
235
+ PayloadLimit = 128, // Do not allow more than specified payloads per page
236
+ PageLimit = 128, // Do not allow more than 128 pages in a session
237
+ ShutdownLimit = 2 * Time.Hour, // Shutdown instrumentation after specified time
238
+ RetryLimit = 1, // Maximum number of attempts to upload a payload before giving up
239
+ PlaybackBytesLimit = 10 * 1024 * 1024, // 10MB
240
+ CollectionLimit = 128, // Number of unique entries for dimensions
241
+ ClickPrecision = 32767, // 2^15 - 1
242
+ BoxPrecision = 100, // Up to 2 decimal points (e.g. 34.56)
243
+ ScriptErrorLimit = 5, // Do not send the same script error more than 5 times per page
244
+ DimensionLimit = 256, // Do not extract dimensions which are over 256 characters
245
+ WordLength = 5, // Estimated average size of a word,
246
+ RestartDelay = 250, // Wait for 250ms before starting to wire up again
247
+ CallStackDepth = 20, // Maximum call stack depth before bailing out
248
+ RatingScale = 100, // Scale rating to specified scale
249
+ ViewportIntersectionRatio = 0.05, // Ratio of intersection area in comparison to viewport area before it's marked visible
250
+ IntersectionRatio = 0.8, // Ratio of intersection area in comparison to element's area before it's marked visible
251
+ MaxFirstPayloadBytes = 1 * 1024 * 1024, // 1MB: Cap the very first payload to a maximum of 1MB
252
+ MegaByte = 1024 * 1024, // 1MB
253
+ UploadFactor = 3, // Slow down sequence by specified factor
254
+ MinUploadDelay = 100, // Minimum time before we are ready to flush events to the server
255
+ MaxUploadDelay = 30 * Time.Second, // Do flush out payload once every 30s,
256
+ ExtractLimit = 10000, // Do not extract more than 10000 characters
257
+ ChecksumPrecision = 28, // n-bit integer to represent token hash
258
+ UploadTimeout = 15000, // Timeout in ms for XHR requests
259
+ LongTask = 30, // Long Task threshold in ms
260
+ }
261
+
262
+ export const enum Character {
263
+ Zero = 48,
264
+ Nine = 57,
265
+ At = 64,
266
+ Blank = 32,
267
+ Tab = 9,
268
+ NewLine = 10,
269
+ Return = 13
270
+ }
271
+
272
+ export const enum ApplicationPlatform {
273
+ WebApp = 0
274
+ }
275
+
276
+ export const enum Constant {
277
+ Auto = "Auto",
278
+ Config = "Config",
279
+ Clarity = "clarity",
280
+ Restart = "restart",
281
+ Suspend = "suspend",
282
+ Pause = "pause",
283
+ Resume = "resume",
284
+ Report = "report",
285
+ Memory = "memory",
286
+ Empty = "",
287
+ Space = " ",
288
+ Expires = "expires=",
289
+ Domain = "domain=",
290
+ Dropped = "*na*",
291
+ Comma = ",",
292
+ Dot = ".",
293
+ At = "@",
294
+ Asterix = "*",
295
+ Semicolon = ";",
296
+ Equals = "=",
297
+ Path = ";path=/",
298
+ Target = "target",
299
+ Blank = "_blank",
300
+ Parent = "_parent",
301
+ Top = "_top",
302
+ String = "string",
303
+ Number = "number",
304
+ Email = "email",
305
+ CookieKey = "_clck", // Clarity Cookie Key
306
+ SessionKey = "_clsk", // Clarity Session Key
307
+ TabKey = "_cltk", // Clarity Tab Key
308
+ Pipe = "|",
309
+ End = "END",
310
+ Upgrade = "UPGRADE",
311
+ Action = "ACTION",
312
+ Signal = "SIGNAL",
313
+ Extract = "EXTRACT",
314
+ UserHint = "userHint",
315
+ UserType = "userType",
316
+ UserId = "userId",
317
+ SessionId = "sessionId",
318
+ PageId = "pageId",
319
+ Mask = "•", // Placeholder character for explicitly masked content
320
+ Digit = "▫", // Placeholder character for digits
321
+ Letter = "▪", // Placeholder character for letters
322
+ SessionStorage = "sessionStorage",
323
+ Cookie = "cookie",
324
+ Navigation = "navigation",
325
+ Resource = "resource",
326
+ LongTask = "longtask",
327
+ FID = "first-input",
328
+ CLS = "layout-shift",
329
+ LCP = "largest-contentful-paint",
330
+ PerformanceEventTiming = "event",
331
+ HTTPS = "https://",
332
+ CompressionStream = "CompressionStream",
333
+ Accept = "Accept",
334
+ ClarityGzip = "application/x-clarity-gzip",
335
+ Tilde = "~",
336
+ ArrayStart = "[",
337
+ ConditionStart = "{",
338
+ ConditionEnd = "}",
339
+ Seperator = "<SEP>",
340
+ Timeout = "Timeout",
341
+ Bang = "!",
342
+ SHA256 = "SHA-256",
343
+ Electron = "Electron"
344
+ }
345
+
346
+ export const enum XMLReadyState {
347
+ Unsent = 0,
348
+ Opened = 1,
349
+ Headers_Recieved = 2,
350
+ Loading = 3,
351
+ Done = 4
352
+ }
353
+
354
+
355
+ /* Helper Interfaces */
356
+
357
+ export interface Payload {
358
+ e: Token[]; /* Envelope */
359
+ a: Token[][]; /* Events that are used for data analysis */
360
+ p: Token[][]; /* Events that are primarily used for session playback */
361
+ }
362
+
363
+ export interface EncodedPayload {
364
+ e: string; /* Envelope */
365
+ a: string; /* Analytics Payload */
366
+ p: string; /* Playback Payload */
367
+ }
368
+
369
+ export interface Metadata {
370
+ projectId: string;
371
+ userId: string;
372
+ sessionId: string;
373
+ pageNum: number;
374
+ }
375
+
376
+ export interface Session {
377
+ session: string;
378
+ ts: number;
379
+ count: number;
380
+ upgrade: BooleanFlag;
381
+ upload: string;
382
+ }
383
+
384
+ export interface User {
385
+ id: string;
386
+ version: number;
387
+ expiry: number;
388
+ consent: BooleanFlag;
389
+ dob: number;
390
+ }
391
+
392
+ export interface Envelope extends Metadata {
393
+ sequence: number;
394
+ start: number;
395
+ duration: number;
396
+ version: string;
397
+ upload: Upload;
398
+ end: BooleanFlag;
399
+ applicationPlatform: number;
400
+ url: string;
401
+ }
402
+
403
+ export interface Transit {
404
+ [key: number]: {
405
+ data: string;
406
+ attempts: number;
407
+ };
408
+ }
409
+
410
+ export interface BaselineState {
411
+ time: number;
412
+ event: number;
413
+ data: BaselineData;
414
+ }
415
+
416
+ /* Event Data */
417
+ export interface BaselineData {
418
+ visible: BooleanFlag;
419
+ docWidth: number;
420
+ docHeight: number;
421
+ screenWidth: number;
422
+ screenHeight: number;
423
+ scrollX: number;
424
+ scrollY: number;
425
+ pointerX: number;
426
+ pointerY: number;
427
+ activityTime: number;
428
+ scrollTime: number;
429
+ pointerTime: number;
430
+ moveX: number;
431
+ moveY: number;
432
+ moveTime: number;
433
+ downX: number;
434
+ downY: number;
435
+ downTime: number;
436
+ }
437
+
438
+ export interface IdentityData {
439
+ userId: string;
440
+ userHint: string;
441
+ sessionId?: string;
442
+ pageId?: string;
443
+ }
444
+
445
+ export interface DimensionData {
446
+ [key: number]: string[];
447
+ }
448
+
449
+ export interface VariableData {
450
+ [name: string]: string[];
451
+ }
452
+
453
+ // Eventually custom event can be expanded to contain more properties
454
+ // For now, restricting to key value pair where both key & value are strings
455
+ // The way it's different from variable is that Custom Event has a notion of time
456
+ // Whereas variables have no timing element and eventually will turn into custom dimensions
457
+ export interface CustomData {
458
+ key?: string;
459
+ value: string;
460
+ }
461
+
462
+ export interface MetricData {
463
+ [key: number]: number;
464
+ }
465
+
466
+ export interface PingData {
467
+ gap: number;
468
+ }
469
+
470
+ export interface LimitData {
471
+ check: number;
472
+ }
473
+
474
+ export interface SummaryData {
475
+ [event: number]: [number, number][]; // Array of [start, duration] for every event type
476
+ }
477
+
478
+ export interface UpgradeData {
479
+ key: string;
480
+ }
481
+
482
+ export interface ExtractData {
483
+ [key: number]: { [subkey: number]: string }; // Array of { subkey: number } representing the extracted data
484
+ }
485
+
486
+ export interface UploadData {
487
+ sequence: number;
488
+ attempts: number;
489
+ status: number;
490
+ }
491
+
492
+ export interface ClaritySignal {
493
+ type: string
494
+ value?: number
495
+ }
496
+
497
+ export interface PerformanceEventTiming extends PerformanceEntry {
498
+ duration: DOMHighResTimeStamp;
499
+ interactionId: number;
500
+ }
501
+
502
+ export interface Interaction {
503
+ id: number;
504
+ latency: number;
498
505
  }