@eva_solutions/auth-sdk 0.0.0-stage → 3.0.0-dev-20261109133200

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 (205) hide show
  1. package/CHANGELOG.md +290 -0
  2. package/LICENSE +21 -0
  3. package/README.md +481 -2
  4. package/dist/admin/index.cjs +4 -0
  5. package/dist/admin/index.d.cts +2 -0
  6. package/dist/admin/index.d.ts +2 -0
  7. package/dist/admin/index.js +1 -0
  8. package/dist/admin-DjvuvuI8.js +408 -0
  9. package/dist/admin-DjvuvuI8.js.map +1 -0
  10. package/dist/admin-Q6lbWqLM.cjs +419 -0
  11. package/dist/admin-Q6lbWqLM.cjs.map +1 -0
  12. package/dist/api-path-2Ulruz7R.cjs +34 -0
  13. package/dist/api-path-2Ulruz7R.cjs.map +1 -0
  14. package/dist/api-path-B-vSkL2H.js +29 -0
  15. package/dist/api-path-B-vSkL2H.js.map +1 -0
  16. package/dist/auth-19r-Q6X2.js +84 -0
  17. package/dist/auth-19r-Q6X2.js.map +1 -0
  18. package/dist/auth-DX1N5JA4.cjs +131 -0
  19. package/dist/auth-DX1N5JA4.cjs.map +1 -0
  20. package/dist/auth-handlers-B3iJaPln.js +343 -0
  21. package/dist/auth-handlers-B3iJaPln.js.map +1 -0
  22. package/dist/auth-handlers-BTbXKJms.d.ts +15 -0
  23. package/dist/auth-handlers-BTbXKJms.d.ts.map +1 -0
  24. package/dist/auth-handlers-CDzGFDTu.cjs +404 -0
  25. package/dist/auth-handlers-CDzGFDTu.cjs.map +1 -0
  26. package/dist/auth-handlers-DRUUTEtW.d.cts +15 -0
  27. package/dist/auth-handlers-DRUUTEtW.d.cts.map +1 -0
  28. package/dist/catalog-CHPqldcj.cjs +172 -0
  29. package/dist/catalog-CHPqldcj.cjs.map +1 -0
  30. package/dist/catalog-CIqpzgsM.d.cts +75 -0
  31. package/dist/catalog-CIqpzgsM.d.cts.map +1 -0
  32. package/dist/catalog-CIqpzgsM.d.ts +75 -0
  33. package/dist/catalog-CIqpzgsM.d.ts.map +1 -0
  34. package/dist/catalog-DqPhtCKZ.js +95 -0
  35. package/dist/catalog-DqPhtCKZ.js.map +1 -0
  36. package/dist/config-3avoUa9e.d.cts +95 -0
  37. package/dist/config-3avoUa9e.d.cts.map +1 -0
  38. package/dist/config-COX7rGAP.d.ts +95 -0
  39. package/dist/config-COX7rGAP.d.ts.map +1 -0
  40. package/dist/constants-BE1_9Tod.cjs +52 -0
  41. package/dist/constants-BE1_9Tod.cjs.map +1 -0
  42. package/dist/constants-BY7QZokc.js +29 -0
  43. package/dist/constants-BY7QZokc.js.map +1 -0
  44. package/dist/constants-CcbhOaAP.cjs +153 -0
  45. package/dist/constants-CcbhOaAP.cjs.map +1 -0
  46. package/dist/constants-rNuD5qJn.js +94 -0
  47. package/dist/constants-rNuD5qJn.js.map +1 -0
  48. package/dist/contracts/index.cjs +1006 -0
  49. package/dist/contracts/index.cjs.map +1 -0
  50. package/dist/contracts/index.d.cts +488 -0
  51. package/dist/contracts/index.d.cts.map +1 -0
  52. package/dist/contracts/index.d.ts +488 -0
  53. package/dist/contracts/index.d.ts.map +1 -0
  54. package/dist/contracts/index.js +817 -0
  55. package/dist/contracts/index.js.map +1 -0
  56. package/dist/cookies-DCIcr7uy.cjs +94 -0
  57. package/dist/cookies-DCIcr7uy.cjs.map +1 -0
  58. package/dist/cookies-DKEC7AWv.js +71 -0
  59. package/dist/cookies-DKEC7AWv.js.map +1 -0
  60. package/dist/delegated-token-CVNbMNfy.js +426 -0
  61. package/dist/delegated-token-CVNbMNfy.js.map +1 -0
  62. package/dist/delegated-token-DHSK4rHI.cjs +461 -0
  63. package/dist/delegated-token-DHSK4rHI.cjs.map +1 -0
  64. package/dist/error-helpers-0woh13Wd.d.cts +105 -0
  65. package/dist/error-helpers-0woh13Wd.d.cts.map +1 -0
  66. package/dist/error-helpers-Ct3AUK1I.d.ts +105 -0
  67. package/dist/error-helpers-Ct3AUK1I.d.ts.map +1 -0
  68. package/dist/error-helpers-XCh4ZJ-g.cjs +282 -0
  69. package/dist/error-helpers-XCh4ZJ-g.cjs.map +1 -0
  70. package/dist/error-helpers-lnwgNOw9.js +145 -0
  71. package/dist/error-helpers-lnwgNOw9.js.map +1 -0
  72. package/dist/error-messages-CGpW1fsg.d.cts +48 -0
  73. package/dist/error-messages-CGpW1fsg.d.cts.map +1 -0
  74. package/dist/error-messages-CGpW1fsg.d.ts +48 -0
  75. package/dist/error-messages-CGpW1fsg.d.ts.map +1 -0
  76. package/dist/event-codes-BBJHon-I.cjs +48 -0
  77. package/dist/event-codes-BBJHon-I.cjs.map +1 -0
  78. package/dist/event-codes-BgcJWsov.d.cts +42 -0
  79. package/dist/event-codes-BgcJWsov.d.cts.map +1 -0
  80. package/dist/event-codes-BgcJWsov.d.ts +42 -0
  81. package/dist/event-codes-BgcJWsov.d.ts.map +1 -0
  82. package/dist/event-codes-DR5_VlaR.js +43 -0
  83. package/dist/event-codes-DR5_VlaR.js.map +1 -0
  84. package/dist/generic/index.cjs +91 -0
  85. package/dist/generic/index.cjs.map +1 -0
  86. package/dist/generic/index.d.cts +27 -0
  87. package/dist/generic/index.d.cts.map +1 -0
  88. package/dist/generic/index.d.ts +27 -0
  89. package/dist/generic/index.d.ts.map +1 -0
  90. package/dist/generic/index.js +80 -0
  91. package/dist/generic/index.js.map +1 -0
  92. package/dist/hono/index.cjs +309 -0
  93. package/dist/hono/index.cjs.map +1 -0
  94. package/dist/hono/index.d.cts +272 -0
  95. package/dist/hono/index.d.cts.map +1 -0
  96. package/dist/hono/index.d.ts +272 -0
  97. package/dist/hono/index.d.ts.map +1 -0
  98. package/dist/hono/index.js +290 -0
  99. package/dist/hono/index.js.map +1 -0
  100. package/dist/hono-openapi/index.cjs +326 -0
  101. package/dist/hono-openapi/index.cjs.map +1 -0
  102. package/dist/hono-openapi/index.d.cts +14 -0
  103. package/dist/hono-openapi/index.d.cts.map +1 -0
  104. package/dist/hono-openapi/index.d.ts +14 -0
  105. package/dist/hono-openapi/index.d.ts.map +1 -0
  106. package/dist/hono-openapi/index.js +307 -0
  107. package/dist/hono-openapi/index.js.map +1 -0
  108. package/dist/http-client-BVF3iktR.cjs +211 -0
  109. package/dist/http-client-BVF3iktR.cjs.map +1 -0
  110. package/dist/http-client-Da0-OMfc.js +206 -0
  111. package/dist/http-client-Da0-OMfc.js.map +1 -0
  112. package/dist/index-CIH_2t7Y.d.ts +240 -0
  113. package/dist/index-CIH_2t7Y.d.ts.map +1 -0
  114. package/dist/index-CZru7c5T.d.cts +1711 -0
  115. package/dist/index-CZru7c5T.d.cts.map +1 -0
  116. package/dist/index-CZru7c5T.d.ts +1711 -0
  117. package/dist/index-CZru7c5T.d.ts.map +1 -0
  118. package/dist/index-DMVe5IJA.d.cts +240 -0
  119. package/dist/index-DMVe5IJA.d.cts.map +1 -0
  120. package/dist/index-DRWKobSp.d.ts +312 -0
  121. package/dist/index-DRWKobSp.d.ts.map +1 -0
  122. package/dist/index-DU9wJ-P2.d.cts +312 -0
  123. package/dist/index-DU9wJ-P2.d.cts.map +1 -0
  124. package/dist/index-DbiXllNy.d.cts +66 -0
  125. package/dist/index-DbiXllNy.d.cts.map +1 -0
  126. package/dist/index-z9r98qlk.d.ts +66 -0
  127. package/dist/index-z9r98qlk.d.ts.map +1 -0
  128. package/dist/index.cjs +89 -0
  129. package/dist/index.cjs.map +1 -0
  130. package/dist/index.d.cts +114 -0
  131. package/dist/index.d.cts.map +1 -0
  132. package/dist/index.d.ts +114 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +28 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/jwt-BBNqk0TV.cjs +155 -0
  137. package/dist/jwt-BBNqk0TV.cjs.map +1 -0
  138. package/dist/jwt-DhqgH94B.js +150 -0
  139. package/dist/jwt-DhqgH94B.js.map +1 -0
  140. package/dist/key-resolver-CESqj4-P.cjs +45 -0
  141. package/dist/key-resolver-CESqj4-P.cjs.map +1 -0
  142. package/dist/key-resolver-D56I2Zpz.js +34 -0
  143. package/dist/key-resolver-D56I2Zpz.js.map +1 -0
  144. package/dist/parse-error-response-6qOQS5y9.cjs +316 -0
  145. package/dist/parse-error-response-6qOQS5y9.cjs.map +1 -0
  146. package/dist/parse-error-response-BM9-kjs0.js +239 -0
  147. package/dist/parse-error-response-BM9-kjs0.js.map +1 -0
  148. package/dist/path-segment-C25i6aaH.cjs +29 -0
  149. package/dist/path-segment-C25i6aaH.cjs.map +1 -0
  150. package/dist/path-segment-CyqnaFrP.js +24 -0
  151. package/dist/path-segment-CyqnaFrP.js.map +1 -0
  152. package/dist/react/index.cjs +336 -0
  153. package/dist/react/index.cjs.map +1 -0
  154. package/dist/react/index.d.cts +151 -0
  155. package/dist/react/index.d.cts.map +1 -0
  156. package/dist/react/index.d.ts +151 -0
  157. package/dist/react/index.d.ts.map +1 -0
  158. package/dist/react/index.js +300 -0
  159. package/dist/react/index.js.map +1 -0
  160. package/dist/refresh-dedup-CKaHHe7m.js +14 -0
  161. package/dist/refresh-dedup-CKaHHe7m.js.map +1 -0
  162. package/dist/refresh-dedup-CLdACQXR.cjs +19 -0
  163. package/dist/refresh-dedup-CLdACQXR.cjs.map +1 -0
  164. package/dist/rolldown-runtime-CmQyd0Gu.cjs +27 -0
  165. package/dist/routes-DpAzgY1V.cjs +424 -0
  166. package/dist/routes-DpAzgY1V.cjs.map +1 -0
  167. package/dist/routes-F1g5aVqP.js +347 -0
  168. package/dist/routes-F1g5aVqP.js.map +1 -0
  169. package/dist/s2s/index.cjs +24 -0
  170. package/dist/s2s/index.d.cts +5 -0
  171. package/dist/s2s/index.d.ts +5 -0
  172. package/dist/s2s/index.js +5 -0
  173. package/dist/s2s-6wbotr78.cjs +926 -0
  174. package/dist/s2s-6wbotr78.cjs.map +1 -0
  175. package/dist/s2s-B_0SIQzn.js +897 -0
  176. package/dist/s2s-B_0SIQzn.js.map +1 -0
  177. package/dist/sign-C7y6xdvT.cjs +324 -0
  178. package/dist/sign-C7y6xdvT.cjs.map +1 -0
  179. package/dist/sign-HFtcYwa-.js +259 -0
  180. package/dist/sign-HFtcYwa-.js.map +1 -0
  181. package/dist/tokens-C1nzkn21.cjs +232 -0
  182. package/dist/tokens-C1nzkn21.cjs.map +1 -0
  183. package/dist/tokens-C3Z40qd7.js +107 -0
  184. package/dist/tokens-C3Z40qd7.js.map +1 -0
  185. package/dist/types-Ai3iIFlB.d.cts +538 -0
  186. package/dist/types-Ai3iIFlB.d.cts.map +1 -0
  187. package/dist/types-Bxg4hCMc.d.cts +52 -0
  188. package/dist/types-Bxg4hCMc.d.cts.map +1 -0
  189. package/dist/types-CEABh1Zf.d.ts +96 -0
  190. package/dist/types-CEABh1Zf.d.ts.map +1 -0
  191. package/dist/types-Ci0Jq0xB.d.cts +96 -0
  192. package/dist/types-Ci0Jq0xB.d.cts.map +1 -0
  193. package/dist/types-DXg8BvEh.d.ts +52 -0
  194. package/dist/types-DXg8BvEh.d.ts.map +1 -0
  195. package/dist/types-_zY7QbM5.d.ts +538 -0
  196. package/dist/types-_zY7QbM5.d.ts.map +1 -0
  197. package/dist/webhooks/index.cjs +8 -0
  198. package/dist/webhooks/index.d.cts +5 -0
  199. package/dist/webhooks/index.d.ts +5 -0
  200. package/dist/webhooks/index.js +4 -0
  201. package/dist/webhooks-B5sAWC9W.js +74 -0
  202. package/dist/webhooks-B5sAWC9W.js.map +1 -0
  203. package/dist/webhooks-Cx11psg1.cjs +79 -0
  204. package/dist/webhooks-Cx11psg1.cjs.map +1 -0
  205. package/package.json +192 -3
@@ -0,0 +1,312 @@
1
+ import { d as Result } from "./types-Ci0Jq0xB.cjs";
2
+ import { A as RenameGrupoInput, B as SearchDirectorioInput, C as ListAutorizacionesInput, D as ListWebhookDeliveriesQuery, E as ListEmpresasResult, F as S2SGetUserResult, G as UpdateEmpresaMemberInput, H as SubjectTokenInput, K as UpdateSucursalInput, L as S2SVerifyOptions, M as S2SBatchUsersResult, N as S2SCanonicalParts, O as RemoveEmpresaMemberInput, P as S2SClientConfig, S as GrupoResult, T as ListEmpresasInput, U as SucursalResult, V as SetContratacionInput, W as UpdateEmpresaInput, _ as EmpresaEstadoResult, a as CheckAutorizacionResult, b as EmpresaResult, c as CreateAutorizacionInput, d as CreateSucursalInput, f as CreateWebhookSubscriptionInput, h as DirectorioResult, i as CheckAutorizacionInput, j as S2SBatchUsersInput, k as RemoveGrupoEmpresaInput, l as CreateEmpresaInput, m as DeleteAutorizacionInput, n as AddGrupoEmpresaInput, o as ContratacionResult, p as DeactivateSucursalInput, q as UpdateWebhookSubscriptionInput, r as AutorizacionResult, s as ContratadoResult, t as AddEmpresaMemberInput, u as CreateGrupoInput, v as EmpresaMemberResult, w as ListAutorizacionesResult, x as GetEmpresaResult, z as S2SVerifyResult } from "./types-Ai3iIFlB.cjs";
3
+ import { a as WebhookSubscriptionWithSecret, i as WebhookSubscription, n as WebhookDelivery, t as RotateWebhookSecretResult } from "./types-Bxg4hCMc.cjs";
4
+ import "./index-CZru7c5T.cjs";
5
+ /**
6
+ * Tipo del cliente S2S retornado por `createS2SClient`.
7
+ */
8
+ type S2SClient = {
9
+ getUser(userId: string): Promise<Result<S2SGetUserResult>>;
10
+ batchUsers(input: S2SBatchUsersInput): Promise<Result<S2SBatchUsersResult>>;
11
+ createWebhookSubscription(input: CreateWebhookSubscriptionInput): Promise<Result<WebhookSubscriptionWithSecret>>;
12
+ listWebhookSubscriptions(): Promise<Result<{
13
+ subscriptions: WebhookSubscription[];
14
+ }>>;
15
+ getWebhookSubscription(id: string): Promise<Result<WebhookSubscription>>;
16
+ updateWebhookSubscription(id: string, input: UpdateWebhookSubscriptionInput): Promise<Result<WebhookSubscription>>;
17
+ deleteWebhookSubscription(id: string): Promise<Result<void>>;
18
+ rotateWebhookSubscriptionSecret(id: string): Promise<Result<RotateWebhookSecretResult>>;
19
+ listWebhookDeliveries(query?: ListWebhookDeliveriesQuery): Promise<Result<{
20
+ deliveries: WebhookDelivery[];
21
+ }>>;
22
+ /**
23
+ * Crea una empresa (`empresas:escribir`, el actor necesita `producto`). La persona del
24
+ * `subjectToken` queda como titular y el producto del actor en `prueba`. 409 si el RUC, la razón
25
+ * social o el slug ya existen; 429 si la persona superó el límite de altas.
26
+ */
27
+ createEmpresa(input: CreateEmpresaInput): Promise<Result<EmpresaResult>>;
28
+ /** Edita datos maestros, perfil y visibilidad en el directorio (administrador o titular; `empresas:escribir`). */
29
+ updateEmpresa(empresaId: string, input: UpdateEmpresaInput): Promise<Result<EmpresaResult>>;
30
+ /** Empresas que contrataron el producto del actor, paginadas con `cursor` (`empresas:leer`). */
31
+ listEmpresas(query?: ListEmpresasInput): Promise<Result<ListEmpresasResult>>;
32
+ /**
33
+ * Una empresa (`empresas:leer`): vista completa (`vista: 'completa'`) si el actor tiene producto y
34
+ * la empresa lo contrató; recortada (`vista: 'recortada'`, sin contacto ni miembros) si el actor
35
+ * no tiene producto (servicio compartido). 404 si no existe o no la contrató.
36
+ */
37
+ getEmpresa(empresaId: string): Promise<Result<GetEmpresaResult>>;
38
+ /** Da de baja una empresa (solo facturación, permiso `empresas:baja`; no lleva persona). */
39
+ bajaEmpresa(empresaId: string): Promise<Result<EmpresaEstadoResult>>;
40
+ /** Reactiva una empresa de baja (solo facturación, permiso `empresas:baja`). */
41
+ reactivarEmpresa(empresaId: string): Promise<Result<EmpresaEstadoResult>>;
42
+ /** Agrega un miembro como `miembro`; si ya lo es, 409 `conflict` (administrador o titular; `empresas:escribir`). */
43
+ addEmpresaMember(empresaId: string, input: AddEmpresaMemberInput): Promise<Result<EmpresaMemberResult>>;
44
+ /** Cambia el rol de un miembro (solo titular; `empresas:escribir`). */
45
+ setEmpresaMemberRole(empresaId: string, userId: string, input: UpdateEmpresaMemberInput): Promise<Result<EmpresaMemberResult>>;
46
+ /**
47
+ * Quita un miembro (`empresas:escribir`); si no lo es, 404 `not_found`. Con `userId` igual a la
48
+ * persona del token es salir por cuenta propia (cualquier rol, salvo el último titular).
49
+ */
50
+ removeEmpresaMember(empresaId: string, userId: string, input: RemoveEmpresaMemberInput): Promise<Result<void>>;
51
+ /** Crea una sucursal de la empresa (administrador o titular; `empresas:escribir`). */
52
+ createSucursal(empresaId: string, input: CreateSucursalInput): Promise<Result<SucursalResult>>;
53
+ /** Edita una sucursal (administrador o titular; `empresas:escribir`). */
54
+ updateSucursal(empresaId: string, sucursalId: string, input: UpdateSucursalInput): Promise<Result<SucursalResult>>;
55
+ /** Baja lógica de una sucursal, `activa = false` (administrador o titular; `empresas:escribir`). */
56
+ deactivateSucursal(empresaId: string, sucursalId: string, input: DeactivateSucursalInput): Promise<Result<void>>;
57
+ /**
58
+ * Pide la contratación del PROPIO producto del actor para una empresa existente
59
+ * (`pendiente_pago`; `contrataciones:pedir`). La persona del `subjectToken` debe ser titular:
60
+ * 404 igual si la empresa no existe o no es titular. Solo si no hay fila o está `cancelado`.
61
+ */
62
+ requestContratacion(empresaId: string, input: SubjectTokenInput): Promise<Result<ContratacionResult>>;
63
+ /** Cancela la contratación del propio producto (`cancelado`, desde cualquier estado; solo titular). */
64
+ cancelContratacion(empresaId: string, input: SubjectTokenInput): Promise<Result<void>>;
65
+ /**
66
+ * ¿La empresa tiene contratado ese producto? (`contrataciones:leer`). Para servicios compartidos
67
+ * que atienden llamadas de servicio donde no hay token delegado.
68
+ */
69
+ getContratacion(empresaId: string, producto: string): Promise<Result<ContratadoResult>>;
70
+ /** Facturación: escribe el estado y el vencimiento de cualquier fila (`contrataciones:escribir`, actor sin producto). */
71
+ setContratacion(empresaId: string, producto: string, input: SetContratacionInput): Promise<Result<ContratacionResult>>;
72
+ /** Crea un grupo con una empresa de la persona. */
73
+ createGrupo(input: CreateGrupoInput): Promise<Result<GrupoResult>>;
74
+ /** Renombra el grupo (titular de alguna de sus empresas). */
75
+ renameGrupo(grupoId: string, input: RenameGrupoInput): Promise<Result<GrupoResult>>;
76
+ /** Agrega una empresa de la que la persona es titular. */
77
+ addGrupoEmpresa(grupoId: string, input: AddGrupoEmpresaInput): Promise<Result<GrupoResult>>;
78
+ /** Quita una empresa del grupo; un grupo que queda vacío se borra solo. */
79
+ removeGrupoEmpresa(grupoId: string, empresaId: string, input: RemoveGrupoEmpresaInput): Promise<Result<void>>;
80
+ /** Busca en el directorio de empresas visibles (`directorio:leer`). Solo campos de perfil público; 50 por página. */
81
+ searchDirectorio(query?: SearchDirectorioInput): Promise<Result<DirectorioResult>>;
82
+ /** Concede un permiso del catálogo entre empresas a otra empresa (administrador o titular de la otorgante; `autorizaciones:escribir`). 409 si ya está vigente. */
83
+ createAutorizacion(otorganteId: string, input: CreateAutorizacionInput): Promise<Result<AutorizacionResult>>;
84
+ /** Revoca (otorgante) o renuncia a (beneficiaria) una autorización; administrador o titular (`autorizaciones:escribir`). */
85
+ deleteAutorizacion(empresaId: string, autorizacionId: string, input: DeleteAutorizacionInput): Promise<Result<void>>;
86
+ /** Autorizaciones vigentes de la empresa, `otorgadas` o `recibidas` (administrador o titular; `autorizaciones:leer`). La persona viaja en el header `x-eva-subject-token`. */
87
+ listAutorizaciones(empresaId: string, input: ListAutorizacionesInput): Promise<Result<ListAutorizacionesResult>>;
88
+ /**
89
+ * ¿La otorgante autorizó ese permiso a la beneficiaria? (`autorizaciones:leer`, solo actores cuya
90
+ * audiencia es dueña del permiso; puede tener además `producto`). Vale solo si las dos empresas están activas.
91
+ *
92
+ * Guarda el resultado 30 s (`AUTORIZACION_CACHE_TTL_MS`) por cliente: una revocación o una baja
93
+ * tardan como máximo eso en notarse. Los errores no se guardan.
94
+ */
95
+ checkAutorizacion(input: CheckAutorizacionInput): Promise<Result<CheckAutorizacionResult>>;
96
+ };
97
+ /**
98
+ * Crea un cliente S2S autenticado para comunicarse con la API interna del Auth Service.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const tokenProvider = createServiceTokenProvider({
103
+ * authUrl: 'https://auth.miapp.com',
104
+ * clientId: 'mi-servicio',
105
+ * secretHex: env.AUTH_CLIENT_SECRET_HEX,
106
+ * audience: 'auth-api',
107
+ * })
108
+ * const s2s = createS2SClient({ baseUrl: 'https://auth.miapp.com', tokenProvider })
109
+ * const result = await s2s.getUser(userId)
110
+ * if (!result.ok) return handleError(result.error)
111
+ * return result.data // perfil del usuario
112
+ * ```
113
+ */
114
+ declare function createS2SClient(config: S2SClientConfig): S2SClient;
115
+ /**
116
+ * SHA-256 hex de string vacío (precomputado).
117
+ * Constante usada cuando el body es vacío — evita hash innecesario.
118
+ * Exportado para uso externo (REQ-S2S-02 LOCKED).
119
+ */
120
+ declare const EMPTY_BODY_SHA256_HEX = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
121
+ /**
122
+ * Genera un nonce S2S: 16 bytes de `crypto.getRandomValues` como 32 hex en minúsculas.
123
+ * Es el valor del header `x-eva-nonce`; cada request debe llevar uno nuevo.
124
+ */
125
+ declare function generateS2SNonce(): string;
126
+ /**
127
+ * Construye el canonical string de 7 líneas (SigV4-style).
128
+ *
129
+ * Formato EXACTO:
130
+ * {METHOD}\n{PATH}\n{CANONICAL_QUERY}\n{TIMESTAMP}\n{NONCE}\n{CLIENT_ID}\n{BODY_HASH}
131
+ *
132
+ * @param parts - Componentes del request a firmar.
133
+ */
134
+ declare function buildS2SCanonicalString(parts: S2SCanonicalParts): Promise<string>;
135
+ /**
136
+ * Genera la firma HMAC-SHA-256 del canonical string.
137
+ *
138
+ * @returns String con formato `"sha256=${hexLowercase}"`.
139
+ * @throws Si `secretHex` tiene formato inválido (longitud impar o chars no-hex).
140
+ * @throws Si `parts.nonce` no es un nonce canónico (32 hex en minúsculas).
141
+ */
142
+ declare function signS2SRequest({ parts, secretHex }: {
143
+ parts: S2SCanonicalParts;
144
+ secretHex: string;
145
+ }): Promise<string>;
146
+ /**
147
+ * Genera los 4 headers de autenticación S2S para un request: client id, timestamp (segundos),
148
+ * nonce y firma. Es el único punto que genera timestamp + nonce y firma; `createS2SClient` lo
149
+ * usa y los firmantes manuales deben usarlo en vez de armar los headers a mano.
150
+ *
151
+ * El nonce es nuevo en cada llamada: no reutilices los headers devueltos en otro request.
152
+ *
153
+ * @param rawQuery - Query string crudo sin `?`. Default `''`.
154
+ * @param bodyBytes - Bytes EXACTOS que se enviarán como body. Default: vacío.
155
+ * @throws Si `secretHex` tiene formato inválido.
156
+ */
157
+ declare function signS2SHeaders({ method, path, rawQuery, bodyBytes, clientId, secretHex }: {
158
+ method: string;
159
+ path: string;
160
+ rawQuery?: string;
161
+ bodyBytes?: Uint8Array;
162
+ clientId: string;
163
+ secretHex: string;
164
+ }): Promise<Record<string, string>>;
165
+ /**
166
+ * Constantes del módulo S2S (service-to-service).
167
+ *
168
+ * REQ-S2S-05 LOCKED: la ventana de tiempo para el timestamp S2S es de 120 segundos.
169
+ */
170
+ /**
171
+ * Ventana máxima (en segundos) para aceptar un request S2S.
172
+ * Si |serverTime - timestamp| > S2S_TIMESTAMP_WINDOW_SECONDS → firma rechazada.
173
+ */
174
+ declare const S2S_TIMESTAMP_WINDOW_SECONDS = 120;
175
+ /**
176
+ * Permisos de la audiencia `auth-api`, tal como los concede el Auth Service a un service client.
177
+ *
178
+ * Se mantiene como objeto del SDK (`S2S_SCOPES.USERS_READ`) pero sus valores deben ser miembros del
179
+ * catálogo `SERVICE_AUDIENCE_SCOPES['auth-api']` del contrato: `satisfies` lo comprueba en
180
+ * compilación. `admin` no está: la superficie `/admin` de Auth se firma, no usa tokens.
181
+ *
182
+ * @example
183
+ * ```ts
184
+ * import { S2S_SCOPES } from '@eva_solutions/auth-sdk/s2s'
185
+ *
186
+ * const scope = [S2S_SCOPES.USERS_READ, S2S_SCOPES.EMPRESAS_ESCRIBIR].join(' ')
187
+ * ```
188
+ */
189
+ declare const S2S_SCOPES: {
190
+ readonly USERS_READ: "users:read";
191
+ readonly WEBHOOKS_READ: "webhooks:read";
192
+ readonly WEBHOOKS_WRITE: "webhooks:write";
193
+ readonly EMPRESAS_LEER: "empresas:leer";
194
+ readonly EMPRESAS_ESCRIBIR: "empresas:escribir";
195
+ readonly TOKENS_EXCHANGE: "tokens:exchange";
196
+ readonly CONTRATACIONES_PEDIR: "contrataciones:pedir";
197
+ readonly CONTRATACIONES_ESCRIBIR: "contrataciones:escribir";
198
+ readonly CONTRATACIONES_LEER: "contrataciones:leer";
199
+ readonly EMPRESAS_BAJA: "empresas:baja";
200
+ readonly AUTORIZACIONES_ESCRIBIR: "autorizaciones:escribir";
201
+ readonly AUTORIZACIONES_LEER: "autorizaciones:leer";
202
+ readonly DIRECTORIO_LEER: "directorio:leer";
203
+ };
204
+ /** Unión de literales de todos los permisos de la audiencia `auth-api`. */
205
+ type S2SScope = (typeof S2S_SCOPES)[keyof typeof S2S_SCOPES];
206
+ /**
207
+ * Header de respuesta que el Auth Service incluye en cada respuesta S2S
208
+ * con la hora del servidor (Unix timestamp en segundos como string).
209
+ *
210
+ * @example
211
+ * ```ts
212
+ * import { S2S_RESPONSE_HEADERS } from '@eva_solutions/auth-sdk/s2s'
213
+ *
214
+ * const serverTime = response.headers.get(S2S_RESPONSE_HEADERS.SERVER_TIME)
215
+ * ```
216
+ */
217
+ declare const S2S_RESPONSE_HEADERS: {
218
+ readonly SERVER_TIME: "x-eva-server-time";
219
+ };
220
+ /**
221
+ * Vida en milisegundos del caché de `checkAutorizacion` en el cliente S2S (30 s). Una revocación o
222
+ * la baja de una empresa tardan como máximo esto en notarse en un servicio que verifica; así
223
+ * está declarado en el diseño.
224
+ */
225
+ declare const AUTORIZACION_CACHE_TTL_MS = 30000;
226
+ /**
227
+ * Códigos de error específicos del módulo S2S.
228
+ *
229
+ * Complementan a `ERROR_CODES` (core) para los errores propios de los endpoints
230
+ * `/api/v1/internal/*` que consume `createS2SClient`: usuarios y subscriptions de webhooks.
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * import { S2S_ERROR_CODES } from '@eva_solutions/auth-sdk/s2s'
235
+ *
236
+ * const r = await s2s.rotateWebhookSubscriptionSecret(id)
237
+ * if (!r.ok && r.error.kind === 'api' && r.error.code === S2S_ERROR_CODES.webhook_secret_rotation_conflict) {
238
+ * // otra rotación concurrente ganó; esta llamada no recibió clave. Reintenta.
239
+ * }
240
+ * ```
241
+ */
242
+ declare const S2S_ERROR_CODES: {
243
+ /** `GET /internal/users/{id}`: el usuario no existe o está soft-deleted (404). */
244
+ readonly user_not_found: "user_not_found";
245
+ /** Ya existe una subscription del mismo service client con la misma URL y los mismos eventCodes (409). */
246
+ readonly webhook_subscription_duplicate: "webhook_subscription_duplicate";
247
+ /** La subscription no existe o pertenece a otro service client (404). */
248
+ readonly webhook_subscription_not_found: "webhook_subscription_not_found";
249
+ /**
250
+ * `rotate-secret` perdió contra otra rotación concurrente de la misma subscription (409).
251
+ * El perdedor no recibe clave; es reintentable.
252
+ */
253
+ readonly webhook_secret_rotation_conflict: "webhook_secret_rotation_conflict";
254
+ /** URL de webhook inválida: reglas estáticas, IP privada o host sin direcciones (400). */
255
+ readonly webhook_url_invalid: "webhook_url_invalid";
256
+ /** `eventCodes` vacío al crear o actualizar (400). */
257
+ readonly webhook_event_codes_empty: "webhook_event_codes_empty";
258
+ };
259
+ /** Unión de literales de los error codes específicos del módulo S2S. */
260
+ type S2SErrorCode = (typeof S2S_ERROR_CODES)[keyof typeof S2S_ERROR_CODES];
261
+ /**
262
+ * Verify an inbound S2S request signed with HMAC-SHA-256.
263
+ *
264
+ * The function reads the body into memory exactly once (via `request.arrayBuffer()`).
265
+ * Callers that need to read the body again after calling this function MUST clone the
266
+ * request before passing it here (e.g., Hono's `s2sAuth` uses `cloneRawRequest`).
267
+ *
268
+ * @param request - Web API `Request` to verify. Body is read and buffered internally.
269
+ * @param opts.secretStore - Callback returning the plaintext secret (64 hex chars) for
270
+ * the given clientId, or null if unknown. Return null — do NOT throw — for unknown clients.
271
+ * @param opts.timestampWindowSeconds - Override timestamp window (default: 120 s).
272
+ *
273
+ * @throws If `secretStore` returns a non-null value that is not valid hex (empty, odd length
274
+ * or non-hex chars). This is a server misconfiguration, so it is NOT mapped to a 401; the
275
+ * error message never contains the secret.
276
+ *
277
+ * @remarks A query string with malformed percent-encoding (e.g. `?a=%ZZ`) cannot be
278
+ * canonicalized; it fails closed with `signature_invalid`, following the same path as an
279
+ * invalid signature (secret lookup and HMAC included, `replayCache` not touched).
280
+ *
281
+ * @returns `S2SVerifyResult<{ clientId: string }>` — discriminated union.
282
+ * `ok: true` → `data.clientId` is the authenticated service client slug.
283
+ * `ok: false` → `error.reason` narrows the failure; `error.message` is human-readable.
284
+ *
285
+ * @security Timing-safe: whether `secretStore` returns null (client_unknown path) or a
286
+ * valid secret with an invalid signature (signature_invalid path), this function
287
+ * ALWAYS reaches `crypto.subtle.verify` with the same execution path — using
288
+ * `DUMMY_HMAC_KEY_HEX` when the secret is null. The verify result is discarded in
289
+ * the client_unknown path, but the operation always executes. See AC-10.
290
+ *
291
+ * @example
292
+ * ```ts
293
+ * const result = await verifyS2SRequest(request, {
294
+ * secretStore: async (clientId) => {
295
+ * const client = await db.serviceClients.findById(clientId)
296
+ * return client?.secret ?? null
297
+ * },
298
+ * })
299
+ * if (!result.ok) {
300
+ * return new Response(
301
+ * JSON.stringify({ error: result.error }),
302
+ * { status: 401, headers: { 'Content-Type': 'application/json' } },
303
+ * )
304
+ * }
305
+ * const { clientId } = result.data
306
+ * ```
307
+ */
308
+ declare function verifyS2SRequest(request: Request, opts: S2SVerifyOptions): Promise<S2SVerifyResult<{
309
+ clientId: string;
310
+ }>>;
311
+ export { S2SScope as a, S2S_TIMESTAMP_WINDOW_SECONDS as c, generateS2SNonce as d, signS2SHeaders as f, createS2SClient as h, AUTORIZACION_CACHE_TTL_MS as i, EMPTY_BODY_SHA256_HEX as l, S2SClient as m, S2SErrorCode as n, S2S_RESPONSE_HEADERS as o, signS2SRequest as p, S2S_ERROR_CODES as r, S2S_SCOPES as s, verifyS2SRequest as t, buildS2SCanonicalString as u };
312
+ //# sourceMappingURL=index-DU9wJ-P2.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DU9wJ-P2.d.cts","names":[],"sources":["../src/s2s/client.ts","../src/s2s/sign.ts","../src/s2s/constants.ts","../src/s2s/error-codes.ts","../src/s2s/verify.ts"],"mappings":";;;;;;;KAoGY;EACV,QAAQ,iBAAiB,QAAQ,OAAO;EACxC,WAAW,OAAO,qBAAqB,QAAQ,OAAO;EACtD,0BACE,OAAO,iCACN,QAAQ,OAAO;EAClB,4BAA4B,QAC1B;IAAS,eAAe;;EAE1B,uBAAuB,aAAa,QAAQ,OAAO;EACnD,0BACE,YACA,OAAO,iCACN,QAAQ,OAAO;EAClB,0BAA0B,aAAa,QAAQ;EAC/C,gCACE,aACC,QAAQ,OAAO;EAClB,sBACE,QAAQ,6BACP,QAAQ;IAAS,YAAY;;;;;;;EAQhC,cAAc,OAAO,qBAAqB,QAAQ,OAAO;;EAEzD,cACE,mBACA,OAAO,qBACN,QAAQ,OAAO;;EAElB,aAAa,QAAQ,oBAAoB,QAAQ,OAAO;;;;;;EAMxD,WAAW,oBAAoB,QAAQ,OAAO;;EAE9C,YAAY,oBAAoB,QAAQ,OAAO;;EAE/C,iBAAiB,oBAAoB,QAAQ,OAAO;;EAEpD,iBACE,mBACA,OAAO,wBACN,QAAQ,OAAO;;EAElB,qBACE,mBACA,gBACA,OAAO,2BACN,QAAQ,OAAO;;;;;EAKlB,oBACE,mBACA,gBACA,OAAO,2BACN,QAAQ;;EAEX,eACE,mBACA,OAAO,sBACN,QAAQ,OAAO;;EAElB,eACE,mBACA,oBACA,OAAO,sBACN,QAAQ,OAAO;;EAElB,mBACE,mBACA,oBACA,OAAO,0BACN,QAAQ;;;;;;EASX,oBACE,mBACA,OAAO,oBACN,QAAQ,OAAO;;EAElB,mBACE,mBACA,OAAO,oBACN,QAAQ;;;;;EAKX,gBACE,mBACA,mBACC,QAAQ,OAAO;;EAElB,gBACE,mBACA,kBACA,OAAO,uBACN,QAAQ,OAAO;;EAKlB,YAAY,OAAO,mBAAmB,QAAQ,OAAO;;EAErD,YACE,iBACA,OAAO,mBACN,QAAQ,OAAO;;EAElB,gBACE,iBACA,OAAO,uBACN,QAAQ,OAAO;;EAElB,mBACE,iBACA,mBACA,OAAO,0BACN,QAAQ;;EAKX,iBACE,QAAQ,wBACP,QAAQ,OAAO;;EAKlB,mBACE,qBACA,OAAO,0BACN,QAAQ,OAAO;;EAElB,mBACE,mBACA,wBACA,OAAO,0BACN,QAAQ;;EAEX,mBACE,mBACA,OAAO,0BACN,QAAQ,OAAO;;;;;;;;EAQlB,kBACE,OAAO,yBACN,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;iBAsLJ,gBAAgB,QAAQ,kBAAkB;;;;;;cCjV7C;;;;;iBAOG;;;;;;;;;iBAaM,wBACpB,OAAO,oBACN;;;;;;;;iBAwCmB,iBACpB,OACA;EAEA,OAAO;EACP;IACE;;;;;;;;;;;;iBAgDkB,iBACpB,QACA,MACA,UACA,WACA,UACA;EAEA;EACA;EACA;EACA,YAAY;EACZ;EACA;IACE,QAAQ;;;;;;;;;;cCxOC;;;;;;;;;;;;;;;cAmCA;;;;;;;;;;;;;;;;KAiBD,mBAAmB,yBAAyB;;;;;;;;;;;;cAa3C;;;;;;;;cASA;;;;;;;;;;;;;;;;;cCvEA;;;;;;;;;;;;;;;;;;KAmBD,uBACF,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCoHlB,iBACpB,SAAS,SACT,MAAM,mBACL,QAAQ;EAAkB"}
@@ -0,0 +1,66 @@
1
+ import "./index-CZru7c5T.cjs";
2
+ import "./types-Bxg4hCMc.cjs";
3
+ /**
4
+ * Verificación de firma HMAC-SHA-256 de webhooks entrantes del Auth Service.
5
+ *
6
+ * REQ-WH-03, REQ-WH-04, REQ-WH-05, REQ-WH-06 LOCKED.
7
+ *
8
+ * Algoritmo (espejo del API `firmarWebhook` en webhook-dispatcher.ts):
9
+ * canonical = `${timestamp}\n${eventId}\n${sha256Hex(rawBody)}`
10
+ * expected = HMAC-SHA-256(signingKey, canonical)
11
+ *
12
+ * Usa Web Crypto API (`crypto.subtle`) — isomorfo (browser + worker + Node 20+).
13
+ *
14
+ * D-12 LOCKED: hexToBytes y sha256Hex se duplican aquí (NO se extraen a shared)
15
+ * para que el entry point ./webhooks sea completamente tree-shakeable.
16
+ */
17
+ type VerifyWebhookSignatureParams = {
18
+ /** Body raw del request (string, antes de parsear JSON). */
19
+ rawBody: string;
20
+ /**
21
+ * Signing key del webhook — hex 64 chars (32 bytes).
22
+ * Es el `signingKey` que devolvió el API al crear/rotar la subscription.
23
+ * NOTA H3 LOCKED: NO re-hashear — usarlo tal como viene.
24
+ */
25
+ signingKey: string;
26
+ /**
27
+ * Valor completo del header `X-Eva-Webhook-Signature`.
28
+ * Debe comenzar con `"sha256="`.
29
+ */
30
+ signature: string;
31
+ /** Valor del header `X-Eva-Webhook-Id` (UUID del evento). */
32
+ eventId: string;
33
+ /**
34
+ * Valor del header `X-Eva-Webhook-Timestamp` parseado a number
35
+ * (unix seconds).
36
+ */
37
+ timestamp: number;
38
+ /**
39
+ * Override del tiempo actual (unix seconds) para tests.
40
+ * Por defecto: `Math.floor(Date.now() / 1000)`.
41
+ */
42
+ now?: number;
43
+ };
44
+ /**
45
+ * Verifica la firma HMAC-SHA-256 de un webhook entrante del Auth Service.
46
+ *
47
+ * @returns `true` si la firma es válida y está dentro de la ventana de tiempo;
48
+ * `false` en cualquier otro caso (firma inválida, expirada, formato incorrecto).
49
+ *
50
+ * La comparación es constant-time via `crypto.subtle.verify` (por spec).
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * const valid = await verifyWebhookSignature({
55
+ * rawBody: await req.text(),
56
+ * signingKey: process.env.WEBHOOK_SIGNING_KEY,
57
+ * signature: req.headers.get('x-eva-webhook-signature') ?? '',
58
+ * eventId: req.headers.get('x-eva-webhook-id') ?? '',
59
+ * timestamp: Number(req.headers.get('x-eva-webhook-timestamp')),
60
+ * })
61
+ * if (!valid) return new Response('Unauthorized', { status: 401 })
62
+ * ```
63
+ */
64
+ declare function verifyWebhookSignature({ rawBody, signingKey, signature, eventId, timestamp, now }: VerifyWebhookSignatureParams): Promise<boolean>;
65
+ export { verifyWebhookSignature as n, VerifyWebhookSignatureParams as t };
66
+ //# sourceMappingURL=index-DbiXllNy.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DbiXllNy.d.cts","names":[],"sources":["../src/webhooks/verify-signature.ts"],"mappings":";;;;;;;;;;;;;;;;KAqDY;;EAEV;;;;;;EAMA;;;;;EAKA;;EAEA;;;;;EAKA;;;;;EAKA;;;;;;;;;;;;;;;;;;;;;;iBAuBoB,yBACpB,SACA,YACA,WACA,SACA,WACA,OACC,+BAA+B"}
@@ -0,0 +1,66 @@
1
+ import "./index-CZru7c5T.js";
2
+ import "./types-DXg8BvEh.js";
3
+ /**
4
+ * Verificación de firma HMAC-SHA-256 de webhooks entrantes del Auth Service.
5
+ *
6
+ * REQ-WH-03, REQ-WH-04, REQ-WH-05, REQ-WH-06 LOCKED.
7
+ *
8
+ * Algoritmo (espejo del API `firmarWebhook` en webhook-dispatcher.ts):
9
+ * canonical = `${timestamp}\n${eventId}\n${sha256Hex(rawBody)}`
10
+ * expected = HMAC-SHA-256(signingKey, canonical)
11
+ *
12
+ * Usa Web Crypto API (`crypto.subtle`) — isomorfo (browser + worker + Node 20+).
13
+ *
14
+ * D-12 LOCKED: hexToBytes y sha256Hex se duplican aquí (NO se extraen a shared)
15
+ * para que el entry point ./webhooks sea completamente tree-shakeable.
16
+ */
17
+ type VerifyWebhookSignatureParams = {
18
+ /** Body raw del request (string, antes de parsear JSON). */
19
+ rawBody: string;
20
+ /**
21
+ * Signing key del webhook — hex 64 chars (32 bytes).
22
+ * Es el `signingKey` que devolvió el API al crear/rotar la subscription.
23
+ * NOTA H3 LOCKED: NO re-hashear — usarlo tal como viene.
24
+ */
25
+ signingKey: string;
26
+ /**
27
+ * Valor completo del header `X-Eva-Webhook-Signature`.
28
+ * Debe comenzar con `"sha256="`.
29
+ */
30
+ signature: string;
31
+ /** Valor del header `X-Eva-Webhook-Id` (UUID del evento). */
32
+ eventId: string;
33
+ /**
34
+ * Valor del header `X-Eva-Webhook-Timestamp` parseado a number
35
+ * (unix seconds).
36
+ */
37
+ timestamp: number;
38
+ /**
39
+ * Override del tiempo actual (unix seconds) para tests.
40
+ * Por defecto: `Math.floor(Date.now() / 1000)`.
41
+ */
42
+ now?: number;
43
+ };
44
+ /**
45
+ * Verifica la firma HMAC-SHA-256 de un webhook entrante del Auth Service.
46
+ *
47
+ * @returns `true` si la firma es válida y está dentro de la ventana de tiempo;
48
+ * `false` en cualquier otro caso (firma inválida, expirada, formato incorrecto).
49
+ *
50
+ * La comparación es constant-time via `crypto.subtle.verify` (por spec).
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * const valid = await verifyWebhookSignature({
55
+ * rawBody: await req.text(),
56
+ * signingKey: process.env.WEBHOOK_SIGNING_KEY,
57
+ * signature: req.headers.get('x-eva-webhook-signature') ?? '',
58
+ * eventId: req.headers.get('x-eva-webhook-id') ?? '',
59
+ * timestamp: Number(req.headers.get('x-eva-webhook-timestamp')),
60
+ * })
61
+ * if (!valid) return new Response('Unauthorized', { status: 401 })
62
+ * ```
63
+ */
64
+ declare function verifyWebhookSignature({ rawBody, signingKey, signature, eventId, timestamp, now }: VerifyWebhookSignatureParams): Promise<boolean>;
65
+ export { verifyWebhookSignature as n, VerifyWebhookSignatureParams as t };
66
+ //# sourceMappingURL=index-z9r98qlk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-z9r98qlk.d.ts","names":[],"sources":["../src/webhooks/verify-signature.ts"],"mappings":";;;;;;;;;;;;;;;;KAqDY;;EAEV;;;;;;EAMA;;;;;EAKA;;EAEA;;;;;EAKA;;;;;EAKA;;;;;;;;;;;;;;;;;;;;;;iBAuBoB,yBACpB,SACA,YACA,WACA,SACA,WACA,OACC,+BAA+B"}
package/dist/index.cjs ADDED
@@ -0,0 +1,89 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_http_client = require("./http-client-BVF3iktR.cjs");
3
+ const require_jwt = require("./jwt-BBNqk0TV.cjs");
4
+ const require_parse_error_response = require("./parse-error-response-6qOQS5y9.cjs");
5
+ const require_constants = require("./constants-BE1_9Tod.cjs");
6
+ const require_constants$1 = require("./constants-CcbhOaAP.cjs");
7
+ const require_cookies = require("./cookies-DCIcr7uy.cjs");
8
+ const require_error_helpers = require("./error-helpers-XCh4ZJ-g.cjs");
9
+ const require_webhooks = require("./webhooks-Cx11psg1.cjs");
10
+ const require_event_codes = require("./event-codes-BBJHon-I.cjs");
11
+ const require_admin = require("./admin-Q6lbWqLM.cjs");
12
+ const require_s2s = require("./s2s-6wbotr78.cjs");
13
+ const require_sign = require("./sign-C7y6xdvT.cjs");
14
+ const require_delegated_token = require("./delegated-token-DHSK4rHI.cjs");
15
+ // src/client.ts
16
+ function createEvaAuth() {
17
+ return { client: require_http_client.createHttpClient() };
18
+ }
19
+ // src/get-message.ts
20
+ /**
21
+ * Retorna el mensaje del EvaError independientemente de su kind.
22
+ * Equivalente a `err.message` — helper para migración gradual desde 0.x.
23
+ */
24
+ function getMessage(err) {
25
+ return err.message;
26
+ }
27
+ exports.ACCOUNT_STATES = require_constants$1.ACCOUNT_STATES;
28
+ exports.ADMIN_ERROR_CODES = require_admin.ADMIN_ERROR_CODES;
29
+ exports.AUTORIZACION_CACHE_TTL_MS = require_sign.AUTORIZACION_CACHE_TTL_MS;
30
+ exports.COOKIE_MAX_AGE = require_constants.COOKIE_MAX_AGE;
31
+ exports.DEFAULT_ERROR_MESSAGES = require_parse_error_response.DEFAULT_ERROR_MESSAGES;
32
+ exports.EMPTY_BODY_SHA256_HEX = require_sign.EMPTY_BODY_SHA256_HEX;
33
+ exports.ERROR_CODES = require_constants$1.ERROR_CODES;
34
+ exports.EVENT_CODES = require_event_codes.EVENT_CODES;
35
+ exports.HEADERS = require_constants$1.HEADERS;
36
+ exports.JWT_CONFIG = require_constants.JWT_CONFIG;
37
+ exports.S2S_ERROR_CODES = require_s2s.S2S_ERROR_CODES;
38
+ exports.S2S_RESPONSE_HEADERS = require_sign.S2S_RESPONSE_HEADERS;
39
+ exports.S2S_SCOPES = require_sign.S2S_SCOPES;
40
+ exports.S2S_TIMESTAMP_WINDOW_SECONDS = require_sign.S2S_TIMESTAMP_WINDOW_SECONDS;
41
+ exports.SDK_ERROR_REASONS = require_error_helpers.SDK_ERROR_REASONS;
42
+ exports.ServiceTokenRequestError = require_s2s.ServiceTokenRequestError;
43
+ exports.USERS_BATCH_MAX_IDS = require_constants$1.USERS_BATCH_MAX_IDS;
44
+ exports.WEBHOOK_HEADERS = require_constants$1.WEBHOOK_HEADERS;
45
+ exports.WEBHOOK_TIMESTAMP_WINDOW_SECONDS = require_constants$1.WEBHOOK_TIMESTAMP_WINDOW_SECONDS;
46
+ exports.buildS2SCanonicalString = require_sign.buildS2SCanonicalString;
47
+ exports.configureEvaAuth = require_parse_error_response.configureEvaAuth;
48
+ exports.createAdminClient = require_admin.createAdminClient;
49
+ exports.createEvaAuth = createEvaAuth;
50
+ exports.createHttpClient = require_http_client.createHttpClient;
51
+ exports.createS2SClient = require_s2s.createS2SClient;
52
+ exports.createServiceTokenProvider = require_s2s.createServiceTokenProvider;
53
+ exports.generateS2SNonce = require_sign.generateS2SNonce;
54
+ exports.getAuthUrl = require_parse_error_response.getAuthUrl;
55
+ exports.getCookieDomain = require_parse_error_response.getCookieDomain;
56
+ exports.getCookieNames = require_constants.getCookieNames;
57
+ exports.getMessage = getMessage;
58
+ exports.isAccountStateLocked = require_error_helpers.isAccountStateLocked;
59
+ exports.isApiError = require_error_helpers.isApiError;
60
+ exports.isAuthRequired = require_error_helpers.isAuthRequired;
61
+ exports.isBadRequest = require_error_helpers.isBadRequest;
62
+ exports.isConflict = require_error_helpers.isConflict;
63
+ exports.isForbidden = require_error_helpers.isForbidden;
64
+ exports.isGone = require_error_helpers.isGone;
65
+ exports.isInternalError = require_error_helpers.isInternalError;
66
+ exports.isMalformed = require_error_helpers.isMalformed;
67
+ exports.isNetworkError = require_error_helpers.isNetworkError;
68
+ exports.isNotFound = require_error_helpers.isNotFound;
69
+ exports.isRateLimited = require_error_helpers.isRateLimited;
70
+ exports.isRefreshNoTokens = require_error_helpers.isRefreshNoTokens;
71
+ exports.isSdkError = require_error_helpers.isSdkError;
72
+ exports.isServiceUnavailable = require_error_helpers.isServiceUnavailable;
73
+ exports.isTokenInvalid = require_error_helpers.isTokenInvalid;
74
+ exports.isUnauthorized = require_error_helpers.isUnauthorized;
75
+ exports.isUnprocessableEntity = require_error_helpers.isUnprocessableEntity;
76
+ exports.isValidationError = require_error_helpers.isValidationError;
77
+ exports.isVerifyFailed = require_error_helpers.isVerifyFailed;
78
+ exports.matchError = require_error_helpers.matchError;
79
+ exports.matchSdkReason = require_error_helpers.matchSdkReason;
80
+ exports.readTokensFromCookies = require_cookies.readTokensFromCookies;
81
+ exports.signS2SHeaders = require_sign.signS2SHeaders;
82
+ exports.signS2SRequest = require_sign.signS2SRequest;
83
+ exports.verifyAccessToken = require_jwt.verifyAccessToken;
84
+ exports.verifyDelegatedToken = require_delegated_token.verifyDelegatedToken;
85
+ exports.verifyS2SRequest = require_delegated_token.verifyS2SRequest;
86
+ exports.verifyServiceToken = require_delegated_token.verifyServiceToken;
87
+ exports.verifyWebhookSignature = require_webhooks.verifyWebhookSignature;
88
+
89
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["createHttpClient"],"sources":["../src/client.ts","../src/get-message.ts"],"sourcesContent":["import { createHttpClient, type EvaHttpClient } from './http-client'\n\ntype EvaAuth = {\n client: EvaHttpClient\n}\n\nexport function createEvaAuth(): EvaAuth {\n return {\n client: createHttpClient(),\n }\n}\n","/**\n * Helper de conveniencia para extraer el mensaje de un EvaError.\n * Útil para migración gradual de 0.x → 1.0.0 donde result.error era string.\n *\n * Uso:\n * import { getMessage } from '@eva_solutions/auth-sdk'\n * if (!result.ok) {\n * console.error(getMessage(result.error)) // equivale a result.error.message\n * }\n */\nimport type { EvaError } from './types'\n\n/**\n * Retorna el mensaje del EvaError independientemente de su kind.\n * Equivalente a `err.message` — helper para migración gradual desde 0.x.\n */\nexport function getMessage(err: EvaError): string {\n return err.message\n}\n"],"mappings":";;;;;;;;;;;;;;;AAMA,SAAgB,gBAAyB;CACvC,OAAO,EACL,QAAQA,oBAAAA,iBAAiB,EAC3B;AACF;;;;;;ACMA,SAAgB,WAAW,KAAuB;CAChD,OAAO,IAAI;AACb"}