Skip to content

P2 backlog (refreshToken, bulkInsert, audit log, index intersection) #5

Description

@MauricioPerera

P2 backlog para Glosa Phase 1

Tracking issue para mejoras nice-to-have detectadas en el POC. Ninguna bloquea adopción, pero todas son útiles para escalar.

1. Auth.refreshToken(token)

Sesiones largas (Glosa: 24h JWT) van a querer rotar tokens sin re-login. Hoy hay que hacer logout + login (mata UX).

const newToken = await auth.refreshToken(oldToken);
// validates old token, issues new with extended exp, removes old session

2. Collection.bulkInsert(docs, opts?)

Para ingest masivo (ej: 197 chunks de un libro), insertMany itera y reaplica todos los index updates uno por uno. Bulk-mode podría:

  • Skip indexing intermedio, rebuild al final → más rápido
  • opts.skipValidation para confiar en input pre-validado
  • Single dirty=true flag
collection.bulkInsert(largeArray, { skipValidation: true, rebuildIndexes: 'after' });

3. Audit log built-in

Para DPA/SOC2: cada update/delete/setSensitiveField registra { who, when, what, before, after } automáticamente.

const db = new DocStore(adapter, { auditLog: true });
// Crea collection `_audit` con sorted index `created_at`
db.collection('users').update({...}, {$set: {email: 'new@x.com'}});
// → automáticamente loggea en _audit

4. Index intersection para queries multi-field

Hoy, find({workspace_id: 'X', status: 'active'}) solo usa UN índice. Para queries de dashboard sería ideal:

// Si ambos campos están indexados (hash)
// Hoy: usa workspace_id index, scan filtra status
// Propuesto: lookup en ambos, intersect _ids, retornar

Implementación: en _tryIndexLookup, retornar set y dejar que el caller intersect múltiples results.

5. Compresión de blobs JSON

Para colecciones grandes (>10K docs), gzip antes de KV write reduce 3-4x el storage y acelera reads. Necesita CompressionStream API (Workers nativo).

new DocStore(adapter, { compress: 'gzip' });

6. Soft-delete

db.collection('users', { softDelete: true });
collection.remove({...}); // setea `_removed_at: timestamp` en lugar de delete real
collection.find({}); // automáticamente filtra _removed_at != null
collection.findIncludingDeleted({});

7. Schema migrations

new Table(db, 'users', { schema, version: 2 });
// si KV tiene v1, ejecuta migrations.v1to2(doc) en cada doc al cargar

Estas son P2 — adoptamos sin ellas, pero las pediríamos en algún momento durante Phase 1-2 de Glosa. No requiere que las implementes todas; pongo el tracking issue para discusión y priorización.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions