@hablala/api-contract 0.7.0 → 0.9.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 +1628 -77
  2. package/openapi.json +8737 -6515
  3. package/package.json +3 -3
package/dist/index.d.ts CHANGED
@@ -1335,6 +1335,66 @@ interface paths {
1335
1335
  patch?: never;
1336
1336
  trace?: never;
1337
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
+ };
1358
+ "/v1/organization": {
1359
+ parameters: {
1360
+ query?: never;
1361
+ header?: never;
1362
+ path?: never;
1363
+ cookie?: never;
1364
+ };
1365
+ /**
1366
+ * Ver la organización del token (estado de propiedad)
1367
+ * @description La organización a la que pertenece la credencial de máquina, con su `status` (`active`/`unclaimed`/`claimed`) y sus relojes. Es el endpoint de polling del agente que provisionó una claimable org: mientras responda `unclaimed`, nadie la reclamó; un `401` posterior significa que se reclamó (los tokens del agente se rotaron) o venció.
1368
+ */
1369
+ get: operations["HablalaApiWeb.Machine.OrganizationController.show"];
1370
+ put?: never;
1371
+ post?: never;
1372
+ delete?: never;
1373
+ options?: never;
1374
+ head?: never;
1375
+ patch?: never;
1376
+ trace?: never;
1377
+ };
1378
+ "/v1/organization/refresh-claim-url": {
1379
+ parameters: {
1380
+ query?: never;
1381
+ header?: never;
1382
+ path?: never;
1383
+ cookie?: never;
1384
+ };
1385
+ get?: never;
1386
+ put?: never;
1387
+ /**
1388
+ * Renovar el claim URL de una claimable organization
1389
+ * @description Emite un claim link nuevo (el anterior deja de canjear al instante) con su TTL corto, SIN extender el TTL del recurso. Falla si la org ya fue reclamada (`409`) o si el recurso venció (`410`).
1390
+ */
1391
+ post: operations["HablalaApiWeb.Machine.OrganizationController.refresh_claim_url"];
1392
+ delete?: never;
1393
+ options?: never;
1394
+ head?: never;
1395
+ patch?: never;
1396
+ trace?: never;
1397
+ };
1338
1398
  "/v1/organizations": {
1339
1399
  parameters: {
1340
1400
  query?: never;
@@ -1353,6 +1413,66 @@ interface paths {
1353
1413
  patch?: never;
1354
1414
  trace?: never;
1355
1415
  };
1416
+ "/v1/organizations/claim": {
1417
+ parameters: {
1418
+ query?: never;
1419
+ header?: never;
1420
+ path?: never;
1421
+ cookie?: never;
1422
+ };
1423
+ get?: never;
1424
+ put?: never;
1425
+ /**
1426
+ * Reclamar una claimable organization
1427
+ * @description Consuma la **transferencia**: el usuario autenticado se vuelve `owner` de la org del claim token, la org pasa a `claimed` y los secretos del agente se ROTAN (todos los `mat_` y API keys activos se revocan; se emite un par nuevo que se revela aquí una única vez). Registra el evento `organization.claimed`.
1428
+ */
1429
+ post: operations["HablalaApiWeb.Orgs.ClaimableOrganizationController.claim"];
1430
+ delete?: never;
1431
+ options?: never;
1432
+ head?: never;
1433
+ patch?: never;
1434
+ trace?: never;
1435
+ };
1436
+ "/v1/organizations/claimable": {
1437
+ parameters: {
1438
+ query?: never;
1439
+ header?: never;
1440
+ path?: never;
1441
+ cookie?: never;
1442
+ };
1443
+ get?: never;
1444
+ put?: never;
1445
+ /**
1446
+ * Provisionar una claimable organization (sin cuenta)
1447
+ * @description El **signup invertido** para agentes: crea una organización real `unclaimed` (sin dueño) y devuelve — UNA sola vez — el par de API keys (`pk_`/`sk_`), el machine access token (`mat_`, preset `account_as_code`) y el `claimUrl` con el que un humano la reclama. La org caduca (`expiresAt`, 72 h) si nadie la reclama; el claim link tiene su propio TTL renovable. Al reclamarse, los secretos del agente se ROTAN. Sin autenticación; rate limit estricto por IP.
1448
+ */
1449
+ post: operations["HablalaApiWeb.Orgs.ClaimableOrganizationController.create"];
1450
+ delete?: never;
1451
+ options?: never;
1452
+ head?: never;
1453
+ patch?: never;
1454
+ trace?: never;
1455
+ };
1456
+ "/v1/organizations/claimable/preview": {
1457
+ parameters: {
1458
+ query?: never;
1459
+ header?: never;
1460
+ path?: never;
1461
+ cookie?: never;
1462
+ };
1463
+ /**
1464
+ * Previsualizar un claim token
1465
+ * @description A qué organización lleva un claim token, sin consumirlo ni requerir sesión (la pantalla de claim lo muestra antes de pedir login). Siempre `200`: `status` distingue un token válido de uno inválido/vencido/ya reclamado (sin filtrar el motivo).
1466
+ */
1467
+ get: operations["HablalaApiWeb.Orgs.ClaimableOrganizationController.preview"];
1468
+ put?: never;
1469
+ post?: never;
1470
+ delete?: never;
1471
+ options?: never;
1472
+ head?: never;
1473
+ patch?: never;
1474
+ trace?: never;
1475
+ };
1356
1476
  "/v1/organizations/{id}": {
1357
1477
  parameters: {
1358
1478
  query?: never;
@@ -3378,6 +3498,119 @@ interface paths {
3378
3498
  patch?: never;
3379
3499
  trace?: never;
3380
3500
  };
3501
+ "/v1/organizations/{organization_id}/webhooks": {
3502
+ parameters: {
3503
+ query?: never;
3504
+ header?: never;
3505
+ path?: never;
3506
+ cookie?: never;
3507
+ };
3508
+ /**
3509
+ * Listar webhook endpoints
3510
+ * @description Los webhook endpoints de la organización (solo metadatos; el signing secret se obtiene con `GET .../:id/secret`).
3511
+ */
3512
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.index"];
3513
+ put?: never;
3514
+ /**
3515
+ * Crear un webhook endpoint
3516
+ * @description Suscribe una URL a eventos del event store. La plataforma genera el **signing secret** (`whsec_…`) y lo incluye en esta respuesta (`secret`); con él el receptor verifica la firma de cada entrega (spec Standard Webhooks). También puede recuperarse después con `GET .../:id/secret`.
3517
+ */
3518
+ post: operations["HablalaApiWeb.Webhooks.WebhookController.create"];
3519
+ delete?: never;
3520
+ options?: never;
3521
+ head?: never;
3522
+ patch?: never;
3523
+ trace?: never;
3524
+ };
3525
+ "/v1/organizations/{organization_id}/webhooks/{id}": {
3526
+ parameters: {
3527
+ query?: never;
3528
+ header?: never;
3529
+ path?: never;
3530
+ cookie?: never;
3531
+ };
3532
+ /** Ver un webhook endpoint */
3533
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.show"];
3534
+ /**
3535
+ * Actualizar un webhook endpoint
3536
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
3537
+ */
3538
+ put: operations["HablalaApiWeb.Webhooks.WebhookController.update"];
3539
+ post?: never;
3540
+ /**
3541
+ * Borrar un webhook endpoint
3542
+ * @description Elimina el endpoint y su historial de deliveries. Deja de recibir entregas.
3543
+ */
3544
+ delete: operations["HablalaApiWeb.Webhooks.WebhookController.delete"];
3545
+ options?: never;
3546
+ head?: never;
3547
+ /**
3548
+ * Actualizar un webhook endpoint
3549
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
3550
+ */
3551
+ patch: operations["HablalaApiWeb.Webhooks.WebhookController.update (2)"];
3552
+ trace?: never;
3553
+ };
3554
+ "/v1/organizations/{organization_id}/webhooks/{id}/deliveries": {
3555
+ parameters: {
3556
+ query?: never;
3557
+ header?: never;
3558
+ path?: never;
3559
+ cookie?: never;
3560
+ };
3561
+ /**
3562
+ * Listar deliveries de un endpoint
3563
+ * @description La bitácora de entregas (canónico GitHub): qué eventos se entregaron, cuántos intentos costaron y con qué respondió el receptor. Más recientes primero (máx. 50).
3564
+ */
3565
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.deliveries"];
3566
+ put?: never;
3567
+ post?: never;
3568
+ delete?: never;
3569
+ options?: never;
3570
+ head?: never;
3571
+ patch?: never;
3572
+ trace?: never;
3573
+ };
3574
+ "/v1/organizations/{organization_id}/webhooks/{id}/rotate": {
3575
+ parameters: {
3576
+ query?: never;
3577
+ header?: never;
3578
+ path?: never;
3579
+ cookie?: never;
3580
+ };
3581
+ get?: never;
3582
+ put?: never;
3583
+ /**
3584
+ * Rotar el signing secret
3585
+ * @description Genera un `whsec_…` nuevo para el MISMO endpoint (el historial no cambia). El secret viejo deja de firmar de inmediato: actualiza la copia del receptor. La respuesta incluye el nuevo secret.
3586
+ */
3587
+ post: operations["HablalaApiWeb.Webhooks.WebhookController.rotate"];
3588
+ delete?: never;
3589
+ options?: never;
3590
+ head?: never;
3591
+ patch?: never;
3592
+ trace?: never;
3593
+ };
3594
+ "/v1/organizations/{organization_id}/webhooks/{id}/secret": {
3595
+ parameters: {
3596
+ query?: never;
3597
+ header?: never;
3598
+ path?: never;
3599
+ cookie?: never;
3600
+ };
3601
+ /**
3602
+ * Revelar el signing secret
3603
+ * @description El `whsec_…` del endpoint, para configurarlo en el receptor (modelo Svix `GET .../secret` / Stripe dashboard "Reveal"). Es una llave de firma compartida, no una credencial de autenticación entrante: por eso es recuperable, a diferencia de `sk_`/`mat_`.
3604
+ */
3605
+ get: operations["HablalaApiWeb.Webhooks.WebhookController.secret"];
3606
+ put?: never;
3607
+ post?: never;
3608
+ delete?: never;
3609
+ options?: never;
3610
+ head?: never;
3611
+ patch?: never;
3612
+ trace?: never;
3613
+ };
3381
3614
  "/v1/organizations/{organization_id}/workflow-executions": {
3382
3615
  parameters: {
3383
3616
  query?: never;
@@ -3617,6 +3850,26 @@ interface paths {
3617
3850
  patch: operations["HablalaApiWeb.PublicApi.RecordController.update (2)"];
3618
3851
  trace?: never;
3619
3852
  };
3853
+ "/v1/public/me/objects/{object_slug}/uploads": {
3854
+ parameters: {
3855
+ query?: never;
3856
+ header?: never;
3857
+ path?: never;
3858
+ cookie?: never;
3859
+ };
3860
+ get?: never;
3861
+ put?: never;
3862
+ /**
3863
+ * Pedir una URL de subida para un attribute file (canal público)
3864
+ * @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`.
3865
+ */
3866
+ post: operations["HablalaApiWeb.PublicApi.UploadController.create"];
3867
+ delete?: never;
3868
+ options?: never;
3869
+ head?: never;
3870
+ patch?: never;
3871
+ trace?: never;
3872
+ };
3620
3873
  "/v1/public/me/query": {
3621
3874
  parameters: {
3622
3875
  query?: never;
@@ -3673,6 +3926,26 @@ interface paths {
3673
3926
  patch: operations["HablalaApiWeb.PublicApi.RecordController.update (4)"];
3674
3927
  trace?: never;
3675
3928
  };
3929
+ "/v1/public/objects/{object_slug}/uploads": {
3930
+ parameters: {
3931
+ query?: never;
3932
+ header?: never;
3933
+ path?: never;
3934
+ cookie?: never;
3935
+ };
3936
+ get?: never;
3937
+ put?: never;
3938
+ /**
3939
+ * Pedir una URL de subida para un attribute file (canal público)
3940
+ * @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`.
3941
+ */
3942
+ post: operations["HablalaApiWeb.PublicApi.UploadController.create (2)"];
3943
+ delete?: never;
3944
+ options?: never;
3945
+ head?: never;
3946
+ patch?: never;
3947
+ trace?: never;
3948
+ };
3676
3949
  "/v1/public/query": {
3677
3950
  parameters: {
3678
3951
  query?: never;
@@ -4247,7 +4520,7 @@ interface paths {
4247
4520
  patch: operations["HablalaApiWeb.Accounts.UserSettingsController.update_username"];
4248
4521
  trace?: never;
4249
4522
  };
4250
- "/v1/whoami": {
4523
+ "/v1/webhooks": {
4251
4524
  parameters: {
4252
4525
  query?: never;
4253
4526
  header?: never;
@@ -4255,54 +4528,167 @@ interface paths {
4255
4528
  cookie?: never;
4256
4529
  };
4257
4530
  /**
4258
- * Identificar la credencial (organización + permisos)
4259
- * @description Devuelve la organización a la que pertenece el token de máquina y sus permisos efectivos. La organización sale del token (no de la URL): así una herramienta externa la infiere sin que el desarrollador la configure.
4531
+ * Listar webhook endpoints
4532
+ * @description Los webhook endpoints de la organización (solo metadatos; el signing secret se obtiene con `GET .../:id/secret`).
4260
4533
  */
4261
- get: operations["HablalaApiWeb.Machine.WhoamiController.show"];
4534
+ get: operations["HablalaApiWeb.Machine.WebhookController.index"];
4262
4535
  put?: never;
4263
- post?: never;
4536
+ /**
4537
+ * Crear un webhook endpoint
4538
+ * @description Suscribe una URL a eventos del event store. La plataforma genera el **signing secret** (`whsec_…`) y lo incluye en esta respuesta (`secret`); con él el receptor verifica la firma de cada entrega (spec Standard Webhooks). También puede recuperarse después con `GET .../:id/secret`.
4539
+ */
4540
+ post: operations["HablalaApiWeb.Machine.WebhookController.create"];
4264
4541
  delete?: never;
4265
4542
  options?: never;
4266
4543
  head?: never;
4267
4544
  patch?: never;
4268
4545
  trace?: never;
4269
4546
  };
4270
- }
4271
- interface components {
4272
- schemas: {
4547
+ "/v1/webhooks/{id}": {
4548
+ parameters: {
4549
+ query?: never;
4550
+ header?: never;
4551
+ path?: never;
4552
+ cookie?: never;
4553
+ };
4554
+ /** Ver un webhook endpoint */
4555
+ get: operations["HablalaApiWeb.Machine.WebhookController.show"];
4273
4556
  /**
4274
- * AccessToken
4275
- * @description Metadatos de un access token de máquina (`mat_…`): la credencial con la que un agente (Claude Code) o un script CI escribe el modelo de datos por HTTP. El secreto en claro NO se incluye aquí — solo se devuelve una vez, al crearlo.
4557
+ * Actualizar un webhook endpoint
4558
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
4276
4559
  */
4277
- AccessToken: {
4278
- /** @description ¿Ni revocado ni expirado? */
4279
- active: boolean;
4280
- /** Format: date-time */
4281
- expiresAt?: string | null;
4282
- id: string;
4283
- /** Format: date-time */
4284
- insertedAt?: string;
4285
- /** Format: date-time */
4286
- lastUsedAt?: string | null;
4287
- /** @description Etiqueta para el panel (p. ej. "CI deploy"). */
4288
- name: string;
4289
- /** @description Permisos RBAC del token (`recurso:accion`), su propio scope (mínimo privilegio). */
4290
- permissions: string[];
4291
- /** @description Primeros caracteres del secreto (no secreto), p. ej. `mat_a1b2`. */
4292
- prefix?: string | null;
4293
- /** Format: date-time */
4294
- revokedAt?: string | null;
4295
- /** Format: date-time */
4296
- updatedAt?: string;
4297
- };
4560
+ put: operations["HablalaApiWeb.Machine.WebhookController.update"];
4561
+ post?: never;
4298
4562
  /**
4299
- * AccessTokenCreated
4300
- * @description El token recién creado, con el secreto en claro (`token`) presente UNA sola vez. Guárdalo: no se puede recuperar después.
4563
+ * Borrar un webhook endpoint
4564
+ * @description Elimina el endpoint y su historial de deliveries. Deja de recibir entregas.
4301
4565
  */
4302
- AccessTokenCreated: {
4303
- active?: boolean;
4304
- /** Format: date-time */
4305
- expiresAt?: string | null;
4566
+ delete: operations["HablalaApiWeb.Machine.WebhookController.delete"];
4567
+ options?: never;
4568
+ head?: never;
4569
+ /**
4570
+ * Actualizar un webhook endpoint
4571
+ * @description Cambia `url`/`enabledEvents`/`status`. Reactivar (`status: "enabled"`) un endpoint auto-deshabilitado limpia el motivo del disable. El slug y el secret no se tocan aquí.
4572
+ */
4573
+ patch: operations["HablalaApiWeb.Machine.WebhookController.update (2)"];
4574
+ trace?: never;
4575
+ };
4576
+ "/v1/webhooks/{id}/deliveries": {
4577
+ parameters: {
4578
+ query?: never;
4579
+ header?: never;
4580
+ path?: never;
4581
+ cookie?: never;
4582
+ };
4583
+ /**
4584
+ * Listar deliveries de un endpoint
4585
+ * @description La bitácora de entregas (canónico GitHub): qué eventos se entregaron, cuántos intentos costaron y con qué respondió el receptor. Más recientes primero (máx. 50).
4586
+ */
4587
+ get: operations["HablalaApiWeb.Machine.WebhookController.deliveries"];
4588
+ put?: never;
4589
+ post?: never;
4590
+ delete?: never;
4591
+ options?: never;
4592
+ head?: never;
4593
+ patch?: never;
4594
+ trace?: never;
4595
+ };
4596
+ "/v1/webhooks/{id}/rotate": {
4597
+ parameters: {
4598
+ query?: never;
4599
+ header?: never;
4600
+ path?: never;
4601
+ cookie?: never;
4602
+ };
4603
+ get?: never;
4604
+ put?: never;
4605
+ /**
4606
+ * Rotar el signing secret
4607
+ * @description Genera un `whsec_…` nuevo para el MISMO endpoint (el historial no cambia). El secret viejo deja de firmar de inmediato: actualiza la copia del receptor. La respuesta incluye el nuevo secret.
4608
+ */
4609
+ post: operations["HablalaApiWeb.Machine.WebhookController.rotate"];
4610
+ delete?: never;
4611
+ options?: never;
4612
+ head?: never;
4613
+ patch?: never;
4614
+ trace?: never;
4615
+ };
4616
+ "/v1/webhooks/{id}/secret": {
4617
+ parameters: {
4618
+ query?: never;
4619
+ header?: never;
4620
+ path?: never;
4621
+ cookie?: never;
4622
+ };
4623
+ /**
4624
+ * Revelar el signing secret
4625
+ * @description El `whsec_…` del endpoint, para configurarlo en el receptor (modelo Svix `GET .../secret` / Stripe dashboard "Reveal"). Es una llave de firma compartida, no una credencial de autenticación entrante: por eso es recuperable, a diferencia de `sk_`/`mat_`.
4626
+ */
4627
+ get: operations["HablalaApiWeb.Machine.WebhookController.secret"];
4628
+ put?: never;
4629
+ post?: never;
4630
+ delete?: never;
4631
+ options?: never;
4632
+ head?: never;
4633
+ patch?: never;
4634
+ trace?: never;
4635
+ };
4636
+ "/v1/whoami": {
4637
+ parameters: {
4638
+ query?: never;
4639
+ header?: never;
4640
+ path?: never;
4641
+ cookie?: never;
4642
+ };
4643
+ /**
4644
+ * Identificar la credencial (organización + permisos)
4645
+ * @description Devuelve la organización a la que pertenece el token de máquina y sus permisos efectivos. La organización sale del token (no de la URL): así una herramienta externa la infiere sin que el desarrollador la configure.
4646
+ */
4647
+ get: operations["HablalaApiWeb.Machine.WhoamiController.show"];
4648
+ put?: never;
4649
+ post?: never;
4650
+ delete?: never;
4651
+ options?: never;
4652
+ head?: never;
4653
+ patch?: never;
4654
+ trace?: never;
4655
+ };
4656
+ }
4657
+ interface components {
4658
+ schemas: {
4659
+ /**
4660
+ * AccessToken
4661
+ * @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.
4662
+ */
4663
+ AccessToken: {
4664
+ /** @description ¿Ni revocado ni expirado? */
4665
+ active: boolean;
4666
+ /** Format: date-time */
4667
+ expiresAt?: string | null;
4668
+ id: string;
4669
+ /** Format: date-time */
4670
+ insertedAt?: string;
4671
+ /** Format: date-time */
4672
+ lastUsedAt?: string | null;
4673
+ /** @description Etiqueta para el panel (p. ej. "CI deploy"). */
4674
+ name: string;
4675
+ /** @description Permisos RBAC del token (`recurso:accion`), su propio scope (mínimo privilegio). */
4676
+ permissions: string[];
4677
+ /** @description Primeros caracteres del secreto (no secreto), p. ej. `mat_a1b2`. */
4678
+ prefix?: string | null;
4679
+ /** Format: date-time */
4680
+ revokedAt?: string | null;
4681
+ /** Format: date-time */
4682
+ updatedAt?: string;
4683
+ };
4684
+ /**
4685
+ * AccessTokenCreated
4686
+ * @description El token recién creado, con el secreto en claro (`token`) presente UNA sola vez. Guárdalo: no se puede recuperar después.
4687
+ */
4688
+ AccessTokenCreated: {
4689
+ active?: boolean;
4690
+ /** Format: date-time */
4691
+ expiresAt?: string | null;
4306
4692
  id: string;
4307
4693
  /** Format: date-time */
4308
4694
  insertedAt?: string;
@@ -4616,6 +5002,14 @@ interface components {
4616
5002
  };
4617
5003
  /** @description ETag del estado declarable (optimistic locking). El `export`/`pull` lo emite; el CLI lo guarda y lo reenvía en el header `If-Match` al aplicar. Si la cuenta cambió desde el `pull` (UI, MCP, otro apply), el `apply` devuelve 412 en vez de pisar lo no visto. Read-only: en el cuerpo del PUT se ignora (la precondición viaja por el header). */
4618
5004
  readonly version?: string;
5005
+ webhooks?: components["schemas"]["ManifestWebhookEndpoint"][] | {
5006
+ items: components["schemas"]["ManifestWebhookEndpoint"][];
5007
+ /**
5008
+ * @description `authoritative` (default): lo no declarado se archiva/borra. `additive`: solo crea/actualiza lo declarado, sin expulsar lo demás (least astonishment).
5009
+ * @enum {string}
5010
+ */
5011
+ mode?: "authoritative" | "additive";
5012
+ };
4619
5013
  workflows?: components["schemas"]["ManifestWorkflow"][] | {
4620
5014
  items: components["schemas"]["ManifestWorkflow"][];
4621
5015
  /**
@@ -5233,6 +5627,105 @@ interface components {
5233
5627
  currency: string;
5234
5628
  items: components["schemas"]["CheckoutItem"][];
5235
5629
  };
5630
+ /**
5631
+ * ClaimPreviewResponse
5632
+ * @description Preview de un claim token: a qué organización lleva, antes de confirmar. Siempre `200`; `status` distingue un token válido de uno inválido/vencido/ya reclamado.
5633
+ */
5634
+ ClaimPreviewResponse: {
5635
+ data: {
5636
+ /** @description Presente solo si `status` = valid. */
5637
+ organization?: {
5638
+ avatarUrl?: string | null;
5639
+ name: string;
5640
+ } | null;
5641
+ /** @enum {string} */
5642
+ status: "valid" | "invalid";
5643
+ };
5644
+ };
5645
+ /** ClaimRequest */
5646
+ ClaimRequest: {
5647
+ /** @description El claim token (`clm_…`) del `claimUrl`. */
5648
+ token: string;
5649
+ };
5650
+ /**
5651
+ * ClaimResponse
5652
+ * @description La transferencia consumada: el usuario autenticado es ahora **owner** y los secretos del agente se ROTARON — este par de API keys nuevo se revela UNA sola vez.
5653
+ */
5654
+ ClaimResponse: {
5655
+ data: {
5656
+ /** @description El par NUEVO emitido al reclamar (el del agente quedó revocado). */
5657
+ apiKeys: {
5658
+ publishableKey: string;
5659
+ secretKey: string;
5660
+ };
5661
+ organization: components["schemas"]["ClaimableOrganization"];
5662
+ };
5663
+ };
5664
+ /**
5665
+ * ClaimableOrganization
5666
+ * @description Una organización con su ciclo de vida de propiedad: `unclaimed` (provisionada por un agente, sin dueño; caduca en `expiresAt`) → `claimed` (reclamada por un humano).
5667
+ */
5668
+ ClaimableOrganization: {
5669
+ /**
5670
+ * Format: date-time
5671
+ * @description TTL del RECURSO: cuándo caduca la org si nadie la reclama (`null` = no caduca).
5672
+ */
5673
+ expiresAt?: string | null;
5674
+ /** @description Id público (`org_…`). */
5675
+ id: string;
5676
+ /** Format: date-time */
5677
+ insertedAt?: string;
5678
+ name: string;
5679
+ slug: string;
5680
+ /**
5681
+ * @description Estado de propiedad de la org.
5682
+ * @enum {string}
5683
+ */
5684
+ status: "active" | "unclaimed" | "claimed";
5685
+ /** Format: date-time */
5686
+ updatedAt?: string;
5687
+ };
5688
+ /**
5689
+ * ClaimableOrganizationCreateResponse
5690
+ * @description La claimable organization recién provisionada, con TODAS sus credenciales en claro — la ÚNICA vez que se pueden leer (patrón Stripe: las keys no vuelven en lecturas posteriores). Guárdalas de inmediato (p. ej. en el `.env`).
5691
+ */
5692
+ ClaimableOrganizationCreateResponse: {
5693
+ data: {
5694
+ /** @description Machine access token (`mat_…`, preset `account_as_code`): la autoridad del agente sobre la org hasta el claim (se ROTA al reclamarse). */
5695
+ accessToken: string;
5696
+ /** @description El par de API keys del canal público. */
5697
+ apiKeys: {
5698
+ /** @description `pk_…` (browser-safe). */
5699
+ publishableKey: string;
5700
+ /** @description `sk_…` (solo servidor). */
5701
+ secretKey: string;
5702
+ };
5703
+ /**
5704
+ * Format: date-time
5705
+ * @description TTL del claim LINK (reloj distinto del `expiresAt` del recurso).
5706
+ */
5707
+ claimExpiresAt: string;
5708
+ /** @description El link (panel) con el que un humano reclama la org. Un solo uso; caduca en `claimExpiresAt` y se renueva con `POST /v1/organization/refresh-claim-url`. */
5709
+ claimUrl: string;
5710
+ organization: components["schemas"]["ClaimableOrganization"];
5711
+ };
5712
+ };
5713
+ /**
5714
+ * ClaimableOrganizationRequest
5715
+ * @description Provisión de una **claimable organization** (el signup invertido): un agente crea la org SIN cuenta humana y un humano la reclama después abriendo el `claimUrl`.
5716
+ */
5717
+ ClaimableOrganizationRequest: {
5718
+ /** @description Nombre visible de la organización. */
5719
+ name: string;
5720
+ /** @description Datos para precargar el claim (patrón Stripe `prefill`). Se guardan cifrados. */
5721
+ prefill?: {
5722
+ /**
5723
+ * Format: email
5724
+ * @description Email del humano que reclamará la org.
5725
+ */
5726
+ email?: string;
5727
+ } | null;
5728
+ };
5236
5729
  /**
5237
5730
  * ContactContent
5238
5731
  * @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.
@@ -6229,6 +6722,20 @@ interface components {
6229
6722
  LoginRequest: {
6230
6723
  user: components["schemas"]["LoginCredentials"];
6231
6724
  };
6725
+ /**
6726
+ * MachineOrganizationResponse
6727
+ * @description La organización del token de máquina, con su estado de propiedad. Es el endpoint de polling del agente tras provisionar una claimable org: cuando el humano reclama, los tokens del agente se rotan, así que el `401` posterior significa "reclamada (o vencida)".
6728
+ */
6729
+ MachineOrganizationResponse: {
6730
+ data: {
6731
+ /**
6732
+ * Format: date-time
6733
+ * @description Cuándo caduca el claim link vigente (`null` si no hay).
6734
+ */
6735
+ claimExpiresAt?: string | null;
6736
+ organization: components["schemas"]["ClaimableOrganization"];
6737
+ };
6738
+ };
6232
6739
  /**
6233
6740
  * ManifestAgent
6234
6741
  * @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.
@@ -6497,6 +7004,23 @@ interface components {
6497
7004
  */
6498
7005
  protocol: "saml" | "oidc";
6499
7006
  };
7007
+ /**
7008
+ * ManifestWebhookEndpoint
7009
+ * @description Un webhook endpoint declarado (webhooks salientes): la URL de un sistema externo suscrita a eventos del event store, identificada por `slug`. Estructura AUTORITATIVA: un endpoint no declarado se BORRA (deja de recibir entregas). El **signing secret (`whsec_…`) NO se declara** — un secreto no vive en YAML versionado: lo genera la plataforma al crear el endpoint y se recupera con `GET /v1/webhooks/:id/secret`.
7010
+ */
7011
+ ManifestWebhookEndpoint: {
7012
+ /** @description Event types a suscribir (al menos uno): `record.created`, `record.updated`, `record.deleted`, `record.restored`, `edge.created`, `edge.deleted`. */
7013
+ enabledEvents: string[];
7014
+ /** @description Identidad estable, única por organización (match key). */
7015
+ slug: string;
7016
+ /**
7017
+ * @description Omitido = `enabled`. `disabled` pausa las entregas sin borrar el endpoint.
7018
+ * @enum {string}
7019
+ */
7020
+ status?: "enabled" | "disabled";
7021
+ /** @description URL https del receptor del POST firmado (http solo se admite hacia localhost). */
7022
+ url: string;
7023
+ };
6500
7024
  /**
6501
7025
  * ManifestWorkflow
6502
7026
  * @description Una definición de workflow declarada: la máquina de estados como dato (trigger + states). El grafo `states` se valida ESTRUCTURALMENTE en el `plan` (como un linter de state machine): cada `activity` debe pertenecer al catálogo declarable y su `config` solo acepta claves conocidas; toda transición `on` debe apuntar a un estado existente (MISSING_TRANSITION_TARGET); no puede haber estados inalcanzables desde `initialState`; y debe existir al menos un estado terminal (`type: final`, MISSING_END_STATE). Esos errores bloquean el apply — no llegan a runtime. Descubre el espacio declarable completo en `GET /v1/account-config/capabilities`.
@@ -6999,6 +7523,11 @@ interface components {
6999
7523
  myRole?: string | null;
7000
7524
  name: string;
7001
7525
  slug: string;
7526
+ /**
7527
+ * @description Propiedad de la org: `active` (creada por un humano), `unclaimed` (provisionada por un agente, sin dueño), `claimed` (reclamada).
7528
+ * @enum {string}
7529
+ */
7530
+ status?: "active" | "unclaimed" | "claimed";
7002
7531
  /** @description Identificador fiscal (RFC/EIN/VAT). */
7003
7532
  taxId?: string | null;
7004
7533
  /** Format: date-time */
@@ -7040,6 +7569,11 @@ interface components {
7040
7569
  insertedAt?: string;
7041
7570
  name: string;
7042
7571
  slug: string;
7572
+ /**
7573
+ * @description Propiedad de la org: `active` (creada por un humano), `unclaimed` (provisionada por un agente, sin dueño), `claimed` (reclamada).
7574
+ * @enum {string}
7575
+ */
7576
+ status?: "active" | "unclaimed" | "claimed";
7043
7577
  /** Format: date-time */
7044
7578
  updatedAt?: string;
7045
7579
  /**
@@ -7185,6 +7719,7 @@ interface components {
7185
7719
  Policy: {
7186
7720
  /** @enum {string} */
7187
7721
  action: "read" | "create" | "update" | "delete";
7722
+ /** @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). */
7188
7723
  condition?: Record<string, never>;
7189
7724
  /** @enum {string} */
7190
7725
  effect: "allow" | "deny";
@@ -7206,6 +7741,7 @@ interface components {
7206
7741
  PolicyInput: {
7207
7742
  /** @enum {string} */
7208
7743
  action: "read" | "create" | "update" | "delete";
7744
+ /** @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). */
7209
7745
  condition?: Record<string, never>;
7210
7746
  /** @enum {string} */
7211
7747
  effect: "allow" | "deny";
@@ -7503,6 +8039,49 @@ interface components {
7503
8039
  RecordResponse: {
7504
8040
  data: components["schemas"]["Record"];
7505
8041
  };
8042
+ /**
8043
+ * RecordUploadRequest
8044
+ * @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.
8045
+ */
8046
+ RecordUploadRequest: {
8047
+ /** @description Slug del attribute `data_type: file` del object al que se adjuntará. */
8048
+ attribute: string;
8049
+ /** @description MIME type del archivo (p. ej. `image/jpeg`). Se valida contra `accepted_content_types` del attribute. */
8050
+ contentType: string;
8051
+ /** @description Nombre del archivo (p. ej. `firulais.jpg`). */
8052
+ filename: string;
8053
+ /** @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). */
8054
+ size?: number | null;
8055
+ };
8056
+ /** RecordUploadResponse */
8057
+ RecordUploadResponse: {
8058
+ data: components["schemas"]["RecordUploadTarget"];
8059
+ };
8060
+ /**
8061
+ * RecordUploadTarget
8062
+ * @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.
8063
+ */
8064
+ RecordUploadTarget: {
8065
+ /** @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. */
8066
+ fileUrl: string;
8067
+ /** @description Cabeceras que el cliente debe enviar en el `PUT` (p. ej. `content-type`). */
8068
+ headers?: {
8069
+ [key: string]: string;
8070
+ };
8071
+ /** @description Destino del `PUT` del blob (URL prefirmada, expira). */
8072
+ uploadUrl: string;
8073
+ };
8074
+ /**
8075
+ * RefreshClaimUrlResponse
8076
+ * @description El claim link renovado (el anterior deja de canjear al instante).
8077
+ */
8078
+ RefreshClaimUrlResponse: {
8079
+ data: {
8080
+ /** Format: date-time */
8081
+ claimExpiresAt: string;
8082
+ claimUrl: string;
8083
+ };
8084
+ };
7506
8085
  /** RegisterCredentials */
7507
8086
  RegisterCredentials: {
7508
8087
  /** Format: email */
@@ -7956,6 +8535,117 @@ interface components {
7956
8535
  taxId: string;
7957
8536
  };
7958
8537
  };
8538
+ /** WebhookDeliveriesResponse */
8539
+ WebhookDeliveriesResponse: {
8540
+ data: components["schemas"]["WebhookDelivery"][];
8541
+ };
8542
+ /**
8543
+ * WebhookDelivery
8544
+ * @description Una **delivery**: un evento entregado (o en camino) a un webhook endpoint, con su bitácora de intentos. La entrega es at-least-once: el receptor deduplica por el header `webhook-id` (= `eventId`, estable entre reintentos).
8545
+ */
8546
+ WebhookDelivery: {
8547
+ attemptCount: number;
8548
+ /** Format: date-time */
8549
+ deliveredAt?: string | null;
8550
+ /** @description Detalle del último fallo. */
8551
+ error?: string | null;
8552
+ /** @description El evento entregado (`evt_…`). */
8553
+ eventId: string;
8554
+ /** @description P. ej. `record.created`. */
8555
+ eventType: string;
8556
+ /** @description Id de la delivery (`whd_…`). */
8557
+ id: string;
8558
+ /** Format: date-time */
8559
+ insertedAt?: string;
8560
+ /** @description HTTP status del último intento (si el receptor respondió). */
8561
+ responseStatus?: number | null;
8562
+ /**
8563
+ * @description `pending` (encolada/reintentando), `succeeded` (el receptor respondió 2xx), `failed` (agotó los reintentos).
8564
+ * @enum {string}
8565
+ */
8566
+ status: "pending" | "succeeded" | "failed";
8567
+ };
8568
+ /**
8569
+ * WebhookEndpoint
8570
+ * @description Un **webhook endpoint**: la URL de un sistema externo suscrita a eventos del event store. Cuando ocurre un evento de `enabledEvents`, la plataforma le hace un POST firmado (spec Standard Webhooks: headers `webhook-id`/`webhook-timestamp`/`webhook-signature`). El signing secret NO se incluye aquí — se revela al crear, en `GET .../secret` y al rotar.
8571
+ */
8572
+ WebhookEndpoint: {
8573
+ /** Format: date-time */
8574
+ disabledAt?: string | null;
8575
+ /** @description `delivery_failures` (auto-disable, modelo Stripe) o `manual`. */
8576
+ disabledReason?: string | null;
8577
+ /** @description Event types suscritos: `record.created`, `record.updated`, `record.deleted`, `record.restored`, `edge.created`, `edge.deleted`. */
8578
+ enabledEvents: string[];
8579
+ /** @description Id del endpoint (`we_…`). */
8580
+ id: string;
8581
+ /** Format: date-time */
8582
+ insertedAt?: string;
8583
+ /** Format: date-time */
8584
+ lastFailureAt?: string | null;
8585
+ /** Format: date-time */
8586
+ lastSuccessAt?: string | null;
8587
+ /** @description Primeros caracteres del signing secret (no secretos), p. ej. `whsec_A1B2`. */
8588
+ prefix?: string;
8589
+ /** @description Identificador declarable, único por organización. */
8590
+ slug: string;
8591
+ /**
8592
+ * @description `enabled` recibe entregas; `disabled` (manual o auto-disable por fallos) no.
8593
+ * @enum {string}
8594
+ */
8595
+ status: "enabled" | "disabled";
8596
+ /** Format: date-time */
8597
+ updatedAt?: string;
8598
+ /** @description URL https destino del POST firmado. */
8599
+ url: string;
8600
+ };
8601
+ /**
8602
+ * WebhookEndpointRequest
8603
+ * @description Datos de un webhook endpoint. El signing secret no se manda: lo genera la plataforma y se devuelve en la respuesta del create (y en `GET .../secret`).
8604
+ */
8605
+ WebhookEndpointRequest: {
8606
+ /** @description Event types a suscribir (al menos uno): `record.created`, `record.updated`, `record.deleted`, `record.restored`, `edge.created`, `edge.deleted`. */
8607
+ enabledEvents: string[];
8608
+ /** @description Identificador único por organización (minúsculas, dígitos, `-`/`_`), p. ej. `erp-sync`. */
8609
+ slug: string;
8610
+ /**
8611
+ * @description Omitir = `enabled`. `disabled` pausa las entregas sin borrar el endpoint.
8612
+ * @enum {string}
8613
+ */
8614
+ status?: "enabled" | "disabled";
8615
+ /** @description URL https del receptor (http solo se admite hacia localhost, para desarrollo). */
8616
+ url: string;
8617
+ };
8618
+ /** WebhookEndpointResponse */
8619
+ WebhookEndpointResponse: {
8620
+ data: components["schemas"]["WebhookEndpoint"];
8621
+ };
8622
+ /**
8623
+ * WebhookEndpointWithSecret
8624
+ * @description El endpoint con su **signing secret** en claro (`whsec_…`): la respuesta del create, del reveal (`GET .../secret`) y del rotate. Con él el receptor verifica la firma de cada entrega (librerías de Standard Webhooks).
8625
+ */
8626
+ WebhookEndpointWithSecret: {
8627
+ enabledEvents: string[];
8628
+ id: string;
8629
+ /** Format: date-time */
8630
+ insertedAt?: string;
8631
+ prefix?: string;
8632
+ /** @description El signing secret en claro (`whsec_…`). Guárdalo en el receptor. */
8633
+ secret: string;
8634
+ slug: string;
8635
+ /** @enum {string} */
8636
+ status: "enabled" | "disabled";
8637
+ /** Format: date-time */
8638
+ updatedAt?: string;
8639
+ url: string;
8640
+ };
8641
+ /** WebhookEndpointWithSecretResponse */
8642
+ WebhookEndpointWithSecretResponse: {
8643
+ data: components["schemas"]["WebhookEndpointWithSecret"];
8644
+ };
8645
+ /** WebhookEndpointsResponse */
8646
+ WebhookEndpointsResponse: {
8647
+ data: components["schemas"]["WebhookEndpoint"][];
8648
+ };
7959
8649
  /**
7960
8650
  * Whoami
7961
8651
  * @description Identidad de una credencial de máquina: la organización que resuelve del token y sus permisos efectivos. Deja que una herramienta externa infiera la org sin que el desarrollador la configure.
@@ -11008,7 +11698,119 @@ interface operations {
11008
11698
  };
11009
11699
  };
11010
11700
  };
11011
- "HablalaApiWeb.Orgs.OrganizationController.index": {
11701
+ "HablalaApiWeb.Machine.UploadController.create": {
11702
+ parameters: {
11703
+ query?: never;
11704
+ header?: never;
11705
+ path: {
11706
+ object_slug: string;
11707
+ };
11708
+ cookie?: never;
11709
+ };
11710
+ /** @description Archivo a subir */
11711
+ requestBody?: {
11712
+ content: {
11713
+ "application/json": components["schemas"]["RecordUploadRequest"];
11714
+ };
11715
+ };
11716
+ responses: {
11717
+ /** @description Destino de subida prefirmado */
11718
+ 200: {
11719
+ headers: {
11720
+ [name: string]: unknown;
11721
+ };
11722
+ content: {
11723
+ "application/json": components["schemas"]["RecordUploadResponse"];
11724
+ };
11725
+ };
11726
+ /** @description Objeto desconocido */
11727
+ 404: {
11728
+ headers: {
11729
+ [name: string]: unknown;
11730
+ };
11731
+ content: {
11732
+ "application/json": components["schemas"]["Error"];
11733
+ };
11734
+ };
11735
+ /** @description Attribute inexistente/no-file, MIME no admitido o tamaño excedido */
11736
+ 422: {
11737
+ headers: {
11738
+ [name: string]: unknown;
11739
+ };
11740
+ content: {
11741
+ "application/json": components["schemas"]["Error"];
11742
+ };
11743
+ };
11744
+ };
11745
+ };
11746
+ "HablalaApiWeb.Machine.OrganizationController.show": {
11747
+ parameters: {
11748
+ query?: never;
11749
+ header?: never;
11750
+ path?: never;
11751
+ cookie?: never;
11752
+ };
11753
+ requestBody?: never;
11754
+ responses: {
11755
+ /** @description La organización del token */
11756
+ 200: {
11757
+ headers: {
11758
+ [name: string]: unknown;
11759
+ };
11760
+ content: {
11761
+ "application/json": components["schemas"]["MachineOrganizationResponse"];
11762
+ };
11763
+ };
11764
+ /** @description Token inválido (o la org fue reclamada/venció) */
11765
+ 401: {
11766
+ headers: {
11767
+ [name: string]: unknown;
11768
+ };
11769
+ content: {
11770
+ "application/json": components["schemas"]["Error"];
11771
+ };
11772
+ };
11773
+ };
11774
+ };
11775
+ "HablalaApiWeb.Machine.OrganizationController.refresh_claim_url": {
11776
+ parameters: {
11777
+ query?: never;
11778
+ header?: never;
11779
+ path?: never;
11780
+ cookie?: never;
11781
+ };
11782
+ requestBody?: never;
11783
+ responses: {
11784
+ /** @description Claim link renovado */
11785
+ 200: {
11786
+ headers: {
11787
+ [name: string]: unknown;
11788
+ };
11789
+ content: {
11790
+ "application/json": components["schemas"]["RefreshClaimUrlResponse"];
11791
+ };
11792
+ };
11793
+ /** @description La org ya no es unclaimed */
11794
+ 409: {
11795
+ headers: {
11796
+ [name: string]: unknown;
11797
+ };
11798
+ content: {
11799
+ "application/json": components["schemas"]["Error"];
11800
+ };
11801
+ };
11802
+ /** @description El recurso venció */
11803
+ 410: {
11804
+ headers: {
11805
+ [name: string]: unknown;
11806
+ };
11807
+ content: {
11808
+ "application/json": components["schemas"]["Error"];
11809
+ };
11810
+ };
11811
+ };
11812
+ };
11813
+ "HablalaApiWeb.Orgs.OrganizationController.index": {
11012
11814
  parameters: {
11013
11815
  query?: never;
11014
11816
  header?: never;
@@ -11062,6 +11864,114 @@ interface operations {
11062
11864
  };
11063
11865
  };
11064
11866
  };
11867
+ "HablalaApiWeb.Orgs.ClaimableOrganizationController.claim": {
11868
+ parameters: {
11869
+ query?: never;
11870
+ header?: never;
11871
+ path?: never;
11872
+ cookie?: never;
11873
+ };
11874
+ /** @description El claim token */
11875
+ requestBody?: {
11876
+ content: {
11877
+ "application/json": components["schemas"]["ClaimRequest"];
11878
+ };
11879
+ };
11880
+ responses: {
11881
+ /** @description Transferencia consumada */
11882
+ 200: {
11883
+ headers: {
11884
+ [name: string]: unknown;
11885
+ };
11886
+ content: {
11887
+ "application/json": components["schemas"]["ClaimResponse"];
11888
+ };
11889
+ };
11890
+ /** @description Sin sesión */
11891
+ 401: {
11892
+ headers: {
11893
+ [name: string]: unknown;
11894
+ };
11895
+ content: {
11896
+ "application/json": components["schemas"]["Error"];
11897
+ };
11898
+ };
11899
+ /** @description Token inválido, vencido o ya reclamado */
11900
+ 404: {
11901
+ headers: {
11902
+ [name: string]: unknown;
11903
+ };
11904
+ content: {
11905
+ "application/json": components["schemas"]["Error"];
11906
+ };
11907
+ };
11908
+ };
11909
+ };
11910
+ "HablalaApiWeb.Orgs.ClaimableOrganizationController.create": {
11911
+ parameters: {
11912
+ query?: never;
11913
+ header?: never;
11914
+ path?: never;
11915
+ cookie?: never;
11916
+ };
11917
+ /** @description Datos de la organización */
11918
+ requestBody?: {
11919
+ content: {
11920
+ "application/json": components["schemas"]["ClaimableOrganizationRequest"];
11921
+ };
11922
+ };
11923
+ responses: {
11924
+ /** @description Organización provisionada (credenciales reveladas una única vez) */
11925
+ 201: {
11926
+ headers: {
11927
+ [name: string]: unknown;
11928
+ };
11929
+ content: {
11930
+ "application/json": components["schemas"]["ClaimableOrganizationCreateResponse"];
11931
+ };
11932
+ };
11933
+ /** @description Error de validación */
11934
+ 422: {
11935
+ headers: {
11936
+ [name: string]: unknown;
11937
+ };
11938
+ content: {
11939
+ "application/json": components["schemas"]["Error"];
11940
+ };
11941
+ };
11942
+ /** @description Cuota excedida */
11943
+ 429: {
11944
+ headers: {
11945
+ [name: string]: unknown;
11946
+ };
11947
+ content: {
11948
+ "application/json": components["schemas"]["Error"];
11949
+ };
11950
+ };
11951
+ };
11952
+ };
11953
+ "HablalaApiWeb.Orgs.ClaimableOrganizationController.preview": {
11954
+ parameters: {
11955
+ query: {
11956
+ token: string;
11957
+ };
11958
+ header?: never;
11959
+ path?: never;
11960
+ cookie?: never;
11961
+ };
11962
+ requestBody?: never;
11963
+ responses: {
11964
+ /** @description Preview del claim */
11965
+ 200: {
11966
+ headers: {
11967
+ [name: string]: unknown;
11968
+ };
11969
+ content: {
11970
+ "application/json": components["schemas"]["ClaimPreviewResponse"];
11971
+ };
11972
+ };
11973
+ };
11974
+ };
11065
11975
  "HablalaApiWeb.Orgs.OrganizationController.show": {
11066
11976
  parameters: {
11067
11977
  query?: never;
@@ -16853,14 +17763,9 @@ interface operations {
16853
17763
  };
16854
17764
  };
16855
17765
  };
16856
- "HablalaApiWeb.Workflows.WorkflowExecutionController.index": {
17766
+ "HablalaApiWeb.Webhooks.WebhookController.index": {
16857
17767
  parameters: {
16858
- query?: {
16859
- /** @description Filtrar por definición (wfd_…). */
16860
- workflowDefinitionId?: string;
16861
- /** @description Filtrar por estado: running | completed | failed. */
16862
- status?: string;
16863
- };
17768
+ query?: never;
16864
17769
  header?: never;
16865
17770
  path: {
16866
17771
  organization_id: string;
@@ -16869,13 +17774,40 @@ interface operations {
16869
17774
  };
16870
17775
  requestBody?: never;
16871
17776
  responses: {
16872
- /** @description Ejecuciones */
17777
+ /** @description Endpoints */
16873
17778
  200: {
16874
17779
  headers: {
16875
17780
  [name: string]: unknown;
16876
17781
  };
16877
17782
  content: {
16878
- "application/json": components["schemas"]["WorkflowExecutionsResponse"];
17783
+ "application/json": components["schemas"]["WebhookEndpointsResponse"];
17784
+ };
17785
+ };
17786
+ };
17787
+ };
17788
+ "HablalaApiWeb.Webhooks.WebhookController.create": {
17789
+ parameters: {
17790
+ query?: never;
17791
+ header?: never;
17792
+ path: {
17793
+ organization_id: string;
17794
+ };
17795
+ cookie?: never;
17796
+ };
17797
+ /** @description Datos del endpoint */
17798
+ requestBody?: {
17799
+ content: {
17800
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
17801
+ };
17802
+ };
17803
+ responses: {
17804
+ /** @description Endpoint creado (con secret) */
17805
+ 201: {
17806
+ headers: {
17807
+ [name: string]: unknown;
17808
+ };
17809
+ content: {
17810
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
16879
17811
  };
16880
17812
  };
16881
17813
  /** @description Sin permiso */
@@ -16887,9 +17819,18 @@ interface operations {
16887
17819
  "application/json": components["schemas"]["Error"];
16888
17820
  };
16889
17821
  };
17822
+ /** @description Error de validación */
17823
+ 422: {
17824
+ headers: {
17825
+ [name: string]: unknown;
17826
+ };
17827
+ content: {
17828
+ "application/json": components["schemas"]["Error"];
17829
+ };
17830
+ };
16890
17831
  };
16891
17832
  };
16892
- "HablalaApiWeb.Workflows.WorkflowExecutionController.show": {
17833
+ "HablalaApiWeb.Webhooks.WebhookController.show": {
16893
17834
  parameters: {
16894
17835
  query?: never;
16895
17836
  header?: never;
@@ -16901,16 +17842,16 @@ interface operations {
16901
17842
  };
16902
17843
  requestBody?: never;
16903
17844
  responses: {
16904
- /** @description Ejecución */
17845
+ /** @description Endpoint */
16905
17846
  200: {
16906
17847
  headers: {
16907
17848
  [name: string]: unknown;
16908
17849
  };
16909
17850
  content: {
16910
- "application/json": components["schemas"]["WorkflowExecutionResponse"];
17851
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
16911
17852
  };
16912
17853
  };
16913
- /** @description No encontrada */
17854
+ /** @description No existe */
16914
17855
  404: {
16915
17856
  headers: {
16916
17857
  [name: string]: unknown;
@@ -16921,7 +17862,7 @@ interface operations {
16921
17862
  };
16922
17863
  };
16923
17864
  };
16924
- "HablalaApiWeb.Workflows.WorkflowExecutionController.signal": {
17865
+ "HablalaApiWeb.Webhooks.WebhookController.update": {
16925
17866
  parameters: {
16926
17867
  query?: never;
16927
17868
  header?: never;
@@ -16931,33 +17872,274 @@ interface operations {
16931
17872
  };
16932
17873
  cookie?: never;
16933
17874
  };
16934
- /** @description Signal */
17875
+ /** @description Cambios */
16935
17876
  requestBody?: {
16936
17877
  content: {
16937
- "application/json": components["schemas"]["WorkflowSignalRequest"];
17878
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
16938
17879
  };
16939
17880
  };
16940
17881
  responses: {
16941
- /** @description Signal entregado */
17882
+ /** @description Endpoint actualizado */
16942
17883
  200: {
16943
17884
  headers: {
16944
17885
  [name: string]: unknown;
16945
17886
  };
16946
17887
  content: {
16947
- "application/json": components["schemas"]["WorkflowExecutionResponse"];
16948
- };
16949
- };
16950
- /** @description Sin permiso */
16951
- 403: {
16952
- headers: {
16953
- [name: string]: unknown;
16954
- };
16955
- content: {
16956
- "application/json": components["schemas"]["Error"];
17888
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
16957
17889
  };
16958
17890
  };
16959
- /** @description No encontrada */
16960
- 404: {
17891
+ /** @description Error de validación */
17892
+ 422: {
17893
+ headers: {
17894
+ [name: string]: unknown;
17895
+ };
17896
+ content: {
17897
+ "application/json": components["schemas"]["Error"];
17898
+ };
17899
+ };
17900
+ };
17901
+ };
17902
+ "HablalaApiWeb.Webhooks.WebhookController.delete": {
17903
+ parameters: {
17904
+ query?: never;
17905
+ header?: never;
17906
+ path: {
17907
+ organization_id: string;
17908
+ id: string;
17909
+ };
17910
+ cookie?: never;
17911
+ };
17912
+ requestBody?: never;
17913
+ responses: {
17914
+ /** @description Borrado */
17915
+ 204: {
17916
+ headers: {
17917
+ [name: string]: unknown;
17918
+ };
17919
+ content?: never;
17920
+ };
17921
+ /** @description Sin permiso */
17922
+ 403: {
17923
+ headers: {
17924
+ [name: string]: unknown;
17925
+ };
17926
+ content: {
17927
+ "application/json": components["schemas"]["Error"];
17928
+ };
17929
+ };
17930
+ };
17931
+ };
17932
+ "HablalaApiWeb.Webhooks.WebhookController.update (2)": {
17933
+ parameters: {
17934
+ query?: never;
17935
+ header?: never;
17936
+ path: {
17937
+ organization_id: string;
17938
+ id: string;
17939
+ };
17940
+ cookie?: never;
17941
+ };
17942
+ /** @description Cambios */
17943
+ requestBody?: {
17944
+ content: {
17945
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
17946
+ };
17947
+ };
17948
+ responses: {
17949
+ /** @description Endpoint actualizado */
17950
+ 200: {
17951
+ headers: {
17952
+ [name: string]: unknown;
17953
+ };
17954
+ content: {
17955
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
17956
+ };
17957
+ };
17958
+ /** @description Error de validación */
17959
+ 422: {
17960
+ headers: {
17961
+ [name: string]: unknown;
17962
+ };
17963
+ content: {
17964
+ "application/json": components["schemas"]["Error"];
17965
+ };
17966
+ };
17967
+ };
17968
+ };
17969
+ "HablalaApiWeb.Webhooks.WebhookController.deliveries": {
17970
+ parameters: {
17971
+ query?: never;
17972
+ header?: never;
17973
+ path: {
17974
+ organization_id: string;
17975
+ id: string;
17976
+ };
17977
+ cookie?: never;
17978
+ };
17979
+ requestBody?: never;
17980
+ responses: {
17981
+ /** @description Deliveries */
17982
+ 200: {
17983
+ headers: {
17984
+ [name: string]: unknown;
17985
+ };
17986
+ content: {
17987
+ "application/json": components["schemas"]["WebhookDeliveriesResponse"];
17988
+ };
17989
+ };
17990
+ };
17991
+ };
17992
+ "HablalaApiWeb.Webhooks.WebhookController.rotate": {
17993
+ parameters: {
17994
+ query?: never;
17995
+ header?: never;
17996
+ path: {
17997
+ organization_id: string;
17998
+ id: string;
17999
+ };
18000
+ cookie?: never;
18001
+ };
18002
+ requestBody?: never;
18003
+ responses: {
18004
+ /** @description Secret rotado */
18005
+ 201: {
18006
+ headers: {
18007
+ [name: string]: unknown;
18008
+ };
18009
+ content: {
18010
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
18011
+ };
18012
+ };
18013
+ };
18014
+ };
18015
+ "HablalaApiWeb.Webhooks.WebhookController.secret": {
18016
+ parameters: {
18017
+ query?: never;
18018
+ header?: never;
18019
+ path: {
18020
+ organization_id: string;
18021
+ id: string;
18022
+ };
18023
+ cookie?: never;
18024
+ };
18025
+ requestBody?: never;
18026
+ responses: {
18027
+ /** @description Endpoint con secret */
18028
+ 200: {
18029
+ headers: {
18030
+ [name: string]: unknown;
18031
+ };
18032
+ content: {
18033
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
18034
+ };
18035
+ };
18036
+ };
18037
+ };
18038
+ "HablalaApiWeb.Workflows.WorkflowExecutionController.index": {
18039
+ parameters: {
18040
+ query?: {
18041
+ /** @description Filtrar por definición (wfd_…). */
18042
+ workflowDefinitionId?: string;
18043
+ /** @description Filtrar por estado: running | completed | failed. */
18044
+ status?: string;
18045
+ };
18046
+ header?: never;
18047
+ path: {
18048
+ organization_id: string;
18049
+ };
18050
+ cookie?: never;
18051
+ };
18052
+ requestBody?: never;
18053
+ responses: {
18054
+ /** @description Ejecuciones */
18055
+ 200: {
18056
+ headers: {
18057
+ [name: string]: unknown;
18058
+ };
18059
+ content: {
18060
+ "application/json": components["schemas"]["WorkflowExecutionsResponse"];
18061
+ };
18062
+ };
18063
+ /** @description Sin permiso */
18064
+ 403: {
18065
+ headers: {
18066
+ [name: string]: unknown;
18067
+ };
18068
+ content: {
18069
+ "application/json": components["schemas"]["Error"];
18070
+ };
18071
+ };
18072
+ };
18073
+ };
18074
+ "HablalaApiWeb.Workflows.WorkflowExecutionController.show": {
18075
+ parameters: {
18076
+ query?: never;
18077
+ header?: never;
18078
+ path: {
18079
+ organization_id: string;
18080
+ id: string;
18081
+ };
18082
+ cookie?: never;
18083
+ };
18084
+ requestBody?: never;
18085
+ responses: {
18086
+ /** @description Ejecución */
18087
+ 200: {
18088
+ headers: {
18089
+ [name: string]: unknown;
18090
+ };
18091
+ content: {
18092
+ "application/json": components["schemas"]["WorkflowExecutionResponse"];
18093
+ };
18094
+ };
18095
+ /** @description No encontrada */
18096
+ 404: {
18097
+ headers: {
18098
+ [name: string]: unknown;
18099
+ };
18100
+ content: {
18101
+ "application/json": components["schemas"]["Error"];
18102
+ };
18103
+ };
18104
+ };
18105
+ };
18106
+ "HablalaApiWeb.Workflows.WorkflowExecutionController.signal": {
18107
+ parameters: {
18108
+ query?: never;
18109
+ header?: never;
18110
+ path: {
18111
+ organization_id: string;
18112
+ id: string;
18113
+ };
18114
+ cookie?: never;
18115
+ };
18116
+ /** @description Signal */
18117
+ requestBody?: {
18118
+ content: {
18119
+ "application/json": components["schemas"]["WorkflowSignalRequest"];
18120
+ };
18121
+ };
18122
+ responses: {
18123
+ /** @description Signal entregado */
18124
+ 200: {
18125
+ headers: {
18126
+ [name: string]: unknown;
18127
+ };
18128
+ content: {
18129
+ "application/json": components["schemas"]["WorkflowExecutionResponse"];
18130
+ };
18131
+ };
18132
+ /** @description Sin permiso */
18133
+ 403: {
18134
+ headers: {
18135
+ [name: string]: unknown;
18136
+ };
18137
+ content: {
18138
+ "application/json": components["schemas"]["Error"];
18139
+ };
18140
+ };
18141
+ /** @description No encontrada */
18142
+ 404: {
16961
18143
  headers: {
16962
18144
  [name: string]: unknown;
16963
18145
  };
@@ -17763,6 +18945,60 @@ interface operations {
17763
18945
  };
17764
18946
  };
17765
18947
  };
18948
+ "HablalaApiWeb.PublicApi.UploadController.create": {
18949
+ parameters: {
18950
+ query?: never;
18951
+ header?: never;
18952
+ path: {
18953
+ object_slug: string;
18954
+ };
18955
+ cookie?: never;
18956
+ };
18957
+ /** @description Archivo a subir */
18958
+ requestBody?: {
18959
+ content: {
18960
+ "application/json": components["schemas"]["RecordUploadRequest"];
18961
+ };
18962
+ };
18963
+ responses: {
18964
+ /** @description Destino de subida prefirmado */
18965
+ 200: {
18966
+ headers: {
18967
+ [name: string]: unknown;
18968
+ };
18969
+ content: {
18970
+ "application/json": components["schemas"]["RecordUploadResponse"];
18971
+ };
18972
+ };
18973
+ /** @description Sin policy allow de create/update para este principal */
18974
+ 403: {
18975
+ headers: {
18976
+ [name: string]: unknown;
18977
+ };
18978
+ content: {
18979
+ "application/json": components["schemas"]["Error"];
18980
+ };
18981
+ };
18982
+ /** @description Objeto desconocido */
18983
+ 404: {
18984
+ headers: {
18985
+ [name: string]: unknown;
18986
+ };
18987
+ content: {
18988
+ "application/json": components["schemas"]["Error"];
18989
+ };
18990
+ };
18991
+ /** @description Attribute inexistente/no-file, MIME no admitido o tamaño excedido */
18992
+ 422: {
18993
+ headers: {
18994
+ [name: string]: unknown;
18995
+ };
18996
+ content: {
18997
+ "application/json": components["schemas"]["Error"];
18998
+ };
18999
+ };
19000
+ };
19001
+ };
17766
19002
  "HablalaApiWeb.PublicApi.QueryController.create (2)": {
17767
19003
  parameters: {
17768
19004
  query?: never;
@@ -17941,7 +19177,53 @@ interface operations {
17941
19177
  headers: {
17942
19178
  [name: string]: unknown;
17943
19179
  };
17944
- content?: never;
19180
+ content?: never;
19181
+ };
19182
+ /** @description Sin permiso ABAC sobre este record */
19183
+ 403: {
19184
+ headers: {
19185
+ [name: string]: unknown;
19186
+ };
19187
+ content: {
19188
+ "application/json": components["schemas"]["Error"];
19189
+ };
19190
+ };
19191
+ /** @description No encontrado (o de otro objeto) */
19192
+ 404: {
19193
+ headers: {
19194
+ [name: string]: unknown;
19195
+ };
19196
+ content: {
19197
+ "application/json": components["schemas"]["Error"];
19198
+ };
19199
+ };
19200
+ };
19201
+ };
19202
+ "HablalaApiWeb.PublicApi.RecordController.update (4)": {
19203
+ parameters: {
19204
+ query?: never;
19205
+ header?: never;
19206
+ path: {
19207
+ object_slug: string;
19208
+ id: string;
19209
+ };
19210
+ cookie?: never;
19211
+ };
19212
+ /** @description Propiedades del record */
19213
+ requestBody?: {
19214
+ content: {
19215
+ "application/json": components["schemas"]["RecordRequest"];
19216
+ };
19217
+ };
19218
+ responses: {
19219
+ /** @description Record actualizado */
19220
+ 200: {
19221
+ headers: {
19222
+ [name: string]: unknown;
19223
+ };
19224
+ content: {
19225
+ "application/json": components["schemas"]["RecordResponse"];
19226
+ };
17945
19227
  };
17946
19228
  /** @description Sin permiso ABAC sobre este record */
17947
19229
  403: {
@@ -17961,35 +19243,43 @@ interface operations {
17961
19243
  "application/json": components["schemas"]["Error"];
17962
19244
  };
17963
19245
  };
19246
+ /** @description Error de validación */
19247
+ 422: {
19248
+ headers: {
19249
+ [name: string]: unknown;
19250
+ };
19251
+ content: {
19252
+ "application/json": components["schemas"]["Error"];
19253
+ };
19254
+ };
17964
19255
  };
17965
19256
  };
17966
- "HablalaApiWeb.PublicApi.RecordController.update (4)": {
19257
+ "HablalaApiWeb.PublicApi.UploadController.create (2)": {
17967
19258
  parameters: {
17968
19259
  query?: never;
17969
19260
  header?: never;
17970
19261
  path: {
17971
19262
  object_slug: string;
17972
- id: string;
17973
19263
  };
17974
19264
  cookie?: never;
17975
19265
  };
17976
- /** @description Propiedades del record */
19266
+ /** @description Archivo a subir */
17977
19267
  requestBody?: {
17978
19268
  content: {
17979
- "application/json": components["schemas"]["RecordRequest"];
19269
+ "application/json": components["schemas"]["RecordUploadRequest"];
17980
19270
  };
17981
19271
  };
17982
19272
  responses: {
17983
- /** @description Record actualizado */
19273
+ /** @description Destino de subida prefirmado */
17984
19274
  200: {
17985
19275
  headers: {
17986
19276
  [name: string]: unknown;
17987
19277
  };
17988
19278
  content: {
17989
- "application/json": components["schemas"]["RecordResponse"];
19279
+ "application/json": components["schemas"]["RecordUploadResponse"];
17990
19280
  };
17991
19281
  };
17992
- /** @description Sin permiso ABAC sobre este record */
19282
+ /** @description Sin policy allow de create/update para este principal */
17993
19283
  403: {
17994
19284
  headers: {
17995
19285
  [name: string]: unknown;
@@ -17998,7 +19288,7 @@ interface operations {
17998
19288
  "application/json": components["schemas"]["Error"];
17999
19289
  };
18000
19290
  };
18001
- /** @description No encontrado (o de otro objeto) */
19291
+ /** @description Objeto desconocido */
18002
19292
  404: {
18003
19293
  headers: {
18004
19294
  [name: string]: unknown;
@@ -18007,7 +19297,7 @@ interface operations {
18007
19297
  "application/json": components["schemas"]["Error"];
18008
19298
  };
18009
19299
  };
18010
- /** @description Error de validación */
19300
+ /** @description Attribute inexistente/no-file, MIME no admitido o tamaño excedido */
18011
19301
  422: {
18012
19302
  headers: {
18013
19303
  [name: string]: unknown;
@@ -19057,6 +20347,267 @@ interface operations {
19057
20347
  };
19058
20348
  };
19059
20349
  };
20350
+ "HablalaApiWeb.Machine.WebhookController.index": {
20351
+ parameters: {
20352
+ query?: never;
20353
+ header?: never;
20354
+ path?: never;
20355
+ cookie?: never;
20356
+ };
20357
+ requestBody?: never;
20358
+ responses: {
20359
+ /** @description Endpoints */
20360
+ 200: {
20361
+ headers: {
20362
+ [name: string]: unknown;
20363
+ };
20364
+ content: {
20365
+ "application/json": components["schemas"]["WebhookEndpointsResponse"];
20366
+ };
20367
+ };
20368
+ };
20369
+ };
20370
+ "HablalaApiWeb.Machine.WebhookController.create": {
20371
+ parameters: {
20372
+ query?: never;
20373
+ header?: never;
20374
+ path?: never;
20375
+ cookie?: never;
20376
+ };
20377
+ /** @description Datos del endpoint */
20378
+ requestBody?: {
20379
+ content: {
20380
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
20381
+ };
20382
+ };
20383
+ responses: {
20384
+ /** @description Endpoint creado (con secret) */
20385
+ 201: {
20386
+ headers: {
20387
+ [name: string]: unknown;
20388
+ };
20389
+ content: {
20390
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
20391
+ };
20392
+ };
20393
+ /** @description Sin permiso */
20394
+ 403: {
20395
+ headers: {
20396
+ [name: string]: unknown;
20397
+ };
20398
+ content: {
20399
+ "application/json": components["schemas"]["Error"];
20400
+ };
20401
+ };
20402
+ /** @description Error de validación */
20403
+ 422: {
20404
+ headers: {
20405
+ [name: string]: unknown;
20406
+ };
20407
+ content: {
20408
+ "application/json": components["schemas"]["Error"];
20409
+ };
20410
+ };
20411
+ };
20412
+ };
20413
+ "HablalaApiWeb.Machine.WebhookController.show": {
20414
+ parameters: {
20415
+ query?: never;
20416
+ header?: never;
20417
+ path: {
20418
+ id: string;
20419
+ };
20420
+ cookie?: never;
20421
+ };
20422
+ requestBody?: never;
20423
+ responses: {
20424
+ /** @description Endpoint */
20425
+ 200: {
20426
+ headers: {
20427
+ [name: string]: unknown;
20428
+ };
20429
+ content: {
20430
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
20431
+ };
20432
+ };
20433
+ /** @description No existe */
20434
+ 404: {
20435
+ headers: {
20436
+ [name: string]: unknown;
20437
+ };
20438
+ content: {
20439
+ "application/json": components["schemas"]["Error"];
20440
+ };
20441
+ };
20442
+ };
20443
+ };
20444
+ "HablalaApiWeb.Machine.WebhookController.update": {
20445
+ parameters: {
20446
+ query?: never;
20447
+ header?: never;
20448
+ path: {
20449
+ id: string;
20450
+ };
20451
+ cookie?: never;
20452
+ };
20453
+ /** @description Cambios */
20454
+ requestBody?: {
20455
+ content: {
20456
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
20457
+ };
20458
+ };
20459
+ responses: {
20460
+ /** @description Endpoint actualizado */
20461
+ 200: {
20462
+ headers: {
20463
+ [name: string]: unknown;
20464
+ };
20465
+ content: {
20466
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
20467
+ };
20468
+ };
20469
+ /** @description Error de validación */
20470
+ 422: {
20471
+ headers: {
20472
+ [name: string]: unknown;
20473
+ };
20474
+ content: {
20475
+ "application/json": components["schemas"]["Error"];
20476
+ };
20477
+ };
20478
+ };
20479
+ };
20480
+ "HablalaApiWeb.Machine.WebhookController.delete": {
20481
+ parameters: {
20482
+ query?: never;
20483
+ header?: never;
20484
+ path: {
20485
+ id: string;
20486
+ };
20487
+ cookie?: never;
20488
+ };
20489
+ requestBody?: never;
20490
+ responses: {
20491
+ /** @description Borrado */
20492
+ 204: {
20493
+ headers: {
20494
+ [name: string]: unknown;
20495
+ };
20496
+ content?: never;
20497
+ };
20498
+ /** @description Sin permiso */
20499
+ 403: {
20500
+ headers: {
20501
+ [name: string]: unknown;
20502
+ };
20503
+ content: {
20504
+ "application/json": components["schemas"]["Error"];
20505
+ };
20506
+ };
20507
+ };
20508
+ };
20509
+ "HablalaApiWeb.Machine.WebhookController.update (2)": {
20510
+ parameters: {
20511
+ query?: never;
20512
+ header?: never;
20513
+ path: {
20514
+ id: string;
20515
+ };
20516
+ cookie?: never;
20517
+ };
20518
+ /** @description Cambios */
20519
+ requestBody?: {
20520
+ content: {
20521
+ "application/json": components["schemas"]["WebhookEndpointRequest"];
20522
+ };
20523
+ };
20524
+ responses: {
20525
+ /** @description Endpoint actualizado */
20526
+ 200: {
20527
+ headers: {
20528
+ [name: string]: unknown;
20529
+ };
20530
+ content: {
20531
+ "application/json": components["schemas"]["WebhookEndpointResponse"];
20532
+ };
20533
+ };
20534
+ /** @description Error de validación */
20535
+ 422: {
20536
+ headers: {
20537
+ [name: string]: unknown;
20538
+ };
20539
+ content: {
20540
+ "application/json": components["schemas"]["Error"];
20541
+ };
20542
+ };
20543
+ };
20544
+ };
20545
+ "HablalaApiWeb.Machine.WebhookController.deliveries": {
20546
+ parameters: {
20547
+ query?: never;
20548
+ header?: never;
20549
+ path: {
20550
+ id: string;
20551
+ };
20552
+ cookie?: never;
20553
+ };
20554
+ requestBody?: never;
20555
+ responses: {
20556
+ /** @description Deliveries */
20557
+ 200: {
20558
+ headers: {
20559
+ [name: string]: unknown;
20560
+ };
20561
+ content: {
20562
+ "application/json": components["schemas"]["WebhookDeliveriesResponse"];
20563
+ };
20564
+ };
20565
+ };
20566
+ };
20567
+ "HablalaApiWeb.Machine.WebhookController.rotate": {
20568
+ parameters: {
20569
+ query?: never;
20570
+ header?: never;
20571
+ path: {
20572
+ id: string;
20573
+ };
20574
+ cookie?: never;
20575
+ };
20576
+ requestBody?: never;
20577
+ responses: {
20578
+ /** @description Secret rotado */
20579
+ 201: {
20580
+ headers: {
20581
+ [name: string]: unknown;
20582
+ };
20583
+ content: {
20584
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
20585
+ };
20586
+ };
20587
+ };
20588
+ };
20589
+ "HablalaApiWeb.Machine.WebhookController.secret": {
20590
+ parameters: {
20591
+ query?: never;
20592
+ header?: never;
20593
+ path: {
20594
+ id: string;
20595
+ };
20596
+ cookie?: never;
20597
+ };
20598
+ requestBody?: never;
20599
+ responses: {
20600
+ /** @description Endpoint con secret */
20601
+ 200: {
20602
+ headers: {
20603
+ [name: string]: unknown;
20604
+ };
20605
+ content: {
20606
+ "application/json": components["schemas"]["WebhookEndpointWithSecretResponse"];
20607
+ };
20608
+ };
20609
+ };
20610
+ };
19060
20611
  "HablalaApiWeb.Machine.WhoamiController.show": {
19061
20612
  parameters: {
19062
20613
  query?: never;