← back to Designer Wallcoverings
stage yorkwall trade-portal cost/stock scraper + overnight one-shot runner
9d2b6d26d1196eb07a2cac51db48fe3698887d39 · 2026-07-09 23:52:04 -0700 · Steve
Files touched
M DW-Programming/ImportNewSkufromURL/yw-costcheck.jsA DW-Programming/ImportNewSkufromURL/yw-overnight-run.sh
Diff
commit 9d2b6d26d1196eb07a2cac51db48fe3698887d39
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Jul 9 23:52:04 2026 -0700
stage yorkwall trade-portal cost/stock scraper + overnight one-shot runner
---
DW-Programming/ImportNewSkufromURL/yw-costcheck.js | 7 +++++-
.../ImportNewSkufromURL/yw-overnight-run.sh | 27 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/DW-Programming/ImportNewSkufromURL/yw-costcheck.js b/DW-Programming/ImportNewSkufromURL/yw-costcheck.js
index 43a9b747..5b5032c3 100644
--- a/DW-Programming/ImportNewSkufromURL/yw-costcheck.js
+++ b/DW-Programming/ImportNewSkufromURL/yw-costcheck.js
@@ -2,7 +2,12 @@
// One login, then internal navigation (does NOT re-lock). Aborts hard if the
// account still reads locked. Password supplied via YW_PASS env (never written).
const fs = require('fs'), os = require('os'), path = require('path');
-try { require('dotenv').config(); } catch { /* dotenv optional */ }
+try {
+ const dotenv = require('dotenv');
+ dotenv.config(); // local .env (if any)
+ // Canonical secrets store — holds YORKWALL_* (parsed safely, no bash sourcing).
+ dotenv.config({ path: path.join(os.homedir(), 'Projects/secrets-manager/.env') });
+} catch { /* dotenv optional */ }
const { chromium } = require('playwright');
const md = fs.readFileSync(path.join(os.homedir(), '.claude/skills/brewster-scraper-manager/SKILL.md'), 'utf8');
// Prefer the secrets-routed YORKWALL_* (loaded from .env); fall back to inline YW_* / skill username.
diff --git a/DW-Programming/ImportNewSkufromURL/yw-overnight-run.sh b/DW-Programming/ImportNewSkufromURL/yw-overnight-run.sh
new file mode 100644
index 00000000..fed7afe0
--- /dev/null
+++ b/DW-Programming/ImportNewSkufromURL/yw-overnight-run.sh
@@ -0,0 +1,27 @@
+#!/bin/zsh
+# Overnight one-shot: pull yorkwall trade cost/stock for a SKU during the deep-quiet
+# window when the lockout is long-cleared. Reads creds from the master secrets .env
+# via the node script's dotenv (never bash-sources it). Self-unloads on success.
+set -u
+DIR="/Users/macstudio3/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL"
+cd "$DIR" || exit 1
+MFR="${1:-437-RD336}"
+TS="$(date +%Y%m%dT%H%M%S)"
+OUT="$DIR/yw-results/${MFR}-${TS}.json"
+LOG="$DIR/yw-results/overnight.log"
+
+node yw-costcheck.js "$MFR" > "$OUT" 2>>"$LOG"
+cp "$OUT" "$DIR/yw-results/latest.json"
+
+if grep -q '"loggedIn": true' "$OUT"; then
+ echo "[$TS] SUCCESS $MFR — logged in, result: $OUT" >> "$LOG"
+ touch "$DIR/yw-results/DONE"
+else
+ ABORT="$(grep -o '"abort": *"[^"]*"' "$OUT" | head -1)"
+ echo "[$TS] no-data $MFR — ${ABORT:-no-login}; ping Steve to re-run" >> "$LOG"
+fi
+
+# TRUE ONE-SHOT: always self-remove after this single run so this can never
+# become a standing recurring job. Fires once at 3 AM, then unloads itself.
+launchctl bootout "gui/$(id -u)/com.steve.yw-costcheck" 2>/dev/null
+rm -f "$HOME/Library/LaunchAgents/com.steve.yw-costcheck.plist"
← a4a39262 auto-save: 2026-07-09T23:42:48 (4 files) — pending-approval/
·
back to Designer Wallcoverings
·
auto-save: 2026-07-10T00:12:54 (6 files) — pending-approval/ e468b2fd →