[object Object]

← back to Marketing Command Center

meta-token-health: fix dead George alert URL (HTTPS flip 2026-06-17)

fe2afd806b9ba7a87c8a041c36d71c1c0d23b16a · 2026-06-17 14:17:08 -0700 · Steve Abrams

http://100.107.67.67:9850 now 400s; use the Tailscale MagicDNS host + raw
GEORGE_AUTH + body field (matching the working watchdog sender). The token
itself is dead ('Cannot parse access token') — rotation is Steve-gated. The
Vendor IG cache fallback already exists (panel renders from vendor-posts-cache).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Files touched

Diff

commit fe2afd806b9ba7a87c8a041c36d71c1c0d23b16a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jun 17 14:17:08 2026 -0700

    meta-token-health: fix dead George alert URL (HTTPS flip 2026-06-17)
    
    http://100.107.67.67:9850 now 400s; use the Tailscale MagicDNS host + raw
    GEORGE_AUTH + body field (matching the working watchdog sender). The token
    itself is dead ('Cannot parse access token') — rotation is Steve-gated. The
    Vendor IG cache fallback already exists (panel renders from vendor-posts-cache).
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
 scripts/meta-token-health.js | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/scripts/meta-token-health.js b/scripts/meta-token-health.js
index 64f744d..d230cfd 100644
--- a/scripts/meta-token-health.js
+++ b/scripts/meta-token-health.js
@@ -24,11 +24,14 @@ async function alert(subject, body) {
     await fetch('http://127.0.0.1:3333/api/parking-lot', { method: 'POST', headers: { 'Content-Type': 'application/json' },
       body: JSON.stringify({ url: 'http://127.0.0.1:9661/#vendors', note: `⚠️ META token: ${subject} — ${body}` }) });
   } catch {}
-  // George email (best-effort)
+  // George email (best-effort). George flipped to HTTPS-only 2026-06-17 — the
+  // raw http://<ip> now 400s; use the Tailscale MagicDNS host + raw GEORGE_AUTH
+  // + body field, matching the working dw-canary-watchdog sender.
   if (GEORGE_AUTH) {
     try {
-      await fetch('http://100.107.67.67:9850/api/send', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + GEORGE_AUTH },
-        body: JSON.stringify({ to: 'steve@designerwallcoverings.com', subject: 'MCC META token — ' + subject, text: body }) });
+      const G = process.env.GEORGE_URL || 'https://kamatera.tail79cb8e.ts.net:9850';
+      await fetch(`${G}/api/send`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8', 'Authorization': GEORGE_AUTH },
+        body: JSON.stringify({ to: 'steve@designerwallcoverings.com', subject: 'MCC META token — ' + subject, body }) });
     } catch {}
   }
 }

← de6eb5f Security: remove browser-shipped basic-auth password from cl  ·  back to Marketing Command Center  ·  Social: real approval pipeline + instant posting + truthful 88a51a7 →