sitepong 0.2.0 → 0.2.2

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
@@ -1,5 +1,5 @@
1
- import { R as ReplayConfig, T as TrackProperties, U as UserTraits, G as GroupTraits } from './types-BEqbz0tw.mjs';
2
- export { a as ReplayEvent } from './types-BEqbz0tw.mjs';
1
+ import { R as ReplayConfig, T as TrackProperties, U as UserTraits, G as GroupTraits } from './types-DPINdOQW.mjs';
2
+ export { a as ReplayEvent } from './types-DPINdOQW.mjs';
3
3
 
4
4
  /**
5
5
  * Fingerprint Types
@@ -157,6 +157,137 @@ declare global {
157
157
  }
158
158
  }
159
159
 
160
+ interface AutocaptureEvent {
161
+ type: 'click' | 'form_submit' | 'page_view';
162
+ timestamp: string;
163
+ properties: Record<string, unknown>;
164
+ }
165
+
166
+ /**
167
+ * Watchtower Web Tap Capture (Phase P3)
168
+ *
169
+ * Captures tap/screen_view/session lifecycle events per the Watchtower wire
170
+ * contract (docs/watchtower-mobile-spec.md §1) and uploads masked screen
171
+ * templates on fingerprint miss (§1.2).
172
+ *
173
+ * - Tap events come from the EXISTING autocapture click path (no duplicate
174
+ * listeners) — the AutocaptureModule's selector/element resolution is reused.
175
+ * - Screen fingerprints are dHash'd (via @sitepong/capture-core, the reference
176
+ * implementation) over a masked rasterization of the page. Rasterization is
177
+ * done with the SVG-foreignObject trick over the replay serializer's masked
178
+ * structural snapshot, always off the hot path (idle callbacks, throttled).
179
+ * - The click handler itself only records + enqueues; batching is 50 events /
180
+ * 10 s / pagehide. Rage classification is server-side — never sent here.
181
+ */
182
+
183
+ /** Result of rasterizing the (already masked) page. */
184
+ interface RasterResult {
185
+ /** Tightly packed RGBA bytes, width*height*4. */
186
+ rgba: Uint8Array;
187
+ width: number;
188
+ height: number;
189
+ /** Base64 PNG of the same masked canvas, or null when encoding failed. */
190
+ pngBase64: string | null;
191
+ }
192
+ interface PageRasterizer {
193
+ /** Resolve null (never throw) when the page cannot be rasterized. */
194
+ rasterize(): Promise<RasterResult | null>;
195
+ }
196
+ interface TransportResponse {
197
+ ok: boolean;
198
+ status: number;
199
+ }
200
+ type TapTransport = (url: string, body: string, opts: {
201
+ headers: Record<string, string>;
202
+ keepalive?: boolean;
203
+ }) => Promise<TransportResponse>;
204
+ /** Anything exposing the AutocaptureModule secondary-listener API. */
205
+ interface AutocaptureSource {
206
+ addListener(cb: (event: AutocaptureEvent) => void): () => void;
207
+ }
208
+ interface WatchtowerCaptureConfig {
209
+ apiKey: string;
210
+ projectId: string;
211
+ /** Base endpoint — events go to `${endpoint}/api/taps`, templates to `${endpoint}/api/taps/template`. */
212
+ endpoint: string;
213
+ appVersion?: string;
214
+ /** Flush when the queue reaches this size (spec §1.3, default 50). */
215
+ maxBatchSize?: number;
216
+ /** Flush interval in ms (spec §1.3, default 10000). */
217
+ flushInterval?: number;
218
+ /** Min ms between rasterizations of the same route (default 1000). */
219
+ templateThrottleMs?: number;
220
+ /** Extra CSS selector blocked (greyed out) in the masked snapshot. */
221
+ blockSelector?: string;
222
+ /** CSS selector whose text is masked in the snapshot. */
223
+ maskSelector?: string;
224
+ debug?: boolean;
225
+ /** Injectable rasterizer (tests). Defaults to the DOM SVG-foreignObject rasterizer. */
226
+ rasterizer?: PageRasterizer;
227
+ /** Injectable transport (tests). Defaults to fetch. */
228
+ transport?: TapTransport;
229
+ }
230
+ declare class WatchtowerWebCapture {
231
+ private config;
232
+ private session;
233
+ private queue;
234
+ private flushTimer;
235
+ private flushFailures;
236
+ private disabled;
237
+ private active;
238
+ private distinctId;
239
+ private currentScreen;
240
+ private transport;
241
+ private rasterizer;
242
+ private detachAutocapture;
243
+ private ownAutocapture;
244
+ private originalPushState;
245
+ private originalReplaceState;
246
+ private popstateHandler;
247
+ private pagehideHandler;
248
+ private fpCache;
249
+ private uploadedFps;
250
+ private lastRasterAt;
251
+ private rasterInFlight;
252
+ constructor(config: WatchtowerCaptureConfig);
253
+ /**
254
+ * Start capturing. Pass the existing AutocaptureModule (via
255
+ * AnalyticsManager.getAutocaptureModule()) to reuse its click listener +
256
+ * selector resolution; when absent, a private clicks-only module is created.
257
+ */
258
+ start(source?: AutocaptureSource | null): void;
259
+ stop(): void;
260
+ isActive(): boolean;
261
+ getSessionId(): string;
262
+ /** Stamped as distinct_id on every subsequent event (identify() feeds this). */
263
+ setDistinctId(distinctId: string | null): void;
264
+ private onAutocaptureEvent;
265
+ /** Record a tap. Coordinates are viewport CSS px; normalization happens here. */
266
+ recordTap(input: {
267
+ selector: string;
268
+ label?: string;
269
+ role?: string;
270
+ clientX: number;
271
+ clientY: number;
272
+ }): void;
273
+ private setupNavigationTracking;
274
+ private handleRouteChange;
275
+ private setupPagehide;
276
+ private baseEvent;
277
+ private enqueue;
278
+ private startFlushTimer;
279
+ flush(opts?: {
280
+ keepalive?: boolean;
281
+ }): Promise<void>;
282
+ private headers;
283
+ private scheduleFingerprint;
284
+ private captureFingerprint;
285
+ private maybeUploadTemplate;
286
+ private combinedBlockSelector;
287
+ private pathname;
288
+ private log;
289
+ }
290
+
160
291
  declare class ReplayManager {
161
292
  private config;
162
293
  private recording;
@@ -999,6 +1130,7 @@ interface WebManagerFactories {
999
1130
  createReplay?: (cfg: Record<string, unknown>) => ReplayManager;
1000
1131
  createFingerprint?: (cfg: Record<string, unknown>) => FingerprintManager;
1001
1132
  createPerformance?: (cfg: Record<string, unknown>) => PerformanceManager;
1133
+ createWatchtowerCapture?: (cfg: Record<string, unknown>) => WatchtowerWebCapture;
1002
1134
  }
1003
1135
  /**
1004
1136
  * Platform-entry-only: inject web-only manager factories. Called by
@@ -1069,6 +1201,22 @@ interface SitePongInitConfig extends SitePongConfig {
1069
1201
  /** Rolling buffer duration in ms — how many seconds of replay to keep before an error (default: 20000) */
1070
1202
  bufferDuration?: number;
1071
1203
  };
1204
+ /** Watchtower tap capture (web) — tap timeline events + masked screen templates */
1205
+ watchtower?: {
1206
+ enabled?: boolean;
1207
+ /** Project ID sent as X-Project-ID on /api/taps requests (required) */
1208
+ projectId?: string;
1209
+ /** Override base endpoint for /api/taps + /api/taps/template (default: main endpoint) */
1210
+ endpoint?: string;
1211
+ /** Flush at this many buffered events (default: 50) */
1212
+ maxBatchSize?: number;
1213
+ /** Flush interval in ms (default: 10000) */
1214
+ flushInterval?: number;
1215
+ /** Extra CSS selector blocked out of the masked screen template */
1216
+ blockSelector?: string;
1217
+ /** CSS selector whose text is masked in the screen template */
1218
+ maskSelector?: string;
1219
+ };
1072
1220
  /** Cron monitoring configuration */
1073
1221
  crons?: {
1074
1222
  enabled?: boolean;
@@ -1117,6 +1265,8 @@ declare class SitePongClient {
1117
1265
  private databaseTracker;
1118
1266
  private profiler;
1119
1267
  private remoteConfigManager;
1268
+ private watchtowerCapture;
1269
+ private watchtowerOptions;
1120
1270
  private currentScreen?;
1121
1271
  private envUnsubs;
1122
1272
  private identifyHooks;
@@ -1179,6 +1329,13 @@ declare class SitePongClient {
1179
1329
  stopReplay(): void;
1180
1330
  isReplayRecording(): boolean;
1181
1331
  getReplaySessionId(): string | null;
1332
+ /**
1333
+ * Start Watchtower web tap capture. Options merge over `watchtower` from
1334
+ * init(); `projectId` is required (either here or in init config). Reuses
1335
+ * the analytics AutocaptureModule's click listener when autocapture is on.
1336
+ */
1337
+ startWatchtowerCapture(options?: SitePongInitConfig['watchtower']): boolean;
1338
+ stopWatchtowerCapture(): void;
1182
1339
  startTransaction(name: string, data?: Record<string, unknown>): string;
1183
1340
  endTransaction(id: string, status?: 'ok' | 'error'): void;
1184
1341
  startSpan(transactionId: string, name: string, data?: Record<string, unknown>): string;
@@ -1279,6 +1436,8 @@ declare const getDeviceSignals: () => Promise<DeviceSignals>;
1279
1436
  declare const getFraudCheck: () => Promise<FraudCheckResult>;
1280
1437
  declare const startReplay: () => boolean;
1281
1438
  declare const stopReplay: () => void;
1439
+ declare const startWatchtowerCapture: (options?: SitePongInitConfig["watchtower"]) => boolean;
1440
+ declare const stopWatchtowerCapture: () => void;
1282
1441
  declare const isReplayRecording: () => boolean;
1283
1442
  declare const getReplaySessionId: () => string | null;
1284
1443
  declare const startTransaction: (name: string, data?: Record<string, unknown>) => string;
@@ -1316,4 +1475,4 @@ declare const isRemoteConfigFeatureEnabled: (key: string, defaultValue?: boolean
1316
1475
  declare const onRemoteConfigChange: (listener: (config: RemoteConfig) => void) => () => void;
1317
1476
  declare const registerIdentifyHook: (hook: (userId: string) => void) => () => void;
1318
1477
 
1319
- export { type CapturedError, type CronCheckinOptions, type CronHandle, DEFAULT_SUPERLINK_ENDPOINT, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeferredDeepLinkHandler, type DeviceInfo, type DeviceSignals, type EnvironmentAdapter, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type MutableRNEnvironmentAdapter, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type PlatformName, type ProfileData, type ProfileFrame, type ProfilerConfig, type RemoteConfig, type RemoteConfigFeatures, type RemoteConfigSampling, ReplayConfig, type ResourceTimingBreakdown, type SitePongConfig, type SitePongInitConfig, SuperLinkClient, type SuperLinkConfig, type SuperLinkDeepLink, type SuperLinkEventType, type SuperLinkFingerprint, type SuperLinkIdentityMetadata, type SuperLinkMatchRequest, type SuperLinkMatchResponse, type SuperLinkMatchType, type SuperLinkPlatform, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebManagerFactories, type WebVitals, addBreadcrumb, areFlagsReady, captureError, captureMessage, captureWebDeepLink, clearAnonymousId, clearUser, sitepong as client, completeFromScan, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractIdentityMetadata, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeepLink, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getMatchedDeepLink, getProfiles, getRemoteConfig, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, initRN, initSuperLink, isInitialized, isRemoteConfigFeatureEnabled, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, onDeferredDeepLink, onRemoteConfigChange, parseUniversalLink, profile, propagateTrace, refreshFlags, registerIdentifyHook, registerWebManagerFactories, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setCurrentScreen, setEnvironment, setRNGetCurrentScreen, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, stopReplay, superlinkClient, identify$1 as superlinkIdentify, track, trackPageView, waitForFlags, writeClipboardToken };
1478
+ export { type CapturedError, type CronCheckinOptions, type CronHandle, DEFAULT_SUPERLINK_ENDPOINT, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeferredDeepLinkHandler, type DeviceInfo, type DeviceSignals, type EnvironmentAdapter, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type MutableRNEnvironmentAdapter, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type PlatformName, type ProfileData, type ProfileFrame, type ProfilerConfig, type RemoteConfig, type RemoteConfigFeatures, type RemoteConfigSampling, ReplayConfig, type ResourceTimingBreakdown, type SitePongConfig, type SitePongInitConfig, SuperLinkClient, type SuperLinkConfig, type SuperLinkDeepLink, type SuperLinkEventType, type SuperLinkFingerprint, type SuperLinkIdentityMetadata, type SuperLinkMatchRequest, type SuperLinkMatchResponse, type SuperLinkMatchType, type SuperLinkPlatform, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebManagerFactories, type WebVitals, addBreadcrumb, areFlagsReady, captureError, captureMessage, captureWebDeepLink, clearAnonymousId, clearUser, sitepong as client, completeFromScan, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractIdentityMetadata, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeepLink, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getMatchedDeepLink, getProfiles, getRemoteConfig, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, initRN, initSuperLink, isInitialized, isRemoteConfigFeatureEnabled, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, onDeferredDeepLink, onRemoteConfigChange, parseUniversalLink, profile, propagateTrace, refreshFlags, registerIdentifyHook, registerWebManagerFactories, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setCurrentScreen, setEnvironment, setRNGetCurrentScreen, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, startWatchtowerCapture, stopReplay, stopWatchtowerCapture, superlinkClient, identify$1 as superlinkIdentify, track, trackPageView, waitForFlags, writeClipboardToken };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as ReplayConfig, T as TrackProperties, U as UserTraits, G as GroupTraits } from './types-BEqbz0tw.js';
2
- export { a as ReplayEvent } from './types-BEqbz0tw.js';
1
+ import { R as ReplayConfig, T as TrackProperties, U as UserTraits, G as GroupTraits } from './types-DPINdOQW.js';
2
+ export { a as ReplayEvent } from './types-DPINdOQW.js';
3
3
 
4
4
  /**
5
5
  * Fingerprint Types
@@ -157,6 +157,137 @@ declare global {
157
157
  }
158
158
  }
159
159
 
160
+ interface AutocaptureEvent {
161
+ type: 'click' | 'form_submit' | 'page_view';
162
+ timestamp: string;
163
+ properties: Record<string, unknown>;
164
+ }
165
+
166
+ /**
167
+ * Watchtower Web Tap Capture (Phase P3)
168
+ *
169
+ * Captures tap/screen_view/session lifecycle events per the Watchtower wire
170
+ * contract (docs/watchtower-mobile-spec.md §1) and uploads masked screen
171
+ * templates on fingerprint miss (§1.2).
172
+ *
173
+ * - Tap events come from the EXISTING autocapture click path (no duplicate
174
+ * listeners) — the AutocaptureModule's selector/element resolution is reused.
175
+ * - Screen fingerprints are dHash'd (via @sitepong/capture-core, the reference
176
+ * implementation) over a masked rasterization of the page. Rasterization is
177
+ * done with the SVG-foreignObject trick over the replay serializer's masked
178
+ * structural snapshot, always off the hot path (idle callbacks, throttled).
179
+ * - The click handler itself only records + enqueues; batching is 50 events /
180
+ * 10 s / pagehide. Rage classification is server-side — never sent here.
181
+ */
182
+
183
+ /** Result of rasterizing the (already masked) page. */
184
+ interface RasterResult {
185
+ /** Tightly packed RGBA bytes, width*height*4. */
186
+ rgba: Uint8Array;
187
+ width: number;
188
+ height: number;
189
+ /** Base64 PNG of the same masked canvas, or null when encoding failed. */
190
+ pngBase64: string | null;
191
+ }
192
+ interface PageRasterizer {
193
+ /** Resolve null (never throw) when the page cannot be rasterized. */
194
+ rasterize(): Promise<RasterResult | null>;
195
+ }
196
+ interface TransportResponse {
197
+ ok: boolean;
198
+ status: number;
199
+ }
200
+ type TapTransport = (url: string, body: string, opts: {
201
+ headers: Record<string, string>;
202
+ keepalive?: boolean;
203
+ }) => Promise<TransportResponse>;
204
+ /** Anything exposing the AutocaptureModule secondary-listener API. */
205
+ interface AutocaptureSource {
206
+ addListener(cb: (event: AutocaptureEvent) => void): () => void;
207
+ }
208
+ interface WatchtowerCaptureConfig {
209
+ apiKey: string;
210
+ projectId: string;
211
+ /** Base endpoint — events go to `${endpoint}/api/taps`, templates to `${endpoint}/api/taps/template`. */
212
+ endpoint: string;
213
+ appVersion?: string;
214
+ /** Flush when the queue reaches this size (spec §1.3, default 50). */
215
+ maxBatchSize?: number;
216
+ /** Flush interval in ms (spec §1.3, default 10000). */
217
+ flushInterval?: number;
218
+ /** Min ms between rasterizations of the same route (default 1000). */
219
+ templateThrottleMs?: number;
220
+ /** Extra CSS selector blocked (greyed out) in the masked snapshot. */
221
+ blockSelector?: string;
222
+ /** CSS selector whose text is masked in the snapshot. */
223
+ maskSelector?: string;
224
+ debug?: boolean;
225
+ /** Injectable rasterizer (tests). Defaults to the DOM SVG-foreignObject rasterizer. */
226
+ rasterizer?: PageRasterizer;
227
+ /** Injectable transport (tests). Defaults to fetch. */
228
+ transport?: TapTransport;
229
+ }
230
+ declare class WatchtowerWebCapture {
231
+ private config;
232
+ private session;
233
+ private queue;
234
+ private flushTimer;
235
+ private flushFailures;
236
+ private disabled;
237
+ private active;
238
+ private distinctId;
239
+ private currentScreen;
240
+ private transport;
241
+ private rasterizer;
242
+ private detachAutocapture;
243
+ private ownAutocapture;
244
+ private originalPushState;
245
+ private originalReplaceState;
246
+ private popstateHandler;
247
+ private pagehideHandler;
248
+ private fpCache;
249
+ private uploadedFps;
250
+ private lastRasterAt;
251
+ private rasterInFlight;
252
+ constructor(config: WatchtowerCaptureConfig);
253
+ /**
254
+ * Start capturing. Pass the existing AutocaptureModule (via
255
+ * AnalyticsManager.getAutocaptureModule()) to reuse its click listener +
256
+ * selector resolution; when absent, a private clicks-only module is created.
257
+ */
258
+ start(source?: AutocaptureSource | null): void;
259
+ stop(): void;
260
+ isActive(): boolean;
261
+ getSessionId(): string;
262
+ /** Stamped as distinct_id on every subsequent event (identify() feeds this). */
263
+ setDistinctId(distinctId: string | null): void;
264
+ private onAutocaptureEvent;
265
+ /** Record a tap. Coordinates are viewport CSS px; normalization happens here. */
266
+ recordTap(input: {
267
+ selector: string;
268
+ label?: string;
269
+ role?: string;
270
+ clientX: number;
271
+ clientY: number;
272
+ }): void;
273
+ private setupNavigationTracking;
274
+ private handleRouteChange;
275
+ private setupPagehide;
276
+ private baseEvent;
277
+ private enqueue;
278
+ private startFlushTimer;
279
+ flush(opts?: {
280
+ keepalive?: boolean;
281
+ }): Promise<void>;
282
+ private headers;
283
+ private scheduleFingerprint;
284
+ private captureFingerprint;
285
+ private maybeUploadTemplate;
286
+ private combinedBlockSelector;
287
+ private pathname;
288
+ private log;
289
+ }
290
+
160
291
  declare class ReplayManager {
161
292
  private config;
162
293
  private recording;
@@ -999,6 +1130,7 @@ interface WebManagerFactories {
999
1130
  createReplay?: (cfg: Record<string, unknown>) => ReplayManager;
1000
1131
  createFingerprint?: (cfg: Record<string, unknown>) => FingerprintManager;
1001
1132
  createPerformance?: (cfg: Record<string, unknown>) => PerformanceManager;
1133
+ createWatchtowerCapture?: (cfg: Record<string, unknown>) => WatchtowerWebCapture;
1002
1134
  }
1003
1135
  /**
1004
1136
  * Platform-entry-only: inject web-only manager factories. Called by
@@ -1069,6 +1201,22 @@ interface SitePongInitConfig extends SitePongConfig {
1069
1201
  /** Rolling buffer duration in ms — how many seconds of replay to keep before an error (default: 20000) */
1070
1202
  bufferDuration?: number;
1071
1203
  };
1204
+ /** Watchtower tap capture (web) — tap timeline events + masked screen templates */
1205
+ watchtower?: {
1206
+ enabled?: boolean;
1207
+ /** Project ID sent as X-Project-ID on /api/taps requests (required) */
1208
+ projectId?: string;
1209
+ /** Override base endpoint for /api/taps + /api/taps/template (default: main endpoint) */
1210
+ endpoint?: string;
1211
+ /** Flush at this many buffered events (default: 50) */
1212
+ maxBatchSize?: number;
1213
+ /** Flush interval in ms (default: 10000) */
1214
+ flushInterval?: number;
1215
+ /** Extra CSS selector blocked out of the masked screen template */
1216
+ blockSelector?: string;
1217
+ /** CSS selector whose text is masked in the screen template */
1218
+ maskSelector?: string;
1219
+ };
1072
1220
  /** Cron monitoring configuration */
1073
1221
  crons?: {
1074
1222
  enabled?: boolean;
@@ -1117,6 +1265,8 @@ declare class SitePongClient {
1117
1265
  private databaseTracker;
1118
1266
  private profiler;
1119
1267
  private remoteConfigManager;
1268
+ private watchtowerCapture;
1269
+ private watchtowerOptions;
1120
1270
  private currentScreen?;
1121
1271
  private envUnsubs;
1122
1272
  private identifyHooks;
@@ -1179,6 +1329,13 @@ declare class SitePongClient {
1179
1329
  stopReplay(): void;
1180
1330
  isReplayRecording(): boolean;
1181
1331
  getReplaySessionId(): string | null;
1332
+ /**
1333
+ * Start Watchtower web tap capture. Options merge over `watchtower` from
1334
+ * init(); `projectId` is required (either here or in init config). Reuses
1335
+ * the analytics AutocaptureModule's click listener when autocapture is on.
1336
+ */
1337
+ startWatchtowerCapture(options?: SitePongInitConfig['watchtower']): boolean;
1338
+ stopWatchtowerCapture(): void;
1182
1339
  startTransaction(name: string, data?: Record<string, unknown>): string;
1183
1340
  endTransaction(id: string, status?: 'ok' | 'error'): void;
1184
1341
  startSpan(transactionId: string, name: string, data?: Record<string, unknown>): string;
@@ -1279,6 +1436,8 @@ declare const getDeviceSignals: () => Promise<DeviceSignals>;
1279
1436
  declare const getFraudCheck: () => Promise<FraudCheckResult>;
1280
1437
  declare const startReplay: () => boolean;
1281
1438
  declare const stopReplay: () => void;
1439
+ declare const startWatchtowerCapture: (options?: SitePongInitConfig["watchtower"]) => boolean;
1440
+ declare const stopWatchtowerCapture: () => void;
1282
1441
  declare const isReplayRecording: () => boolean;
1283
1442
  declare const getReplaySessionId: () => string | null;
1284
1443
  declare const startTransaction: (name: string, data?: Record<string, unknown>) => string;
@@ -1316,4 +1475,4 @@ declare const isRemoteConfigFeatureEnabled: (key: string, defaultValue?: boolean
1316
1475
  declare const onRemoteConfigChange: (listener: (config: RemoteConfig) => void) => () => void;
1317
1476
  declare const registerIdentifyHook: (hook: (userId: string) => void) => () => void;
1318
1477
 
1319
- export { type CapturedError, type CronCheckinOptions, type CronHandle, DEFAULT_SUPERLINK_ENDPOINT, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeferredDeepLinkHandler, type DeviceInfo, type DeviceSignals, type EnvironmentAdapter, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type MutableRNEnvironmentAdapter, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type PlatformName, type ProfileData, type ProfileFrame, type ProfilerConfig, type RemoteConfig, type RemoteConfigFeatures, type RemoteConfigSampling, ReplayConfig, type ResourceTimingBreakdown, type SitePongConfig, type SitePongInitConfig, SuperLinkClient, type SuperLinkConfig, type SuperLinkDeepLink, type SuperLinkEventType, type SuperLinkFingerprint, type SuperLinkIdentityMetadata, type SuperLinkMatchRequest, type SuperLinkMatchResponse, type SuperLinkMatchType, type SuperLinkPlatform, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebManagerFactories, type WebVitals, addBreadcrumb, areFlagsReady, captureError, captureMessage, captureWebDeepLink, clearAnonymousId, clearUser, sitepong as client, completeFromScan, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractIdentityMetadata, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeepLink, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getMatchedDeepLink, getProfiles, getRemoteConfig, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, initRN, initSuperLink, isInitialized, isRemoteConfigFeatureEnabled, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, onDeferredDeepLink, onRemoteConfigChange, parseUniversalLink, profile, propagateTrace, refreshFlags, registerIdentifyHook, registerWebManagerFactories, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setCurrentScreen, setEnvironment, setRNGetCurrentScreen, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, stopReplay, superlinkClient, identify$1 as superlinkIdentify, track, trackPageView, waitForFlags, writeClipboardToken };
1478
+ export { type CapturedError, type CronCheckinOptions, type CronHandle, DEFAULT_SUPERLINK_ENDPOINT, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeferredDeepLinkHandler, type DeviceInfo, type DeviceSignals, type EnvironmentAdapter, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type MutableRNEnvironmentAdapter, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type PlatformName, type ProfileData, type ProfileFrame, type ProfilerConfig, type RemoteConfig, type RemoteConfigFeatures, type RemoteConfigSampling, ReplayConfig, type ResourceTimingBreakdown, type SitePongConfig, type SitePongInitConfig, SuperLinkClient, type SuperLinkConfig, type SuperLinkDeepLink, type SuperLinkEventType, type SuperLinkFingerprint, type SuperLinkIdentityMetadata, type SuperLinkMatchRequest, type SuperLinkMatchResponse, type SuperLinkMatchType, type SuperLinkPlatform, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebManagerFactories, type WebVitals, addBreadcrumb, areFlagsReady, captureError, captureMessage, captureWebDeepLink, clearAnonymousId, clearUser, sitepong as client, completeFromScan, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractIdentityMetadata, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeepLink, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getMatchedDeepLink, getProfiles, getRemoteConfig, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, initRN, initSuperLink, isInitialized, isRemoteConfigFeatureEnabled, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, onDeferredDeepLink, onRemoteConfigChange, parseUniversalLink, profile, propagateTrace, refreshFlags, registerIdentifyHook, registerWebManagerFactories, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setCurrentScreen, setEnvironment, setRNGetCurrentScreen, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, startWatchtowerCapture, stopReplay, stopWatchtowerCapture, superlinkClient, identify$1 as superlinkIdentify, track, trackPageView, waitForFlags, writeClipboardToken };