@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.
- package/README.md +960 -36
- package/bin/audit-cli.js +134 -13
- package/dist/audit.cjs +811 -0
- package/dist/audit.cjs.map +1 -0
- package/dist/audit.d.cts +60 -0
- package/dist/audit.d.ts +60 -0
- package/dist/audit.js +380 -0
- package/dist/audit.js.map +1 -0
- package/dist/chunk-C5QPXHTH.js +3557 -0
- package/dist/chunk-C5QPXHTH.js.map +1 -0
- package/dist/chunk-OHOHIAK6.js +442 -0
- package/dist/chunk-OHOHIAK6.js.map +1 -0
- package/dist/chunk-Q3FZFXQE.js +89 -0
- package/dist/chunk-UQU54ANZ.js +225 -0
- package/dist/chunk-UQU54ANZ.js.map +1 -0
- package/dist/chunk-W5MG56VI.js +269 -0
- package/dist/chunk-W5MG56VI.js.map +1 -0
- package/dist/consent.esm.cjs +2195 -84
- package/dist/consent.esm.cjs.map +1 -1
- package/dist/consent.esm.d.cts +173 -6
- package/dist/consent.esm.d.ts +173 -6
- package/dist/consent.esm.js +57 -23
- package/dist/consent.esm.js.map +1 -1
- package/dist/consent.min.js +437 -55
- package/dist/consent.min.js.map +1 -1
- package/dist/presets.cjs +495 -0
- package/dist/presets.cjs.map +1 -0
- package/dist/presets.d.cts +51 -0
- package/dist/presets.d.ts +51 -0
- package/dist/presets.js +16 -0
- package/dist/presets.js.map +1 -0
- package/dist/types--kyI7OOR.d.cts +314 -0
- package/dist/types--kyI7OOR.d.ts +314 -0
- package/dist/wrappers/angular.cjs +2341 -65
- package/dist/wrappers/angular.cjs.map +1 -1
- package/dist/wrappers/angular.d.cts +85 -5
- package/dist/wrappers/angular.d.ts +85 -5
- package/dist/wrappers/angular.js +217 -3
- package/dist/wrappers/angular.js.map +1 -1
- package/dist/wrappers/next.cjs +2353 -103
- package/dist/wrappers/next.cjs.map +1 -1
- package/dist/wrappers/next.d.cts +25 -1
- package/dist/wrappers/next.d.ts +25 -1
- package/dist/wrappers/next.js +30 -5
- package/dist/wrappers/next.js.map +1 -1
- package/dist/wrappers/nuxt.cjs +4171 -0
- package/dist/wrappers/nuxt.cjs.map +1 -0
- package/dist/wrappers/nuxt.d.cts +33 -0
- package/dist/wrappers/nuxt.d.ts +33 -0
- package/dist/wrappers/nuxt.js +51 -0
- package/dist/wrappers/nuxt.js.map +1 -0
- package/dist/wrappers/react.cjs +2336 -141
- package/dist/wrappers/react.cjs.map +1 -1
- package/dist/wrappers/react.d.cts +87 -1
- package/dist/wrappers/react.d.ts +87 -1
- package/dist/wrappers/react.js +21 -51
- package/dist/wrappers/react.js.map +1 -1
- package/dist/wrappers/vue.cjs +4163 -0
- package/dist/wrappers/vue.cjs.map +1 -0
- package/dist/wrappers/vue.d.cts +144 -0
- package/dist/wrappers/vue.d.ts +144 -0
- package/dist/wrappers/vue.js +28 -0
- package/dist/wrappers/vue.js.map +1 -0
- package/dist/wrappers/wordpress.js +1 -1
- package/package.json +26 -5
- package/schema.json +143 -4
- package/dist/chunk-DDAAVRWG.js +0 -25
- package/dist/chunk-FBRP4MSA.js +0 -1907
- package/dist/chunk-FBRP4MSA.js.map +0 -1
- package/dist/consent-engine-DOMyEKfk.d.cts +0 -193
- package/dist/consent-engine-DOMyEKfk.d.ts +0 -193
- /package/dist/{chunk-DDAAVRWG.js.map → chunk-Q3FZFXQE.js.map} +0 -0
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__objRest,
|
|
3
|
+
__spreadProps,
|
|
4
|
+
__spreadValues
|
|
5
|
+
} from "./chunk-Q3FZFXQE.js";
|
|
6
|
+
|
|
7
|
+
// src/presets/presets-catalog.ts
|
|
8
|
+
var SERVICE_PRESETS = {
|
|
9
|
+
// --- ANALYTICS ---
|
|
10
|
+
ga4: {
|
|
11
|
+
id: "ga4",
|
|
12
|
+
category: "analytics",
|
|
13
|
+
label: "Google Analytics 4",
|
|
14
|
+
provider: "Google LLC",
|
|
15
|
+
description: "Medici\xF3n de visitas, p\xE1ginas vistas, eventos y comportamiento de navegaci\xF3n del usuario.",
|
|
16
|
+
policyUrl: "https://policies.google.com/privacy",
|
|
17
|
+
cookies: [
|
|
18
|
+
{ name: "_ga", duration: "2 a\xF1os", purpose: "Distinguir a los usuarios \xFAnicos en el sitio web." },
|
|
19
|
+
{ name: "_ga_*", duration: "2 a\xF1os", purpose: "Mantener el estado de la sesi\xF3n de Google Analytics 4." },
|
|
20
|
+
{ name: "_gid", duration: "24 horas", purpose: "Distinguir a los usuarios durante un \xFAnico d\xEDa." },
|
|
21
|
+
{ name: "_gat*", duration: "1 minuto", purpose: "Limitar el porcentaje de solicitudes a Google Analytics." }
|
|
22
|
+
],
|
|
23
|
+
storageKeys: ["_ga_*", "google_analytics_*"],
|
|
24
|
+
localStorage: ["_ga_*", "google_analytics_*"]
|
|
25
|
+
},
|
|
26
|
+
google_analytics: {
|
|
27
|
+
id: "google_analytics",
|
|
28
|
+
category: "analytics",
|
|
29
|
+
label: "Google Analytics (Universal / GA4)",
|
|
30
|
+
provider: "Google LLC",
|
|
31
|
+
description: "Medici\xF3n de visitas y estad\xEDsticas an\xF3nimas de tr\xE1fico web.",
|
|
32
|
+
policyUrl: "https://policies.google.com/privacy",
|
|
33
|
+
cookies: [
|
|
34
|
+
{ name: "_ga", duration: "2 a\xF1os", purpose: "Distinguir usuarios." },
|
|
35
|
+
{ name: "_ga_*", duration: "2 a\xF1os", purpose: "Estado de la sesi\xF3n GA4." },
|
|
36
|
+
{ name: "_gid", duration: "24 horas", purpose: "Identificador diario." }
|
|
37
|
+
],
|
|
38
|
+
storageKeys: ["_ga_*"]
|
|
39
|
+
},
|
|
40
|
+
posthog: {
|
|
41
|
+
id: "posthog",
|
|
42
|
+
category: "analytics",
|
|
43
|
+
label: "PostHog Analytics",
|
|
44
|
+
provider: "PostHog, Inc.",
|
|
45
|
+
description: "Anal\xEDtica de producto, registro de sesiones, mapas de ruta y embudos de interacci\xF3n.",
|
|
46
|
+
policyUrl: "https://posthog.com/privacy",
|
|
47
|
+
cookies: [
|
|
48
|
+
{ name: "ph_*_posthog", duration: "1 a\xF1o", purpose: "Persistencia de usuario e identificaci\xF3n de sesiones en PostHog." }
|
|
49
|
+
],
|
|
50
|
+
storageKeys: ["ph_*_posthog"],
|
|
51
|
+
localStorage: ["ph_*_posthog"],
|
|
52
|
+
sessionStorage: ["ph_*_posthog"]
|
|
53
|
+
},
|
|
54
|
+
hotjar: {
|
|
55
|
+
id: "hotjar",
|
|
56
|
+
category: "analytics",
|
|
57
|
+
label: "Hotjar Heatmaps & Feedback",
|
|
58
|
+
provider: "Hotjar Ltd.",
|
|
59
|
+
description: "Mapas de calor de clics, desplazamientos, grabaciones de comportamiento y encuestas.",
|
|
60
|
+
policyUrl: "https://www.hotjar.com/legal/policies/privacy/",
|
|
61
|
+
cookies: [
|
|
62
|
+
{ name: "_hjSession*", duration: "30 minutos", purpose: "Mantener los datos de la sesi\xF3n actual del usuario en Hotjar." },
|
|
63
|
+
{ name: "_hjSessionUser*", duration: "1 a\xF1o", purpose: "Mantener el ID de usuario an\xF3nimo en el navegador." },
|
|
64
|
+
{ name: "_hjIncludedIn*", duration: "Sesi\xF3n", purpose: "Determinar si el usuario est\xE1 incluido en el muestreo de datos." },
|
|
65
|
+
{ name: "_hjAbsoluteCanvasUrl", duration: "Sesi\xF3n", purpose: "Almacenar la URL can\xF3nica de visualizaci\xF3n." },
|
|
66
|
+
{ name: "_hjTLDTest", duration: "Sesi\xF3n", purpose: "Verificar el nivel de dominio para cookies." }
|
|
67
|
+
],
|
|
68
|
+
storageKeys: ["_hj*", "hj*"],
|
|
69
|
+
localStorage: ["_hj*"],
|
|
70
|
+
sessionStorage: ["_hj*"]
|
|
71
|
+
},
|
|
72
|
+
clarity: {
|
|
73
|
+
id: "clarity",
|
|
74
|
+
category: "analytics",
|
|
75
|
+
label: "Microsoft Clarity",
|
|
76
|
+
provider: "Microsoft Corporation",
|
|
77
|
+
description: "Grabaci\xF3n de navegaci\xF3n y mapas t\xE9rmicos de interacci\xF3n sin datos personales.",
|
|
78
|
+
policyUrl: "https://privacy.microsoft.com/privacystatement",
|
|
79
|
+
cookies: [
|
|
80
|
+
{ name: "_clck", duration: "1 a\xF1o", purpose: "Persistir el ID de usuario Clarity y sus preferencias de p\xE1gina." },
|
|
81
|
+
{ name: "_clsk", duration: "24 horas", purpose: "Conectar m\xFAltiples visitas de p\xE1gina en una \xFAnica sesi\xF3n." },
|
|
82
|
+
{ name: "CLID", duration: "1 a\xF1o", purpose: "Identificador de navegador para Clarity." },
|
|
83
|
+
{ name: "MUID", duration: "1 a\xF1o", purpose: "Identificador de usuario \xFAnico de Microsoft." }
|
|
84
|
+
],
|
|
85
|
+
storageKeys: ["_cl*"],
|
|
86
|
+
localStorage: ["_cl*"]
|
|
87
|
+
},
|
|
88
|
+
matomo: {
|
|
89
|
+
id: "matomo",
|
|
90
|
+
category: "analytics",
|
|
91
|
+
label: "Matomo Analytics",
|
|
92
|
+
provider: "InnoCraft Ltd.",
|
|
93
|
+
description: "Plataforma de anal\xEDtica web local-first y centrada en la privacidad.",
|
|
94
|
+
policyUrl: "https://matomo.org/privacy-policy/",
|
|
95
|
+
cookies: [
|
|
96
|
+
{ name: "_pk_id*", duration: "13 meses", purpose: "Almacenar datos de usuario \xFAnicos como el ID de visitante." },
|
|
97
|
+
{ name: "_pk_ses*", duration: "30 minutos", purpose: "Almacenar datos temporales de la sesi\xF3n de navegaci\xF3n." },
|
|
98
|
+
{ name: "_pk_ref*", duration: "6 meses", purpose: "Almacenar la informaci\xF3n de atribuci\xF3n de procedencia." }
|
|
99
|
+
],
|
|
100
|
+
storageKeys: ["_pk_*"],
|
|
101
|
+
localStorage: ["_pk_*"]
|
|
102
|
+
},
|
|
103
|
+
plausible: {
|
|
104
|
+
id: "plausible",
|
|
105
|
+
category: "analytics",
|
|
106
|
+
label: "Plausible Analytics",
|
|
107
|
+
provider: "Plausible Insights O\xDC",
|
|
108
|
+
description: "Anal\xEDtica web ligera y respetuosa con la privacidad, 100% libre de cookies.",
|
|
109
|
+
policyUrl: "https://plausible.io/data-policy",
|
|
110
|
+
cookies: [],
|
|
111
|
+
storageKeys: []
|
|
112
|
+
},
|
|
113
|
+
// --- MARKETING & ADVERTISING ---
|
|
114
|
+
meta_pixel: {
|
|
115
|
+
id: "meta_pixel",
|
|
116
|
+
category: "marketing",
|
|
117
|
+
label: "Meta Pixel (Facebook)",
|
|
118
|
+
provider: "Meta Platforms Ireland Ltd.",
|
|
119
|
+
description: "Medici\xF3n de conversiones, personalizaci\xF3n y optimizaci\xF3n de campa\xF1as publicitarias en Facebook e Instagram.",
|
|
120
|
+
policyUrl: "https://www.facebook.com/privacy/policy",
|
|
121
|
+
cookies: [
|
|
122
|
+
{ name: "_fbp", duration: "90 d\xEDas", purpose: "Almacenar y rastrear visitas en los sitios web para segmentaci\xF3n publicitaria." },
|
|
123
|
+
{ name: "_fbc", duration: "90 d\xEDas", purpose: "Guardar el \xFAltimo clic en un anuncio de Facebook (par\xE1metro fbclid)." },
|
|
124
|
+
{ name: "fr", duration: "90 d\xEDas", purpose: "Cookie de publicidad comportamental de Facebook." },
|
|
125
|
+
{ name: "tr", duration: "Sesi\xF3n", purpose: "P\xEDxel de seguimiento de eventos en tiempo real." },
|
|
126
|
+
{ name: "datr", duration: "2 a\xF1os", purpose: "Identificaci\xF3n del navegador web para seguridad y anal\xEDtica publicitaria." }
|
|
127
|
+
],
|
|
128
|
+
storageKeys: ["_fbp*"],
|
|
129
|
+
localStorage: ["_fbp*"]
|
|
130
|
+
},
|
|
131
|
+
facebook_pixel: {
|
|
132
|
+
id: "facebook_pixel",
|
|
133
|
+
category: "marketing",
|
|
134
|
+
label: "Meta Pixel (Facebook)",
|
|
135
|
+
provider: "Meta Platforms Ireland Ltd.",
|
|
136
|
+
description: "Medici\xF3n de conversiones y retargeting en Meta/Facebook.",
|
|
137
|
+
policyUrl: "https://www.facebook.com/privacy/policy",
|
|
138
|
+
cookies: [
|
|
139
|
+
{ name: "_fbp", duration: "90 d\xEDas", purpose: "Rastreo de conversiones y atribuci\xF3n de campa\xF1as." },
|
|
140
|
+
{ name: "_fbc", duration: "90 d\xEDas", purpose: "Identificador de clic de anuncio." }
|
|
141
|
+
],
|
|
142
|
+
storageKeys: ["_fbp*"]
|
|
143
|
+
},
|
|
144
|
+
google_ads: {
|
|
145
|
+
id: "google_ads",
|
|
146
|
+
category: "marketing",
|
|
147
|
+
label: "Google Ads & Remarketing",
|
|
148
|
+
provider: "Google LLC",
|
|
149
|
+
description: "Medici\xF3n de conversiones publicitarias y campa\xF1as de retargeting de Google Ads.",
|
|
150
|
+
policyUrl: "https://policies.google.com/technologies/ads",
|
|
151
|
+
cookies: [
|
|
152
|
+
{ name: "_gcl_au", duration: "90 d\xEDas", purpose: "Medici\xF3n de conversiones publicitarias de Google AdSense y Ads." },
|
|
153
|
+
{ name: "_gcl_aw", duration: "90 d\xEDas", purpose: "Conversiones procedentes de clics en anuncios de Google Ads." },
|
|
154
|
+
{ name: "IDE", duration: "1 a\xF1o", purpose: "Publicidad dirigida y medici\xF3n de rendimiento de DoubleClick." },
|
|
155
|
+
{ name: "DSID", duration: "2 semanas", purpose: "Identificar usuario conectado en sitios web ajenos a Google." },
|
|
156
|
+
{ name: "RUL", duration: "1 a\xF1o", purpose: "Audiencias de remarketing de Google Ads." }
|
|
157
|
+
],
|
|
158
|
+
storageKeys: ["_gcl_*"]
|
|
159
|
+
},
|
|
160
|
+
tiktok_pixel: {
|
|
161
|
+
id: "tiktok_pixel",
|
|
162
|
+
category: "marketing",
|
|
163
|
+
label: "TikTok Pixel",
|
|
164
|
+
provider: "TikTok Technology Limited",
|
|
165
|
+
description: "Medici\xF3n de rendimiento y segmentaci\xF3n de campa\xF1as publicitarias en TikTok.",
|
|
166
|
+
policyUrl: "https://www.tiktok.com/legal/privacy-policy-eea",
|
|
167
|
+
cookies: [
|
|
168
|
+
{ name: "_tt_enable_cookie", duration: "13 meses", purpose: "Habilitar la medici\xF3n de conversiones del p\xEDxel de TikTok." },
|
|
169
|
+
{ name: "_ttp", duration: "13 meses", purpose: "Medir y mejorar el rendimiento de las campa\xF1as publicitarias en TikTok." }
|
|
170
|
+
],
|
|
171
|
+
storageKeys: ["tt_*", "_ttp*"]
|
|
172
|
+
},
|
|
173
|
+
linkedin_insight: {
|
|
174
|
+
id: "linkedin_insight",
|
|
175
|
+
category: "marketing",
|
|
176
|
+
label: "LinkedIn Insight Tag",
|
|
177
|
+
provider: "LinkedIn Ireland Unlimited Company",
|
|
178
|
+
description: "Informes de conversiones y atribuci\xF3n de campa\xF1as profesionales B2B en LinkedIn.",
|
|
179
|
+
policyUrl: "https://www.linkedin.com/legal/privacy-policy",
|
|
180
|
+
cookies: [
|
|
181
|
+
{ name: "li_sugr", duration: "90 d\xEDas", purpose: "Identificador probabil\xEDstico de navegador en LinkedIn." },
|
|
182
|
+
{ name: "bcookie", duration: "1 a\xF1o", purpose: "Identificador de sesi\xF3n de navegador para servicios de LinkedIn." },
|
|
183
|
+
{ name: "lidc", duration: "24 horas", purpose: "Enrutamiento de centros de datos para LinkedIn." },
|
|
184
|
+
{ name: "UserMatchHistory", duration: "30 d\xEDas", purpose: "Sincronizaci\xF3n de identificadores de publicidad de LinkedIn." }
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
twitter_pixel: {
|
|
188
|
+
id: "twitter_pixel",
|
|
189
|
+
category: "marketing",
|
|
190
|
+
label: "X / Twitter Ads Pixel",
|
|
191
|
+
provider: "X Corp.",
|
|
192
|
+
description: "Medici\xF3n de conversiones e interacci\xF3n con campa\xF1as publicitarias en X (Twitter).",
|
|
193
|
+
policyUrl: "https://twitter.com/privacy",
|
|
194
|
+
cookies: [
|
|
195
|
+
{ name: "personalization_id", duration: "2 a\xF1os", purpose: "Personalizaci\xF3n de publicidad y medici\xF3n de eventos en X." },
|
|
196
|
+
{ name: "muc_ads", duration: "2 a\xF1os", purpose: "Seguimiento de conversiones publicitarias en X." }
|
|
197
|
+
]
|
|
198
|
+
},
|
|
199
|
+
hubspot: {
|
|
200
|
+
id: "hubspot",
|
|
201
|
+
category: "marketing",
|
|
202
|
+
label: "HubSpot CRM & Tracking",
|
|
203
|
+
provider: "HubSpot, Inc.",
|
|
204
|
+
description: "Anal\xEDtica de leads, formularios inteligentes y seguimiento de clientes potenciales.",
|
|
205
|
+
policyUrl: "https://legal.hubspot.com/privacy-policy",
|
|
206
|
+
cookies: [
|
|
207
|
+
{ name: "__hstc", duration: "6 meses", purpose: "Rastreo de visitantes \xFAnicos, sesiones y marcas de tiempo." },
|
|
208
|
+
{ name: "hubspotutk", duration: "6 meses", purpose: "Rastreo de identidad de visitante pasado a formularios." },
|
|
209
|
+
{ name: "__hssc", duration: "30 minutos", purpose: "Rastreo de sesiones activas en HubSpot." },
|
|
210
|
+
{ name: "__hssrc", duration: "Sesi\xF3n", purpose: "Determinar si el usuario ha reiniciado su navegador." }
|
|
211
|
+
],
|
|
212
|
+
storageKeys: ["__hs*", "hubspot*"]
|
|
213
|
+
},
|
|
214
|
+
// --- EMBEDDED MEDIA ---
|
|
215
|
+
youtube: {
|
|
216
|
+
id: "youtube",
|
|
217
|
+
category: "marketing",
|
|
218
|
+
label: "YouTube Video Player",
|
|
219
|
+
provider: "Google LLC",
|
|
220
|
+
description: "Reproducci\xF3n de contenidos de v\xEDdeo integrados y almacenamiento de preferencias del reproductor.",
|
|
221
|
+
policyUrl: "https://policies.google.com/privacy",
|
|
222
|
+
cookies: [
|
|
223
|
+
{ name: "VISITOR_INFO1_LIVE", duration: "6 meses", purpose: "Estimar el ancho de banda del usuario en p\xE1ginas con v\xEDdeos de YouTube." },
|
|
224
|
+
{ name: "YSC", duration: "Sesi\xF3n", purpose: "Registrar estad\xEDsticas de visualizaciones de v\xEDdeo de YouTube." },
|
|
225
|
+
{ name: "PREF", duration: "8 meses", purpose: "Almacenar preferencias de configuraci\xF3n del reproductor." },
|
|
226
|
+
{ name: "GPS", duration: "30 minutos", purpose: "Rastrear ubicaci\xF3n en dispositivos m\xF3viles." }
|
|
227
|
+
],
|
|
228
|
+
storageKeys: ["yt-*", "yt-remote-*"],
|
|
229
|
+
localStorage: ["yt-*", "yt-remote-*"]
|
|
230
|
+
},
|
|
231
|
+
vimeo: {
|
|
232
|
+
id: "vimeo",
|
|
233
|
+
category: "marketing",
|
|
234
|
+
label: "Vimeo Video Player",
|
|
235
|
+
provider: "Vimeo, Inc.",
|
|
236
|
+
description: "Reproducci\xF3n de v\xEDdeos interactivos alojados en Vimeo y estad\xEDsticas de visualizaci\xF3n.",
|
|
237
|
+
policyUrl: "https://vimeo.com/privacy",
|
|
238
|
+
cookies: [
|
|
239
|
+
{ name: "vuid", duration: "2 a\xF1os", purpose: "Almacenar el historial de reproducciones de v\xEDdeo del usuario en Vimeo." },
|
|
240
|
+
{ name: "player", duration: "1 a\xF1o", purpose: "Guardar las preferencias de volumen y resoluci\xF3n del reproductor." }
|
|
241
|
+
],
|
|
242
|
+
storageKeys: ["vimeo*"]
|
|
243
|
+
},
|
|
244
|
+
spotify: {
|
|
245
|
+
id: "spotify",
|
|
246
|
+
category: "marketing",
|
|
247
|
+
label: "Spotify Player",
|
|
248
|
+
provider: "Spotify AB",
|
|
249
|
+
description: "Reproducci\xF3n embebida de canciones, podcasts y listas de reproducci\xF3n de Spotify.",
|
|
250
|
+
policyUrl: "https://www.spotify.com/legal/privacy-policy/",
|
|
251
|
+
cookies: [
|
|
252
|
+
{ name: "sp_t", duration: "1 a\xF1o", purpose: "Identificador de usuario \xFAnico de Spotify para contenido embebido." },
|
|
253
|
+
{ name: "sp_m", duration: "1 a\xF1o", purpose: "Preferencias de reproducci\xF3n y cookies de sesi\xF3n." }
|
|
254
|
+
]
|
|
255
|
+
},
|
|
256
|
+
// --- CHAT & CUSTOMER SUPPORT ---
|
|
257
|
+
intercom: {
|
|
258
|
+
id: "intercom",
|
|
259
|
+
category: "marketing",
|
|
260
|
+
label: "Intercom Messenger",
|
|
261
|
+
provider: "Intercom R&D Unlimited Company",
|
|
262
|
+
description: "Widget de mensajer\xEDa, soporte al cliente en tiempo real y asistencia guiada.",
|
|
263
|
+
policyUrl: "https://www.intercom.com/legal/privacy",
|
|
264
|
+
cookies: [
|
|
265
|
+
{ name: "intercom-id-*", duration: "9 meses", purpose: "Identificador an\xF3nimo de visitante para conversaciones en Intercom." },
|
|
266
|
+
{ name: "intercom-session-*", duration: "7 d\xEDas", purpose: "Persistir la sesi\xF3n de chat activa." },
|
|
267
|
+
{ name: "intercom-device-id-*", duration: "9 meses", purpose: "Identificador del dispositivo del visitante." }
|
|
268
|
+
],
|
|
269
|
+
storageKeys: ["intercom*"]
|
|
270
|
+
},
|
|
271
|
+
crisp: {
|
|
272
|
+
id: "crisp",
|
|
273
|
+
category: "marketing",
|
|
274
|
+
label: "Crisp Live Chat",
|
|
275
|
+
provider: "Crisp IM SARL",
|
|
276
|
+
description: "Chat en vivo de soporte y mensajer\xEDa multicanal para visitantes.",
|
|
277
|
+
policyUrl: "https://crisp.chat/privacy",
|
|
278
|
+
cookies: [
|
|
279
|
+
{ name: "crisp-client/*", duration: "6 meses", purpose: "Identificador de sesi\xF3n de chat en Crisp." }
|
|
280
|
+
],
|
|
281
|
+
storageKeys: ["crisp-client*"]
|
|
282
|
+
},
|
|
283
|
+
// --- NECESSARY / TECHNICAL / SECURITY ---
|
|
284
|
+
gtm: {
|
|
285
|
+
id: "gtm",
|
|
286
|
+
category: "necessary",
|
|
287
|
+
label: "Google Tag Manager",
|
|
288
|
+
provider: "Google LLC",
|
|
289
|
+
description: "Contenedor t\xE9cnico para la inyecci\xF3n y gesti\xF3n centralizada de scripts del sitio web.",
|
|
290
|
+
policyUrl: "https://policies.google.com/privacy",
|
|
291
|
+
cookies: [
|
|
292
|
+
{ name: "_gtm_*", duration: "Sesi\xF3n", purpose: "Depuraci\xF3n t\xE9cnica de contenedores de Google Tag Manager." }
|
|
293
|
+
]
|
|
294
|
+
},
|
|
295
|
+
google_recaptcha: {
|
|
296
|
+
id: "google_recaptcha",
|
|
297
|
+
category: "necessary",
|
|
298
|
+
label: "Google reCAPTCHA",
|
|
299
|
+
provider: "Google LLC",
|
|
300
|
+
description: "Protecci\xF3n contra bots automatizados, ataques de fuerza bruta y spam en formularios.",
|
|
301
|
+
policyUrl: "https://policies.google.com/privacy",
|
|
302
|
+
cookies: [
|
|
303
|
+
{ name: "_GRECAPTCHA", duration: "6 meses", purpose: "Evaluaci\xF3n de riesgo de bots para protecci\xF3n de formularios." },
|
|
304
|
+
{ name: "rc::a", duration: "Persistente", purpose: "Distinguir entre humanos y bots automatizados." },
|
|
305
|
+
{ name: "rc::b", duration: "Sesi\xF3n", purpose: "Distinguir entre humanos y bots automatizados." },
|
|
306
|
+
{ name: "rc::c", duration: "Sesi\xF3n", purpose: "Distinguir entre humanos y bots automatizados." }
|
|
307
|
+
]
|
|
308
|
+
},
|
|
309
|
+
cloudflare: {
|
|
310
|
+
id: "cloudflare",
|
|
311
|
+
category: "necessary",
|
|
312
|
+
label: "Cloudflare Security & Turnstile",
|
|
313
|
+
provider: "Cloudflare, Inc.",
|
|
314
|
+
description: "Mitigaci\xF3n de ataques DDoS, balanceo de carga CDN y validaci\xF3n de seguridad Turnstile.",
|
|
315
|
+
policyUrl: "https://www.cloudflare.com/privacypolicy/",
|
|
316
|
+
cookies: [
|
|
317
|
+
{ name: "__cf_bm", duration: "30 minutos", purpose: "Gesti\xF3n de bots y mitigaci\xF3n de tr\xE1fico malicioso en Cloudflare." },
|
|
318
|
+
{ name: "cf_clearance", duration: "1 a\xF1o", purpose: "Autorizaci\xF3n de paso tras superar desaf\xEDo de seguridad Turnstile/Cloudflare." }
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
stripe: {
|
|
322
|
+
id: "stripe",
|
|
323
|
+
category: "necessary",
|
|
324
|
+
label: "Stripe Payments & Fraud Prevention",
|
|
325
|
+
provider: "Stripe, Inc.",
|
|
326
|
+
description: "Procesamiento seguro de transacciones bancarias, tarjetas y prevenci\xF3n de fraude financiero.",
|
|
327
|
+
policyUrl: "https://stripe.com/privacy",
|
|
328
|
+
cookies: [
|
|
329
|
+
{ name: "__stripe_mid", duration: "1 a\xF1o", purpose: "Prevenci\xF3n de fraude y autenticaci\xF3n de pagos en Stripe." },
|
|
330
|
+
{ name: "__stripe_sid", duration: "30 minutos", purpose: "Identificador de sesi\xF3n de transacci\xF3n en Stripe." },
|
|
331
|
+
{ name: "m", duration: "2 a\xF1os", purpose: "Detecci\xF3n de fraude financiero en la pasarela de pagos Stripe." }
|
|
332
|
+
],
|
|
333
|
+
storageKeys: ["__stripe_*"],
|
|
334
|
+
localStorage: ["__stripe_*"]
|
|
335
|
+
},
|
|
336
|
+
paypal: {
|
|
337
|
+
id: "paypal",
|
|
338
|
+
category: "necessary",
|
|
339
|
+
label: "PayPal Checkout",
|
|
340
|
+
provider: "PayPal (Europe) S.\xE0 r.l. et Cie, S.C.A.",
|
|
341
|
+
description: "Procesamiento de pagos y pasarela de cobro segura de PayPal.",
|
|
342
|
+
policyUrl: "https://www.paypal.com/webapps/mpp/ua/privacy-full",
|
|
343
|
+
cookies: [
|
|
344
|
+
{ name: "ts", duration: "3 a\xF1os", purpose: "Gesti\xF3n segura de pagos y prevenci\xF3n de fraude en PayPal." },
|
|
345
|
+
{ name: "ts_c", duration: "3 a\xF1os", purpose: "Autenticaci\xF3n segura de usuario en la pasarela PayPal." }
|
|
346
|
+
]
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
// src/presets/index.ts
|
|
351
|
+
function hasPreset(presetId) {
|
|
352
|
+
return Object.prototype.hasOwnProperty.call(SERVICE_PRESETS, presetId);
|
|
353
|
+
}
|
|
354
|
+
function getPreset(presetId, overrides) {
|
|
355
|
+
const preset = SERVICE_PRESETS[presetId];
|
|
356
|
+
if (!preset) {
|
|
357
|
+
throw new Error(
|
|
358
|
+
`[ConsentSDK] Unknown service preset: '${presetId}'. Available presets: ${Object.keys(
|
|
359
|
+
SERVICE_PRESETS
|
|
360
|
+
).join(", ")}`
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
const base = {
|
|
364
|
+
category: preset.category,
|
|
365
|
+
label: preset.label,
|
|
366
|
+
provider: preset.provider,
|
|
367
|
+
policyUrl: preset.policyUrl,
|
|
368
|
+
description: preset.description,
|
|
369
|
+
cookies: preset.cookies ? [...preset.cookies] : void 0,
|
|
370
|
+
storageKeys: preset.storageKeys ? [...preset.storageKeys] : void 0,
|
|
371
|
+
localStorage: preset.localStorage ? [...preset.localStorage] : void 0,
|
|
372
|
+
sessionStorage: preset.sessionStorage ? [...preset.sessionStorage] : void 0
|
|
373
|
+
};
|
|
374
|
+
if (!overrides) {
|
|
375
|
+
return base;
|
|
376
|
+
}
|
|
377
|
+
return __spreadProps(__spreadValues(__spreadValues({}, base), overrides), {
|
|
378
|
+
cookies: overrides.cookies || base.cookies,
|
|
379
|
+
storageKeys: overrides.storageKeys || base.storageKeys,
|
|
380
|
+
localStorage: overrides.localStorage || base.localStorage,
|
|
381
|
+
sessionStorage: overrides.sessionStorage || base.sessionStorage
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
function defineServices(definitions) {
|
|
385
|
+
const result = {};
|
|
386
|
+
for (const [key, def] of Object.entries(definitions)) {
|
|
387
|
+
if (typeof def === "string") {
|
|
388
|
+
result[key] = getPreset(def);
|
|
389
|
+
} else if (def && typeof def === "object") {
|
|
390
|
+
if (def.preset) {
|
|
391
|
+
const _a = def, { preset } = _a, overrides = __objRest(_a, ["preset"]);
|
|
392
|
+
result[key] = getPreset(preset, overrides);
|
|
393
|
+
} else if (hasPreset(key)) {
|
|
394
|
+
result[key] = getPreset(key, def);
|
|
395
|
+
} else {
|
|
396
|
+
result[key] = def;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return result;
|
|
401
|
+
}
|
|
402
|
+
function resolveConfigPresets(config) {
|
|
403
|
+
if (!config || !config.services || typeof config.services !== "object") {
|
|
404
|
+
return config;
|
|
405
|
+
}
|
|
406
|
+
const hydratedServices = {};
|
|
407
|
+
for (const [serviceKey, serviceDef] of Object.entries(config.services)) {
|
|
408
|
+
if (!serviceDef || typeof serviceDef !== "object") {
|
|
409
|
+
hydratedServices[serviceKey] = serviceDef;
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
const presetName = serviceDef.preset || (hasPreset(serviceKey) && !serviceDef.category ? serviceKey : void 0);
|
|
413
|
+
if (presetName && hasPreset(presetName)) {
|
|
414
|
+
const preset = SERVICE_PRESETS[presetName];
|
|
415
|
+
hydratedServices[serviceKey] = __spreadValues({
|
|
416
|
+
category: serviceDef.category || preset.category,
|
|
417
|
+
label: serviceDef.label || preset.label,
|
|
418
|
+
provider: serviceDef.provider || preset.provider,
|
|
419
|
+
policyUrl: serviceDef.policyUrl || preset.policyUrl,
|
|
420
|
+
description: serviceDef.description || preset.description,
|
|
421
|
+
cookies: serviceDef.cookies || (preset.cookies ? [...preset.cookies] : void 0),
|
|
422
|
+
storageKeys: serviceDef.storageKeys || (preset.storageKeys ? [...preset.storageKeys] : void 0),
|
|
423
|
+
localStorage: serviceDef.localStorage || (preset.localStorage ? [...preset.localStorage] : void 0),
|
|
424
|
+
sessionStorage: serviceDef.sessionStorage || (preset.sessionStorage ? [...preset.sessionStorage] : void 0)
|
|
425
|
+
}, serviceDef);
|
|
426
|
+
} else {
|
|
427
|
+
hydratedServices[serviceKey] = serviceDef;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return __spreadProps(__spreadValues({}, config), {
|
|
431
|
+
services: hydratedServices
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
export {
|
|
436
|
+
SERVICE_PRESETS,
|
|
437
|
+
hasPreset,
|
|
438
|
+
getPreset,
|
|
439
|
+
defineServices,
|
|
440
|
+
resolveConfigPresets
|
|
441
|
+
};
|
|
442
|
+
//# sourceMappingURL=chunk-OHOHIAK6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/presets/presets-catalog.ts","../src/presets/index.ts"],"sourcesContent":["import type { ServicePreset } from \"../core/types.js\";\n\n/**\n * Built-in service presets for common analytics, marketing, media, payments, and security tools.\n * Compliant with AEPD / GDPR / LSSI standards with pre-configured cookie names, storage keys,\n * providers, and default categories.\n */\nexport const SERVICE_PRESETS: Record<string, ServicePreset> = {\n // --- ANALYTICS ---\n ga4: {\n id: \"ga4\",\n category: \"analytics\",\n label: \"Google Analytics 4\",\n provider: \"Google LLC\",\n description: \"Medición de visitas, páginas vistas, eventos y comportamiento de navegación del usuario.\",\n policyUrl: \"https://policies.google.com/privacy\",\n cookies: [\n { name: \"_ga\", duration: \"2 años\", purpose: \"Distinguir a los usuarios únicos en el sitio web.\" },\n { name: \"_ga_*\", duration: \"2 años\", purpose: \"Mantener el estado de la sesión de Google Analytics 4.\" },\n { name: \"_gid\", duration: \"24 horas\", purpose: \"Distinguir a los usuarios durante un único día.\" },\n { name: \"_gat*\", duration: \"1 minuto\", purpose: \"Limitar el porcentaje de solicitudes a Google Analytics.\" },\n ],\n storageKeys: [\"_ga_*\", \"google_analytics_*\"],\n localStorage: [\"_ga_*\", \"google_analytics_*\"],\n },\n google_analytics: {\n id: \"google_analytics\",\n category: \"analytics\",\n label: \"Google Analytics (Universal / GA4)\",\n provider: \"Google LLC\",\n description: \"Medición de visitas y estadísticas anónimas de tráfico web.\",\n policyUrl: \"https://policies.google.com/privacy\",\n cookies: [\n { name: \"_ga\", duration: \"2 años\", purpose: \"Distinguir usuarios.\" },\n { name: \"_ga_*\", duration: \"2 años\", purpose: \"Estado de la sesión GA4.\" },\n { name: \"_gid\", duration: \"24 horas\", purpose: \"Identificador diario.\" },\n ],\n storageKeys: [\"_ga_*\"],\n },\n posthog: {\n id: \"posthog\",\n category: \"analytics\",\n label: \"PostHog Analytics\",\n provider: \"PostHog, Inc.\",\n description: \"Analítica de producto, registro de sesiones, mapas de ruta y embudos de interacción.\",\n policyUrl: \"https://posthog.com/privacy\",\n cookies: [\n { name: \"ph_*_posthog\", duration: \"1 año\", purpose: \"Persistencia de usuario e identificación de sesiones en PostHog.\" },\n ],\n storageKeys: [\"ph_*_posthog\"],\n localStorage: [\"ph_*_posthog\"],\n sessionStorage: [\"ph_*_posthog\"],\n },\n hotjar: {\n id: \"hotjar\",\n category: \"analytics\",\n label: \"Hotjar Heatmaps & Feedback\",\n provider: \"Hotjar Ltd.\",\n description: \"Mapas de calor de clics, desplazamientos, grabaciones de comportamiento y encuestas.\",\n policyUrl: \"https://www.hotjar.com/legal/policies/privacy/\",\n cookies: [\n { name: \"_hjSession*\", duration: \"30 minutos\", purpose: \"Mantener los datos de la sesión actual del usuario en Hotjar.\" },\n { name: \"_hjSessionUser*\", duration: \"1 año\", purpose: \"Mantener el ID de usuario anónimo en el navegador.\" },\n { name: \"_hjIncludedIn*\", duration: \"Sesión\", purpose: \"Determinar si el usuario está incluido en el muestreo de datos.\" },\n { name: \"_hjAbsoluteCanvasUrl\", duration: \"Sesión\", purpose: \"Almacenar la URL canónica de visualización.\" },\n { name: \"_hjTLDTest\", duration: \"Sesión\", purpose: \"Verificar el nivel de dominio para cookies.\" },\n ],\n storageKeys: [\"_hj*\", \"hj*\"],\n localStorage: [\"_hj*\"],\n sessionStorage: [\"_hj*\"],\n },\n clarity: {\n id: \"clarity\",\n category: \"analytics\",\n label: \"Microsoft Clarity\",\n provider: \"Microsoft Corporation\",\n description: \"Grabación de navegación y mapas térmicos de interacción sin datos personales.\",\n policyUrl: \"https://privacy.microsoft.com/privacystatement\",\n cookies: [\n { name: \"_clck\", duration: \"1 año\", purpose: \"Persistir el ID de usuario Clarity y sus preferencias de página.\" },\n { name: \"_clsk\", duration: \"24 horas\", purpose: \"Conectar múltiples visitas de página en una única sesión.\" },\n { name: \"CLID\", duration: \"1 año\", purpose: \"Identificador de navegador para Clarity.\" },\n { name: \"MUID\", duration: \"1 año\", purpose: \"Identificador de usuario único de Microsoft.\" },\n ],\n storageKeys: [\"_cl*\"],\n localStorage: [\"_cl*\"],\n },\n matomo: {\n id: \"matomo\",\n category: \"analytics\",\n label: \"Matomo Analytics\",\n provider: \"InnoCraft Ltd.\",\n description: \"Plataforma de analítica web local-first y centrada en la privacidad.\",\n policyUrl: \"https://matomo.org/privacy-policy/\",\n cookies: [\n { name: \"_pk_id*\", duration: \"13 meses\", purpose: \"Almacenar datos de usuario únicos como el ID de visitante.\" },\n { name: \"_pk_ses*\", duration: \"30 minutos\", purpose: \"Almacenar datos temporales de la sesión de navegación.\" },\n { name: \"_pk_ref*\", duration: \"6 meses\", purpose: \"Almacenar la información de atribución de procedencia.\" },\n ],\n storageKeys: [\"_pk_*\"],\n localStorage: [\"_pk_*\"],\n },\n plausible: {\n id: \"plausible\",\n category: \"analytics\",\n label: \"Plausible Analytics\",\n provider: \"Plausible Insights OÜ\",\n description: \"Analítica web ligera y respetuosa con la privacidad, 100% libre de cookies.\",\n policyUrl: \"https://plausible.io/data-policy\",\n cookies: [],\n storageKeys: [],\n },\n\n // --- MARKETING & ADVERTISING ---\n meta_pixel: {\n id: \"meta_pixel\",\n category: \"marketing\",\n label: \"Meta Pixel (Facebook)\",\n provider: \"Meta Platforms Ireland Ltd.\",\n description: \"Medición de conversiones, personalización y optimización de campañas publicitarias en Facebook e Instagram.\",\n policyUrl: \"https://www.facebook.com/privacy/policy\",\n cookies: [\n { name: \"_fbp\", duration: \"90 días\", purpose: \"Almacenar y rastrear visitas en los sitios web para segmentación publicitaria.\" },\n { name: \"_fbc\", duration: \"90 días\", purpose: \"Guardar el último clic en un anuncio de Facebook (parámetro fbclid).\" },\n { name: \"fr\", duration: \"90 días\", purpose: \"Cookie de publicidad comportamental de Facebook.\" },\n { name: \"tr\", duration: \"Sesión\", purpose: \"Píxel de seguimiento de eventos en tiempo real.\" },\n { name: \"datr\", duration: \"2 años\", purpose: \"Identificación del navegador web para seguridad y analítica publicitaria.\" },\n ],\n storageKeys: [\"_fbp*\"],\n localStorage: [\"_fbp*\"],\n },\n facebook_pixel: {\n id: \"facebook_pixel\",\n category: \"marketing\",\n label: \"Meta Pixel (Facebook)\",\n provider: \"Meta Platforms Ireland Ltd.\",\n description: \"Medición de conversiones y retargeting en Meta/Facebook.\",\n policyUrl: \"https://www.facebook.com/privacy/policy\",\n cookies: [\n { name: \"_fbp\", duration: \"90 días\", purpose: \"Rastreo de conversiones y atribución de campañas.\" },\n { name: \"_fbc\", duration: \"90 días\", purpose: \"Identificador de clic de anuncio.\" },\n ],\n storageKeys: [\"_fbp*\"],\n },\n google_ads: {\n id: \"google_ads\",\n category: \"marketing\",\n label: \"Google Ads & Remarketing\",\n provider: \"Google LLC\",\n description: \"Medición de conversiones publicitarias y campañas de retargeting de Google Ads.\",\n policyUrl: \"https://policies.google.com/technologies/ads\",\n cookies: [\n { name: \"_gcl_au\", duration: \"90 días\", purpose: \"Medición de conversiones publicitarias de Google AdSense y Ads.\" },\n { name: \"_gcl_aw\", duration: \"90 días\", purpose: \"Conversiones procedentes de clics en anuncios de Google Ads.\" },\n { name: \"IDE\", duration: \"1 año\", purpose: \"Publicidad dirigida y medición de rendimiento de DoubleClick.\" },\n { name: \"DSID\", duration: \"2 semanas\", purpose: \"Identificar usuario conectado en sitios web ajenos a Google.\" },\n { name: \"RUL\", duration: \"1 año\", purpose: \"Audiencias de remarketing de Google Ads.\" },\n ],\n storageKeys: [\"_gcl_*\"],\n },\n tiktok_pixel: {\n id: \"tiktok_pixel\",\n category: \"marketing\",\n label: \"TikTok Pixel\",\n provider: \"TikTok Technology Limited\",\n description: \"Medición de rendimiento y segmentación de campañas publicitarias en TikTok.\",\n policyUrl: \"https://www.tiktok.com/legal/privacy-policy-eea\",\n cookies: [\n { name: \"_tt_enable_cookie\", duration: \"13 meses\", purpose: \"Habilitar la medición de conversiones del píxel de TikTok.\" },\n { name: \"_ttp\", duration: \"13 meses\", purpose: \"Medir y mejorar el rendimiento de las campañas publicitarias en TikTok.\" },\n ],\n storageKeys: [\"tt_*\", \"_ttp*\"],\n },\n linkedin_insight: {\n id: \"linkedin_insight\",\n category: \"marketing\",\n label: \"LinkedIn Insight Tag\",\n provider: \"LinkedIn Ireland Unlimited Company\",\n description: \"Informes de conversiones y atribución de campañas profesionales B2B en LinkedIn.\",\n policyUrl: \"https://www.linkedin.com/legal/privacy-policy\",\n cookies: [\n { name: \"li_sugr\", duration: \"90 días\", purpose: \"Identificador probabilístico de navegador en LinkedIn.\" },\n { name: \"bcookie\", duration: \"1 año\", purpose: \"Identificador de sesión de navegador para servicios de LinkedIn.\" },\n { name: \"lidc\", duration: \"24 horas\", purpose: \"Enrutamiento de centros de datos para LinkedIn.\" },\n { name: \"UserMatchHistory\", duration: \"30 días\", purpose: \"Sincronización de identificadores de publicidad de LinkedIn.\" },\n ],\n },\n twitter_pixel: {\n id: \"twitter_pixel\",\n category: \"marketing\",\n label: \"X / Twitter Ads Pixel\",\n provider: \"X Corp.\",\n description: \"Medición de conversiones e interacción con campañas publicitarias en X (Twitter).\",\n policyUrl: \"https://twitter.com/privacy\",\n cookies: [\n { name: \"personalization_id\", duration: \"2 años\", purpose: \"Personalización de publicidad y medición de eventos en X.\" },\n { name: \"muc_ads\", duration: \"2 años\", purpose: \"Seguimiento de conversiones publicitarias en X.\" },\n ],\n },\n hubspot: {\n id: \"hubspot\",\n category: \"marketing\",\n label: \"HubSpot CRM & Tracking\",\n provider: \"HubSpot, Inc.\",\n description: \"Analítica de leads, formularios inteligentes y seguimiento de clientes potenciales.\",\n policyUrl: \"https://legal.hubspot.com/privacy-policy\",\n cookies: [\n { name: \"__hstc\", duration: \"6 meses\", purpose: \"Rastreo de visitantes únicos, sesiones y marcas de tiempo.\" },\n { name: \"hubspotutk\", duration: \"6 meses\", purpose: \"Rastreo de identidad de visitante pasado a formularios.\" },\n { name: \"__hssc\", duration: \"30 minutos\", purpose: \"Rastreo de sesiones activas en HubSpot.\" },\n { name: \"__hssrc\", duration: \"Sesión\", purpose: \"Determinar si el usuario ha reiniciado su navegador.\" },\n ],\n storageKeys: [\"__hs*\", \"hubspot*\"],\n },\n\n // --- EMBEDDED MEDIA ---\n youtube: {\n id: \"youtube\",\n category: \"marketing\",\n label: \"YouTube Video Player\",\n provider: \"Google LLC\",\n description: \"Reproducción de contenidos de vídeo integrados y almacenamiento de preferencias del reproductor.\",\n policyUrl: \"https://policies.google.com/privacy\",\n cookies: [\n { name: \"VISITOR_INFO1_LIVE\", duration: \"6 meses\", purpose: \"Estimar el ancho de banda del usuario en páginas con vídeos de YouTube.\" },\n { name: \"YSC\", duration: \"Sesión\", purpose: \"Registrar estadísticas de visualizaciones de vídeo de YouTube.\" },\n { name: \"PREF\", duration: \"8 meses\", purpose: \"Almacenar preferencias de configuración del reproductor.\" },\n { name: \"GPS\", duration: \"30 minutos\", purpose: \"Rastrear ubicación en dispositivos móviles.\" },\n ],\n storageKeys: [\"yt-*\", \"yt-remote-*\"],\n localStorage: [\"yt-*\", \"yt-remote-*\"],\n },\n vimeo: {\n id: \"vimeo\",\n category: \"marketing\",\n label: \"Vimeo Video Player\",\n provider: \"Vimeo, Inc.\",\n description: \"Reproducción de vídeos interactivos alojados en Vimeo y estadísticas de visualización.\",\n policyUrl: \"https://vimeo.com/privacy\",\n cookies: [\n { name: \"vuid\", duration: \"2 años\", purpose: \"Almacenar el historial de reproducciones de vídeo del usuario en Vimeo.\" },\n { name: \"player\", duration: \"1 año\", purpose: \"Guardar las preferencias de volumen y resolución del reproductor.\" },\n ],\n storageKeys: [\"vimeo*\"],\n },\n spotify: {\n id: \"spotify\",\n category: \"marketing\",\n label: \"Spotify Player\",\n provider: \"Spotify AB\",\n description: \"Reproducción embebida de canciones, podcasts y listas de reproducción de Spotify.\",\n policyUrl: \"https://www.spotify.com/legal/privacy-policy/\",\n cookies: [\n { name: \"sp_t\", duration: \"1 año\", purpose: \"Identificador de usuario único de Spotify para contenido embebido.\" },\n { name: \"sp_m\", duration: \"1 año\", purpose: \"Preferencias de reproducción y cookies de sesión.\" },\n ],\n },\n\n // --- CHAT & CUSTOMER SUPPORT ---\n intercom: {\n id: \"intercom\",\n category: \"marketing\",\n label: \"Intercom Messenger\",\n provider: \"Intercom R&D Unlimited Company\",\n description: \"Widget de mensajería, soporte al cliente en tiempo real y asistencia guiada.\",\n policyUrl: \"https://www.intercom.com/legal/privacy\",\n cookies: [\n { name: \"intercom-id-*\", duration: \"9 meses\", purpose: \"Identificador anónimo de visitante para conversaciones en Intercom.\" },\n { name: \"intercom-session-*\", duration: \"7 días\", purpose: \"Persistir la sesión de chat activa.\" },\n { name: \"intercom-device-id-*\", duration: \"9 meses\", purpose: \"Identificador del dispositivo del visitante.\" },\n ],\n storageKeys: [\"intercom*\"],\n },\n crisp: {\n id: \"crisp\",\n category: \"marketing\",\n label: \"Crisp Live Chat\",\n provider: \"Crisp IM SARL\",\n description: \"Chat en vivo de soporte y mensajería multicanal para visitantes.\",\n policyUrl: \"https://crisp.chat/privacy\",\n cookies: [\n { name: \"crisp-client/*\", duration: \"6 meses\", purpose: \"Identificador de sesión de chat en Crisp.\" },\n ],\n storageKeys: [\"crisp-client*\"],\n },\n\n // --- NECESSARY / TECHNICAL / SECURITY ---\n gtm: {\n id: \"gtm\",\n category: \"necessary\",\n label: \"Google Tag Manager\",\n provider: \"Google LLC\",\n description: \"Contenedor técnico para la inyección y gestión centralizada de scripts del sitio web.\",\n policyUrl: \"https://policies.google.com/privacy\",\n cookies: [\n { name: \"_gtm_*\", duration: \"Sesión\", purpose: \"Depuración técnica de contenedores de Google Tag Manager.\" },\n ],\n },\n google_recaptcha: {\n id: \"google_recaptcha\",\n category: \"necessary\",\n label: \"Google reCAPTCHA\",\n provider: \"Google LLC\",\n description: \"Protección contra bots automatizados, ataques de fuerza bruta y spam en formularios.\",\n policyUrl: \"https://policies.google.com/privacy\",\n cookies: [\n { name: \"_GRECAPTCHA\", duration: \"6 meses\", purpose: \"Evaluación de riesgo de bots para protección de formularios.\" },\n { name: \"rc::a\", duration: \"Persistente\", purpose: \"Distinguir entre humanos y bots automatizados.\" },\n { name: \"rc::b\", duration: \"Sesión\", purpose: \"Distinguir entre humanos y bots automatizados.\" },\n { name: \"rc::c\", duration: \"Sesión\", purpose: \"Distinguir entre humanos y bots automatizados.\" },\n ],\n },\n cloudflare: {\n id: \"cloudflare\",\n category: \"necessary\",\n label: \"Cloudflare Security & Turnstile\",\n provider: \"Cloudflare, Inc.\",\n description: \"Mitigación de ataques DDoS, balanceo de carga CDN y validación de seguridad Turnstile.\",\n policyUrl: \"https://www.cloudflare.com/privacypolicy/\",\n cookies: [\n { name: \"__cf_bm\", duration: \"30 minutos\", purpose: \"Gestión de bots y mitigación de tráfico malicioso en Cloudflare.\" },\n { name: \"cf_clearance\", duration: \"1 año\", purpose: \"Autorización de paso tras superar desafío de seguridad Turnstile/Cloudflare.\" },\n ],\n },\n stripe: {\n id: \"stripe\",\n category: \"necessary\",\n label: \"Stripe Payments & Fraud Prevention\",\n provider: \"Stripe, Inc.\",\n description: \"Procesamiento seguro de transacciones bancarias, tarjetas y prevención de fraude financiero.\",\n policyUrl: \"https://stripe.com/privacy\",\n cookies: [\n { name: \"__stripe_mid\", duration: \"1 año\", purpose: \"Prevención de fraude y autenticación de pagos en Stripe.\" },\n { name: \"__stripe_sid\", duration: \"30 minutos\", purpose: \"Identificador de sesión de transacción en Stripe.\" },\n { name: \"m\", duration: \"2 años\", purpose: \"Detección de fraude financiero en la pasarela de pagos Stripe.\" },\n ],\n storageKeys: [\"__stripe_*\"],\n localStorage: [\"__stripe_*\"],\n },\n paypal: {\n id: \"paypal\",\n category: \"necessary\",\n label: \"PayPal Checkout\",\n provider: \"PayPal (Europe) S.à r.l. et Cie, S.C.A.\",\n description: \"Procesamiento de pagos y pasarela de cobro segura de PayPal.\",\n policyUrl: \"https://www.paypal.com/webapps/mpp/ua/privacy-full\",\n cookies: [\n { name: \"ts\", duration: \"3 años\", purpose: \"Gestión segura de pagos y prevención de fraude en PayPal.\" },\n { name: \"ts_c\", duration: \"3 años\", purpose: \"Autenticación segura de usuario en la pasarela PayPal.\" },\n ],\n },\n};\n\nexport type KnownPresetId = keyof typeof SERVICE_PRESETS | string;\n","import type { ConsentConfig, ServiceConfig, ServicePreset } from \"../core/types.js\";\nimport { SERVICE_PRESETS, type KnownPresetId } from \"./presets-catalog.js\";\n\nexport { SERVICE_PRESETS, type KnownPresetId, type ServicePreset };\n\n/**\n * Check if a preset exists in the catalog.\n */\nexport function hasPreset(presetId: string): boolean {\n return Object.prototype.hasOwnProperty.call(SERVICE_PRESETS, presetId);\n}\n\n/**\n * Retrieve a service preset by identifier, optionally applying custom overrides.\n *\n * @param presetId - Identifier of the preset (e.g. 'ga4', 'meta_pixel', 'hotjar')\n * @param overrides - Optional overrides to customize category, label, cookies, etc.\n * @returns Complete ServiceConfig ready for ConsentConfig.services\n *\n * @example\n * ```ts\n * const ga4Service = getPreset('ga4');\n * const customPosthog = getPreset('posthog', { label: 'Internal Product Metrics' });\n * ```\n */\nexport function getPreset(\n presetId: KnownPresetId,\n overrides?: Partial<ServiceConfig>,\n): ServiceConfig {\n const preset = SERVICE_PRESETS[presetId];\n if (!preset) {\n throw new Error(\n `[ConsentSDK] Unknown service preset: '${presetId}'. Available presets: ${Object.keys(\n SERVICE_PRESETS,\n ).join(\", \")}`,\n );\n }\n\n const base: ServiceConfig = {\n category: preset.category,\n label: preset.label,\n provider: preset.provider,\n policyUrl: preset.policyUrl,\n description: preset.description,\n cookies: preset.cookies ? [...preset.cookies] : undefined,\n storageKeys: preset.storageKeys ? [...preset.storageKeys] : undefined,\n localStorage: preset.localStorage ? [...preset.localStorage] : undefined,\n sessionStorage: preset.sessionStorage ? [...preset.sessionStorage] : undefined,\n };\n\n if (!overrides) {\n return base;\n }\n\n return {\n ...base,\n ...overrides,\n cookies: overrides.cookies || base.cookies,\n storageKeys: overrides.storageKeys || base.storageKeys,\n localStorage: overrides.localStorage || base.localStorage,\n sessionStorage: overrides.sessionStorage || base.sessionStorage,\n };\n}\n\n/**\n * Define multiple services using preset shorthand, preset IDs, or full custom configurations.\n *\n * @example\n * ```ts\n * const services = defineServices({\n * ga4: 'ga4',\n * facebook: 'meta_pixel',\n * hotjar: { preset: 'hotjar', category: 'analytics' },\n * customApi: { category: 'necessary', label: 'Custom Auth API' }\n * });\n * ```\n */\nexport function defineServices(\n definitions: Record<string, KnownPresetId | (Partial<ServiceConfig> & { preset?: string })>,\n): Record<string, ServiceConfig> {\n const result: Record<string, ServiceConfig> = {};\n\n for (const [key, def] of Object.entries(definitions)) {\n if (typeof def === \"string\") {\n result[key] = getPreset(def);\n } else if (def && typeof def === \"object\") {\n if (def.preset) {\n const { preset, ...overrides } = def;\n result[key] = getPreset(preset, overrides);\n } else if (hasPreset(key)) {\n result[key] = getPreset(key, def);\n } else {\n result[key] = def as ServiceConfig;\n }\n }\n }\n\n return result;\n}\n\n/**\n * Resolve any preset references in a ConsentConfig object in-place or return a new hydrated config.\n * Hydrates services configured with `\"preset\": \"ga4\"` or matching known preset keys.\n */\nexport function resolveConfigPresets(config: ConsentConfig): ConsentConfig {\n if (!config || !config.services || typeof config.services !== \"object\") {\n return config;\n }\n\n const hydratedServices: Record<string, ServiceConfig> = {};\n\n for (const [serviceKey, serviceDef] of Object.entries(config.services)) {\n if (!serviceDef || typeof serviceDef !== \"object\") {\n hydratedServices[serviceKey] = serviceDef;\n continue;\n }\n\n const presetName = serviceDef.preset || (hasPreset(serviceKey) && !serviceDef.category ? serviceKey : undefined);\n\n if (presetName && hasPreset(presetName)) {\n const preset = SERVICE_PRESETS[presetName];\n hydratedServices[serviceKey] = {\n category: serviceDef.category || preset.category,\n label: serviceDef.label || preset.label,\n provider: serviceDef.provider || preset.provider,\n policyUrl: serviceDef.policyUrl || preset.policyUrl,\n description: serviceDef.description || preset.description,\n cookies: serviceDef.cookies || (preset.cookies ? [...preset.cookies] : undefined),\n storageKeys: serviceDef.storageKeys || (preset.storageKeys ? [...preset.storageKeys] : undefined),\n localStorage: serviceDef.localStorage || (preset.localStorage ? [...preset.localStorage] : undefined),\n sessionStorage: serviceDef.sessionStorage || (preset.sessionStorage ? [...preset.sessionStorage] : undefined),\n ...serviceDef,\n };\n } else {\n hydratedServices[serviceKey] = serviceDef;\n }\n }\n\n return {\n ...config,\n services: hydratedServices,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
10
|
+
var __typeError = (msg) => {
|
|
11
|
+
throw TypeError(msg);
|
|
12
|
+
};
|
|
13
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
14
|
+
var __spreadValues = (a, b) => {
|
|
15
|
+
for (var prop in b || (b = {}))
|
|
16
|
+
if (__hasOwnProp.call(b, prop))
|
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
|
18
|
+
if (__getOwnPropSymbols)
|
|
19
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
20
|
+
if (__propIsEnum.call(b, prop))
|
|
21
|
+
__defNormalProp(a, prop, b[prop]);
|
|
22
|
+
}
|
|
23
|
+
return a;
|
|
24
|
+
};
|
|
25
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
26
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
27
|
+
var __objRest = (source, exclude) => {
|
|
28
|
+
var target = {};
|
|
29
|
+
for (var prop in source)
|
|
30
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
31
|
+
target[prop] = source[prop];
|
|
32
|
+
if (source != null && __getOwnPropSymbols)
|
|
33
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
34
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
35
|
+
target[prop] = source[prop];
|
|
36
|
+
}
|
|
37
|
+
return target;
|
|
38
|
+
};
|
|
39
|
+
var __decoratorStart = (base) => {
|
|
40
|
+
var _a;
|
|
41
|
+
return [, , , __create((_a = base == null ? void 0 : base[__knownSymbol("metadata")]) != null ? _a : null)];
|
|
42
|
+
};
|
|
43
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
44
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
45
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
46
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
47
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
48
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
49
|
+
return value;
|
|
50
|
+
};
|
|
51
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
52
|
+
var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
|
|
53
|
+
var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
|
|
54
|
+
var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
|
|
55
|
+
var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
|
|
56
|
+
return __privateGet(this, extra);
|
|
57
|
+
}, set [name](x) {
|
|
58
|
+
return __privateSet(this, extra, x);
|
|
59
|
+
} }, name));
|
|
60
|
+
k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
|
|
61
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
62
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
63
|
+
if (k) {
|
|
64
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
|
|
65
|
+
if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
|
|
66
|
+
if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
|
|
67
|
+
}
|
|
68
|
+
it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
|
|
69
|
+
if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
|
|
70
|
+
else if (typeof it !== "object" || it === null) __typeError("Object expected");
|
|
71
|
+
else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
72
|
+
}
|
|
73
|
+
return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
74
|
+
};
|
|
75
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
76
|
+
var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
|
|
77
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
78
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
79
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
80
|
+
|
|
81
|
+
export {
|
|
82
|
+
__spreadValues,
|
|
83
|
+
__spreadProps,
|
|
84
|
+
__objRest,
|
|
85
|
+
__decoratorStart,
|
|
86
|
+
__runInitializers,
|
|
87
|
+
__decorateElement
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=chunk-Q3FZFXQE.js.map
|