@solvenza/cookies-compliance 1.2.1 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +960 -36
  2. package/bin/audit-cli.js +134 -13
  3. package/dist/audit.cjs +811 -0
  4. package/dist/audit.cjs.map +1 -0
  5. package/dist/audit.d.cts +60 -0
  6. package/dist/audit.d.ts +60 -0
  7. package/dist/audit.js +380 -0
  8. package/dist/audit.js.map +1 -0
  9. package/dist/chunk-C5QPXHTH.js +3557 -0
  10. package/dist/chunk-C5QPXHTH.js.map +1 -0
  11. package/dist/chunk-OHOHIAK6.js +442 -0
  12. package/dist/chunk-OHOHIAK6.js.map +1 -0
  13. package/dist/chunk-Q3FZFXQE.js +89 -0
  14. package/dist/chunk-UQU54ANZ.js +225 -0
  15. package/dist/chunk-UQU54ANZ.js.map +1 -0
  16. package/dist/chunk-W5MG56VI.js +269 -0
  17. package/dist/chunk-W5MG56VI.js.map +1 -0
  18. package/dist/consent.esm.cjs +2195 -84
  19. package/dist/consent.esm.cjs.map +1 -1
  20. package/dist/consent.esm.d.cts +173 -6
  21. package/dist/consent.esm.d.ts +173 -6
  22. package/dist/consent.esm.js +57 -23
  23. package/dist/consent.esm.js.map +1 -1
  24. package/dist/consent.min.js +437 -55
  25. package/dist/consent.min.js.map +1 -1
  26. package/dist/presets.cjs +495 -0
  27. package/dist/presets.cjs.map +1 -0
  28. package/dist/presets.d.cts +51 -0
  29. package/dist/presets.d.ts +51 -0
  30. package/dist/presets.js +16 -0
  31. package/dist/presets.js.map +1 -0
  32. package/dist/types--kyI7OOR.d.cts +314 -0
  33. package/dist/types--kyI7OOR.d.ts +314 -0
  34. package/dist/wrappers/angular.cjs +2341 -65
  35. package/dist/wrappers/angular.cjs.map +1 -1
  36. package/dist/wrappers/angular.d.cts +85 -5
  37. package/dist/wrappers/angular.d.ts +85 -5
  38. package/dist/wrappers/angular.js +217 -3
  39. package/dist/wrappers/angular.js.map +1 -1
  40. package/dist/wrappers/next.cjs +2353 -103
  41. package/dist/wrappers/next.cjs.map +1 -1
  42. package/dist/wrappers/next.d.cts +25 -1
  43. package/dist/wrappers/next.d.ts +25 -1
  44. package/dist/wrappers/next.js +30 -5
  45. package/dist/wrappers/next.js.map +1 -1
  46. package/dist/wrappers/nuxt.cjs +4171 -0
  47. package/dist/wrappers/nuxt.cjs.map +1 -0
  48. package/dist/wrappers/nuxt.d.cts +33 -0
  49. package/dist/wrappers/nuxt.d.ts +33 -0
  50. package/dist/wrappers/nuxt.js +51 -0
  51. package/dist/wrappers/nuxt.js.map +1 -0
  52. package/dist/wrappers/react.cjs +2336 -141
  53. package/dist/wrappers/react.cjs.map +1 -1
  54. package/dist/wrappers/react.d.cts +87 -1
  55. package/dist/wrappers/react.d.ts +87 -1
  56. package/dist/wrappers/react.js +21 -51
  57. package/dist/wrappers/react.js.map +1 -1
  58. package/dist/wrappers/vue.cjs +4163 -0
  59. package/dist/wrappers/vue.cjs.map +1 -0
  60. package/dist/wrappers/vue.d.cts +144 -0
  61. package/dist/wrappers/vue.d.ts +144 -0
  62. package/dist/wrappers/vue.js +28 -0
  63. package/dist/wrappers/vue.js.map +1 -0
  64. package/dist/wrappers/wordpress.js +1 -1
  65. package/package.json +26 -5
  66. package/schema.json +143 -4
  67. package/dist/chunk-DDAAVRWG.js +0 -25
  68. package/dist/chunk-FBRP4MSA.js +0 -1907
  69. package/dist/chunk-FBRP4MSA.js.map +0 -1
  70. package/dist/consent-engine-DOMyEKfk.d.cts +0 -193
  71. package/dist/consent-engine-DOMyEKfk.d.ts +0 -193
  72. /package/dist/{chunk-DDAAVRWG.js.map → chunk-Q3FZFXQE.js.map} +0 -0
@@ -0,0 +1,51 @@
1
+ import { m as ServicePreset, j as ServiceConfig, C as ConsentConfig } from './types--kyI7OOR.js';
2
+
3
+ /**
4
+ * Built-in service presets for common analytics, marketing, media, payments, and security tools.
5
+ * Compliant with AEPD / GDPR / LSSI standards with pre-configured cookie names, storage keys,
6
+ * providers, and default categories.
7
+ */
8
+ declare const SERVICE_PRESETS: Record<string, ServicePreset>;
9
+ type KnownPresetId = keyof typeof SERVICE_PRESETS | string;
10
+
11
+ /**
12
+ * Check if a preset exists in the catalog.
13
+ */
14
+ declare function hasPreset(presetId: string): boolean;
15
+ /**
16
+ * Retrieve a service preset by identifier, optionally applying custom overrides.
17
+ *
18
+ * @param presetId - Identifier of the preset (e.g. 'ga4', 'meta_pixel', 'hotjar')
19
+ * @param overrides - Optional overrides to customize category, label, cookies, etc.
20
+ * @returns Complete ServiceConfig ready for ConsentConfig.services
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const ga4Service = getPreset('ga4');
25
+ * const customPosthog = getPreset('posthog', { label: 'Internal Product Metrics' });
26
+ * ```
27
+ */
28
+ declare function getPreset(presetId: KnownPresetId, overrides?: Partial<ServiceConfig>): ServiceConfig;
29
+ /**
30
+ * Define multiple services using preset shorthand, preset IDs, or full custom configurations.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const services = defineServices({
35
+ * ga4: 'ga4',
36
+ * facebook: 'meta_pixel',
37
+ * hotjar: { preset: 'hotjar', category: 'analytics' },
38
+ * customApi: { category: 'necessary', label: 'Custom Auth API' }
39
+ * });
40
+ * ```
41
+ */
42
+ declare function defineServices(definitions: Record<string, KnownPresetId | (Partial<ServiceConfig> & {
43
+ preset?: string;
44
+ })>): Record<string, ServiceConfig>;
45
+ /**
46
+ * Resolve any preset references in a ConsentConfig object in-place or return a new hydrated config.
47
+ * Hydrates services configured with `"preset": "ga4"` or matching known preset keys.
48
+ */
49
+ declare function resolveConfigPresets(config: ConsentConfig): ConsentConfig;
50
+
51
+ export { type KnownPresetId, SERVICE_PRESETS, ServicePreset, defineServices, getPreset, hasPreset, resolveConfigPresets };
@@ -0,0 +1,16 @@
1
+ import {
2
+ SERVICE_PRESETS,
3
+ defineServices,
4
+ getPreset,
5
+ hasPreset,
6
+ resolveConfigPresets
7
+ } from "./chunk-OHOHIAK6.js";
8
+ import "./chunk-Q3FZFXQE.js";
9
+ export {
10
+ SERVICE_PRESETS,
11
+ defineServices,
12
+ getPreset,
13
+ hasPreset,
14
+ resolveConfigPresets
15
+ };
16
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,314 @@
1
+ interface ConsentChoices {
2
+ [categoryOrService: string]: boolean;
3
+ }
4
+ interface ServiceConfig {
5
+ preset?: string;
6
+ category?: string;
7
+ label?: string;
8
+ provider?: string;
9
+ policyUrl?: string;
10
+ description?: string;
11
+ cookies?: Array<{
12
+ name: string;
13
+ domain?: string;
14
+ duration?: string;
15
+ purpose?: string;
16
+ }>;
17
+ storageKeys?: string[];
18
+ localStorage?: string[];
19
+ sessionStorage?: string[];
20
+ }
21
+ interface ServicePreset {
22
+ id: string;
23
+ category: string;
24
+ label: string;
25
+ provider: string;
26
+ description?: string;
27
+ policyUrl?: string;
28
+ cookies?: Array<{
29
+ name: string;
30
+ domain?: string;
31
+ duration?: string;
32
+ purpose?: string;
33
+ }>;
34
+ storageKeys?: string[];
35
+ localStorage?: string[];
36
+ sessionStorage?: string[];
37
+ }
38
+ interface CategoryConfig {
39
+ required?: boolean;
40
+ default?: boolean;
41
+ label: string;
42
+ description: string;
43
+ storageKeys?: string[];
44
+ localStorage?: string[];
45
+ sessionStorage?: string[];
46
+ }
47
+ interface StoragePurgeReport {
48
+ category: string;
49
+ purgedCookies: string[];
50
+ purgedLocalStorage: string[];
51
+ purgedSessionStorage: string[];
52
+ }
53
+ interface FloatingBadgeConfig {
54
+ enabled?: boolean;
55
+ position?: "bottom-left" | "bottom-right" | "top-left" | "top-right";
56
+ label?: string;
57
+ ariaLabel?: string;
58
+ tooltip?: string;
59
+ showLabel?: boolean;
60
+ icon?: "cookie" | "shield" | "settings";
61
+ visibility?: "always" | "after-consent";
62
+ }
63
+ interface BannerUIConfig {
64
+ title?: string;
65
+ description?: string;
66
+ accept?: string;
67
+ reject?: string;
68
+ configure?: string;
69
+ cookiesPolicy?: string;
70
+ privacyPolicy?: string;
71
+ ariaLabel?: string;
72
+ }
73
+ interface PreferencesUIConfig {
74
+ title?: string;
75
+ subtitle?: string;
76
+ save?: string;
77
+ acceptAll?: string;
78
+ rejectAll?: string;
79
+ closeLabel?: string;
80
+ requiredBadge?: string;
81
+ optionalBadge?: string;
82
+ servicesLabel?: string;
83
+ viewServices?: string;
84
+ hideServices?: string;
85
+ thirdParty?: string;
86
+ }
87
+ interface TranslationConfig {
88
+ policy?: {
89
+ privacyUrl?: string;
90
+ cookiesUrl?: string;
91
+ };
92
+ ui?: {
93
+ banner?: BannerUIConfig;
94
+ preferences?: PreferencesUIConfig;
95
+ floatingBadge?: {
96
+ label?: string;
97
+ ariaLabel?: string;
98
+ tooltip?: string;
99
+ };
100
+ };
101
+ categories?: Record<string, {
102
+ label?: string;
103
+ description?: string;
104
+ }>;
105
+ services?: Record<string, {
106
+ label?: string;
107
+ provider?: string;
108
+ }>;
109
+ }
110
+ interface LocaleConfig {
111
+ default?: string;
112
+ autoDetect?: boolean;
113
+ syncHtmlLang?: boolean;
114
+ syncUrl?: boolean;
115
+ supported?: string[];
116
+ }
117
+ interface GpcConfig {
118
+ enabled?: boolean;
119
+ respectSignal?: boolean;
120
+ mode?: "auto-reject" | "notice-only";
121
+ categories?: string[];
122
+ noticeText?: string;
123
+ }
124
+ interface LegalEntityConfig {
125
+ name: string;
126
+ tradeName?: string;
127
+ taxId?: string;
128
+ address?: string;
129
+ email?: string;
130
+ phone?: string;
131
+ registryData?: string;
132
+ dpoEmail?: string;
133
+ activity?: string;
134
+ websiteUrl?: string;
135
+ }
136
+ interface LegalNoticeConfig {
137
+ entity?: LegalEntityConfig;
138
+ applicableLaw?: string;
139
+ jurisdiction?: string;
140
+ lastUpdated?: string;
141
+ }
142
+ interface LegalPolicyOptions {
143
+ view?: "full" | "table-only" | "summary";
144
+ locale?: string;
145
+ showRevocationButtons?: boolean;
146
+ showBrowserGuide?: boolean;
147
+ showInternationalTransfers?: boolean;
148
+ showGpcNotice?: boolean;
149
+ theme?: "light" | "dark" | "auto";
150
+ className?: string;
151
+ }
152
+ interface ConsentConfig {
153
+ schemaVersion: number;
154
+ policyVersion: string;
155
+ legalEntity?: LegalEntityConfig;
156
+ legalNotice?: LegalNoticeConfig;
157
+ locale?: LocaleConfig;
158
+ translations?: Record<string, TranslationConfig>;
159
+ security?: {
160
+ secretKey?: string;
161
+ };
162
+ csp?: {
163
+ nonce?: string;
164
+ };
165
+ gpc?: GpcConfig;
166
+ storage?: {
167
+ name?: string;
168
+ type?: "cookie" | "memory";
169
+ sameSite?: "Strict" | "Lax" | "None";
170
+ secure?: boolean;
171
+ path?: string;
172
+ domain?: string;
173
+ };
174
+ consent?: {
175
+ maxAgeDays?: number;
176
+ };
177
+ policy?: {
178
+ privacyUrl?: string;
179
+ cookiesUrl?: string;
180
+ };
181
+ categories: Record<string, CategoryConfig>;
182
+ services?: Record<string, ServiceConfig>;
183
+ logging?: {
184
+ enabled?: boolean;
185
+ endpoint?: string;
186
+ };
187
+ ui?: {
188
+ theme?: "auto" | "light" | "dark";
189
+ position?: "bottom" | "top" | "modal";
190
+ banner?: BannerUIConfig;
191
+ preferences?: PreferencesUIConfig;
192
+ floatingBadge?: boolean | FloatingBadgeConfig;
193
+ };
194
+ }
195
+ interface ConsentReceipt {
196
+ schema?: number;
197
+ receiptId: string;
198
+ policyVersion: string;
199
+ decidedAt: string;
200
+ updatedAt: string;
201
+ source: "banner" | "preferences" | "withdraw" | "programmatic" | "gpc";
202
+ choices: ConsentChoices;
203
+ signature?: string;
204
+ gpc?: boolean;
205
+ }
206
+ interface ConsentState {
207
+ initialized: boolean;
208
+ policyVersion: string;
209
+ locale: string;
210
+ receipt: ConsentReceipt | null;
211
+ choices: ConsentChoices;
212
+ gpc?: boolean;
213
+ }
214
+ type ConsentEvent = "ready" | "banner:shown" | "preferences:opened" | "preferences:closed" | "floating-badge:shown" | "floating-badge:hidden" | "locale:changed" | "gpc:detected" | "consent:changed" | "consent:accepted" | "consent:rejected" | "consent:withdrawn" | "service:blocked" | "service:loaded" | "service:revoked" | "storage:purged" | "diagnostic:warning" | "error";
215
+ interface ConsentEventDetailMap {
216
+ ready: {
217
+ state: ConsentState;
218
+ };
219
+ "banner:shown": void;
220
+ "preferences:opened": void;
221
+ "preferences:closed": void;
222
+ "floating-badge:shown": void;
223
+ "floating-badge:hidden": void;
224
+ "locale:changed": {
225
+ locale: string;
226
+ previousLocale: string;
227
+ };
228
+ "gpc:detected": {
229
+ signal: boolean;
230
+ autoApplied: boolean;
231
+ choices: ConsentChoices;
232
+ };
233
+ "consent:changed": {
234
+ choices: ConsentChoices;
235
+ receipt: ConsentReceipt;
236
+ };
237
+ "consent:accepted": {
238
+ choices: ConsentChoices;
239
+ receipt: ConsentReceipt;
240
+ };
241
+ "consent:rejected": {
242
+ choices: ConsentChoices;
243
+ receipt: ConsentReceipt;
244
+ };
245
+ "consent:withdrawn": {
246
+ previousChoices: ConsentChoices;
247
+ };
248
+ "service:blocked": {
249
+ serviceId: string;
250
+ category: string;
251
+ element?: HTMLElement;
252
+ };
253
+ "service:loaded": {
254
+ serviceId: string;
255
+ category: string;
256
+ };
257
+ "service:revoked": {
258
+ serviceId: string;
259
+ category: string;
260
+ };
261
+ "storage:purged": {
262
+ category: string;
263
+ report: StoragePurgeReport;
264
+ };
265
+ "diagnostic:warning": {
266
+ code: string;
267
+ message: string;
268
+ details?: unknown;
269
+ };
270
+ error: {
271
+ code: string;
272
+ message: string;
273
+ error?: unknown;
274
+ };
275
+ }
276
+ type ConsentEventHandler<E extends ConsentEvent> = (detail: ConsentEventDetailMap[E]) => void;
277
+ interface DiagnosticReport {
278
+ timestamp: string;
279
+ unblockedThirdPartyScripts: string[];
280
+ compliant: boolean;
281
+ }
282
+ interface ConsentSDKInterface {
283
+ init(config: ConsentConfig | string): Promise<void>;
284
+ ready(): Promise<void>;
285
+ getConsent(): ConsentState;
286
+ getLocale(): string;
287
+ setLocale(locale: string): void;
288
+ syncLocale(locale: string): void;
289
+ isGpcActive(): boolean;
290
+ has(category: string): boolean;
291
+ hasService(service: string): boolean;
292
+ acceptAll(): void;
293
+ rejectAll(): void;
294
+ setPreferences(choices: Record<string, boolean>): void;
295
+ openPreferences(): void;
296
+ closePreferences(): void;
297
+ withdraw(): void;
298
+ purgeCategory(category: string): StoragePurgeReport;
299
+ purgeStorage(categoryOrService?: string): StoragePurgeReport[];
300
+ showFloatingBadge(): void;
301
+ hideFloatingBadge(): void;
302
+ when(categoryOrService: string, callback: () => void): () => void;
303
+ on<E extends ConsentEvent>(event: E, handler: ConsentEventHandler<E>): () => void;
304
+ getReceipt(): ConsentReceipt | null;
305
+ rescan(): DiagnosticReport;
306
+ mountPolicy(targetContainer: HTMLElement | string, options?: LegalPolicyOptions): void;
307
+ renderPolicyHtml(options?: LegalPolicyOptions): string;
308
+ mountLegalNotice(targetContainer: HTMLElement | string, options?: LegalPolicyOptions): void;
309
+ renderLegalNoticeHtml(options?: LegalPolicyOptions): string;
310
+ mountPrivacyPolicy(targetContainer: HTMLElement | string, options?: LegalPolicyOptions): void;
311
+ renderPrivacyPolicyHtml(options?: LegalPolicyOptions): string;
312
+ }
313
+
314
+ export type { BannerUIConfig as B, ConsentConfig as C, DiagnosticReport as D, FloatingBadgeConfig as F, GpcConfig as G, LegalPolicyOptions as L, PreferencesUIConfig as P, StoragePurgeReport as S, TranslationConfig as T, ConsentSDKInterface as a, ConsentState as b, ConsentChoices as c, ConsentEvent as d, ConsentEventHandler as e, ConsentReceipt as f, LegalEntityConfig as g, LegalNoticeConfig as h, CategoryConfig as i, ServiceConfig as j, ConsentEventDetailMap as k, LocaleConfig as l, ServicePreset as m };
@@ -0,0 +1,314 @@
1
+ interface ConsentChoices {
2
+ [categoryOrService: string]: boolean;
3
+ }
4
+ interface ServiceConfig {
5
+ preset?: string;
6
+ category?: string;
7
+ label?: string;
8
+ provider?: string;
9
+ policyUrl?: string;
10
+ description?: string;
11
+ cookies?: Array<{
12
+ name: string;
13
+ domain?: string;
14
+ duration?: string;
15
+ purpose?: string;
16
+ }>;
17
+ storageKeys?: string[];
18
+ localStorage?: string[];
19
+ sessionStorage?: string[];
20
+ }
21
+ interface ServicePreset {
22
+ id: string;
23
+ category: string;
24
+ label: string;
25
+ provider: string;
26
+ description?: string;
27
+ policyUrl?: string;
28
+ cookies?: Array<{
29
+ name: string;
30
+ domain?: string;
31
+ duration?: string;
32
+ purpose?: string;
33
+ }>;
34
+ storageKeys?: string[];
35
+ localStorage?: string[];
36
+ sessionStorage?: string[];
37
+ }
38
+ interface CategoryConfig {
39
+ required?: boolean;
40
+ default?: boolean;
41
+ label: string;
42
+ description: string;
43
+ storageKeys?: string[];
44
+ localStorage?: string[];
45
+ sessionStorage?: string[];
46
+ }
47
+ interface StoragePurgeReport {
48
+ category: string;
49
+ purgedCookies: string[];
50
+ purgedLocalStorage: string[];
51
+ purgedSessionStorage: string[];
52
+ }
53
+ interface FloatingBadgeConfig {
54
+ enabled?: boolean;
55
+ position?: "bottom-left" | "bottom-right" | "top-left" | "top-right";
56
+ label?: string;
57
+ ariaLabel?: string;
58
+ tooltip?: string;
59
+ showLabel?: boolean;
60
+ icon?: "cookie" | "shield" | "settings";
61
+ visibility?: "always" | "after-consent";
62
+ }
63
+ interface BannerUIConfig {
64
+ title?: string;
65
+ description?: string;
66
+ accept?: string;
67
+ reject?: string;
68
+ configure?: string;
69
+ cookiesPolicy?: string;
70
+ privacyPolicy?: string;
71
+ ariaLabel?: string;
72
+ }
73
+ interface PreferencesUIConfig {
74
+ title?: string;
75
+ subtitle?: string;
76
+ save?: string;
77
+ acceptAll?: string;
78
+ rejectAll?: string;
79
+ closeLabel?: string;
80
+ requiredBadge?: string;
81
+ optionalBadge?: string;
82
+ servicesLabel?: string;
83
+ viewServices?: string;
84
+ hideServices?: string;
85
+ thirdParty?: string;
86
+ }
87
+ interface TranslationConfig {
88
+ policy?: {
89
+ privacyUrl?: string;
90
+ cookiesUrl?: string;
91
+ };
92
+ ui?: {
93
+ banner?: BannerUIConfig;
94
+ preferences?: PreferencesUIConfig;
95
+ floatingBadge?: {
96
+ label?: string;
97
+ ariaLabel?: string;
98
+ tooltip?: string;
99
+ };
100
+ };
101
+ categories?: Record<string, {
102
+ label?: string;
103
+ description?: string;
104
+ }>;
105
+ services?: Record<string, {
106
+ label?: string;
107
+ provider?: string;
108
+ }>;
109
+ }
110
+ interface LocaleConfig {
111
+ default?: string;
112
+ autoDetect?: boolean;
113
+ syncHtmlLang?: boolean;
114
+ syncUrl?: boolean;
115
+ supported?: string[];
116
+ }
117
+ interface GpcConfig {
118
+ enabled?: boolean;
119
+ respectSignal?: boolean;
120
+ mode?: "auto-reject" | "notice-only";
121
+ categories?: string[];
122
+ noticeText?: string;
123
+ }
124
+ interface LegalEntityConfig {
125
+ name: string;
126
+ tradeName?: string;
127
+ taxId?: string;
128
+ address?: string;
129
+ email?: string;
130
+ phone?: string;
131
+ registryData?: string;
132
+ dpoEmail?: string;
133
+ activity?: string;
134
+ websiteUrl?: string;
135
+ }
136
+ interface LegalNoticeConfig {
137
+ entity?: LegalEntityConfig;
138
+ applicableLaw?: string;
139
+ jurisdiction?: string;
140
+ lastUpdated?: string;
141
+ }
142
+ interface LegalPolicyOptions {
143
+ view?: "full" | "table-only" | "summary";
144
+ locale?: string;
145
+ showRevocationButtons?: boolean;
146
+ showBrowserGuide?: boolean;
147
+ showInternationalTransfers?: boolean;
148
+ showGpcNotice?: boolean;
149
+ theme?: "light" | "dark" | "auto";
150
+ className?: string;
151
+ }
152
+ interface ConsentConfig {
153
+ schemaVersion: number;
154
+ policyVersion: string;
155
+ legalEntity?: LegalEntityConfig;
156
+ legalNotice?: LegalNoticeConfig;
157
+ locale?: LocaleConfig;
158
+ translations?: Record<string, TranslationConfig>;
159
+ security?: {
160
+ secretKey?: string;
161
+ };
162
+ csp?: {
163
+ nonce?: string;
164
+ };
165
+ gpc?: GpcConfig;
166
+ storage?: {
167
+ name?: string;
168
+ type?: "cookie" | "memory";
169
+ sameSite?: "Strict" | "Lax" | "None";
170
+ secure?: boolean;
171
+ path?: string;
172
+ domain?: string;
173
+ };
174
+ consent?: {
175
+ maxAgeDays?: number;
176
+ };
177
+ policy?: {
178
+ privacyUrl?: string;
179
+ cookiesUrl?: string;
180
+ };
181
+ categories: Record<string, CategoryConfig>;
182
+ services?: Record<string, ServiceConfig>;
183
+ logging?: {
184
+ enabled?: boolean;
185
+ endpoint?: string;
186
+ };
187
+ ui?: {
188
+ theme?: "auto" | "light" | "dark";
189
+ position?: "bottom" | "top" | "modal";
190
+ banner?: BannerUIConfig;
191
+ preferences?: PreferencesUIConfig;
192
+ floatingBadge?: boolean | FloatingBadgeConfig;
193
+ };
194
+ }
195
+ interface ConsentReceipt {
196
+ schema?: number;
197
+ receiptId: string;
198
+ policyVersion: string;
199
+ decidedAt: string;
200
+ updatedAt: string;
201
+ source: "banner" | "preferences" | "withdraw" | "programmatic" | "gpc";
202
+ choices: ConsentChoices;
203
+ signature?: string;
204
+ gpc?: boolean;
205
+ }
206
+ interface ConsentState {
207
+ initialized: boolean;
208
+ policyVersion: string;
209
+ locale: string;
210
+ receipt: ConsentReceipt | null;
211
+ choices: ConsentChoices;
212
+ gpc?: boolean;
213
+ }
214
+ type ConsentEvent = "ready" | "banner:shown" | "preferences:opened" | "preferences:closed" | "floating-badge:shown" | "floating-badge:hidden" | "locale:changed" | "gpc:detected" | "consent:changed" | "consent:accepted" | "consent:rejected" | "consent:withdrawn" | "service:blocked" | "service:loaded" | "service:revoked" | "storage:purged" | "diagnostic:warning" | "error";
215
+ interface ConsentEventDetailMap {
216
+ ready: {
217
+ state: ConsentState;
218
+ };
219
+ "banner:shown": void;
220
+ "preferences:opened": void;
221
+ "preferences:closed": void;
222
+ "floating-badge:shown": void;
223
+ "floating-badge:hidden": void;
224
+ "locale:changed": {
225
+ locale: string;
226
+ previousLocale: string;
227
+ };
228
+ "gpc:detected": {
229
+ signal: boolean;
230
+ autoApplied: boolean;
231
+ choices: ConsentChoices;
232
+ };
233
+ "consent:changed": {
234
+ choices: ConsentChoices;
235
+ receipt: ConsentReceipt;
236
+ };
237
+ "consent:accepted": {
238
+ choices: ConsentChoices;
239
+ receipt: ConsentReceipt;
240
+ };
241
+ "consent:rejected": {
242
+ choices: ConsentChoices;
243
+ receipt: ConsentReceipt;
244
+ };
245
+ "consent:withdrawn": {
246
+ previousChoices: ConsentChoices;
247
+ };
248
+ "service:blocked": {
249
+ serviceId: string;
250
+ category: string;
251
+ element?: HTMLElement;
252
+ };
253
+ "service:loaded": {
254
+ serviceId: string;
255
+ category: string;
256
+ };
257
+ "service:revoked": {
258
+ serviceId: string;
259
+ category: string;
260
+ };
261
+ "storage:purged": {
262
+ category: string;
263
+ report: StoragePurgeReport;
264
+ };
265
+ "diagnostic:warning": {
266
+ code: string;
267
+ message: string;
268
+ details?: unknown;
269
+ };
270
+ error: {
271
+ code: string;
272
+ message: string;
273
+ error?: unknown;
274
+ };
275
+ }
276
+ type ConsentEventHandler<E extends ConsentEvent> = (detail: ConsentEventDetailMap[E]) => void;
277
+ interface DiagnosticReport {
278
+ timestamp: string;
279
+ unblockedThirdPartyScripts: string[];
280
+ compliant: boolean;
281
+ }
282
+ interface ConsentSDKInterface {
283
+ init(config: ConsentConfig | string): Promise<void>;
284
+ ready(): Promise<void>;
285
+ getConsent(): ConsentState;
286
+ getLocale(): string;
287
+ setLocale(locale: string): void;
288
+ syncLocale(locale: string): void;
289
+ isGpcActive(): boolean;
290
+ has(category: string): boolean;
291
+ hasService(service: string): boolean;
292
+ acceptAll(): void;
293
+ rejectAll(): void;
294
+ setPreferences(choices: Record<string, boolean>): void;
295
+ openPreferences(): void;
296
+ closePreferences(): void;
297
+ withdraw(): void;
298
+ purgeCategory(category: string): StoragePurgeReport;
299
+ purgeStorage(categoryOrService?: string): StoragePurgeReport[];
300
+ showFloatingBadge(): void;
301
+ hideFloatingBadge(): void;
302
+ when(categoryOrService: string, callback: () => void): () => void;
303
+ on<E extends ConsentEvent>(event: E, handler: ConsentEventHandler<E>): () => void;
304
+ getReceipt(): ConsentReceipt | null;
305
+ rescan(): DiagnosticReport;
306
+ mountPolicy(targetContainer: HTMLElement | string, options?: LegalPolicyOptions): void;
307
+ renderPolicyHtml(options?: LegalPolicyOptions): string;
308
+ mountLegalNotice(targetContainer: HTMLElement | string, options?: LegalPolicyOptions): void;
309
+ renderLegalNoticeHtml(options?: LegalPolicyOptions): string;
310
+ mountPrivacyPolicy(targetContainer: HTMLElement | string, options?: LegalPolicyOptions): void;
311
+ renderPrivacyPolicyHtml(options?: LegalPolicyOptions): string;
312
+ }
313
+
314
+ export type { BannerUIConfig as B, ConsentConfig as C, DiagnosticReport as D, FloatingBadgeConfig as F, GpcConfig as G, LegalPolicyOptions as L, PreferencesUIConfig as P, StoragePurgeReport as S, TranslationConfig as T, ConsentSDKInterface as a, ConsentState as b, ConsentChoices as c, ConsentEvent as d, ConsentEventHandler as e, ConsentReceipt as f, LegalEntityConfig as g, LegalNoticeConfig as h, CategoryConfig as i, ServiceConfig as j, ConsentEventDetailMap as k, LocaleConfig as l, ServicePreset as m };