@gem-sdk/clarity-js 0.8.94

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