← back to Shopify Sample Shipping

query.mjs

20 lines

import fs from 'node:fs';
import { TOKEN, SHOP } from '../designerwallcoverings/scripts/lib/shopify.mjs';
export async function query(query, variables = {}) {
  const r = await fetch(`https://${SHOP}/admin/api/2026-07/graphql.json`, {
    method: 'POST',
    headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
    body: JSON.stringify({query, variables}), signal: AbortSignal.timeout(30000)
  });
  const j = await r.json();
  if (!r.ok || j.errors) throw new Error(JSON.stringify({status:r.status, errors:j.errors}));
  return j.data;
}
if (process.argv[1]?.endsWith('/query.mjs')) {
  const q = fs.readFileSync(process.argv[2], 'utf8');
  if (/\bmutation\b/.test(q)) throw new Error('Read-only query runner');
  const j = await query(q);
  fs.writeFileSync(process.argv[3], JSON.stringify(j,null,2)+'\n');
  console.log('Saved',process.argv[3]);
}