@authup/server-core 1.0.0-beta.53 → 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 +0 -13
- package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
- package/dist/adapters/database/domains/client/entity.d.ts +16 -16
- package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/client/entity.mjs +52 -34
- 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 +40 -21
- 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 +7 -7
- package/dist/adapters/database/domains/consent/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/consent/entity.mjs +33 -18
- package/dist/adapters/database/domains/consent/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/consent/subscriber.mjs +2 -2
- package/dist/adapters/database/domains/consent/subscriber.mjs.map +1 -1
- package/dist/adapters/database/domains/constants.d.ts +0 -3
- package/dist/adapters/database/domains/constants.d.ts.map +1 -1
- package/dist/adapters/database/domains/constants.mjs +0 -3
- package/dist/adapters/database/domains/constants.mjs.map +1 -1
- package/dist/adapters/database/domains/event/entity.d.ts +13 -13
- package/dist/adapters/database/domains/event/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/event/entity.mjs +43 -28
- package/dist/adapters/database/domains/event/entity.mjs.map +1 -1
- 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 +50 -31
- 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 +0 -3
- package/dist/adapters/database/domains/index.d.ts.map +1 -1
- package/dist/adapters/database/domains/index.mjs +1 -10
- package/dist/adapters/database/domains/key/entity.d.ts +6 -6
- package/dist/adapters/database/domains/key/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/key/entity.mjs +24 -14
- 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 +29 -17
- 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.mjs +3 -3
- 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 +3 -3
- 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 +37 -21
- 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 -17
- package/dist/adapters/database/domains/session/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/session/entity.mjs +42 -42
- 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 +3 -3
- package/dist/adapters/database/domains/trust-anchor/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/trust-anchor/entity.mjs +14 -8
- package/dist/adapters/database/domains/trust-anchor/entity.mjs.map +1 -1
- 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 +5 -5
- package/dist/adapters/database/domains/user-authenticator/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-authenticator/entity.mjs +24 -11
- package/dist/adapters/database/domains/user-authenticator/entity.mjs.map +1 -1
- 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 +37 -21
- 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/helpers/is-supported.mjs +1 -1
- package/dist/adapters/database/helpers/is-supported.mjs.map +1 -1
- package/dist/adapters/database/index.mjs +1 -7
- 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/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/http/adapters/index.mjs +1 -2
- package/dist/adapters/http/adapters/oauth2/authorization/module.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +3 -3
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +1 -1
- 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 +1 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +1 -1
- 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 +1 -4
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +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 +0 -3
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/index.mjs +1 -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/identity-provider/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +19 -13
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/index.d.ts +0 -3
- package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/index.mjs +1 -9
- package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/key/module.mjs +1 -7
- package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -1
- 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 +3 -3
- package/dist/adapters/http/controllers/entities/policy/utils/validation.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/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +1 -7
- package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -1
- 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/module.mjs +1 -1
- package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -1
- 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 +1 -6
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs +4 -4
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs +10 -10
- package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/jwks/module.mjs +9 -9
- 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.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs +2 -8
- package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts +1 -2
- package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
- package/dist/adapters/http/index.mjs +1 -7
- package/dist/adapters/http/middleware/built-in/assets.mjs +2 -2
- package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +1 -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 +1 -15
- package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/authorization/types.d.ts +0 -1
- package/dist/adapters/http/middleware/built-in/authorization/types.d.ts.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/request/client-certificate.d.ts +1 -0
- package/dist/adapters/http/request/client-certificate.d.ts.map +1 -1
- package/dist/adapters/http/request/client-certificate.mjs +1 -0
- package/dist/adapters/http/request/client-certificate.mjs.map +1 -1
- 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/realm-id.mjs +1 -1
- package/dist/adapters/http/request/helpers/realm-id.mjs.map +1 -1
- 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/ui/render.mjs +2 -2
- 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 +1 -5
- 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/config/constants.d.ts +0 -4
- package/dist/app/modules/config/constants.d.ts.map +1 -1
- package/dist/app/modules/config/constants.mjs +0 -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 +0 -4
- 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 +0 -8
- package/dist/app/modules/config/read/env.mjs.map +1 -1
- package/dist/app/modules/config/types.d.ts +0 -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 +0 -4
- package/dist/app/modules/config/validator.mjs.map +1 -1
- package/dist/app/modules/database/index.mjs +1 -4
- package/dist/app/modules/database/module.d.ts.map +1 -1
- package/dist/app/modules/database/module.mjs +2 -0
- 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 -82
- 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/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/event/repository.mjs +14 -53
- package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/helpers.d.ts +17 -3
- package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/helpers.mjs +40 -5
- 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 +0 -3
- package/dist/app/modules/database/repositories/index.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/index.mjs +1 -7
- package/dist/app/modules/database/repositories/key/repository.d.ts +3 -2
- package/dist/app/modules/database/repositories/key/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/key/repository.mjs +38 -72
- package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
- 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 +6 -6
- 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/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/trust-anchor/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +5 -29
- package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -1
- 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/repository.d.ts +2 -1
- package/dist/app/modules/database/repositories/user-authenticator/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +8 -34
- package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -1
- 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/modules/controller.d.ts +1 -4
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +0 -52
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
- package/dist/app/modules/http/modules/middleware.mjs +0 -1
- 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 +1 -12
- 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.mjs +1 -5
- 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/repository.d.ts +2 -1
- package/dist/app/modules/oauth2/repositories/consent/repository.d.ts.map +1 -1
- package/dist/app/modules/oauth2/repositories/consent/repository.mjs +14 -38
- package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
- 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/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +9 -24
- 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 +43 -78
- 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 +4 -3
- 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/oauth2-cleaner/module.mjs +2 -2
- package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
- package/dist/core/authentication/credential/entities/client/module.d.ts +1 -1
- package/dist/core/authentication/credential/entities/client/module.d.ts.map +1 -1
- package/dist/core/authentication/credential/entities/client/module.mjs +3 -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 +1 -1
- 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.mjs +1 -3
- package/dist/core/authentication/session/module.d.ts.map +1 -1
- package/dist/core/authentication/session/module.mjs +14 -17
- package/dist/core/authentication/session/module.mjs.map +1 -1
- package/dist/core/authentication/session/types.d.ts +7 -6
- 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/module.d.ts +2 -1
- package/dist/core/client-certificate/module.d.ts.map +1 -1
- package/dist/core/client-certificate/module.mjs +2 -1
- package/dist/core/client-certificate/module.mjs.map +1 -1
- package/dist/core/client-certificate/reflect.d.ts +2 -0
- package/dist/core/client-certificate/reflect.d.ts.map +1 -0
- package/dist/core/{identity/entities/robot/index.mjs → client-certificate/reflect.mjs} +1 -0
- package/dist/core/client-certificate/types.d.ts +1 -1
- package/dist/core/client-certificate/types.d.ts.map +1 -1
- 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 +42 -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.mjs +13 -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 +1 -0
- package/dist/core/entities/consent/index.d.ts.map +1 -1
- package/dist/core/entities/consent/index.mjs +2 -1
- 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.map +1 -1
- package/dist/core/entities/consent/service.mjs +22 -6
- package/dist/core/entities/consent/service.mjs.map +1 -1
- package/dist/core/entities/consent/types.d.ts +3 -2
- package/dist/core/entities/consent/types.d.ts.map +1 -1
- package/dist/core/entities/consent/types.mjs +3 -3
- package/dist/core/entities/consent/types.mjs.map +1 -1
- package/dist/core/entities/event/diff.d.ts +4 -4
- package/dist/core/entities/event/diff.mjs +5 -5
- package/dist/core/entities/event/diff.mjs.map +1 -1
- package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -1
- package/dist/core/entities/event/entity-event-handler.mjs +29 -31
- package/dist/core/entities/event/entity-event-handler.mjs.map +1 -1
- package/dist/core/entities/event/index.d.ts +1 -0
- package/dist/core/entities/event/index.d.ts.map +1 -1
- package/dist/core/entities/event/index.mjs +2 -1
- package/dist/core/entities/event/sanitize.mjs +8 -8
- package/dist/core/entities/event/sanitize.mjs.map +1 -1
- 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.map +1 -1
- package/dist/core/entities/event/service.mjs +38 -22
- package/dist/core/entities/event/service.mjs.map +1 -1
- package/dist/core/entities/event/types.d.ts +6 -5
- package/dist/core/entities/event/types.d.ts.map +1 -1
- 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 +17 -11
- package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
- package/dist/core/entities/index.d.ts +0 -3
- package/dist/core/entities/index.d.ts.map +1 -1
- package/dist/core/entities/index.mjs +26 -7
- package/dist/core/entities/key/index.d.ts +1 -0
- package/dist/core/entities/key/index.d.ts.map +1 -1
- package/dist/core/entities/key/index.mjs +2 -1
- 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 +2 -2
- package/dist/core/entities/key/service.d.ts.map +1 -1
- package/dist/core/entities/key/service.mjs +47 -28
- package/dist/core/entities/key/service.mjs.map +1 -1
- package/dist/core/entities/key/types.d.ts +9 -1
- package/dist/core/entities/key/types.d.ts.map +1 -1
- 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 +53 -40
- 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 +13 -7
- 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.map +1 -1
- package/dist/core/entities/realm/service.mjs +5 -2
- 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 +11 -5
- 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 +19 -6
- 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 +48 -11
- 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 +1 -0
- package/dist/core/entities/trust-anchor/index.d.ts.map +1 -1
- package/dist/core/entities/trust-anchor/index.mjs +2 -1
- 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 +2 -2
- package/dist/core/entities/trust-anchor/service.d.ts.map +1 -1
- package/dist/core/entities/trust-anchor/service.mjs +23 -7
- package/dist/core/entities/trust-anchor/service.mjs.map +1 -1
- package/dist/core/entities/trust-anchor/types.d.ts +9 -1
- package/dist/core/entities/trust-anchor/types.d.ts.map +1 -1
- 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 +33 -12
- 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 +26 -10
- package/dist/core/entities/user-attribute/service.mjs.map +1 -1
- package/dist/core/entities/user-authenticator/index.d.ts +1 -0
- package/dist/core/entities/user-authenticator/index.d.ts.map +1 -1
- package/dist/core/entities/user-authenticator/index.mjs +2 -1
- 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.map +1 -1
- package/dist/core/entities/user-authenticator/service.mjs +49 -27
- package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
- package/dist/core/entities/user-authenticator/types.d.ts +4 -3
- package/dist/core/entities/user-authenticator/types.d.ts.map +1 -1
- package/dist/core/entities/user-authenticator/types.mjs +2 -2
- package/dist/core/entities/user-authenticator/types.mjs.map +1 -1
- 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/password-recovery/service.mjs +21 -21
- package/dist/core/identity/password-recovery/service.mjs.map +1 -1
- package/dist/core/identity/password-recovery/types.d.ts +2 -2
- 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/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 +1 -1
- 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 +5 -5
- 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/service.mjs +9 -9
- package/dist/core/identity/registration/service.mjs.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 +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.mjs +28 -9
- package/dist/core/key/realm-cipher.mjs +5 -5
- package/dist/core/key/realm-cipher.mjs.map +1 -1
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +3 -3
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
- package/dist/core/oauth2/authorization/helpers.d.ts +2 -2
- package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/helpers.mjs +5 -5
- package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
- package/dist/core/oauth2/authorization/module.mjs +8 -8
- package/dist/core/oauth2/authorization/module.mjs.map +1 -1
- package/dist/core/oauth2/client/authenticator.d.ts +1 -1
- package/dist/core/oauth2/client/authenticator.d.ts.map +1 -1
- package/dist/core/oauth2/client/authenticator.mjs +3 -3
- 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.mjs +5 -5
- package/dist/core/oauth2/end-session/service.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/authorize.mjs +9 -9
- package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/client-credentials.mjs +7 -7
- package/dist/core/oauth2/grant-types/client-credentials.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/identity.mjs +10 -10
- 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 +1 -1
- package/dist/core/oauth2/grant-types/password.mjs +13 -13
- package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/core/oauth2/grant-types/refresh-token.mjs +12 -12
- package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
- package/dist/core/oauth2/index.mjs +1 -2
- package/dist/core/oauth2/mfa-login/module.mjs +21 -21
- package/dist/core/oauth2/mfa-login/module.mjs.map +1 -1
- package/dist/core/oauth2/mfa-login/types.d.ts +1 -1
- 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/issuer/access/module.mjs +7 -7
- package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
- 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/signer/module.mjs +6 -6
- package/dist/core/oauth2/token/signer/module.mjs.map +1 -1
- package/dist/core/oauth2/token/verifier/module.mjs +8 -8
- 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/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 +1 -17
- package/dist/swagger.json +2552 -3798
- package/dist/ui/client/.vite/ssr-manifest.json +1542 -894
- package/dist/ui/client/assets/{index-CT0Nq5pA.js → index-BmJ2X468.js} +21 -18
- package/dist/ui/client/assets/{index-BmWsoQro.css → index-DiOvW76Q.css} +1 -1
- package/dist/ui/client/index.html +2 -2
- package/dist/ui/server/server.js +9810 -3361
- package/package.json +27 -22
- 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 +0 -3
- 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 +0 -45
- 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 +0 -2
- 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 +0 -114
- 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 +0 -95
- 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 +0 -2
- 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 +0 -2
- 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 +0 -2
- 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/core/authentication/credential/entities/robot/index.d.ts +0 -2
- 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 +0 -2
- 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/types.mjs +0 -4
- package/dist/core/entities/robot-permission/index.d.ts +0 -3
- 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/entities/robot-role/types.mjs +0 -4
- 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/identity/entities/robot/types.mjs +0 -4
- 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 -39
- package/dist/core/oauth2/grant-types/robot-credentials.mjs.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/types.mjs +0 -4
- 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 +0 -3
- 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/core/provisioning/synchronizer/robot/types.mjs +0 -4
- /package/dist/core/{entities/robot-permission → query}/types.mjs +0 -0
|
@@ -20,7 +20,7 @@ var PermissionCheckerService = class {
|
|
|
20
20
|
if (realm) {
|
|
21
21
|
const realmId = await this.ctx.realmRepository.resolveId(realm);
|
|
22
22
|
if (!realmId) throw new EntityNotFoundError();
|
|
23
|
-
criteria.
|
|
23
|
+
criteria.realmId = realmId;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
const entity = await this.ctx.repository.findOneBy(criteria);
|
|
@@ -28,7 +28,7 @@ var PermissionCheckerService = class {
|
|
|
28
28
|
const input = { ...data };
|
|
29
29
|
if (typeof input[BuiltInPolicyType.IDENTITY] === "undefined") input[BuiltInPolicyType.IDENTITY] = toIdentityPolicyData(actor.identity);
|
|
30
30
|
const attributes = input[BuiltInPolicyType.ATTRIBUTES];
|
|
31
|
-
if (attributes && hasOwnProperty(attributes, "
|
|
31
|
+
if (attributes && hasOwnProperty(attributes, "realmId")) input[BuiltInPolicyType.REALM_MATCH] = attributes.realmId ?? null;
|
|
32
32
|
const evaluationContext = {
|
|
33
33
|
name: entity.name,
|
|
34
34
|
data: definePolicyData(input)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PermissionEvaluator","definePolicyData","hasOwnProperty","isUUID","EntityNotFoundError","normalizeError","PolicyEngine","toIdentityPolicyData","PermissionCheckerService","ctx","check","idOrName","data","actor","realm","criteria","id","name","realmId","realmRepository","resolveId","
|
|
1
|
+
{"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PermissionEvaluator","definePolicyData","hasOwnProperty","isUUID","EntityNotFoundError","normalizeError","PolicyEngine","toIdentityPolicyData","PermissionCheckerService","ctx","check","idOrName","data","actor","realm","criteria","id","name","realmId","realmRepository","resolveId","entity","repository","findOneBy","input","IDENTITY","identity","attributes","ATTRIBUTES","REALM_MATCH","evaluationContext","evaluator","provider","permissionProvider","policyEngine","identityPermissionProvider","has","evaluate","preEvaluate","safeCheck","success","e","error"],"sources":["../../../../../src/core/identity/permission/checker/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 type { PermissionEvaluationContext } from '@authup/access';\nimport { BuiltInPolicyType, PermissionEvaluator, definePolicyData } from '@authup/access';\nimport type { Result } from '@authup/kit';\nimport { hasOwnProperty, isUUID } from '@authup/kit';\nimport { EntityNotFoundError, normalizeError } from '@authup/errors';\nimport type { ActorContext } from '@authup/server-kit';\nimport { PolicyEngine } from '../../../security/policy/engine.ts';\nimport { toIdentityPolicyData } from '../identity-policy-data.ts';\nimport type {\n IPermissionCheckerService,\n PermissionCheckerServiceContext,\n} from './types.ts';\n\nexport class PermissionCheckerService implements IPermissionCheckerService {\n protected ctx: PermissionCheckerServiceContext;\n\n constructor(ctx: PermissionCheckerServiceContext) {\n this.ctx = ctx;\n }\n\n async check(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n realm?: string,\n ): Promise<void> {\n let criteria: Record<string, any>;\n if (isUUID(idOrName)) {\n criteria = { id: idOrName };\n } else {\n criteria = { name: idOrName };\n\n if (realm) {\n const realmId = await this.ctx.realmRepository.resolveId(realm);\n if (!realmId) {\n throw new EntityNotFoundError();\n }\n criteria.realmId = realmId;\n }\n }\n\n const entity = await this.ctx.repository.findOneBy(criteria);\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n const input = { ...data };\n if (typeof input[BuiltInPolicyType.IDENTITY] === 'undefined') {\n input[BuiltInPolicyType.IDENTITY] = toIdentityPolicyData(actor.identity);\n }\n // Surface the resource realm to the realm_scope reach factor (realm-match scope mode).\n // Only when the body carries an ATTRIBUTES realm — so a realm-less check still rides\n // the preEvaluate path below and neutral-passes.\n const attributes = input[BuiltInPolicyType.ATTRIBUTES] as Record<string, any> | undefined;\n if (attributes && hasOwnProperty(attributes, 'realmId')) {\n input[BuiltInPolicyType.REALM_MATCH] = attributes.realmId ?? null;\n }\n\n const evaluationContext: PermissionEvaluationContext = {\n name: entity.name,\n data: definePolicyData(input),\n };\n\n const evaluator = new PermissionEvaluator({\n provider: this.ctx.permissionProvider,\n policyEngine: new PolicyEngine(this.ctx.identityPermissionProvider),\n });\n\n if (\n evaluationContext.data &&\n evaluationContext.data.has(BuiltInPolicyType.ATTRIBUTES)\n ) {\n await evaluator.evaluate(evaluationContext);\n } else {\n await evaluator.preEvaluate(evaluationContext);\n }\n }\n\n async safeCheck(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n realm?: string,\n ): Promise<Result<null>> {\n try {\n await this.check(idOrName, data, actor, realm);\n return { success: true, data: null };\n } catch (e) {\n return { success: false, error: normalizeError(e) };\n }\n }\n}\n"],"mappings":";;;;;;;;;AAoBA,IAAaS,2BAAb,MAAaA;CACCC;CAEV,YAAYA,KAAsC;EAC9C,KAAKA,MAAMA;CACf;CAEA,MAAMC,MACFC,UACAC,MACAC,OACAC,OACa;EACb,IAAIC;EACJ,IAAIZ,OAAOQ,QAAAA,GACPI,WAAW,EAAEC,IAAIL,SAAS;OACvB;GACHI,WAAW,EAAEE,MAAMN,SAAS;GAE5B,IAAIG,OAAO;IACP,MAAMI,UAAU,MAAM,KAAKT,IAAIU,gBAAgBC,UAAUN,KAAAA;IACzD,IAAI,CAACI,SACD,MAAM,IAAId,oBAAAA;IAEdW,SAASG,UAAUA;GACvB;EACJ;EAEA,MAAMG,SAAS,MAAM,KAAKZ,IAAIa,WAAWC,UAAUR,QAAAA;EACnD,IAAI,CAACM,QACD,MAAM,IAAIjB,oBAAAA;EAGd,MAAMoB,QAAQ,EAAE,GAAGZ,KAAK;EACxB,IAAI,OAAOY,MAAMzB,kBAAkB0B,cAAc,aAC7CD,MAAMzB,kBAAkB0B,YAAYlB,qBAAqBM,MAAMa,QAAQ;EAK3E,MAAMC,aAAaH,MAAMzB,kBAAkB6B;EAC3C,IAAID,cAAczB,eAAeyB,YAAY,SAAA,GACzCH,MAAMzB,kBAAkB8B,eAAeF,WAAWT,WAAW;EAGjE,MAAMY,oBAAiD;GACnDb,MAAMI,OAAOJ;GACbL,MAAMX,iBAAiBuB,KAAAA;EAC3B;EAEA,MAAMO,YAAY,IAAI/B,oBAAoB;GACtCgC,UAAU,KAAKvB,IAAIwB;GACnBC,cAAc,IAAI5B,eAAa,KAAKG,IAAI0B,0BAA0B;EACtE,CAAA;EAEA,IACIL,kBAAkBlB,QAClBkB,kBAAkBlB,KAAKwB,IAAIrC,kBAAkB6B,UAAU,GAEvD,MAAMG,UAAUM,SAASP,iBAAAA;OAEzB,MAAMC,UAAUO,YAAYR,iBAAAA;CAEpC;CAEA,MAAMS,UACF5B,UACAC,MACAC,OACAC,OACqB;EACrB,IAAI;GACA,MAAM,KAAKJ,MAAMC,UAAUC,MAAMC,OAAOC,KAAAA;GACxC,OAAO;IAAE0B,SAAS;IAAM5B,MAAM;GAAK;EACvC,SAAS6B,GAAG;GACR,OAAO;IAAED,SAAS;IAAOE,OAAOrC,eAAeoC,CAAAA;GAAG;EACtD;CACJ;AACJ"}
|
|
@@ -8,9 +8,9 @@ function toIdentityPolicyData(identity) {
|
|
|
8
8
|
const { type, data } = identity;
|
|
9
9
|
let clientId;
|
|
10
10
|
if (type === IdentityType.CLIENT) clientId = data.id;
|
|
11
|
-
else if ("
|
|
11
|
+
else if ("clientId" in data) clientId = data.clientId ?? null;
|
|
12
12
|
else clientId = null;
|
|
13
|
-
let realmId = data.
|
|
13
|
+
let realmId = data.realmId ?? null;
|
|
14
14
|
if (!realmId && data.realm && data.realm.id) realmId = data.realm.id ?? null;
|
|
15
15
|
return {
|
|
16
16
|
type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-policy-data.mjs","names":["IdentityType","toIdentityPolicyData","identity","undefined","type","data","clientId","CLIENT","id","
|
|
1
|
+
{"version":3,"file":"identity-policy-data.mjs","names":["IdentityType","toIdentityPolicyData","identity","undefined","type","data","clientId","CLIENT","id","realmId","realm","realmName","name"],"sources":["../../../../src/core/identity/permission/identity-policy-data.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 { IdentityPolicyData } from '@authup/access';\nimport { IdentityType } from '@authup/core-kit';\nimport type { Identity } from '@authup/core-kit';\n\nexport function toIdentityPolicyData(identity: Identity | undefined): IdentityPolicyData | undefined {\n if (!identity) {\n return undefined;\n }\n\n const { type, data } = identity;\n\n let clientId: string | null;\n if (type === IdentityType.CLIENT) {\n clientId = data.id;\n } else if ('clientId' in data) {\n clientId = data.clientId ?? null;\n } else {\n clientId = null;\n }\n\n let realmId: string | null = data.realmId ?? null;\n if (!realmId && data.realm && data.realm.id) {\n realmId = data.realm.id ?? null;\n }\n\n return {\n type,\n id: data.id,\n clientId,\n realmId,\n realmName: data.realm?.name ?? null,\n };\n}\n"],"mappings":";;;;;AAWA,SAAgBC,qBAAqBC,UAA8B;CAC/D,IAAI,CAACA,UACD;CAGJ,MAAM,EAAEE,MAAMC,SAASH;CAEvB,IAAII;CACJ,IAAIF,SAASJ,aAAaO,QACtBD,WAAWD,KAAKG;MACb,IAAI,cAAcH,MACrBC,WAAWD,KAAKC,YAAY;MAE5BA,WAAW;CAGf,IAAIG,UAAyBJ,KAAKI,WAAW;CAC7C,IAAI,CAACA,WAAWJ,KAAKK,SAASL,KAAKK,MAAMF,IACrCC,UAAUJ,KAAKK,MAAMF,MAAM;CAG/B,OAAO;EACHJ;EACAI,IAAIH,KAAKG;EACTF;EACAG;EACAE,WAAWN,KAAKK,OAAOE,QAAQ;CACnC;AACJ"}
|
|
@@ -2,7 +2,7 @@ import { RealmScope } from '@authup/access';
|
|
|
2
2
|
import type { ResolveJunctionGrantResult } from './types.ts';
|
|
3
3
|
/**
|
|
4
4
|
* The privilege-escalation boundary for permission-binding junctions, shared verbatim by
|
|
5
|
-
* role/user/client
|
|
5
|
+
* role/user/client-permission. Kept in ONE place (rather than copied into each service)
|
|
6
6
|
* so the fail-closed cap/inherit rule is audited and changed once — see #3160 / #3158 / #3159,
|
|
7
7
|
* which each had to patch this rule across all four services.
|
|
8
8
|
*
|
|
@@ -12,9 +12,9 @@ import type { ResolveJunctionGrantResult } from './types.ts';
|
|
|
12
12
|
/**
|
|
13
13
|
* Cap a junction CREATE to the actor's request-relative selected grant and inherit its policy.
|
|
14
14
|
*
|
|
15
|
-
* - `
|
|
15
|
+
* - `realmScope` is capped to the actor's selected reach (`min(requested, grant.realmScope)`).
|
|
16
16
|
* - The policy follows the grant: only a genuinely unrestricted actor (an UNCAPPED `any` reach
|
|
17
|
-
* AND no policy) may keep an explicitly-requested `
|
|
17
|
+
* AND no policy) may keep an explicitly-requested `policyId`; any restricted/policy-bound
|
|
18
18
|
* actor inherits its own grant's policy (it can neither attach an unowned policy nor detach to
|
|
19
19
|
* widen). The check reads `grant.realmScope` UNCAPPED precisely to distinguish that case — the
|
|
20
20
|
* grant is returned uncapped by `resolveJunctionGrant` for exactly this reason.
|
|
@@ -35,13 +35,13 @@ export type BuildJunctionUpdateDataInput = {
|
|
|
35
35
|
actorPolicyId: string | null;
|
|
36
36
|
};
|
|
37
37
|
/**
|
|
38
|
-
* Build the `{
|
|
38
|
+
* Build the `{ realmScope?, policyId? }` delta for a junction UPDATE, capped to the actor's
|
|
39
39
|
* request-relative grant.
|
|
40
40
|
*
|
|
41
|
-
* - An unrestricted (`any`, policy-free) actor may set/clear `
|
|
41
|
+
* - An unrestricted (`any`, policy-free) actor may set/clear `policyId` explicitly and is never
|
|
42
42
|
* narrowed.
|
|
43
43
|
* - A restricted/policy-bound actor that touches the binding inherits its own grant's policy AND
|
|
44
|
-
* has the reach re-capped — including the EXISTING `
|
|
44
|
+
* has the reach re-capped — including the EXISTING `realmScope` when the update omits it, so a
|
|
45
45
|
* policy-only edit cannot leave a wider pre-existing reach standing (fail-OPEN otherwise: the
|
|
46
46
|
* persisted binding must always be dominated by a grant the actor really holds — #3160).
|
|
47
47
|
*/
|
|
@@ -6,7 +6,7 @@ import { RealmScope, minRealmScope } from "@authup/access";
|
|
|
6
6
|
//#region src/core/identity/permission/junction-grant.ts
|
|
7
7
|
/**
|
|
8
8
|
* The privilege-escalation boundary for permission-binding junctions, shared verbatim by
|
|
9
|
-
* role/user/client
|
|
9
|
+
* role/user/client-permission. Kept in ONE place (rather than copied into each service)
|
|
10
10
|
* so the fail-closed cap/inherit rule is audited and changed once — see #3160 / #3158 / #3159,
|
|
11
11
|
* which each had to patch this rule across all four services.
|
|
12
12
|
*
|
|
@@ -15,39 +15,39 @@ import { RealmScope, minRealmScope } from "@authup/access";
|
|
|
15
15
|
*/ /**
|
|
16
16
|
* Cap a junction CREATE to the actor's request-relative selected grant and inherit its policy.
|
|
17
17
|
*
|
|
18
|
-
* - `
|
|
18
|
+
* - `realmScope` is capped to the actor's selected reach (`min(requested, grant.realmScope)`).
|
|
19
19
|
* - The policy follows the grant: only a genuinely unrestricted actor (an UNCAPPED `any` reach
|
|
20
|
-
* AND no policy) may keep an explicitly-requested `
|
|
20
|
+
* AND no policy) may keep an explicitly-requested `policyId`; any restricted/policy-bound
|
|
21
21
|
* actor inherits its own grant's policy (it can neither attach an unowned policy nor detach to
|
|
22
22
|
* widen). The check reads `grant.realmScope` UNCAPPED precisely to distinguish that case — the
|
|
23
23
|
* grant is returned uncapped by `resolveJunctionGrant` for exactly this reason.
|
|
24
24
|
*
|
|
25
25
|
* Mutates `validated` in place (mirrors the surrounding service style).
|
|
26
26
|
*/ function applyJunctionCreateGrant(validated, grant) {
|
|
27
|
-
validated.
|
|
28
|
-
if (grant.realmScope !== RealmScope.ANY || grant.policy) validated.
|
|
27
|
+
validated.realmScope = minRealmScope([validated.realmScope ?? RealmScope.OWN, grant.realmScope]);
|
|
28
|
+
if (grant.realmScope !== RealmScope.ANY || grant.policy) validated.policyId = grant.policy ? grant.policy.id : null;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* Build the `{
|
|
31
|
+
* Build the `{ realmScope?, policyId? }` delta for a junction UPDATE, capped to the actor's
|
|
32
32
|
* request-relative grant.
|
|
33
33
|
*
|
|
34
|
-
* - An unrestricted (`any`, policy-free) actor may set/clear `
|
|
34
|
+
* - An unrestricted (`any`, policy-free) actor may set/clear `policyId` explicitly and is never
|
|
35
35
|
* narrowed.
|
|
36
36
|
* - A restricted/policy-bound actor that touches the binding inherits its own grant's policy AND
|
|
37
|
-
* has the reach re-capped — including the EXISTING `
|
|
37
|
+
* has the reach re-capped — including the EXISTING `realmScope` when the update omits it, so a
|
|
38
38
|
* policy-only edit cannot leave a wider pre-existing reach standing (fail-OPEN otherwise: the
|
|
39
39
|
* persisted binding must always be dominated by a grant the actor really holds — #3160).
|
|
40
40
|
*/ function buildJunctionUpdateData(input) {
|
|
41
41
|
const { data, existingScope, actorScope, actorPolicyFree, actorPolicyId } = input;
|
|
42
42
|
const updateData = {};
|
|
43
|
-
const touchesScope = hasOwnProperty(data, "
|
|
44
|
-
const touchesPolicy = hasOwnProperty(data, "
|
|
45
|
-
if (touchesScope) updateData.
|
|
43
|
+
const touchesScope = hasOwnProperty(data, "realmScope");
|
|
44
|
+
const touchesPolicy = hasOwnProperty(data, "policyId");
|
|
45
|
+
if (touchesScope) updateData.realmScope = minRealmScope([data.realmScope, actorScope]);
|
|
46
46
|
if (actorScope === RealmScope.ANY && actorPolicyFree) {
|
|
47
|
-
if (touchesPolicy) updateData.
|
|
47
|
+
if (touchesPolicy) updateData.policyId = data.policyId;
|
|
48
48
|
} else if (touchesScope || touchesPolicy) {
|
|
49
|
-
updateData.
|
|
50
|
-
if (!touchesScope) updateData.
|
|
49
|
+
updateData.policyId = actorPolicyId;
|
|
50
|
+
if (!touchesScope) updateData.realmScope = minRealmScope([existingScope, actorScope]);
|
|
51
51
|
}
|
|
52
52
|
return updateData;
|
|
53
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"junction-grant.mjs","names":["RealmScope","minRealmScope","hasOwnProperty","applyJunctionCreateGrant","validated","grant","
|
|
1
|
+
{"version":3,"file":"junction-grant.mjs","names":["RealmScope","minRealmScope","hasOwnProperty","applyJunctionCreateGrant","validated","grant","realmScope","OWN","ANY","policy","policyId","id","buildJunctionUpdateData","input","data","existingScope","actorScope","actorPolicyFree","actorPolicyId","updateData","touchesScope","touchesPolicy"],"sources":["../../../../src/core/identity/permission/junction-grant.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 { RealmScope, minRealmScope } from '@authup/access';\nimport { hasOwnProperty } from '@authup/kit';\nimport type { ResolveJunctionGrantResult } from './types.ts';\n\n/**\n * The privilege-escalation boundary for permission-binding junctions, shared verbatim by\n * role/user/client-permission. Kept in ONE place (rather than copied into each service)\n * so the fail-closed cap/inherit rule is audited and changed once — see #3160 / #3158 / #3159,\n * which each had to patch this rule across all four services.\n *\n * It depends on a server-core type (`ResolveJunctionGrantResult`) and so cannot live on the\n * generic `JunctionEntityService` in `@authup/server-kit` (that would invert the layering).\n */\n\n/**\n * Cap a junction CREATE to the actor's request-relative selected grant and inherit its policy.\n *\n * - `realmScope` is capped to the actor's selected reach (`min(requested, grant.realmScope)`).\n * - The policy follows the grant: only a genuinely unrestricted actor (an UNCAPPED `any` reach\n * AND no policy) may keep an explicitly-requested `policyId`; any restricted/policy-bound\n * actor inherits its own grant's policy (it can neither attach an unowned policy nor detach to\n * widen). The check reads `grant.realmScope` UNCAPPED precisely to distinguish that case — the\n * grant is returned uncapped by `resolveJunctionGrant` for exactly this reason.\n *\n * Mutates `validated` in place (mirrors the surrounding service style).\n */\nexport function applyJunctionCreateGrant(\n validated: Record<string, any>,\n grant: ResolveJunctionGrantResult,\n): void {\n validated.realmScope = minRealmScope([validated.realmScope ?? RealmScope.OWN, grant.realmScope]);\n\n if (grant.realmScope !== RealmScope.ANY || grant.policy) {\n validated.policyId = grant.policy ? grant.policy.id : null;\n }\n}\n\nexport type BuildJunctionUpdateDataInput = {\n /** The validated update payload (UPDATE group) — presence of a key signals caller intent. */\n data: Record<string, any>,\n /** The persisted junction's current reach (used to re-cap a policy-only edit). */\n existingScope: `${RealmScope}`,\n /** The actor's UNCAPPED selected reach for this permission (`any` for system context). */\n actorScope: `${RealmScope}`,\n /** Whether the actor's selected grant carries no policy. */\n actorPolicyFree: boolean,\n /** The id of the actor's selected grant policy (null when policy-free). */\n actorPolicyId: string | null,\n};\n\n/**\n * Build the `{ realmScope?, policyId? }` delta for a junction UPDATE, capped to the actor's\n * request-relative grant.\n *\n * - An unrestricted (`any`, policy-free) actor may set/clear `policyId` explicitly and is never\n * narrowed.\n * - A restricted/policy-bound actor that touches the binding inherits its own grant's policy AND\n * has the reach re-capped — including the EXISTING `realmScope` when the update omits it, so a\n * policy-only edit cannot leave a wider pre-existing reach standing (fail-OPEN otherwise: the\n * persisted binding must always be dominated by a grant the actor really holds — #3160).\n */\nexport function buildJunctionUpdateData(input: BuildJunctionUpdateDataInput): Record<string, any> {\n const {\n data, \n existingScope, \n actorScope, \n actorPolicyFree, \n actorPolicyId,\n } = input;\n\n const updateData: Record<string, any> = {};\n\n const touchesScope = hasOwnProperty(data, 'realmScope');\n const touchesPolicy = hasOwnProperty(data, 'policyId');\n\n // CAP to the actor's ceiling — a restricted actor may narrow but never widen.\n // (`data` is the validated UPDATE payload, so realmScope is already a valid enum value;\n // minRealmScope additionally normalizes any out-of-band input fail-closed to `own`.)\n if (touchesScope) {\n updateData.realmScope = minRealmScope([data.realmScope as `${RealmScope}`, actorScope]);\n }\n\n if (actorScope === RealmScope.ANY && actorPolicyFree) {\n if (touchesPolicy) {\n updateData.policyId = data.policyId;\n }\n } else if (touchesScope || touchesPolicy) {\n updateData.policyId = actorPolicyId;\n\n if (!touchesScope) {\n updateData.realmScope = minRealmScope([existingScope, actorScope]);\n }\n }\n\n return updateData;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;GAiCA,SAAgBG,yBACZC,WACAC,OAAiC;CAEjCD,UAAUE,aAAaL,cAAc,CAACG,UAAUE,cAAcN,WAAWO,KAAKF,MAAMC,UAAAA,CAAW;CAE/F,IAAID,MAAMC,eAAeN,WAAWQ,OAAOH,MAAMI,QAC7CL,UAAUM,WAAWL,MAAMI,SAASJ,MAAMI,OAAOE,KAAK;AAE9D;;;;;;;;;;;GA0BA,SAAgBC,wBAAwBC,OAAmC;CACvE,MAAM,EACFC,MACAC,eACAC,YACAC,iBACAC,kBACAL;CAEJ,MAAMM,aAAkC,CAAC;CAEzC,MAAMC,eAAelB,eAAeY,MAAM,YAAA;CAC1C,MAAMO,gBAAgBnB,eAAeY,MAAM,UAAA;CAK3C,IAAIM,cACAD,WAAWb,aAAaL,cAAc,CAACa,KAAKR,YAA+BU,UAAAA,CAAW;CAG1F,IAAIA,eAAehB,WAAWQ,OAAOS;MAC7BI,eACAF,WAAWT,WAAWI,KAAKJ;CAAAA,OAE5B,IAAIU,gBAAgBC,eAAe;EACtCF,WAAWT,WAAWQ;EAEtB,IAAI,CAACE,cACDD,WAAWb,aAAaL,cAAc,CAACc,eAAeC,UAAAA,CAAW;CAEzE;CAEA,OAAOG;AACX"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { IdentityPolicyData, PermissionPolicyBinding } from '@authup/access';
|
|
2
2
|
import type { IClientRepository } from '../../entities/client/types.ts';
|
|
3
|
-
import type { IRobotRepository } from '../../entities/robot/types.ts';
|
|
4
3
|
import type { IRoleRepository } from '../../entities/role/types.ts';
|
|
5
4
|
import type { IUserRepository } from '../../entities/user/types.ts';
|
|
6
5
|
import type { IIdentityRoleProvider } from '../role/types.ts';
|
|
@@ -9,7 +8,6 @@ export declare class IdentityPermissionProvider implements IIdentityPermissionPr
|
|
|
9
8
|
protected clientRepository: IClientRepository;
|
|
10
9
|
protected userRepository: IUserRepository;
|
|
11
10
|
protected roleRepository: IRoleRepository;
|
|
12
|
-
protected robotRepository: IRobotRepository;
|
|
13
11
|
protected roleProvider: IIdentityRoleProvider;
|
|
14
12
|
constructor(ctx: IdentityPermissionProviderContext);
|
|
15
13
|
isSuperset(parent: IdentityPolicyData, child: IdentityPolicyData): Promise<boolean>;
|
|
@@ -17,7 +15,6 @@ export declare class IdentityPermissionProvider implements IIdentityPermissionPr
|
|
|
17
15
|
getFor(identity: IdentityPolicyData): Promise<PermissionPolicyBinding[]>;
|
|
18
16
|
getForClient(identity: IdentityPolicyData): Promise<PermissionPolicyBinding[]>;
|
|
19
17
|
getForUser(identity: IdentityPolicyData): Promise<PermissionPolicyBinding[]>;
|
|
20
|
-
getForRobot(identity: IdentityPolicyData): Promise<PermissionPolicyBinding[]>;
|
|
21
18
|
getForRole(identity: IdentityPolicyData): Promise<PermissionPolicyBinding[]>;
|
|
22
19
|
private combineWithRoleBindings;
|
|
23
20
|
private reduceBindingsByIdentityClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/core/identity/permission/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,kBAAkB,EAElB,uBAAuB,EAC1B,MAAM,gBAAgB,CAAC;AAWxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/core/identity/permission/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,kBAAkB,EAElB,uBAAuB,EAC1B,MAAM,gBAAgB,CAAC;AAWxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EACR,2BAA2B,EAC3B,iCAAiC,EACjC,0BAA0B,EAC1B,4BAA4B,EAC/B,MAAM,YAAY,CAAC;AAEpB,qBAAa,0BAA2B,YAAW,2BAA2B;IAC1E,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC;IAE1C,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC;IAE1C,SAAS,CAAC,YAAY,EAAE,qBAAqB,CAAC;gBAElC,GAAG,EAAE,iCAAiC;IAO5C,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,GAAI,OAAO,CAAC,OAAO,CAAC;IAgCpF,oBAAoB,CACtB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,4BAA4B,GACtC,OAAO,CAAC,0BAA0B,CAAC;IA6DhC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAgBzE,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAO/E,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAQ7E,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;YAKrE,uBAAuB;IAmBrC,OAAO,CAAC,8BAA8B;CAUzC"}
|
|
@@ -8,13 +8,11 @@ var IdentityPermissionProvider = class {
|
|
|
8
8
|
clientRepository;
|
|
9
9
|
userRepository;
|
|
10
10
|
roleRepository;
|
|
11
|
-
robotRepository;
|
|
12
11
|
roleProvider;
|
|
13
12
|
constructor(ctx) {
|
|
14
13
|
this.clientRepository = ctx.clientRepository;
|
|
15
14
|
this.userRepository = ctx.userRepository;
|
|
16
15
|
this.roleRepository = ctx.roleRepository;
|
|
17
|
-
this.robotRepository = ctx.robotRepository;
|
|
18
16
|
this.roleProvider = ctx.roleProvider;
|
|
19
17
|
}
|
|
20
18
|
async isSuperset(parent, child) {
|
|
@@ -31,10 +29,10 @@ var IdentityPermissionProvider = class {
|
|
|
31
29
|
const matching = (await this.getFor(identity)).filter((b) => {
|
|
32
30
|
if (b.permission.name !== options.name) return false;
|
|
33
31
|
if (typeof options.realmId !== "undefined") {
|
|
34
|
-
if ((b.permission.
|
|
32
|
+
if ((b.permission.realmId ?? null) !== (options.realmId ?? null)) return false;
|
|
35
33
|
}
|
|
36
34
|
if (typeof options.clientId !== "undefined") {
|
|
37
|
-
if ((b.permission.
|
|
35
|
+
if ((b.permission.clientId ?? null) !== (options.clientId ?? null)) return false;
|
|
38
36
|
}
|
|
39
37
|
return true;
|
|
40
38
|
});
|
|
@@ -49,14 +47,13 @@ var IdentityPermissionProvider = class {
|
|
|
49
47
|
}
|
|
50
48
|
return {
|
|
51
49
|
policy,
|
|
52
|
-
realmScope: selected.
|
|
50
|
+
realmScope: selected.realmScope
|
|
53
51
|
};
|
|
54
52
|
}
|
|
55
53
|
async getFor(identity) {
|
|
56
54
|
switch (identity.type) {
|
|
57
55
|
case "client": return this.getForClient(identity);
|
|
58
56
|
case "user": return this.getForUser(identity);
|
|
59
|
-
case "robot": return this.getForRobot(identity);
|
|
60
57
|
case "role": return this.getForRole(identity);
|
|
61
58
|
}
|
|
62
59
|
return [];
|
|
@@ -67,9 +64,6 @@ var IdentityPermissionProvider = class {
|
|
|
67
64
|
async getForUser(identity) {
|
|
68
65
|
return this.combineWithRoleBindings(this.userRepository.getBoundPermissions(identity.id).then((data) => this.reduceBindingsByIdentityClient(data, identity)), identity);
|
|
69
66
|
}
|
|
70
|
-
async getForRobot(identity) {
|
|
71
|
-
return this.combineWithRoleBindings(this.robotRepository.getBoundPermissions(identity.id).then((data) => this.reduceBindingsByIdentityClient(data, identity)), identity);
|
|
72
|
-
}
|
|
73
67
|
async getForRole(identity) {
|
|
74
68
|
return this.roleRepository.getBoundPermissions(identity.id).then((data) => this.reduceBindingsByIdentityClient(data, identity));
|
|
75
69
|
}
|
|
@@ -81,19 +75,19 @@ var IdentityPermissionProvider = class {
|
|
|
81
75
|
}
|
|
82
76
|
reduceBindingsByIdentityClient(bindings, identity) {
|
|
83
77
|
if (!identity.clientId) return bindings;
|
|
84
|
-
return bindings.filter((binding) => binding.permission.
|
|
78
|
+
return bindings.filter((binding) => binding.permission.clientId === identity.clientId);
|
|
85
79
|
}
|
|
86
80
|
};
|
|
87
81
|
/**
|
|
88
82
|
* Select the held grant that confers the least-restrictive junction for `requested` reach.
|
|
89
83
|
*
|
|
90
84
|
* Each grant is ranked by the reach it can actually confer for THIS request — its own
|
|
91
|
-
* `
|
|
85
|
+
* `realmScope` capped to `requested` — so a lower-scoped policy-free grant beats a
|
|
92
86
|
* higher-scoped policy-bound grant when both cap to the same requested reach (the mixed-grant
|
|
93
87
|
* fix, #3160). On equal capped reach, a policy-free grant wins (least restrictive). The
|
|
94
88
|
* ORIGINAL (uncapped) grant is returned: the consumer applies the `min` cap itself, and its
|
|
95
|
-
* uncapped `
|
|
96
|
-
* whether an explicitly-requested `
|
|
89
|
+
* uncapped `realmScope`/`policy` drive the "actor is unrestricted-any?" check that decides
|
|
90
|
+
* whether an explicitly-requested `policyId` may stand.
|
|
97
91
|
*
|
|
98
92
|
* The ordering is TOTAL and deterministic (independent of grant/repository order): ties between
|
|
99
93
|
* two policy-bound grants on equal capped reach are broken by higher uncapped reach, then a
|
|
@@ -103,10 +97,10 @@ var IdentityPermissionProvider = class {
|
|
|
103
97
|
return grants.reduce((best, grant) => isGrantPreferred(grant, best, requested) ? grant : best);
|
|
104
98
|
}
|
|
105
99
|
/** True when `candidate` is a strictly better propagation source than `incumbent` for `requested`. */ function isGrantPreferred(candidate, incumbent, requested) {
|
|
106
|
-
const byCapped = compareRealmScope(minRealmScope([candidate.
|
|
100
|
+
const byCapped = compareRealmScope(minRealmScope([candidate.realmScope, requested]), minRealmScope([incumbent.realmScope, requested]));
|
|
107
101
|
if (byCapped !== 0) return byCapped > 0;
|
|
108
102
|
if (!candidate.policy !== !incumbent.policy) return !candidate.policy;
|
|
109
|
-
const byUncapped = compareRealmScope(candidate.
|
|
103
|
+
const byUncapped = compareRealmScope(candidate.realmScope, incumbent.realmScope);
|
|
110
104
|
if (byUncapped !== 0) return byUncapped > 0;
|
|
111
105
|
const candidateId = candidate.policy && isPolicy(candidate.policy) ? candidate.policy.id : void 0;
|
|
112
106
|
const incumbentId = incumbent.policy && isPolicy(incumbent.policy) ? incumbent.policy.id : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["RealmScope","aggregatePermissionPolicyBindings","compareRealmScope","grantDominates","isPermissionPolicyBindingEqual","minRealmScope","isPolicy","IdentityPermissionProvider","clientRepository","userRepository","roleRepository","robotRepository","roleProvider","ctx","isSuperset","parent","child","parentAggregated","getFor","childAggregated","childItem","parentItem","find","p","childGrant","grants","dominated","some","parentGrant","resolveJunctionGrant","identity","options","bindings","matching","filter","b","permission","name","realmId","realm_id","clientId","client_id","length","realmScope","OWN","flatMap","item","requested","selected","selectGrantForRequest","policy","NONE","realm_scope","type","getForClient","getForUser","getForRobot","getForRole","combineWithRoleBindings","getBoundPermissions","id","then","data","reduceBindingsByIdentityClient","bindingsPromise","roles","Promise","all","getRolesFor","roleBindings","getBoundPermissionsForMany","binding","reduce","best","grant","isGrantPreferred","candidate","incumbent","byCapped","byUncapped","candidateId","undefined","incumbentId"],"sources":["../../../../src/core/identity/permission/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\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 {\n IdentityPolicyData,\n PermissionGrant,\n PermissionPolicyBinding,\n} from '@authup/access';\nimport {\n RealmScope,\n aggregatePermissionPolicyBindings,\n compareRealmScope,\n grantDominates,\n isPermissionPolicyBindingEqual,\n minRealmScope,\n} from '@authup/access';\nimport type { Policy } from '@authup/core-kit';\nimport { isPolicy } from '@authup/core-kit';\nimport type { IClientRepository } from '../../entities/client/types.ts';\nimport type { IRobotRepository } from '../../entities/robot/types.ts';\nimport type { IRoleRepository } from '../../entities/role/types.ts';\nimport type { IUserRepository } from '../../entities/user/types.ts';\nimport type { IIdentityRoleProvider } from '../role/types.ts';\nimport type {\n IIdentityPermissionProvider,\n IdentityPermissionProviderContext,\n ResolveJunctionGrantResult,\n ResolveJunctionPolicyOptions,\n} from './types.ts';\n\nexport class IdentityPermissionProvider implements IIdentityPermissionProvider {\n protected clientRepository: IClientRepository;\n\n protected userRepository: IUserRepository;\n\n protected roleRepository: IRoleRepository;\n\n protected robotRepository: IRobotRepository;\n\n protected roleProvider: IIdentityRoleProvider;\n\n constructor(ctx: IdentityPermissionProviderContext) {\n this.clientRepository = ctx.clientRepository;\n this.userRepository = ctx.userRepository;\n this.roleRepository = ctx.roleRepository;\n this.robotRepository = ctx.robotRepository;\n this.roleProvider = ctx.roleProvider;\n }\n\n async isSuperset(parent: IdentityPolicyData, child: IdentityPolicyData) : Promise<boolean> {\n const parentAggregated = aggregatePermissionPolicyBindings(await this.getFor(parent));\n const childAggregated = aggregatePermissionPolicyBindings(await this.getFor(child));\n\n for (const childItem of childAggregated) {\n const parentItem = parentAggregated.find(\n (p) => isPermissionPolicyBindingEqual(p, childItem),\n );\n\n if (!parentItem) {\n return false;\n }\n\n // Disjunction-aware superset: EVERY child grant must be dominated by SOME parent\n // grant (reach >= AND the parent's policy provably covers the child's — see\n // grantDominates). A child grant the parent cannot match — an unconditional `any`\n // the parent only holds policy-gated, or a policy the parent does not itself hold\n // (#3159) — fails the check; the actor cannot assign more than it holds.\n for (const childGrant of childItem.grants) {\n const dominated = parentItem.grants.some(\n (parentGrant) => grantDominates(parentGrant, childGrant),\n );\n\n if (!dominated) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n async resolveJunctionGrant(\n identity: IdentityPolicyData,\n options: ResolveJunctionPolicyOptions,\n ): Promise<ResolveJunctionGrantResult> {\n const bindings = await this.getFor(identity);\n const matching = bindings.filter((b) => {\n if (b.permission.name !== options.name) {\n return false;\n }\n\n if (typeof options.realmId !== 'undefined') {\n if ((b.permission.realm_id ?? null) !== (options.realmId ?? null)) {\n return false;\n }\n }\n\n if (typeof options.clientId !== 'undefined') {\n if ((b.permission.client_id ?? null) !== (options.clientId ?? null)) {\n return false;\n }\n }\n\n return true;\n });\n\n if (matching.length === 0) {\n return { realmScope: RealmScope.OWN };\n }\n\n // Consider EVERY matching grant (a caller omitting realmId/clientId may leave more\n // than one permission-key group); combined with the total ordering in\n // selectGrantForRequest, the selection never depends on grant/repository order.\n const grants = aggregatePermissionPolicyBindings(matching)\n .flatMap((item) => item.grants);\n if (grants.length === 0) {\n return { realmScope: RealmScope.OWN };\n }\n\n // Select the actor's grant RELATIVE to the requested reach (#3160): the grant that\n // confers the least-restrictive junction once capped to `realmScope` (highest capped\n // reach, policy-free preferred on a tie) — NOT a global \"ceiling\". A mixed-grant actor\n // (e.g. own+no-policy and any+policy) thus propagates its policy-free own grant for an\n // own request instead of inheriting the wider grant's policy. The selected grant is\n // returned UNCAPPED so the consumer's own cap (`min(requested, realmScope)`) and its\n // \"actor is unrestricted-any?\" check (which honours an explicit policy_id) still hold.\n const requested = options.realmScope ?? RealmScope.OWN;\n const selected = selectGrantForRequest(grants, requested);\n\n let policy: Policy | undefined;\n if (selected.policy) {\n // The selected grant is policy-restricted but its policy is not a propagatable\n // Policy (e.g. a composite with no id). Fail CLOSED: a `none` reach blocks\n // propagation rather than silently dropping the restriction and widening to an\n // unrestricted grant.\n if (!isPolicy(selected.policy)) {\n return { realmScope: RealmScope.NONE };\n }\n\n policy = selected.policy;\n }\n\n return { policy, realmScope: selected.realm_scope };\n }\n\n async getFor(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n switch (identity.type) {\n case 'client': {\n return this.getForClient(identity);\n }\n case 'user': {\n return this.getForUser(identity);\n }\n case 'robot': {\n return this.getForRobot(identity);\n }\n case 'role': {\n return this.getForRole(identity);\n }\n }\n\n return [];\n }\n\n async getForClient(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n return this.combineWithRoleBindings(\n this.clientRepository.getBoundPermissions(identity.id),\n identity,\n );\n }\n\n async getForUser(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n return this.combineWithRoleBindings(\n this.userRepository.getBoundPermissions(identity.id)\n .then((data) => this.reduceBindingsByIdentityClient(data, identity)),\n identity,\n );\n }\n\n async getForRobot(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n return this.combineWithRoleBindings(\n this.robotRepository.getBoundPermissions(identity.id)\n .then((data) => this.reduceBindingsByIdentityClient(data, identity)),\n identity,\n );\n }\n\n async getForRole(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n return this.roleRepository.getBoundPermissions(identity.id)\n .then((data) => this.reduceBindingsByIdentityClient(data, identity));\n }\n\n private async combineWithRoleBindings(\n bindingsPromise: Promise<PermissionPolicyBinding[]>,\n identity: IdentityPolicyData,\n ): Promise<PermissionPolicyBinding[]> {\n const [bindings, roles] = await Promise.all([\n bindingsPromise,\n this.roleProvider.getRolesFor(identity),\n ]);\n const roleBindings = await this.roleRepository.getBoundPermissionsForMany(roles);\n if (roleBindings.length === 0) {\n return bindings;\n }\n\n return [\n ...bindings,\n ...roleBindings,\n ];\n }\n\n private reduceBindingsByIdentityClient(\n bindings: PermissionPolicyBinding[],\n identity: IdentityPolicyData,\n ): PermissionPolicyBinding[] {\n if (!identity.clientId) {\n return bindings;\n }\n\n return bindings.filter((binding) => binding.permission.client_id === identity.clientId);\n }\n}\n\n/**\n * Select the held grant that confers the least-restrictive junction for `requested` reach.\n *\n * Each grant is ranked by the reach it can actually confer for THIS request — its own\n * `realm_scope` capped to `requested` — so a lower-scoped policy-free grant beats a\n * higher-scoped policy-bound grant when both cap to the same requested reach (the mixed-grant\n * fix, #3160). On equal capped reach, a policy-free grant wins (least restrictive). The\n * ORIGINAL (uncapped) grant is returned: the consumer applies the `min` cap itself, and its\n * uncapped `realm_scope`/`policy` drive the \"actor is unrestricted-any?\" check that decides\n * whether an explicitly-requested `policy_id` may stand.\n *\n * The ordering is TOTAL and deterministic (independent of grant/repository order): ties between\n * two policy-bound grants on equal capped reach are broken by higher uncapped reach, then a\n * propagatable policy (one with an id) over an id-less composite that would fail closed, then\n * lexicographic policy id.\n */\nfunction selectGrantForRequest(\n grants: PermissionGrant[],\n requested: `${RealmScope}`,\n): PermissionGrant {\n return grants.reduce((best, grant) => (isGrantPreferred(grant, best, requested) ? grant : best));\n}\n\n/** True when `candidate` is a strictly better propagation source than `incumbent` for `requested`. */\nfunction isGrantPreferred(\n candidate: PermissionGrant,\n incumbent: PermissionGrant,\n requested: `${RealmScope}`,\n): boolean {\n const byCapped = compareRealmScope(\n minRealmScope([candidate.realm_scope, requested]),\n minRealmScope([incumbent.realm_scope, requested]),\n );\n if (byCapped !== 0) {\n return byCapped > 0;\n }\n\n // Least restrictive: a policy-free grant beats a policy-bound one on equal capped reach.\n if (!candidate.policy !== !incumbent.policy) {\n return !candidate.policy;\n }\n\n // Deterministic tie-break for two policy-bound grants on equal capped reach.\n const byUncapped = compareRealmScope(candidate.realm_scope, incumbent.realm_scope);\n if (byUncapped !== 0) {\n return byUncapped > 0;\n }\n\n // Prefer a propagatable policy (has an id) over an id-less composite that would fail closed.\n const candidateId = candidate.policy && isPolicy(candidate.policy) ? candidate.policy.id : undefined;\n const incumbentId = incumbent.policy && isPolicy(incumbent.policy) ? incumbent.policy.id : undefined;\n if (candidateId !== incumbentId) {\n if (typeof candidateId === 'undefined') {\n return false;\n }\n if (typeof incumbentId === 'undefined') {\n return true;\n }\n return candidateId < incumbentId;\n }\n\n return false;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["RealmScope","aggregatePermissionPolicyBindings","compareRealmScope","grantDominates","isPermissionPolicyBindingEqual","minRealmScope","isPolicy","IdentityPermissionProvider","clientRepository","userRepository","roleRepository","roleProvider","ctx","isSuperset","parent","child","parentAggregated","getFor","childAggregated","childItem","parentItem","find","p","childGrant","grants","dominated","some","parentGrant","resolveJunctionGrant","identity","options","bindings","matching","filter","b","permission","name","realmId","clientId","length","realmScope","OWN","flatMap","item","requested","selected","selectGrantForRequest","policy","NONE","type","getForClient","getForUser","getForRole","combineWithRoleBindings","getBoundPermissions","id","then","data","reduceBindingsByIdentityClient","bindingsPromise","roles","Promise","all","getRolesFor","roleBindings","getBoundPermissionsForMany","binding","reduce","best","grant","isGrantPreferred","candidate","incumbent","byCapped","byUncapped","candidateId","undefined","incumbentId"],"sources":["../../../../src/core/identity/permission/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\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 {\n IdentityPolicyData,\n PermissionGrant,\n PermissionPolicyBinding,\n} from '@authup/access';\nimport {\n RealmScope,\n aggregatePermissionPolicyBindings,\n compareRealmScope,\n grantDominates,\n isPermissionPolicyBindingEqual,\n minRealmScope,\n} from '@authup/access';\nimport type { Policy } from '@authup/core-kit';\nimport { isPolicy } from '@authup/core-kit';\nimport type { IClientRepository } from '../../entities/client/types.ts';\nimport type { IRoleRepository } from '../../entities/role/types.ts';\nimport type { IUserRepository } from '../../entities/user/types.ts';\nimport type { IIdentityRoleProvider } from '../role/types.ts';\nimport type {\n IIdentityPermissionProvider,\n IdentityPermissionProviderContext,\n ResolveJunctionGrantResult,\n ResolveJunctionPolicyOptions,\n} from './types.ts';\n\nexport class IdentityPermissionProvider implements IIdentityPermissionProvider {\n protected clientRepository: IClientRepository;\n\n protected userRepository: IUserRepository;\n\n protected roleRepository: IRoleRepository;\n\n protected roleProvider: IIdentityRoleProvider;\n\n constructor(ctx: IdentityPermissionProviderContext) {\n this.clientRepository = ctx.clientRepository;\n this.userRepository = ctx.userRepository;\n this.roleRepository = ctx.roleRepository;\n this.roleProvider = ctx.roleProvider;\n }\n\n async isSuperset(parent: IdentityPolicyData, child: IdentityPolicyData) : Promise<boolean> {\n const parentAggregated = aggregatePermissionPolicyBindings(await this.getFor(parent));\n const childAggregated = aggregatePermissionPolicyBindings(await this.getFor(child));\n\n for (const childItem of childAggregated) {\n const parentItem = parentAggregated.find(\n (p) => isPermissionPolicyBindingEqual(p, childItem),\n );\n\n if (!parentItem) {\n return false;\n }\n\n // Disjunction-aware superset: EVERY child grant must be dominated by SOME parent\n // grant (reach >= AND the parent's policy provably covers the child's — see\n // grantDominates). A child grant the parent cannot match — an unconditional `any`\n // the parent only holds policy-gated, or a policy the parent does not itself hold\n // (#3159) — fails the check; the actor cannot assign more than it holds.\n for (const childGrant of childItem.grants) {\n const dominated = parentItem.grants.some(\n (parentGrant) => grantDominates(parentGrant, childGrant),\n );\n\n if (!dominated) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n async resolveJunctionGrant(\n identity: IdentityPolicyData,\n options: ResolveJunctionPolicyOptions,\n ): Promise<ResolveJunctionGrantResult> {\n const bindings = await this.getFor(identity);\n const matching = bindings.filter((b) => {\n if (b.permission.name !== options.name) {\n return false;\n }\n\n if (typeof options.realmId !== 'undefined') {\n if ((b.permission.realmId ?? null) !== (options.realmId ?? null)) {\n return false;\n }\n }\n\n if (typeof options.clientId !== 'undefined') {\n if ((b.permission.clientId ?? null) !== (options.clientId ?? null)) {\n return false;\n }\n }\n\n return true;\n });\n\n if (matching.length === 0) {\n return { realmScope: RealmScope.OWN };\n }\n\n // Consider EVERY matching grant (a caller omitting realmId/clientId may leave more\n // than one permission-key group); combined with the total ordering in\n // selectGrantForRequest, the selection never depends on grant/repository order.\n const grants = aggregatePermissionPolicyBindings(matching)\n .flatMap((item) => item.grants);\n if (grants.length === 0) {\n return { realmScope: RealmScope.OWN };\n }\n\n // Select the actor's grant RELATIVE to the requested reach (#3160): the grant that\n // confers the least-restrictive junction once capped to `realmScope` (highest capped\n // reach, policy-free preferred on a tie) — NOT a global \"ceiling\". A mixed-grant actor\n // (e.g. own+no-policy and any+policy) thus propagates its policy-free own grant for an\n // own request instead of inheriting the wider grant's policy. The selected grant is\n // returned UNCAPPED so the consumer's own cap (`min(requested, realmScope)`) and its\n // \"actor is unrestricted-any?\" check (which honours an explicit policyId) still hold.\n const requested = options.realmScope ?? RealmScope.OWN;\n const selected = selectGrantForRequest(grants, requested);\n\n let policy: Policy | undefined;\n if (selected.policy) {\n // The selected grant is policy-restricted but its policy is not a propagatable\n // Policy (e.g. a composite with no id). Fail CLOSED: a `none` reach blocks\n // propagation rather than silently dropping the restriction and widening to an\n // unrestricted grant.\n if (!isPolicy(selected.policy)) {\n return { realmScope: RealmScope.NONE };\n }\n\n policy = selected.policy;\n }\n\n return { policy, realmScope: selected.realmScope };\n }\n\n async getFor(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n switch (identity.type) {\n case 'client': {\n return this.getForClient(identity);\n }\n case 'user': {\n return this.getForUser(identity);\n }\n case 'role': {\n return this.getForRole(identity);\n }\n }\n\n return [];\n }\n\n async getForClient(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n return this.combineWithRoleBindings(\n this.clientRepository.getBoundPermissions(identity.id),\n identity,\n );\n }\n\n async getForUser(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n return this.combineWithRoleBindings(\n this.userRepository.getBoundPermissions(identity.id)\n .then((data) => this.reduceBindingsByIdentityClient(data, identity)),\n identity,\n );\n }\n\n async getForRole(identity: IdentityPolicyData) : Promise<PermissionPolicyBinding[]> {\n return this.roleRepository.getBoundPermissions(identity.id)\n .then((data) => this.reduceBindingsByIdentityClient(data, identity));\n }\n\n private async combineWithRoleBindings(\n bindingsPromise: Promise<PermissionPolicyBinding[]>,\n identity: IdentityPolicyData,\n ): Promise<PermissionPolicyBinding[]> {\n const [bindings, roles] = await Promise.all([\n bindingsPromise,\n this.roleProvider.getRolesFor(identity),\n ]);\n const roleBindings = await this.roleRepository.getBoundPermissionsForMany(roles);\n if (roleBindings.length === 0) {\n return bindings;\n }\n\n return [\n ...bindings,\n ...roleBindings,\n ];\n }\n\n private reduceBindingsByIdentityClient(\n bindings: PermissionPolicyBinding[],\n identity: IdentityPolicyData,\n ): PermissionPolicyBinding[] {\n if (!identity.clientId) {\n return bindings;\n }\n\n return bindings.filter((binding) => binding.permission.clientId === identity.clientId);\n }\n}\n\n/**\n * Select the held grant that confers the least-restrictive junction for `requested` reach.\n *\n * Each grant is ranked by the reach it can actually confer for THIS request — its own\n * `realmScope` capped to `requested` — so a lower-scoped policy-free grant beats a\n * higher-scoped policy-bound grant when both cap to the same requested reach (the mixed-grant\n * fix, #3160). On equal capped reach, a policy-free grant wins (least restrictive). The\n * ORIGINAL (uncapped) grant is returned: the consumer applies the `min` cap itself, and its\n * uncapped `realmScope`/`policy` drive the \"actor is unrestricted-any?\" check that decides\n * whether an explicitly-requested `policyId` may stand.\n *\n * The ordering is TOTAL and deterministic (independent of grant/repository order): ties between\n * two policy-bound grants on equal capped reach are broken by higher uncapped reach, then a\n * propagatable policy (one with an id) over an id-less composite that would fail closed, then\n * lexicographic policy id.\n */\nfunction selectGrantForRequest(\n grants: PermissionGrant[],\n requested: `${RealmScope}`,\n): PermissionGrant {\n return grants.reduce((best, grant) => (isGrantPreferred(grant, best, requested) ? grant : best));\n}\n\n/** True when `candidate` is a strictly better propagation source than `incumbent` for `requested`. */\nfunction isGrantPreferred(\n candidate: PermissionGrant,\n incumbent: PermissionGrant,\n requested: `${RealmScope}`,\n): boolean {\n const byCapped = compareRealmScope(\n minRealmScope([candidate.realmScope, requested]),\n minRealmScope([incumbent.realmScope, requested]),\n );\n if (byCapped !== 0) {\n return byCapped > 0;\n }\n\n // Least restrictive: a policy-free grant beats a policy-bound one on equal capped reach.\n if (!candidate.policy !== !incumbent.policy) {\n return !candidate.policy;\n }\n\n // Deterministic tie-break for two policy-bound grants on equal capped reach.\n const byUncapped = compareRealmScope(candidate.realmScope, incumbent.realmScope);\n if (byUncapped !== 0) {\n return byUncapped > 0;\n }\n\n // Prefer a propagatable policy (has an id) over an id-less composite that would fail closed.\n const candidateId = candidate.policy && isPolicy(candidate.policy) ? candidate.policy.id : undefined;\n const incumbentId = incumbent.policy && isPolicy(incumbent.policy) ? incumbent.policy.id : undefined;\n if (candidateId !== incumbentId) {\n if (typeof candidateId === 'undefined') {\n return false;\n }\n if (typeof incumbentId === 'undefined') {\n return true;\n }\n return candidateId < incumbentId;\n }\n\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Policy } from '@authup/core-kit';
|
|
2
2
|
import type { IdentityPolicyData, PermissionPolicyBinding, RealmScope } from '@authup/access';
|
|
3
3
|
import type { IClientRepository } from '../../entities/client/types.ts';
|
|
4
|
-
import type { IRobotRepository } from '../../entities/robot/types.ts';
|
|
5
4
|
import type { IRoleRepository } from '../../entities/role/types.ts';
|
|
6
5
|
import type { IUserRepository } from '../../entities/user/types.ts';
|
|
7
6
|
import type { IIdentityRoleProvider } from '../role/types.ts';
|
|
@@ -38,7 +37,6 @@ export interface IIdentityPermissionProvider {
|
|
|
38
37
|
export type IdentityPermissionProviderContext = {
|
|
39
38
|
clientRepository: IClientRepository;
|
|
40
39
|
userRepository: IUserRepository;
|
|
41
|
-
robotRepository: IRobotRepository;
|
|
42
40
|
roleRepository: IRoleRepository;
|
|
43
41
|
roleProvider: IIdentityRoleProvider;
|
|
44
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/identity/permission/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EACR,kBAAkB,EAClB,uBAAuB,EACvB,UAAU,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/identity/permission/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EACR,kBAAkB,EAClB,uBAAuB,EACvB,UAAU,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,MAAM,4BAA4B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;CAChC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,WAAW,2BAA2B;IACxC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACzE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAClI;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC5C,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE,eAAe,CAAC;IAChC,YAAY,EAAE,qBAAqB,CAAC;CACvC,CAAC"}
|
|
@@ -20,7 +20,7 @@ var PolicyCheckerService = class {
|
|
|
20
20
|
if (realm) {
|
|
21
21
|
const realmId = await this.ctx.realmRepository.resolveId(realm);
|
|
22
22
|
if (!realmId) throw new EntityNotFoundError();
|
|
23
|
-
criteria.
|
|
23
|
+
criteria.realmId = realmId;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
const entity = await this.ctx.repository.findOneBy(criteria);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","definePolicyEvaluationContext","isUUID","EntityNotFoundError","normalizeError","PolicyEngine","toIdentityPolicyData","PolicyCheckerService","ctx","check","idOrName","data","actor","realm","criteria","id","name","realmId","realmRepository","resolveId","
|
|
1
|
+
{"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","definePolicyEvaluationContext","isUUID","EntityNotFoundError","normalizeError","PolicyEngine","toIdentityPolicyData","PolicyCheckerService","ctx","check","idOrName","data","actor","realm","criteria","id","name","realmId","realmRepository","resolveId","entity","repository","findOneBy","input","IDENTITY","identity","engine","identityPermissionProvider","evaluateOrFail","safeCheck","success","e","error"],"sources":["../../../../../src/core/identity/policy/checker/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 { BuiltInPolicyType, PolicyData, definePolicyEvaluationContext } from '@authup/access';\nimport type { Result } from '@authup/kit';\nimport { isUUID } from '@authup/kit';\nimport { EntityNotFoundError, normalizeError } from '@authup/errors';\nimport type { ActorContext } from '@authup/server-kit';\nimport { PolicyEngine } from '../../../security/policy/engine.ts';\nimport { toIdentityPolicyData } from '../../permission/identity-policy-data.ts';\nimport type {\n IPolicyCheckerService,\n PolicyCheckerServiceContext,\n} from './types.ts';\n\nexport class PolicyCheckerService implements IPolicyCheckerService {\n protected ctx: PolicyCheckerServiceContext;\n\n constructor(ctx: PolicyCheckerServiceContext) {\n this.ctx = ctx;\n }\n\n async check(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n realm?: string,\n ): Promise<void> {\n let criteria: Record<string, any>;\n if (isUUID(idOrName)) {\n criteria = { id: idOrName };\n } else {\n criteria = { name: idOrName };\n\n if (realm) {\n const realmId = await this.ctx.realmRepository.resolveId(realm);\n if (!realmId) {\n throw new EntityNotFoundError();\n }\n criteria.realmId = realmId;\n }\n }\n\n const entity = await this.ctx.repository.findOneBy(criteria);\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n const input = { ...data };\n if (\n !input[BuiltInPolicyType.IDENTITY] &&\n input[BuiltInPolicyType.IDENTITY] !== null\n ) {\n input[BuiltInPolicyType.IDENTITY] = toIdentityPolicyData(actor.identity);\n }\n\n const engine = new PolicyEngine(this.ctx.identityPermissionProvider);\n await engine.evaluateOrFail(\n entity,\n definePolicyEvaluationContext({ data: new PolicyData(input) }),\n );\n }\n\n async safeCheck(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n realm?: string,\n ): Promise<Result<null>> {\n try {\n await this.check(idOrName, data, actor, realm);\n return { success: true, data: null };\n } catch (e) {\n return { success: false, error: normalizeError(e) };\n }\n }\n}\n"],"mappings":";;;;;;;;;AAmBA,IAAaQ,uBAAb,MAAaA;CACCC;CAEV,YAAYA,KAAkC;EAC1C,KAAKA,MAAMA;CACf;CAEA,MAAMC,MACFC,UACAC,MACAC,OACAC,OACa;EACb,IAAIC;EACJ,IAAIZ,OAAOQ,QAAAA,GACPI,WAAW,EAAEC,IAAIL,SAAS;OACvB;GACHI,WAAW,EAAEE,MAAMN,SAAS;GAE5B,IAAIG,OAAO;IACP,MAAMI,UAAU,MAAM,KAAKT,IAAIU,gBAAgBC,UAAUN,KAAAA;IACzD,IAAI,CAACI,SACD,MAAM,IAAId,oBAAAA;IAEdW,SAASG,UAAUA;GACvB;EACJ;EAEA,MAAMG,SAAS,MAAM,KAAKZ,IAAIa,WAAWC,UAAUR,QAAAA;EACnD,IAAI,CAACM,QACD,MAAM,IAAIjB,oBAAAA;EAGd,MAAMoB,QAAQ,EAAE,GAAGZ,KAAK;EACxB,IACI,CAACY,MAAMxB,kBAAkByB,aACzBD,MAAMxB,kBAAkByB,cAAc,MAEtCD,MAAMxB,kBAAkByB,YAAYlB,qBAAqBM,MAAMa,QAAQ;EAI3E,MAAMC,IADarB,eAAa,KAAKG,IAAImB,0BACnCD,CAAAA,CAAOE,eACTR,QACAnB,8BAA8B,EAAEU,MAAM,IAAIX,WAAWuB,KAAAA,EAAO,CAAA,CAAA;CAEpE;CAEA,MAAMM,UACFnB,UACAC,MACAC,OACAC,OACqB;EACrB,IAAI;GACA,MAAM,KAAKJ,MAAMC,UAAUC,MAAMC,OAAOC,KAAAA;GACxC,OAAO;IAAEiB,SAAS;IAAMnB,MAAM;GAAK;EACvC,SAASoB,GAAG;GACR,OAAO;IAAED,SAAS;IAAOE,OAAO5B,eAAe2B,CAAAA;GAAG;EACtD;CACJ;AACJ"}
|
|
@@ -36,13 +36,13 @@ var IdentityProviderAccountManager = class {
|
|
|
36
36
|
identity.operation = IdentityProviderIdentityOperation.CREATE;
|
|
37
37
|
const user = await this.saveUser(identity);
|
|
38
38
|
account = await this.repository.save({
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
providerId: identity.provider.id,
|
|
40
|
+
providerUserId: identity.id,
|
|
41
|
+
providerUserName: user.name,
|
|
42
|
+
providerRealmId: identity.provider.realmId,
|
|
43
43
|
user,
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
userId: user.id,
|
|
45
|
+
userRealmId: user.realmId
|
|
46
46
|
});
|
|
47
47
|
await this.saveRoles(identity, account.user);
|
|
48
48
|
await this.savePermissions(identity, account.user);
|
|
@@ -53,10 +53,10 @@ var IdentityProviderAccountManager = class {
|
|
|
53
53
|
const entity = {};
|
|
54
54
|
for (const attribute of attributes) if (attribute.key && attribute.operation === IdentityProviderMapperOperation.CREATE) entity[attribute.key] = attribute.value;
|
|
55
55
|
if (!user) {
|
|
56
|
-
entity.
|
|
56
|
+
entity.realmId = identity.provider.realmId;
|
|
57
57
|
entity.active = true;
|
|
58
|
-
entity.
|
|
59
|
-
entity.
|
|
58
|
+
entity.nameLocked = true;
|
|
59
|
+
entity.clientId = identity.clientId || null;
|
|
60
60
|
}
|
|
61
61
|
const attributesSelf = await this.validateAttributes(entity, identity, 10);
|
|
62
62
|
if (!attributesSelf) throw new Error("Identity provider attributes could not be validated.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["UserValidator","buildUserFakeEmail","isUserFakeEmail","ValidatorGroup","createNanoID","extendObject","isValidupError","stringifyPath","IdentityProviderIdentityOperation","IdentityProviderMapperOperation","IdentityProviderAccountManager","attributesMapper","permissionMapper","roleMapper","repository","userRepository","userValidator","ctx","attributeMapper","save","identity","account","findOneByProviderIdentity","operation","UPDATE","user","saveUser","saveRoles","savePermissions","CREATE","provider_id","provider","id","provider_user_id","provider_user_name","name","provider_realm_id","realm_id","user_id","user_realm_id","attributes","execute","entity","attribute","key","value","active","name_locked","client_id","clientId","attributesSelf","validateAttributes","Error","attributesSelfKeys","Object","keys","attributesExtra","entityKeys","entityKey","index","indexOf","output","trim","toLowerCase","attempts","Math","max","attributeCandidates","length","saveOneWithEA","names","shift","run","group","email","e","retry","i","issues","child","pathNormalized","path","Array","isArray","first","rest","push","entities"],"sources":["../../../../../src/core/identity/provider/account/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\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 { IdentityProviderAccount, User } from '@authup/core-kit';\nimport {\n UserValidator,\n buildUserFakeEmail,\n isUserFakeEmail,\n} from '@authup/core-kit';\nimport { ValidatorGroup, createNanoID, extendObject } from '@authup/kit';\nimport { isValidupError, stringifyPath } from 'validup';\nimport type { IUserIdentityRepository } from '../../entities/index.ts';\nimport { IdentityProviderIdentityOperation } from '../constants.ts';\nimport type { IIdentityProviderMapper } from '../mapper/index.ts';\nimport { IdentityProviderMapperOperation } from '../mapper/index.ts';\nimport type { IdentityProviderIdentity } from '../types.ts';\nimport type { IIdentityProviderAccountManager, IIdentityProviderAccountRepository, IdentityProviderAccountManagerContext } from './types.ts';\n\nexport class IdentityProviderAccountManager implements IIdentityProviderAccountManager {\n protected attributesMapper : IIdentityProviderMapper;\n\n protected permissionMapper : IIdentityProviderMapper;\n\n protected roleMapper : IIdentityProviderMapper;\n\n protected repository : IIdentityProviderAccountRepository;\n\n protected userRepository: IUserIdentityRepository;\n\n protected userValidator : UserValidator;\n\n constructor(ctx: IdentityProviderAccountManagerContext) {\n this.attributesMapper = ctx.attributeMapper;\n this.permissionMapper = ctx.permissionMapper;\n this.roleMapper = ctx.roleMapper;\n this.repository = ctx.repository;\n this.userRepository = ctx.userRepository;\n\n this.userValidator = new UserValidator();\n }\n\n async save(identity: IdentityProviderIdentity): Promise<IdentityProviderAccount> {\n let account = await this.repository.findOneByProviderIdentity(identity);\n if (account) {\n identity.operation = IdentityProviderIdentityOperation.UPDATE;\n\n account.user = await this.saveUser(identity, account.user);\n\n await this.repository.save(account);\n\n await this.saveRoles(identity, account.user);\n await this.savePermissions(identity, account.user);\n\n return account;\n }\n\n identity.operation = IdentityProviderIdentityOperation.CREATE;\n\n const user = await this.saveUser(identity);\n\n account = await this.repository.save({\n provider_id: identity.provider.id,\n provider_user_id: identity.id,\n provider_user_name: user.name, // todo: parse identity.name\n provider_realm_id: identity.provider.realm_id,\n user,\n user_id: user.id,\n user_realm_id: user.realm_id,\n });\n\n await this.saveRoles(identity, account.user);\n await this.savePermissions(identity, account.user);\n\n return account;\n }\n\n async saveUser(\n identity: IdentityProviderIdentity,\n user?: User,\n ): Promise<User> {\n const attributes = await this.attributesMapper.execute(\n identity,\n );\n\n const entity : Record<string, any> = {};\n for (const attribute of attributes) {\n if (\n attribute.key &&\n attribute.operation === IdentityProviderMapperOperation.CREATE\n ) {\n // attribute value might be object, array, ...\n entity[attribute.key] = attribute.value;\n }\n }\n\n if (!user) {\n entity.realm_id = identity.provider.realm_id;\n entity.active = true;\n entity.name_locked = true;\n entity.client_id = identity.clientId || null;\n }\n\n const attributesSelf = await this.validateAttributes(entity, identity, 10);\n if (!attributesSelf) {\n // todo: better error name\n throw new Error('Identity provider attributes could not be validated.');\n }\n const attributesSelfKeys = Object.keys(attributesSelf);\n\n const attributesExtra : Record<string, any> = {};\n\n const entityKeys = Object.keys(entity);\n for (const entityKey of entityKeys) {\n const index = attributesSelfKeys.indexOf(entityKey);\n if (index !== -1) {\n continue;\n }\n\n attributesExtra[entityKey] = entity[entityKey];\n }\n\n let output : User;\n if (user) {\n output = extendObject(user, attributesSelf);\n } else {\n output = attributesSelf;\n }\n\n if (typeof output.name === 'string') {\n output.name = output.name.trim().toLowerCase();\n }\n\n let attempts = Math.max((identity.attributeCandidates?.name?.length || 0) + 1, 10);\n while (attempts > 0) {\n try {\n // todo: we also need to remove existing ones via idp login flow ( but not other attributes!)\n return await this.userRepository.saveOneWithEA(output, attributesExtra);\n } catch {\n const names = identity.attributeCandidates?.name || [];\n if (names.length > 0) {\n while (names.length > 0) {\n output.name = `${names.shift()}`.trim().toLowerCase();\n\n try {\n await this.userValidator.run(output, {\n group: identity.operation === IdentityProviderIdentityOperation.CREATE ?\n ValidatorGroup.CREATE :\n ValidatorGroup.UPDATE,\n });\n break;\n } catch {\n // todo: do nothing.\n }\n }\n } else {\n output.name = createNanoID('0123456789abcdefghijklmnopqrstuvwxyz-_', 10);\n }\n\n if (isUserFakeEmail(output.email)) {\n output.email = buildUserFakeEmail(output.name);\n }\n\n attempts -= 1;\n }\n }\n\n throw new Error('The user account could not be created due a conflict error.');\n }\n\n async validateAttributes(\n entity: Record<string, any>,\n identity: IdentityProviderIdentity,\n attempts: number,\n ) : Promise<User | null> {\n attempts--;\n if (attempts <= 0) {\n return null;\n }\n\n try {\n return await this.userValidator.run(entity, {\n group: identity.operation === IdentityProviderIdentityOperation.CREATE ?\n ValidatorGroup.CREATE :\n ValidatorGroup.UPDATE,\n });\n } catch (e: any) {\n if (!isValidupError(e)) {\n return null;\n }\n\n let retry = false;\n for (let i = 0; i < e.issues.length; i++) {\n const child = e.issues[i];\n\n const pathNormalized = stringifyPath(child.path);\n\n if (\n Array.isArray(entity[pathNormalized]) &&\n entity[pathNormalized].length > 0\n ) {\n const [first, ...rest] = entity[pathNormalized];\n entity[pathNormalized] = first;\n\n if (rest.length > 0) {\n if (!identity.attributeCandidates) {\n identity.attributeCandidates = {};\n }\n\n if (!identity.attributeCandidates[pathNormalized]) {\n identity.attributeCandidates[pathNormalized] = [];\n }\n\n identity.attributeCandidates[pathNormalized]!.push(...rest);\n }\n\n retry = true;\n break;\n }\n\n if (\n identity.attributeCandidates &&\n identity.attributeCandidates[pathNormalized] &&\n identity.attributeCandidates[pathNormalized]!.length > 0\n ) {\n entity[pathNormalized] = identity.attributeCandidates[pathNormalized]!.shift();\n retry = true;\n break;\n }\n\n if (\n entity.name &&\n pathNormalized === 'email'\n ) {\n entity[pathNormalized] = buildUserFakeEmail(entity.name);\n retry = true;\n break;\n }\n\n if (entity[pathNormalized]) {\n entity[pathNormalized] = null;\n break;\n }\n }\n\n if (retry) {\n return this.validateAttributes(entity, identity, attempts);\n }\n\n return null;\n }\n }\n\n async savePermissions(\n identity: IdentityProviderIdentity,\n user: User,\n ) {\n const entities = await this.permissionMapper.execute(identity);\n\n await this.userRepository.savePermissions(user, entities);\n }\n\n async saveRoles(\n identity: IdentityProviderIdentity,\n user: User,\n ) {\n const entities = await this.roleMapper.execute(identity);\n\n await this.userRepository.saveRoles(user, entities);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["UserValidator","buildUserFakeEmail","isUserFakeEmail","ValidatorGroup","createNanoID","extendObject","isValidupError","stringifyPath","IdentityProviderIdentityOperation","IdentityProviderMapperOperation","IdentityProviderAccountManager","attributesMapper","permissionMapper","roleMapper","repository","userRepository","userValidator","ctx","attributeMapper","save","identity","account","findOneByProviderIdentity","operation","UPDATE","user","saveUser","saveRoles","savePermissions","CREATE","providerId","provider","id","providerUserId","providerUserName","name","providerRealmId","realmId","userId","userRealmId","attributes","execute","entity","attribute","key","value","active","nameLocked","clientId","attributesSelf","validateAttributes","Error","attributesSelfKeys","Object","keys","attributesExtra","entityKeys","entityKey","index","indexOf","output","trim","toLowerCase","attempts","Math","max","attributeCandidates","length","saveOneWithEA","names","shift","run","group","email","e","retry","i","issues","child","pathNormalized","path","Array","isArray","first","rest","push","entities"],"sources":["../../../../../src/core/identity/provider/account/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\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 { IdentityProviderAccount, User } from '@authup/core-kit';\nimport {\n UserValidator,\n buildUserFakeEmail,\n isUserFakeEmail,\n} from '@authup/core-kit';\nimport { ValidatorGroup, createNanoID, extendObject } from '@authup/kit';\nimport { isValidupError, stringifyPath } from 'validup';\nimport type { IUserIdentityRepository } from '../../entities/index.ts';\nimport { IdentityProviderIdentityOperation } from '../constants.ts';\nimport type { IIdentityProviderMapper } from '../mapper/index.ts';\nimport { IdentityProviderMapperOperation } from '../mapper/index.ts';\nimport type { IdentityProviderIdentity } from '../types.ts';\nimport type { IIdentityProviderAccountManager, IIdentityProviderAccountRepository, IdentityProviderAccountManagerContext } from './types.ts';\n\nexport class IdentityProviderAccountManager implements IIdentityProviderAccountManager {\n protected attributesMapper : IIdentityProviderMapper;\n\n protected permissionMapper : IIdentityProviderMapper;\n\n protected roleMapper : IIdentityProviderMapper;\n\n protected repository : IIdentityProviderAccountRepository;\n\n protected userRepository: IUserIdentityRepository;\n\n protected userValidator : UserValidator;\n\n constructor(ctx: IdentityProviderAccountManagerContext) {\n this.attributesMapper = ctx.attributeMapper;\n this.permissionMapper = ctx.permissionMapper;\n this.roleMapper = ctx.roleMapper;\n this.repository = ctx.repository;\n this.userRepository = ctx.userRepository;\n\n this.userValidator = new UserValidator();\n }\n\n async save(identity: IdentityProviderIdentity): Promise<IdentityProviderAccount> {\n let account = await this.repository.findOneByProviderIdentity(identity);\n if (account) {\n identity.operation = IdentityProviderIdentityOperation.UPDATE;\n\n account.user = await this.saveUser(identity, account.user);\n\n await this.repository.save(account);\n\n await this.saveRoles(identity, account.user);\n await this.savePermissions(identity, account.user);\n\n return account;\n }\n\n identity.operation = IdentityProviderIdentityOperation.CREATE;\n\n const user = await this.saveUser(identity);\n\n account = await this.repository.save({\n providerId: identity.provider.id,\n providerUserId: identity.id,\n providerUserName: user.name, // todo: parse identity.name\n providerRealmId: identity.provider.realmId,\n user,\n userId: user.id,\n userRealmId: user.realmId,\n });\n\n await this.saveRoles(identity, account.user);\n await this.savePermissions(identity, account.user);\n\n return account;\n }\n\n async saveUser(\n identity: IdentityProviderIdentity,\n user?: User,\n ): Promise<User> {\n const attributes = await this.attributesMapper.execute(\n identity,\n );\n\n const entity : Record<string, any> = {};\n for (const attribute of attributes) {\n if (\n attribute.key &&\n attribute.operation === IdentityProviderMapperOperation.CREATE\n ) {\n // attribute value might be object, array, ...\n entity[attribute.key] = attribute.value;\n }\n }\n\n if (!user) {\n entity.realmId = identity.provider.realmId;\n entity.active = true;\n entity.nameLocked = true;\n entity.clientId = identity.clientId || null;\n }\n\n const attributesSelf = await this.validateAttributes(entity, identity, 10);\n if (!attributesSelf) {\n // todo: better error name\n throw new Error('Identity provider attributes could not be validated.');\n }\n const attributesSelfKeys = Object.keys(attributesSelf);\n\n const attributesExtra : Record<string, any> = {};\n\n const entityKeys = Object.keys(entity);\n for (const entityKey of entityKeys) {\n const index = attributesSelfKeys.indexOf(entityKey);\n if (index !== -1) {\n continue;\n }\n\n attributesExtra[entityKey] = entity[entityKey];\n }\n\n let output : User;\n if (user) {\n output = extendObject(user, attributesSelf);\n } else {\n output = attributesSelf;\n }\n\n if (typeof output.name === 'string') {\n output.name = output.name.trim().toLowerCase();\n }\n\n let attempts = Math.max((identity.attributeCandidates?.name?.length || 0) + 1, 10);\n while (attempts > 0) {\n try {\n // todo: we also need to remove existing ones via idp login flow ( but not other attributes!)\n return await this.userRepository.saveOneWithEA(output, attributesExtra);\n } catch {\n const names = identity.attributeCandidates?.name || [];\n if (names.length > 0) {\n while (names.length > 0) {\n output.name = `${names.shift()}`.trim().toLowerCase();\n\n try {\n await this.userValidator.run(output, {\n group: identity.operation === IdentityProviderIdentityOperation.CREATE ?\n ValidatorGroup.CREATE :\n ValidatorGroup.UPDATE,\n });\n break;\n } catch {\n // todo: do nothing.\n }\n }\n } else {\n output.name = createNanoID('0123456789abcdefghijklmnopqrstuvwxyz-_', 10);\n }\n\n if (isUserFakeEmail(output.email)) {\n output.email = buildUserFakeEmail(output.name);\n }\n\n attempts -= 1;\n }\n }\n\n throw new Error('The user account could not be created due a conflict error.');\n }\n\n async validateAttributes(\n entity: Record<string, any>,\n identity: IdentityProviderIdentity,\n attempts: number,\n ) : Promise<User | null> {\n attempts--;\n if (attempts <= 0) {\n return null;\n }\n\n try {\n return await this.userValidator.run(entity, {\n group: identity.operation === IdentityProviderIdentityOperation.CREATE ?\n ValidatorGroup.CREATE :\n ValidatorGroup.UPDATE,\n });\n } catch (e: any) {\n if (!isValidupError(e)) {\n return null;\n }\n\n let retry = false;\n for (let i = 0; i < e.issues.length; i++) {\n const child = e.issues[i];\n\n const pathNormalized = stringifyPath(child.path);\n\n if (\n Array.isArray(entity[pathNormalized]) &&\n entity[pathNormalized].length > 0\n ) {\n const [first, ...rest] = entity[pathNormalized];\n entity[pathNormalized] = first;\n\n if (rest.length > 0) {\n if (!identity.attributeCandidates) {\n identity.attributeCandidates = {};\n }\n\n if (!identity.attributeCandidates[pathNormalized]) {\n identity.attributeCandidates[pathNormalized] = [];\n }\n\n identity.attributeCandidates[pathNormalized]!.push(...rest);\n }\n\n retry = true;\n break;\n }\n\n if (\n identity.attributeCandidates &&\n identity.attributeCandidates[pathNormalized] &&\n identity.attributeCandidates[pathNormalized]!.length > 0\n ) {\n entity[pathNormalized] = identity.attributeCandidates[pathNormalized]!.shift();\n retry = true;\n break;\n }\n\n if (\n entity.name &&\n pathNormalized === 'email'\n ) {\n entity[pathNormalized] = buildUserFakeEmail(entity.name);\n retry = true;\n break;\n }\n\n if (entity[pathNormalized]) {\n entity[pathNormalized] = null;\n break;\n }\n }\n\n if (retry) {\n return this.validateAttributes(entity, identity, attempts);\n }\n\n return null;\n }\n }\n\n async savePermissions(\n identity: IdentityProviderIdentity,\n user: User,\n ) {\n const entities = await this.permissionMapper.execute(identity);\n\n await this.userRepository.savePermissions(user, entities);\n }\n\n async saveRoles(\n identity: IdentityProviderIdentity,\n user: User,\n ) {\n const entities = await this.roleMapper.execute(identity);\n\n await this.userRepository.saveRoles(user, entities);\n }\n}\n"],"mappings":"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"}
|