import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core'; import { TrackingEventStatus } from '../types/index.js'; /** * Options for constructing an {@link AnalyticsEvent}. */ export interface AnalyticsEventOptions extends SmrtObjectOptions { tenantId?: string | null; propertyId?: string; eventName?: string; clientId?: string; userId?: string; params?: string; eventTimestamp?: Date; status?: TrackingEventStatus; sentAt?: Date | null; errorMessage?: string; retryCount?: number; nonPersonalizedAds?: boolean; sessionId?: string; pagePath?: string; pageTitle?: string; userAgent?: string; ipAddress?: string; } /** * AnalyticsEvent represents a tracked analytics event (server-side tracking log). * * @example * ```typescript * const event = await events.create({ * propertyId: property.id, * eventName: 'purchase', * clientId: 'user-123', * params: JSON.stringify({ value: 99.99, currency: 'USD' }) * }); * await event.send(); * ``` */ export declare class AnalyticsEvent extends SmrtObject { /** * Tenant ID for multi-tenancy isolation (#1410). * * Analytics events carry end-user PII (`userId`, `clientId`, `ipAddress`, * `userAgent`, `sessionId`). Without tenant scoping the generated * `list`/`get` API leaks every tenant's visitor data, and `create` lets a * caller write events bound to another tenant's `propertyId`. `@TenantScoped` * auto-filters reads and binds writes to the active tenant context. */ tenantId: string | null; /** * Parent property ID (references AnalyticsProperty) */ propertyId: string; /** * Event name (e.g., 'purchase', 'page_view', 'sign_up') */ eventName: string; /** * Client ID for anonymous tracking */ clientId: string; /** * User ID for identified tracking */ userId: string; /** * Event parameters (JSON) */ params: string; /** * Event timestamp */ eventTimestamp: Date; /** * Tracking status */ status: TrackingEventStatus; /** * Timestamp when sent to provider */ sentAt: Date | null; /** * Error message if sending failed */ errorMessage: string; /** * Retry count */ retryCount: number; /** * Disable personalized ads */ nonPersonalizedAds: boolean; /** * Session ID */ sessionId: string; /** * Page path (for pageview events) */ pagePath: string; /** * Page title (for pageview events) */ pageTitle: string; /** * User agent */ userAgent: string; /** * IP address (anonymized) */ ipAddress: string; constructor(options?: AnalyticsEventOptions); /** * Get parsed event parameters */ getParams(): Record; /** * Set event parameters */ setParams(params: Record): void; /** * Add a parameter to the event */ addParam(key: string, value: string | number | boolean): void; /** * Check if this is a pageview event */ isPageview(): boolean; /** * Check if this is a conversion event */ isConversion(): boolean; /** * Mark as sent successfully */ markSent(): void; /** * Mark as failed */ markFailed(error: string): void; /** * Reset for retry */ resetForRetry(): void; /** * Check if event should be retried */ shouldRetry(maxRetries?: number): boolean; /** * Build SDK TrackEvent object */ toTrackEvent(): { name: string; params?: Record; clientId?: string; userId?: string; timestamp?: number; nonPersonalizedAds?: boolean; }; } export default AnalyticsEvent; //# sourceMappingURL=AnalyticsEvent.d.ts.map