← back to Zendesk Chat Analyzer

sg-block-test.js

58 lines

#!/usr/bin/env node
// Load the DW storefront through a Singapore-geolocated Browserbase browser and
// determine whether Blockify actually blocks it. Reports final URL + block verdict.
const { chromium } = require('/Users/macstudio3/Projects/all-designerwallcoverings/node_modules/playwright-core');
const fs = require('fs');

function env(k){ for(const l of fs.readFileSync('/Users/macstudio3/Projects/secrets-manager/.env','utf8').split('\n')) if(l.startsWith(k+'=')) return l.slice(k.length+1).trim().replace(/^["']|["']$/g,''); }
const KEY = env('BROWSERBASE_API_KEY'), PROJ = env('BROWSERBASE_PROJECT_ID');
const STORE = 'https://www.designerwallcoverings.com/';

(async () => {
  // 1. create SG-geolocated session
  const r = await fetch('https://api.browserbase.com/v1/sessions', {
    method: 'POST',
    headers: { 'X-BB-API-Key': KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ projectId: PROJ, proxies: [{ type: 'browserbase', geolocation: { country: 'SG', city: 'SINGAPORE' } }] }),
  });
  const sess = await r.json();
  if (!sess.id) { console.log('SESSION FAIL:', JSON.stringify(sess).slice(0,300)); process.exit(1); }
  console.log('BB session:', sess.id, '(SG proxy)');
  const connectUrl = sess.connectUrl || `wss://connect.browserbase.com?apiKey=${KEY}&sessionId=${sess.id}`;

  let verdict = 'UNKNOWN';
  try {
    const browser = await chromium.connectOverCDP(connectUrl);
    const ctx = browser.contexts()[0] || await browser.newContext();
    const page = ctx.pages()[0] || await ctx.newPage();
    // confirm we're actually on a SG IP
    let ipgeo = {};
    try { await page.goto('https://ipapi.co/json/', { timeout: 30000 }); ipgeo = JSON.parse(await page.locator('body').innerText()); } catch(e){}
    console.log('exit IP country:', ipgeo.country_name || '?', '| ip:', ipgeo.ip || '?');

    await page.goto(STORE, { waitUntil: 'domcontentloaded', timeout: 45000 });
    await page.waitForTimeout(6000); // let Blockify client script run + redirect
    const finalUrl = page.url();
    const title = await page.title().catch(()=> '');
    const bodytext = (await page.locator('body').innerText().catch(()=> '')).slice(0, 2000).toLowerCase();
    await page.screenshot({ path: '/Users/macstudio3/sg-block-test.png' }).catch(()=>{});

    const blockedSignals = ['access denied','you have been blocked','not available in your','restricted in your',
      'blockify','access to this store','region is restricted','cannot access','blocked'];
    const hit = blockedSignals.find(s => bodytext.includes(s) || finalUrl.toLowerCase().includes('block'));
    const storeLoaded = title.toLowerCase().includes('designer wallcoverings') && bodytext.includes('wallcovering') && !hit;

    if (hit) verdict = 'BLOCKED ✅ (Singapore hit a block: "'+hit+'")';
    else if (storeLoaded) verdict = 'NOT BLOCKED ❌ (Singapore loaded the normal store)';
    else verdict = 'INCONCLUSIVE (title="'+title+'")';

    console.log('final URL:', finalUrl);
    console.log('title:', title);
    console.log('body sample:', bodytext.slice(0,180).replace(/\n/g,' '));
    console.log('VERDICT:', verdict);
    await browser.close();
  } catch (e) {
    console.log('NAV ERROR:', String(e).slice(0,200));
  }
})();