@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
|
@@ -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
|
+
}
|