@authup/server-core 1.0.0-beta.56 → 1.0.0-beta.57
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/domains/role/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/role/entity.mjs +2 -1
- package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
- package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts +25 -0
- package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
- package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs +60 -0
- package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs.map +1 -0
- package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts +25 -0
- package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
- package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs +60 -0
- package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs.map +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +1 -1
- 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/identity.mjs +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/identity.mjs.map +1 -1
- 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/controllers/entities/client/module.d.ts +6 -6
- package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/client/module.mjs +30 -7
- package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/client-permission/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/client-permission/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/client-permission/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/client-permission/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/client-role/module.d.ts +4 -4
- package/dist/adapters/http/controllers/entities/client-role/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/client-role/module.mjs +19 -4
- package/dist/adapters/http/controllers/entities/client-role/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/client-scope/module.d.ts +4 -4
- package/dist/adapters/http/controllers/entities/client-scope/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/client-scope/module.mjs +19 -4
- package/dist/adapters/http/controllers/entities/client-scope/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/consent/module.d.ts +3 -3
- package/dist/adapters/http/controllers/entities/consent/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/consent/module.mjs +15 -3
- package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/event/module.d.ts +2 -2
- package/dist/adapters/http/controllers/entities/event/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/event/module.mjs +11 -2
- package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +6 -6
- package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +23 -7
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/key/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/key/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/permission/module.d.ts +6 -6
- package/dist/adapters/http/controllers/entities/permission/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/permission/module.mjs +27 -6
- package/dist/adapters/http/controllers/entities/permission/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts +4 -4
- package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +19 -4
- package/dist/adapters/http/controllers/entities/permission-policy/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/policy/module.d.ts +7 -7
- package/dist/adapters/http/controllers/entities/policy/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/policy/module.mjs +27 -6
- package/dist/adapters/http/controllers/entities/policy/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/realm/module.d.ts +6 -6
- package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/realm/module.mjs +29 -8
- package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/role/module.d.ts +6 -6
- package/dist/adapters/http/controllers/entities/role/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/role/module.mjs +27 -6
- package/dist/adapters/http/controllers/entities/role/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/role-attribute/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/role-permission/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/role-permission/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/role-permission/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/role-permission/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/scope/module.d.ts +6 -6
- package/dist/adapters/http/controllers/entities/scope/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/scope/module.mjs +27 -6
- package/dist/adapters/http/controllers/entities/scope/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/session/module.d.ts +3 -3
- package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/session/module.mjs +15 -3
- package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/user/module.d.ts +6 -6
- package/dist/adapters/http/controllers/entities/user/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/user/module.mjs +27 -6
- package/dist/adapters/http/controllers/entities/user/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/user-attribute/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts +4 -4
- package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +19 -4
- package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/user-permission/module.d.ts +5 -5
- package/dist/adapters/http/controllers/entities/user-permission/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/user-permission/module.mjs +23 -5
- package/dist/adapters/http/controllers/entities/user-permission/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/user-role/module.d.ts +4 -4
- package/dist/adapters/http/controllers/entities/user-role/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/user-role/module.mjs +19 -4
- package/dist/adapters/http/controllers/entities/user-role/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/index.mjs +2 -1
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +1 -1
- package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
- package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
- package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/logout/module.mjs +5 -1
- package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts +2 -0
- package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/workflows/userinfo/index.mjs +5 -0
- package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts +18 -0
- package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/workflows/userinfo/module.mjs +53 -0
- package/dist/adapters/http/controllers/workflows/userinfo/module.mjs.map +1 -0
- package/dist/adapters/http/index.mjs +2 -1
- package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +1 -0
- package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/authorization/module.mjs +8 -0
- package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/rate-limit.mjs +2 -0
- package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
- package/dist/adapters/http/request/event-context.mjs +1 -1
- package/dist/adapters/http/request/event-context.mjs.map +1 -1
- package/dist/app/factory.d.ts +2 -1
- package/dist/app/factory.d.ts.map +1 -1
- package/dist/app/factory.mjs +2 -2
- package/dist/app/factory.mjs.map +1 -1
- package/dist/app/index.d.ts +1 -0
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.mjs +5 -1
- package/dist/app/modules/authentication/repositories/session.mjs +2 -2
- package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
- package/dist/app/modules/components/module.d.ts +3 -0
- package/dist/app/modules/components/module.d.ts.map +1 -1
- package/dist/app/modules/components/module.mjs +17 -2
- package/dist/app/modules/components/module.mjs.map +1 -1
- package/dist/app/modules/config/constants.d.ts +1 -0
- package/dist/app/modules/config/constants.d.ts.map +1 -1
- package/dist/app/modules/config/constants.mjs +1 -0
- package/dist/app/modules/config/constants.mjs.map +1 -1
- package/dist/app/modules/config/helpers.d.ts +9 -0
- package/dist/app/modules/config/helpers.d.ts.map +1 -0
- package/dist/app/modules/config/helpers.mjs +21 -0
- package/dist/app/modules/config/helpers.mjs.map +1 -0
- package/dist/app/modules/config/index.d.ts +2 -0
- package/dist/app/modules/config/index.d.ts.map +1 -1
- package/dist/app/modules/config/index.mjs +6 -1
- package/dist/app/modules/config/module.d.ts.map +1 -1
- package/dist/app/modules/config/module.mjs +2 -7
- package/dist/app/modules/config/module.mjs.map +1 -1
- package/dist/app/modules/config/normalize.d.ts.map +1 -1
- package/dist/app/modules/config/normalize.mjs +4 -0
- 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 +2 -0
- package/dist/app/modules/config/read/env.mjs.map +1 -1
- package/dist/app/modules/config/read/fs.d.ts.map +1 -1
- package/dist/app/modules/config/read/fs.mjs +31 -8
- package/dist/app/modules/config/read/fs.mjs.map +1 -1
- package/dist/app/modules/config/trust-proxy.d.ts +28 -0
- package/dist/app/modules/config/trust-proxy.d.ts.map +1 -0
- package/dist/app/modules/config/trust-proxy.mjs +64 -0
- package/dist/app/modules/config/trust-proxy.mjs.map +1 -0
- package/dist/app/modules/config/types.d.ts +18 -0
- 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 +7 -0
- package/dist/app/modules/config/validator.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/client/repository.mjs +3 -4
- package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client-permission/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/client-permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client-role/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/client-role/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/client-scope/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/client-scope/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/event/repository.mjs +4 -3
- package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/key/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/permission/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/permission-policy/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/permission-policy/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/policy/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/query.d.ts +20 -0
- package/dist/app/modules/database/repositories/query.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/query.mjs +26 -3
- package/dist/app/modules/database/repositories/query.mjs.map +1 -1
- package/dist/app/modules/database/repositories/realm/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/role/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/role-attribute/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/role-permission/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/role-permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/schema-validation.d.ts +17 -3
- package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/schema-validation.mjs +29 -5
- package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -1
- package/dist/app/modules/database/repositories/scope/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user-attribute/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user-permission/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/user-permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user-role/repository.mjs +2 -2
- package/dist/app/modules/database/repositories/user-role/repository.mjs.map +1 -1
- package/dist/app/modules/http/constants.d.ts +2 -13
- package/dist/app/modules/http/constants.d.ts.map +1 -1
- package/dist/app/modules/http/constants.mjs.map +1 -1
- package/dist/app/modules/http/module.d.ts.map +1 -1
- package/dist/app/modules/http/module.mjs +7 -1
- package/dist/app/modules/http/module.mjs.map +1 -1
- package/dist/app/modules/http/modules/controller.d.ts +4 -2
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +16 -3
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/index.mjs +5 -1
- package/dist/app/modules/oauth2/repositories/consent/repository.mjs +2 -2
- package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +12 -4
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/types.d.ts +5 -0
- package/dist/app/types.d.ts.map +1 -0
- package/dist/app/types.mjs +4 -0
- package/dist/cli/commands/healthcheck.d.ts +2 -1
- package/dist/cli/commands/healthcheck.d.ts.map +1 -1
- package/dist/cli/commands/healthcheck.mjs +3 -2
- package/dist/cli/commands/healthcheck.mjs.map +1 -1
- package/dist/cli/commands/index.d.ts +0 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.mjs +1 -2
- package/dist/cli/commands/migration.d.ts +2 -1
- package/dist/cli/commands/migration.d.ts.map +1 -1
- package/dist/cli/commands/migration.mjs +3 -2
- package/dist/cli/commands/migration.mjs.map +1 -1
- package/dist/cli/commands/start.d.ts +2 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.mjs +3 -2
- package/dist/cli/commands/start.mjs.map +1 -1
- package/dist/cli/config.d.ts +18 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.mjs +34 -0
- package/dist/cli/config.mjs.map +1 -0
- package/dist/cli/module.d.ts +8 -8
- package/dist/cli/module.d.ts.map +1 -1
- package/dist/cli/module.mjs +8 -28
- package/dist/cli/module.mjs.map +1 -1
- package/dist/cli/types.d.ts +5 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.mjs +4 -0
- package/dist/components/event-cleaner/module.d.ts.map +1 -1
- package/dist/components/event-cleaner/module.mjs +26 -14
- package/dist/components/event-cleaner/module.mjs.map +1 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.mjs +1 -4
- package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
- package/dist/components/oauth2-cleaner/module.mjs +29 -17
- package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
- package/dist/components/types.d.ts +1 -0
- package/dist/components/types.d.ts.map +1 -1
- package/dist/core/authentication/login-throttle/service.d.ts.map +1 -1
- package/dist/core/authentication/login-throttle/service.mjs +2 -1
- package/dist/core/authentication/login-throttle/service.mjs.map +1 -1
- package/dist/core/entities/client/constants.d.ts +10 -0
- package/dist/core/entities/client/constants.d.ts.map +1 -0
- package/dist/core/entities/client/constants.mjs +20 -0
- package/dist/core/entities/client/constants.mjs.map +1 -0
- package/dist/core/entities/client/index.d.ts +1 -0
- package/dist/core/entities/client/index.d.ts.map +1 -1
- package/dist/core/entities/client/index.mjs +3 -2
- package/dist/core/entities/client/schema.d.ts.map +1 -1
- package/dist/core/entities/client/schema.mjs +40 -3
- package/dist/core/entities/client/schema.mjs.map +1 -1
- package/dist/core/entities/client/service.d.ts.map +1 -1
- package/dist/core/entities/client/service.mjs +8 -60
- package/dist/core/entities/client/service.mjs.map +1 -1
- package/dist/core/entities/client/web-client.d.ts +39 -3
- package/dist/core/entities/client/web-client.d.ts.map +1 -1
- package/dist/core/entities/client/web-client.mjs +68 -12
- package/dist/core/entities/client/web-client.mjs.map +1 -1
- package/dist/core/entities/client-scope/schema.d.ts.map +1 -1
- package/dist/core/entities/client-scope/schema.mjs +3 -1
- package/dist/core/entities/client-scope/schema.mjs.map +1 -1
- package/dist/core/entities/event/constants.d.ts +7 -0
- package/dist/core/entities/event/constants.d.ts.map +1 -1
- package/dist/core/entities/event/constants.mjs +7 -1
- package/dist/core/entities/event/constants.mjs.map +1 -1
- package/dist/core/entities/event/index.mjs +2 -2
- package/dist/core/entities/event/service.mjs +1 -1
- package/dist/core/entities/event/service.mjs.map +1 -1
- package/dist/core/entities/index.mjs +4 -3
- package/dist/core/entities/role/schema.d.ts.map +1 -1
- package/dist/core/entities/role/schema.mjs +4 -0
- package/dist/core/entities/role/schema.mjs.map +1 -1
- package/dist/core/entities/session/schema.d.ts.map +1 -1
- package/dist/core/entities/session/schema.mjs +2 -0
- package/dist/core/entities/session/schema.mjs.map +1 -1
- package/dist/core/entities/user/schema.d.ts.map +1 -1
- package/dist/core/entities/user/schema.mjs +2 -0
- package/dist/core/entities/user/schema.mjs.map +1 -1
- package/dist/core/identity/password-recovery/check.mjs +4 -4
- package/dist/core/identity/password-recovery/check.mjs.map +1 -1
- package/dist/core/identity/registration/check.mjs +2 -2
- package/dist/core/identity/registration/check.mjs.map +1 -1
- package/dist/core/index.mjs +5 -3
- package/dist/core/key/check.mjs +2 -2
- package/dist/core/key/check.mjs.map +1 -1
- package/dist/core/provisioning/entities/client/relations-validator.d.ts.map +1 -1
- package/dist/core/provisioning/entities/client/relations-validator.mjs +2 -0
- package/dist/core/provisioning/entities/client/relations-validator.mjs.map +1 -1
- package/dist/core/provisioning/entities/client/types.d.ts +8 -0
- package/dist/core/provisioning/entities/client/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/client/module.d.ts +3 -1
- package/dist/core/provisioning/synchronizer/client/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/client/module.mjs +10 -0
- package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/client/types.d.ts +3 -1
- package/dist/core/provisioning/synchronizer/client/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.d.ts +4 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs +14 -29
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/index.d.ts +1 -0
- package/dist/core/provisioning/synchronizer/index.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.mjs +8 -8
- package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/types.d.ts +11 -0
- package/dist/core/provisioning/synchronizer/types.d.ts.map +1 -0
- package/dist/core/provisioning/synchronizer/types.mjs +4 -0
- package/dist/core/query/describe.d.ts +25 -0
- package/dist/core/query/describe.d.ts.map +1 -0
- package/dist/core/query/describe.mjs +50 -0
- package/dist/core/query/describe.mjs.map +1 -0
- package/dist/core/query/fields.d.ts +44 -0
- package/dist/core/query/fields.d.ts.map +1 -0
- package/dist/core/query/fields.mjs +46 -0
- package/dist/core/query/fields.mjs.map +1 -0
- package/dist/core/query/index.d.ts +1 -0
- package/dist/core/query/index.d.ts.map +1 -1
- package/dist/core/query/index.mjs +2 -1
- package/dist/core/query/module.d.ts +1 -1
- package/dist/core/query/module.mjs +1 -1
- package/dist/core/query/module.mjs.map +1 -1
- package/dist/index.mjs +6 -2
- package/dist/swagger.json +852 -145
- package/dist/ui/client/.vite/ssr-manifest.json +858 -750
- package/dist/ui/client/assets/index-Bk6-OZy9.css +2 -0
- package/dist/ui/client/assets/index-DO6_7NTJ.js +106 -0
- package/dist/ui/client/index.html +2 -2
- package/dist/ui/server/server.js +2472 -6357
- package/package.json +40 -40
- package/dist/cli/commands/reset.d.ts +0 -2
- package/dist/cli/commands/reset.d.ts.map +0 -1
- package/dist/cli/commands/reset.mjs +0 -23
- package/dist/cli/commands/reset.mjs.map +0 -1
- package/dist/components/database/index.d.ts +0 -2
- package/dist/components/database/index.d.ts.map +0 -1
- package/dist/components/database/index.mjs +0 -7
- package/dist/components/database/unique-entries/factory.d.ts +0 -4
- package/dist/components/database/unique-entries/factory.d.ts.map +0 -1
- package/dist/components/database/unique-entries/factory.mjs +0 -12
- package/dist/components/database/unique-entries/factory.mjs.map +0 -1
- package/dist/components/database/unique-entries/index.d.ts +0 -3
- package/dist/components/database/unique-entries/index.d.ts.map +0 -1
- package/dist/components/database/unique-entries/index.mjs +0 -6
- package/dist/components/database/unique-entries/module.d.ts +0 -15
- package/dist/components/database/unique-entries/module.d.ts.map +0 -1
- package/dist/components/database/unique-entries/module.mjs +0 -69
- package/dist/components/database/unique-entries/module.mjs.map +0 -1
- package/dist/ui/client/assets/index-C05uGFDe.js +0 -131
- package/dist/ui/client/assets/index-CiHrf73J.css +0 -2
|
@@ -11,8 +11,28 @@ import type { EntityRepositoryPaginationMeta } from '@authup/server-kit';
|
|
|
11
11
|
* Joins triggered by the parsed relations replicate the DISTINCT-id
|
|
12
12
|
* pattern: when the builder already groups by the root id, every join
|
|
13
13
|
* contributes its own `GROUP BY <alias>.id`.
|
|
14
|
+
*
|
|
15
|
+
* Field visibility conditions (`IField.condition`, attached by a
|
|
16
|
+
* schema `fields.validateMany` gate) cannot go into the statement — a
|
|
17
|
+
* TypeORM selection must stay a bare column for entity hydration.
|
|
18
|
+
* The adapter projects the gated column unconditionally and
|
|
19
|
+
* force-selects every column its condition reads (rapiq#830's operand
|
|
20
|
+
* projection — the SQL counterpart of the plan-039 force-select
|
|
21
|
+
* discipline, so a sparse replace-projection can neither over-redact
|
|
22
|
+
* nor fail open on missing operands); the fetching adapter MUST then
|
|
23
|
+
* run the rows through `redactFieldConditions` before returning them.
|
|
14
24
|
*/
|
|
15
25
|
export declare function applyQuery(queryBuilder: SelectQueryBuilder<any>, query?: IQuery): {
|
|
16
26
|
pagination: EntityRepositoryPaginationMeta;
|
|
17
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* Enforce the field visibility conditions of a decoded query on
|
|
30
|
+
* already-fetched rows: a gated column is dropped from every row that
|
|
31
|
+
* fails its condition; no row is ever removed. The SQL execution path
|
|
32
|
+
* projects gated columns unconditionally, so EVERY `findMany` adapter
|
|
33
|
+
* must pass its fetched entities through this before returning them —
|
|
34
|
+
* enforcement is fail-open by construction (a skipped call ships the
|
|
35
|
+
* value). Condition-less queries pass through untouched.
|
|
36
|
+
*/
|
|
37
|
+
export declare function redactFieldConditions<T>(query: IQuery | undefined, data: T[]): T[];
|
|
18
38
|
//# sourceMappingURL=query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/query.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/query.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CACtB,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,EACrC,KAAK,CAAC,EAAE,MAAM,GACd;IAAE,UAAU,EAAE,8BAA8B,CAAA;CAAE,CAejD;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAI,CAAC,EAAE,CAMnF"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import "node:path";
|
|
2
2
|
import "node:url";
|
|
3
3
|
import.meta.url;
|
|
4
|
-
import { Query } from "@rapiq/core";
|
|
5
|
-
import {
|
|
4
|
+
import { Query, hasFieldConditions } from "@rapiq/core";
|
|
5
|
+
import { applyFieldConditions } from "@rapiq/adapter-memory";
|
|
6
|
+
import { TypeormAdapter } from "@rapiq/adapter-typeorm";
|
|
6
7
|
//#region src/app/modules/database/repositories/query.ts
|
|
7
8
|
/**
|
|
8
9
|
* Apply a decoded rapiq query (IR) to the given TypeORM query builder.
|
|
@@ -14,6 +15,16 @@ import { TypeormAdapter } from "@rapiq/typeorm";
|
|
|
14
15
|
* Joins triggered by the parsed relations replicate the DISTINCT-id
|
|
15
16
|
* pattern: when the builder already groups by the root id, every join
|
|
16
17
|
* contributes its own `GROUP BY <alias>.id`.
|
|
18
|
+
*
|
|
19
|
+
* Field visibility conditions (`IField.condition`, attached by a
|
|
20
|
+
* schema `fields.validateMany` gate) cannot go into the statement — a
|
|
21
|
+
* TypeORM selection must stay a bare column for entity hydration.
|
|
22
|
+
* The adapter projects the gated column unconditionally and
|
|
23
|
+
* force-selects every column its condition reads (rapiq#830's operand
|
|
24
|
+
* projection — the SQL counterpart of the plan-039 force-select
|
|
25
|
+
* discipline, so a sparse replace-projection can neither over-redact
|
|
26
|
+
* nor fail open on missing operands); the fetching adapter MUST then
|
|
27
|
+
* run the rows through `redactFieldConditions` before returning them.
|
|
17
28
|
*/ function applyQuery(queryBuilder, query) {
|
|
18
29
|
const { pagination } = new TypeormAdapter({
|
|
19
30
|
queryBuilder,
|
|
@@ -23,7 +34,19 @@ import { TypeormAdapter } from "@rapiq/typeorm";
|
|
|
23
34
|
}).execute(query ?? new Query({}));
|
|
24
35
|
return { pagination };
|
|
25
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Enforce the field visibility conditions of a decoded query on
|
|
39
|
+
* already-fetched rows: a gated column is dropped from every row that
|
|
40
|
+
* fails its condition; no row is ever removed. The SQL execution path
|
|
41
|
+
* projects gated columns unconditionally, so EVERY `findMany` adapter
|
|
42
|
+
* must pass its fetched entities through this before returning them —
|
|
43
|
+
* enforcement is fail-open by construction (a skipped call ships the
|
|
44
|
+
* value). Condition-less queries pass through untouched.
|
|
45
|
+
*/ function redactFieldConditions(query, data) {
|
|
46
|
+
if (!query || !hasFieldConditions(query.fields)) return data;
|
|
47
|
+
return applyFieldConditions(query.fields, data);
|
|
48
|
+
}
|
|
26
49
|
//#endregion
|
|
27
|
-
export { applyQuery };
|
|
50
|
+
export { applyQuery, redactFieldConditions };
|
|
28
51
|
|
|
29
52
|
//# sourceMappingURL=query.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.mjs","names":["Query","TypeormAdapter","applyQuery","queryBuilder","query","adapter","relations","onJoin","_path","alias","qb","expressionMap","groupBys","length","addGroupBy","pagination","execute"],"sources":["../../../../../src/app/modules/database/repositories/query.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 { IQuery } from '@rapiq/core';\nimport { Query } from '@rapiq/core';\nimport { TypeormAdapter } from '@rapiq/typeorm';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { EntityRepositoryPaginationMeta } from '@authup/server-kit';\n\n/**\n * Apply a decoded rapiq query (IR) to the given TypeORM query builder.\n * Schema allow-lists, defaults and pagination bounds were already\n * applied at decode time (`decodeQuery` in core/query) — this helper\n * only executes the IR. Returns the applied pagination for the\n * response meta block.\n *\n * Joins triggered by the parsed relations replicate the DISTINCT-id\n * pattern: when the builder already groups by the root id, every join\n * contributes its own `GROUP BY <alias>.id`.\n */\nexport function applyQuery(\n queryBuilder: SelectQueryBuilder<any>,\n query?: IQuery,\n) : { pagination: EntityRepositoryPaginationMeta } {\n const adapter = new TypeormAdapter({\n queryBuilder,\n relations: {\n onJoin: (_path, alias, qb) => {\n if (qb.expressionMap.groupBys.length > 0) {\n qb.addGroupBy(`${alias}.id`);\n }\n },\n },\n });\n\n const { pagination } = adapter.execute(query ?? new Query({}));\n\n return { pagination };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"query.mjs","names":["Query","hasFieldConditions","applyFieldConditions","TypeormAdapter","applyQuery","queryBuilder","query","adapter","relations","onJoin","_path","alias","qb","expressionMap","groupBys","length","addGroupBy","pagination","execute","redactFieldConditions","data","fields"],"sources":["../../../../../src/app/modules/database/repositories/query.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 { IQuery } from '@rapiq/core';\nimport { Query, hasFieldConditions } from '@rapiq/core';\nimport { applyFieldConditions } from '@rapiq/adapter-memory';\nimport { TypeormAdapter } from '@rapiq/adapter-typeorm';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { EntityRepositoryPaginationMeta } from '@authup/server-kit';\n\n/**\n * Apply a decoded rapiq query (IR) to the given TypeORM query builder.\n * Schema allow-lists, defaults and pagination bounds were already\n * applied at decode time (`decodeQuery` in core/query) — this helper\n * only executes the IR. Returns the applied pagination for the\n * response meta block.\n *\n * Joins triggered by the parsed relations replicate the DISTINCT-id\n * pattern: when the builder already groups by the root id, every join\n * contributes its own `GROUP BY <alias>.id`.\n *\n * Field visibility conditions (`IField.condition`, attached by a\n * schema `fields.validateMany` gate) cannot go into the statement — a\n * TypeORM selection must stay a bare column for entity hydration.\n * The adapter projects the gated column unconditionally and\n * force-selects every column its condition reads (rapiq#830's operand\n * projection — the SQL counterpart of the plan-039 force-select\n * discipline, so a sparse replace-projection can neither over-redact\n * nor fail open on missing operands); the fetching adapter MUST then\n * run the rows through `redactFieldConditions` before returning them.\n */\nexport function applyQuery(\n queryBuilder: SelectQueryBuilder<any>,\n query?: IQuery,\n) : { pagination: EntityRepositoryPaginationMeta } {\n const adapter = new TypeormAdapter({\n queryBuilder,\n relations: {\n onJoin: (_path, alias, qb) => {\n if (qb.expressionMap.groupBys.length > 0) {\n qb.addGroupBy(`${alias}.id`);\n }\n },\n },\n });\n\n const { pagination } = adapter.execute(query ?? new Query({}));\n\n return { pagination };\n}\n\n/**\n * Enforce the field visibility conditions of a decoded query on\n * already-fetched rows: a gated column is dropped from every row that\n * fails its condition; no row is ever removed. The SQL execution path\n * projects gated columns unconditionally, so EVERY `findMany` adapter\n * must pass its fetched entities through this before returning them —\n * enforcement is fail-open by construction (a skipped call ships the\n * value). Condition-less queries pass through untouched.\n */\nexport function redactFieldConditions<T>(query: IQuery | undefined, data: T[]) : T[] {\n if (!query || !hasFieldConditions(query.fields)) {\n return data;\n }\n\n return applyFieldConditions(query.fields, data);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCA,SAAgBI,WACZC,cACAC,OAAc;CAad,MAAM,EAAEW,eAAeV,IAXHJ,eAAe;EAC/BE;EACAG,WAAW,EACPC,SAASC,OAAOC,OAAOC,OAAAA;GACnB,IAAIA,GAAGC,cAAcC,SAASC,SAAS,GACnCH,GAAGI,WAAW,GAAGL,MAAM,IAAI;EAEnC,EACJ;CACJ,CAEuBJ,CAAAA,CAAQW,QAAQZ,SAAS,IAAIN,MAAM,CAAC,CAAA,CAAA;CAE3D,OAAO,EAAEiB,WAAW;AACxB;;;;;;;;;GAWA,SAAgBE,sBAAyBb,OAA2Bc,MAAS;CACzE,IAAI,CAACd,SAAS,CAACL,mBAAmBK,MAAMe,MAAM,GAC1C,OAAOD;CAGX,OAAOlB,qBAAqBI,MAAMe,QAAQD,IAAAA;AAC9C"}
|
|
@@ -4,7 +4,7 @@ import.meta.url;
|
|
|
4
4
|
import { RealmEntity } from "../../../../../adapters/database/domains/realm/entity.mjs";
|
|
5
5
|
import { CachePrefix } from "../../../../../adapters/database/domains/constants.mjs";
|
|
6
6
|
import "../../../../../adapters/database/domains/index.mjs";
|
|
7
|
-
import { applyQuery } from "../query.mjs";
|
|
7
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
8
8
|
import { translateWhereConditions } from "../helpers.mjs";
|
|
9
9
|
import { isUUID } from "@authup/kit";
|
|
10
10
|
import { REALM_MASTER_NAME } from "@authup/core-kit";
|
|
@@ -37,7 +37,7 @@ var RealmRepositoryAdapter = class {
|
|
|
37
37
|
const { pagination } = applyQuery(qb, query);
|
|
38
38
|
const [entities, total] = await qb.getManyAndCount();
|
|
39
39
|
return {
|
|
40
|
-
data: entities,
|
|
40
|
+
data: redactFieldConditions(query, entities),
|
|
41
41
|
meta: {
|
|
42
42
|
total,
|
|
43
43
|
...pagination
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["REALM_MASTER_NAME","InternalError","isUUID","validateEntityJoinColumns","applyQuery","buildRedisKeyPath","CachePrefix","RealmEntity","translateWhereConditions","RealmRepositoryAdapter","repository","findOneById","id","qb","createQueryBuilder","where","cache","prefix","REALM","key","getOne","findOneByName","name","trim","toLowerCase","findMany","query","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneByIdOrName","idOrName","findManyBy","findBy","findOneBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","resolveId","resolve","withFallback"],"sources":["../../../../../../src/app/modules/database/repositories/realm/repository.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 { Realm } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { REALM_MASTER_NAME } from '@authup/core-kit';\nimport { InternalError } from '@authup/errors';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport type { IRealmRepository } from '../../../../../core/index.ts';\nimport { CachePrefix, RealmEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RealmRepositoryAdapter implements IRealmRepository {\n private readonly repository: Repository<Realm>;\n\n constructor(repository: Repository<Realm>) {\n this.repository = repository;\n }\n\n findOneById(id: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.id = :id', { id });\n qb.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.REALM,\n key: id,\n }),\n 60_000,\n );\n\n return qb.getOne();\n }\n\n findOneByName(name: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.name = :name', { name: name.trim().toLowerCase() });\n\n return qb.getOne();\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Realm>> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.groupBy('realm.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneByIdOrName(idOrName: string): Promise<Realm | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Realm[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Realm | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Realm>): Realm {\n return this.repository.create(data);\n }\n\n merge(entity: Realm, data: Partial<Realm>): Realm {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Realm): Promise<Realm> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Realm): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Realm>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RealmEntity,\n });\n }\n\n async resolveId(key: string): Promise<string | null> {\n if (isUUID(key)) {\n return key;\n }\n\n const entity = await this.findOneByName(key);\n return entity ? entity.id : null;\n }\n\n async resolve(id: string | undefined, withFallback: true): Promise<Realm>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null> {\n let entity: Realm | null = null;\n\n if (id) {\n entity = await this.findOneByIdOrName(id);\n }\n\n if (!entity && withFallback) {\n entity = await this.findOneBy({ name: REALM_MASTER_NAME });\n if (!entity) {\n throw new InternalError('The master realm could not be resolved.');\n }\n }\n\n return entity;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["REALM_MASTER_NAME","InternalError","isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","buildRedisKeyPath","CachePrefix","RealmEntity","translateWhereConditions","RealmRepositoryAdapter","repository","findOneById","id","qb","createQueryBuilder","where","cache","prefix","REALM","key","getOne","findOneByName","name","trim","toLowerCase","findMany","query","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneByIdOrName","idOrName","findManyBy","findBy","findOneBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","resolveId","resolve","withFallback"],"sources":["../../../../../../src/app/modules/database/repositories/realm/repository.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 { Realm } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { REALM_MASTER_NAME } from '@authup/core-kit';\nimport { InternalError } from '@authup/errors';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport type { IRealmRepository } from '../../../../../core/index.ts';\nimport { CachePrefix, RealmEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RealmRepositoryAdapter implements IRealmRepository {\n private readonly repository: Repository<Realm>;\n\n constructor(repository: Repository<Realm>) {\n this.repository = repository;\n }\n\n findOneById(id: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.id = :id', { id });\n qb.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.REALM,\n key: id,\n }),\n 60_000,\n );\n\n return qb.getOne();\n }\n\n findOneByName(name: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.name = :name', { name: name.trim().toLowerCase() });\n\n return qb.getOne();\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Realm>> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.groupBy('realm.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneByIdOrName(idOrName: string): Promise<Realm | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Realm[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Realm | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Realm>): Realm {\n return this.repository.create(data);\n }\n\n merge(entity: Realm, data: Partial<Realm>): Realm {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Realm): Promise<Realm> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Realm): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Realm>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RealmEntity,\n });\n }\n\n async resolveId(key: string): Promise<string | null> {\n if (isUUID(key)) {\n return key;\n }\n\n const entity = await this.findOneByName(key);\n return entity ? entity.id : null;\n }\n\n async resolve(id: string | undefined, withFallback: true): Promise<Realm>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null> {\n let entity: Realm | null = null;\n\n if (id) {\n entity = await this.findOneByIdOrName(id);\n }\n\n if (!entity && withFallback) {\n entity = await this.findOneBy({ name: REALM_MASTER_NAME });\n if (!entity) {\n throw new InternalError('The master realm could not be resolved.');\n }\n }\n\n return entity;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,IAAaU,yBAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA+B;EACvC,KAAKA,aAAaA;CACtB;CAEAC,YAAYC,IAAmC;EAC3C,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGE,MAAM,kBAAkB,EAAEH,GAAG,CAAA;EAChCC,GAAGG,MACCX,kBAAkB;GACdY,QAAQX,YAAYY;GACpBC,KAAKP;EACT,CAAA,GACA,GAAA;EAGJ,OAAOC,GAAGO,OAAM;CACpB;CAEAC,cAAcC,MAAqC;EAC/C,MAAMT,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGE,MAAM,sBAAsB,EAAEO,MAAMA,KAAKC,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;EAEjE,OAAOX,GAAGO,OAAM;CACpB;CAEA,MAAMK,SAASC,OAA+D;EAC1E,MAAMb,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGc,QAAQ,UAAA;EAEX,MAAM,EAAEC,eAAezB,WAAWU,IAAIa,KAAAA;EAEtC,MAAM,CAACG,UAAUC,SAAS,MAAMjB,GAAGkB,gBAAe;EAElD,OAAO;GACHC,MAAM5B,sBAAsBsB,OAAOG,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMM,kBAAkBC,UAAyC;EAC7D,OAAOlC,OAAOkC,QAAAA,IACV,KAAKxB,YAAYwB,QAAAA,IACjB,KAAKd,cAAcc,QAAAA;CAC3B;CAEA,MAAMC,WAAWrB,OAA8C;EAC3D,OAAO,KAAKL,WAAW2B,OAAO7B,yBAAyBO,KAAAA,CAAAA;CAC3D;CAEA,MAAMuB,UAAUvB,OAAmD;EAC/D,OAAO,KAAKL,WAAW4B,UAAU9B,yBAAyBO,KAAAA,CAAAA;CAC9D;CAEAwB,OAAOP,MAA6B;EAChC,OAAO,KAAKtB,WAAW6B,OAAOP,IAAAA;CAClC;CAEAQ,MAAMC,QAAeT,MAA6B;EAC9C,OAAO,KAAKtB,WAAW8B,MAAMC,QAAQT,IAAAA;CACzC;CAEA,MAAMU,KAAKD,QAA+B;EACtC,OAAO,KAAK/B,WAAWgC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA8B;EACvC,MAAM,KAAK/B,WAAWiC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBZ,MAAqC;EAC3D,MAAM9B,0BAA0B8B,MAAM;GAClCa,YAAY,KAAKnC,WAAWoC,QAAQC;GACpCC,cAAczC;EAClB,CAAA;CACJ;CAEA,MAAM0C,UAAU9B,KAAqC;EACjD,IAAIlB,OAAOkB,GAAAA,GACP,OAAOA;EAGX,MAAMsB,SAAS,MAAM,KAAKpB,cAAcF,GAAAA;EACxC,OAAOsB,SAASA,OAAO7B,KAAK;CAChC;CAMA,MAAMsC,QAAQtC,IAAwBuC,cAA+C;EACjF,IAAIV,SAAuB;EAE3B,IAAI7B,IACA6B,SAAS,MAAM,KAAKP,kBAAkBtB,EAAAA;EAG1C,IAAI,CAAC6B,UAAUU,cAAc;GACzBV,SAAS,MAAM,KAAKH,UAAU,EAAEhB,MAAMvB,kBAAkB,CAAA;GACxD,IAAI,CAAC0C,QACD,MAAM,IAAIzC,cAAc,yCAAA;EAEhC;EAEA,OAAOyC;CACX;AACJ"}
|
|
@@ -5,7 +5,7 @@ import { CachePrefix } from "../../../../../adapters/database/domains/constants.
|
|
|
5
5
|
import { RoleEntity } from "../../../../../adapters/database/domains/role/entity.mjs";
|
|
6
6
|
import { RolePermissionEntity } from "../../../../../adapters/database/domains/role-permission/entity.mjs";
|
|
7
7
|
import "../../../../../adapters/database/domains/index.mjs";
|
|
8
|
-
import { applyQuery } from "../query.mjs";
|
|
8
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
9
9
|
import { isEntityUnique, translateWhereConditions } from "../helpers.mjs";
|
|
10
10
|
import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
|
|
11
11
|
import "../../../../../adapters/database/index.mjs";
|
|
@@ -27,7 +27,7 @@ var RoleRepositoryAdapter = class {
|
|
|
27
27
|
const { pagination } = applyQuery(qb, query);
|
|
28
28
|
const [entities, total] = await qb.getManyAndCount();
|
|
29
29
|
return {
|
|
30
|
-
data: entities,
|
|
30
|
+
data: redactFieldConditions(query, entities),
|
|
31
31
|
meta: {
|
|
32
32
|
total,
|
|
33
33
|
...pagination
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","isEntityUnique","translateWhereConditions","loadBoundPermissions","CachePrefix","RoleEntity","RolePermissionEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundPermissions","junctionTarget","roleId","cachePrefix","ROLE_OWNED_PERMISSIONS","cacheKey","getBoundPermissionsForMany","results","Promise","all","map","flat"],"sources":["../../../../../../src/app/modules/database/repositories/role/repository.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 { Realm, Role } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RoleEntity,\n RolePermissionEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('role.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RolePermissionEntity,\n where: { roleId: id },\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n\n async getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]> {\n const results = await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)));\n return results.flat();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA+BA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","isEntityUnique","translateWhereConditions","loadBoundPermissions","CachePrefix","RoleEntity","RolePermissionEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundPermissions","junctionTarget","roleId","cachePrefix","ROLE_OWNED_PERMISSIONS","cacheKey","getBoundPermissionsForMany","results","Promise","all","map","flat"],"sources":["../../../../../../src/app/modules/database/repositories/role/repository.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 { Realm, Role } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RoleEntity,\n RolePermissionEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('role.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RolePermissionEntity,\n where: { roleId: id },\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n\n async getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]> {\n const results = await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)));\n return results.flat();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA+BA,IAAaY,wBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAmC;EAC3C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA8D;EACzE,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGE,QAAQ,SAAA;EAEX,MAAM,EAAEC,eAAenB,WAAWgB,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMtB,sBAAsBc,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAAkC;EAC1C,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAAyC;EACvE,MAAMd,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGe,MAAM,qBAAqB,EAAEF,KAAK,CAAA;EAErC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKpB,gBAAgBqB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXhB,GAAGkB,SAAS,2BAA2B,EAAEF,QAAQ,CAAA;EACrD;EAEA,OAAOhB,GAAGmB,OAAM;CACpB;CAEA,MAAMC,kBAAkBC,UAAkBC,OAAsC;EAC5E,OAAOxC,OAAOuC,QAAAA,IACV,KAAKZ,YAAYY,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWR,OAA6C;EAC1D,OAAO,KAAKpB,WAAW6B,OAAOpC,yBAAyB2B,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAkD;EAC9D,OAAO,KAAKpB,WAAWgB,UAAUvB,yBAAyB2B,KAAAA,CAAAA;CAC9D;CAEAU,OAAOlB,MAA2B;EAC9B,OAAO,KAAKZ,WAAW8B,OAAOlB,IAAAA;CAClC;CAEAmB,MAAMC,QAAcpB,MAA2B;EAC3C,OAAO,KAAKZ,WAAW+B,MAAMC,QAAQpB,IAAAA;CACzC;CAEA,MAAMqB,KAAKD,QAA6B;EACpC,OAAO,KAAKhC,WAAWiC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA6B;EACtC,MAAM,KAAKhC,WAAWkC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBvB,MAAoC;EAC1D,MAAMxB,0BAA0BwB,MAAM;GAClCwB,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc3C;EAClB,CAAA;CACJ;CAEA,MAAM4C,gBAAgB5B,MAAqB6B,UAAgC;EAQvE,IAAI,CAACC,MAPkBlD,eAAe;GAClC4C,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc3C;GACdoC,QAAQpB;GACR+B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAIlD,sBAAAA;CAElB;CAEA,MAAMqD,oBAAoBZ,QAA2D;EACjF,MAAMjB,KAAK,OAAOiB,WAAW,WAAWA,SAASA,OAAOjB;EACxD,OAAOrB,qBAAqB;GACxB2C,SAAS,KAAKrC,WAAWqC;GACzBQ,gBAAgBhD;GAChBuB,OAAO,EAAE0B,QAAQ/B,GAAG;GACpBgC,aAAapD,YAAYqD;GACzBC,UAAUlC;EACd,CAAA;CACJ;CAEA,MAAMmC,2BAA2BzC,UAAiE;EAE9F,QAAO0C,MADeC,QAAQC,IAAI5C,SAAS6C,KAAKtB,WAAW,KAAKY,oBAAoBZ,MAAAA,CAAAA,CAAAA,EAAAA,CACrEuB,KAAI;CACvB;AACJ"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { RoleAttributeEntity } from "../../../../../adapters/database/domains/role-attribute/entity.mjs";
|
|
5
5
|
import "../../../../../adapters/database/domains/index.mjs";
|
|
6
|
-
import { applyQuery } from "../query.mjs";
|
|
6
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
7
7
|
import { applyRealmScopeSelect, translateWhereConditions } from "../helpers.mjs";
|
|
8
8
|
import { validateEntityJoinColumns } from "typeorm-extension";
|
|
9
9
|
//#region src/app/modules/database/repositories/role-attribute/repository.ts
|
|
@@ -19,7 +19,7 @@ var RoleAttributeRepositoryAdapter = class {
|
|
|
19
19
|
applyRealmScopeSelect(qb, "roleAttribute");
|
|
20
20
|
const [entities, total] = await qb.getManyAndCount();
|
|
21
21
|
return {
|
|
22
|
-
data: entities,
|
|
22
|
+
data: redactFieldConditions(query, entities),
|
|
23
23
|
meta: {
|
|
24
24
|
total,
|
|
25
25
|
...pagination
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","RoleAttributeEntity","applyRealmScopeSelect","translateWhereConditions","RoleAttributeRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-attribute/repository.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 { RoleAttribute } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRoleAttributeRepository } from '../../../../../core/index.ts';\nimport { RoleAttributeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, translateWhereConditions } from '../helpers.ts';\n\nexport class RoleAttributeRepositoryAdapter implements IRoleAttributeRepository {\n private readonly repository: Repository<RoleAttribute>;\n\n constructor(repository: Repository<RoleAttribute>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RoleAttribute>> {\n const qb = this.repository.createQueryBuilder('roleAttribute');\n qb.groupBy('roleAttribute.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'roleAttribute');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RoleAttribute | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<RoleAttribute | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<RoleAttribute | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RoleAttribute[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RoleAttribute | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.create(data);\n }\n\n merge(entity: RoleAttribute, data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RoleAttribute): Promise<RoleAttribute> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RoleAttribute): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RoleAttribute>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleAttributeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","RoleAttributeEntity","applyRealmScopeSelect","translateWhereConditions","RoleAttributeRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-attribute/repository.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 { RoleAttribute } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRoleAttributeRepository } from '../../../../../core/index.ts';\nimport { RoleAttributeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, translateWhereConditions } from '../helpers.ts';\n\nexport class RoleAttributeRepositoryAdapter implements IRoleAttributeRepository {\n private readonly repository: Repository<RoleAttribute>;\n\n constructor(repository: Repository<RoleAttribute>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RoleAttribute>> {\n const qb = this.repository.createQueryBuilder('roleAttribute');\n qb.groupBy('roleAttribute.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'roleAttribute');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RoleAttribute | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<RoleAttribute | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<RoleAttribute | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RoleAttribute[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RoleAttribute | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.create(data);\n }\n\n merge(entity: RoleAttribute, data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RoleAttribute): Promise<RoleAttribute> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RoleAttribute): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RoleAttribute>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleAttributeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaM,iCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAuC;EAC/C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAuE;EAClF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,eAAA;EAC9CD,GAAGE,QAAQ,kBAAA;EAEX,MAAM,EAAEC,eAAeZ,WAAWS,IAAID,KAAAA;EAEtCL,sBAAsBM,IAAI,eAAA;EAE1B,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMf,sBAAsBO,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA2C;EACnD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,gBAA+C;EACjD,OAAO;CACX;CAEA,MAAMC,kBAAkBC,UAAiD;EACrE,OAAO,KAAKL,YAAYK,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAsD;EACnE,OAAO,KAAKnB,WAAWoB,OAAOtB,yBAAyBqB,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAA2D;EACvE,OAAO,KAAKnB,WAAWc,UAAUhB,yBAAyBqB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOX,MAA6C;EAChD,OAAO,KAAKV,WAAWqB,OAAOX,IAAAA;CAClC;CAEAY,MAAMC,QAAuBb,MAA6C;EACtE,OAAO,KAAKV,WAAWsB,MAAMC,QAAQb,IAAAA;CACzC;CAEA,MAAMc,KAAKD,QAA+C;EACtD,OAAO,KAAKvB,WAAWwB,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAsC;EAC/C,MAAM,KAAKvB,WAAWyB,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBhB,MAA6C;EACnE,MAAMjB,0BAA0BiB,MAAM;GAClCiB,YAAY,KAAK3B,WAAW4B,QAAQC;GACpCC,cAAclC;EAClB,CAAA;CACJ;AACJ"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { RolePermissionEntity } from "../../../../../adapters/database/domains/role-permission/entity.mjs";
|
|
5
5
|
import "../../../../../adapters/database/domains/index.mjs";
|
|
6
|
-
import { applyQuery } from "../query.mjs";
|
|
6
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
7
7
|
import { translateWhereConditions } from "../helpers.mjs";
|
|
8
8
|
import { validateEntityJoinColumns } from "typeorm-extension";
|
|
9
9
|
//#region src/app/modules/database/repositories/role-permission/repository.ts
|
|
@@ -18,7 +18,7 @@ var RolePermissionRepositoryAdapter = class {
|
|
|
18
18
|
const { pagination } = applyQuery(qb, query);
|
|
19
19
|
const [entities, total] = await qb.getManyAndCount();
|
|
20
20
|
return {
|
|
21
|
-
data: entities,
|
|
21
|
+
data: redactFieldConditions(query, entities),
|
|
22
22
|
meta: {
|
|
23
23
|
total,
|
|
24
24
|
...pagination
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","RolePermissionEntity","translateWhereConditions","RolePermissionRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","_name","Promise","resolve","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-permission/repository.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 { RolePermission } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRolePermissionRepository } from '../../../../../core/index.ts';\nimport { RolePermissionEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RolePermissionRepositoryAdapter implements IRolePermissionRepository {\n private readonly repository: Repository<RolePermission>;\n\n constructor(repository: Repository<RolePermission>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RolePermission>> {\n const qb = this.repository.createQueryBuilder('rolePermission');\n qb.groupBy('rolePermission.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RolePermission | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(_name: string): Promise<RolePermission | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<RolePermission | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RolePermission[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RolePermission | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RolePermission>): RolePermission {\n return this.repository.create(data);\n }\n\n merge(entity: RolePermission, data: Partial<RolePermission>): RolePermission {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RolePermission): Promise<RolePermission> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RolePermission): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RolePermission>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RolePermissionEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","RolePermissionEntity","translateWhereConditions","RolePermissionRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","_name","Promise","resolve","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-permission/repository.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 { RolePermission } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRolePermissionRepository } from '../../../../../core/index.ts';\nimport { RolePermissionEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RolePermissionRepositoryAdapter implements IRolePermissionRepository {\n private readonly repository: Repository<RolePermission>;\n\n constructor(repository: Repository<RolePermission>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RolePermission>> {\n const qb = this.repository.createQueryBuilder('rolePermission');\n qb.groupBy('rolePermission.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RolePermission | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(_name: string): Promise<RolePermission | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<RolePermission | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RolePermission[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RolePermission | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RolePermission>): RolePermission {\n return this.repository.create(data);\n }\n\n merge(entity: RolePermission, data: Partial<RolePermission>): RolePermission {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RolePermission): Promise<RolePermission> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RolePermission): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RolePermission>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RolePermissionEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,kCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAwC;EAChD,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAwE;EACnF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,gBAAA;EAC9CD,GAAGE,QAAQ,mBAAA;EAEX,MAAM,EAAEC,eAAeX,WAAWQ,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMd,sBAAsBM,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA4C;EACpD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,OAA+C;EAC/D,OAAOC,QAAQC,QAAQ,IAAA;CAC3B;CAEAC,kBAAkBC,UAAkD;EAChE,OAAO,KAAKR,YAAYQ,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAuD;EACpE,OAAO,KAAKtB,WAAWuB,OAAOzB,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMR,UAAUQ,OAA4D;EACxE,OAAO,KAAKtB,WAAWc,UAAUhB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOd,MAA+C;EAClD,OAAO,KAAKV,WAAWwB,OAAOd,IAAAA;CAClC;CAEAe,MAAMC,QAAwBhB,MAA+C;EACzE,OAAO,KAAKV,WAAWyB,MAAMC,QAAQhB,IAAAA;CACzC;CAEA,MAAMiB,KAAKD,QAAiD;EACxD,OAAO,KAAK1B,WAAW2B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAuC;EAChD,MAAM,KAAK1B,WAAW4B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBnB,MAA8C;EACpE,MAAMhB,0BAA0BgB,MAAM;GAClCoB,YAAY,KAAK9B,WAAW+B,QAAQC;GACpCC,cAAcpC;EAClB,CAAA;CACJ;AACJ"}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
|
-
import type { DataSource } from 'typeorm';
|
|
1
|
+
import type { DataSource, EntityMetadata } from 'typeorm';
|
|
2
|
+
/**
|
|
3
|
+
* Every selectable column must appear in the schema's field allow-list:
|
|
4
|
+
* rapiq derives the root projection from `fields` (`default` when
|
|
5
|
+
* present, else `allowed`), so a column missing from BOTH silently
|
|
6
|
+
* vanishes from every collection response — no error, just an absent
|
|
7
|
+
* property (`role.builtIn` went missing this way).
|
|
8
|
+
*/
|
|
9
|
+
export declare function assertSchemaFieldsCoverEntity(name: string, schema: {
|
|
10
|
+
fields?: {
|
|
11
|
+
default?: string[];
|
|
12
|
+
allowed?: string[];
|
|
13
|
+
};
|
|
14
|
+
}, metadata: EntityMetadata): void;
|
|
2
15
|
/**
|
|
3
16
|
* Validate every registered entity schema against its TypeORM
|
|
4
|
-
* metadata (`@rapiq/typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
|
|
17
|
+
* metadata (`@rapiq/adapter-typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
|
|
5
18
|
* fields/sort defaults and the filters default condition tree must
|
|
6
|
-
* reference existing columns/relations)
|
|
19
|
+
* reference existing columns/relations) and assert its field allow-list
|
|
20
|
+
* covers every selectable column. Called by
|
|
7
21
|
* `DatabaseModule.setup` once the DataSource is initialized —
|
|
8
22
|
* schema/entity drift fails the boot, fail-fast.
|
|
9
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-validation.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/schema-validation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-validation.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/schema-validation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAgB,MAAM,SAAS,CAAC;AA2ExE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CACzC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,EAC/D,QAAQ,EAAE,cAAc,GACxB,IAAI,CAiBP;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAI,IAAI,CAQnE"}
|
|
@@ -29,7 +29,7 @@ import "../../../../adapters/database/domains/index.mjs";
|
|
|
29
29
|
import { schemaRegistry } from "../../../../core/query/module.mjs";
|
|
30
30
|
import "../../../../core/index.mjs";
|
|
31
31
|
import { EntityType } from "@authup/core-kit";
|
|
32
|
-
import { assertSchemaMatchesEntity } from "@rapiq/typeorm";
|
|
32
|
+
import { assertSchemaMatchesEntity } from "@rapiq/adapter-typeorm";
|
|
33
33
|
//#region src/app/modules/database/repositories/schema-validation.ts
|
|
34
34
|
/**
|
|
35
35
|
* Entity class per registered schema name — the iteration source for
|
|
@@ -62,16 +62,40 @@ import { assertSchemaMatchesEntity } from "@rapiq/typeorm";
|
|
|
62
62
|
[EntityType.USER_ROLE]: UserRoleEntity
|
|
63
63
|
};
|
|
64
64
|
/**
|
|
65
|
+
* Selectable columns deliberately kept out of a schema's field
|
|
66
|
+
* allow-list. `select: false` columns are skipped automatically (the
|
|
67
|
+
* entity already declares them hidden); everything listed here is a
|
|
68
|
+
* column that IS selectable but must never ride the API projection.
|
|
69
|
+
*/ const SCHEMA_FIELD_EXCLUSIONS = { [EntityType.USER_AUTHENTICATOR]: ["parameters"] };
|
|
70
|
+
/**
|
|
71
|
+
* Every selectable column must appear in the schema's field allow-list:
|
|
72
|
+
* rapiq derives the root projection from `fields` (`default` when
|
|
73
|
+
* present, else `allowed`), so a column missing from BOTH silently
|
|
74
|
+
* vanishes from every collection response — no error, just an absent
|
|
75
|
+
* property (`role.builtIn` went missing this way).
|
|
76
|
+
*/ function assertSchemaFieldsCoverEntity(name, schema, metadata) {
|
|
77
|
+
const declared = /* @__PURE__ */ new Set([...schema.fields?.default || [], ...schema.fields?.allowed || []]);
|
|
78
|
+
const excluded = new Set(SCHEMA_FIELD_EXCLUSIONS[name] || []);
|
|
79
|
+
const missing = metadata.columns.filter((column) => column.isSelect).map((column) => column.propertyName).filter((propertyName) => !declared.has(propertyName) && !excluded.has(propertyName));
|
|
80
|
+
if (missing.length > 0) throw new Error(`The schema "${name}" does not declare the field(s): ${missing.join(", ")}.`);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
65
83
|
* Validate every registered entity schema against its TypeORM
|
|
66
|
-
* metadata (`@rapiq/typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
|
|
84
|
+
* metadata (`@rapiq/adapter-typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
|
|
67
85
|
* fields/sort defaults and the filters default condition tree must
|
|
68
|
-
* reference existing columns/relations)
|
|
86
|
+
* reference existing columns/relations) and assert its field allow-list
|
|
87
|
+
* covers every selectable column. Called by
|
|
69
88
|
* `DatabaseModule.setup` once the DataSource is initialized —
|
|
70
89
|
* schema/entity drift fails the boot, fail-fast.
|
|
71
90
|
*/ function validateEntitySchemas(dataSource) {
|
|
72
|
-
for (const [name, target] of Object.entries(SCHEMA_ENTITY_TARGETS))
|
|
91
|
+
for (const [name, target] of Object.entries(SCHEMA_ENTITY_TARGETS)) {
|
|
92
|
+
const schema = schemaRegistry.getOrFail(name);
|
|
93
|
+
const metadata = dataSource.getMetadata(target);
|
|
94
|
+
assertSchemaMatchesEntity(schema, metadata);
|
|
95
|
+
assertSchemaFieldsCoverEntity(name, schema, metadata);
|
|
96
|
+
}
|
|
73
97
|
}
|
|
74
98
|
//#endregion
|
|
75
|
-
export { validateEntitySchemas };
|
|
99
|
+
export { assertSchemaFieldsCoverEntity, validateEntitySchemas };
|
|
76
100
|
|
|
77
101
|
//# sourceMappingURL=schema-validation.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-validation.mjs","names":["assertSchemaMatchesEntity","EntityType","schemaRegistry","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","ConsentEntity","EventEntity","IdentityProviderEntity","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyEntity","RealmEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","SessionEntity","TrustAnchorEntity","UserAttributeEntity","UserAuthenticatorEntity","UserEntity","UserPermissionEntity","UserRoleEntity","SCHEMA_ENTITY_TARGETS","CLIENT","CLIENT_PERMISSION","CLIENT_ROLE","CLIENT_SCOPE","CONSENT","EVENT","IDENTITY_PROVIDER","IDENTITY_PROVIDER_ROLE_MAPPING","KEY","PERMISSION","PERMISSION_POLICY","POLICY","REALM","ROLE","ROLE_ATTRIBUTE","ROLE_PERMISSION","SCOPE","SESSION","TRUST_ANCHOR","USER","USER_ATTRIBUTE","USER_AUTHENTICATOR","USER_PERMISSION","USER_ROLE","
|
|
1
|
+
{"version":3,"file":"schema-validation.mjs","names":["assertSchemaMatchesEntity","EntityType","schemaRegistry","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","ConsentEntity","EventEntity","IdentityProviderEntity","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyEntity","RealmEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","SessionEntity","TrustAnchorEntity","UserAttributeEntity","UserAuthenticatorEntity","UserEntity","UserPermissionEntity","UserRoleEntity","SCHEMA_ENTITY_TARGETS","CLIENT","CLIENT_PERMISSION","CLIENT_ROLE","CLIENT_SCOPE","CONSENT","EVENT","IDENTITY_PROVIDER","IDENTITY_PROVIDER_ROLE_MAPPING","KEY","PERMISSION","PERMISSION_POLICY","POLICY","REALM","ROLE","ROLE_ATTRIBUTE","ROLE_PERMISSION","SCOPE","SESSION","TRUST_ANCHOR","USER","USER_ATTRIBUTE","USER_AUTHENTICATOR","USER_PERMISSION","USER_ROLE","SCHEMA_FIELD_EXCLUSIONS","assertSchemaFieldsCoverEntity","name","schema","metadata","declared","Set","fields","default","allowed","excluded","missing","columns","filter","column","isSelect","map","propertyName","has","length","Error","join","validateEntitySchemas","dataSource","target","Object","entries","getOrFail","getMetadata"],"sources":["../../../../../src/app/modules/database/repositories/schema-validation.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 { ObjectLiteral } from '@rapiq/core';\nimport { assertSchemaMatchesEntity } from '@rapiq/adapter-typeorm';\nimport type { DataSource, EntityMetadata, EntityTarget } from 'typeorm';\nimport { EntityType } from '@authup/core-kit';\nimport { schemaRegistry } from '../../../../core/index.ts';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n ConsentEntity,\n EventEntity,\n IdentityProviderEntity,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyEntity,\n RealmEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n SessionEntity,\n TrustAnchorEntity,\n UserAttributeEntity,\n UserAuthenticatorEntity,\n UserEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\n\n/**\n * Entity class per registered schema name — the iteration source for\n * the boot-time validation. A mapped name missing from the registry\n * fails via `getOrFail`, so a renamed/removed schema surfaces here too.\n */\nconst SCHEMA_ENTITY_TARGETS : Record<string, EntityTarget<ObjectLiteral>> = {\n [EntityType.CLIENT]: ClientEntity,\n [EntityType.CLIENT_PERMISSION]: ClientPermissionEntity,\n [EntityType.CLIENT_ROLE]: ClientRoleEntity,\n [EntityType.CLIENT_SCOPE]: ClientScopeEntity,\n [EntityType.CONSENT]: ConsentEntity,\n [EntityType.EVENT]: EventEntity,\n [EntityType.IDENTITY_PROVIDER]: IdentityProviderEntity,\n [EntityType.IDENTITY_PROVIDER_ROLE_MAPPING]: IdentityProviderRoleMappingEntity,\n [EntityType.KEY]: KeyEntity,\n [EntityType.PERMISSION]: PermissionEntity,\n [EntityType.PERMISSION_POLICY]: PermissionPolicyEntity,\n [EntityType.POLICY]: PolicyEntity,\n [EntityType.REALM]: RealmEntity,\n [EntityType.ROLE]: RoleEntity,\n [EntityType.ROLE_ATTRIBUTE]: RoleAttributeEntity,\n [EntityType.ROLE_PERMISSION]: RolePermissionEntity,\n [EntityType.SCOPE]: ScopeEntity,\n [EntityType.SESSION]: SessionEntity,\n [EntityType.TRUST_ANCHOR]: TrustAnchorEntity,\n [EntityType.USER]: UserEntity,\n [EntityType.USER_ATTRIBUTE]: UserAttributeEntity,\n [EntityType.USER_AUTHENTICATOR]: UserAuthenticatorEntity,\n [EntityType.USER_PERMISSION]: UserPermissionEntity,\n [EntityType.USER_ROLE]: UserRoleEntity,\n};\n\n/**\n * Selectable columns deliberately kept out of a schema's field\n * allow-list. `select: false` columns are skipped automatically (the\n * entity already declares them hidden); everything listed here is a\n * column that IS selectable but must never ride the API projection.\n */\nconst SCHEMA_FIELD_EXCLUSIONS : Record<string, string[]> = {\n // device-internal credential blob (TOTP config, WebAuthn public key +\n // signature counter) — surfaced only through the challenge endpoint's\n // trimmed view.\n [EntityType.USER_AUTHENTICATOR]: ['parameters'],\n};\n\n/**\n * Every selectable column must appear in the schema's field allow-list:\n * rapiq derives the root projection from `fields` (`default` when\n * present, else `allowed`), so a column missing from BOTH silently\n * vanishes from every collection response — no error, just an absent\n * property (`role.builtIn` went missing this way).\n */\nexport function assertSchemaFieldsCoverEntity(\n name: string,\n schema: { fields?: { default?: string[], allowed?: string[] } },\n metadata: EntityMetadata,\n) : void {\n const declared = new Set([\n ...(schema.fields?.default || []),\n ...(schema.fields?.allowed || []),\n ]);\n\n const excluded = new Set(SCHEMA_FIELD_EXCLUSIONS[name] || []);\n const missing = metadata.columns\n .filter((column) => column.isSelect)\n .map((column) => column.propertyName)\n .filter((propertyName) => !declared.has(propertyName) && !excluded.has(propertyName));\n\n if (missing.length > 0) {\n throw new Error(\n `The schema \"${name}\" does not declare the field(s): ${missing.join(', ')}.`,\n );\n }\n}\n\n/**\n * Validate every registered entity schema against its TypeORM\n * metadata (`@rapiq/adapter-typeorm`'s `assertSchemaMatchesEntity`: allow-lists,\n * fields/sort defaults and the filters default condition tree must\n * reference existing columns/relations) and assert its field allow-list\n * covers every selectable column. Called by\n * `DatabaseModule.setup` once the DataSource is initialized —\n * schema/entity drift fails the boot, fail-fast.\n */\nexport function validateEntitySchemas(dataSource: DataSource) : void {\n for (const [name, target] of Object.entries(SCHEMA_ENTITY_TARGETS)) {\n const schema = schemaRegistry.getOrFail(name);\n const metadata = dataSource.getMetadata(target);\n\n assertSchemaMatchesEntity(schema, metadata);\n assertSchemaFieldsCoverEntity(name, schema, metadata);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CA,MAAM2B,wBAAsE;EACvE1B,WAAW2B,SAASzB;EACpBF,WAAW4B,oBAAoBzB;EAC/BH,WAAW6B,cAAczB;EACzBJ,WAAW8B,eAAezB;EAC1BL,WAAW+B,UAAUzB;EACrBN,WAAWgC,QAAQzB;EACnBP,WAAWiC,oBAAoBzB;EAC/BR,WAAWkC,iCAAiCzB;EAC5CT,WAAWmC,MAAMzB;EACjBV,WAAWoC,aAAazB;EACxBX,WAAWqC,oBAAoBzB;EAC/BZ,WAAWsC,SAASzB;EACpBb,WAAWuC,QAAQzB;EACnBd,WAAWwC,OAAOxB;EAClBhB,WAAWyC,iBAAiB1B;EAC5Bf,WAAW0C,kBAAkBzB;EAC7BjB,WAAW2C,QAAQzB;EACnBlB,WAAW4C,UAAUzB;EACrBnB,WAAW6C,eAAezB;EAC1BpB,WAAW8C,OAAOvB;EAClBvB,WAAW+C,iBAAiB1B;EAC5BrB,WAAWgD,qBAAqB1B;EAChCtB,WAAWiD,kBAAkBzB;EAC7BxB,WAAWkD,YAAYzB;AAC5B;;;;;;GAQA,MAAM0B,0BAAqD,GAItDnD,WAAWgD,qBAAqB,CAAC,YAAa,EACnD;;;;;;;GASA,SAAgBI,8BACZC,MACAC,QACAC,UAAwB;CAExB,MAAMC,2BAAW,IAAIC,IAAI,CACjBH,GAAAA,OAAOI,QAAQC,WAAW,CAAA,GAC1BL,GAAAA,OAAOI,QAAQE,WAAW,CAAA,CACjC,CAAA;CAED,MAAMC,WAAW,IAAIJ,IAAIN,wBAAwBE,SAAS,CAAA,CAAE;CAC5D,MAAMS,UAAUP,SAASQ,QACpBC,QAAQC,WAAWA,OAAOC,QAAQ,CAAA,CAClCC,KAAKF,WAAWA,OAAOG,YAAY,CAAA,CACnCJ,QAAQI,iBAAiB,CAACZ,SAASa,IAAID,YAAAA,KAAiB,CAACP,SAASQ,IAAID,YAAAA,CAAAA;CAE3E,IAAIN,QAAQQ,SAAS,GACjB,MAAM,IAAIC,MACN,eAAelB,KAAK,mCAAmCS,QAAQU,KAAK,IAAA,EAAM,EAAE;AAGxF;;;;;;;;;GAWA,SAAgBC,sBAAsBC,YAAsB;CACxD,KAAK,MAAM,CAACrB,MAAMsB,WAAWC,OAAOC,QAAQnD,qBAAAA,GAAwB;EAChE,MAAM4B,SAASrD,eAAe6E,UAAUzB,IAAAA;EACxC,MAAME,WAAWmB,WAAWK,YAAYJ,MAAAA;EAExC5E,0BAA0BuD,QAAQC,QAAAA;EAClCH,8BAA8BC,MAAMC,QAAQC,QAAAA;CAChD;AACJ"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { ScopeEntity } from "../../../../../adapters/database/domains/scope/entity.mjs";
|
|
5
5
|
import "../../../../../adapters/database/domains/index.mjs";
|
|
6
|
-
import { applyQuery } from "../query.mjs";
|
|
6
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
7
7
|
import { isEntityUnique, translateWhereConditions } from "../helpers.mjs";
|
|
8
8
|
import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
|
|
9
9
|
import "../../../../../adapters/database/index.mjs";
|
|
@@ -24,7 +24,7 @@ var ScopeRepositoryAdapter = class {
|
|
|
24
24
|
const { pagination } = applyQuery(qb, query);
|
|
25
25
|
const [entities, total] = await qb.getManyAndCount();
|
|
26
26
|
return {
|
|
27
|
-
data: entities,
|
|
27
|
+
data: redactFieldConditions(query, entities),
|
|
28
28
|
meta: {
|
|
29
29
|
total,
|
|
30
30
|
...pagination
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","isEntityUnique","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/repository.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 { Realm, Scope } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('scope.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAyBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","isEntityUnique","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/repository.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 { Realm, Scope } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('scope.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAyBA,IAAaS,yBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAoC;EAC5C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA+D;EAC1E,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;EAC9CD,GAAGE,QAAQ,UAAA;EAEX,MAAM,EAAEC,eAAehB,WAAWa,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMnB,sBAAsBW,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAAmC;EAC3C,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAA0C;EACxE,MAAMd,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;EAC9CD,GAAGe,MAAM,sBAAsB,EAAEF,KAAK,CAAA;EAEtC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKpB,gBAAgBqB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXhB,GAAGkB,SAAS,4BAA4B,EAAEF,QAAQ,CAAA;EACtD;EAEA,OAAOhB,GAAGmB,OAAM;CACpB;CAEA,MAAMC,kBAAkBC,UAAkBC,OAAuC;EAC7E,OAAOrC,OAAOoC,QAAAA,IACV,KAAKZ,YAAYY,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWR,OAA8C;EAC3D,OAAO,KAAKpB,WAAW6B,OAAOjC,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAmD;EAC/D,OAAO,KAAKpB,WAAWgB,UAAUpB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAU,OAAOlB,MAA6B;EAChC,OAAO,KAAKZ,WAAW8B,OAAOlB,IAAAA;CAClC;CAEAmB,MAAMC,QAAepB,MAA6B;EAC9C,OAAO,KAAKZ,WAAW+B,MAAMC,QAAQpB,IAAAA;CACzC;CAEA,MAAMqB,KAAKD,QAA+B;EACtC,OAAO,KAAKhC,WAAWiC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA8B;EACvC,MAAM,KAAKhC,WAAWkC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBvB,MAAqC;EAC3D,MAAMrB,0BAA0BqB,MAAM;GAClCwB,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc1C;EAClB,CAAA;CACJ;CAEA,MAAM2C,gBAAgB5B,MAAsB6B,UAAiC;EAQzE,IAAI,CAACC,MAPkB/C,eAAe;GAClCyC,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc1C;GACdmC,QAAQpB;GACR+B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI/C,sBAAAA;CAElB;AACJ"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { RealmEntity } from "../../../../../adapters/database/domains/realm/entity.mjs";
|
|
5
5
|
import { TrustAnchorEntity } from "../../../../../adapters/database/domains/trust-anchor/entity.mjs";
|
|
6
|
-
import { applyQuery } from "../query.mjs";
|
|
6
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
7
7
|
import { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from "../helpers.mjs";
|
|
8
8
|
import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
|
|
9
9
|
import "../../../../../adapters/database/index.mjs";
|
|
@@ -28,7 +28,7 @@ var TrustAnchorRepositoryAdapter = class {
|
|
|
28
28
|
applyRealmScopeSelect(qb, "trustAnchor");
|
|
29
29
|
const [entities, total] = await qb.getManyAndCount();
|
|
30
30
|
return {
|
|
31
|
-
data: entities,
|
|
31
|
+
data: redactFieldConditions(query, entities),
|
|
32
32
|
meta: {
|
|
33
33
|
total,
|
|
34
34
|
...pagination
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","RealmEntity","TrustAnchorEntity","applyRealmScopeSelect","isEntityUnique","translateWhereConditions","RealmRepositoryAdapter","TrustAnchorRepositoryAdapter","dataSource","realmRepository","getRepository","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/trust-anchor/repository.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 { TrustAnchor } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { DataSource, FindOptionsWhere, Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport { DatabaseConflictError, RealmEntity, TrustAnchorEntity } from '../../../../../adapters/database/index.ts';\nimport type { IRealmRepository, ITrustAnchorRepository } from '../../../../../core/index.ts';\nimport { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport class TrustAnchorRepositoryAdapter implements ITrustAnchorRepository {\n protected dataSource: DataSource;\n\n protected realmRepository: IRealmRepository;\n\n constructor(dataSource: DataSource) {\n this.dataSource = dataSource;\n this.realmRepository = new RealmRepositoryAdapter(dataSource.getRepository(RealmEntity));\n }\n\n protected get repository(): Repository<TrustAnchorEntity> {\n return this.dataSource.getRepository(TrustAnchorEntity);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<TrustAnchor>> {\n const qb = this.repository.createQueryBuilder('trustAnchor');\n qb.groupBy('trustAnchor.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'trustAnchor');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<TrustAnchor | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<TrustAnchor | null> {\n const where: FindOptionsWhere<TrustAnchorEntity> = { name };\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n\n where.realmId = realmId;\n }\n\n return this.repository.findOneBy(where);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<TrustAnchor | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<TrustAnchor[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<TrustAnchor | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.create(data);\n }\n\n merge(entity: TrustAnchor, data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.merge(entity as TrustAnchorEntity, data);\n }\n\n async save(entity: TrustAnchor): Promise<TrustAnchor> {\n return this.repository.save(entity as TrustAnchorEntity);\n }\n\n async remove(entity: TrustAnchor): Promise<void> {\n await this.repository.remove(entity as TrustAnchorEntity);\n }\n\n async validateJoinColumns(data: Partial<TrustAnchor>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n });\n }\n\n async checkUniqueness(data: Partial<TrustAnchor>, existing?: TrustAnchor): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAmBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","RealmEntity","TrustAnchorEntity","applyRealmScopeSelect","isEntityUnique","translateWhereConditions","RealmRepositoryAdapter","TrustAnchorRepositoryAdapter","dataSource","realmRepository","getRepository","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/trust-anchor/repository.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 { TrustAnchor } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { DataSource, FindOptionsWhere, Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport { DatabaseConflictError, RealmEntity, TrustAnchorEntity } from '../../../../../adapters/database/index.ts';\nimport type { IRealmRepository, ITrustAnchorRepository } from '../../../../../core/index.ts';\nimport { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport class TrustAnchorRepositoryAdapter implements ITrustAnchorRepository {\n protected dataSource: DataSource;\n\n protected realmRepository: IRealmRepository;\n\n constructor(dataSource: DataSource) {\n this.dataSource = dataSource;\n this.realmRepository = new RealmRepositoryAdapter(dataSource.getRepository(RealmEntity));\n }\n\n protected get repository(): Repository<TrustAnchorEntity> {\n return this.dataSource.getRepository(TrustAnchorEntity);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<TrustAnchor>> {\n const qb = this.repository.createQueryBuilder('trustAnchor');\n qb.groupBy('trustAnchor.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'trustAnchor');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<TrustAnchor | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<TrustAnchor | null> {\n const where: FindOptionsWhere<TrustAnchorEntity> = { name };\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n\n where.realmId = realmId;\n }\n\n return this.repository.findOneBy(where);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<TrustAnchor | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<TrustAnchor[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<TrustAnchor | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.create(data);\n }\n\n merge(entity: TrustAnchor, data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.merge(entity as TrustAnchorEntity, data);\n }\n\n async save(entity: TrustAnchor): Promise<TrustAnchor> {\n return this.repository.save(entity as TrustAnchorEntity);\n }\n\n async remove(entity: TrustAnchor): Promise<void> {\n await this.repository.remove(entity as TrustAnchorEntity);\n }\n\n async validateJoinColumns(data: Partial<TrustAnchor>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n });\n }\n\n async checkUniqueness(data: Partial<TrustAnchor>, existing?: TrustAnchor): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAmBA,IAAaW,+BAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYD,YAAwB;EAChC,KAAKA,aAAaA;EAClB,KAAKC,kBAAkB,IAAIH,uBAAuBE,WAAWE,cAAcT,WAAAA,CAAAA;CAC/E;CAEA,IAAcU,aAA4C;EACtD,OAAO,KAAKH,WAAWE,cAAcR,iBAAAA;CACzC;CAEA,MAAMU,SAASC,OAAqE;EAChF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,aAAA;EAC9CD,GAAGE,QAAQ,gBAAA;EAEX,MAAM,EAAEC,eAAenB,WAAWgB,IAAID,KAAAA;EAEtCV,sBAAsBW,IAAI,aAAA;EAE1B,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMtB,sBAAsBc,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMM,YAAYC,IAAyC;EACvD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAAgD;EAC9E,MAAMC,QAA6C,EAAEF,KAAK;EAE1D,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKrB,gBAAgBsB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAGXD,MAAMC,UAAUA;EACpB;EAEA,OAAO,KAAKnB,WAAWc,UAAUI,KAAAA;CACrC;CAEA,MAAMG,kBAAkBC,UAAkBC,OAA6C;EACnF,OAAOtC,OAAOqC,QAAAA,IACV,KAAKV,YAAYU,QAAAA,IACjB,KAAKP,cAAcO,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWN,OAAoD;EACjE,OAAO,KAAKlB,WAAWyB,OAAO/B,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAyD;EACrE,OAAO,KAAKlB,WAAWc,UAAUpB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAQ,OAAOhB,MAAyC;EAC5C,OAAO,KAAKV,WAAW0B,OAAOhB,IAAAA;CAClC;CAEAiB,MAAMC,QAAqBlB,MAAyC;EAChE,OAAO,KAAKV,WAAW2B,MAAMC,QAA6BlB,IAAAA;CAC9D;CAEA,MAAMmB,KAAKD,QAA2C;EAClD,OAAO,KAAK5B,WAAW6B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAoC;EAC7C,MAAM,KAAK5B,WAAW8B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBrB,MAA2C;EACjE,MAAMxB,0BAA0BwB,MAAM;GAClCb,YAAY,KAAKA;GACjBmC,cAAczC;EAClB,CAAA;CACJ;CAEA,MAAM0C,gBAAgBvB,MAA4BwB,UAAuC;EAQrF,IAAI,CAACC,MAPkB1C,eAAe;GAClCI,YAAY,KAAKA;GACjBmC,cAAczC;GACdqC,QAAQlB;GACR0B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI7C,sBAAAA;CAElB;AACJ"}
|
|
@@ -6,7 +6,7 @@ import { UserEntity } from "../../../../../adapters/database/domains/user/entity
|
|
|
6
6
|
import { UserPermissionEntity } from "../../../../../adapters/database/domains/user-permission/entity.mjs";
|
|
7
7
|
import { UserRoleEntity } from "../../../../../adapters/database/domains/user-role/entity.mjs";
|
|
8
8
|
import "../../../../../adapters/database/domains/index.mjs";
|
|
9
|
-
import { applyQuery } from "../query.mjs";
|
|
9
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
10
10
|
import { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from "../helpers.mjs";
|
|
11
11
|
import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
|
|
12
12
|
import "../../../../../adapters/database/index.mjs";
|
|
@@ -31,7 +31,7 @@ var UserRepositoryAdapter = class {
|
|
|
31
31
|
const [entities, total] = await qb.getManyAndCount();
|
|
32
32
|
await this.repository.extendManyWithEA(entities);
|
|
33
33
|
return {
|
|
34
|
-
data: entities,
|
|
34
|
+
data: redactFieldConditions(query, entities),
|
|
35
35
|
meta: {
|
|
36
36
|
total,
|
|
37
37
|
...pagination
|