← back to Designer Wallcoverings

audits/designtex-uom-fix/check-discontinued-live.mjs

23 lines

import fs from 'fs'; import os from 'os'; import path from 'path';
const TOK = fs.readFileSync(path.join(os.homedir(),'Projects/secrets-manager/.env'),'utf8').match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)[1].trim();
const DOMAIN='designer-laboratory-sandbox.myshopify.com', VER='2024-10';
async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(`https://${DOMAIN}/admin/api/${VER}/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});const j=await r.json();if(j.errors&&/throttl/i.test(JSON.stringify(j.errors))){await new Promise(x=>setTimeout(x,3000));continue;}return j;}return{};}
const disc = process.argv[2].split(',').map(s=>s.trim()).filter(Boolean);
console.log('discontinued SKUs to check:',disc.length);
// query Shopify by sku for each; a product is "live" if status ACTIVE
const q=`query($q:String){products(first:5,query:$q){edges{node{id title status}}}}`;
const live=[], present=[];
for(const sku of disc){
  const j=await gql(q,{q:`sku:${sku}`});
  const edges=j.data?.products?.edges||[];
  if(edges.length){
    present.push(sku);
    for(const e of edges){ if(e.node.status==='ACTIVE') live.push({sku,id:e.node.id,title:e.node.title,status:e.node.status}); }
  }
  await new Promise(x=>setTimeout(x,150));
}
console.log('present on Shopify (any status):',present.length);
console.log('LIVE (ACTIVE) discontinued:',live.length);
console.log(JSON.stringify(live,null,1));
fs.writeFileSync('/tmp/discontinued-live-result.json',JSON.stringify({checked:disc.length,present,live},null,2));