upstream: integrar Oasis 1.3.1

Base del merge a tres bandas: git 0.9.5 de epsylon, esta rama y el src de la
APK oficial 1.3.1 (la variante movil: OASIS_MOBILE, regex sin \p{}, audio y
video de Android). Corre en el mismo nodejs-mobile 18.20.4 que ya usabamos.

Se conserva de la rama: Karvan, identidades y multicuenta, topbar y barra
inferior, borrado de EXIF sin sharp, filtro hot del foro, RTC sin STUN y los
modulos apagados en movil (wallet, banking, torrents).

Se toma de upstream lo que ya hace de serie: respuesta citada en chats, ssb-lan
en movil, configuracion en ~/.ssb/oasis (sobrevive a reinstalar el backend).
El asistente de bienvenida deja elegir workflow tambien en movil.
This commit is contained in:
oasis-bot 2026-10-18 02:52:17 +02:00
parent 8d838dd8b1
commit c332afd6ea
265 changed files with 80970 additions and 29167 deletions

View file

@ -0,0 +1,28 @@
const crypto = require('crypto');
const FEED_ID = /^@[A-Za-z0-9+/]{43}=\.ed25519$/;
const MSG_ID = /^%[A-Za-z0-9+/]{43}=?\.sha256$/;
const digitsOf = (id) => {
const n = crypto.createHash('sha256').update(String(id)).digest().readUInt32BE(0) % 1000000;
const s = String(n).padStart(6, '0');
return `${s.slice(0, 3)}-${s.slice(3)}`;
};
const phoneNumberOf = (id) => (FEED_ID.test(String(id || '')) ? digitsOf(id) : null);
const roomNumberOf = (id) => (MSG_ID.test(String(id || '')) ? digitsOf(id) : null);
const normalizeNumber = (value) => {
const digits = String(value || '').replace(/[^0-9A-Za-z]/g, '');
return /^\d{6}$/.test(digits) ? `${digits.slice(0, 3)}-${digits.slice(3)}` : null;
};
const resolveNumber = (value, known) => {
const number = normalizeNumber(value);
if (!number) return [];
return [...(known || new Map())]
.filter(([id]) => phoneNumberOf(id) === number)
.map(([id, hop]) => ({ id, hop: Number(hop) }))
.sort((a, b) => a.hop - b.hop);
};
module.exports = { phoneNumberOf, roomNumberOf, normalizeNumber, resolveNumber };