@hablala/api-contract 0.6.0 → 0.7.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/data/image-classification-cases.json +69 -0
- package/data/image-extensions.json +4 -0
- package/dist/index.d.ts +627 -36
- package/openapi.json +1031 -51
- package/package.json +5 -2
package/dist/index.d.ts
CHANGED
|
@@ -1040,8 +1040,8 @@ interface paths {
|
|
|
1040
1040
|
get?: never;
|
|
1041
1041
|
put?: never;
|
|
1042
1042
|
/**
|
|
1043
|
-
* Pedir
|
|
1044
|
-
* @description Como el presign de organización, pero el blob se namespacea por usuario.
|
|
1043
|
+
* Pedir un sobre de subida prefirmado (adjunto personal)
|
|
1044
|
+
* @description Como el presign de organización, pero el blob se namespacea por usuario. Devuelve un sobre auto-descriptivo (`method`/`url`/`fields`/`headers`); el cliente sube según `method` y referencia `fileUrl` en los adjuntos del mensaje.
|
|
1045
1045
|
*/
|
|
1046
1046
|
post: operations["HablalaApiWeb.Me.UploadController.presign"];
|
|
1047
1047
|
delete?: never;
|
|
@@ -1138,7 +1138,7 @@ interface paths {
|
|
|
1138
1138
|
put?: never;
|
|
1139
1139
|
/**
|
|
1140
1140
|
* Canjear un grant por un access token (RFC 6749/8628)
|
|
1141
|
-
* @description `grant_type=authorization_code` (loopback + PKCE) o `grant_type=urn:ietf:params:oauth:grant-type:device_code` (polling del device flow). El `access_token` devuelto es un `
|
|
1141
|
+
* @description `grant_type=authorization_code` (loopback + PKCE) o `grant_type=urn:ietf:params:oauth:grant-type:device_code` (polling del device flow). El `access_token` devuelto es un `mat_…` normal; guárdalo, no se puede recuperar.
|
|
1142
1142
|
*/
|
|
1143
1143
|
post: operations["HablalaApiWeb.Oauth.TokenController.create"];
|
|
1144
1144
|
delete?: never;
|
|
@@ -1241,6 +1241,26 @@ interface paths {
|
|
|
1241
1241
|
patch?: never;
|
|
1242
1242
|
trace?: never;
|
|
1243
1243
|
};
|
|
1244
|
+
"/v1/objects/{object_slug}/records/trash": {
|
|
1245
|
+
parameters: {
|
|
1246
|
+
query?: never;
|
|
1247
|
+
header?: never;
|
|
1248
|
+
path?: never;
|
|
1249
|
+
cookie?: never;
|
|
1250
|
+
};
|
|
1251
|
+
/**
|
|
1252
|
+
* Listar los records borrados (soft) del objeto — la Papelera
|
|
1253
|
+
* @description Lista los records SOFT-DELETED del objeto (`deleted_at IS NOT NULL`), para restaurarlos. Misma lectura gobernada que `POST /query` (RBAC + ABAC por fila + field_mask + paginación keyset), sobre el otro lado de `deleted_at`. Gate RBAC: `records:delete`.
|
|
1254
|
+
*/
|
|
1255
|
+
get: operations["HablalaApiWeb.Machine.RecordController.trash"];
|
|
1256
|
+
put?: never;
|
|
1257
|
+
post?: never;
|
|
1258
|
+
delete?: never;
|
|
1259
|
+
options?: never;
|
|
1260
|
+
head?: never;
|
|
1261
|
+
patch?: never;
|
|
1262
|
+
trace?: never;
|
|
1263
|
+
};
|
|
1244
1264
|
"/v1/objects/{object_slug}/records/{id}": {
|
|
1245
1265
|
parameters: {
|
|
1246
1266
|
query?: never;
|
|
@@ -1261,6 +1281,26 @@ interface paths {
|
|
|
1261
1281
|
patch: operations["HablalaApiWeb.Machine.RecordController.update (2)"];
|
|
1262
1282
|
trace?: never;
|
|
1263
1283
|
};
|
|
1284
|
+
"/v1/objects/{object_slug}/records/{record_id}/dependencies": {
|
|
1285
|
+
parameters: {
|
|
1286
|
+
query?: never;
|
|
1287
|
+
header?: never;
|
|
1288
|
+
path?: never;
|
|
1289
|
+
cookie?: never;
|
|
1290
|
+
};
|
|
1291
|
+
/**
|
|
1292
|
+
* Preview de dependencias de un record (impacto de borrarlo, sin borrar)
|
|
1293
|
+
* @description Devuelve cuántos edges se desvincularían y qué referencias core BLOQUEARÍAN el borrado (restrict-on-delete), sin mutar nada. Alimenta la confirmación dependent-aware de la UI. Misma fuente que el guard del borrado real, así que preview y borrado no divergen. Gate `records:delete` + ABAC de escritura por fila.
|
|
1294
|
+
*/
|
|
1295
|
+
get: operations["HablalaApiWeb.Machine.RecordController.dependencies"];
|
|
1296
|
+
put?: never;
|
|
1297
|
+
post?: never;
|
|
1298
|
+
delete?: never;
|
|
1299
|
+
options?: never;
|
|
1300
|
+
head?: never;
|
|
1301
|
+
patch?: never;
|
|
1302
|
+
trace?: never;
|
|
1303
|
+
};
|
|
1264
1304
|
"/v1/objects/{object_slug}/records/{record_id}/events": {
|
|
1265
1305
|
parameters: {
|
|
1266
1306
|
query?: never;
|
|
@@ -1408,7 +1448,7 @@ interface paths {
|
|
|
1408
1448
|
put?: never;
|
|
1409
1449
|
/**
|
|
1410
1450
|
* Crear un access token
|
|
1411
|
-
* @description Emite una credencial de máquina (`
|
|
1451
|
+
* @description Emite una credencial de máquina (`mat_…`) con la que un agente (Claude Code) o un script CI escribe el modelo de datos por HTTP. La respuesta incluye el secreto en claro UNA sola vez (`token`); guárdalo, no se puede recuperar. Los permisos se intersectan con los del creador (un token nunca puede más que quien lo emite).
|
|
1412
1452
|
*/
|
|
1413
1453
|
post: operations["HablalaApiWeb.AccessTokens.TokenController.create"];
|
|
1414
1454
|
delete?: never;
|
|
@@ -1524,8 +1564,8 @@ interface paths {
|
|
|
1524
1564
|
get: operations["HablalaApiWeb.PublicApi.ApiKeyController.index"];
|
|
1525
1565
|
put?: never;
|
|
1526
1566
|
/**
|
|
1527
|
-
* Crear
|
|
1528
|
-
* @description Emite una
|
|
1567
|
+
* Crear un par de API keys
|
|
1568
|
+
* @description Emite el **par** de API keys del canal público en una operación: una **publishable** (`pk_`, client-side) y una **secret** (`sk_`, server-side). La respuesta incluye el secreto en claro de AMBAS una sola vez (`publishable.token`/`secret.token`); guárdalos, no se pueden recuperar. Es el flujo del panel: se muestran completos para copiar/pegar en el `.env` de la app cliente. `name` por defecto "Default".
|
|
1529
1569
|
*/
|
|
1530
1570
|
post: operations["HablalaApiWeb.PublicApi.ApiKeyController.create"];
|
|
1531
1571
|
delete?: never;
|
|
@@ -1554,6 +1594,26 @@ interface paths {
|
|
|
1554
1594
|
patch?: never;
|
|
1555
1595
|
trace?: never;
|
|
1556
1596
|
};
|
|
1597
|
+
"/v1/organizations/{organization_id}/api-keys/{id}/rotate": {
|
|
1598
|
+
parameters: {
|
|
1599
|
+
query?: never;
|
|
1600
|
+
header?: never;
|
|
1601
|
+
path?: never;
|
|
1602
|
+
cookie?: never;
|
|
1603
|
+
};
|
|
1604
|
+
get?: never;
|
|
1605
|
+
put?: never;
|
|
1606
|
+
/**
|
|
1607
|
+
* Rotar una API key
|
|
1608
|
+
* @description Rota la key (modelo Stripe *roll*): emite un reemplazo del mismo tipo y nombre y revoca la original de inmediato. La respuesta incluye el nuevo secreto en claro UNA sola vez (`token`); guárdalo. Las requests que usaban la key vieja dejan de autenticar.
|
|
1609
|
+
*/
|
|
1610
|
+
post: operations["HablalaApiWeb.PublicApi.ApiKeyController.rotate"];
|
|
1611
|
+
delete?: never;
|
|
1612
|
+
options?: never;
|
|
1613
|
+
head?: never;
|
|
1614
|
+
patch?: never;
|
|
1615
|
+
trace?: never;
|
|
1616
|
+
};
|
|
1557
1617
|
"/v1/organizations/{organization_id}/appointments": {
|
|
1558
1618
|
parameters: {
|
|
1559
1619
|
query?: never;
|
|
@@ -2623,7 +2683,7 @@ interface paths {
|
|
|
2623
2683
|
put?: never;
|
|
2624
2684
|
/**
|
|
2625
2685
|
* Aprobar un login del CLI (device flow)
|
|
2626
|
-
* @description El consent: fija la organización del path y los permisos elegidos (intersectados con los del aprobador) en el grant. El CLI que sondea recibirá su `
|
|
2686
|
+
* @description El consent: fija la organización del path y los permisos elegidos (intersectados con los del aprobador) en el grant. El CLI que sondea recibirá su `mat_…` en el siguiente poll.
|
|
2627
2687
|
*/
|
|
2628
2688
|
post: operations["HablalaApiWeb.Oauth.GrantController.approve"];
|
|
2629
2689
|
delete?: never;
|
|
@@ -2726,6 +2786,26 @@ interface paths {
|
|
|
2726
2786
|
patch?: never;
|
|
2727
2787
|
trace?: never;
|
|
2728
2788
|
};
|
|
2789
|
+
"/v1/organizations/{organization_id}/objects/{object_slug}/records/trash": {
|
|
2790
|
+
parameters: {
|
|
2791
|
+
query?: never;
|
|
2792
|
+
header?: never;
|
|
2793
|
+
path?: never;
|
|
2794
|
+
cookie?: never;
|
|
2795
|
+
};
|
|
2796
|
+
/**
|
|
2797
|
+
* Listar los records borrados (soft) del objeto — la Papelera
|
|
2798
|
+
* @description Lista los records SOFT-DELETED del objeto (`deleted_at IS NOT NULL`), para restaurarlos. Misma lectura gobernada que `POST /query` (RBAC + ABAC por fila + field_mask + paginación keyset), sobre el otro lado de `deleted_at`. Gate RBAC: `records:delete`.
|
|
2799
|
+
*/
|
|
2800
|
+
get: operations["HablalaApiWeb.Data.RecordController.trash"];
|
|
2801
|
+
put?: never;
|
|
2802
|
+
post?: never;
|
|
2803
|
+
delete?: never;
|
|
2804
|
+
options?: never;
|
|
2805
|
+
head?: never;
|
|
2806
|
+
patch?: never;
|
|
2807
|
+
trace?: never;
|
|
2808
|
+
};
|
|
2729
2809
|
"/v1/organizations/{organization_id}/objects/{object_slug}/records/{id}": {
|
|
2730
2810
|
parameters: {
|
|
2731
2811
|
query?: never;
|
|
@@ -2746,6 +2826,26 @@ interface paths {
|
|
|
2746
2826
|
patch: operations["HablalaApiWeb.Data.RecordController.update (2)"];
|
|
2747
2827
|
trace?: never;
|
|
2748
2828
|
};
|
|
2829
|
+
"/v1/organizations/{organization_id}/objects/{object_slug}/records/{record_id}/dependencies": {
|
|
2830
|
+
parameters: {
|
|
2831
|
+
query?: never;
|
|
2832
|
+
header?: never;
|
|
2833
|
+
path?: never;
|
|
2834
|
+
cookie?: never;
|
|
2835
|
+
};
|
|
2836
|
+
/**
|
|
2837
|
+
* Preview de dependencias de un record (impacto de borrarlo, sin borrar)
|
|
2838
|
+
* @description Devuelve cuántos edges se desvincularían y qué referencias core BLOQUEARÍAN el borrado (restrict-on-delete), sin mutar nada. Alimenta la confirmación dependent-aware de la UI. Misma fuente que el guard del borrado real, así que preview y borrado no divergen. Gate `records:delete` + ABAC de escritura por fila.
|
|
2839
|
+
*/
|
|
2840
|
+
get: operations["HablalaApiWeb.Data.RecordController.dependencies"];
|
|
2841
|
+
put?: never;
|
|
2842
|
+
post?: never;
|
|
2843
|
+
delete?: never;
|
|
2844
|
+
options?: never;
|
|
2845
|
+
head?: never;
|
|
2846
|
+
patch?: never;
|
|
2847
|
+
trace?: never;
|
|
2848
|
+
};
|
|
2749
2849
|
"/v1/organizations/{organization_id}/objects/{object_slug}/records/{record_id}/events": {
|
|
2750
2850
|
parameters: {
|
|
2751
2851
|
query?: never;
|
|
@@ -3268,8 +3368,8 @@ interface paths {
|
|
|
3268
3368
|
get?: never;
|
|
3269
3369
|
put?: never;
|
|
3270
3370
|
/**
|
|
3271
|
-
* Pedir
|
|
3272
|
-
* @description Devuelve
|
|
3371
|
+
* Pedir un sobre de subida prefirmado
|
|
3372
|
+
* @description Devuelve un sobre auto-descriptivo para subir un archivo directo al object storage. Según `method`: `POST` → form multipart con `fields` + el archivo como campo `file` (S3/R2 POST policy, con tope de tamaño firmado en el borde); `PUT` → PUT del blob a `url` con `headers` (adaptador local de dev). Luego se referencia `fileUrl`. (El camino personal usa `HablalaApiWeb.Me.UploadController` en `/v1/me/uploads/presign`.)
|
|
3273
3373
|
*/
|
|
3274
3374
|
post: operations["HablalaApiWeb.UploadController.presign"];
|
|
3275
3375
|
delete?: never;
|
|
@@ -3461,6 +3561,26 @@ interface paths {
|
|
|
3461
3561
|
patch?: never;
|
|
3462
3562
|
trace?: never;
|
|
3463
3563
|
};
|
|
3564
|
+
"/v1/public/me/checkout": {
|
|
3565
|
+
parameters: {
|
|
3566
|
+
query?: never;
|
|
3567
|
+
header?: never;
|
|
3568
|
+
path?: never;
|
|
3569
|
+
cookie?: never;
|
|
3570
|
+
};
|
|
3571
|
+
get?: never;
|
|
3572
|
+
put?: never;
|
|
3573
|
+
/**
|
|
3574
|
+
* Checkout nativo (crear un pedido)
|
|
3575
|
+
* @description Crea un pedido atómicamente: valida stock por variante, numera (#1001), crea el `order` (source = web, financial_status = pending) + sus renglones con snapshots de precio, y decrementa el inventario. Autenticado por end-user session token; el comprador sale de la sesión (no del cuerpo). Idempotente vía el header `Idempotency-Key`.
|
|
3576
|
+
*/
|
|
3577
|
+
post: operations["HablalaApiWeb.PublicApi.CheckoutController.create"];
|
|
3578
|
+
delete?: never;
|
|
3579
|
+
options?: never;
|
|
3580
|
+
head?: never;
|
|
3581
|
+
patch?: never;
|
|
3582
|
+
trace?: never;
|
|
3583
|
+
};
|
|
3464
3584
|
"/v1/public/me/objects/{object_slug}/records": {
|
|
3465
3585
|
parameters: {
|
|
3466
3586
|
query?: never;
|
|
@@ -3613,6 +3733,26 @@ interface paths {
|
|
|
3613
3733
|
patch?: never;
|
|
3614
3734
|
trace?: never;
|
|
3615
3735
|
};
|
|
3736
|
+
"/v1/public/variants/availability": {
|
|
3737
|
+
parameters: {
|
|
3738
|
+
query?: never;
|
|
3739
|
+
header?: never;
|
|
3740
|
+
path?: never;
|
|
3741
|
+
cookie?: never;
|
|
3742
|
+
};
|
|
3743
|
+
get?: never;
|
|
3744
|
+
put?: never;
|
|
3745
|
+
/**
|
|
3746
|
+
* Disponibilidad de compra de variantes (Public API)
|
|
3747
|
+
* @description Dado un lote de ids de `product_variant`, devuelve por variante si es comprable (activa y con stock > 0) — el booleano del badge "Agotado". Autenticado por API key. Se expone el booleano derivado, no el conteo de stock.
|
|
3748
|
+
*/
|
|
3749
|
+
post: operations["HablalaApiWeb.PublicApi.AvailabilityController.create"];
|
|
3750
|
+
delete?: never;
|
|
3751
|
+
options?: never;
|
|
3752
|
+
head?: never;
|
|
3753
|
+
patch?: never;
|
|
3754
|
+
trace?: never;
|
|
3755
|
+
};
|
|
3616
3756
|
"/v1/push-tokens": {
|
|
3617
3757
|
parameters: {
|
|
3618
3758
|
query?: never;
|
|
@@ -4132,7 +4272,7 @@ interface components {
|
|
|
4132
4272
|
schemas: {
|
|
4133
4273
|
/**
|
|
4134
4274
|
* AccessToken
|
|
4135
|
-
* @description Metadatos de un access token de máquina (`
|
|
4275
|
+
* @description Metadatos de un access token de máquina (`mat_…`): la credencial con la que un agente (Claude Code) o un script CI escribe el modelo de datos por HTTP. El secreto en claro NO se incluye aquí — solo se devuelve una vez, al crearlo.
|
|
4136
4276
|
*/
|
|
4137
4277
|
AccessToken: {
|
|
4138
4278
|
/** @description ¿Ni revocado ni expirado? */
|
|
@@ -4148,7 +4288,7 @@ interface components {
|
|
|
4148
4288
|
name: string;
|
|
4149
4289
|
/** @description Permisos RBAC del token (`recurso:accion`), su propio scope (mínimo privilegio). */
|
|
4150
4290
|
permissions: string[];
|
|
4151
|
-
/** @description Primeros caracteres del secreto (no secreto), p. ej. `
|
|
4291
|
+
/** @description Primeros caracteres del secreto (no secreto), p. ej. `mat_a1b2`. */
|
|
4152
4292
|
prefix?: string | null;
|
|
4153
4293
|
/** Format: date-time */
|
|
4154
4294
|
revokedAt?: string | null;
|
|
@@ -4173,7 +4313,7 @@ interface components {
|
|
|
4173
4313
|
prefix?: string | null;
|
|
4174
4314
|
/** Format: date-time */
|
|
4175
4315
|
revokedAt?: string | null;
|
|
4176
|
-
/** @description El secreto en claro (`
|
|
4316
|
+
/** @description El secreto en claro (`mat_…`). Solo en esta respuesta. */
|
|
4177
4317
|
token: string;
|
|
4178
4318
|
/** Format: date-time */
|
|
4179
4319
|
updatedAt?: string;
|
|
@@ -4208,8 +4348,8 @@ interface components {
|
|
|
4208
4348
|
* @description Caducidad opcional (ISO 8601). Omitir = no caduca.
|
|
4209
4349
|
*/
|
|
4210
4350
|
expiresAt?: string;
|
|
4211
|
-
/** @description Etiqueta para
|
|
4212
|
-
name
|
|
4351
|
+
/** @description Etiqueta opcional para el panel. Por defecto: "Default". */
|
|
4352
|
+
name?: string;
|
|
4213
4353
|
/** @description Permisos RBAC (`recurso:accion`) crudos, p. ej. `["objects:create", "objects:read"]`. Vía avanzada (CI/scripts); la UI usa `preset` en su lugar. */
|
|
4214
4354
|
permissions?: string[];
|
|
4215
4355
|
/** @description Clave de un preset de permisos (ver `GET .../access-tokens/presets`), p. ej. `"objects_builder"`. La vía que usa la UI. Si viene, gana sobre `permissions`. */
|
|
@@ -4429,6 +4569,8 @@ interface components {
|
|
|
4429
4569
|
*/
|
|
4430
4570
|
mode?: "authoritative" | "additive";
|
|
4431
4571
|
};
|
|
4572
|
+
/** @description Los verticales instalables sobre el core horizontal (p. ej. `commerce`, `crm`). El server materializa sus objects (seeded, con su `package`) desde su definición propia; el manifiesto solo declara los NOMBRES. Instalar es idempotente; declarar no desinstala. */
|
|
4573
|
+
packages?: string[];
|
|
4432
4574
|
policies?: components["schemas"]["ManifestPolicy"][] | {
|
|
4433
4575
|
items: components["schemas"]["ManifestPolicy"][];
|
|
4434
4576
|
/**
|
|
@@ -4666,9 +4808,21 @@ interface components {
|
|
|
4666
4808
|
ApiKeyCreatedResponse: {
|
|
4667
4809
|
data: components["schemas"]["ApiKeyCreated"];
|
|
4668
4810
|
};
|
|
4811
|
+
/**
|
|
4812
|
+
* ApiKeyPairCreated
|
|
4813
|
+
* @description El par de API keys recién creado: la publishable (`pk_`) y la secret (`sk_`), cada una con su secreto en claro (`token`) presente UNA sola vez. Guárdalos: no se pueden recuperar.
|
|
4814
|
+
*/
|
|
4815
|
+
ApiKeyPairCreated: {
|
|
4816
|
+
publishable: components["schemas"]["ApiKeyCreated"];
|
|
4817
|
+
secret: components["schemas"]["ApiKeyCreated"];
|
|
4818
|
+
};
|
|
4819
|
+
/** ApiKeyPairCreatedResponse */
|
|
4820
|
+
ApiKeyPairCreatedResponse: {
|
|
4821
|
+
data: components["schemas"]["ApiKeyPairCreated"];
|
|
4822
|
+
};
|
|
4669
4823
|
/**
|
|
4670
4824
|
* ApiKeyRequest
|
|
4671
|
-
* @description Datos para emitir
|
|
4825
|
+
* @description Datos para emitir el par de API keys. Todos opcionales: `name` por defecto "Default" (lo comparten ambas keys del par). `kind` solo aplica a la vía avanzada de una sola key.
|
|
4672
4826
|
*/
|
|
4673
4827
|
ApiKeyRequest: {
|
|
4674
4828
|
/**
|
|
@@ -4677,11 +4831,11 @@ interface components {
|
|
|
4677
4831
|
*/
|
|
4678
4832
|
expiresAt?: string;
|
|
4679
4833
|
/**
|
|
4680
|
-
* @description Por defecto: publishable.
|
|
4834
|
+
* @description Solo vía avanzada (una key). Por defecto: publishable.
|
|
4681
4835
|
* @enum {string}
|
|
4682
4836
|
*/
|
|
4683
4837
|
kind?: "publishable" | "secret";
|
|
4684
|
-
/** @description Etiqueta para
|
|
4838
|
+
/** @description Etiqueta opcional para el panel. Por defecto: "Default". */
|
|
4685
4839
|
name?: string;
|
|
4686
4840
|
};
|
|
4687
4841
|
/** ApiKeysResponse */
|
|
@@ -4881,6 +5035,16 @@ interface components {
|
|
|
4881
5035
|
AvailabilityRequest: {
|
|
4882
5036
|
availability: components["schemas"]["AvailabilityInput"];
|
|
4883
5037
|
};
|
|
5038
|
+
/**
|
|
5039
|
+
* AvailabilityResponse
|
|
5040
|
+
* @description Disponibilidad de compra por variante (patrón Shopify `availableForSale`): un mapa id-público → booleano. `true` = comprable (activa y con stock). Se expone el booleano derivado, no el conteo de stock (mínima exposición).
|
|
5041
|
+
*/
|
|
5042
|
+
AvailabilityResponse: {
|
|
5043
|
+
/** @description Mapa `variantId` (`rec_…`) → `true`/`false` (comprable). */
|
|
5044
|
+
availability: {
|
|
5045
|
+
[key: string]: boolean;
|
|
5046
|
+
};
|
|
5047
|
+
};
|
|
4884
5048
|
/**
|
|
4885
5049
|
* BanMemberRequest
|
|
4886
5050
|
* @description Banea a un miembro del grupo (bloqueo, estilo Telegram). Sin `until` = ban permanente; con `until` = ban temporal que expira en esa fecha.
|
|
@@ -5050,6 +5214,25 @@ interface components {
|
|
|
5050
5214
|
topic?: string;
|
|
5051
5215
|
};
|
|
5052
5216
|
};
|
|
5217
|
+
/**
|
|
5218
|
+
* CheckoutItem
|
|
5219
|
+
* @description Un artículo del checkout: qué variante comprar y cuántas unidades.
|
|
5220
|
+
*/
|
|
5221
|
+
CheckoutItem: {
|
|
5222
|
+
/** @description Unidades a comprar (≥ 1). */
|
|
5223
|
+
quantity: number;
|
|
5224
|
+
/** @description Id público (`rec_…`) del `product_variant`. */
|
|
5225
|
+
variantId: string;
|
|
5226
|
+
};
|
|
5227
|
+
/**
|
|
5228
|
+
* CheckoutRequest
|
|
5229
|
+
* @description Checkout nativo: los artículos del carrito + la moneda. El pedido se ata al usuario final identificado por la sesión (`sess_…`), no a un cliente enviado por el cuerpo.
|
|
5230
|
+
*/
|
|
5231
|
+
CheckoutRequest: {
|
|
5232
|
+
/** @description Código ISO 4217 (MXN, USD, EUR). */
|
|
5233
|
+
currency: string;
|
|
5234
|
+
items: components["schemas"]["CheckoutItem"][];
|
|
5235
|
+
};
|
|
5053
5236
|
/**
|
|
5054
5237
|
* ContactContent
|
|
5055
5238
|
* @description Payload de un mensaje `contact` (compartir contacto, estilo WhatsApp). El cliente pinta una tarjeta con acción 'Agregar a contactos'. `vcard` es el vCard crudo opcional (fuente de verdad para importar); `name`/`phones` son la vista renderizable.
|
|
@@ -5511,6 +5694,26 @@ interface components {
|
|
|
5511
5694
|
EventsResponse: {
|
|
5512
5695
|
data: components["schemas"]["Event"][];
|
|
5513
5696
|
};
|
|
5697
|
+
/**
|
|
5698
|
+
* FileEnvelope
|
|
5699
|
+
* @description Un archivo dentro del valor de un atributo `data_type: file` (siempre un array de estos, aun para un solo archivo). Solo `url` es obligatoria; el resto es metadata para renderizar sin un HEAD por archivo. La `url` DEBE ser del storage de la plataforma (subida por el flujo de upload prefirmado) — una URL externa se rechaza.
|
|
5700
|
+
*/
|
|
5701
|
+
FileEnvelope: {
|
|
5702
|
+
/** @description Placeholder BlurHash de la imagen (preview borroso instantáneo). Null si no es imagen. */
|
|
5703
|
+
blurhash?: string | null;
|
|
5704
|
+
content_type?: string | null;
|
|
5705
|
+
/** @description Duración del medio en milisegundos (audio/video). Permite pintar el reproductor sin descargar. */
|
|
5706
|
+
duration_ms?: number | null;
|
|
5707
|
+
filename?: string | null;
|
|
5708
|
+
/** @description Alto en px. */
|
|
5709
|
+
height?: number | null;
|
|
5710
|
+
/** @description Tamaño en bytes. */
|
|
5711
|
+
size?: number | null;
|
|
5712
|
+
/** @description URL permanente del blob en el object storage (la que devuelve el presign). */
|
|
5713
|
+
url: string;
|
|
5714
|
+
/** @description Ancho en px (para reservar el aspect-ratio y evitar layout shift). */
|
|
5715
|
+
width?: number | null;
|
|
5716
|
+
};
|
|
5514
5717
|
/** Friend */
|
|
5515
5718
|
Friend: {
|
|
5516
5719
|
displayName?: string | null;
|
|
@@ -5626,13 +5829,15 @@ interface components {
|
|
|
5626
5829
|
};
|
|
5627
5830
|
/**
|
|
5628
5831
|
* GraphNode
|
|
5629
|
-
* @description Un nodo del grafo de datos: un record, con su object, su título y su grado.
|
|
5832
|
+
* @description Un nodo del grafo de datos: un record, con su object, su título, su imagen representativa y su grado.
|
|
5630
5833
|
*/
|
|
5631
5834
|
GraphNode: {
|
|
5632
5835
|
/** @description Nº de aristas incidentes al nodo (grado). El cliente lo usa para el tamaño. */
|
|
5633
5836
|
degree: number;
|
|
5634
5837
|
/** @description Id público del record (`rec_…`). */
|
|
5635
5838
|
id: string;
|
|
5839
|
+
/** @description URL de la imagen representativa del record (primer atributo file de tipo imagen, respetando el field_mask), o null. El cliente la pinta como avatar del nodo; sin ella, el nodo es el círculo tintado por object. */
|
|
5840
|
+
imageUrl?: string | null;
|
|
5636
5841
|
/** @description Slug del object del record (para color/navegación). */
|
|
5637
5842
|
objectSlug: string;
|
|
5638
5843
|
/** @description Título legible del record (atributo name/nombre/title…), recortado por field_mask. */
|
|
@@ -6664,7 +6869,7 @@ interface components {
|
|
|
6664
6869
|
};
|
|
6665
6870
|
/**
|
|
6666
6871
|
* OauthGrantApproveRequest
|
|
6667
|
-
* @description Aprobación del consent: qué permisos tendrá el token (mismas reglas que emitir un `
|
|
6872
|
+
* @description Aprobación del consent: qué permisos tendrá el token (mismas reglas que emitir un `mat_` en el panel: `preset` gana, y todo se intersecta con los permisos del aprobador).
|
|
6668
6873
|
*/
|
|
6669
6874
|
OauthGrantApproveRequest: {
|
|
6670
6875
|
/** @description Permisos crudos `recurso:accion` (vía avanzada). */
|
|
@@ -6695,10 +6900,10 @@ interface components {
|
|
|
6695
6900
|
};
|
|
6696
6901
|
/**
|
|
6697
6902
|
* OauthTokenResponse
|
|
6698
|
-
* @description Éxito del token endpoint (RFC 6749 §5.1): el `access_token` es un `
|
|
6903
|
+
* @description Éxito del token endpoint (RFC 6749 §5.1): el `access_token` es un `mat_…` normal (la misma credencial que emite el panel), mostrado UNA sola vez.
|
|
6699
6904
|
*/
|
|
6700
6905
|
OauthTokenResponse: {
|
|
6701
|
-
/** @description El secreto `
|
|
6906
|
+
/** @description El secreto `mat_…` en claro. */
|
|
6702
6907
|
access_token: string;
|
|
6703
6908
|
/** @description Permisos concedidos, separados por espacio (RFC 6749 §3.3). */
|
|
6704
6909
|
scope?: string;
|
|
@@ -6758,6 +6963,25 @@ interface components {
|
|
|
6758
6963
|
ObjectsResponse: {
|
|
6759
6964
|
data: components["schemas"]["Object"][];
|
|
6760
6965
|
};
|
|
6966
|
+
/**
|
|
6967
|
+
* OrderLineItem
|
|
6968
|
+
* @description Un renglón del pedido: la variante comprada con snapshots de título/sku/precio (el catálogo puede cambiar después). `id` + `properties` como cualquier record del diccionario.
|
|
6969
|
+
*/
|
|
6970
|
+
OrderLineItem: {
|
|
6971
|
+
id: string;
|
|
6972
|
+
/** @description Valores del renglón por slug: `variant_ref`, `product_ref`, `title`, `sku`, `quantity`, `unit_price` (centavos), `line_total` (centavos). */
|
|
6973
|
+
properties: Record<string, never>;
|
|
6974
|
+
};
|
|
6975
|
+
/**
|
|
6976
|
+
* OrderResponse
|
|
6977
|
+
* @description El pedido recién creado por el checkout, con sus renglones. `properties` trae el `order_number` (#1001), `financial_status` (nace `pending`), `fulfillment_status` (nace `unfulfilled`), `total_amount` (centavos), `currency` y `customer`.
|
|
6978
|
+
*/
|
|
6979
|
+
OrderResponse: {
|
|
6980
|
+
id: string;
|
|
6981
|
+
lineItems: components["schemas"]["OrderLineItem"][];
|
|
6982
|
+
/** @description Valores del pedido por slug (order_number, financial_status, total_amount…). */
|
|
6983
|
+
properties: Record<string, never>;
|
|
6984
|
+
};
|
|
6761
6985
|
/** Organization */
|
|
6762
6986
|
Organization: {
|
|
6763
6987
|
/** @description Icono de la organización; `null` usa el fallback de iniciales. */
|
|
@@ -7011,6 +7235,8 @@ interface components {
|
|
|
7011
7235
|
/** @description MIME type del archivo (p. ej. `image/png`). */
|
|
7012
7236
|
contentType?: string;
|
|
7013
7237
|
filename: string;
|
|
7238
|
+
/** @description Tope de bytes que el servidor FIRMA en el borde (POST policy `content-length-range`): un cuerpo mayor se rechaza con 413, sin confiar en el cliente. Tómalo del `max_size_bytes` del atributo `file`. */
|
|
7239
|
+
maxSize?: number | null;
|
|
7014
7240
|
/**
|
|
7015
7241
|
* @description Uso del archivo. `avatar` restringe el `contentType` a imágenes (perfil de usuario / icono de org). Omitir para adjuntos genéricos.
|
|
7016
7242
|
* @enum {string|null}
|
|
@@ -7021,20 +7247,48 @@ interface components {
|
|
|
7021
7247
|
PresignResponse: {
|
|
7022
7248
|
data: components["schemas"]["PresignResult"];
|
|
7023
7249
|
};
|
|
7024
|
-
/**
|
|
7250
|
+
/**
|
|
7251
|
+
* PresignResult
|
|
7252
|
+
* @description Sobre de subida auto-descriptivo. El cliente OBEDECE `method`: `POST` → arma un form multipart con TODOS los `fields` y añade el archivo como el campo `file` al final, luego hace POST a `url`; `PUT` → hace PUT del blob crudo a `url` con `headers`. En ambos, `fileUrl` es la URL final del blob.
|
|
7253
|
+
*/
|
|
7025
7254
|
PresignResult: {
|
|
7026
|
-
/** @description
|
|
7255
|
+
/** @description Campos del form multipart a enviar ANTES del archivo (POST policy: `key`, `Content-Type`, `Policy`, firma…). Vacío cuando `method` es `PUT`. */
|
|
7256
|
+
fields?: {
|
|
7257
|
+
[key: string]: string;
|
|
7258
|
+
};
|
|
7259
|
+
/** @description URL final del blob; va en el `attachment` del mensaje o el atributo `file`. */
|
|
7027
7260
|
fileUrl: string;
|
|
7028
|
-
/** @description Cabeceras que el cliente
|
|
7029
|
-
headers?:
|
|
7030
|
-
|
|
7031
|
-
|
|
7032
|
-
/**
|
|
7033
|
-
|
|
7261
|
+
/** @description Cabeceras que el cliente envía en el `PUT`. Vacío cuando `method` es `POST`. */
|
|
7262
|
+
headers?: {
|
|
7263
|
+
[key: string]: string;
|
|
7264
|
+
};
|
|
7265
|
+
/**
|
|
7266
|
+
* @description Cómo subir: `POST` (form multipart, POST policy) o `PUT` (blob directo).
|
|
7267
|
+
* @enum {string}
|
|
7268
|
+
*/
|
|
7269
|
+
method: "POST" | "PUT";
|
|
7270
|
+
/** @description Destino de la subida. */
|
|
7271
|
+
url: string;
|
|
7272
|
+
};
|
|
7273
|
+
/**
|
|
7274
|
+
* PublicOrganization
|
|
7275
|
+
* @description Identidad PÚBLICA del tenant (la org del token) — el paralelo horizontal del `shop`/`brand` de Shopify. Deja al cliente pintar su chrome (nombre, logo) y conocer su `endUserObjectSlug` sin hardcodear la marca. NUNCA incluye la PII legal del negocio.
|
|
7276
|
+
*/
|
|
7277
|
+
PublicOrganization: {
|
|
7278
|
+
/** @description Logo/icono de la marca (el "server icon" del tenant), o `null`. */
|
|
7279
|
+
avatarUrl?: string | null;
|
|
7280
|
+
/** @description ID público de la organización. */
|
|
7281
|
+
id: string;
|
|
7282
|
+
/** @description Nombre visible de la marca. */
|
|
7283
|
+
name: string;
|
|
7284
|
+
settings: components["schemas"]["ManifestSettings"];
|
|
7285
|
+
/** @description Slug estable de la organización. */
|
|
7286
|
+
slug: string;
|
|
7034
7287
|
};
|
|
7035
7288
|
/** PublicSchema */
|
|
7036
7289
|
PublicSchema: {
|
|
7037
7290
|
objects: components["schemas"]["PublicSchemaObject"][];
|
|
7291
|
+
organization: components["schemas"]["PublicOrganization"];
|
|
7038
7292
|
relationships: components["schemas"]["PublicSchemaRelationship"][];
|
|
7039
7293
|
};
|
|
7040
7294
|
/**
|
|
@@ -7204,7 +7458,10 @@ interface components {
|
|
|
7204
7458
|
/** Format: date-time */
|
|
7205
7459
|
insertedAt?: string;
|
|
7206
7460
|
objectId?: string;
|
|
7207
|
-
|
|
7461
|
+
/** @description Mapa slug→valor. El valor de un atributo `data_type: file` es un array de `FileEnvelope`; el resto de tipos son escalares/arrays/objetos según el `data_type` del atributo. */
|
|
7462
|
+
properties: {
|
|
7463
|
+
[key: string]: components["schemas"]["FileEnvelope"][] | string | number | boolean | string[] | Record<string, never>;
|
|
7464
|
+
};
|
|
7208
7465
|
/** @description Labels de los records referenciados por las columnas `reference`: un mapa id-público-destino (`rec_…`) → `{label, objectSlug}` del record enlazado (su primary field + su object slug para enlazar a la ficha). Presente solo si el record tiene references resueltas. Homogéneo con `QueryResultRow.referenceLabels`. */
|
|
7209
7466
|
referenceLabels?: {
|
|
7210
7467
|
[key: string]: {
|
|
@@ -7215,9 +7472,27 @@ interface components {
|
|
|
7215
7472
|
/** Format: date-time */
|
|
7216
7473
|
updatedAt?: string;
|
|
7217
7474
|
};
|
|
7475
|
+
/**
|
|
7476
|
+
* RecordDependencies
|
|
7477
|
+
* @description Preview del impacto de borrar un record, SIN borrarlo (confirmación dependent-aware, patrón Salesforce/Notion). `edgeCount` = relaciones del grafo que se desvincularían (el vecino sobrevive). `blockers` = referencias core activas que IMPEDIRÍAN el borrado (restrict-on-delete); `deletable: false` si hay alguna.
|
|
7478
|
+
*/
|
|
7479
|
+
RecordDependencies: {
|
|
7480
|
+
data: {
|
|
7481
|
+
/** @description Referencias core activas que bloquean; vacía si se puede borrar. */
|
|
7482
|
+
blockers: {
|
|
7483
|
+
count: number;
|
|
7484
|
+
/** @description Etiqueta legible (p. ej. "facturas sin cerrar"). */
|
|
7485
|
+
label: string;
|
|
7486
|
+
}[];
|
|
7487
|
+
/** @description `false` si algún blocker impediría el borrado. */
|
|
7488
|
+
deletable: boolean;
|
|
7489
|
+
/** @description Aristas del grafo (ambos extremos) que se romperían al borrar. */
|
|
7490
|
+
edgeCount: number;
|
|
7491
|
+
};
|
|
7492
|
+
};
|
|
7218
7493
|
/** RecordInput */
|
|
7219
7494
|
RecordInput: {
|
|
7220
|
-
/** @description Mapa slug→valor validado contra el diccionario. Un atributo `reference` acepta el id público del record destino (`"rec_…"`) o, como azúcar de DX, una **referencia por clave de negocio**: `{"$ref": {"<attr>": <valor>}}`, donde `<attr>` es un atributo único del objeto destino (p. ej. `{"$ref": {"sku": "DRM-VITC-30"}}`). Se resuelve al `rec_…` en el servidor — útil para sincronizar por external id sin conocer el id de Hablalá (patrón Salesforce/Airtable). */
|
|
7495
|
+
/** @description Mapa slug→valor validado contra el diccionario. Un atributo `reference` acepta el id público del record destino (`"rec_…"`) o, como azúcar de DX, una **referencia por clave de negocio**: `{"$ref": {"<attr>": <valor>}}`, donde `<attr>` es un atributo único del objeto destino (p. ej. `{"$ref": {"sku": "DRM-VITC-30"}}`). Se resuelve al `rec_…` en el servidor — útil para sincronizar por external id sin conocer el id de Hablalá (patrón Salesforce/Airtable). Un atributo `data_type: file` toma un array de `FileEnvelope`: la `url` de cada archivo debe venir del flujo de upload prefirmado (una URL externa se rechaza). */
|
|
7221
7496
|
properties: Record<string, never>;
|
|
7222
7497
|
};
|
|
7223
7498
|
/** RecordRequest */
|
|
@@ -7652,6 +7927,13 @@ interface components {
|
|
|
7652
7927
|
UsernameAvailableResponse: {
|
|
7653
7928
|
data: components["schemas"]["UsernameAvailability"];
|
|
7654
7929
|
};
|
|
7930
|
+
/**
|
|
7931
|
+
* VariantAvailabilityRequest
|
|
7932
|
+
* @description Los ids públicos (`rec_…`) de las variantes cuya disponibilidad de compra se consulta (una llamada resuelve toda una página de catálogo).
|
|
7933
|
+
*/
|
|
7934
|
+
VariantAvailabilityRequest: {
|
|
7935
|
+
variantIds: string[];
|
|
7936
|
+
};
|
|
7655
7937
|
/** VerificationRejectRequest */
|
|
7656
7938
|
VerificationRejectRequest: {
|
|
7657
7939
|
/** @description Motivo legible del rechazo (se muestra al negocio). */
|
|
@@ -9825,7 +10107,7 @@ interface operations {
|
|
|
9825
10107
|
};
|
|
9826
10108
|
};
|
|
9827
10109
|
responses: {
|
|
9828
|
-
/** @description
|
|
10110
|
+
/** @description Sobre de subida prefirmado */
|
|
9829
10111
|
200: {
|
|
9830
10112
|
headers: {
|
|
9831
10113
|
[name: string]: unknown;
|
|
@@ -10379,6 +10661,49 @@ interface operations {
|
|
|
10379
10661
|
};
|
|
10380
10662
|
};
|
|
10381
10663
|
};
|
|
10664
|
+
"HablalaApiWeb.Machine.RecordController.trash": {
|
|
10665
|
+
parameters: {
|
|
10666
|
+
query?: {
|
|
10667
|
+
limit?: number;
|
|
10668
|
+
cursor?: string;
|
|
10669
|
+
};
|
|
10670
|
+
header?: never;
|
|
10671
|
+
path: {
|
|
10672
|
+
object_slug: string;
|
|
10673
|
+
};
|
|
10674
|
+
cookie?: never;
|
|
10675
|
+
};
|
|
10676
|
+
requestBody?: never;
|
|
10677
|
+
responses: {
|
|
10678
|
+
/** @description Records borrados */
|
|
10679
|
+
200: {
|
|
10680
|
+
headers: {
|
|
10681
|
+
[name: string]: unknown;
|
|
10682
|
+
};
|
|
10683
|
+
content: {
|
|
10684
|
+
"application/json": components["schemas"]["QueryResultResponse"];
|
|
10685
|
+
};
|
|
10686
|
+
};
|
|
10687
|
+
/** @description Sin permiso */
|
|
10688
|
+
403: {
|
|
10689
|
+
headers: {
|
|
10690
|
+
[name: string]: unknown;
|
|
10691
|
+
};
|
|
10692
|
+
content: {
|
|
10693
|
+
"application/json": components["schemas"]["Error"];
|
|
10694
|
+
};
|
|
10695
|
+
};
|
|
10696
|
+
/** @description Objeto desconocido */
|
|
10697
|
+
404: {
|
|
10698
|
+
headers: {
|
|
10699
|
+
[name: string]: unknown;
|
|
10700
|
+
};
|
|
10701
|
+
content: {
|
|
10702
|
+
"application/json": components["schemas"]["Error"];
|
|
10703
|
+
};
|
|
10704
|
+
};
|
|
10705
|
+
};
|
|
10706
|
+
};
|
|
10382
10707
|
"HablalaApiWeb.Machine.RecordController.show": {
|
|
10383
10708
|
parameters: {
|
|
10384
10709
|
query?: never;
|
|
@@ -10569,6 +10894,47 @@ interface operations {
|
|
|
10569
10894
|
};
|
|
10570
10895
|
};
|
|
10571
10896
|
};
|
|
10897
|
+
"HablalaApiWeb.Machine.RecordController.dependencies": {
|
|
10898
|
+
parameters: {
|
|
10899
|
+
query?: never;
|
|
10900
|
+
header?: never;
|
|
10901
|
+
path: {
|
|
10902
|
+
object_slug: string;
|
|
10903
|
+
record_id: string;
|
|
10904
|
+
};
|
|
10905
|
+
cookie?: never;
|
|
10906
|
+
};
|
|
10907
|
+
requestBody?: never;
|
|
10908
|
+
responses: {
|
|
10909
|
+
/** @description Dependencias */
|
|
10910
|
+
200: {
|
|
10911
|
+
headers: {
|
|
10912
|
+
[name: string]: unknown;
|
|
10913
|
+
};
|
|
10914
|
+
content: {
|
|
10915
|
+
"application/json": components["schemas"]["RecordDependencies"];
|
|
10916
|
+
};
|
|
10917
|
+
};
|
|
10918
|
+
/** @description Sin permiso ABAC sobre este record */
|
|
10919
|
+
403: {
|
|
10920
|
+
headers: {
|
|
10921
|
+
[name: string]: unknown;
|
|
10922
|
+
};
|
|
10923
|
+
content: {
|
|
10924
|
+
"application/json": components["schemas"]["Error"];
|
|
10925
|
+
};
|
|
10926
|
+
};
|
|
10927
|
+
/** @description No encontrado (o de otro objeto) */
|
|
10928
|
+
404: {
|
|
10929
|
+
headers: {
|
|
10930
|
+
[name: string]: unknown;
|
|
10931
|
+
};
|
|
10932
|
+
content: {
|
|
10933
|
+
"application/json": components["schemas"]["Error"];
|
|
10934
|
+
};
|
|
10935
|
+
};
|
|
10936
|
+
};
|
|
10937
|
+
};
|
|
10572
10938
|
"HablalaApiWeb.Machine.EventController.index": {
|
|
10573
10939
|
parameters: {
|
|
10574
10940
|
query?: never;
|
|
@@ -11311,20 +11677,20 @@ interface operations {
|
|
|
11311
11677
|
};
|
|
11312
11678
|
cookie?: never;
|
|
11313
11679
|
};
|
|
11314
|
-
/** @description Datos del
|
|
11680
|
+
/** @description Datos del par */
|
|
11315
11681
|
requestBody?: {
|
|
11316
11682
|
content: {
|
|
11317
11683
|
"application/json": components["schemas"]["ApiKeyRequest"];
|
|
11318
11684
|
};
|
|
11319
11685
|
};
|
|
11320
11686
|
responses: {
|
|
11321
|
-
/** @description
|
|
11687
|
+
/** @description Par creado (con secretos) */
|
|
11322
11688
|
201: {
|
|
11323
11689
|
headers: {
|
|
11324
11690
|
[name: string]: unknown;
|
|
11325
11691
|
};
|
|
11326
11692
|
content: {
|
|
11327
|
-
"application/json": components["schemas"]["
|
|
11693
|
+
"application/json": components["schemas"]["ApiKeyPairCreatedResponse"];
|
|
11328
11694
|
};
|
|
11329
11695
|
};
|
|
11330
11696
|
/** @description Sin permiso */
|
|
@@ -11377,6 +11743,38 @@ interface operations {
|
|
|
11377
11743
|
};
|
|
11378
11744
|
};
|
|
11379
11745
|
};
|
|
11746
|
+
"HablalaApiWeb.PublicApi.ApiKeyController.rotate": {
|
|
11747
|
+
parameters: {
|
|
11748
|
+
query?: never;
|
|
11749
|
+
header?: never;
|
|
11750
|
+
path: {
|
|
11751
|
+
organization_id: string;
|
|
11752
|
+
id: string;
|
|
11753
|
+
};
|
|
11754
|
+
cookie?: never;
|
|
11755
|
+
};
|
|
11756
|
+
requestBody?: never;
|
|
11757
|
+
responses: {
|
|
11758
|
+
/** @description Key rotada (nuevo secreto) */
|
|
11759
|
+
201: {
|
|
11760
|
+
headers: {
|
|
11761
|
+
[name: string]: unknown;
|
|
11762
|
+
};
|
|
11763
|
+
content: {
|
|
11764
|
+
"application/json": components["schemas"]["ApiKeyCreatedResponse"];
|
|
11765
|
+
};
|
|
11766
|
+
};
|
|
11767
|
+
/** @description Sin permiso */
|
|
11768
|
+
403: {
|
|
11769
|
+
headers: {
|
|
11770
|
+
[name: string]: unknown;
|
|
11771
|
+
};
|
|
11772
|
+
content: {
|
|
11773
|
+
"application/json": components["schemas"]["Error"];
|
|
11774
|
+
};
|
|
11775
|
+
};
|
|
11776
|
+
};
|
|
11777
|
+
};
|
|
11380
11778
|
"HablalaApiWeb.Scheduling.AppointmentController.index": {
|
|
11381
11779
|
parameters: {
|
|
11382
11780
|
query?: {
|
|
@@ -14573,6 +14971,50 @@ interface operations {
|
|
|
14573
14971
|
};
|
|
14574
14972
|
};
|
|
14575
14973
|
};
|
|
14974
|
+
"HablalaApiWeb.Data.RecordController.trash": {
|
|
14975
|
+
parameters: {
|
|
14976
|
+
query?: {
|
|
14977
|
+
limit?: number;
|
|
14978
|
+
cursor?: string;
|
|
14979
|
+
};
|
|
14980
|
+
header?: never;
|
|
14981
|
+
path: {
|
|
14982
|
+
organization_id: string;
|
|
14983
|
+
object_slug: string;
|
|
14984
|
+
};
|
|
14985
|
+
cookie?: never;
|
|
14986
|
+
};
|
|
14987
|
+
requestBody?: never;
|
|
14988
|
+
responses: {
|
|
14989
|
+
/** @description Records borrados */
|
|
14990
|
+
200: {
|
|
14991
|
+
headers: {
|
|
14992
|
+
[name: string]: unknown;
|
|
14993
|
+
};
|
|
14994
|
+
content: {
|
|
14995
|
+
"application/json": components["schemas"]["QueryResultResponse"];
|
|
14996
|
+
};
|
|
14997
|
+
};
|
|
14998
|
+
/** @description Sin permiso */
|
|
14999
|
+
403: {
|
|
15000
|
+
headers: {
|
|
15001
|
+
[name: string]: unknown;
|
|
15002
|
+
};
|
|
15003
|
+
content: {
|
|
15004
|
+
"application/json": components["schemas"]["Error"];
|
|
15005
|
+
};
|
|
15006
|
+
};
|
|
15007
|
+
/** @description Objeto desconocido */
|
|
15008
|
+
404: {
|
|
15009
|
+
headers: {
|
|
15010
|
+
[name: string]: unknown;
|
|
15011
|
+
};
|
|
15012
|
+
content: {
|
|
15013
|
+
"application/json": components["schemas"]["Error"];
|
|
15014
|
+
};
|
|
15015
|
+
};
|
|
15016
|
+
};
|
|
15017
|
+
};
|
|
14576
15018
|
"HablalaApiWeb.Data.RecordController.show": {
|
|
14577
15019
|
parameters: {
|
|
14578
15020
|
query?: never;
|
|
@@ -14767,6 +15209,48 @@ interface operations {
|
|
|
14767
15209
|
};
|
|
14768
15210
|
};
|
|
14769
15211
|
};
|
|
15212
|
+
"HablalaApiWeb.Data.RecordController.dependencies": {
|
|
15213
|
+
parameters: {
|
|
15214
|
+
query?: never;
|
|
15215
|
+
header?: never;
|
|
15216
|
+
path: {
|
|
15217
|
+
organization_id: string;
|
|
15218
|
+
object_slug: string;
|
|
15219
|
+
record_id: string;
|
|
15220
|
+
};
|
|
15221
|
+
cookie?: never;
|
|
15222
|
+
};
|
|
15223
|
+
requestBody?: never;
|
|
15224
|
+
responses: {
|
|
15225
|
+
/** @description Dependencias */
|
|
15226
|
+
200: {
|
|
15227
|
+
headers: {
|
|
15228
|
+
[name: string]: unknown;
|
|
15229
|
+
};
|
|
15230
|
+
content: {
|
|
15231
|
+
"application/json": components["schemas"]["RecordDependencies"];
|
|
15232
|
+
};
|
|
15233
|
+
};
|
|
15234
|
+
/** @description Sin permiso ABAC sobre este record */
|
|
15235
|
+
403: {
|
|
15236
|
+
headers: {
|
|
15237
|
+
[name: string]: unknown;
|
|
15238
|
+
};
|
|
15239
|
+
content: {
|
|
15240
|
+
"application/json": components["schemas"]["Error"];
|
|
15241
|
+
};
|
|
15242
|
+
};
|
|
15243
|
+
/** @description No encontrado (o de otro objeto) */
|
|
15244
|
+
404: {
|
|
15245
|
+
headers: {
|
|
15246
|
+
[name: string]: unknown;
|
|
15247
|
+
};
|
|
15248
|
+
content: {
|
|
15249
|
+
"application/json": components["schemas"]["Error"];
|
|
15250
|
+
};
|
|
15251
|
+
};
|
|
15252
|
+
};
|
|
15253
|
+
};
|
|
14770
15254
|
"HablalaApiWeb.Data.EventController.index": {
|
|
14771
15255
|
parameters: {
|
|
14772
15256
|
query?: never;
|
|
@@ -16349,7 +16833,7 @@ interface operations {
|
|
|
16349
16833
|
};
|
|
16350
16834
|
};
|
|
16351
16835
|
responses: {
|
|
16352
|
-
/** @description
|
|
16836
|
+
/** @description Sobre de subida prefirmado */
|
|
16353
16837
|
200: {
|
|
16354
16838
|
headers: {
|
|
16355
16839
|
[name: string]: unknown;
|
|
@@ -17021,6 +17505,70 @@ interface operations {
|
|
|
17021
17505
|
};
|
|
17022
17506
|
};
|
|
17023
17507
|
};
|
|
17508
|
+
"HablalaApiWeb.PublicApi.CheckoutController.create": {
|
|
17509
|
+
parameters: {
|
|
17510
|
+
query?: never;
|
|
17511
|
+
header?: {
|
|
17512
|
+
/** @description Clave de idempotencia (estándar Stripe): dos envíos con la misma → un pedido. */
|
|
17513
|
+
"Idempotency-Key"?: string;
|
|
17514
|
+
};
|
|
17515
|
+
path?: never;
|
|
17516
|
+
cookie?: never;
|
|
17517
|
+
};
|
|
17518
|
+
/** @description Artículos del carrito + moneda */
|
|
17519
|
+
requestBody?: {
|
|
17520
|
+
content: {
|
|
17521
|
+
"application/json": components["schemas"]["CheckoutRequest"];
|
|
17522
|
+
};
|
|
17523
|
+
};
|
|
17524
|
+
responses: {
|
|
17525
|
+
/** @description Pedido creado */
|
|
17526
|
+
201: {
|
|
17527
|
+
headers: {
|
|
17528
|
+
[name: string]: unknown;
|
|
17529
|
+
};
|
|
17530
|
+
content: {
|
|
17531
|
+
"application/json": components["schemas"]["OrderResponse"];
|
|
17532
|
+
};
|
|
17533
|
+
};
|
|
17534
|
+
/** @description Sesión anónima o token inválido */
|
|
17535
|
+
401: {
|
|
17536
|
+
headers: {
|
|
17537
|
+
[name: string]: unknown;
|
|
17538
|
+
};
|
|
17539
|
+
content: {
|
|
17540
|
+
"application/json": components["schemas"]["Error"];
|
|
17541
|
+
};
|
|
17542
|
+
};
|
|
17543
|
+
/** @description El ABAC no permite crear pedidos */
|
|
17544
|
+
403: {
|
|
17545
|
+
headers: {
|
|
17546
|
+
[name: string]: unknown;
|
|
17547
|
+
};
|
|
17548
|
+
content: {
|
|
17549
|
+
"application/json": components["schemas"]["Error"];
|
|
17550
|
+
};
|
|
17551
|
+
};
|
|
17552
|
+
/** @description Sin stock suficiente para una variante */
|
|
17553
|
+
409: {
|
|
17554
|
+
headers: {
|
|
17555
|
+
[name: string]: unknown;
|
|
17556
|
+
};
|
|
17557
|
+
content: {
|
|
17558
|
+
"application/json": components["schemas"]["Error"];
|
|
17559
|
+
};
|
|
17560
|
+
};
|
|
17561
|
+
/** @description Carrito inválido */
|
|
17562
|
+
422: {
|
|
17563
|
+
headers: {
|
|
17564
|
+
[name: string]: unknown;
|
|
17565
|
+
};
|
|
17566
|
+
content: {
|
|
17567
|
+
"application/json": components["schemas"]["Error"];
|
|
17568
|
+
};
|
|
17569
|
+
};
|
|
17570
|
+
};
|
|
17571
|
+
};
|
|
17024
17572
|
"HablalaApiWeb.PublicApi.RecordController.create (2)": {
|
|
17025
17573
|
parameters: {
|
|
17026
17574
|
query?: never;
|
|
@@ -17589,6 +18137,49 @@ interface operations {
|
|
|
17589
18137
|
};
|
|
17590
18138
|
};
|
|
17591
18139
|
};
|
|
18140
|
+
"HablalaApiWeb.PublicApi.AvailabilityController.create": {
|
|
18141
|
+
parameters: {
|
|
18142
|
+
query?: never;
|
|
18143
|
+
header?: never;
|
|
18144
|
+
path?: never;
|
|
18145
|
+
cookie?: never;
|
|
18146
|
+
};
|
|
18147
|
+
/** @description Ids de variante */
|
|
18148
|
+
requestBody?: {
|
|
18149
|
+
content: {
|
|
18150
|
+
"application/json": components["schemas"]["VariantAvailabilityRequest"];
|
|
18151
|
+
};
|
|
18152
|
+
};
|
|
18153
|
+
responses: {
|
|
18154
|
+
/** @description Disponibilidad por variante */
|
|
18155
|
+
200: {
|
|
18156
|
+
headers: {
|
|
18157
|
+
[name: string]: unknown;
|
|
18158
|
+
};
|
|
18159
|
+
content: {
|
|
18160
|
+
"application/json": components["schemas"]["AvailabilityResponse"];
|
|
18161
|
+
};
|
|
18162
|
+
};
|
|
18163
|
+
/** @description Token inválido */
|
|
18164
|
+
401: {
|
|
18165
|
+
headers: {
|
|
18166
|
+
[name: string]: unknown;
|
|
18167
|
+
};
|
|
18168
|
+
content: {
|
|
18169
|
+
"application/json": components["schemas"]["Error"];
|
|
18170
|
+
};
|
|
18171
|
+
};
|
|
18172
|
+
/** @description Petición inválida */
|
|
18173
|
+
422: {
|
|
18174
|
+
headers: {
|
|
18175
|
+
[name: string]: unknown;
|
|
18176
|
+
};
|
|
18177
|
+
content: {
|
|
18178
|
+
"application/json": components["schemas"]["Error"];
|
|
18179
|
+
};
|
|
18180
|
+
};
|
|
18181
|
+
};
|
|
18182
|
+
};
|
|
17592
18183
|
"HablalaApiWeb.Notifications.PushTokenController.create": {
|
|
17593
18184
|
parameters: {
|
|
17594
18185
|
query?: never;
|