@gzl10/baserow 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +435 -0
  2. package/README.md +847 -0
  3. package/dist/index.d.ts +8749 -0
  4. package/dist/index.js +11167 -0
  5. package/dist/index.js.map +1 -0
  6. package/package.json +91 -0
  7. package/src/BaserowClient.ts +501 -0
  8. package/src/ClientWithCreds.ts +545 -0
  9. package/src/ClientWithCredsWs.ts +852 -0
  10. package/src/ClientWithToken.ts +171 -0
  11. package/src/contexts/DatabaseClientContext.ts +114 -0
  12. package/src/contexts/DatabaseContext.ts +870 -0
  13. package/src/contexts/DatabaseTokenContext.ts +331 -0
  14. package/src/contexts/FieldContext.ts +399 -0
  15. package/src/contexts/RowContext.ts +99 -0
  16. package/src/contexts/TableClientContext.ts +291 -0
  17. package/src/contexts/TableContext.ts +1247 -0
  18. package/src/contexts/TableOnlyContext.ts +74 -0
  19. package/src/contexts/WorkspaceContext.ts +490 -0
  20. package/src/express/errors.ts +260 -0
  21. package/src/express/index.ts +69 -0
  22. package/src/express/middleware.ts +225 -0
  23. package/src/express/serializers.ts +314 -0
  24. package/src/index.ts +247 -0
  25. package/src/presets/performance.ts +262 -0
  26. package/src/services/AuthService.ts +472 -0
  27. package/src/services/DatabaseService.ts +246 -0
  28. package/src/services/DatabaseTokenService.ts +186 -0
  29. package/src/services/FieldService.ts +1543 -0
  30. package/src/services/RowService.ts +982 -0
  31. package/src/services/SchemaControlService.ts +420 -0
  32. package/src/services/TableService.ts +781 -0
  33. package/src/services/WorkspaceService.ts +113 -0
  34. package/src/services/core/BaseAuthClient.ts +111 -0
  35. package/src/services/core/BaseClient.ts +107 -0
  36. package/src/services/core/BaseService.ts +71 -0
  37. package/src/services/core/HttpService.ts +115 -0
  38. package/src/services/core/ValidationService.ts +149 -0
  39. package/src/types/auth.ts +177 -0
  40. package/src/types/core.ts +91 -0
  41. package/src/types/errors.ts +105 -0
  42. package/src/types/fields.ts +456 -0
  43. package/src/types/index.ts +222 -0
  44. package/src/types/requests.ts +333 -0
  45. package/src/types/responses.ts +50 -0
  46. package/src/types/schema.ts +446 -0
  47. package/src/types/tokens.ts +36 -0
  48. package/src/types.ts +11 -0
  49. package/src/utils/auth.ts +174 -0
  50. package/src/utils/axios.ts +647 -0
  51. package/src/utils/field-cache.ts +164 -0
  52. package/src/utils/httpFactory.ts +66 -0
  53. package/src/utils/jwt-decoder.ts +188 -0
  54. package/src/utils/jwtTokens.ts +50 -0
  55. package/src/utils/performance.ts +105 -0
  56. package/src/utils/prisma-mapper.ts +961 -0
  57. package/src/utils/validation.ts +463 -0
  58. package/src/validators/schema.ts +419 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,435 @@
1
+ # @gzl10/baserow
2
+
3
+ ## 1.2.0 (2025-01-02)
4
+
5
+ ### Minor Changes
6
+
7
+ #### 🔄 Rebranding a Open Source
8
+
9
+ - **Nuevo scope**: `@g10/baserow` → `@gzl10/baserow`
10
+ - **Nuevo repositorio**: `gitlab.gzl10.com/oss/baserow`
11
+ - **Licencia**: Preparado para publicación OSS
12
+ - **CI/CD**: Pipeline actualizado para npm público
13
+
14
+ #### 📦 Cambios en el paquete
15
+
16
+ - Author actualizado a Gonzalo Díez
17
+ - URLs actualizadas a grupo `oss`
18
+ - GitLab CI simplificado (sin componentes internos)
19
+
20
+ ---
21
+
22
+ ## 1.1.2 (2025-10-24)
23
+
24
+ ### Patch Changes
25
+
26
+ #### 📚 Documentación
27
+
28
+ **Nueva Guía Completa:**
29
+
30
+ - **[Filtros y Ordenaciones](docs/FILTERS_AND_SORTING.md)** - Guía exhaustiva de 15K+ palabras
31
+ - API Nativa vs PrismaMapper comparados
32
+ - 40+ ejemplos de uso real
33
+ - Operadores completos documentados
34
+ - Limitaciones conocidas explicadas
35
+ - Tablas de referencia rápida
36
+
37
+ **Reorganización de Documentación:**
38
+
39
+ - Todos los archivos técnicos movidos a `docs/`
40
+ - Nueva sección "📚 Documentación" en README con enlaces organizados
41
+ - Categorías: Guías de Usuario, Documentación Técnica, Análisis y Referencia
42
+ - README simplificado con enlaces a guías completas
43
+
44
+ **Compatibilidad Baserow 1.35.3:**
45
+
46
+ - Actualizada sección de compatibilidad en README
47
+ - Análisis de impacto completo: `docs/BASEROW_1.35.3_IMPACT_ANALYSIS.md`
48
+ - Mejoras automáticas documentadas: búsquedas optimizadas, filtros robustos, permisos expandidos
49
+ - Date Dependency: documentada nueva funcionalidad de Baserow (configuración via UI)
50
+ - PostgreSQL Sync: documentado caso de uso con sincronización bidireccional
51
+
52
+ **Sin Breaking Changes** - Upgrade seguro desde v1.35.0+
53
+
54
+ ## 1.1.1
55
+
56
+ ### Patch Changes
57
+
58
+ #### 📦 Exportaciones de Tipos para Contextos
59
+
60
+ - **Exportados como tipos**: `DatabaseContext`, `TableContext` y `WorkspaceContext`
61
+ - **Uso**: Tipado avanzado en clases singleton y wrappers customizados
62
+ - **Encapsulación**: Solo tipos, no permite instanciación directa
63
+ - **Consistencia**: Alineado con exportaciones de clientes especializados
64
+
65
+ ## 1.1.0
66
+
67
+ ### Minor Changes
68
+
69
+ #### ✨ Keep-Alive con Re-Login Automático
70
+
71
+ - **Solución para backends 24/7**: Keep-alive ejecuta re-login automático cada 5 días para prevenir expiración del refresh token
72
+ - **Limitación identificada**: El refresh token de Baserow expira 7 días FIJOS desde el login (NO se renueva al hacer refresh)
73
+ - **Default inteligente**: 7200 min (5 días) con margen de seguridad de 2 días
74
+ - **Seguridad documentada**: Advertencias claras sobre almacenamiento de credenciales en memoria
75
+ - **Tests completos**: 7 tests validando re-login periódico, detención automática y manejo de errores
76
+
77
+ #### 📚 Documentación
78
+
79
+ - **README actualizado**: Sección keep-alive con explicación de limitación real de Baserow
80
+ - **KEEP_ALIVE.md completo**: Guía exhaustiva con FAQ, ejemplos y comparación refresh vs re-login
81
+ - **Ejemplos actualizados**: Backend Express con keep-alive configurado correctamente
82
+
83
+ ## 1.0.5
84
+
85
+ ### Patch Changes
86
+
87
+ #### 📚 JSDoc AI-Optimizado para Asistentes de IA
88
+
89
+ - **~1,000 líneas de JSDoc mejorado** con tags especializados para Claude, Copilot y ChatGPT
90
+ - **@aiComparison**: Matriz de selección con 12 escenarios reales (Frontend, Backend, Serverless, etc.)
91
+ - **@aiDecisionFactors**: 5 factores clave para elegir cliente correcto
92
+ - **@aiPattern**: 5 patrones de uso en PrismaMapper + 2 wrappers reutilizables (withAutoRelogin, SessionManager)
93
+ - **@aiUsage**: Documentación exhaustiva de operaciones bulk (listAll, createBulk, updateBulk, deleteBulk)
94
+ - **@aiLimitation**: Limitaciones de Baserow API documentadas (OR anidado, IN múltiple, DISTINCT)
95
+ - **@aiErrorHandling**: Casos de re-login y manejo de sesiones expiradas
96
+ - **@aiPerformance**: Optimizaciones de queries y batch sizes
97
+
98
+ #### 📦 Package Optimizado para Debugging y AI
99
+
100
+ - **Código fuente incluido**: Directorio `src/` completo en package (58 archivos)
101
+ - **Source maps con código inline**: `sourcesContent` embebido para debugging completo
102
+ - **Triple soporte**:
103
+ 1. Source maps → debuggers (Chrome DevTools, VS Code)
104
+ 2. Archivos `src/` → IDEs pueden "Go to Definition" al source real
105
+ 3. JSDoc completos con tags @ai\* → Asistentes de IA
106
+ - **Package size**: 390.9 KB comprimido, 1.9 MB descomprimido
107
+
108
+ #### 🎯 Impacto Esperado
109
+
110
+ - **Antes**: IA infiere de ejemplos dispersos (~60% precisión)
111
+ - **Después**: IA usa contexto estructurado (~95% precisión)
112
+ - Generación de código funcional sin consultar docs externas
113
+
114
+ ## 1.0.4
115
+
116
+ ### Patch Changes
117
+
118
+ #### 🐛 Bug Fixes - Manejo de Refresh Token Expirado
119
+
120
+ - **Nuevo Error Específico**: `BaserowReLoginRequiredError`
121
+ - Distingue entre access token expirado (renovable) y refresh token expirado (requiere re-login)
122
+ - Razones específicas: `refresh_token_expired`, `session_expired`, `tokens_lost`
123
+ - Mensajes claros y accionables para el usuario
124
+ - **AuthService Mejorado**: Detección específica de refresh token expirado (~7 días)
125
+ - Logging detallado con emojis y timestamps en login y refresh
126
+ - Mensajes informativos sobre duración de tokens
127
+ - **Nuevos Métodos Helper**:
128
+ - `needsReLogin()`: Detecta proactivamente si necesita re-autenticación
129
+ - `getAuthStatus()`: Estado detallado de autenticación (tokens, expiración, etc.)
130
+
131
+ #### 📚 Documentación
132
+
133
+ - **DIAGNOSTICO_UNAUTHORIZED.md**: Guía completa sobre error "Unauthorized" después de inactividad
134
+ - Explicación de expiración de tokens (access: 10-15 min, refresh: ~7 días)
135
+ - Patrón recomendado con `executeWithAuth()` para re-login automático
136
+ - Ejemplos de uso con manejo de errores
137
+
138
+ #### 🔍 Causa Raíz del Problema
139
+
140
+ El error "Unauthorized" después de ~6 horas de inactividad era causado por:
141
+
142
+ - Refresh token de Baserow que expira después de ~7 días
143
+ - Sin distinción entre tipos de errores 401
144
+ - Imposible detectar proactivamente la expiración
145
+
146
+ **Solución**: Ahora puedes detectar y manejar refresh token expirado automáticamente.
147
+
148
+ ## 1.0.3
149
+
150
+ ### Patch Changes
151
+
152
+ #### 🐛 Bug Fixes Críticos
153
+
154
+ - **Auto-refresh JWT**: Corregido bug crítico en orden de inicialización
155
+ - `setupJwtTokens()` ahora se ejecuta ANTES de `setupAutoRefresh()`
156
+ - Previene error "Unauthorized - check your token" por tokens no transferidos
157
+ - Afecta a `ClientWithCreds` y `ClientWithCredsWs`
158
+ - **AuthService**: Tokens correctamente almacenados antes de configurar interceptor
159
+ - `accessToken`, `refreshToken` y `tokenExpiry` disponibles para auto-refresh
160
+ - Interceptor puede hacer refresh correctamente en errores 401
161
+
162
+ #### 📚 Documentación
163
+
164
+ - **ROADMAP.md**: Agregado plan de refactoring de autenticación para v2.0.0
165
+ - Eliminar memory leak de recursos temporales (tempHttp/tempAuth)
166
+ - Login directo sin AuthService temporal
167
+ - Cleanup explícito de recursos
168
+
169
+ #### 🧪 Testing
170
+
171
+ - ✅ Tests de refresh token pasan sin errores (9/9)
172
+ - ✅ Validación de auto-refresh interceptor funcional
173
+
174
+ ## 1.0.2
175
+
176
+ ### Patch Changes
177
+
178
+ #### 🧪 Error Handling Tests - Servicios Base
179
+
180
+ **Mejoras significativas en cobertura de error handling (+17%)**
181
+
182
+ - **Helpers Reutilizables**: Nuevos helpers para testing de errores
183
+ - `tests/helpers/error-assertions.ts` (183 líneas) - Funciones: `expectBaserowError()`, `expectValidationError()`, `expectNotFound()`, `expectForbidden()`
184
+ - `tests/fixtures/invalid-data.ts` (242 líneas) - Fixtures: `INVALID_NAMES`, `INVALID_EMAILS`, `INVALID_NUMBERS`, `INVALID_DATES`
185
+ - Patrón DRY para tests de error consistentes
186
+
187
+ - **Tests de Error para Database Service** (8 nuevos tests)
188
+ - ✅ 404: BaserowNotFoundError para database con ID inexistente
189
+ - ✅ 404: findUnique retorna null para nombre inexistente
190
+ - ✅ 400/422: Validación de nombres vacíos (empty, solo espacios)
191
+ - ✅ 422: Validación de nombres demasiado largos (>255 chars)
192
+ - ✅ 404: Error en update/delete de database inexistente
193
+ - ✅ 404: exists() retorna false para database inexistente
194
+
195
+ - **Tests de Error para Table Service** (9 nuevos tests)
196
+ - ✅ 404: BaserowNotFoundError para table con ID inexistente
197
+ - ✅ 404: findUnique retorna null para nombre inexistente
198
+ - ✅ 400/422: Validación de nombres vacíos y longitud
199
+ - ✅ Comportamiento Baserow: Acepta headers vacíos, caracteres especiales
200
+ - ✅ 404: Error en update/delete/exists de table inexistente
201
+
202
+ - **Tests de Error para Field Service - Básicos** (10 nuevos tests)
203
+ - ✅ 404: BaserowNotFoundError para field con ID inexistente
204
+ - ✅ 400/422: Validación de nombres vacíos y longitud
205
+ - ✅ 400: Validación de decimales negativos en campos number
206
+ - ✅ Validación: Campos number con decimales válidos (0-10)
207
+ - ✅ 404: Error en update/delete/exists de field inexistente
208
+ - ✅ Comportamiento Baserow: Acepta caracteres especiales en nombres
209
+
210
+ - **Tests de Error para Field Service - Avanzados** (7 nuevos tests)
211
+ - ✅ 404: BaserowNotFoundError para campos avanzados con ID inexistente
212
+ - ✅ 400/422: Validación de count sin link_row_table_id válido
213
+ - ✅ 400/422: Validación de rollup sin parámetros requeridos
214
+ - ✅ 400/422: Validación de lookup sin parámetros requeridos
215
+ - ✅ Validación: Campos avanzados con nombres válidos (file, autonumber, etc.)
216
+
217
+ **Métricas de Mejora**:
218
+
219
+ - Total tests de error agregados: **34 tests**
220
+ - Total tests pasando: **60 tests**
221
+ - Archivos con error handling completo: 25% → **42% (+17%)**
222
+ - Archivos con error handling parcial: 67% → **50% (-17%)**
223
+ - Tiempo invertido: 16-20 horas
224
+
225
+ **Documentación**:
226
+
227
+ - `TESTING_PLAN.md` actualizado con progreso completo
228
+ - Patrones de testing documentados y validados
229
+ - Siguiente objetivo: admin-row.test.ts (6-8 horas)
230
+
231
+ ## 1.0.1
232
+
233
+ ### Patch Changes
234
+
235
+ #### 🔐 Mejoras en Autenticación JWT
236
+
237
+ - **JWT Expiry Decoder**: Nueva utilidad `jwt-decoder.ts` para decodificar claim `exp` del JWT
238
+ - Precisión de TTL leída directamente del token (estándar JWT RFC 7519)
239
+ - No asume TTL hardcoded, funciona si Baserow cambia configuración
240
+ - Fallback conservador de 10min si no se puede decodificar
241
+ - **Errores Específicos**: Nuevas clases `BaserowAuthTokenExpiredError` y `BaserowAuthTokenInvalidError`
242
+ - Mensajes accionables para el usuario (re-login requerido vs token corrupto)
243
+ - Códigos de error específicos: `AUTH_TOKEN_EXPIRED`, `AUTH_TOKEN_INVALID`
244
+ - **Logging Mejorado**: Mensajes claros en refresh exitoso/fallido con emojis informativos
245
+
246
+ #### 🧪 Testing Mejorado
247
+
248
+ - **Auth Refresh Tests**: Nueva suite `auth-refresh-token.test.ts` con 9 tests
249
+ - Login y obtención de tokens JWT
250
+ - Refresh token con validación funcional (consulta GET `/workspaces/`)
251
+ - Detección automática de token expirado
252
+ - Limpieza de tokens después de refresh fallido
253
+ - Validación de credenciales incorrectas
254
+ - Auto-refresh interceptor configurado correctamente
255
+ - **JWT Decoder Tests**: Suite `jwt-decoder.test.ts` con casos válidos/inválidos
256
+ - Validación de tokens JWT bien formados
257
+ - Manejo de tokens malformados o sin claim `exp`
258
+ - **Admin Client Rows Tests**: Correcciones para tests más resilientes
259
+ - Tolerancia para datos residuales en conteos (51 vs 50 esperado)
260
+ - Conversión automática de tipos (edad string → number)
261
+ - Extracción correcta de `.value` para campos `select` y `multiple_select`
262
+ - Expects más flexibles para filtros AND de multiple_select
263
+ - **Admin Client ListAll Tests**: Orden de ejecución corregido
264
+ - Cleanup Global movido al final (no interfiere con otros tests)
265
+ - Validaciones de recursos antes de uso
266
+ - **Fixtures y Helpers**: Tests helpers reutilizables en `tests/helpers/`
267
+ - **Ejecución Secuencial**: Configurado `fileParallelism: false` en Vitest
268
+ - Previene interferencias entre tests que comparten recursos
269
+ - Tests más predecibles y determinísticos
270
+
271
+ #### 📚 Documentación
272
+
273
+ - **README**: Nueva sección "Autenticación y Refresh Tokens" con ejemplos
274
+ - Persistencia de tokens por instancia (en memoria)
275
+ - Auto-refresh en errores 401
276
+ - Manejo de errores de autenticación
277
+ - Tabla de códigos de error específicos
278
+ - **TESTING_PLAN.md**: Documento con estrategia de testing comprehensiva
279
+ - Plan de testing por módulos
280
+ - Cobertura actual y objetivos
281
+
282
+ #### 🐛 Bug Fixes
283
+
284
+ - **AuthService**: Fallback conservador si no se puede decodificar exp del JWT
285
+ - Usa 10min en vez de fallar completamente
286
+ - Logging de warning cuando usa fallback
287
+ - **Test Validation**: Test de refresh token ahora valida que funciona con request real
288
+ - No solo valida que obtiene un nuevo token string
289
+ - Hace consulta GET `/workspaces/` para confirmar funcionamiento
290
+
291
+ #### 🔧 Internal Improvements
292
+
293
+ - **Vitest Config**: `fileParallelism: false` para tests determinísticos
294
+ - **Type Safety**: Mejor manejo de tipos en tests (conversiones explícitas)
295
+
296
+ ## 1.0.0
297
+
298
+ ### Major Features
299
+
300
+ #### ✨ Arquitectura de Tres Clientes
301
+
302
+ - **BaserowClient** - Cliente simple para operaciones CRUD con Database Token
303
+ - API jerárquica: `client.database(id).table(id).rows.list()`
304
+ - Solo lectura/escritura de datos, sin administración
305
+ - Ideal para aplicaciones cliente
306
+
307
+ - **BaserowAdminGlobal** - Cliente administrativo con acceso global
308
+ - JWT authentication con auto-refresh
309
+ - API jerárquica global: `admin.workspace('name').database('name').create()`
310
+ - Acceso a todos los workspaces
311
+ - Ideal para scripts de administración
312
+
313
+ - **BaserowAdminWorkspace** - Cliente administrativo restringido a workspace
314
+ - JWT authentication con validación de workspace
315
+ - API simplificada: `admin.database('name').create()`
316
+ - Acceso directo sin prefijo workspace
317
+ - Ideal para aplicaciones con scope limitado
318
+
319
+ #### 🔧 Cobertura Completa de Campos (21/22 tipos - 95%)
320
+
321
+ - **Campos de Texto**: `text`, `long_text`, `url`, `email`, `phone_number`
322
+ - **Campos Numéricos**: `number`, `boolean`, `rating`
323
+ - **Campos de Fecha**: `date`, `last_modified`, `last_modified_by`, `created_on`, `created_by`
324
+ - **Campos de Selección**: `single_select`, `multiple_select`
325
+ - **Campos Relacionales**: `link_row`, `formula`
326
+ - **Campos Avanzados**: `file`, `autonumber`, `count`, `rollup`, `lookup`
327
+
328
+ #### ⚡ Operaciones Bulk Optimizadas
329
+
330
+ - `createBulk()` - Crear múltiples filas en lotes
331
+ - `updateBulk()` - Actualizar múltiples filas con chunking
332
+ - `deleteBulk()` - Eliminar múltiples filas eficientemente
333
+ - `listAll()` - Descargar tablas completas con paginación automática
334
+
335
+ #### 🌐 API Jerárquica Intuitiva
336
+
337
+ - Resolución automática de nombres a IDs
338
+ - Validación de contextos y permisos
339
+ - Sintaxis fluida que refleja estructura de Baserow
340
+ - Tipado fuerte con autocompletado completo
341
+
342
+ ### Core Services
343
+
344
+ - 🗄️ **DatabaseService** - CRUD completo de bases de datos
345
+ - 📊 **TableService** - CRUD completo de tablas con schema
346
+ - 🔧 **FieldService** - CRUD completo de campos con API fluida por tipo
347
+ - 📝 **RowService** - CRUD completo de filas con operaciones bulk y `listAll()`
348
+ - 👥 **WorkspaceService** - Gestión de workspaces y permisos
349
+ - 🔑 **DatabaseTokenService** - Gestión de Database Tokens
350
+ - 🔐 **AuthService** - Autenticación JWT con auto-refresh
351
+
352
+ ### Technical Improvements
353
+
354
+ #### 🚀 HttpClient Simplificado (36% menos código)
355
+
356
+ - **Antes**: 549 líneas con `agentkeepalive` y lógica custom
357
+ - **Después**: 352 líneas usando plugins oficiales de Axios
358
+ - `axios-retry` v4.5.0 para retry logic con backoff exponencial
359
+ - `axios-rate-limit` v1.4.0 para rate limiting robusto
360
+ - Connection pooling automático vía Node.js 20+ globalAgent
361
+
362
+ #### 🔒 Error Handling Robusto
363
+
364
+ - `BaserowError` - Error base con status code y detalles
365
+ - `BaserowValidationError` - Errores de validación con campo específico
366
+ - `BaserowNotFoundError` - Recursos no encontrados con contexto
367
+ - `BaserowRateLimitError` - Rate limiting con tiempo de espera
368
+
369
+ #### 🛠️ Utilidades de Autenticación
370
+
371
+ - `verifyLogin()` - Verificar credenciales sin crear cliente
372
+ - `verifyBaserowHealth()` - Health check del servidor
373
+ - Ideal para formularios de login y validación de configuración
374
+
375
+ ### Testing & Quality
376
+
377
+ #### ✅ Suite Completa de Tests (35+ tests)
378
+
379
+ - **Smoke Tests**: Tests CI sin credenciales requeridas
380
+ - **Integration Tests**: Tests completos con Baserow real
381
+ - **Field Tests**: Suite completa para 21 tipos de campos
382
+ - **Bulk Operations**: Tests para `createBulk`, `updateBulk`, `deleteBulk`, `listAll`
383
+ - **Admin Tests**: Validación de arquitectura de tres clientes
384
+
385
+ #### 📚 TypeScript Strict Compliance
386
+
387
+ - Tipado fuerte con validación de contextos
388
+ - Autocompletado completo en IDEs
389
+ - Validaciones en tiempo de compilación
390
+ - Project references compatible
391
+
392
+ ### Migration & Breaking Changes
393
+
394
+ #### 🔄 Nueva Arquitectura (Breaking Changes)
395
+
396
+ - **Antes**: `BaserowAdmin` único para todo
397
+ - **Después**: Tres clientes especializados según caso de uso
398
+ - **Migration Path**: Guías detalladas en README para migrar
399
+
400
+ #### ✨ API Mejorada
401
+
402
+ - **Antes**: `admin.databases.create({ name: 'DB', workspace_id: 123 })`
403
+ - **Después**: `admin.workspace('WS').database('DB').create()`
404
+ - Resolución automática de nombres, validación de permisos
405
+
406
+ ### Developer Experience
407
+
408
+ #### 🛠️ Herramientas Modernas
409
+
410
+ - **tsup**: Build 5-10x más rápido que tsc
411
+ - **ESLint**: Reglas optimizadas para librerías de API
412
+ - **Vitest**: Testing framework moderno con TypeScript nativo
413
+ - **Git Submodule**: Desarrollo independiente con integración en Atlas
414
+
415
+ #### 📖 Documentación Comprehensiva
416
+
417
+ - README completo con ejemplos para cada cliente
418
+ - 21 tipos de campos documentados con API fluida
419
+ - Guías de migración y casos de uso
420
+ - Referencia completa de API y tipos TypeScript
421
+
422
+ ### Performance & Reliability
423
+
424
+ - ⚡ **Rate Limiting**: Plugin oficial con queue automático
425
+ - 🔄 **Retry Logic**: Plugin oficial con backoff exponencial probado
426
+ - 🔗 **Connection Pooling**: Node.js 20+ keepAlive nativo
427
+ - 📊 **Bulk Operations**: Chunking automático para operaciones masivas
428
+ - 🏗️ **Memory Efficient**: `listAll()` con paginación interna optimizada
429
+
430
+ ### Compatibility
431
+
432
+ - **Node.js**: >=20.19.5 (aprovecha features modernas)
433
+ - **TypeScript**: v5.6.3 strict mode
434
+ - **Package Manager**: pnpm >=8.0.0
435
+ - **Module System**: ESM puro con compatibilidad CommonJS