import type { Duration } from '../../tools/utils/timeUtils';
import type { SessionStoreStrategyType } from '../session/storeStrategies/sessionStoreStrategy';
import { TrackingConsent } from '../trackingConsent';
import type { SessionPersistence } from '../session/sessionConstants';
import type { TransportConfiguration } from './transportConfiguration';
export declare const DefaultPrivacyLevel: {
    readonly ALLOW: "allow";
    readonly MASK: "mask";
    readonly MASK_USER_INPUT: "mask-user-input";
};
export type DefaultPrivacyLevel = (typeof DefaultPrivacyLevel)[keyof typeof DefaultPrivacyLevel];
export declare const TraceContextInjection: {
    readonly ALL: "all";
    readonly SAMPLED: "sampled";
};
export type TraceContextInjection = (typeof TraceContextInjection)[keyof typeof TraceContextInjection];
export interface InitConfiguration {
    /**
     * The client token for Datadog. Required for authenticating your application with Datadog.
     */
    clientToken: string;
    beforeSend?: GenericBeforeSendCallback | undefined;
    /**
     * The percentage of sessions tracked. A value between 0 and 100.
     * @default 100
     */
    sessionSampleRate?: number | undefined;
    /**
     * The percentage of telemetry events sent. A value between 0 and 100.
     * @default 20
     */
    telemetrySampleRate?: number | undefined;
    /**
     * Initialization fails silently if the RUM Browser SDK is already initialized on the page.
     * @default false
     */
    silentMultipleInit?: boolean | undefined;
    /**
     * Which storage strategy to use for persisting sessions. Can be either 'cookie' or 'local-storage'.
     * @default "cookie"
     */
    sessionPersistence?: SessionPersistence | undefined;
    /**
     * Allows the use of localStorage when cookies cannot be set. This enables the RUM Browser SDK to run in environments that do not provide cookie support.
     * See [Monitor Electron Applications Using the Browser SDK](https://docs.datadoghq.com/real_user_monitoring/guide/monitor-electron-applications-using-browser-sdk) for further information.
     * @deprecated use `sessionPersistence: local-storage` where you want to use localStorage instead
     */
    allowFallbackToLocalStorage?: boolean | undefined;
    /**
     * Allow listening to DOM events dispatched programmatically ([untrusted events](https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted)). Enabling this option can be useful if you heavily rely on programmatic events, such as in an automated UI test environment.
     * @default false
     */
    allowUntrustedEvents?: boolean | undefined;
    /**
     * Store global context and user context in localStorage to preserve them along the user navigation.
     * See [Contexts life cycle](https://docs.datadoghq.com/real_user_monitoring/browser/advanced_configuration/?tab=npm#contexts-life-cycle) for further information.
     * @default false
     */
    storeContextsAcrossPages?: boolean | undefined;
    /**
     * Set the initial user tracking consent state.
     * See [User tracking consent](https://docs.datadoghq.com/real_user_monitoring/browser/advanced_configuration/?tab=npm#user-tracking-consent) for further information.
     * @default granted
     */
    trackingConsent?: TrackingConsent | undefined;
    /**
     * Optional proxy URL, for example: https://www.proxy.com/path.
     * See [Proxy Your Browser RUM Data](https://docs.datadoghq.com/real_user_monitoring/guide/proxy-rum-data) for further information.
     */
    proxy?: string | ProxyFn | undefined;
    /**
     * The Datadog [site](https://docs.datadoghq.com/getting_started/site) parameter of your organization.
     * @default datadoghq.com
     */
    site?: string | undefined;
    /**
     * The service name for your application. Follows the [tag syntax requirements](https://docs.datadoghq.com/getting_started/tagging/#define-tags).
     */
    service?: string | undefined | null;
    /**
     * The application’s environment, for example: prod, pre-prod, and staging. Follows the [tag syntax requirements](https://docs.datadoghq.com/getting_started/tagging/#define-tags).
     */
    env?: string | undefined | null;
    /**
     * The application’s version, for example: 1.2.3, 6c44da20, and 2020.02.13. Follows the [tag syntax requirements](https://docs.datadoghq.com/getting_started/tagging/#define-tags).
     */
    version?: string | undefined | null;
    /**
     * Whether a secure cross-site session cookie is used
     * @default false
     * @deprecated use usePartitionedCrossSiteSessionCookie instead
     */
    useCrossSiteSessionCookie?: boolean | undefined;
    /**
     * Use a partitioned secure cross-site session cookie. This allows the RUM Browser SDK to run when the site is loaded from another one (iframe). Implies `useSecureSessionCookie`.
     * @default false
     */
    usePartitionedCrossSiteSessionCookie?: boolean | undefined;
    /**
     * Use a secure session cookie. This disables RUM events sent on insecure (non-HTTPS) connections.
     * @default false
     */
    useSecureSessionCookie?: boolean | undefined;
    /**
     * Preserve the session across subdomains for the same site.
     * @default false
     */
    trackSessionAcrossSubdomains?: boolean | undefined;
    /**
     * [Internal option] Enable experimental features
     */
    enableExperimentalFeatures?: string[] | undefined;
    /**
     * [Internal option] Configure the dual chipping to another datacenter
     */
    replica?: ReplicaUserConfiguration | undefined;
    /**
     * [Internal option] Set the datacenter from where the data is dual chipped
     */
    datacenter?: string;
    /**
     * [Internal option] Datadog internal analytics subdomain
     */
    internalAnalyticsSubdomain?: string;
    /**
     * [Internal option] The percentage of telemetry configuration sent. A value between 0 and 100.
     * @default 5
     */
    telemetryConfigurationSampleRate?: number;
    /**
     * [Internal option] The percentage of telemetry usage sent. A value between 0 and 100.
     * @default 5
     */
    telemetryUsageSampleRate?: number;
}
type GenericBeforeSendCallback = (event: any, context?: any) => unknown;
/**
 * path: /api/vX/product
 * parameters: xxx=yyy&zzz=aaa
 */
type ProxyFn = (options: {
    path: string;
    parameters: string;
}) => string;
interface ReplicaUserConfiguration {
    applicationId?: string;
    clientToken: string;
}
export interface Configuration extends TransportConfiguration {
    beforeSend: GenericBeforeSendCallback | undefined;
    sessionStoreStrategyType: SessionStoreStrategyType | undefined;
    sessionSampleRate: number;
    telemetrySampleRate: number;
    telemetryConfigurationSampleRate: number;
    telemetryUsageSampleRate: number;
    service: string | undefined;
    silentMultipleInit: boolean;
    allowUntrustedEvents: boolean;
    trackingConsent: TrackingConsent;
    storeContextsAcrossPages: boolean;
    eventRateLimiterThreshold: number;
    maxTelemetryEventsPerPage: number;
    batchBytesLimit: number;
    flushTimeout: Duration;
    batchMessagesLimit: number;
    messageBytesLimit: number;
}
export declare function isSampleRate(sampleRate: unknown, name: string): boolean;
export declare function validateAndBuildConfiguration(initConfiguration: InitConfiguration): Configuration | undefined;
export declare function serializeConfiguration(initConfiguration: InitConfiguration): {
    session_sample_rate: number | undefined;
    telemetry_sample_rate: number | undefined;
    telemetry_configuration_sample_rate: number | undefined;
    telemetry_usage_sample_rate: number | undefined;
    use_before_send: boolean;
    use_cross_site_session_cookie: boolean | undefined;
    use_partitioned_cross_site_session_cookie: boolean | undefined;
    use_secure_session_cookie: boolean | undefined;
    use_proxy: boolean;
    silent_multiple_init: boolean | undefined;
    track_session_across_subdomains: boolean | undefined;
    session_persistence: SessionPersistence | undefined;
    allow_fallback_to_local_storage: boolean;
    store_contexts_across_pages: boolean;
    allow_untrusted_events: boolean;
    tracking_consent: TrackingConsent | undefined;
};
export {};
