{"_id":"@adv-ui/re-vendor-by-consents-loader","_rev":"36-0839d9e990a6c611ec1b10e10f5b82e5","name":"@adv-ui/re-vendor-by-consents-loader","dist-tags":{"latest":"1.2.0"},"versions":{"1.2.0":{"name":"@adv-ui/re-vendor-by-consents-loader","version":"1.2.0","keywords":[],"author":"","license":"ISC","_id":"@adv-ui/re-vendor-by-consents-loader@1.2.0","maintainers":[{"name":"oscar-raig-adevinta","email":"oscar.raig@adevinta.com"},{"name":"arnau.guell","email":"arnau.guell@adevinta.com"},{"name":"estefania_garcia","email":"estefania.garcia.ext@adevinta.com"},{"name":"alfredo.narvaez","email":"alfredo.narvaez@adevinta.com"},{"name":"sendami.luque.ext","email":"sendami.luque.ext@adevinta.com"},{"name":"oscar.gomez","email":"oscar.gomez@adevinta.com"},{"name":"sebastian.badea.adevinta","email":"sebastian.badea@adevinta.com"},{"name":"thomas.page.ext","email":"thomas.page.ext@adevinta.com"},{"name":"victoria.pasichnyk.ext","email":"victoria.pasichnyk.ext@adevinta.com"},{"name":"andresadv","email":"andres.alvarez@adevinta.com"},{"name":"daniel.perez.ext","email":"daniel.perez.ext@adevinta.com"},{"name":"albert.peiro","email":"albert.peiro.ext@adevinta.com"},{"name":"frandelacasa-adevinta","email":"francisco.delacasa@adevinta.com"},{"name":"mariapaula.forero.ext","email":"mariapaula.forero.ext@adevinta.com"},{"name":"sziauberyte","email":"simona.ziauberyte@adevinta.com"},{"name":"oriol.hilari","email":"oriol.hilari@adevinta.com"},{"name":"victor.perez.adevinta","email":"victor.perez@adevinta.com"},{"name":"carlos-barroso-ext","email":"carlos.barroso.ext@adevinta.com"},{"name":"carolina.mallo.ext","email":"carolina.mallo.ext@adevinta.com"},{"name":"carlos.gonzalezl","email":"carlos.gonzalezl@adevinta.com"},{"name":"david.nieto","email":"david.nieto@adevinta.com"},{"name":"ferran.simon","email":"ferran.simon@adevinta.com"},{"name":"sergi.quintela","email":"sergi.quintela@adevinta.com"},{"name":"jamile.radloff","email":"jamile.radloff.ext@adevinta.com"},{"name":"luz_adv","email":"luz.marina.ext@adevinta.com"},{"name":"ignacio.rodriguez","email":"ignacio.rodriguez@adevinta.com"},{"name":"izaskunpena","email":"izaskun.pena@adevinta.com"},{"name":"carlosvillu-adevinta","email":"carlos.villuendas@adevinta.com"},{"name":"andresin87.adevinta","email":"andres.lucas@adevinta.com"},{"name":"emiliovz","email":"emilio.villuendas@adevinta.com"},{"name":"ruben-martin","email":"ruben.martin@adevinta.com"},{"name":"cristina.rodriguez.duque","email":"cr.rodriguez.ext@adevinta.com"},{"name":"pol.valls","email":"pol.valls@adevinta.com"},{"name":"lolaruf","email":"lola.rufino@adevinta.com"},{"name":"arturo.vicente","email":"arturo.vicente@adevinta.com"},{"name":"sergio.escano","email":"sergio.escano@adevinta.com"},{"name":"marc.benito","email":"marc.benito@adevinta.com"},{"name":"tomasadevinta","email":"tomas.madariaga@adevinta.com"},{"name":"alex.castells","email":"alex.castells@adevinta.com"},{"name":"beatrizip","email":"beatriz.iglesias@adevinta.com"},{"name":"pablo.rey-adevinta","email":"pablo.rey@adevinta.com"},{"name":"sergiocollado","email":"sergio.collado.ext@adevinta.com"},{"name":"cristhianb","email":"cristhian.benitez@adevinta.com"},{"name":"alisa_bayanova","email":"alisa.bayanova@adevinta.com"},{"name":"davidmartin2108","email":"david.martin@adevinta.com"},{"name":"alfredo.arronte","email":"alfredo.arronte@adevinta.com"},{"name":"joanleon-adv","email":"joan.leon@adevinta.com"},{"name":"luis-garrido","email":"luis.garrido@adevinta.com"},{"name":"aitor.rodriguez","email":"aitor.rodriguez@adevinta.com"},{"name":"oscar_ramirez","email":"oscar.ramirez@adevinta.com"},{"name":"jordi.munoz","email":"jordi.munoz@adevinta.com"},{"name":"ignacio_navarro","email":"ignacio.navarro@adevinta.com"},{"name":"serena.mejias","email":"serena.mejias@adevinta.com"},{"name":"luard-adv","email":"luard.castellanos@adevinta.com"},{"name":"izeller","email":"irene.zeller@adevinta.com"},{"name":"alejandro.ferrante","email":"alejandro.ferrante@adevinta.com"},{"name":"pa.chruscinski.ext","email":"pa.chruscinski.ext@adevinta.com"},{"name":"jenifer.lopez","email":"jenifer.lopez@adevinta.com"},{"name":"a.ferrer","email":"aleix.ferrer@adevinta.com"},{"name":"ivanmlaborda","email":"ivan.martinez@adevinta.com"},{"name":"pablogs","email":"pablo.gonzalez@adevinta.com"},{"name":"javier.miguel","email":"manuel.miguel@adevinta.com"},{"name":"marian.lucaci","email":"marian.lucaci@adevinta.com"},{"name":"oriol.puig","email":"oriol.puig@adevinta.com"},{"name":"hpintos_adevinta","email":"hernan.pintos@adevinta.com"},{"name":"nacho_torrella","email":"ignacio.torrella@adevinta.com"},{"name":"isabelgomez87","email":"isabel.gomez@adevinta.com"},{"name":"sabri-castelli","email":"sabrina.castelli@adevinta.com"},{"name":"xavi.murcia","email":"xavi.murcia@adevinta.com"},{"name":"mario.fernandez.ext","email":"mario.fernandez.ext@adevinta.com"},{"name":"azahara","email":"azahara.martinez@adevinta.com"},{"name":"javiauso","email":"javier.auso@adevinta.com"},{"name":"francisco.ruiz.lloret","email":"francisco.ruiz@adevinta.com"},{"name":"schibstedspain","email":"enablers-frontend@adevinta.com"}],"dist":{"shasum":"e5b1ed5ba505878cab9daf2a9c3f7a57a17e9fc2","tarball":"https://registry.npmjs.org/@adv-ui/re-vendor-by-consents-loader/-/re-vendor-by-consents-loader-1.2.0.tgz","fileCount":13,"integrity":"sha512-zlXQsS4YXVyHMaBhyLSyLotUogYPdtNF4kS5dp0ugJRTdcQPSa4X3RbvEZ4U2u3CdutiFW/Ky8Mf4C9esTPuHw==","signatures":[{"sig":"MEYCIQC45U8k4qnW6ZUO/UYTRWgtmuSqKjmDkvs3eg3hMmhycQIhAObJOk8MwEEs9NBdqi89Bi6pKH999GmQd31Cr1DatV5+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24576},"main":"lib/index.js","babel":{"presets":["sui"]},"config":{"sui-mono":{"access":"public"}},"gitHead":"caee605559c937a85c0d92d8b60733345504bbd1","scripts":{"ci":"npm ci","co":"sui-mono commit","lib":"npx rimraf ./lib && npx mkdirp ./lib && sui-js-compiler","umd":"sui-bundler lib src-umd/index.js -o umd/ -p --root","lint":"sui-lint js","test":"echo \"Error: no test specified\"","fixlock":"npm install --package-lock-only","phoenix":"rm -rf node_modules package-lock.json && npm install","prepare":"npm run lib && npm run umd","updatelock":"npm update --package-lock-only"},"_npmUser":{"name":"schibstedspain","email":"enablers-frontend@adevinta.com"},"prettier":"./node_modules/@s-ui/lint/.prettierrc.js","stylelint":{"extends":"./node_modules/@s-ui/lint/stylelint.config.js"},"repository":{"url":"git@github.mpi-internal.com:adevinta-realestate/frontend-common--vendor-by-consents-loader.git","type":"git"},"_npmVersion":"10.2.3","description":"Load vendors according to the allowed user's consents","directories":{},"sideEffects":false,"_nodeVersion":"20.10.0","dependencies":{"@s-ui/js":"2"},"eslintConfig":{"extends":["./node_modules/@s-ui/lint/eslintrc.js"]},"_hasShrinkwrap":false,"devDependencies":{"@babel/cli":"7","@s-ui/lint":"4","@s-ui/mono":"2","@s-ui/test":"6","@s-ui/bundler":"9","babel-preset-sui":"3","@s-ui/js-compiler":"1"},"_npmOperationalInternal":{"tmp":"tmp/re-vendor-by-consents-loader_1.2.0_1731054273550_0.8895620772234425","host":"s3://npm-registry-packages"}}},"time":{"created":"2024-11-08T08:24:33.392Z","modified":"2025-11-20T08:47:28.105Z","1.2.0":"2024-11-08T08:24:33.714Z"},"license":"ISC","keywords":[],"repository":{"url":"git@github.mpi-internal.com:adevinta-realestate/frontend-common--vendor-by-consents-loader.git","type":"git"},"description":"Load vendors according to the allowed user's consents","maintainers":[{"email":"andres.lucas@adevinta.com","name":"andresin87.adevinta"},{"email":"francisco.ruiz@adevinta.com","name":"francisco.ruiz.lloret"},{"email":"enablers-frontend@adevinta.com","name":"schibstedspain"}],"readme":"# Vendor by Consents Loader\n\nSet of utilities to load vendors scripts according to user consents.\n\nYou only need to define `purposes` and `specialFeatureOptins` as they're the only configurable consents on the `tfc`.\n\n**🔴 IMPORTANT:** Before following the README, be sure you're loading the [Stub from Boros TCF](https://github.mpi-internal.com/scmspain/frontend-adit--uilib-boros-tcf/blob/master/components/stub/core/SCRIPT.md) as it's required.\n\n## Loading list of vendors\n\n```js\nimport {\n  initVendorConsentsLoader,\n  addVendorLoadedEventListener\n} from '@adv-ui/re-vendor-by-consents-loader'\n\nconst OPTIMIZELY_KEY = 'optimizely'\n\ninitVendorConsentsLoader({\n  vendors: {\n    tealium: {\n      script: 'https://frtassets.fotocasa.es/external-scripts/utag-pro.js',\n      consents: {\n        purposes: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n        specialFeatureOptins: [1]\n      }\n    },\n    [OPTIMIZELY_KEY]: {\n      script: 'https://frtassets.fotocasa.es/external-scripts/optimizely.js',\n      consents: {\n        purposes: [1, 2]\n      }\n    }\n  }\n})\n\naddVendorLoadedEventListener(({vendor}) => {\n  vendor === OPTIMIZELY_KEY && console.log('Optimizely has been loaded')\n})\n```\n\n## Loading a single vendor\n\nIn some cases you might want to load a single vendor later in your code:\n\n```js\nimport {\n  loadSingleVendorByConsent,\n  addVendorLoadedEventListener\n} from '@adv-ui/re-vendor-by-consents-loader'\n\nconst GOOGLE_ADSENSE_KEY = 'google_adsense'\n\nloadSingleVendorByConsent({\n  name: GOOGLE_ADSENSE_KEY,\n  script: 'https://google.com/ads.js',\n  consents: {\n    purposes: [5, 6]\n  }\n})\n\naddVendorLoadedEventListener(({vendor}) => {\n  vendor === GOOGLE_ADSENSE_KEY && console.log('Google has been loaded')\n})\n```\n\nYou can also set a vendor configuration without an specific `script` in case the vendor doesn't require it to work:\n\n```js\nimport {\n  loadSingleVendorByConsent,\n  addVendorLoadedEventListener\n} from '@adv-ui/re-vendor-by-consents-loader'\n\nconst RTB_HOUSE_KEY = 'rtb_house'\n\nloadSingleVendorByConsent({\n  name: RTB_HOUSE_KEY,\n  consents: {\n    purposes: [2, 6]\n  }\n})\n\naddVendorLoadedEventListener(({vendor}) => {\n  vendor === RTB_HOUSE_KEY && console.log('RTB House is ready')\n})\n```\n\n## Loading specific vendors\n\nSome vendors are used across all Adevinta Spain products and, for sake of convenience, they've their own script to load them.\n\n### Comscore\n\n```js\nimport {\n  addVendorLoadedEventListener,\n  loadComscore\n} from '@adv-ui/re-vendor-by-consents-loader'\n\nloadComscore({comscoreClientId: '7109919'})\n\naddVendorLoadedEventListener(({vendor}) => {\n  vendor === 'comscore' && console.log('Comscore has been loaded')\n})\n```\n\n## Using it in Monolithic apps\n\n```html\n// First load the UMD module.\n<script src=\"https://unpkg.com/@adv-ui/re-vendor-by-consents-loader/umd/index.js\"></script>\n<script>\n  // load comscore\n  window.sui.vendors.loadComscore({comscoreClientId: '7109919'})\n  // init vendors loader by consents\n  window.sui.vendors.initVendorConsentsLoader({\n    vendors: {\n      tealium: {\n        script: 'https://frtassets.fotocasa.es/external-scripts/utag-pro.js',\n        consents: {\n          purposes: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n          specialFeatureOptins: [1]\n        }\n      }\n    }\n  })\n  // load a single vendor by consents\n  window.sui.vendors.loadSingleVendorByConsent({\n    name: 'google_adsense',\n    script: 'https://google.com/ads.js',\n    consents: {\n      purposes: [5, 6]\n    }\n  })\n  // add evento for listening comscore load\n  window.sui.vendors.addVendorLoadedEventListener(({vendor}) => {\n    vendor === 'comscore' && console.log('Comscore has been loaded')\n    vendor === 'tealium' && window._utag.init()\n    vendor === 'google_adsense' && window.gads.startAds()\n  })\n  //\n</script>\n```\n\n## List of Purposes\n\n**Purposes**:\n\n- 1 - Store and/or access information on a device\n- 2 - Select basic ads\n- 3 - Create a personalised ads profile\n- 4 - Select personalised ads\n- 5 - Create a personalised content profile\n- 6 - Select personalised content\n- 7 - Measure ad performance\n- 8 - Measure content performance\n- 9 - Apply market research to generate audience insights\n- 10 - Develop and improve products\n\n**Special Purposes**\n\n- SP1 - Ensure security, prevent fraud, and debug\n- SP2 - Technically deliver ads or content\n\n**Features**\n\n- F1 - Match and combine offline data sources\n- F2 - Link different devices\n- F3 - Receive and use automatically-sent device characteristics for identification\n\n**Special Features**\n\n- SF1 - Use precise geolocation data\n- SF2 - Actively scan device characteristics for identification\n","readmeFilename":"README.md"}