@authup/server-core 1.0.0-beta.52 → 1.0.0-beta.54
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/dist/adapters/database/data-source/options/module.d.ts.map +1 -1
- package/dist/adapters/database/data-source/options/module.mjs +18 -21
- package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
- package/dist/adapters/database/domains/client/entity.d.ts +17 -14
- package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/client/entity.mjs +72 -30
- package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/client/subscriber.mjs +1 -1
- package/dist/adapters/database/domains/client/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/client-permission/entity.d.ts +10 -10
- package/dist/adapters/database/domains/client-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-permission/entity.mjs +42 -23
- package/dist/adapters/database/domains/client-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/client-permission/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/client-permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/client-role/entity.d.ts +8 -8
- package/dist/adapters/database/domains/client-role/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-role/entity.mjs +29 -17
- package/dist/adapters/database/domains/client-role/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/client-role/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/client-role/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/client-scope/entity.d.ts +8 -8
- package/dist/adapters/database/domains/client-scope/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-scope/entity.mjs +29 -17
- package/dist/adapters/database/domains/client-scope/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/consent/entity.d.ts +20 -0
- package/dist/adapters/database/domains/consent/entity.d.ts.map +1 -0
- package/dist/adapters/database/domains/consent/entity.mjs +125 -0
- package/dist/adapters/database/domains/consent/entity.mjs.map +1 -0
- package/dist/adapters/database/domains/consent/index.d.ts.map +1 -0
- package/dist/adapters/database/domains/consent/index.mjs +6 -0
- package/dist/adapters/database/domains/consent/subscriber.d.ts +6 -0
- package/dist/adapters/database/domains/consent/subscriber.d.ts.map +1 -0
- package/dist/adapters/database/domains/{robot-role → consent}/subscriber.mjs +11 -11
- package/dist/adapters/database/domains/consent/subscriber.mjs.map +1 -0
- package/dist/adapters/database/domains/constants.d.ts +1 -3
- package/dist/adapters/database/domains/constants.d.ts.map +1 -1
- package/dist/adapters/database/domains/constants.mjs +1 -3
- package/dist/adapters/database/domains/constants.mjs.map +1 -1
- package/dist/adapters/database/domains/event/entity.d.ts +22 -0
- package/dist/adapters/database/domains/event/entity.d.ts.map +1 -0
- package/dist/adapters/database/domains/event/entity.mjs +189 -0
- package/dist/adapters/database/domains/event/entity.mjs.map +1 -0
- package/dist/adapters/database/domains/event/index.d.ts +2 -0
- package/dist/adapters/database/domains/event/index.d.ts.map +1 -0
- package/dist/adapters/database/domains/event/index.mjs +5 -0
- package/dist/adapters/database/domains/identity-provider/entity.d.ts +4 -4
- package/dist/adapters/database/domains/identity-provider/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider/entity.mjs +17 -10
- package/dist/adapters/database/domains/identity-provider/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider/repository.mjs +3 -3
- package/dist/adapters/database/domains/identity-provider/repository.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider/subscriber.mjs +1 -1
- package/dist/adapters/database/domains/identity-provider/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-account/entity.d.ts +15 -15
- package/dist/adapters/database/domains/identity-provider-account/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-account/entity.mjs +52 -33
- package/dist/adapters/database/domains/identity-provider-account/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-attribute/entity.d.ts +4 -4
- package/dist/adapters/database/domains/identity-provider-attribute/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs +18 -9
- package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.d.ts +9 -9
- package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs +29 -19
- package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.d.ts +10 -10
- package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs +32 -21
- package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-role-mapping/entity.d.ts +10 -10
- package/dist/adapters/database/domains/identity-provider-role-mapping/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs +32 -21
- package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs +1 -1
- package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/index.d.ts +4 -3
- package/dist/adapters/database/domains/index.d.ts.map +1 -1
- package/dist/adapters/database/domains/index.mjs +24 -24
- package/dist/adapters/database/domains/key/entity.d.ts +12 -8
- package/dist/adapters/database/domains/key/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/key/entity.mjs +56 -21
- package/dist/adapters/database/domains/key/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/permission/entity.d.ts +7 -7
- package/dist/adapters/database/domains/permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/permission/entity.mjs +33 -18
- package/dist/adapters/database/domains/permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/permission/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/permission-policy/entity.d.ts +8 -8
- package/dist/adapters/database/domains/permission-policy/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/permission-policy/entity.mjs +31 -19
- package/dist/adapters/database/domains/permission-policy/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/policy/entity.d.ts +6 -6
- package/dist/adapters/database/domains/policy/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/policy/entity.mjs +28 -14
- package/dist/adapters/database/domains/policy/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/policy/repository.d.ts.map +1 -1
- package/dist/adapters/database/domains/policy/repository.mjs +6 -6
- package/dist/adapters/database/domains/policy/repository.mjs.map +1 -1
- package/dist/adapters/database/domains/policy-attribute/entity.d.ts +4 -4
- package/dist/adapters/database/domains/policy-attribute/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/policy-attribute/entity.mjs +18 -9
- package/dist/adapters/database/domains/policy-attribute/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/policy-attribute/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/policy-attribute/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/realm/entity.d.ts +4 -4
- package/dist/adapters/database/domains/realm/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/realm/entity.mjs +16 -8
- package/dist/adapters/database/domains/realm/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/role/entity.d.ts +6 -6
- package/dist/adapters/database/domains/role/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/role/entity.mjs +30 -16
- package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/role/repository.mjs +4 -4
- package/dist/adapters/database/domains/role/repository.mjs.map +1 -1
- package/dist/adapters/database/domains/role/subscriber.mjs +1 -1
- package/dist/adapters/database/domains/role/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/role-attribute/entity.d.ts +4 -4
- package/dist/adapters/database/domains/role-attribute/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/role-attribute/entity.mjs +18 -9
- package/dist/adapters/database/domains/role-attribute/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/role-attribute/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/role-attribute/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/role-permission/entity.d.ts +10 -10
- package/dist/adapters/database/domains/role-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/role-permission/entity.mjs +39 -23
- package/dist/adapters/database/domains/role-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/role-permission/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/role-permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/scope/entity.d.ts +5 -5
- package/dist/adapters/database/domains/scope/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/scope/entity.mjs +23 -12
- package/dist/adapters/database/domains/scope/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/scope/subscriber.mjs +1 -1
- package/dist/adapters/database/domains/scope/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/session/entity.d.ts +14 -15
- package/dist/adapters/database/domains/session/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/session/entity.mjs +50 -38
- package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/session-token/entity.d.ts +9 -9
- package/dist/adapters/database/domains/session-token/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/session-token/entity.mjs +32 -19
- package/dist/adapters/database/domains/session-token/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/trust-anchor/entity.d.ts +13 -0
- package/dist/adapters/database/domains/trust-anchor/entity.d.ts.map +1 -0
- package/dist/adapters/database/domains/trust-anchor/entity.mjs +61 -0
- package/dist/adapters/database/domains/trust-anchor/entity.mjs.map +1 -0
- package/dist/adapters/database/domains/trust-anchor/index.d.ts +2 -0
- package/dist/adapters/database/domains/trust-anchor/index.d.ts.map +1 -0
- package/dist/adapters/database/domains/trust-anchor/index.mjs +5 -0
- package/dist/adapters/database/domains/user/entity.d.ts +12 -12
- package/dist/adapters/database/domains/user/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/user/entity.mjs +42 -27
- package/dist/adapters/database/domains/user/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/user/repository.mjs +3 -3
- package/dist/adapters/database/domains/user/repository.mjs.map +1 -1
- package/dist/adapters/database/domains/user/subscriber.mjs +1 -1
- package/dist/adapters/database/domains/user/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/user-attribute/entity.d.ts +4 -4
- package/dist/adapters/database/domains/user-attribute/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-attribute/entity.mjs +15 -9
- package/dist/adapters/database/domains/user-attribute/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/user-attribute/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/user-attribute/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/user-authenticator/entity.d.ts +20 -0
- package/dist/adapters/database/domains/user-authenticator/entity.d.ts.map +1 -0
- package/dist/adapters/database/domains/user-authenticator/entity.mjs +111 -0
- package/dist/adapters/database/domains/user-authenticator/entity.mjs.map +1 -0
- package/dist/adapters/database/domains/user-authenticator/index.d.ts +2 -0
- package/dist/adapters/database/domains/user-authenticator/index.d.ts.map +1 -0
- package/dist/adapters/database/domains/user-authenticator/index.mjs +5 -0
- package/dist/adapters/database/domains/user-permission/entity.d.ts +10 -10
- package/dist/adapters/database/domains/user-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-permission/entity.mjs +38 -22
- package/dist/adapters/database/domains/user-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/user-permission/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/user-permission/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/user-role/entity.d.ts +8 -8
- package/dist/adapters/database/domains/user-role/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-role/entity.mjs +29 -17
- package/dist/adapters/database/domains/user-role/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/user-role/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/user-role/subscriber.mjs.map +1 -1
- package/dist/adapters/database/errors/driver.d.ts +14 -0
- package/dist/adapters/database/errors/driver.d.ts.map +1 -0
- package/dist/adapters/database/errors/driver.mjs +32 -0
- package/dist/adapters/database/errors/driver.mjs.map +1 -0
- package/dist/adapters/database/errors/index.d.ts +1 -0
- package/dist/adapters/database/errors/index.d.ts.map +1 -1
- package/dist/adapters/database/errors/index.mjs +2 -1
- package/dist/adapters/database/helpers/is-supported.mjs +1 -1
- package/dist/adapters/database/helpers/is-supported.mjs.map +1 -1
- package/dist/adapters/database/index.mjs +17 -17
- package/dist/adapters/database/migrations/mysql/1783769340000-Default.d.ts +50 -0
- package/dist/adapters/database/migrations/mysql/1783769340000-Default.d.ts.map +1 -0
- package/dist/adapters/database/migrations/mysql/1783769340000-Default.mjs +320 -0
- package/dist/adapters/database/migrations/mysql/1783769340000-Default.mjs.map +1 -0
- package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.d.ts +12 -0
- package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.d.ts.map +1 -0
- package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.mjs +42 -0
- package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.mjs.map +1 -0
- package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.d.ts +18 -0
- package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.d.ts.map +1 -0
- package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.mjs +161 -0
- package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.mjs.map +1 -0
- package/dist/adapters/database/migrations/postgres/1783769340000-Default.d.ts +50 -0
- package/dist/adapters/database/migrations/postgres/1783769340000-Default.d.ts.map +1 -0
- package/dist/adapters/database/migrations/postgres/1783769340000-Default.mjs +310 -0
- package/dist/adapters/database/migrations/postgres/1783769340000-Default.mjs.map +1 -0
- package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.d.ts +12 -0
- package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.d.ts.map +1 -0
- package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.mjs +42 -0
- package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.mjs.map +1 -0
- package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.d.ts +18 -0
- package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.d.ts.map +1 -0
- package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.mjs +167 -0
- package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.mjs.map +1 -0
- package/dist/adapters/database/subscriber/module.d.ts +1 -1
- package/dist/adapters/database/subscriber/module.d.ts.map +1 -1
- package/dist/adapters/database/subscriber/module.mjs +4 -3
- package/dist/adapters/database/subscriber/module.mjs.map +1 -1
- package/dist/adapters/http/adapters/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/authorization/module.d.ts +4 -1
- package/dist/adapters/http/adapters/oauth2/authorization/module.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/authorization/module.mjs +27 -2
- package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/authorization/types.d.ts +9 -1
- package/dist/adapters/http/adapters/oauth2/authorization/types.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +4 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +24 -4
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts +4 -3
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +13 -6
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/index.d.ts +0 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/index.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +38 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +119 -6
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +2 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +16 -3
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +14 -6
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.d.ts +5 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.d.ts.map +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.mjs +18 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.mjs.map +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -4
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
- package/dist/adapters/http/adapters/oauth2/index.mjs +2 -2
- package/dist/adapters/http/controllers/entities/client-permission/utils/validation.mjs +3 -3
- package/dist/adapters/http/controllers/entities/client-permission/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/client-role/utils/validation.mjs +2 -2
- package/dist/adapters/http/controllers/entities/client-role/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/client-scope/utils/validator.mjs +2 -2
- package/dist/adapters/http/controllers/entities/client-scope/utils/validator.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/consent/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/consent/index.mjs +5 -0
- package/dist/adapters/http/controllers/entities/consent/module.d.ts +15 -0
- package/dist/adapters/http/controllers/entities/consent/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/{robot-role → consent}/module.mjs +16 -29
- package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -0
- package/dist/adapters/http/controllers/entities/event/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/event/index.mjs +5 -0
- package/dist/adapters/http/controllers/entities/event/module.d.ts +14 -0
- package/dist/adapters/http/controllers/entities/event/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/event/module.mjs +68 -0
- package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -0
- package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +4 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +55 -21
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts +3 -1
- package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/index.d.ts +5 -3
- package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/index.mjs +11 -9
- package/dist/adapters/http/controllers/entities/key/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/key/index.mjs +5 -0
- package/dist/adapters/http/controllers/entities/key/module.d.ts +17 -0
- package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/key/module.mjs +116 -0
- package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -0
- package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts +1 -1
- package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs +4 -4
- package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/realm/module.d.ts +2 -0
- package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/realm/module.mjs +16 -1
- package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/role-attribute/utils/validation.mjs +1 -1
- package/dist/adapters/http/controllers/entities/role-attribute/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/role-permission/utils/validation.mjs +3 -3
- package/dist/adapters/http/controllers/entities/role-permission/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/trust-anchor/index.d.ts +2 -0
- package/dist/adapters/http/controllers/entities/trust-anchor/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/trust-anchor/index.mjs +5 -0
- package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts +17 -0
- package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/{robot-permission → trust-anchor}/module.mjs +30 -30
- package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -0
- package/dist/adapters/http/controllers/entities/user-attribute/utils/validation.mjs +1 -1
- package/dist/adapters/http/controllers/entities/user-attribute/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/user-authenticator/index.d.ts +2 -0
- package/dist/adapters/http/controllers/entities/user-authenticator/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/user-authenticator/index.mjs +5 -0
- package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts +21 -0
- package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +154 -0
- package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -0
- package/dist/adapters/http/controllers/entities/user-permission/utils/validation.mjs +3 -3
- package/dist/adapters/http/controllers/entities/user-permission/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/user-role/utils/validation.mjs +2 -2
- package/dist/adapters/http/controllers/entities/user-role/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/index.mjs +7 -6
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/index.d.ts +2 -0
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/index.mjs +5 -0
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts +46 -0
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +132 -0
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -0
- package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs +38 -10
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/types.d.ts +17 -1
- package/dist/adapters/http/controllers/workflows/authorize/types.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
- package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
- package/dist/adapters/http/controllers/workflows/jwks/handlers/read.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs +32 -18
- package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/jwks/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/jwks/module.mjs +31 -17
- package/dist/adapters/http/controllers/workflows/jwks/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/status/module.mjs +2 -2
- package/dist/adapters/http/controllers/workflows/status/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.d.ts +2 -1
- package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs +30 -16
- package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts +11 -5
- package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
- package/dist/adapters/http/index.mjs +13 -9
- package/dist/adapters/http/middleware/built-in/assets.mjs +3 -3
- package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +14 -2
- package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/authorization/module.mjs +52 -16
- package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/authorization/types.d.ts +2 -1
- package/dist/adapters/http/middleware/built-in/authorization/types.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/index.mjs +2 -2
- package/dist/adapters/http/middleware/built-in/prometheus.d.ts +12 -1
- package/dist/adapters/http/middleware/built-in/prometheus.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/prometheus.mjs +75 -6
- package/dist/adapters/http/middleware/built-in/prometheus.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/rate-limit.mjs +0 -1
- package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
- package/dist/adapters/http/middleware/index.mjs +2 -2
- package/dist/adapters/http/request/client-certificate.d.ts +6 -0
- package/dist/adapters/http/request/client-certificate.d.ts.map +1 -0
- package/dist/adapters/http/request/client-certificate.mjs +89 -0
- package/dist/adapters/http/request/client-certificate.mjs.map +1 -0
- package/dist/adapters/http/request/constants.d.ts +1 -0
- package/dist/adapters/http/request/constants.d.ts.map +1 -1
- package/dist/adapters/http/request/constants.mjs +6 -1
- package/dist/adapters/http/request/constants.mjs.map +1 -1
- package/dist/adapters/http/request/event-context.d.ts +19 -0
- package/dist/adapters/http/request/event-context.d.ts.map +1 -0
- package/dist/adapters/http/request/event-context.mjs +37 -0
- package/dist/adapters/http/request/event-context.mjs.map +1 -0
- package/dist/adapters/http/request/helpers/body-realm-id.mjs +1 -1
- package/dist/adapters/http/request/helpers/body-realm-id.mjs.map +1 -1
- package/dist/adapters/http/request/helpers/identity.d.ts +2 -2
- package/dist/adapters/http/request/helpers/identity.d.ts.map +1 -1
- package/dist/adapters/http/request/helpers/identity.mjs +2 -2
- package/dist/adapters/http/request/helpers/identity.mjs.map +1 -1
- package/dist/adapters/http/request/helpers/index.d.ts +1 -0
- package/dist/adapters/http/request/helpers/index.d.ts.map +1 -1
- package/dist/adapters/http/request/helpers/index.mjs +2 -1
- package/dist/adapters/http/request/helpers/mfa-login-ticket.d.ts +16 -0
- package/dist/adapters/http/request/helpers/mfa-login-ticket.d.ts.map +1 -0
- package/dist/adapters/http/request/helpers/mfa-login-ticket.mjs +15 -0
- package/dist/adapters/http/request/helpers/mfa-login-ticket.mjs.map +1 -0
- package/dist/adapters/http/request/helpers/realm-id.mjs +1 -1
- package/dist/adapters/http/request/helpers/realm-id.mjs.map +1 -1
- package/dist/adapters/http/request/index.d.ts +3 -0
- package/dist/adapters/http/request/index.d.ts.map +1 -1
- package/dist/adapters/http/request/index.mjs +5 -2
- package/dist/adapters/http/request/permission/module.d.ts +3 -2
- package/dist/adapters/http/request/permission/module.d.ts.map +1 -1
- package/dist/adapters/http/request/permission/module.mjs +3 -0
- package/dist/adapters/http/request/permission/module.mjs.map +1 -1
- package/dist/adapters/http/request/types.d.ts +3 -0
- package/dist/adapters/http/request/types.d.ts.map +1 -0
- package/dist/adapters/http/ui/render.mjs +4 -4
- package/dist/adapters/http/ui/render.mjs.map +1 -1
- package/dist/adapters/http/ui/serve.d.ts.map +1 -1
- package/dist/adapters/http/ui/serve.mjs +4 -1
- package/dist/adapters/http/ui/serve.mjs.map +1 -1
- package/dist/app/index.mjs +11 -9
- package/dist/app/modules/authentication/repositories/session.d.ts +3 -2
- package/dist/app/modules/authentication/repositories/session.d.ts.map +1 -1
- package/dist/app/modules/authentication/repositories/session.mjs +8 -40
- package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
- package/dist/app/modules/components/module.d.ts.map +1 -1
- package/dist/app/modules/components/module.mjs +22 -2
- package/dist/app/modules/components/module.mjs.map +1 -1
- package/dist/app/modules/config/constants.d.ts +14 -4
- package/dist/app/modules/config/constants.d.ts.map +1 -1
- package/dist/app/modules/config/constants.mjs +14 -4
- package/dist/app/modules/config/constants.mjs.map +1 -1
- package/dist/app/modules/config/normalize.d.ts.map +1 -1
- package/dist/app/modules/config/normalize.mjs +30 -6
- package/dist/app/modules/config/normalize.mjs.map +1 -1
- package/dist/app/modules/config/read/env.d.ts.map +1 -1
- package/dist/app/modules/config/read/env.mjs +57 -8
- package/dist/app/modules/config/read/env.mjs.map +1 -1
- package/dist/app/modules/config/types.d.ts +101 -19
- package/dist/app/modules/config/types.d.ts.map +1 -1
- package/dist/app/modules/config/validator.d.ts.map +1 -1
- package/dist/app/modules/config/validator.mjs +16 -4
- package/dist/app/modules/config/validator.mjs.map +1 -1
- package/dist/app/modules/database/constants.d.ts +3 -0
- package/dist/app/modules/database/constants.d.ts.map +1 -1
- package/dist/app/modules/database/constants.mjs +3 -1
- package/dist/app/modules/database/constants.mjs.map +1 -1
- package/dist/app/modules/database/index.mjs +7 -6
- package/dist/app/modules/database/module.d.ts +1 -0
- package/dist/app/modules/database/module.d.ts.map +1 -1
- package/dist/app/modules/database/module.mjs +34 -1
- package/dist/app/modules/database/module.mjs.map +1 -1
- package/dist/app/modules/database/repositories/bindings.d.ts +2 -2
- package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/bindings.mjs +3 -3
- package/dist/app/modules/database/repositories/bindings.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client/repository.d.ts +3 -2
- package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/client/repository.mjs +10 -78
- package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client-permission/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/client-permission/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/client-permission/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/client-permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client-role/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/client-role/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/client-role/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/client-role/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client-scope/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/client-scope/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/client-scope/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/client-scope/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/event/index.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/event/index.mjs +5 -0
- package/dist/app/modules/database/repositories/event/repository.d.ts +16 -0
- package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/event/repository.mjs +74 -0
- package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -0
- package/dist/app/modules/database/repositories/helpers.d.ts +21 -5
- package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/helpers.mjs +46 -7
- package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs +6 -37
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/index.d.ts +4 -3
- package/dist/app/modules/database/repositories/index.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/index.mjs +9 -7
- package/dist/app/modules/database/repositories/key/index.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/key/index.mjs +5 -0
- package/dist/app/modules/database/repositories/key/repository.d.ts +51 -0
- package/dist/app/modules/database/repositories/key/repository.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/key/repository.mjs +239 -0
- package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -0
- package/dist/app/modules/database/repositories/permission/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/permission/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/permission/repository.mjs +5 -20
- package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/permission-policy/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/permission-policy/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/permission-policy/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/permission-policy/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/permission-provider/module.mjs +7 -7
- package/dist/app/modules/database/repositories/permission-provider/module.mjs.map +1 -1
- package/dist/app/modules/database/repositories/policy/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/policy/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/policy/repository.mjs +5 -39
- package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/query.d.ts +18 -0
- package/dist/app/modules/database/repositories/query.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/query.mjs +29 -0
- package/dist/app/modules/database/repositories/query.mjs.map +1 -0
- package/dist/app/modules/database/repositories/realm/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/realm/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/realm/repository.mjs +3 -25
- package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/role/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/role/repository.mjs +6 -30
- package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/role-attribute/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/role-attribute/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/role-attribute/repository.mjs +3 -19
- package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/role-permission/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/role-permission/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/role-permission/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/role-permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/schema-validation.d.ts +11 -0
- package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/schema-validation.mjs +77 -0
- package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -0
- package/dist/app/modules/database/repositories/scope/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/scope/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/scope/repository.mjs +5 -29
- package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/trust-anchor/index.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/trust-anchor/index.mjs +5 -0
- package/dist/app/modules/database/repositories/trust-anchor/repository.d.ts +25 -0
- package/dist/app/modules/database/repositories/trust-anchor/repository.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +89 -0
- package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -0
- package/dist/app/modules/database/repositories/user/repository.d.ts +3 -2
- package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/user/repository.mjs +9 -66
- package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user-attribute/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/user-attribute/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/user-attribute/repository.mjs +4 -20
- package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user-authenticator/index.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/user-authenticator/index.mjs +5 -0
- package/dist/app/modules/database/repositories/user-authenticator/repository.d.ts +20 -0
- package/dist/app/modules/database/repositories/user-authenticator/repository.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +66 -0
- package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -0
- package/dist/app/modules/database/repositories/user-permission/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/user-permission/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/user-permission/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/user-permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user-role/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/user-role/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/user-role/repository.mjs +3 -17
- package/dist/app/modules/database/repositories/user-role/repository.mjs.map +1 -1
- package/dist/app/modules/http/module.d.ts +8 -0
- package/dist/app/modules/http/module.d.ts.map +1 -1
- package/dist/app/modules/http/module.mjs +19 -1
- package/dist/app/modules/http/module.mjs.map +1 -1
- package/dist/app/modules/http/modules/controller.d.ts +16 -6
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +186 -67
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/http/modules/middleware.d.ts +1 -0
- package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
- package/dist/app/modules/http/modules/middleware.mjs +10 -5
- package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
- package/dist/app/modules/identity/index.mjs +1 -2
- package/dist/app/modules/identity/module.d.ts.map +1 -1
- package/dist/app/modules/identity/module.mjs +3 -14
- package/dist/app/modules/identity/module.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/client.mjs +2 -2
- package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/index.d.ts +0 -1
- package/dist/app/modules/identity/repositories/index.d.ts.map +1 -1
- package/dist/app/modules/identity/repositories/index.mjs +1 -2
- package/dist/app/modules/identity/repositories/provider/account/module.mjs +3 -3
- package/dist/app/modules/identity/repositories/provider/account/module.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/attribute.mjs +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/attribute.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/permission.mjs +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/permission.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/role.mjs +1 -1
- package/dist/app/modules/identity/repositories/provider/mapper/role.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/user.mjs +18 -18
- package/dist/app/modules/identity/repositories/user.mjs.map +1 -1
- package/dist/app/modules/index.d.ts +1 -0
- package/dist/app/modules/index.d.ts.map +1 -1
- package/dist/app/modules/index.mjs +13 -10
- package/dist/app/modules/mail/module.d.ts.map +1 -1
- package/dist/app/modules/mail/module.mjs +2 -1
- package/dist/app/modules/mail/module.mjs.map +1 -1
- package/dist/app/modules/metrics/constants.d.ts +4 -0
- package/dist/app/modules/metrics/constants.d.ts.map +1 -0
- package/dist/app/modules/metrics/constants.mjs +10 -0
- package/dist/app/modules/metrics/constants.mjs.map +1 -0
- package/dist/app/modules/metrics/index.d.ts +3 -0
- package/dist/app/modules/metrics/index.d.ts.map +1 -0
- package/dist/app/modules/metrics/index.mjs +6 -0
- package/dist/app/modules/metrics/prom.d.ts +15 -0
- package/dist/app/modules/metrics/prom.d.ts.map +1 -0
- package/dist/app/modules/metrics/prom.mjs +42 -0
- package/dist/app/modules/metrics/prom.mjs.map +1 -0
- package/dist/app/modules/oauth2/constants.d.ts +9 -2
- package/dist/app/modules/oauth2/constants.d.ts.map +1 -1
- package/dist/app/modules/oauth2/constants.mjs +7 -1
- package/dist/app/modules/oauth2/constants.mjs.map +1 -1
- package/dist/app/modules/oauth2/module.d.ts.map +1 -1
- package/dist/app/modules/oauth2/module.mjs +23 -4
- package/dist/app/modules/oauth2/module.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/client/repository.mjs +1 -1
- package/dist/app/modules/oauth2/repositories/client/repository.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/consent/index.d.ts +2 -0
- package/dist/app/modules/oauth2/repositories/consent/index.d.ts.map +1 -0
- package/dist/app/modules/oauth2/repositories/consent/index.mjs +5 -0
- package/dist/app/modules/oauth2/repositories/consent/repository.d.ts +21 -0
- package/dist/app/modules/oauth2/repositories/consent/repository.d.ts.map +1 -0
- package/dist/app/modules/oauth2/repositories/consent/repository.mjs +92 -0
- package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -0
- package/dist/app/modules/oauth2/repositories/index.d.ts +1 -1
- package/dist/app/modules/oauth2/repositories/index.d.ts.map +1 -1
- package/dist/app/modules/oauth2/repositories/index.mjs +3 -3
- package/dist/app/modules/oauth2/repositories/scope/repository.mjs +1 -1
- package/dist/app/modules/oauth2/repositories/scope/repository.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +21 -18
- package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/token/repository.d.ts +1 -0
- package/dist/app/modules/oauth2/repositories/token/repository.d.ts.map +1 -1
- package/dist/app/modules/oauth2/repositories/token/repository.mjs +8 -0
- package/dist/app/modules/oauth2/repositories/token/repository.mjs.map +1 -1
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +25 -29
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/composite/module.d.ts +17 -0
- package/dist/app/modules/provisioning/sources/composite/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/composite/module.mjs +54 -2
- package/dist/app/modules/provisioning/sources/composite/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.mjs +54 -74
- package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/file/module.mjs +16 -5
- package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/file/types.d.ts +2 -0
- package/dist/app/modules/provisioning/sources/file/types.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/index.mjs +1 -0
- package/dist/components/database/unique-entries/module.mjs +6 -6
- package/dist/components/database/unique-entries/module.mjs.map +1 -1
- package/dist/components/event-cleaner/index.d.ts +2 -0
- package/dist/components/event-cleaner/index.d.ts.map +1 -0
- package/dist/components/event-cleaner/index.mjs +5 -0
- package/dist/components/event-cleaner/module.d.ts +5 -0
- package/dist/components/event-cleaner/module.d.ts.map +1 -0
- package/dist/components/event-cleaner/module.mjs +30 -0
- package/dist/components/event-cleaner/module.mjs.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.mjs +3 -1
- package/dist/components/oauth2-cleaner/module.d.ts +2 -1
- package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
- package/dist/components/oauth2-cleaner/module.mjs +9 -4
- package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
- package/dist/core/authentication/credential/entities/client/module.d.ts +2 -2
- package/dist/core/authentication/credential/entities/client/module.d.ts.map +1 -1
- package/dist/core/authentication/credential/entities/client/module.mjs +4 -3
- package/dist/core/authentication/credential/entities/client/module.mjs.map +1 -1
- package/dist/core/authentication/credential/entities/index.d.ts +0 -1
- package/dist/core/authentication/credential/entities/index.d.ts.map +1 -1
- package/dist/core/authentication/credential/entities/index.mjs +1 -3
- package/dist/core/authentication/credential/index.mjs +1 -2
- package/dist/core/authentication/entities/client/module.mjs +2 -2
- package/dist/core/authentication/entities/client/module.mjs.map +1 -1
- package/dist/core/authentication/entities/index.d.ts +0 -1
- package/dist/core/authentication/entities/index.d.ts.map +1 -1
- package/dist/core/authentication/entities/index.mjs +1 -3
- package/dist/core/authentication/index.d.ts +1 -0
- package/dist/core/authentication/index.d.ts.map +1 -1
- package/dist/core/authentication/index.mjs +3 -3
- package/dist/core/authentication/login-throttle/index.d.ts.map +1 -0
- package/dist/core/authentication/login-throttle/index.mjs +5 -0
- package/dist/core/authentication/login-throttle/service.d.ts +13 -0
- package/dist/core/authentication/login-throttle/service.d.ts.map +1 -0
- package/dist/core/authentication/login-throttle/service.mjs +33 -0
- package/dist/core/authentication/login-throttle/service.mjs.map +1 -0
- package/dist/core/authentication/login-throttle/types.d.ts +34 -0
- package/dist/core/authentication/login-throttle/types.d.ts.map +1 -0
- package/dist/core/authentication/session/module.d.ts +1 -0
- package/dist/core/authentication/session/module.d.ts.map +1 -1
- package/dist/core/authentication/session/module.mjs +17 -16
- package/dist/core/authentication/session/module.mjs.map +1 -1
- package/dist/core/authentication/session/types.d.ts +12 -5
- package/dist/core/authentication/session/types.d.ts.map +1 -1
- package/dist/core/authentication/session/types.mjs +4 -5
- package/dist/core/authentication/session/types.mjs.map +1 -1
- package/dist/core/client-certificate/index.d.ts.map +1 -0
- package/dist/core/client-certificate/index.mjs +5 -0
- package/dist/core/client-certificate/module.d.ts +19 -0
- package/dist/core/client-certificate/module.d.ts.map +1 -0
- package/dist/core/client-certificate/module.mjs +196 -0
- package/dist/core/client-certificate/module.mjs.map +1 -0
- package/dist/core/client-certificate/reflect.d.ts +2 -0
- package/dist/core/client-certificate/reflect.d.ts.map +1 -0
- package/dist/core/client-certificate/reflect.mjs +5 -0
- package/dist/core/client-certificate/types.d.ts +22 -0
- package/dist/core/client-certificate/types.d.ts.map +1 -0
- package/dist/core/entities/client/index.d.ts +1 -0
- package/dist/core/entities/client/index.d.ts.map +1 -1
- package/dist/core/entities/client/index.mjs +2 -1
- package/dist/core/entities/client/schema.d.ts +3 -0
- package/dist/core/entities/client/schema.d.ts.map +1 -0
- package/dist/core/entities/client/schema.mjs +59 -0
- package/dist/core/entities/client/schema.mjs.map +1 -0
- package/dist/core/entities/client/service.d.ts.map +1 -1
- package/dist/core/entities/client/service.mjs +50 -19
- package/dist/core/entities/client/service.mjs.map +1 -1
- package/dist/core/entities/client/types.d.ts +2 -1
- package/dist/core/entities/client/types.d.ts.map +1 -1
- package/dist/core/entities/client/web-client.d.ts +4 -4
- package/dist/core/entities/client/web-client.d.ts.map +1 -1
- package/dist/core/entities/client/web-client.mjs +14 -13
- package/dist/core/entities/client/web-client.mjs.map +1 -1
- package/dist/core/entities/client-permission/index.d.ts +1 -0
- package/dist/core/entities/client-permission/index.d.ts.map +1 -1
- package/dist/core/entities/client-permission/index.mjs +2 -1
- package/dist/core/entities/client-permission/schema.d.ts +3 -0
- package/dist/core/entities/client-permission/schema.d.ts.map +1 -0
- package/dist/core/entities/client-permission/schema.mjs +41 -0
- package/dist/core/entities/client-permission/schema.mjs.map +1 -0
- package/dist/core/entities/client-permission/service.d.ts +1 -1
- package/dist/core/entities/client-permission/service.d.ts.map +1 -1
- package/dist/core/entities/client-permission/service.mjs +24 -18
- package/dist/core/entities/client-permission/service.mjs.map +1 -1
- package/dist/core/entities/client-role/index.d.ts +1 -0
- package/dist/core/entities/client-role/index.d.ts.map +1 -1
- package/dist/core/entities/client-role/index.mjs +2 -1
- package/dist/core/entities/client-role/schema.d.ts +3 -0
- package/dist/core/entities/client-role/schema.d.ts.map +1 -0
- package/dist/core/entities/client-role/schema.mjs +39 -0
- package/dist/core/entities/client-role/schema.mjs.map +1 -0
- package/dist/core/entities/client-role/service.d.ts +1 -1
- package/dist/core/entities/client-role/service.d.ts.map +1 -1
- package/dist/core/entities/client-role/service.mjs +14 -8
- package/dist/core/entities/client-role/service.mjs.map +1 -1
- package/dist/core/entities/client-scope/index.d.ts +1 -0
- package/dist/core/entities/client-scope/index.d.ts.map +1 -1
- package/dist/core/entities/client-scope/index.mjs +2 -1
- package/dist/core/entities/client-scope/schema.d.ts +3 -0
- package/dist/core/entities/client-scope/schema.d.ts.map +1 -0
- package/dist/core/entities/client-scope/schema.mjs +37 -0
- package/dist/core/entities/client-scope/schema.mjs.map +1 -0
- package/dist/core/entities/client-scope/service.d.ts +1 -1
- package/dist/core/entities/client-scope/service.d.ts.map +1 -1
- package/dist/core/entities/client-scope/service.mjs +12 -6
- package/dist/core/entities/client-scope/service.mjs.map +1 -1
- package/dist/core/entities/consent/index.d.ts +4 -0
- package/dist/core/entities/consent/index.d.ts.map +1 -0
- package/dist/core/entities/consent/index.mjs +7 -0
- package/dist/core/entities/consent/schema.d.ts +3 -0
- package/dist/core/entities/consent/schema.d.ts.map +1 -0
- package/dist/core/entities/consent/schema.mjs +40 -0
- package/dist/core/entities/consent/schema.mjs.map +1 -0
- package/dist/core/entities/consent/service.d.ts +19 -0
- package/dist/core/entities/consent/service.d.ts.map +1 -0
- package/dist/core/entities/consent/service.mjs +138 -0
- package/dist/core/entities/consent/service.mjs.map +1 -0
- package/dist/core/entities/consent/types.d.ts +98 -0
- package/dist/core/entities/consent/types.d.ts.map +1 -0
- package/dist/core/entities/consent/types.mjs +25 -0
- package/dist/core/entities/consent/types.mjs.map +1 -0
- package/dist/core/entities/event/constants.d.ts +7 -0
- package/dist/core/entities/event/constants.d.ts.map +1 -0
- package/dist/core/entities/event/constants.mjs +13 -0
- package/dist/core/entities/event/constants.mjs.map +1 -0
- package/dist/core/entities/event/diff.d.ts +20 -0
- package/dist/core/entities/event/diff.d.ts.map +1 -0
- package/dist/core/entities/event/diff.mjs +45 -0
- package/dist/core/entities/event/diff.mjs.map +1 -0
- package/dist/core/entities/event/entity-event-handler.d.ts +19 -0
- package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -0
- package/dist/core/entities/event/entity-event-handler.mjs +98 -0
- package/dist/core/entities/event/entity-event-handler.mjs.map +1 -0
- package/dist/core/entities/event/index.d.ts +8 -0
- package/dist/core/entities/event/index.d.ts.map +1 -0
- package/dist/core/entities/event/index.mjs +10 -0
- package/dist/core/entities/event/sanitize.d.ts +2 -0
- package/dist/core/entities/event/sanitize.d.ts.map +1 -0
- package/dist/core/entities/event/sanitize.mjs +83 -0
- package/dist/core/entities/event/sanitize.mjs.map +1 -0
- package/dist/core/entities/event/schema.d.ts +3 -0
- package/dist/core/entities/event/schema.d.ts.map +1 -0
- package/dist/core/entities/event/schema.mjs +51 -0
- package/dist/core/entities/event/schema.mjs.map +1 -0
- package/dist/core/entities/event/service.d.ts +22 -0
- package/dist/core/entities/event/service.d.ts.map +1 -0
- package/dist/core/entities/event/service.mjs +185 -0
- package/dist/core/entities/event/service.mjs.map +1 -0
- package/dist/core/entities/event/types.d.ts +125 -0
- package/dist/core/entities/event/types.d.ts.map +1 -0
- package/dist/core/entities/identity-provider/index.d.ts +1 -0
- package/dist/core/entities/identity-provider/index.d.ts.map +1 -1
- package/dist/core/entities/identity-provider/index.mjs +2 -1
- package/dist/core/entities/identity-provider/schema.d.ts +3 -0
- package/dist/core/entities/identity-provider/schema.d.ts.map +1 -0
- package/dist/core/entities/identity-provider/schema.mjs +43 -0
- package/dist/core/entities/identity-provider/schema.mjs.map +1 -0
- package/dist/core/entities/identity-provider-role-mapping/index.d.ts +1 -0
- package/dist/core/entities/identity-provider-role-mapping/index.d.ts.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/index.mjs +2 -1
- package/dist/core/entities/identity-provider-role-mapping/schema.d.ts +3 -0
- package/dist/core/entities/identity-provider-role-mapping/schema.d.ts.map +1 -0
- package/dist/core/entities/identity-provider-role-mapping/schema.mjs +43 -0
- package/dist/core/entities/identity-provider-role-mapping/schema.mjs.map +1 -0
- package/dist/core/entities/identity-provider-role-mapping/service.d.ts +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.mjs +18 -12
- package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
- package/dist/core/entities/index.d.ts +5 -3
- package/dist/core/entities/index.d.ts.map +1 -1
- package/dist/core/entities/index.mjs +45 -7
- package/dist/core/entities/key/index.d.ts +4 -0
- package/dist/core/entities/key/index.d.ts.map +1 -0
- package/dist/core/entities/key/index.mjs +6 -0
- package/dist/core/entities/key/schema.d.ts +3 -0
- package/dist/core/entities/key/schema.d.ts.map +1 -0
- package/dist/core/entities/key/schema.mjs +53 -0
- package/dist/core/entities/key/schema.mjs.map +1 -0
- package/dist/core/entities/key/service.d.ts +55 -0
- package/dist/core/entities/key/service.d.ts.map +1 -0
- package/dist/core/entities/key/service.mjs +320 -0
- package/dist/core/entities/key/service.mjs.map +1 -0
- package/dist/core/entities/key/types.d.ts +41 -0
- package/dist/core/entities/key/types.d.ts.map +1 -0
- package/dist/core/entities/permission/index.d.ts +1 -0
- package/dist/core/entities/permission/index.d.ts.map +1 -1
- package/dist/core/entities/permission/index.mjs +2 -1
- package/dist/core/entities/permission/schema.d.ts +3 -0
- package/dist/core/entities/permission/schema.d.ts.map +1 -0
- package/dist/core/entities/permission/schema.mjs +28 -0
- package/dist/core/entities/permission/schema.mjs.map +1 -0
- package/dist/core/entities/permission/service.d.ts +7 -2
- package/dist/core/entities/permission/service.d.ts.map +1 -1
- package/dist/core/entities/permission/service.mjs +54 -41
- package/dist/core/entities/permission/service.mjs.map +1 -1
- package/dist/core/entities/permission-policy/index.d.ts +1 -0
- package/dist/core/entities/permission-policy/index.d.ts.map +1 -1
- package/dist/core/entities/permission-policy/index.mjs +2 -1
- package/dist/core/entities/permission-policy/schema.d.ts +3 -0
- package/dist/core/entities/permission-policy/schema.d.ts.map +1 -0
- package/dist/core/entities/permission-policy/schema.mjs +39 -0
- package/dist/core/entities/permission-policy/schema.mjs.map +1 -0
- package/dist/core/entities/permission-policy/service.d.ts +1 -1
- package/dist/core/entities/permission-policy/service.d.ts.map +1 -1
- package/dist/core/entities/permission-policy/service.mjs +12 -6
- package/dist/core/entities/permission-policy/service.mjs.map +1 -1
- package/dist/core/entities/policy/index.d.ts +1 -0
- package/dist/core/entities/policy/index.d.ts.map +1 -1
- package/dist/core/entities/policy/index.mjs +2 -1
- package/dist/core/entities/policy/schema.d.ts +3 -0
- package/dist/core/entities/policy/schema.d.ts.map +1 -0
- package/dist/core/entities/policy/schema.mjs +49 -0
- package/dist/core/entities/policy/schema.mjs.map +1 -0
- package/dist/core/entities/policy/service.d.ts.map +1 -1
- package/dist/core/entities/policy/service.mjs +15 -9
- package/dist/core/entities/policy/service.mjs.map +1 -1
- package/dist/core/entities/realm/index.d.ts +1 -0
- package/dist/core/entities/realm/index.d.ts.map +1 -1
- package/dist/core/entities/realm/index.mjs +2 -1
- package/dist/core/entities/realm/schema.d.ts +3 -0
- package/dist/core/entities/realm/schema.d.ts.map +1 -0
- package/dist/core/entities/realm/schema.mjs +36 -0
- package/dist/core/entities/realm/schema.mjs.map +1 -0
- package/dist/core/entities/realm/service.d.ts +3 -0
- package/dist/core/entities/realm/service.d.ts.map +1 -1
- package/dist/core/entities/realm/service.mjs +10 -4
- package/dist/core/entities/realm/service.mjs.map +1 -1
- package/dist/core/entities/realm/types.d.ts +1 -1
- package/dist/core/entities/role/index.d.ts +1 -0
- package/dist/core/entities/role/index.d.ts.map +1 -1
- package/dist/core/entities/role/index.mjs +2 -1
- package/dist/core/entities/role/schema.d.ts +3 -0
- package/dist/core/entities/role/schema.d.ts.map +1 -0
- package/dist/core/entities/role/schema.mjs +43 -0
- package/dist/core/entities/role/schema.mjs.map +1 -0
- package/dist/core/entities/role/service.d.ts.map +1 -1
- package/dist/core/entities/role/service.mjs +13 -7
- package/dist/core/entities/role/service.mjs.map +1 -1
- package/dist/core/entities/role-attribute/index.d.ts +1 -0
- package/dist/core/entities/role-attribute/index.d.ts.map +1 -1
- package/dist/core/entities/role-attribute/index.mjs +2 -1
- package/dist/core/entities/role-attribute/schema.d.ts +3 -0
- package/dist/core/entities/role-attribute/schema.d.ts.map +1 -0
- package/dist/core/entities/role-attribute/schema.mjs +47 -0
- package/dist/core/entities/role-attribute/schema.mjs.map +1 -0
- package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/role-attribute/service.mjs +22 -9
- package/dist/core/entities/role-attribute/service.mjs.map +1 -1
- package/dist/core/entities/role-permission/index.d.ts +1 -0
- package/dist/core/entities/role-permission/index.d.ts.map +1 -1
- package/dist/core/entities/role-permission/index.mjs +2 -1
- package/dist/core/entities/role-permission/schema.d.ts +3 -0
- package/dist/core/entities/role-permission/schema.d.ts.map +1 -0
- package/dist/core/entities/role-permission/schema.mjs +41 -0
- package/dist/core/entities/role-permission/schema.mjs.map +1 -0
- package/dist/core/entities/role-permission/service.d.ts +1 -1
- package/dist/core/entities/role-permission/service.d.ts.map +1 -1
- package/dist/core/entities/role-permission/service.mjs +24 -18
- package/dist/core/entities/role-permission/service.mjs.map +1 -1
- package/dist/core/entities/scope/index.d.ts +1 -0
- package/dist/core/entities/scope/index.d.ts.map +1 -1
- package/dist/core/entities/scope/index.mjs +2 -1
- package/dist/core/entities/scope/schema.d.ts +3 -0
- package/dist/core/entities/scope/schema.d.ts.map +1 -0
- package/dist/core/entities/scope/schema.mjs +43 -0
- package/dist/core/entities/scope/schema.mjs.map +1 -0
- package/dist/core/entities/scope/service.d.ts.map +1 -1
- package/dist/core/entities/scope/service.mjs +11 -5
- package/dist/core/entities/scope/service.mjs.map +1 -1
- package/dist/core/entities/session/index.d.ts +1 -0
- package/dist/core/entities/session/index.d.ts.map +1 -1
- package/dist/core/entities/session/index.mjs +2 -1
- package/dist/core/entities/session/schema.d.ts +3 -0
- package/dist/core/entities/session/schema.d.ts.map +1 -0
- package/dist/core/entities/session/schema.mjs +44 -0
- package/dist/core/entities/session/schema.mjs.map +1 -0
- package/dist/core/entities/session/service.d.ts +11 -0
- package/dist/core/entities/session/service.d.ts.map +1 -1
- package/dist/core/entities/session/service.mjs +53 -13
- package/dist/core/entities/session/service.mjs.map +1 -1
- package/dist/core/entities/session/types.d.ts +2 -2
- package/dist/core/entities/trust-anchor/index.d.ts +4 -0
- package/dist/core/entities/trust-anchor/index.d.ts.map +1 -0
- package/dist/core/entities/trust-anchor/index.mjs +6 -0
- package/dist/core/entities/trust-anchor/schema.d.ts +3 -0
- package/dist/core/entities/trust-anchor/schema.d.ts.map +1 -0
- package/dist/core/entities/trust-anchor/schema.mjs +43 -0
- package/dist/core/entities/trust-anchor/schema.mjs.map +1 -0
- package/dist/core/entities/trust-anchor/service.d.ts +33 -0
- package/dist/core/entities/trust-anchor/service.d.ts.map +1 -0
- package/dist/core/entities/trust-anchor/service.mjs +191 -0
- package/dist/core/entities/trust-anchor/service.mjs.map +1 -0
- package/dist/core/entities/trust-anchor/types.d.ts +22 -0
- package/dist/core/entities/trust-anchor/types.d.ts.map +1 -0
- package/dist/core/entities/user/index.d.ts +1 -0
- package/dist/core/entities/user/index.d.ts.map +1 -1
- package/dist/core/entities/user/index.mjs +2 -1
- package/dist/core/entities/user/schema.d.ts +3 -0
- package/dist/core/entities/user/schema.d.ts.map +1 -0
- package/dist/core/entities/user/schema.mjs +50 -0
- package/dist/core/entities/user/schema.mjs.map +1 -0
- package/dist/core/entities/user/service.d.ts.map +1 -1
- package/dist/core/entities/user/service.mjs +35 -14
- package/dist/core/entities/user/service.mjs.map +1 -1
- package/dist/core/entities/user/types.d.ts +2 -1
- package/dist/core/entities/user/types.d.ts.map +1 -1
- package/dist/core/entities/user-attribute/index.d.ts +1 -0
- package/dist/core/entities/user-attribute/index.d.ts.map +1 -1
- package/dist/core/entities/user-attribute/index.mjs +2 -1
- package/dist/core/entities/user-attribute/schema.d.ts +3 -0
- package/dist/core/entities/user-attribute/schema.d.ts.map +1 -0
- package/dist/core/entities/user-attribute/schema.mjs +47 -0
- package/dist/core/entities/user-attribute/schema.mjs.map +1 -0
- package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/user-attribute/service.mjs +29 -13
- package/dist/core/entities/user-attribute/service.mjs.map +1 -1
- package/dist/core/entities/user-authenticator/constants.d.ts +26 -0
- package/dist/core/entities/user-authenticator/constants.d.ts.map +1 -0
- package/dist/core/entities/user-authenticator/constants.mjs +32 -0
- package/dist/core/entities/user-authenticator/constants.mjs.map +1 -0
- package/dist/core/entities/user-authenticator/helpers.d.ts +10 -0
- package/dist/core/entities/user-authenticator/helpers.d.ts.map +1 -0
- package/dist/core/entities/user-authenticator/helpers.mjs +35 -0
- package/dist/core/entities/user-authenticator/helpers.mjs.map +1 -0
- package/dist/core/entities/user-authenticator/index.d.ts +7 -0
- package/dist/core/entities/user-authenticator/index.d.ts.map +1 -0
- package/dist/core/entities/user-authenticator/index.mjs +10 -0
- package/dist/core/entities/user-authenticator/schema.d.ts +3 -0
- package/dist/core/entities/user-authenticator/schema.d.ts.map +1 -0
- package/dist/core/entities/user-authenticator/schema.mjs +47 -0
- package/dist/core/entities/user-authenticator/schema.mjs.map +1 -0
- package/dist/core/entities/user-authenticator/service.d.ts +89 -0
- package/dist/core/entities/user-authenticator/service.d.ts.map +1 -0
- package/dist/core/entities/user-authenticator/service.mjs +731 -0
- package/dist/core/entities/user-authenticator/service.mjs.map +1 -0
- package/dist/core/entities/user-authenticator/types.d.ts +222 -0
- package/dist/core/entities/user-authenticator/types.d.ts.map +1 -0
- package/dist/core/entities/user-authenticator/types.mjs +15 -0
- package/dist/core/entities/user-authenticator/types.mjs.map +1 -0
- package/dist/core/entities/user-authenticator/webauthn.d.ts +28 -0
- package/dist/core/entities/user-authenticator/webauthn.d.ts.map +1 -0
- package/dist/core/entities/user-authenticator/webauthn.mjs +88 -0
- package/dist/core/entities/user-authenticator/webauthn.mjs.map +1 -0
- package/dist/core/entities/user-permission/index.d.ts +1 -0
- package/dist/core/entities/user-permission/index.d.ts.map +1 -1
- package/dist/core/entities/user-permission/index.mjs +2 -1
- package/dist/core/entities/user-permission/schema.d.ts +3 -0
- package/dist/core/entities/user-permission/schema.d.ts.map +1 -0
- package/dist/core/entities/user-permission/schema.mjs +41 -0
- package/dist/core/entities/user-permission/schema.mjs.map +1 -0
- package/dist/core/entities/user-permission/service.d.ts +1 -1
- package/dist/core/entities/user-permission/service.d.ts.map +1 -1
- package/dist/core/entities/user-permission/service.mjs +24 -18
- package/dist/core/entities/user-permission/service.mjs.map +1 -1
- package/dist/core/entities/user-role/index.d.ts +1 -0
- package/dist/core/entities/user-role/index.d.ts.map +1 -1
- package/dist/core/entities/user-role/index.mjs +2 -1
- package/dist/core/entities/user-role/schema.d.ts +3 -0
- package/dist/core/entities/user-role/schema.d.ts.map +1 -0
- package/dist/core/entities/user-role/schema.mjs +39 -0
- package/dist/core/entities/user-role/schema.mjs.map +1 -0
- package/dist/core/entities/user-role/service.d.ts +1 -1
- package/dist/core/entities/user-role/service.d.ts.map +1 -1
- package/dist/core/entities/user-role/service.mjs +14 -8
- package/dist/core/entities/user-role/service.mjs.map +1 -1
- package/dist/core/identity/entities/index.d.ts +0 -1
- package/dist/core/identity/entities/index.d.ts.map +1 -1
- package/dist/core/identity/index.mjs +2 -1
- package/dist/core/identity/password-recovery/disabled.d.ts +2 -2
- package/dist/core/identity/password-recovery/disabled.d.ts.map +1 -1
- package/dist/core/identity/password-recovery/disabled.mjs +2 -2
- package/dist/core/identity/password-recovery/disabled.mjs.map +1 -1
- package/dist/core/identity/password-recovery/email-verification-required.d.ts +2 -2
- package/dist/core/identity/password-recovery/email-verification-required.d.ts.map +1 -1
- package/dist/core/identity/password-recovery/email-verification-required.mjs +2 -2
- package/dist/core/identity/password-recovery/email-verification-required.mjs.map +1 -1
- package/dist/core/identity/password-recovery/service.d.ts +2 -1
- package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
- package/dist/core/identity/password-recovery/service.mjs +45 -23
- package/dist/core/identity/password-recovery/service.mjs.map +1 -1
- package/dist/core/identity/password-recovery/token-expired.d.ts +2 -2
- package/dist/core/identity/password-recovery/token-expired.d.ts.map +1 -1
- package/dist/core/identity/password-recovery/token-expired.mjs +2 -2
- package/dist/core/identity/password-recovery/token-expired.mjs.map +1 -1
- package/dist/core/identity/password-recovery/types.d.ts +4 -3
- package/dist/core/identity/password-recovery/types.d.ts.map +1 -1
- package/dist/core/identity/permission/checker/service.mjs +2 -2
- package/dist/core/identity/permission/checker/service.mjs.map +1 -1
- package/dist/core/identity/permission/identity-policy-data.mjs +2 -2
- package/dist/core/identity/permission/identity-policy-data.mjs.map +1 -1
- package/dist/core/identity/permission/index.d.ts +1 -0
- package/dist/core/identity/permission/index.d.ts.map +1 -1
- package/dist/core/identity/permission/index.mjs +2 -1
- package/dist/core/identity/permission/junction-grant.d.ts +6 -6
- package/dist/core/identity/permission/junction-grant.mjs +14 -14
- package/dist/core/identity/permission/junction-grant.mjs.map +1 -1
- package/dist/core/identity/permission/module.d.ts +0 -3
- package/dist/core/identity/permission/module.d.ts.map +1 -1
- package/dist/core/identity/permission/module.mjs +9 -15
- package/dist/core/identity/permission/module.mjs.map +1 -1
- package/dist/core/identity/permission/types.d.ts +0 -2
- package/dist/core/identity/permission/types.d.ts.map +1 -1
- package/dist/core/identity/policy/checker/service.mjs +2 -2
- package/dist/core/identity/policy/checker/service.mjs.map +1 -1
- package/dist/core/identity/provider/account/module.mjs +9 -9
- package/dist/core/identity/provider/account/module.mjs.map +1 -1
- package/dist/core/identity/provider/authentication/presets/facebook.mjs +5 -5
- package/dist/core/identity/provider/authentication/presets/facebook.mjs.map +1 -1
- package/dist/core/identity/provider/authentication/presets/github.mjs +3 -3
- package/dist/core/identity/provider/authentication/presets/github.mjs.map +1 -1
- package/dist/core/identity/provider/authentication/presets/google.mjs +5 -5
- package/dist/core/identity/provider/authentication/presets/google.mjs.map +1 -1
- package/dist/core/identity/provider/authentication/presets/instagram.mjs +3 -3
- package/dist/core/identity/provider/authentication/presets/instagram.mjs.map +1 -1
- package/dist/core/identity/provider/authentication/presets/paypal.mjs +3 -3
- package/dist/core/identity/provider/authentication/presets/paypal.mjs.map +1 -1
- package/dist/core/identity/provider/authentication/protocols/ldap/module.mjs +20 -20
- package/dist/core/identity/provider/authentication/protocols/ldap/module.mjs.map +1 -1
- package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +7 -7
- package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
- package/dist/core/identity/provider/mapper/attributes/module.mjs +3 -3
- package/dist/core/identity/provider/mapper/attributes/module.mjs.map +1 -1
- package/dist/core/identity/provider/mapper/base.mjs +2 -2
- package/dist/core/identity/provider/mapper/base.mjs.map +1 -1
- package/dist/core/identity/provider/mapper/permission/module.mjs +2 -2
- package/dist/core/identity/provider/mapper/permission/module.mjs.map +1 -1
- package/dist/core/identity/provider/mapper/role/module.mjs +2 -2
- package/dist/core/identity/provider/mapper/role/module.mjs.map +1 -1
- package/dist/core/identity/registration/error.d.ts +2 -2
- package/dist/core/identity/registration/error.d.ts.map +1 -1
- package/dist/core/identity/registration/error.mjs +2 -2
- package/dist/core/identity/registration/error.mjs.map +1 -1
- package/dist/core/identity/registration/service.d.ts +2 -1
- package/dist/core/identity/registration/service.d.ts.map +1 -1
- package/dist/core/identity/registration/service.mjs +33 -11
- package/dist/core/identity/registration/service.mjs.map +1 -1
- package/dist/core/identity/registration/types.d.ts +2 -1
- package/dist/core/identity/registration/types.d.ts.map +1 -1
- package/dist/core/identity/resolver/module.d.ts +1 -3
- package/dist/core/identity/resolver/module.d.ts.map +1 -1
- package/dist/core/identity/resolver/module.mjs +0 -13
- package/dist/core/identity/resolver/module.mjs.map +1 -1
- package/dist/core/identity/resolver/types.d.ts +1 -2
- package/dist/core/identity/resolver/types.d.ts.map +1 -1
- package/dist/core/identity/role/module.d.ts +0 -2
- package/dist/core/identity/role/module.d.ts.map +1 -1
- package/dist/core/identity/role/module.mjs +1 -4
- package/dist/core/identity/role/module.mjs.map +1 -1
- package/dist/core/identity/role/types.d.ts +0 -2
- package/dist/core/identity/role/types.d.ts.map +1 -1
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.mjs +66 -16
- package/dist/core/key/certificate-error.d.ts +10 -0
- package/dist/core/key/certificate-error.d.ts.map +1 -0
- package/dist/core/key/certificate-error.mjs +19 -0
- package/dist/core/key/certificate-error.mjs.map +1 -0
- package/dist/core/key/certificate.d.ts +15 -0
- package/dist/core/key/certificate.d.ts.map +1 -0
- package/dist/core/key/certificate.mjs +72 -0
- package/dist/core/key/certificate.mjs.map +1 -0
- package/dist/core/key/check.d.ts +3 -0
- package/dist/core/key/check.d.ts.map +1 -0
- package/dist/core/key/check.mjs +13 -0
- package/dist/core/key/check.mjs.map +1 -0
- package/dist/core/key/constants.d.ts +10 -0
- package/dist/core/key/constants.d.ts.map +1 -0
- package/dist/core/key/constants.mjs +15 -0
- package/dist/core/key/constants.mjs.map +1 -0
- package/dist/core/key/error.d.ts +14 -0
- package/dist/core/key/error.d.ts.map +1 -0
- package/dist/core/key/error.mjs +23 -0
- package/dist/core/key/error.mjs.map +1 -0
- package/dist/core/key/index.d.ts +10 -0
- package/dist/core/key/index.d.ts.map +1 -0
- package/dist/core/key/index.mjs +12 -0
- package/dist/core/key/provisioner.d.ts +22 -0
- package/dist/core/key/provisioner.d.ts.map +1 -0
- package/dist/core/key/provisioner.mjs +30 -0
- package/dist/core/key/provisioner.mjs.map +1 -0
- package/dist/core/key/realm-cipher.d.ts +20 -0
- package/dist/core/key/realm-cipher.d.ts.map +1 -0
- package/dist/core/key/realm-cipher.mjs +60 -0
- package/dist/core/key/realm-cipher.mjs.map +1 -0
- package/dist/core/key/types.d.ts +59 -0
- package/dist/core/key/types.d.ts.map +1 -0
- package/dist/core/key/wrap.d.ts +5 -0
- package/dist/core/key/wrap.d.ts.map +1 -0
- package/dist/core/key/wrap.mjs +21 -0
- package/dist/core/key/wrap.mjs.map +1 -0
- package/dist/core/mail/template/registry.d.ts.map +1 -1
- package/dist/core/mail/template/registry.mjs +3 -1
- package/dist/core/mail/template/registry.mjs.map +1 -1
- package/dist/core/mail/template/templates/mfa-email-otp.d.ts +3 -0
- package/dist/core/mail/template/templates/mfa-email-otp.d.ts.map +1 -0
- package/dist/core/mail/template/templates/mfa-email-otp.mjs +34 -0
- package/dist/core/mail/template/templates/mfa-email-otp.mjs.map +1 -0
- package/dist/core/mail/template/types.d.ts +6 -1
- package/dist/core/mail/template/types.d.ts.map +1 -1
- package/dist/core/mail/template/types.mjs +1 -0
- package/dist/core/mail/template/types.mjs.map +1 -1
- package/dist/core/metrics/index.d.ts +3 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.mjs +5 -0
- package/dist/core/metrics/noop.d.ts +8 -0
- package/dist/core/metrics/noop.d.ts.map +1 -0
- package/dist/core/metrics/noop.mjs +14 -0
- package/dist/core/metrics/noop.mjs.map +1 -0
- package/dist/core/metrics/types.d.ts +19 -0
- package/dist/core/metrics/types.d.ts.map +1 -0
- package/dist/core/oauth2/access-policy/index.d.ts +3 -0
- package/dist/core/oauth2/access-policy/index.d.ts.map +1 -0
- package/dist/core/oauth2/access-policy/index.mjs +5 -0
- package/dist/core/oauth2/access-policy/module.d.ts +12 -0
- package/dist/core/oauth2/access-policy/module.d.ts.map +1 -0
- package/dist/core/oauth2/access-policy/module.mjs +32 -0
- package/dist/core/oauth2/access-policy/module.mjs.map +1 -0
- package/dist/core/oauth2/access-policy/types.d.ts +19 -0
- package/dist/core/oauth2/access-policy/types.d.ts.map +1 -0
- package/dist/core/oauth2/authorization/code/issuer/module.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code/issuer/module.mjs +2 -0
- package/dist/core/oauth2/authorization/code/issuer/module.mjs.map +1 -1
- package/dist/core/oauth2/authorization/code/issuer/types.d.ts +6 -1
- package/dist/core/oauth2/authorization/code/issuer/types.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
- package/dist/core/oauth2/authorization/code-request/validator.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code-request/validator.mjs +1 -0
- package/dist/core/oauth2/authorization/code-request/validator.mjs.map +1 -1
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +6 -6
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
- package/dist/core/oauth2/authorization/helpers.d.ts +10 -1
- package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/helpers.mjs +28 -2
- package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
- package/dist/core/oauth2/authorization/index.mjs +2 -2
- package/dist/core/oauth2/authorization/module.d.ts +9 -0
- package/dist/core/oauth2/authorization/module.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/module.mjs +82 -5
- package/dist/core/oauth2/authorization/module.mjs.map +1 -1
- package/dist/core/oauth2/authorization/types.d.ts +36 -0
- package/dist/core/oauth2/authorization/types.d.ts.map +1 -1
- package/dist/core/oauth2/client/authenticator.d.ts +16 -7
- package/dist/core/oauth2/client/authenticator.d.ts.map +1 -1
- package/dist/core/oauth2/client/authenticator.mjs +49 -12
- package/dist/core/oauth2/client/authenticator.mjs.map +1 -1
- package/dist/core/oauth2/client/grant-type.d.ts +1 -1
- package/dist/core/oauth2/client/grant-type.d.ts.map +1 -1
- package/dist/core/oauth2/client/grant-type.mjs +2 -2
- package/dist/core/oauth2/client/grant-type.mjs.map +1 -1
- package/dist/core/oauth2/end-session/service.d.ts +2 -1
- package/dist/core/oauth2/end-session/service.d.ts.map +1 -1
- package/dist/core/oauth2/end-session/service.mjs +15 -2
- package/dist/core/oauth2/end-session/service.mjs.map +1 -1
- package/dist/core/oauth2/end-session/types.d.ts +2 -1
- package/dist/core/oauth2/end-session/types.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/authorize.d.ts +2 -2
- package/dist/core/oauth2/grant-types/authorize.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/authorize.mjs +20 -16
- package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/client-credentials.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/client-credentials.mjs +10 -8
- package/dist/core/oauth2/grant-types/client-credentials.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/identity.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/identity.mjs +16 -9
- package/dist/core/oauth2/grant-types/identity.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/index.d.ts +0 -1
- package/dist/core/oauth2/grant-types/index.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/index.mjs +1 -2
- package/dist/core/oauth2/grant-types/password.d.ts +9 -0
- package/dist/core/oauth2/grant-types/password.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/password.mjs +39 -11
- package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/refresh-token.d.ts +4 -0
- package/dist/core/oauth2/grant-types/refresh-token.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/refresh-token.mjs +29 -13
- package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/types.d.ts +10 -3
- package/dist/core/oauth2/grant-types/types.d.ts.map +1 -1
- package/dist/core/oauth2/index.d.ts +2 -1
- package/dist/core/oauth2/index.d.ts.map +1 -1
- package/dist/core/oauth2/index.mjs +7 -3
- package/dist/core/oauth2/mfa-login/index.d.ts +3 -0
- package/dist/core/oauth2/mfa-login/index.d.ts.map +1 -0
- package/dist/core/oauth2/mfa-login/index.mjs +5 -0
- package/dist/core/oauth2/mfa-login/module.d.ts +19 -0
- package/dist/core/oauth2/mfa-login/module.d.ts.map +1 -0
- package/dist/core/oauth2/mfa-login/module.mjs +109 -0
- package/dist/core/oauth2/mfa-login/module.mjs.map +1 -0
- package/dist/core/oauth2/mfa-login/types.d.ts +64 -0
- package/dist/core/oauth2/mfa-login/types.d.ts.map +1 -0
- package/dist/core/oauth2/mfa-login/types.mjs +4 -0
- package/dist/core/oauth2/openid/claims.d.ts +1 -3
- package/dist/core/oauth2/openid/claims.d.ts.map +1 -1
- package/dist/core/oauth2/openid/claims.mjs +6 -19
- package/dist/core/oauth2/openid/claims.mjs.map +1 -1
- package/dist/core/oauth2/scope/resolver.d.ts +1 -3
- package/dist/core/oauth2/scope/resolver.d.ts.map +1 -1
- package/dist/core/oauth2/scope/resolver.mjs +9 -31
- package/dist/core/oauth2/scope/resolver.mjs.map +1 -1
- package/dist/core/oauth2/session-token/types.d.ts +8 -8
- package/dist/core/oauth2/session-token/types.d.ts.map +1 -1
- package/dist/core/oauth2/token/index.mjs +2 -1
- package/dist/core/oauth2/token/issuer/access/module.mjs +7 -7
- package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
- package/dist/core/oauth2/token/issuer/index.d.ts +1 -0
- package/dist/core/oauth2/token/issuer/index.d.ts.map +1 -1
- package/dist/core/oauth2/token/issuer/index.mjs +3 -1
- package/dist/core/oauth2/token/issuer/mfa/index.d.ts +2 -0
- package/dist/core/oauth2/token/issuer/mfa/index.d.ts.map +1 -0
- package/dist/core/oauth2/token/issuer/mfa/index.mjs +5 -0
- package/dist/core/oauth2/token/issuer/mfa/module.d.ts +18 -0
- package/dist/core/oauth2/token/issuer/mfa/module.d.ts.map +1 -0
- package/dist/core/oauth2/token/issuer/mfa/module.mjs +36 -0
- package/dist/core/oauth2/token/issuer/mfa/module.mjs.map +1 -0
- package/dist/core/oauth2/token/issuer/refresh/module.mjs +5 -5
- package/dist/core/oauth2/token/issuer/refresh/module.mjs.map +1 -1
- package/dist/core/oauth2/token/repository/types.d.ts +10 -0
- package/dist/core/oauth2/token/repository/types.d.ts.map +1 -1
- package/dist/core/oauth2/token/revoker/module.d.ts.map +1 -1
- package/dist/core/oauth2/token/revoker/module.mjs +1 -0
- package/dist/core/oauth2/token/revoker/module.mjs.map +1 -1
- package/dist/core/oauth2/token/signer/module.d.ts +3 -3
- package/dist/core/oauth2/token/signer/module.d.ts.map +1 -1
- package/dist/core/oauth2/token/signer/module.mjs +11 -12
- package/dist/core/oauth2/token/signer/module.mjs.map +1 -1
- package/dist/core/oauth2/token/verifier/module.d.ts +3 -3
- package/dist/core/oauth2/token/verifier/module.d.ts.map +1 -1
- package/dist/core/oauth2/token/verifier/module.mjs +16 -13
- package/dist/core/oauth2/token/verifier/module.mjs.map +1 -1
- package/dist/core/provisioning/entities/index.d.ts +0 -1
- package/dist/core/provisioning/entities/index.d.ts.map +1 -1
- package/dist/core/provisioning/entities/index.mjs +1 -3
- package/dist/core/provisioning/entities/policy/validator.d.ts +2 -0
- package/dist/core/provisioning/entities/policy/validator.d.ts.map +1 -1
- package/dist/core/provisioning/entities/policy/validator.mjs +10 -1
- package/dist/core/provisioning/entities/policy/validator.mjs.map +1 -1
- package/dist/core/provisioning/entities/realm/relations-validator.d.ts.map +1 -1
- package/dist/core/provisioning/entities/realm/relations-validator.mjs +0 -4
- package/dist/core/provisioning/entities/realm/relations-validator.mjs.map +1 -1
- package/dist/core/provisioning/entities/realm/types.d.ts +0 -2
- package/dist/core/provisioning/entities/realm/types.d.ts.map +1 -1
- package/dist/core/provisioning/entities/role/types.d.ts +2 -2
- package/dist/core/provisioning/index.mjs +1 -3
- package/dist/core/provisioning/synchronizer/client/module.mjs +11 -11
- package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs +12 -12
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/index.d.ts +0 -1
- package/dist/core/provisioning/synchronizer/index.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/index.mjs +1 -3
- package/dist/core/provisioning/synchronizer/junction-synchronizer.d.ts +2 -2
- package/dist/core/provisioning/synchronizer/junction-synchronizer.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/junction-synchronizer.mjs +2 -2
- package/dist/core/provisioning/synchronizer/junction-synchronizer.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs +8 -8
- package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/policy/module.mjs +11 -11
- package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.d.ts +0 -2
- package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.mjs +5 -15
- package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/types.d.ts +0 -2
- package/dist/core/provisioning/synchronizer/realm/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/role/module.mjs +7 -7
- package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.mjs +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/user/module.mjs +13 -13
- package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
- package/dist/core/query/index.d.ts +4 -0
- package/dist/core/query/index.d.ts.map +1 -0
- package/dist/core/query/index.mjs +6 -0
- package/dist/core/query/module.d.ts +60 -0
- package/dist/core/query/module.d.ts.map +1 -0
- package/dist/core/query/module.mjs +128 -0
- package/dist/core/query/module.mjs.map +1 -0
- package/dist/core/query/relations.d.ts +39 -0
- package/dist/core/query/relations.d.ts.map +1 -0
- package/dist/core/query/relations.mjs +103 -0
- package/dist/core/query/relations.mjs.map +1 -0
- package/dist/core/query/types.d.ts +39 -0
- package/dist/core/query/types.d.ts.map +1 -0
- package/dist/core/query/types.mjs +4 -0
- package/dist/core/security/policy/evaluator.d.ts +1 -0
- package/dist/core/security/policy/evaluator.d.ts.map +1 -1
- package/dist/core/security/policy/evaluator.mjs +52 -5
- package/dist/core/security/policy/evaluator.mjs.map +1 -1
- package/dist/index.mjs +52 -46
- package/dist/swagger.json +4524 -3291
- package/dist/ui/client/.vite/ssr-manifest.json +4606 -934
- package/dist/ui/client/assets/{index-CP9HCHoS.js → index-BmJ2X468.js} +21 -17
- package/dist/ui/client/assets/index-DiOvW76Q.css +2 -0
- package/dist/ui/client/index.html +2 -2
- package/dist/ui/server/server.js +64002 -56519
- package/package.json +35 -24
- package/dist/adapters/database/domains/robot/entity.d.ts +0 -19
- package/dist/adapters/database/domains/robot/entity.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot/entity.mjs +0 -112
- package/dist/adapters/database/domains/robot/entity.mjs.map +0 -1
- package/dist/adapters/database/domains/robot/index.d.ts +0 -3
- package/dist/adapters/database/domains/robot/index.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot/index.mjs +0 -6
- package/dist/adapters/database/domains/robot/subscriber.d.ts +0 -6
- package/dist/adapters/database/domains/robot/subscriber.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot/subscriber.mjs +0 -42
- package/dist/adapters/database/domains/robot/subscriber.mjs.map +0 -1
- package/dist/adapters/database/domains/robot-permission/entity.d.ts +0 -18
- package/dist/adapters/database/domains/robot-permission/entity.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot-permission/entity.mjs +0 -91
- package/dist/adapters/database/domains/robot-permission/entity.mjs.map +0 -1
- package/dist/adapters/database/domains/robot-permission/index.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot-permission/index.mjs +0 -6
- package/dist/adapters/database/domains/robot-permission/subscriber.d.ts +0 -6
- package/dist/adapters/database/domains/robot-permission/subscriber.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot-permission/subscriber.mjs +0 -45
- package/dist/adapters/database/domains/robot-permission/subscriber.mjs.map +0 -1
- package/dist/adapters/database/domains/robot-role/entity.d.ts +0 -15
- package/dist/adapters/database/domains/robot-role/entity.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot-role/entity.mjs +0 -72
- package/dist/adapters/database/domains/robot-role/entity.mjs.map +0 -1
- package/dist/adapters/database/domains/robot-role/index.d.ts +0 -3
- package/dist/adapters/database/domains/robot-role/index.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot-role/index.mjs +0 -6
- package/dist/adapters/database/domains/robot-role/subscriber.d.ts +0 -6
- package/dist/adapters/database/domains/robot-role/subscriber.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot-role/subscriber.mjs.map +0 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.d.ts +0 -12
- package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.d.ts.map +0 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.mjs +0 -27
- package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.mjs.map +0 -1
- package/dist/adapters/http/controllers/entities/robot/index.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot/index.mjs +0 -5
- package/dist/adapters/http/controllers/entities/robot/module.d.ts +0 -25
- package/dist/adapters/http/controllers/entities/robot/module.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot/module.mjs +0 -180
- package/dist/adapters/http/controllers/entities/robot/module.mjs.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-permission/index.d.ts +0 -3
- package/dist/adapters/http/controllers/entities/robot-permission/index.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-permission/index.mjs +0 -7
- package/dist/adapters/http/controllers/entities/robot-permission/module.d.ts +0 -17
- package/dist/adapters/http/controllers/entities/robot-permission/module.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-permission/module.mjs.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-permission/utils/index.d.ts +0 -2
- package/dist/adapters/http/controllers/entities/robot-permission/utils/index.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-permission/utils/index.mjs +0 -5
- package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.d.ts +0 -6
- package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.mjs +0 -21
- package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.mjs.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-role/index.d.ts +0 -3
- package/dist/adapters/http/controllers/entities/robot-role/index.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-role/index.mjs +0 -7
- package/dist/adapters/http/controllers/entities/robot-role/module.d.ts +0 -16
- package/dist/adapters/http/controllers/entities/robot-role/module.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-role/module.mjs.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-role/utils/index.d.ts +0 -2
- package/dist/adapters/http/controllers/entities/robot-role/utils/index.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-role/utils/index.mjs +0 -5
- package/dist/adapters/http/controllers/entities/robot-role/utils/validation.d.ts +0 -6
- package/dist/adapters/http/controllers/entities/robot-role/utils/validation.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/robot-role/utils/validation.mjs +0 -20
- package/dist/adapters/http/controllers/entities/robot-role/utils/validation.mjs.map +0 -1
- package/dist/app/modules/database/repositories/robot/index.d.ts.map +0 -1
- package/dist/app/modules/database/repositories/robot/index.mjs +0 -5
- package/dist/app/modules/database/repositories/robot/repository.d.ts +0 -31
- package/dist/app/modules/database/repositories/robot/repository.d.ts.map +0 -1
- package/dist/app/modules/database/repositories/robot/repository.mjs +0 -190
- package/dist/app/modules/database/repositories/robot/repository.mjs.map +0 -1
- package/dist/app/modules/database/repositories/robot-permission/index.d.ts.map +0 -1
- package/dist/app/modules/database/repositories/robot-permission/index.mjs +0 -5
- package/dist/app/modules/database/repositories/robot-permission/repository.d.ts +0 -20
- package/dist/app/modules/database/repositories/robot-permission/repository.d.ts.map +0 -1
- package/dist/app/modules/database/repositories/robot-permission/repository.mjs +0 -79
- package/dist/app/modules/database/repositories/robot-permission/repository.mjs.map +0 -1
- package/dist/app/modules/database/repositories/robot-role/index.d.ts.map +0 -1
- package/dist/app/modules/database/repositories/robot-role/index.mjs +0 -5
- package/dist/app/modules/database/repositories/robot-role/repository.d.ts +0 -20
- package/dist/app/modules/database/repositories/robot-role/repository.d.ts.map +0 -1
- package/dist/app/modules/database/repositories/robot-role/repository.mjs +0 -79
- package/dist/app/modules/database/repositories/robot-role/repository.mjs.map +0 -1
- package/dist/app/modules/identity/repositories/robot.d.ts +0 -13
- package/dist/app/modules/identity/repositories/robot.d.ts.map +0 -1
- package/dist/app/modules/identity/repositories/robot.mjs +0 -47
- package/dist/app/modules/identity/repositories/robot.mjs.map +0 -1
- package/dist/app/modules/oauth2/repositories/key/index.d.ts.map +0 -1
- package/dist/app/modules/oauth2/repositories/key/index.mjs +0 -5
- package/dist/app/modules/oauth2/repositories/key/repository.d.ts +0 -14
- package/dist/app/modules/oauth2/repositories/key/repository.d.ts.map +0 -1
- package/dist/app/modules/oauth2/repositories/key/repository.mjs +0 -51
- package/dist/app/modules/oauth2/repositories/key/repository.mjs.map +0 -1
- package/dist/core/authentication/credential/entities/robot/index.d.ts.map +0 -1
- package/dist/core/authentication/credential/entities/robot/index.mjs +0 -5
- package/dist/core/authentication/credential/entities/robot/module.d.ts +0 -8
- package/dist/core/authentication/credential/entities/robot/module.d.ts.map +0 -1
- package/dist/core/authentication/credential/entities/robot/module.mjs +0 -22
- package/dist/core/authentication/credential/entities/robot/module.mjs.map +0 -1
- package/dist/core/authentication/entities/robot/index.d.ts.map +0 -1
- package/dist/core/authentication/entities/robot/index.mjs +0 -5
- package/dist/core/authentication/entities/robot/module.d.ts +0 -11
- package/dist/core/authentication/entities/robot/module.d.ts.map +0 -1
- package/dist/core/authentication/entities/robot/module.mjs +0 -29
- package/dist/core/authentication/entities/robot/module.mjs.map +0 -1
- package/dist/core/entities/robot/index.d.ts +0 -3
- package/dist/core/entities/robot/index.d.ts.map +0 -1
- package/dist/core/entities/robot/index.mjs +0 -5
- package/dist/core/entities/robot/service.d.ts +0 -28
- package/dist/core/entities/robot/service.d.ts.map +0 -1
- package/dist/core/entities/robot/service.mjs +0 -201
- package/dist/core/entities/robot/service.mjs.map +0 -1
- package/dist/core/entities/robot/types.d.ts +0 -24
- package/dist/core/entities/robot/types.d.ts.map +0 -1
- package/dist/core/entities/robot-permission/index.d.ts.map +0 -1
- package/dist/core/entities/robot-permission/index.mjs +0 -5
- package/dist/core/entities/robot-permission/service.d.ts +0 -25
- package/dist/core/entities/robot-permission/service.d.ts.map +0 -1
- package/dist/core/entities/robot-permission/service.mjs +0 -137
- package/dist/core/entities/robot-permission/service.mjs.map +0 -1
- package/dist/core/entities/robot-permission/types.d.ts +0 -12
- package/dist/core/entities/robot-permission/types.d.ts.map +0 -1
- package/dist/core/entities/robot-role/index.d.ts +0 -3
- package/dist/core/entities/robot-role/index.d.ts.map +0 -1
- package/dist/core/entities/robot-role/index.mjs +0 -5
- package/dist/core/entities/robot-role/service.d.ts +0 -22
- package/dist/core/entities/robot-role/service.d.ts.map +0 -1
- package/dist/core/entities/robot-role/service.mjs +0 -90
- package/dist/core/entities/robot-role/service.mjs.map +0 -1
- package/dist/core/entities/robot-role/types.d.ts +0 -11
- package/dist/core/entities/robot-role/types.d.ts.map +0 -1
- package/dist/core/identity/entities/robot/index.d.ts +0 -2
- package/dist/core/identity/entities/robot/index.d.ts.map +0 -1
- package/dist/core/identity/entities/robot/types.d.ts +0 -8
- package/dist/core/identity/entities/robot/types.d.ts.map +0 -1
- package/dist/core/oauth2/grant-types/robot-credentials.d.ts +0 -8
- package/dist/core/oauth2/grant-types/robot-credentials.d.ts.map +0 -1
- package/dist/core/oauth2/grant-types/robot-credentials.mjs +0 -38
- package/dist/core/oauth2/grant-types/robot-credentials.mjs.map +0 -1
- package/dist/core/oauth2/key/index.d.ts +0 -2
- package/dist/core/oauth2/key/index.d.ts.map +0 -1
- package/dist/core/oauth2/key/types.d.ts +0 -16
- package/dist/core/oauth2/key/types.d.ts.map +0 -1
- package/dist/core/provisioning/entities/robot/index.d.ts +0 -3
- package/dist/core/provisioning/entities/robot/index.d.ts.map +0 -1
- package/dist/core/provisioning/entities/robot/index.mjs +0 -5
- package/dist/core/provisioning/entities/robot/relations-validator.d.ts +0 -6
- package/dist/core/provisioning/entities/robot/relations-validator.d.ts.map +0 -1
- package/dist/core/provisioning/entities/robot/relations-validator.mjs +0 -20
- package/dist/core/provisioning/entities/robot/relations-validator.mjs.map +0 -1
- package/dist/core/provisioning/entities/robot/types.d.ts +0 -25
- package/dist/core/provisioning/entities/robot/types.d.ts.map +0 -1
- package/dist/core/provisioning/entities/robot/validator.d.ts +0 -6
- package/dist/core/provisioning/entities/robot/validator.d.ts.map +0 -1
- package/dist/core/provisioning/entities/robot/validator.mjs +0 -24
- package/dist/core/provisioning/entities/robot/validator.mjs.map +0 -1
- package/dist/core/provisioning/synchronizer/robot/index.d.ts.map +0 -1
- package/dist/core/provisioning/synchronizer/robot/index.mjs +0 -5
- package/dist/core/provisioning/synchronizer/robot/module.d.ts +0 -17
- package/dist/core/provisioning/synchronizer/robot/module.d.ts.map +0 -1
- package/dist/core/provisioning/synchronizer/robot/module.mjs +0 -72
- package/dist/core/provisioning/synchronizer/robot/module.mjs.map +0 -1
- package/dist/core/provisioning/synchronizer/robot/types.d.ts +0 -9
- package/dist/core/provisioning/synchronizer/robot/types.d.ts.map +0 -1
- package/dist/ui/client/assets/index-VM4JXBXw.css +0 -2
- /package/dist/adapters/database/domains/{robot-permission → consent}/index.d.ts +0 -0
- /package/dist/adapters/http/controllers/entities/{robot → consent}/index.d.ts +0 -0
- /package/dist/{core/authentication/credential/entities/robot → adapters/http/controllers/entities/event}/index.d.ts +0 -0
- /package/dist/{core/authentication/entities/robot → adapters/http/controllers/entities/key}/index.d.ts +0 -0
- /package/dist/{core/entities/robot-permission → adapters/http/request}/types.mjs +0 -0
- /package/dist/app/modules/database/repositories/{robot-permission → event}/index.d.ts +0 -0
- /package/dist/app/modules/database/repositories/{robot-role → key}/index.d.ts +0 -0
- /package/dist/app/modules/database/repositories/{robot → trust-anchor}/index.d.ts +0 -0
- /package/dist/app/modules/{oauth2/repositories/key → database/repositories/user-authenticator}/index.d.ts +0 -0
- /package/dist/core/{entities/robot-permission → authentication/login-throttle}/index.d.ts +0 -0
- /package/dist/core/{entities/robot-role → authentication/login-throttle}/types.mjs +0 -0
- /package/dist/core/{provisioning/synchronizer/robot → client-certificate}/index.d.ts +0 -0
- /package/dist/core/{entities/robot → client-certificate}/types.mjs +0 -0
- /package/dist/core/{identity/entities/robot → entities/event}/types.mjs +0 -0
- /package/dist/core/{oauth2 → entities}/key/types.mjs +0 -0
- /package/dist/core/{provisioning/entities/robot → entities/trust-anchor}/types.mjs +0 -0
- /package/dist/core/{provisioning/synchronizer/robot → key}/types.mjs +0 -0
- /package/dist/core/{identity/entities/robot/index.mjs → metrics/types.mjs} +0 -0
- /package/dist/core/oauth2/{key/index.mjs → access-policy/types.mjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.mjs","names":["randomUUID","BuiltInPolicyType","definePolicyData","ValidatorGroup","eq","inArray","or","EventName","EventRefType","EventScope","IdentityType","PermissionName","UserAuthenticatorKind","UserAuthenticatorValidator","AuthupError","EntityCredentialsInvalidError","EntityNotFoundError","ErrorCode","MfaThrottledError","ValidationError","isMfaThrottledError","AbstractEntityService","buildCacheKey","compare","hash","Secret","TOTP","QRCode","isRealmCipherBlobError","MailTemplateName","buildWebauthnAuthenticationOptions","buildWebauthnRegistrationOptions","verifyWebauthnAuthentication","verifyWebauthnRegistration","USER_AUTHENTICATOR_ATTEMPT_CACHE_PREFIX","USER_AUTHENTICATOR_ATTEMPT_LOCK_FACTOR","USER_AUTHENTICATOR_ATTEMPT_LOCK_MAX","USER_AUTHENTICATOR_ATTEMPT_WINDOW","USER_AUTHENTICATOR_EMAIL_CODE_CACHE_PREFIX","USER_AUTHENTICATOR_EMAIL_CODE_EXPIRES_IN_MINUTES","USER_AUTHENTICATOR_EMAIL_CODE_LENGTH","USER_AUTHENTICATOR_EMAIL_SEND_CACHE_PREFIX","USER_AUTHENTICATOR_EMAIL_SEND_COOLDOWN","USER_AUTHENTICATOR_RECOVERY_CODE_COUNT","USER_AUTHENTICATOR_THROTTLE_CACHE_PREFIX","USER_AUTHENTICATOR_TOTP_ALGORITHM","USER_AUTHENTICATOR_TOTP_DIGITS","USER_AUTHENTICATOR_TOTP_PERIOD","USER_AUTHENTICATOR_VERIFY_LOCK_CACHE_PREFIX","USER_AUTHENTICATOR_VERIFY_LOCK_RENEW_INTERVAL","USER_AUTHENTICATOR_VERIFY_LOCK_TTL","USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX","USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW","USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX","generateNumericCode","generateRecoveryCode","appendQueryConditions","decodeQuery","userAuthenticatorSchema","UserAuthenticatorService","repository","userRepository","cache","cipher","eventService","mailClient","mailTemplateRenderer","options","validator","ctx","isOwnedBy","entity","actor","identity","type","USER","userId","data","id","sanitize","secret","codes","getMany","query","isSelf","permissionEvaluator","preEvaluate","name","USER_AUTHENTICATOR_READ","parsed","schema","findManyOptions","owner","compiled","verdict","compile","ownership","scoped","condition","meta","findMany","map","entities","total","push","evaluate","ATTRIBUTES","resourceRealmMatch","getOne","resolveOne","findOneById","enroll","assertEnabled","validated","run","group","CREATE","user","resolveTargetUser","isSelfEnrollment","kind","EMAIL","enrollTotp","RECOVERY","enrollRecovery","enrollEmail","WEBAUTHN","enrollWebauthn","assertWebauthn","existing","findAllWithSecretsByUser","confirmed","excludeCredentials","device","parseWebauthnParameters","filter","parameters","credential_id","transports","challenge","create","realmId","save","set","buildWebauthnCacheKey","expiresAt","Date","now","ttl","webauthn","assertMail","email","findOneByWithEmail","findAllByUser","length","primary","duplicates","duplicate","remove","recordEvent","MFA_ENROLLED","actorUser","undefined","code","IDENTITY_UNAUTHORIZED","message","target","USER_AUTHENTICATOR_CREATE","size","algorithm","digits","period","totp","issuer","label","uri","toString","encrypt","base32","JSON","stringify","qr","toDataURL","stored","i","used_at","confirm","USER_AUTHENTICATOR_UPDATE","confirmWebauthn","assertNotThrottledOrRetry","withSecrets","findOneWithSecretsById","verifyTotp","bumpAttempts","resetAttempts","output","response","cacheKey","state","get","parse","credential","drop","delete","USER_AUTHENTICATOR_DELETE","entityId","MFA_REMOVED","verify","input","assertNotThrottled","e","lockKey","buildVerifyLockCacheKey","lock","acquireVerifyLock","status","lease","maintainVerifyLock","value","devices","matched","verifyRecovery","verifyEmail","newCounter","verifyWebauthnDevice","counter","recordChallengeEvent","MFA_CHALLENGE_FAILED","renew","onVerified","lastUsedAt","toISOString","buildEmailCodeCacheKey","MFA_VERIFIED","stop","releaseVerifyLock","token","seed","decrypt","fromBase32","delta","validate","trim","window","step","Math","floor","entries","normalized","toLowerCase","entry","result","verified","key","sendChallenge","withinCooldown","add","buildEmailSendCacheKey","retryAfter","codeValue","mail","render","template","MFA_EMAIL_OTP","params","expiresInMinutes","locale","send","to","hasConfirmed","hasConfirmedByUser","enabled","required","enrollmentRequired","kinds","Array","from","Set","issueMaterial","includes","credentials","MFA_NOT_CONFIGURABLE","buildAttemptCacheKey","prefix","buildThrottleCacheKey","owned","pending","queueRenewal","renewIfValue","then","renewed","catch","finally","timer","setInterval","clearInterval","dropIfValue","lockedUntil","ceil","count","increment","delay","min","dropMany","record","scope","IDENTITY","refType","USER_AUTHENTICATOR","refId","actorType","actorId","clientId","requestIpAddress","ipAddress","requestUserAgent","userAgent"],"sources":["../../../../src/core/entities/user-authenticator/service.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { randomUUID } from 'node:crypto';\nimport { BuiltInPolicyType, definePolicyData } from '@authup/access';\nimport { ValidatorGroup } from '@authup/kit';\nimport { eq, inArray, or } from '@rapiq/core';\nimport {\n EventName, \n EventRefType, \n EventScope, \n IdentityType, \n PermissionName, \n UserAuthenticatorKind, \n UserAuthenticatorValidator,\n} from '@authup/core-kit';\nimport type { User, UserAuthenticator } from '@authup/core-kit';\nimport {\n AuthupError,\n EntityCredentialsInvalidError,\n EntityNotFoundError,\n ErrorCode,\n MfaThrottledError,\n ValidationError,\n isMfaThrottledError,\n} from '@authup/errors';\nimport { \n AbstractEntityService, \n buildCacheKey, \n compare, \n hash, \n} from '@authup/server-kit';\nimport type {\n ActorContext,\n EntityRepositoryFindManyResult,\n ICache,\n} from '@authup/server-kit';\nimport { Secret, TOTP } from 'otpauth';\nimport QRCode from 'qrcode';\nimport type { AuthenticationResponseJSON, RegistrationResponseJSON } from '@simplewebauthn/server';\nimport { isRealmCipherBlobError } from '../../key/index.ts';\nimport type { IRealmCipher } from '../../key/index.ts';\nimport type { IEventService } from '../event/index.ts';\nimport type { IMailClient, IMailTemplateRenderer } from '../../mail/index.ts';\nimport { MailTemplateName } from '../../mail/index.ts';\nimport type { IUserRepository } from '../user/index.ts';\nimport {\n buildWebauthnAuthenticationOptions,\n buildWebauthnRegistrationOptions,\n verifyWebauthnAuthentication,\n verifyWebauthnRegistration,\n} from './webauthn.ts';\nimport {\n USER_AUTHENTICATOR_ATTEMPT_CACHE_PREFIX,\n USER_AUTHENTICATOR_ATTEMPT_LOCK_FACTOR,\n USER_AUTHENTICATOR_ATTEMPT_LOCK_MAX,\n USER_AUTHENTICATOR_ATTEMPT_WINDOW,\n USER_AUTHENTICATOR_EMAIL_CODE_CACHE_PREFIX,\n USER_AUTHENTICATOR_EMAIL_CODE_EXPIRES_IN_MINUTES,\n USER_AUTHENTICATOR_EMAIL_CODE_LENGTH,\n USER_AUTHENTICATOR_EMAIL_SEND_CACHE_PREFIX,\n USER_AUTHENTICATOR_EMAIL_SEND_COOLDOWN,\n USER_AUTHENTICATOR_RECOVERY_CODE_COUNT,\n USER_AUTHENTICATOR_THROTTLE_CACHE_PREFIX,\n USER_AUTHENTICATOR_TOTP_ALGORITHM,\n USER_AUTHENTICATOR_TOTP_DIGITS,\n USER_AUTHENTICATOR_TOTP_PERIOD,\n USER_AUTHENTICATOR_VERIFY_LOCK_CACHE_PREFIX,\n USER_AUTHENTICATOR_VERIFY_LOCK_RENEW_INTERVAL,\n USER_AUTHENTICATOR_VERIFY_LOCK_TTL,\n USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX,\n USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW,\n USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX,\n} from './constants.ts';\nimport { generateNumericCode, generateRecoveryCode } from './helpers.ts';\nimport type {\n IUserAuthenticatorRepository,\n IUserAuthenticatorService,\n UserAuthenticatorChallengeStatus,\n UserAuthenticatorEnrollResult,\n UserAuthenticatorRecoveryCode,\n UserAuthenticatorSendContext,\n UserAuthenticatorServiceContext,\n UserAuthenticatorServiceOptions,\n UserAuthenticatorTotpParameters,\n UserAuthenticatorVerifyContext,\n UserAuthenticatorVerifyInput,\n UserAuthenticatorWebauthnParameters,\n} from './types.ts';\nimport type { WebauthnContext } from './webauthn.ts';\nimport { appendQueryConditions, decodeQuery } from '../../query/index.ts';\nimport { userAuthenticatorSchema } from './schema.ts';\n\ntype EmailCodeState = {\n hash: string,\n expiresAt: number,\n};\n\ntype WebauthnChallengeState = {\n challenge: string,\n expiresAt: number,\n};\n\ntype VerifyLock = {\n status: 'acquired',\n value: string,\n} | {\n status: 'busy' | 'unavailable',\n};\n\ntype VerifyLockLease = {\n renew: () => Promise<boolean>,\n stop: () => Promise<void>,\n};\n\nexport class UserAuthenticatorService extends AbstractEntityService implements IUserAuthenticatorService {\n protected repository: IUserAuthenticatorRepository;\n\n protected userRepository: IUserRepository;\n\n protected cache: ICache;\n\n protected cipher: IRealmCipher;\n\n protected eventService?: IEventService;\n\n protected mailClient?: IMailClient;\n\n protected mailTemplateRenderer?: IMailTemplateRenderer;\n\n protected options: UserAuthenticatorServiceOptions;\n\n protected validator: UserAuthenticatorValidator;\n\n constructor(ctx: UserAuthenticatorServiceContext) {\n super();\n\n this.repository = ctx.repository;\n this.userRepository = ctx.userRepository;\n this.cache = ctx.cache;\n this.cipher = ctx.cipher;\n this.eventService = ctx.eventService;\n this.mailClient = ctx.mailClient;\n this.mailTemplateRenderer = ctx.mailTemplateRenderer;\n this.options = ctx.options ?? {};\n this.validator = new UserAuthenticatorValidator();\n }\n\n protected isOwnedBy(entity: UserAuthenticator, actor: ActorContext): boolean {\n return !!actor.identity &&\n actor.identity.type === IdentityType.USER &&\n entity.userId === actor.identity.data.id;\n }\n\n /**\n * The secret/codes columns never leave the service — reads return the\n * row with both nulled (defense in depth on top of select:false).\n */\n protected sanitize(entity: UserAuthenticator): UserAuthenticator {\n return {\n ...entity,\n secret: null,\n codes: null,\n };\n }\n\n // ------------------------------------------------------------------\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n options: { userId?: string } = {},\n ): Promise<EntityRepositoryFindManyResult<UserAuthenticator>> {\n const isSelf = !!options.userId &&\n !!actor.identity &&\n actor.identity.type === IdentityType.USER &&\n actor.identity.data.id === options.userId;\n\n if (!isSelf) {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_READ });\n }\n\n const parsed = await decodeQuery(query, { schema: userAuthenticatorSchema, actor });\n const findManyOptions = options.userId ? { owner: { userId: options.userId } } : {};\n\n // Own devices are ungated: the nested self read is already owner-scoped,\n // and on the wider mounts ownership composes as an OR-alternative with\n // the compiled USER_AUTHENTICATOR_READ condition (#3286 phase 3) — the\n // whole gate runs as WHERE and pagination/totals stay exact. A\n // non-expressible policy falls back to the per-row loop below.\n const compiled = isSelf ?\n { verdict: 'allow' as const } :\n await actor.permissionEvaluator.compile({ name: PermissionName.USER_AUTHENTICATOR_READ });\n if (compiled.verdict !== 'post') {\n const ownership = actor.identity && actor.identity.type === IdentityType.USER ?\n eq('userId', actor.identity.data.id) :\n null;\n\n let scoped = parsed;\n if (compiled.verdict === 'deny') {\n scoped = appendQueryConditions(parsed, ownership ?? inArray('id', []));\n } else if (compiled.verdict === 'conditional') {\n scoped = appendQueryConditions(\n parsed,\n ownership ? or(ownership, compiled.condition) : compiled.condition,\n );\n }\n\n const { data, meta } = await this.repository.findMany(scoped, findManyOptions);\n\n return {\n data: data.map((entity) => this.sanitize(entity)),\n meta,\n };\n }\n\n const { data: entities, meta } = await this.repository.findMany(\n parsed,\n findManyOptions,\n );\n\n const data: UserAuthenticator[] = [];\n let { total } = meta;\n\n for (const entity of entities) {\n if (this.isOwnedBy(entity, actor)) {\n data.push(this.sanitize(entity));\n continue;\n }\n\n try {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.USER_AUTHENTICATOR_READ,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: entity,\n ...this.resourceRealmMatch(entity),\n }),\n });\n data.push(this.sanitize(entity));\n } catch {\n total -= 1;\n }\n }\n\n return {\n data,\n meta: {\n ...meta,\n total,\n },\n };\n }\n\n async getOne(\n id: string,\n actor: ActorContext,\n options: { userId?: string } = {},\n ): Promise<UserAuthenticator> {\n const entity = await this.resolveOne(id, options.userId);\n\n if (!this.isOwnedBy(entity, actor)) {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_READ });\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.USER_AUTHENTICATOR_READ,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: entity,\n ...this.resourceRealmMatch(entity),\n }),\n });\n }\n\n return this.sanitize(entity);\n }\n\n protected async resolveOne(id: string, userId?: string): Promise<UserAuthenticator> {\n const entity = await this.repository.findOneById(id);\n // a device of another user is a 404 on the nested route — never\n // an existence oracle across users.\n if (!entity || (userId && entity.userId !== userId)) {\n throw new EntityNotFoundError();\n }\n\n return entity;\n }\n\n // ------------------------------------------------------------------\n\n async enroll(data: Record<string, any>, actor: ActorContext): Promise<UserAuthenticatorEnrollResult> {\n this.assertEnabled();\n\n const validated = await this.validator.run(data, { group: ValidatorGroup.CREATE });\n\n const user = await this.resolveTargetUser(validated.userId, actor, validated);\n\n // Only EMAIL may be provisioned FOR another user: its code is mailed to\n // the user's own (already-verified) mailbox, so the enroller never\n // obtains a factor it controls. Every other kind would let an admin plant\n // a second factor they hold, defeating MFA — TOTP/recovery return the\n // seed/codes to the caller, and a WebAuthn ceremony can be completed on\n // the enroller's OWN authenticator (the server can't tell whose device\n // signed). Those are self-enrollment only (Keycloak/Okta/Authentik don't\n // hand a user's factor secret to an admin either); an admin resets another\n // user's MFA by DELETING it, and the user re-enrolls.\n const isSelfEnrollment = !!actor.identity &&\n actor.identity.type === IdentityType.USER &&\n actor.identity.data.id === user.id;\n if (!isSelfEnrollment && validated.kind !== UserAuthenticatorKind.EMAIL) {\n throw new ValidationError(\n `A ${validated.kind} authenticator can only be enrolled by the account owner.`,\n );\n }\n\n switch (validated.kind) {\n case UserAuthenticatorKind.TOTP: {\n return this.enrollTotp(user, validated.name ?? null);\n }\n case UserAuthenticatorKind.RECOVERY: {\n return this.enrollRecovery(user, validated.name ?? null);\n }\n case UserAuthenticatorKind.EMAIL: {\n return this.enrollEmail(user, validated.name ?? null);\n }\n case UserAuthenticatorKind.WEBAUTHN: {\n return this.enrollWebauthn(user, validated.name ?? null);\n }\n default: {\n throw new ValidationError(`The authenticator kind ${validated.kind} can not be enrolled yet.`);\n }\n }\n }\n\n protected async enrollWebauthn(user: User, name: string | null): Promise<UserAuthenticatorEnrollResult> {\n const ctx = this.assertWebauthn();\n\n // exclude already-registered credentials from a fresh ceremony\n const existing = await this.repository.findAllWithSecretsByUser(user.id, {\n kind: UserAuthenticatorKind.WEBAUTHN,\n confirmed: true,\n });\n const excludeCredentials = existing\n .map((device) => this.parseWebauthnParameters(device))\n .filter((parameters): parameters is UserAuthenticatorWebauthnParameters => !!parameters)\n .map((parameters) => ({ id: parameters.credential_id, transports: parameters.transports }));\n\n const { options, challenge } = await buildWebauthnRegistrationOptions(\n ctx,\n { id: user.id, name: user.name },\n excludeCredentials,\n );\n\n let entity = this.repository.create({\n kind: UserAuthenticatorKind.WEBAUTHN,\n name,\n confirmed: false,\n userId: user.id,\n realmId: user.realmId,\n });\n entity = await this.repository.save(entity);\n\n // Key the challenge by the newly created (unconfirmed) row id, NOT the\n // user id — overlapping enrollment ceremonies (a second tab, a retry\n // after a cancelled prompt) would otherwise overwrite each other's\n // challenge and make the first confirmation fail spuriously.\n await this.cache.set(\n this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX, entity.id),\n {\n challenge,\n expiresAt: Date.now() + (USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW * 1_000),\n } satisfies WebauthnChallengeState,\n { ttl: USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW * 1_000 },\n );\n\n return {\n data: this.sanitize(entity),\n meta: { webauthn: options },\n };\n }\n\n protected async enrollEmail(user: User, name: string | null): Promise<UserAuthenticatorEnrollResult> {\n this.assertMail();\n\n // The actor identity may not carry `email` (the User entity's email\n // column is select:false) — force-load it to confirm the mailbox\n // exists. The email is presumed verified (activation); the row marks\n // the mailbox as an enrolled factor, codes are transient (cache).\n const email = user.email ?? (await this.userRepository.findOneByWithEmail({ id: user.id }))?.email;\n if (!email) {\n throw new ValidationError('The user has no email address to receive codes.');\n }\n\n // one email factor per user — update the existing marker row in place\n // rather than remove-then-create, so a failed save never leaves the user\n // with no email factor (the row is a pure marker: no secret/codes).\n const existing = (await this.repository.findAllByUser(user.id))\n .filter((device) => device.kind === UserAuthenticatorKind.EMAIL);\n\n let entity: UserAuthenticator;\n if (existing.length > 0) {\n const [primary, ...duplicates] = existing;\n primary.name = name;\n primary.confirmed = true;\n entity = await this.repository.save(primary);\n // best-effort cleanup of any stray duplicates (invariant anomaly);\n // a failure here still leaves the primary factor intact.\n for (const duplicate of duplicates) {\n await this.repository.remove(duplicate);\n }\n } else {\n entity = this.repository.create({\n kind: UserAuthenticatorKind.EMAIL,\n name,\n confirmed: true,\n userId: user.id,\n realmId: user.realmId,\n });\n entity = await this.repository.save(entity);\n }\n\n await this.recordEvent(EventName.MFA_ENROLLED, entity);\n\n return { data: this.sanitize(entity), meta: {} };\n }\n\n protected async resolveTargetUser(\n userId: string | undefined,\n actor: ActorContext,\n validated: Record<string, any>,\n ): Promise<User> {\n const actorUser : User | undefined = actor.identity && actor.identity.type === IdentityType.USER ?\n actor.identity.data as User :\n undefined;\n\n if (!userId || (actorUser && actorUser.id === userId)) {\n if (!actorUser) {\n throw new AuthupError({ code: ErrorCode.IDENTITY_UNAUTHORIZED, message: 'Authentication required.' });\n }\n\n return actorUser;\n }\n\n const target = await this.userRepository.findOneById(userId);\n if (!target) {\n throw new EntityNotFoundError();\n }\n\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_CREATE });\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.USER_AUTHENTICATOR_CREATE,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: { ...validated, realmId: target.realmId },\n ...this.resourceRealmMatch(target),\n }),\n });\n\n return target;\n }\n\n protected async enrollTotp(user: User, name: string | null): Promise<UserAuthenticatorEnrollResult> {\n const secret = new Secret({ size: 20 });\n const parameters : UserAuthenticatorTotpParameters = {\n algorithm: USER_AUTHENTICATOR_TOTP_ALGORITHM,\n digits: USER_AUTHENTICATOR_TOTP_DIGITS,\n period: USER_AUTHENTICATOR_TOTP_PERIOD,\n };\n\n const totp = new TOTP({\n issuer: this.options.issuer ?? 'authup',\n label: user.name,\n algorithm: parameters.algorithm,\n digits: parameters.digits,\n period: parameters.period,\n secret,\n });\n const uri = totp.toString();\n\n let entity = this.repository.create({\n kind: UserAuthenticatorKind.TOTP,\n name,\n secret: await this.cipher.encrypt(secret.base32, user.realmId),\n parameters: JSON.stringify(parameters),\n confirmed: false,\n userId: user.id,\n realmId: user.realmId,\n });\n entity = await this.repository.save(entity);\n\n return {\n data: this.sanitize(entity),\n meta: {\n secret: secret.base32,\n uri,\n qr: await QRCode.toDataURL(uri),\n },\n };\n }\n\n protected async enrollRecovery(user: User, name: string | null): Promise<UserAuthenticatorEnrollResult> {\n const codes : string[] = [];\n const stored : UserAuthenticatorRecoveryCode[] = [];\n for (let i = 0; i < USER_AUTHENTICATOR_RECOVERY_CODE_COUNT; i++) {\n const code = generateRecoveryCode();\n codes.push(code);\n stored.push({ hash: await hash(code), used_at: null });\n }\n\n // regenerate semantics: a user holds ONE recovery-code set. Reuse the\n // existing row via a single atomic save instead of delete-then-insert,\n // so a mid-operation failure can never leave the user with no codes.\n const [existing] = await this.repository.findAllWithSecretsByUser(user.id, { kind: UserAuthenticatorKind.RECOVERY });\n\n let entity : UserAuthenticator;\n if (existing) {\n existing.name = name;\n existing.codes = JSON.stringify(stored);\n existing.confirmed = true;\n entity = await this.repository.save(existing);\n } else {\n entity = this.repository.create({\n kind: UserAuthenticatorKind.RECOVERY,\n name,\n codes: JSON.stringify(stored),\n confirmed: true,\n userId: user.id,\n realmId: user.realmId,\n });\n entity = await this.repository.save(entity);\n }\n\n await this.recordEvent(EventName.MFA_ENROLLED, entity);\n\n return {\n data: this.sanitize(entity),\n meta: { codes },\n };\n }\n\n // ------------------------------------------------------------------\n\n async confirm(\n id: string,\n code: string,\n actor: ActorContext,\n options: { userId?: string } = {},\n ): Promise<UserAuthenticator> {\n const entity = await this.resolveOne(id, options.userId);\n\n if (!this.isOwnedBy(entity, actor)) {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_UPDATE });\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.USER_AUTHENTICATOR_UPDATE,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: entity,\n ...this.resourceRealmMatch(entity),\n }),\n });\n }\n\n if (entity.confirmed) {\n return this.sanitize(entity);\n }\n\n if (entity.kind === UserAuthenticatorKind.WEBAUTHN) {\n return this.confirmWebauthn(entity, code);\n }\n\n if (entity.kind !== UserAuthenticatorKind.TOTP) {\n throw new ValidationError(`The authenticator kind ${entity.kind} can not be confirmed with a code.`);\n }\n\n await this.assertNotThrottledOrRetry(entity.userId);\n\n const withSecrets = await this.repository.findOneWithSecretsById(entity.id);\n if (!withSecrets) {\n throw new EntityNotFoundError();\n }\n\n if (!await this.verifyTotp(withSecrets, code)) {\n await this.bumpAttempts(entity.userId);\n throw new EntityCredentialsInvalidError();\n }\n\n await this.resetAttempts(entity.userId);\n\n entity.confirmed = true;\n // The consumed step is tracked only on the login-verify path (below),\n // NOT here — so a legitimate first login in the same window as the\n // confirmation is still accepted; only a repeat of an already-used\n // LOGIN code is rejected.\n const output = await this.repository.save(entity);\n\n await this.recordEvent(EventName.MFA_ENROLLED, output);\n\n return this.sanitize(output);\n }\n\n protected async confirmWebauthn(entity: UserAuthenticator, response: string): Promise<UserAuthenticator> {\n const ctx = this.assertWebauthn();\n\n // brute-force throttle, same lifecycle as the TOTP confirm branch — the\n // attestation verify is a real crypto call and must not be retryable\n // without backoff.\n await this.assertNotThrottledOrRetry(entity.userId);\n\n // challenge is keyed by the enrollment row id (see enrollWebauthn), so\n // overlapping ceremonies do not collide.\n const cacheKey = this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX, entity.id);\n\n const state = await this.cache.get<WebauthnChallengeState>(cacheKey);\n if (!state || state.expiresAt < Date.now()) {\n await this.bumpAttempts(entity.userId);\n throw new EntityCredentialsInvalidError();\n }\n\n let parsed : RegistrationResponseJSON;\n try {\n parsed = JSON.parse(response) as RegistrationResponseJSON;\n } catch {\n throw new ValidationError('The registration response is malformed.');\n }\n\n const credential = await verifyWebauthnRegistration(ctx, parsed, state.challenge);\n if (!credential) {\n await this.bumpAttempts(entity.userId);\n throw new EntityCredentialsInvalidError();\n }\n\n await this.resetAttempts(entity.userId);\n await this.cache.drop(cacheKey);\n\n entity.parameters = JSON.stringify(credential);\n entity.confirmed = true;\n const output = await this.repository.save(entity);\n\n await this.recordEvent(EventName.MFA_ENROLLED, output);\n\n return this.sanitize(output);\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n options: { userId?: string } = {},\n ): Promise<UserAuthenticator> {\n const entity = await this.resolveOne(id, options.userId);\n\n if (!this.isOwnedBy(entity, actor)) {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_DELETE });\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.USER_AUTHENTICATOR_DELETE,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: entity,\n ...this.resourceRealmMatch(entity),\n }),\n });\n }\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n await this.recordEvent(EventName.MFA_REMOVED, entity);\n\n return this.sanitize(entity);\n }\n\n // ------------------------------------------------------------------\n\n async verify(\n userId: string,\n input: UserAuthenticatorVerifyInput,\n ctx: UserAuthenticatorVerifyContext = {},\n ): Promise<boolean> {\n try {\n await this.assertNotThrottled(userId);\n } catch (e) {\n if (isMfaThrottledError(e)) {\n throw e;\n }\n\n return false;\n }\n\n // Serialize the read-verify-save critical section per user so a single\n // factor (TOTP step / recovery / email code / webauthn counter) is\n // consumed exactly once even under concurrent verifies. A held lock\n // means another verify is mid-flight — bail without penalty rather than\n // risk a double-consume; that request owns the outcome.\n const lockKey = this.buildVerifyLockCacheKey(userId);\n const lock = await this.acquireVerifyLock(lockKey);\n if (lock.status !== 'acquired') {\n return false;\n }\n\n const lease = this.maintainVerifyLock(lockKey, lock.value);\n\n try {\n const devices = await this.repository.findAllWithSecretsByUser(userId, {\n kind: input.kind,\n confirmed: true,\n });\n\n let matched : UserAuthenticator | undefined;\n\n for (const device of devices) {\n if (input.kind === UserAuthenticatorKind.TOTP) {\n if (await this.verifyTotp(device, input.response)) {\n matched = device;\n }\n }\n\n if (input.kind === UserAuthenticatorKind.RECOVERY) {\n if (await this.verifyRecovery(device, input.response)) {\n matched = device;\n }\n }\n\n if (input.kind === UserAuthenticatorKind.EMAIL) {\n if (await this.verifyEmail(userId, input.response)) {\n matched = device;\n }\n }\n\n if (input.kind === UserAuthenticatorKind.WEBAUTHN) {\n const newCounter = await this.verifyWebauthnDevice(userId, device, input.response);\n if (newCounter !== null) {\n // persist the signature counter (replay defense)\n const parameters = this.parseWebauthnParameters(device);\n if (parameters) {\n device.parameters = JSON.stringify({ ...parameters, counter: newCounter });\n }\n matched = device;\n }\n }\n\n if (matched) {\n break;\n }\n }\n\n if (!matched) {\n await this.bumpAttempts(userId);\n await this.recordChallengeEvent(EventName.MFA_CHALLENGE_FAILED, userId, input.kind, ctx);\n return false;\n }\n\n if (!await lease.renew()) {\n return false;\n }\n\n // Bind the proof to the caller's aggregate (the session mfaAt\n // stamp) BEFORE any consumption persists: a hook failure aborts\n // the verify with nothing consumed — never a burned single-use\n // code without a completed MFA. The residual (a failure AFTER the\n // hook) leaves a stamped session plus a still-valid code — a\n // bounded server-error window, not a lost factor.\n if (ctx.onVerified) {\n await ctx.onVerified();\n }\n\n if (!await lease.renew()) {\n return false;\n }\n\n matched.lastUsedAt = new Date().toISOString();\n await this.repository.save(matched);\n\n // cache-borne single-use artifacts (email code, webauthn challenge\n // nonce) are consumed only once the unit of work committed — the\n // verify lock keeps the deferral race-free.\n if (input.kind === UserAuthenticatorKind.EMAIL) {\n await this.cache.drop(this.buildEmailCodeCacheKey(userId));\n }\n if (input.kind === UserAuthenticatorKind.WEBAUTHN) {\n await this.cache.drop(\n this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, userId),\n );\n }\n\n await this.resetAttempts(userId);\n\n await this.recordChallengeEvent(EventName.MFA_VERIFIED, userId, input.kind, ctx, matched);\n return true;\n } finally {\n await lease.stop();\n await this.releaseVerifyLock(lockKey, lock.value);\n }\n }\n\n protected async verifyTotp(device: UserAuthenticator, token: string): Promise<boolean> {\n if (!device.secret) {\n return false;\n }\n\n let seed : string;\n try {\n // key-id-addressed blob; one referencing an unknown or foreign\n // key fails closed as a verification failure, never a 500.\n seed = await this.cipher.decrypt(device.secret, device.realmId);\n } catch (e) {\n // ... but ONLY for blob-semantics failures. Infrastructure errors\n // (database outage, KEK misconfiguration) must bubble — mapping\n // them to `false` would burn throttle attempts on a blip.\n if (isRealmCipherBlobError(e)) {\n return false;\n }\n\n throw e;\n }\n\n let parameters : UserAuthenticatorTotpParameters = {\n algorithm: USER_AUTHENTICATOR_TOTP_ALGORITHM,\n digits: USER_AUTHENTICATOR_TOTP_DIGITS,\n period: USER_AUTHENTICATOR_TOTP_PERIOD,\n };\n if (device.parameters) {\n parameters = { ...parameters, ...JSON.parse(device.parameters) };\n }\n\n const totp = new TOTP({\n algorithm: parameters.algorithm,\n digits: parameters.digits,\n period: parameters.period,\n secret: Secret.fromBase32(seed),\n });\n\n const delta = totp.validate({ token: token.trim(), window: 1 });\n if (delta === null) {\n return false;\n }\n\n // Reject replay: the accepted step must strictly advance past the last\n // consumed one (RFC 6238 §5.2), so a captured code can't be reused\n // within its ±1 validation window. The per-user verify lock makes the\n // concurrent case (two verifies advancing the same step) safe.\n const step = Math.floor(Date.now() / 1000 / parameters.period) + delta;\n if (typeof parameters.counter === 'number' && step <= parameters.counter) {\n return false;\n }\n\n // persist the consumed step onto the device — the caller saves the row.\n device.parameters = JSON.stringify({ ...parameters, counter: step });\n return true;\n }\n\n protected async verifyRecovery(device: UserAuthenticator, code: string): Promise<boolean> {\n if (!device.codes) {\n return false;\n }\n\n const entries = JSON.parse(device.codes) as UserAuthenticatorRecoveryCode[];\n const normalized = code.trim().toLowerCase();\n\n for (const entry of entries) {\n if (entry.used_at) {\n continue;\n }\n\n if (await compare(normalized, entry.hash)) {\n entry.used_at = new Date().toISOString();\n device.codes = JSON.stringify(entries);\n return true;\n }\n }\n\n return false;\n }\n\n protected parseWebauthnParameters(device: UserAuthenticator): UserAuthenticatorWebauthnParameters | null {\n if (!device.parameters) {\n return null;\n }\n try {\n return JSON.parse(device.parameters) as UserAuthenticatorWebauthnParameters;\n } catch {\n return null;\n }\n }\n\n protected async verifyWebauthnDevice(\n userId: string,\n device: UserAuthenticator,\n response: string,\n ): Promise<number | null> {\n const ctx = this.assertWebauthn();\n\n const parameters = this.parseWebauthnParameters(device);\n if (!parameters) {\n return null;\n }\n\n let parsed : AuthenticationResponseJSON;\n try {\n parsed = JSON.parse(response) as AuthenticationResponseJSON;\n } catch {\n return null;\n }\n\n // the assertion identifies the credential — only verify against its row\n if (parsed.id !== parameters.credential_id) {\n return null;\n }\n\n const state = await this.cache.get<WebauthnChallengeState>(\n this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, userId),\n );\n if (!state || state.expiresAt < Date.now()) {\n return null;\n }\n\n try {\n const result = await verifyWebauthnAuthentication(ctx, parsed, state.challenge, parameters);\n return result.verified ? result.newCounter : null;\n } catch {\n return null;\n }\n }\n\n protected async verifyEmail(userId: string, response: string): Promise<boolean> {\n const key = this.buildEmailCodeCacheKey(userId);\n const state = await this.cache.get<EmailCodeState>(key);\n if (!state || state.expiresAt < Date.now()) {\n return false;\n }\n\n // single-use — but the drop is deferred to the verify success block,\n // AFTER the onVerified hook ran, so a hook failure does not burn the\n // code (the verify lock keeps the deferral race-free).\n return compare(response.trim(), state.hash);\n }\n\n // ------------------------------------------------------------------\n\n async sendChallenge(\n userId: string,\n kind: `${UserAuthenticatorKind}`,\n ctx: UserAuthenticatorSendContext = {},\n ): Promise<void> {\n // Only email needs a server-issued challenge; TOTP/recovery are\n // client-derived (no-op keeps the endpoint uniform).\n if (kind !== UserAuthenticatorKind.EMAIL) {\n return;\n }\n\n this.assertMail();\n await this.assertNotThrottledOrRetry(userId);\n\n // require a CONFIRMED email factor — never mail a code to a user who\n // did not enroll email (no code-spray oracle).\n const devices = await this.repository.findAllWithSecretsByUser(userId, {\n kind: UserAuthenticatorKind.EMAIL,\n confirmed: true,\n });\n if (devices.length === 0) {\n return;\n }\n\n // email column is select:false — force-load it for the recipient.\n const user = await this.userRepository.findOneByWithEmail({ id: userId });\n if (!user || !user.email) {\n return;\n }\n\n // per-user send cooldown — an authenticated caller must not be able to\n // spray unlimited OTP mails. `add` is atomic set-if-absent, so the first\n // send stores the key and any resend within the window returns false.\n // Fails open on a cache error (a transient outage must not block a\n // legitimate code).\n let withinCooldown: boolean;\n try {\n withinCooldown = !(await this.cache.add(\n this.buildEmailSendCacheKey(userId),\n 1,\n { ttl: USER_AUTHENTICATOR_EMAIL_SEND_COOLDOWN * 1_000 },\n ));\n } catch {\n withinCooldown = false;\n }\n if (withinCooldown) {\n throw new MfaThrottledError({ retryAfter: USER_AUTHENTICATOR_EMAIL_SEND_COOLDOWN });\n }\n\n const codeValue = generateNumericCode(USER_AUTHENTICATOR_EMAIL_CODE_LENGTH);\n await this.cache.set(\n this.buildEmailCodeCacheKey(userId),\n {\n hash: await hash(codeValue),\n expiresAt: Date.now() + (USER_AUTHENTICATOR_EMAIL_CODE_EXPIRES_IN_MINUTES * 60 * 1_000),\n } satisfies EmailCodeState,\n { ttl: USER_AUTHENTICATOR_EMAIL_CODE_EXPIRES_IN_MINUTES * 60 * 1_000 },\n );\n\n const mail = await this.mailTemplateRenderer!.render({\n template: MailTemplateName.MFA_EMAIL_OTP,\n params: {\n code: codeValue,\n expiresInMinutes: USER_AUTHENTICATOR_EMAIL_CODE_EXPIRES_IN_MINUTES,\n },\n locale: ctx.locale,\n });\n\n await this.mailClient!.send({\n to: user.email,\n ...mail,\n });\n }\n\n // ------------------------------------------------------------------\n\n async hasConfirmed(userId: string): Promise<boolean> {\n return this.repository.hasConfirmedByUser(userId);\n }\n\n async challenge(\n userId: string,\n options: { issueMaterial?: boolean } = {},\n ): Promise<UserAuthenticatorChallengeStatus> {\n if (!this.options.enabled) {\n return {\n required: false,\n enrollmentRequired: false,\n kinds: [],\n };\n }\n\n const devices = await this.repository.findAllByUser(userId);\n const confirmed = devices.filter((device) => device.confirmed);\n\n const kinds = Array.from(new Set(confirmed.map((device) => device.kind)));\n\n const status : UserAuthenticatorChallengeStatus = {\n required: confirmed.length > 0,\n enrollmentRequired: !!this.options.required && confirmed.length === 0,\n kinds,\n };\n\n // WebAuthn needs server-issued request options as the challenge — build\n // them (and store the nonce) when the subject holds a webauthn factor.\n // Skipped when the caller only needs the requirement flags (issueMaterial\n // false): the enforcement chokepoints must not rotate an in-flight\n // ceremony's nonce nor run this extra query on every request.\n const issueMaterial = options.issueMaterial ?? true;\n if (issueMaterial && kinds.includes(UserAuthenticatorKind.WEBAUTHN) && this.options.webauthn) {\n const credentials = (await this.repository.findAllWithSecretsByUser(userId, {\n kind: UserAuthenticatorKind.WEBAUTHN,\n confirmed: true,\n }))\n .map((device) => this.parseWebauthnParameters(device))\n .filter((parameters): parameters is UserAuthenticatorWebauthnParameters => !!parameters)\n .map((parameters) => ({ id: parameters.credential_id, transports: parameters.transports }));\n\n const { options, challenge } = await buildWebauthnAuthenticationOptions(this.options.webauthn, credentials);\n\n await this.cache.set(\n this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, userId),\n {\n challenge,\n expiresAt: Date.now() + (USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW * 1_000),\n } satisfies WebauthnChallengeState,\n { ttl: USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW * 1_000 },\n );\n\n status.challenge = { webauthn: options };\n }\n\n return status;\n }\n\n // ------------------------------------------------------------------\n\n protected assertEnabled(): void {\n if (!this.options.enabled) {\n throw new AuthupError({\n code: ErrorCode.MFA_NOT_CONFIGURABLE,\n message: 'Multi-factor authentication is not enabled.',\n });\n }\n }\n\n protected assertMail(): void {\n if (!this.mailClient || !this.mailTemplateRenderer) {\n throw new AuthupError({\n code: ErrorCode.MFA_NOT_CONFIGURABLE,\n message: 'Email-based multi-factor authentication requires a configured mail transport.',\n });\n }\n }\n\n protected assertWebauthn(): WebauthnContext {\n if (!this.options.webauthn) {\n throw new AuthupError({\n code: ErrorCode.MFA_NOT_CONFIGURABLE,\n message: 'WebAuthn requires a configured public URL (relying-party origin).',\n });\n }\n\n return this.options.webauthn;\n }\n\n // ------------------------------------------------------------------\n\n protected buildAttemptCacheKey(userId: string): string {\n return buildCacheKey({\n prefix: USER_AUTHENTICATOR_ATTEMPT_CACHE_PREFIX,\n key: userId,\n });\n }\n\n protected buildThrottleCacheKey(userId: string): string {\n return buildCacheKey({\n prefix: USER_AUTHENTICATOR_THROTTLE_CACHE_PREFIX,\n key: userId,\n });\n }\n\n protected buildEmailCodeCacheKey(userId: string): string {\n return buildCacheKey({\n prefix: USER_AUTHENTICATOR_EMAIL_CODE_CACHE_PREFIX,\n key: userId,\n });\n }\n\n protected buildEmailSendCacheKey(userId: string): string {\n return buildCacheKey({\n prefix: USER_AUTHENTICATOR_EMAIL_SEND_CACHE_PREFIX,\n key: userId,\n });\n }\n\n protected buildWebauthnCacheKey(prefix: string, userId: string): string {\n return buildCacheKey({ prefix, key: userId });\n }\n\n protected buildVerifyLockCacheKey(userId: string): string {\n return buildCacheKey({\n prefix: USER_AUTHENTICATOR_VERIFY_LOCK_CACHE_PREFIX,\n key: userId,\n });\n }\n\n protected async acquireVerifyLock(key: string): Promise<VerifyLock> {\n const value = randomUUID();\n\n try {\n return (await this.cache.add(key, value, { ttl: USER_AUTHENTICATOR_VERIFY_LOCK_TTL })) ?\n { status: 'acquired', value } :\n { status: 'busy' };\n } catch {\n return { status: 'unavailable' };\n }\n }\n\n protected maintainVerifyLock(key: string, value: string): VerifyLockLease {\n let owned = true;\n let pending : Promise<void> | undefined;\n\n const queueRenewal = () => {\n if (!owned || pending) {\n return pending;\n }\n\n pending = this.cache\n .renewIfValue(key, value, USER_AUTHENTICATOR_VERIFY_LOCK_TTL)\n .then((renewed) => {\n owned = renewed;\n })\n .catch(() => {\n owned = false;\n })\n .finally(() => {\n pending = undefined;\n });\n\n return pending;\n };\n\n const timer = setInterval(queueRenewal, USER_AUTHENTICATOR_VERIFY_LOCK_RENEW_INTERVAL);\n\n return {\n renew: async () => {\n await queueRenewal();\n return owned;\n },\n stop: async () => {\n clearInterval(timer);\n await pending;\n },\n };\n }\n\n protected async releaseVerifyLock(key: string, value: string): Promise<void> {\n try {\n await this.cache.dropIfValue(key, value);\n } catch {\n // Best-effort release; the renewable lock TTL bounds a stranded key.\n }\n }\n\n protected async assertNotThrottled(userId: string): Promise<void> {\n const lockedUntil = await this.cache.get<number>(this.buildThrottleCacheKey(userId));\n if (typeof lockedUntil === 'number' && lockedUntil > Date.now()) {\n throw new MfaThrottledError({ retryAfter: Math.ceil((lockedUntil - Date.now()) / 1_000) });\n }\n }\n\n // Throttle gate for the throwing entry points (confirm / confirmWebauthn /\n // sendChallenge). Mirrors verify()'s fail-closed posture: a genuine lockout\n // surfaces unchanged, while an unreadable throttle counter (cache outage) is\n // treated as a lockout — the caller is told to retry (429) rather than the\n // outage bubbling up as an internal 500.\n protected async assertNotThrottledOrRetry(userId: string): Promise<void> {\n try {\n await this.assertNotThrottled(userId);\n } catch (e) {\n if (isMfaThrottledError(e)) {\n throw e;\n }\n\n throw new MfaThrottledError({ retryAfter: USER_AUTHENTICATOR_ATTEMPT_LOCK_FACTOR });\n }\n }\n\n protected async bumpAttempts(userId: string): Promise<void> {\n const key = this.buildAttemptCacheKey(userId);\n\n // Atomic increment — concurrent failures (verify OR confirm) each get\n // a distinct count, so the exponential backoff never under-counts.\n let count : number;\n try {\n count = await this.cache.increment(key, 1, { ttl: USER_AUTHENTICATOR_ATTEMPT_WINDOW * 1_000 });\n } catch {\n // a non-numeric value at the key (legacy JSON state) — reset and\n // re-count; a genuine cache outage rethrows from the drop.\n await this.cache.drop(key);\n count = await this.cache.increment(key, 1, { ttl: USER_AUTHENTICATOR_ATTEMPT_WINDOW * 1_000 });\n }\n\n const delay = Math.min(\n USER_AUTHENTICATOR_ATTEMPT_LOCK_MAX,\n USER_AUTHENTICATOR_ATTEMPT_LOCK_FACTOR * (2 ** (count - 1)),\n );\n\n await this.cache.set(\n this.buildThrottleCacheKey(userId),\n Date.now() + (delay * 1_000),\n { ttl: delay * 1_000 },\n );\n }\n\n protected async resetAttempts(userId: string): Promise<void> {\n await this.cache.dropMany([\n this.buildAttemptCacheKey(userId),\n this.buildThrottleCacheKey(userId),\n ]);\n }\n\n // ------------------------------------------------------------------\n\n protected async recordEvent(\n name: `${EventName}`,\n entity: UserAuthenticator,\n ): Promise<void> {\n await this.eventService?.record({\n scope: EventScope.IDENTITY,\n name,\n refType: EventRefType.USER_AUTHENTICATOR,\n refId: entity.id,\n actorType: IdentityType.USER,\n actorId: entity.userId,\n realmId: entity.realmId,\n data: { kind: entity.kind },\n });\n }\n\n protected async recordChallengeEvent(\n name: `${EventName}`,\n userId: string,\n kind: string,\n ctx: UserAuthenticatorVerifyContext,\n entity?: UserAuthenticator,\n ): Promise<void> {\n await this.eventService?.record({\n scope: EventScope.IDENTITY,\n name,\n refType: EventRefType.USER,\n refId: userId,\n actorType: IdentityType.USER,\n actorId: userId,\n clientId: ctx.clientId ?? null,\n realmId: entity?.realmId ?? null,\n requestIpAddress: ctx.ipAddress ?? null,\n requestUserAgent: ctx.userAgent ?? null,\n data: { kind },\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import type { UserAuthenticator, UserAuthenticatorKind } from '@authup/core-kit';
|
|
2
|
+
import type { IQuery } from '@rapiq/core';
|
|
3
|
+
import type { ActorContext, EntityRepositoryFindManyResult, ICache } from '@authup/server-kit';
|
|
4
|
+
import type { IRealmCipher } from '../../key/index.ts';
|
|
5
|
+
import type { IEventService } from '../event/index.ts';
|
|
6
|
+
import type { IMailClient, IMailTemplateRenderer } from '../../mail/index.ts';
|
|
7
|
+
import type { IUserRepository } from '../user/index.ts';
|
|
8
|
+
export declare const USER_AUTHENTICATOR_FILTER_KEYS: readonly ["id", "kind", "confirmed", "userId", "realmId"];
|
|
9
|
+
export type UserAuthenticatorOwner = {
|
|
10
|
+
userId: string;
|
|
11
|
+
};
|
|
12
|
+
export type UserAuthenticatorFindManyOptions = {
|
|
13
|
+
owner?: UserAuthenticatorOwner;
|
|
14
|
+
};
|
|
15
|
+
export type UserAuthenticatorSecretsFilter = {
|
|
16
|
+
kind?: `${UserAuthenticatorKind}`;
|
|
17
|
+
confirmed?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export interface IUserAuthenticatorRepository {
|
|
20
|
+
findMany(query: IQuery, options?: UserAuthenticatorFindManyOptions): Promise<EntityRepositoryFindManyResult<UserAuthenticator>>;
|
|
21
|
+
findOneById(id: string): Promise<UserAuthenticator | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Like findOneById, but force-selects the secret/codes columns
|
|
24
|
+
* (select:false). Verification-path only — never for read endpoints.
|
|
25
|
+
*/
|
|
26
|
+
findOneWithSecretsById(id: string): Promise<UserAuthenticator | null>;
|
|
27
|
+
findAllByUser(userId: string): Promise<UserAuthenticator[]>;
|
|
28
|
+
findAllWithSecretsByUser(userId: string, filter?: UserAuthenticatorSecretsFilter): Promise<UserAuthenticator[]>;
|
|
29
|
+
hasConfirmedByUser(userId: string): Promise<boolean>;
|
|
30
|
+
create(data: Partial<UserAuthenticator>): UserAuthenticator;
|
|
31
|
+
save(entity: UserAuthenticator): Promise<UserAuthenticator>;
|
|
32
|
+
remove(entity: UserAuthenticator): Promise<void>;
|
|
33
|
+
removeAllByUser(userId: string, kind: `${UserAuthenticatorKind}`): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Stored on a recovery row's `codes` column as a JSON array.
|
|
37
|
+
*/
|
|
38
|
+
export type UserAuthenticatorRecoveryCode = {
|
|
39
|
+
hash: string;
|
|
40
|
+
used_at: string | null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Stored on a TOTP row's `parameters` column as JSON.
|
|
44
|
+
*/
|
|
45
|
+
export type UserAuthenticatorTotpParameters = {
|
|
46
|
+
algorithm: string;
|
|
47
|
+
digits: number;
|
|
48
|
+
period: number;
|
|
49
|
+
/**
|
|
50
|
+
* Last accepted TOTP step (absolute period counter). A verify only
|
|
51
|
+
* succeeds for a strictly greater step — rejects replay within the
|
|
52
|
+
* validation window (RFC 6238 §5.2).
|
|
53
|
+
*/
|
|
54
|
+
counter?: number;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Stored on a WebAuthn row's `parameters` column as JSON — the registered
|
|
58
|
+
* credential (base64url id + public key, signature counter, transports).
|
|
59
|
+
*/
|
|
60
|
+
export type UserAuthenticatorWebauthnParameters = {
|
|
61
|
+
rp_id: string;
|
|
62
|
+
credential_id: string;
|
|
63
|
+
public_key: string;
|
|
64
|
+
counter: number;
|
|
65
|
+
transports?: string[];
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Kind-specific shown-once provisioning material — returned alongside the
|
|
69
|
+
* enrolled entity exactly once, never in a subsequent read.
|
|
70
|
+
*/
|
|
71
|
+
export type UserAuthenticatorEnrollResultMeta = {
|
|
72
|
+
/**
|
|
73
|
+
* TOTP: the raw base32 seed — present in the enroll response only,
|
|
74
|
+
* never in a subsequent read.
|
|
75
|
+
*/
|
|
76
|
+
secret?: string;
|
|
77
|
+
/**
|
|
78
|
+
* TOTP: the otpauth:// provisioning URI.
|
|
79
|
+
*/
|
|
80
|
+
uri?: string;
|
|
81
|
+
/**
|
|
82
|
+
* TOTP: the provisioning URI rendered as a PNG data-URI (QR code).
|
|
83
|
+
*/
|
|
84
|
+
qr?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Recovery: the raw single-use codes — shown once (download/print).
|
|
87
|
+
*/
|
|
88
|
+
codes?: string[];
|
|
89
|
+
/**
|
|
90
|
+
* WebAuthn: the registration ceremony options the client passes to
|
|
91
|
+
* `navigator.credentials.create()` (SimpleWebAuthn `startRegistration`).
|
|
92
|
+
*/
|
|
93
|
+
webauthn?: Record<string, unknown>;
|
|
94
|
+
};
|
|
95
|
+
export type UserAuthenticatorEnrollResult = {
|
|
96
|
+
data: UserAuthenticator;
|
|
97
|
+
meta: UserAuthenticatorEnrollResultMeta;
|
|
98
|
+
};
|
|
99
|
+
export type UserAuthenticatorChallengeStatus = {
|
|
100
|
+
/**
|
|
101
|
+
* The subject holds at least one confirmed device (and MFA is enabled)
|
|
102
|
+
* — a second factor must be presented.
|
|
103
|
+
*/
|
|
104
|
+
required: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* MFA is enforced org-wide (mfaRequired) and the subject has no
|
|
107
|
+
* confirmed device — the UI routes to inline enrollment.
|
|
108
|
+
*/
|
|
109
|
+
enrollmentRequired: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Device kinds the subject can be challenged with.
|
|
112
|
+
*/
|
|
113
|
+
kinds: `${UserAuthenticatorKind}`[];
|
|
114
|
+
/**
|
|
115
|
+
* Kind-specific challenge payload (absent for TOTP/recovery;
|
|
116
|
+
* WebAuthn request options in a later stage).
|
|
117
|
+
*/
|
|
118
|
+
challenge?: Record<string, unknown>;
|
|
119
|
+
};
|
|
120
|
+
export type UserAuthenticatorVerifyInput = {
|
|
121
|
+
kind: `${UserAuthenticatorKind}`;
|
|
122
|
+
response: string;
|
|
123
|
+
};
|
|
124
|
+
export type UserAuthenticatorVerifyContext = {
|
|
125
|
+
ipAddress?: string | null;
|
|
126
|
+
userAgent?: string | null;
|
|
127
|
+
clientId?: string | null;
|
|
128
|
+
/**
|
|
129
|
+
* Runs inside the verify critical section once the factor matched,
|
|
130
|
+
* BEFORE the consumption (TOTP step / recovery used_at / email code)
|
|
131
|
+
* is persisted. A throw aborts the verify without consuming the factor
|
|
132
|
+
* — the seam for binding the proof to another aggregate (the session
|
|
133
|
+
* mfaAt stamp) so a stamp failure never burns a single-use code.
|
|
134
|
+
*/
|
|
135
|
+
onVerified?: () => Promise<void>;
|
|
136
|
+
};
|
|
137
|
+
export type UserAuthenticatorChallengeOptions = {
|
|
138
|
+
/**
|
|
139
|
+
* Issue kind-specific challenge material as a side effect (e.g. mint +
|
|
140
|
+
* cache the WebAuthn request nonce). Only the interactive status endpoint
|
|
141
|
+
* needs it; the enforcement chokepoints (authorize backstop, password
|
|
142
|
+
* grant) read `required`/`enrollmentRequired`/`kinds` only and pass
|
|
143
|
+
* `false` so they don't rotate an in-flight ceremony's nonce or run the
|
|
144
|
+
* extra query on every request. Defaults to `true`.
|
|
145
|
+
*/
|
|
146
|
+
issueMaterial?: boolean;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* The login-time seam: computes whether (and how) a subject must be
|
|
150
|
+
* challenged. Consumed by the authorize backstop and the password grant.
|
|
151
|
+
*/
|
|
152
|
+
export interface IUserAuthenticatorChallengeProvider {
|
|
153
|
+
challenge(userId: string, options?: UserAuthenticatorChallengeOptions): Promise<UserAuthenticatorChallengeStatus>;
|
|
154
|
+
}
|
|
155
|
+
export interface IUserAuthenticatorService extends IUserAuthenticatorChallengeProvider {
|
|
156
|
+
getMany(query: Record<string, any>, actor: ActorContext, options?: {
|
|
157
|
+
userId?: string;
|
|
158
|
+
}): Promise<EntityRepositoryFindManyResult<UserAuthenticator>>;
|
|
159
|
+
getOne(id: string, actor: ActorContext, options?: {
|
|
160
|
+
userId?: string;
|
|
161
|
+
}): Promise<UserAuthenticator>;
|
|
162
|
+
enroll(data: Record<string, any>, actor: ActorContext): Promise<UserAuthenticatorEnrollResult>;
|
|
163
|
+
confirm(id: string, code: string, actor: ActorContext, options?: {
|
|
164
|
+
userId?: string;
|
|
165
|
+
}): Promise<UserAuthenticator>;
|
|
166
|
+
delete(id: string, actor: ActorContext, options?: {
|
|
167
|
+
userId?: string;
|
|
168
|
+
}): Promise<UserAuthenticator>;
|
|
169
|
+
verify(userId: string, input: UserAuthenticatorVerifyInput, ctx?: UserAuthenticatorVerifyContext): Promise<boolean>;
|
|
170
|
+
/**
|
|
171
|
+
* Issue a kind-specific challenge (email OTP: generate + mail a code).
|
|
172
|
+
* A no-op for kinds whose challenge material is client-derived (TOTP).
|
|
173
|
+
*/
|
|
174
|
+
sendChallenge(userId: string, kind: `${UserAuthenticatorKind}`, ctx?: UserAuthenticatorSendContext): Promise<void>;
|
|
175
|
+
hasConfirmed(userId: string): Promise<boolean>;
|
|
176
|
+
}
|
|
177
|
+
export type UserAuthenticatorSendContext = {
|
|
178
|
+
locale?: string;
|
|
179
|
+
};
|
|
180
|
+
export type UserAuthenticatorServiceOptions = {
|
|
181
|
+
/**
|
|
182
|
+
* Org-wide MFA feature toggle (config: mfaEnabled).
|
|
183
|
+
*/
|
|
184
|
+
enabled?: boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Enforce MFA for every user (config: mfaRequired) — users without a
|
|
187
|
+
* confirmed device are routed to inline enrollment at next login.
|
|
188
|
+
*/
|
|
189
|
+
required?: boolean;
|
|
190
|
+
/**
|
|
191
|
+
* Issuer label for otpauth:// provisioning URIs.
|
|
192
|
+
*/
|
|
193
|
+
issuer?: string;
|
|
194
|
+
/**
|
|
195
|
+
* WebAuthn relying-party context, derived from publicUrl (the hosted
|
|
196
|
+
* login origin). Absent = WebAuthn enrollment/verification is refused.
|
|
197
|
+
*/
|
|
198
|
+
webauthn?: {
|
|
199
|
+
rpId: string;
|
|
200
|
+
rpName: string;
|
|
201
|
+
origin: string;
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
export type UserAuthenticatorServiceContext = {
|
|
205
|
+
repository: IUserAuthenticatorRepository;
|
|
206
|
+
userRepository: IUserRepository;
|
|
207
|
+
cache: ICache;
|
|
208
|
+
/**
|
|
209
|
+
* Realm-scoped seed cipher over the key store's per-realm enc keys
|
|
210
|
+
* (auto-generated on first use — no operator-provided key).
|
|
211
|
+
*/
|
|
212
|
+
cipher: IRealmCipher;
|
|
213
|
+
eventService?: IEventService;
|
|
214
|
+
/**
|
|
215
|
+
* Mail dependencies for the email-OTP kind (absent = email OTP
|
|
216
|
+
* enrollment/send is refused).
|
|
217
|
+
*/
|
|
218
|
+
mailClient?: IMailClient;
|
|
219
|
+
mailTemplateRenderer?: IMailTemplateRenderer;
|
|
220
|
+
options?: UserAuthenticatorServiceOptions;
|
|
221
|
+
};
|
|
222
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/user-authenticator/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
//#region src/core/entities/user-authenticator/types.ts
|
|
5
|
+
const USER_AUTHENTICATOR_FILTER_KEYS = [
|
|
6
|
+
"id",
|
|
7
|
+
"kind",
|
|
8
|
+
"confirmed",
|
|
9
|
+
"userId",
|
|
10
|
+
"realmId"
|
|
11
|
+
];
|
|
12
|
+
//#endregion
|
|
13
|
+
export { USER_AUTHENTICATOR_FILTER_KEYS };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","names":["USER_AUTHENTICATOR_FILTER_KEYS"],"sources":["../../../../src/core/entities/user-authenticator/types.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { UserAuthenticator, UserAuthenticatorKind } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type {\n ActorContext,\n EntityRepositoryFindManyResult,\n ICache,\n} from '@authup/server-kit';\nimport type { IRealmCipher } from '../../key/index.ts';\nimport type { IEventService } from '../event/index.ts';\nimport type { IMailClient, IMailTemplateRenderer } from '../../mail/index.ts';\nimport type { IUserRepository } from '../user/index.ts';\n\nexport const USER_AUTHENTICATOR_FILTER_KEYS = [\n 'id',\n 'kind',\n 'confirmed',\n 'userId',\n 'realmId',\n] as const;\n\nexport type UserAuthenticatorOwner = {\n userId: string,\n};\n\nexport type UserAuthenticatorFindManyOptions = {\n owner?: UserAuthenticatorOwner,\n};\n\nexport type UserAuthenticatorSecretsFilter = {\n kind?: `${UserAuthenticatorKind}`,\n confirmed?: boolean,\n};\n\nexport interface IUserAuthenticatorRepository {\n findMany(\n query: IQuery,\n options?: UserAuthenticatorFindManyOptions\n ): Promise<EntityRepositoryFindManyResult<UserAuthenticator>>;\n\n findOneById(id: string): Promise<UserAuthenticator | null>;\n\n /**\n * Like findOneById, but force-selects the secret/codes columns\n * (select:false). Verification-path only — never for read endpoints.\n */\n findOneWithSecretsById(id: string): Promise<UserAuthenticator | null>;\n\n findAllByUser(userId: string): Promise<UserAuthenticator[]>;\n\n findAllWithSecretsByUser(\n userId: string,\n filter?: UserAuthenticatorSecretsFilter\n ): Promise<UserAuthenticator[]>;\n\n hasConfirmedByUser(userId: string): Promise<boolean>;\n\n create(data: Partial<UserAuthenticator>): UserAuthenticator;\n\n save(entity: UserAuthenticator): Promise<UserAuthenticator>;\n\n remove(entity: UserAuthenticator): Promise<void>;\n\n removeAllByUser(userId: string, kind: `${UserAuthenticatorKind}`): Promise<void>;\n}\n\n/**\n * Stored on a recovery row's `codes` column as a JSON array.\n */\nexport type UserAuthenticatorRecoveryCode = {\n hash: string,\n used_at: string | null,\n};\n\n/**\n * Stored on a TOTP row's `parameters` column as JSON.\n */\nexport type UserAuthenticatorTotpParameters = {\n algorithm: string,\n digits: number,\n period: number,\n /**\n * Last accepted TOTP step (absolute period counter). A verify only\n * succeeds for a strictly greater step — rejects replay within the\n * validation window (RFC 6238 §5.2).\n */\n counter?: number,\n};\n\n/**\n * Stored on a WebAuthn row's `parameters` column as JSON — the registered\n * credential (base64url id + public key, signature counter, transports).\n */\nexport type UserAuthenticatorWebauthnParameters = {\n rp_id: string,\n credential_id: string,\n public_key: string,\n counter: number,\n transports?: string[],\n};\n\n/**\n * Kind-specific shown-once provisioning material — returned alongside the\n * enrolled entity exactly once, never in a subsequent read.\n */\nexport type UserAuthenticatorEnrollResultMeta = {\n /**\n * TOTP: the raw base32 seed — present in the enroll response only,\n * never in a subsequent read.\n */\n secret?: string,\n /**\n * TOTP: the otpauth:// provisioning URI.\n */\n uri?: string,\n /**\n * TOTP: the provisioning URI rendered as a PNG data-URI (QR code).\n */\n qr?: string,\n /**\n * Recovery: the raw single-use codes — shown once (download/print).\n */\n codes?: string[],\n /**\n * WebAuthn: the registration ceremony options the client passes to\n * `navigator.credentials.create()` (SimpleWebAuthn `startRegistration`).\n */\n webauthn?: Record<string, unknown>,\n};\n\nexport type UserAuthenticatorEnrollResult = {\n data: UserAuthenticator,\n meta: UserAuthenticatorEnrollResultMeta,\n};\n\nexport type UserAuthenticatorChallengeStatus = {\n /**\n * The subject holds at least one confirmed device (and MFA is enabled)\n * — a second factor must be presented.\n */\n required: boolean,\n /**\n * MFA is enforced org-wide (mfaRequired) and the subject has no\n * confirmed device — the UI routes to inline enrollment.\n */\n enrollmentRequired: boolean,\n /**\n * Device kinds the subject can be challenged with.\n */\n kinds: `${UserAuthenticatorKind}`[],\n /**\n * Kind-specific challenge payload (absent for TOTP/recovery;\n * WebAuthn request options in a later stage).\n */\n challenge?: Record<string, unknown>,\n};\n\nexport type UserAuthenticatorVerifyInput = {\n kind: `${UserAuthenticatorKind}`,\n response: string,\n};\n\nexport type UserAuthenticatorVerifyContext = {\n ipAddress?: string | null,\n userAgent?: string | null,\n clientId?: string | null,\n /**\n * Runs inside the verify critical section once the factor matched,\n * BEFORE the consumption (TOTP step / recovery used_at / email code)\n * is persisted. A throw aborts the verify without consuming the factor\n * — the seam for binding the proof to another aggregate (the session\n * mfaAt stamp) so a stamp failure never burns a single-use code.\n */\n onVerified?: () => Promise<void>,\n};\n\nexport type UserAuthenticatorChallengeOptions = {\n /**\n * Issue kind-specific challenge material as a side effect (e.g. mint +\n * cache the WebAuthn request nonce). Only the interactive status endpoint\n * needs it; the enforcement chokepoints (authorize backstop, password\n * grant) read `required`/`enrollmentRequired`/`kinds` only and pass\n * `false` so they don't rotate an in-flight ceremony's nonce or run the\n * extra query on every request. Defaults to `true`.\n */\n issueMaterial?: boolean,\n};\n\n/**\n * The login-time seam: computes whether (and how) a subject must be\n * challenged. Consumed by the authorize backstop and the password grant.\n */\nexport interface IUserAuthenticatorChallengeProvider {\n challenge(userId: string, options?: UserAuthenticatorChallengeOptions): Promise<UserAuthenticatorChallengeStatus>;\n}\n\nexport interface IUserAuthenticatorService extends IUserAuthenticatorChallengeProvider {\n getMany(\n query: Record<string, any>,\n actor: ActorContext,\n options?: { userId?: string }\n ): Promise<EntityRepositoryFindManyResult<UserAuthenticator>>;\n\n getOne(id: string, actor: ActorContext, options?: { userId?: string }): Promise<UserAuthenticator>;\n\n enroll(data: Record<string, any>, actor: ActorContext): Promise<UserAuthenticatorEnrollResult>;\n\n confirm(id: string, code: string, actor: ActorContext, options?: { userId?: string }): Promise<UserAuthenticator>;\n\n delete(id: string, actor: ActorContext, options?: { userId?: string }): Promise<UserAuthenticator>;\n\n verify(\n userId: string,\n input: UserAuthenticatorVerifyInput,\n ctx?: UserAuthenticatorVerifyContext\n ): Promise<boolean>;\n\n /**\n * Issue a kind-specific challenge (email OTP: generate + mail a code).\n * A no-op for kinds whose challenge material is client-derived (TOTP).\n */\n sendChallenge(\n userId: string,\n kind: `${UserAuthenticatorKind}`,\n ctx?: UserAuthenticatorSendContext\n ): Promise<void>;\n\n hasConfirmed(userId: string): Promise<boolean>;\n}\n\nexport type UserAuthenticatorSendContext = {\n locale?: string,\n};\n\nexport type UserAuthenticatorServiceOptions = {\n /**\n * Org-wide MFA feature toggle (config: mfaEnabled).\n */\n enabled?: boolean,\n /**\n * Enforce MFA for every user (config: mfaRequired) — users without a\n * confirmed device are routed to inline enrollment at next login.\n */\n required?: boolean,\n /**\n * Issuer label for otpauth:// provisioning URIs.\n */\n issuer?: string,\n /**\n * WebAuthn relying-party context, derived from publicUrl (the hosted\n * login origin). Absent = WebAuthn enrollment/verification is refused.\n */\n webauthn?: {\n rpId: string,\n rpName: string,\n origin: string,\n },\n};\n\nexport type UserAuthenticatorServiceContext = {\n repository: IUserAuthenticatorRepository,\n userRepository: IUserRepository,\n cache: ICache,\n /**\n * Realm-scoped seed cipher over the key store's per-realm enc keys\n * (auto-generated on first use — no operator-provided key).\n */\n cipher: IRealmCipher,\n eventService?: IEventService,\n /**\n * Mail dependencies for the email-OTP kind (absent = email OTP\n * enrollment/send is refused).\n */\n mailClient?: IMailClient,\n mailTemplateRenderer?: IMailTemplateRenderer,\n options?: UserAuthenticatorServiceOptions,\n};\n"],"mappings":";;;;AAmBA,MAAaA,iCAAiC;CAC1C;CACA;CACA;CACA;CACA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AuthenticationResponseJSON, RegistrationResponseJSON } from '@simplewebauthn/server';
|
|
2
|
+
import type { UserAuthenticatorWebauthnParameters } from './types.ts';
|
|
3
|
+
export type WebauthnContext = {
|
|
4
|
+
rpId: string;
|
|
5
|
+
rpName: string;
|
|
6
|
+
origin: string;
|
|
7
|
+
};
|
|
8
|
+
export type WebauthnCredentialRef = {
|
|
9
|
+
id: string;
|
|
10
|
+
transports?: string[];
|
|
11
|
+
};
|
|
12
|
+
export declare function buildWebauthnRegistrationOptions(ctx: WebauthnContext, user: {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
}, existing: WebauthnCredentialRef[]): Promise<{
|
|
16
|
+
options: Record<string, unknown>;
|
|
17
|
+
challenge: string;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function verifyWebauthnRegistration(ctx: WebauthnContext, response: RegistrationResponseJSON, challenge: string): Promise<UserAuthenticatorWebauthnParameters | null>;
|
|
20
|
+
export declare function buildWebauthnAuthenticationOptions(ctx: WebauthnContext, credentials: WebauthnCredentialRef[]): Promise<{
|
|
21
|
+
options: Record<string, unknown>;
|
|
22
|
+
challenge: string;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function verifyWebauthnAuthentication(ctx: WebauthnContext, response: AuthenticationResponseJSON, challenge: string, credential: UserAuthenticatorWebauthnParameters): Promise<{
|
|
25
|
+
verified: boolean;
|
|
26
|
+
newCounter: number;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=webauthn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/user-authenticator/webauthn.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACR,0BAA0B,EAE1B,wBAAwB,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IAGX,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAeF,wBAAsB,gCAAgC,CAClD,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAClC,QAAQ,EAAE,qBAAqB,EAAE,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBlE;AAED,wBAAsB,0BAA0B,CAC5C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,wBAAwB,EAClC,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,mCAAmC,GAAG,IAAI,CAAC,CAsBrD;AAED,wBAAsB,kCAAkC,CACpD,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,qBAAqB,EAAE,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAclE;AAED,wBAAsB,4BAA4B,CAC9C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,0BAA0B,EACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,mCAAmC,GAChD,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBpD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { generateAuthenticationOptions, generateRegistrationOptions, verifyAuthenticationResponse, verifyRegistrationResponse } from "@simplewebauthn/server";
|
|
5
|
+
import { isoBase64URL } from "@simplewebauthn/server/helpers";
|
|
6
|
+
//#region src/core/entities/user-authenticator/webauthn.ts
|
|
7
|
+
function asOpaqueOptions(options) {
|
|
8
|
+
return options;
|
|
9
|
+
}
|
|
10
|
+
function asTransports(transports) {
|
|
11
|
+
return transports;
|
|
12
|
+
}
|
|
13
|
+
async function buildWebauthnRegistrationOptions(ctx, user, existing) {
|
|
14
|
+
const options = await generateRegistrationOptions({
|
|
15
|
+
rpName: ctx.rpName,
|
|
16
|
+
rpID: ctx.rpId,
|
|
17
|
+
userID: new TextEncoder().encode(user.id),
|
|
18
|
+
userName: user.name,
|
|
19
|
+
attestationType: "none",
|
|
20
|
+
excludeCredentials: existing.map((credential) => ({
|
|
21
|
+
id: credential.id,
|
|
22
|
+
transports: asTransports(credential.transports)
|
|
23
|
+
})),
|
|
24
|
+
authenticatorSelection: {
|
|
25
|
+
residentKey: "discouraged",
|
|
26
|
+
userVerification: "preferred"
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
options: asOpaqueOptions(options),
|
|
31
|
+
challenge: options.challenge
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async function verifyWebauthnRegistration(ctx, response, challenge) {
|
|
35
|
+
const verification = await verifyRegistrationResponse({
|
|
36
|
+
response,
|
|
37
|
+
expectedChallenge: challenge,
|
|
38
|
+
expectedOrigin: ctx.origin,
|
|
39
|
+
expectedRPID: ctx.rpId,
|
|
40
|
+
requireUserVerification: false
|
|
41
|
+
});
|
|
42
|
+
if (!verification.verified || !verification.registrationInfo) return null;
|
|
43
|
+
const { credential } = verification.registrationInfo;
|
|
44
|
+
return {
|
|
45
|
+
rp_id: ctx.rpId,
|
|
46
|
+
credential_id: credential.id,
|
|
47
|
+
public_key: isoBase64URL.fromBuffer(credential.publicKey),
|
|
48
|
+
counter: credential.counter,
|
|
49
|
+
transports: credential.transports
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async function buildWebauthnAuthenticationOptions(ctx, credentials) {
|
|
53
|
+
const options = await generateAuthenticationOptions({
|
|
54
|
+
rpID: ctx.rpId,
|
|
55
|
+
userVerification: "preferred",
|
|
56
|
+
allowCredentials: credentials.map((credential) => ({
|
|
57
|
+
id: credential.id,
|
|
58
|
+
transports: asTransports(credential.transports)
|
|
59
|
+
}))
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
options: asOpaqueOptions(options),
|
|
63
|
+
challenge: options.challenge
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function verifyWebauthnAuthentication(ctx, response, challenge, credential) {
|
|
67
|
+
const verification = await verifyAuthenticationResponse({
|
|
68
|
+
response,
|
|
69
|
+
expectedChallenge: challenge,
|
|
70
|
+
expectedOrigin: ctx.origin,
|
|
71
|
+
expectedRPID: ctx.rpId,
|
|
72
|
+
requireUserVerification: false,
|
|
73
|
+
credential: {
|
|
74
|
+
id: credential.credential_id,
|
|
75
|
+
publicKey: isoBase64URL.toBuffer(credential.public_key),
|
|
76
|
+
counter: credential.counter,
|
|
77
|
+
transports: asTransports(credential.transports)
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
verified: verification.verified,
|
|
82
|
+
newCounter: verification.authenticationInfo?.newCounter ?? credential.counter
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { buildWebauthnAuthenticationOptions, buildWebauthnRegistrationOptions, verifyWebauthnAuthentication, verifyWebauthnRegistration };
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=webauthn.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webauthn.mjs","names":["generateAuthenticationOptions","generateRegistrationOptions","verifyAuthenticationResponse","verifyRegistrationResponse","isoBase64URL","asOpaqueOptions","options","asTransports","transports","buildWebauthnRegistrationOptions","ctx","user","existing","rpName","rpID","rpId","userID","TextEncoder","encode","id","userName","name","attestationType","excludeCredentials","map","credential","authenticatorSelection","residentKey","userVerification","challenge","verifyWebauthnRegistration","response","verification","expectedChallenge","expectedOrigin","origin","expectedRPID","requireUserVerification","verified","registrationInfo","rp_id","credential_id","public_key","fromBuffer","publicKey","counter","buildWebauthnAuthenticationOptions","credentials","allowCredentials","verifyWebauthnAuthentication","toBuffer","newCounter","authenticationInfo"],"sources":["../../../../src/core/entities/user-authenticator/webauthn.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n generateAuthenticationOptions,\n generateRegistrationOptions,\n verifyAuthenticationResponse,\n verifyRegistrationResponse,\n} from '@simplewebauthn/server';\nimport { isoBase64URL } from '@simplewebauthn/server/helpers';\nimport type {\n AuthenticationResponseJSON,\n AuthenticatorTransportFuture,\n RegistrationResponseJSON,\n} from '@simplewebauthn/server';\nimport type { UserAuthenticatorWebauthnParameters } from './types.ts';\n\nexport type WebauthnContext = {\n rpId: string,\n rpName: string,\n origin: string,\n};\n\nexport type WebauthnCredentialRef = {\n id: string,\n // persisted as a plain string[] on the credential row (JSON column); the\n // SimpleWebAuthn API narrows it to its transport string-literal union.\n transports?: string[],\n};\n\n// The SimpleWebAuthn option objects are serialized verbatim to the browser\n// (navigator.credentials.*). They cross the wire as an opaque JSON blob, so the\n// public DTO deliberately keeps them as `Record<string, unknown>` rather than\n// leaking @simplewebauthn/server types into the shared HTTP contract — hence the\n// single boundary conversion below.\nfunction asOpaqueOptions(options: object): Record<string, unknown> {\n return options as unknown as Record<string, unknown>;\n}\n\nfunction asTransports(transports?: string[]): AuthenticatorTransportFuture[] | undefined {\n return transports as AuthenticatorTransportFuture[] | undefined;\n}\n\nexport async function buildWebauthnRegistrationOptions(\n ctx: WebauthnContext,\n user: { id: string, name: string },\n existing: WebauthnCredentialRef[],\n): Promise<{ options: Record<string, unknown>, challenge: string }> {\n const options = await generateRegistrationOptions({\n rpName: ctx.rpName,\n rpID: ctx.rpId,\n userID: new TextEncoder().encode(user.id),\n userName: user.name,\n attestationType: 'none',\n excludeCredentials: existing.map((credential) => ({\n id: credential.id,\n transports: asTransports(credential.transports),\n })),\n authenticatorSelection: {\n residentKey: 'discouraged',\n userVerification: 'preferred',\n },\n });\n\n return {\n options: asOpaqueOptions(options),\n challenge: options.challenge,\n };\n}\n\nexport async function verifyWebauthnRegistration(\n ctx: WebauthnContext,\n response: RegistrationResponseJSON,\n challenge: string,\n): Promise<UserAuthenticatorWebauthnParameters | null> {\n const verification = await verifyRegistrationResponse({\n response,\n expectedChallenge: challenge,\n expectedOrigin: ctx.origin,\n expectedRPID: ctx.rpId,\n requireUserVerification: false,\n });\n\n if (!verification.verified || !verification.registrationInfo) {\n return null;\n }\n\n const { credential } = verification.registrationInfo;\n\n return {\n rp_id: ctx.rpId,\n credential_id: credential.id,\n public_key: isoBase64URL.fromBuffer(credential.publicKey),\n counter: credential.counter,\n transports: credential.transports,\n };\n}\n\nexport async function buildWebauthnAuthenticationOptions(\n ctx: WebauthnContext,\n credentials: WebauthnCredentialRef[],\n): Promise<{ options: Record<string, unknown>, challenge: string }> {\n const options = await generateAuthenticationOptions({\n rpID: ctx.rpId,\n userVerification: 'preferred',\n allowCredentials: credentials.map((credential) => ({\n id: credential.id,\n transports: asTransports(credential.transports),\n })),\n });\n\n return {\n options: asOpaqueOptions(options),\n challenge: options.challenge,\n };\n}\n\nexport async function verifyWebauthnAuthentication(\n ctx: WebauthnContext,\n response: AuthenticationResponseJSON,\n challenge: string,\n credential: UserAuthenticatorWebauthnParameters,\n): Promise<{ verified: boolean, newCounter: number }> {\n const verification = await verifyAuthenticationResponse({\n response,\n expectedChallenge: challenge,\n expectedOrigin: ctx.origin,\n expectedRPID: ctx.rpId,\n requireUserVerification: false,\n credential: {\n id: credential.credential_id,\n publicKey: isoBase64URL.toBuffer(credential.public_key),\n counter: credential.counter,\n transports: asTransports(credential.transports),\n },\n });\n\n return {\n verified: verification.verified,\n newCounter: verification.authenticationInfo?.newCounter ?? credential.counter,\n };\n}\n"],"mappings":";;;;;;AAuCA,SAASK,gBAAgBC,SAAe;CACpC,OAAOA;AACX;AAEA,SAASC,aAAaC,YAAqB;CACvC,OAAOA;AACX;AAEA,eAAsBC,iCAClBC,KACAC,MACAC,UAAiC;CAEjC,MAAMN,UAAU,MAAML,4BAA4B;EAC9CY,QAAQH,IAAIG;EACZC,MAAMJ,IAAIK;EACVC,QAAQ,IAAIC,YAAAA,CAAAA,CAAcC,OAAOP,KAAKQ,EAAE;EACxCC,UAAUT,KAAKU;EACfC,iBAAiB;EACjBC,oBAAoBX,SAASY,KAAKC,gBAAgB;GAC9CN,IAAIM,WAAWN;GACfX,YAAYD,aAAakB,WAAWjB,UAAU;EAClD,EAAA;EACAkB,wBAAwB;GACpBC,aAAa;GACbC,kBAAkB;EACtB;CACJ,CAAA;CAEA,OAAO;EACHtB,SAASD,gBAAgBC,OAAAA;EACzBuB,WAAWvB,QAAQuB;CACvB;AACJ;AAEA,eAAsBC,2BAClBpB,KACAqB,UACAF,WAAiB;CAEjB,MAAMG,eAAe,MAAM7B,2BAA2B;EAClD4B;EACAE,mBAAmBJ;EACnBK,gBAAgBxB,IAAIyB;EACpBC,cAAc1B,IAAIK;EAClBsB,yBAAyB;CAC7B,CAAA;CAEA,IAAI,CAACL,aAAaM,YAAY,CAACN,aAAaO,kBACxC,OAAO;CAGX,MAAM,EAAEd,eAAeO,aAAaO;CAEpC,OAAO;EACHC,OAAO9B,IAAIK;EACX0B,eAAehB,WAAWN;EAC1BuB,YAAYtC,aAAauC,WAAWlB,WAAWmB,SAAS;EACxDC,SAASpB,WAAWoB;EACpBrC,YAAYiB,WAAWjB;CAC3B;AACJ;AAEA,eAAsBsC,mCAClBpC,KACAqC,aAAoC;CAEpC,MAAMzC,UAAU,MAAMN,8BAA8B;EAChDc,MAAMJ,IAAIK;EACVa,kBAAkB;EAClBoB,kBAAkBD,YAAYvB,KAAKC,gBAAgB;GAC/CN,IAAIM,WAAWN;GACfX,YAAYD,aAAakB,WAAWjB,UAAU;EAClD,EAAA;CACJ,CAAA;CAEA,OAAO;EACHF,SAASD,gBAAgBC,OAAAA;EACzBuB,WAAWvB,QAAQuB;CACvB;AACJ;AAEA,eAAsBoB,6BAClBvC,KACAqB,UACAF,WACAJ,YAA+C;CAE/C,MAAMO,eAAe,MAAM9B,6BAA6B;EACpD6B;EACAE,mBAAmBJ;EACnBK,gBAAgBxB,IAAIyB;EACpBC,cAAc1B,IAAIK;EAClBsB,yBAAyB;EACzBZ,YAAY;GACRN,IAAIM,WAAWgB;GACfG,WAAWxC,aAAa8C,SAASzB,WAAWiB,UAAU;GACtDG,SAASpB,WAAWoB;GACpBrC,YAAYD,aAAakB,WAAWjB,UAAU;EAClD;CACJ,CAAA;CAEA,OAAO;EACH8B,UAAUN,aAAaM;EACvBa,YAAYnB,aAAaoB,oBAAoBD,cAAc1B,WAAWoB;CAC1E;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/user-permission/index.ts"],"names":[],"mappings":"AAOA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/user-permission/index.ts"],"names":[],"mappings":"AAOA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/user-permission/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,eAAO,MAAM,oBAAoB,mDAqB/B,CAAC"}
|