OASIS_MOBILE/src/models/phone_number.js
oasis-bot c332afd6ea 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.
2026-10-18 02:52:17 +02:00

28 lines
1.1 KiB
JavaScript

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 };