# Consent Troubleshooting Guide (/docs/consent-management/testing-and-troubleshooting/troubleshoot-consent)

## Overview [#overview]

In this page, you will find troubleshooting techniques and easy ways to ensure that everything is configured correctly, if your consent management setup is not behaving as you expect. Please let your Transcend contact know if you feel like the answer to your question should have been listed!

## First Check [#first-check]

Make sure changes to your Consent Configuration have been pushed! Any staged change that has not been pushed to your `Prod` or `Test` bundle will not be in effect yet.
To publish changes, select the `Review Changes & Publish...` button in the top right corner of most Consent dashboard screens.

![Command typed in the console](/images/screenshot/2024-02-15-publish-changes.png)

From here you can review the changes, select which bundle to apply them (`Prod` or `Test`), and publish.

## Known airgap.js Error Messages [#known-airgapjs-error-messages]

- `XDI connection to {{url}} timed out.`
  This error message is not meaningful unless you are trying to sync consent across multiple subdomains, and you can deactivate this feature by adding `data-sync="off"`git to your airgap.js script.
  If you do mean to use XDI Sync, please refer to the documentation on [Custom Domain Aliases](../configuration/custom-domain-alias.mdx).
- `This build of Transcend Consent Management cannot run on {{domain}}`
  Your domain was not added to your allow-list, so that airgap.js can run on that website. You can do that from your [Consent Developer Settings](https://app.transcend.io/consent-manager/developer-settings).
- Errors related to `symbol.iterator`.
  This is likely related to Transcend's built-in [tamper resistance](../reference/privacy-and-security.mdx#tamper-resistance). You can disable tamper resistance by setting `data-tamper-resist="off"`.
- `Failed to read 'localStorage' property from 'Window': Accedss denied for this document`. This error results from browsing in an incognito mode or with a browser using enhanced privacy settings. This error can be ignored, as it's coming from the sync frame.
- `Setting the document's base URI to '{{url}}' violates the following Content Security Policy directive: "base-uri 'none'". The action has been blocked.`
  This error can occur when enforcement is active and the current page has a Content Security Policy that blocks page base URI modifications. This can be resolved by setting `data-bup="off"` on the airgap.js script tag, which disables base URI propagation for DOM regulation.

## Access the Dev Console/Chrome DevTools [#access-the-dev-consolechrome-devtools]

1. Right-click on a page of your website and choose `Inspect` or `Inspect Element`.

   ![Right Click and Inspect](/images/2024-02-15-inspect.png)

2. Make sure you select Console in the tab menu. It should be towards the bottom of the screen on Chrome, Edge, and Firefox, and towards the top on Safari.

   ![Console Tab](/images/2024-02-15-console.png)

3. You can type or copy & paste any code snippets next to the command line `>` character, press `Enter` and it should run.

   ![Command typed in the console](/images/2024-02-15-console-command.png)

4. Your Transcend contact might instruct you to type a specific command to help investigate an issue. There are also many helpful commands for testing available on the [Testing and Debugging Consent](./debugging-and-testing.mdx) documentation page.

## Consent UI Not Showing [#consent-ui-not-showing]

“Consent UI” here refers to a pop-up that looks like the one below. We support a lot of view states which are all documented [here](https://github.com/transcend-io/consent-manager-ui).

![Cosent UI](/images/2024-02-15-consent-ui.jpg)

1. Are you trying this in an Incognito window? We do not auto-prompt anyone for consent after it was provided once, unless consent expiration is set up.
2. Do you have any changes pending to publish? (see [First thing to check](./troubleshoot-consent.mdx#first-check))
3. Is `auto-prompt` set to a number greater than 0 in [Display Settings](https://app.transcend.io/consent-manager/display-settings)? In most cases you will want it set to 1, which means Consent UI will display at the first page load. 0 means it will never show.
   If the issue persists in incognito, this is usually a misconfiguration with your [Regional Experiences](https://app.transcend.io/consent-manager/regional-experiences) and might require a configuration change. More documentation on Regional Experiences can be found [here](../configuration/regional-experiences.mdx).
4. `airgap.getRegimePurposes()` should return a non-empty list. If this is empty, it means airgap has not been setup to regulate any tracking purposes, so it doesn’t make sense to show you any Consent dialogues.
5. `airgap.getRegimes()` should return the regime that you are matching with. Is this the regime you would expect?
6. If the regime seems correct, you should check the default UI viewState for this regime. To do so, you can check `airgap.loadOptions.consentManagerConfig.initialViewStateByPrivacyRegime` in the Dev Console, which shows the mapping of each default view state by regime, or visit the [Regional Experiences dashboard](https://app.transcend.io/consent-manager/regional-experiences) and review the `UI View State` column. If the default UI View State is set to `Hidden`, it will not auto-prompt.
7. Our UI module is suppressed if we detect a privacy signal such as GCP or DNT. Are those enabled on your browser? If so, the following message should display in your console
   `Transcend: Tracking consent auto-prompt suppressed due to supported privacy signals: Do-Not-Track` (might refer to [GPC](../concepts/global-privacy-control.mdx) as well)
8. You can test using your VPN, but another option is you can use [our debugging tool](./debugging-and-testing.mdx) to override our regime-detection logic and force a certain regime. This will allow you to preview the experience for different regimes.

## airgap.js is not Blocking / Regulating Network Requests or Cookies as Expected [#airgapjs-is-not-blocking--regulating-network-requests-or-cookies-as-expected]

airgap.js allows a request or cookie if:

- airgap.js is not set to regulate yet. Make sure that `reporting-only` is off for this testing. This can be done in your dashboard but that setting is universal! Do not switch it off unless you are ready to have airgap regulate every page it is currently deployed on. Instead, consider forcing it on in your test environment by adding `data-report-only="off"` to the script, or locally, using our [debugging tools](./debugging-and-testing.mdx).
- The user is matched with a regime with an empty list of applicable purposes.
- The request or cookie is tagged with `Essential` purpose, or it is tagged with `Unknown` and your `Unknown Request Policy` or `Unknown Cookie Policy` is [set to “Always Allow”](https://app.transcend.io/consent-manager/developer-settings/advanced-settings).
- The user has already given consent (or opted in) to this tracking purpose.

There could be a misconfiguration with your Regional Experiences’ applicable purposes, or with your approved data flows/cookies assigned purposes. Things to check:

- `airgap.getRegimePurposes()` should return a non-empty list for regulation to work. If this is empty, it means airgap has not been setup to regulate any tracking purposes, so it will NOT block any requests or cookies.
- `airgap.getConsent()` should return a consent state that is at least partially or fully opted out of applicable purposes for the regime.
- If you know the name of the network request or cookie, you can check yourself if airgap is _configured_ to allow it with the current user consent + applicable regime by running:

```javascript
// Replace this example URL with your own URL
await airgap.isAllowed(
  'https://maps.googleapis.com/maps-api-v3/api/js/55/10/common.js',
);

// Replace this example cookie name with your own
await airgap.isCookieAllowed({ name: '_dd_s' });
```

- If running these commands return `true`, then please double-check your approved cookies or data flows purposes in the Admin Dashboard. Alternatively, you can also run the following commands to check what their currently assigned purposes are:

```javascript
// Replace this example URL with your own
await airgap.getPurposes('https://transcend.io');

// Replace this example cookie name with your own
await airgap.getCookiePurposes({ name: '__tld__' });
```

- If running these commands return `false`, but you still see the cookie being written or the network request being made, then two things could be the cause:
  - The script making the network request/writing the cookie is loaded _before_ airgap has finished initializing. Please ensure that airgap is loaded as early as possible in your page load.
  - If you are loading airgap.js first (e.g. via a `<script>` tag placed first in your document `<head>`), please reach out to our Transcend support team and we will help get this figured out!

## airgap.js is Unexpectedly Blocking Network Requests or Cookies / Interfering With Site Functionality [#airgapjs-is-unexpectedly-blocking-network-requests-or-cookies--interfering-with-site-functionality]

airgap.js blocks a request or cookie if:

- The user is matched with a regime with a non-empty list of applicable purposes.
- The request or cookie is tagged with a purpose applicable to that same regime, or it is tagged with `Unknown` and your `Unknown Request Policy` or `Unknown Cookie Policy` is set to [something other than “Always Allow”](https://app.transcend.io/consent-manager/developer-settings/advanced-settings).
- The user has not given consent (or opted out) of this tracking purpose, or the purpose is disallowed by default in that [Regional Experience](https://app.transcend.io/consent-manager/regional-experiences).

If airgap is unexpectedly blocking something, there could be a misconfiguration with your regional configuration, or your approved data flows or cookies assigned purposes. Things to check:

- Try blocking airgap to confirm that it is indeed causing the issue on your site. The best way to do this is to load the site but turn off airgap by blocking network requests to cdn.transcend.io:
  1. Open the dev console (right-click + “Inspect”)
  2. Go to the network tab and search for airgap
  3. Right-click on airgap.js and click “Block request domain”

![Block Airgap](/images/2024-02-15-block-airgap.png)

1. Reload the page. If the issue still persists, then it is _not_ an issue caused by airgap. If the issue goes away, it _is_ an issue with airgap.
2. When you are done testing, make sure to unblock airgap.js

- Open up the Dev Console and run `airgap.export()`
  - The fields `requests` , `cookies` , `mutations` , `cookieMutations` hold information about what requests or cookies we are blocking/quarantining. Does anything look related to the reported issue? If something is blocked that should not be, this is likely a configuration issue with your approved data flows or cookies.
  - Some additional helpful snippets you can run to check whether a given cookie or request should be allowed, and what their currently assigned purposes are:

```javascript
  // Replace this example URL with your own URL
  await airgap.isAllowed(
    'https://maps.googleapis.com/maps-api-v3/api/js/55/10/common.js',
  );

  // Replace this example cookie name with your own
  await airgap.isCookieAllowed({ name: '_dd_s' });

  // Replace this example URL with your own
  await airgap.getPurposes('https://transcend.io');

  // Replace this example cookie name with your own
  await airgap.getCookiePurposes({ name: '**tld**' });
```

- If the cookie/request returns a purpose that the user has opted out of, or not consented to, then you can change this behavior by assigning the data flow or cookie the `Essential` purpose instead.
