[object Object]

← back to Pattern Vault

chore: lint, refactor, v0.2.3 (session close)

a337213b08b25ad6124797c3b311e6bb3fa94a02 · 2026-07-16 10:27:38 -0700 · Steve

Files touched

Diff

commit a337213b08b25ad6124797c3b311e6bb3fa94a02
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Jul 16 10:27:38 2026 -0700

    chore: lint, refactor, v0.2.3 (session close)
---
 package-lock.json                            | 4 ++--
 package.json                                 | 2 +-
 whimsical-compare/daily/scripts/upload_sf.js | 7 ++++---
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 4716a9e..3cd32a2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "pattern-vault",
-  "version": "0.2.2",
+  "version": "0.2.3",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "pattern-vault",
-      "version": "0.2.2",
+      "version": "0.2.3",
       "dependencies": {
         "express": "^4.19.0"
       }
diff --git a/package.json b/package.json
index a1d32d9..18945d1 100644
--- a/package.json
+++ b/package.json
@@ -1 +1 @@
-{"name":"pattern-vault","version":"0.2.2","private":true,"scripts":{"start":"node server.js"},"dependencies":{"express":"^4.19.0"}}
\ No newline at end of file
+{"name":"pattern-vault","version":"0.2.3","private":true,"scripts":{"start":"node server.js"},"dependencies":{"express":"^4.19.0"}}
\ No newline at end of file
diff --git a/whimsical-compare/daily/scripts/upload_sf.js b/whimsical-compare/daily/scripts/upload_sf.js
index 64b506f..d0124a5 100755
--- a/whimsical-compare/daily/scripts/upload_sf.js
+++ b/whimsical-compare/daily/scripts/upload_sf.js
@@ -25,6 +25,7 @@ const path = require('path');
 const os = require('os');
 
 const MANIFEST = process.argv[2];
+if (!MANIFEST) { console.log(JSON.stringify({ error: 'usage: upload_sf.js <manifest.json> [--armed]', uploaded: [], failed: [] })); process.exit(1); }
 const ARMED = process.argv.includes('--armed');
 // DEFAULT TRANSPORT = Browserbase cloud Chrome (residential proxy + native Cloudflare/captcha
 // solving). It runs entirely in the cloud — NO local browser window ever opens, and it never
@@ -39,8 +40,7 @@ const EMAIL = process.env.SPOONFLOWER_EMAIL || rzEnv.SPOONFLOWER_EMAIL;
 const PASSWORD = process.env.SPOONFLOWER_PASSWORD || rzEnv.SPOONFLOWER_PASSWORD;
 // Persistent session path (was /tmp/sf-state.json — /tmp is wiped on reboot, which
 // silently expired the Spoonflower session every restart). Override with SF_STATE.
-const STATE = process.env.SF_STATE || require('path').join(require('os').homedir(), '.config/pattern-vault/sf-state.json');
-const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/126 Safari/537.36';
+const STATE = process.env.SF_STATE || path.join(os.homedir(), '.config/pattern-vault/sf-state.json');
 const rnd = (a, b) => Math.floor(a + Math.random() * (b - a));
 const sleep = ms => new Promise(r => setTimeout(r, ms));
 
@@ -48,7 +48,8 @@ const sleep = ms => new Promise(r => setTimeout(r, ms));
 async function humanType(el, text) {
   for (const ch of text) {
     if (Math.random() < 0.06) { // typo then correct
-      const wrong = 'asdfghjkl'[rnd(0, 9)];
+      const TYPO_CHARS = 'asdfghjkl';
+      const wrong = TYPO_CHARS[rnd(0, TYPO_CHARS.length)];
       await el.type(wrong, { delay: rnd(40, 140) });
       await sleep(rnd(120, 400));
       await el.press('Backspace');

← 42412e9 spoonflower: default to Browserbase cloud (no local Chrome);  ·  back to Pattern Vault  ·  design-trend-scout: refresh trend board 2026-07-20 (correct f053b3d →