import {z} from 'zod' export type GetApiV1CookieConsentConfigsConfigIdOptions = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const cmpConfigResponse = z.object({name: z.string().optional(), domains: z.array(z.string()).optional(), orgIds: z.array(z.string()).optional(), mode: z.enum(["debug", "permissive", "production"]).optional(), configuration: z.object({additionalLinks: z.array(z.array(z.string())).optional(), allowTimeout: z.boolean().optional(), amazonConsent: z.boolean().optional(), ccpaRelaxed: z.boolean().optional(), codeSplitting: z.boolean().optional(), crossDeviceNoticeSeconds: z.number().int().gte(5).lte(30).optional(), crossDomain: z.boolean().optional(), deleteStorageOnOptout: z.boolean().optional(), dntSupport: z.boolean().optional(), doNotSellCategories: z.array(z.enum(["MARKETING", "ANALYTICS", "PERSONALIZATION"])).optional(), enableDoNotSell: z.boolean().optional(), enableDoNotSellDefault: z.boolean().optional(), externalStylesheet: z.boolean().optional(), forcedClassifyEnabled: z.boolean().optional(), forceManagePreferences: z.boolean().optional(), googleConsent: z.boolean().optional(), gpcSupport: z.boolean().optional(), iframeBlocking: z.enum(["", "debug", "permissive", "production"]).optional(), localStorageBlocking: z.enum(["", "debug", "permissive", "production"]).optional(), managePreferencesEnabled: z.boolean().optional(), microsoftConsent: z.boolean().optional(), palette: z.object({buttonAcceptBackgroundColor: z.string().nullable().optional(), buttonAcceptBackgroundColorHover: z.string().nullable().optional(), buttonAcceptBorderColor: z.string().nullable().optional(), buttonAcceptForegroundColor: z.string().nullable().optional(), buttonBackgroundColor: z.string().nullable().optional(), buttonBackgroundColorHover: z.string().nullable().optional(), buttonBorderColor: z.string().nullable().optional(), buttonCloseColor: z.string().nullable().optional(), buttonDenyBackgroundColor: z.string().nullable().optional(), buttonDenyBackgroundColorHover: z.string().nullable().optional(), buttonDenyBorderColor: z.string().nullable().optional(), buttonDenyForegroundColor: z.string().nullable().optional(), buttonRejectAllBackgroundColor: z.string().nullable().optional(), buttonRejectAllBackgroundColorHover: z.string().nullable().optional(), buttonRejectAllBorderColor: z.string().nullable().optional(), buttonRejectAllForegroundColor: z.string().nullable().optional(), buttonForegroundColor: z.string().nullable().optional(), buttonManageBackgroundColor: z.string().nullable().optional(), buttonManageBorderColor: z.string().nullable().optional(), buttonManageForegroundColor: z.string().nullable().optional(), buttonManageBackgroundColorHover: z.string().nullable().optional(), dialogBackgroundColor: z.string().nullable().optional(), dialogForegroundColor: z.string().nullable().optional(), dialogGpcBackgroundColor: z.string().nullable().optional(), dialogGpcBorderColor: z.string().nullable().optional(), dialogGpcForegroundColor: z.string().nullable().optional(), dialogGpcColor: z.string().nullable().optional(), dialogType: z.enum(["bar", "box"]).nullable().optional(), displayPosition: z.string().nullable().optional(), gpcBackgroundColor: z.string().nullable().optional(), gpcBorderColor: z.string().nullable().optional(), gpcForegroundColor: z.string().nullable().optional(), gpcColor: z.string().nullable().optional(), gpcBackgroundColorHover: z.string().nullable().optional(), infoDialogBackgroundColor: z.string().nullable().optional(), infoDialogForegroundColor: z.string().nullable().optional(), infoDialogOverlayColor: z.string().nullable().optional(), infoDialogButtonBackgroundColor: z.string().nullable().optional(), infoDialogButtonBackgroundColorHover: z.string().nullable().optional(), infoDialogButtonBorderColor: z.string().nullable().optional(), infoDialogButtonCloseColor: z.string().nullable().optional(), infoDialogButtonForegroundColor: z.string().nullable().optional(), infoDialogGpcBackgroundColor: z.string().nullable().optional(), infoDialogGpcBorderColor: z.string().nullable().optional(), infoDialogGpcForegroundColor: z.string().nullable().optional(), infoDialogGpcColor: z.string().nullable().optional(), infoDialogLinkColor: z.string().nullable().optional(), infoDialogPosition: z.enum(["right", "left"]).nullable().optional(), infoDialogToggleOffTrackColor: z.string().nullable().optional(), infoDialogToggleOffThumbColor: z.string().nullable().optional(), infoDialogToggleOnTrackColor: z.string().nullable().optional(), infoDialogToggleOnThumbColor: z.string().nullable().optional(), linkColor: z.string().nullable().optional(), optOutWidgetPosition: z.enum(["right", "left"]).nullable().optional(), theme: z.enum(["classic", "modern"]).nullable().optional(), toggleOffThumbColor: z.string().nullable().optional(), toggleOffTrackColor: z.string().nullable().optional(), toggleOnTrackColor: z.string().nullable().optional(), toggleOnThumbColor: z.string().nullable().optional(), toggleButtonOffColor: z.string().nullable().optional(), toggleButtonOnColor: z.string().nullable().optional(), toggleOffBackgroundColor: z.string().nullable().optional(), toggleOnBackgroundColor: z.string().nullable().optional(), widgetPosition: z.enum(["right", "left"]).nullable().optional(), focusOutlineColor: z.string().nullable().optional()}).optional(), policyLinkInDrawer: z.boolean().optional(), policyLinkText: z.enum(["cookieNotice", "cookiePolicy", "storagePoloicy", "privacyNotice", "privacyPolicy"]).optional(), showConsentUuid: z.boolean().optional(), showCrossDeviceNotice: z.boolean().optional(), showOptOutWidget: z.boolean().optional(), showWidget: z.boolean().optional(), storagePolicyHref: z.string().optional(), tattleSampling: z.number().gte(0).lte(1).optional(), timeoutSeconds: z.number().int().optional(), translations: z.object({messaging: z.object({categories: z.record(z.string(), z.unknown()).optional(), closeButton: z.record(z.string(), z.unknown()).optional(), default: z.record(z.string(), z.unknown()).optional(), timer: z.record(z.string(), z.unknown()).optional(), usageHow: z.record(z.string(), z.unknown()).optional(), usageList: z.record(z.string(), z.unknown()).optional(), usageWhat: z.record(z.string(), z.unknown()).optional(), viewCookies: z.record(z.string(), z.unknown()).optional(), viewDisclosures: z.record(z.string(), z.unknown()).optional()}).optional(), drawer: z.object({description: z.record(z.string(), z.unknown()).optional(), header: z.record(z.string(), z.unknown()).optional()}).optional(), doNotSell: z.object({description: z.record(z.string(), z.unknown()).optional(), header: z.record(z.string(), z.unknown()).optional()}).optional(), categories: z.object({ANALYTICS: z.object({description: z.record(z.string(), z.unknown()).optional(), label: z.record(z.string(), z.unknown()).optional()}).optional(), ESSENTIAL: z.object({description: z.record(z.string(), z.unknown()).optional(), label: z.record(z.string(), z.unknown()).optional()}).optional(), MARKETING: z.object({description: z.record(z.string(), z.unknown()).optional(), label: z.record(z.string(), z.unknown()).optional()}).optional(), OPT_OUT: z.object({description: z.record(z.string(), z.unknown()).optional(), label: z.record(z.string(), z.unknown()).optional()}).optional(), PERSONALIZATION: z.object({description: z.record(z.string(), z.unknown()).optional(), label: z.record(z.string(), z.unknown()).optional()}).optional()}).optional(), buttons: z.object({accept: z.record(z.string(), z.unknown()).optional(), acceptAll: z.record(z.string(), z.unknown()).optional(), deny: z.record(z.string(), z.unknown()).optional(), denyAll: z.record(z.string(), z.unknown()).optional(), denyNonEssential: z.record(z.string(), z.unknown()).optional(), dialog: z.object({denyAll: z.object({fr: z.record(z.string(), z.unknown()).optional()}).optional(), openDrawer: z.object({fr: z.record(z.string(), z.unknown()).optional()}).optional()}).optional(), managePreferences: z.record(z.string(), z.unknown()).optional(), rejectNonEssential: z.record(z.string(), z.unknown()).optional(), save: z.record(z.string(), z.unknown()).optional()}).optional(), optOut: z.object({active: z.record(z.string(), z.unknown()).optional(), honored: z.record(z.string(), z.unknown()).optional(), signalActive: z.record(z.string(), z.unknown()).optional(), signalHonored: z.record(z.string(), z.unknown()).optional()}).optional()}).optional(), variantMapping: z.union([z.object({byJurisdiction: z.record(z.string(), z.enum(["one", "three"])).optional(), behavior: z.literal("fallbackToOsano").optional()}), z.object({byJurisdiction: z.record(z.string(), z.enum(["one", "three"])), behavior: z.literal("fallbackToOsano")})]).optional()}).optional(), created: z.number().int().optional(), updated: z.number().int().optional(), publishStatus: z.enum(["unpublished", "in-progress", "published", "outdated", "error"]).optional(), lastPublished: z.number().int().optional(), publishedRevision: z.number().int().optional(), tattleRecordStopped: z.boolean().optional(), configId: z.string(), customerId: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Return Detailed Cookie Consent Configuration * * GET /v1/cookie-consent/configs/{configId} */ export const getApiV1CookieConsentConfigsConfigId = async (options?: GetApiV1CookieConsentConfigsConfigIdOptions) => { const {baseUrl = "https://api.osano.com", fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (ApiKeyAuth !== undefined) headers.set("x-osano-api-key", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/v1/cookie-consent/configs/${encodeURIComponent(String(args.configId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(cmpConfigResponse, await res.json()) };