/** * Core client interface for consent management. * This interface defines the methods that any consent client must implement. */ import type { CheckConsentOutput, CheckConsentQuery, GetSubjectInput, GetSubjectOutput, InitOutput, ListSubjectsOutput, ListSubjectsQuery, PatchSubjectFullInput, PatchSubjectOutput, PostSubjectInput, PostSubjectOutput } from '@c15t/schema/types'; import type { FetchOptions, ResponseContext } from './types'; export type { CheckConsentOutput, CheckConsentQuery, GetSubjectInput, GetSubjectOutput, ListSubjectsOutput, ListSubjectsQuery, PatchSubjectFullInput, PatchSubjectOutput, PostSubjectInput, PostSubjectOutput, }; /** * Request body for setConsent. */ export type SetConsentRequestBody = PostSubjectInput; /** * Response from setConsent. */ export type SetConsentResponse = PostSubjectOutput; /** * Request body for identifyUser (links external ID to subject). * Uses `subjectId` as the canonical field for the PATCH path. * The legacy `id` alias is still accepted for backwards compatibility. */ type IdentifyUserRequestBodyBase = { /** External user ID to link to the subject */ externalId: string; /** Identity provider name (optional) */ identityProvider?: string; }; type IdentifyUserRequestBodyWithSubjectId = IdentifyUserRequestBodyBase & { /** * Subject ID for the PATCH /subjects/:id path. * Prefer this field in all new code. */ subjectId: string; id?: never; }; type IdentifyUserRequestBodyWithLegacyId = IdentifyUserRequestBodyBase & { /** * @deprecated Use `subjectId` instead. * Kept to avoid breaking older low-level client integrations. */ id: string; subjectId?: never; }; export type IdentifyUserRequestBody = IdentifyUserRequestBodyWithSubjectId | IdentifyUserRequestBodyWithLegacyId; /** * Response from identifyUser. */ export type IdentifyUserResponse = PatchSubjectOutput; export type InitResponse = InitOutput; /** * Core interface that all consent management clients must implement */ export interface ConsentManagerInterface { /** * Checks if a consent banner should be shown. * * @param options - Optional request configuration * @returns Response with information about whether to show the consent banner */ init(options?: FetchOptions): Promise>; /** * Sets consent preferences for a subject. * * @param options - Optional request configuration with consent data * @returns Response confirming consent preferences were set */ setConsent(options?: FetchOptions): Promise>; /** * Links an external user ID to a subject (PATCH /subjects/:id). * * @param options - Request configuration with subjectId, externalId, and identityProvider * @returns Response confirming the subject was updated */ identifyUser(options: FetchOptions): Promise>; /** * Makes a custom API request to any endpoint. * * @param path - The API endpoint path * @param options - Optional request configuration * @returns Response from the custom endpoint */ $fetch(path: string, options?: FetchOptions): Promise>; } /** * Payload for the onConsentSet callback */ export interface ConsentSetCallbackPayload { type: string; preferences: Record; domain?: string; } /** * Payload for the onConsentBannerFetched callback */ export interface ConsentBannerFetchedCallbackPayload { showConsentBanner: boolean; jurisdiction: { code: string; message: string; }; location?: { countryCode: string | null; regionCode: string | null; }; } /** * Payload for the onConsentVerified callback */ export interface ConsentVerifiedCallbackPayload { type: string; domain?: string; preferences: string[]; valid: boolean; }