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.
28 lines
1.1 KiB
JavaScript
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 };
|