clarity-js 0.6.23
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.
- package/README.md +26 -0
- package/build/clarity.js +4479 -0
- package/build/clarity.min.js +1 -0
- package/build/clarity.module.js +4473 -0
- package/package.json +66 -0
- package/rollup.config.ts +38 -0
- package/src/clarity.ts +54 -0
- package/src/core/config.ts +21 -0
- package/src/core/copy.ts +3 -0
- package/src/core/event.ts +25 -0
- package/src/core/hash.ts +19 -0
- package/src/core/history.ts +69 -0
- package/src/core/index.ts +79 -0
- package/src/core/measure.ts +17 -0
- package/src/core/report.ts +27 -0
- package/src/core/scrub.ts +102 -0
- package/src/core/task.ts +180 -0
- package/src/core/time.ts +14 -0
- package/src/core/timeout.ts +10 -0
- package/src/core/version.ts +2 -0
- package/src/data/baseline.ts +89 -0
- package/src/data/compress.ts +31 -0
- package/src/data/custom.ts +18 -0
- package/src/data/dimension.ts +42 -0
- package/src/data/encode.ts +109 -0
- package/src/data/envelope.ts +46 -0
- package/src/data/index.ts +43 -0
- package/src/data/limit.ts +42 -0
- package/src/data/metadata.ts +232 -0
- package/src/data/metric.ts +51 -0
- package/src/data/ping.ts +36 -0
- package/src/data/summary.ts +34 -0
- package/src/data/token.ts +39 -0
- package/src/data/upgrade.ts +36 -0
- package/src/data/upload.ts +250 -0
- package/src/data/variable.ts +46 -0
- package/src/diagnostic/encode.ts +40 -0
- package/src/diagnostic/image.ts +23 -0
- package/src/diagnostic/index.ts +14 -0
- package/src/diagnostic/internal.ts +41 -0
- package/src/diagnostic/script.ts +45 -0
- package/src/global.ts +22 -0
- package/src/index.ts +8 -0
- package/src/interaction/click.ts +140 -0
- package/src/interaction/encode.ts +140 -0
- package/src/interaction/index.ts +45 -0
- package/src/interaction/input.ts +64 -0
- package/src/interaction/pointer.ts +108 -0
- package/src/interaction/resize.ts +30 -0
- package/src/interaction/scroll.ts +73 -0
- package/src/interaction/selection.ts +66 -0
- package/src/interaction/timeline.ts +65 -0
- package/src/interaction/unload.ts +25 -0
- package/src/interaction/visibility.ts +24 -0
- package/src/layout/box.ts +83 -0
- package/src/layout/discover.ts +27 -0
- package/src/layout/document.ts +46 -0
- package/src/layout/dom.ts +442 -0
- package/src/layout/encode.ts +111 -0
- package/src/layout/extract.ts +75 -0
- package/src/layout/index.ts +25 -0
- package/src/layout/mutation.ts +232 -0
- package/src/layout/node.ts +211 -0
- package/src/layout/offset.ts +19 -0
- package/src/layout/region.ts +143 -0
- package/src/layout/schema.ts +66 -0
- package/src/layout/selector.ts +24 -0
- package/src/layout/target.ts +44 -0
- package/src/layout/traverse.ts +28 -0
- package/src/performance/connection.ts +37 -0
- package/src/performance/encode.ts +40 -0
- package/src/performance/index.ts +15 -0
- package/src/performance/navigation.ts +31 -0
- package/src/performance/observer.ts +87 -0
- package/test/core.test.ts +82 -0
- package/test/helper.ts +104 -0
- package/test/html/core.html +17 -0
- package/test/tsconfig.test.json +6 -0
- package/tsconfig.json +21 -0
- package/tslint.json +33 -0
- package/types/core.d.ts +127 -0
- package/types/data.d.ts +344 -0
- package/types/diagnostic.d.ts +24 -0
- package/types/index.d.ts +30 -0
- package/types/interaction.d.ts +110 -0
- package/types/layout.d.ts +200 -0
- package/types/performance.d.ts +40 -0
package/types/core.d.ts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import * as Data from "./data";
|
|
2
|
+
|
|
3
|
+
type TaskFunction = () => Promise<void>;
|
|
4
|
+
type TaskResolve = () => void;
|
|
5
|
+
type UploadCallback = (data: string) => void;
|
|
6
|
+
type Region = [number /* RegionId */, keyof HTMLElementTagNameMap /* Query Selector */, RegionFilter? /* Region Filter */, string? /* Filter Text */];
|
|
7
|
+
type Metric = [Data.Metric /* MetricId */, Extract /* Extract Filter */, string /* Match Value */, number? /* Scale Factor */];
|
|
8
|
+
|
|
9
|
+
/* Enum */
|
|
10
|
+
|
|
11
|
+
export const enum Priority {
|
|
12
|
+
Normal = 0,
|
|
13
|
+
High = 1
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const enum Time {
|
|
17
|
+
Second = 1000,
|
|
18
|
+
Minute = 60 * 1000,
|
|
19
|
+
Hour = 60 * 60 * 1000,
|
|
20
|
+
Day = 24 * 60 * 60 * 1000
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
export const enum Task {
|
|
25
|
+
Wait = 0,
|
|
26
|
+
Run = 1,
|
|
27
|
+
Stop = 2
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const enum Setting {
|
|
31
|
+
LongTask = 30, // 30ms
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const enum RegionFilter {
|
|
35
|
+
Url = 0,
|
|
36
|
+
Javascript = 1
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const enum Extract {
|
|
40
|
+
Text = 0,
|
|
41
|
+
Javascript = 1,
|
|
42
|
+
Attribute = 2
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const enum Privacy {
|
|
46
|
+
None = 0,
|
|
47
|
+
Sensitive = 1,
|
|
48
|
+
Text = 2,
|
|
49
|
+
TextImage = 3,
|
|
50
|
+
Exclude = 4
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Helper Interfaces */
|
|
54
|
+
|
|
55
|
+
export interface Module {
|
|
56
|
+
start: () => void;
|
|
57
|
+
stop: () => void;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface Tasks {
|
|
61
|
+
[key: number]: TaskInfo;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface TaskInfo {
|
|
65
|
+
start: number;
|
|
66
|
+
calls: number;
|
|
67
|
+
yield: number;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface Timer {
|
|
71
|
+
id: string;
|
|
72
|
+
cost: Data.Metric;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface RequestIdleCallbackOptions {
|
|
76
|
+
timeout: number;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface RequestIdleCallbackDeadline {
|
|
80
|
+
didTimeout: boolean;
|
|
81
|
+
timeRemaining: (() => number);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface AsyncTask {
|
|
85
|
+
task: TaskFunction;
|
|
86
|
+
resolve: TaskResolve;
|
|
87
|
+
id: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface OffsetDistance {
|
|
91
|
+
x: number;
|
|
92
|
+
y: number;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface BrowserEvent {
|
|
96
|
+
event: string;
|
|
97
|
+
target: EventTarget;
|
|
98
|
+
listener: EventListener;
|
|
99
|
+
capture: boolean;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface Report {
|
|
103
|
+
c: Data.Check; // Reporting code
|
|
104
|
+
p: string; // Project Id
|
|
105
|
+
u: string; // User Id
|
|
106
|
+
s: string; // Session Id
|
|
107
|
+
n: number; // Page Number
|
|
108
|
+
m?: string; // Message, optional
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface Config {
|
|
112
|
+
projectId?: string;
|
|
113
|
+
delay?: number;
|
|
114
|
+
cssRules?: boolean;
|
|
115
|
+
lean?: boolean;
|
|
116
|
+
track?: boolean;
|
|
117
|
+
content?: boolean;
|
|
118
|
+
mask?: string[];
|
|
119
|
+
unmask?: string[];
|
|
120
|
+
regions?: Region[];
|
|
121
|
+
metrics?: Metric[];
|
|
122
|
+
cookies?: string[];
|
|
123
|
+
report?: string;
|
|
124
|
+
upload?: string | UploadCallback;
|
|
125
|
+
fallback?: string;
|
|
126
|
+
upgrade?: (key: string) => void;
|
|
127
|
+
}
|
package/types/data.d.ts
ADDED
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import { Time } from "@clarity-types/core";
|
|
2
|
+
export type Target = (number | Node);
|
|
3
|
+
export type Token = (string | number | number[] | string[]);
|
|
4
|
+
export type DecodedToken = (any | any[]);
|
|
5
|
+
|
|
6
|
+
export type MetadataCallback = (data: Metadata, playback: boolean) => void;
|
|
7
|
+
|
|
8
|
+
/* Enum */
|
|
9
|
+
|
|
10
|
+
export const enum Event {
|
|
11
|
+
/* Data */
|
|
12
|
+
Metric = 0,
|
|
13
|
+
Dimension = 1,
|
|
14
|
+
Upload = 2,
|
|
15
|
+
Upgrade = 3,
|
|
16
|
+
Baseline = 4,
|
|
17
|
+
Discover = 5,
|
|
18
|
+
Mutation = 6,
|
|
19
|
+
Region = 7,
|
|
20
|
+
Document = 8,
|
|
21
|
+
Click = 9,
|
|
22
|
+
Scroll = 10,
|
|
23
|
+
Resize = 11,
|
|
24
|
+
MouseMove = 12,
|
|
25
|
+
MouseDown = 13,
|
|
26
|
+
MouseUp = 14,
|
|
27
|
+
MouseWheel = 15,
|
|
28
|
+
DoubleClick = 16,
|
|
29
|
+
TouchStart = 17,
|
|
30
|
+
TouchEnd = 18,
|
|
31
|
+
TouchMove = 19,
|
|
32
|
+
TouchCancel = 20,
|
|
33
|
+
Selection = 21,
|
|
34
|
+
Timeline = 22,
|
|
35
|
+
Page = 23,
|
|
36
|
+
Custom = 24,
|
|
37
|
+
Ping = 25,
|
|
38
|
+
Unload = 26,
|
|
39
|
+
Input = 27,
|
|
40
|
+
Visibility = 28,
|
|
41
|
+
Navigation = 29,
|
|
42
|
+
Connection = 30,
|
|
43
|
+
ScriptError = 31,
|
|
44
|
+
ImageError = 32,
|
|
45
|
+
Log = 33,
|
|
46
|
+
Variable = 34,
|
|
47
|
+
Limit = 35,
|
|
48
|
+
Summary = 36,
|
|
49
|
+
Box = 37,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const enum Metric {
|
|
53
|
+
ClientTimestamp = 0,
|
|
54
|
+
Playback = 1,
|
|
55
|
+
TotalBytes = 2,
|
|
56
|
+
LayoutCost = 3,
|
|
57
|
+
TotalCost = 4,
|
|
58
|
+
InvokeCount = 5,
|
|
59
|
+
ThreadBlockedTime = 6,
|
|
60
|
+
LongTaskCount = 7,
|
|
61
|
+
LargestPaint = 8,
|
|
62
|
+
CumulativeLayoutShift = 9,
|
|
63
|
+
FirstInputDelay = 10,
|
|
64
|
+
RatingValue = 11,
|
|
65
|
+
RatingCount = 12,
|
|
66
|
+
ProductPrice = 13,
|
|
67
|
+
ScreenWidth = 14,
|
|
68
|
+
ScreenHeight = 15,
|
|
69
|
+
ColorDepth = 16,
|
|
70
|
+
ReviewCount = 17,
|
|
71
|
+
BestRating = 18,
|
|
72
|
+
WorstRating = 19,
|
|
73
|
+
CartPrice = 20,
|
|
74
|
+
CartShipping = 21,
|
|
75
|
+
CartDiscount = 22,
|
|
76
|
+
CartTax = 23,
|
|
77
|
+
CartTotal = 24
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const enum Dimension {
|
|
81
|
+
UserAgent = 0,
|
|
82
|
+
Url = 1,
|
|
83
|
+
Referrer = 2,
|
|
84
|
+
PageTitle = 3,
|
|
85
|
+
NetworkHosts = 4,
|
|
86
|
+
SchemaType = 5,
|
|
87
|
+
ProductBrand = 6,
|
|
88
|
+
ProductAvailability = 7,
|
|
89
|
+
AuthorName = 8,
|
|
90
|
+
Language = 9,
|
|
91
|
+
ProductName = 10,
|
|
92
|
+
ProductCategory = 11,
|
|
93
|
+
ProductSku = 12,
|
|
94
|
+
ProductCurrency = 13,
|
|
95
|
+
ProductCondition = 14,
|
|
96
|
+
TabId = 15,
|
|
97
|
+
PageLanguage = 16,
|
|
98
|
+
DocumentDirection = 17,
|
|
99
|
+
Headline = 18,
|
|
100
|
+
MetaType = 19,
|
|
101
|
+
MetaTitle = 20,
|
|
102
|
+
Generator = 21
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const enum Check {
|
|
107
|
+
None = 0,
|
|
108
|
+
Payload = 1,
|
|
109
|
+
Shutdown = 2,
|
|
110
|
+
Retry = 3,
|
|
111
|
+
Bytes = 4,
|
|
112
|
+
Collection = 5,
|
|
113
|
+
Server = 6
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export const enum Code {
|
|
117
|
+
RunTask = 0,
|
|
118
|
+
CssRules = 1,
|
|
119
|
+
MutationObserver = 2,
|
|
120
|
+
PerformanceObserver = 3,
|
|
121
|
+
CallStackDepth = 4,
|
|
122
|
+
Selector = 5,
|
|
123
|
+
Metric = 6,
|
|
124
|
+
ContentSecurityPolicy = 7
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export const enum Severity {
|
|
128
|
+
Info = 0,
|
|
129
|
+
Warning = 1,
|
|
130
|
+
Error = 2,
|
|
131
|
+
Fatal = 3
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export const enum Upload {
|
|
135
|
+
Async = 0,
|
|
136
|
+
Beacon = 1
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export const enum BooleanFlag {
|
|
140
|
+
False = 0,
|
|
141
|
+
True = 1
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export const enum Setting {
|
|
145
|
+
Expire = 365, // 1 Year
|
|
146
|
+
SessionExpire = 1, // 1 Day
|
|
147
|
+
CookieVersion = 1, // Increment this version every time there's a cookie schema change
|
|
148
|
+
SessionTimeout = 30 * Time.Minute, // 30 minutes
|
|
149
|
+
CookieInterval = 1, // 1 Day
|
|
150
|
+
PingInterval = 1 * Time.Minute, // 1 Minute
|
|
151
|
+
PingTimeout = 5 * Time.Minute, // 5 Minutes
|
|
152
|
+
SummaryInterval = 100, // Same events within 100ms will be collapsed into single summary
|
|
153
|
+
ClickText = 25, // Maximum number of characters to send as part of Click event's text field
|
|
154
|
+
PayloadLimit = 128, // Do not allow more than specified payloads per page
|
|
155
|
+
ShutdownLimit = 2 * Time.Hour, // Shutdown instrumentation after specified time
|
|
156
|
+
RetryLimit = 1, // Maximum number of attempts to upload a payload before giving up
|
|
157
|
+
PlaybackBytesLimit = 10 * 1024 * 1024, // 10MB
|
|
158
|
+
CollectionLimit = 128, // Number of unique entries for dimensions
|
|
159
|
+
ClickPrecision = 32767, // 2^15 - 1
|
|
160
|
+
BoxPrecision = 100, // Up to 2 decimal points (e.g. 34.56)
|
|
161
|
+
ResizeObserverThreshold = 15, // At least 15 characters before we attach a resize observer for the node
|
|
162
|
+
ScriptErrorLimit = 5, // Do not send the same script error more than 5 times per page
|
|
163
|
+
WordLength = 5, // Estimated average size of a word,
|
|
164
|
+
RestartDelay = 250, // Wait for 250ms before starting to wire up again
|
|
165
|
+
CallStackDepth = 20, // Maximum call stack depth before bailing out
|
|
166
|
+
RatingScale = 100, // Scale rating to specified scale
|
|
167
|
+
ViewportIntersectionRatio = 0.25, // Ratio of intersection area in comparison to viewport area before it's marked visible
|
|
168
|
+
IntersectionRatio = 0.8, // Ratio of intersection area in comparison to element's area before it's marked visible
|
|
169
|
+
MaxFirstPayloadBytes = 1 * 1024 * 1024, // 1MB: Cap the very first payload to a maximum of 1MB
|
|
170
|
+
UploadFactor = 3, // Slow down sequence by specified factor
|
|
171
|
+
MinUploadDelay = 100, // Minimum time before we are ready to flush events to the server
|
|
172
|
+
MaxUploadDelay = 30 * Time.Second // Do flush out payload once every 30s
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export const enum Constant {
|
|
176
|
+
Auto = "Auto",
|
|
177
|
+
Config = "Config",
|
|
178
|
+
Clarity = "clarity",
|
|
179
|
+
Restart = "restart",
|
|
180
|
+
Suspend = "suspend",
|
|
181
|
+
Pause = "pause",
|
|
182
|
+
Resume = "resume",
|
|
183
|
+
Report = "report",
|
|
184
|
+
Empty = "",
|
|
185
|
+
Space = " ",
|
|
186
|
+
Expires = "expires=",
|
|
187
|
+
Domain = "domain=",
|
|
188
|
+
Comma = ",",
|
|
189
|
+
Dot = ".",
|
|
190
|
+
Semicolon = ";",
|
|
191
|
+
Equals = "=",
|
|
192
|
+
Path = ";path=/",
|
|
193
|
+
Target = "target",
|
|
194
|
+
Blank = "_blank",
|
|
195
|
+
Parent = "_parent",
|
|
196
|
+
Top = "_top",
|
|
197
|
+
String = "string",
|
|
198
|
+
Number = "number",
|
|
199
|
+
CookieKey = "_clck", // Clarity Cookie Key
|
|
200
|
+
SessionKey = "_clsk", // Clarity Session Key
|
|
201
|
+
TabKey = "_cltk", // Clarity Tab Key
|
|
202
|
+
Pipe = "|",
|
|
203
|
+
End = "END",
|
|
204
|
+
Upgrade = "UPGRADE",
|
|
205
|
+
UserId = "userId",
|
|
206
|
+
SessionId = "sessionId",
|
|
207
|
+
PageId = "pageId",
|
|
208
|
+
ResizeObserver = "ResizeObserver",
|
|
209
|
+
Mask = "•",
|
|
210
|
+
SessionStorage = "sessionStorage",
|
|
211
|
+
Cookie = "cookie",
|
|
212
|
+
Navigation = "navigation",
|
|
213
|
+
Resource = "resource",
|
|
214
|
+
LongTask = "longtask",
|
|
215
|
+
FID = "first-input",
|
|
216
|
+
CLS = "layout-shift",
|
|
217
|
+
LCP = "largest-contentful-paint",
|
|
218
|
+
HTTPS = "https://",
|
|
219
|
+
CompressionStream = "CompressionStream",
|
|
220
|
+
Accept = "Accept",
|
|
221
|
+
ClarityGzip = "application/x-clarity-gzip"
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export const enum XMLReadyState {
|
|
225
|
+
Unsent = 0,
|
|
226
|
+
Opened = 1,
|
|
227
|
+
Headers_Recieved = 2,
|
|
228
|
+
Loading = 3,
|
|
229
|
+
Done = 4
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* Helper Interfaces */
|
|
233
|
+
|
|
234
|
+
export interface Payload {
|
|
235
|
+
e: Token[]; /* Envelope */
|
|
236
|
+
a: Token[][]; /* Events that are used for data analysis */
|
|
237
|
+
p: Token[][]; /* Events that are primarily used for session playback */
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export interface EncodedPayload {
|
|
241
|
+
e: string; /* Envelope */
|
|
242
|
+
a: string; /* Analytics Payload */
|
|
243
|
+
p: string; /* Playback Payload */
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export interface Metadata {
|
|
247
|
+
projectId: string;
|
|
248
|
+
userId: string;
|
|
249
|
+
sessionId: string;
|
|
250
|
+
pageNum: number;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export interface Session {
|
|
254
|
+
session: string;
|
|
255
|
+
ts: number;
|
|
256
|
+
count: number;
|
|
257
|
+
upgrade: BooleanFlag;
|
|
258
|
+
upload: string;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export interface User {
|
|
262
|
+
id: string;
|
|
263
|
+
expiry: number;
|
|
264
|
+
consent: BooleanFlag;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export interface Envelope extends Metadata {
|
|
268
|
+
sequence: number;
|
|
269
|
+
start: number;
|
|
270
|
+
duration: number;
|
|
271
|
+
version: string;
|
|
272
|
+
upload: Upload;
|
|
273
|
+
end: BooleanFlag;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export interface Transit {
|
|
277
|
+
[key: number]: {
|
|
278
|
+
data: string;
|
|
279
|
+
attempts: number;
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export interface BaselineState {
|
|
284
|
+
time: number;
|
|
285
|
+
event: number;
|
|
286
|
+
data: BaselineData;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/* Event Data */
|
|
290
|
+
export interface BaselineData {
|
|
291
|
+
visible: BooleanFlag;
|
|
292
|
+
docWidth: number;
|
|
293
|
+
docHeight: number;
|
|
294
|
+
screenWidth: number;
|
|
295
|
+
screenHeight: number;
|
|
296
|
+
scrollX: number;
|
|
297
|
+
scrollY: number;
|
|
298
|
+
pointerX: number;
|
|
299
|
+
pointerY: number;
|
|
300
|
+
activityTime: number;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export interface DimensionData {
|
|
304
|
+
[key: number]: string[];
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export interface VariableData {
|
|
308
|
+
[name: string]: string[];
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Eventually custom event can be expanded to contain more properties
|
|
312
|
+
// For now, restricting to key value pair where both key & value are strings
|
|
313
|
+
// The way it's different from variable is that Custom Event has a notion of time
|
|
314
|
+
// Whereas variables have no timing element and eventually will turn into custom dimensions
|
|
315
|
+
export interface CustomData {
|
|
316
|
+
key: string;
|
|
317
|
+
value: string;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export interface MetricData {
|
|
321
|
+
[key: number]: number;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export interface PingData {
|
|
325
|
+
gap: number;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export interface LimitData {
|
|
329
|
+
check: number;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
export interface SummaryData {
|
|
333
|
+
[event: number]: [number, number][]; // Array of [start, duration] for every event type
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export interface UpgradeData {
|
|
337
|
+
key: string;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export interface UploadData {
|
|
341
|
+
sequence: number;
|
|
342
|
+
attempts: number;
|
|
343
|
+
status: number;
|
|
344
|
+
}
|
|
@@ -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 ImageErrorData {
|
|
13
|
+
source: string;
|
|
14
|
+
target: Target;
|
|
15
|
+
region?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface LogData {
|
|
19
|
+
code: Code;
|
|
20
|
+
name: string;
|
|
21
|
+
message: string;
|
|
22
|
+
stack: string;
|
|
23
|
+
severity: Severity;
|
|
24
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
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: () => void;
|
|
15
|
+
event: (name: string, value: string) => void;
|
|
16
|
+
set: (variable: string, value: string | string[]) => void;
|
|
17
|
+
identify: (userId: string, sessionId?: string, pageId?: string) => void;
|
|
18
|
+
metadata: (callback: Data.MetadataCallback) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface Helper {
|
|
22
|
+
hash: (input: string) => string;
|
|
23
|
+
selector: (tag: string, prefix: string, attributes: Layout.Attributes, position: number) => string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare const clarity: Clarity;
|
|
27
|
+
declare const helper: Helper;
|
|
28
|
+
declare const version: string;
|
|
29
|
+
|
|
30
|
+
export { clarity, version, helper, Core, Data, Diagnostic, Layout, Interaction, Performance };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Time } from "./core";
|
|
2
|
+
import { BooleanFlag, Event, Target } from "./data";
|
|
3
|
+
|
|
4
|
+
/* Enum */
|
|
5
|
+
|
|
6
|
+
export const enum BrowsingContext {
|
|
7
|
+
Self = 0,
|
|
8
|
+
Blank = 1,
|
|
9
|
+
Parent = 2,
|
|
10
|
+
Top = 3
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const enum Setting {
|
|
14
|
+
LookAhead = 500, // 500ms
|
|
15
|
+
Distance = 20, // 20 pixels
|
|
16
|
+
Interval = 25, // 25 milliseconds
|
|
17
|
+
TimelineSpan = 2 * Time.Second, // 2 seconds
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Helper Interfaces */
|
|
21
|
+
export interface PointerState {
|
|
22
|
+
time: number;
|
|
23
|
+
event: number;
|
|
24
|
+
data: PointerData;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface ClickState {
|
|
28
|
+
time: number;
|
|
29
|
+
event: number;
|
|
30
|
+
data: ClickData;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface ScrollState {
|
|
34
|
+
time: number;
|
|
35
|
+
event: number;
|
|
36
|
+
data: ScrollData;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface InputState {
|
|
40
|
+
time: number;
|
|
41
|
+
event: number;
|
|
42
|
+
data: InputData;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface TimelineState {
|
|
46
|
+
time: number;
|
|
47
|
+
event: number;
|
|
48
|
+
data: TimelineData;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Event Data */
|
|
52
|
+
export interface TimelineData {
|
|
53
|
+
type: Event;
|
|
54
|
+
hash: string;
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
reaction: number;
|
|
58
|
+
context: number;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface InputData {
|
|
62
|
+
target: Target;
|
|
63
|
+
value: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface PointerData {
|
|
67
|
+
target: Target;
|
|
68
|
+
x: number;
|
|
69
|
+
y: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface ClickData {
|
|
73
|
+
target: Target;
|
|
74
|
+
x: number;
|
|
75
|
+
y: number;
|
|
76
|
+
eX: number;
|
|
77
|
+
eY: number;
|
|
78
|
+
button: number;
|
|
79
|
+
reaction: number;
|
|
80
|
+
context: BrowsingContext;
|
|
81
|
+
text: string;
|
|
82
|
+
link: string;
|
|
83
|
+
hash: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface ResizeData {
|
|
87
|
+
width: number;
|
|
88
|
+
height: number;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface ScrollData {
|
|
92
|
+
target: Target;
|
|
93
|
+
x: number;
|
|
94
|
+
y: number;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface SelectionData {
|
|
98
|
+
start: Target;
|
|
99
|
+
startOffset: number;
|
|
100
|
+
end: Target;
|
|
101
|
+
endOffset: number;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface UnloadData {
|
|
105
|
+
name: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface VisibilityData {
|
|
109
|
+
visible: string;
|
|
110
|
+
}
|