@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
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Tipos para requests a la API de Baserow
3
+ */
4
+
5
+ export interface CreateTableRequest {
6
+ name: string
7
+ data?: Array<any>
8
+ first_row_header?: boolean
9
+ /**
10
+ * Controla si se debe limpiar automáticamente el contenido por defecto que Baserow
11
+ * agrega cuando se crea una tabla sin datos. Default: true (limpieza automática)
12
+ * @since 1.0.0
13
+ */
14
+ skipDefaultCleanup?: boolean
15
+ }
16
+
17
+ export interface UpdateTableRequest {
18
+ name?: string
19
+ }
20
+
21
+ export interface CreateRowRequest {
22
+ [fieldName: string]: any
23
+ before_id?: number
24
+ }
25
+
26
+ export interface UpdateRowRequest {
27
+ [fieldName: string]: any
28
+ }
29
+
30
+ export interface BulkCreateRowsRequest {
31
+ items: CreateRowRequest[]
32
+ }
33
+
34
+ export interface BulkUpdateRowsRequest {
35
+ items: Array<{
36
+ id: number
37
+ [fieldName: string]: any
38
+ }>
39
+ }
40
+
41
+ export interface CreateSnapshotRequest {
42
+ name: string
43
+ snapshot_from_application: number
44
+ }
45
+
46
+ export interface RestoreSnapshotRequest {
47
+ workspace_id: number
48
+ }
49
+
50
+ export interface CreateWebhookRequest {
51
+ url: string
52
+ include_all_events?: boolean
53
+ events?: string[]
54
+ headers?: Record<string, string>
55
+ active?: boolean
56
+ }
57
+
58
+ export interface UpdateWebhookRequest extends Partial<CreateWebhookRequest> {}
59
+
60
+ export interface CreateUserRequest {
61
+ email: string
62
+ first_name: string
63
+ last_name?: string
64
+ password: string
65
+ is_active?: boolean
66
+ is_staff?: boolean
67
+ }
68
+
69
+ export interface UpdateUserRequest {
70
+ first_name?: string
71
+ last_name?: string
72
+ is_active?: boolean
73
+ is_staff?: boolean
74
+ language?: string
75
+ }
76
+
77
+ export interface EmailTestRequest {
78
+ email: string
79
+ }
80
+
81
+ /**
82
+ * Operadores de filtro estilo Prisma para campos individuales
83
+ *
84
+ * Proporciona operadores avanzados de filtrado similares a Prisma ORM
85
+ * para crear consultas expresivas y type-safe.
86
+ *
87
+ * @template T - Tipo del valor del campo
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * // Filtros numéricos
92
+ * const ageFilter: FieldOperators<number> = {
93
+ * gte: 18,
94
+ * lt: 65
95
+ * }
96
+ *
97
+ * // Filtros de texto
98
+ * const emailFilter: FieldOperators<string> = {
99
+ * contains: '@company.com',
100
+ * not: 'admin@company.com'
101
+ * }
102
+ * ```
103
+ *
104
+ * @since 1.2.0
105
+ */
106
+ export interface FieldOperators<T = any> {
107
+ /** Igual a valor específico */
108
+ equals?: T
109
+ /** Diferente de valor específico */
110
+ not?: T
111
+ /** Valor está en la lista */
112
+ in?: T[]
113
+ /** Valor no está en la lista */
114
+ notIn?: T[]
115
+ /** Campo de texto contiene substring (case-insensitive) */
116
+ contains?: string
117
+ /** Campo de texto NO contiene substring */
118
+ contains_not?: string
119
+ /** Campo de texto empieza con substring */
120
+ startsWith?: string
121
+ /** Campo de texto termina con substring */
122
+ endsWith?: string
123
+ /** Mayor que (números, fechas) */
124
+ gt?: number | Date
125
+ /** Mayor o igual que (números, fechas) */
126
+ gte?: number | Date
127
+ /** Menor que (números, fechas) */
128
+ lt?: number | Date
129
+ /** Menor o igual que (números, fechas) */
130
+ lte?: number | Date
131
+ /** Campo está vacío o es null (alias: empty) */
132
+ isEmpty?: boolean
133
+ /** Campo está vacío o es null (sintaxis Baserow) */
134
+ empty?: boolean
135
+ /** Campo no está vacío y no es null (alias: notEmpty) */
136
+ isNotEmpty?: boolean
137
+ /** Campo no está vacío y no es null (sintaxis Baserow) */
138
+ notEmpty?: boolean
139
+ }
140
+
141
+ /**
142
+ * Cláusula WHERE estilo Prisma con operadores lógicos
143
+ *
144
+ * Permite construir consultas complejas con operadores AND, OR y NOT
145
+ * combinados con filtros de campo específicos.
146
+ *
147
+ * @template T - Tipo del modelo/entidad
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const where: WhereClause<User> = {
152
+ * AND: [
153
+ * { status: 'active' },
154
+ * { age: { gte: 18, lt: 65 } }
155
+ * ],
156
+ * OR: [
157
+ * { department: 'Engineering' },
158
+ * { role: 'Manager' }
159
+ * ],
160
+ * email: { contains: '@company.com' }
161
+ * }
162
+ * ```
163
+ *
164
+ * @since 1.2.0
165
+ */
166
+ export interface WhereClause<T = any> {
167
+ /** Filtros por campo con operadores o valores directos */
168
+ [key: string]: any
169
+ /** Operador AND: todas las condiciones deben cumplirse */
170
+ AND?: WhereClause<T>[]
171
+ /** Operador OR: al menos una condición debe cumplirse */
172
+ OR?: WhereClause<T>[]
173
+ /** Operador NOT: ninguna condición debe cumplirse */
174
+ NOT?: WhereClause<T>
175
+ }
176
+
177
+ /**
178
+ * Configuración de ordenamiento estilo Prisma
179
+ *
180
+ * Soporta ordenamiento por uno o múltiples campos con dirección
181
+ * ascendente ('asc') o descendente ('desc').
182
+ *
183
+ * @template T - Tipo del modelo/entidad
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * // Ordenamiento simple
188
+ * const orderBy: OrderByClause<User> = { name: 'asc' }
189
+ *
190
+ * // Ordenamiento múltiple
191
+ * const multiOrder: OrderByClause<User> = [
192
+ * { created_at: 'desc' },
193
+ * { name: 'asc' }
194
+ * ]
195
+ * ```
196
+ *
197
+ * @since 1.2.0
198
+ */
199
+ export type OrderByClause<T = any> = { [K in keyof T]?: 'asc' | 'desc' } | Array<{ [K in keyof T]?: 'asc' | 'desc' }>
200
+
201
+ /**
202
+ * Configuración de selección de campos estilo Prisma
203
+ *
204
+ * Permite especificar qué campos incluir (true) o excluir (false)
205
+ * en los resultados de la consulta.
206
+ *
207
+ * @template T - Tipo del modelo/entidad
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * const select: SelectClause<User> = {
212
+ * id: true,
213
+ * name: true,
214
+ * email: true,
215
+ * password: false // Excluir campo sensible
216
+ * }
217
+ * ```
218
+ *
219
+ * @since 1.2.0
220
+ */
221
+ export type SelectClause<T = any> = {
222
+ [K in keyof T]?: boolean
223
+ }
224
+
225
+ /**
226
+ * Opciones de consulta estilo Prisma
227
+ *
228
+ * Interface principal que combina todas las capacidades de filtrado,
229
+ * ordenamiento, paginación y selección de campos en un formato
230
+ * familiar para desarrolladores de Prisma.
231
+ *
232
+ * @template T - Tipo del modelo/entidad
233
+ *
234
+ * @example
235
+ * ```typescript
236
+ * const options: PrismaLikeQueryOptions<User> = {
237
+ * where: {
238
+ * status: 'active',
239
+ * age: { gte: 18 },
240
+ * email: { contains: '@company.com' }
241
+ * },
242
+ * select: {
243
+ * id: true,
244
+ * name: true,
245
+ * email: true
246
+ * },
247
+ * orderBy: [
248
+ * { created_at: 'desc' },
249
+ * { name: 'asc' }
250
+ * ],
251
+ * take: 20,
252
+ * skip: 0
253
+ * }
254
+ * ```
255
+ *
256
+ * @since 1.2.0
257
+ */
258
+ export interface PrismaLikeQueryOptions<T = any> {
259
+ /** Filtros y condiciones de búsqueda */
260
+ where?: WhereClause<T>
261
+ /** Selección de campos a incluir/excluir */
262
+ select?: SelectClause<T>
263
+ /** Configuración de ordenamiento */
264
+ orderBy?: OrderByClause<T>
265
+ /** Número máximo de registros a retornar (equivale a 'size') */
266
+ take?: number
267
+ /** Número de registros a saltar (para paginación) */
268
+ skip?: number
269
+ /** Campos para eliminar duplicados */
270
+ distinct?: (keyof T)[]
271
+ /** Usar nombres de usuario para campos (específico de Baserow) */
272
+ userFieldNames?: boolean
273
+ }
274
+
275
+ /**
276
+ * Opciones de consulta extendidas con compatibilidad legacy
277
+ *
278
+ * Mantiene la interface original QueryOptions mientras agrega
279
+ * soporte completo para sintaxis estilo Prisma. Permite migración
280
+ * gradual sin romper código existente.
281
+ *
282
+ * @example
283
+ * ```typescript
284
+ * // Sintaxis Prisma (nueva)
285
+ * const prismaStyle: QueryOptions = {
286
+ * where: { status: 'active' },
287
+ * take: 10,
288
+ * orderBy: { created_at: 'desc' }
289
+ * }
290
+ *
291
+ * // Sintaxis legacy (compatible)
292
+ * const legacyStyle: QueryOptions = {
293
+ * filters: { status: 'active' },
294
+ * size: 10,
295
+ * order_by: '-created_at'
296
+ * }
297
+ * ```
298
+ *
299
+ * @since 1.2.0
300
+ */
301
+ export interface QueryOptions extends PrismaLikeQueryOptions {
302
+ // === OPCIONES LEGACY (compatibilidad) ===
303
+ /** Número de página (legacy) */
304
+ page?: number
305
+ /** Tamaño de página (legacy) */
306
+ size?: number
307
+ /** Búsqueda en todos los campos (legacy) */
308
+ search?: string
309
+ /** String de ordenamiento Baserow (legacy) */
310
+ order_by?: string
311
+ /** Filtros en formato Baserow (Record con query parameters) */
312
+ filters?: Record<string, any>
313
+ /**
314
+ * Tipo de filtro para combinar múltiples filtros
315
+ * - 'AND': Todos los filtros deben cumplirse (default)
316
+ * - 'OR': Al menos un filtro debe cumplirse
317
+ * @default 'AND'
318
+ */
319
+ filter_type?: 'AND' | 'OR'
320
+ /** Campos a incluir (legacy) */
321
+ include?: string[]
322
+ /** Campos a excluir (legacy) */
323
+ exclude?: string[]
324
+ /** Usar nombres de usuario (legacy) */
325
+ user_field_names?: boolean
326
+ }
327
+
328
+ export interface BulkOptions {
329
+ batchSize?: number
330
+ maxBatchSize?: number
331
+ send_webhook_events?: boolean
332
+ user_field_names?: boolean
333
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Tipos para responses de la API de Baserow
3
+ */
4
+
5
+ export interface BaserowResponse<T = any> {
6
+ count: number
7
+ next: string | null
8
+ previous: string | null
9
+ results: T[]
10
+ }
11
+
12
+ export interface Snapshot {
13
+ id: number
14
+ name: string
15
+ snapshot_from_application: number
16
+ created_at: string
17
+ created_by: {
18
+ id: number
19
+ first_name: string
20
+ username: string
21
+ }
22
+ mark_for_deletion: boolean
23
+ }
24
+
25
+ export interface Webhook {
26
+ id: number
27
+ table_id: number
28
+ url: string
29
+ include_all_events: boolean
30
+ events: string[]
31
+ headers: Record<string, string>
32
+ active: boolean
33
+ created_on: string
34
+ }
35
+
36
+ export interface WebhookCall {
37
+ id: number
38
+ event_type: string
39
+ called_time: string
40
+ called_url: string
41
+ request: any
42
+ response: any
43
+ response_status: number
44
+ }
45
+
46
+ export interface HealthCheck {
47
+ status: 'healthy' | 'unhealthy'
48
+ checks?: Record<string, string>
49
+ timestamp?: string
50
+ }