← back to Jeffrey Stevens Margin Fix

pull-audit-codes.mjs

18 lines

import { readFileSync, writeFileSync } from 'node:fs';
const TOKEN=readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').split('\n').find(l=>l.startsWith('SHOPIFY_ADMIN_TOKEN=')).split('=')[1].trim();
const SHOP='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
const DIR=new URL('.',import.meta.url).pathname;
const tgt=JSON.parse(readFileSync(DIR+'data/js-audit-candidates.json'));
const gql=(q)=>fetch(SHOP,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q})}).then(r=>r.json());
const out=[]; let i=0;
for(const t of tgt){
  const q=`{p:product(id:"gid://shopify/Product/${t.product_id}"){status mfr:metafield(namespace:"custom",key:"manufacturer_sku"){value} variants(first:5){edges{node{title price}}}}}`;
  try{const r=await gql(q);const p=r.data&&r.data.p;const s=p?.variants.edges.map(e=>e.node).find(v=>!/sample/i.test(v.title));
    out.push({...t,york_code:p?.mfr?.value||null,status:p?.status,live_sell:s?.price});}
  catch(e){out.push({...t,york_code:null});}
  if(++i%250===0){writeFileSync(DIR+'data/js-audit-live.json',JSON.stringify(out,null,1));console.log('pulled',i);}
  await new Promise(x=>setTimeout(x,110));
}
writeFileSync(DIR+'data/js-audit-live.json',JSON.stringify(out,null,1));
console.log('DONE',out.length);