Was this page helpful?

Privacy plugin

The Privacy Plugin allows you to granularly control what Ninetailed SDK events can trigger and what properties those events can contain with and without your visitors' consent.

The values you pass as configuration when instantiating the plugin determine what events and properties can be sent before or without your user's consent. The plugin provides a consent method when called allows all Ninetailed SDK events to be triggered with any properties.

Installation

Add @ninetailed/experience.js-plugin-preview as a dependency:

npm install @ninetailed/experience.js-plugin-privacy
yarn add @ninetailed/experience.js-plugin-privacy

Then, add the plugin to the Ninetailed instance. If you do not supply any configuration options to the plugin, it will use the defaults described in the Properties section.

import { NinetailedPrivacyPlugin } from '@ninetailed/experience.js-plugin-privacy'
<NinetailedProvider
  // ...
  plugins={[
    new NinetailedPrivacyPlugin()
  ]}
>
  <Component {...pageProps} />
</NinetailedProvider>;

In Gatsby, add the plugin to the plugins array:

plugins: [
    // ...
    {
        resolve: `@ninetailed/experience.js-gatsby`,
        options: {
            clientId: PUBLIC_NINETAILED_CLIENT_ID,
            environment: PUBLIC_NINETAILED_ENVIRONMENT,
            ninetailedPlugins: [
                {
                    resolve: `@ninetailed/experience.js-plugin-privacy`,
                    options: {}
                }    
            ]
        }
    }
]
import { Ninetailed } from '@ninetailed/experience.js';
import { NinetailedPrivacyPlugin } from '@ninetailed/experience.js-plugin-privacy'

export const ninetailed = new Ninetailed(
    { 
        clientId: // Your client ID 
        environment: // Your Ninetailed environment
    }, 
    { 
        plugins: [
            new NinetailedPrivacyPlugin();
        ]
    }
);

Properties

Use these properties in the configuration objects passed when instantiating the plugin. Passing blank configuration objects will use the default values.

Property NameDescriptionDefaultAvailable
allowedEventsWhich events you want to allow?['page', 'track']

An array containing any of page, track, identify, and/or component.

The former three correspond to Experience SDK events. component corresponds to impression events sent from Ninetailed plugins, including the Insights Plugin, Google Tag Manager Plugin, and Segment Plugin.

allowedPageEventPropertiesWhich page event properties will be allowed?[*]An array of your page event properties as strings or use [*]
allowedTrackEventsWhat .track event names will be allowed?[]An array of your track event names as strings or use or use [*]
allowedTrackEventPropertiesWhat .track event properties (additional data on a track event) will be allowed?[]An array of your track event properties as strings or use or use [*]
allowedTraitsWhat user traits will be allowed?[]An array of your .identify event traits or use or use [*]
blockProfileMergingShall the merging of profiles (attaching an ID to a profile via identify) be prevented?truetrue or false
enabledFeaturesWhat additional features should be enabled?[]

An array of strings corresponding to feature names to enable. Possible values are:

  • location. Enables resolution of location data (continent, country, region, city, and zip code) of the user
  • ip-enrichment Enables the Albacross integration (if an Albacross API key has been provided) to attach firmographic data as traits

Configuration

The first configuration object uses the properties above to indicate what events and behaviours are allowed prior to end-user consent.

SDK versions 7.7 and above add a second configuration parameter to specify what tracking events and behaviours are allowed even after a user has consented. This configuration parameter uses the same properties.

Example custom use

This example configuration demonstrates overriding the default to allow only page and identify events to be sent and for those identify event calls to only capture the firstName trait prior to user consent.

Additionally, a second configuration object is passed to indicate that all of page, track, identify and component events are allowed, in addition to the lastName trait and track events of type myCoolEvent and anotherCoolEvent are allowed.

All unspecified config object options use their default values.

<NinetailedProvider
   // ...
    plugins={[
      new NinetailedPrivacyPlugin({
        allowedEvents: ['page', 'identify'],
        allowedTraits: ['firstName'],
      // SDK versions >= 7.7 Allow a second config object
      }, {
        allowedEvents: ['page', 'track', 'identify', 'component'],
        allowedTraits: ['firstName', 'lastName'],
        allowedTrackEvents: ['myCoolEvent', 'anotherCoolEvent']
      }),
     ]}
  >
   // ...
 </NinetailedProvider>
plugins: [
    // ...
    {
        resolve: `@ninetailed/experience.js-gatsby`,
        options: {
            clientId: PUBLIC_NINETAILED_CLIENT_ID,
            environment: PUBLIC_NINETAILED_ENVIRONMENT,
            ninetailedPlugins: [
                {
                    resolve: `@ninetailed/experience.js-plugin-privacy`,
                    // Gatsby implementations only support the first at this time
                    options: {
                        allowedEvents: ['page', 'track', 'identify'],
                        allowedTraits: ['firstName'],
                    }
                }    
            ]
        }
    }
]
import { Ninetailed } from '@ninetailed/experience.js';
import { NinetailedPrivacyPlugin } from '@ninetailed/experience.js-plugin-privacy'

export const ninetailed = new Ninetailed(
    { 
        clientId: // Your client ID 
        environment: // Your Ninetailed environment
    }, 
    { 
        plugins: [
            new NinetailedPrivacyPlugin({
                allowedEvents: ['page', 'identify'],
                allowedTraits: ['firstName'],
              // SDK versions >= 7.7 Allow a second config object
              }, {
                allowedEvents: ['page', 'track', 'identify', 'component'],
                allowedTraits: ['firstName', 'lastName'],
                allowedTrackEvents: ['myCoolEvent', 'anotherCoolEvent']
            }),
        ]
    }
);

The plugin attaches a consent method to the window.ninetailed object. The consent method takes a single boolean argument. When the argument is true, this sets a localStorage entry of __nt-consent__: "accepted". When not called or the argument is set to false, the __nt-consent__ local storage entry is cleared. Call this method in your client-side application when a user has taken an action that indicates their explicit consent.

window.ninetailed.consent(true) // sets `__nt-consent__: "accepted" in local storage
window.ninetailed.consent(false) // clears `__nt-consent__` from local storage