README corto y sin comentarios en el código
This commit is contained in:
parent
cb551e2a3c
commit
7ed0276704
9 changed files with 7 additions and 165 deletions
|
|
@ -1,16 +1,4 @@
|
|||
#!/usr/bin/env node
|
||||
// Lee del sbot de OASIS lo que va a la web y lo saca en JSON para tools/genera.py.
|
||||
//
|
||||
// Quién publica: miembros de la tribu TRIBU a los que CUENTA sigue, más CUENTA.
|
||||
// La tribu sola no basta: en SSB cualquiera puede publicar que se une a una tribu
|
||||
// (la invitación solo la comprueba la interfaz de OASIS). El follow de CUENTA sí
|
||||
// está firmado por CUENTA.
|
||||
//
|
||||
// comunicados posts con #comunicado26s de quien publica
|
||||
// comisiones subtribus públicas de TRIBU creadas por quien publica
|
||||
// debates foros públicos abiertos por quien publica
|
||||
//
|
||||
// Uso: OASIS_DIR=~/oasis CUENTA=@...ed25519 TRIBU=%...sha256 node tools/extrae.js
|
||||
const path = require('path');
|
||||
|
||||
const dir = process.env.OASIS_DIR || path.join(process.env.HOME, 'oasis');
|
||||
|
|
@ -26,7 +14,6 @@ if (!CUENTA || !CUENTA.startsWith('@') || !TRIBU || !TRIBU.startsWith('%')) {
|
|||
const ssbConfig = require(path.join(dir, 'src', 'server', 'ssb_config'));
|
||||
const ssbClient = require(path.join(dir, 'src', 'server', 'node_modules', 'ssb-client'));
|
||||
|
||||
// igual que STRUCTURAL_FIELDS en src/models/tribes_model.js
|
||||
const ESTRUCTURA = ['title', 'description', 'image', 'location', 'tags', 'isAnonymous',
|
||||
'inviteMode', 'status', 'parentTribeId', 'mapUrl'];
|
||||
|
||||
|
|
@ -44,9 +31,6 @@ const todos = (src) => new Promise((res, rej) => {
|
|||
const lista = (x) => (Array.isArray(x) ? x : []);
|
||||
const igual = (a, b) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null);
|
||||
|
||||
// Cadena de una tribu (create + updates por `replaces`) con las mismas reglas que
|
||||
// buildTribeIndex: el autor raíz cambia lo que quiera; otro miembro solo puede
|
||||
// entrar o salir él mismo. Devuelve el último estado válido.
|
||||
function puntaTribu(raiz, msgs) {
|
||||
const porPadre = new Map();
|
||||
for (const m of msgs) {
|
||||
|
|
@ -98,7 +82,6 @@ ssbClient(ssbConfig.keys, { remote, caps: ssbConfig.caps }).then(async (ssb) =>
|
|||
const [contactos, tribus, posts, feeds, foros, lapidas] = await Promise.all(
|
||||
['contact', 'tribe', 'post', 'feed', 'forum', 'tombstone'].map(tipo));
|
||||
|
||||
// a quién sigue CUENTA (el último contact gana)
|
||||
const sigue = new Map();
|
||||
for (const m of contactos) {
|
||||
const c = m.value.content;
|
||||
|
|
@ -115,7 +98,6 @@ ssbClient(ssbConfig.keys, { remote, caps: ssbConfig.caps }).then(async (ssb) =>
|
|||
const miembros = lista(puntaTribu(raiz, deTribu(raiz)).value.content.members);
|
||||
const editores = new Set([CUENTA, ...miembros.filter((id) => sigue.get(id) === true)]);
|
||||
|
||||
// borrado: tombstone del propio autor
|
||||
const borrado = new Set(lapidas
|
||||
.filter((m) => typeof m.value.content.target === 'string')
|
||||
.map((m) => `${m.value.author} ${m.value.content.target}`));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue