import { BaseAnalyticsProvider } from '../../base-analytics-provider.js'; import type { ProviderConfig, ConsentSettings } from '../../../types/provider.js'; import type { RevenueData } from '../../../definitions.js'; interface MatomoConfig extends ProviderConfig { siteId: number; trackerUrl: string; enableLinkTracking?: boolean; enableHeartBeatTimer?: boolean; enableJSErrorTracking?: boolean; enablePerformanceTracking?: boolean; enableCrossDomainLinking?: boolean; cookieDomain?: string; cookiePath?: string; cookieSecure?: boolean; cookieSameSite?: 'None' | 'Lax' | 'Strict'; respectDoNotTrack?: boolean; globalProperties?: Record; customDimensions?: Record; } interface MatomoTracker { trackPageView: (customTitle?: string) => void; trackEvent: (category: string, action: string, name?: string, value?: number) => void; trackGoal: (goalId: number, customRevenue?: number) => void; trackEcommerce: (orderId: string, grandTotal: number, subTotal?: number, tax?: number, shipping?: number, discount?: number) => void; addEcommerceItem: (sku: string, name?: string, category?: string, price?: number, quantity?: number) => void; trackEcommerceOrder: (orderId: string, grandTotal: number, subTotal?: number, tax?: number, shipping?: number, discount?: number) => void; trackEcommerceCartUpdate: (grandTotal: number) => void; setUserId: (userId: string) => void; setCustomVariable: (index: number, name: string, value: string, scope?: 'visit' | 'page') => void; setCustomDimension: (dimensionId: number, value: string) => void; deleteCustomDimension: (dimensionId: number) => void; setDocumentTitle: (title: string) => void; setReferrerUrl: (url: string) => void; setCustomUrl: (url: string) => void; enableLinkTracking: (enable?: boolean) => void; enableHeartBeatTimer: (activeTimeInSeconds?: number) => void; enableJSErrorTracking: () => void; enablePerformanceTracking: () => void; enableCrossDomainLinking: () => void; disableCookies: () => void; deleteCookies: () => void; setCookieDomain: (domain: string) => void; setCookiePath: (path: string) => void; setSecureCookie: (secure: boolean) => void; setCookieSameSite: (sameSite: 'None' | 'Lax' | 'Strict') => void; setDoNotTrack: (enable: boolean) => void; optUserOut: () => void; forgetUserOptOut: () => void; isUserOptedOut: () => boolean; setConsentGiven: () => void; setConsentRemoved: () => void; requireConsent: () => void; setRequestMethod: (method: 'GET' | 'POST') => void; ping: () => void; getUserId: () => string; getVisitorId: () => string; getVisitorInfo: () => any[]; getAttributionInfo: () => any[]; push: (args: any[]) => void; } interface MatomoSDK { getTracker: (trackerUrl: string, siteId: number) => MatomoTracker; addTracker: (trackerUrl: string, siteId: number) => MatomoTracker; removeAllAsyncTrackersExcept: (excludeTracker: MatomoTracker) => void; getAsyncTrackers: () => MatomoTracker[]; } declare global { interface Window { Matomo?: MatomoSDK; _paq?: any[]; } } export declare class MatomoAnalyticsProvider extends BaseAnalyticsProvider { readonly id = "matomo"; readonly name = "Matomo Analytics"; readonly version = "1.0.0"; private tracker?; private matomoConfig; private scriptLoaded; protected doInitialize(config: MatomoConfig): Promise; private loadMatomoSDK; private configureTracker; protected doShutdown(): Promise; protected doUpdateConsent(consent: ConsentSettings): Promise; protected doTrack(eventName: string, properties: Record): Promise; protected doIdentifyUser(userId: string, traits: Record): Promise; protected doSetUserProperties(properties: Record): Promise; protected doLogScreenView(screenName: string, properties: Record): Promise; protected doLogRevenue(data: RevenueData): Promise; protected doProviderReset(): Promise; protected doSetDebugMode(enabled: boolean): void; /** * Set custom dimension value */ setCustomDimension(dimensionId: number, value: string): void; /** * Delete custom dimension */ deleteCustomDimension(dimensionId: number): void; /** * Set custom variable (legacy method) */ setCustomVariable(index: number, name: string, value: string, scope?: 'visit' | 'page'): void; /** * Track a goal conversion */ trackGoal(goalId: number, customRevenue?: number): void; /** * Track ecommerce cart update */ trackEcommerceCartUpdate(grandTotal: number): void; /** * Get current user ID */ getUserId(): string | null; /** * Get visitor ID */ getVisitorId(): string | null; /** * Get visitor information */ getVisitorInfo(): any[] | null; /** * Get attribution information */ getAttributionInfo(): any[] | null; /** * Check if user has opted out */ isUserOptedOut(): boolean; /** * Opt user out of tracking */ optUserOut(): void; /** * Forget user opt out */ forgetUserOptOut(): void; /** * Send ping request */ ping(): void; /** * Check if Matomo is loaded */ isLoaded(): boolean; /** * Get site ID */ getSiteId(): number | null; /** * Get tracker URL */ getTrackerUrl(): string | null; /** * Sanitize properties for Matomo */ private sanitizeProperties; } export {};