mirror of
https://github.com/R0m1k3/Apiflow-gateway.git
synced 2026-10-21 14:08:12 +02:00
feat: gateway sécurisé, miroir de schéma automatique et sync incrémentale
- Schéma Hostinger recopié automatiquement depuis PG Debian (colonnes, PK, index) : plus d'init.sql maintenu à la main (corrige articles.artcentrale, mvtart.no_id et les 12 tables manquantes) - Stratégies : full transactionnel (DELETE + INSERT, garde-fou de volume) et window (signature mensuelle + 10 derniers jours) pour les grosses tables - Attente de la fin de la sync Debian (_run), pg_try_advisory_lock, cron 07:30 Europe/Paris, force honoré, alertes webhook - Dashboard : basic auth, CSP sans script inline, plus d'innerHTML, port 3002 non publié (accès via Nginx Proxy Manager) - Secrets hors du compose (.env), frps épinglé 0.71.0 avec TLS forcé, allowPorts et additionalScopes - Suppression de sync.sh, tables.js, utils.js, init.sql ; README de déploiement L'ancien mot de passe de la base `post` figure dans l'historique git : il doit être changé sur le serveur (voir README). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f8575b9ff2
commit
ea084034b9
26 files changed
+2767
-922
No files matched your search
@@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
/**
|
||||
* Journal applicatif : sortie console + tampon circulaire affiché par le dashboard.
|
||||
* Les messages sont du texte brut ; le dashboard les insère via textContent (jamais innerHTML).
|
||||
*/
|
||||
const MAX_LINES = 500;
|
||||
const MAX_LEN = 4000;
|
||||
const buffer = [];
|
||||
|
||||
function push(level, args) {
|
||||
const msg = args
|
||||
.map(a => (a instanceof Error ? a.message : typeof a === 'string' ? a : JSON.stringify(a)))
|
||||
.join(' ')
|
||||
.slice(0, MAX_LEN);
|
||||
buffer.push({ ts: new Date().toISOString(), level, msg });
|
||||
if (buffer.length > MAX_LINES) buffer.shift();
|
||||
const out = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;
|
||||
out(`[${level}] ${msg}`);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
info: (...a) => push('info', a),
|
||||
warn: (...a) => push('warn', a),
|
||||
error: (...a) => push('error', a),
|
||||
getLogs: (limit = 200) => buffer.slice(-Math.min(Math.max(1, limit | 0), MAX_LINES)),
|
||||
};
|
||||
Reference in new issue
Block a user