---
title: SureCart - Restrict Shipping / Billing Address to UK (Or any Country)
date: 2025-11-29T22:43:05Z
modified: 2026-09-22T19:51:44Z
permalink: "https://techarticles.co.uk/surecart-restrict-shipping-billing-address-to-uk-or-any-country/"
type: post
status: publish
excerpt: ""
wpid: 5751
categories:
  - Bubble
  - Coding
  - SureCart
  - Wordpress
timestamp: 2026-09-22T19:51:44Z
tags:
  - Bubble
  - Coding
  - SureCart
  - Wordpress
---

In this short article, we will cover how I did this and the options I put in place for this article I am using WPCodeBox and have it as a JS script. This means the <script> </script> tags have been stripped out. You could also run it as part of a PHP WP\_footer setup if you know how to do this.

## Snippet Settings

![surecart shipping billing restriction](https://techarticles.co.uk/wp-content/uploads/2025/11/surecart-shipping-billing-restriction.png)

I originally wrote this snippet to go with my Royal Mail bridge for [SureCart](https://ta0.uk/surecart) to allow me to automatically pass details of sales to Royal Mail Click and Drop. You can see this video below and see how this works and what it entails.

![](https://i.ytimg.com/vi/34e3nOEpuAo/maxresdefault.jpg)

If you want to see this snippet in action and what it does, please watch the short video below, which shows it in action. In my example, to go with the bridge, I only need shipping details, and I only want shipping within the UK.

![](https://i.ytimg.com/vi/8trcv9URscc/maxresdefault.jpg)

## The Code Snippet 

Please remember this is JavaScript, it doesn’t have any <script> </script> tags as I don’t need them in WPCodeBox

    // ============================
    // CONFIG
    // ============================
    const CONFIG = {
        enableShipping: true,   // true = restrict shipping to UK
        enableBilling: false,    // true = restrict billing to UK
        enableLogging: false,    // true = show console logs
    };

    function log(...args) {
        if (!CONFIG.enableLogging) return;
        console.log(...args);
    }

    log('SureCart country restriction snippet loaded');

    // ============================
    // SHIPPING
    // ============================
    function applyShippingUkOnly() {
        if (!CONFIG.enableShipping) {
            log('Shipping restriction disabled (enableShipping = false)');
            return true; // treat as "done"
        }

        const shippingAddressElement =
            document.querySelector('sc-order-shipping-address')
            ?.shadowRoot
            ?.querySelector('sc-address, sc-compact-address');

        const shippingSelect =
            shippingAddressElement
            ?.shadowRoot
            ?.querySelector('sc-select');

        if (shippingSelect) {
            log('Shipping select found — setting to UK only');
            shippingSelect.choices = [                
                { value: 'GB', label: 'United Kingdom' }
            ];
            return true;
        } else {
            log('Shipping select not found (yet)');
            return false;
        }
    }

    function pollShippingUntilFound() {
        let attempts = 0;
        const maxAttempts = 40;   // 40 * 250ms = 10s
        const interval = 250;

        const timer = setInterval(() => {
            attempts++;
            log(`Shipping check attempt #${attempts}…`);

            if (applyShippingUkOnly() || attempts >= maxAttempts) {
                if (attempts >= maxAttempts) {
                    log('Stopping shipping polling (max attempts reached).');
                } else {
                    log('Shipping restriction applied, stopping shipping polling.');
                }
                clearInterval(timer);
            }
        }, interval);
    }

    // ============================
    // BILLING
    // ============================
    function pollBillingUntilFound() {
        if (!CONFIG.enableBilling) {
            log('Billing restriction disabled (enableBilling = false)');
            return;
        }

        let attempts = 0;
        const maxAttempts = 40;
        const interval = 250;

        const timer = setInterval(() => {
            attempts++;
            log(`Billing check attempt #${attempts}…`);

            const billingAddressElement =
                document.querySelector('sc-order-billing-address')
                ?.shadowRoot
                ?.querySelector('sc-address, sc-compact-address');

            const billingSelect =
                billingAddressElement
                ?.shadowRoot
                ?.querySelector('sc-select');

            if (billingSelect) {
                log('Billing select found — setting to UK only');
                billingSelect.choices = [
                    { value: 'GB', label: 'United Kingdom' }
                ];
                log('Billing restriction applied, stopping billing polling.');
                clearInterval(timer);
            } else if (attempts >= maxAttempts) {
                log('Stopping billing polling (max attempts reached).');
                clearInterval(timer);
            } else {
                log('Billing select not found (yet)');
            }
        }, interval);
    }

    function setupBillingCheckboxListener() {
        if (!CONFIG.enableBilling) {
            log('Billing checkbox listener skipped (enableBilling = false)');
            return;
        }

        const billingCheckbox =
            document.querySelector('sc-order-billing-address')
            ?.shadowRoot
            ?.querySelector('sc-checkbox')
            ?.shadowRoot
            ?.querySelector('input');

        if (billingCheckbox && !billingCheckbox._ukListenerAttached) {
            log('Billing checkbox found — adding listener');
            billingCheckbox._ukListenerAttached = true;

            // If billing fields are already showing (checkbox unchecked), start polling immediately
            if (!billingCheckbox.checked) {
                log('Billing checkbox initially unchecked — starting billing polling now');
                pollBillingUntilFound();
            }

            billingCheckbox.addEventListener('change', () => {
                log('Billing checkbox changed — starting billing polling');
                pollBillingUntilFound();
            });
        } else if (!billingCheckbox) {
            log('Billing checkbox not found (yet)');
        }
    }

    function initUkRestrictions() {
        log('initUkRestrictions() running…');

        // Start shipping polling (if enabled)
        pollShippingUntilFound();

        // Try to set up the billing checkbox; if it’s not there yet, poll for it briefly
        let attempts = 0;
        const maxAttempts = 20;
        const interval = 250;

        const timer = setInterval(() => {
            attempts++;
            log(`Billing checkbox setup attempt #${attempts}…`);

            const billingCheckbox =
                document.querySelector('sc-order-billing-address')
                ?.shadowRoot
                ?.querySelector('sc-checkbox')
                ?.shadowRoot
                ?.querySelector('input');

            if (billingCheckbox || !CONFIG.enableBilling) {
                clearInterval(timer);
                setupBillingCheckboxListener();
            } else if (attempts >= maxAttempts) {
                log('Stopping billing checkbox setup polling (max attempts reached).');
                clearInterval(timer);
            } else {
                log('Billing checkbox still not found');
            }
        }, interval);
    }

    log('Registering SureCart appload listener…');

    window.addEventListener('appload', () => {
        log('SureCart appload event fired');
        initUkRestrictions();
    });

    document.addEventListener('DOMContentLoaded', () => {
        log('DOMContentLoaded — starting UK restriction setup…');
        initUkRestrictions();
    });
```
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// ============================</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// CONFIG</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// ============================</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">        enableShipping: </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">,   </span><span style="color: #6A737D">// true = restrict shipping to UK</span></span>
<span class="line"><span style="color: #E1E4E8">        enableBilling: </span><span style="color: #79B8FF">false</span><span style="color: #E1E4E8">,    </span><span style="color: #6A737D">// true = restrict billing to UK</span></span>
<span class="line"><span style="color: #E1E4E8">        enableLogging: </span><span style="color: #79B8FF">false</span><span style="color: #E1E4E8">,    </span><span style="color: #6A737D">// true = show console logs</span></span>
<span class="line"><span style="color: #E1E4E8">    };</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #F97583">...</span><span style="color: #FFAB70">args</span><span style="color: #E1E4E8">) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableLogging) </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        console.</span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #F97583">...</span><span style="color: #E1E4E8">args);</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'SureCart country restriction snippet loaded'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// ============================</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// SHIPPING</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// ============================</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">applyShippingUkOnly</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableShipping) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Shipping restriction disabled (enableShipping = false)'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">; </span><span style="color: #6A737D">// treat as "done"</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">shippingAddressElement</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">            document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-shipping-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-address, sc-compact-address'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">shippingSelect</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">            shippingAddressElement</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-select'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (shippingSelect) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Shipping select found — setting to UK only'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            shippingSelect.choices </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> [                </span></span>
<span class="line"><span style="color: #E1E4E8">                { value: </span><span style="color: #9ECBFF">'GB'</span><span style="color: #E1E4E8">, label: </span><span style="color: #9ECBFF">'United Kingdom'</span><span style="color: #E1E4E8"> }</span></span>
<span class="line"><span style="color: #E1E4E8">            ];</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Shipping select not found (yet)'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">false</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">pollShippingUntilFound</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">let</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">0</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">maxAttempts</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">40</span><span style="color: #E1E4E8">;   </span><span style="color: #6A737D">// 40 * 250ms = 10s</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">interval</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">250</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">timer</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setInterval</span><span style="color: #E1E4E8">(() </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">            attempts</span><span style="color: #F97583">++</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">`Shipping check attempt #${</span><span style="color: #E1E4E8">attempts</span><span style="color: #9ECBFF">}…`</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #B392F0">applyShippingUkOnly</span><span style="color: #E1E4E8">() </span><span style="color: #F97583">||</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts) {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts) {</span></span>
<span class="line"><span style="color: #E1E4E8">                    </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Stopping shipping polling (max attempts reached).'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">                    </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Shipping restriction applied, stopping shipping polling.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                }</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            }</span></span>
<span class="line"><span style="color: #E1E4E8">        }, interval);</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// ============================</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// BILLING</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// ============================</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">pollBillingUntilFound</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableBilling) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing restriction disabled (enableBilling = false)'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">let</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">0</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">maxAttempts</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">40</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">interval</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">250</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">timer</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setInterval</span><span style="color: #E1E4E8">(() </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">            attempts</span><span style="color: #F97583">++</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">`Billing check attempt #${</span><span style="color: #E1E4E8">attempts</span><span style="color: #9ECBFF">}…`</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingAddressElement</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">                document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-billing-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-address, sc-compact-address'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingSelect</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">                billingAddressElement</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-select'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (billingSelect) {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing select found — setting to UK only'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                billingSelect.choices </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> [</span></span>
<span class="line"><span style="color: #E1E4E8">                    { value: </span><span style="color: #9ECBFF">'GB'</span><span style="color: #E1E4E8">, label: </span><span style="color: #9ECBFF">'United Kingdom'</span><span style="color: #E1E4E8"> }</span></span>
<span class="line"><span style="color: #E1E4E8">                ];</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing restriction applied, stopping billing polling.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts) {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Stopping billing polling (max attempts reached).'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing select not found (yet)'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            }</span></span>
<span class="line"><span style="color: #E1E4E8">        }, interval);</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setupBillingCheckboxListener</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableBilling) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox listener skipped (enableBilling = false)'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingCheckbox</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">            document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-billing-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-checkbox'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'input'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (billingCheckbox </span><span style="color: #F97583">&&</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">!</span><span style="color: #E1E4E8">billingCheckbox._ukListenerAttached) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox found — adding listener'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            billingCheckbox._ukListenerAttached </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #6A737D">// If billing fields are already showing (checkbox unchecked), start polling immediately</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #E1E4E8">billingCheckbox.checked) {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox initially unchecked — starting billing polling now'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">pollBillingUntilFound</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">            }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            billingCheckbox.</span><span style="color: #B392F0">addEventListener</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'change'</span><span style="color: #E1E4E8">, () </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox changed — starting billing polling'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">pollBillingUntilFound</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">            });</span></span>
<span class="line"><span style="color: #E1E4E8">        } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #E1E4E8">billingCheckbox) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox not found (yet)'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">initUkRestrictions</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'initUkRestrictions() running…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #6A737D">// Start shipping polling (if enabled)</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">pollShippingUntilFound</span><span style="color: #E1E4E8">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #6A737D">// Try to set up the billing checkbox; if it’s not there yet, poll for it briefly</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">let</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">0</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">maxAttempts</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">20</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">interval</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">250</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">timer</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setInterval</span><span style="color: #E1E4E8">(() </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">            attempts</span><span style="color: #F97583">++</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">`Billing checkbox setup attempt #${</span><span style="color: #E1E4E8">attempts</span><span style="color: #9ECBFF">}…`</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingCheckbox</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">                document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-billing-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-checkbox'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">                ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'input'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (billingCheckbox </span><span style="color: #F97583">||</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableBilling) {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">setupBillingCheckboxListener</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">            } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts) {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Stopping billing checkbox setup polling (max attempts reached).'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox still not found'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            }</span></span>
<span class="line"><span style="color: #E1E4E8">        }, interval);</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Registering SureCart appload listener…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    window.</span><span style="color: #B392F0">addEventListener</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'appload'</span><span style="color: #E1E4E8">, () </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'SureCart appload event fired'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">initUkRestrictions</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">    });</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    document.</span><span style="color: #B392F0">addEventListener</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'DOMContentLoaded'</span><span style="color: #E1E4E8">, () </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'DOMContentLoaded — starting UK restriction setup…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">initUkRestrictions</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">    });</span></span>
<span class="line"></span>
```JavaScript