← 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)`:''}`));
});