@consenti/api 0.5.0 → 0.6.0
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 +143 -11
- package/dist/chunk-7NKW7UTJ.js +2 -0
- package/dist/chunk-7NKW7UTJ.js.map +1 -0
- package/dist/dashboard/assets/{ApiConfig-dmDLJNfI.js → ApiConfig-DLPkgWsM.js} +1 -1
- package/dist/dashboard/assets/{ArchivedProfileList-ChWp1RHE.js → ArchivedProfileList-fRvXAaWy.js} +1 -1
- package/dist/dashboard/assets/{AuditLog-3lekUOk8.js → AuditLog-9flkPiEQ.js} +1 -1
- package/dist/dashboard/assets/{ChangePassword-BYlF08cE.js → ChangePassword-D--mNLLR.js} +1 -1
- package/dist/dashboard/assets/{ConfirmDialog-sMBVcbiI.js → ConfirmDialog-CJAqYRfE.js} +1 -1
- package/dist/dashboard/assets/{ConsentList-DLDBSjxO.js → ConsentList-CyddMOrW.js} +1 -1
- package/dist/dashboard/assets/{ConsentTemplateEditor-0iB6G95-.js → ConsentTemplateEditor-DZGFzkTA.js} +1 -1
- package/dist/dashboard/assets/{ConsentTemplateList-BnU_nL8h.js → ConsentTemplateList-CwNVxHyZ.js} +1 -1
- package/dist/dashboard/assets/{HeadingTagInput-7owwn9Vj.js → HeadingTagInput-DGKZYLTR.js} +1 -1
- package/dist/dashboard/assets/{HowItWorks-B05y-6xX.js → HowItWorks-10CyO4Kp.js} +1 -1
- package/dist/dashboard/assets/{PermissionGate-D45f3WrO.js → PermissionGate-CkaZ9DKx.js} +1 -1
- package/dist/dashboard/assets/PreviewPane-ArCfR0c9.js +38 -0
- package/dist/dashboard/assets/{ProfileEditor-CuMRNzdM.js → ProfileEditor-BNUxXKMk.js} +1 -1
- package/dist/dashboard/assets/{ProfileList-CFZ_i1zk.js → ProfileList-Ti5ZML_L.js} +1 -1
- package/dist/dashboard/assets/{ProfileVersionHistory-40HtQSrd.js → ProfileVersionHistory-D2KtUROF.js} +1 -1
- package/dist/dashboard/assets/{RecordDetailModal-hpJgK02E.js → RecordDetailModal-4OyHjtux.js} +1 -1
- package/dist/dashboard/assets/{Reports-BlvcycZ8.js → Reports-CHpF_j2k.js} +1 -1
- package/dist/dashboard/assets/{RoleList-CTeQdx6f.js → RoleList-BICQW5gU.js} +1 -1
- package/dist/dashboard/assets/{Select-CeC6GRyb.js → Select-C7q2vevu.js} +1 -1
- package/dist/dashboard/assets/{Settings-DLsvGtMh.js → Settings-BlOcU0wL.js} +1 -1
- package/dist/dashboard/assets/{SetupWizard-BVzGrBm2.js → SetupWizard-DReZ5DWr.js} +1 -1
- package/dist/dashboard/assets/{Table-CcBP7eXS.js → Table-C59yMXY2.js} +1 -1
- package/dist/dashboard/assets/{TenantList-DLgPnlVv.js → TenantList-Bbwcxyo8.js} +1 -1
- package/dist/dashboard/assets/{UITemplateEditor-B9EBcvOB.js → UITemplateEditor-CR7TnHBH.js} +1 -1
- package/dist/dashboard/assets/{UITemplateList-CGYRRlCh.js → UITemplateList-NKwDQJAw.js} +1 -1
- package/dist/dashboard/assets/{UserList-BbpiUrVr.js → UserList-DMk0_UF0.js} +1 -1
- package/dist/dashboard/assets/{VendorList-mlOlW7ht.js → VendorList-BawJ8Kyc.js} +1 -1
- package/dist/dashboard/assets/{VisitorList-Dne7xkNx.js → VisitorList-BVSFRtul.js} +1 -1
- package/dist/dashboard/assets/check-BAoHs1bd.js +1 -0
- package/dist/dashboard/assets/{copy-FTaGH7-z.js → copy-DjZpSOQM.js} +1 -1
- package/dist/dashboard/assets/{external-link-5y29qnhn.js → external-link-CFayXpKz.js} +1 -1
- package/dist/dashboard/assets/{index-BaYVhd1M.js → index-D7qdwIxs.js} +2 -2
- package/dist/dashboard/assets/{profiles-D-hvl_fK.js → profiles-Jb6uV-0U.js} +1 -1
- package/dist/dashboard/assets/{roles-DZyZwZDr.js → roles-ChXEt79v.js} +1 -1
- package/dist/dashboard/assets/{rotate-ccw-clock-C5cVu2_f.js → rotate-ccw-clock-503u3yEE.js} +1 -1
- package/dist/dashboard/assets/{search-mdMD-WTj.js → search-B05qPv24.js} +1 -1
- package/dist/dashboard/assets/{square-pen-BoEcHaSW.js → square-pen-BX2H18m3.js} +1 -1
- package/dist/dashboard/assets/{templates-DLMsZs7d.js → templates-DalUjETH.js} +1 -1
- package/dist/dashboard/assets/{trash-BVDX09Xe.js → trash-Bfqti-Og.js} +1 -1
- package/dist/dashboard/assets/{useHashQuery-wXzkY-tk.js → useHashQuery-DzYBqPIg.js} +1 -1
- package/dist/dashboard/assets/{users-BLTbK4tk.js → users-CDdO4hYQ.js} +1 -1
- package/dist/dashboard/assets/x-Clw5rGTJ.js +1 -0
- package/dist/dashboard/index.html +1 -1
- package/dist/dist-MNR4WETI.js +2 -0
- package/dist/index.cjs +77 -75
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +45 -9
- package/dist/index.d.ts +45 -9
- package/dist/index.js +76 -74
- package/dist/index.js.map +1 -1
- package/dist/widget/widget.js +1 -1
- package/package.json +3 -2
- package/scripts/migrate-to-consenti-prefix.mjs +196 -0
- package/dist/chunk-COR72NFQ.js +0 -2
- package/dist/chunk-COR72NFQ.js.map +0 -1
- package/dist/dashboard/assets/PreviewPane-Czax39la.js +0 -38
- package/dist/dashboard/assets/check-IM5PInrX.js +0 -1
- package/dist/dashboard/assets/x-CtCy0YcJ.js +0 -1
- package/dist/dist-QJYW5KUK.js +0 -2
- /package/dist/{dist-QJYW5KUK.js.map → dist-MNR4WETI.js.map} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@consenti/api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "GDPR-style consent management platform backend — no required runtime dependencies, optional peer deps for extra storage drivers and spec-correct IAB TCF encoding",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": {
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
|
-
"dist"
|
|
41
|
+
"dist",
|
|
42
|
+
"scripts/migrate-to-consenti-prefix.mjs"
|
|
42
43
|
],
|
|
43
44
|
"scripts": {
|
|
44
45
|
"buildonly": "tsup",
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// One-off: rename the unprefixed tables / collections of a Consenti install older than 0.6.0
|
|
3
|
+
// (tenants, profiles, consent_records, …) to the `consenti_` names the adapters now use.
|
|
4
|
+
//
|
|
5
|
+
// Only PostgreSQL, MySQL/MariaDB and MongoDB are affected — SQLite and the JSON file store keep
|
|
6
|
+
// their data in a file Consenti owns and are unchanged.
|
|
7
|
+
//
|
|
8
|
+
// It renames, nothing else: no rows are read, copied or deleted, so it is quick and cannot lose
|
|
9
|
+
// data. Run it with the same CONSENTI_DB_* environment variables your app uses:
|
|
10
|
+
//
|
|
11
|
+
// node node_modules/@consenti/api/scripts/migrate-to-consenti-prefix.mjs # dry run: prints the plan
|
|
12
|
+
// node node_modules/@consenti/api/scripts/migrate-to-consenti-prefix.mjs --apply # does it
|
|
13
|
+
//
|
|
14
|
+
// Take a backup first. Stop the app first. Re-running after a partial run is safe.
|
|
15
|
+
//
|
|
16
|
+
// Options (each falls back to the matching environment variable):
|
|
17
|
+
// --driver postgresql|mysql|mongodb CONSENTI_DB_DRIVER
|
|
18
|
+
// --uri <connection string> CONSENTI_DB_URI
|
|
19
|
+
// --host/--port/--user/--password CONSENTI_DB_HOST / _PORT / _USER / _PASSWORD
|
|
20
|
+
// --database <name> CONSENTI_DB_DATABASE
|
|
21
|
+
// --apply actually rename (default is a dry run)
|
|
22
|
+
|
|
23
|
+
const PREFIX = 'consenti_'
|
|
24
|
+
// Every table the 0.5.x adapters created (schema_version last). MongoDB has no schema_version.
|
|
25
|
+
const NAMES = [
|
|
26
|
+
'tenants', 'profiles', 'consent_records', 'consent_history', 'visitors', 'notice_shown',
|
|
27
|
+
'users', 'roles', 'permissions', 'user_roles', 'role_permissions', 'audit_logs',
|
|
28
|
+
'api_keys', 'tenant_settings', 'consent_templates', 'ui_templates', 'schema_version',
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
function parseArgs(argv) {
|
|
32
|
+
const out = {}
|
|
33
|
+
for (let i = 0; i < argv.length; i++) {
|
|
34
|
+
const a = argv[i]
|
|
35
|
+
if (a === '--apply') out.apply = true
|
|
36
|
+
else if (a === '--help' || a === '-h') out.help = true
|
|
37
|
+
else if (a.startsWith('--')) {
|
|
38
|
+
const v = argv[++i]
|
|
39
|
+
if (v === undefined) fail(`Missing value for ${a}`)
|
|
40
|
+
out[a.slice(2)] = v
|
|
41
|
+
} else fail(`Unknown argument: ${a}`)
|
|
42
|
+
}
|
|
43
|
+
return out
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function fail(msg) {
|
|
47
|
+
console.error(`✖ ${msg}`)
|
|
48
|
+
process.exit(1)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const args = parseArgs(process.argv.slice(2))
|
|
52
|
+
if (args.help) {
|
|
53
|
+
console.log(`Usage: node migrate-to-consenti-prefix.mjs [--apply] [--driver D] [--uri U] [--host H --port P --user U --password W] [--database N]\n\nSee the header of this file, or CHANGELOG 0.6.0.`)
|
|
54
|
+
process.exit(0)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const env = process.env
|
|
58
|
+
const cfg = {
|
|
59
|
+
driver: args.driver ?? env.CONSENTI_DB_DRIVER ?? 'json',
|
|
60
|
+
uri: args.uri ?? env.CONSENTI_DB_URI,
|
|
61
|
+
host: args.host ?? env.CONSENTI_DB_HOST,
|
|
62
|
+
port: args.port ?? env.CONSENTI_DB_PORT,
|
|
63
|
+
user: args.user ?? env.CONSENTI_DB_USER,
|
|
64
|
+
password: args.password ?? env.CONSENTI_DB_PASSWORD,
|
|
65
|
+
database: args.database ?? env.CONSENTI_DB_DATABASE,
|
|
66
|
+
}
|
|
67
|
+
const apply = args.apply === true
|
|
68
|
+
|
|
69
|
+
if (!['postgresql', 'mysql', 'mongodb'].includes(cfg.driver)) {
|
|
70
|
+
console.log(`Driver "${cfg.driver}" does not use the ${PREFIX} prefix — nothing to migrate.`)
|
|
71
|
+
process.exit(0)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async function load(pkg) {
|
|
75
|
+
try {
|
|
76
|
+
return await import(pkg)
|
|
77
|
+
} catch {
|
|
78
|
+
fail(`Could not load "${pkg}". Run this from your project, where it is installed (npm install ${pkg}).`)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Shared plan logic: which names exist, which can be renamed, which would clash. */
|
|
83
|
+
function plan(existing) {
|
|
84
|
+
const have = new Set(existing)
|
|
85
|
+
const legacy = NAMES.filter(n => have.has(n))
|
|
86
|
+
const clashes = legacy.filter(n => have.has(PREFIX + n))
|
|
87
|
+
const alreadyDone = NAMES.filter(n => !have.has(n) && have.has(PREFIX + n))
|
|
88
|
+
return { legacy, clashes, alreadyDone }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function report({ legacy, clashes, alreadyDone }) {
|
|
92
|
+
if (alreadyDone.length) console.log(` already renamed: ${alreadyDone.map(n => PREFIX + n).join(', ')}`)
|
|
93
|
+
if (clashes.length) {
|
|
94
|
+
fail(
|
|
95
|
+
`Both "${clashes[0]}" and "${PREFIX}${clashes[0]}" exist` +
|
|
96
|
+
(clashes.length > 1 ? ` (and ${clashes.length - 1} more)` : '') +
|
|
97
|
+
`. Refusing to overwrite — inspect the database by hand (is another app using these names?).`,
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
if (!legacy.length) {
|
|
101
|
+
console.log(alreadyDone.length ? '✔ Nothing left to rename.' : '✔ No unprefixed Consenti tables/collections found — nothing to do (fresh database, or already migrated).')
|
|
102
|
+
process.exit(0)
|
|
103
|
+
}
|
|
104
|
+
console.log(`${apply ? 'Renaming' : 'Would rename'} ${legacy.length}:`)
|
|
105
|
+
for (const n of legacy) console.log(` ${n} → ${PREFIX}${n}`)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function dryRunNotice() {
|
|
109
|
+
if (!apply) console.log('\nDry run — nothing was changed. Back up the database, stop your app, then re-run with --apply.')
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function mysqlRun() {
|
|
113
|
+
const mysql = await load('mysql2/promise')
|
|
114
|
+
const conn = await mysql.createConnection(cfg.uri ?? {
|
|
115
|
+
host: cfg.host ?? 'localhost', port: Number(cfg.port ?? 3306), user: cfg.user ?? 'root',
|
|
116
|
+
password: cfg.password ?? '', database: cfg.database ?? 'consenti',
|
|
117
|
+
})
|
|
118
|
+
try {
|
|
119
|
+
const [rows] = await conn.query(
|
|
120
|
+
'SELECT TABLE_NAME AS name FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN (?)',
|
|
121
|
+
[[...NAMES, ...NAMES.map(n => PREFIX + n)]],
|
|
122
|
+
)
|
|
123
|
+
const p = plan(rows.map(r => r.name))
|
|
124
|
+
report(p)
|
|
125
|
+
if (apply) {
|
|
126
|
+
// One statement: MySQL renames all of them atomically — all or none.
|
|
127
|
+
await conn.query(`RENAME TABLE ${p.legacy.map(n => `\`${n}\` TO \`${PREFIX}${n}\``).join(', ')}`)
|
|
128
|
+
}
|
|
129
|
+
} finally {
|
|
130
|
+
await conn.end()
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async function pgRun() {
|
|
135
|
+
const pgModule = await load('pg')
|
|
136
|
+
const pg = pgModule.default ?? pgModule
|
|
137
|
+
const client = new pg.Client(cfg.uri
|
|
138
|
+
? { connectionString: cfg.uri }
|
|
139
|
+
: { host: cfg.host ?? 'localhost', port: Number(cfg.port ?? 5432), user: cfg.user ?? 'postgres', password: cfg.password ?? '', database: cfg.database ?? 'consenti' })
|
|
140
|
+
await client.connect()
|
|
141
|
+
try {
|
|
142
|
+
const res = await client.query(
|
|
143
|
+
'SELECT n AS name FROM unnest($1::text[]) AS n WHERE to_regclass(n) IS NOT NULL',
|
|
144
|
+
[[...NAMES, ...NAMES.map(n => PREFIX + n)]],
|
|
145
|
+
)
|
|
146
|
+
const p = plan(res.rows.map(r => r.name))
|
|
147
|
+
report(p)
|
|
148
|
+
if (apply) {
|
|
149
|
+
await client.query('BEGIN') // PostgreSQL DDL is transactional — all or none
|
|
150
|
+
try {
|
|
151
|
+
for (const n of p.legacy) await client.query(`ALTER TABLE "${n}" RENAME TO "${PREFIX}${n}"`)
|
|
152
|
+
await client.query('COMMIT')
|
|
153
|
+
} catch (err) {
|
|
154
|
+
await client.query('ROLLBACK')
|
|
155
|
+
throw err
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
} finally {
|
|
159
|
+
await client.end()
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
async function mongoRun() {
|
|
164
|
+
const { MongoClient } = await load('mongodb')
|
|
165
|
+
const client = new MongoClient(cfg.uri ?? 'mongodb://localhost:27017')
|
|
166
|
+
await client.connect()
|
|
167
|
+
try {
|
|
168
|
+
const db = client.db(cfg.database ?? 'consenti')
|
|
169
|
+
const names = NAMES.filter(n => n !== 'schema_version')
|
|
170
|
+
const existing = (await db.listCollections({}, { nameOnly: true }).toArray()).map(c => c.name)
|
|
171
|
+
const p = plan(existing.filter(n => names.includes(n) || names.some(x => PREFIX + x === n)))
|
|
172
|
+
report(p)
|
|
173
|
+
if (apply) {
|
|
174
|
+
// Collection renames are individual operations (no cross-collection transaction); each keeps its
|
|
175
|
+
// data and indexes, and a re-run skips the ones already done.
|
|
176
|
+
for (const n of p.legacy) await db.renameCollection(n, PREFIX + n)
|
|
177
|
+
}
|
|
178
|
+
} finally {
|
|
179
|
+
await client.close()
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
try {
|
|
184
|
+
console.log(`Consenti ${PREFIX} prefix migration — ${cfg.driver}${apply ? '' : ' (dry run)'}`)
|
|
185
|
+
if (cfg.driver === 'mysql') await mysqlRun()
|
|
186
|
+
else if (cfg.driver === 'postgresql') await pgRun()
|
|
187
|
+
else await mongoRun()
|
|
188
|
+
if (apply) console.log('\n✔ Done. Start your app — it will finish any remaining schema upgrade on its own.')
|
|
189
|
+
else dryRunNotice()
|
|
190
|
+
} catch (err) {
|
|
191
|
+
const msg = err instanceof Error ? err.message : String(err)
|
|
192
|
+
const hint = /denied|permission|not authorized|unauthorized/i.test(msg)
|
|
193
|
+
? '\nRenaming needs more than the app normally does: MySQL needs ALTER + DROP on the old tables and CREATE + INSERT on the new ones (ALL PRIVILEGES on the database covers it); PostgreSQL needs you to own the tables; MongoDB needs the renameCollection action (readWrite includes it).'
|
|
194
|
+
: ''
|
|
195
|
+
fail(`${msg}${hint}\nNothing further was changed by this run beyond what is listed above; fix the cause and re-run (it is safe to repeat).`)
|
|
196
|
+
}
|
package/dist/chunk-COR72NFQ.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function H(e,n){let a;return function(...t){a!==void 0&&clearTimeout(a),a=setTimeout(()=>{e.apply(this,t)},n)}}function q(e,n){let a=0;return function(...t){let o=Date.now();o-a>=n&&(a=o,e.apply(this,t))}}function h(){return typeof process>"u"||process.env.NO_COLOR?!1:process.env.FORCE_COLOR?!0:!!process.stdout?.isTTY}function u(e,n){return a=>h()?`\x1B[${e}m${a}\x1B[${n}m`:a}var r={bold:u(1,22),dim:u(2,22),red:u(31,39),green:u(32,39),yellow:u(33,39),blue:u(34,39),magenta:u(35,39),cyan:u(36,39),gray:u(90,39)},P={pass:e=>r.bold(r.green(e)),fail:e=>r.bold(r.red(e)),error:e=>r.bold(r.red(e)),"not-applicable":e=>r.gray(e),"new-baseline":e=>r.bold(r.blue(e))};function J(e,n=10){let a=e.toUpperCase().padEnd(n);return P[e](a)}var b={info:{symbol:"\u2139",paint:r.cyan},success:{symbol:"\u2713",paint:r.green},warn:{symbol:"\u26A0",paint:r.yellow},error:{symbol:"\u2717",paint:r.red}};function Y(e,n){let{symbol:a,paint:t}=b[e];return`${t(a)} ${n}`}var Q=["opt-in","opt-out","opt-out-strict","opt-in-dpdpa","opt-in-china","opt-in-brazil","general-privacy-consent","notice-only"],X={"opt-out-strict":{label:"Opt-out Strict (CPRA / California)",description:"California CPRA: opt-out with sale/sharing/sensitive categories required. GPC must be honored. Stricter than general US state laws.",compliances:["cpra"],defaultGpc:"honor",gpcAutoHonor:!0,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!0,requiresDpdpaDisclosure:!1},"opt-out":{label:"Opt-out (US State Laws)",description:"US state privacy laws. Collect first, allow opt-out of sale/share. Covers CCPA and all state-level equivalents.",compliances:["ccpa","vcdpa","cpa-co","ctdpa","ucpa","icdpa-ia","icdpa-in","tipa","mcdpa-mt","mcdpa-mn","ocpa","tdpsa","dpdpa-de","njdpa","nhpa","ndpa-ne","modpa","kcdpa","ridtpa"],defaultGpc:"honor",gpcAutoHonor:!0,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"notice-only":{label:"Notice Only",description:"A privacy notice is generally sufficient. No dedicated cookie banner law is encoded for this jurisdiction.",compliances:["privacy-fj","privacy-pg"],defaultGpc:"ignore",gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"opt-in":{label:"Standard Opt-in (GDPR)",description:"GDPR / ePrivacy style: prior consent required before non-essential cookies. Granular consent, easy reject, easy withdrawal.",compliances:["gdpr","eprivacy","uk-gdpr","pecr","revfadp","kvkk","pdpa-th","pdpl-sa","uae-pdpl","difc-dpl","adgm-dpr","qpdl-qa","pdpl-bh","pdpl-om","law25"],defaultGpc:"ignore",gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!0,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"opt-in-dpdpa":{label:"Opt-in (India DPDPA)",description:"India's Digital Personal Data Protection Act. Opt-in consent with data fiduciary disclosure. No legitimate interest basis.",compliances:["dpdpa"],defaultGpc:"ignore",gpcAutoHonor:!1,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!0},"opt-in-china":{label:"Opt-in (China PIPL / DSL)",description:"China PIPL + DSL + CSL: strict opt-in with purpose specification, data minimisation, and cross-border transfer controls.",compliances:["pipl","dsl-cn","csl-cn"],defaultGpc:"ignore",gpcAutoHonor:!1,allowsLegitimateInterest:!1,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"opt-in-brazil":{label:"Opt-in (Brazil LGPD)",description:"Brazil LGPD: opt-in consent required. Legitimate interest is a valid basis. Analytics and advertising may differ in treatment.",compliances:["lgpd"],defaultGpc:"ignore",gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1},"general-privacy-consent":{label:"General Privacy Consent",description:"Privacy notice or consent rules exist but the jurisdiction does not have a GDPR/PECR-style strict cookie banner law. Documenting legal basis is best practice.",compliances:["pipeda","popia","appi","pipa-kr","pdpa-sg","pdpa-my","dpa-ph","pdp-id","pdpd-vn","privacy-au","privacy-nz","pdpl-hk","pdpa-mo","pdpl-tw","privacy-bn","privacy-lk","privacy-np","privacy-kw","privacy-il","ndpa-ng","dpa-ke","dpa-gh","dpa-ug","dpa-rw","dpa-mu","dpa-bw","dpa-zm","dpa-zw","dpa-eg","dpa-ma","dpa-tn","dpa-dz","lfpdppp","lpdp-ar","lpdp-pe","law1581-co","law18331-uy","law19628-cl","lopdp-ec","lpdp-cr","data-protection-pa","data-protection-do"],defaultGpc:"ignore",gpcAutoHonor:!1,allowsLegitimateInterest:!0,allowsTcf:!1,requiresCpraCategory:!1,requiresDpdpaDisclosure:!1}},ee=[{value:"ignore",label:"Ignore",description:"Do not check or respond to the GPC browser signal."},{value:"honor",label:"Honor",description:"Respect GPC as a valid opt-out signal. Show GPC variant banner once."},{value:"strict",label:"Strict",description:"Silently deny all non-mandatory cookies when GPC is detected. No banner shown."}],ne=[{value:"mandatory",label:"Strictly Necessary",description:"Required for the service to function. No consent needed."},{value:"consent",label:"Consent",description:"Requires explicit user agreement. User can withdraw at any time."},{value:"legitimate_interest",label:"Legitimate Interest",description:"Based on legitimate business interest. User has the right to object."}],ae=[{value:"sale",label:"Sale",description:"Sale of personal data to third parties for their own use."},{value:"sharing",label:"Sharing",description:"Sharing for cross-context behavioral advertising (even without payment)."},{value:"sensitive",label:"Sensitive",description:"Sensitive personal information (geolocation, health, race, biometrics, etc.). Requires opt-in even in California."}],oe=["necessary","functional","preferences","analytics","marketing"],te=[{value:"necessary",label:"Necessary",description:"Strictly required to deliver the service or ensure security/compliance. Always granted."},{value:"functional",label:"Functional",description:"Optional features that enhance functionality but are not essential."},{value:"preferences",label:"Preferences",description:'Remember user choices and personalize the experience ("Remember me").'},{value:"analytics",label:"Analytics",description:"Measure usage and performance to improve the product."},{value:"marketing",label:"Marketing",description:"Advertising, profiling, cross-site tracking, retargeting, ad personalization."}],ie={necessary:{legalBasis:"mandatory",listenGpc:!1},functional:{legalBasis:"legitimate_interest",listenGpc:!1},preferences:{legalBasis:"legitimate_interest",listenGpc:!1},analytics:{legalBasis:"consent",listenGpc:!0},marketing:{legalBasis:"consent",listenGpc:!0,cpraCategory:"sharing"}},C={security_storage:"necessary",functionality_storage:"functional",personalization_storage:"preferences",analytics_storage:"analytics",ad_storage:"marketing",ad_user_data:"marketing",ad_personalization:"marketing"};function re(e){return C[e.id]??"functional"}var ce=[{id:1,name:"Store and/or access information on a device",description:"Cookies, device identifiers, or other information can be stored or accessed on your device."},{id:2,name:"Select basic ads",description:"Ads can be shown based on the content you're viewing, the app you're using, or your approximate location."},{id:3,name:"Create a personalised ads profile",description:"A profile can be built about you and your interests to show you personalised ads."},{id:4,name:"Select personalised ads",description:"Personalised ads can be shown to you based on a profile about you."},{id:5,name:"Create a personalised content profile",description:"A profile can be built about you and your interests to show you personalised content."},{id:6,name:"Select personalised content",description:"Personalised content can be shown to you based on a profile about you."},{id:7,name:"Measure ad performance",description:"The performance and effectiveness of ads that you see or interact with can be measured."},{id:8,name:"Measure content performance",description:"The performance and effectiveness of content that you see or interact with can be measured."},{id:9,name:"Apply market research to generate audience insights",description:"Market research can be used to learn more about the audiences who visit sites or use apps."},{id:10,name:"Develop and improve products",description:"Your data can be used to improve existing systems and software, and to develop new products."},{id:11,name:"Use limited data to select content",description:"Content can be selected based on limited data such as the website you are visiting."}],le=[{id:1,name:"Use precise geolocation data",description:"Your precise location (within a radius of less than 500 metres) can be used."},{id:2,name:"Actively scan device characteristics for identification",description:"Your device can be identified based on a scan of your device's unique combination of characteristics."}];function se(e,n){for(let a of Object.values(n))if(a.cookies.includes(e))return a}function pe(e){let n=new Map;for(let a of Object.values(e))for(let t of a.cookies)n.set(t,a);return n}function z(e,n){return n.get(e)?.legalBasis??"consent"}function ue(e,n){return z(e,n)==="mandatory"}var me={"opt-in":{categoryErrors:[{rule:"legal-basis-required",field:"legalBasis",check:e=>!e.legalBasis,message:e=>`Category "${e}" must have a legal basis set (Consent, Legitimate Interest, or Strictly Necessary) for GDPR compliance.`}],categoryWarnings:[{rule:"legitimate-interest-balancing-test-recommended",field:"legitimateInterestDescription",check:e=>e.legalBasis==="legitimate_interest"&&!String(e.legitimateInterestDescription??"").trim(),message:e=>`Category "${e}" relies on Legitimate Interest but has no balancing-test description. GDPR Art. 6(1)(f) requires you to conduct and be able to demonstrate a Legitimate Interests Assessment \u2014 note that Art. 5(3) ePrivacy still requires consent (LI cannot substitute) for the cookie storage/access itself, so this basis should only cover the downstream processing purpose, not the placement of a non-essential cookie.`,suggestion:`Document your Legitimate Interests Assessment in the category's "Legitimate Interest Description" field.`}],cookieErrors:[],cookieWarnings:[{rule:"pre-grant-opt-in-risk",field:"preGrant",check:(e,n)=>n==="consent"&&e.preGrant===!0,message:e=>`Parameter "${e}" is pre-granted, which may violate GDPR's opt-in requirement. Only use "Pre Grant" on custom profiles targeting jurisdictions where pre-granted consent is valid.`,suggestion:'Disable "Pre Grant" unless this profile specifically targets a jurisdiction that permits pre-granted consent.'}]},"opt-out":{categoryErrors:[],categoryWarnings:[],cookieErrors:[],cookieWarnings:[{rule:"gpc-recommended",field:"listenGpc",check:(e,n)=>n!=="mandatory"&&!e.listenGpc,message:e=>`Parameter "${e}" does not listen for the GPC signal. US state privacy laws require honoring GPC for opt-out of sale/sharing.`,suggestion:'Enable "Listen for GPC signal" on this parameter.'}]},"opt-out-strict":{categoryErrors:[],categoryWarnings:[],cookieErrors:[{rule:"cpra-category-required",field:"cpraCategory",check:(e,n)=>n!=="mandatory"&&!e.cpraCategory,message:e=>`Parameter "${e}" must have a CPRA category (Sale, Sharing, or Sensitive) assigned. Required under CPRA for all non-necessary parameters.`},{rule:"gpc-strict-required",field:"listenGpc",check:e=>(e.cpraCategory==="sale"||e.cpraCategory==="sharing")&&!e.listenGpc,message:e=>`Parameter "${e}" is tagged Sale/Sharing but does not listen for the GPC signal. 11 CCR \xA77025 requires honoring GPC as a Do Not Sell/Share My Personal Information request for these parameters \u2014 this is mandatory, not optional.`}],cookieWarnings:[]},"opt-in-dpdpa":{categoryErrors:[{rule:"no-li-allowed",field:"legalBasis",check:e=>e.legalBasis==="legitimate_interest",message:e=>`Category "${e}" uses Legitimate Interest, which is not a valid legal basis under India's DPDPA. Use Consent or Strictly Necessary.`},{rule:"legal-basis-required",field:"legalBasis",check:e=>!e.legalBasis,message:e=>`Category "${e}" must have a legal basis set (Consent or Strictly Necessary) for DPDPA compliance.`}],categoryWarnings:[],cookieErrors:[],cookieWarnings:[{rule:"pre-grant-opt-in-risk",field:"preGrant",check:(e,n)=>n==="consent"&&e.preGrant===!0,message:e=>`Parameter "${e}" is pre-granted, which may violate DPDPA's opt-in requirement. Only use "Pre Grant" on custom profiles targeting jurisdictions where pre-granted consent is valid.`,suggestion:'Disable "Pre Grant" unless this profile specifically targets a jurisdiction that permits pre-granted consent.'}]},"opt-in-china":{categoryErrors:[{rule:"no-li-allowed",field:"legalBasis",check:e=>e.legalBasis==="legitimate_interest",message:e=>`Category "${e}" uses Legitimate Interest, which is not one of PIPL Article 13's enumerated legal bases. Use Consent or Strictly Necessary.`},{rule:"legal-basis-required",field:"legalBasis",check:e=>!e.legalBasis,message:e=>`Category "${e}" must have a legal basis set for China PIPL compliance. Consent is the primary valid basis.`}],categoryWarnings:[],cookieErrors:[],cookieWarnings:[{rule:"pre-grant-opt-in-risk",field:"preGrant",check:(e,n)=>n==="consent"&&e.preGrant===!0,message:e=>`Parameter "${e}" is pre-granted, which may violate PIPL's opt-in requirement. Only use "Pre Grant" on custom profiles targeting jurisdictions where pre-granted consent is valid.`,suggestion:'Disable "Pre Grant" unless this profile specifically targets a jurisdiction that permits pre-granted consent.'}]},"opt-in-brazil":{categoryErrors:[{rule:"legal-basis-required",field:"legalBasis",check:e=>!e.legalBasis,message:e=>`Category "${e}" must have a legal basis set. Brazil's LGPD requires one of ten legal bases; Consent or Legitimate Interest are most common for parameters.`}],categoryWarnings:[{rule:"legitimate-interest-balancing-test-recommended",field:"legitimateInterestDescription",check:e=>e.legalBasis==="legitimate_interest"&&!String(e.legitimateInterestDescription??"").trim(),message:e=>`Category "${e}" relies on Legitimate Interest but has no balancing-test description. LGPD Art. 10 requires the legitimate interest basis to be documented and, on request, made available to the ANPD as a Data Protection Impact Report (relat\xF3rio de impacto).`,suggestion:`Document your legitimate interest assessment in the category's "Legitimate Interest Description" field.`}],cookieErrors:[],cookieWarnings:[{rule:"pre-grant-opt-in-risk",field:"preGrant",check:(e,n)=>n==="consent"&&e.preGrant===!0,message:e=>`Parameter "${e}" is pre-granted, which may violate LGPD's opt-in requirement. Only use "Pre Grant" on custom profiles targeting jurisdictions where pre-granted consent is valid.`,suggestion:'Disable "Pre Grant" unless this profile specifically targets a jurisdiction that permits pre-granted consent.'}]},"general-privacy-consent":{categoryErrors:[],categoryWarnings:[{rule:"legal-basis-recommended",field:"legalBasis",check:e=>!e.legalBasis,message:e=>`Category "${e}" has no legal basis documented. While a strict cookie banner may not be legally required in this jurisdiction, documenting legal basis is a privacy best practice.`,suggestion:"Set a legal basis to improve compliance documentation and future-proof against stricter enforcement."},{rule:"legitimate-interest-balancing-test-recommended",field:"legitimateInterestDescription",check:e=>e.legalBasis==="legitimate_interest"&&!String(e.legitimateInterestDescription??"").trim(),message:e=>`Category "${e}" relies on Legitimate Interest but has no balancing-test description documented. Most legitimate-interest-style bases in this jurisdiction group expect a documented justification, and it future-proofs the profile against stricter enforcement.`,suggestion:`Document your legitimate interest justification in the category's "Legitimate Interest Description" field.`}],cookieErrors:[],cookieWarnings:[]},"notice-only":{categoryErrors:[],categoryWarnings:[],cookieErrors:[],cookieWarnings:[]}},g={version:"2026-07",countries:{AT:{name:"Austria",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Austria (GDPR)",locales:["de-AT"],compliance:["gdpr","eprivacy"],timezones:["Europe/Vienna"]},BE:{name:"Belgium",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Belgium (GDPR)",locales:["nl-BE","fr-BE"],compliance:["gdpr","eprivacy"],timezones:["Europe/Brussels"]},BG:{name:"Bulgaria",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Bulgaria (GDPR)",locales:["bg-BG"],compliance:["gdpr","eprivacy"],timezones:["Europe/Sofia"]},HR:{name:"Croatia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Croatia (GDPR)",locales:["hr-HR"],compliance:["gdpr","eprivacy"],timezones:["Europe/Zagreb"]},CY:{name:"Cyprus",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Cyprus (GDPR)",locales:["el-CY"],compliance:["gdpr","eprivacy"],timezones:["Asia/Nicosia"]},CZ:{name:"Czechia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Czechia (GDPR)",locales:["cs-CZ"],compliance:["gdpr","eprivacy"],timezones:["Europe/Prague"]},DK:{name:"Denmark",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Denmark (GDPR)",locales:["da-DK"],compliance:["gdpr","eprivacy"],timezones:["Europe/Copenhagen"]},EE:{name:"Estonia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Estonia (GDPR)",locales:["et-EE"],compliance:["gdpr","eprivacy"],timezones:["Europe/Tallinn"]},FI:{name:"Finland",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Finland (GDPR)",locales:["fi-FI"],compliance:["gdpr","eprivacy"],timezones:["Europe/Helsinki"]},FR:{name:"France",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"France (GDPR)",locales:["fr-FR"],compliance:["gdpr","eprivacy"],timezones:["Europe/Paris"]},DE:{name:"Germany",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Germany (GDPR)",locales:["de-DE"],compliance:["gdpr","eprivacy"],timezones:["Europe/Berlin"]},GR:{name:"Greece",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Greece (GDPR)",locales:["el-GR"],compliance:["gdpr","eprivacy"],timezones:["Europe/Athens"]},HU:{name:"Hungary",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Hungary (GDPR)",locales:["hu-HU"],compliance:["gdpr","eprivacy"],timezones:["Europe/Budapest"]},IE:{name:"Ireland",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Ireland (GDPR)",locales:["en"],compliance:["gdpr","eprivacy"],timezones:["Europe/Dublin"]},IT:{name:"Italy",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Italy (GDPR)",locales:["it-IT"],compliance:["gdpr","eprivacy"],timezones:["Europe/Rome"]},LV:{name:"Latvia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Latvia (GDPR)",locales:["lv-LV"],compliance:["gdpr","eprivacy"],timezones:["Europe/Riga"]},LT:{name:"Lithuania",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Lithuania (GDPR)",locales:["lt-LT"],compliance:["gdpr","eprivacy"],timezones:["Europe/Vilnius"]},LU:{name:"Luxembourg",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Luxembourg (GDPR)",locales:["fr-LU","de-LU"],compliance:["gdpr","eprivacy"],timezones:["Europe/Luxembourg"]},MT:{name:"Malta",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Malta (GDPR)",locales:["mt-MT","en"],compliance:["gdpr","eprivacy"],timezones:["Europe/Malta"]},NL:{name:"Netherlands",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Netherlands (GDPR)",locales:["nl-NL"],compliance:["gdpr","eprivacy"],timezones:["Europe/Amsterdam"]},PL:{name:"Poland",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Poland (GDPR)",locales:["pl-PL"],compliance:["gdpr","eprivacy"],timezones:["Europe/Warsaw"]},PT:{name:"Portugal",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Portugal (GDPR)",locales:["pt-PT"],compliance:["gdpr","eprivacy"],timezones:["Europe/Lisbon","Atlantic/Madeira","Atlantic/Azores"]},RO:{name:"Romania",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Romania (GDPR)",locales:["ro-RO"],compliance:["gdpr","eprivacy"],timezones:["Europe/Bucharest"]},SK:{name:"Slovakia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Slovakia (GDPR)",locales:["sk-SK"],compliance:["gdpr","eprivacy"],timezones:["Europe/Bratislava"]},SI:{name:"Slovenia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Slovenia (GDPR)",locales:["sl-SI"],compliance:["gdpr","eprivacy"],timezones:["Europe/Ljubljana"]},ES:{name:"Spain",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Spain (GDPR)",locales:["es-ES"],compliance:["gdpr","eprivacy"],timezones:["Europe/Madrid","Africa/Ceuta","Atlantic/Canary"]},SE:{name:"Sweden",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Sweden (GDPR)",locales:["sv-SE"],compliance:["gdpr","eprivacy"],timezones:["Europe/Stockholm"]},IS:{name:"Iceland",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Iceland (GDPR via EEA)",locales:["is-IS"],compliance:["gdpr","eprivacy"],timezones:["Atlantic/Reykjavik"]},LI:{name:"Liechtenstein",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Liechtenstein (GDPR via EEA)",locales:["de-LI"],compliance:["gdpr","eprivacy"],timezones:["Europe/Vaduz"]},NO:{name:"Norway",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Norway (GDPR via EEA)",locales:["nb-NO"],compliance:["gdpr","eprivacy"],timezones:["Europe/Oslo","Arctic/Longyearbyen"]},AD:{name:"Andorra",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Andorra (GDPR-aligned)",locales:["ca-AD"],compliance:["gdpr"],timezones:["Europe/Andorra"]},AL:{name:"Albania",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Albania (GDPR-aligned)",locales:["sq-AL"],compliance:["gdpr"],timezones:["Europe/Tirane"]},BA:{name:"Bosnia and Herzegovina",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Bosnia and Herzegovina (GDPR-aligned)",locales:["bs-BA","sr-Latn-BA"],compliance:["gdpr"],timezones:["Europe/Sarajevo"]},GG:{name:"Guernsey",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Guernsey (DPA based on GDPR)",locales:["en"],compliance:["gdpr"],timezones:["Europe/Guernsey"]},GI:{name:"Gibraltar",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Gibraltar (DPA based on UK GDPR)",locales:["en"],compliance:["uk-gdpr"],timezones:["Europe/Gibraltar"]},GL:{name:"Greenland",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Greenland (Danish GDPR implementation)",locales:["da-GL"],compliance:["gdpr"],timezones:["America/Nuuk","America/Danmarkshavn","America/Scoresbysund","America/Thule"]},MC:{name:"Monaco",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Monaco (GDPR-aligned)",locales:["fr-MC"],compliance:["gdpr"],timezones:["Europe/Monaco"]},ME:{name:"Montenegro",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Montenegro (GDPR-aligned)",locales:["sr-Latn-ME"],compliance:["gdpr"],timezones:["Europe/Podgorica"]},MK:{name:"North Macedonia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"North Macedonia (GDPR-aligned)",locales:["mk-MK"],compliance:["gdpr"],timezones:["Europe/Skopje"]},RS:{name:"Serbia",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Serbia (GDPR-aligned)",locales:["sr-RS"],compliance:["gdpr"],timezones:["Europe/Belgrade"]},SM:{name:"San Marino",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"San Marino (GDPR-aligned)",locales:["it-SM"],compliance:["gdpr"],timezones:["Europe/San_Marino"]},TR:{name:"T\xFCrkiye",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"T\xFCrkiye (KVKK)",locales:["tr-TR"],compliance:["kvkk"],timezones:["Europe/Istanbul"]},CA:{name:"Canada",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Canada (PIPEDA / Law 25)",locales:["en","fr-CA"],compliance:["pipeda","law25"],timezones:["America/St_Johns","America/Halifax","America/Toronto","America/Winnipeg","America/Edmonton","America/Vancouver"],overriddenRegions:{QC:{name:"Quebec",type:"region",complianceGroup:"opt-in",description:"Quebec \u2014 Law 25 (GDPR-style opt-in)"}}},US:{name:"United States",type:"country",complianceGroup:"opt-out",default:"opt-out-strict",description:"United States \u2014 opt-out-strict (CPRA) used when state cannot be detected",locales:["en","es-US"],compliance:["ccpa","cpra","vcdpa","cpa-co","ctdpa","ucpa","icdpa-ia","icdpa-in","tipa","mcdpa-mt","mcdpa-mn","ocpa","tdpsa","dpdpa-de","njdpa","nhpa","ndpa-ne","modpa","kcdpa","ridtpa"],timezones:["America/New_York","America/Chicago","America/Denver","America/Phoenix","America/Los_Angeles","America/Anchorage","Pacific/Honolulu"],overriddenRegions:{CA:{name:"California",type:"region",complianceGroup:"opt-out-strict",description:"California \u2014 CPRA/CCPA"},VA:{name:"Virginia",type:"region",complianceGroup:"opt-out",description:"Virginia \u2014 VCDPA"},CO:{name:"Colorado",type:"region",complianceGroup:"opt-out",description:"Colorado \u2014 CPA",requiresSensitiveOptIn:!0},CT:{name:"Connecticut",type:"region",complianceGroup:"opt-out",description:"Connecticut \u2014 CTDPA"},UT:{name:"Utah",type:"region",complianceGroup:"opt-out",description:"Utah \u2014 UCPA"},TX:{name:"Texas",type:"region",complianceGroup:"opt-out",description:"Texas \u2014 TDPSA"},DE:{name:"Delaware",type:"region",complianceGroup:"opt-out",description:"Delaware \u2014 DPDPA"},NJ:{name:"New Jersey",type:"region",complianceGroup:"opt-out",description:"New Jersey \u2014 NJDPA"},OR:{name:"Oregon",type:"region",complianceGroup:"opt-out",description:"Oregon \u2014 OCPA"},MN:{name:"Minnesota",type:"region",complianceGroup:"opt-out",description:"Minnesota \u2014 MCDPA"},MD:{name:"Maryland",type:"region",complianceGroup:"opt-out",description:"Maryland \u2014 MODPA"},KY:{name:"Kentucky",type:"region",complianceGroup:"opt-out",description:"Kentucky \u2014 KCDPA"},TN:{name:"Tennessee",type:"region",complianceGroup:"opt-out",description:"Tennessee \u2014 TIPA"},NE:{name:"Nebraska",type:"region",complianceGroup:"opt-out",description:"Nebraska \u2014 NDPA"},IA:{name:"Iowa",type:"region",complianceGroup:"opt-out",description:"Iowa \u2014 ICDPA"},IN:{name:"Indiana",type:"region",complianceGroup:"opt-out",description:"Indiana \u2014 ICDPA"},MT:{name:"Montana",type:"region",complianceGroup:"opt-out",description:"Montana \u2014 MCDPA"},NH:{name:"New Hampshire",type:"region",complianceGroup:"opt-out",description:"New Hampshire \u2014 NHPA"},RI:{name:"Rhode Island",type:"region",complianceGroup:"opt-out",description:"Rhode Island \u2014 RIDTPA"}}},AR:{name:"Argentina",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Argentina (LPDP)",locales:["es-AR"],compliance:["lpdp-ar"],timezones:["America/Argentina/Buenos_Aires"]},BO:{name:"Bolivia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Bolivia",locales:["es-BO"],compliance:[],timezones:["America/La_Paz"]},BR:{name:"Brazil",type:"country",complianceGroup:"opt-in-brazil",default:"opt-in-brazil",description:"Brazil (LGPD)",locales:["pt-BR"],compliance:["lgpd"],timezones:["America/Noronha","America/Sao_Paulo","America/Manaus","America/Rio_Branco"]},CL:{name:"Chile",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Chile (Law 19.628)",locales:["es-CL"],compliance:["law19628-cl"],timezones:["America/Santiago","Pacific/Easter"]},CO:{name:"Colombia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Colombia (Law 1581)",locales:["es-CO"],compliance:["law1581-co"],timezones:["America/Bogota"]},CR:{name:"Costa Rica",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Costa Rica (LPDP)",locales:["es-CR"],compliance:["lpdp-cr"],timezones:["America/Costa_Rica"]},DO:{name:"Dominican Republic",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Dominican Republic",locales:["es-DO"],compliance:["data-protection-do"],timezones:["America/Santo_Domingo"]},EC:{name:"Ecuador",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Ecuador (LOPDP)",locales:["es-EC"],compliance:["lopdp-ec"],timezones:["America/Guayaquil","Pacific/Galapagos"]},GF:{name:"French Guiana",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"French Guiana",locales:["fr-GF"],compliance:[],timezones:["America/Cayenne"]},GT:{name:"Guatemala",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Guatemala",locales:["es-GT"],compliance:[],timezones:["America/Guatemala"]},GY:{name:"Guyana",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Guyana",locales:["en"],compliance:[],timezones:["America/Guyana"]},HN:{name:"Honduras",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Honduras",locales:["es-HN"],compliance:[],timezones:["America/Tegucigalpa"]},HT:{name:"Haiti",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Haiti",locales:["fr-HT"],compliance:[],timezones:["America/Port-au-Prince"]},JM:{name:"Jamaica",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Jamaica",locales:["en"],compliance:[],timezones:["America/Jamaica"]},MX:{name:"Mexico",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Mexico (LFPDPPP)",locales:["es-MX"],compliance:["lfpdppp"],timezones:["America/Mexico_City","America/Cancun","America/Chihuahua","America/Hermosillo","America/Tijuana"]},NI:{name:"Nicaragua",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Nicaragua",locales:["es-NI"],compliance:[],timezones:["America/Managua"]},PA:{name:"Panama",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Panama",locales:["es-PA"],compliance:["data-protection-pa"],timezones:["America/Panama"]},PE:{name:"Peru",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Peru (LPDP)",locales:["es-PE"],compliance:["lpdp-pe"],timezones:["America/Lima"]},PY:{name:"Paraguay",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Paraguay",locales:["es-PY"],compliance:[],timezones:["America/Asuncion"]},SR:{name:"Suriname",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Suriname",locales:["nl-SR"],compliance:[],timezones:["America/Paramaribo"]},SV:{name:"El Salvador",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"El Salvador",locales:["es-SV"],compliance:[],timezones:["America/El_Salvador"]},TT:{name:"Trinidad and Tobago",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Trinidad and Tobago",locales:["en"],compliance:[],timezones:["America/Port_of_Spain"]},UY:{name:"Uruguay",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Uruguay (Law 18.331)",locales:["es-UY"],compliance:["law18331-uy"],timezones:["America/Montevideo"]},VE:{name:"Venezuela",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Venezuela",locales:["es-VE"],compliance:[],timezones:["America/Caracas"]},AG:{name:"Antigua and Barbuda",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Antigua and Barbuda",locales:["en"],compliance:[],timezones:["America/Antigua"]},BB:{name:"Barbados",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Barbados",locales:["en"],compliance:[],timezones:["America/Barbados"]},BL:{name:"Saint Barth\xE9lemy",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Saint Barth\xE9lemy",locales:["fr-BL"],compliance:[],timezones:["America/St_Barthelemy"]},BM:{name:"Bermuda",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Bermuda",locales:["en"],compliance:[],timezones:["Atlantic/Bermuda"]},BS:{name:"Bahamas",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Bahamas",locales:["en"],compliance:[],timezones:["America/Nassau"]},CU:{name:"Cuba",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Cuba",locales:["es-CU"],compliance:[],timezones:["America/Havana"]},DM:{name:"Dominica",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Dominica",locales:["en"],compliance:[],timezones:["America/Dominica"]},GD:{name:"Grenada",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Grenada",locales:["en"],compliance:[],timezones:["America/Grenada"]},KN:{name:"Saint Kitts and Nevis",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Saint Kitts and Nevis",locales:["en"],compliance:[],timezones:["America/St_Kitts"]},LC:{name:"Saint Lucia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Saint Lucia",locales:["en"],compliance:[],timezones:["America/St_Lucia"]},PM:{name:"Saint Pierre and Miquelon",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Saint Pierre and Miquelon",locales:["fr-PM"],compliance:[],timezones:["America/Miquelon"]},PR:{name:"Puerto Rico",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Puerto Rico",locales:["es-PR","en"],compliance:[],timezones:["America/Puerto_Rico"]},VC:{name:"Saint Vincent and the Grenadines",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Saint Vincent and the Grenadines",locales:["en"],compliance:[],timezones:["America/St_Vincent"]},IN:{name:"India",type:"country",complianceGroup:"opt-in-dpdpa",default:"opt-in-dpdpa",description:"India (DPDPA)",locales:["hi-IN","en","bn-IN","ta-IN"],compliance:["dpdpa"],timezones:["Asia/Kolkata","Asia/Calcutta"]},CN:{name:"China",type:"country",complianceGroup:"opt-in-china",default:"opt-in-china",description:"China (PIPL + DSL + CSL)",locales:["zh-CN"],compliance:["pipl","dsl-cn","csl-cn"],timezones:["Asia/Shanghai"]},BN:{name:"Brunei",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Brunei (Personal Data Protection Order)",locales:["ms-BN","en"],compliance:["privacy-bn"],timezones:["Asia/Brunei"]},ID:{name:"Indonesia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Indonesia (PDP Law)",locales:["id-ID"],compliance:["pdp-id"],timezones:["Asia/Jakarta","Asia/Makassar","Asia/Jayapura"]},KH:{name:"Cambodia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Cambodia",locales:["km-KH"],compliance:[],timezones:["Asia/Phnom_Penh"]},LA:{name:"Laos",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Laos",locales:["lo-LA"],compliance:[],timezones:["Asia/Vientiane"]},MM:{name:"Myanmar",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Myanmar",locales:["my-MM"],compliance:[],timezones:["Asia/Yangon"]},MY:{name:"Malaysia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Malaysia (PDPA)",locales:["ms-MY","zh-MY","en"],compliance:["pdpa-my"],timezones:["Asia/Kuala_Lumpur","Asia/Kuching"]},PH:{name:"Philippines",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Philippines (DPA)",locales:["fil-PH","en"],compliance:["dpa-ph"],timezones:["Asia/Manila"]},SG:{name:"Singapore",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Singapore (PDPA)",locales:["zh-SG","ms-SG","ta-SG","en"],compliance:["pdpa-sg"],timezones:["Asia/Singapore"]},TH:{name:"Thailand",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Thailand (PDPA \u2014 GDPR-style opt-in)",locales:["th-TH"],compliance:["pdpa-th"],timezones:["Asia/Bangkok"]},TL:{name:"Timor-Leste",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Timor-Leste",locales:["pt-TL"],compliance:[],timezones:["Asia/Dili"]},VN:{name:"Vietnam",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Vietnam (PDPD)",locales:["vi-VN"],compliance:["pdpd-vn"],timezones:["Asia/Ho_Chi_Minh"]},HK:{name:"Hong Kong",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Hong Kong SAR (PDPO)",locales:["zh-HK"],compliance:["pdpl-hk"],timezones:["Asia/Hong_Kong"]},JP:{name:"Japan",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Japan (APPI)",locales:["ja-JP"],compliance:["appi"],timezones:["Asia/Tokyo"]},KP:{name:"North Korea",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"North Korea",locales:["ko-KP"],compliance:[],timezones:["Asia/Pyongyang"]},KR:{name:"South Korea",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"South Korea (PIPA)",locales:["ko-KR"],compliance:["pipa-kr"],timezones:["Asia/Seoul"]},MN:{name:"Mongolia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Mongolia",locales:["mn-MN"],compliance:[],timezones:["Asia/Ulaanbaatar","Asia/Hovd"]},MO:{name:"Macau",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Macau SAR (PDPA)",locales:["zh-MO","pt-MO"],compliance:["pdpa-mo"],timezones:["Asia/Macau"]},TW:{name:"Taiwan",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Taiwan (PDPL)",locales:["zh-TW"],compliance:["pdpl-tw"],timezones:["Asia/Taipei"]},AF:{name:"Afghanistan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Afghanistan",locales:["fa-AF"],compliance:[],timezones:["Asia/Kabul"]},BD:{name:"Bangladesh",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Bangladesh",locales:["bn-BD"],compliance:[],timezones:["Asia/Dhaka"]},BT:{name:"Bhutan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Bhutan",locales:["dz-BT"],compliance:[],timezones:["Asia/Thimphu"]},IO:{name:"British Indian Ocean Territory",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"British Indian Ocean Territory",locales:["en"],compliance:[],timezones:["Indian/Chagos"]},LK:{name:"Sri Lanka",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Sri Lanka",locales:["si-LK","ta-LK"],compliance:["privacy-lk"],timezones:["Asia/Colombo"]},MV:{name:"Maldives",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Maldives",locales:["dv-MV"],compliance:[],timezones:["Indian/Maldives"]},NP:{name:"Nepal",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Nepal",locales:["ne-NP"],compliance:["privacy-np"],timezones:["Asia/Kathmandu"]},PK:{name:"Pakistan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Pakistan",locales:["ur-PK","en"],compliance:[],timezones:["Asia/Karachi"]},AM:{name:"Armenia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Armenia",locales:["hy-AM"],compliance:[],timezones:["Asia/Yerevan"]},AZ:{name:"Azerbaijan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Azerbaijan",locales:["az-AZ"],compliance:[],timezones:["Asia/Baku"]},GE:{name:"Georgia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Georgia",locales:["ka-GE"],compliance:[],timezones:["Asia/Tbilisi"]},KG:{name:"Kyrgyzstan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Kyrgyzstan",locales:["ky-KG","ru-KG"],compliance:[],timezones:["Asia/Bishkek"]},KZ:{name:"Kazakhstan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Kazakhstan",locales:["kk-KZ","ru-KZ"],compliance:[],timezones:["Asia/Almaty","Asia/Aqtobe"]},TJ:{name:"Tajikistan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Tajikistan",locales:["tg-TJ"],compliance:[],timezones:["Asia/Dushanbe"]},TM:{name:"Turkmenistan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Turkmenistan",locales:["tk-TM"],compliance:[],timezones:["Asia/Ashgabat"]},UZ:{name:"Uzbekistan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Uzbekistan",locales:["uz-UZ"],compliance:[],timezones:["Asia/Tashkent","Asia/Samarkand"]},AE:{name:"United Arab Emirates",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"United Arab Emirates (UAE PDPL / DIFC DPL / ADGM DPR)",locales:["ar-AE"],compliance:["uae-pdpl","difc-dpl","adgm-dpr"],timezones:["Asia/Dubai"]},BH:{name:"Bahrain",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Bahrain (PDPL)",locales:["ar-BH"],compliance:["pdpl-bh"],timezones:["Asia/Bahrain"]},IL:{name:"Israel",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Israel (Privacy Protection Law)",locales:["he-IL","ar-IL"],compliance:["privacy-il"],timezones:["Asia/Jerusalem"]},IQ:{name:"Iraq",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Iraq",locales:["ar-IQ"],compliance:[],timezones:["Asia/Baghdad"]},IR:{name:"Iran",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Iran",locales:["fa-IR"],compliance:[],timezones:["Asia/Tehran"]},JO:{name:"Jordan",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Jordan",locales:["ar-JO"],compliance:[],timezones:["Asia/Amman"]},KW:{name:"Kuwait",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Kuwait",locales:["ar-KW"],compliance:["privacy-kw"],timezones:["Asia/Kuwait"]},LB:{name:"Lebanon",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Lebanon",locales:["ar-LB"],compliance:[],timezones:["Asia/Beirut"]},OM:{name:"Oman",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Oman (PDPL)",locales:["ar-OM"],compliance:["pdpl-om"],timezones:["Asia/Muscat"]},PS:{name:"Palestine",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Palestine",locales:["ar-PS"],compliance:[],timezones:["Asia/Gaza","Asia/Hebron"]},QA:{name:"Qatar",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Qatar (PDPL)",locales:["ar-QA"],compliance:["qpdl-qa"],timezones:["Asia/Qatar"]},SA:{name:"Saudi Arabia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Saudi Arabia (PDPL)",locales:["ar-SA"],compliance:["pdpl-sa"],timezones:["Asia/Riyadh"]},SY:{name:"Syria",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Syria",locales:["ar-SY"],compliance:[],timezones:["Asia/Damascus"]},YE:{name:"Yemen",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Yemen",locales:["ar-YE"],compliance:[],timezones:["Asia/Aden"]},BF:{name:"Burkina Faso",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Burkina Faso",locales:["fr-BF"],compliance:[],timezones:["Africa/Ouagadougou"]},BJ:{name:"Benin",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Benin",locales:["fr-BJ"],compliance:[],timezones:["Africa/Porto-Novo"]},CI:{name:"C\xF4te d'Ivoire",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"C\xF4te d'Ivoire",locales:["fr-CI"],compliance:[],timezones:["Africa/Abidjan"]},CM:{name:"Cameroon",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Cameroon",locales:["fr-CM","en"],compliance:[],timezones:["Africa/Douala"]},CV:{name:"Cabo Verde",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Cabo Verde",locales:["pt-CV"],compliance:[],timezones:["Atlantic/Cape_Verde"]},GA:{name:"Gabon",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Gabon",locales:["fr-GA"],compliance:[],timezones:["Africa/Libreville"]},GH:{name:"Ghana",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Ghana (DPA)",locales:["en"],compliance:["dpa-gh"],timezones:["Africa/Accra"]},GM:{name:"Gambia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Gambia",locales:["en"],compliance:[],timezones:["Africa/Banjul"]},GN:{name:"Guinea",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Guinea",locales:["fr-GN"],compliance:[],timezones:["Africa/Conakry"]},GQ:{name:"Equatorial Guinea",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Equatorial Guinea",locales:["es-GQ","fr-GQ"],compliance:[],timezones:["Africa/Malabo"]},GW:{name:"Guinea-Bissau",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Guinea-Bissau",locales:["pt-GW"],compliance:[],timezones:["Africa/Bissau"]},LR:{name:"Liberia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Liberia",locales:["en"],compliance:[],timezones:["Africa/Monrovia"]},ML:{name:"Mali",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Mali",locales:["fr-ML"],compliance:[],timezones:["Africa/Bamako"]},MR:{name:"Mauritania",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Mauritania",locales:["ar-MR"],compliance:[],timezones:["Africa/Nouakchott"]},NE:{name:"Niger",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Niger",locales:["fr-NE"],compliance:[],timezones:["Africa/Niamey"]},NG:{name:"Nigeria",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Nigeria (NDPA)",locales:["en"],compliance:["ndpa-ng"],timezones:["Africa/Lagos"]},SL:{name:"Sierra Leone",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Sierra Leone",locales:["en"],compliance:[],timezones:["Africa/Freetown"]},SN:{name:"Senegal",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Senegal",locales:["fr-SN"],compliance:[],timezones:["Africa/Dakar"]},TG:{name:"Togo",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Togo",locales:["fr-TG"],compliance:[],timezones:["Africa/Lome"]},BI:{name:"Burundi",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Burundi",locales:["fr-BI"],compliance:[],timezones:["Africa/Bujumbura"]},DJ:{name:"Djibouti",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Djibouti",locales:["fr-DJ","ar-DJ"],compliance:[],timezones:["Africa/Djibouti"]},ER:{name:"Eritrea",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Eritrea",locales:["ti-ER"],compliance:[],timezones:["Africa/Asmara"]},ET:{name:"Ethiopia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Ethiopia",locales:["am-ET"],compliance:[],timezones:["Africa/Addis_Ababa"]},KE:{name:"Kenya",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Kenya (DPA)",locales:["sw-KE","en"],compliance:["dpa-ke"],timezones:["Africa/Nairobi"]},KM:{name:"Comoros",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Comoros",locales:["ar-KM","fr-KM"],compliance:[],timezones:["Indian/Comoro"]},MG:{name:"Madagascar",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Madagascar",locales:["fr-MG"],compliance:[],timezones:["Indian/Antananarivo"]},MU:{name:"Mauritius",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Mauritius (DPA)",locales:["en","fr-MU"],compliance:["dpa-mu"],timezones:["Indian/Mauritius"]},MW:{name:"Malawi",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Malawi",locales:["en"],compliance:[],timezones:["Africa/Blantyre"]},MZ:{name:"Mozambique",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Mozambique",locales:["pt-MZ"],compliance:[],timezones:["Africa/Maputo"]},RW:{name:"Rwanda",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Rwanda (DPA)",locales:["rw-RW","en"],compliance:["dpa-rw"],timezones:["Africa/Kigali"]},SC:{name:"Seychelles",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Seychelles",locales:["fr-SC","en"],compliance:[],timezones:["Indian/Mahe"]},SO:{name:"Somalia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Somalia",locales:["so-SO"],compliance:[],timezones:["Africa/Mogadishu"]},SS:{name:"South Sudan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"South Sudan",locales:["en"],compliance:[],timezones:["Africa/Juba"]},ST:{name:"S\xE3o Tom\xE9 and Pr\xEDncipe",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"S\xE3o Tom\xE9 and Pr\xEDncipe",locales:["pt-ST"],compliance:[],timezones:["Africa/Sao_Tome"]},TZ:{name:"Tanzania",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Tanzania",locales:["sw-TZ","en"],compliance:[],timezones:["Africa/Dar_es_Salaam"]},UG:{name:"Uganda",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Uganda (DPA)",locales:["en"],compliance:["dpa-ug"],timezones:["Africa/Kampala"]},AO:{name:"Angola",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Angola",locales:["pt-AO"],compliance:[],timezones:["Africa/Luanda"]},BW:{name:"Botswana",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Botswana (DPA)",locales:["en"],compliance:["dpa-bw"],timezones:["Africa/Gaborone"]},LS:{name:"Lesotho",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Lesotho",locales:["en"],compliance:[],timezones:["Africa/Maseru"]},NA:{name:"Namibia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Namibia",locales:["en"],compliance:[],timezones:["Africa/Windhoek"]},SZ:{name:"Eswatini",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Eswatini",locales:["en"],compliance:[],timezones:["Africa/Mbabane"]},ZA:{name:"South Africa",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"South Africa (POPIA)",locales:["en","af-ZA"],compliance:["popia"],timezones:["Africa/Johannesburg"]},ZM:{name:"Zambia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Zambia (DPA)",locales:["en"],compliance:["dpa-zm"],timezones:["Africa/Lusaka"]},ZW:{name:"Zimbabwe",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Zimbabwe (DPA)",locales:["en"],compliance:["dpa-zw"],timezones:["Africa/Harare"]},DZ:{name:"Algeria",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Algeria",locales:["ar-DZ","fr-DZ"],compliance:["dpa-dz"],timezones:["Africa/Algiers"]},EG:{name:"Egypt",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Egypt (DPA)",locales:["ar-EG"],compliance:["dpa-eg"],timezones:["Africa/Cairo"]},LY:{name:"Libya",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Libya",locales:["ar-LY"],compliance:[],timezones:["Africa/Tripoli"]},MA:{name:"Morocco",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Morocco",locales:["ar-MA","fr-MA"],compliance:["dpa-ma"],timezones:["Africa/Casablanca"]},SD:{name:"Sudan",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Sudan",locales:["ar-SD"],compliance:[],timezones:["Africa/Khartoum"]},TN:{name:"Tunisia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Tunisia (DPA)",locales:["ar-TN","fr-TN"],compliance:["dpa-tn"],timezones:["Africa/Tunis"]},CD:{name:"DR Congo",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"DR Congo",locales:["fr-CD"],compliance:[],timezones:["Africa/Kinshasa","Africa/Lubumbashi"]},CF:{name:"Central African Republic",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Central African Republic",locales:["fr-CF"],compliance:[],timezones:["Africa/Bangui"]},CG:{name:"Republic of Congo",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Republic of Congo",locales:["fr-CG"],compliance:[],timezones:["Africa/Brazzaville"]},TD:{name:"Chad",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Chad",locales:["fr-TD","ar-TD"],compliance:[],timezones:["Africa/Ndjamena"]},BY:{name:"Belarus",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Belarus",locales:["be-BY","ru-BY"],compliance:[],timezones:["Europe/Minsk"]},MD:{name:"Moldova",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Moldova",locales:["ro-MD"],compliance:[],timezones:["Europe/Chisinau"]},RU:{name:"Russia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Russia",locales:["ru-RU"],compliance:[],timezones:["Europe/Kaliningrad","Europe/Moscow","Europe/Samara","Asia/Yekaterinburg","Asia/Omsk","Asia/Krasnoyarsk","Asia/Irkutsk","Asia/Yakutsk","Asia/Vladivostok","Asia/Magadan","Asia/Kamchatka"]},UA:{name:"Ukraine",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Ukraine",locales:["uk-UA"],compliance:[],timezones:["Europe/Kyiv"]},VA:{name:"Holy See",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Holy See",locales:["it-VA"],compliance:[],timezones:["Europe/Vatican"]},AU:{name:"Australia",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"Australia (Privacy Act)",locales:["en"],compliance:["privacy-au"],timezones:["Australia/Sydney","Australia/Brisbane","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Hobart"]},FJ:{name:"Fiji",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Fiji",locales:["en"],compliance:["privacy-fj"],timezones:["Pacific/Fiji"]},FM:{name:"Micronesia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Micronesia",locales:["en"],compliance:[],timezones:["Pacific/Chuuk","Pacific/Pohnpei","Pacific/Kosrae"]},KI:{name:"Kiribati",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Kiribati",locales:["en"],compliance:[],timezones:["Pacific/Tarawa","Pacific/Enderbury","Pacific/Kiritimati"]},MH:{name:"Marshall Islands",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Marshall Islands",locales:["en"],compliance:[],timezones:["Pacific/Majuro","Pacific/Kwajalein"]},MP:{name:"Northern Mariana Islands",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Northern Mariana Islands",locales:["en"],compliance:[],timezones:["Pacific/Saipan"]},NC:{name:"New Caledonia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"New Caledonia",locales:["fr-NC"],compliance:[],timezones:["Pacific/Noumea"]},NF:{name:"Norfolk Island",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Norfolk Island",locales:["en"],compliance:[],timezones:["Pacific/Norfolk"]},NR:{name:"Nauru",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Nauru",locales:["en"],compliance:[],timezones:["Pacific/Nauru"]},NU:{name:"Niue",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Niue",locales:["en"],compliance:[],timezones:["Pacific/Niue"]},NZ:{name:"New Zealand",type:"country",complianceGroup:"general-privacy-consent",default:"general-privacy-consent",description:"New Zealand (Privacy Act)",locales:["en"],compliance:["privacy-nz"],timezones:["Pacific/Auckland","Pacific/Chatham"]},PF:{name:"French Polynesia",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"French Polynesia",locales:["fr-PF"],compliance:[],timezones:["Pacific/Tahiti","Pacific/Marquesas","Pacific/Gambier"]},PG:{name:"Papua New Guinea",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Papua New Guinea",locales:["en"],compliance:["privacy-pg"],timezones:["Pacific/Port_Moresby","Pacific/Bougainville"]},PW:{name:"Palau",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Palau",locales:["en"],compliance:[],timezones:["Pacific/Palau"]},SB:{name:"Solomon Islands",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Solomon Islands",locales:["en"],compliance:[],timezones:["Pacific/Guadalcanal"]},TO:{name:"Tonga",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Tonga",locales:["en"],compliance:[],timezones:["Pacific/Tongatapu"]},TV:{name:"Tuvalu",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Tuvalu",locales:["en"],compliance:[],timezones:["Pacific/Funafuti"]},VU:{name:"Vanuatu",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Vanuatu",locales:["fr-VU","en"],compliance:[],timezones:["Pacific/Efate"]},WS:{name:"Samoa",type:"country",complianceGroup:"notice-only",default:"notice-only",description:"Samoa",locales:["en"],compliance:[],timezones:["Pacific/Apia"]},UK:{name:"United Kingdom",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"United Kingdom (UK GDPR + PECR)",locales:["en"],compliance:["uk-gdpr","pecr"],timezones:["Europe/London"]},CH:{name:"Switzerland",type:"country",complianceGroup:"opt-in",default:"opt-in",description:"Switzerland (revFADP)",locales:["de-CH","fr-CH","it-CH"],compliance:["revfadp"],timezones:["Europe/Zurich"]}}},de=[...Object.values(g.countries).reduce((e,n)=>(n.compliance.forEach(a=>{e.add(a)}),e),new Set)],ye=Object.entries(g.countries).reduce(function(e,[n,a]){return e[n]=a.name,e},{}),ge=Object.values(g.countries).reduce(function(e,n){return n.locales.forEach(a=>{e[a]=n.name}),e},{});function S(e){if(!e||typeof e!="object")return!1;let n=e;if(typeof n.version!="string")return!1;let a=n.countries;return!a||typeof a!="object"?!1:Object.values(a).every(t=>!!t&&typeof t=="object"&&typeof t.complianceGroup=="string")}async function fe(e,n){let a={map:g};if(e===void 0||e==="default")return a;let t,o;if(typeof e=="string")try{if(o=await fetch(e),!o.ok)return n(`compliance.complianceMap fetch from "${e}" failed (HTTP ${o.status}) \u2014 falling back to the embedded map.`),a;t=await o.json()}catch(c){return n(`compliance.complianceMap fetch from "${e}" failed (${c instanceof Error?c.message:String(c)}) \u2014 falling back to the embedded map.`),a}else t=e;if(!S(t))return n(`compliance.complianceMap ${typeof e=="string"?`at "${e}"`:"object"} failed validation \u2014 falling back to the embedded map.`),a;for(let[c,l]of Object.entries(t.countries))l.overriddenRegions&&l.default===void 0&&n(`compliance.complianceMap country "${c}" has overriddenRegions but no explicit default \u2014 falling back to complianceGroup ("${l.complianceGroup}"), which may under-comply for regions not listed.`);let i={map:t};return o&&(i.response=o),i}var G=[{pattern:"security_storage",vendor:"Google Consent Mode v2",category:"necessary"},{pattern:"functionality_storage",vendor:"Google Consent Mode v2",category:"functional"},{pattern:"personalization_storage",vendor:"Google Consent Mode v2",category:"preferences"},{pattern:"analytics_storage",vendor:"Google Consent Mode v2",category:"analytics"},{pattern:"ad_storage",vendor:"Google Consent Mode v2",category:"marketing"},{pattern:"ad_user_data",vendor:"Google Consent Mode v2",category:"marketing"},{pattern:"ad_personalization",vendor:"Google Consent Mode v2",category:"marketing"},{pattern:"_ga",vendor:"Google Analytics",category:"analytics"},{pattern:"_ga_*",vendor:"Google Analytics 4",category:"analytics"},{pattern:"_gid",vendor:"Google Analytics",category:"analytics"},{pattern:"_gat",vendor:"Google Analytics",category:"analytics"},{pattern:"_gat_*",vendor:"Google Analytics",category:"analytics"},{pattern:"_gcl_au",vendor:"Google Ads",category:"marketing"},{pattern:"_gac_*",vendor:"Google Ads",category:"marketing"},{pattern:"_gcl_aw",vendor:"Google Ads",category:"marketing"},{pattern:"_fbp",vendor:"Meta Pixel",category:"marketing"},{pattern:"_fbc",vendor:"Meta Pixel",category:"marketing"},{pattern:"fr",vendor:"Meta Pixel",category:"marketing"},{pattern:"_hjSessionUser_*",vendor:"Hotjar",category:"analytics"},{pattern:"_hjSession_*",vendor:"Hotjar",category:"analytics"},{pattern:"_hjid",vendor:"Hotjar",category:"analytics"},{pattern:"hjViewportId",vendor:"Hotjar",category:"analytics"},{pattern:"ajs_user_id",vendor:"Segment",category:"analytics"},{pattern:"ajs_anonymous_id",vendor:"Segment",category:"analytics"},{pattern:"ajs_group_id",vendor:"Segment",category:"analytics"},{pattern:"intercom-id-*",vendor:"Intercom",category:"functional"},{pattern:"intercom-session-*",vendor:"Intercom",category:"functional"},{pattern:"intercom-device-id-*",vendor:"Intercom",category:"functional"},{pattern:"__hstc",vendor:"HubSpot",category:"marketing"},{pattern:"hubspotutk",vendor:"HubSpot",category:"marketing"},{pattern:"__hssc",vendor:"HubSpot",category:"marketing"},{pattern:"__hssrc",vendor:"HubSpot",category:"marketing"},{pattern:"mp_*",vendor:"Mixpanel",category:"analytics"},{pattern:"li_sugr",vendor:"LinkedIn Insight",category:"marketing"},{pattern:"bcookie",vendor:"LinkedIn Insight",category:"marketing"},{pattern:"lidc",vendor:"LinkedIn Insight",category:"marketing"},{pattern:"UserMatchHistory",vendor:"LinkedIn Insight",category:"marketing"},{pattern:"_ttp",vendor:"TikTok Pixel",category:"marketing"},{pattern:"_clck",vendor:"Microsoft Clarity",category:"analytics"},{pattern:"_clsk",vendor:"Microsoft Clarity",category:"analytics"},{pattern:"_pinterest_ct*",vendor:"Pinterest Tag",category:"marketing"},{pattern:"_pin_unauth",vendor:"Pinterest Tag",category:"marketing"},{pattern:"personalization_id",vendor:"X (Twitter) Pixel",category:"marketing"},{pattern:"amplitude_id_*",vendor:"Amplitude",category:"analytics"},{pattern:"__stripe_mid",vendor:"Stripe",category:"necessary"},{pattern:"__stripe_sid",vendor:"Stripe",category:"necessary"},{pattern:"__cf_bm",vendor:"Cloudflare",category:"necessary"},{pattern:"cf_clearance",vendor:"Cloudflare",category:"necessary"},{pattern:"_zendesk_*",vendor:"Zendesk",category:"functional"},{pattern:"drift_aid",vendor:"Drift",category:"functional"},{pattern:"driftt_aid",vendor:"Drift",category:"functional"},{pattern:"crisp-client*",vendor:"Crisp",category:"functional"},{pattern:"AMCV_*",vendor:"Adobe Experience Cloud",category:"analytics"},{pattern:"AMCVS_*",vendor:"Adobe Experience Cloud",category:"analytics"},{pattern:"s_cc",vendor:"Adobe Analytics",category:"analytics"},{pattern:"s_sq",vendor:"Adobe Analytics",category:"analytics"},{pattern:"s_vi",vendor:"Adobe Analytics",category:"analytics"},{pattern:"mbox",vendor:"Adobe Target",category:"preferences"},{pattern:"_mkto_trk",vendor:"Marketo",category:"marketing"},{pattern:"cto_bundle",vendor:"Criteo",category:"marketing"},{pattern:"cto_id_out",vendor:"Criteo",category:"marketing"},{pattern:"TTD_DEVICE_ID",vendor:"The Trade Desk",category:"marketing"},{pattern:"ttd_*",vendor:"The Trade Desk",category:"marketing"},{pattern:"id",vendor:"Google DoubleClick",category:"marketing"},{pattern:"IDE",vendor:"Google DoubleClick",category:"marketing"},{pattern:"DSID",vendor:"Google DoubleClick",category:"marketing"},{pattern:"KADUSERCOOKIE",vendor:"PubMatic",category:"marketing"},{pattern:"rubicon_user_*",vendor:"Rubicon Project",category:"marketing"},{pattern:"Anonymon_id",vendor:"OpenX",category:"marketing"},{pattern:"pdomid",vendor:"OpenX",category:"marketing"},{pattern:"uuid2",vendor:"AppNexus",category:"marketing"},{pattern:"icu",vendor:"AppNexus",category:"marketing"},{pattern:"_scid",vendor:"Snap Pixel",category:"marketing"},{pattern:"_sc_cspv",vendor:"Snap Pixel",category:"marketing"},{pattern:"_rdt_uuid",vendor:"Reddit Pixel",category:"marketing"},{pattern:"obuid",vendor:"Outbrain",category:"marketing"},{pattern:"t_gid",vendor:"Taboola",category:"marketing"},{pattern:"__kla_id",vendor:"Klaviyo",category:"marketing"},{pattern:"sc_anonymous_id",vendor:"Salesforce Marketing Cloud",category:"marketing"},{pattern:"vst",vendor:"Salesforce Marketing Cloud",category:"marketing"},{pattern:"visitor_id*",vendor:"Salesforce Pardot",category:"marketing"},{pattern:"piAId",vendor:"Salesforce Pardot",category:"marketing"},{pattern:"exp_last_visit",vendor:"ActiveCampaign",category:"marketing"},{pattern:"exp_tracker",vendor:"ActiveCampaign",category:"marketing"},{pattern:"_ce.s*",vendor:"Crazy Egg",category:"analytics"},{pattern:"lr_*",vendor:"LogRocket",category:"analytics"},{pattern:"_hp2_id.*",vendor:"Heap Analytics",category:"analytics"},{pattern:"_hp2_ses.*",vendor:"Heap Analytics",category:"analytics"},{pattern:"_lo_*",vendor:"Lucky Orange",category:"analytics"},{pattern:"fs_uid",vendor:"FullStory",category:"analytics"},{pattern:"_fs_*",vendor:"FullStory",category:"analytics"},{pattern:"ln_or",vendor:"LiveSession",category:"analytics"},{pattern:"_vwo_uuid*",vendor:"Visual Website Optimizer (VWO)",category:"analytics"},{pattern:"_vis_opt_*",vendor:"Visual Website Optimizer (VWO)",category:"analytics"},{pattern:"OptimizelyBuckets",vendor:"Optimizely",category:"analytics"},{pattern:"optimizelyEndUserId",vendor:"Optimizely",category:"analytics"},{pattern:"OptanonConsent",vendor:"OneTrust",category:"necessary"},{pattern:"OptanonAlertBoxClosed",vendor:"OneTrust",category:"necessary"},{pattern:"SyrenisCookieConsentDate_*",vendor:"Syrenis Cassie",category:"necessary"},{pattern:"SyrenisCookieFormConsent_*",vendor:"Syrenis Cassie",category:"necessary"},{pattern:"SyrenisCookiePrivacyLink_*",vendor:"Syrenis Cassie",category:"necessary"},{pattern:"SyrenisGtmConsent_*",vendor:"Syrenis Cassie",category:"necessary"},{pattern:"SyrenisGuid_*",vendor:"Syrenis Cassie",category:"necessary"},{pattern:"CookieConsent",vendor:"Cookiebot",category:"necessary"},{pattern:"uc_settings",vendor:"Usercentrics",category:"necessary"},{pattern:"uc_user_interaction",vendor:"Usercentrics",category:"necessary"},{pattern:"didomi_token",vendor:"Didomi",category:"necessary"},{pattern:"euconsent-v2",vendor:"IAB TCF Global Vendor List",category:"necessary"},{pattern:"cconsent",vendor:"Cookie Consent Studio",category:"necessary"},{pattern:"JSESSIONID",vendor:"New Relic",category:"necessary"},{pattern:"NRAGENT",vendor:"New Relic",category:"necessary"},{pattern:"_dd_s",vendor:"Datadog",category:"necessary"},{pattern:"dtCookie",vendor:"Dynatrace",category:"necessary"},{pattern:"dtPC",vendor:"Dynatrace",category:"necessary"},{pattern:"rxVisitor",vendor:"Dynatrace",category:"necessary"},{pattern:"ak_bmsc",vendor:"Akamai",category:"necessary"},{pattern:"_abck",vendor:"Akamai",category:"necessary"},{pattern:"vuid",vendor:"Vimeo",category:"analytics"},{pattern:"__cf_vuid",vendor:"Vimeo",category:"analytics"},{pattern:"VISITOR_INFO1_LIVE",vendor:"YouTube",category:"marketing"},{pattern:"YSC",vendor:"YouTube",category:"necessary"},{pattern:"GPS",vendor:"YouTube",category:"marketing"},{pattern:"_wistia_*",vendor:"Wistia",category:"analytics"},{pattern:"_elvr_*",vendor:"Elevar",category:"analytics"},{pattern:"stkn",vendor:"Shopify Core Analytics",category:"analytics"},{pattern:"rmStore*",vendor:"Rakuten Advertising",category:"marketing"},{pattern:"_ir_*",vendor:"Impact Radius",category:"marketing"},{pattern:"aw*",vendor:"Awin",category:"marketing"},{pattern:"bctc",vendor:"Awin",category:"marketing"},{pattern:"mcookie",vendor:"CJ Affiliate",category:"marketing"},{pattern:"_shopify_y",vendor:"Shopify",category:"analytics"},{pattern:"_shopify_s",vendor:"Shopify",category:"analytics"},{pattern:"_shopify_sa_p",vendor:"Shopify",category:"marketing"},{pattern:"shopify_sa_t",vendor:"Shopify",category:"marketing"},{pattern:"cart_sig",vendor:"Shopify",category:"necessary"},{pattern:"secure_customer_sig",vendor:"Shopify",category:"necessary"},{pattern:"wp_woocommerce_session*",vendor:"WooCommerce",category:"necessary"},{pattern:"woocommerce_items_in_cart",vendor:"WooCommerce",category:"necessary"},{pattern:"woocommerce_cart_hash",vendor:"WooCommerce",category:"necessary"},{pattern:"QSI_",vendor:"Qualtrics",category:"functional"},{pattern:"feedback_id",vendor:"SurveyMonkey",category:"functional"},{pattern:"usbl.",vendor:"Usabilla",category:"functional"}];function Ae(e){let n=e.trim();if(!n)return;let a=G.find(o=>!o.pattern.endsWith("*")&&o.pattern===n);if(a)return a;let t=G.filter(o=>o.pattern.endsWith("*")&&n.startsWith(o.pattern.slice(0,-1)));if(t.length!==0)return t.reduce((o,i)=>i.pattern.length>o.pattern.length?i:o)}function k(e){return e.map(f).join("")}function f(e){return e.t==="text"?D(e.v):e.t==="br"?"<br>":e.t==="a"?`<a href="${_(e.href)}">${e.c.map(f).join("")}</a>`:`<${e.t}>${e.c.map(f).join("")}</${e.t}>`}function D(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function _(e){return e.replace(/"/g,""").replace(/</g,"<")}function be(e){if(!e)return"";let n=e.trim();if(n.startsWith("["))try{return k(JSON.parse(n))}catch{}return e}function A(e){return e.t==="text"?e.v.trim().length>0:e.t==="br"?!1:e.c.some(A)}function E(e){return e.replace(/<[^>]*>/g,"").trim().length>0}function Ce(e){if(!e)return!1;let n=e.trim();if(!n)return!1;if(n.startsWith("["))try{return JSON.parse(n).some(A)}catch{}return E(n)}var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";function M(e){return new TextEncoder().encode(e)}function I(e){return new TextDecoder().decode(e)}function L(e){let n="";for(let a=0;a<e.length;a+=3){let t=e[a]??0,o=a+1<e.length?e[a+1]??0:0,i=a+2<e.length?e[a+2]??0:0;n+=d[t>>2],n+=d[(t&3)<<4|o>>4],a+1<e.length&&(n+=d[(o&15)<<2|i>>6]),a+2<e.length&&(n+=d[i&63])}return n}function T(e){let n=new Map(d.split("").map((o,i)=>[o,i])),a=e.replace(/[^A-Za-z0-9\-_]/g,""),t=[];for(let o=0;o<a.length;o+=4){let i=n.get(a[o]??"")??0,c=n.get(a[o+1]??"")??0,l=a[o+2]!==void 0?n.get(a[o+2]):void 0,m=a[o+3]!==void 0?n.get(a[o+3]):void 0;t.push(i<<2|c>>4),l!==void 0&&t.push((c&15)<<4|l>>2),m!==void 0&&t.push(((l??0)&3)<<6|m)}return new Uint8Array(t)}function ke(e){let n={v:2,ts:Math.floor(Date.now()/100),cmpId:e.cmpId,cmpV:e.cmpVersion,cs:e.consentScreen,lang:e.consentLanguage.toUpperCase().slice(0,2),vlV:e.vendorListVersion,pc:e.purposeConsents,vc:e.vendorConsents};return L(M(JSON.stringify(n)))}function De(e){try{let n=JSON.parse(I(T(e)));return{version:n.v,cmpId:n.cmpId,consentLanguage:n.lang,purposeConsents:Array.isArray(n.pc)?n.pc:[],vendorConsents:Array.isArray(n.vc)?n.vc:[],created:n.ts*100}}catch{return null}}var y="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";function w(e){return new TextEncoder().encode(e)}function R(e){return new TextDecoder().decode(e)}function O(e){let n="";for(let a=0;a<e.length;a+=3){let t=e[a]??0,o=a+1<e.length?e[a+1]??0:0,i=a+2<e.length?e[a+2]??0:0;n+=y[t>>2],n+=y[(t&3)<<4|o>>4],a+1<e.length&&(n+=y[(o&15)<<2|i>>6]),a+2<e.length&&(n+=y[i&63])}return n}function N(e){let n=new Map(y.split("").map((o,i)=>[o,i])),a=e.replace(/[^A-Za-z0-9\-_]/g,""),t=[];for(let o=0;o<a.length;o+=4){let i=n.get(a[o]??"")??0,c=n.get(a[o+1]??"")??0,l=a[o+2]!==void 0?n.get(a[o+2]):void 0,m=a[o+3]!==void 0?n.get(a[o+3]):void 0;t.push(i<<2|c>>4),l!==void 0&&t.push((c&15)<<4|l>>2),m!==void 0&&t.push(((l??0)&3)<<6|m)}return new Uint8Array(t)}var B=0,x=1,K=2;function v(e,n){return e?n?x:K:B}function Me(e){let n={v:1,ts:Math.floor(Date.now()/100),cmpId:e.cmpId,cmpV:e.cmpVersion,sect:"usnat",saleOO:v(e.saleApplicable,e.saleOptOut),shareOO:v(e.sharingApplicable,e.sharingOptOut),taOO:v(e.sharingApplicable,e.sharingOptOut),mspaCT:e.mspaCoveredTransaction?1:2,mspaOOM:e.mspaOptOutOptionMode,mspaSPM:e.mspaServiceProviderMode,...e.gpcDetected!==void 0?{gpc:e.gpcDetected}:{}};return O(w(JSON.stringify(n)))}function Ie(e){try{let n=JSON.parse(R(N(e)));return{version:n.v,cmpId:n.cmpId,cmpVersion:n.cmpV,saleOptOut:n.saleOO,sharingOptOut:n.shareOO,targetedAdvertisingOptOut:n.taOO,...n.gpc!==void 0?{gpc:n.gpc}:{},created:n.ts*100}}catch{return null}}var U=["ar","he","fa","ur","ps","sd","ug","yi"];function we(e,n){if(n==="ltr"||n==="rtl")return n;try{let t=new Intl.Locale(e).getTextInfo?.().direction;if(t==="ltr"||t==="rtl")return t}catch{}let a=e.slice(0,2).toLowerCase();return U.includes(a)?"rtl":"ltr"}export{H as a,q as b,r as c,J as d,Y as e,Q as f,X as g,ee as h,ne as i,ae as j,oe as k,te as l,ie as m,C as n,re as o,ce as p,le as q,se as r,pe as s,z as t,ue as u,me as v,g as w,de as x,ye as y,ge as z,fe as A,G as B,Ae as C,k as D,be as E,Ce as F,ke as G,De as H,Me as I,Ie as J,we as K};
|
|
2
|
-
//# sourceMappingURL=chunk-COR72NFQ.js.map
|