From 5c769a5a10bcbeb2322c08e29de5080fcebe93aa Mon Sep 17 00:00:00 2001 From: s1to Date: Wed, 19 Aug 2026 20:38:26 +0200 Subject: [PATCH] estructura: los ficheros de la rama, donde los pondria el dev Upstream no usa ni un solo subdirectorio en src/views, src/backend, src/models, src/client/assets/styles ni translations: todo plano. La rama habia creado dos (views/fork/ y translations/fork/), que es lo que mas se separaba de su forma de organizar el codigo. Se deshacen, y los ficheros pasan a llamarse como los suyos: views/fork/hive_nav.js -> views/hive_views.js (como main_views.js) views/fork/identities.js -> views/identities_view.js (como *_view.js) translations/fork/i18n_fork.js -> translations/i18n_fork.js (junto a i18n.js) backend/fork_routes.js -> backend/karvan_routes.js (familia karvan_*) Ademas se retira una ruta duplicada: /legacy/export estaba declarada dos veces, en backend.js (la del dev) y en el fichero de rutas de la rama, con el mismo cuerpo salvo un && defensivo. Nacio cuando el formulario se paso a GET; al devolverlo a POST quedo como copia exacta. Con ella se van legacyModel y onboardingModel, que ya no hacia falta inyectar. La cabecera del fichero de rutas explica ahora por que sigue existiendo, con los datos medidos y no de memoria: backend.js concentra 625 rutas y se reescribe en cada release (+833/-286 en la 0.9.2, +266/-31 en la 0.9.1), asi que una ruta anadida en medio entra en conflicto cada vez. Quedan diez ficheros propios, todos siguiendo la convencion de upstream, y +247 lineas repartidas en 21 ficheros suyos (sin contar OasisMobile.css, que es el tema de la rama). Comprobado tras mover: arranque, las siete rutas principales, el selector de identidades con sus siete entradas y su aviso, crear sala y enviar mensaje en Karvan, y la exportacion de identidad por la ruta del dev. --- src/backend/backend.js | 4 +-- .../{fork_routes.js => karvan_routes.js} | 36 ++++++------------- src/client/assets/translations/i18n.js | 2 +- .../translations/{fork => }/i18n_fork.js | 0 src/views/{fork/hive_nav.js => hive_views.js} | 6 ++-- .../identities.js => identities_view.js} | 2 +- src/views/main_views.js | 4 +-- src/views/settings_view.js | 4 +-- 8 files changed, 22 insertions(+), 36 deletions(-) rename src/backend/{fork_routes.js => karvan_routes.js} (88%) rename src/client/assets/translations/{fork => }/i18n_fork.js (100%) rename src/views/{fork/hive_nav.js => hive_views.js} (98%) rename src/views/{fork/identities.js => identities_view.js} (98%) diff --git a/src/backend/backend.js b/src/backend/backend.js index 9ee62e5..0f1e06c 100644 --- a/src/backend/backend.js +++ b/src/backend/backend.js @@ -9442,8 +9442,8 @@ const middleware = [ await next(); }, // rutas propias de la rama (Karvan, barra inferior, exportacion): fuera de la cadena de upstream - require('./fork_routes')({ cooler, pull, pmModel, checkMod, getViewerId, - getConfig, saveConfig, legacyModel, onboardingModel, + require('./karvan_routes')({ cooler, pull, pmModel, checkMod, getViewerId, + getConfig, saveConfig, isLoopbackRequest, sendErrorPage }), routes, ]; diff --git a/src/backend/fork_routes.js b/src/backend/karvan_routes.js similarity index 88% rename from src/backend/fork_routes.js rename to src/backend/karvan_routes.js index b71aa18..7a5c80d 100644 --- a/src/backend/fork_routes.js +++ b/src/backend/karvan_routes.js @@ -1,12 +1,15 @@ "use strict"; -// Rutas propias de la rama experimental (modulo Karvan: salas efimeras en RAM, -// mensajes temporales y senalizacion WebRTC). +// Rutas del modulo Karvan (salas efimeras en RAM, mensajes temporales y +// senalizacion WebRTC), mas las dos pantallas que la rama anade a los ajustes. // -// Viven fuera de backend.js a proposito: ese fichero concentra las 577 rutas de -// upstream en una sola cadena fluida y se mueve +905/-298 lineas por release, asi -// que cualquier ruta anadida en medio entra en conflicto en cada integracion. -// Aqui se montan en un router propio que se inserta en la cadena de middleware -// antes del router de upstream; lo que no casa cae a next() y sigue su curso. +// Upstream pone todas sus rutas en backend.js: 625 en una sola cadena fluida. +// Estas viven aparte porque ese fichero se reescribe entero en cada release +// (+833/-286 en la 0.9.2, +266/-31 en la 0.9.1), asi que una ruta anadida en +// medio entra en conflicto cada vez. Se montan en un router propio insertado +// antes del de upstream; lo que no casa cae a next() y sigue su curso. +// +// El nombre sigue a la familia del modulo: karvan_model.js, karvan_view.js, +// karvan.js, karvan.css. // // Las dependencias se inyectan en lugar de reconstruirse: cooler abre la conexion // al sbot y duplicarla abriria un segundo cliente muxrpc. @@ -19,8 +22,7 @@ const karvanModel = require('../models/karvan_model')({}); // FORK_IA_UX: salas const { karvanView, karvanRoomView } = require("../views/karvan_view"); module.exports = ({ cooler, pull, pmModel, checkMod, getViewerId, - getConfig, saveConfig, legacyModel, onboardingModel, - isLoopbackRequest, sendErrorPage }) => { + getConfig, saveConfig, isLoopbackRequest, sendErrorPage }) => { // FORK_IA_UX Fase 2 (cross-device): relay de MENSAJES de Karvan por privados SSB. Funciona vía un pub // (el privado se replica al otro móvil); los SIGNAL de WebRTC NO se relayan (serían demasiados/lentos por el log). // No toca el arranque del SSB. Ingesta por stream EN VIVO (no polling) → eficiente. @@ -229,22 +231,6 @@ async function karvanInviteAuthor(roomId) { ); // se responde primero: si se sale antes, el navegador se queda sin pagina setTimeout(() => process.exit(0), 500); - }) - // POST y no GET: en la direccion, la contraseña acaba en el historial del - // navegador, en el registro del servidor y en el Referer de lo siguiente que - // se cargue. En el cuerpo, no. - .post('/legacy/export', koaBody(), async (ctx) => { - if (!isLoopbackRequest(ctx)) { ctx.status = 403; ctx.body = ''; return; } - const pw = ctx.request.body && ctx.request.body.password; - if (!pw || pw.length < 32) return ctx.redirect('/legacy'); - try { - const { filename, data } = await legacyModel.exportData({ password: pw }); - ctx.set('Content-Type', 'application/octet-stream'); - ctx.set('Content-Disposition', `attachment; filename="${filename}"`); - ctx.set('Content-Length', String(data.length)); - ctx.body = data; - try { onboardingModel.markStep('backup'); } catch (_) {} - } catch (error) { sendErrorPage(ctx, error.message); } }); return forkRouter.routes(); diff --git a/src/client/assets/translations/i18n.js b/src/client/assets/translations/i18n.js index 658c1bf..2ed00fb 100644 --- a/src/client/assets/translations/i18n.js +++ b/src/client/assets/translations/i18n.js @@ -13,7 +13,7 @@ languages.forEach(language => { }); try { - const overlay = require('./fork/i18n_fork.js'); + const overlay = require('./i18n_fork.js'); languages.forEach(l => Object.assign(i18n[l] = i18n[l] || {}, overlay[l] || overlay.en || {})); } catch (e) {} diff --git a/src/client/assets/translations/fork/i18n_fork.js b/src/client/assets/translations/i18n_fork.js similarity index 100% rename from src/client/assets/translations/fork/i18n_fork.js rename to src/client/assets/translations/i18n_fork.js diff --git a/src/views/fork/hive_nav.js b/src/views/hive_views.js similarity index 98% rename from src/views/fork/hive_nav.js rename to src/views/hive_views.js index 6ccad5a..ea30059 100644 --- a/src/views/fork/hive_nav.js +++ b/src/views/hive_views.js @@ -7,9 +7,9 @@ // cada integracion. Aqui solo depende de i18n, que se inyecta porque main_views // lo muta en cada peticion sin reasignarlo. -const { a, button, div, form, h2, h3, img, input, label, nav, p, section, span } = require("../../server/node_modules/hyperaxe"); -const { getConfig } = require("../../configs/config-manager.js"); -const sharedState = require("../../configs/shared-state"); +const { a, button, div, form, h2, h3, img, input, label, nav, p, section, span } = require("../server/node_modules/hyperaxe"); +const { getConfig } = require("../configs/config-manager.js"); +const sharedState = require("../configs/shared-state"); module.exports = ({ i18n }) => { // === Oasis UX (portado de 0.8.7_UX): topbar + bottombar + hive === diff --git a/src/views/fork/identities.js b/src/views/identities_view.js similarity index 98% rename from src/views/fork/identities.js rename to src/views/identities_view.js index 25517ab..c1e09b2 100644 --- a/src/views/fork/identities.js +++ b/src/views/identities_view.js @@ -10,7 +10,7 @@ module.exports = ({ i18n, html }) => { const { form, button, div, h2, p, section, input, span, ul, li, a } = html; - const accounts = require('../../backend/accounts.js'); + const accounts = require('../backend/accounts.js'); const renderIdentities = (activeAccount) => { const names = accounts.list(); diff --git a/src/views/main_views.js b/src/views/main_views.js index 4ec97a0..2920101 100644 --- a/src/views/main_views.js +++ b/src/views/main_views.js @@ -1190,9 +1190,9 @@ const renderTasksLink = () => { }; // === Oasis UX: topbar + bottombar + hive === -// La implementacion vive en ./fork/hive_nav.js para que las reescrituras de +// La implementacion vive en ./hive_views.js para que las reescrituras de // upstream sobre este fichero no arrastren la interfaz de la rama. -const forkNav = require('./fork/hive_nav')({ i18n }); +const forkNav = require('./hive_views')({ i18n }); const renderMobileTopbar = forkNav.renderMobileTopbar; const renderBottomBar = forkNav.renderBottomBar; const renderHiveNav = forkNav.renderHiveNav; diff --git a/src/views/settings_view.js b/src/views/settings_view.js index 6208e40..ef5e69e 100644 --- a/src/views/settings_view.js +++ b/src/views/settings_view.js @@ -6,8 +6,8 @@ const { template, selectedLanguage, i18n, setLanguage } = require('./main_views' const i18nBase = require("../client/assets/translations/i18n"); const { WORKFLOWS, currentWorkflow } = require('../models/workflows_model'); const html = require("../server/node_modules/hyperaxe"); -// selector de identidades: la implementacion vive en ./fork/identities.js -const { renderIdentities } = require('./fork/identities')({ i18n, html }); +// selector de identidades: la implementacion vive en ./identities_view.js +const { renderIdentities } = require('./identities_view')({ i18n, html }); const snhUrl = "https://wiki.solarnethub.com/socialnet/overview";