@corbado/observe 0.8.0 → 0.9.0-next.68-cf43fc3

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/dist/index.d.mts CHANGED
@@ -85,7 +85,7 @@ type Conversion = {
85
85
  } & UserReference;
86
86
  type FlowFinished = {
87
87
  flowName: FlowType;
88
- explicitOutcome?: "skipped" | "visible-auto-skip" | "invisble";
88
+ explicitOutcome?: "skipped" | "visible-auto-skip" | "invisible";
89
89
  } & UserReference;
90
90
  type FlowReset = {
91
91
  flowName?: FlowType;
@@ -160,6 +160,21 @@ interface LowEvent {
160
160
  ts: number;
161
161
  durationMs?: number;
162
162
  }
163
+ type TelemetryLevel = "info" | "error";
164
+ /**
165
+ * A diagnostic telemetry entry (a severity level + free-form message) recorded by the integrating
166
+ * app or by the SDK itself. Telemetry rides along in the `telemetry` array of the events endpoint
167
+ * payload, tied to the same session, and is never classified as an auth-flow event.
168
+ */
169
+ interface TelemetryEntry {
170
+ /** Client-generated idempotency id (uuidv7) so safe resends (retry/beacon) dedupe server-side. */
171
+ id: string;
172
+ level: TelemetryLevel;
173
+ /** Free-form diagnostic message. Truncated client-side. Must not contain credentials or PII. */
174
+ message: string;
175
+ /** Capture time, unix ms. */
176
+ ts: number;
177
+ }
163
178
  interface EventBatchMeta {
164
179
  sent: number;
165
180
  transport: "fetch" | "beacon";
@@ -180,6 +195,7 @@ interface EventBatch {
180
195
  events: Event[];
181
196
  sdk: SdkInfo;
182
197
  lows?: LowEvent[];
198
+ telemetry?: TelemetryEntry[];
183
199
  meta?: EventBatchMeta;
184
200
  }
185
201
  type DeviceType = "web" | "app" | "other";
@@ -214,6 +230,7 @@ type JavaScriptHighEntropy = {
214
230
  platform?: string;
215
231
  mobile?: boolean;
216
232
  platformVersion?: string;
233
+ model?: string;
217
234
  };
218
235
  type ClientEnvHandleMeta = {
219
236
  timestamp: number;
@@ -264,6 +281,8 @@ interface SdkReliabilityConfig {
264
281
  * relevant when `sessionContinuity` is enabled.
265
282
  */
266
283
  sessionInactivityMs: number;
284
+ /** Maximum time to wait for the cross-tab sequence Web Lock before allocating without it. */
285
+ seqLockTimeoutMs: number;
267
286
  /**
268
287
  * Flush-trigger switch: flush pending events when the document becomes hidden
269
288
  * (`visibilitychange`). Defaults to true — a missing value can never disable delivery.
@@ -279,6 +298,18 @@ interface SdkReliabilityConfig {
279
298
  * the historical behavior; can be disabled server-side to rely solely on the queue's triggers.
280
299
  */
281
300
  tlf: boolean;
301
+ /**
302
+ * Master switch for the diagnostic telemetry stream. When true the SDK sends buffered telemetry
303
+ * entries piggybacked on normal event requests; when false it collects and sends nothing. Defaults
304
+ * to true (telemetry is on out of the box) and can be turned off server-side without a redeploy.
305
+ */
306
+ telemetry: boolean;
307
+ /**
308
+ * When true (and `telemetry` is enabled), enqueuing a telemetry entry triggers an immediate flush
309
+ * so diagnostics go out promptly (e.g. before a crash/navigation). Defaults to false: a telemetry
310
+ * entry alone never triggers a flush, it only rides the next flush caused by anything else.
311
+ */
312
+ flushOnTelemetry: boolean;
282
313
  /**
283
314
  * Event names that trigger an immediate flush when enqueued (e.g. `flow_finished`,
284
315
  * `conversion`), so high-value events go out via a normal fetch while the page is still alive
@@ -291,12 +322,22 @@ interface SdkReliabilityConfig {
291
322
  retry: SdkRetryConfig;
292
323
  }
293
324
 
325
+ /** Sink that escalates a diagnostic message to the telemetry stream. */
326
+ type TelemetrySink = (level: TelemetryLevel, message: string) => void;
294
327
  interface Logger {
295
328
  debug(message: string, ...args: unknown[]): void;
296
329
  info(message: string, ...args: unknown[]): void;
297
330
  warn(message: string, ...args: unknown[]): void;
298
331
  error(message: string, ...args: unknown[]): void;
299
332
  critical(message: string, ...args: unknown[]): void;
333
+ /**
334
+ * Escalate a diagnostic message to the telemetry stream, if a sink is attached (no-op otherwise).
335
+ * Unlike the level methods, telemetry is delivered to the backend regardless of the `debug` flag.
336
+ * Optional so an integrator-provided custom logger stays valid without implementing it.
337
+ */
338
+ reportTelemetry?(level: TelemetryLevel, message: string): void;
339
+ /** Attach (or clear) the telemetry sink. Called once by the tracker after the queue exists. */
340
+ setTelemetrySink?(sink: TelemetrySink | undefined): void;
300
341
  }
301
342
  interface CreateLoggerOptions {
302
343
  debug: boolean;
@@ -553,10 +594,11 @@ type PasswordEnrollmentTypedError = {
553
594
  type PasswordEnrollmentTypedErrorCode = "requirements_not_fulfilled";
554
595
  type PasswordEnrollmentExplicitSpecType = "password-set" | "password-reset";
555
596
  type PasswordEnrollmentAutoTrackConfig = {
556
- explicitSpecType: PasswordEnrollmentExplicitSpecType;
557
- inputHtmlField: HTMLInputElement;
597
+ explicitSpecType?: PasswordEnrollmentExplicitSpecType;
598
+ inputHtmlField?: HTMLInputElement;
558
599
  };
559
600
  declare class PasswordEnrollmentOperationFull extends OperationFull {
601
+ readonly clientValidation: StepHelper;
560
602
  readonly postResponse: StepHelper<{}, {}, PasswordEnrollmentTypedError>;
561
603
  private lowEventTracker?;
562
604
  constructor(tracker: CorbadoTracker, autoTrackConfig?: PasswordEnrollmentAutoTrackConfig);
@@ -641,6 +683,28 @@ declare class AppConfirmationOperationFull extends OperationFull {
641
683
  constructor(tracker: CorbadoTracker, explicitSpecType?: AppConfirmationOperationSpecType);
642
684
  }
643
685
 
686
+ type ProvideDataOperationSpecType = "signup" | "login" | "recovery" | "enrollment";
687
+ type ProvideDataOperationStart = {
688
+ /** Stable name of the data field collected by this subflow, when known. */
689
+ fieldName?: string;
690
+ explicitSpecType?: ProvideDataOperationSpecType;
691
+ };
692
+ type ProvideDataOperationConfig = ProvideDataOperationStart & {
693
+ /** The input field whose low-level interaction signals should be collected. */
694
+ inputHtmlField?: HTMLInputElement;
695
+ };
696
+ type ProvideDataOperationPostResponseStart = {
697
+ explicitSpecType?: ProvideDataOperationSpecType;
698
+ };
699
+ /** Tracks a user-triggered data submission and its server response. */
700
+ declare class ProvideDataOperationFull extends OperationFull {
701
+ readonly clientValidation: StepHelper;
702
+ readonly postResponse: StepHelper<ProvideDataOperationPostResponseStart>;
703
+ private lowEventTracker?;
704
+ constructor(tracker: CorbadoTracker, config?: ProvideDataOperationConfig);
705
+ destroy(): void;
706
+ }
707
+
644
708
  interface TrackerOptions {
645
709
  projectId: string;
646
710
  apiBaseUrl: string;
@@ -649,7 +713,10 @@ interface TrackerOptions {
649
713
  cookieDomain?: string;
650
714
  debug?: boolean;
651
715
  logger?: Logger;
716
+ /** Minimum time between attaching cached device info to events. */
652
717
  deviceInfoDebounceTime?: number;
718
+ /** Per-field collection timeout. Defaults to 200ms. */
719
+ deviceInfoCollectorTimeout?: number;
653
720
  defaultTags?: Record<string, string>;
654
721
  /**
655
722
  * Experiment assignments to seed at init (experiment key → variant). Merged over any persisted
@@ -664,6 +731,8 @@ interface TrackerOptions {
664
731
  * It will be removed in a future release.
665
732
  */
666
733
  flushInterval?: number;
734
+ /** Generates new Observe session ids; returned values must be UUID-compatible. Existing stored sessions are still reused. */
735
+ sessionIdGenerator?: () => string;
667
736
  }
668
737
  declare class CorbadoTracker {
669
738
  private options;
@@ -680,12 +749,15 @@ declare class CorbadoTracker {
680
749
  * (see {@link handleConfig}).
681
750
  */
682
751
  private config;
683
- private deviceInfoCollector;
684
- private deviceInfoDebounceTime;
685
- private deviceInfoTransmittedLastTime;
752
+ private deviceInfoManager;
686
753
  private seq;
687
754
  /** Persistent experiment assignments (experiment key → variant), attached to every produced event. */
688
755
  private experiments;
756
+ /** Self-instrumentation state: re-entrancy guard, readiness, per-load dedupe, and pre-queue buffer. */
757
+ private telemetryReporting;
758
+ private telemetryReady;
759
+ private readonly reportedTelemetryKeys;
760
+ private pendingSelfTelemetry;
689
761
  constructor(options: TrackerOptions);
690
762
  /**
691
763
  * Cache fresh server config as last-known so the next page load boots with it. When this load
@@ -735,6 +807,7 @@ declare class CorbadoTracker {
735
807
  */
736
808
  private resolveExperiments;
737
809
  private isTrackingBlocked;
810
+ private createSessionId;
738
811
  private getSessionId;
739
812
  /**
740
813
  * Resolve the session id from localStorage so it survives reloads and is shared across tabs of the
@@ -746,8 +819,8 @@ declare class CorbadoTracker {
746
819
  * Return the next sequence number. With session continuity the counter is persisted so ordering
747
820
  * survives reloads/redirects; the read-increment-write runs under a cross-tab Web Lock
748
821
  * ({@link SEQ_LOCK_NAME}) so two tabs sharing the session cannot allocate the same seq (where Web
749
- * Locks are unavailable it degrades to the historical best-effort merge). Lock grants are FIFO, so
750
- * seq order matches `track()` call order within a tab. Every tracked event also bumps the
822
+ * Locks are unavailable or exceed the configured timeout it degrades to the historical best-effort merge).
823
+ * Lock grants are FIFO, so seq order matches `track()` call order within a tab. Every tracked event also bumps the
751
824
  * continuity session's `lastActiveAt`, so the inactivity window measures real user inactivity
752
825
  * instead of time-since-page-load (a long-lived active tab must not rotate the session on the next
753
826
  * reload). An empty store while this load already has a session id means persistence is failing
@@ -755,7 +828,6 @@ declare class CorbadoTracker {
755
828
  * to one session per page load instead of one session per event.
756
829
  */
757
830
  private nextSeq;
758
- private updateDeviceDebounced;
759
831
  private resolveTrackingSourcePath;
760
832
  trackSubflowStarted(subflowType: SubflowType, data: Record<string, any>, options?: StepOptions): void;
761
833
  trackSubflowTrigger(subflowType: SubflowType, data: Record<string, any>, options?: StepOptions): void;
@@ -767,7 +839,7 @@ declare class CorbadoTracker {
767
839
  /**
768
840
  * Error situations:
769
841
  * - Blocked user agent (see `isBlockedUserAgent`): skip with a debug log and return
770
- * - Any error before the event is enqueued (e.g. device info update, `JSON.stringify` in debug logging, `queue.enqueue`): log `Failed to process event "<name>" before enqueue`
842
+ * - Any error before the event is enqueued (e.g. `JSON.stringify` in debug logging, `queue.enqueue`): log `Failed to process event "<name>" before enqueue`
771
843
  *
772
844
  * @internal
773
845
  */
@@ -926,6 +998,35 @@ declare class CorbadoTracker {
926
998
  * @internal
927
999
  */
928
1000
  enqueueLowEvent(low: LowEvent): void;
1001
+ /**
1002
+ * Record a diagnostic telemetry entry (a `level` + free-form `message`) for the current session.
1003
+ *
1004
+ * @remarks
1005
+ * Telemetry is delivered in the `telemetry` array of the events endpoint payload, tied to the same
1006
+ * session, and is never classified as an auth-flow event. By default a telemetry entry piggybacks
1007
+ * the next normal flush (it does not trigger one on its own); this is server-controlled. Collection
1008
+ * can be turned off server-side via the `telemetry` config flag. Blocked user agents are skipped.
1009
+ *
1010
+ * The message is truncated to {@link TELEMETRY_MESSAGE_MAX} characters. Never pass credentials or
1011
+ * PII — telemetry is for diagnostics only. Like all SDK entry points, this never throws.
1012
+ */
1013
+ telemetry(level: TelemetryLevel, message: string): void;
1014
+ /** Convenience wrapper for {@link CorbadoTracker.telemetry} at `info` level. */
1015
+ logInfo(message: string): void;
1016
+ /** Convenience wrapper for {@link CorbadoTracker.telemetry} at `error` level. */
1017
+ logError(message: string): void;
1018
+ /**
1019
+ * Escalate an internal SDK diagnostic to the telemetry stream (self-instrumentation). This is the
1020
+ * sink behind {@link Logger.reportTelemetry}; chosen internal failure sites route here so faults
1021
+ * that are otherwise only visible with `debug: true` become observable in the field.
1022
+ *
1023
+ * @remarks
1024
+ * Bounded and deduped per load (a persistent fault — blocked storage, a downed endpoint — cannot
1025
+ * flood the stream), re-entrancy-guarded so it can never recurse, and it never throws into the
1026
+ * host. Diagnostics raised before the queue exists (early boot) are buffered and replayed once the
1027
+ * queue is ready. Messages must be stable and low-cardinality (no raw error objects / PII).
1028
+ */
1029
+ private reportTelemetry;
929
1030
  /**
930
1031
  * Synchronously flush any pending events and low events via beacon. Use during page-unload
931
1032
  * style teardown where async flushing is unreliable.
@@ -949,6 +1050,7 @@ declare class CorbadoTracker {
949
1050
  emailOtpOperationFull(): EmailOtpOperationFull;
950
1051
  smsOtpOperationFull(): SmsOtpOperationFull;
951
1052
  provideIdentifierOperationFull(inputHtmlField?: HTMLInputElement): OperationFullProvideIdentifierWithCUI;
1053
+ provideDataOperationFull(config?: ProvideDataOperationConfig): ProvideDataOperationFull;
952
1054
  socialLoginOperationFull(): SocialLoginOperationFull;
953
1055
  appConfirmationOperationFull(explicitSpecType?: AppConfirmationOperationSpecType): AppConfirmationOperationFull;
954
1056
  /**
@@ -1116,6 +1218,12 @@ declare class RequestQueue {
1116
1218
  private readonly storage?;
1117
1219
  private pending;
1118
1220
  private lowsQueue;
1221
+ /**
1222
+ * Diagnostic telemetry buffered for the current session. Best-effort and never persisted (like
1223
+ * lows). Attached to the next outgoing batch for this session; a telemetry entry alone never arms
1224
+ * the flush timer (it piggybacks), unless `config.flushOnTelemetry` escalates to an immediate flush.
1225
+ */
1226
+ private telemetryQueue;
1119
1227
  private timer;
1120
1228
  private isFlushing;
1121
1229
  private destroyed;
@@ -1160,6 +1268,19 @@ declare class RequestQueue {
1160
1268
  * - Any error while enqueueing or scheduling the flush timer: log "Failed to enqueue low event"
1161
1269
  */
1162
1270
  enqueueLow(low: LowEvent): void;
1271
+ /**
1272
+ * Buffer a diagnostic telemetry entry for delivery with the next event batch.
1273
+ *
1274
+ * @remarks
1275
+ * The master switch `config.telemetry` gates collection: when off, nothing is buffered or sent.
1276
+ * By default a telemetry entry does NOT arm the flush timer — it piggybacks the next flush caused
1277
+ * by events or a lifecycle signal (it is marked dirty so the unload flush picks it up). When
1278
+ * `config.flushOnTelemetry` is on it escalates to an immediate flush.
1279
+ *
1280
+ * Error situations:
1281
+ * - Any error while enqueueing or triggering the flush: log "Failed to enqueue telemetry"
1282
+ */
1283
+ enqueueTelemetry(entry: TelemetryEntry): void;
1163
1284
  private scheduleAfterEnqueue;
1164
1285
  private scheduleFlush;
1165
1286
  private clearTimer;
@@ -1179,6 +1300,7 @@ declare class RequestQueue {
1179
1300
  private attachBatchMeta;
1180
1301
  private getDuePending;
1181
1302
  private takeLows;
1303
+ private takeTelemetry;
1182
1304
  private shouldRequestConfig;
1183
1305
  /**
1184
1306
  * Handle the server's answer to the config request. With a cached boot config the boot-snapshot
@@ -1241,6 +1363,7 @@ declare const CONFIG_STORAGE_KEY = "cbo_sdk_config";
1241
1363
  declare const CONFIG_REQUEST_HEADER = "X-Corbado-Observe-Config";
1242
1364
  /** Built-in flush interval used until the server provides one. Matches the historical default. */
1243
1365
  declare const DEFAULT_FLUSH_INTERVAL_MS = 500;
1366
+ declare const DEFAULT_SEQ_LOCK_TIMEOUT_MS = 5;
1244
1367
  /**
1245
1368
  * Clamping bounds for server-provided config values. They protect the client from a dangerous
1246
1369
  * server-side config mistake (e.g. a 0ms flush interval would busy-loop); the server clamps with
@@ -1263,6 +1386,10 @@ declare const CONFIG_BOUNDS: {
1263
1386
  readonly min: 60000;
1264
1387
  readonly max: 86400000;
1265
1388
  };
1389
+ readonly seqLockTimeoutMs: {
1390
+ readonly min: 1;
1391
+ readonly max: 250;
1392
+ };
1266
1393
  readonly flushOnEventNames: {
1267
1394
  readonly maxEntries: 20;
1268
1395
  readonly maxNameLength: 100;
@@ -1364,6 +1491,9 @@ declare function setExperiments(assignments: Record<string, string>): void;
1364
1491
  declare function clearExperiment(key: string): void;
1365
1492
  declare function clearExperiments(): void;
1366
1493
  declare function getExperiments(): Record<string, string>;
1494
+ declare function telemetry(level: TelemetryLevel, message: string): void;
1495
+ declare function logInfo(message: string): void;
1496
+ declare function logError(message: string): void;
1367
1497
  declare function destroy(): Promise<void>;
1368
1498
 
1369
- export { type AppConfirmationOperationCeremonyTypedError, AppConfirmationOperationFull, type AppConfirmationOperationRetryReason, type AppConfirmationOperationSpecType, type AppConfirmationOperationStart, type AuthDecisionFinished, type AuthDecisionStarted, AuthEventName, type AuthMethodDecisionFinished, type AuthMethodDecisionStarted, type AuthMethodType, type BaseEvent, CEREMONY_LOW_EVENT_TAIL_MS, CONFIG_BOUNDS, CONFIG_REQUEST_HEADER, CONFIG_STORAGE_KEY, type ClientCapabilities, type ClientEnvHandleMeta, type ClientEnvHandleMetaSource, type Conversion, CookieStorage, CorbadoTracker, type CreateLoggerOptions, type CustomEvent, DEFAULT_FLUSH_INTERVAL_MS, DEFAULT_MAX_ENTRIES, DEFAULT_MAX_SERIALIZED_LENGTH, DEFAULT_RELIABILITY_CONFIG, DEFAULT_SESSION_INACTIVITY_MS, type DeviceInfo, type DeviceInfoCollectionError, type DeviceInfoDataWeb, type DeviceType, EmailLinkOperationFull, type EmailLinkOperationPostResponseStart, type EmailLinkOperationSendStart, type EmailLinkOperationSpecType, type EmailOTPOperationPostResponseStart, type EmailOTPOperationSendOTPStart, type EmailOTPOperationSpecType, EmailOtpOperationFull, type Event, type EventBatch, type EventBatchMeta, type EventMeta, EventStore, type EventType, type FlowAutoFinished, type FlowDecided, type FlowFinished, type FlowReset, type FlowStarted, type FlowType, type JavaScriptHighEntropy, LocalStorage, type Logger, type LowEvent, type MultiFlowReset, type MultiFlowStarted, type NormalizedError, OUTBOX_LOCK_NAME, OUTBOX_STORAGE_KEY, OperationFull, OperationFullProvideIdentifierWithCUI, type OutboxEntry, type PasskeyEnrollmentCeremonyFinished, type PasskeyEnrollmentCeremonyStart, type PasskeyEnrollmentGetOptionsFinished, type PasskeyEnrollmentGetOptionsStart, PasskeyEnrollmentOperationFull, type PasskeyLoginCUIGetOptionsFinished, type PasskeyLoginCUIGetOptionsStart, type PasskeyLoginCUISpecType, type PasskeyLoginCeremonyFinished, type PasskeyLoginCeremonyStart, type PasskeyLoginClientError, type PasskeyLoginFinish, type PasskeyLoginGetOptionsFinished, type PasskeyLoginGetOptionsStart, PasskeyLoginOperationFull, type PasskeyLoginStartable, type PasskeyLoginSubmitted, type PasskeyOperationEnrollmentExplicitSpecType, type PasskeyOperationLoginExplicitSpecType, type PasswordEnrollmentAutoTrackConfig, PasswordEnrollmentOperationFull, type PasswordEnrollmentTypedError, type PasswordLoginAutoTrackConfig, type PasswordLoginCUICeremonyStart, type PasswordLoginCUIGetOptionsFinished, type PasswordLoginCUIGetOptionsStart, type PasswordLoginCUISpecType, type PasswordLoginCUITypedError, PasswordLoginOperationFull, type PasswordLoginTypedError, type PredefinedEvent, type ProvideIdentifierError, type ProvideIdentifierFinish, type ProvideIdentifierPostResponseStart, type ProvideIdentifierSpecType, type ProvideIdentifierStart, type QueueOptions, RequestQueue, SDK_NAME, SDK_VERSION, type SdkInfo, type SdkReliabilityConfig, type SdkRetryConfig, SessionStorage, type SmsOTPOperationPostResponseStart, type SmsOTPOperationSpecType, SmsOtpOperationFull, type SocialLoginExchangeCodeFinished, type SocialLoginExchangeCodeStart, type SocialLoginGetRedirectUrlFinished, type SocialLoginGetRedirectUrlStart, SocialLoginOperationFull, type SocialLoginProviderType, type SocialLoginSpecType, type StepHelper, type StepOptions, type StorageEngine, type SubflowTrigger, type SubflowType, type TrackerOptions, type Transport, type TransportMakeRequestResponse, type TransportOptions, type UserReference, cacheConfig, clearExperiment, clearExperiments, createLogger, destroy, getExperiments, getTracker, init, loadCachedConfig, parseReliabilityConfig, resetSession, setExperiment, setExperiments };
1499
+ export { type AppConfirmationOperationCeremonyTypedError, AppConfirmationOperationFull, type AppConfirmationOperationRetryReason, type AppConfirmationOperationSpecType, type AppConfirmationOperationStart, type AuthDecisionFinished, type AuthDecisionStarted, AuthEventName, type AuthMethodDecisionFinished, type AuthMethodDecisionStarted, type AuthMethodType, type BaseEvent, CEREMONY_LOW_EVENT_TAIL_MS, CONFIG_BOUNDS, CONFIG_REQUEST_HEADER, CONFIG_STORAGE_KEY, type ClientCapabilities, type ClientEnvHandleMeta, type ClientEnvHandleMetaSource, type Conversion, CookieStorage, CorbadoTracker, type CreateLoggerOptions, type CustomEvent, DEFAULT_FLUSH_INTERVAL_MS, DEFAULT_MAX_ENTRIES, DEFAULT_MAX_SERIALIZED_LENGTH, DEFAULT_RELIABILITY_CONFIG, DEFAULT_SEQ_LOCK_TIMEOUT_MS, DEFAULT_SESSION_INACTIVITY_MS, type DeviceInfo, type DeviceInfoCollectionError, type DeviceInfoDataWeb, type DeviceType, EmailLinkOperationFull, type EmailLinkOperationPostResponseStart, type EmailLinkOperationSendStart, type EmailLinkOperationSpecType, type EmailOTPOperationPostResponseStart, type EmailOTPOperationSendOTPStart, type EmailOTPOperationSpecType, EmailOtpOperationFull, type Event, type EventBatch, type EventBatchMeta, type EventMeta, EventStore, type EventType, type FlowAutoFinished, type FlowDecided, type FlowFinished, type FlowReset, type FlowStarted, type FlowType, type JavaScriptHighEntropy, LocalStorage, type Logger, type LowEvent, type MultiFlowReset, type MultiFlowStarted, type NormalizedError, OUTBOX_LOCK_NAME, OUTBOX_STORAGE_KEY, OperationFull, OperationFullProvideIdentifierWithCUI, type OutboxEntry, type PasskeyEnrollmentCeremonyFinished, type PasskeyEnrollmentCeremonyStart, type PasskeyEnrollmentGetOptionsFinished, type PasskeyEnrollmentGetOptionsStart, PasskeyEnrollmentOperationFull, type PasskeyLoginCUIGetOptionsFinished, type PasskeyLoginCUIGetOptionsStart, type PasskeyLoginCUISpecType, type PasskeyLoginCeremonyFinished, type PasskeyLoginCeremonyStart, type PasskeyLoginClientError, type PasskeyLoginFinish, type PasskeyLoginGetOptionsFinished, type PasskeyLoginGetOptionsStart, PasskeyLoginOperationFull, type PasskeyLoginStartable, type PasskeyLoginSubmitted, type PasskeyOperationEnrollmentExplicitSpecType, type PasskeyOperationLoginExplicitSpecType, type PasswordEnrollmentAutoTrackConfig, PasswordEnrollmentOperationFull, type PasswordEnrollmentTypedError, type PasswordLoginAutoTrackConfig, type PasswordLoginCUICeremonyStart, type PasswordLoginCUIGetOptionsFinished, type PasswordLoginCUIGetOptionsStart, type PasswordLoginCUISpecType, type PasswordLoginCUITypedError, PasswordLoginOperationFull, type PasswordLoginTypedError, type PredefinedEvent, type ProvideDataOperationConfig, ProvideDataOperationFull, type ProvideDataOperationPostResponseStart, type ProvideDataOperationSpecType, type ProvideDataOperationStart, type ProvideIdentifierError, type ProvideIdentifierFinish, type ProvideIdentifierPostResponseStart, type ProvideIdentifierSpecType, type ProvideIdentifierStart, type QueueOptions, RequestQueue, SDK_NAME, SDK_VERSION, type SdkInfo, type SdkReliabilityConfig, type SdkRetryConfig, SessionStorage, type SmsOTPOperationPostResponseStart, type SmsOTPOperationSpecType, SmsOtpOperationFull, type SocialLoginExchangeCodeFinished, type SocialLoginExchangeCodeStart, type SocialLoginGetRedirectUrlFinished, type SocialLoginGetRedirectUrlStart, SocialLoginOperationFull, type SocialLoginProviderType, type SocialLoginSpecType, type StepHelper, type StepOptions, type StorageEngine, type SubflowTrigger, type SubflowType, type TelemetryEntry, type TelemetryLevel, type TelemetrySink, type TrackerOptions, type Transport, type TransportMakeRequestResponse, type TransportOptions, type UserReference, cacheConfig, clearExperiment, clearExperiments, createLogger, destroy, getExperiments, getTracker, init, loadCachedConfig, logError, logInfo, parseReliabilityConfig, resetSession, setExperiment, setExperiments, telemetry };