116 lines
5.5 KiB
Text
116 lines
5.5 KiB
Text
===============================================================
|
|
ARQUITECTURA — OASIS MOBILE (Node.js)
|
|
===============================================================
|
|
|
|
ENTRY POINT:
|
|
nodejs-project/nodejs-project/main.js
|
|
-> Inicia servidor SSB
|
|
-> Arranca backend Koa en puerto 3000
|
|
|
|
--------------------------------------------------------------
|
|
BACKEND (Koa.js)
|
|
--------------------------------------------------------------
|
|
ARCHIVO: src/backend/backend.js (3249 lineas, ~500 handlers)
|
|
|
|
- Router con 100+ rutas GET/POST
|
|
- Carga todos los modelos al inicio
|
|
- Middleware: validacion host, idioma (cookies), SSB sync status
|
|
- Patron: ctx.body = await vistaView(datos)
|
|
|
|
RUTAS CLAVE:
|
|
GET / -> home / feed
|
|
GET /inhabitants -> lista de usuarios
|
|
GET /author/:id -> perfil de usuario
|
|
GET /tribes -> lista de tribes
|
|
POST /tribes/generate-invite -> genera invite code de tribe (con inviteLog)
|
|
POST /tribes/join-code -> unirse a tribe con codigo (actualiza inviteLog)
|
|
GET /invites -> pagina de invites/pubs SSB
|
|
POST /settings/invite/accept -> acepta pub invite + publica SSB msg
|
|
GET /wallet -> wallet ECOin
|
|
GET /wallet/receive -> recibir (tiene QR de direccion)
|
|
GET /blockchain -> blockchain explorer (SSB log)
|
|
GET /AI -> integracion IA
|
|
GET /parliament -> gobernanza
|
|
GET /market -> mercado
|
|
GET /courts -> tribunales
|
|
GET /banking -> banca ECOin
|
|
|
|
--------------------------------------------------------------
|
|
MODELOS (src/models/)
|
|
--------------------------------------------------------------
|
|
about_model.js -> perfiles de usuario
|
|
tribes_model.js -> tribes + inviteLog trazabilidad completa
|
|
- generateInvite(tribeId) -> registra en inviteLog[] con generatedBy
|
|
- joinByInvite(code, userId) -> actualiza inviteLog (status, usedBy, usedAt)
|
|
- getTribeById() / listAll() -> exponen inviteLog
|
|
main_models.js -> acceptInvite() -> publica SSB msg type:'pub-invite'
|
|
blockchain_model.js -> listBlockchain() con filtro 'invites'
|
|
courts_model.js, banking_model.js, parliament_model.js, ...
|
|
(30+ modelos en total)
|
|
|
|
--------------------------------------------------------------
|
|
VISTAS (src/views/) — Hyperaxe SSR — 43 VISTAS TOTALES
|
|
--------------------------------------------------------------
|
|
Patron:
|
|
const { div, h2, p } = require('../server/node_modules/hyperaxe');
|
|
exports.miVista = async (datos) => template('Titulo', section(...))
|
|
|
|
LISTA COMPLETA DE VISTAS:
|
|
activity_view.js, agenda_view.js, AI_view.js, audio_view.js,
|
|
banking_views.js, blockchain_view.js, bookmark_view.js,
|
|
cipher_view.js, courts_view.js, cv_view.js, document_view.js,
|
|
event_view.js, favorites_view.js, feed_view.js, forum_view.js,
|
|
image_view.js, indexing_view.js, inhabitants_view.js,
|
|
invites_view.js, jobs_view.js, legacy_view.js, main_views.js,
|
|
markdown.js, market_view.js, modules_view.js, opinions_view.js,
|
|
parliament_view.js, peers_view.js, pixelia_view.js, pm_view.js,
|
|
projects_view.js, report_view.js, search_view.js, settings_view.js,
|
|
stats_view.js, tags_view.js, task_view.js, transfer_view.js,
|
|
trending_view.js, tribes_view.js, video_view.js, vote_view.js,
|
|
wallet_view.js
|
|
|
|
VISTAS CON QR (modificadas):
|
|
inhabitants_view.js -> QR del SSB ID en perfil y lista
|
|
invites_view.js -> QR del pub invite code
|
|
tribes_view.js -> QR del tribe invite code
|
|
wallet_view.js -> (ya tenia QR de direccion ECOin)
|
|
blockchain_view.js -> renderInviteExtra con detalle de inviteLog
|
|
|
|
--------------------------------------------------------------
|
|
BLOCKCHAIN (SSB log como blockchain)
|
|
--------------------------------------------------------------
|
|
blockchain_model.js -> listBlockchain()
|
|
- Llama createLogStream() en todos los mensajes SSB
|
|
- Filtra por tipo: 'post', 'about', 'vote', 'tribe',
|
|
'pub-invite', 'invites', etc.
|
|
- Cada mensaje SSB es un "bloque" con hash, key, sequence, content
|
|
|
|
blockchain_view.js -> renderBlockchainView()
|
|
- Muestra bloques con colores por tipo
|
|
- Filtros: ALL, POST, VOTE, TRIBE, INVITES, etc.
|
|
- renderInviteExtra(): tabla de inviteLog (6 columnas) para tribes
|
|
y tabla de datos pub-invite (pubHost, pubKey, acceptedAt)
|
|
|
|
--------------------------------------------------------------
|
|
FRONTEND (CSS/Assets)
|
|
--------------------------------------------------------------
|
|
styles/style.css -> CSS principal (estilos globales)
|
|
styles/mobile.css -> 480 lineas para movil (safe-area, touch, QR)
|
|
themes/OasisMobile.css -> tema dark gold (color solo, sin mobile)
|
|
themes/Dark-SNH.css, Matrix-SNH.css, Purple-SNH.css, Clear-SNH.css
|
|
translations/ -> i18n (es, en, ...)
|
|
|
|
--------------------------------------------------------------
|
|
SSB (Secure Scuttlebutt)
|
|
--------------------------------------------------------------
|
|
Identidad: @<base64_ed25519_pubkey>.ed25519
|
|
Mensajes firmados, append-only, cadena de bloques real
|
|
Replicacion via pubs (gossip.json en ~/.ssb/)
|
|
Pub invite format: host:port:@key.ed25519~invite_token
|
|
|
|
--------------------------------------------------------------
|
|
COMPARACION CON UPSTREAM PUBLICO (github.com/epsylon/oasis)
|
|
--------------------------------------------------------------
|
|
LOCAL: 43 vistas, AI, blockchain, tribunales, banca, parlamento...
|
|
UPSTREAM: ~15 vistas basicas (feed, tribes, about, peers basico)
|
|
CONCLUSION: Local es version MAS AVANZADA. NO actualizar desde upstream.
|