← back to Dw Sarah Rowland Searchfix

list-menus.mjs

13 lines

import fs from 'node:fs'; import os from 'node:os';
const env=fs.readFileSync(`${os.homedir()}/Projects/secrets-manager/.env`,'utf8');
const tok=(k)=>(env.match(new RegExp('^'+k+'=(.+)$','m'))||[])[1]?.trim();
const T=tok('SHOPIFY_CONTENT_TOKEN')||tok('SHOPIFY_ADMIN_TOKEN');
const S='designer-laboratory-sandbox.myshopify.com',A='2024-10';
async function gql(q){const r=await fetch(`https://${S}/admin/api/${A}/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':T,'Content-Type':'application/json'},body:JSON.stringify({query:q})});return r.json();}
const d=await gql(`{ menus(first:20){ nodes{ id handle title items{ id title url items{ id title url } } } } }`);
if(d.errors){ console.log('ERR', JSON.stringify(d.errors).slice(0,300)); process.exit(1); }
d.data.menus.nodes.forEach(m=>{
  console.log(`\n== ${m.title}  [${m.handle}]  (${m.items.length} top items)  ${m.id}`);
  m.items.slice(0,20).forEach(i=>console.log(`   - ${i.title}  →  ${i.url}${i.items?.length?`   (${i.items.length} sub)`:''}`));
});