← back to Designer Wallcoverings
Refactor hardcoded Shopify Admin token to process.env.SHOPIFY_ADMIN_TOKEN
ad11ae9c6addc82c299efaa6743ab5ed36407b00 · 2026-05-18 16:36:08 -0700 · Steve
Replaces the literal shpat_ token in 208 code files (JS/TS/TSX/Python/shell)
with environment-variable reads. Python files get an import os added where
missing. No behavior change when SHOPIFY_ADMIN_TOKEN is exported.
Prerequisite for git-history scrub.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
M DW-Agents/dw-agents/agent-legal-team/legal-agent.tsM DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.jsM DW-Programming/PhillipeRomanoTagger/bulk-update-pr.jsM DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.jsM DW-Programming/PhillipeRomanoTagger/fix-pr-titles.jsM DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.tsM DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.tsM DW-Programming/ShopifyCalendarNext/src/lib/shopify.tsA DW-Programming/__pycache__/color-batch-cleaner.cpython-314.pycA DW-Programming/__pycache__/generate-room-settings.cpython-314.pycM DW-Programming/activate-versace-drafts.jsM DW-Programming/activate-versace-vi.jsM DW-Programming/anna-french-room-settings.jsM DW-Programming/anna-french-shopify-push.jsM DW-Programming/archive-hollywood-discontinued.jsM DW-Programming/archive-thibaut-discontinued.jsM DW-Programming/arte-image-backfill.jsM DW-Programming/arte-width-from-shopify.jsM DW-Programming/backfill-schumacher-images.jsM DW-Programming/china-seas-design-tagger.jsM DW-Programming/cleanup-all-body-html.jsM DW-Programming/cleanup-body-html-all-vendors.jsM DW-Programming/cleanup-pr-body-html-bulk.jsM DW-Programming/cleanup-pr-body-html.jsM DW-Programming/color-batch-cleaner.pyM DW-Programming/color-collection-cleaner.jsM DW-Programming/crop-grs-fix-top-logo.jsM DW-Programming/crop-grs-images.jsM DW-Programming/dwc-bulk-audit.jsM DW-Programming/dwc-legacy-audit.jsM DW-Programming/dwjs-phase2-scrape-specs.jsM DW-Programming/fix-blue-collection.jsM DW-Programming/fix-dwkk-zero-price-variants.jsM DW-Programming/fix-empty-body-html.jsM DW-Programming/fix-malibu-body-html-retry.jsM DW-Programming/fix-malibu-body-html.jsM DW-Programming/fix-phillipe-romano-vendors.jsM DW-Programming/fix-product-type-by-width.jsM DW-Programming/fix-product-type-tags.jsM DW-Programming/fix-sandberg-body.jsM DW-Programming/fix-single-variant-pricing.jsM DW-Programming/fix-thibaut-anna-french.jsM DW-Programming/fix-thibaut-titles.jsM DW-Programming/generate-room-settings.pyM DW-Programming/gls-gemini-retry.jsM DW-Programming/gls-product-cleanup.jsM DW-Programming/gls-product-processor.jsM DW-Programming/gls-product-updater.jsM DW-Programming/gls-retry-failed.jsM DW-Programming/hollywood-hex-extract.jsM DW-Programming/interior-design-ai-tagger.jsM DW-Programming/interior-design-tagger.jsM DW-Programming/launch-versace-vi.jsM DW-Programming/maya-romanoff-updater/fix-dwjs-titles.jsM DW-Programming/maya-romanoff-updater/maya-romanoff-updater.jsM DW-Programming/maya-romanoff-updater/server.jsM DW-Programming/migrate-dwkk-to-dwpr.jsM DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.tsM DW-Programming/nextjs-liquid-app/app/api/product-action/route.tsM DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.tsM DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.tsM DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.tsM DW-Programming/nextjs-liquid-app/app/api/update-product/route.tsM DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.tsM DW-Programming/nextjs-liquid-app/backfill-metafields.jsM DW-Programming/phillipe-romano-cleanup.jsM DW-Programming/phillipe-romano-vendor-cleanup.jsM DW-Programming/phillipe-romano-vendor-fix.jsM DW-Programming/push-china-seas-metafields.jsM DW-Programming/push-color-hex-metafields.jsM DW-Programming/push-maya-romanoff-to-shopify.jsM DW-Programming/push-versa-specs-to-shopify.jsM DW-Programming/push-versace-vi.jsM DW-Programming/remove-damask-from-florals.jsM DW-Programming/restore-blue-tags.jsA DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pycA DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pycA DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pycA DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pycA DW-Programming/room-setting-app/__pycache__/generate-rooms-DWTT-80352.cpython-314.pycM DW-Programming/room-setting-app/batch-room-gen-v2.pyM DW-Programming/room-setting-app/batch-room-generator.pyM DW-Programming/room-setting-app/batch-room-settings.pyM DW-Programming/room-setting-app/generate-phillipe-romano-rooms.pyM DW-Programming/room-setting-app/generate-rooms-DWTT-80352.pyA DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pycM DW-Programming/room-setting-app/scripts/batch-room-generator.jsM DW-Programming/room-setting-app/scripts/batch-room-generator.pyM DW-Programming/scrape-versace-images.jsM DW-Programming/update-dwjs-specs-final.jsM DW-Programming/update-dwjs-specs-phase2.jsM DW-Programming/update-dwjs-specs-phase3.jsM DW-Programming/update-dwjs-specs-phase4.jsM DW-Programming/update-dwjs-specs.jsM DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.jsM DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.jsM DW-Programming/verify-versace.jsM DW-Programming/versace-image-scraper.jsM DW-Programming/versace-image-uploader.jsM DW-Websites/shop-by-color/fetch-colors.jsA scripts/__pycache__/batch-room-generator.cpython-314.pycA scripts/__pycache__/batch-room-settings.cpython-314.pycM scripts/analyze-fabric-wallcovering.jsM scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24M scripts/batch-room-generator.pyM scripts/batch-room-settings.pyM scripts/brand-mckenzie-ai-analysis.tsM scripts/brand-mckenzie-full-scrape.tsM scripts/brand-mckenzie-full-update.tsM scripts/brand-mckenzie-recrawl.tsM scripts/build-collections-directory.jsM scripts/collection-consolidation-phase2.jsM scripts/collection-consolidation-phase3.jsM scripts/collection-description-writer.jsM scripts/collections-cleanup.jsM scripts/collections-cover-images.jsM scripts/collections-phase5-audit.jsM scripts/collections-phase5-publish.jsM scripts/dedupe-spin-gifs.jsM scripts/dwkk-zero-price-cleanup.jsM scripts/dwkk-zero-price-fix.jsM scripts/dwtt-body-to-metafields.jsM scripts/fix-brand-mckenzie-leadtime.tsM scripts/fix-collection-trailing-artifacts.jsM scripts/fix-dwkk-zero-price.jsM scripts/fix-fabric-wallcovering-titles.jsM scripts/fix-fabric-wallcovering-v2.jsM scripts/fix-fabric-wallcovering-v3.jsM scripts/fix-fabrics-plural-graphql.shM scripts/fix-fabrics-plural-titles-v2.jsM scripts/fix-fabrics-plural-titles-v3.jsM scripts/fix-fabrics-plural-titles.jsM scripts/fix-fabrics-plural-titles.shM scripts/grs-image-crop.jsM scripts/interior-design-tags.jsM scripts/kill-wallpaper-word.jsM scripts/mfr-sku-bulk-update.jsM scripts/populate-dwtt-mfr-sku-active.jsM scripts/populate-dwtt-mfr-sku-from-catalog.jsM scripts/populate-dwtt-mfr-sku.jsM scripts/populate-mfr-sku-metafield.jsM scripts/rw-upload-room-settings.jsM scripts/shopify-swatch-spin.jsM scripts/standardize-product-types-bulk.jsM scripts/standardize-product-types.jsM scripts/supplier-mfr-bulk-push.jsM scripts/surface-stick-backfill.jsM scripts/sync-shopify-to-postgres.jsM scripts/update-jim-dultz-shopify.jsM shopify/scripts/add-missing-samples-v2.jsM shopify/scripts/arte-dashboard/bulk-title-updater.jsM shopify/scripts/arte-dashboard/fetch-missing-skus.jsM shopify/scripts/arte-dashboard/populate-mapping.jsM shopify/scripts/arte-dashboard/server.jsM shopify/scripts/arte-update-mfr-sku.jsM shopify/scripts/audit-novasuede-new.jsM shopify/scripts/batch-room-settings.pyM shopify/scripts/batch-room-settings/batch-room-generator.jsM shopify/scripts/bespoke-updater/server.jsM shopify/scripts/create-missing-sample-variants.jsM shopify/scripts/create-novasuede-rosewater.jsM shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24M shopify/scripts/dwkk-zero-price-cleanup.jsM shopify/scripts/dwvs-activate-ready-drafts.jsM shopify/scripts/dwvs-import-catalog-only.jsM shopify/scripts/dwvs-original-series-apply.jsM shopify/scripts/dwvs-reconcile-mfr.jsM shopify/scripts/dwvs-versace-csv-export.jsM shopify/scripts/dwwd-roll-length/fix-orphans.jsM shopify/scripts/dwwd-roll-length/run.jsM shopify/scripts/fix-dwkk-zero-price-variants.jsM shopify/scripts/fix-dwkk-zero-price.jsM shopify/scripts/fix-missing-sample-variants.jsM shopify/scripts/fix-missing-samples.jsM shopify/scripts/fix-sample-inventory-only.jsM shopify/scripts/fix-sample-inventory.jsM shopify/scripts/fix-samples-graphql.jsM shopify/scripts/fix-zero-inventory-samples.jsM shopify/scripts/gemini-catalog-tagger.jsM shopify/scripts/gemini-tag-engine/index.jsM shopify/scripts/hollywood-tag-enrichment.jsM shopify/scripts/interior-design-tagger.jsM shopify/scripts/inventory-set-2026.jsM shopify/scripts/koroseal-batch-cron.jsM shopify/scripts/koroseal-enhanced-update.jsM shopify/scripts/koroseal-mfr-from-handles.jsM shopify/scripts/koroseal-mfr-populator.jsM shopify/scripts/kravet-full-monty-single.jsM shopify/scripts/la-walls-image-sync.jsM shopify/scripts/migrate-barcode-to-mfr-sku.pyM shopify/scripts/migrate-mckenzie-global-to-custom.jsM shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24M shopify/scripts/paul-montgomery-image-sync.jsM shopify/scripts/push-fire-rating-metafields.jsM shopify/scripts/push-pattern-repeat-metafields.jsM shopify/scripts/resume-sample-variant-creation.jsM shopify/scripts/revert-dwcy-pass2.jsM shopify/scripts/revert-dwcy-to-dwc.jsM shopify/scripts/romo-lookup.jsM shopify/scripts/sample-only-price-match.jsM shopify/scripts/sample-only-status-audit.jsM shopify/scripts/sandberg-add-bolt-fix-legacy.jsM shopify/scripts/sandberg-add-bolt-variants.jsM shopify/scripts/sandberg-add-mural-variants.jsM shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24M shopify/scripts/sandberg-william-morris-weight-4lb.jsM shopify/scripts/sandberg-wm-add-wallcovering-title.jsM shopify/scripts/sandberg-wm-price-audit.jsM shopify/scripts/sandberg-wm-pull-full.jsM shopify/scripts/scan-missing-samples.jsM shopify/scripts/sync-shopify-products.jsM shopify/scripts/update-brand-mckenzie-vendor.jsM shopify/scripts/update-mckenzie-delivery.jsM shopify/scripts/update-rop-mfr.pyM shopify/scripts/wm-add-bolt-variants.jsM shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24M shopify/scripts/zoffany-ai-enrich-push.jsM shopify/scripts/zoffany-full-monty-20.js
Diff
commit ad11ae9c6addc82c299efaa6743ab5ed36407b00
Author: Steve <steve@designerwallcoverings.com>
Date: Mon May 18 16:36:08 2026 -0700
Refactor hardcoded Shopify Admin token to process.env.SHOPIFY_ADMIN_TOKEN
Replaces the literal shpat_ token in 208 code files (JS/TS/TSX/Python/shell)
with environment-variable reads. Python files get an import os added where
missing. No behavior change when SHOPIFY_ADMIN_TOKEN is exported.
Prerequisite for git-history scrub.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
DW-Agents/dw-agents/agent-legal-team/legal-agent.ts | 2 +-
.../ImportNewSkufromURL/scripts/rwltd-gemini-cron.js | 2 +-
DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js | 2 +-
.../PhillipeRomanoTagger/consolidate-pr-vendors.js | 2 +-
DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js | 2 +-
.../ShopifyCalendarNext/scripts/activate-first-two.ts | 2 +-
.../src/app/api/analyze-product/route.ts | 2 +-
DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts | 2 +-
.../__pycache__/color-batch-cleaner.cpython-314.pyc | Bin 0 -> 31748 bytes
.../__pycache__/generate-room-settings.cpython-314.pyc | Bin 0 -> 7234 bytes
DW-Programming/activate-versace-drafts.js | 2 +-
DW-Programming/activate-versace-vi.js | 2 +-
DW-Programming/anna-french-room-settings.js | 2 +-
DW-Programming/anna-french-shopify-push.js | 2 +-
DW-Programming/archive-hollywood-discontinued.js | 2 +-
DW-Programming/archive-thibaut-discontinued.js | 2 +-
DW-Programming/arte-image-backfill.js | 2 +-
DW-Programming/arte-width-from-shopify.js | 2 +-
DW-Programming/backfill-schumacher-images.js | 2 +-
DW-Programming/china-seas-design-tagger.js | 2 +-
DW-Programming/cleanup-all-body-html.js | 2 +-
DW-Programming/cleanup-body-html-all-vendors.js | 2 +-
DW-Programming/cleanup-pr-body-html-bulk.js | 2 +-
DW-Programming/cleanup-pr-body-html.js | 2 +-
DW-Programming/color-batch-cleaner.py | 2 +-
DW-Programming/color-collection-cleaner.js | 2 +-
DW-Programming/crop-grs-fix-top-logo.js | 2 +-
DW-Programming/crop-grs-images.js | 2 +-
DW-Programming/dwc-bulk-audit.js | 2 +-
DW-Programming/dwc-legacy-audit.js | 2 +-
DW-Programming/dwjs-phase2-scrape-specs.js | 2 +-
DW-Programming/fix-blue-collection.js | 2 +-
DW-Programming/fix-dwkk-zero-price-variants.js | 2 +-
DW-Programming/fix-empty-body-html.js | 2 +-
DW-Programming/fix-malibu-body-html-retry.js | 2 +-
DW-Programming/fix-malibu-body-html.js | 2 +-
DW-Programming/fix-phillipe-romano-vendors.js | 2 +-
DW-Programming/fix-product-type-by-width.js | 2 +-
DW-Programming/fix-product-type-tags.js | 2 +-
DW-Programming/fix-sandberg-body.js | 2 +-
DW-Programming/fix-single-variant-pricing.js | 2 +-
DW-Programming/fix-thibaut-anna-french.js | 2 +-
DW-Programming/fix-thibaut-titles.js | 2 +-
DW-Programming/generate-room-settings.py | 3 ++-
DW-Programming/gls-gemini-retry.js | 2 +-
DW-Programming/gls-product-cleanup.js | 2 +-
DW-Programming/gls-product-processor.js | 2 +-
DW-Programming/gls-product-updater.js | 2 +-
DW-Programming/gls-retry-failed.js | 2 +-
DW-Programming/hollywood-hex-extract.js | 2 +-
DW-Programming/interior-design-ai-tagger.js | 2 +-
DW-Programming/interior-design-tagger.js | 2 +-
DW-Programming/launch-versace-vi.js | 2 +-
DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js | 2 +-
.../maya-romanoff-updater/maya-romanoff-updater.js | 2 +-
DW-Programming/maya-romanoff-updater/server.js | 2 +-
DW-Programming/migrate-dwkk-to-dwpr.js | 2 +-
.../nextjs-liquid-app/app/api/bulk-import/route.ts | 2 +-
.../nextjs-liquid-app/app/api/product-action/route.ts | 2 +-
.../app/api/products/[id]/fetch-mfr/route.ts | 2 +-
.../app/api/products/[id]/status/route.ts | 2 +-
.../nextjs-liquid-app/app/api/recently-updated/route.ts | 2 +-
.../nextjs-liquid-app/app/api/update-product/route.ts | 2 +-
.../nextjs-liquid-app/app/api/vendor-items/route.ts | 2 +-
DW-Programming/nextjs-liquid-app/backfill-metafields.js | 2 +-
DW-Programming/phillipe-romano-cleanup.js | 2 +-
DW-Programming/phillipe-romano-vendor-cleanup.js | 2 +-
DW-Programming/phillipe-romano-vendor-fix.js | 2 +-
DW-Programming/push-china-seas-metafields.js | 2 +-
DW-Programming/push-color-hex-metafields.js | 2 +-
DW-Programming/push-maya-romanoff-to-shopify.js | 2 +-
DW-Programming/push-versa-specs-to-shopify.js | 2 +-
DW-Programming/push-versace-vi.js | 2 +-
DW-Programming/remove-damask-from-florals.js | 2 +-
DW-Programming/restore-blue-tags.js | 2 +-
.../__pycache__/batch-room-gen-v2.cpython-314.pyc | Bin 0 -> 22884 bytes
.../__pycache__/batch-room-generator.cpython-314.pyc | Bin 0 -> 22808 bytes
.../__pycache__/batch-room-settings.cpython-314.pyc | Bin 0 -> 21052 bytes
.../generate-phillipe-romano-rooms.cpython-314.pyc | Bin 0 -> 18437 bytes
.../generate-rooms-DWTT-80352.cpython-314.pyc | Bin 0 -> 8503 bytes
DW-Programming/room-setting-app/batch-room-gen-v2.py | 2 +-
DW-Programming/room-setting-app/batch-room-generator.py | 2 +-
DW-Programming/room-setting-app/batch-room-settings.py | 2 +-
.../room-setting-app/generate-phillipe-romano-rooms.py | 2 +-
.../room-setting-app/generate-rooms-DWTT-80352.py | 3 ++-
.../__pycache__/batch-room-generator.cpython-314.pyc | Bin 0 -> 24695 bytes
.../room-setting-app/scripts/batch-room-generator.js | 2 +-
.../room-setting-app/scripts/batch-room-generator.py | 2 +-
DW-Programming/scrape-versace-images.js | 2 +-
DW-Programming/update-dwjs-specs-final.js | 2 +-
DW-Programming/update-dwjs-specs-phase2.js | 2 +-
DW-Programming/update-dwjs-specs-phase3.js | 2 +-
DW-Programming/update-dwjs-specs-phase4.js | 2 +-
DW-Programming/update-dwjs-specs.js | 2 +-
.../thibaut-crawler/sync-shopify-to-catalog.js | 2 +-
.../thibaut-crawler/sync-thibaut-skus.js | 2 +-
DW-Programming/verify-versace.js | 2 +-
DW-Programming/versace-image-scraper.js | 2 +-
DW-Programming/versace-image-uploader.js | 2 +-
DW-Websites/shop-by-color/fetch-colors.js | 2 +-
.../__pycache__/batch-room-generator.cpython-314.pyc | Bin 0 -> 19815 bytes
scripts/__pycache__/batch-room-settings.cpython-314.pyc | Bin 0 -> 17534 bytes
scripts/analyze-fabric-wallcovering.js | 2 +-
scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24 | 2 +-
scripts/batch-room-generator.py | 2 +-
scripts/batch-room-settings.py | 2 +-
scripts/brand-mckenzie-ai-analysis.ts | 2 +-
scripts/brand-mckenzie-full-scrape.ts | 2 +-
scripts/brand-mckenzie-full-update.ts | 2 +-
scripts/brand-mckenzie-recrawl.ts | 2 +-
scripts/build-collections-directory.js | 2 +-
scripts/collection-consolidation-phase2.js | 2 +-
scripts/collection-consolidation-phase3.js | 2 +-
scripts/collection-description-writer.js | 2 +-
scripts/collections-cleanup.js | 2 +-
scripts/collections-cover-images.js | 2 +-
scripts/collections-phase5-audit.js | 2 +-
scripts/collections-phase5-publish.js | 2 +-
scripts/dedupe-spin-gifs.js | 2 +-
scripts/dwkk-zero-price-cleanup.js | 2 +-
scripts/dwkk-zero-price-fix.js | 2 +-
scripts/dwtt-body-to-metafields.js | 2 +-
scripts/fix-brand-mckenzie-leadtime.ts | 2 +-
scripts/fix-collection-trailing-artifacts.js | 2 +-
scripts/fix-dwkk-zero-price.js | 2 +-
scripts/fix-fabric-wallcovering-titles.js | 2 +-
scripts/fix-fabric-wallcovering-v2.js | 2 +-
scripts/fix-fabric-wallcovering-v3.js | 2 +-
scripts/fix-fabrics-plural-graphql.sh | 2 +-
scripts/fix-fabrics-plural-titles-v2.js | 2 +-
scripts/fix-fabrics-plural-titles-v3.js | 2 +-
scripts/fix-fabrics-plural-titles.js | 2 +-
scripts/fix-fabrics-plural-titles.sh | 2 +-
scripts/grs-image-crop.js | 2 +-
scripts/interior-design-tags.js | 2 +-
scripts/kill-wallpaper-word.js | 2 +-
scripts/mfr-sku-bulk-update.js | 2 +-
scripts/populate-dwtt-mfr-sku-active.js | 2 +-
scripts/populate-dwtt-mfr-sku-from-catalog.js | 2 +-
scripts/populate-dwtt-mfr-sku.js | 2 +-
scripts/populate-mfr-sku-metafield.js | 2 +-
scripts/rw-upload-room-settings.js | 2 +-
scripts/shopify-swatch-spin.js | 2 +-
scripts/standardize-product-types-bulk.js | 2 +-
scripts/standardize-product-types.js | 2 +-
scripts/supplier-mfr-bulk-push.js | 2 +-
scripts/surface-stick-backfill.js | 2 +-
scripts/sync-shopify-to-postgres.js | 2 +-
scripts/update-jim-dultz-shopify.js | 2 +-
shopify/scripts/add-missing-samples-v2.js | 2 +-
shopify/scripts/arte-dashboard/bulk-title-updater.js | 2 +-
shopify/scripts/arte-dashboard/fetch-missing-skus.js | 2 +-
shopify/scripts/arte-dashboard/populate-mapping.js | 2 +-
shopify/scripts/arte-dashboard/server.js | 2 +-
shopify/scripts/arte-update-mfr-sku.js | 2 +-
shopify/scripts/audit-novasuede-new.js | 2 +-
shopify/scripts/batch-room-settings.py | 2 +-
.../scripts/batch-room-settings/batch-room-generator.js | 2 +-
shopify/scripts/bespoke-updater/server.js | 2 +-
shopify/scripts/create-missing-sample-variants.js | 2 +-
shopify/scripts/create-novasuede-rosewater.js | 2 +-
.../dedup-phillipe-romano.js.DISABLED-2026-04-24 | 2 +-
shopify/scripts/dwkk-zero-price-cleanup.js | 2 +-
shopify/scripts/dwvs-activate-ready-drafts.js | 2 +-
shopify/scripts/dwvs-import-catalog-only.js | 2 +-
shopify/scripts/dwvs-original-series-apply.js | 2 +-
shopify/scripts/dwvs-reconcile-mfr.js | 2 +-
shopify/scripts/dwvs-versace-csv-export.js | 2 +-
shopify/scripts/dwwd-roll-length/fix-orphans.js | 2 +-
shopify/scripts/dwwd-roll-length/run.js | 2 +-
shopify/scripts/fix-dwkk-zero-price-variants.js | 2 +-
shopify/scripts/fix-dwkk-zero-price.js | 2 +-
shopify/scripts/fix-missing-sample-variants.js | 2 +-
shopify/scripts/fix-missing-samples.js | 2 +-
shopify/scripts/fix-sample-inventory-only.js | 2 +-
shopify/scripts/fix-sample-inventory.js | 2 +-
shopify/scripts/fix-samples-graphql.js | 2 +-
shopify/scripts/fix-zero-inventory-samples.js | 2 +-
shopify/scripts/gemini-catalog-tagger.js | 2 +-
shopify/scripts/gemini-tag-engine/index.js | 2 +-
shopify/scripts/hollywood-tag-enrichment.js | 2 +-
shopify/scripts/interior-design-tagger.js | 2 +-
shopify/scripts/inventory-set-2026.js | 2 +-
shopify/scripts/koroseal-batch-cron.js | 2 +-
shopify/scripts/koroseal-enhanced-update.js | 2 +-
shopify/scripts/koroseal-mfr-from-handles.js | 2 +-
shopify/scripts/koroseal-mfr-populator.js | 2 +-
shopify/scripts/kravet-full-monty-single.js | 2 +-
shopify/scripts/la-walls-image-sync.js | 2 +-
shopify/scripts/migrate-barcode-to-mfr-sku.py | 3 ++-
shopify/scripts/migrate-mckenzie-global-to-custom.js | 2 +-
.../nina-campbell-full-monty-fix.js.DISABLED-2026-04-24 | 2 +-
shopify/scripts/paul-montgomery-image-sync.js | 2 +-
shopify/scripts/push-fire-rating-metafields.js | 2 +-
shopify/scripts/push-pattern-repeat-metafields.js | 2 +-
shopify/scripts/resume-sample-variant-creation.js | 2 +-
shopify/scripts/revert-dwcy-pass2.js | 2 +-
shopify/scripts/revert-dwcy-to-dwc.js | 2 +-
shopify/scripts/romo-lookup.js | 2 +-
shopify/scripts/sample-only-price-match.js | 2 +-
shopify/scripts/sample-only-status-audit.js | 2 +-
shopify/scripts/sandberg-add-bolt-fix-legacy.js | 2 +-
shopify/scripts/sandberg-add-bolt-variants.js | 2 +-
shopify/scripts/sandberg-add-mural-variants.js | 2 +-
...sandberg-archive-discontinued.js.DISABLED-2026-04-24 | 2 +-
shopify/scripts/sandberg-william-morris-weight-4lb.js | 2 +-
shopify/scripts/sandberg-wm-add-wallcovering-title.js | 2 +-
shopify/scripts/sandberg-wm-price-audit.js | 2 +-
shopify/scripts/sandberg-wm-pull-full.js | 2 +-
shopify/scripts/scan-missing-samples.js | 2 +-
shopify/scripts/sync-shopify-products.js | 2 +-
shopify/scripts/update-brand-mckenzie-vendor.js | 2 +-
shopify/scripts/update-mckenzie-delivery.js | 2 +-
shopify/scripts/update-rop-mfr.py | 3 ++-
shopify/scripts/wm-add-bolt-variants.js | 2 +-
.../wm-archive-empty-title.js.DISABLED-2026-04-24 | 2 +-
shopify/scripts/zoffany-ai-enrich-push.js | 2 +-
shopify/scripts/zoffany-full-monty-20.js | 2 +-
218 files changed, 212 insertions(+), 208 deletions(-)
diff --git a/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts b/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
index baac08b2..b7e5016c 100644
--- a/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
+++ b/DW-Agents/dw-agents/agent-legal-team/legal-agent.ts
@@ -151,7 +151,7 @@ async function reportToCFO(violations: any[]) {
}
const SHOPIFY_STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = process.env.SHOPIFY_ADMIN_API_VERSION || '2024-07';
const anthropic = new Anthropic({
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js b/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
index 4ddefc66..09865f8f 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
+++ b/DW-Programming/ImportNewSkufromURL/scripts/rwltd-gemini-cron.js
@@ -11,7 +11,7 @@ const https = require('https');
const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
const GEMINI_KEY = '${GOOGLE_API_KEY}';
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
diff --git a/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js b/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js
index 118d6c6a..d2f7368f 100644
--- a/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js
+++ b/DW-Programming/PhillipeRomanoTagger/bulk-update-pr.js
@@ -14,7 +14,7 @@ const https = require('https');
// --- Configuration ---
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js b/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js
index 1741f4af..972bea9e 100644
--- a/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js
+++ b/DW-Programming/PhillipeRomanoTagger/consolidate-pr-vendors.js
@@ -16,7 +16,7 @@ const https = require('https');
// --- Configuration ---
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js b/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js
index 0b19cf8b..40e3bf3e 100644
--- a/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js
+++ b/DW-Programming/PhillipeRomanoTagger/fix-pr-titles.js
@@ -10,7 +10,7 @@
const https = require('https');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
function shopifyGraphQL(query, variables = {}) {
diff --git a/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts b/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
index f2666d62..bccc7150 100644
--- a/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
+++ b/DW-Programming/ShopifyCalendarNext/scripts/activate-first-two.ts
@@ -1,7 +1,7 @@
import { Pool } from 'pg';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const pool = new Pool({
connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified'
diff --git a/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts b/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
index f3798e2e..bcefaada 100644
--- a/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
+++ b/DW-Programming/ShopifyCalendarNext/src/app/api/analyze-product/route.ts
@@ -10,7 +10,7 @@ const pool = new Pool({
});
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
// Fetch product from Shopify
diff --git a/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts b/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts
index 6e55d769..89a6f89e 100644
--- a/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts
+++ b/DW-Programming/ShopifyCalendarNext/src/lib/shopify.ts
@@ -1,5 +1,5 @@
const SHOPIFY_DOMAIN = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
export async function shopifyGraphQL(query: string, variables: Record<string, any> = {}) {
const response = await fetch(`https://${SHOPIFY_DOMAIN}/admin/api/2024-01/graphql.json`, {
diff --git a/DW-Programming/__pycache__/color-batch-cleaner.cpython-314.pyc b/DW-Programming/__pycache__/color-batch-cleaner.cpython-314.pyc
new file mode 100644
index 00000000..9a20ef37
Binary files /dev/null and b/DW-Programming/__pycache__/color-batch-cleaner.cpython-314.pyc differ
diff --git a/DW-Programming/__pycache__/generate-room-settings.cpython-314.pyc b/DW-Programming/__pycache__/generate-room-settings.cpython-314.pyc
new file mode 100644
index 00000000..bb4eb73d
Binary files /dev/null and b/DW-Programming/__pycache__/generate-room-settings.cpython-314.pyc differ
diff --git a/DW-Programming/activate-versace-drafts.js b/DW-Programming/activate-versace-drafts.js
index 317d9981..0600c42c 100644
--- a/DW-Programming/activate-versace-drafts.js
+++ b/DW-Programming/activate-versace-drafts.js
@@ -8,7 +8,7 @@
*/
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_KEY = '${GOOGLE_API_KEY}';
const GEMINI_MODEL = 'gemini-2.0-flash';
const SILAS_URL = 'http://127.0.0.1:9674/api/validate-activation';
diff --git a/DW-Programming/activate-versace-vi.js b/DW-Programming/activate-versace-vi.js
index dbd0d969..a82876aa 100644
--- a/DW-Programming/activate-versace-vi.js
+++ b/DW-Programming/activate-versace-vi.js
@@ -16,7 +16,7 @@ const { Client } = require('pg');
// ── Config ──────────────────────────────────────────────────────────────
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_MODEL = 'gemini-2.0-flash';
const SILAS_URL = 'http://127.0.0.1:9674/api/validate-activation';
diff --git a/DW-Programming/anna-french-room-settings.js b/DW-Programming/anna-french-room-settings.js
index cada4bfa..6cbd8a77 100644
--- a/DW-Programming/anna-french-room-settings.js
+++ b/DW-Programming/anna-french-room-settings.js
@@ -20,7 +20,7 @@ const path = require('path');
const ROOM_API_BASE = 'http://45.61.58.125:3075';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/anna-french-shopify-push.js b/DW-Programming/anna-french-shopify-push.js
index 057cbcc8..8433b70f 100644
--- a/DW-Programming/anna-french-shopify-push.js
+++ b/DW-Programming/anna-french-shopify-push.js
@@ -18,7 +18,7 @@ const { Pool } = require('pg');
const https = require('https');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/archive-hollywood-discontinued.js b/DW-Programming/archive-hollywood-discontinued.js
index fc33fdc8..88336fe7 100644
--- a/DW-Programming/archive-hollywood-discontinued.js
+++ b/DW-Programming/archive-hollywood-discontinued.js
@@ -8,7 +8,7 @@
const fs = require('fs');
const https = require('https');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/archive-thibaut-discontinued.js b/DW-Programming/archive-thibaut-discontinued.js
index 7a4399c2..1b968ca6 100644
--- a/DW-Programming/archive-thibaut-discontinued.js
+++ b/DW-Programming/archive-thibaut-discontinued.js
@@ -12,7 +12,7 @@ const https = require('https');
const { Client } = require('pg');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const PG_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
diff --git a/DW-Programming/arte-image-backfill.js b/DW-Programming/arte-image-backfill.js
index d5542b61..e44e6249 100644
--- a/DW-Programming/arte-image-backfill.js
+++ b/DW-Programming/arte-image-backfill.js
@@ -5,7 +5,7 @@
const https = require('https');
const { Client } = require('pg');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const BATCH_SIZE = 25; // 25 products per GraphQL query (keeps cost manageable)
const DELAY_MS = 600; // Rate limit safety
diff --git a/DW-Programming/arte-width-from-shopify.js b/DW-Programming/arte-width-from-shopify.js
index eb634d60..e1518ac8 100644
--- a/DW-Programming/arte-width-from-shopify.js
+++ b/DW-Programming/arte-width-from-shopify.js
@@ -10,7 +10,7 @@ const https = require('https');
const { Client } = require('pg');
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
diff --git a/DW-Programming/backfill-schumacher-images.js b/DW-Programming/backfill-schumacher-images.js
index 16bdae5f..71fa24f2 100644
--- a/DW-Programming/backfill-schumacher-images.js
+++ b/DW-Programming/backfill-schumacher-images.js
@@ -16,7 +16,7 @@ const pool = new Pool({
});
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
function shopifyGraphQL(query) {
return new Promise((resolve, reject) => {
diff --git a/DW-Programming/china-seas-design-tagger.js b/DW-Programming/china-seas-design-tagger.js
index c97212e9..f42dbed9 100644
--- a/DW-Programming/china-seas-design-tagger.js
+++ b/DW-Programming/china-seas-design-tagger.js
@@ -12,7 +12,7 @@ const { Pool } = require('pg');
// --- Config ---
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
const BATCH_SIZE = 100;
diff --git a/DW-Programming/cleanup-all-body-html.js b/DW-Programming/cleanup-all-body-html.js
index e845aadf..ee58d2e4 100644
--- a/DW-Programming/cleanup-all-body-html.js
+++ b/DW-Programming/cleanup-all-body-html.js
@@ -12,7 +12,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const DRY_RUN = process.argv.includes('--dry-run');
const LIMIT = (() => { const i = process.argv.indexOf('--limit'); return i >= 0 ? parseInt(process.argv[i + 1]) : 500; })();
diff --git a/DW-Programming/cleanup-body-html-all-vendors.js b/DW-Programming/cleanup-body-html-all-vendors.js
index cf5e9642..23c0cd8e 100644
--- a/DW-Programming/cleanup-body-html-all-vendors.js
+++ b/DW-Programming/cleanup-body-html-all-vendors.js
@@ -12,7 +12,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/DW-Programming/cleanup-pr-body-html-bulk.js b/DW-Programming/cleanup-pr-body-html-bulk.js
index 0b0b62bc..adc54a33 100644
--- a/DW-Programming/cleanup-pr-body-html-bulk.js
+++ b/DW-Programming/cleanup-pr-body-html-bulk.js
@@ -11,7 +11,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const VENDOR = 'Phillipe Romano';
diff --git a/DW-Programming/cleanup-pr-body-html.js b/DW-Programming/cleanup-pr-body-html.js
index 684bf470..101ee9c4 100644
--- a/DW-Programming/cleanup-pr-body-html.js
+++ b/DW-Programming/cleanup-pr-body-html.js
@@ -10,7 +10,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const VENDOR = 'Phillipe Romano';
const MAX_RETRIES = 5;
diff --git a/DW-Programming/color-batch-cleaner.py b/DW-Programming/color-batch-cleaner.py
index e184e9b1..60ecb4fd 100644
--- a/DW-Programming/color-batch-cleaner.py
+++ b/DW-Programming/color-batch-cleaner.py
@@ -24,7 +24,7 @@ from concurrent.futures import ThreadPoolExecutor, as_completed
# --- Config ---
GEMINI_KEY = os.environ.get('GEMINI_API_KEY', '')
SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com'
-SHOPIFY_TOKEN = '***REMOVED***'
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
API_VERSION = '2024-01'
SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}'
diff --git a/DW-Programming/color-collection-cleaner.js b/DW-Programming/color-collection-cleaner.js
index f67e96f5..e6b3a942 100644
--- a/DW-Programming/color-collection-cleaner.js
+++ b/DW-Programming/color-collection-cleaner.js
@@ -10,7 +10,7 @@
const https = require('https');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const GEMINI_KEY = '${GOOGLE_API_KEY}'; // billed key - free tier quota exceeded
diff --git a/DW-Programming/crop-grs-fix-top-logo.js b/DW-Programming/crop-grs-fix-top-logo.js
index 183dbc59..9e22709d 100644
--- a/DW-Programming/crop-grs-fix-top-logo.js
+++ b/DW-Programming/crop-grs-fix-top-logo.js
@@ -15,7 +15,7 @@ const path = require('path');
const { execFileSync } = require('child_process');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const PROGRESS_LOG = '/tmp/grs-fix-top-logo.log';
const WORK_DIR = '/tmp/grs-fix-work';
diff --git a/DW-Programming/crop-grs-images.js b/DW-Programming/crop-grs-images.js
index 88017a59..db53d6d4 100644
--- a/DW-Programming/crop-grs-images.js
+++ b/DW-Programming/crop-grs-images.js
@@ -14,7 +14,7 @@ const path = require('path');
const { execFileSync } = require('child_process');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const PROGRESS_LOG = '/tmp/grs-crop-progress.log';
const WORK_DIR = '/tmp/grs-crop-work';
diff --git a/DW-Programming/dwc-bulk-audit.js b/DW-Programming/dwc-bulk-audit.js
index 77c0e138..8aad59af 100644
--- a/DW-Programming/dwc-bulk-audit.js
+++ b/DW-Programming/dwc-bulk-audit.js
@@ -9,7 +9,7 @@ const { Client } = require('pg');
const fs = require('fs');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
function graphql(query) {
diff --git a/DW-Programming/dwc-legacy-audit.js b/DW-Programming/dwc-legacy-audit.js
index 79baa792..4f0d709a 100644
--- a/DW-Programming/dwc-legacy-audit.js
+++ b/DW-Programming/dwc-legacy-audit.js
@@ -9,7 +9,7 @@ const https = require('https');
const { Client } = require('pg');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
function graphql(query) {
diff --git a/DW-Programming/dwjs-phase2-scrape-specs.js b/DW-Programming/dwjs-phase2-scrape-specs.js
index a57a04a5..95b76074 100644
--- a/DW-Programming/dwjs-phase2-scrape-specs.js
+++ b/DW-Programming/dwjs-phase2-scrape-specs.js
@@ -13,7 +13,7 @@ const https = require('https');
const { Client } = require('pg');
const fs = require('fs');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const LOG_FILE = '/tmp/dwjs-phase2-scrape.log';
diff --git a/DW-Programming/fix-blue-collection.js b/DW-Programming/fix-blue-collection.js
index 354b3a4a..c3123c7b 100644
--- a/DW-Programming/fix-blue-collection.js
+++ b/DW-Programming/fix-blue-collection.js
@@ -8,7 +8,7 @@
const https = require('https');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const GEMINI_KEY = '${GOOGLE_API_KEY}';
const COLLECTION_ID = 95278104641;
diff --git a/DW-Programming/fix-dwkk-zero-price-variants.js b/DW-Programming/fix-dwkk-zero-price-variants.js
index b4d142a7..da1e5771 100644
--- a/DW-Programming/fix-dwkk-zero-price-variants.js
+++ b/DW-Programming/fix-dwkk-zero-price-variants.js
@@ -8,7 +8,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const BASE = `https://${SHOP}/admin/api/${API_VERSION}`;
const DELAY_MS = 600;
diff --git a/DW-Programming/fix-empty-body-html.js b/DW-Programming/fix-empty-body-html.js
index 4c847d99..42aaafe2 100644
--- a/DW-Programming/fix-empty-body-html.js
+++ b/DW-Programming/fix-empty-body-html.js
@@ -20,7 +20,7 @@ const { Client } = require('pg');
// ─── Config ──────────────────────────────────────────────────────────────────
const SHOPIFY = {
shop: 'designer-laboratory-sandbox.myshopify.com',
- token: '***REMOVED***',
+ token: process.env.SHOPIFY_ADMIN_TOKEN,
apiVersion: '2024-10'
};
diff --git a/DW-Programming/fix-malibu-body-html-retry.js b/DW-Programming/fix-malibu-body-html-retry.js
index 5ba98e0e..523c2319 100644
--- a/DW-Programming/fix-malibu-body-html-retry.js
+++ b/DW-Programming/fix-malibu-body-html-retry.js
@@ -5,7 +5,7 @@
*/
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const RATE_LIMIT_MS = 700;
diff --git a/DW-Programming/fix-malibu-body-html.js b/DW-Programming/fix-malibu-body-html.js
index cd41a9d9..0bf7e86f 100644
--- a/DW-Programming/fix-malibu-body-html.js
+++ b/DW-Programming/fix-malibu-body-html.js
@@ -12,7 +12,7 @@
*/
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const RATE_LIMIT_MS = 520;
diff --git a/DW-Programming/fix-phillipe-romano-vendors.js b/DW-Programming/fix-phillipe-romano-vendors.js
index d235da9c..a81ec231 100644
--- a/DW-Programming/fix-phillipe-romano-vendors.js
+++ b/DW-Programming/fix-phillipe-romano-vendors.js
@@ -12,7 +12,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GQL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
const CANONICAL_VENDOR = 'Phillipe Romano';
diff --git a/DW-Programming/fix-product-type-by-width.js b/DW-Programming/fix-product-type-by-width.js
index 139636bb..6600ccda 100644
--- a/DW-Programming/fix-product-type-by-width.js
+++ b/DW-Programming/fix-product-type-by-width.js
@@ -22,7 +22,7 @@ const { Client } = require('pg');
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const BATCH_SIZE = 25;
const DELAY_MS = 500;
diff --git a/DW-Programming/fix-product-type-tags.js b/DW-Programming/fix-product-type-tags.js
index 61b8b8e7..8f33f555 100644
--- a/DW-Programming/fix-product-type-tags.js
+++ b/DW-Programming/fix-product-type-tags.js
@@ -10,7 +10,7 @@ const https = require('https');
const { Client } = require('pg');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const BATCH_SIZE = 5; // Smaller batches since we need to read tags first
const DELAY_MS = 600;
diff --git a/DW-Programming/fix-sandberg-body.js b/DW-Programming/fix-sandberg-body.js
index 85ec40cb..8ed84ade 100644
--- a/DW-Programming/fix-sandberg-body.js
+++ b/DW-Programming/fix-sandberg-body.js
@@ -8,7 +8,7 @@ const https = require('https');
const { Pool } = require('pg');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const pool = new Pool({
diff --git a/DW-Programming/fix-single-variant-pricing.js b/DW-Programming/fix-single-variant-pricing.js
index db3a92a1..b18fa0ee 100644
--- a/DW-Programming/fix-single-variant-pricing.js
+++ b/DW-Programming/fix-single-variant-pricing.js
@@ -11,7 +11,7 @@ const https = require('https');
const { Client } = require('pg');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
// Rate limiting
diff --git a/DW-Programming/fix-thibaut-anna-french.js b/DW-Programming/fix-thibaut-anna-french.js
index 218e2873..04a7ba10 100644
--- a/DW-Programming/fix-thibaut-anna-french.js
+++ b/DW-Programming/fix-thibaut-anna-french.js
@@ -13,7 +13,7 @@ const https = require('https');
// ─── Config ────────────────────────────────────────────────────────────────
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const RATE_LIMIT_MS = 520;
diff --git a/DW-Programming/fix-thibaut-titles.js b/DW-Programming/fix-thibaut-titles.js
index 0a0a6ded..e9954e1c 100644
--- a/DW-Programming/fix-thibaut-titles.js
+++ b/DW-Programming/fix-thibaut-titles.js
@@ -11,7 +11,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VER = '2024-10';
const DELAY = 650;
const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/DW-Programming/generate-room-settings.py b/DW-Programming/generate-room-settings.py
index cdf13555..43e73ddd 100644
--- a/DW-Programming/generate-room-settings.py
+++ b/DW-Programming/generate-room-settings.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+import os
"""
Generate room settings for 4 launched products via Room Setting App API.
Downloads product images, sends to API, uploads result to Shopify.
@@ -8,7 +9,7 @@ import requests, json, base64, sys, time
ROOM_APP = "http://localhost:3075"
SHOP = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
AUTH_TOKEN = "eyJhbGciOiJIUzI1NiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJ0aW1lc3RhbXAiOjE3NzM3MDg1NDU5MzksInVzZXIiOiJ1c2VyLWFkbWluIiwiaWF0IjoxNzczNzA4NTQ1LCJleHAiOjE3NzM3OTQ5NDV9.FpSj6jnZT_4ZNAXpx8xYpEP9JdA6MGO0MWDJUgVzCAQ"
products = [
diff --git a/DW-Programming/gls-gemini-retry.js b/DW-Programming/gls-gemini-retry.js
index 6614728a..b9791b9e 100644
--- a/DW-Programming/gls-gemini-retry.js
+++ b/DW-Programming/gls-gemini-retry.js
@@ -8,7 +8,7 @@ const https = require('https');
const sharp = require('sharp');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
diff --git a/DW-Programming/gls-product-cleanup.js b/DW-Programming/gls-product-cleanup.js
index afbca601..d11f6a7e 100644
--- a/DW-Programming/gls-product-cleanup.js
+++ b/DW-Programming/gls-product-cleanup.js
@@ -15,7 +15,7 @@ const sharp = require('sharp');
// ─── Config ───────────────────────────────────────────────────────────────────
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
const API_VERSION = '2024-01';
diff --git a/DW-Programming/gls-product-processor.js b/DW-Programming/gls-product-processor.js
index a6ec40a6..0fe44625 100644
--- a/DW-Programming/gls-product-processor.js
+++ b/DW-Programming/gls-product-processor.js
@@ -14,7 +14,7 @@ const path = require('path');
// Config
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/gls-product-updater.js b/DW-Programming/gls-product-updater.js
index 02cd271d..20c90923 100644
--- a/DW-Programming/gls-product-updater.js
+++ b/DW-Programming/gls-product-updater.js
@@ -15,7 +15,7 @@ const { execFileSync } = require('child_process');
// ── Config ───────────────────────────────────────────────────────────
const SHOPIFY_API = 'https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/gls-retry-failed.js b/DW-Programming/gls-retry-failed.js
index fc0ff523..4893e83f 100644
--- a/DW-Programming/gls-retry-failed.js
+++ b/DW-Programming/gls-retry-failed.js
@@ -8,7 +8,7 @@
const sharp = require('sharp');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
diff --git a/DW-Programming/hollywood-hex-extract.js b/DW-Programming/hollywood-hex-extract.js
index 44a95208..0900387c 100644
--- a/DW-Programming/hollywood-hex-extract.js
+++ b/DW-Programming/hollywood-hex-extract.js
@@ -31,7 +31,7 @@ async function getProductImage(productId) {
path: '/admin/api/2024-01/graphql.json',
method: 'POST',
headers: {
- 'X-Shopify-Access-Token': '***REMOVED***',
+ 'X-Shopify-Access-Token': process.env.SHOPIFY_ADMIN_TOKEN,
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(query)
}
diff --git a/DW-Programming/interior-design-ai-tagger.js b/DW-Programming/interior-design-ai-tagger.js
index c436a768..99355fcc 100644
--- a/DW-Programming/interior-design-ai-tagger.js
+++ b/DW-Programming/interior-design-ai-tagger.js
@@ -27,7 +27,7 @@ const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_API_VERSION = '2024-10';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/interior-design-tagger.js b/DW-Programming/interior-design-tagger.js
index a5dfadb9..896ccb1d 100644
--- a/DW-Programming/interior-design-tagger.js
+++ b/DW-Programming/interior-design-tagger.js
@@ -28,7 +28,7 @@ const path = require('path');
// ─── Config ──────────────────────────────────────────────────────────────────
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
const API_VERSION = '2024-10';
diff --git a/DW-Programming/launch-versace-vi.js b/DW-Programming/launch-versace-vi.js
index 684f0118..8457740c 100644
--- a/DW-Programming/launch-versace-vi.js
+++ b/DW-Programming/launch-versace-vi.js
@@ -13,7 +13,7 @@ const http = require('http');
const { Client } = require('pg');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SILAS_URL = 'http://127.0.0.1:9674/api/validate-push';
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js b/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js
index 7810fa8e..f035a98f 100644
--- a/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js
+++ b/DW-Programming/maya-romanoff-updater/fix-dwjs-titles.js
@@ -1,7 +1,7 @@
const fetch = require('node-fetch');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const COLOR_WORDS = ['Light', 'Dark', 'Beige', 'Brown', 'Gray', 'Grey', 'Blue', 'Green', 'Red',
'Yellow', 'Orange', 'Purple', 'Pink', 'White', 'Black', 'Cream', 'Ivory', 'Sand', 'Tan',
diff --git a/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js b/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
index 5a26d433..3aa03c72 100644
--- a/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
+++ b/DW-Programming/maya-romanoff-updater/maya-romanoff-updater.js
@@ -20,7 +20,7 @@ const { Pool } = require('pg');
// Configuration
const CONFIG = {
SHOPIFY_STORE: 'designer-laboratory-sandbox.myshopify.com',
- SHOPIFY_TOKEN: '***REMOVED***',
+ SHOPIFY_TOKEN: process.env.SHOPIFY_ADMIN_TOKEN,
GEMINI_API_KEY: '${GOOGLE_API_KEY}',
SPREADSHEET_CSV: 'https://docs.google.com/spreadsheets/d/1hPTMFkX762hftpEAxWTvEl9rNzhd4mBITnpkYuDgMLg/gviz/tq?tqx=out:csv',
MAYA_SEARCH_URL: 'https://www.mayaromanoff.com/search?q=',
diff --git a/DW-Programming/maya-romanoff-updater/server.js b/DW-Programming/maya-romanoff-updater/server.js
index c5a5db43..ee29633a 100644
--- a/DW-Programming/maya-romanoff-updater/server.js
+++ b/DW-Programming/maya-romanoff-updater/server.js
@@ -25,7 +25,7 @@ app.use(express.json());
// Configuration
const CONFIG = {
SHOPIFY_STORE: 'designer-laboratory-sandbox.myshopify.com',
- SHOPIFY_TOKEN: '***REMOVED***',
+ SHOPIFY_TOKEN: process.env.SHOPIFY_ADMIN_TOKEN,
API_VERSION: '2024-01',
GEMINI_API_KEY: '${GOOGLE_API_KEY}',
MAYA_BASE_URL: 'https://www.mayaromanoff.com',
diff --git a/DW-Programming/migrate-dwkk-to-dwpr.js b/DW-Programming/migrate-dwkk-to-dwpr.js
index fd69d2b7..011bf440 100644
--- a/DW-Programming/migrate-dwkk-to-dwpr.js
+++ b/DW-Programming/migrate-dwkk-to-dwpr.js
@@ -20,7 +20,7 @@ const https = require('https');
// ─── Config ──────────────────────────────────────────────────────────────────
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts b/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts
index 41316d76..fc76748d 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/bulk-import/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { dbQuery } from '@/lib/db';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}'; // Billed Tier 1 key
// All 14 sales channels - publish to ALL on product creation
diff --git a/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts b/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts
index 99027f45..bb232e6f 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/product-action/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { dbQuery } from '@/lib/db';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
function checkAuth(req: NextRequest): boolean {
const authHeader = req.headers.get('authorization');
diff --git a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts
index 0c26f60f..2e87e7c3 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/fetch-mfr/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { dbQuery } from '@/lib/db';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
// Vendor table mapping - matches vendor-items route
const VENDOR_TABLES: Record<string, { table: string; name: string; skuColumn: string }> = {
diff --git a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts
index 9e324da9..be0e5ec2 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/products/[id]/status/route.ts
@@ -1,7 +1,7 @@
import { NextRequest, NextResponse } from 'next/server';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
function checkAuth(req: NextRequest): boolean {
const authHeader = req.headers.get('authorization');
diff --git a/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts b/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts
index 59cacab0..c686c76b 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/recently-updated/route.ts
@@ -1,7 +1,7 @@
import { NextRequest, NextResponse } from 'next/server';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/2024-01/graphql.json`;
function checkAuth(req: NextRequest): boolean {
diff --git a/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts b/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts
index f1304531..4c6133ac 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/update-product/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { dbQuery } from '@/lib/db';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
function checkAuth(req: NextRequest): boolean {
const authHeader = req.headers.get('authorization');
diff --git a/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts b/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts
index 34084ff7..a0f73949 100644
--- a/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts
+++ b/DW-Programming/nextjs-liquid-app/app/api/vendor-items/route.ts
@@ -3,7 +3,7 @@ import { dbQuery } from '@/lib/db';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
// Vendor table mapping with DW SKU prefixes
const VENDOR_TABLES: Record<number, { table: string; name: string; prefix: string; shopifyVendor: string }> = {
diff --git a/DW-Programming/nextjs-liquid-app/backfill-metafields.js b/DW-Programming/nextjs-liquid-app/backfill-metafields.js
index 897bea89..575cd0e9 100644
--- a/DW-Programming/nextjs-liquid-app/backfill-metafields.js
+++ b/DW-Programming/nextjs-liquid-app/backfill-metafields.js
@@ -8,7 +8,7 @@ const https = require('https');
const { Pool } = require('pg');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
// Rate limit: 2 req/sec with burst of 40
diff --git a/DW-Programming/phillipe-romano-cleanup.js b/DW-Programming/phillipe-romano-cleanup.js
index ff1c10ea..43cf58ab 100644
--- a/DW-Programming/phillipe-romano-cleanup.js
+++ b/DW-Programming/phillipe-romano-cleanup.js
@@ -5,7 +5,7 @@
*/
const https = require('https');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const CANONICAL = 'Phillipe Romano';
const VENDORS = ['Phillipe Romano Wallpaper', 'Phillipe Romano European Prints', 'Phillipe Romano Fabrics', 'Phillipe Romano Vinyls'];
diff --git a/DW-Programming/phillipe-romano-vendor-cleanup.js b/DW-Programming/phillipe-romano-vendor-cleanup.js
index cc29d460..a01d992c 100644
--- a/DW-Programming/phillipe-romano-vendor-cleanup.js
+++ b/DW-Programming/phillipe-romano-vendor-cleanup.js
@@ -13,7 +13,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const CANONICAL_VENDOR = 'Phillipe Romano';
diff --git a/DW-Programming/phillipe-romano-vendor-fix.js b/DW-Programming/phillipe-romano-vendor-fix.js
index 809bf134..a70a45fb 100644
--- a/DW-Programming/phillipe-romano-vendor-fix.js
+++ b/DW-Programming/phillipe-romano-vendor-fix.js
@@ -22,7 +22,7 @@ const https = require('https');
// ─── Config ──────────────────────────────────────────────────────────
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const CANONICAL_VENDOR = 'Phillipe Romano';
const VARIANT_VENDORS = [
diff --git a/DW-Programming/push-china-seas-metafields.js b/DW-Programming/push-china-seas-metafields.js
index 25889ed2..490abc64 100644
--- a/DW-Programming/push-china-seas-metafields.js
+++ b/DW-Programming/push-china-seas-metafields.js
@@ -3,7 +3,7 @@
const { Client } = require('pg');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-01';
const DELAY_MS = 550; // ~2 req/sec with margin
diff --git a/DW-Programming/push-color-hex-metafields.js b/DW-Programming/push-color-hex-metafields.js
index 2949e5d9..100284e6 100644
--- a/DW-Programming/push-color-hex-metafields.js
+++ b/DW-Programming/push-color-hex-metafields.js
@@ -17,7 +17,7 @@ const fs = require('fs');
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOG_FILE = '/tmp/color-push.log';
const MAX_PER_VENDOR = 200;
diff --git a/DW-Programming/push-maya-romanoff-to-shopify.js b/DW-Programming/push-maya-romanoff-to-shopify.js
index 56274e70..00b90ecc 100644
--- a/DW-Programming/push-maya-romanoff-to-shopify.js
+++ b/DW-Programming/push-maya-romanoff-to-shopify.js
@@ -15,7 +15,7 @@ const fs = require('fs');
const CONFIG = {
SHOPIFY_STORE: 'designer-laboratory-sandbox.myshopify.com',
- SHOPIFY_TOKEN: '***REMOVED***',
+ SHOPIFY_TOKEN: process.env.SHOPIFY_ADMIN_TOKEN,
API_VERSION: '2024-10',
POSTGRES_URL: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified',
SLACK_WEBHOOK: '${SLACK_WEBHOOK_URL}',
diff --git a/DW-Programming/push-versa-specs-to-shopify.js b/DW-Programming/push-versa-specs-to-shopify.js
index 1ede0229..cd369b28 100644
--- a/DW-Programming/push-versa-specs-to-shopify.js
+++ b/DW-Programming/push-versa-specs-to-shopify.js
@@ -9,7 +9,7 @@ const { Client } = require('pg');
const https = require('https');
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const DELAY_MS = 1500;
diff --git a/DW-Programming/push-versace-vi.js b/DW-Programming/push-versace-vi.js
index 25c493fd..94127ffb 100644
--- a/DW-Programming/push-versace-vi.js
+++ b/DW-Programming/push-versace-vi.js
@@ -15,7 +15,7 @@ const { Pool } = require('pg');
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SILAS_URL = 'http://127.0.0.1:9674';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/remove-damask-from-florals.js b/DW-Programming/remove-damask-from-florals.js
index b90014b1..2d3fdda8 100644
--- a/DW-Programming/remove-damask-from-florals.js
+++ b/DW-Programming/remove-damask-from-florals.js
@@ -5,7 +5,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const COLLECTION_ID = '283205599283';
diff --git a/DW-Programming/restore-blue-tags.js b/DW-Programming/restore-blue-tags.js
index b285a502..ae31c357 100644
--- a/DW-Programming/restore-blue-tags.js
+++ b/DW-Programming/restore-blue-tags.js
@@ -11,7 +11,7 @@ const https = require('https');
const fs = require('fs');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
function shopifyGraphQL(query, variables = {}) {
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc
new file mode 100644
index 00000000..f78fb536
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/batch-room-gen-v2.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc
new file mode 100644
index 00000000..35e427d2
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/batch-room-generator.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc
new file mode 100644
index 00000000..cdca20e9
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/batch-room-settings.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc
new file mode 100644
index 00000000..50b29289
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/generate-phillipe-romano-rooms.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/__pycache__/generate-rooms-DWTT-80352.cpython-314.pyc b/DW-Programming/room-setting-app/__pycache__/generate-rooms-DWTT-80352.cpython-314.pyc
new file mode 100644
index 00000000..bc307bb4
Binary files /dev/null and b/DW-Programming/room-setting-app/__pycache__/generate-rooms-DWTT-80352.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/batch-room-gen-v2.py b/DW-Programming/room-setting-app/batch-room-gen-v2.py
index 779bd1a4..33937d91 100644
--- a/DW-Programming/room-setting-app/batch-room-gen-v2.py
+++ b/DW-Programming/room-setting-app/batch-room-gen-v2.py
@@ -31,7 +31,7 @@ import argparse
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
diff --git a/DW-Programming/room-setting-app/batch-room-generator.py b/DW-Programming/room-setting-app/batch-room-generator.py
index 18aa95bb..8315d88d 100644
--- a/DW-Programming/room-setting-app/batch-room-generator.py
+++ b/DW-Programming/room-setting-app/batch-room-generator.py
@@ -25,7 +25,7 @@ import subprocess
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
diff --git a/DW-Programming/room-setting-app/batch-room-settings.py b/DW-Programming/room-setting-app/batch-room-settings.py
index a19b22a4..18a92dd8 100644
--- a/DW-Programming/room-setting-app/batch-room-settings.py
+++ b/DW-Programming/room-setting-app/batch-room-settings.py
@@ -35,7 +35,7 @@ LOCK_FILE = "/tmp/batch-room-settings.lock"
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PROGRESS_FILE = "/tmp/batch-room-settings-progress.json"
diff --git a/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py b/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
index f0c57baa..077fc9a5 100644
--- a/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
+++ b/DW-Programming/room-setting-app/generate-phillipe-romano-rooms.py
@@ -24,7 +24,7 @@ import datetime
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PRODUCTS_JSON = "/tmp/phillipe-romano-rooms-products.json"
diff --git a/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py b/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py
index 243b9064..787198bc 100644
--- a/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py
+++ b/DW-Programming/room-setting-app/generate-rooms-DWTT-80352.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+import os
"""
Generate 6 residential room settings for DWTT-80352 (Artesian Wild Sage | Thibaut)
and upload them to Shopify.
@@ -22,7 +23,7 @@ ROOM_API = "http://127.0.0.1:3075/api/generate-room"
# Shopify API
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
# Room settings
ROOMS = [
diff --git a/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc b/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc
new file mode 100644
index 00000000..651abc17
Binary files /dev/null and b/DW-Programming/room-setting-app/scripts/__pycache__/batch-room-generator.cpython-314.pyc differ
diff --git a/DW-Programming/room-setting-app/scripts/batch-room-generator.js b/DW-Programming/room-setting-app/scripts/batch-room-generator.js
index 11f5b41c..e4af29b8 100644
--- a/DW-Programming/room-setting-app/scripts/batch-room-generator.js
+++ b/DW-Programming/room-setting-app/scripts/batch-room-generator.js
@@ -23,7 +23,7 @@ const path = require('path');
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const ROOM_API = 'http://localhost:3075/api/generate-room';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
// Commercial vendors get hotel_lobby + office rooms
diff --git a/DW-Programming/room-setting-app/scripts/batch-room-generator.py b/DW-Programming/room-setting-app/scripts/batch-room-generator.py
index 949eb486..e44cc4f1 100644
--- a/DW-Programming/room-setting-app/scripts/batch-room-generator.py
+++ b/DW-Programming/room-setting-app/scripts/batch-room-generator.py
@@ -33,7 +33,7 @@ import argparse
ROOM_API = "http://127.0.0.1:3075/api/generate-room"
SHOPIFY_BASE = "https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-01"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
DB_CONN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
PROGRESS_FILE = "/tmp/batch-room-generator-progress.json"
diff --git a/DW-Programming/scrape-versace-images.js b/DW-Programming/scrape-versace-images.js
index c8786ea0..ebd82d62 100644
--- a/DW-Programming/scrape-versace-images.js
+++ b/DW-Programming/scrape-versace-images.js
@@ -19,7 +19,7 @@ const cheerio = require('cheerio');
const PG_CONN = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SILAS_URL = 'http://127.0.0.1:9674/api/validate-activation';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/DW-Programming/update-dwjs-specs-final.js b/DW-Programming/update-dwjs-specs-final.js
index 658d8314..7904b5df 100644
--- a/DW-Programming/update-dwjs-specs-final.js
+++ b/DW-Programming/update-dwjs-specs-final.js
@@ -7,7 +7,7 @@ const https = require('https');
const { Client } = require('pg');
const fs = require('fs');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const LOG_FILE = '/tmp/dwjs-specs-final.log';
diff --git a/DW-Programming/update-dwjs-specs-phase2.js b/DW-Programming/update-dwjs-specs-phase2.js
index de0d68af..01286fff 100644
--- a/DW-Programming/update-dwjs-specs-phase2.js
+++ b/DW-Programming/update-dwjs-specs-phase2.js
@@ -14,7 +14,7 @@ const https = require('https');
const { Client } = require('pg');
const fs = require('fs');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const LOG_FILE = '/tmp/dwjs-specs-phase2.log';
diff --git a/DW-Programming/update-dwjs-specs-phase3.js b/DW-Programming/update-dwjs-specs-phase3.js
index 0fc5a460..cb91f1bb 100644
--- a/DW-Programming/update-dwjs-specs-phase3.js
+++ b/DW-Programming/update-dwjs-specs-phase3.js
@@ -14,7 +14,7 @@ const https = require('https');
const { Client } = require('pg');
const fs = require('fs');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const LOG_FILE = '/tmp/dwjs-specs-phase3.log';
diff --git a/DW-Programming/update-dwjs-specs-phase4.js b/DW-Programming/update-dwjs-specs-phase4.js
index c3842e49..dd4d1411 100644
--- a/DW-Programming/update-dwjs-specs-phase4.js
+++ b/DW-Programming/update-dwjs-specs-phase4.js
@@ -9,7 +9,7 @@ const https = require('https');
const { Client } = require('pg');
const fs = require('fs');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const LOG_FILE = '/tmp/dwjs-specs-phase4.log';
diff --git a/DW-Programming/update-dwjs-specs.js b/DW-Programming/update-dwjs-specs.js
index 37e1dfd4..d93196a7 100644
--- a/DW-Programming/update-dwjs-specs.js
+++ b/DW-Programming/update-dwjs-specs.js
@@ -8,7 +8,7 @@ const https = require('https');
const { Client } = require('pg');
const fs = require('fs');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const API_VERSION = '2024-10';
const LOG_FILE = '/tmp/dwjs-specs-enrich.log';
diff --git a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js
index 94db8458..4b34f7d9 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-shopify-to-catalog.js
@@ -17,7 +17,7 @@ const pool = new Pool({
});
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function fetchAllShopifyThibautProducts() {
console.log('🔍 Fetching all Thibaut products from Shopify...');
diff --git a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
index 6cf53ba2..46834949 100644
--- a/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
+++ b/DW-Programming/vendor-crawlers/thibaut-crawler/sync-thibaut-skus.js
@@ -10,7 +10,7 @@ const pool = new Pool({
});
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function fetchAllThibautProducts() {
console.log('🔍 Fetching all Thibaut products from Shopify...');
diff --git a/DW-Programming/verify-versace.js b/DW-Programming/verify-versace.js
index 23efccac..dc50b7da 100644
--- a/DW-Programming/verify-versace.js
+++ b/DW-Programming/verify-versace.js
@@ -3,7 +3,7 @@ const https = require('https');
const pool = new Pool({ connectionString: 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified' });
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
function graphql(query) {
return new Promise((resolve, reject) => {
diff --git a/DW-Programming/versace-image-scraper.js b/DW-Programming/versace-image-scraper.js
index 674230fc..8a5fd6e8 100644
--- a/DW-Programming/versace-image-scraper.js
+++ b/DW-Programming/versace-image-scraper.js
@@ -10,7 +10,7 @@ const fs = require('fs');
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
// Step 1: Load sitemap URLs and match against our MFR SKUs
diff --git a/DW-Programming/versace-image-uploader.js b/DW-Programming/versace-image-uploader.js
index 44c9be75..7d4a627d 100644
--- a/DW-Programming/versace-image-uploader.js
+++ b/DW-Programming/versace-image-uploader.js
@@ -11,7 +11,7 @@ const { Pool } = require('pg');
// === CONFIG ===
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
const pool = new Pool({
diff --git a/DW-Websites/shop-by-color/fetch-colors.js b/DW-Websites/shop-by-color/fetch-colors.js
index e5bad501..3ca3461d 100644
--- a/DW-Websites/shop-by-color/fetch-colors.js
+++ b/DW-Websites/shop-by-color/fetch-colors.js
@@ -2,7 +2,7 @@ const https = require('https');
const fs = require('fs');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VER = '2024-10';
const COLOR_MAP = {
diff --git a/scripts/__pycache__/batch-room-generator.cpython-314.pyc b/scripts/__pycache__/batch-room-generator.cpython-314.pyc
new file mode 100644
index 00000000..f57e7f6e
Binary files /dev/null and b/scripts/__pycache__/batch-room-generator.cpython-314.pyc differ
diff --git a/scripts/__pycache__/batch-room-settings.cpython-314.pyc b/scripts/__pycache__/batch-room-settings.cpython-314.pyc
new file mode 100644
index 00000000..65545ded
Binary files /dev/null and b/scripts/__pycache__/batch-room-settings.cpython-314.pyc differ
diff --git a/scripts/analyze-fabric-wallcovering.js b/scripts/analyze-fabric-wallcovering.js
index 8318d4b3..c7561225 100644
--- a/scripts/analyze-fabric-wallcovering.js
+++ b/scripts/analyze-fabric-wallcovering.js
@@ -7,7 +7,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
diff --git a/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24 b/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
index ed5fd6d9..97ed3526 100644
--- a/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
+++ b/scripts/archive-thibaut-unknown.js.DISABLED-2026-04-24
@@ -10,7 +10,7 @@ const https = require('https');
const { Pool } = require('pg');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const pool = new Pool({
diff --git a/scripts/batch-room-generator.py b/scripts/batch-room-generator.py
index 089b0d1a..54279c17 100644
--- a/scripts/batch-room-generator.py
+++ b/scripts/batch-room-generator.py
@@ -25,7 +25,7 @@ from urllib.parse import urlparse
DB_DSN = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
ROOM_APP_URL = "http://localhost:3075/api/generate-room"
SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
SHOPIFY_API_VER = "2024-10"
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
diff --git a/scripts/batch-room-settings.py b/scripts/batch-room-settings.py
index f127160d..fe4108d2 100644
--- a/scripts/batch-room-settings.py
+++ b/scripts/batch-room-settings.py
@@ -20,7 +20,7 @@ from datetime import datetime
DB_URL = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
ROOM_API = "http://localhost:3075/api/generate-room"
SHOPIFY_STORE = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
BATCH_SIZE = 500
diff --git a/scripts/brand-mckenzie-ai-analysis.ts b/scripts/brand-mckenzie-ai-analysis.ts
index 8a117d44..8335506a 100644
--- a/scripts/brand-mckenzie-ai-analysis.ts
+++ b/scripts/brand-mckenzie-ai-analysis.ts
@@ -7,7 +7,7 @@
import 'dotenv/config';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
interface AIAnalysis {
diff --git a/scripts/brand-mckenzie-full-scrape.ts b/scripts/brand-mckenzie-full-scrape.ts
index 492b19f0..47349a77 100644
--- a/scripts/brand-mckenzie-full-scrape.ts
+++ b/scripts/brand-mckenzie-full-scrape.ts
@@ -8,7 +8,7 @@ import puppeteer from 'puppeteer';
import { Pool } from 'pg';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
// PostgreSQL connection
diff --git a/scripts/brand-mckenzie-full-update.ts b/scripts/brand-mckenzie-full-update.ts
index 5f2e2b80..f1a4e185 100644
--- a/scripts/brand-mckenzie-full-update.ts
+++ b/scripts/brand-mckenzie-full-update.ts
@@ -12,7 +12,7 @@ import 'dotenv/config';
import puppeteer from 'puppeteer';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
// Known Brand McKenzie collections
diff --git a/scripts/brand-mckenzie-recrawl.ts b/scripts/brand-mckenzie-recrawl.ts
index f471a9da..ffb43012 100644
--- a/scripts/brand-mckenzie-recrawl.ts
+++ b/scripts/brand-mckenzie-recrawl.ts
@@ -7,7 +7,7 @@ import 'dotenv/config';
import puppeteer from 'puppeteer';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
// Known Brand McKenzie collections
const COLLECTIONS = [
diff --git a/scripts/build-collections-directory.js b/scripts/build-collections-directory.js
index d57706bd..8a62197e 100644
--- a/scripts/build-collections-directory.js
+++ b/scripts/build-collections-directory.js
@@ -9,7 +9,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const PRODUCTS_TOKEN = '***REMOVED***';
+const PRODUCTS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const PAGES_TOKEN = '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';
const API_VERSION = '2024-10';
const DELAY_MS = 1050;
diff --git a/scripts/collection-consolidation-phase2.js b/scripts/collection-consolidation-phase2.js
index 8866d06c..61bc3e9c 100644
--- a/scripts/collection-consolidation-phase2.js
+++ b/scripts/collection-consolidation-phase2.js
@@ -11,7 +11,7 @@ const http = require('http');
// Config
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const REDIRECT_TOKEN = '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';
-const PRODUCT_TOKEN = '***REMOVED***';
+const PRODUCT_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-07';
const COLLECTIONS_API = 'http://localhost:9501/api/collections';
const AUTH = Buffer.from('admin:***REMOVED***').toString('base64');
diff --git a/scripts/collection-consolidation-phase3.js b/scripts/collection-consolidation-phase3.js
index 0bd3e623..40790f9c 100644
--- a/scripts/collection-consolidation-phase3.js
+++ b/scripts/collection-consolidation-phase3.js
@@ -12,7 +12,7 @@ const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
const REDIRECT_TOKEN = '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'; // content token for redirects
-const PRODUCT_TOKEN = '***REMOVED***'; // product token for collection delete
+const PRODUCT_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN; // product token for collection delete
const DRY_RUN = process.argv.includes('--dry-run');
const RATE_LIMIT_MS = 600;
diff --git a/scripts/collection-description-writer.js b/scripts/collection-description-writer.js
index 824bfc40..1d90f6c4 100644
--- a/scripts/collection-description-writer.js
+++ b/scripts/collection-description-writer.js
@@ -8,7 +8,7 @@
const https = require('https');
const fs = require('fs');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_MODEL = 'gemini-2.0-flash';
diff --git a/scripts/collections-cleanup.js b/scripts/collections-cleanup.js
index 0b3e0ac8..acb3fa9d 100644
--- a/scripts/collections-cleanup.js
+++ b/scripts/collections-cleanup.js
@@ -7,7 +7,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const sleep = ms => new Promise(r => setTimeout(r, ms));
diff --git a/scripts/collections-cover-images.js b/scripts/collections-cover-images.js
index 66d66a39..f6bfb339 100644
--- a/scripts/collections-cover-images.js
+++ b/scripts/collections-cover-images.js
@@ -7,7 +7,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-07';
const sleep = ms => new Promise(r => setTimeout(r, ms));
diff --git a/scripts/collections-phase5-audit.js b/scripts/collections-phase5-audit.js
index a30429f7..c90cbb6d 100644
--- a/scripts/collections-phase5-audit.js
+++ b/scripts/collections-phase5-audit.js
@@ -12,7 +12,7 @@ const fs = require('fs');
const path = require('path');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GRAPHQL_URL = `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}/graphql.json`;
const REST_BASE = `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}`;
diff --git a/scripts/collections-phase5-publish.js b/scripts/collections-phase5-publish.js
index cc58dd19..8be2a491 100644
--- a/scripts/collections-phase5-publish.js
+++ b/scripts/collections-phase5-publish.js
@@ -9,7 +9,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const EXCLUDE_TITLE_PATTERNS = /\b(test|temp|old|delete|archive|internal|agent|script|duplicate|copy|backup)\b/i;
diff --git a/scripts/dedupe-spin-gifs.js b/scripts/dedupe-spin-gifs.js
index da634733..c8856d60 100644
--- a/scripts/dedupe-spin-gifs.js
+++ b/scripts/dedupe-spin-gifs.js
@@ -15,7 +15,7 @@
* node dedupe-spin-gifs.js --vendor "..." --dry-run # preview only
*/
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const SHOP = process.env.SHOPIFY_SHOP || 'designer-laboratory-sandbox.myshopify.com';
const API = `https://${SHOP}/admin/api/2024-10/graphql.json`;
diff --git a/scripts/dwkk-zero-price-cleanup.js b/scripts/dwkk-zero-price-cleanup.js
index 70e3bc00..0f687560 100644
--- a/scripts/dwkk-zero-price-cleanup.js
+++ b/scripts/dwkk-zero-price-cleanup.js
@@ -7,7 +7,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GRAPHQL_URL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
const REST_BASE = `https://${SHOP}/admin/api/${API_VERSION}`;
diff --git a/scripts/dwkk-zero-price-fix.js b/scripts/dwkk-zero-price-fix.js
index d3f7d140..8bf9aaf8 100644
--- a/scripts/dwkk-zero-price-fix.js
+++ b/scripts/dwkk-zero-price-fix.js
@@ -1,7 +1,7 @@
const https = require('https');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const PRICING_MSG = '<p><strong>Active Pattern - Please Inquire for Best Pricing and Delivery</strong></p>';
const DELAY_MS = 600;
diff --git a/scripts/dwtt-body-to-metafields.js b/scripts/dwtt-body-to-metafields.js
index ec54eb3c..77925d8b 100644
--- a/scripts/dwtt-body-to-metafields.js
+++ b/scripts/dwtt-body-to-metafields.js
@@ -5,7 +5,7 @@
* Usage: node dwtt-body-to-metafields.js [--dry-run] [--batch N] [--after CURSOR]
*/
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const STORE = 'designer-laboratory-sandbox.myshopify.com';
const API = `https://${STORE}/admin/api/2024-01`;
diff --git a/scripts/fix-brand-mckenzie-leadtime.ts b/scripts/fix-brand-mckenzie-leadtime.ts
index 68d45d64..ce304167 100644
--- a/scripts/fix-brand-mckenzie-leadtime.ts
+++ b/scripts/fix-brand-mckenzie-leadtime.ts
@@ -2,7 +2,7 @@
import 'dotenv/config';
const SHOPIFY_STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
async function shopifyRequest(endpoint: string, method: string = 'GET', body?: any) {
const url = `https://${SHOPIFY_STORE}/admin/api/2024-01${endpoint}`;
diff --git a/scripts/fix-collection-trailing-artifacts.js b/scripts/fix-collection-trailing-artifacts.js
index 57c94f50..994348e1 100644
--- a/scripts/fix-collection-trailing-artifacts.js
+++ b/scripts/fix-collection-trailing-artifacts.js
@@ -11,7 +11,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const DELAY_MS = 500;
diff --git a/scripts/fix-dwkk-zero-price.js b/scripts/fix-dwkk-zero-price.js
index 9d6d2cbf..f18ad1d9 100644
--- a/scripts/fix-dwkk-zero-price.js
+++ b/scripts/fix-dwkk-zero-price.js
@@ -6,7 +6,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GQL_URL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
const REST_URL = `https://${SHOP}/admin/api/${API_VERSION}`;
diff --git a/scripts/fix-fabric-wallcovering-titles.js b/scripts/fix-fabric-wallcovering-titles.js
index 95af94cb..68ef042a 100644
--- a/scripts/fix-fabric-wallcovering-titles.js
+++ b/scripts/fix-fabric-wallcovering-titles.js
@@ -12,7 +12,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const stats = {
diff --git a/scripts/fix-fabric-wallcovering-v2.js b/scripts/fix-fabric-wallcovering-v2.js
index 80560a82..0ba00ec6 100644
--- a/scripts/fix-fabric-wallcovering-v2.js
+++ b/scripts/fix-fabric-wallcovering-v2.js
@@ -13,7 +13,7 @@ const https = require('https');
const fs = require('fs');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
diff --git a/scripts/fix-fabric-wallcovering-v3.js b/scripts/fix-fabric-wallcovering-v3.js
index ad79cf4e..2db543c3 100644
--- a/scripts/fix-fabric-wallcovering-v3.js
+++ b/scripts/fix-fabric-wallcovering-v3.js
@@ -17,7 +17,7 @@ const https = require('https');
const fs = require('fs');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const DELAY_MS = 500;
diff --git a/scripts/fix-fabrics-plural-graphql.sh b/scripts/fix-fabrics-plural-graphql.sh
index 7233de1e..5703077e 100755
--- a/scripts/fix-fabrics-plural-graphql.sh
+++ b/scripts/fix-fabrics-plural-graphql.sh
@@ -4,7 +4,7 @@
# Focus: product_type="Fabric" with "Fabrics" in title
SHOP="https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10"
-TOKEN="***REMOVED***"
+TOKEN="$SHOPIFY_ADMIN_TOKEN"
GQL="${SHOP}/graphql.json"
ALL_MATCHES="/tmp/fabrics-plural-matches.json"
diff --git a/scripts/fix-fabrics-plural-titles-v2.js b/scripts/fix-fabrics-plural-titles-v2.js
index fbacebf6..c6d88e2a 100644
--- a/scripts/fix-fabrics-plural-titles-v2.js
+++ b/scripts/fix-fabrics-plural-titles-v2.js
@@ -7,7 +7,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
function sleep(ms) {
diff --git a/scripts/fix-fabrics-plural-titles-v3.js b/scripts/fix-fabrics-plural-titles-v3.js
index d91e1237..9a26a688 100644
--- a/scripts/fix-fabrics-plural-titles-v3.js
+++ b/scripts/fix-fabrics-plural-titles-v3.js
@@ -13,7 +13,7 @@ const https = require('https');
const fs = require('fs');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOG_FILE = '/root/Projects/Designer-Wallcoverings/scripts/fabrics-fix-v3-log.json';
const DELAY_MS = 500; // 500ms between API calls
diff --git a/scripts/fix-fabrics-plural-titles.js b/scripts/fix-fabrics-plural-titles.js
index f9632a6d..a7c00cd3 100644
--- a/scripts/fix-fabrics-plural-titles.js
+++ b/scripts/fix-fabrics-plural-titles.js
@@ -10,7 +10,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
function sleep(ms) {
diff --git a/scripts/fix-fabrics-plural-titles.sh b/scripts/fix-fabrics-plural-titles.sh
index 7e5dc83f..47a9198e 100755
--- a/scripts/fix-fabrics-plural-titles.sh
+++ b/scripts/fix-fabrics-plural-titles.sh
@@ -3,7 +3,7 @@
# for all products with product_type="Fabric"
SHOP="https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10"
-TOKEN="***REMOVED***"
+TOKEN="$SHOPIFY_ADMIN_TOKEN"
HEADERS=(-H "X-Shopify-Access-Token: $TOKEN" -H "Content-Type: application/json")
ALL_PRODUCTS="/tmp/all-fabric-products.json"
diff --git a/scripts/grs-image-crop.js b/scripts/grs-image-crop.js
index dd880a89..1a87474f 100644
--- a/scripts/grs-image-crop.js
+++ b/scripts/grs-image-crop.js
@@ -13,7 +13,7 @@ const path = require('path');
const { execFileSync } = require('child_process');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const REST_BASE = `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}`;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/interior-design-tags.js b/scripts/interior-design-tags.js
index 7e7a51b4..6901cd11 100644
--- a/scripts/interior-design-tags.js
+++ b/scripts/interior-design-tags.js
@@ -29,7 +29,7 @@ const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}`;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_API_VERSION = '2024-10';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/kill-wallpaper-word.js b/scripts/kill-wallpaper-word.js
index 7dca7c79..2b3fde3c 100644
--- a/scripts/kill-wallpaper-word.js
+++ b/scripts/kill-wallpaper-word.js
@@ -13,7 +13,7 @@ const https = require('https');
const { Client } = require('pg');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/mfr-sku-bulk-update.js b/scripts/mfr-sku-bulk-update.js
index 3a982527..51e1eeb3 100755
--- a/scripts/mfr-sku-bulk-update.js
+++ b/scripts/mfr-sku-bulk-update.js
@@ -10,7 +10,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function shopifyGraphQL(query, variables = {}) {
const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-dwtt-mfr-sku-active.js b/scripts/populate-dwtt-mfr-sku-active.js
index 8063e180..2ac1a7bb 100644
--- a/scripts/populate-dwtt-mfr-sku-active.js
+++ b/scripts/populate-dwtt-mfr-sku-active.js
@@ -5,7 +5,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function shopifyGraphQL(query, variables = {}) {
const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-dwtt-mfr-sku-from-catalog.js b/scripts/populate-dwtt-mfr-sku-from-catalog.js
index 371ee4dd..edefaa09 100644
--- a/scripts/populate-dwtt-mfr-sku-from-catalog.js
+++ b/scripts/populate-dwtt-mfr-sku-from-catalog.js
@@ -5,7 +5,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function shopifyGraphQL(query, variables = {}) {
const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-dwtt-mfr-sku.js b/scripts/populate-dwtt-mfr-sku.js
index 7fcd9f90..3a86e3c2 100644
--- a/scripts/populate-dwtt-mfr-sku.js
+++ b/scripts/populate-dwtt-mfr-sku.js
@@ -5,7 +5,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function shopifyGraphQL(query, variables = {}) {
const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/populate-mfr-sku-metafield.js b/scripts/populate-mfr-sku-metafield.js
index da3250bd..e31b46ad 100644
--- a/scripts/populate-mfr-sku-metafield.js
+++ b/scripts/populate-mfr-sku-metafield.js
@@ -14,7 +14,7 @@
*/
const SHOPIFY_STORE = 'designer-laboratory-sandbox';
-const SHOPIFY_ACCESS_TOKEN = '***REMOVED***';
+const SHOPIFY_ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_GRAPHQL_URL = `https://${SHOPIFY_STORE}.myshopify.com/admin/api/2024-01/graphql.json`;
// MFR SKU patterns by vendor
diff --git a/scripts/rw-upload-room-settings.js b/scripts/rw-upload-room-settings.js
index 3f25ca25..b03a89e1 100644
--- a/scripts/rw-upload-room-settings.js
+++ b/scripts/rw-upload-room-settings.js
@@ -15,7 +15,7 @@ const path = require('path');
// Config
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ROOM_DIR = '/root/Projects/Designer-Wallcoverings/room-settings/rw-drapery';
const DELAY_MS = 1000;
diff --git a/scripts/shopify-swatch-spin.js b/scripts/shopify-swatch-spin.js
index 335f8dba..fd0bd82b 100644
--- a/scripts/shopify-swatch-spin.js
+++ b/scripts/shopify-swatch-spin.js
@@ -21,7 +21,7 @@ const path = require('path');
const https = require('https');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_API_VER = '2024-10';
// ─── Yorktown Spin Parameters ────────────────────────────────────────────────
diff --git a/scripts/standardize-product-types-bulk.js b/scripts/standardize-product-types-bulk.js
index d249d09c..43d18d0c 100644
--- a/scripts/standardize-product-types-bulk.js
+++ b/scripts/standardize-product-types-bulk.js
@@ -9,7 +9,7 @@
*/
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/standardize-product-types.js b/scripts/standardize-product-types.js
index 94de3faa..7c61630e 100644
--- a/scripts/standardize-product-types.js
+++ b/scripts/standardize-product-types.js
@@ -9,7 +9,7 @@
*/
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/scripts/supplier-mfr-bulk-push.js b/scripts/supplier-mfr-bulk-push.js
index 4ebb0d9f..f55949ad 100644
--- a/scripts/supplier-mfr-bulk-push.js
+++ b/scripts/supplier-mfr-bulk-push.js
@@ -10,7 +10,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function shopifyGraphQL(query, variables = {}) {
const res = await fetch(`https://${SHOPIFY_STORE}/admin/api/2024-01/graphql.json`, {
diff --git a/scripts/surface-stick-backfill.js b/scripts/surface-stick-backfill.js
index 58f01614..55c7827e 100644
--- a/scripts/surface-stick-backfill.js
+++ b/scripts/surface-stick-backfill.js
@@ -8,7 +8,7 @@ const https = require('https');
const { Client } = require('pg');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const PG_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
diff --git a/scripts/sync-shopify-to-postgres.js b/scripts/sync-shopify-to-postgres.js
index 936d86b3..5e57be01 100644
--- a/scripts/sync-shopify-to-postgres.js
+++ b/scripts/sync-shopify-to-postgres.js
@@ -16,7 +16,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = 'designer-laboratory-sandbox';
-const SHOPIFY_ACCESS_TOKEN = '***REMOVED***';
+const SHOPIFY_ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_GRAPHQL_URL = `https://${SHOPIFY_STORE}.myshopify.com/admin/api/2024-01/graphql.json`;
// Extract vendor prefix from SKU (DWK-123456 -> DWK)
diff --git a/scripts/update-jim-dultz-shopify.js b/scripts/update-jim-dultz-shopify.js
index 58f5242b..afd031ba 100644
--- a/scripts/update-jim-dultz-shopify.js
+++ b/scripts/update-jim-dultz-shopify.js
@@ -9,7 +9,7 @@
const https = require('https');
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const STORE = 'designer-laboratory-sandbox.myshopify.com';
// Jim Dultz products mapping from PostgreSQL
diff --git a/shopify/scripts/add-missing-samples-v2.js b/shopify/scripts/add-missing-samples-v2.js
index aeabf4b7..93d059ba 100644
--- a/shopify/scripts/add-missing-samples-v2.js
+++ b/shopify/scripts/add-missing-samples-v2.js
@@ -18,7 +18,7 @@ const fs = require('fs');
// ─── Config ────────────────────────────────────────────────────────────
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VER = '2024-10';
const LOCATION_GID = 'gid://shopify/Location/5795643504';
const PROGRESS_FILE = '/root/Projects/Designer-Wallcoverings/shopify/scripts/sample-v2-progress.json';
diff --git a/shopify/scripts/arte-dashboard/bulk-title-updater.js b/shopify/scripts/arte-dashboard/bulk-title-updater.js
index 0549a864..c0e06161 100755
--- a/shopify/scripts/arte-dashboard/bulk-title-updater.js
+++ b/shopify/scripts/arte-dashboard/bulk-title-updater.js
@@ -20,7 +20,7 @@ const AUTH = 'Basic ' + Buffer.from('admin:***REMOVED***').toString('base64');
// Shopify GraphQL
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
async function shopifyGraphQL(query, variables = {}) {
diff --git a/shopify/scripts/arte-dashboard/fetch-missing-skus.js b/shopify/scripts/arte-dashboard/fetch-missing-skus.js
index e7c4eeae..2f0b44d9 100644
--- a/shopify/scripts/arte-dashboard/fetch-missing-skus.js
+++ b/shopify/scripts/arte-dashboard/fetch-missing-skus.js
@@ -18,7 +18,7 @@ const pool = new Pool({
// Shopify API
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
let browser = null;
let page = null;
diff --git a/shopify/scripts/arte-dashboard/populate-mapping.js b/shopify/scripts/arte-dashboard/populate-mapping.js
index d3bfe065..adf65241 100644
--- a/shopify/scripts/arte-dashboard/populate-mapping.js
+++ b/shopify/scripts/arte-dashboard/populate-mapping.js
@@ -10,7 +10,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
async function fetchShopifyArte() {
let hasMore = true;
diff --git a/shopify/scripts/arte-dashboard/server.js b/shopify/scripts/arte-dashboard/server.js
index df36a4dd..3edeb8c7 100644
--- a/shopify/scripts/arte-dashboard/server.js
+++ b/shopify/scripts/arte-dashboard/server.js
@@ -23,7 +23,7 @@ const AUTH_PASS = '***REMOVED***';
// Shopify config
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
// PostgreSQL
diff --git a/shopify/scripts/arte-update-mfr-sku.js b/shopify/scripts/arte-update-mfr-sku.js
index 421c6ccd..500dd24a 100644
--- a/shopify/scripts/arte-update-mfr-sku.js
+++ b/shopify/scripts/arte-update-mfr-sku.js
@@ -14,7 +14,7 @@ const { Pool } = require('pg');
// Config
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
// PostgreSQL
diff --git a/shopify/scripts/audit-novasuede-new.js b/shopify/scripts/audit-novasuede-new.js
index b879bd66..90c8bafc 100644
--- a/shopify/scripts/audit-novasuede-new.js
+++ b/shopify/scripts/audit-novasuede-new.js
@@ -7,7 +7,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const NEW_SKUS = [
["Amber","T3Q8W"],["Blank Slate","T3L0W"],["Bliss","T3Q7W"],["Blush Rose","T3RFW"],
diff --git a/shopify/scripts/batch-room-settings.py b/shopify/scripts/batch-room-settings.py
index 454d0f94..02c79641 100644
--- a/shopify/scripts/batch-room-settings.py
+++ b/shopify/scripts/batch-room-settings.py
@@ -22,7 +22,7 @@ from datetime import datetime
DB_URL = "postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified"
ROOM_API = "http://localhost:3075/api/generate-room"
SHOPIFY_STORE = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}"
BATCH_SIZE = 500
ROOM_OUTPUT_DIR = "/tmp/room-settings"
diff --git a/shopify/scripts/batch-room-settings/batch-room-generator.js b/shopify/scripts/batch-room-settings/batch-room-generator.js
index d2d1c0ac..c1795edb 100644
--- a/shopify/scripts/batch-room-settings/batch-room-generator.js
+++ b/shopify/scripts/batch-room-settings/batch-room-generator.js
@@ -21,7 +21,7 @@ const path = require('path');
// ─── Config ────────────────────────────────────────────────────────────────
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_VISION_KEY = '${GOOGLE_API_KEY}';
const GEMINI_IMAGE_KEY = '${GOOGLE_API_KEY}';
const ROOM_APP_URL = 'http://localhost:3075/api/generate-room';
diff --git a/shopify/scripts/bespoke-updater/server.js b/shopify/scripts/bespoke-updater/server.js
index d6a66e2f..7bb43be1 100644
--- a/shopify/scripts/bespoke-updater/server.js
+++ b/shopify/scripts/bespoke-updater/server.js
@@ -20,7 +20,7 @@ app.use(express.json());
const PORT = 9870;
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
// Bespoke vendor variations
diff --git a/shopify/scripts/create-missing-sample-variants.js b/shopify/scripts/create-missing-sample-variants.js
index bbaeb25e..6918f906 100644
--- a/shopify/scripts/create-missing-sample-variants.js
+++ b/shopify/scripts/create-missing-sample-variants.js
@@ -15,7 +15,7 @@ const https = require('https');
const fs = require('fs');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_GID = 'gid://shopify/Location/5795643504';
const SCRIPTS_DIR = '/root/Projects/Designer-Wallcoverings/shopify/scripts';
diff --git a/shopify/scripts/create-novasuede-rosewater.js b/shopify/scripts/create-novasuede-rosewater.js
index 1b01c3d2..5fd07574 100644
--- a/shopify/scripts/create-novasuede-rosewater.js
+++ b/shopify/scripts/create-novasuede-rosewater.js
@@ -10,7 +10,7 @@
const https = require('https');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const APPLY = process.argv.includes('--apply');
diff --git a/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24 b/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
index 88c1304c..b88f4759 100644
--- a/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
+++ b/shopify/scripts/dedup-phillipe-romano.js.DISABLED-2026-04-24
@@ -18,7 +18,7 @@ const https = require('https');
const { Pool } = require('pg');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SLACK_WEBHOOK = 'https://hooks.slack.com/services/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';
const pool = new Pool({
diff --git a/shopify/scripts/dwkk-zero-price-cleanup.js b/shopify/scripts/dwkk-zero-price-cleanup.js
index 662e8b6f..118bae17 100644
--- a/shopify/scripts/dwkk-zero-price-cleanup.js
+++ b/shopify/scripts/dwkk-zero-price-cleanup.js
@@ -7,7 +7,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const DELAY_MS = 600;
const INQUIRY_HTML = '<p><strong>Active Pattern - Please Inquire for Best Pricing and Delivery</strong></p>';
diff --git a/shopify/scripts/dwvs-activate-ready-drafts.js b/shopify/scripts/dwvs-activate-ready-drafts.js
index 3e1ff947..5db4cd30 100644
--- a/shopify/scripts/dwvs-activate-ready-drafts.js
+++ b/shopify/scripts/dwvs-activate-ready-drafts.js
@@ -7,7 +7,7 @@
// Also require a priced bolt — no point activating a product that can't be bought.
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const fs = require('fs');
const path = require('path');
diff --git a/shopify/scripts/dwvs-import-catalog-only.js b/shopify/scripts/dwvs-import-catalog-only.js
index 1d8efd5d..155e5f20 100644
--- a/shopify/scripts/dwvs-import-catalog-only.js
+++ b/shopify/scripts/dwvs-import-catalog-only.js
@@ -4,7 +4,7 @@
// Title: "{Pattern} {Color} Wallcovering | Versace"
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const fs = require('fs');
const path = require('path');
diff --git a/shopify/scripts/dwvs-original-series-apply.js b/shopify/scripts/dwvs-original-series-apply.js
index 4de2c6a7..081d6b94 100644
--- a/shopify/scripts/dwvs-original-series-apply.js
+++ b/shopify/scripts/dwvs-original-series-apply.js
@@ -10,7 +10,7 @@
// This script is a DRY-RUN by default. Pass --execute to actually write changes.
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const fs = require('fs');
const path = require('path');
diff --git a/shopify/scripts/dwvs-reconcile-mfr.js b/shopify/scripts/dwvs-reconcile-mfr.js
index 92750f25..2ff0cad4 100644
--- a/shopify/scripts/dwvs-reconcile-mfr.js
+++ b/shopify/scripts/dwvs-reconcile-mfr.js
@@ -9,7 +9,7 @@
// 7. Report: which Shopify products updated, which 20 catalog rows have no Shopify match (for step 5 import)
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const fs = require('fs');
const path = require('path');
diff --git a/shopify/scripts/dwvs-versace-csv-export.js b/shopify/scripts/dwvs-versace-csv-export.js
index 1d088a9e..5a275824 100644
--- a/shopify/scripts/dwvs-versace-csv-export.js
+++ b/shopify/scripts/dwvs-versace-csv-export.js
@@ -3,7 +3,7 @@
// MFR SKU is mandatory — pulled from product tags and manufacturer_sku metafields.
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const fs = require('fs');
const path = require('path');
diff --git a/shopify/scripts/dwwd-roll-length/fix-orphans.js b/shopify/scripts/dwwd-roll-length/fix-orphans.js
index 327100f9..644d4382 100644
--- a/shopify/scripts/dwwd-roll-length/fix-orphans.js
+++ b/shopify/scripts/dwwd-roll-length/fix-orphans.js
@@ -1,7 +1,7 @@
#!/usr/bin/env node
// Apply roll-length to the 8 orphans (not in MTG catalog, but MTG standard dimensions known).
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API = `https://${SHOP}/admin/api/2024-01/graphql.json`;
// 7 standard MTG rolls (0.52m × 10m) + 1 three-panel mural (0.52m × 3m, 3 panels per box)
diff --git a/shopify/scripts/dwwd-roll-length/run.js b/shopify/scripts/dwwd-roll-length/run.js
index a79f2fcf..80e77537 100644
--- a/shopify/scripts/dwwd-roll-length/run.js
+++ b/shopify/scripts/dwwd-roll-length/run.js
@@ -10,7 +10,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API = `https://${SHOP}/admin/api/2024-01/graphql.json`;
const APPLY = process.argv.includes('--apply');
const OUT = __dirname;
diff --git a/shopify/scripts/fix-dwkk-zero-price-variants.js b/shopify/scripts/fix-dwkk-zero-price-variants.js
index 4c705bca..a0f7038c 100644
--- a/shopify/scripts/fix-dwkk-zero-price-variants.js
+++ b/shopify/scripts/fix-dwkk-zero-price-variants.js
@@ -7,7 +7,7 @@
*/
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const BASE = `https://${SHOP}/admin/api/${API_VERSION}`;
const DELAY_MS = 600;
diff --git a/shopify/scripts/fix-dwkk-zero-price.js b/shopify/scripts/fix-dwkk-zero-price.js
index 4bca34d4..8462a2ce 100644
--- a/shopify/scripts/fix-dwkk-zero-price.js
+++ b/shopify/scripts/fix-dwkk-zero-price.js
@@ -8,7 +8,7 @@
const https = require('https');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const INQUIRY_MSG = '<p><strong>Active Pattern - Please Inquire for Best Pricing and Delivery</strong></p>';
diff --git a/shopify/scripts/fix-missing-sample-variants.js b/shopify/scripts/fix-missing-sample-variants.js
index 56ae10c3..cf176d03 100644
--- a/shopify/scripts/fix-missing-sample-variants.js
+++ b/shopify/scripts/fix-missing-sample-variants.js
@@ -16,7 +16,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_ID = 5795643504;
const INVENTORY_LEVEL = 2026;
diff --git a/shopify/scripts/fix-missing-samples.js b/shopify/scripts/fix-missing-samples.js
index 17f2778b..32a8d51d 100644
--- a/shopify/scripts/fix-missing-samples.js
+++ b/shopify/scripts/fix-missing-samples.js
@@ -15,7 +15,7 @@ const fs = require('fs');
const pathMod = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_ID = 5795643504;
const GRAPHQL_URL = `https://${SHOP}/admin/api/${API_VERSION}/graphql.json`;
diff --git a/shopify/scripts/fix-sample-inventory-only.js b/shopify/scripts/fix-sample-inventory-only.js
index a2ecd85e..faa9a621 100644
--- a/shopify/scripts/fix-sample-inventory-only.js
+++ b/shopify/scripts/fix-sample-inventory-only.js
@@ -8,7 +8,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_GID = 'gid://shopify/Location/5795643504';
const TARGET_QTY = 2026;
diff --git a/shopify/scripts/fix-sample-inventory.js b/shopify/scripts/fix-sample-inventory.js
index 8a6b153a..03377178 100644
--- a/shopify/scripts/fix-sample-inventory.js
+++ b/shopify/scripts/fix-sample-inventory.js
@@ -11,7 +11,7 @@ const https = require('https');
const fs = require('fs');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_GID = 'gid://shopify/Location/5795643504';
const TARGET_QTY = 2026;
diff --git a/shopify/scripts/fix-samples-graphql.js b/shopify/scripts/fix-samples-graphql.js
index 27eac215..a8c0d7e8 100644
--- a/shopify/scripts/fix-samples-graphql.js
+++ b/shopify/scripts/fix-samples-graphql.js
@@ -15,7 +15,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_GID = 'gid://shopify/Location/5795643504';
const SCRIPTS_DIR = '/root/Projects/Designer-Wallcoverings/shopify/scripts';
diff --git a/shopify/scripts/fix-zero-inventory-samples.js b/shopify/scripts/fix-zero-inventory-samples.js
index d91b7a5b..65c6d48f 100644
--- a/shopify/scripts/fix-zero-inventory-samples.js
+++ b/shopify/scripts/fix-zero-inventory-samples.js
@@ -12,7 +12,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_GID = 'gid://shopify/Location/5795643504';
const TARGET_QTY = 2026;
diff --git a/shopify/scripts/gemini-catalog-tagger.js b/shopify/scripts/gemini-catalog-tagger.js
index 8234baf9..ef355505 100644
--- a/shopify/scripts/gemini-catalog-tagger.js
+++ b/shopify/scripts/gemini-catalog-tagger.js
@@ -336,7 +336,7 @@ async function processTable(tableName, limit) {
// ── Shopify Push ────────────────────────────────────────────────────────────
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_DELAY = 550; // 2 req/s
async function pushToShopify(tableName) {
diff --git a/shopify/scripts/gemini-tag-engine/index.js b/shopify/scripts/gemini-tag-engine/index.js
index 67efae76..6239f5f2 100644
--- a/shopify/scripts/gemini-tag-engine/index.js
+++ b/shopify/scripts/gemini-tag-engine/index.js
@@ -19,7 +19,7 @@ const GEMINI_MODEL = 'gemini-2.0-flash';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_API_KEY}`;
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const SHOPIFY_API_VERSION = '2024-10';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/shopify/scripts/hollywood-tag-enrichment.js b/shopify/scripts/hollywood-tag-enrichment.js
index 493f3855..7e26dd86 100644
--- a/shopify/scripts/hollywood-tag-enrichment.js
+++ b/shopify/scripts/hollywood-tag-enrichment.js
@@ -12,7 +12,7 @@ const { Client } = require('pg');
const https = require('https');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
diff --git a/shopify/scripts/interior-design-tagger.js b/shopify/scripts/interior-design-tagger.js
index 52d6487d..99decf3c 100644
--- a/shopify/scripts/interior-design-tagger.js
+++ b/shopify/scripts/interior-design-tagger.js
@@ -21,7 +21,7 @@ const GEMINI_MODEL = 'gemini-2.0-flash';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/${GEMINI_MODEL}:generateContent?key=${GEMINI_KEY}`;
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const SLACK_WEBHOOK = '${SLACK_WEBHOOK_URL}';
diff --git a/shopify/scripts/inventory-set-2026.js b/shopify/scripts/inventory-set-2026.js
index 6e4e4802..4bb07862 100644
--- a/shopify/scripts/inventory-set-2026.js
+++ b/shopify/scripts/inventory-set-2026.js
@@ -13,7 +13,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const LOCATION_ID = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd.
diff --git a/shopify/scripts/koroseal-batch-cron.js b/shopify/scripts/koroseal-batch-cron.js
index 01313d94..24753bf4 100644
--- a/shopify/scripts/koroseal-batch-cron.js
+++ b/shopify/scripts/koroseal-batch-cron.js
@@ -12,7 +12,7 @@ const { isProtected } = require('/Users/stevestudio2/Projects/_shared/archive-gu
// Config
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
diff --git a/shopify/scripts/koroseal-enhanced-update.js b/shopify/scripts/koroseal-enhanced-update.js
index 9f14b128..ffffbbe4 100644
--- a/shopify/scripts/koroseal-enhanced-update.js
+++ b/shopify/scripts/koroseal-enhanced-update.js
@@ -60,7 +60,7 @@ const app = (0, express_1.default)();
const PORT = 9895;
// Shopify Configuration
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-01';
// Gemini Configuration (MANDATORY - No Claude Vision)
const GEMINI_API_KEY = '${GOOGLE_API_KEY}';
diff --git a/shopify/scripts/koroseal-mfr-from-handles.js b/shopify/scripts/koroseal-mfr-from-handles.js
index 618f7726..6e4bf281 100644
--- a/shopify/scripts/koroseal-mfr-from-handles.js
+++ b/shopify/scripts/koroseal-mfr-from-handles.js
@@ -13,7 +13,7 @@ const fs = require('fs');
const path = require('path');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
function log(msg) {
console.log(`[${new Date().toLocaleTimeString()}] ${msg}`);
diff --git a/shopify/scripts/koroseal-mfr-populator.js b/shopify/scripts/koroseal-mfr-populator.js
index e55a33a7..4b68d8fa 100644
--- a/shopify/scripts/koroseal-mfr-populator.js
+++ b/shopify/scripts/koroseal-mfr-populator.js
@@ -12,7 +12,7 @@ const fetch = require('node-fetch');
// Shopify Configuration
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
// Spreadsheet URLs
const TYPE2_SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1FYG7TGUUiim_RL25YJx5R9tBcgL3ilFlLy3dQISVSMo/gviz/tq?tqx=out:csv';
diff --git a/shopify/scripts/kravet-full-monty-single.js b/shopify/scripts/kravet-full-monty-single.js
index 873c85b0..c6b4d7bc 100644
--- a/shopify/scripts/kravet-full-monty-single.js
+++ b/shopify/scripts/kravet-full-monty-single.js
@@ -5,7 +5,7 @@
// Target (CLI arg): SKU e.g. DWKK-143879
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const fs = require('fs');
diff --git a/shopify/scripts/la-walls-image-sync.js b/shopify/scripts/la-walls-image-sync.js
index 47bd8c78..b8b7017a 100644
--- a/shopify/scripts/la-walls-image-sync.js
+++ b/shopify/scripts/la-walls-image-sync.js
@@ -12,7 +12,7 @@ const pool = new Pool({
});
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
async function graphqlQuery(query, variables = {}) {
diff --git a/shopify/scripts/migrate-barcode-to-mfr-sku.py b/shopify/scripts/migrate-barcode-to-mfr-sku.py
index 79c3dfce..c175992c 100644
--- a/shopify/scripts/migrate-barcode-to-mfr-sku.py
+++ b/shopify/scripts/migrate-barcode-to-mfr-sku.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+import os
"""
Migrate variant barcodes → global.manufacturer_sku metafield.
@@ -15,7 +16,7 @@ import sys
from datetime import datetime
STORE = "designer-laboratory-sandbox.myshopify.com"
-TOKEN = "***REMOVED***"
+TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
API_VERSION = "2024-10"
GQL_URL = f"https://{STORE}/admin/api/{API_VERSION}/graphql.json"
REST_BASE = f"https://{STORE}/admin/api/{API_VERSION}"
diff --git a/shopify/scripts/migrate-mckenzie-global-to-custom.js b/shopify/scripts/migrate-mckenzie-global-to-custom.js
index dd3326fd..8efa4ac9 100644
--- a/shopify/scripts/migrate-mckenzie-global-to-custom.js
+++ b/shopify/scripts/migrate-mckenzie-global-to-custom.js
@@ -7,7 +7,7 @@
*/
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const VENDOR = 'Brand McKenzie';
const KEY_REMAP = { lead_time: 'delivery_time' }; // global.<k> -> custom.<remap[k]||k>
diff --git a/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24 b/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24
index 810e5f91..ae4b4d34 100644
--- a/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24
+++ b/shopify/scripts/nina-campbell-full-monty-fix.js.DISABLED-2026-04-24
@@ -19,7 +19,7 @@ const http = require('http');
const fs = require('fs');
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GEMINI_KEY = 'REDACTED_GEMINI_KEY';
const LOG_FILE = '/tmp/nina_monty_fix.log';
const DRY_RUN = process.argv.includes('--dry-run');
diff --git a/shopify/scripts/paul-montgomery-image-sync.js b/shopify/scripts/paul-montgomery-image-sync.js
index ffb3e2ee..fe78871e 100644
--- a/shopify/scripts/paul-montgomery-image-sync.js
+++ b/shopify/scripts/paul-montgomery-image-sync.js
@@ -17,7 +17,7 @@ const https = require('https');
const { Pool } = require('pg');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/2024-10/graphql.json`;
const pool = new Pool({
diff --git a/shopify/scripts/push-fire-rating-metafields.js b/shopify/scripts/push-fire-rating-metafields.js
index 027a1c31..6bf7bd91 100644
--- a/shopify/scripts/push-fire-rating-metafields.js
+++ b/shopify/scripts/push-fire-rating-metafields.js
@@ -14,7 +14,7 @@ const pool = new Pool({
});
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const BATCH_SIZE = 25;
const DELAY_MS = 600; // ~1.5 calls/sec to stay well under 20 req/s Plus limit
diff --git a/shopify/scripts/push-pattern-repeat-metafields.js b/shopify/scripts/push-pattern-repeat-metafields.js
index ca0bd010..3a6f50cf 100644
--- a/shopify/scripts/push-pattern-repeat-metafields.js
+++ b/shopify/scripts/push-pattern-repeat-metafields.js
@@ -15,7 +15,7 @@ const { Client } = require('pg');
const fs = require('fs');
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const PG_URI = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const BATCH_SIZE = 25;
diff --git a/shopify/scripts/resume-sample-variant-creation.js b/shopify/scripts/resume-sample-variant-creation.js
index 29acccfd..c966b3f1 100644
--- a/shopify/scripts/resume-sample-variant-creation.js
+++ b/shopify/scripts/resume-sample-variant-creation.js
@@ -15,7 +15,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const LOCATION_GID = 'gid://shopify/Location/5795643504';
const TARGET_QTY = 2026;
diff --git a/shopify/scripts/revert-dwcy-pass2.js b/shopify/scripts/revert-dwcy-pass2.js
index dd6e9b75..ee7ddf1d 100644
--- a/shopify/scripts/revert-dwcy-pass2.js
+++ b/shopify/scripts/revert-dwcy-pass2.js
@@ -11,7 +11,7 @@
*/
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
const REST_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}`;
diff --git a/shopify/scripts/revert-dwcy-to-dwc.js b/shopify/scripts/revert-dwcy-to-dwc.js
index 4282bc03..7d1858a3 100644
--- a/shopify/scripts/revert-dwcy-to-dwc.js
+++ b/shopify/scripts/revert-dwcy-to-dwc.js
@@ -12,7 +12,7 @@
*/
const SHOPIFY_DOMAIN = 'designer-laboratory-sandbox.myshopify.com';
-const ACCESS_TOKEN = '***REMOVED***';
+const ACCESS_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GRAPHQL_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;
const REST_URL = `https://${SHOPIFY_DOMAIN}/admin/api/${API_VERSION}`;
diff --git a/shopify/scripts/romo-lookup.js b/shopify/scripts/romo-lookup.js
index bb74cb0e..9cefd8d8 100644
--- a/shopify/scripts/romo-lookup.js
+++ b/shopify/scripts/romo-lookup.js
@@ -13,7 +13,7 @@ const fs = require('fs');
const https = require('https');
const SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com";
-const SHOPIFY_TOKEN = "***REMOVED***";
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const LOG_FILE = "/tmp/romo-lookup.log";
const RESULTS_FILE = "/tmp/romo-lookup-results.json";
const SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}";
diff --git a/shopify/scripts/sample-only-price-match.js b/shopify/scripts/sample-only-price-match.js
index bdc42706..d90c2dd7 100644
--- a/shopify/scripts/sample-only-price-match.js
+++ b/shopify/scripts/sample-only-price-match.js
@@ -4,7 +4,7 @@
// report how many have prices available.
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const plan = require('./sandberg-wm-plan-2026-04-20T18-55-22-936Z.json');
const fs = require('fs');
diff --git a/shopify/scripts/sample-only-status-audit.js b/shopify/scripts/sample-only-status-audit.js
index 443be4e2..23eae55a 100644
--- a/shopify/scripts/sample-only-status-audit.js
+++ b/shopify/scripts/sample-only-status-audit.js
@@ -1,6 +1,6 @@
#!/usr/bin/env node
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const plan = require('./sandberg-wm-plan-2026-04-20T18-55-22-936Z.json');
diff --git a/shopify/scripts/sandberg-add-bolt-fix-legacy.js b/shopify/scripts/sandberg-add-bolt-fix-legacy.js
index e29ce8e1..a5fb596e 100644
--- a/shopify/scripts/sandberg-add-bolt-fix-legacy.js
+++ b/shopify/scripts/sandberg-add-bolt-fix-legacy.js
@@ -7,7 +7,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const BOLT_VALUE = 'Sold Per Bolt (20.5in x 33ft)';
const WEIGHT_LB = 4;
diff --git a/shopify/scripts/sandberg-add-bolt-variants.js b/shopify/scripts/sandberg-add-bolt-variants.js
index 80818688..ed1ceca1 100644
--- a/shopify/scripts/sandberg-add-bolt-variants.js
+++ b/shopify/scripts/sandberg-add-bolt-variants.js
@@ -18,7 +18,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const BOLT_OPTION_VALUE = 'Sold Per Bolt (20.5in x 33ft)';
diff --git a/shopify/scripts/sandberg-add-mural-variants.js b/shopify/scripts/sandberg-add-mural-variants.js
index 08642c50..9fffef3b 100644
--- a/shopify/scripts/sandberg-add-mural-variants.js
+++ b/shopify/scripts/sandberg-add-mural-variants.js
@@ -10,7 +10,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const VARIANT_VALUE = 'Sold Per Square Meter';
diff --git a/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24 b/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24
index 35a45a0c..d30b3fbe 100644
--- a/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24
+++ b/shopify/scripts/sandberg-archive-discontinued.js.DISABLED-2026-04-24
@@ -7,7 +7,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const ITEMS = require('./sandberg-discontinued-to-archive.json');
diff --git a/shopify/scripts/sandberg-william-morris-weight-4lb.js b/shopify/scripts/sandberg-william-morris-weight-4lb.js
index 1d906f4e..b2e09201 100644
--- a/shopify/scripts/sandberg-william-morris-weight-4lb.js
+++ b/shopify/scripts/sandberg-william-morris-weight-4lb.js
@@ -3,7 +3,7 @@
// Sample variants (title "Sample" or SKU ending "-Sample") are left untouched.
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
const TARGET_LB = 4.0;
diff --git a/shopify/scripts/sandberg-wm-add-wallcovering-title.js b/shopify/scripts/sandberg-wm-add-wallcovering-title.js
index 84c31a0f..3591fba2 100644
--- a/shopify/scripts/sandberg-wm-add-wallcovering-title.js
+++ b/shopify/scripts/sandberg-wm-add-wallcovering-title.js
@@ -4,7 +4,7 @@
// "Wallcovering" or "Wallcoverings" on the left side of the pipe.
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
diff --git a/shopify/scripts/sandberg-wm-price-audit.js b/shopify/scripts/sandberg-wm-price-audit.js
index a714920e..9b68d068 100644
--- a/shopify/scripts/sandberg-wm-price-audit.js
+++ b/shopify/scripts/sandberg-wm-price-audit.js
@@ -1,6 +1,6 @@
#!/usr/bin/env node
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
diff --git a/shopify/scripts/sandberg-wm-pull-full.js b/shopify/scripts/sandberg-wm-pull-full.js
index 09a4ad82..df946b2b 100644
--- a/shopify/scripts/sandberg-wm-pull-full.js
+++ b/shopify/scripts/sandberg-wm-pull-full.js
@@ -4,7 +4,7 @@
// for reconciliation against PG (sandberg_catalog / william_morris_catalog).
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const QUERY_FILTER = 'vendor:Sandberg OR vendor:"William Morris"';
diff --git a/shopify/scripts/scan-missing-samples.js b/shopify/scripts/scan-missing-samples.js
index b00fa795..2caf72f9 100644
--- a/shopify/scripts/scan-missing-samples.js
+++ b/shopify/scripts/scan-missing-samples.js
@@ -9,7 +9,7 @@ const https = require('https');
const fs = require('fs');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const OUTPUT_FILE = '/root/Projects/Designer-Wallcoverings/shopify/scripts/missing-samples.json';
diff --git a/shopify/scripts/sync-shopify-products.js b/shopify/scripts/sync-shopify-products.js
index e025177f..77beee01 100644
--- a/shopify/scripts/sync-shopify-products.js
+++ b/shopify/scripts/sync-shopify-products.js
@@ -21,7 +21,7 @@ const pool = new Pool({
});
const SHOPIFY_STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = process.env.SHOPIFY_ADMIN_API_VERSION || '2024-01';
async function shopifyGraphQL(query, variables = {}) {
diff --git a/shopify/scripts/update-brand-mckenzie-vendor.js b/shopify/scripts/update-brand-mckenzie-vendor.js
index 9c6691df..ad693f7a 100644
--- a/shopify/scripts/update-brand-mckenzie-vendor.js
+++ b/shopify/scripts/update-brand-mckenzie-vendor.js
@@ -8,7 +8,7 @@
const fetch = require('node-fetch');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
// Products to update with their MFR SKUs (extracted from titles)
const PRODUCTS = [
diff --git a/shopify/scripts/update-mckenzie-delivery.js b/shopify/scripts/update-mckenzie-delivery.js
index ee5e4789..35cbe4e8 100644
--- a/shopify/scripts/update-mckenzie-delivery.js
+++ b/shopify/scripts/update-mckenzie-delivery.js
@@ -6,7 +6,7 @@
*/
const STORE = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
const VENDOR = 'Brand McKenzie';
const DELIVERY_HTML = '<p> <strong>2-4 Week Delivery</strong></p>';
const LEAD_TIME = '2-4 Weeks';
diff --git a/shopify/scripts/update-rop-mfr.py b/shopify/scripts/update-rop-mfr.py
index e8b25095..930e244f 100644
--- a/shopify/scripts/update-rop-mfr.py
+++ b/shopify/scripts/update-rop-mfr.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+import os
"""
Update all ROP- products in Shopify with manufacturer numbers from FMPro cross-reference.
"""
@@ -13,7 +14,7 @@ from datetime import datetime
# Config
SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com"
-SHOPIFY_TOKEN = "***REMOVED***"
+SHOPIFY_TOKEN = os.environ['SHOPIFY_ADMIN_TOKEN']
API_VERSION = "2024-01"
GRAPHQL_URL = f"https://{SHOPIFY_DOMAIN}/admin/api/{API_VERSION}/graphql.json"
FMPRO_CSV = "/root/Projects/Designer-Wallcoverings/shopify/scripts/fmpro-master.csv"
diff --git a/shopify/scripts/wm-add-bolt-variants.js b/shopify/scripts/wm-add-bolt-variants.js
index acf3c736..7d9c954d 100644
--- a/shopify/scripts/wm-add-bolt-variants.js
+++ b/shopify/scripts/wm-add-bolt-variants.js
@@ -11,7 +11,7 @@ const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const WM = JSON.parse(fs.readFileSync('active-so-needs-scrape.json', 'utf8')).filter(x => x.vendor === 'William Morris');
diff --git a/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24 b/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24
index ae84db12..c8cec069 100644
--- a/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24
+++ b/shopify/scripts/wm-archive-empty-title.js.DISABLED-2026-04-24
@@ -5,7 +5,7 @@
const fs = require('fs');
const path = require('path');
const SHOP = 'designer-laboratory-sandbox.myshopify.com';
-const TOKEN = '***REMOVED***';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const ENDPOINT = `https://${SHOP}/admin/api/2024-10/graphql.json`;
const ITEMS = require('./wm-empty-title.json');
diff --git a/shopify/scripts/zoffany-ai-enrich-push.js b/shopify/scripts/zoffany-ai-enrich-push.js
index ab15a418..d225e9d4 100644
--- a/shopify/scripts/zoffany-ai-enrich-push.js
+++ b/shopify/scripts/zoffany-ai-enrich-push.js
@@ -9,7 +9,7 @@ const { Pool } = require('pg');
const https = require('https');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const BATCH_LIMIT = 302;
const DELAY_MS = 800; // safe under 2/s REST limit with margin
diff --git a/shopify/scripts/zoffany-full-monty-20.js b/shopify/scripts/zoffany-full-monty-20.js
index aaff1783..1dd23afd 100644
--- a/shopify/scripts/zoffany-full-monty-20.js
+++ b/shopify/scripts/zoffany-full-monty-20.js
@@ -30,7 +30,7 @@ const { execFileSync } = require('child_process');
// ─── Configuration ──────────────────────────────────────────────────────────
const DB_URL = 'postgresql://dw_admin:DW2024SecurePass@127.0.0.1:5432/dw_unified';
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
-const SHOPIFY_TOKEN = '***REMOVED***';
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
const API_VERSION = '2024-10';
const GEMINI_KEY = '${GOOGLE_API_KEY}';
const GEMINI_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_KEY}`;
← aec78cfa scrub hardcoded secrets from docs (Shopify token, Brewster p
·
back to Designer Wallcoverings
·
Refactor hardcoded DWSecure2024! basic-auth password to env 778ca02e →