@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.
- package/CHANGELOG.md +435 -0
- package/README.md +847 -0
- package/dist/index.d.ts +8749 -0
- package/dist/index.js +11167 -0
- package/dist/index.js.map +1 -0
- package/package.json +91 -0
- package/src/BaserowClient.ts +501 -0
- package/src/ClientWithCreds.ts +545 -0
- package/src/ClientWithCredsWs.ts +852 -0
- package/src/ClientWithToken.ts +171 -0
- package/src/contexts/DatabaseClientContext.ts +114 -0
- package/src/contexts/DatabaseContext.ts +870 -0
- package/src/contexts/DatabaseTokenContext.ts +331 -0
- package/src/contexts/FieldContext.ts +399 -0
- package/src/contexts/RowContext.ts +99 -0
- package/src/contexts/TableClientContext.ts +291 -0
- package/src/contexts/TableContext.ts +1247 -0
- package/src/contexts/TableOnlyContext.ts +74 -0
- package/src/contexts/WorkspaceContext.ts +490 -0
- package/src/express/errors.ts +260 -0
- package/src/express/index.ts +69 -0
- package/src/express/middleware.ts +225 -0
- package/src/express/serializers.ts +314 -0
- package/src/index.ts +247 -0
- package/src/presets/performance.ts +262 -0
- package/src/services/AuthService.ts +472 -0
- package/src/services/DatabaseService.ts +246 -0
- package/src/services/DatabaseTokenService.ts +186 -0
- package/src/services/FieldService.ts +1543 -0
- package/src/services/RowService.ts +982 -0
- package/src/services/SchemaControlService.ts +420 -0
- package/src/services/TableService.ts +781 -0
- package/src/services/WorkspaceService.ts +113 -0
- package/src/services/core/BaseAuthClient.ts +111 -0
- package/src/services/core/BaseClient.ts +107 -0
- package/src/services/core/BaseService.ts +71 -0
- package/src/services/core/HttpService.ts +115 -0
- package/src/services/core/ValidationService.ts +149 -0
- package/src/types/auth.ts +177 -0
- package/src/types/core.ts +91 -0
- package/src/types/errors.ts +105 -0
- package/src/types/fields.ts +456 -0
- package/src/types/index.ts +222 -0
- package/src/types/requests.ts +333 -0
- package/src/types/responses.ts +50 -0
- package/src/types/schema.ts +446 -0
- package/src/types/tokens.ts +36 -0
- package/src/types.ts +11 -0
- package/src/utils/auth.ts +174 -0
- package/src/utils/axios.ts +647 -0
- package/src/utils/field-cache.ts +164 -0
- package/src/utils/httpFactory.ts +66 -0
- package/src/utils/jwt-decoder.ts +188 -0
- package/src/utils/jwtTokens.ts +50 -0
- package/src/utils/performance.ts +105 -0
- package/src/utils/prisma-mapper.ts +961 -0
- package/src/utils/validation.ts +463 -0
- 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
|