@hablala/api-contract 0.6.0 → 0.8.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 +884 -46
- package/openapi.json +1377 -84
- 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;
|
|
@@ -1295,6 +1335,26 @@ interface paths {
|
|
|
1295
1335
|
patch?: never;
|
|
1296
1336
|
trace?: never;
|
|
1297
1337
|
};
|
|
1338
|
+
"/v1/objects/{object_slug}/uploads": {
|
|
1339
|
+
parameters: {
|
|
1340
|
+
query?: never;
|
|
1341
|
+
header?: never;
|
|
1342
|
+
path?: never;
|
|
1343
|
+
cookie?: never;
|
|
1344
|
+
};
|
|
1345
|
+
get?: never;
|
|
1346
|
+
put?: never;
|
|
1347
|
+
/**
|
|
1348
|
+
* Pedir una URL de subida para un attribute file (staged upload)
|
|
1349
|
+
* @description Fase 1 del flujo de archivos de un record: valida el archivo declarado contra el config del attribute `file` (`accepted_content_types` con comodines `image/*`, `max_size_bytes`) y devuelve el destino de subida prefirmado. Luego: (2) `PUT` del blob crudo a `uploadUrl` con `headers`; (3) confirmar escribiendo el record con `fileUrl` en el envelope del attribute (`{"url": fileUrl, …}`) — el servidor verifica el blob contra el storage (tamaño/tipo REALES) y lo promueve a su ubicación definitiva. Un blob nunca confirmado expira solo. Gate `records:create`.
|
|
1350
|
+
*/
|
|
1351
|
+
post: operations["HablalaApiWeb.Machine.UploadController.create"];
|
|
1352
|
+
delete?: never;
|
|
1353
|
+
options?: never;
|
|
1354
|
+
head?: never;
|
|
1355
|
+
patch?: never;
|
|
1356
|
+
trace?: never;
|
|
1357
|
+
};
|
|
1298
1358
|
"/v1/organizations": {
|
|
1299
1359
|
parameters: {
|
|
1300
1360
|
query?: never;
|
|
@@ -1408,7 +1468,7 @@ interface paths {
|
|
|
1408
1468
|
put?: never;
|
|
1409
1469
|
/**
|
|
1410
1470
|
* Crear un access token
|
|
1411
|
-
* @description Emite una credencial de máquina (`
|
|
1471
|
+
* @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
1472
|
*/
|
|
1413
1473
|
post: operations["HablalaApiWeb.AccessTokens.TokenController.create"];
|
|
1414
1474
|
delete?: never;
|
|
@@ -1524,8 +1584,8 @@ interface paths {
|
|
|
1524
1584
|
get: operations["HablalaApiWeb.PublicApi.ApiKeyController.index"];
|
|
1525
1585
|
put?: never;
|
|
1526
1586
|
/**
|
|
1527
|
-
* Crear
|
|
1528
|
-
* @description Emite una
|
|
1587
|
+
* Crear un par de API keys
|
|
1588
|
+
* @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
1589
|
*/
|
|
1530
1590
|
post: operations["HablalaApiWeb.PublicApi.ApiKeyController.create"];
|
|
1531
1591
|
delete?: never;
|
|
@@ -1554,6 +1614,26 @@ interface paths {
|
|
|
1554
1614
|
patch?: never;
|
|
1555
1615
|
trace?: never;
|
|
1556
1616
|
};
|
|
1617
|
+
"/v1/organizations/{organization_id}/api-keys/{id}/rotate": {
|
|
1618
|
+
parameters: {
|
|
1619
|
+
query?: never;
|
|
1620
|
+
header?: never;
|
|
1621
|
+
path?: never;
|
|
1622
|
+
cookie?: never;
|
|
1623
|
+
};
|
|
1624
|
+
get?: never;
|
|
1625
|
+
put?: never;
|
|
1626
|
+
/**
|
|
1627
|
+
* Rotar una API key
|
|
1628
|
+
* @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.
|
|
1629
|
+
*/
|
|
1630
|
+
post: operations["HablalaApiWeb.PublicApi.ApiKeyController.rotate"];
|
|
1631
|
+
delete?: never;
|
|
1632
|
+
options?: never;
|
|
1633
|
+
head?: never;
|
|
1634
|
+
patch?: never;
|
|
1635
|
+
trace?: never;
|
|
1636
|
+
};
|
|
1557
1637
|
"/v1/organizations/{organization_id}/appointments": {
|
|
1558
1638
|
parameters: {
|
|
1559
1639
|
query?: never;
|
|
@@ -2623,7 +2703,7 @@ interface paths {
|
|
|
2623
2703
|
put?: never;
|
|
2624
2704
|
/**
|
|
2625
2705
|
* 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 `
|
|
2706
|
+
* @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
2707
|
*/
|
|
2628
2708
|
post: operations["HablalaApiWeb.Oauth.GrantController.approve"];
|
|
2629
2709
|
delete?: never;
|
|
@@ -2726,6 +2806,26 @@ interface paths {
|
|
|
2726
2806
|
patch?: never;
|
|
2727
2807
|
trace?: never;
|
|
2728
2808
|
};
|
|
2809
|
+
"/v1/organizations/{organization_id}/objects/{object_slug}/records/trash": {
|
|
2810
|
+
parameters: {
|
|
2811
|
+
query?: never;
|
|
2812
|
+
header?: never;
|
|
2813
|
+
path?: never;
|
|
2814
|
+
cookie?: never;
|
|
2815
|
+
};
|
|
2816
|
+
/**
|
|
2817
|
+
* Listar los records borrados (soft) del objeto — la Papelera
|
|
2818
|
+
* @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`.
|
|
2819
|
+
*/
|
|
2820
|
+
get: operations["HablalaApiWeb.Data.RecordController.trash"];
|
|
2821
|
+
put?: never;
|
|
2822
|
+
post?: never;
|
|
2823
|
+
delete?: never;
|
|
2824
|
+
options?: never;
|
|
2825
|
+
head?: never;
|
|
2826
|
+
patch?: never;
|
|
2827
|
+
trace?: never;
|
|
2828
|
+
};
|
|
2729
2829
|
"/v1/organizations/{organization_id}/objects/{object_slug}/records/{id}": {
|
|
2730
2830
|
parameters: {
|
|
2731
2831
|
query?: never;
|
|
@@ -2746,6 +2846,26 @@ interface paths {
|
|
|
2746
2846
|
patch: operations["HablalaApiWeb.Data.RecordController.update (2)"];
|
|
2747
2847
|
trace?: never;
|
|
2748
2848
|
};
|
|
2849
|
+
"/v1/organizations/{organization_id}/objects/{object_slug}/records/{record_id}/dependencies": {
|
|
2850
|
+
parameters: {
|
|
2851
|
+
query?: never;
|
|
2852
|
+
header?: never;
|
|
2853
|
+
path?: never;
|
|
2854
|
+
cookie?: never;
|
|
2855
|
+
};
|
|
2856
|
+
/**
|
|
2857
|
+
* Preview de dependencias de un record (impacto de borrarlo, sin borrar)
|
|
2858
|
+
* @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.
|
|
2859
|
+
*/
|
|
2860
|
+
get: operations["HablalaApiWeb.Data.RecordController.dependencies"];
|
|
2861
|
+
put?: never;
|
|
2862
|
+
post?: never;
|
|
2863
|
+
delete?: never;
|
|
2864
|
+
options?: never;
|
|
2865
|
+
head?: never;
|
|
2866
|
+
patch?: never;
|
|
2867
|
+
trace?: never;
|
|
2868
|
+
};
|
|
2749
2869
|
"/v1/organizations/{organization_id}/objects/{object_slug}/records/{record_id}/events": {
|
|
2750
2870
|
parameters: {
|
|
2751
2871
|
query?: never;
|
|
@@ -3268,8 +3388,8 @@ interface paths {
|
|
|
3268
3388
|
get?: never;
|
|
3269
3389
|
put?: never;
|
|
3270
3390
|
/**
|
|
3271
|
-
* Pedir
|
|
3272
|
-
* @description Devuelve
|
|
3391
|
+
* Pedir un sobre de subida prefirmado
|
|
3392
|
+
* @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
3393
|
*/
|
|
3274
3394
|
post: operations["HablalaApiWeb.UploadController.presign"];
|
|
3275
3395
|
delete?: never;
|
|
@@ -3461,6 +3581,26 @@ interface paths {
|
|
|
3461
3581
|
patch?: never;
|
|
3462
3582
|
trace?: never;
|
|
3463
3583
|
};
|
|
3584
|
+
"/v1/public/me/checkout": {
|
|
3585
|
+
parameters: {
|
|
3586
|
+
query?: never;
|
|
3587
|
+
header?: never;
|
|
3588
|
+
path?: never;
|
|
3589
|
+
cookie?: never;
|
|
3590
|
+
};
|
|
3591
|
+
get?: never;
|
|
3592
|
+
put?: never;
|
|
3593
|
+
/**
|
|
3594
|
+
* Checkout nativo (crear un pedido)
|
|
3595
|
+
* @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`.
|
|
3596
|
+
*/
|
|
3597
|
+
post: operations["HablalaApiWeb.PublicApi.CheckoutController.create"];
|
|
3598
|
+
delete?: never;
|
|
3599
|
+
options?: never;
|
|
3600
|
+
head?: never;
|
|
3601
|
+
patch?: never;
|
|
3602
|
+
trace?: never;
|
|
3603
|
+
};
|
|
3464
3604
|
"/v1/public/me/objects/{object_slug}/records": {
|
|
3465
3605
|
parameters: {
|
|
3466
3606
|
query?: never;
|
|
@@ -3497,6 +3637,26 @@ interface paths {
|
|
|
3497
3637
|
patch: operations["HablalaApiWeb.PublicApi.RecordController.update (2)"];
|
|
3498
3638
|
trace?: never;
|
|
3499
3639
|
};
|
|
3640
|
+
"/v1/public/me/objects/{object_slug}/uploads": {
|
|
3641
|
+
parameters: {
|
|
3642
|
+
query?: never;
|
|
3643
|
+
header?: never;
|
|
3644
|
+
path?: never;
|
|
3645
|
+
cookie?: never;
|
|
3646
|
+
};
|
|
3647
|
+
get?: never;
|
|
3648
|
+
put?: never;
|
|
3649
|
+
/**
|
|
3650
|
+
* Pedir una URL de subida para un attribute file (canal público)
|
|
3651
|
+
* @description Como el staged upload del canal de máquina (`POST /v1/objects/{object_slug}/uploads`), pero gobernado por el ABAC default-deny del canal público: exige una policy `allow` de `create` o `update` para el principal (`public` con la API key; `end_user` con el session token en la variante `/me`) sobre el object — sin policy, 403. Flujo: presign → `PUT` del blob a `uploadUrl` → confirmar escribiendo el record con `fileUrl` en el envelope del attribute `file`.
|
|
3652
|
+
*/
|
|
3653
|
+
post: operations["HablalaApiWeb.PublicApi.UploadController.create"];
|
|
3654
|
+
delete?: never;
|
|
3655
|
+
options?: never;
|
|
3656
|
+
head?: never;
|
|
3657
|
+
patch?: never;
|
|
3658
|
+
trace?: never;
|
|
3659
|
+
};
|
|
3500
3660
|
"/v1/public/me/query": {
|
|
3501
3661
|
parameters: {
|
|
3502
3662
|
query?: never;
|
|
@@ -3553,6 +3713,26 @@ interface paths {
|
|
|
3553
3713
|
patch: operations["HablalaApiWeb.PublicApi.RecordController.update (4)"];
|
|
3554
3714
|
trace?: never;
|
|
3555
3715
|
};
|
|
3716
|
+
"/v1/public/objects/{object_slug}/uploads": {
|
|
3717
|
+
parameters: {
|
|
3718
|
+
query?: never;
|
|
3719
|
+
header?: never;
|
|
3720
|
+
path?: never;
|
|
3721
|
+
cookie?: never;
|
|
3722
|
+
};
|
|
3723
|
+
get?: never;
|
|
3724
|
+
put?: never;
|
|
3725
|
+
/**
|
|
3726
|
+
* Pedir una URL de subida para un attribute file (canal público)
|
|
3727
|
+
* @description Como el staged upload del canal de máquina (`POST /v1/objects/{object_slug}/uploads`), pero gobernado por el ABAC default-deny del canal público: exige una policy `allow` de `create` o `update` para el principal (`public` con la API key; `end_user` con el session token en la variante `/me`) sobre el object — sin policy, 403. Flujo: presign → `PUT` del blob a `uploadUrl` → confirmar escribiendo el record con `fileUrl` en el envelope del attribute `file`.
|
|
3728
|
+
*/
|
|
3729
|
+
post: operations["HablalaApiWeb.PublicApi.UploadController.create (2)"];
|
|
3730
|
+
delete?: never;
|
|
3731
|
+
options?: never;
|
|
3732
|
+
head?: never;
|
|
3733
|
+
patch?: never;
|
|
3734
|
+
trace?: never;
|
|
3735
|
+
};
|
|
3556
3736
|
"/v1/public/query": {
|
|
3557
3737
|
parameters: {
|
|
3558
3738
|
query?: never;
|
|
@@ -3613,6 +3793,26 @@ interface paths {
|
|
|
3613
3793
|
patch?: never;
|
|
3614
3794
|
trace?: never;
|
|
3615
3795
|
};
|
|
3796
|
+
"/v1/public/variants/availability": {
|
|
3797
|
+
parameters: {
|
|
3798
|
+
query?: never;
|
|
3799
|
+
header?: never;
|
|
3800
|
+
path?: never;
|
|
3801
|
+
cookie?: never;
|
|
3802
|
+
};
|
|
3803
|
+
get?: never;
|
|
3804
|
+
put?: never;
|
|
3805
|
+
/**
|
|
3806
|
+
* Disponibilidad de compra de variantes (Public API)
|
|
3807
|
+
* @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.
|
|
3808
|
+
*/
|
|
3809
|
+
post: operations["HablalaApiWeb.PublicApi.AvailabilityController.create"];
|
|
3810
|
+
delete?: never;
|
|
3811
|
+
options?: never;
|
|
3812
|
+
head?: never;
|
|
3813
|
+
patch?: never;
|
|
3814
|
+
trace?: never;
|
|
3815
|
+
};
|
|
3616
3816
|
"/v1/push-tokens": {
|
|
3617
3817
|
parameters: {
|
|
3618
3818
|
query?: never;
|
|
@@ -4132,7 +4332,7 @@ interface components {
|
|
|
4132
4332
|
schemas: {
|
|
4133
4333
|
/**
|
|
4134
4334
|
* AccessToken
|
|
4135
|
-
* @description Metadatos de un access token de máquina (`
|
|
4335
|
+
* @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
4336
|
*/
|
|
4137
4337
|
AccessToken: {
|
|
4138
4338
|
/** @description ¿Ni revocado ni expirado? */
|
|
@@ -4148,7 +4348,7 @@ interface components {
|
|
|
4148
4348
|
name: string;
|
|
4149
4349
|
/** @description Permisos RBAC del token (`recurso:accion`), su propio scope (mínimo privilegio). */
|
|
4150
4350
|
permissions: string[];
|
|
4151
|
-
/** @description Primeros caracteres del secreto (no secreto), p. ej. `
|
|
4351
|
+
/** @description Primeros caracteres del secreto (no secreto), p. ej. `mat_a1b2`. */
|
|
4152
4352
|
prefix?: string | null;
|
|
4153
4353
|
/** Format: date-time */
|
|
4154
4354
|
revokedAt?: string | null;
|
|
@@ -4173,7 +4373,7 @@ interface components {
|
|
|
4173
4373
|
prefix?: string | null;
|
|
4174
4374
|
/** Format: date-time */
|
|
4175
4375
|
revokedAt?: string | null;
|
|
4176
|
-
/** @description El secreto en claro (`
|
|
4376
|
+
/** @description El secreto en claro (`mat_…`). Solo en esta respuesta. */
|
|
4177
4377
|
token: string;
|
|
4178
4378
|
/** Format: date-time */
|
|
4179
4379
|
updatedAt?: string;
|
|
@@ -4208,8 +4408,8 @@ interface components {
|
|
|
4208
4408
|
* @description Caducidad opcional (ISO 8601). Omitir = no caduca.
|
|
4209
4409
|
*/
|
|
4210
4410
|
expiresAt?: string;
|
|
4211
|
-
/** @description Etiqueta para
|
|
4212
|
-
name
|
|
4411
|
+
/** @description Etiqueta opcional para el panel. Por defecto: "Default". */
|
|
4412
|
+
name?: string;
|
|
4213
4413
|
/** @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
4414
|
permissions?: string[];
|
|
4215
4415
|
/** @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 +4629,8 @@ interface components {
|
|
|
4429
4629
|
*/
|
|
4430
4630
|
mode?: "authoritative" | "additive";
|
|
4431
4631
|
};
|
|
4632
|
+
/** @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. */
|
|
4633
|
+
packages?: string[];
|
|
4432
4634
|
policies?: components["schemas"]["ManifestPolicy"][] | {
|
|
4433
4635
|
items: components["schemas"]["ManifestPolicy"][];
|
|
4434
4636
|
/**
|
|
@@ -4666,9 +4868,21 @@ interface components {
|
|
|
4666
4868
|
ApiKeyCreatedResponse: {
|
|
4667
4869
|
data: components["schemas"]["ApiKeyCreated"];
|
|
4668
4870
|
};
|
|
4871
|
+
/**
|
|
4872
|
+
* ApiKeyPairCreated
|
|
4873
|
+
* @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.
|
|
4874
|
+
*/
|
|
4875
|
+
ApiKeyPairCreated: {
|
|
4876
|
+
publishable: components["schemas"]["ApiKeyCreated"];
|
|
4877
|
+
secret: components["schemas"]["ApiKeyCreated"];
|
|
4878
|
+
};
|
|
4879
|
+
/** ApiKeyPairCreatedResponse */
|
|
4880
|
+
ApiKeyPairCreatedResponse: {
|
|
4881
|
+
data: components["schemas"]["ApiKeyPairCreated"];
|
|
4882
|
+
};
|
|
4669
4883
|
/**
|
|
4670
4884
|
* ApiKeyRequest
|
|
4671
|
-
* @description Datos para emitir
|
|
4885
|
+
* @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
4886
|
*/
|
|
4673
4887
|
ApiKeyRequest: {
|
|
4674
4888
|
/**
|
|
@@ -4677,11 +4891,11 @@ interface components {
|
|
|
4677
4891
|
*/
|
|
4678
4892
|
expiresAt?: string;
|
|
4679
4893
|
/**
|
|
4680
|
-
* @description Por defecto: publishable.
|
|
4894
|
+
* @description Solo vía avanzada (una key). Por defecto: publishable.
|
|
4681
4895
|
* @enum {string}
|
|
4682
4896
|
*/
|
|
4683
4897
|
kind?: "publishable" | "secret";
|
|
4684
|
-
/** @description Etiqueta para
|
|
4898
|
+
/** @description Etiqueta opcional para el panel. Por defecto: "Default". */
|
|
4685
4899
|
name?: string;
|
|
4686
4900
|
};
|
|
4687
4901
|
/** ApiKeysResponse */
|
|
@@ -4881,6 +5095,16 @@ interface components {
|
|
|
4881
5095
|
AvailabilityRequest: {
|
|
4882
5096
|
availability: components["schemas"]["AvailabilityInput"];
|
|
4883
5097
|
};
|
|
5098
|
+
/**
|
|
5099
|
+
* AvailabilityResponse
|
|
5100
|
+
* @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).
|
|
5101
|
+
*/
|
|
5102
|
+
AvailabilityResponse: {
|
|
5103
|
+
/** @description Mapa `variantId` (`rec_…`) → `true`/`false` (comprable). */
|
|
5104
|
+
availability: {
|
|
5105
|
+
[key: string]: boolean;
|
|
5106
|
+
};
|
|
5107
|
+
};
|
|
4884
5108
|
/**
|
|
4885
5109
|
* BanMemberRequest
|
|
4886
5110
|
* @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 +5274,25 @@ interface components {
|
|
|
5050
5274
|
topic?: string;
|
|
5051
5275
|
};
|
|
5052
5276
|
};
|
|
5277
|
+
/**
|
|
5278
|
+
* CheckoutItem
|
|
5279
|
+
* @description Un artículo del checkout: qué variante comprar y cuántas unidades.
|
|
5280
|
+
*/
|
|
5281
|
+
CheckoutItem: {
|
|
5282
|
+
/** @description Unidades a comprar (≥ 1). */
|
|
5283
|
+
quantity: number;
|
|
5284
|
+
/** @description Id público (`rec_…`) del `product_variant`. */
|
|
5285
|
+
variantId: string;
|
|
5286
|
+
};
|
|
5287
|
+
/**
|
|
5288
|
+
* CheckoutRequest
|
|
5289
|
+
* @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.
|
|
5290
|
+
*/
|
|
5291
|
+
CheckoutRequest: {
|
|
5292
|
+
/** @description Código ISO 4217 (MXN, USD, EUR). */
|
|
5293
|
+
currency: string;
|
|
5294
|
+
items: components["schemas"]["CheckoutItem"][];
|
|
5295
|
+
};
|
|
5053
5296
|
/**
|
|
5054
5297
|
* ContactContent
|
|
5055
5298
|
* @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 +5754,26 @@ interface components {
|
|
|
5511
5754
|
EventsResponse: {
|
|
5512
5755
|
data: components["schemas"]["Event"][];
|
|
5513
5756
|
};
|
|
5757
|
+
/**
|
|
5758
|
+
* FileEnvelope
|
|
5759
|
+
* @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.
|
|
5760
|
+
*/
|
|
5761
|
+
FileEnvelope: {
|
|
5762
|
+
/** @description Placeholder BlurHash de la imagen (preview borroso instantáneo). Null si no es imagen. */
|
|
5763
|
+
blurhash?: string | null;
|
|
5764
|
+
content_type?: string | null;
|
|
5765
|
+
/** @description Duración del medio en milisegundos (audio/video). Permite pintar el reproductor sin descargar. */
|
|
5766
|
+
duration_ms?: number | null;
|
|
5767
|
+
filename?: string | null;
|
|
5768
|
+
/** @description Alto en px. */
|
|
5769
|
+
height?: number | null;
|
|
5770
|
+
/** @description Tamaño en bytes. */
|
|
5771
|
+
size?: number | null;
|
|
5772
|
+
/** @description URL permanente del blob en el object storage (la que devuelve el presign). */
|
|
5773
|
+
url: string;
|
|
5774
|
+
/** @description Ancho en px (para reservar el aspect-ratio y evitar layout shift). */
|
|
5775
|
+
width?: number | null;
|
|
5776
|
+
};
|
|
5514
5777
|
/** Friend */
|
|
5515
5778
|
Friend: {
|
|
5516
5779
|
displayName?: string | null;
|
|
@@ -5626,13 +5889,15 @@ interface components {
|
|
|
5626
5889
|
};
|
|
5627
5890
|
/**
|
|
5628
5891
|
* GraphNode
|
|
5629
|
-
* @description Un nodo del grafo de datos: un record, con su object, su título y su grado.
|
|
5892
|
+
* @description Un nodo del grafo de datos: un record, con su object, su título, su imagen representativa y su grado.
|
|
5630
5893
|
*/
|
|
5631
5894
|
GraphNode: {
|
|
5632
5895
|
/** @description Nº de aristas incidentes al nodo (grado). El cliente lo usa para el tamaño. */
|
|
5633
5896
|
degree: number;
|
|
5634
5897
|
/** @description Id público del record (`rec_…`). */
|
|
5635
5898
|
id: string;
|
|
5899
|
+
/** @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. */
|
|
5900
|
+
imageUrl?: string | null;
|
|
5636
5901
|
/** @description Slug del object del record (para color/navegación). */
|
|
5637
5902
|
objectSlug: string;
|
|
5638
5903
|
/** @description Título legible del record (atributo name/nombre/title…), recortado por field_mask. */
|
|
@@ -6664,7 +6929,7 @@ interface components {
|
|
|
6664
6929
|
};
|
|
6665
6930
|
/**
|
|
6666
6931
|
* OauthGrantApproveRequest
|
|
6667
|
-
* @description Aprobación del consent: qué permisos tendrá el token (mismas reglas que emitir un `
|
|
6932
|
+
* @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
6933
|
*/
|
|
6669
6934
|
OauthGrantApproveRequest: {
|
|
6670
6935
|
/** @description Permisos crudos `recurso:accion` (vía avanzada). */
|
|
@@ -6695,10 +6960,10 @@ interface components {
|
|
|
6695
6960
|
};
|
|
6696
6961
|
/**
|
|
6697
6962
|
* OauthTokenResponse
|
|
6698
|
-
* @description Éxito del token endpoint (RFC 6749 §5.1): el `access_token` es un `
|
|
6963
|
+
* @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
6964
|
*/
|
|
6700
6965
|
OauthTokenResponse: {
|
|
6701
|
-
/** @description El secreto `
|
|
6966
|
+
/** @description El secreto `mat_…` en claro. */
|
|
6702
6967
|
access_token: string;
|
|
6703
6968
|
/** @description Permisos concedidos, separados por espacio (RFC 6749 §3.3). */
|
|
6704
6969
|
scope?: string;
|
|
@@ -6758,6 +7023,25 @@ interface components {
|
|
|
6758
7023
|
ObjectsResponse: {
|
|
6759
7024
|
data: components["schemas"]["Object"][];
|
|
6760
7025
|
};
|
|
7026
|
+
/**
|
|
7027
|
+
* OrderLineItem
|
|
7028
|
+
* @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.
|
|
7029
|
+
*/
|
|
7030
|
+
OrderLineItem: {
|
|
7031
|
+
id: string;
|
|
7032
|
+
/** @description Valores del renglón por slug: `variant_ref`, `product_ref`, `title`, `sku`, `quantity`, `unit_price` (centavos), `line_total` (centavos). */
|
|
7033
|
+
properties: Record<string, never>;
|
|
7034
|
+
};
|
|
7035
|
+
/**
|
|
7036
|
+
* OrderResponse
|
|
7037
|
+
* @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`.
|
|
7038
|
+
*/
|
|
7039
|
+
OrderResponse: {
|
|
7040
|
+
id: string;
|
|
7041
|
+
lineItems: components["schemas"]["OrderLineItem"][];
|
|
7042
|
+
/** @description Valores del pedido por slug (order_number, financial_status, total_amount…). */
|
|
7043
|
+
properties: Record<string, never>;
|
|
7044
|
+
};
|
|
6761
7045
|
/** Organization */
|
|
6762
7046
|
Organization: {
|
|
6763
7047
|
/** @description Icono de la organización; `null` usa el fallback de iniciales. */
|
|
@@ -6961,6 +7245,7 @@ interface components {
|
|
|
6961
7245
|
Policy: {
|
|
6962
7246
|
/** @enum {string} */
|
|
6963
7247
|
action: "read" | "create" | "update" | "delete";
|
|
7248
|
+
/** @description Predicado por fila: hoja `{attr, op, value|value_from}` o árbol `and`/`or`. `attr` admite un attribute path de UN nivel por un attribute `reference` (`pet.owner`: condiciona sobre el record destino; fail-closed si la referencia es nula). */
|
|
6964
7249
|
condition?: Record<string, never>;
|
|
6965
7250
|
/** @enum {string} */
|
|
6966
7251
|
effect: "allow" | "deny";
|
|
@@ -6982,6 +7267,7 @@ interface components {
|
|
|
6982
7267
|
PolicyInput: {
|
|
6983
7268
|
/** @enum {string} */
|
|
6984
7269
|
action: "read" | "create" | "update" | "delete";
|
|
7270
|
+
/** @description Predicado por fila: hoja `{attr, op, value|value_from}` o árbol `and`/`or`. `attr` admite un attribute path de UN nivel por un attribute `reference` (`pet.owner`: condiciona sobre el record destino; fail-closed si la referencia es nula). */
|
|
6985
7271
|
condition?: Record<string, never>;
|
|
6986
7272
|
/** @enum {string} */
|
|
6987
7273
|
effect: "allow" | "deny";
|
|
@@ -7011,6 +7297,8 @@ interface components {
|
|
|
7011
7297
|
/** @description MIME type del archivo (p. ej. `image/png`). */
|
|
7012
7298
|
contentType?: string;
|
|
7013
7299
|
filename: string;
|
|
7300
|
+
/** @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`. */
|
|
7301
|
+
maxSize?: number | null;
|
|
7014
7302
|
/**
|
|
7015
7303
|
* @description Uso del archivo. `avatar` restringe el `contentType` a imágenes (perfil de usuario / icono de org). Omitir para adjuntos genéricos.
|
|
7016
7304
|
* @enum {string|null}
|
|
@@ -7021,20 +7309,48 @@ interface components {
|
|
|
7021
7309
|
PresignResponse: {
|
|
7022
7310
|
data: components["schemas"]["PresignResult"];
|
|
7023
7311
|
};
|
|
7024
|
-
/**
|
|
7312
|
+
/**
|
|
7313
|
+
* PresignResult
|
|
7314
|
+
* @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.
|
|
7315
|
+
*/
|
|
7025
7316
|
PresignResult: {
|
|
7026
|
-
/** @description
|
|
7317
|
+
/** @description Campos del form multipart a enviar ANTES del archivo (POST policy: `key`, `Content-Type`, `Policy`, firma…). Vacío cuando `method` es `PUT`. */
|
|
7318
|
+
fields?: {
|
|
7319
|
+
[key: string]: string;
|
|
7320
|
+
};
|
|
7321
|
+
/** @description URL final del blob; va en el `attachment` del mensaje o el atributo `file`. */
|
|
7027
7322
|
fileUrl: string;
|
|
7028
|
-
/** @description Cabeceras que el cliente
|
|
7029
|
-
headers?:
|
|
7030
|
-
|
|
7031
|
-
|
|
7032
|
-
/**
|
|
7033
|
-
|
|
7323
|
+
/** @description Cabeceras que el cliente envía en el `PUT`. Vacío cuando `method` es `POST`. */
|
|
7324
|
+
headers?: {
|
|
7325
|
+
[key: string]: string;
|
|
7326
|
+
};
|
|
7327
|
+
/**
|
|
7328
|
+
* @description Cómo subir: `POST` (form multipart, POST policy) o `PUT` (blob directo).
|
|
7329
|
+
* @enum {string}
|
|
7330
|
+
*/
|
|
7331
|
+
method: "POST" | "PUT";
|
|
7332
|
+
/** @description Destino de la subida. */
|
|
7333
|
+
url: string;
|
|
7334
|
+
};
|
|
7335
|
+
/**
|
|
7336
|
+
* PublicOrganization
|
|
7337
|
+
* @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.
|
|
7338
|
+
*/
|
|
7339
|
+
PublicOrganization: {
|
|
7340
|
+
/** @description Logo/icono de la marca (el "server icon" del tenant), o `null`. */
|
|
7341
|
+
avatarUrl?: string | null;
|
|
7342
|
+
/** @description ID público de la organización. */
|
|
7343
|
+
id: string;
|
|
7344
|
+
/** @description Nombre visible de la marca. */
|
|
7345
|
+
name: string;
|
|
7346
|
+
settings: components["schemas"]["ManifestSettings"];
|
|
7347
|
+
/** @description Slug estable de la organización. */
|
|
7348
|
+
slug: string;
|
|
7034
7349
|
};
|
|
7035
7350
|
/** PublicSchema */
|
|
7036
7351
|
PublicSchema: {
|
|
7037
7352
|
objects: components["schemas"]["PublicSchemaObject"][];
|
|
7353
|
+
organization: components["schemas"]["PublicOrganization"];
|
|
7038
7354
|
relationships: components["schemas"]["PublicSchemaRelationship"][];
|
|
7039
7355
|
};
|
|
7040
7356
|
/**
|
|
@@ -7204,7 +7520,10 @@ interface components {
|
|
|
7204
7520
|
/** Format: date-time */
|
|
7205
7521
|
insertedAt?: string;
|
|
7206
7522
|
objectId?: string;
|
|
7207
|
-
|
|
7523
|
+
/** @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. */
|
|
7524
|
+
properties: {
|
|
7525
|
+
[key: string]: components["schemas"]["FileEnvelope"][] | string | number | boolean | string[] | Record<string, never>;
|
|
7526
|
+
};
|
|
7208
7527
|
/** @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
7528
|
referenceLabels?: {
|
|
7210
7529
|
[key: string]: {
|
|
@@ -7215,9 +7534,27 @@ interface components {
|
|
|
7215
7534
|
/** Format: date-time */
|
|
7216
7535
|
updatedAt?: string;
|
|
7217
7536
|
};
|
|
7537
|
+
/**
|
|
7538
|
+
* RecordDependencies
|
|
7539
|
+
* @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.
|
|
7540
|
+
*/
|
|
7541
|
+
RecordDependencies: {
|
|
7542
|
+
data: {
|
|
7543
|
+
/** @description Referencias core activas que bloquean; vacía si se puede borrar. */
|
|
7544
|
+
blockers: {
|
|
7545
|
+
count: number;
|
|
7546
|
+
/** @description Etiqueta legible (p. ej. "facturas sin cerrar"). */
|
|
7547
|
+
label: string;
|
|
7548
|
+
}[];
|
|
7549
|
+
/** @description `false` si algún blocker impediría el borrado. */
|
|
7550
|
+
deletable: boolean;
|
|
7551
|
+
/** @description Aristas del grafo (ambos extremos) que se romperían al borrar. */
|
|
7552
|
+
edgeCount: number;
|
|
7553
|
+
};
|
|
7554
|
+
};
|
|
7218
7555
|
/** RecordInput */
|
|
7219
7556
|
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). */
|
|
7557
|
+
/** @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
7558
|
properties: Record<string, never>;
|
|
7222
7559
|
};
|
|
7223
7560
|
/** RecordRequest */
|
|
@@ -7228,6 +7565,38 @@ interface components {
|
|
|
7228
7565
|
RecordResponse: {
|
|
7229
7566
|
data: components["schemas"]["Record"];
|
|
7230
7567
|
};
|
|
7568
|
+
/**
|
|
7569
|
+
* RecordUploadRequest
|
|
7570
|
+
* @description Archivo a adjuntar a un attribute `file` de un record: para qué attribute es y qué se va a subir. El servidor lo valida contra el config del attribute (`accepted_content_types` con comodines `image/*`, `max_size_bytes`) antes de emitir la URL de subida.
|
|
7571
|
+
*/
|
|
7572
|
+
RecordUploadRequest: {
|
|
7573
|
+
/** @description Slug del attribute `data_type: file` del object al que se adjuntará. */
|
|
7574
|
+
attribute: string;
|
|
7575
|
+
/** @description MIME type del archivo (p. ej. `image/jpeg`). Se valida contra `accepted_content_types` del attribute. */
|
|
7576
|
+
contentType: string;
|
|
7577
|
+
/** @description Nombre del archivo (p. ej. `firulais.jpg`). */
|
|
7578
|
+
filename: string;
|
|
7579
|
+
/** @description Tamaño declarado en bytes (opcional). Si excede `max_size_bytes` el presign se rechaza aquí (fail-fast); la verdad final la impone el storage al confirmar el record (el tamaño REAL se relee del blob). */
|
|
7580
|
+
size?: number | null;
|
|
7581
|
+
};
|
|
7582
|
+
/** RecordUploadResponse */
|
|
7583
|
+
RecordUploadResponse: {
|
|
7584
|
+
data: components["schemas"]["RecordUploadTarget"];
|
|
7585
|
+
};
|
|
7586
|
+
/**
|
|
7587
|
+
* RecordUploadTarget
|
|
7588
|
+
* @description Destino de subida prefirmado (*staged upload target*, patrón Shopify `stagedUploadsCreate` / S3 presigned upload): el cliente hace `PUT` del blob crudo a `uploadUrl` con `headers`, y luego CONFIRMA escribiendo el record con `fileUrl` en el envelope del attribute `file` (`{"url": fileUrl, "filename": …, "content_type": …}`). Un blob nunca confirmado expira solo en el staging.
|
|
7589
|
+
*/
|
|
7590
|
+
RecordUploadTarget: {
|
|
7591
|
+
/** @description URL del blob (en staging `pending/…`): va como `url` en el envelope del attribute `file` al crear/actualizar el record. Al confirmarse, el servidor la reescribe a la definitiva. */
|
|
7592
|
+
fileUrl: string;
|
|
7593
|
+
/** @description Cabeceras que el cliente debe enviar en el `PUT` (p. ej. `content-type`). */
|
|
7594
|
+
headers?: {
|
|
7595
|
+
[key: string]: string;
|
|
7596
|
+
};
|
|
7597
|
+
/** @description Destino del `PUT` del blob (URL prefirmada, expira). */
|
|
7598
|
+
uploadUrl: string;
|
|
7599
|
+
};
|
|
7231
7600
|
/** RegisterCredentials */
|
|
7232
7601
|
RegisterCredentials: {
|
|
7233
7602
|
/** Format: email */
|
|
@@ -7652,6 +8021,13 @@ interface components {
|
|
|
7652
8021
|
UsernameAvailableResponse: {
|
|
7653
8022
|
data: components["schemas"]["UsernameAvailability"];
|
|
7654
8023
|
};
|
|
8024
|
+
/**
|
|
8025
|
+
* VariantAvailabilityRequest
|
|
8026
|
+
* @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).
|
|
8027
|
+
*/
|
|
8028
|
+
VariantAvailabilityRequest: {
|
|
8029
|
+
variantIds: string[];
|
|
8030
|
+
};
|
|
7655
8031
|
/** VerificationRejectRequest */
|
|
7656
8032
|
VerificationRejectRequest: {
|
|
7657
8033
|
/** @description Motivo legible del rechazo (se muestra al negocio). */
|
|
@@ -9825,7 +10201,7 @@ interface operations {
|
|
|
9825
10201
|
};
|
|
9826
10202
|
};
|
|
9827
10203
|
responses: {
|
|
9828
|
-
/** @description
|
|
10204
|
+
/** @description Sobre de subida prefirmado */
|
|
9829
10205
|
200: {
|
|
9830
10206
|
headers: {
|
|
9831
10207
|
[name: string]: unknown;
|
|
@@ -10379,28 +10755,30 @@ interface operations {
|
|
|
10379
10755
|
};
|
|
10380
10756
|
};
|
|
10381
10757
|
};
|
|
10382
|
-
"HablalaApiWeb.Machine.RecordController.
|
|
10758
|
+
"HablalaApiWeb.Machine.RecordController.trash": {
|
|
10383
10759
|
parameters: {
|
|
10384
|
-
query?:
|
|
10760
|
+
query?: {
|
|
10761
|
+
limit?: number;
|
|
10762
|
+
cursor?: string;
|
|
10763
|
+
};
|
|
10385
10764
|
header?: never;
|
|
10386
10765
|
path: {
|
|
10387
10766
|
object_slug: string;
|
|
10388
|
-
id: string;
|
|
10389
10767
|
};
|
|
10390
10768
|
cookie?: never;
|
|
10391
10769
|
};
|
|
10392
10770
|
requestBody?: never;
|
|
10393
10771
|
responses: {
|
|
10394
|
-
/** @description
|
|
10772
|
+
/** @description Records borrados */
|
|
10395
10773
|
200: {
|
|
10396
10774
|
headers: {
|
|
10397
10775
|
[name: string]: unknown;
|
|
10398
10776
|
};
|
|
10399
10777
|
content: {
|
|
10400
|
-
"application/json": components["schemas"]["
|
|
10778
|
+
"application/json": components["schemas"]["QueryResultResponse"];
|
|
10401
10779
|
};
|
|
10402
10780
|
};
|
|
10403
|
-
/** @description Sin permiso
|
|
10781
|
+
/** @description Sin permiso */
|
|
10404
10782
|
403: {
|
|
10405
10783
|
headers: {
|
|
10406
10784
|
[name: string]: unknown;
|
|
@@ -10409,7 +10787,7 @@ interface operations {
|
|
|
10409
10787
|
"application/json": components["schemas"]["Error"];
|
|
10410
10788
|
};
|
|
10411
10789
|
};
|
|
10412
|
-
/** @description
|
|
10790
|
+
/** @description Objeto desconocido */
|
|
10413
10791
|
404: {
|
|
10414
10792
|
headers: {
|
|
10415
10793
|
[name: string]: unknown;
|
|
@@ -10420,7 +10798,7 @@ interface operations {
|
|
|
10420
10798
|
};
|
|
10421
10799
|
};
|
|
10422
10800
|
};
|
|
10423
|
-
"HablalaApiWeb.Machine.RecordController.
|
|
10801
|
+
"HablalaApiWeb.Machine.RecordController.show": {
|
|
10424
10802
|
parameters: {
|
|
10425
10803
|
query?: never;
|
|
10426
10804
|
header?: never;
|
|
@@ -10430,8 +10808,49 @@ interface operations {
|
|
|
10430
10808
|
};
|
|
10431
10809
|
cookie?: never;
|
|
10432
10810
|
};
|
|
10433
|
-
|
|
10434
|
-
|
|
10811
|
+
requestBody?: never;
|
|
10812
|
+
responses: {
|
|
10813
|
+
/** @description Record */
|
|
10814
|
+
200: {
|
|
10815
|
+
headers: {
|
|
10816
|
+
[name: string]: unknown;
|
|
10817
|
+
};
|
|
10818
|
+
content: {
|
|
10819
|
+
"application/json": components["schemas"]["RecordResponse"];
|
|
10820
|
+
};
|
|
10821
|
+
};
|
|
10822
|
+
/** @description Sin permiso ABAC sobre este record */
|
|
10823
|
+
403: {
|
|
10824
|
+
headers: {
|
|
10825
|
+
[name: string]: unknown;
|
|
10826
|
+
};
|
|
10827
|
+
content: {
|
|
10828
|
+
"application/json": components["schemas"]["Error"];
|
|
10829
|
+
};
|
|
10830
|
+
};
|
|
10831
|
+
/** @description No encontrado */
|
|
10832
|
+
404: {
|
|
10833
|
+
headers: {
|
|
10834
|
+
[name: string]: unknown;
|
|
10835
|
+
};
|
|
10836
|
+
content: {
|
|
10837
|
+
"application/json": components["schemas"]["Error"];
|
|
10838
|
+
};
|
|
10839
|
+
};
|
|
10840
|
+
};
|
|
10841
|
+
};
|
|
10842
|
+
"HablalaApiWeb.Machine.RecordController.update": {
|
|
10843
|
+
parameters: {
|
|
10844
|
+
query?: never;
|
|
10845
|
+
header?: never;
|
|
10846
|
+
path: {
|
|
10847
|
+
object_slug: string;
|
|
10848
|
+
id: string;
|
|
10849
|
+
};
|
|
10850
|
+
cookie?: never;
|
|
10851
|
+
};
|
|
10852
|
+
/** @description Propiedades del record */
|
|
10853
|
+
requestBody?: {
|
|
10435
10854
|
content: {
|
|
10436
10855
|
"application/json": components["schemas"]["RecordRequest"];
|
|
10437
10856
|
};
|
|
@@ -10569,6 +10988,47 @@ interface operations {
|
|
|
10569
10988
|
};
|
|
10570
10989
|
};
|
|
10571
10990
|
};
|
|
10991
|
+
"HablalaApiWeb.Machine.RecordController.dependencies": {
|
|
10992
|
+
parameters: {
|
|
10993
|
+
query?: never;
|
|
10994
|
+
header?: never;
|
|
10995
|
+
path: {
|
|
10996
|
+
object_slug: string;
|
|
10997
|
+
record_id: string;
|
|
10998
|
+
};
|
|
10999
|
+
cookie?: never;
|
|
11000
|
+
};
|
|
11001
|
+
requestBody?: never;
|
|
11002
|
+
responses: {
|
|
11003
|
+
/** @description Dependencias */
|
|
11004
|
+
200: {
|
|
11005
|
+
headers: {
|
|
11006
|
+
[name: string]: unknown;
|
|
11007
|
+
};
|
|
11008
|
+
content: {
|
|
11009
|
+
"application/json": components["schemas"]["RecordDependencies"];
|
|
11010
|
+
};
|
|
11011
|
+
};
|
|
11012
|
+
/** @description Sin permiso ABAC sobre este record */
|
|
11013
|
+
403: {
|
|
11014
|
+
headers: {
|
|
11015
|
+
[name: string]: unknown;
|
|
11016
|
+
};
|
|
11017
|
+
content: {
|
|
11018
|
+
"application/json": components["schemas"]["Error"];
|
|
11019
|
+
};
|
|
11020
|
+
};
|
|
11021
|
+
/** @description No encontrado (o de otro objeto) */
|
|
11022
|
+
404: {
|
|
11023
|
+
headers: {
|
|
11024
|
+
[name: string]: unknown;
|
|
11025
|
+
};
|
|
11026
|
+
content: {
|
|
11027
|
+
"application/json": components["schemas"]["Error"];
|
|
11028
|
+
};
|
|
11029
|
+
};
|
|
11030
|
+
};
|
|
11031
|
+
};
|
|
10572
11032
|
"HablalaApiWeb.Machine.EventController.index": {
|
|
10573
11033
|
parameters: {
|
|
10574
11034
|
query?: never;
|
|
@@ -10642,6 +11102,51 @@ interface operations {
|
|
|
10642
11102
|
};
|
|
10643
11103
|
};
|
|
10644
11104
|
};
|
|
11105
|
+
"HablalaApiWeb.Machine.UploadController.create": {
|
|
11106
|
+
parameters: {
|
|
11107
|
+
query?: never;
|
|
11108
|
+
header?: never;
|
|
11109
|
+
path: {
|
|
11110
|
+
object_slug: string;
|
|
11111
|
+
};
|
|
11112
|
+
cookie?: never;
|
|
11113
|
+
};
|
|
11114
|
+
/** @description Archivo a subir */
|
|
11115
|
+
requestBody?: {
|
|
11116
|
+
content: {
|
|
11117
|
+
"application/json": components["schemas"]["RecordUploadRequest"];
|
|
11118
|
+
};
|
|
11119
|
+
};
|
|
11120
|
+
responses: {
|
|
11121
|
+
/** @description Destino de subida prefirmado */
|
|
11122
|
+
200: {
|
|
11123
|
+
headers: {
|
|
11124
|
+
[name: string]: unknown;
|
|
11125
|
+
};
|
|
11126
|
+
content: {
|
|
11127
|
+
"application/json": components["schemas"]["RecordUploadResponse"];
|
|
11128
|
+
};
|
|
11129
|
+
};
|
|
11130
|
+
/** @description Objeto desconocido */
|
|
11131
|
+
404: {
|
|
11132
|
+
headers: {
|
|
11133
|
+
[name: string]: unknown;
|
|
11134
|
+
};
|
|
11135
|
+
content: {
|
|
11136
|
+
"application/json": components["schemas"]["Error"];
|
|
11137
|
+
};
|
|
11138
|
+
};
|
|
11139
|
+
/** @description Attribute inexistente/no-file, MIME no admitido o tamaño excedido */
|
|
11140
|
+
422: {
|
|
11141
|
+
headers: {
|
|
11142
|
+
[name: string]: unknown;
|
|
11143
|
+
};
|
|
11144
|
+
content: {
|
|
11145
|
+
"application/json": components["schemas"]["Error"];
|
|
11146
|
+
};
|
|
11147
|
+
};
|
|
11148
|
+
};
|
|
11149
|
+
};
|
|
10645
11150
|
"HablalaApiWeb.Orgs.OrganizationController.index": {
|
|
10646
11151
|
parameters: {
|
|
10647
11152
|
query?: never;
|
|
@@ -11311,20 +11816,20 @@ interface operations {
|
|
|
11311
11816
|
};
|
|
11312
11817
|
cookie?: never;
|
|
11313
11818
|
};
|
|
11314
|
-
/** @description Datos del
|
|
11819
|
+
/** @description Datos del par */
|
|
11315
11820
|
requestBody?: {
|
|
11316
11821
|
content: {
|
|
11317
11822
|
"application/json": components["schemas"]["ApiKeyRequest"];
|
|
11318
11823
|
};
|
|
11319
11824
|
};
|
|
11320
11825
|
responses: {
|
|
11321
|
-
/** @description
|
|
11826
|
+
/** @description Par creado (con secretos) */
|
|
11322
11827
|
201: {
|
|
11323
11828
|
headers: {
|
|
11324
11829
|
[name: string]: unknown;
|
|
11325
11830
|
};
|
|
11326
11831
|
content: {
|
|
11327
|
-
"application/json": components["schemas"]["
|
|
11832
|
+
"application/json": components["schemas"]["ApiKeyPairCreatedResponse"];
|
|
11328
11833
|
};
|
|
11329
11834
|
};
|
|
11330
11835
|
/** @description Sin permiso */
|
|
@@ -11377,6 +11882,38 @@ interface operations {
|
|
|
11377
11882
|
};
|
|
11378
11883
|
};
|
|
11379
11884
|
};
|
|
11885
|
+
"HablalaApiWeb.PublicApi.ApiKeyController.rotate": {
|
|
11886
|
+
parameters: {
|
|
11887
|
+
query?: never;
|
|
11888
|
+
header?: never;
|
|
11889
|
+
path: {
|
|
11890
|
+
organization_id: string;
|
|
11891
|
+
id: string;
|
|
11892
|
+
};
|
|
11893
|
+
cookie?: never;
|
|
11894
|
+
};
|
|
11895
|
+
requestBody?: never;
|
|
11896
|
+
responses: {
|
|
11897
|
+
/** @description Key rotada (nuevo secreto) */
|
|
11898
|
+
201: {
|
|
11899
|
+
headers: {
|
|
11900
|
+
[name: string]: unknown;
|
|
11901
|
+
};
|
|
11902
|
+
content: {
|
|
11903
|
+
"application/json": components["schemas"]["ApiKeyCreatedResponse"];
|
|
11904
|
+
};
|
|
11905
|
+
};
|
|
11906
|
+
/** @description Sin permiso */
|
|
11907
|
+
403: {
|
|
11908
|
+
headers: {
|
|
11909
|
+
[name: string]: unknown;
|
|
11910
|
+
};
|
|
11911
|
+
content: {
|
|
11912
|
+
"application/json": components["schemas"]["Error"];
|
|
11913
|
+
};
|
|
11914
|
+
};
|
|
11915
|
+
};
|
|
11916
|
+
};
|
|
11380
11917
|
"HablalaApiWeb.Scheduling.AppointmentController.index": {
|
|
11381
11918
|
parameters: {
|
|
11382
11919
|
query?: {
|
|
@@ -14573,6 +15110,50 @@ interface operations {
|
|
|
14573
15110
|
};
|
|
14574
15111
|
};
|
|
14575
15112
|
};
|
|
15113
|
+
"HablalaApiWeb.Data.RecordController.trash": {
|
|
15114
|
+
parameters: {
|
|
15115
|
+
query?: {
|
|
15116
|
+
limit?: number;
|
|
15117
|
+
cursor?: string;
|
|
15118
|
+
};
|
|
15119
|
+
header?: never;
|
|
15120
|
+
path: {
|
|
15121
|
+
organization_id: string;
|
|
15122
|
+
object_slug: string;
|
|
15123
|
+
};
|
|
15124
|
+
cookie?: never;
|
|
15125
|
+
};
|
|
15126
|
+
requestBody?: never;
|
|
15127
|
+
responses: {
|
|
15128
|
+
/** @description Records borrados */
|
|
15129
|
+
200: {
|
|
15130
|
+
headers: {
|
|
15131
|
+
[name: string]: unknown;
|
|
15132
|
+
};
|
|
15133
|
+
content: {
|
|
15134
|
+
"application/json": components["schemas"]["QueryResultResponse"];
|
|
15135
|
+
};
|
|
15136
|
+
};
|
|
15137
|
+
/** @description Sin permiso */
|
|
15138
|
+
403: {
|
|
15139
|
+
headers: {
|
|
15140
|
+
[name: string]: unknown;
|
|
15141
|
+
};
|
|
15142
|
+
content: {
|
|
15143
|
+
"application/json": components["schemas"]["Error"];
|
|
15144
|
+
};
|
|
15145
|
+
};
|
|
15146
|
+
/** @description Objeto desconocido */
|
|
15147
|
+
404: {
|
|
15148
|
+
headers: {
|
|
15149
|
+
[name: string]: unknown;
|
|
15150
|
+
};
|
|
15151
|
+
content: {
|
|
15152
|
+
"application/json": components["schemas"]["Error"];
|
|
15153
|
+
};
|
|
15154
|
+
};
|
|
15155
|
+
};
|
|
15156
|
+
};
|
|
14576
15157
|
"HablalaApiWeb.Data.RecordController.show": {
|
|
14577
15158
|
parameters: {
|
|
14578
15159
|
query?: never;
|
|
@@ -14767,6 +15348,48 @@ interface operations {
|
|
|
14767
15348
|
};
|
|
14768
15349
|
};
|
|
14769
15350
|
};
|
|
15351
|
+
"HablalaApiWeb.Data.RecordController.dependencies": {
|
|
15352
|
+
parameters: {
|
|
15353
|
+
query?: never;
|
|
15354
|
+
header?: never;
|
|
15355
|
+
path: {
|
|
15356
|
+
organization_id: string;
|
|
15357
|
+
object_slug: string;
|
|
15358
|
+
record_id: string;
|
|
15359
|
+
};
|
|
15360
|
+
cookie?: never;
|
|
15361
|
+
};
|
|
15362
|
+
requestBody?: never;
|
|
15363
|
+
responses: {
|
|
15364
|
+
/** @description Dependencias */
|
|
15365
|
+
200: {
|
|
15366
|
+
headers: {
|
|
15367
|
+
[name: string]: unknown;
|
|
15368
|
+
};
|
|
15369
|
+
content: {
|
|
15370
|
+
"application/json": components["schemas"]["RecordDependencies"];
|
|
15371
|
+
};
|
|
15372
|
+
};
|
|
15373
|
+
/** @description Sin permiso ABAC sobre este record */
|
|
15374
|
+
403: {
|
|
15375
|
+
headers: {
|
|
15376
|
+
[name: string]: unknown;
|
|
15377
|
+
};
|
|
15378
|
+
content: {
|
|
15379
|
+
"application/json": components["schemas"]["Error"];
|
|
15380
|
+
};
|
|
15381
|
+
};
|
|
15382
|
+
/** @description No encontrado (o de otro objeto) */
|
|
15383
|
+
404: {
|
|
15384
|
+
headers: {
|
|
15385
|
+
[name: string]: unknown;
|
|
15386
|
+
};
|
|
15387
|
+
content: {
|
|
15388
|
+
"application/json": components["schemas"]["Error"];
|
|
15389
|
+
};
|
|
15390
|
+
};
|
|
15391
|
+
};
|
|
15392
|
+
};
|
|
14770
15393
|
"HablalaApiWeb.Data.EventController.index": {
|
|
14771
15394
|
parameters: {
|
|
14772
15395
|
query?: never;
|
|
@@ -16349,7 +16972,7 @@ interface operations {
|
|
|
16349
16972
|
};
|
|
16350
16973
|
};
|
|
16351
16974
|
responses: {
|
|
16352
|
-
/** @description
|
|
16975
|
+
/** @description Sobre de subida prefirmado */
|
|
16353
16976
|
200: {
|
|
16354
16977
|
headers: {
|
|
16355
16978
|
[name: string]: unknown;
|
|
@@ -17021,6 +17644,70 @@ interface operations {
|
|
|
17021
17644
|
};
|
|
17022
17645
|
};
|
|
17023
17646
|
};
|
|
17647
|
+
"HablalaApiWeb.PublicApi.CheckoutController.create": {
|
|
17648
|
+
parameters: {
|
|
17649
|
+
query?: never;
|
|
17650
|
+
header?: {
|
|
17651
|
+
/** @description Clave de idempotencia (estándar Stripe): dos envíos con la misma → un pedido. */
|
|
17652
|
+
"Idempotency-Key"?: string;
|
|
17653
|
+
};
|
|
17654
|
+
path?: never;
|
|
17655
|
+
cookie?: never;
|
|
17656
|
+
};
|
|
17657
|
+
/** @description Artículos del carrito + moneda */
|
|
17658
|
+
requestBody?: {
|
|
17659
|
+
content: {
|
|
17660
|
+
"application/json": components["schemas"]["CheckoutRequest"];
|
|
17661
|
+
};
|
|
17662
|
+
};
|
|
17663
|
+
responses: {
|
|
17664
|
+
/** @description Pedido creado */
|
|
17665
|
+
201: {
|
|
17666
|
+
headers: {
|
|
17667
|
+
[name: string]: unknown;
|
|
17668
|
+
};
|
|
17669
|
+
content: {
|
|
17670
|
+
"application/json": components["schemas"]["OrderResponse"];
|
|
17671
|
+
};
|
|
17672
|
+
};
|
|
17673
|
+
/** @description Sesión anónima o token inválido */
|
|
17674
|
+
401: {
|
|
17675
|
+
headers: {
|
|
17676
|
+
[name: string]: unknown;
|
|
17677
|
+
};
|
|
17678
|
+
content: {
|
|
17679
|
+
"application/json": components["schemas"]["Error"];
|
|
17680
|
+
};
|
|
17681
|
+
};
|
|
17682
|
+
/** @description El ABAC no permite crear pedidos */
|
|
17683
|
+
403: {
|
|
17684
|
+
headers: {
|
|
17685
|
+
[name: string]: unknown;
|
|
17686
|
+
};
|
|
17687
|
+
content: {
|
|
17688
|
+
"application/json": components["schemas"]["Error"];
|
|
17689
|
+
};
|
|
17690
|
+
};
|
|
17691
|
+
/** @description Sin stock suficiente para una variante */
|
|
17692
|
+
409: {
|
|
17693
|
+
headers: {
|
|
17694
|
+
[name: string]: unknown;
|
|
17695
|
+
};
|
|
17696
|
+
content: {
|
|
17697
|
+
"application/json": components["schemas"]["Error"];
|
|
17698
|
+
};
|
|
17699
|
+
};
|
|
17700
|
+
/** @description Carrito inválido */
|
|
17701
|
+
422: {
|
|
17702
|
+
headers: {
|
|
17703
|
+
[name: string]: unknown;
|
|
17704
|
+
};
|
|
17705
|
+
content: {
|
|
17706
|
+
"application/json": components["schemas"]["Error"];
|
|
17707
|
+
};
|
|
17708
|
+
};
|
|
17709
|
+
};
|
|
17710
|
+
};
|
|
17024
17711
|
"HablalaApiWeb.PublicApi.RecordController.create (2)": {
|
|
17025
17712
|
parameters: {
|
|
17026
17713
|
query?: never;
|
|
@@ -17215,6 +17902,60 @@ interface operations {
|
|
|
17215
17902
|
};
|
|
17216
17903
|
};
|
|
17217
17904
|
};
|
|
17905
|
+
"HablalaApiWeb.PublicApi.UploadController.create": {
|
|
17906
|
+
parameters: {
|
|
17907
|
+
query?: never;
|
|
17908
|
+
header?: never;
|
|
17909
|
+
path: {
|
|
17910
|
+
object_slug: string;
|
|
17911
|
+
};
|
|
17912
|
+
cookie?: never;
|
|
17913
|
+
};
|
|
17914
|
+
/** @description Archivo a subir */
|
|
17915
|
+
requestBody?: {
|
|
17916
|
+
content: {
|
|
17917
|
+
"application/json": components["schemas"]["RecordUploadRequest"];
|
|
17918
|
+
};
|
|
17919
|
+
};
|
|
17920
|
+
responses: {
|
|
17921
|
+
/** @description Destino de subida prefirmado */
|
|
17922
|
+
200: {
|
|
17923
|
+
headers: {
|
|
17924
|
+
[name: string]: unknown;
|
|
17925
|
+
};
|
|
17926
|
+
content: {
|
|
17927
|
+
"application/json": components["schemas"]["RecordUploadResponse"];
|
|
17928
|
+
};
|
|
17929
|
+
};
|
|
17930
|
+
/** @description Sin policy allow de create/update para este principal */
|
|
17931
|
+
403: {
|
|
17932
|
+
headers: {
|
|
17933
|
+
[name: string]: unknown;
|
|
17934
|
+
};
|
|
17935
|
+
content: {
|
|
17936
|
+
"application/json": components["schemas"]["Error"];
|
|
17937
|
+
};
|
|
17938
|
+
};
|
|
17939
|
+
/** @description Objeto desconocido */
|
|
17940
|
+
404: {
|
|
17941
|
+
headers: {
|
|
17942
|
+
[name: string]: unknown;
|
|
17943
|
+
};
|
|
17944
|
+
content: {
|
|
17945
|
+
"application/json": components["schemas"]["Error"];
|
|
17946
|
+
};
|
|
17947
|
+
};
|
|
17948
|
+
/** @description Attribute inexistente/no-file, MIME no admitido o tamaño excedido */
|
|
17949
|
+
422: {
|
|
17950
|
+
headers: {
|
|
17951
|
+
[name: string]: unknown;
|
|
17952
|
+
};
|
|
17953
|
+
content: {
|
|
17954
|
+
"application/json": components["schemas"]["Error"];
|
|
17955
|
+
};
|
|
17956
|
+
};
|
|
17957
|
+
};
|
|
17958
|
+
};
|
|
17218
17959
|
"HablalaApiWeb.PublicApi.QueryController.create (2)": {
|
|
17219
17960
|
parameters: {
|
|
17220
17961
|
query?: never;
|
|
@@ -17470,6 +18211,60 @@ interface operations {
|
|
|
17470
18211
|
};
|
|
17471
18212
|
};
|
|
17472
18213
|
};
|
|
18214
|
+
"HablalaApiWeb.PublicApi.UploadController.create (2)": {
|
|
18215
|
+
parameters: {
|
|
18216
|
+
query?: never;
|
|
18217
|
+
header?: never;
|
|
18218
|
+
path: {
|
|
18219
|
+
object_slug: string;
|
|
18220
|
+
};
|
|
18221
|
+
cookie?: never;
|
|
18222
|
+
};
|
|
18223
|
+
/** @description Archivo a subir */
|
|
18224
|
+
requestBody?: {
|
|
18225
|
+
content: {
|
|
18226
|
+
"application/json": components["schemas"]["RecordUploadRequest"];
|
|
18227
|
+
};
|
|
18228
|
+
};
|
|
18229
|
+
responses: {
|
|
18230
|
+
/** @description Destino de subida prefirmado */
|
|
18231
|
+
200: {
|
|
18232
|
+
headers: {
|
|
18233
|
+
[name: string]: unknown;
|
|
18234
|
+
};
|
|
18235
|
+
content: {
|
|
18236
|
+
"application/json": components["schemas"]["RecordUploadResponse"];
|
|
18237
|
+
};
|
|
18238
|
+
};
|
|
18239
|
+
/** @description Sin policy allow de create/update para este principal */
|
|
18240
|
+
403: {
|
|
18241
|
+
headers: {
|
|
18242
|
+
[name: string]: unknown;
|
|
18243
|
+
};
|
|
18244
|
+
content: {
|
|
18245
|
+
"application/json": components["schemas"]["Error"];
|
|
18246
|
+
};
|
|
18247
|
+
};
|
|
18248
|
+
/** @description Objeto desconocido */
|
|
18249
|
+
404: {
|
|
18250
|
+
headers: {
|
|
18251
|
+
[name: string]: unknown;
|
|
18252
|
+
};
|
|
18253
|
+
content: {
|
|
18254
|
+
"application/json": components["schemas"]["Error"];
|
|
18255
|
+
};
|
|
18256
|
+
};
|
|
18257
|
+
/** @description Attribute inexistente/no-file, MIME no admitido o tamaño excedido */
|
|
18258
|
+
422: {
|
|
18259
|
+
headers: {
|
|
18260
|
+
[name: string]: unknown;
|
|
18261
|
+
};
|
|
18262
|
+
content: {
|
|
18263
|
+
"application/json": components["schemas"]["Error"];
|
|
18264
|
+
};
|
|
18265
|
+
};
|
|
18266
|
+
};
|
|
18267
|
+
};
|
|
17473
18268
|
"HablalaApiWeb.PublicApi.QueryController.create": {
|
|
17474
18269
|
parameters: {
|
|
17475
18270
|
query?: never;
|
|
@@ -17589,6 +18384,49 @@ interface operations {
|
|
|
17589
18384
|
};
|
|
17590
18385
|
};
|
|
17591
18386
|
};
|
|
18387
|
+
"HablalaApiWeb.PublicApi.AvailabilityController.create": {
|
|
18388
|
+
parameters: {
|
|
18389
|
+
query?: never;
|
|
18390
|
+
header?: never;
|
|
18391
|
+
path?: never;
|
|
18392
|
+
cookie?: never;
|
|
18393
|
+
};
|
|
18394
|
+
/** @description Ids de variante */
|
|
18395
|
+
requestBody?: {
|
|
18396
|
+
content: {
|
|
18397
|
+
"application/json": components["schemas"]["VariantAvailabilityRequest"];
|
|
18398
|
+
};
|
|
18399
|
+
};
|
|
18400
|
+
responses: {
|
|
18401
|
+
/** @description Disponibilidad por variante */
|
|
18402
|
+
200: {
|
|
18403
|
+
headers: {
|
|
18404
|
+
[name: string]: unknown;
|
|
18405
|
+
};
|
|
18406
|
+
content: {
|
|
18407
|
+
"application/json": components["schemas"]["AvailabilityResponse"];
|
|
18408
|
+
};
|
|
18409
|
+
};
|
|
18410
|
+
/** @description Token inválido */
|
|
18411
|
+
401: {
|
|
18412
|
+
headers: {
|
|
18413
|
+
[name: string]: unknown;
|
|
18414
|
+
};
|
|
18415
|
+
content: {
|
|
18416
|
+
"application/json": components["schemas"]["Error"];
|
|
18417
|
+
};
|
|
18418
|
+
};
|
|
18419
|
+
/** @description Petición inválida */
|
|
18420
|
+
422: {
|
|
18421
|
+
headers: {
|
|
18422
|
+
[name: string]: unknown;
|
|
18423
|
+
};
|
|
18424
|
+
content: {
|
|
18425
|
+
"application/json": components["schemas"]["Error"];
|
|
18426
|
+
};
|
|
18427
|
+
};
|
|
18428
|
+
};
|
|
18429
|
+
};
|
|
17592
18430
|
"HablalaApiWeb.Notifications.PushTokenController.create": {
|
|
17593
18431
|
parameters: {
|
|
17594
18432
|
query?: never;
|