import type { StoreOptions } from '../store/type'; import type { ConsentManagerInterface } from './client-interface'; import { type EndpointHandlers } from './custom'; import type { RetryConfig } from './types'; export type { ConsentManagerInterface } from './client-interface'; export type { FetchOptions, ResponseContext, RetryConfig } from './types'; export type ClientMode = 'hosted' | 'c15t' | 'offline' | 'custom'; /** * Configuration for Custom mode * Allows for complete control over endpoint handling */ export type CustomClientOptions = { /** * Operating mode - custom endpoint implementation */ mode: 'custom'; /** * Custom handlers for each consent endpoint * Implement your own logic for each API operation */ endpointHandlers: EndpointHandlers; /** * Store configuration options */ store?: StoreOptions; /** * Backend URL is not used in custom mode */ backendURL?: never; }; export interface HostedClientOptions { /** * Hosted mode (default) - requires a backend URL * * @remarks * `'c15t'` is deprecated and will be removed in a future major release. */ mode?: 'hosted' | 'c15t'; /** * Backend URL for API endpoints */ backendURL: string; /** * Additional HTTP headers */ headers?: Record; /** * Custom fetch implementation */ customFetch?: typeof fetch; /** * Retry configuration */ retryConfig?: RetryConfig; } export type OfflineClientOptions = { /** * Offline mode - disables all API requests */ mode: 'offline'; /** * Not used in offline mode */ backendURL?: never; /** * Additional HTTP headers (not used in offline mode) */ headers?: never; /** * Custom fetch implementation (not used in offline mode) */ customFetch?: never; }; /** * Union type of all possible client options */ export type ConsentManagerOptions = { store?: StoreOptions; /** * Top-level offline policy configuration. * * @remarks * When provided, this takes precedence over `store.offlinePolicy`. * * @see {@link https://c15t.com/docs/frameworks/javascript/policy-packs} */ offlinePolicy?: StoreOptions['offlinePolicy']; /** * Storage configuration for consent persistence * * @remarks * This is shared between the client and store to ensure consistent storage behavior. * If not provided here, you can also configure it in store options. * * @example * ```typescript * const manager = configureConsentManager({ * mode: 'hosted', * storageConfig: { * crossSubdomain: true, * storageKey: 'my-consent', * }, * }); * ``` */ storageConfig?: import('../libs/cookie').StorageConfig; } & (CustomClientOptions | HostedClientOptions | OfflineClientOptions); /** * @deprecated Use {@link HostedClientOptions} instead. */ export type C15TClientOptions = HostedClientOptions; /** * Creates a new consent management client. * * This factory function creates the appropriate client implementation based on * the provided options. It supports three main operating modes: * * 1. Hosted mode - Makes actual HTTP requests to a consent management backend * 2. Custom mode - Uses provided handler functions instead of HTTP requests * 3. Offline mode - Disables all API requests and returns empty successful responses * * @param options - Configuration options for the client * @returns A client instance that implements the ConsentManagerInterface * * @example * Basic hosted client with backend URL: * ```typescript * const client = configureConsentManager({ * backendURL: '/api/c15t' * }); * ``` * * @example * Hosted client with custom backend URL: * ```typescript * const client = configureConsentManager({ * mode: 'hosted', * backendURL: 'https://api.example.com/consent' * }); * ``` * * @example * Offline client (for testing): * ```typescript * const client = configureConsentManager({ * mode: 'offline' * }); * ``` * * @example * Custom client with handler functions: * ```typescript * const client = configureConsentManager({ * mode: 'custom', * endpointHandlers: { * showConsentBanner: async () => ({ * data: { showConsentBanner: true }, * ok: true, * error: null, * response: null * }), * setConsent: async (options) => ({ * data: { success: true }, * ok: true, * error: null, * response: null * }), * verifyConsent: async (options) => ({ * data: { valid: true }, * ok: true, * error: null, * response: null * }) * } * }); * ``` */ export declare function configureConsentManager(options: ConsentManagerOptions): ConsentManagerInterface; /** * Clears the internal client registry cache. * * This is primarily useful for testing scenarios where different * configurations need fresh client instances between tests. */ export declare function clearClientRegistry(): void;