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/cdn/sitepong.min.js +5 -5
- package/dist/cdn/sitepong.min.js.map +1 -1
- package/dist/entries/node.d.mts +2 -2
- package/dist/entries/node.d.ts +2 -2
- package/dist/entries/rn.d.ts +995 -0
- package/dist/entries/rn.js +240 -29
- package/dist/entries/rn.js.map +1 -1
- package/dist/entries/web.d.mts +2 -2
- package/dist/entries/web.d.ts +2 -2
- package/dist/entries/web.js +2094 -1235
- package/dist/entries/web.js.map +1 -1
- package/dist/entries/web.mjs +2093 -1236
- package/dist/entries/web.mjs.map +1 -1
- package/dist/index.d.mts +162 -3
- package/dist/index.d.ts +162 -3
- package/dist/index.js +158 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +157 -18
- package/dist/index.mjs.map +1 -1
- package/dist/nextjs/index.d.mts +2 -2
- package/dist/nextjs/index.d.ts +2 -2
- package/dist/react/index.d.mts +4 -4
- package/dist/react/index.d.ts +4 -4
- package/dist/react/index.js +158 -16
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +157 -17
- package/dist/react/index.mjs.map +1 -1
- package/dist/server/index.d.mts +3 -3
- package/dist/server/index.d.ts +3 -3
- package/dist/{types-DQSv7JAE.d.ts → types-BTA43eyz.d.ts} +1 -1
- package/dist/{types-Cms9VXx9.d.mts → types-CphqOTfm.d.mts} +1 -1
- package/dist/{types-BEqbz0tw.d.mts → types-DPINdOQW.d.mts} +2 -0
- package/dist/{types-BEqbz0tw.d.ts → types-DPINdOQW.d.ts} +2 -0
- package/package.json +8 -3
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-
|
|
2
|
-
export { a as ReplayEvent } from './types-
|
|
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-
|
|
2
|
-
export { a as ReplayEvent } from './types-
|
|
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 };
|