ReboFilesDocs
Empezar3
Qué es ReboFiles
Primeros pasos
Demos para ejecutar
Ponlo en tu app6
Componente de React
Headless: tu propia interfaz
Sin framework
Estilos y temas
Teclado y accesibilidad
Idiomas
Archivos9
Subidas
Vistas previas y el visor
Búsqueda
Cambios en vivo y carpetas grandes
Comentarios
Destacados y campos
Versiones, papelera y espacio
Descargar como .zip
Documentos de Word
El servidor14
La ruta
Frameworks e inicio de sesión
Quién puede hacer qué
Almacenamiento: S3, GCS, Azure y disco
Revisar las subidas
Metadatos: SQLite y Postgres
Esquema de la base de datos
Compartir y enlaces
Actividad y notificaciones
Ganchos, registros y límites
Retención, bloqueos y exportación
Escritorio y otros orígenes
Sincronizar una carpeta
Ir a producción
En equipo1
Asistentes de IA (MCP)
Referencia5
Paquetes
Componentes y hooks
API del cliente
Rutas HTTP
Estado y hoja de ruta
↑↓ para moverte↵ para abrirEsc para cerrar38 páginas

El servidor Retención, bloqueos y exportación

Retención, bloqueos y exportación

Tres cosas que una empresa pide antes de guardar sus archivos en un drive: que nada se vaya antes de tiempo, que lo que necesita un caso se quede, y que una persona pueda llevarse lo suyo.
Retención

Un mínimo de días

retentionDays de los ajustes del drive (Ajustes → Almacenamiento, para quien puede configurar): nada creado hace menos días se borra para siempre, ni por alguien ni por la papelera al vaciarse sola. Puede ir a la papelera y volver; vaciarla lo deja ahí, y borrarlo dice 409 retained.

// Nothing deleted for good before seven years, by anyone or by the trash.
await client.saveSettings({ retentionDays: 7 * 365 });

// A case: this folder and all in it out of reach of the trash until released.
await client.hold(folder.id, 'Case 2026-114');
await client.release(folder.id);
Retención
  • Poner en retención, en los detalles, para quien puede configurar: ni eso ni nada dentro puede ir a la papelera ni borrarse, por nadie, hasta que se quite. Si se intenta, la respuesta es 409 on-hold.
  • Pueden llegar versiones nuevas: las anteriores se quedan, como siempre.
  • Los detalles dicen quién la puso y por qué; la actividad tiene held y released, y se le dicen a onChange.
Exportar

Todo lo de una persona

Ajustes → Idioma → Descargar mis datos hace un .zip de lo que uno posee, en sus lugares, y un rebofiles-export.json al lado: cada entrada suya, lo compartido con ella, sus comentarios, lo que hizo, sus ajustes. GET /export da lo mismo; ?user= el de otra persona, para quien puede configurar.

import { downloadZip } from '@rebofiles/drive';

const exported = await client.exportPerson(); // one's own; another's for who may configure
const { pack, ...rest } = exported;
await downloadZip({ pack: async () => pack, urls: client.urls }, [], {
  name: 'my-data',
  extra: [{ path: 'rebofiles-export.json', text: JSON.stringify(rest, null, 2) }],
});

De otra persona, la exportación da lo que posee e hizo, como lo guarda el drive; sus bytes los lee del almacenamiento tu servidor, porque byRoles no deja descargarlos a nadie más que a ella.