@corbado/observe 1.14.1 → 1.15.0

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.
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Collection manifest v2 (`corbado.collection/v2`): the descriptor contract shared by the SDK, the autocapture
3
+ * library and the autocapture tools, plus the shared vocabulary (collection levels, categories, kinds).
4
+ *
5
+ * Descriptors are DATA for the tools (`ac manifest`, the gate) and are never part of a shipped bundle: runtime
6
+ * code never imports `src/manifest/**` (checked by `manifest.test.ts` and `scripts/check-data-guards.mjs`).
7
+ * Import them from the `@corbado/observe/manifest` subpath (Node ESM: `@corbado/observe/dist/manifest/index.mjs`).
8
+ *
9
+ * Model: feature-docs/autocapture-releases/manifest-model-v1.html (v1.3), sections 0, 0b, 2, 3, 6.
10
+ *
11
+ * Changes to the shapes below are additive only (the tools of older and newer packages read them).
12
+ */
13
+ /** Non-value collection levels: they reveal nothing about the content. */
14
+ type NonValueLevel = "presence" | "empty" | "interaction" | "shown" | "request-metadata" | "ceremony" | "equality";
15
+ /** Value collection levels: derived from the value, they reveal something about it. */
16
+ type ValueLevel = "size" | "class" | "enum" | "pseudonym" | "partial" | "pattern" | "raw";
17
+ /** One collection level per field (JSON key `level`). `generated` is not a level: generated ids are an output. */
18
+ type CollectionLevel = NonValueLevel | ValueLevel;
19
+ /** Non-value levels (order within a kind's ladder: see {@link KIND_LADDERS}). */
20
+ declare const NON_VALUE_LEVELS: readonly NonValueLevel[];
21
+ /** Value levels ordered by what a reader learns about the content (section 2, "The order of value levels"). */
22
+ declare const VALUE_LEVELS: readonly ValueLevel[];
23
+ /** What a field is about (the subject), never derived from its level. */
24
+ type Category = "secret" | "personal-identifier" | "opaque-identifier" | "personal-data" | "device" | "technical";
25
+ declare const CATEGORIES: readonly Category[];
26
+ /**
27
+ * Allowed VALUE levels per category (section 3). Non-value levels (and `equality`) are allowed for every category.
28
+ * `personal-identifier` pseudonyms must be keyed or project-salted; `personal-data` patterns closed or structural.
29
+ */
30
+ declare const CATEGORY_VALUE_LEVELS: {
31
+ readonly [C in Category]: readonly ValueLevel[];
32
+ };
33
+ /** Source kinds (section 1). */
34
+ type SourceKind = "dom-input" | "dom-element" | "url" | "request" | "storage" | "host-config" | "host-event" | "browser-api" | "page/window" | "generated"
35
+ /** Additive (WP3 follow-up): fields the SDK itself adds to every record it sends (ordering counters). */
36
+ | "record";
37
+ /**
38
+ * One ladder per kind (section 2): non-value levels below value levels, each in its order. `equality` is allowed on
39
+ * every kind with values and is not listed per ladder.
40
+ */
41
+ declare const KIND_LADDERS: {
42
+ readonly [K in Exclude<SourceKind, "generated">]: {
43
+ readonly nonValue: readonly NonValueLevel[];
44
+ readonly value: readonly ValueLevel[];
45
+ };
46
+ };
47
+ /** A field id `<source key>#<field path>`, a `generated:` / `storage:` / `telemetry:` / `transport:` id. */
48
+ type ManifestId = string;
49
+ /** A reviewed collector with an algorithm between browser object and output (section 0b, one card each). */
50
+ interface CapabilityDescriptor {
51
+ /** `sdk:input`, `ac:ceremony`, `sdk:window`, ... (rendered as `<key>@<version>`, referenced by fields' `via`). */
52
+ key: string;
53
+ version: number;
54
+ /** Plain customer language (section 0b). */
55
+ title: string;
56
+ why: string;
57
+ collects: string[];
58
+ /** `proof` = the id of a test in this repo (`<key>@<version>#never.<slug>`, part of the test's title). */
59
+ never: {
60
+ text: string;
61
+ proof: string;
62
+ }[];
63
+ modes?: Record<string, string>;
64
+ /** Named options a project declaration can set, e.g. `passkeyReference`. */
65
+ options?: {
66
+ name: string;
67
+ adds: string;
68
+ }[];
69
+ /** What the capability does on the page beyond reading; `when` = the build switch that enables it. */
70
+ sideEffects?: {
71
+ id: string;
72
+ text: string;
73
+ when?: string;
74
+ }[];
75
+ review?: string;
76
+ /** Additive (WP2): short plain-language line shown under the card, e.g. "used on: input fields". */
77
+ usedOn?: string;
78
+ /** Additive (WP2): the build switch that removes the whole capability from builds that turn it off. */
79
+ when?: string;
80
+ }
81
+ /** Gateways without an algorithm and the output gateways (sections 4 and 6). */
82
+ interface GatewayDescriptor {
83
+ key: string;
84
+ version: number;
85
+ /** Always-collected fields. */
86
+ fields?: GatewayField[];
87
+ generated?: GeneratedEntry[];
88
+ stored?: StoredEntry[];
89
+ telemetry?: TelemetryEntry[];
90
+ /** Additive (WP1/WP2): the source the `fields` belong to; field ids are `<source.key>#<path>`. */
91
+ source?: {
92
+ key: string;
93
+ kind: SourceKind | string;
94
+ title?: string;
95
+ };
96
+ /** Additive (WP2): plain-language title of the gateway. */
97
+ title?: string;
98
+ /** Additive (WP2): transport facts (`transport:<fact>`), only on the transport gateway. */
99
+ transport?: TransportFact[];
100
+ }
101
+ interface GatewayField {
102
+ path: string;
103
+ /** A category, or `"role"`: inherit the category of the input role the field is read from. */
104
+ category: Category | "role" | string;
105
+ level: CollectionLevel | string;
106
+ label: string;
107
+ /** Additive (WP2): capability that produces the field, `<key>@<version>`. */
108
+ via?: string;
109
+ /** Additive (WP2): parameters of the level (enum values, pattern, template, buckets, ...). */
110
+ transform?: Record<string, unknown>;
111
+ /** Additive (WP2): synthetic examples fitting the level. */
112
+ examples?: (string | number | boolean)[];
113
+ /** Additive (WP2): build switch the field depends on (absent in builds that turn it off). */
114
+ when?: string;
115
+ /** Additive (WP1): what an opaque-identifier field points to (credential, browser, session, tab, flow). */
116
+ pointsTo?: string;
117
+ }
118
+ /**
119
+ * A generated identifier (an output type, not a collection level).
120
+ * - `lifetime`: `"event"`, `"page-load"`, `"tab"`, `"persistent"` or an ISO 8601 duration (e.g. `"PT30M"` of
121
+ * inactivity).
122
+ * - `exposedTo`: who besides Corbado can see it, e.g. `"corbado"`, `"page scripts (getSessionId)"`,
123
+ * `"page scripts (local storage)"`.
124
+ */
125
+ interface GeneratedEntry {
126
+ id: string;
127
+ category: Category | string;
128
+ pointsTo: string;
129
+ lifetime: string;
130
+ scope?: string;
131
+ exposedTo: string[];
132
+ /** Additive (WP2): plain-language label. */
133
+ label?: string;
134
+ /** Additive (WP2): build switch / config flag the entry depends on. */
135
+ when?: string;
136
+ }
137
+ /**
138
+ * Something the bundle writes to the browser.
139
+ * - `area`: `"local"`, `"session"`, `"cookie"`, `"indexeddb"`, `"opfs"`, `"web-locks"`, ...
140
+ * - `scope`: `"tab"`, `"origin"`, `"cookie domain + path"`.
141
+ * - `retention`: an ISO 8601 duration (enforced by code), `"tab"` (sessionStorage), `"PT0S"` (removed at once) or
142
+ * `"persistent"`.
143
+ * - `owner`: `"sdk"`, `"project"`, `"third-party (<package>)"`.
144
+ * - `contents`: field and generated ids (typed references); `"sent:events"` = the whole queued event as sent.
145
+ */
146
+ interface StoredEntry {
147
+ id: string;
148
+ area: string;
149
+ scope: string;
150
+ retention: string;
151
+ owner: string;
152
+ contents: string[];
153
+ /** Additive (WP2): the keys as written (`cbo_<name>_<projectId>`; `*` = the project id or a family). */
154
+ keys?: string[];
155
+ /** Additive (WP2): plain-language label. */
156
+ label?: string;
157
+ /** Additive (WP2): whether `retention` is enforced by code (purged), not only described. */
158
+ enforced?: boolean;
159
+ /** Additive (WP2): build switch / config flag the entry depends on. */
160
+ when?: string;
161
+ }
162
+ interface TelemetryEntry {
163
+ kind: string;
164
+ fields: string[];
165
+ /** Additive (WP2): plain-language label. */
166
+ label?: string;
167
+ }
168
+ /** Additive (WP2): what the transport sends besides the events (`transport:<fact>`). */
169
+ interface TransportFact {
170
+ id: string;
171
+ label: string;
172
+ /** `"browser"` = added by the browser, not by the SDK. */
173
+ addedBy: "sdk" | "browser";
174
+ when?: string;
175
+ }
176
+
177
+ /**
178
+ * `ac:ceremony@1` (SDK part): the WebAuthn allowlist (`src/utils/webauthn-ceremony.ts`), used by the sanitizers in
179
+ * builds that define `__CBO_DATA_CEREMONY__ = true` (build switch `ceremony`). The library's credentials wrapper and
180
+ * its endpoint reductions are the callers (second entry point: WebAuthn payloads in request and response bodies).
181
+ */
182
+ declare const AC_CEREMONY: CapabilityDescriptor;
183
+
184
+ /**
185
+ * Values the integration hands to the SDK's API that the SDK keeps in its own storage (referenced by
186
+ * `sdk:own-storage`). The full host contract (init options, page config) is gap G15 and follows with the library's
187
+ * host-config gateway.
188
+ */
189
+ declare const SDK_API: GatewayDescriptor;
190
+
191
+ /**
192
+ * Device gateway (`src/readers/device.ts`, collected by `src/device.ts`): fixed readers, no capability. Sent once
193
+ * per page with the first events (device info), together with the generated device handle and tab id (see
194
+ * the generated-ids gateway).
195
+ */
196
+ declare const SDK_DEVICE: GatewayDescriptor;
197
+
198
+ /**
199
+ * Generated-ids output gateway (`outputs.sent.generated`, gap G3). Rule (model 11e): technical if an id lives at most
200
+ * one tab or flow and never leaves the tab, otherwise opaque-identifier. Every id below is sent to Corbado, so all
201
+ * random ids are opaque-identifier. The sequence counters are not ids: they are technical fields of each record
202
+ * ({@link SDK_RECORD}).
203
+ */
204
+ declare const SDK_GENERATED: GatewayDescriptor;
205
+ /**
206
+ * Fields the SDK adds to every record it sends (decided 2026-11-08: the sequence counters are a technical field of
207
+ * the event, not a generated id). Source kind `record`: nothing is read from the page.
208
+ */
209
+ declare const SDK_RECORD: GatewayDescriptor;
210
+
211
+ /**
212
+ * Own-storage output gateway (`outputs.stored`, gap G2): every key the SDK writes. Keys are written as
213
+ * `cbo_<name>_<projectId>` (`*` below). `retention` is enforced by code where `enforced` is true: the outboxes and
214
+ * the email-link notes only in builds with `__CBO_DATA_RETENTION__` (build switch `retention`); without it the
215
+ * outboxes keep entries up to their caps (500 events, 1000 low events) and expired email-link notes stay until the
216
+ * next write. Contents reference field and generated ids; `sent:events` = whole queued records as they are sent.
217
+ */
218
+ declare const SDK_OWN_STORAGE: GatewayDescriptor;
219
+
220
+ /**
221
+ * Page gateway (`src/readers/page.ts`), declared as it behaves today: the page path is sent raw (no templates yet,
222
+ * gap G8) with every batch's first event; query keys stay, their values are masked unless the config allowlists the
223
+ * key (`sourcePathQuery` / `sourcePathQueryAllow`). Templates, declared query reductions and the navigation entry
224
+ * follow with the G8 change.
225
+ */
226
+ declare const SDK_PAGE: GatewayDescriptor;
227
+
228
+ /**
229
+ * `sdk:input@1`: the input gateway (`src/readers/input.ts`, `src/readers/input-paste.ts`, collectors in
230
+ * `src/low-events/`), declared as it behaves today (v1). Inside the gateway it reads the field's LENGTH (and a
231
+ * checkbox's checked state) to tell typing, pasting, clearing and several-characters-at-once changes apart; neither
232
+ * the value nor the length leaves it. A value-free v2 comes later (model section 13, "Later").
233
+ */
234
+ declare const SDK_INPUT: CapabilityDescriptor;
235
+
236
+ /**
237
+ * `sdk:password-managers@1`: password-manager detection (`src/readers/password-manager-extensions.ts`, sampled by
238
+ * `src/utils/password-manager-sampler.ts`). Compiled out with `__CBO_DATA_PMD__ = false` (build switch `pmd`).
239
+ */
240
+ declare const SDK_PASSWORD_MANAGERS: CapabilityDescriptor;
241
+
242
+ /**
243
+ * `sdk:private-mode@1`: private-mode detection (`src/readers/private-mode.ts`, the third-party library
244
+ * detectincognitojs). Compiled out with `__CBO_DATA_PRIVATE_MODE__ = false` (build switch `privateMode`).
245
+ */
246
+ declare const SDK_PRIVATE_MODE: CapabilityDescriptor;
247
+
248
+ /**
249
+ * Transport output gateway (`src/transports/fetch.ts`, `src/readers/network.ts`): ingestion requests with fetch
250
+ * (keepalive, no credentials) and `sendBeacon` on page hide. Lists what leaves besides the events themselves.
251
+ */
252
+ declare const SDK_TRANSPORT: GatewayDescriptor;
253
+
254
+ /** `sdk:window@1`: the window gateway (`src/readers/window-events.ts`, `src/low-events/shared-window-observer.ts`). */
255
+ declare const SDK_WINDOW: CapabilityDescriptor;
256
+
257
+ /**
258
+ * `@corbado/observe/manifest`: collection manifest v2 descriptors of the SDK's gateways and capabilities, read by
259
+ * the autocapture tools from the package. Never imported by runtime code, so never part of a bundle.
260
+ */
261
+
262
+ /** Every capability descriptor of this package. */
263
+ declare const SDK_CAPABILITIES: readonly CapabilityDescriptor[];
264
+ /** Every gateway descriptor of this package. */
265
+ declare const SDK_GATEWAYS: readonly GatewayDescriptor[];
266
+ /** WP1 names: the same lists. */
267
+ declare const capabilities: CapabilityDescriptor[];
268
+ declare const gateways: GatewayDescriptor[];
269
+
270
+ export { AC_CEREMONY, CATEGORIES, CATEGORY_VALUE_LEVELS, type CapabilityDescriptor, type Category, type CollectionLevel, type GatewayDescriptor, type GatewayField, type GeneratedEntry, KIND_LADDERS, type ManifestId, NON_VALUE_LEVELS, type NonValueLevel, SDK_API, SDK_CAPABILITIES, SDK_DEVICE, SDK_GATEWAYS, SDK_GENERATED, SDK_INPUT, SDK_OWN_STORAGE, SDK_PAGE, SDK_PASSWORD_MANAGERS, SDK_PRIVATE_MODE, SDK_RECORD, SDK_TRANSPORT, SDK_WINDOW, type SourceKind, type StoredEntry, type TelemetryEntry, type TransportFact, VALUE_LEVELS, type ValueLevel, capabilities, gateways };
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Collection manifest v2 (`corbado.collection/v2`): the descriptor contract shared by the SDK, the autocapture
3
+ * library and the autocapture tools, plus the shared vocabulary (collection levels, categories, kinds).
4
+ *
5
+ * Descriptors are DATA for the tools (`ac manifest`, the gate) and are never part of a shipped bundle: runtime
6
+ * code never imports `src/manifest/**` (checked by `manifest.test.ts` and `scripts/check-data-guards.mjs`).
7
+ * Import them from the `@corbado/observe/manifest` subpath (Node ESM: `@corbado/observe/dist/manifest/index.mjs`).
8
+ *
9
+ * Model: feature-docs/autocapture-releases/manifest-model-v1.html (v1.3), sections 0, 0b, 2, 3, 6.
10
+ *
11
+ * Changes to the shapes below are additive only (the tools of older and newer packages read them).
12
+ */
13
+ /** Non-value collection levels: they reveal nothing about the content. */
14
+ type NonValueLevel = "presence" | "empty" | "interaction" | "shown" | "request-metadata" | "ceremony" | "equality";
15
+ /** Value collection levels: derived from the value, they reveal something about it. */
16
+ type ValueLevel = "size" | "class" | "enum" | "pseudonym" | "partial" | "pattern" | "raw";
17
+ /** One collection level per field (JSON key `level`). `generated` is not a level: generated ids are an output. */
18
+ type CollectionLevel = NonValueLevel | ValueLevel;
19
+ /** Non-value levels (order within a kind's ladder: see {@link KIND_LADDERS}). */
20
+ declare const NON_VALUE_LEVELS: readonly NonValueLevel[];
21
+ /** Value levels ordered by what a reader learns about the content (section 2, "The order of value levels"). */
22
+ declare const VALUE_LEVELS: readonly ValueLevel[];
23
+ /** What a field is about (the subject), never derived from its level. */
24
+ type Category = "secret" | "personal-identifier" | "opaque-identifier" | "personal-data" | "device" | "technical";
25
+ declare const CATEGORIES: readonly Category[];
26
+ /**
27
+ * Allowed VALUE levels per category (section 3). Non-value levels (and `equality`) are allowed for every category.
28
+ * `personal-identifier` pseudonyms must be keyed or project-salted; `personal-data` patterns closed or structural.
29
+ */
30
+ declare const CATEGORY_VALUE_LEVELS: {
31
+ readonly [C in Category]: readonly ValueLevel[];
32
+ };
33
+ /** Source kinds (section 1). */
34
+ type SourceKind = "dom-input" | "dom-element" | "url" | "request" | "storage" | "host-config" | "host-event" | "browser-api" | "page/window" | "generated"
35
+ /** Additive (WP3 follow-up): fields the SDK itself adds to every record it sends (ordering counters). */
36
+ | "record";
37
+ /**
38
+ * One ladder per kind (section 2): non-value levels below value levels, each in its order. `equality` is allowed on
39
+ * every kind with values and is not listed per ladder.
40
+ */
41
+ declare const KIND_LADDERS: {
42
+ readonly [K in Exclude<SourceKind, "generated">]: {
43
+ readonly nonValue: readonly NonValueLevel[];
44
+ readonly value: readonly ValueLevel[];
45
+ };
46
+ };
47
+ /** A field id `<source key>#<field path>`, a `generated:` / `storage:` / `telemetry:` / `transport:` id. */
48
+ type ManifestId = string;
49
+ /** A reviewed collector with an algorithm between browser object and output (section 0b, one card each). */
50
+ interface CapabilityDescriptor {
51
+ /** `sdk:input`, `ac:ceremony`, `sdk:window`, ... (rendered as `<key>@<version>`, referenced by fields' `via`). */
52
+ key: string;
53
+ version: number;
54
+ /** Plain customer language (section 0b). */
55
+ title: string;
56
+ why: string;
57
+ collects: string[];
58
+ /** `proof` = the id of a test in this repo (`<key>@<version>#never.<slug>`, part of the test's title). */
59
+ never: {
60
+ text: string;
61
+ proof: string;
62
+ }[];
63
+ modes?: Record<string, string>;
64
+ /** Named options a project declaration can set, e.g. `passkeyReference`. */
65
+ options?: {
66
+ name: string;
67
+ adds: string;
68
+ }[];
69
+ /** What the capability does on the page beyond reading; `when` = the build switch that enables it. */
70
+ sideEffects?: {
71
+ id: string;
72
+ text: string;
73
+ when?: string;
74
+ }[];
75
+ review?: string;
76
+ /** Additive (WP2): short plain-language line shown under the card, e.g. "used on: input fields". */
77
+ usedOn?: string;
78
+ /** Additive (WP2): the build switch that removes the whole capability from builds that turn it off. */
79
+ when?: string;
80
+ }
81
+ /** Gateways without an algorithm and the output gateways (sections 4 and 6). */
82
+ interface GatewayDescriptor {
83
+ key: string;
84
+ version: number;
85
+ /** Always-collected fields. */
86
+ fields?: GatewayField[];
87
+ generated?: GeneratedEntry[];
88
+ stored?: StoredEntry[];
89
+ telemetry?: TelemetryEntry[];
90
+ /** Additive (WP1/WP2): the source the `fields` belong to; field ids are `<source.key>#<path>`. */
91
+ source?: {
92
+ key: string;
93
+ kind: SourceKind | string;
94
+ title?: string;
95
+ };
96
+ /** Additive (WP2): plain-language title of the gateway. */
97
+ title?: string;
98
+ /** Additive (WP2): transport facts (`transport:<fact>`), only on the transport gateway. */
99
+ transport?: TransportFact[];
100
+ }
101
+ interface GatewayField {
102
+ path: string;
103
+ /** A category, or `"role"`: inherit the category of the input role the field is read from. */
104
+ category: Category | "role" | string;
105
+ level: CollectionLevel | string;
106
+ label: string;
107
+ /** Additive (WP2): capability that produces the field, `<key>@<version>`. */
108
+ via?: string;
109
+ /** Additive (WP2): parameters of the level (enum values, pattern, template, buckets, ...). */
110
+ transform?: Record<string, unknown>;
111
+ /** Additive (WP2): synthetic examples fitting the level. */
112
+ examples?: (string | number | boolean)[];
113
+ /** Additive (WP2): build switch the field depends on (absent in builds that turn it off). */
114
+ when?: string;
115
+ /** Additive (WP1): what an opaque-identifier field points to (credential, browser, session, tab, flow). */
116
+ pointsTo?: string;
117
+ }
118
+ /**
119
+ * A generated identifier (an output type, not a collection level).
120
+ * - `lifetime`: `"event"`, `"page-load"`, `"tab"`, `"persistent"` or an ISO 8601 duration (e.g. `"PT30M"` of
121
+ * inactivity).
122
+ * - `exposedTo`: who besides Corbado can see it, e.g. `"corbado"`, `"page scripts (getSessionId)"`,
123
+ * `"page scripts (local storage)"`.
124
+ */
125
+ interface GeneratedEntry {
126
+ id: string;
127
+ category: Category | string;
128
+ pointsTo: string;
129
+ lifetime: string;
130
+ scope?: string;
131
+ exposedTo: string[];
132
+ /** Additive (WP2): plain-language label. */
133
+ label?: string;
134
+ /** Additive (WP2): build switch / config flag the entry depends on. */
135
+ when?: string;
136
+ }
137
+ /**
138
+ * Something the bundle writes to the browser.
139
+ * - `area`: `"local"`, `"session"`, `"cookie"`, `"indexeddb"`, `"opfs"`, `"web-locks"`, ...
140
+ * - `scope`: `"tab"`, `"origin"`, `"cookie domain + path"`.
141
+ * - `retention`: an ISO 8601 duration (enforced by code), `"tab"` (sessionStorage), `"PT0S"` (removed at once) or
142
+ * `"persistent"`.
143
+ * - `owner`: `"sdk"`, `"project"`, `"third-party (<package>)"`.
144
+ * - `contents`: field and generated ids (typed references); `"sent:events"` = the whole queued event as sent.
145
+ */
146
+ interface StoredEntry {
147
+ id: string;
148
+ area: string;
149
+ scope: string;
150
+ retention: string;
151
+ owner: string;
152
+ contents: string[];
153
+ /** Additive (WP2): the keys as written (`cbo_<name>_<projectId>`; `*` = the project id or a family). */
154
+ keys?: string[];
155
+ /** Additive (WP2): plain-language label. */
156
+ label?: string;
157
+ /** Additive (WP2): whether `retention` is enforced by code (purged), not only described. */
158
+ enforced?: boolean;
159
+ /** Additive (WP2): build switch / config flag the entry depends on. */
160
+ when?: string;
161
+ }
162
+ interface TelemetryEntry {
163
+ kind: string;
164
+ fields: string[];
165
+ /** Additive (WP2): plain-language label. */
166
+ label?: string;
167
+ }
168
+ /** Additive (WP2): what the transport sends besides the events (`transport:<fact>`). */
169
+ interface TransportFact {
170
+ id: string;
171
+ label: string;
172
+ /** `"browser"` = added by the browser, not by the SDK. */
173
+ addedBy: "sdk" | "browser";
174
+ when?: string;
175
+ }
176
+
177
+ /**
178
+ * `ac:ceremony@1` (SDK part): the WebAuthn allowlist (`src/utils/webauthn-ceremony.ts`), used by the sanitizers in
179
+ * builds that define `__CBO_DATA_CEREMONY__ = true` (build switch `ceremony`). The library's credentials wrapper and
180
+ * its endpoint reductions are the callers (second entry point: WebAuthn payloads in request and response bodies).
181
+ */
182
+ declare const AC_CEREMONY: CapabilityDescriptor;
183
+
184
+ /**
185
+ * Values the integration hands to the SDK's API that the SDK keeps in its own storage (referenced by
186
+ * `sdk:own-storage`). The full host contract (init options, page config) is gap G15 and follows with the library's
187
+ * host-config gateway.
188
+ */
189
+ declare const SDK_API: GatewayDescriptor;
190
+
191
+ /**
192
+ * Device gateway (`src/readers/device.ts`, collected by `src/device.ts`): fixed readers, no capability. Sent once
193
+ * per page with the first events (device info), together with the generated device handle and tab id (see
194
+ * the generated-ids gateway).
195
+ */
196
+ declare const SDK_DEVICE: GatewayDescriptor;
197
+
198
+ /**
199
+ * Generated-ids output gateway (`outputs.sent.generated`, gap G3). Rule (model 11e): technical if an id lives at most
200
+ * one tab or flow and never leaves the tab, otherwise opaque-identifier. Every id below is sent to Corbado, so all
201
+ * random ids are opaque-identifier. The sequence counters are not ids: they are technical fields of each record
202
+ * ({@link SDK_RECORD}).
203
+ */
204
+ declare const SDK_GENERATED: GatewayDescriptor;
205
+ /**
206
+ * Fields the SDK adds to every record it sends (decided 2026-11-08: the sequence counters are a technical field of
207
+ * the event, not a generated id). Source kind `record`: nothing is read from the page.
208
+ */
209
+ declare const SDK_RECORD: GatewayDescriptor;
210
+
211
+ /**
212
+ * Own-storage output gateway (`outputs.stored`, gap G2): every key the SDK writes. Keys are written as
213
+ * `cbo_<name>_<projectId>` (`*` below). `retention` is enforced by code where `enforced` is true: the outboxes and
214
+ * the email-link notes only in builds with `__CBO_DATA_RETENTION__` (build switch `retention`); without it the
215
+ * outboxes keep entries up to their caps (500 events, 1000 low events) and expired email-link notes stay until the
216
+ * next write. Contents reference field and generated ids; `sent:events` = whole queued records as they are sent.
217
+ */
218
+ declare const SDK_OWN_STORAGE: GatewayDescriptor;
219
+
220
+ /**
221
+ * Page gateway (`src/readers/page.ts`), declared as it behaves today: the page path is sent raw (no templates yet,
222
+ * gap G8) with every batch's first event; query keys stay, their values are masked unless the config allowlists the
223
+ * key (`sourcePathQuery` / `sourcePathQueryAllow`). Templates, declared query reductions and the navigation entry
224
+ * follow with the G8 change.
225
+ */
226
+ declare const SDK_PAGE: GatewayDescriptor;
227
+
228
+ /**
229
+ * `sdk:input@1`: the input gateway (`src/readers/input.ts`, `src/readers/input-paste.ts`, collectors in
230
+ * `src/low-events/`), declared as it behaves today (v1). Inside the gateway it reads the field's LENGTH (and a
231
+ * checkbox's checked state) to tell typing, pasting, clearing and several-characters-at-once changes apart; neither
232
+ * the value nor the length leaves it. A value-free v2 comes later (model section 13, "Later").
233
+ */
234
+ declare const SDK_INPUT: CapabilityDescriptor;
235
+
236
+ /**
237
+ * `sdk:password-managers@1`: password-manager detection (`src/readers/password-manager-extensions.ts`, sampled by
238
+ * `src/utils/password-manager-sampler.ts`). Compiled out with `__CBO_DATA_PMD__ = false` (build switch `pmd`).
239
+ */
240
+ declare const SDK_PASSWORD_MANAGERS: CapabilityDescriptor;
241
+
242
+ /**
243
+ * `sdk:private-mode@1`: private-mode detection (`src/readers/private-mode.ts`, the third-party library
244
+ * detectincognitojs). Compiled out with `__CBO_DATA_PRIVATE_MODE__ = false` (build switch `privateMode`).
245
+ */
246
+ declare const SDK_PRIVATE_MODE: CapabilityDescriptor;
247
+
248
+ /**
249
+ * Transport output gateway (`src/transports/fetch.ts`, `src/readers/network.ts`): ingestion requests with fetch
250
+ * (keepalive, no credentials) and `sendBeacon` on page hide. Lists what leaves besides the events themselves.
251
+ */
252
+ declare const SDK_TRANSPORT: GatewayDescriptor;
253
+
254
+ /** `sdk:window@1`: the window gateway (`src/readers/window-events.ts`, `src/low-events/shared-window-observer.ts`). */
255
+ declare const SDK_WINDOW: CapabilityDescriptor;
256
+
257
+ /**
258
+ * `@corbado/observe/manifest`: collection manifest v2 descriptors of the SDK's gateways and capabilities, read by
259
+ * the autocapture tools from the package. Never imported by runtime code, so never part of a bundle.
260
+ */
261
+
262
+ /** Every capability descriptor of this package. */
263
+ declare const SDK_CAPABILITIES: readonly CapabilityDescriptor[];
264
+ /** Every gateway descriptor of this package. */
265
+ declare const SDK_GATEWAYS: readonly GatewayDescriptor[];
266
+ /** WP1 names: the same lists. */
267
+ declare const capabilities: CapabilityDescriptor[];
268
+ declare const gateways: GatewayDescriptor[];
269
+
270
+ export { AC_CEREMONY, CATEGORIES, CATEGORY_VALUE_LEVELS, type CapabilityDescriptor, type Category, type CollectionLevel, type GatewayDescriptor, type GatewayField, type GeneratedEntry, KIND_LADDERS, type ManifestId, NON_VALUE_LEVELS, type NonValueLevel, SDK_API, SDK_CAPABILITIES, SDK_DEVICE, SDK_GATEWAYS, SDK_GENERATED, SDK_INPUT, SDK_OWN_STORAGE, SDK_PAGE, SDK_PASSWORD_MANAGERS, SDK_PRIVATE_MODE, SDK_RECORD, SDK_TRANSPORT, SDK_WINDOW, type SourceKind, type StoredEntry, type TelemetryEntry, type TransportFact, VALUE_LEVELS, type ValueLevel, capabilities, gateways };