@segment/analytics-consent-tools
TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published

@segment/analytics-consent-tools

Quick Start

// wrapper.js
import { createWrapper, resolveWhen } from '@segment/analytics-consent-tools'

export const withCMP = createWrapper({
  // Wait to load wrapper or call "shouldLoadSegment" until window.CMP exists.
  shouldLoadWrapper: async () => {
    await resolveWhen(() => window.CMP !== undefined, 500)
  },

  // Allow for control over wrapper + analytics initialization.
  // Delay any calls to analytics.load() until this function returns / resolves.
  shouldLoadSegment: async (ctx) => {
    /*
    // Optional -- for granular control of initialization
    if (noConsentNeeded) {
      ctx.abort({ loadSegmentNormally: true })
    } else if (allTrackingDisabled) {
      ctx.abort({ loadSegmentNormally: false })
    }
    */
    if (window.CMP.ConsentModel === 'opt-out') {
      return ctx.load({ consentModel: 'opt-out' })
    } else {
      await resolveWhen(
        () => !window.CMP.popUpVisible() && window.CMP.categories.length,
        500
      )
      return ctx.load({ consentModel: 'opt-in' })
    }
  },

  getCategories: () => {
    return normalizeCategories(window.CMP.consentedCategories()) // Expected format: { foo: true, bar: false }
  },

  registerOnConsentChanged: (setCategories) => {
    window.CMP.onConsentChanged((event) => {
      setCategories(normalizeCategories(event.detail))
    })
  },
})

Settings / Configuration

See: settings.ts

Consent Models

The wrapper has different behavior based on the consent-model:

  • opt-in - (strict, GDPR scenario) -- Unconsented device mode destinations are removed
  • opt-out - Device mode destinations are loaded, but with blocking middleware

Wrapper Usage API

npm

import { withCMP } from './wrapper'
import { AnalyticsBrowser } from '@segment/analytics-next'

export const analytics = new AnalyticsBrowser()

withCMP(analytics).load({
  writeKey: '<MY_WRITE_KEY'>
})

Snippet users (window.analytics)

Note: This assumes a project that can consume the library via es6 imports, using a like Webpack.

  1. Delete the analytics.load() line from the snippet
- analytics.load("<MY_WRITE_KEY>");
  1. Import Analytics
import { withCMP } from './wrapper'

withCMP(window.analytics).load('<MY_WRITE_KEY')

Wrapper Examples

Settings / Options / Configuration

See the complete list of settings in the Settings interface

Special Requirements

  • For npm users, this library expects a version of @segment/analytics-next >= 1.53.1. Note: If your library depends on this library, you should have the appropriate peer dependency declaration. See our package.json for an example.

Development

  1. Build this package + all dependencies
yarn . build
  1. Run tests
yarn test

/@segment/analytics-consent-tools/

    Package Sidebar

    Install

    npm i @segment/analytics-consent-tools

    Weekly Downloads

    1,479

    Version

    2.0.1

    License

    MIT

    Unpacked Size

    176 kB

    Total Files

    178

    Last publish

    Collaborators

    • bhavanki-segment
    • ar7dev
    • vaibhavnanda
    • nikumarsegment
    • itsarijitray
    • ssuneja
    • azhaotwilio
    • ldelossantos
    • cjo2
    • achandrashekaran
    • aparna.singhal
    • ynguyen
    • timmyzsearcy
    • igracheva-twilio
    • yashnit-segment
    • nanotimm
    • srivig21
    • chenchensegmentcom
    • sanket.mishra
    • lweimersegment
    • rcheedhalla
    • jxin_twilio
    • odoren_segment
    • aditi.raveesh
    • dltnbrks-segment
    • sai-patanjali
    • himanshuph
    • alecjacobs-segment
    • sshaikh_segment
    • john.lee1100
    • dazu70
    • brian.aguirre
    • pooja.patil
    • segment_fan
    • nlubchenco
    • jamezhutwilio
    • jsh-wu
    • nithin-benny
    • poojasegment
    • ebru.odok
    • bannapple
    • rodhilton_twilio
    • guthriesegment
    • srishti-nema
    • cdelaomartinez
    • miguelpdiaz8
    • sundareswar.jayakumar
    • gbatra
    • spencerattick
    • akodankiry
    • nanette.ranes
    • gsolis_segment
    • nitinpm432
    • aadityabhatt10
    • amigandhi
    • segmentsean
    • hmohanram_seg
    • jrupasinghe
    • myrontin.segment
    • devthale
    • smccoy-twilio
    • seg-leonelsanches
    • jibrang
    • sethgrid_segment
    • light-bringer-blr
    • aubreysine
    • ed-twilion-npm
    • harsh-joshi99
    • irfan.ali.segment
    • kbhargavaram-sg
    • needcaffeine
    • nat-grid
    • wlumsegment
    • moyara2
    • bala.singareddy
    • gbbastos
    • akash.gautam07
    • preetyp
    • viveksainaneesegment
    • msaraf
    • kjoerres
    • rokatyal
    • ainatancinco
    • anton-vylushchak
    • sowjanyasegment
    • alayvora
    • msaunders-segment
    • tw-dgarcia
    • parag.panda
    • blangtwilio
    • ryanrouleau-segment
    • twjosiah
    • mcullenmeyer
    • david.anusontarangkul.segment
    • mckern_segment
    • segment-admin
    • nainy.agrawal
    • tdibacco
    • sudojatin
    • nageshgolem
    • brandonheyer-segment
    • alfrimpong
    • dobrin.ganev
    • ankit.gupta.unthinkable
    • marinhero
    • benattwilio
    • bharath.boregowda
    • conniechen
    • sungju.jin
    • pooyaj
    • yli119
    • ea_segment
    • emilyjia
    • kx-segment
    • xinghao.huang
    • harsh.vardhan
    • joe.ayoub.segment
    • gkochar123
    • rollcode
    • ariel.silvestri
    • cherylj-segment
    • immanoj
    • aaronklish
    • michelr
    • maneesh.dharma29
    • msolorzano-segment
    • brianhumphreystwilio
    • jfehrman.segment
    • joetessy
    • pmunin
    • jalexy12
    • jbandi-twilio
    • prayansh-twilio
    • dominicbarnes
    • brandon.scott-segment
    • bgillan
    • phillip.thomas
    • ricardo.rossi
    • forgetfulfellow
    • fauzy.yy
    • mayur-pitale
    • dbaik-twilio-segment
    • seg-rustybailey
    • tanya.gupta.segment
    • pmiller-twilio
    • nevermore2022
    • aishikawaki
    • csayuso
    • mcoulibali
    • shupadhyay
    • jahood-twilio
    • saisagarkappaganthula
    • rmukundan
    • arubiochavez
    • shuvrajit9904
    • s3gm3nt
    • ama0223
    • tbrennanj
    • dangmai-segment
    • shraddha-twilio
    • sa-jsooter
    • enyi.asonye
    • afsha-nazim-seg
    • mschaszberger
    • lnamba
    • varadarajan-tw
    • seanhan-segment
    • replatero
    • sayan-das-in
    • justeen
    • jgabe13
    • meg1000
    • funlu
    • ashwitha.bg
    • whaider_twilio
    • tcgilbert
    • kevinburkesegment
    • felttrip
    • prabhnoor1997
    • akashyap91
    • clintz.seg
    • karimkeshwani
    • wally.tg
    • rhall-twilio
    • yash-twilio
    • brookstaylorjr
    • shayan-golafshani
    • lerahulram
    • mugelstad
    • rrivera-segment
    • sethnutetwilio
    • manali-bhosale
    • chtoombs
    • sethsegment
    • eric-hyde
    • elmoselyee
    • michaelghseg
    • jayakrishnannair
    • lateefat
    • maryam.sharif
    • wdbetts
    • ryanligon
    • sindhusegment
    • lfdelossantos
    • aramakrishnan
    • vbatanov
    • lluque-twilio
    • jair.aviles
    • pmaid
    • song4you
    • peterdemartini
    • emmy.byrne
    • vincen7tran
    • dean-huynh
    • cdignam-segment
    • abhinavsureka
    • arunlalam-segment
    • neeharikakondipati
    • simpixelated
    • chihchun-twilio
    • acharles14
    • jyim008
    • hema-segment
    • fhalim-segment
    • cfree
    • hjoonpm
    • celine-segment
    • pmcanseco-segment
    • masira
    • amillet89
    • cholt002
    • av-segment
    • aghotikar
    • vikrant-segment
    • larryatsegment
    • scruwys1
    • kyliepedersen
    • jinapark
    • segmentio
    • rajulvadera
    • lpediredla
    • n2parko
    • tyson_segment
    • bgamwell
    • uditmehta
    • salolivares
    • erikdw
    • chenxiangzhang
    • mericsson
    • prayansh-segmentt
    • jeremylarkin
    • bsneed
    • danieljackins
    • segment-seth
    • james9446
    • priscilla.giatti
    • nlsun
    • drew-thompson
    • segment-jsingh
    • andrius-segment
    • valerieernst
    • kelcook
    • gilomer
    • marcelopv
    • eric.rogner
    • kdharaiya
    • jon.anderson-at-segment.com
    • stacy.song
    • rexatsegment
    • nickaguilar
    • bradenbecker
    • reneewang
    • dan.lasky
    • sam.tapia
    • vikramkumar19
    • mpriyad25
    • jeremy.parker
    • smidges