clean-insights-sdk
Version:
A privacy-preserving measurement framework.
213 lines • 27.2 kB
HTML
<html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>clean-insights-sdk</title><meta name="description" content="Documentation for clean-insights-sdk"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base=".">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">clean-insights-sdk</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<h2>clean-insights-sdk</h2></div>
<div class="tsd-panel tsd-typography"><a id="md:clean-insights-javascript-sdk" class="tsd-anchor"></a><h1><a href="#md:clean-insights-javascript-sdk">Clean Insights JavaScript SDK</a></h1><p>Clean Insights gives developers a way to plug into a secure, private measurement platform.
It is focused on assisting in answering key questions about app usage patterns, and not on
enabling invasive surveillance of all user habits.
Our approach provides programmatic levers to pull to cater to specific use cases and privacy needs.
It also provides methods for user interactions that are ultimately empowering instead of alienating.</p>
<a id="md:example" class="tsd-anchor"></a><h2><a href="#md:example">Example</a></h2><pre><code class="language-JavaScript"><br/><span class="hl-0"> </span><span class="hl-1">// Instantiate with configuration.</span><br/><span class="hl-0"> </span><span class="hl-2">const</span><span class="hl-0"> </span><span class="hl-3">ci</span><span class="hl-0"> = </span><span class="hl-4">CleanInsights</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-5">"server"</span><span class="hl-6">:</span><span class="hl-0"> </span><span class="hl-5">"http://example.com/ci/cleaninsights.php"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-5">"siteId"</span><span class="hl-6">:</span><span class="hl-0"> </span><span class="hl-7">1</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-5">"campaigns"</span><span class="hl-6">:</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">"feature1-usage"</span><span class="hl-6">:</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">"start"</span><span class="hl-6">:</span><span class="hl-0"> </span><span class="hl-5">"2021-01-01T00:00:00-00:00"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-5">"end"</span><span class="hl-6">:</span><span class="hl-0"> </span><span class="hl-5">"2021-12-31T23:59:59-00:00"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-5">"aggregationPeriodLength"</span><span class="hl-6">:</span><span class="hl-0"> </span><span class="hl-7">1</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-5">"numberOfPeriods"</span><span class="hl-6">:</span><span class="hl-0"> </span><span class="hl-7">90</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> })</span><br/><br/><span class="hl-0"> </span><span class="hl-1">// Ask for consent:</span><br/><span class="hl-0"> </span><span class="hl-6">ci</span><span class="hl-0">.</span><span class="hl-4">requestConsentForCampaign</span><span class="hl-0">(</span><span class="hl-5">"test"</span><span class="hl-0">, </span><span class="hl-4">ConsentRequestUi</span><span class="hl-0">())</span><br/><br/><span class="hl-0"> </span><span class="hl-1">// Measure a page visit, e.g. in `#onload`:</span><br/><span class="hl-0"> </span><span class="hl-6">ci</span><span class="hl-0">.</span><span class="hl-4">measureVisit</span><span class="hl-0">([</span><span class="hl-5">"Main"</span><span class="hl-0">], </span><span class="hl-5">"test"</span><span class="hl-0">)</span><br/><br/><span class="hl-0"> </span><span class="hl-1">// Measure an event (e.g. a button press):</span><br/><span class="hl-0"> </span><span class="hl-6">ci</span><span class="hl-0">.</span><span class="hl-4">measureEvent</span><span class="hl-0">(</span><span class="hl-5">"music"</span><span class="hl-0">, </span><span class="hl-5">"play"</span><span class="hl-0">, </span><span class="hl-5">"test"</span><span class="hl-0">)</span><br/><br/><span class="hl-0"> </span><span class="hl-1">// Make sure to persist the locally cached data. E.g. `onunload`.</span><br/><span class="hl-0"> </span><span class="hl-6">ci</span><span class="hl-0">.</span><span class="hl-4">persist</span><span class="hl-0">()</span>
</code><button>Copy</button></pre>
<p><em>Please note</em>: <code>CleanInsights</code>' core concept is a <strong>Campaign</strong>. Since we don't want you to
record just <em>anything</em>, like all the others do, you need to configure, what your actually interested
in and for how long. For a deeper understanding, please read the <a href="#concepts">Concepts</a> section below.</p>
<p>This project also contains different examples: One for a frontend app, one for a backend Node.js
app and one for simpler websites. Please refer to the
<a href="https://gitlab.com/cleaninsights/clean-insights-js-sdk">GitLab repository</a>
for a full understanding on how to use this library.</p>
<a id="md:easy-tracking-of-websites-with-the-autotracker-version" class="tsd-anchor"></a><h2><a href="#md:easy-tracking-of-websites-with-the-autotracker-version">Easy tracking of Websites with the AutoTracker Version</a></h2><p>While the general <code>CleanInsights SDK</code> package is designed to be used in apps, with
a lot of freedom for the developer in mind, we also provide a prepackaged,
precompiled version to be used with normal websites:</p>
<p><a href="https://gitlab.com/cleaninsights/clean-insights-js-sdk/-/blob/master/clean-insights-auto-tracker.js"><code>clean-insights-auto-tracker.js</code></a>
can just be dropped into any webpage and is used to automatically track page visits.</p>
<p>Additionally, you have a full <code>CleanInsights SDK</code> at hand and can do all the additional
tracking you can do with a normal version, too.</p>
<p>You still will need to provide consent. Check out the
<a href="https://gitlab.com/cleaninsights/clean-insights-js-sdk/-/blob/master/example_website">website example</a>
on how to do that in the most basic way.</p>
<a id="md:caveat" class="tsd-anchor"></a><h3><a href="#md:caveat">Caveat</a></h3><p>The <code>CleanInsights SDK</code> has some important anonymizing features, which make the <code>AutoTracker</code>
script less usable in certain circumstances:</p>
<p>Recording is only ever being sent when an aggregation period is over.
(Read the full document to get a better understanding of why.)</p>
<p>For the <code>AutoTracker</code>, that means, users need to visit on at least 2 days, since the
aggregation period for the page visit tracking is 1 day: </p>
<ul>
<li>On the first day, consent is given and visits are recorded.</li>
<li>On the second day, visits of the first day are uploaded.</li>
<li>(On the third day, visits of the second day will be uploaded, and so forth.)</li>
</ul>
<p>These days don't need to be consecutive, but nevertheless, you need visitors who
typically return.</p>
<p>That means, for <em>landing pages</em> and other sites which normally aren't visited multiple
times, the <code>CleanInsights AutoTracker</code> isn't useful.</p>
<p>You can instead just use the standard <code>Matomo</code> tracker JavaScript or you could develop
your own thing which works with the <a href="https://gitlab.com/cleaninsights/clean-insights-matomo-proxy">CIMP</a>.</p>
<a id="md:installation-of-the-standard-sdk" class="tsd-anchor"></a><h2><a href="#md:installation-of-the-standard-sdk">Installation of the standard SDK</a></h2><p>CleanInsightsSDK is available through <a href="https://www.npmjs.com/package/clean-insights-sdk">npm</a>.
To install it, execute one of the following commands in your project directory:</p>
<pre><code class="language-shell"><span class="hl-4">npm</span><span class="hl-0"> </span><span class="hl-5">install</span><span class="hl-0"> </span><span class="hl-2">--save</span><span class="hl-0"> </span><span class="hl-5">clean-insights-sdk</span><br/><span class="hl-1"># or</span><br/><span class="hl-4">yarn</span><span class="hl-0"> </span><span class="hl-5">add</span><span class="hl-0"> </span><span class="hl-5">clean-insights-sdk</span>
</code><button>Copy</button></pre>
<a id="md:further-documentation" class="tsd-anchor"></a><h2><a href="#md:further-documentation">Further Documentation:</a></h2><ul>
<li><p><a href="http://cleaninsights.org/">Main project page</a></p>
</li>
<li><p><a href="https://gitlab.com/cleaninsights">All source code</a></p>
</li>
<li><p><a href="https://gitlab.com/cleaninsights/clean-insights-design">Design documents and JSON schema specifications</a></p>
</li>
<li><p><a href="https://cleaninsights.gitlab.io/clean-insights-js-sdk/">API documentation</a></p>
</li>
<li><p><a href="https://okthanks.com/blog/2021/5/14/clean-consent-ux">A Guide to Clean Consent UX</a></p>
</li>
</ul>
<a id="md:concepts" class="tsd-anchor"></a><h2><a href="#md:concepts">Concepts</a></h2><a id="md:measurements" class="tsd-anchor"></a><h3><a href="#md:measurements">Measurements</a></h3><p>A measurement is a single call to the SDK to measure a visit or an event.</p>
<p>Measurements are always aggregated immediately and only stored in that aggregated
form, in order to avoid a too high resolution and therefore unnecessary invasion into the users
privacy.</p>
<p>All measurements are done for a specific campaign you need to configure.</p>
<p>Measurements done against an unconfigured campaign are ignored, as well as measurements
done against a campaign which ran out or where the maximum length of days of data gathering
is crossed.</p>
<p>This helps you avoid unwanted measurements with left-over measurement code of older
campaigns.</p>
<a id="md:campaigns" class="tsd-anchor"></a><h3><a href="#md:campaigns">Campaigns</a></h3><p>A campaign has a period during which it is active and a maximum length of days during which
data is gathered for a specific user after they consented to the measurements.</p>
<p>The specific start date of a campaign helps you coordinate campaigns across platforms.
Measurements done before a campaign start are, of course, ignored.</p>
<p>The days during which measurements take place are defined by the aggregation period length
in days and the number of periods.</p>
<p>After a user consented, measurements will start right away for as long as the current measurement
period still goes on.</p>
<p>If you want to even further increase your users' anonymity guarantees and ensure that the first
measured period is a full one, you can configure that with the <code>strengthen_anonymity</code>
configuration option, which will enforce the beginning of measurements only at the next full
aggregation period.</p>
<p>At the end of an aggregation period, the campaign data will be automatically sent to your insights
server.</p>
<p>If you configure a higher <code>numberOfPeriods</code> than 1, the next aggregation period will begin
immediately after the end of the first one and measurement will continue.</p>
<a id="md:events" class="tsd-anchor"></a><h4><a href="#md:events">Events</a></h4><p>In Contrast to visit measurements, event measurements support the complete
<a href="https://matomo.org/docs/event-tracking/">Matomo Event API</a>.</p>
<p>This means you can also record numeric values, like e.g. time something takes.</p>
<p>You can configure the aggregation method to use, when the same event is recorded multiple
times: Event values can be summed up or an average can be calculated.</p>
<p>This can be configured per campaign.</p>
<a id="md:not-a-matomo-campaign" class="tsd-anchor"></a><h4><a href="#md:not-a-matomo-campaign">Not a Matomo Campaign</a></h4><p>Note the difference to Matomo: CleanInsights' concept of a campaign doesn't map to Matomo's
concept of campaigns, which is mostly about finding out if a marketing campaign (like an advertisement
or a landing page) sent any additional visitors to a website.</p>
<a id="md:consent" class="tsd-anchor"></a><h3><a href="#md:consent">Consent</a></h3><p>You need to ask your users for consent to your measurements.</p>
<p>There are 2 types of consent:</p>
<ul>
<li>Campaign consents: Each measurement campaign needs to get consent by the user. You need
to explain to the user what you want to measure, how long you want to measure it and why.</li>
</ul>
<p>The SDK contains UI to help you with that.</p>
<ul>
<li>Common feature consent: Some data is orthogonal to the visits or events you want to measure,
like locale or device type used. Since these features are only ever recorded when doing
measurements for a campaign, consent needs to be gathered only once per user per feature.</li>
</ul>
<p>A user might want to actively withdraw consent. The SDK supports that. Please make sure that
the user can actually do that.</p>
<p>The SDK provides UI to help you with that.</p>
<a id="md:configuration" class="tsd-anchor"></a><h2><a href="#md:configuration">Configuration</a></h2><p>To make sure your CleanInsights configuration is valid, you can use our
<a href="https://gitlab.com/cleaninsights/clean-insights-design/-/blob/master/schemas/configuration.schema.json">JSON scheme to validate against.</a></p>
<p>Here's an <a href="https://www.jsonschemavalidator.net">online validator</a></p>
<p>A <a href="https://gitlab.com/cleaninsights/clean-insights-design/-/blob/master/schema-docs/README.md">complete documentation</a>
is generated from that JSON scheme. </p>
<a id="md:supported-backends" class="tsd-anchor"></a><h2><a href="#md:supported-backends">Supported Backends</a></h2><p>CleanInsights SDK currently supports Matomo as a backend via
<a href="https://gitlab.com/cleaninsights/clean-insights-matomo-proxy">CIMP</a>.</p>
<a id="md:usage-with-nodejs" class="tsd-anchor"></a><h2><a href="#md:usage-with-nodejs">Usage with Node.js</a></h2><p>If you use this on the server side, we recommend to do only anonymous measurements.
That means, you should not measure anything which contains identifying information.</p>
<p>In that case, you won't need to ask anybody for consent, and you can make use of
the <code>serverSideAnonymousUsage</code> configuration option.</p>
<p>Check out the <a href="example_backend">backend example</a> on how to configure the SDK and how
to implement storage and upload to CIMP.</p>
<a id="md:usage-in-a-chrome-extension" class="tsd-anchor"></a><h2><a href="#md:usage-in-a-chrome-extension">Usage in a Chrome extension</a></h2><p>If you want to use this in a Chrome extension, you can find an example implementation
and a usable store for <code>chrome.storage.local</code> in the
<a href="example_chrome_extension">example_chrome_extension</a> folder.</p>
<a id="md:usage-with-react-native" class="tsd-anchor"></a><h2><a href="#md:usage-with-react-native">Usage with React Native</a></h2><p>If you want to use this in React Native, you can find an example implementation
of a suitable store in <a href="https://gitlab.com/cleaninsights/clean-insights-react-native-example">this example project</a>.</p>
<a id="md:author" class="tsd-anchor"></a><h2><a href="#md:author">Author</a></h2><p>Benjamin Erhart, <a href="mailto:berhart@netzarchitekten.com">berhart@netzarchitekten.com</a> for the <a href="https://guardianproject.info">Guardian Project</a></p>
<a id="md:license" class="tsd-anchor"></a><h2><a href="#md:license">License</a></h2><p>CleanInsightsSDK is available under the MIT license. See the LICENSE file for more info.</p>
</div></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)" id="icon-chevronDown"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="#icon-chevronDown"></use></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li>
<ul>
<li><a href="#md:clean-insights-javascript-sdk"><span>Clean <wbr/>Insights <wbr/>Java<wbr/>Script SDK</span></a></li>
<li>
<ul>
<li><a href="#md:example"><span>Example</span></a></li>
<li><a href="#md:easy-tracking-of-websites-with-the-autotracker-version"><span>Easy tracking of <wbr/>Websites with the <wbr/>Auto<wbr/>Tracker <wbr/>Version</span></a></li>
<li>
<ul>
<li><a href="#md:caveat"><span>Caveat</span></a></li></ul></li>
<li><a href="#md:installation-of-the-standard-sdk"><span>Installation of the standard SDK</span></a></li>
<li><a href="#md:further-documentation"><span>Further <wbr/>Documentation:</span></a></li>
<li><a href="#md:concepts"><span>Concepts</span></a></li>
<li>
<ul>
<li><a href="#md:measurements"><span>Measurements</span></a></li>
<li><a href="#md:campaigns"><span>Campaigns</span></a></li>
<li>
<ul>
<li><a href="#md:events"><span>Events</span></a></li>
<li><a href="#md:not-a-matomo-campaign"><span>Not a <wbr/>Matomo <wbr/>Campaign</span></a></li></ul></li>
<li><a href="#md:consent"><span>Consent</span></a></li></ul></li>
<li><a href="#md:configuration"><span>Configuration</span></a></li>
<li><a href="#md:supported-backends"><span>Supported <wbr/>Backends</span></a></li>
<li><a href="#md:usage-with-nodejs"><span>Usage with <wbr/>Node.js</span></a></li>
<li><a href="#md:usage-in-a-chrome-extension"><span>Usage in a <wbr/>Chrome extension</span></a></li>
<li><a href="#md:usage-with-react-native"><span>Usage with <wbr/>React <wbr/>Native</span></a></li>
<li><a href="#md:author"><span>Author</span></a></li>
<li><a href="#md:license"><span>License</span></a></li></ul></li></ul></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-4"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)"></path></g></svg><span>clean-<wbr/>insights-<wbr/>sdk</span></a>
<ul class="tsd-small-nested-navigation">
<li><a href="enums/ConsentState.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-8"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.45 16V7.24H14.49V8.224H10.518V10.936H14.07V11.908H10.518V15.016H14.49V16H9.45Z" fill="var(--color-text)"></path></g></svg><span>Consent<wbr/>State</span></a></li>
<li><a href="enums/EventAggregationRule.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-8"></use></svg><span>Event<wbr/>Aggregation<wbr/>Rule</span></a></li>
<li><a href="enums/Feature.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-8"></use></svg><span>Feature</span></a></li>
<li><a href="classes/BrowserStore.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-128"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)"></path></g></svg><span>Browser<wbr/>Store</span></a></li>
<li><a href="classes/Campaign.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Campaign</span></a></li>
<li><a href="classes/CampaignConsent.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Campaign<wbr/>Consent</span></a></li>
<li><a href="classes/CleanInsights.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Clean<wbr/>Insights</span></a></li>
<li><a href="classes/Configuration.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Configuration</span></a></li>
<li><a href="classes/Consent.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Consent</span></a></li>
<li><a href="classes/ConsentRequestUi.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Consent<wbr/>Request<wbr/>Ui</span></a></li>
<li><a href="classes/Consents.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Consents</span></a></li>
<li><a href="classes/Event.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Event</span></a></li>
<li><a href="classes/FeatureConsent.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Feature<wbr/>Consent</span></a></li>
<li><a href="classes/Insights.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Insights</span></a></li>
<li><a href="classes/Store.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Store</span></a></li>
<li><a href="classes/Visit.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-128"></use></svg><span>Visit</span></a></li>
<li><a href="interfaces/CampaignData.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><g id="icon-256"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)"></path></g></svg><span>Campaign<wbr/>Data</span></a></li>
<li><a href="interfaces/ConfigurationData.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Configuration<wbr/>Data</span></a></li>
<li><a href="interfaces/StoreData.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-256"></use></svg><span>Store<wbr/>Data</span></a></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>