import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core'; import { AnalyticsPropertyStatus, AnalyticsProvider } from '../types/index.js'; /** * Options for constructing an {@link AnalyticsProperty}. */ export interface AnalyticsPropertyOptions extends SmrtObjectOptions { tenantId?: string | null; name?: string; displayName?: string; provider?: AnalyticsProvider; externalId?: string; measurementId?: string; apiSecret?: string; siteDomain?: string; timeZone?: string; currencyCode?: string; industryCategory?: string; serviceLevel?: string; status?: AnalyticsPropertyStatus; lastSyncAt?: Date | null; providerMetadata?: string; } /** * AnalyticsProperty represents an analytics property (GA4 property, * Plausible site, or Matomo site). * * @example * ```typescript * const property = await properties.create({ * name: 'My Website', * displayName: 'My Website Analytics', * provider: AnalyticsProvider.GA4, * externalId: 'properties/123456789', * measurementId: 'G-XXXXXXXXXX' * }); * ``` */ export declare class AnalyticsProperty extends SmrtObject { /** * Tenant ID for multi-tenancy isolation (#1410). * * Without tenant scoping the generated `list`/`get` API and any raw query * return every tenant's properties — including the `@field({ sensitive })` * `apiSecret` / `providerMetadata` credentials. `@TenantScoped` registers * this class with the tenant interceptor so reads are auto-filtered and * writes are bound to the active tenant context. */ tenantId: string | null; /** * Internal name/identifier */ name: string; /** * Human-readable display name */ displayName: string; /** * Analytics provider (ga4, plausible, matomo) */ provider: AnalyticsProvider; /** * External ID from the provider (e.g., "properties/123456789" for GA4, * idSite for Matomo) */ externalId: string; /** * Measurement ID for GA4 (G-XXXXXXXXXX) */ measurementId: string; /** * Provider API secret/token (GA4 API secret, Matomo token_auth) * * Sensitive (#1540): excluded from generated API/MCP responses and rejected * as a `where` filter key so it can't be probed. */ apiSecret: string; /** * Site domain for Plausible/Matomo */ siteDomain: string; /** * Property timezone */ timeZone: string; /** * Currency code (e.g., 'USD', 'EUR') */ currencyCode: string; /** * Industry category */ industryCategory: string; /** * Service level (STANDARD, PREMIUM) */ serviceLevel: string; /** * Property status */ status: AnalyticsPropertyStatus; /** * Last sync timestamp with provider */ lastSyncAt: Date | null; /** * Metadata from provider (JSON) * * Sensitive (#1540): may carry provider credentials/tokens, so it is excluded * from generated API/MCP responses and rejected as a `where` filter key. */ providerMetadata: string; constructor(options?: AnalyticsPropertyOptions); /** * Check if this is a GA4 property */ isGA4(): boolean; /** * Check if this is a Plausible site */ isPlausible(): boolean; /** * Check if this is a Matomo site */ isMatomo(): boolean; /** * Get parsed provider metadata */ getProviderMetadata(): Record; /** * Set provider metadata */ setProviderMetadata(metadata: Record): void; /** * Mark as synced with provider */ markSynced(): void; /** * AI-powered: Analyze property performance. * * Uses the `smrtAnalytics.property.analyzePerformance` prompt registered * via `@happyvertical/smrt-prompts`, allowing tenant- or instance-level * overrides of the template, model, and parameters at runtime. * * Only non-PII fields (display name, provider label, requested period) * are sent to the AI provider. Internal identifiers (`id`, `externalId`, * `measurementId`, `apiSecret`, `providerMetadata`) are intentionally * excluded — see `../prompts.ts` for the full exclusion rationale. */ analyzePerformance(options?: { period?: string; }): Promise<{ action: string; period: string; analysis: string; }>; /** * AI-powered: Check if property is performing well */ isPerformingWell(): Promise; } export default AnalyticsProperty; //# sourceMappingURL=AnalyticsProperty.d.ts.map