← back to Shopify Sample Shipping

export-run.mjs

26 lines

import fs from 'node:fs';
import {query} from './query.mjs';
const dir=new URL('./verification/',import.meta.url);
const GENERAL='gid://shopify/DeliveryProfile/29033627699';
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
const q='{productVariants{edges{node{id title product{id status} deliveryProfile{id}}}}}';
const start=await query('mutation($query:String!){bulkOperationRunQuery(query:$query){bulkOperation{id status} userErrors{field message}}}',{query:q});
if(start.bulkOperationRunQuery.userErrors.length) throw Error(JSON.stringify(start));
const id=start.bulkOperationRunQuery.bulkOperation.id;
console.log('bulk op started',id);
let node;
for(let i=0;i<60;i++){
  await sleep(15000);
  node=(await query('query($id:ID!){node(id:$id){... on BulkOperation{status errorCode objectCount url}}}',{id})).node;
  console.log(`  t+${(i+1)*15}s status=${node.status} objects=${node.objectCount||0}`);
  if(node.status==='COMPLETED'||node.status==='FAILED') break;
}
if(node.status!=='COMPLETED') throw Error('bulk not completed: '+JSON.stringify(node));
const raw=await (await fetch(node.url)).text();
const rows=raw.trim().split('\n').filter(Boolean).map(s=>JSON.parse(s));
const variants=rows.filter(v=>v.id.startsWith('gid://shopify/ProductVariant/'));
const accepted=variants.filter(v=>/\bsample\b/i.test(v.title)&&v.product?.status==='ACTIVE'&&v.deliveryProfile?.id===GENERAL);
const ids=accepted.map(v=>v.id);
fs.writeFileSync(new URL('all-sample-variants.json',dir),JSON.stringify(ids));
console.log(`TOTAL variants=${variants.length} | sample+ACTIVE+onGeneral=${ids.length} -> verification/all-sample-variants.json`);