> For the complete documentation index, see [llms.txt](https://docs.sudoplatform.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sudoplatform.com/guides/ad-tracker-blocker/manage-exceptions.md).

# Manage Exceptions

Provides control over which URLs are given an exception from being blocked.

You can control which URLs are permitted to bypass the blocking rules by granting an exception for a specific web page, or an entire host. However, on iOS, exceptions may only be applied to an entire host.

## Get the Exceptions List

To get the list of exceptions you can use the `getExceptions` method.

{% tabs %}
{% tab title="TypeScript" %}

```typescript
import { FilterException } from '@sudoplatform/sudo-ad-tracker-blocker'

const exceptions: FilterException[] = await client.getExceptions()
```

{% endtab %}

{% tab title="Swift" %}

```swift
let client: SudoAdTrackerBlockerClient!
let exceptions = await client.getExceptions()
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// val client: SudoAdTrackerBlockerClient

launch {
    try {
        val isMySiteExcepted = withContext(Dispatchers.IO) {
            client.getExceptions().firstOrNull { exc ->
                exc.source.contains("http://myfavourite.domain.eu")
            }        
        } ?: false
    } catch (e: SudoAdTrackerBlockerException) {
        // Handle/notify user of exception
    }
}
```

{% endtab %}
{% endtabs %}

## Add to the Exceptions List

To add to the list of exceptions you can use the `addExceptions` method. You can add the URL of a single page or an entire host to the list of exceptions.

On iOS, exceptions may only apply to an entire host.

{% tabs %}
{% tab title="TypeScript" %}

```typescript
import { FilterException } from '@sudoplatform/sudo-ad-tracker-blocker'

const hostException: FilterException = {
  // `type` === 'host' prevents blocking on 
  // any pages at `example.com`.
  type: 'host',
  source: 'http://example.com/page.html'
}

const pageException: FilterException = {
  // `type` === 'page' prevents blocking on 
  // only `example.com/page.html`.
  type: 'page',
  source: 'https://example.com/page.html'
}

// Add both exceptions to the exceptions list
await client.addExceptions([
  hostException, 
  pageException
])
```

{% endtab %}

{% tab title="Swift" %}

```swift
let client: SudoAdTrackerBlockerClient!
await client.addExceptions([BlockingException("example.com")])
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// val client: SudoAdTrackerBlockerClient

launch {
    try {
        withContext(Dispatchers.IO) {
            client.addExceptions(
                toHostException("http://somehost.com"),
                toPageException("http://myfavourite.domain.eu/homepage")
            )
        }
    } catch (e: SudoAdTrackerBlockerException) {
        // Handle/notify user of exception
    }
}
```

{% endtab %}
{% endtabs %}

## Remove from the Exceptions List

To remove from the list of exceptions you can use the `removeExceptions` method. You should supply the same exception value(s) you used when you added the page or host to the list of exceptions.

{% tabs %}
{% tab title="TypeScript" %}

```typescript
const exception: FilterException = {
  type: 'host',
  source: 'http://example.com/page.html'
}

/*
 * The `removeExceptions` method returns a Promise that will
 * resolve when the exception has been removed from the 
 * storage provider provided to the client.
 *
 * In this case the removed exception will be for all pages 
 * of `example.com` since the exception is of type `host`.
 */

await client.removeExceptions([exception])
```

{% endtab %}

{% tab title="Swift" %}

```swift
let client: SudoAdTrackerBlockerClient!
await client.removeExceptions([BlockingException("example.com")])
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// val client: SudoAdTrackerBlockerClient

launch {
    try {
        withContext(Dispatchers.IO) {
            client.removeExceptions(
                toHostException("http://somehost.com"),
                toPageException("http://myfavourite.domain.eu/homepage")
            )
        }
    } catch (e: SudoAdTrackerBlockerException) {
        // Handle/notify user of exception
    }
}
```

{% endtab %}
{% endtabs %}

## Removing all the Entries from the Exceptions List

To remove all entries from the list of exceptions you can use the `removeAllExceptions` method.

{% tabs %}
{% tab title="TypeScript" %}

```typescript
/*
 * The `removeAllExceptions` method returns a Promise that 
 * will resolve when the all of the exceptions have succesfully
 * been removed from the client's storage provider.
 */

await client.removeAllExceptions()
```

{% endtab %}

{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift">let client: SudoAdTrackerBlockerClient!
<strong>await client.removeAllExceptions()
</strong></code></pre>

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// val client: SudoAdTrackerBlockerClient

launch {
    try {
        withContext(Dispatchers.IO) {
            client.removeAllExceptions()
        }
    } catch (e: SudoAdTrackerBlockerException) {
        // Handle/notify user of exception
    }
}
```

{% endtab %}
{% endtabs %}
