Files
forex-dashboard/check-console.js
T
caty21 0657b50c07 feat: banques centrales (vote+dot plot+previsions), calendrier elargi, fix InvestingLive, M3 auto
Central bank governance (nouvel onglet Banques centrales) :
- lib/centralBankGovernance.ts + app/api/central-bank-sources : scraping live du
  vote de la derniere reunion, dot plot Fed (SEP), et desormais les previsions
  macro (PIB + inflation) publiees par chaque BC elle-meme (Fed SEP, Eurosystem
  staff projections, BoJ Outlook Report PDF, SNB conditional forecast, BoC MPR,
  RBA SMP). GBP/NZD laisses honnetement vides quand aucune source chiffree
  fiable n'est accessible (RBNZ bloque par Cloudflare).
- components/CentralBankSourcesTab.tsx : nouvel onglet avec cards par banque.

Taux directeurs + Money Supply M3 :
- data/rate_decisions.json corrige (JPY, EUR, NZD etc. etaient perimes d'1-2
  decisions) et desormais auto-maintenu : .github/workflows/update-rate-decisions.yml
  (horaire) detecte les changements de taux via Trading Economics et fait
  glisser current -> prev sans perte de donnee.
- data/money-supply-m3.json (nouveau) + .github/workflows/fetch-money-supply.yml
  (hebdo) : M3 par devise (proxy M2 pour l'USD, la Fed ne publiant plus M3
  depuis 2006), affiche dans CurrencyCard.

Calendrier economique elargi :
- lib/calendar-countries.ts, lib/calendar-taxonomy.ts, lib/fxstreetCalendar.ts :
  couverture pays elargie + classification des evenements + source FXStreet.

Fix InvestingLive :
- lib/investinglive.ts : l'ancienne API WordPress (wp-json) renvoyait 404 depuis
  leur migration Nuxt.js -> reecrit vers api.investinglive.com/api/homepage/articles,
  + fix crash silencieux (Tldr pas toujours un tableau).

Divers :
- .vercel/ ajoute au .gitignore (ne doit jamais etre commite, cf. son propre README).
- scripts/ (lancement PWA, push env Vercel), captures d'ecran, cache InvestingLive.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-08 16:47:59 +02:00

36 lines
1.2 KiB
JavaScript

const { chromium } = require('playwright');
(async () => {
const b = await chromium.launch();
const p = await b.newPage();
const errors = [];
const warnings = [];
p.on('console', msg => {
if (msg.type() === 'error') errors.push(msg.text());
if (msg.type() === 'warning') warnings.push(msg.text());
});
p.on('pageerror', err => errors.push('PAGE ERROR: ' + err.message));
await p.setViewportSize({width: 589, height: 900});
await p.goto('http://localhost:3099/');
await p.waitForTimeout(10000);
console.log('ERRORS:', JSON.stringify(errors, null, 2));
console.log('WARNINGS:', JSON.stringify(warnings.slice(0, 5), null, 2));
// Also check page height
const height = await p.evaluate(() => document.body.scrollHeight);
console.log('Page height:', height);
// Check if any element has overflow issues
const overflows = await p.evaluate(() => {
const issues = [];
document.querySelectorAll('*').forEach(el => {
if (el.scrollWidth > el.clientWidth + 5) {
issues.push(el.className.substring(0, 80));
}
});
return issues.slice(0, 10);
});
console.log('Overflow elements:', overflows);
await b.close();
})();