@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.
- package/README.md +259 -306
- package/dist/application/dtos/index.d.ts +3 -0
- package/dist/application/dtos/index.js +19 -0
- package/dist/application/dtos/request/index.d.ts +4 -0
- package/dist/{src/application/dtos → application/dtos/request}/index.js +4 -4
- package/dist/{src/application/dtos/login.dto.d.ts → application/dtos/request/login.request.d.ts} +0 -4
- package/dist/application/dtos/request/logout.request.d.ts +3 -0
- package/dist/application/dtos/request/refresh-token.request.d.ts +3 -0
- package/dist/application/dtos/request/register-user.request.d.ts +6 -0
- package/dist/application/dtos/response/index.d.ts +4 -0
- package/dist/application/dtos/response/index.js +20 -0
- package/dist/application/dtos/response/login.response.d.ts +4 -0
- package/dist/{src/application/dtos/logout.dto.d.ts → application/dtos/response/logout.response.d.ts} +0 -3
- package/dist/{src/application/dtos/refresh-token.dto.d.ts → application/dtos/response/refresh-token.response.d.ts} +0 -3
- package/dist/application/dtos/response/register-user.response.d.ts +7 -0
- package/dist/application/dtos/type/index.d.ts +1 -0
- package/dist/{src/shared/constants → application/dtos/type}/index.js +1 -1
- package/dist/application/dtos/type/user-role.type.d.ts +4 -0
- package/dist/application/factories/auth-service.factory.d.ts +11 -0
- package/dist/application/factories/auth-service.factory.js +40 -0
- package/dist/{src/application → application}/index.d.ts +1 -0
- package/dist/{src/application → application}/index.js +1 -0
- package/dist/application/types/auth-service-factory-options.type.d.ts +5 -0
- package/dist/application/types/index.d.ts +1 -0
- package/dist/{src/infrastructure/jwt/factory → application/types}/index.js +1 -1
- package/dist/{src/application → application}/use-cases/login-with-password.use-case.d.ts +2 -2
- package/dist/{src/application → application}/use-cases/login-with-password.use-case.js +6 -5
- package/dist/{src/application → application}/use-cases/logout.use-case.d.ts +2 -2
- package/dist/{src/application → application}/use-cases/logout.use-case.js +2 -2
- package/dist/{src/application → application}/use-cases/refresh-token.use-case.d.ts +2 -2
- package/dist/{src/application → application}/use-cases/refresh-token.use-case.js +2 -2
- package/dist/application/use-cases/register-user.use-case.d.ts +12 -0
- package/dist/{src/application → application}/use-cases/register-user.use-case.js +27 -1
- package/dist/{src/domain → domain}/errors/auth.errors.d.ts +1 -14
- package/dist/{src/domain → domain}/errors/auth.errors.js +1 -15
- package/dist/{src/domain → domain}/index.d.ts +0 -1
- package/dist/{src/domain → domain}/index.js +0 -1
- package/dist/domain/ports/auth/index.d.ts +2 -0
- package/dist/domain/ports/auth/index.js +18 -0
- package/dist/{src/domain/ports/auth/password-hasher.d.ts → domain/ports/auth/password-hasher.port.d.ts} +1 -1
- package/dist/{src/domain → domain}/ports/auth/password-policy.port.d.ts +1 -1
- package/dist/domain/ports/index.d.ts +4 -0
- package/dist/{src/infrastructure/jwt → domain/ports}/index.js +3 -2
- package/dist/domain/ports/jwt/index.d.ts +1 -0
- package/dist/{src/shared/types → domain/ports/jwt}/index.js +1 -1
- package/dist/domain/ports/jwt/payload/index.d.ts +1 -0
- package/dist/domain/ports/jwt/payload/index.js +17 -0
- package/dist/{src/domain → domain}/ports/repository/credential.repository.d.ts +1 -1
- package/dist/{src/domain → domain}/ports/repository/index.d.ts +1 -1
- package/dist/{src/domain → domain}/ports/repository/index.js +1 -1
- package/dist/{src/domain/ports/repository/user.repository.d.ts → domain/ports/repository/user-repository.port.d.ts} +1 -1
- package/dist/domain/ports/token/index.d.ts +2 -0
- package/dist/domain/ports/token/index.js +18 -0
- package/dist/{src/domain → domain}/ports/token/token-session.port.d.ts +2 -2
- package/dist/{src/domain → domain}/ports/token/token.service.port.d.ts +2 -2
- package/dist/{src/domain → domain}/props/jwt/generate-access-token.props.d.ts +0 -2
- package/dist/{src/domain → domain}/props/jwt/generate-refresh-token.props.d.ts +0 -2
- package/dist/{src/domain/props/services → domain/props/jwt}/index.d.ts +1 -0
- package/dist/{src/domain/props/services → domain/props/jwt}/index.js +1 -0
- package/dist/{src/domain → domain}/services/password-policy.service.d.ts +2 -2
- package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-credential.repository.d.ts +2 -2
- package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-credential.repository.js +12 -2
- package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-user.repository.d.ts +2 -2
- package/dist/index.d.ts +5 -1
- package/dist/index.js +13 -1
- package/dist/infrastructure/index.js +1 -0
- package/dist/{src/infrastructure → infrastructure}/security/bcrypt-password-hasher.d.ts +7 -2
- package/dist/{src/infrastructure → infrastructure}/security/bcrypt-password-hasher.js +7 -2
- package/dist/{src/infrastructure → infrastructure}/services/index.d.ts +0 -1
- package/dist/{src/infrastructure → infrastructure}/services/index.js +0 -1
- package/dist/infrastructure/services/token-session.service.d.ts +22 -0
- package/dist/{src/infrastructure/services/default-token-session.service.js → infrastructure/services/token-session.service.js} +30 -31
- package/dist/infrastructure/types/auth-service-container.d.ts +14 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/{src/infrastructure/repositories → shared}/index.js +1 -1
- package/package.json +5 -8
- package/dist/examples/bcrypt-password-hasher.example.d.ts +0 -3
- package/dist/examples/bcrypt-password-hasher.example.js +0 -78
- package/dist/examples/entity-object.example.d.ts +0 -39
- package/dist/examples/entity-object.example.js +0 -411
- package/dist/examples/factory-auth-service-example.d.ts +0 -3
- package/dist/examples/factory-auth-service-example.js +0 -84
- package/dist/examples/index.example.d.ts +0 -12
- package/dist/examples/index.example.js +0 -171
- package/dist/examples/jwt-algoritm.example.d.ts +0 -47
- package/dist/examples/jwt-algoritm.example.js +0 -447
- package/dist/examples/jwt-token-generator.example.d.ts +0 -6
- package/dist/examples/jwt-token-generator.example.js +0 -49
- package/dist/examples/jwt-verifier.example.d.ts +0 -3
- package/dist/examples/jwt-verifier.example.js +0 -80
- package/dist/examples/password-policy.example.d.ts +0 -7
- package/dist/examples/password-policy.example.js +0 -57
- package/dist/examples/service-jwt-token.example.d.ts +0 -3
- package/dist/examples/service-jwt-token.example.js +0 -154
- package/dist/examples/service-token-session.example.d.ts +0 -3
- package/dist/examples/service-token-session.example.js +0 -139
- package/dist/examples/use-case-login-with-password.example.d.ts +0 -6
- package/dist/examples/use-case-login-with-password.example.js +0 -105
- package/dist/examples/use-case-logout.example.d.ts +0 -7
- package/dist/examples/use-case-logout.example.js +0 -134
- package/dist/examples/use-case-refresh-token.example.d.ts +0 -11
- package/dist/examples/use-case-refresh-token.example.js +0 -164
- package/dist/examples/use-case-register-user.example.d.ts +0 -9
- package/dist/examples/use-case-register-user.example.js +0 -110
- package/dist/src/application/dtos/index.d.ts +0 -4
- package/dist/src/application/dtos/register-user.dto.d.ts +0 -16
- package/dist/src/application/factories/auth-service.factory.d.ts +0 -5
- package/dist/src/application/factories/auth-service.factory.js +0 -51
- package/dist/src/application/use-cases/register-user.use-case.d.ts +0 -10
- package/dist/src/domain/errors/auth-domain-error.d.ts +0 -82
- package/dist/src/domain/errors/auth-domain-error.js +0 -112
- package/dist/src/domain/ports/auth/password-policy-config.port.js +0 -10
- package/dist/src/domain/ports/config/auth-config.port.d.ts +0 -19
- package/dist/src/domain/ports/config/auth-config.port.js +0 -3
- package/dist/src/domain/ports/index.d.ts +0 -9
- package/dist/src/domain/ports/index.js +0 -25
- package/dist/src/domain/ports/jwt/factory/signature-strategy-factory.port.d.ts +0 -14
- package/dist/src/domain/ports/jwt/signature-strategy-factory.port.d.ts +0 -14
- package/dist/src/domain/ports/jwt/signature-strategy.d.ts +0 -30
- package/dist/src/domain/ports/jwt/signature-strategy.js +0 -4
- package/dist/src/domain/ports/jwt/signature-strategy.port.d.ts +0 -31
- package/dist/src/domain/ports/jwt/signature-strategy.port.js +0 -4
- package/dist/src/domain/ports/jwt/strategy/signature-strategy.port.d.ts +0 -31
- package/dist/src/domain/ports/jwt/strategy/signature-strategy.port.js +0 -4
- package/dist/src/domain/props/create-payload-props.port.d.ts +0 -0
- package/dist/src/domain/props/create-payload-props.port.js +0 -8
- package/dist/src/domain/props/jwt/create-payload.props.d.ts +0 -9
- package/dist/src/domain/props/jwt/generate-token.props.d.ts +0 -10
- package/dist/src/domain/props/jwt/generate-token.props.js +0 -2
- package/dist/src/domain/props/jwt/index.d.ts +0 -5
- package/dist/src/domain/props/jwt/index.js +0 -21
- package/dist/src/domain/props/jwt/jwt-subject.d.ts +0 -7
- package/dist/src/domain/props/jwt/jwt-subject.js +0 -2
- package/dist/src/domain/props/services/generate-access-token.props.d.ts +0 -8
- package/dist/src/domain/props/services/generate-refresh-token.props.d.ts +0 -8
- package/dist/src/domain/services/token.service.port.d.ts +0 -9
- package/dist/src/index.d.ts +0 -78
- package/dist/src/index.js +0 -94
- package/dist/src/infrastructure/index.d.ts +0 -5
- package/dist/src/infrastructure/index.js +0 -21
- package/dist/src/infrastructure/jwt/factory/index.d.ts +0 -1
- package/dist/src/infrastructure/jwt/factory/signature-strategy.factory.d.ts +0 -21
- package/dist/src/infrastructure/jwt/factory/signature-strategy.factory.js +0 -61
- package/dist/src/infrastructure/jwt/index.d.ts +0 -3
- package/dist/src/infrastructure/jwt/signature-strategy.factory.d.ts +0 -21
- package/dist/src/infrastructure/jwt/signature-strategy.factory.js +0 -61
- package/dist/src/infrastructure/jwt/strategies/ecdsa-signature-strategy.d.ts +0 -47
- package/dist/src/infrastructure/jwt/strategies/ecdsa-signature-strategy.js +0 -124
- package/dist/src/infrastructure/jwt/strategies/ecdsa-signature.strategy.d.ts +0 -47
- package/dist/src/infrastructure/jwt/strategies/ecdsa-signature.strategy.js +0 -124
- package/dist/src/infrastructure/jwt/strategies/hmac-signature-strategy.d.ts +0 -54
- package/dist/src/infrastructure/jwt/strategies/hmac-signature-strategy.js +0 -129
- package/dist/src/infrastructure/jwt/strategies/hmac-signature.strategy.d.ts +0 -54
- package/dist/src/infrastructure/jwt/strategies/hmac-signature.strategy.js +0 -129
- package/dist/src/infrastructure/jwt/strategies/index.d.ts +0 -3
- package/dist/src/infrastructure/jwt/strategies/index.js +0 -19
- package/dist/src/infrastructure/jwt/strategies/rsa-signature-strategy.d.ts +0 -47
- package/dist/src/infrastructure/jwt/strategies/rsa-signature-strategy.js +0 -124
- package/dist/src/infrastructure/jwt/strategies/rsa-signature.strategy.d.ts +0 -47
- package/dist/src/infrastructure/jwt/strategies/rsa-signature.strategy.js +0 -124
- package/dist/src/infrastructure/jwt/token/actions/jwt-token-generator.d.ts +0 -57
- package/dist/src/infrastructure/jwt/token/actions/jwt-token-generator.js +0 -123
- package/dist/src/infrastructure/jwt/token/actions/jwt-token-verifier.d.ts +0 -59
- package/dist/src/infrastructure/jwt/token/actions/jwt-token-verifier.js +0 -100
- package/dist/src/infrastructure/jwt/token/index.d.ts +0 -5
- package/dist/src/infrastructure/jwt/token/index.js +0 -21
- package/dist/src/infrastructure/jwt/token/jwt-signer.d.ts +0 -33
- package/dist/src/infrastructure/jwt/token/jwt-signer.js +0 -46
- package/dist/src/infrastructure/jwt/token/jwt-token-parser.d.ts +0 -29
- package/dist/src/infrastructure/jwt/token/jwt-token-parser.js +0 -57
- package/dist/src/infrastructure/jwt/token/jwt-token-validator.d.ts +0 -32
- package/dist/src/infrastructure/jwt/token/jwt-token-validator.js +0 -77
- package/dist/src/infrastructure/jwt/token/tools/jwt-signer.d.ts +0 -33
- package/dist/src/infrastructure/jwt/token/tools/jwt-signer.js +0 -46
- package/dist/src/infrastructure/jwt/token/tools/jwt-token-parser.d.ts +0 -30
- package/dist/src/infrastructure/jwt/token/tools/jwt-token-parser.js +0 -57
- package/dist/src/infrastructure/jwt/token/tools/jwt-token-validator.d.ts +0 -32
- package/dist/src/infrastructure/jwt/token/tools/jwt-token-validator.js +0 -77
- package/dist/src/infrastructure/repositories/index.d.ts +0 -1
- package/dist/src/infrastructure/repositories/test/in-memory-token-session.repository.d.ts +0 -67
- package/dist/src/infrastructure/repositories/test/in-memory-token-session.repository.js +0 -128
- package/dist/src/infrastructure/services/default-token-session.service.d.ts +0 -18
- package/dist/src/infrastructure/services/jwt-token.service.d.ts +0 -15
- package/dist/src/infrastructure/services/jwt-token.service.js +0 -44
- package/dist/src/infrastructure/services/simple-jwt-token.service.d.ts +0 -15
- package/dist/src/infrastructure/services/simple-jwt-token.service.js +0 -46
- package/dist/src/infrastructure/services/token-session.service.d.ts +0 -24
- package/dist/src/infrastructure/services/token-session.service.js +0 -131
- package/dist/src/infrastructure/types/auth-service-container.d.ts +0 -14
- package/dist/src/shared/constants/index.d.ts +0 -1
- package/dist/src/shared/constants/jwt-algorithms.d.ts +0 -17
- package/dist/src/shared/constants/jwt-algorithms.js +0 -23
- package/dist/src/shared/encoders/base64-url-encoder.d.ts +0 -29
- package/dist/src/shared/encoders/base64-url-encoder.js +0 -45
- package/dist/src/shared/encoders/index.d.ts +0 -1
- package/dist/src/shared/encoders/index.js +0 -17
- package/dist/src/shared/index.d.ts +0 -4
- package/dist/src/shared/index.js +0 -20
- package/dist/src/shared/types/index.d.ts +0 -1
- package/dist/src/shared/types/jwt.d.ts +0 -25
- package/dist/src/shared/types/jwt.js +0 -2
- package/dist/src/shared/types/jwt.types.d.ts +0 -39
- package/dist/src/shared/types/jwt.types.js +0 -2
- package/dist/tests/application/factory/auth-service-factory.spec.d.ts +0 -1
- package/dist/tests/application/factory/auth-service-factory.spec.js +0 -97
- package/dist/tests/application/use-cases/login-with-password.integration.spec.d.ts +0 -1
- package/dist/tests/application/use-cases/login-with-password.integration.spec.js +0 -140
- package/dist/tests/application/use-cases/logout-use-case.spec.d.ts +0 -1
- package/dist/tests/application/use-cases/logout-use-case.spec.js +0 -40
- package/dist/tests/application/use-cases/refresh-token-use-case.spec.d.ts +0 -1
- package/dist/tests/application/use-cases/refresh-token-use-case.spec.js +0 -116
- package/dist/tests/application/use-cases/register-user.usecase.spec.d.ts +0 -1
- package/dist/tests/application/use-cases/register-user.usecase.spec.js +0 -151
- package/dist/tests/domain/entities/credential.spec.d.ts +0 -1
- package/dist/tests/domain/entities/credential.spec.js +0 -93
- package/dist/tests/domain/entities/user.spec.d.ts +0 -1
- package/dist/tests/domain/entities/user.spec.js +0 -93
- package/dist/tests/domain/object-values/email.spec.d.ts +0 -1
- package/dist/tests/domain/object-values/email.spec.js +0 -77
- package/dist/tests/domain/object-values/hashed-password.spec.d.ts +0 -1
- package/dist/tests/domain/object-values/hashed-password.spec.js +0 -54
- package/dist/tests/domain/object-values/id.spec.d.ts +0 -1
- package/dist/tests/domain/object-values/id.spec.js +0 -48
- package/dist/tests/domain/object-values/permission.spec.d.ts +0 -1
- package/dist/tests/domain/object-values/permission.spec.js +0 -75
- package/dist/tests/domain/object-values/role.spec.d.ts +0 -1
- package/dist/tests/domain/object-values/role.spec.js +0 -139
- package/dist/tests/domain/services/default-password-policy.spec.d.ts +0 -1
- package/dist/tests/domain/services/default-password-policy.spec.js +0 -69
- package/dist/tests/doman/entities/credential.spec.d.ts +0 -1
- package/dist/tests/doman/entities/credential.spec.js +0 -93
- package/dist/tests/doman/entities/user.spec.d.ts +0 -1
- package/dist/tests/doman/entities/user.spec.js +0 -93
- package/dist/tests/doman/object-values/email.spec.d.ts +0 -1
- package/dist/tests/doman/object-values/email.spec.js +0 -77
- package/dist/tests/doman/object-values/hashed-password.spec.d.ts +0 -1
- package/dist/tests/doman/object-values/hashed-password.spec.js +0 -54
- package/dist/tests/doman/object-values/id.spec.d.ts +0 -1
- package/dist/tests/doman/object-values/id.spec.js +0 -48
- package/dist/tests/doman/object-values/permission.spec.d.ts +0 -1
- package/dist/tests/doman/object-values/permission.spec.js +0 -75
- package/dist/tests/doman/object-values/role.spec.d.ts +0 -1
- package/dist/tests/doman/object-values/role.spec.js +0 -139
- package/dist/tests/helpers/make-jwt-subject.d.ts +0 -7
- package/dist/tests/helpers/make-jwt-subject.js +0 -16
- package/dist/tests/helpers/make-jwt-user.d.ts +0 -7
- package/dist/tests/helpers/make-jwt-user.js +0 -16
- package/dist/tests/helpers/make-user.d.ts +0 -2
- package/dist/tests/helpers/make-user.js +0 -15
- package/dist/tests/infrastructure/jwt/signature-strategy-factory.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/signature-strategy-factory.spec.js +0 -127
- package/dist/tests/infrastructure/jwt/strategies/ecdsa-signature-strategy.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/strategies/ecdsa-signature-strategy.spec.js +0 -157
- package/dist/tests/infrastructure/jwt/strategies/hmac-signature-strategy.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/strategies/hmac-signature-strategy.spec.js +0 -150
- package/dist/tests/infrastructure/jwt/strategies/rsa-signature-strategy..spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/strategies/rsa-signature-strategy..spec.js +0 -156
- package/dist/tests/infrastructure/jwt/token/actions/jwt-token-generator.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/actions/jwt-token-generator.spec.js +0 -179
- package/dist/tests/infrastructure/jwt/token/actions/jwt-token-verifier.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/actions/jwt-token-verifier.spec.js +0 -142
- package/dist/tests/infrastructure/jwt/token/jwt-signer.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/jwt-signer.spec.js +0 -125
- package/dist/tests/infrastructure/jwt/token/jwt-token-parser.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/jwt-token-parser.spec.js +0 -116
- package/dist/tests/infrastructure/jwt/token/jwt-token-validator.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/jwt-token-validator.spec.js +0 -88
- package/dist/tests/infrastructure/jwt/token/tools/jwt-signer.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/tools/jwt-signer.spec.js +0 -126
- package/dist/tests/infrastructure/jwt/token/tools/jwt-token-parser.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/tools/jwt-token-parser.spec.js +0 -116
- package/dist/tests/infrastructure/jwt/token/tools/jwt-token-validator.spec.d.ts +0 -1
- package/dist/tests/infrastructure/jwt/token/tools/jwt-token-validator.spec.js +0 -88
- package/dist/tests/infrastructure/security/security/bcrypt-password-hasher.spec.d.ts +0 -1
- package/dist/tests/infrastructure/security/security/bcrypt-password-hasher.spec.js +0 -37
- package/dist/tests/infrastructure/services/jwt-token-service.spec.d.ts +0 -1
- package/dist/tests/infrastructure/services/jwt-token-service.spec.js +0 -145
- package/dist/tests/infrastructure/services/token-session.service.spec.d.ts +0 -1
- package/dist/tests/infrastructure/services/token-session.service.spec.js +0 -269
- package/dist/tests/shared/constants/jwt-algorithms.spec.d.ts +0 -1
- package/dist/tests/shared/constants/jwt-algorithms.spec.js +0 -27
- package/dist/tests/shared/encoders/base64-url-encoder.spec.d.ts +0 -1
- package/dist/tests/shared/encoders/base64-url-encoder.spec.js +0 -70
- package/dist/tests/shared/utils/time-parser.spec.d.ts +0 -1
- package/dist/tests/shared/utils/time-parser.spec.js +0 -80
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -17
- package/dist/utils/time-parser.d.ts +0 -28
- package/dist/utils/time-parser.js +0 -76
- /package/dist/{src/application/dtos/login.dto.js → application/dtos/request/login.request.js} +0 -0
- /package/dist/{src/application/dtos/logout.dto.js → application/dtos/request/logout.request.js} +0 -0
- /package/dist/{src/application/dtos/refresh-token.dto.js → application/dtos/request/refresh-token.request.js} +0 -0
- /package/dist/{src/application/dtos/register-user.dto.js → application/dtos/request/register-user.request.js} +0 -0
- /package/dist/{src/domain/ports/auth/password-hasher.js → application/dtos/response/login.response.js} +0 -0
- /package/dist/{src/domain/ports/auth/password-policy.port.js → application/dtos/response/logout.response.js} +0 -0
- /package/dist/{src/domain/ports/jwt/factory/signature-strategy-factory.port.js → application/dtos/response/refresh-token.response.js} +0 -0
- /package/dist/{src/domain/ports/jwt/payload/jwt-payload.port.js → application/dtos/response/register-user.response.js} +0 -0
- /package/dist/{src/domain/ports/jwt/signature-strategy-factory.port.js → application/dtos/type/user-role.type.js} +0 -0
- /package/dist/{src/application → application}/factories/index.d.ts +0 -0
- /package/dist/{src/application → application}/factories/index.js +0 -0
- /package/dist/{src/domain/ports/repository/credential.repository.js → application/types/auth-service-factory-options.type.js} +0 -0
- /package/dist/{src/application → application}/use-cases/index.d.ts +0 -0
- /package/dist/{src/application → application}/use-cases/index.js +0 -0
- /package/dist/{src/domain → domain}/entities/credential.entity.d.ts +0 -0
- /package/dist/{src/domain → domain}/entities/credential.entity.js +0 -0
- /package/dist/{src/domain → domain}/entities/index.d.ts +0 -0
- /package/dist/{src/domain → domain}/entities/index.js +0 -0
- /package/dist/{src/domain → domain}/entities/user.entity.d.ts +0 -0
- /package/dist/{src/domain → domain}/entities/user.entity.js +0 -0
- /package/dist/{src/domain → domain}/errors/identity.errors.d.ts +0 -0
- /package/dist/{src/domain → domain}/errors/identity.errors.js +0 -0
- /package/dist/{src/domain → domain}/errors/index.d.ts +0 -0
- /package/dist/{src/domain → domain}/errors/index.js +0 -0
- /package/dist/{src/domain → domain}/object-values/email.d.ts +0 -0
- /package/dist/{src/domain → domain}/object-values/email.js +0 -0
- /package/dist/{src/domain → domain}/object-values/hashed-password.d.ts +0 -0
- /package/dist/{src/domain → domain}/object-values/hashed-password.js +0 -0
- /package/dist/{src/domain → domain}/object-values/id.d.ts +0 -0
- /package/dist/{src/domain → domain}/object-values/id.js +0 -0
- /package/dist/{src/domain → domain}/object-values/index.d.ts +0 -0
- /package/dist/{src/domain → domain}/object-values/index.js +0 -0
- /package/dist/{src/domain → domain}/object-values/permission.d.ts +0 -0
- /package/dist/{src/domain → domain}/object-values/permission.js +0 -0
- /package/dist/{src/domain → domain}/object-values/role.d.ts +0 -0
- /package/dist/{src/domain → domain}/object-values/role.js +0 -0
- /package/dist/{src/domain/ports/repository/user.repository.js → domain/ports/auth/password-hasher.port.js} +0 -0
- /package/dist/{src/domain/ports/token/token-session.port.js → domain/ports/auth/password-policy.port.js} +0 -0
- /package/dist/{src/domain → domain}/ports/jwt/payload/jwt-payload.port.d.ts +0 -0
- /package/dist/{src/domain/ports/token/token.service.port.js → domain/ports/jwt/payload/jwt-payload.port.js} +0 -0
- /package/dist/{src/domain/props/entities/credential.props.js → domain/ports/repository/credential.repository.js} +0 -0
- /package/dist/{src/domain/props/entities/user.props.js → domain/ports/repository/user-repository.port.js} +0 -0
- /package/dist/{src/domain/props/jwt/create-payload.props.js → domain/ports/token/token-session.port.js} +0 -0
- /package/dist/{src/domain/services → domain/ports/token}/token.service.port.js +0 -0
- /package/dist/{src/domain → domain}/props/entities/credential.props.d.ts +0 -0
- /package/dist/{src/domain/props/jwt/generate-access-token.props.js → domain/props/entities/credential.props.js} +0 -0
- /package/dist/{src/domain → domain}/props/entities/index.d.ts +0 -0
- /package/dist/{src/domain → domain}/props/entities/index.js +0 -0
- /package/dist/{src/domain → domain}/props/entities/user.props.d.ts +0 -0
- /package/dist/{src/domain/props/jwt/generate-refresh-token.props.js → domain/props/entities/user.props.js} +0 -0
- /package/dist/{src/domain → domain}/props/index.d.ts +0 -0
- /package/dist/{src/domain → domain}/props/index.js +0 -0
- /package/dist/{src/domain/props/services → domain/props/jwt}/generate-access-token.props.js +0 -0
- /package/dist/{src/domain/props/services → domain/props/jwt}/generate-refresh-token.props.js +0 -0
- /package/dist/{src/domain → domain}/props/jwt/jwt-user.d.ts +0 -0
- /package/dist/{src/domain → domain}/props/jwt/jwt-user.js +0 -0
- /package/dist/{src/domain → domain}/services/index.d.ts +0 -0
- /package/dist/{src/domain → domain}/services/index.js +0 -0
- /package/dist/{src/domain → domain}/services/password-policy.service.js +0 -0
- /package/dist/{src/infrastructure/repositories/test → in-memory}/in-memory-user.repository.js +0 -0
- /package/dist/{src/infrastructure/repositories/test → in-memory}/index.d.ts +0 -0
- /package/dist/{src/infrastructure/repositories/test → in-memory}/index.js +0 -0
- /package/dist/{src/domain/ports/auth/password-policy-config.port.d.ts → infrastructure/index.d.ts} +0 -0
- /package/dist/{src/infrastructure → infrastructure}/security/index.d.ts +0 -0
- /package/dist/{src/infrastructure → infrastructure}/security/index.js +0 -0
- /package/dist/{src/infrastructure → infrastructure}/types/auth-service-container.js +0 -0
- /package/dist/{src/infrastructure → infrastructure}/types/index.d.ts +0 -0
- /package/dist/{src/infrastructure → infrastructure}/types/index.js +0 -0
- /package/dist/{src/shared → shared}/utils/index.d.ts +0 -0
- /package/dist/{src/shared → shared}/utils/index.js +0 -0
- /package/dist/{src/shared → shared}/utils/time-parser.d.ts +0 -0
- /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 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -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 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -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 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -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
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|