@hablala/api-contract 0.9.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.d.ts +739 -50
  2. package/openapi.json +1014 -57
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -67,6 +67,46 @@ interface paths {
67
67
  patch?: never;
68
68
  trace?: never;
69
69
  };
70
+ "/v1/actions/{slug}": {
71
+ parameters: {
72
+ query?: never;
73
+ header?: never;
74
+ path?: never;
75
+ cookie?: never;
76
+ };
77
+ get?: never;
78
+ put?: never;
79
+ /**
80
+ * Ejecutar una action transaccional
81
+ * @description Corre los steps de la action `slug` en UNA transacción (todo-o-nada), interpolando el input, y devuelve los records creados por step. `create_rental`/`register_return` y similares. Gate: records:create.
82
+ */
83
+ post: operations["post /v1/actions/{slug}"];
84
+ delete?: never;
85
+ options?: never;
86
+ head?: never;
87
+ patch?: never;
88
+ trace?: never;
89
+ };
90
+ "/v1/aggregate": {
91
+ parameters: {
92
+ query?: never;
93
+ header?: never;
94
+ path?: never;
95
+ cookie?: never;
96
+ };
97
+ get?: never;
98
+ put?: never;
99
+ /**
100
+ * Ejecutar una aggregation query
101
+ * @description Agrupa records por `dimensions` y calcula `measures` (count/sum/avg/min/max), bajo la misma gobernanza (RBAC + ABAC default-deny) que la lectura puntual. Reemplaza los reportes que serían RPCs de SQL por-tenant.
102
+ */
103
+ post: operations["post /v1/aggregate"];
104
+ delete?: never;
105
+ options?: never;
106
+ head?: never;
107
+ patch?: never;
108
+ trace?: never;
109
+ };
70
110
  "/v1/device-links": {
71
111
  parameters: {
72
112
  query?: never;
@@ -1067,6 +1107,70 @@ interface paths {
1067
1107
  patch?: never;
1068
1108
  trace?: never;
1069
1109
  };
1110
+ "/v1/members/me": {
1111
+ parameters: {
1112
+ query?: never;
1113
+ header?: never;
1114
+ path?: never;
1115
+ cookie?: never;
1116
+ };
1117
+ /**
1118
+ * El miembro autenticado (quién soy)
1119
+ * @description Devuelve el miembro de la member session actual: id, email, nombre visible y sus roles. El equivalente a `getCurrentUser` de una app interna.
1120
+ */
1121
+ get: operations["get /v1/members/me"];
1122
+ put?: never;
1123
+ post?: never;
1124
+ delete?: never;
1125
+ options?: never;
1126
+ head?: never;
1127
+ patch?: never;
1128
+ trace?: never;
1129
+ };
1130
+ "/v1/members/session": {
1131
+ parameters: {
1132
+ query?: never;
1133
+ header?: never;
1134
+ path?: never;
1135
+ cookie?: never;
1136
+ };
1137
+ get?: never;
1138
+ put?: never;
1139
+ /**
1140
+ * Iniciar sesión de un miembro de la organización (login)
1141
+ * @description Autentica a un miembro humano (empleado que opera la org) por email+password y devuelve un member session token (`mem_…`) que porta su rol. La organización sale de la API key de la app. Es el login de operador de una app interna (patrón Organizations+Members).
1142
+ */
1143
+ post: operations["post /v1/members/session"];
1144
+ /**
1145
+ * Cerrar la sesión de miembro (logout)
1146
+ * @description Revoca el member session token. Idempotente.
1147
+ */
1148
+ delete: operations["delete /v1/members/session"];
1149
+ options?: never;
1150
+ head?: never;
1151
+ patch?: never;
1152
+ trace?: never;
1153
+ };
1154
+ "/v1/members/session/refresh": {
1155
+ parameters: {
1156
+ query?: never;
1157
+ header?: never;
1158
+ path?: never;
1159
+ cookie?: never;
1160
+ };
1161
+ get?: never;
1162
+ put?: never;
1163
+ /**
1164
+ * Renovar la sesión de miembro
1165
+ * @description Rota el member session token: revoca el actual y emite uno nuevo para la misma membresía (patrón WorkOS refresh). Autenticado por el `mem_` actual.
1166
+ */
1167
+ post: operations["post /v1/members/session/refresh"];
1168
+ delete?: never;
1169
+ options?: never;
1170
+ head?: never;
1171
+ patch?: never;
1172
+ trace?: never;
1173
+ };
1070
1174
  "/v1/oauth/device/code": {
1071
1175
  parameters: {
1072
1176
  query?: never;
@@ -1670,6 +1774,26 @@ interface paths {
1670
1774
  patch: operations["patch /v1/organizations/{organization_id}/agents/{id}"];
1671
1775
  trace?: never;
1672
1776
  };
1777
+ "/v1/organizations/{organization_id}/aggregate": {
1778
+ parameters: {
1779
+ query?: never;
1780
+ header?: never;
1781
+ path?: never;
1782
+ cookie?: never;
1783
+ };
1784
+ get?: never;
1785
+ put?: never;
1786
+ /**
1787
+ * Ejecutar una aggregation query
1788
+ * @description Agrupa records por `dimensions` y calcula `measures` (count/sum/avg/min/max), bajo la misma gobernanza (RBAC + ABAC default-deny) que la lectura puntual. Reemplaza los reportes que serían RPCs de SQL por-tenant.
1789
+ */
1790
+ post: operations["post /v1/organizations/{organization_id}/aggregate"];
1791
+ delete?: never;
1792
+ options?: never;
1793
+ head?: never;
1794
+ patch?: never;
1795
+ trace?: never;
1796
+ };
1673
1797
  "/v1/organizations/{organization_id}/api-keys": {
1674
1798
  parameters: {
1675
1799
  query?: never;
@@ -3750,6 +3874,26 @@ interface paths {
3750
3874
  patch: operations["patch /v1/policies/{id}"];
3751
3875
  trace?: never;
3752
3876
  };
3877
+ "/v1/public/aggregate": {
3878
+ parameters: {
3879
+ query?: never;
3880
+ header?: never;
3881
+ path?: never;
3882
+ cookie?: never;
3883
+ };
3884
+ get?: never;
3885
+ put?: never;
3886
+ /**
3887
+ * Agregar por la Data API pública (reportes)
3888
+ * @description Agrupa records por `dimensions` y calcula `measures` (count/sum/avg/min/max), autenticado por una API key. Bajo el MISMO default-deny que la lectura: solo agrega lo que las policies exponen al principal `public`/`end_user`.
3889
+ */
3890
+ post: operations["post /v1/public/aggregate"];
3891
+ delete?: never;
3892
+ options?: never;
3893
+ head?: never;
3894
+ patch?: never;
3895
+ trace?: never;
3896
+ };
3753
3897
  "/v1/public/end-users": {
3754
3898
  parameters: {
3755
3899
  query?: never;
@@ -3794,6 +3938,26 @@ interface paths {
3794
3938
  patch?: never;
3795
3939
  trace?: never;
3796
3940
  };
3941
+ "/v1/public/me/aggregate": {
3942
+ parameters: {
3943
+ query?: never;
3944
+ header?: never;
3945
+ path?: never;
3946
+ cookie?: never;
3947
+ };
3948
+ get?: never;
3949
+ put?: never;
3950
+ /**
3951
+ * Agregar por la Data API pública (reportes)
3952
+ * @description Agrupa records por `dimensions` y calcula `measures` (count/sum/avg/min/max), autenticado por una API key. Bajo el MISMO default-deny que la lectura: solo agrega lo que las policies exponen al principal `public`/`end_user`.
3953
+ */
3954
+ post: operations["post /v1/public/me/aggregate"];
3955
+ delete?: never;
3956
+ options?: never;
3957
+ head?: never;
3958
+ patch?: never;
3959
+ trace?: never;
3960
+ };
3797
3961
  "/v1/public/me/checkout": {
3798
3962
  parameters: {
3799
3963
  query?: never;
@@ -4910,6 +5074,14 @@ interface components {
4910
5074
  * @description Las secciones declarables de una cuenta (ADR-027). El `kind` fija la SUPERFICIE: una `organization` declara el diccionario (objects…), la mensajería (spaces/channels) y el acceso (roles, sso, domains, invitations); un `individual` declara su `profile` y su `privacy` (singletons). Cada sección es opcional (ausente = no gestionada). Gobernanza: la mayoría es AUTORITATIVA (lo no declarado se archiva — policies/roles/sso se BORRAN); son ADITIVAS (siembra, no expulsa) los `initialMembers` de un canal, los `domains` y las `invitations` — lifecycle, no estado deseado. Los datos (records/mensajes) no son configuración.
4911
5075
  */
4912
5076
  AccountManifestSections: {
5077
+ actions?: components["schemas"]["ManifestAction"][] | {
5078
+ items: components["schemas"]["ManifestAction"][];
5079
+ /**
5080
+ * @description `authoritative` (default): lo no declarado se archiva/borra. `additive`: solo crea/actualiza lo declarado, sin expulsar lo demás (least astonishment).
5081
+ * @enum {string}
5082
+ */
5083
+ mode?: "authoritative" | "additive";
5084
+ };
4913
5085
  agents?: components["schemas"]["ManifestAgent"][] | {
4914
5086
  items: components["schemas"]["ManifestAgent"][];
4915
5087
  /**
@@ -5019,6 +5191,23 @@ interface components {
5019
5191
  mode?: "authoritative" | "additive";
5020
5192
  };
5021
5193
  };
5194
+ /**
5195
+ * ActionRunRequest
5196
+ * @description Input de una action transaccional. `input` es el mapa que interpolan los steps (`{{input.…}}`, y `{{item.…}}` en los steps con for_each).
5197
+ */
5198
+ ActionRunRequest: {
5199
+ /** @description Clave natural para reintentos seguros (se propaga a cada step creado). */
5200
+ idempotency_key?: string;
5201
+ /** @description Los valores de entrada de la action (forma libre, definida por sus steps). */
5202
+ input?: Record<string, never>;
5203
+ };
5204
+ /** ActionRunResponse */
5205
+ ActionRunResponse: {
5206
+ data: {
5207
+ /** @description Por step_id, el/los records creados (`{id, properties}`). Un step con for_each devuelve una lista; uno simple, un objeto. */
5208
+ results: Record<string, never>;
5209
+ };
5210
+ };
5022
5211
  /**
5023
5212
  * AddMemberRequest
5024
5213
  * @description Añade un usuario del tenant a una conversación (invitar a un canal).
@@ -5146,6 +5335,43 @@ interface components {
5146
5335
  AgentsResponse: {
5147
5336
  data: components["schemas"]["Agent"][];
5148
5337
  };
5338
+ /**
5339
+ * AggregateQueryRequest
5340
+ * @description Aggregation query: agrupa records por `dimensions` y calcula `measures` (count/sum/avg/min/max), bajo la misma gobernanza (RBAC + ABAC default-deny) que la lectura puntual. El par canónico measures + dimensions del semantic layer (Cube.dev).
5341
+ */
5342
+ AggregateQueryRequest: {
5343
+ /** @description Los attributes por los que agrupar (GROUP BY). */
5344
+ dimensions?: {
5345
+ /** @description Slug del attribute a agrupar. */
5346
+ attr: string;
5347
+ /**
5348
+ * @description Solo para date/timestamp (time dimension): trunca el valor a ese bucket.
5349
+ * @enum {string}
5350
+ */
5351
+ granularity?: "day" | "week" | "month" | "quarter" | "year";
5352
+ }[];
5353
+ /** @description Las agregaciones a calcular (al menos una). */
5354
+ measures: {
5355
+ /** @description Alias de salida (default: `count` o `<fn>_<attr>`). */
5356
+ as?: string;
5357
+ /** @description Slug del attribute a agregar (number para sum/avg; number/date/timestamp para min/max). Omitido solo en `count`. */
5358
+ attr?: string;
5359
+ /**
5360
+ * @description La función de agregación. `count` no lleva `attr`.
5361
+ * @enum {string}
5362
+ */
5363
+ fn: "count" | "sum" | "avg" | "min" | "max";
5364
+ }[];
5365
+ /** @description Slug del objeto raíz (requerido). */
5366
+ object: string;
5367
+ /** @description Mismo formato que en la consulta puntual: filtra ANTES de agregar. */
5368
+ where?: Record<string, never>[];
5369
+ };
5370
+ /** AggregateResultResponse */
5371
+ AggregateResultResponse: {
5372
+ /** @description Un grupo por combinación de dimensions (o un solo grupo con los totales si no hay dimensions). Cada grupo es un mapa: cada dimension por su slug y cada measure por su alias de salida. */
5373
+ data: Record<string, never>[];
5374
+ };
5149
5375
  /**
5150
5376
  * ApiKey
5151
5377
  * @description Metadatos de una API key de la Public API. El secreto en claro NO se incluye aquí — solo se devuelve una vez, al crearla.
@@ -5259,6 +5485,8 @@ interface components {
5259
5485
  /** @description Record del diccionario ligado a la cita (un record del diccionario, p. ej. contact), opaco. */
5260
5486
  recordId?: string | null;
5261
5487
  rescheduledFromId?: string | null;
5488
+ /** @description Capacidad del slot: cuántas citas solapadas del mismo organizador caben a la vez (Cal.com seats per time slot). 1 = no-solape estricto; N = hasta N concurrentes. */
5489
+ seatsPerSlot?: number;
5262
5490
  /** Format: date-time */
5263
5491
  startsAt: string;
5264
5492
  /** @enum {string} */
@@ -5275,6 +5503,8 @@ interface components {
5275
5503
  metadata?: Record<string, never>;
5276
5504
  organizerId?: string;
5277
5505
  recordId?: string;
5506
+ /** @description Capacidad del slot (default 1 = no-solape estricto). N permite hasta N citas solapadas del mismo organizador (aforo, clases, atención en paralelo). */
5507
+ seatsPerSlot?: number;
5278
5508
  /** Format: date-time */
5279
5509
  startsAt: string;
5280
5510
  /** @enum {string} */
@@ -6736,6 +6966,24 @@ interface components {
6736
6966
  organization: components["schemas"]["ClaimableOrganization"];
6737
6967
  };
6738
6968
  };
6969
+ /**
6970
+ * ManifestAction
6971
+ * @description Una action transaccional del tenant declarada (sección `actions/`), identificada por `slug`. Ejecuta sus `steps` en UNA transacción (todo-o-nada) al invocar `POST /v1/actions/:slug`: crear una cabecera + N líneas de forma atómica (el caso `create_rental` de una app interna). Cada step declara un `object` del diccionario y las `properties` a escribir, con interpolación `{{input.…}}`, `{{steps.<id>.id}}` (ref entre steps) y `{{item.…}}` en un step con `for_each`. Sección AUTORITATIVA: retirarla del manifiesto la archiva. `description`/`synonyms` son el contexto con el que los agentes LLM la descubren vía MCP (obligatoria la descripción, como el resto del diccionario).
6972
+ */
6973
+ ManifestAction: {
6974
+ /** @description Qué hace la action (contexto para humanos y agentes LLM). Obligatoria al crear. */
6975
+ description?: string;
6976
+ /** @description Identidad estable snake_case, única por organización (match key). */
6977
+ slug: string;
6978
+ /** @description Lista NO vacía de pasos. Cada paso: `id` (opcional, para refs `{{steps.<id>.id}}`), `object` (slug del diccionario), `properties` (mapa slug→valor con interpolación) y opcionalmente `for_each` (una ruta del input que expande el step en N records). */
6979
+ steps: {
6980
+ [key: string]: unknown;
6981
+ }[];
6982
+ /** @description Sinónimos para el descubrimiento por búsqueda/LLM. */
6983
+ synonyms?: string[];
6984
+ /** @description Nombre visible; si se omite, se deriva del slug. */
6985
+ title?: string;
6986
+ };
6739
6987
  /**
6740
6988
  * ManifestAgent
6741
6989
  * @description Un agente de IA declarado, identificado por `handle`. Archivar (no declararlo) lo revoca. `ownerUserId` (id público `user_…`) es obligatorio al crear con un access token de máquina; con un usuario, el creador es el dueño por defecto.
@@ -7146,6 +7394,45 @@ interface components {
7146
7394
  MediaResponse: {
7147
7395
  data: components["schemas"]["MediaItem"][];
7148
7396
  };
7397
+ /**
7398
+ * Member
7399
+ * @description Un miembro de la organización: identidad legible + sus roles (sin secretos).
7400
+ */
7401
+ Member: {
7402
+ displayName?: string | null;
7403
+ email?: string | null;
7404
+ /** @description Id de la membresía (`mbr_…`). */
7405
+ id: string;
7406
+ /** @description Los roles del miembro por nombre (owner/admin/member o custom). */
7407
+ roles: string[];
7408
+ };
7409
+ /**
7410
+ * MemberLoginRequest
7411
+ * @description Credenciales de un miembro (empleado que opera la org). La organización sale de la API key.
7412
+ */
7413
+ MemberLoginRequest: {
7414
+ /** Format: email */
7415
+ email: string;
7416
+ /** Format: password */
7417
+ password: string;
7418
+ };
7419
+ /** MemberResponse */
7420
+ MemberResponse: {
7421
+ data: components["schemas"]["Member"];
7422
+ };
7423
+ /** MemberSession */
7424
+ MemberSession: {
7425
+ /** Format: date-time */
7426
+ expiresAt?: string | null;
7427
+ member: components["schemas"]["Member"];
7428
+ prefix?: string | null;
7429
+ /** @description El member session token en claro (`mem_…`), legible SOLO en esta respuesta. */
7430
+ token: string;
7431
+ };
7432
+ /** MemberSessionResponse */
7433
+ MemberSessionResponse: {
7434
+ data: components["schemas"]["MemberSession"];
7435
+ };
7149
7436
  /** Membership */
7150
7437
  Membership: {
7151
7438
  /** @description Avatar override para esta org; `null` usa el global del usuario. */
@@ -8929,31 +9216,34 @@ interface operations {
8929
9216
  };
8930
9217
  };
8931
9218
  };
8932
- "post /v1/device-links": {
9219
+ "post /v1/actions/{slug}": {
8933
9220
  parameters: {
8934
9221
  query?: never;
8935
9222
  header?: never;
8936
- path?: never;
9223
+ path: {
9224
+ /** @description Slug de la action a ejecutar. */
9225
+ slug: string;
9226
+ };
8937
9227
  cookie?: never;
8938
9228
  };
8939
- /** @description Contexto del navegador */
9229
+ /** @description Input de la action */
8940
9230
  requestBody?: {
8941
9231
  content: {
8942
- "application/json": components["schemas"]["DeviceLinkCreateRequest"];
9232
+ "application/json": components["schemas"]["ActionRunRequest"];
8943
9233
  };
8944
9234
  };
8945
9235
  responses: {
8946
- /** @description linkCode para el QR */
8947
- 201: {
9236
+ /** @description Resultado por step */
9237
+ 200: {
8948
9238
  headers: {
8949
9239
  [name: string]: unknown;
8950
9240
  };
8951
9241
  content: {
8952
- "application/json": components["schemas"]["DeviceLinkCreateResponse"];
9242
+ "application/json": components["schemas"]["ActionRunResponse"];
8953
9243
  };
8954
9244
  };
8955
- /** @description Datos inválidos */
8956
- 422: {
9245
+ /** @description Sin permiso */
9246
+ 403: {
8957
9247
  headers: {
8958
9248
  [name: string]: unknown;
8959
9249
  };
@@ -8961,30 +9251,7 @@ interface operations {
8961
9251
  "application/json": components["schemas"]["Error"];
8962
9252
  };
8963
9253
  };
8964
- };
8965
- };
8966
- "get /v1/device-links/{link_code}": {
8967
- parameters: {
8968
- query?: never;
8969
- header?: never;
8970
- path: {
8971
- /** @description El `linkCode` del QR (`dlnk_…`). */
8972
- link_code: string;
8973
- };
8974
- cookie?: never;
8975
- };
8976
- requestBody?: never;
8977
- responses: {
8978
- /** @description Estado del flujo */
8979
- 200: {
8980
- headers: {
8981
- [name: string]: unknown;
8982
- };
8983
- content: {
8984
- "application/json": components["schemas"]["DeviceLinkStatusResponse"];
8985
- };
8986
- };
8987
- /** @description Código inexistente o expirado */
9254
+ /** @description Action desconocida */
8988
9255
  404: {
8989
9256
  headers: {
8990
9257
  [name: string]: unknown;
@@ -8993,8 +9260,8 @@ interface operations {
8993
9260
  "application/json": components["schemas"]["Error"];
8994
9261
  };
8995
9262
  };
8996
- /** @description El token ya fue reclamado */
8997
- 409: {
9263
+ /** @description Fallo de un step (rollback total) */
9264
+ 422: {
8998
9265
  headers: {
8999
9266
  [name: string]: unknown;
9000
9267
  };
@@ -9004,26 +9271,39 @@ interface operations {
9004
9271
  };
9005
9272
  };
9006
9273
  };
9007
- "post /v1/device-links/{link_code}/approve": {
9274
+ "post /v1/aggregate": {
9008
9275
  parameters: {
9009
9276
  query?: never;
9010
9277
  header?: never;
9011
- path: {
9012
- /** @description El `linkCode` escaneado. */
9013
- link_code: string;
9014
- };
9278
+ path?: never;
9015
9279
  cookie?: never;
9016
9280
  };
9017
- requestBody?: never;
9281
+ /** @description Aggregation query */
9282
+ requestBody?: {
9283
+ content: {
9284
+ "application/json": components["schemas"]["AggregateQueryRequest"];
9285
+ };
9286
+ };
9018
9287
  responses: {
9019
- /** @description Vinculación aprobada */
9020
- 204: {
9288
+ /** @description Grupos agregados */
9289
+ 200: {
9021
9290
  headers: {
9022
9291
  [name: string]: unknown;
9023
9292
  };
9024
- content?: never;
9293
+ content: {
9294
+ "application/json": components["schemas"]["AggregateResultResponse"];
9295
+ };
9025
9296
  };
9026
- /** @description Código inexistente o expirado */
9297
+ /** @description Sin permiso */
9298
+ 403: {
9299
+ headers: {
9300
+ [name: string]: unknown;
9301
+ };
9302
+ content: {
9303
+ "application/json": components["schemas"]["Error"];
9304
+ };
9305
+ };
9306
+ /** @description Objeto desconocido */
9027
9307
  404: {
9028
9308
  headers: {
9029
9309
  [name: string]: unknown;
@@ -9032,8 +9312,8 @@ interface operations {
9032
9312
  "application/json": components["schemas"]["Error"];
9033
9313
  };
9034
9314
  };
9035
- /** @description El código ya fue aprobado o rechazado */
9036
- 409: {
9315
+ /** @description Consulta inválida */
9316
+ 422: {
9037
9317
  headers: {
9038
9318
  [name: string]: unknown;
9039
9319
  };
@@ -9043,12 +9323,126 @@ interface operations {
9043
9323
  };
9044
9324
  };
9045
9325
  };
9046
- "post /v1/device-links/{link_code}/deny": {
9326
+ "post /v1/device-links": {
9047
9327
  parameters: {
9048
9328
  query?: never;
9049
9329
  header?: never;
9050
- path: {
9051
- /** @description El `linkCode` escaneado. */
9330
+ path?: never;
9331
+ cookie?: never;
9332
+ };
9333
+ /** @description Contexto del navegador */
9334
+ requestBody?: {
9335
+ content: {
9336
+ "application/json": components["schemas"]["DeviceLinkCreateRequest"];
9337
+ };
9338
+ };
9339
+ responses: {
9340
+ /** @description linkCode para el QR */
9341
+ 201: {
9342
+ headers: {
9343
+ [name: string]: unknown;
9344
+ };
9345
+ content: {
9346
+ "application/json": components["schemas"]["DeviceLinkCreateResponse"];
9347
+ };
9348
+ };
9349
+ /** @description Datos inválidos */
9350
+ 422: {
9351
+ headers: {
9352
+ [name: string]: unknown;
9353
+ };
9354
+ content: {
9355
+ "application/json": components["schemas"]["Error"];
9356
+ };
9357
+ };
9358
+ };
9359
+ };
9360
+ "get /v1/device-links/{link_code}": {
9361
+ parameters: {
9362
+ query?: never;
9363
+ header?: never;
9364
+ path: {
9365
+ /** @description El `linkCode` del QR (`dlnk_…`). */
9366
+ link_code: string;
9367
+ };
9368
+ cookie?: never;
9369
+ };
9370
+ requestBody?: never;
9371
+ responses: {
9372
+ /** @description Estado del flujo */
9373
+ 200: {
9374
+ headers: {
9375
+ [name: string]: unknown;
9376
+ };
9377
+ content: {
9378
+ "application/json": components["schemas"]["DeviceLinkStatusResponse"];
9379
+ };
9380
+ };
9381
+ /** @description Código inexistente o expirado */
9382
+ 404: {
9383
+ headers: {
9384
+ [name: string]: unknown;
9385
+ };
9386
+ content: {
9387
+ "application/json": components["schemas"]["Error"];
9388
+ };
9389
+ };
9390
+ /** @description El token ya fue reclamado */
9391
+ 409: {
9392
+ headers: {
9393
+ [name: string]: unknown;
9394
+ };
9395
+ content: {
9396
+ "application/json": components["schemas"]["Error"];
9397
+ };
9398
+ };
9399
+ };
9400
+ };
9401
+ "post /v1/device-links/{link_code}/approve": {
9402
+ parameters: {
9403
+ query?: never;
9404
+ header?: never;
9405
+ path: {
9406
+ /** @description El `linkCode` escaneado. */
9407
+ link_code: string;
9408
+ };
9409
+ cookie?: never;
9410
+ };
9411
+ requestBody?: never;
9412
+ responses: {
9413
+ /** @description Vinculación aprobada */
9414
+ 204: {
9415
+ headers: {
9416
+ [name: string]: unknown;
9417
+ };
9418
+ content?: never;
9419
+ };
9420
+ /** @description Código inexistente o expirado */
9421
+ 404: {
9422
+ headers: {
9423
+ [name: string]: unknown;
9424
+ };
9425
+ content: {
9426
+ "application/json": components["schemas"]["Error"];
9427
+ };
9428
+ };
9429
+ /** @description El código ya fue aprobado o rechazado */
9430
+ 409: {
9431
+ headers: {
9432
+ [name: string]: unknown;
9433
+ };
9434
+ content: {
9435
+ "application/json": components["schemas"]["Error"];
9436
+ };
9437
+ };
9438
+ };
9439
+ };
9440
+ "post /v1/device-links/{link_code}/deny": {
9441
+ parameters: {
9442
+ query?: never;
9443
+ header?: never;
9444
+ path: {
9445
+ /** @description El `linkCode` escaneado. */
9052
9446
  link_code: string;
9053
9447
  };
9054
9448
  cookie?: never;
@@ -10842,6 +11236,125 @@ interface operations {
10842
11236
  };
10843
11237
  };
10844
11238
  };
11239
+ "get /v1/members/me": {
11240
+ parameters: {
11241
+ query?: never;
11242
+ header?: never;
11243
+ path?: never;
11244
+ cookie?: never;
11245
+ };
11246
+ requestBody?: never;
11247
+ responses: {
11248
+ /** @description El miembro actual */
11249
+ 200: {
11250
+ headers: {
11251
+ [name: string]: unknown;
11252
+ };
11253
+ content: {
11254
+ "application/json": components["schemas"]["MemberResponse"];
11255
+ };
11256
+ };
11257
+ /** @description Sesión inválida */
11258
+ 401: {
11259
+ headers: {
11260
+ [name: string]: unknown;
11261
+ };
11262
+ content: {
11263
+ "application/json": components["schemas"]["Error"];
11264
+ };
11265
+ };
11266
+ };
11267
+ };
11268
+ "post /v1/members/session": {
11269
+ parameters: {
11270
+ query?: never;
11271
+ header?: never;
11272
+ path?: never;
11273
+ cookie?: never;
11274
+ };
11275
+ /** @description Credenciales del miembro */
11276
+ requestBody?: {
11277
+ content: {
11278
+ "application/json": components["schemas"]["MemberLoginRequest"];
11279
+ };
11280
+ };
11281
+ responses: {
11282
+ /** @description Sesión de miembro */
11283
+ 201: {
11284
+ headers: {
11285
+ [name: string]: unknown;
11286
+ };
11287
+ content: {
11288
+ "application/json": components["schemas"]["MemberSessionResponse"];
11289
+ };
11290
+ };
11291
+ /** @description API key o credenciales inválidas */
11292
+ 401: {
11293
+ headers: {
11294
+ [name: string]: unknown;
11295
+ };
11296
+ content: {
11297
+ "application/json": components["schemas"]["Error"];
11298
+ };
11299
+ };
11300
+ /** @description Datos inválidos */
11301
+ 422: {
11302
+ headers: {
11303
+ [name: string]: unknown;
11304
+ };
11305
+ content: {
11306
+ "application/json": components["schemas"]["Error"];
11307
+ };
11308
+ };
11309
+ };
11310
+ };
11311
+ "delete /v1/members/session": {
11312
+ parameters: {
11313
+ query?: never;
11314
+ header?: never;
11315
+ path?: never;
11316
+ cookie?: never;
11317
+ };
11318
+ requestBody?: never;
11319
+ responses: {
11320
+ /** @description Sesión cerrada */
11321
+ 204: {
11322
+ headers: {
11323
+ [name: string]: unknown;
11324
+ };
11325
+ content?: never;
11326
+ };
11327
+ };
11328
+ };
11329
+ "post /v1/members/session/refresh": {
11330
+ parameters: {
11331
+ query?: never;
11332
+ header?: never;
11333
+ path?: never;
11334
+ cookie?: never;
11335
+ };
11336
+ requestBody?: never;
11337
+ responses: {
11338
+ /** @description Nueva sesión */
11339
+ 201: {
11340
+ headers: {
11341
+ [name: string]: unknown;
11342
+ };
11343
+ content: {
11344
+ "application/json": components["schemas"]["MemberSessionResponse"];
11345
+ };
11346
+ };
11347
+ /** @description Sesión inválida */
11348
+ 401: {
11349
+ headers: {
11350
+ [name: string]: unknown;
11351
+ };
11352
+ content: {
11353
+ "application/json": components["schemas"]["Error"];
11354
+ };
11355
+ };
11356
+ };
11357
+ };
10845
11358
  "post /v1/oauth/device/code": {
10846
11359
  parameters: {
10847
11360
  query?: never;
@@ -12558,6 +13071,60 @@ interface operations {
12558
13071
  };
12559
13072
  };
12560
13073
  };
13074
+ "post /v1/organizations/{organization_id}/aggregate": {
13075
+ parameters: {
13076
+ query?: never;
13077
+ header?: never;
13078
+ path: {
13079
+ organization_id: string;
13080
+ };
13081
+ cookie?: never;
13082
+ };
13083
+ /** @description Aggregation query */
13084
+ requestBody?: {
13085
+ content: {
13086
+ "application/json": components["schemas"]["AggregateQueryRequest"];
13087
+ };
13088
+ };
13089
+ responses: {
13090
+ /** @description Grupos agregados */
13091
+ 200: {
13092
+ headers: {
13093
+ [name: string]: unknown;
13094
+ };
13095
+ content: {
13096
+ "application/json": components["schemas"]["AggregateResultResponse"];
13097
+ };
13098
+ };
13099
+ /** @description Sin permiso */
13100
+ 403: {
13101
+ headers: {
13102
+ [name: string]: unknown;
13103
+ };
13104
+ content: {
13105
+ "application/json": components["schemas"]["Error"];
13106
+ };
13107
+ };
13108
+ /** @description Objeto desconocido */
13109
+ 404: {
13110
+ headers: {
13111
+ [name: string]: unknown;
13112
+ };
13113
+ content: {
13114
+ "application/json": components["schemas"]["Error"];
13115
+ };
13116
+ };
13117
+ /** @description Consulta inválida */
13118
+ 422: {
13119
+ headers: {
13120
+ [name: string]: unknown;
13121
+ };
13122
+ content: {
13123
+ "application/json": components["schemas"]["Error"];
13124
+ };
13125
+ };
13126
+ };
13127
+ };
12561
13128
  "get /v1/organizations/{organization_id}/api-keys": {
12562
13129
  parameters: {
12563
13130
  query?: never;
@@ -18585,6 +19152,67 @@ interface operations {
18585
19152
  };
18586
19153
  };
18587
19154
  };
19155
+ "post /v1/public/aggregate": {
19156
+ parameters: {
19157
+ query?: never;
19158
+ header?: never;
19159
+ path?: never;
19160
+ cookie?: never;
19161
+ };
19162
+ /** @description Aggregation query */
19163
+ requestBody?: {
19164
+ content: {
19165
+ "application/json": components["schemas"]["AggregateQueryRequest"];
19166
+ };
19167
+ };
19168
+ responses: {
19169
+ /** @description Grupos agregados */
19170
+ 200: {
19171
+ headers: {
19172
+ [name: string]: unknown;
19173
+ };
19174
+ content: {
19175
+ "application/json": components["schemas"]["AggregateResultResponse"];
19176
+ };
19177
+ };
19178
+ /** @description Token inválido */
19179
+ 401: {
19180
+ headers: {
19181
+ [name: string]: unknown;
19182
+ };
19183
+ content: {
19184
+ "application/json": components["schemas"]["Error"];
19185
+ };
19186
+ };
19187
+ /** @description Sin permiso */
19188
+ 403: {
19189
+ headers: {
19190
+ [name: string]: unknown;
19191
+ };
19192
+ content: {
19193
+ "application/json": components["schemas"]["Error"];
19194
+ };
19195
+ };
19196
+ /** @description Objeto o tenant desconocido */
19197
+ 404: {
19198
+ headers: {
19199
+ [name: string]: unknown;
19200
+ };
19201
+ content: {
19202
+ "application/json": components["schemas"]["Error"];
19203
+ };
19204
+ };
19205
+ /** @description Consulta inválida */
19206
+ 422: {
19207
+ headers: {
19208
+ [name: string]: unknown;
19209
+ };
19210
+ content: {
19211
+ "application/json": components["schemas"]["Error"];
19212
+ };
19213
+ };
19214
+ };
19215
+ };
18588
19216
  "post /v1/public/end-users": {
18589
19217
  parameters: {
18590
19218
  query?: never;
@@ -18689,6 +19317,67 @@ interface operations {
18689
19317
  };
18690
19318
  };
18691
19319
  };
19320
+ "post /v1/public/me/aggregate": {
19321
+ parameters: {
19322
+ query?: never;
19323
+ header?: never;
19324
+ path?: never;
19325
+ cookie?: never;
19326
+ };
19327
+ /** @description Aggregation query */
19328
+ requestBody?: {
19329
+ content: {
19330
+ "application/json": components["schemas"]["AggregateQueryRequest"];
19331
+ };
19332
+ };
19333
+ responses: {
19334
+ /** @description Grupos agregados */
19335
+ 200: {
19336
+ headers: {
19337
+ [name: string]: unknown;
19338
+ };
19339
+ content: {
19340
+ "application/json": components["schemas"]["AggregateResultResponse"];
19341
+ };
19342
+ };
19343
+ /** @description Token inválido */
19344
+ 401: {
19345
+ headers: {
19346
+ [name: string]: unknown;
19347
+ };
19348
+ content: {
19349
+ "application/json": components["schemas"]["Error"];
19350
+ };
19351
+ };
19352
+ /** @description Sin permiso */
19353
+ 403: {
19354
+ headers: {
19355
+ [name: string]: unknown;
19356
+ };
19357
+ content: {
19358
+ "application/json": components["schemas"]["Error"];
19359
+ };
19360
+ };
19361
+ /** @description Objeto o tenant desconocido */
19362
+ 404: {
19363
+ headers: {
19364
+ [name: string]: unknown;
19365
+ };
19366
+ content: {
19367
+ "application/json": components["schemas"]["Error"];
19368
+ };
19369
+ };
19370
+ /** @description Consulta inválida */
19371
+ 422: {
19372
+ headers: {
19373
+ [name: string]: unknown;
19374
+ };
19375
+ content: {
19376
+ "application/json": components["schemas"]["Error"];
19377
+ };
19378
+ };
19379
+ };
19380
+ };
18692
19381
  "post /v1/public/me/checkout": {
18693
19382
  parameters: {
18694
19383
  query?: never;