@corbado/observe 1.11.0 → 1.12.1
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/CHANGELOG.md +306 -0
- package/dist/analysis/config-manager.mjs +8 -1
- package/dist/analysis/cross-origin-session.mjs +6 -0
- package/dist/analysis/device-info-manager.mjs +1 -0
- package/dist/analysis/device.mjs +13 -4
- package/dist/analysis/index.mjs +2 -0
- package/dist/analysis/low-events/grouped-input-tracker.mjs +24 -6
- package/dist/analysis/low-events/input-tracker.mjs +24 -7
- package/dist/analysis/low-events/shared-window-observer.mjs +13 -3
- package/dist/analysis/queue.mjs +4 -0
- package/dist/analysis/readers/meta.mjs +10 -0
- package/dist/analysis/storage/index.mjs +21 -30
- package/dist/analysis/store/event-store.mjs +1 -0
- package/dist/analysis/tracker-core.mjs +5 -1
- package/dist/analysis/transports/fetch.mjs +11 -2
- package/dist/analysis/utils/email-link-operation-full.mjs +1 -0
- package/dist/analysis/utils/password-manager-sampler.mjs +9 -1
- package/dist/analysis/version.mjs +1 -1
- package/dist/cdn/script.global.js +1 -1
- package/dist/index.d.mts +45 -3
- package/dist/index.d.ts +45 -3
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +3 -2
|
@@ -12,10 +12,11 @@ function fieldContentLength(field) {
|
|
|
12
12
|
group: "Input interaction",
|
|
13
13
|
origin: "observe-external",
|
|
14
14
|
fields: [
|
|
15
|
-
{ path: "value.length", label: "Length of the entered text", exposure: "size" },
|
|
15
|
+
{ path: "value.length", label: "Length of the entered text", category: "behavior", exposure: "size" },
|
|
16
16
|
{
|
|
17
17
|
path: "checked",
|
|
18
18
|
label: "Whether a checkbox or option is selected",
|
|
19
|
+
category: "behavior",
|
|
19
20
|
exposure: "enum",
|
|
20
21
|
transform: { values: [true, false], note: "checkbox and radio only" }
|
|
21
22
|
}
|
|
@@ -46,12 +47,14 @@ var LowEventInputTracker = class {
|
|
|
46
47
|
{
|
|
47
48
|
path: "event.paste",
|
|
48
49
|
label: "Paste into the field",
|
|
50
|
+
category: "behavior",
|
|
49
51
|
exposure: "presence",
|
|
50
52
|
transform: { note: "trusted paste events only" }
|
|
51
53
|
},
|
|
52
54
|
{
|
|
53
55
|
path: "value",
|
|
54
56
|
label: "Length of the pasted text",
|
|
57
|
+
category: "behavior",
|
|
55
58
|
exposure: "size",
|
|
56
59
|
transform: { note: "inserted length only; values are compared in memory and discarded" }
|
|
57
60
|
}
|
|
@@ -107,21 +110,33 @@ var LowEventInputTracker = class {
|
|
|
107
110
|
group: "Input interaction",
|
|
108
111
|
origin: "observe-external",
|
|
109
112
|
fields: [
|
|
110
|
-
{ path: "event.focus", label: "Field selected", exposure: "presence" },
|
|
111
|
-
{ path: "event.blur", label: "Field left", exposure: "presence" },
|
|
112
|
-
{
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
{ path: "event.focus", label: "Field selected", category: "behavior", exposure: "presence" },
|
|
114
|
+
{ path: "event.blur", label: "Field left", category: "behavior", exposure: "presence" },
|
|
115
|
+
{
|
|
116
|
+
path: "event.pointerdown",
|
|
117
|
+
label: "Pointer pressed on the field",
|
|
118
|
+
category: "behavior",
|
|
119
|
+
exposure: "presence"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
path: "event.pointerup",
|
|
123
|
+
label: "Pointer released on the field",
|
|
124
|
+
category: "behavior",
|
|
125
|
+
exposure: "presence"
|
|
126
|
+
},
|
|
127
|
+
{ path: "event.click", label: "Click on the field", category: "behavior", exposure: "presence" },
|
|
128
|
+
{ path: "event.input", label: "Typing in the field", category: "behavior", exposure: "presence" },
|
|
116
129
|
{
|
|
117
130
|
path: "event.input.isComposing",
|
|
118
131
|
label: "Whether text is being composed with an input method",
|
|
132
|
+
category: "behavior",
|
|
119
133
|
exposure: "enum",
|
|
120
134
|
transform: { values: [true, false] }
|
|
121
135
|
},
|
|
122
136
|
{
|
|
123
137
|
path: "event.keyup.key",
|
|
124
138
|
label: "Escape key pressed",
|
|
139
|
+
category: "behavior",
|
|
125
140
|
exposure: "enum",
|
|
126
141
|
transform: { values: ["Escape", "other"] }
|
|
127
142
|
}
|
|
@@ -158,6 +173,7 @@ var LowEventInputTracker = class {
|
|
|
158
173
|
{
|
|
159
174
|
path: "event.pagehide",
|
|
160
175
|
label: "Leaving the page",
|
|
176
|
+
category: "technical",
|
|
161
177
|
exposure: "presence",
|
|
162
178
|
transform: { note: "flushes pending input low events on unload" }
|
|
163
179
|
}
|
|
@@ -179,6 +195,7 @@ var LowEventInputTracker = class {
|
|
|
179
195
|
{
|
|
180
196
|
path: "focused",
|
|
181
197
|
label: "Whether the field is selected",
|
|
198
|
+
category: "behavior",
|
|
182
199
|
exposure: "enum",
|
|
183
200
|
transform: { values: [true, false] }
|
|
184
201
|
}
|
|
@@ -19,48 +19,55 @@ var SharedWindowObserver = class {
|
|
|
19
19
|
group: "Window interaction",
|
|
20
20
|
origin: "observe-external",
|
|
21
21
|
fields: [
|
|
22
|
-
{ path: "event.blur", label: "Window left", exposure: "presence" },
|
|
23
|
-
{ path: "event.focus", label: "Window selected", exposure: "presence" },
|
|
22
|
+
{ path: "event.blur", label: "Window left", category: "behavior", exposure: "presence" },
|
|
23
|
+
{ path: "event.focus", label: "Window selected", category: "behavior", exposure: "presence" },
|
|
24
24
|
{
|
|
25
25
|
path: "event.visibilitychange",
|
|
26
26
|
label: "Page hidden or shown again",
|
|
27
|
+
category: "behavior",
|
|
27
28
|
exposure: "enum",
|
|
28
29
|
transform: { values: ["hidden", "visible"] }
|
|
29
30
|
},
|
|
30
31
|
{
|
|
31
32
|
path: "event.focusout",
|
|
32
33
|
label: "Whether a tracked field lost focus",
|
|
34
|
+
category: "behavior",
|
|
33
35
|
exposure: "computed",
|
|
34
36
|
transform: { note: "only whether a handed-over input lost focus to nothing" }
|
|
35
37
|
},
|
|
36
38
|
{
|
|
37
39
|
path: "event.focusin",
|
|
38
40
|
label: "Which tracked field gained focus",
|
|
41
|
+
category: "behavior",
|
|
39
42
|
exposure: "computed",
|
|
40
43
|
transform: { note: "only which handed-over input gained focus" }
|
|
41
44
|
},
|
|
42
45
|
{
|
|
43
46
|
path: "event.pointerdown",
|
|
44
47
|
label: "Whether a tracked field was pressed",
|
|
48
|
+
category: "behavior",
|
|
45
49
|
exposure: "computed",
|
|
46
50
|
transform: { note: "only whether the pointer went to a handed-over input" }
|
|
47
51
|
},
|
|
48
52
|
{
|
|
49
53
|
path: "event.visualviewport.resize",
|
|
50
54
|
label: "Duration of zooming or resizing",
|
|
55
|
+
category: "behavior",
|
|
51
56
|
exposure: "size",
|
|
52
57
|
transform: { note: "batched duration only" }
|
|
53
58
|
},
|
|
54
59
|
{
|
|
55
60
|
path: "event.visualviewport.scroll",
|
|
56
61
|
label: "Duration of scrolling",
|
|
62
|
+
category: "behavior",
|
|
57
63
|
exposure: "size",
|
|
58
64
|
transform: { note: "batched duration only" }
|
|
59
65
|
},
|
|
60
|
-
{ path: "event.pagehide", label: "Leaving the page", exposure: "presence" },
|
|
66
|
+
{ path: "event.pagehide", label: "Leaving the page", category: "technical", exposure: "presence" },
|
|
61
67
|
{
|
|
62
68
|
path: "event.navigation.back",
|
|
63
69
|
label: "Going back within the page",
|
|
70
|
+
category: "behavior",
|
|
64
71
|
exposure: "enum",
|
|
65
72
|
transform: { values: [true, false], note: "committed same-document traverse to an earlier entry" }
|
|
66
73
|
}
|
|
@@ -156,6 +163,7 @@ var SharedWindowObserver = class {
|
|
|
156
163
|
{
|
|
157
164
|
path: "activeElement",
|
|
158
165
|
label: "Which tracked field is selected",
|
|
166
|
+
category: "behavior",
|
|
159
167
|
exposure: "computed",
|
|
160
168
|
transform: { note: "identity compared against handed-over inputs only" }
|
|
161
169
|
}
|
|
@@ -222,12 +230,14 @@ var SharedWindowObserver = class {
|
|
|
222
230
|
{
|
|
223
231
|
path: "activeElement",
|
|
224
232
|
label: "Which tracked field is selected",
|
|
233
|
+
category: "behavior",
|
|
225
234
|
exposure: "computed",
|
|
226
235
|
transform: { note: "identity compared against handed-over inputs only" }
|
|
227
236
|
},
|
|
228
237
|
{
|
|
229
238
|
path: "activeElement.idle",
|
|
230
239
|
label: "Whether nothing is selected",
|
|
240
|
+
category: "behavior",
|
|
231
241
|
exposure: "enum",
|
|
232
242
|
transform: { values: [true, false], note: "nothing focused (body or none)" }
|
|
233
243
|
}
|
package/dist/analysis/queue.mjs
CHANGED
|
@@ -647,6 +647,7 @@ var RequestQueue = class {
|
|
|
647
647
|
{
|
|
648
648
|
path: "visibilityState",
|
|
649
649
|
label: "Whether the page is hidden",
|
|
650
|
+
category: "technical",
|
|
650
651
|
exposure: "enum",
|
|
651
652
|
transform: { values: ["hidden", "other"] }
|
|
652
653
|
}
|
|
@@ -679,6 +680,7 @@ var RequestQueue = class {
|
|
|
679
680
|
{
|
|
680
681
|
path: "event.visibilitychange",
|
|
681
682
|
label: "Page hidden or shown again",
|
|
683
|
+
category: "technical",
|
|
682
684
|
exposure: "presence",
|
|
683
685
|
transform: { note: "flushes pending events when the page is hidden" }
|
|
684
686
|
}
|
|
@@ -698,6 +700,7 @@ var RequestQueue = class {
|
|
|
698
700
|
{
|
|
699
701
|
path: "event.pagehide",
|
|
700
702
|
label: "Leaving the page",
|
|
703
|
+
category: "technical",
|
|
701
704
|
exposure: "presence",
|
|
702
705
|
transform: { note: "flushes pending events on unload" }
|
|
703
706
|
}
|
|
@@ -723,6 +726,7 @@ var RequestQueue = class {
|
|
|
723
726
|
{
|
|
724
727
|
path: "url",
|
|
725
728
|
label: "Full page address",
|
|
729
|
+
category: "technical",
|
|
726
730
|
exposure: "raw",
|
|
727
731
|
transform: { note: "debug mode only; written to own localStorage, never sent" }
|
|
728
732
|
}
|
|
@@ -13,6 +13,16 @@ var READER_EXPOSURES = [
|
|
|
13
13
|
"redacted",
|
|
14
14
|
"raw"
|
|
15
15
|
];
|
|
16
|
+
var READER_CATEGORIES = [
|
|
17
|
+
"personal-identifier",
|
|
18
|
+
"personal-data",
|
|
19
|
+
"secret",
|
|
20
|
+
"passkey",
|
|
21
|
+
"device",
|
|
22
|
+
"behavior",
|
|
23
|
+
"technical"
|
|
24
|
+
];
|
|
16
25
|
export {
|
|
26
|
+
READER_CATEGORIES,
|
|
17
27
|
READER_EXPOSURES
|
|
18
28
|
};
|
|
@@ -28,16 +28,13 @@ var LocalStorage = class {
|
|
|
28
28
|
accessNote: "localStorage, Observe's own cbo_ keys",
|
|
29
29
|
group: "Observe SDK state",
|
|
30
30
|
origin: "observe-internal",
|
|
31
|
-
fields: [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
]
|
|
31
|
+
fields: [],
|
|
32
|
+
storage: {
|
|
33
|
+
area: "local",
|
|
34
|
+
keys: ["cbo_*"],
|
|
35
|
+
lifetime: "persistent",
|
|
36
|
+
retention: "Kept on the device; Observe replaces or removes its entries as they change"
|
|
37
|
+
}
|
|
41
38
|
});
|
|
42
39
|
/**
|
|
43
40
|
* Error situations:
|
|
@@ -98,16 +95,13 @@ var CookieStorage = class {
|
|
|
98
95
|
accessNote: "document.cookie, Observe's own cbo_ cookies",
|
|
99
96
|
group: "Observe SDK state",
|
|
100
97
|
origin: "observe-internal",
|
|
101
|
-
fields: [
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
]
|
|
98
|
+
fields: [],
|
|
99
|
+
storage: {
|
|
100
|
+
area: "cookie",
|
|
101
|
+
keys: ["cbo_*"],
|
|
102
|
+
lifetime: "browser",
|
|
103
|
+
retention: "Removed when the browser closes"
|
|
104
|
+
}
|
|
111
105
|
});
|
|
112
106
|
/**
|
|
113
107
|
* Error situations:
|
|
@@ -181,16 +175,13 @@ var SessionStorage = class {
|
|
|
181
175
|
accessNote: "sessionStorage, Observe's own cbo_ keys",
|
|
182
176
|
group: "Observe SDK state",
|
|
183
177
|
origin: "observe-internal",
|
|
184
|
-
fields: [
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
]
|
|
178
|
+
fields: [],
|
|
179
|
+
storage: {
|
|
180
|
+
area: "session",
|
|
181
|
+
keys: ["cbo_*"],
|
|
182
|
+
lifetime: "tab",
|
|
183
|
+
retention: "Removed when the tab closes"
|
|
184
|
+
}
|
|
194
185
|
});
|
|
195
186
|
/**
|
|
196
187
|
* Error situations:
|
|
@@ -479,6 +479,7 @@ var CorbadoTrackerCore = class _CorbadoTrackerCore {
|
|
|
479
479
|
{
|
|
480
480
|
path: "result",
|
|
481
481
|
label: "Whether the browser looks like a bot",
|
|
482
|
+
category: "device",
|
|
482
483
|
exposure: "computed",
|
|
483
484
|
transform: { note: "matched against the blocked user-agent list; only the boolean is used (tracking off)" }
|
|
484
485
|
}
|
|
@@ -678,6 +679,7 @@ var CorbadoTrackerCore = class _CorbadoTrackerCore {
|
|
|
678
679
|
{
|
|
679
680
|
path: "available",
|
|
680
681
|
label: "Whether the browser supports tab coordination",
|
|
682
|
+
category: "device",
|
|
681
683
|
exposure: "enum",
|
|
682
684
|
transform: { values: [true, false] }
|
|
683
685
|
}
|
|
@@ -696,6 +698,7 @@ var CorbadoTrackerCore = class _CorbadoTrackerCore {
|
|
|
696
698
|
{
|
|
697
699
|
path: "result",
|
|
698
700
|
label: "Coordination between open tabs",
|
|
701
|
+
category: "technical",
|
|
699
702
|
exposure: "none",
|
|
700
703
|
transform: { note: "own cbo_* lock names; serializes the SDK's storage updates across tabs" }
|
|
701
704
|
}
|
|
@@ -724,10 +727,11 @@ var CorbadoTrackerCore = class _CorbadoTrackerCore {
|
|
|
724
727
|
group: "Page",
|
|
725
728
|
origin: "observe-external",
|
|
726
729
|
fields: [
|
|
727
|
-
{ path: "url.path", label: "Page path", exposure: "raw" },
|
|
730
|
+
{ path: "url.path", label: "Page path", category: "technical", exposure: "raw" },
|
|
728
731
|
{
|
|
729
732
|
path: "url.query",
|
|
730
733
|
label: "Page address parameters (allowed ones only)",
|
|
734
|
+
category: "technical",
|
|
731
735
|
exposure: "redacted",
|
|
732
736
|
transform: { note: "sourcePathQuery 'allowlist': values of non-allowlisted keys become '*'; 'all': raw" }
|
|
733
737
|
}
|
|
@@ -16,6 +16,7 @@ var FetchTransport = class {
|
|
|
16
16
|
{
|
|
17
17
|
path: "request.header.user-agent",
|
|
18
18
|
label: "Browser and operating system identifier",
|
|
19
|
+
category: "device",
|
|
19
20
|
exposure: "raw",
|
|
20
21
|
transform: { note: "full User-Agent string, sent by the browser" }
|
|
21
22
|
}
|
|
@@ -61,17 +62,24 @@ var FetchTransport = class {
|
|
|
61
62
|
group: "Event delivery",
|
|
62
63
|
origin: "observe-internal",
|
|
63
64
|
fields: [
|
|
64
|
-
{ path: "response.status", label: "Response code", exposure: "raw" },
|
|
65
|
-
{
|
|
65
|
+
{ path: "response.status", label: "Response code", category: "technical", exposure: "raw" },
|
|
66
|
+
{
|
|
67
|
+
path: "response.header.retry-after",
|
|
68
|
+
label: "Retry delay requested by the server",
|
|
69
|
+
category: "technical",
|
|
70
|
+
exposure: "raw"
|
|
71
|
+
},
|
|
66
72
|
{
|
|
67
73
|
path: "response.header.x-corbado-observe-accepted",
|
|
68
74
|
label: "Whether Observe accepted the events",
|
|
75
|
+
category: "technical",
|
|
69
76
|
exposure: "enum",
|
|
70
77
|
transform: { values: ["1", "other"] }
|
|
71
78
|
},
|
|
72
79
|
{
|
|
73
80
|
path: "response.body",
|
|
74
81
|
label: "Observe settings in the response",
|
|
82
|
+
category: "technical",
|
|
75
83
|
exposure: "raw",
|
|
76
84
|
transform: { note: "SDK reliability config (HTTP 200 only)" }
|
|
77
85
|
}
|
|
@@ -129,6 +137,7 @@ var FetchTransport = class {
|
|
|
129
137
|
{
|
|
130
138
|
path: "result",
|
|
131
139
|
label: "Whether the browser accepted the data for sending",
|
|
140
|
+
category: "technical",
|
|
132
141
|
exposure: "enum",
|
|
133
142
|
transform: { values: [true, false], note: "whether the browser queued the beacon" }
|
|
134
143
|
}
|
|
@@ -78,6 +78,7 @@ var EmailLinkContinuationOperation = class extends OperationFull {
|
|
|
78
78
|
{
|
|
79
79
|
path: "event.pagehide",
|
|
80
80
|
label: "Leaving the page",
|
|
81
|
+
category: "technical",
|
|
81
82
|
exposure: "presence",
|
|
82
83
|
transform: { note: "flushes a detached email-link continuation on unload" }
|
|
83
84
|
}
|
|
@@ -23,6 +23,7 @@ var PasswordManagerSampler = class {
|
|
|
23
23
|
{
|
|
24
24
|
path: "readyState",
|
|
25
25
|
label: "Whether the page has finished loading",
|
|
26
|
+
category: "technical",
|
|
26
27
|
exposure: "enum",
|
|
27
28
|
transform: { values: ["complete", "other"] }
|
|
28
29
|
}
|
|
@@ -46,6 +47,7 @@ var PasswordManagerSampler = class {
|
|
|
46
47
|
{
|
|
47
48
|
path: "event.load",
|
|
48
49
|
label: "Page finished loading",
|
|
50
|
+
category: "technical",
|
|
49
51
|
exposure: "presence",
|
|
50
52
|
transform: { note: "schedules a password manager sample" }
|
|
51
53
|
}
|
|
@@ -132,6 +134,7 @@ var PasswordManagerSampler = class {
|
|
|
132
134
|
{
|
|
133
135
|
path: "result[].name",
|
|
134
136
|
label: "Names of known password managers found",
|
|
137
|
+
category: "device",
|
|
135
138
|
exposure: "enum",
|
|
136
139
|
transform: {
|
|
137
140
|
values: [
|
|
@@ -147,7 +150,12 @@ var PasswordManagerSampler = class {
|
|
|
147
150
|
}
|
|
148
151
|
},
|
|
149
152
|
// Read to merge samples, never reported (takeReport keeps only the name).
|
|
150
|
-
{
|
|
153
|
+
{
|
|
154
|
+
path: "result[].signedIn",
|
|
155
|
+
label: "Whether the password manager is signed in",
|
|
156
|
+
category: "device",
|
|
157
|
+
exposure: "none"
|
|
158
|
+
}
|
|
151
159
|
],
|
|
152
160
|
dataConfig: "pmd"
|
|
153
161
|
});
|