← back to Harlequin Pilot Publish

rollback-untrack.mjs

26 lines

// Reverse Part A: re-track each Sample variant recorded in the untrack restore-map.
// Dry-run by default; --apply executes. Sets inventoryItem.tracked back to its prior value (true).
import fs from 'node:fs';
import { gql } from './lib.mjs';

const APPLY = process.argv.includes('--apply');
const MAP = process.env.HOME + '/.claude/yolo-queue/executed-reversible/harlequin-sample-untrack-restore-map.json';
const m = JSON.parse(fs.readFileSync(MAP));

const BULK = `mutation($pid:ID!,$variants:[ProductVariantsBulkInput!]!){
  productVariantsBulkUpdate(productId:$pid, variants:$variants){
    productVariants { id inventoryItem { tracked } }
    userErrors { field message }
  }
}`;

for (const e of m.entries) {
  if (e.change !== 'UNTRACKED_SAMPLE') continue;
  if (!APPLY) { console.log('WOULD-RETRACK', e.dw_sku, 'variant', e.variant_id, '-> tracked=', e.prior_value); continue; }
  const d = await gql(BULK, { pid: e.product_gid, variants: [{ id: e.variant_id, inventoryItem: { tracked: e.prior_value } }] });
  const errs = d.productVariantsBulkUpdate.userErrors;
  console.log(e.dw_sku, 'retrack ->', errs?.length ? JSON.stringify(errs) : ('tracked=' + d.productVariantsBulkUpdate.productVariants[0]?.inventoryItem?.tracked));
  await new Promise(r => setTimeout(r, 400));
}
console.log(APPLY ? 'UNTRACK-ROLLBACK APPLIED' : 'DRY-RUN (pass --apply)');