@jmlq/auth 0.0.1-alpha.1 → 0.0.1-alpha.3

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 (361) hide show
  1. package/README.md +259 -306
  2. package/dist/application/dtos/index.d.ts +3 -0
  3. package/dist/application/dtos/index.js +19 -0
  4. package/dist/application/dtos/request/index.d.ts +4 -0
  5. package/dist/{src/application/dtos → application/dtos/request}/index.js +4 -4
  6. package/dist/{src/application/dtos/login.dto.d.ts → application/dtos/request/login.request.d.ts} +0 -4
  7. package/dist/application/dtos/request/logout.request.d.ts +3 -0
  8. package/dist/application/dtos/request/refresh-token.request.d.ts +3 -0
  9. package/dist/application/dtos/request/register-user.request.d.ts +6 -0
  10. package/dist/application/dtos/response/index.d.ts +4 -0
  11. package/dist/application/dtos/response/index.js +20 -0
  12. package/dist/application/dtos/response/login.response.d.ts +4 -0
  13. package/dist/{src/application/dtos/logout.dto.d.ts → application/dtos/response/logout.response.d.ts} +0 -3
  14. package/dist/{src/application/dtos/refresh-token.dto.d.ts → application/dtos/response/refresh-token.response.d.ts} +0 -3
  15. package/dist/application/dtos/response/register-user.response.d.ts +7 -0
  16. package/dist/application/dtos/type/index.d.ts +1 -0
  17. package/dist/{src/shared/constants → application/dtos/type}/index.js +1 -1
  18. package/dist/application/dtos/type/user-role.type.d.ts +4 -0
  19. package/dist/application/factories/auth-service.factory.d.ts +11 -0
  20. package/dist/application/factories/auth-service.factory.js +40 -0
  21. package/dist/{src/application → application}/index.d.ts +1 -0
  22. package/dist/{src/application → application}/index.js +1 -0
  23. package/dist/application/types/auth-service-factory-options.type.d.ts +5 -0
  24. package/dist/application/types/index.d.ts +1 -0
  25. package/dist/{src/infrastructure/jwt/factory → application/types}/index.js +1 -1
  26. package/dist/{src/application → application}/use-cases/login-with-password.use-case.d.ts +2 -2
  27. package/dist/{src/application → application}/use-cases/login-with-password.use-case.js +6 -5
  28. package/dist/{src/application → application}/use-cases/logout.use-case.d.ts +2 -2
  29. package/dist/{src/application → application}/use-cases/logout.use-case.js +2 -2
  30. package/dist/{src/application → application}/use-cases/refresh-token.use-case.d.ts +2 -2
  31. package/dist/{src/application → application}/use-cases/refresh-token.use-case.js +2 -2
  32. package/dist/application/use-cases/register-user.use-case.d.ts +12 -0
  33. package/dist/{src/application → application}/use-cases/register-user.use-case.js +27 -1
  34. package/dist/{src/domain → domain}/errors/auth.errors.d.ts +1 -14
  35. package/dist/{src/domain → domain}/errors/auth.errors.js +1 -15
  36. package/dist/{src/domain → domain}/index.d.ts +0 -1
  37. package/dist/{src/domain → domain}/index.js +0 -1
  38. package/dist/domain/ports/auth/index.d.ts +2 -0
  39. package/dist/domain/ports/auth/index.js +18 -0
  40. package/dist/{src/domain/ports/auth/password-hasher.d.ts → domain/ports/auth/password-hasher.port.d.ts} +1 -1
  41. package/dist/{src/domain → domain}/ports/auth/password-policy.port.d.ts +1 -1
  42. package/dist/domain/ports/index.d.ts +4 -0
  43. package/dist/{src/infrastructure/jwt → domain/ports}/index.js +3 -2
  44. package/dist/domain/ports/jwt/index.d.ts +1 -0
  45. package/dist/{src/shared/types → domain/ports/jwt}/index.js +1 -1
  46. package/dist/domain/ports/jwt/payload/index.d.ts +1 -0
  47. package/dist/domain/ports/jwt/payload/index.js +17 -0
  48. package/dist/{src/domain → domain}/ports/repository/credential.repository.d.ts +1 -1
  49. package/dist/{src/domain → domain}/ports/repository/index.d.ts +1 -1
  50. package/dist/{src/domain → domain}/ports/repository/index.js +1 -1
  51. package/dist/{src/domain/ports/repository/user.repository.d.ts → domain/ports/repository/user-repository.port.d.ts} +1 -1
  52. package/dist/domain/ports/token/index.d.ts +2 -0
  53. package/dist/domain/ports/token/index.js +18 -0
  54. package/dist/{src/domain → domain}/ports/token/token-session.port.d.ts +2 -2
  55. package/dist/{src/domain → domain}/ports/token/token.service.port.d.ts +2 -2
  56. package/dist/{src/domain → domain}/props/jwt/generate-access-token.props.d.ts +0 -2
  57. package/dist/{src/domain → domain}/props/jwt/generate-refresh-token.props.d.ts +0 -2
  58. package/dist/{src/domain/props/services → domain/props/jwt}/index.d.ts +1 -0
  59. package/dist/{src/domain/props/services → domain/props/jwt}/index.js +1 -0
  60. package/dist/{src/domain → domain}/services/password-policy.service.d.ts +2 -2
  61. package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-credential.repository.d.ts +2 -2
  62. package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-credential.repository.js +12 -2
  63. package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-user.repository.d.ts +2 -2
  64. package/dist/index.d.ts +5 -1
  65. package/dist/index.js +13 -1
  66. package/dist/infrastructure/index.js +1 -0
  67. package/dist/{src/infrastructure → infrastructure}/security/bcrypt-password-hasher.d.ts +7 -2
  68. package/dist/{src/infrastructure → infrastructure}/security/bcrypt-password-hasher.js +7 -2
  69. package/dist/{src/infrastructure → infrastructure}/services/index.d.ts +0 -1
  70. package/dist/{src/infrastructure → infrastructure}/services/index.js +0 -1
  71. package/dist/infrastructure/services/token-session.service.d.ts +22 -0
  72. package/dist/{src/infrastructure/services/default-token-session.service.js → infrastructure/services/token-session.service.js} +30 -31
  73. package/dist/infrastructure/types/auth-service-container.d.ts +14 -0
  74. package/dist/shared/index.d.ts +1 -0
  75. package/dist/{src/infrastructure/repositories → shared}/index.js +1 -1
  76. package/package.json +5 -8
  77. package/dist/examples/bcrypt-password-hasher.example.d.ts +0 -3
  78. package/dist/examples/bcrypt-password-hasher.example.js +0 -78
  79. package/dist/examples/entity-object.example.d.ts +0 -39
  80. package/dist/examples/entity-object.example.js +0 -411
  81. package/dist/examples/factory-auth-service-example.d.ts +0 -3
  82. package/dist/examples/factory-auth-service-example.js +0 -84
  83. package/dist/examples/index.example.d.ts +0 -12
  84. package/dist/examples/index.example.js +0 -171
  85. package/dist/examples/jwt-algoritm.example.d.ts +0 -47
  86. package/dist/examples/jwt-algoritm.example.js +0 -447
  87. package/dist/examples/jwt-token-generator.example.d.ts +0 -6
  88. package/dist/examples/jwt-token-generator.example.js +0 -49
  89. package/dist/examples/jwt-verifier.example.d.ts +0 -3
  90. package/dist/examples/jwt-verifier.example.js +0 -80
  91. package/dist/examples/password-policy.example.d.ts +0 -7
  92. package/dist/examples/password-policy.example.js +0 -57
  93. package/dist/examples/service-jwt-token.example.d.ts +0 -3
  94. package/dist/examples/service-jwt-token.example.js +0 -154
  95. package/dist/examples/service-token-session.example.d.ts +0 -3
  96. package/dist/examples/service-token-session.example.js +0 -139
  97. package/dist/examples/use-case-login-with-password.example.d.ts +0 -6
  98. package/dist/examples/use-case-login-with-password.example.js +0 -105
  99. package/dist/examples/use-case-logout.example.d.ts +0 -7
  100. package/dist/examples/use-case-logout.example.js +0 -134
  101. package/dist/examples/use-case-refresh-token.example.d.ts +0 -11
  102. package/dist/examples/use-case-refresh-token.example.js +0 -164
  103. package/dist/examples/use-case-register-user.example.d.ts +0 -9
  104. package/dist/examples/use-case-register-user.example.js +0 -110
  105. package/dist/src/application/dtos/index.d.ts +0 -4
  106. package/dist/src/application/dtos/register-user.dto.d.ts +0 -16
  107. package/dist/src/application/factories/auth-service.factory.d.ts +0 -5
  108. package/dist/src/application/factories/auth-service.factory.js +0 -51
  109. package/dist/src/application/use-cases/register-user.use-case.d.ts +0 -10
  110. package/dist/src/domain/errors/auth-domain-error.d.ts +0 -82
  111. package/dist/src/domain/errors/auth-domain-error.js +0 -112
  112. package/dist/src/domain/ports/auth/password-policy-config.port.js +0 -10
  113. package/dist/src/domain/ports/config/auth-config.port.d.ts +0 -19
  114. package/dist/src/domain/ports/config/auth-config.port.js +0 -3
  115. package/dist/src/domain/ports/index.d.ts +0 -9
  116. package/dist/src/domain/ports/index.js +0 -25
  117. package/dist/src/domain/ports/jwt/factory/signature-strategy-factory.port.d.ts +0 -14
  118. package/dist/src/domain/ports/jwt/signature-strategy-factory.port.d.ts +0 -14
  119. package/dist/src/domain/ports/jwt/signature-strategy.d.ts +0 -30
  120. package/dist/src/domain/ports/jwt/signature-strategy.js +0 -4
  121. package/dist/src/domain/ports/jwt/signature-strategy.port.d.ts +0 -31
  122. package/dist/src/domain/ports/jwt/signature-strategy.port.js +0 -4
  123. package/dist/src/domain/ports/jwt/strategy/signature-strategy.port.d.ts +0 -31
  124. package/dist/src/domain/ports/jwt/strategy/signature-strategy.port.js +0 -4
  125. package/dist/src/domain/props/create-payload-props.port.d.ts +0 -0
  126. package/dist/src/domain/props/create-payload-props.port.js +0 -8
  127. package/dist/src/domain/props/jwt/create-payload.props.d.ts +0 -9
  128. package/dist/src/domain/props/jwt/generate-token.props.d.ts +0 -10
  129. package/dist/src/domain/props/jwt/generate-token.props.js +0 -2
  130. package/dist/src/domain/props/jwt/index.d.ts +0 -5
  131. package/dist/src/domain/props/jwt/index.js +0 -21
  132. package/dist/src/domain/props/jwt/jwt-subject.d.ts +0 -7
  133. package/dist/src/domain/props/jwt/jwt-subject.js +0 -2
  134. package/dist/src/domain/props/services/generate-access-token.props.d.ts +0 -8
  135. package/dist/src/domain/props/services/generate-refresh-token.props.d.ts +0 -8
  136. package/dist/src/domain/services/token.service.port.d.ts +0 -9
  137. package/dist/src/index.d.ts +0 -78
  138. package/dist/src/index.js +0 -94
  139. package/dist/src/infrastructure/index.d.ts +0 -5
  140. package/dist/src/infrastructure/index.js +0 -21
  141. package/dist/src/infrastructure/jwt/factory/index.d.ts +0 -1
  142. package/dist/src/infrastructure/jwt/factory/signature-strategy.factory.d.ts +0 -21
  143. package/dist/src/infrastructure/jwt/factory/signature-strategy.factory.js +0 -61
  144. package/dist/src/infrastructure/jwt/index.d.ts +0 -3
  145. package/dist/src/infrastructure/jwt/signature-strategy.factory.d.ts +0 -21
  146. package/dist/src/infrastructure/jwt/signature-strategy.factory.js +0 -61
  147. package/dist/src/infrastructure/jwt/strategies/ecdsa-signature-strategy.d.ts +0 -47
  148. package/dist/src/infrastructure/jwt/strategies/ecdsa-signature-strategy.js +0 -124
  149. package/dist/src/infrastructure/jwt/strategies/ecdsa-signature.strategy.d.ts +0 -47
  150. package/dist/src/infrastructure/jwt/strategies/ecdsa-signature.strategy.js +0 -124
  151. package/dist/src/infrastructure/jwt/strategies/hmac-signature-strategy.d.ts +0 -54
  152. package/dist/src/infrastructure/jwt/strategies/hmac-signature-strategy.js +0 -129
  153. package/dist/src/infrastructure/jwt/strategies/hmac-signature.strategy.d.ts +0 -54
  154. package/dist/src/infrastructure/jwt/strategies/hmac-signature.strategy.js +0 -129
  155. package/dist/src/infrastructure/jwt/strategies/index.d.ts +0 -3
  156. package/dist/src/infrastructure/jwt/strategies/index.js +0 -19
  157. package/dist/src/infrastructure/jwt/strategies/rsa-signature-strategy.d.ts +0 -47
  158. package/dist/src/infrastructure/jwt/strategies/rsa-signature-strategy.js +0 -124
  159. package/dist/src/infrastructure/jwt/strategies/rsa-signature.strategy.d.ts +0 -47
  160. package/dist/src/infrastructure/jwt/strategies/rsa-signature.strategy.js +0 -124
  161. package/dist/src/infrastructure/jwt/token/actions/jwt-token-generator.d.ts +0 -57
  162. package/dist/src/infrastructure/jwt/token/actions/jwt-token-generator.js +0 -123
  163. package/dist/src/infrastructure/jwt/token/actions/jwt-token-verifier.d.ts +0 -59
  164. package/dist/src/infrastructure/jwt/token/actions/jwt-token-verifier.js +0 -100
  165. package/dist/src/infrastructure/jwt/token/index.d.ts +0 -5
  166. package/dist/src/infrastructure/jwt/token/index.js +0 -21
  167. package/dist/src/infrastructure/jwt/token/jwt-signer.d.ts +0 -33
  168. package/dist/src/infrastructure/jwt/token/jwt-signer.js +0 -46
  169. package/dist/src/infrastructure/jwt/token/jwt-token-parser.d.ts +0 -29
  170. package/dist/src/infrastructure/jwt/token/jwt-token-parser.js +0 -57
  171. package/dist/src/infrastructure/jwt/token/jwt-token-validator.d.ts +0 -32
  172. package/dist/src/infrastructure/jwt/token/jwt-token-validator.js +0 -77
  173. package/dist/src/infrastructure/jwt/token/tools/jwt-signer.d.ts +0 -33
  174. package/dist/src/infrastructure/jwt/token/tools/jwt-signer.js +0 -46
  175. package/dist/src/infrastructure/jwt/token/tools/jwt-token-parser.d.ts +0 -30
  176. package/dist/src/infrastructure/jwt/token/tools/jwt-token-parser.js +0 -57
  177. package/dist/src/infrastructure/jwt/token/tools/jwt-token-validator.d.ts +0 -32
  178. package/dist/src/infrastructure/jwt/token/tools/jwt-token-validator.js +0 -77
  179. package/dist/src/infrastructure/repositories/index.d.ts +0 -1
  180. package/dist/src/infrastructure/repositories/test/in-memory-token-session.repository.d.ts +0 -67
  181. package/dist/src/infrastructure/repositories/test/in-memory-token-session.repository.js +0 -128
  182. package/dist/src/infrastructure/services/default-token-session.service.d.ts +0 -18
  183. package/dist/src/infrastructure/services/jwt-token.service.d.ts +0 -15
  184. package/dist/src/infrastructure/services/jwt-token.service.js +0 -44
  185. package/dist/src/infrastructure/services/simple-jwt-token.service.d.ts +0 -15
  186. package/dist/src/infrastructure/services/simple-jwt-token.service.js +0 -46
  187. package/dist/src/infrastructure/services/token-session.service.d.ts +0 -24
  188. package/dist/src/infrastructure/services/token-session.service.js +0 -131
  189. package/dist/src/infrastructure/types/auth-service-container.d.ts +0 -14
  190. package/dist/src/shared/constants/index.d.ts +0 -1
  191. package/dist/src/shared/constants/jwt-algorithms.d.ts +0 -17
  192. package/dist/src/shared/constants/jwt-algorithms.js +0 -23
  193. package/dist/src/shared/encoders/base64-url-encoder.d.ts +0 -29
  194. package/dist/src/shared/encoders/base64-url-encoder.js +0 -45
  195. package/dist/src/shared/encoders/index.d.ts +0 -1
  196. package/dist/src/shared/encoders/index.js +0 -17
  197. package/dist/src/shared/index.d.ts +0 -4
  198. package/dist/src/shared/index.js +0 -20
  199. package/dist/src/shared/types/index.d.ts +0 -1
  200. package/dist/src/shared/types/jwt.d.ts +0 -25
  201. package/dist/src/shared/types/jwt.js +0 -2
  202. package/dist/src/shared/types/jwt.types.d.ts +0 -39
  203. package/dist/src/shared/types/jwt.types.js +0 -2
  204. package/dist/tests/application/factory/auth-service-factory.spec.d.ts +0 -1
  205. package/dist/tests/application/factory/auth-service-factory.spec.js +0 -97
  206. package/dist/tests/application/use-cases/login-with-password.integration.spec.d.ts +0 -1
  207. package/dist/tests/application/use-cases/login-with-password.integration.spec.js +0 -140
  208. package/dist/tests/application/use-cases/logout-use-case.spec.d.ts +0 -1
  209. package/dist/tests/application/use-cases/logout-use-case.spec.js +0 -40
  210. package/dist/tests/application/use-cases/refresh-token-use-case.spec.d.ts +0 -1
  211. package/dist/tests/application/use-cases/refresh-token-use-case.spec.js +0 -116
  212. package/dist/tests/application/use-cases/register-user.usecase.spec.d.ts +0 -1
  213. package/dist/tests/application/use-cases/register-user.usecase.spec.js +0 -151
  214. package/dist/tests/domain/entities/credential.spec.d.ts +0 -1
  215. package/dist/tests/domain/entities/credential.spec.js +0 -93
  216. package/dist/tests/domain/entities/user.spec.d.ts +0 -1
  217. package/dist/tests/domain/entities/user.spec.js +0 -93
  218. package/dist/tests/domain/object-values/email.spec.d.ts +0 -1
  219. package/dist/tests/domain/object-values/email.spec.js +0 -77
  220. package/dist/tests/domain/object-values/hashed-password.spec.d.ts +0 -1
  221. package/dist/tests/domain/object-values/hashed-password.spec.js +0 -54
  222. package/dist/tests/domain/object-values/id.spec.d.ts +0 -1
  223. package/dist/tests/domain/object-values/id.spec.js +0 -48
  224. package/dist/tests/domain/object-values/permission.spec.d.ts +0 -1
  225. package/dist/tests/domain/object-values/permission.spec.js +0 -75
  226. package/dist/tests/domain/object-values/role.spec.d.ts +0 -1
  227. package/dist/tests/domain/object-values/role.spec.js +0 -139
  228. package/dist/tests/domain/services/default-password-policy.spec.d.ts +0 -1
  229. package/dist/tests/domain/services/default-password-policy.spec.js +0 -69
  230. package/dist/tests/doman/entities/credential.spec.d.ts +0 -1
  231. package/dist/tests/doman/entities/credential.spec.js +0 -93
  232. package/dist/tests/doman/entities/user.spec.d.ts +0 -1
  233. package/dist/tests/doman/entities/user.spec.js +0 -93
  234. package/dist/tests/doman/object-values/email.spec.d.ts +0 -1
  235. package/dist/tests/doman/object-values/email.spec.js +0 -77
  236. package/dist/tests/doman/object-values/hashed-password.spec.d.ts +0 -1
  237. package/dist/tests/doman/object-values/hashed-password.spec.js +0 -54
  238. package/dist/tests/doman/object-values/id.spec.d.ts +0 -1
  239. package/dist/tests/doman/object-values/id.spec.js +0 -48
  240. package/dist/tests/doman/object-values/permission.spec.d.ts +0 -1
  241. package/dist/tests/doman/object-values/permission.spec.js +0 -75
  242. package/dist/tests/doman/object-values/role.spec.d.ts +0 -1
  243. package/dist/tests/doman/object-values/role.spec.js +0 -139
  244. package/dist/tests/helpers/make-jwt-subject.d.ts +0 -7
  245. package/dist/tests/helpers/make-jwt-subject.js +0 -16
  246. package/dist/tests/helpers/make-jwt-user.d.ts +0 -7
  247. package/dist/tests/helpers/make-jwt-user.js +0 -16
  248. package/dist/tests/helpers/make-user.d.ts +0 -2
  249. package/dist/tests/helpers/make-user.js +0 -15
  250. package/dist/tests/infrastructure/jwt/signature-strategy-factory.spec.d.ts +0 -1
  251. package/dist/tests/infrastructure/jwt/signature-strategy-factory.spec.js +0 -127
  252. package/dist/tests/infrastructure/jwt/strategies/ecdsa-signature-strategy.spec.d.ts +0 -1
  253. package/dist/tests/infrastructure/jwt/strategies/ecdsa-signature-strategy.spec.js +0 -157
  254. package/dist/tests/infrastructure/jwt/strategies/hmac-signature-strategy.spec.d.ts +0 -1
  255. package/dist/tests/infrastructure/jwt/strategies/hmac-signature-strategy.spec.js +0 -150
  256. package/dist/tests/infrastructure/jwt/strategies/rsa-signature-strategy..spec.d.ts +0 -1
  257. package/dist/tests/infrastructure/jwt/strategies/rsa-signature-strategy..spec.js +0 -156
  258. package/dist/tests/infrastructure/jwt/token/actions/jwt-token-generator.spec.d.ts +0 -1
  259. package/dist/tests/infrastructure/jwt/token/actions/jwt-token-generator.spec.js +0 -179
  260. package/dist/tests/infrastructure/jwt/token/actions/jwt-token-verifier.spec.d.ts +0 -1
  261. package/dist/tests/infrastructure/jwt/token/actions/jwt-token-verifier.spec.js +0 -142
  262. package/dist/tests/infrastructure/jwt/token/jwt-signer.spec.d.ts +0 -1
  263. package/dist/tests/infrastructure/jwt/token/jwt-signer.spec.js +0 -125
  264. package/dist/tests/infrastructure/jwt/token/jwt-token-parser.spec.d.ts +0 -1
  265. package/dist/tests/infrastructure/jwt/token/jwt-token-parser.spec.js +0 -116
  266. package/dist/tests/infrastructure/jwt/token/jwt-token-validator.spec.d.ts +0 -1
  267. package/dist/tests/infrastructure/jwt/token/jwt-token-validator.spec.js +0 -88
  268. package/dist/tests/infrastructure/jwt/token/tools/jwt-signer.spec.d.ts +0 -1
  269. package/dist/tests/infrastructure/jwt/token/tools/jwt-signer.spec.js +0 -126
  270. package/dist/tests/infrastructure/jwt/token/tools/jwt-token-parser.spec.d.ts +0 -1
  271. package/dist/tests/infrastructure/jwt/token/tools/jwt-token-parser.spec.js +0 -116
  272. package/dist/tests/infrastructure/jwt/token/tools/jwt-token-validator.spec.d.ts +0 -1
  273. package/dist/tests/infrastructure/jwt/token/tools/jwt-token-validator.spec.js +0 -88
  274. package/dist/tests/infrastructure/security/security/bcrypt-password-hasher.spec.d.ts +0 -1
  275. package/dist/tests/infrastructure/security/security/bcrypt-password-hasher.spec.js +0 -37
  276. package/dist/tests/infrastructure/services/jwt-token-service.spec.d.ts +0 -1
  277. package/dist/tests/infrastructure/services/jwt-token-service.spec.js +0 -145
  278. package/dist/tests/infrastructure/services/token-session.service.spec.d.ts +0 -1
  279. package/dist/tests/infrastructure/services/token-session.service.spec.js +0 -269
  280. package/dist/tests/shared/constants/jwt-algorithms.spec.d.ts +0 -1
  281. package/dist/tests/shared/constants/jwt-algorithms.spec.js +0 -27
  282. package/dist/tests/shared/encoders/base64-url-encoder.spec.d.ts +0 -1
  283. package/dist/tests/shared/encoders/base64-url-encoder.spec.js +0 -70
  284. package/dist/tests/shared/utils/time-parser.spec.d.ts +0 -1
  285. package/dist/tests/shared/utils/time-parser.spec.js +0 -80
  286. package/dist/utils/index.d.ts +0 -1
  287. package/dist/utils/index.js +0 -17
  288. package/dist/utils/time-parser.d.ts +0 -28
  289. package/dist/utils/time-parser.js +0 -76
  290. /package/dist/{src/application/dtos/login.dto.js → application/dtos/request/login.request.js} +0 -0
  291. /package/dist/{src/application/dtos/logout.dto.js → application/dtos/request/logout.request.js} +0 -0
  292. /package/dist/{src/application/dtos/refresh-token.dto.js → application/dtos/request/refresh-token.request.js} +0 -0
  293. /package/dist/{src/application/dtos/register-user.dto.js → application/dtos/request/register-user.request.js} +0 -0
  294. /package/dist/{src/domain/ports/auth/password-hasher.js → application/dtos/response/login.response.js} +0 -0
  295. /package/dist/{src/domain/ports/auth/password-policy.port.js → application/dtos/response/logout.response.js} +0 -0
  296. /package/dist/{src/domain/ports/jwt/factory/signature-strategy-factory.port.js → application/dtos/response/refresh-token.response.js} +0 -0
  297. /package/dist/{src/domain/ports/jwt/payload/jwt-payload.port.js → application/dtos/response/register-user.response.js} +0 -0
  298. /package/dist/{src/domain/ports/jwt/signature-strategy-factory.port.js → application/dtos/type/user-role.type.js} +0 -0
  299. /package/dist/{src/application → application}/factories/index.d.ts +0 -0
  300. /package/dist/{src/application → application}/factories/index.js +0 -0
  301. /package/dist/{src/domain/ports/repository/credential.repository.js → application/types/auth-service-factory-options.type.js} +0 -0
  302. /package/dist/{src/application → application}/use-cases/index.d.ts +0 -0
  303. /package/dist/{src/application → application}/use-cases/index.js +0 -0
  304. /package/dist/{src/domain → domain}/entities/credential.entity.d.ts +0 -0
  305. /package/dist/{src/domain → domain}/entities/credential.entity.js +0 -0
  306. /package/dist/{src/domain → domain}/entities/index.d.ts +0 -0
  307. /package/dist/{src/domain → domain}/entities/index.js +0 -0
  308. /package/dist/{src/domain → domain}/entities/user.entity.d.ts +0 -0
  309. /package/dist/{src/domain → domain}/entities/user.entity.js +0 -0
  310. /package/dist/{src/domain → domain}/errors/identity.errors.d.ts +0 -0
  311. /package/dist/{src/domain → domain}/errors/identity.errors.js +0 -0
  312. /package/dist/{src/domain → domain}/errors/index.d.ts +0 -0
  313. /package/dist/{src/domain → domain}/errors/index.js +0 -0
  314. /package/dist/{src/domain → domain}/object-values/email.d.ts +0 -0
  315. /package/dist/{src/domain → domain}/object-values/email.js +0 -0
  316. /package/dist/{src/domain → domain}/object-values/hashed-password.d.ts +0 -0
  317. /package/dist/{src/domain → domain}/object-values/hashed-password.js +0 -0
  318. /package/dist/{src/domain → domain}/object-values/id.d.ts +0 -0
  319. /package/dist/{src/domain → domain}/object-values/id.js +0 -0
  320. /package/dist/{src/domain → domain}/object-values/index.d.ts +0 -0
  321. /package/dist/{src/domain → domain}/object-values/index.js +0 -0
  322. /package/dist/{src/domain → domain}/object-values/permission.d.ts +0 -0
  323. /package/dist/{src/domain → domain}/object-values/permission.js +0 -0
  324. /package/dist/{src/domain → domain}/object-values/role.d.ts +0 -0
  325. /package/dist/{src/domain → domain}/object-values/role.js +0 -0
  326. /package/dist/{src/domain/ports/repository/user.repository.js → domain/ports/auth/password-hasher.port.js} +0 -0
  327. /package/dist/{src/domain/ports/token/token-session.port.js → domain/ports/auth/password-policy.port.js} +0 -0
  328. /package/dist/{src/domain → domain}/ports/jwt/payload/jwt-payload.port.d.ts +0 -0
  329. /package/dist/{src/domain/ports/token/token.service.port.js → domain/ports/jwt/payload/jwt-payload.port.js} +0 -0
  330. /package/dist/{src/domain/props/entities/credential.props.js → domain/ports/repository/credential.repository.js} +0 -0
  331. /package/dist/{src/domain/props/entities/user.props.js → domain/ports/repository/user-repository.port.js} +0 -0
  332. /package/dist/{src/domain/props/jwt/create-payload.props.js → domain/ports/token/token-session.port.js} +0 -0
  333. /package/dist/{src/domain/services → domain/ports/token}/token.service.port.js +0 -0
  334. /package/dist/{src/domain → domain}/props/entities/credential.props.d.ts +0 -0
  335. /package/dist/{src/domain/props/jwt/generate-access-token.props.js → domain/props/entities/credential.props.js} +0 -0
  336. /package/dist/{src/domain → domain}/props/entities/index.d.ts +0 -0
  337. /package/dist/{src/domain → domain}/props/entities/index.js +0 -0
  338. /package/dist/{src/domain → domain}/props/entities/user.props.d.ts +0 -0
  339. /package/dist/{src/domain/props/jwt/generate-refresh-token.props.js → domain/props/entities/user.props.js} +0 -0
  340. /package/dist/{src/domain → domain}/props/index.d.ts +0 -0
  341. /package/dist/{src/domain → domain}/props/index.js +0 -0
  342. /package/dist/{src/domain/props/services → domain/props/jwt}/generate-access-token.props.js +0 -0
  343. /package/dist/{src/domain/props/services → domain/props/jwt}/generate-refresh-token.props.js +0 -0
  344. /package/dist/{src/domain → domain}/props/jwt/jwt-user.d.ts +0 -0
  345. /package/dist/{src/domain → domain}/props/jwt/jwt-user.js +0 -0
  346. /package/dist/{src/domain → domain}/services/index.d.ts +0 -0
  347. /package/dist/{src/domain → domain}/services/index.js +0 -0
  348. /package/dist/{src/domain → domain}/services/password-policy.service.js +0 -0
  349. /package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-user.repository.js +0 -0
  350. /package/dist/{src/infrastructure/repositories/test → in-memory}/index.d.ts +0 -0
  351. /package/dist/{src/infrastructure/repositories/test → in-memory}/index.js +0 -0
  352. /package/dist/{src/domain/ports/auth/password-policy-config.port.d.ts → infrastructure/index.d.ts} +0 -0
  353. /package/dist/{src/infrastructure → infrastructure}/security/index.d.ts +0 -0
  354. /package/dist/{src/infrastructure → infrastructure}/security/index.js +0 -0
  355. /package/dist/{src/infrastructure → infrastructure}/types/auth-service-container.js +0 -0
  356. /package/dist/{src/infrastructure → infrastructure}/types/index.d.ts +0 -0
  357. /package/dist/{src/infrastructure → infrastructure}/types/index.js +0 -0
  358. /package/dist/{src/shared → shared}/utils/index.d.ts +0 -0
  359. /package/dist/{src/shared → shared}/utils/index.js +0 -0
  360. /package/dist/{src/shared → shared}/utils/time-parser.d.ts +0 -0
  361. /package/dist/{src/shared → shared}/utils/time-parser.js +0 -0
@@ -1,116 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const domain_1 = require("src/domain");
4
- const token_1 = require("src/infrastructure/jwt/token");
5
- // ───────────────────────────────────────────────────────────────────────────────
6
- // Helpers: Base64URL encode/decode (solo para el fake encoder y payloads)
7
- // ───────────────────────────────────────────────────────────────────────────────
8
- const b64urlEncode = (utf8) => {
9
- const b64 = Buffer.from(utf8, "utf8").toString("base64");
10
- return b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
11
- };
12
- const b64urlDecode = (b64url) => {
13
- let base64 = b64url.replace(/-/g, "+").replace(/_/g, "/");
14
- const pad = base64.length % 4;
15
- if (pad)
16
- base64 += "=".repeat(4 - pad);
17
- return Buffer.from(base64, "base64").toString("utf8");
18
- };
19
- // Fake encoder mínimo que respeta la firma esperada
20
- class FakeBase64UrlEncoder {
21
- decode(input) {
22
- return b64urlDecode(input);
23
- }
24
- }
25
- describe("JwtTokenParser", () => {
26
- let parser;
27
- beforeEach(() => {
28
- parser = new token_1.JwtTokenParser(new FakeBase64UrlEncoder());
29
- });
30
- // ────────────────────────────────────────────────────────────────────────────
31
- // extractParts
32
- // ────────────────────────────────────────────────────────────────────────────
33
- describe("extractParts", () => {
34
- test("devuelve [header, payload, signature] con 3 segmentos", () => {
35
- const token = "aaa.bbb.ccc";
36
- expect(parser.extractParts(token)).toEqual(["aaa", "bbb", "ccc"]);
37
- });
38
- test("con puntos de más, retorna los 3 primeros segmentos", () => {
39
- const token = "a.b.c.d.e";
40
- expect(parser.extractParts(token)).toEqual(["a", "b", "c"]);
41
- });
42
- test("con menos de 3 segmentos, rellena con undefined", () => {
43
- const token = "a.b";
44
- const [h, p, s] = parser.extractParts(token);
45
- expect(h).toBe("a");
46
- expect(p).toBe("b");
47
- expect(s).toBeUndefined(); // comportamiento actual del método
48
- });
49
- });
50
- // ────────────────────────────────────────────────────────────────────────────
51
- // parsePayload
52
- // ────────────────────────────────────────────────────────────────────────────
53
- describe("parsePayload", () => {
54
- test("decodifica y parsea el payload a objeto (sin verificar firma/tiempos)", () => {
55
- const payloadObj = { sub: "123", exp: 1700000000 };
56
- const header = b64urlEncode(JSON.stringify({ alg: "HS256", typ: "JWT" }));
57
- const payload = b64urlEncode(JSON.stringify(payloadObj));
58
- const signature = "signaturePartNoCheck";
59
- const token = `${header}.${payload}.${signature}`;
60
- const result = parser.parsePayload(token);
61
- expect(result).toEqual(payloadObj);
62
- });
63
- test("si el payload no es JSON válido, lanza (propaga error de JSON.parse)", () => {
64
- // payloadPart inválido (decodifica a texto no-JSON)
65
- const header = "aaa";
66
- const payload = b64urlEncode("not-a-json");
67
- const signature = "ccc";
68
- const token = `${header}.${payload}.${signature}`;
69
- expect(() => parser.parsePayload(token)).toThrow(SyntaxError);
70
- });
71
- });
72
- // ────────────────────────────────────────────────────────────────────────────
73
- // parseAndValidatePayload
74
- // ────────────────────────────────────────────────────────────────────────────
75
- describe("parseAndValidatePayload", () => {
76
- test("retorna objeto para payload válido", () => {
77
- const payloadObj = { userId: "u1", roles: ["admin"] };
78
- const payloadPart = b64urlEncode(JSON.stringify(payloadObj));
79
- const result = parser.parseAndValidatePayload(payloadPart);
80
- expect(result).toEqual(payloadObj);
81
- });
82
- test("si el encoding/JSON es inválido, lanza InvalidTokenFormatError (mensaje: Invalid token payload encoding)", () => {
83
- // Usamos un fragmento que al decodificar no produce JSON válido
84
- const payloadPart = b64urlEncode("not-json-here");
85
- expect(() => parser.parseAndValidatePayload(payloadPart)).toThrow(domain_1.InvalidTokenFormatError);
86
- expect(() => parser.parseAndValidatePayload(payloadPart)).toThrow(/invalid token payload encoding/i);
87
- });
88
- test('si el payload es string ("hola"), lanza InvalidTokenFormatError (must be an object)', () => {
89
- const payloadPart = b64urlEncode(JSON.stringify("hola"));
90
- expect(() => parser.parseAndValidatePayload(payloadPart)).toThrow(/payload must be an object/i);
91
- });
92
- test("si el payload es número (123), lanza InvalidTokenFormatError", () => {
93
- const payloadPart = b64urlEncode(JSON.stringify(123));
94
- expect(() => parser.parseAndValidatePayload(payloadPart)).toThrow(/payload must be an object/i);
95
- });
96
- test("si el payload es array ([]), lanza InvalidTokenFormatError", () => {
97
- const payloadPart = b64urlEncode(JSON.stringify([]));
98
- expect(() => parser.parseAndValidatePayload(payloadPart)).toThrow(/payload must be an object/i);
99
- });
100
- test("si el payload es null, lanza InvalidTokenFormatError", () => {
101
- const payloadPart = b64urlEncode("null");
102
- expect(() => parser.parseAndValidatePayload(payloadPart)).toThrow(/payload must be an object/i);
103
- });
104
- test("llama al encoder.decode con el payloadPart recibido", () => {
105
- const spyDecode = jest.spyOn(FakeBase64UrlEncoder.prototype, "decode");
106
- const obj = { a: 1 };
107
- const payloadPart = b64urlEncode(JSON.stringify(obj));
108
- const localParser = new token_1.JwtTokenParser(new FakeBase64UrlEncoder());
109
- const result = localParser.parseAndValidatePayload(payloadPart);
110
- expect(result).toEqual(obj);
111
- expect(spyDecode).toHaveBeenCalledTimes(1);
112
- expect(spyDecode).toHaveBeenCalledWith(payloadPart);
113
- spyDecode.mockRestore();
114
- });
115
- });
116
- });
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // tests/infrastructure/jwt/token/jwt-token-validator.spec.ts
4
- const errors_1 = require("src/domain/errors");
5
- const token_1 = require("src/infrastructure/jwt/token");
6
- describe("JwtTokenValidator.validateTokenInput", () => {
7
- let validator;
8
- beforeEach(() => {
9
- validator = new token_1.JwtTokenValidator();
10
- });
11
- const expectInvalid = (token, message) => {
12
- const act = () => validator.validateTokenInput(token);
13
- expect(act).toThrow(errors_1.InvalidTokenFormatError);
14
- if (message)
15
- expect(act).toThrow(message);
16
- };
17
- // Casos válidos
18
- describe("casos válidos", () => {
19
- test("acepta un JWT bien formado (Base64URL, 3 segmentos, 2 puntos)", () => {
20
- const validJwt = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk";
21
- expect(() => validator.validateTokenInput(validJwt)).not.toThrow();
22
- });
23
- test("acepta tokens largos con guiones y guiones bajos válidos", () => {
24
- const validJwt = "abc_DEF-123.ghi_JKL-456.mno_PQR-789xyz";
25
- expect(() => validator.validateTokenInput(validJwt)).not.toThrow();
26
- });
27
- });
28
- // Casos inválidos básicos
29
- describe("validateBasicFormat", () => {
30
- test("lanza si token es null", () => {
31
- expectInvalid(null, /cannot be null or undefined/i);
32
- });
33
- test("lanza si token es undefined", () => {
34
- expectInvalid(undefined, /cannot be null or undefined/i);
35
- });
36
- test("lanza si token no es string (number)", () => {
37
- expectInvalid(123, /Token must be a string/i);
38
- });
39
- test("lanza si token no es string (objeto)", () => {
40
- expectInvalid({}, /Token must be a string/i);
41
- });
42
- test("lanza si cadena está vacía", () => {
43
- expectInvalid("", /cannot be empty/i);
44
- });
45
- test("lanza si solo contiene espacios", () => {
46
- expectInvalid(" ", /only whitespace/i);
47
- });
48
- test("lanza si tiene espacios al inicio o final", () => {
49
- expectInvalid(" abc.def.ghi ", /leading or trailing whitespace/i);
50
- });
51
- });
52
- // Casos inválidos de estructura JWT
53
- describe("validateJwtStructure", () => {
54
- test("lanza si longitud < 10", () => {
55
- expectInvalid("a.b.c", /too short/i);
56
- });
57
- test("lanza si no tiene puntos", () => {
58
- expectInvalid("abcdefghijk", /expected 2 dots, found 0/i);
59
- });
60
- test("lanza si tiene solo 1 punto", () => {
61
- expectInvalid("abcdefghij.klmnop", /expected 2 dots, found 1/i);
62
- });
63
- test("lanza si tiene más de 2 puntos", () => {
64
- expectInvalid("abcd.efgh.ijkl.mnop", /expected 2 dots, found 3/i);
65
- });
66
- });
67
- // Casos inválidos de caracteres Base64URL
68
- describe("validateCharacters (Base64URL)", () => {
69
- test("lanza si contiene '+'", () => {
70
- expectInvalid("abcde+123.fghi_JKL.mnop-QR", /invalid characters/i);
71
- });
72
- test("lanza si contiene '/'", () => {
73
- expectInvalid("abcde/123.fghi_JKL.mnop-QR", /invalid characters/i);
74
- });
75
- test("lanza si contiene '=' (padding)", () => {
76
- expectInvalid("abcde=123.fghi_JKL.mnop-QR", /invalid characters/i);
77
- });
78
- test("lanza si algún segmento está vacío (..)", () => {
79
- expectInvalid("abcde..klmnopqr", /invalid characters/i);
80
- });
81
- test("lanza si hay espacios internos", () => {
82
- expectInvalid("abcde .fghi_JKL.mnop-QR", /invalid characters/i);
83
- });
84
- test("lanza si hay caracteres fuera del alfabeto Base64URL", () => {
85
- expectInvalid("abcde%.fghi_JKL.mnop-QR", /invalid characters/i);
86
- });
87
- });
88
- });
@@ -1,37 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const bcryptjs_1 = __importDefault(require("bcryptjs"));
7
- const infrastructure_1 = require("src/infrastructure");
8
- jest.mock("bcryptjs");
9
- describe("BcryptPasswordHasher", () => {
10
- let hasher;
11
- beforeEach(() => {
12
- hasher = new infrastructure_1.BcryptPasswordHasher();
13
- jest.clearAllMocks();
14
- });
15
- describe("hash", () => {
16
- it("debería generar un hash usando bcrypt con 10 saltRounds", async () => {
17
- const mockHash = "$2a$10$abcdefghijklmnopqrstuv1234567890abcdefghi";
18
- bcryptjs_1.default.hash.mockResolvedValue(mockHash);
19
- const result = await hasher.hash("password123");
20
- expect(bcryptjs_1.default.hash).toHaveBeenCalledWith("password123", 10);
21
- expect(result).toBe(mockHash);
22
- });
23
- });
24
- describe("compare", () => {
25
- it("debería retornar true cuando las contraseñas coinciden", async () => {
26
- bcryptjs_1.default.compare.mockResolvedValue(true);
27
- const result = await hasher.compare("password123", "hashed");
28
- expect(bcryptjs_1.default.compare).toHaveBeenCalledWith("password123", "hashed");
29
- expect(result).toBe(true);
30
- });
31
- it("debería retornar false cuando las contraseñas no coinciden", async () => {
32
- bcryptjs_1.default.compare.mockResolvedValue(false);
33
- const result = await hasher.compare("wrongPassword", "hashed");
34
- expect(result).toBe(false);
35
- });
36
- });
37
- });
@@ -1,145 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const jwt_token_service_1 = require("../../../src/infrastructure/services/jwt-token.service");
4
- describe("JwtTokenService", () => {
5
- let config;
6
- let jwtGenerator;
7
- let jwtVerifier;
8
- let jwtValidator;
9
- let service;
10
- beforeEach(() => {
11
- // ⚠️ Rellena/ajusta según tu definición real de IAuthConfig["info"]
12
- config = {
13
- accessTokenSecret: "access-secret",
14
- refreshTokenSecret: "refresh-secret",
15
- accessTokenExpirationMs: 15 * 60 * 1000,
16
- refreshTokenExpirationMs: 7 * 24 * 60 * 60 * 1000,
17
- issuer: "test-issuer",
18
- audience: "test-audience",
19
- appName: "test-app",
20
- };
21
- jwtGenerator = {
22
- generateAccessToken: jest.fn(),
23
- generateRefreshToken: jest.fn(),
24
- };
25
- jwtVerifier = {
26
- verifyAccessToken: jest.fn(),
27
- verifyRefreshToken: jest.fn(),
28
- getTokenExpiration: jest.fn(),
29
- };
30
- jwtValidator = {
31
- validateTokenInput: jest.fn(),
32
- };
33
- service = new jwt_token_service_1.JwtTokenService(config, jwtGenerator, jwtVerifier, jwtValidator);
34
- });
35
- describe("generateAccessToken", () => {
36
- it("debería delegar en JwtTokenGenerator.generateAccessToken y retornar el token", async () => {
37
- const props = {
38
- userId: "user-123",
39
- };
40
- const expectedToken = "access.token.value";
41
- jwtGenerator.generateAccessToken.mockResolvedValue(expectedToken);
42
- const result = await service.generateAccessToken(props);
43
- expect(jwtGenerator.generateAccessToken).toHaveBeenCalledTimes(1);
44
- expect(jwtGenerator.generateAccessToken).toHaveBeenCalledWith(props);
45
- expect(result).toBe(expectedToken);
46
- });
47
- });
48
- describe("generateRefreshToken", () => {
49
- it("debería delegar en JwtTokenGenerator.generateRefreshToken y retornar el token", async () => {
50
- const props = {
51
- userId: "user-123",
52
- };
53
- const expectedToken = "refresh.token.value";
54
- jwtGenerator.generateRefreshToken.mockResolvedValue(expectedToken);
55
- const result = await service.generateRefreshToken(props);
56
- expect(jwtGenerator.generateRefreshToken).toHaveBeenCalledTimes(1);
57
- expect(jwtGenerator.generateRefreshToken).toHaveBeenCalledWith(props);
58
- expect(result).toBe(expectedToken);
59
- });
60
- });
61
- describe("verifyAccessToken", () => {
62
- it("debería validar el token y delegar en JwtTokenVerifier.verifyAccessToken", async () => {
63
- const token = "access.token.value";
64
- const payload = {
65
- sub: "user-123",
66
- roles: [
67
- {
68
- role: "user",
69
- },
70
- ],
71
- customClaims: {},
72
- jti: "unique-jwt-id",
73
- iss: "test-issuer",
74
- aud: "test-audience",
75
- iat: Date.now() / 1000,
76
- exp: (Date.now() + 1000) / 1000,
77
- };
78
- jwtVerifier.verifyAccessToken.mockResolvedValue(payload);
79
- const result = await service.verifyAccessToken(token);
80
- // Primero se valida la entrada
81
- expect(jwtValidator.validateTokenInput).toHaveBeenCalledTimes(1);
82
- expect(jwtValidator.validateTokenInput).toHaveBeenCalledWith(token);
83
- // Luego se delega al verificador con el token y la config
84
- expect(jwtVerifier.verifyAccessToken).toHaveBeenCalledTimes(1);
85
- expect(jwtVerifier.verifyAccessToken).toHaveBeenCalledWith(token, config);
86
- expect(result).toBe(payload);
87
- });
88
- it("debería propagar el error si validateTokenInput lanza una excepción", async () => {
89
- const token = "invalid.token";
90
- jwtValidator.validateTokenInput.mockImplementation(() => {
91
- throw new Error("Invalid token format");
92
- });
93
- await expect(service.verifyAccessToken(token)).rejects.toThrow("Invalid token format");
94
- // Si falla la validación, no debería llamar al verificador
95
- expect(jwtVerifier.verifyAccessToken).not.toHaveBeenCalled();
96
- });
97
- });
98
- describe("verifyRefreshToken", () => {
99
- it("debería validar el token y delegar en JwtTokenVerifier.verifyRefreshToken", async () => {
100
- const token = "refresh.token.value";
101
- const payload = {
102
- sub: "user-123",
103
- roles: [
104
- {
105
- role: "user",
106
- },
107
- ],
108
- customClaims: {},
109
- jti: "unique-jwt-id",
110
- iss: "test-issuer",
111
- aud: "test-audience",
112
- iat: Date.now() / 1000,
113
- exp: (Date.now() + 1000) / 1000,
114
- };
115
- jwtVerifier.verifyRefreshToken.mockResolvedValue(payload);
116
- const result = await service.verifyRefreshToken(token);
117
- expect(jwtValidator.validateTokenInput).toHaveBeenCalledTimes(1);
118
- expect(jwtValidator.validateTokenInput).toHaveBeenCalledWith(token);
119
- expect(jwtVerifier.verifyRefreshToken).toHaveBeenCalledTimes(1);
120
- expect(jwtVerifier.verifyRefreshToken).toHaveBeenCalledWith(token, config);
121
- expect(result).toBe(payload);
122
- });
123
- });
124
- describe("getTokenExpiration", () => {
125
- it("debería validar el token y delegar en JwtTokenVerifier.getTokenExpiration", async () => {
126
- const token = "any.token.value";
127
- const expectedDate = new Date(Date.now() + 10000);
128
- jwtVerifier.getTokenExpiration.mockResolvedValue(expectedDate);
129
- const result = await service.getTokenExpiration(token);
130
- expect(jwtValidator.validateTokenInput).toHaveBeenCalledTimes(1);
131
- expect(jwtValidator.validateTokenInput).toHaveBeenCalledWith(token);
132
- expect(jwtVerifier.getTokenExpiration).toHaveBeenCalledTimes(1);
133
- expect(jwtVerifier.getTokenExpiration).toHaveBeenCalledWith(token);
134
- expect(result).toBe(expectedDate);
135
- });
136
- it("debería propagar el error si validateTokenInput lanza una excepción", async () => {
137
- const token = "invalid.token";
138
- jwtValidator.validateTokenInput.mockImplementation(() => {
139
- throw new Error("Invalid token");
140
- });
141
- await expect(service.getTokenExpiration(token)).rejects.toThrow("Invalid token");
142
- expect(jwtVerifier.getTokenExpiration).not.toHaveBeenCalled();
143
- });
144
- });
145
- });