@authup/server-core 1.0.0-beta.56 → 1.0.0-beta.58
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/logger/module.mjs +2 -4
- package/dist/adapters/database/logger/module.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 +24 -8
- 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 +10 -1
- 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 +4 -2
- package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
- package/dist/adapters/http/request/client-certificate.mjs +1 -1
- package/dist/adapters/http/request/client-certificate.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/adapters/http/request/helpers/locations.mjs +1 -3
- package/dist/adapters/http/request/helpers/locations.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/module.mjs +6 -3
- package/dist/app/modules/authentication/module.mjs.map +1 -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 +22 -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/read/module.mjs +8 -3
- package/dist/app/modules/config/read/module.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/module.mjs +2 -1
- package/dist/app/modules/database/module.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 +208 -124
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/http/modules/middleware.mjs +10 -5
- package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
- package/dist/app/modules/identity/module.mjs +6 -3
- package/dist/app/modules/identity/module.mjs.map +1 -1
- package/dist/app/modules/index.mjs +5 -1
- package/dist/app/modules/oauth2/module.mjs +37 -17
- package/dist/app/modules/oauth2/module.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs +1 -1
- package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs.map +1 -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/oauth2/repositories/token/repository.mjs +1 -1
- package/dist/app/modules/oauth2/repositories/token/repository.mjs.map +1 -1
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +21 -12
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/file/module.mjs +11 -2
- package/dist/app/modules/provisioning/sources/file/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/authentication/session/module.mjs +2 -4
- package/dist/core/authentication/session/module.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 +9 -61
- 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-permission/service.mjs +12 -9
- package/dist/core/entities/client-permission/service.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/key/service.mjs +4 -2
- package/dist/core/entities/key/service.mjs.map +1 -1
- package/dist/core/entities/permission/service.d.ts.map +1 -1
- package/dist/core/entities/permission/service.mjs +1 -1
- package/dist/core/entities/permission/service.mjs.map +1 -1
- package/dist/core/entities/policy/service.d.ts.map +1 -1
- package/dist/core/entities/policy/service.mjs +3 -2
- package/dist/core/entities/policy/service.mjs.map +1 -1
- package/dist/core/entities/realm/service.d.ts.map +1 -1
- package/dist/core/entities/realm/service.mjs +1 -1
- package/dist/core/entities/realm/service.mjs.map +1 -1
- 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/role/service.d.ts.map +1 -1
- package/dist/core/entities/role/service.mjs +1 -1
- package/dist/core/entities/role/service.mjs.map +1 -1
- package/dist/core/entities/role-permission/service.mjs +12 -9
- package/dist/core/entities/role-permission/service.mjs.map +1 -1
- package/dist/core/entities/scope/service.d.ts.map +1 -1
- package/dist/core/entities/scope/service.mjs +1 -1
- package/dist/core/entities/scope/service.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/entities/user/service.d.ts.map +1 -1
- package/dist/core/entities/user/service.mjs +1 -1
- package/dist/core/entities/user/service.mjs.map +1 -1
- package/dist/core/entities/user-authenticator/helpers.mjs +1 -1
- package/dist/core/entities/user-authenticator/helpers.mjs.map +1 -1
- package/dist/core/entities/user-authenticator/service.mjs +7 -7
- package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
- package/dist/core/entities/user-permission/service.mjs +12 -9
- package/dist/core/entities/user-permission/service.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/password-recovery/service.mjs +1 -1
- package/dist/core/identity/password-recovery/service.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 -1
- 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/permission/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.mjs +8 -9
- package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/role/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/scope/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/provisioning/synchronizer/user/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
- 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/path.mjs.map +1 -1
- package/dist/swagger.json +1324 -193
- package/dist/ui/client/.vite/ssr-manifest.json +1030 -760
- package/dist/ui/client/assets/index-BTK3GPZZ.js +106 -0
- package/dist/ui/client/assets/index-Cx_pI7BS.css +2 -0
- package/dist/ui/client/index.html +2 -2
- package/dist/ui/server/server.js +4465 -11501
- package/package.json +51 -50
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["DomainEventPublisher","DomainEventRedisHandler","DomainEventSocketHandler","createRedisClient","AuthupError","DataSource","InstanceChecker","checkDatabase","createDatabase","synchronizeDatabaseSchema","DataSourceOptionsBuilder","DatabaseQueryResultCache","EntitySubscriber","EventEntity","isDatabaseTypeSupported","isDatabaseTypeSupportedForEnvironment","EntityEventHandler","EventService","useRequestEventContext","EventRepositoryAdapter","validateEntitySchemas","CacheInjectionKey","ModuleName","DatabaseInjectionKey","ConfigInjectionKey","LoggerInjectionKey","DatabaseModule","name","dependencies","optionsBuilder","options","eventRedisClient","eventPublisher","DATABASE","CONFIG","LOGGER","setup","container","logger","resolve","prepareBuild","dataSourceOptions","buildDataSourceOptions","setupDatabase","dataSource","debug","initialize","migrate","registerRepositories","registerEvents","registerEventPublisher","register","useValue","e","isInitialized","destroy","disposeEventPublisher","cleanupError","warn","teardown","tryResolve","success","data","unregister","EventRepository","dispose","undefined","disconnect","check","exists","synchronize","ifNotExist","config","db","buildWith","buildWithEnv","type","env","cacheResult","Object","assign","cache","provider","entities","Array","isArray","entity","isEntitySchema","useFactory","getRepository","publisher","redis","client","eventLogEnabled","eventLogEntityEnabled","eventService","requestContext","retentionDays","eventLogEntityRetentionDays","i","subscribers","length","subscriber","setPublisher","repository","service","enabled","eventLogRetentionDays"],"sources":["../../../../src/app/modules/database/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n DomainEventPublisher,\n DomainEventRedisHandler,\n DomainEventSocketHandler,\n createRedisClient,\n} from '@authup/server-kit';\nimport type { RedisClient } from '@authup/server-kit';\nimport { AuthupError } from '@authup/errors';\nimport type { DataSourceOptions } from 'typeorm';\nimport { DataSource, InstanceChecker } from 'typeorm';\nimport {\n checkDatabase,\n createDatabase,\n synchronizeDatabaseSchema,\n} from 'typeorm-extension';\nimport {\n DataSourceOptionsBuilder,\n DatabaseQueryResultCache,\n EntitySubscriber,\n EventEntity,\n isDatabaseTypeSupported,\n isDatabaseTypeSupportedForEnvironment,\n} from '../../../adapters/database/index.ts';\nimport type { Event } from '@authup/core-kit';\nimport { EntityEventHandler, EventService } from '../../../core/index.ts';\nimport { useRequestEventContext } from '../../../adapters/http/request/index.ts';\nimport { EventRepositoryAdapter } from './repositories/index.ts';\nimport { validateEntitySchemas } from './repositories/schema-validation.ts';\nimport { CacheInjectionKey } from '../cache/index.ts';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { DatabaseInjectionKey } from './constants.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport type { IContainer } from 'eldin';\nimport { LoggerInjectionKey } from '../logger/index.ts';\n\nexport type DatabaseModuleOptions = {\n prepareBuild?: (container: IContainer) => Promise<void>;\n setup?: (container: IContainer, options: DataSourceOptions) => Promise<void>;\n migrate?: (container: IContainer, dataSource: DataSource) => Promise<void>;\n};\n\nexport class DatabaseModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n protected optionsBuilder : DataSourceOptionsBuilder;\n\n protected options: DatabaseModuleOptions;\n\n protected eventRedisClient? : RedisClient;\n\n protected eventPublisher? : DomainEventPublisher;\n\n constructor(options: DatabaseModuleOptions = {}) {\n this.name = ModuleName.DATABASE;\n this.dependencies = [ModuleName.CONFIG, ModuleName.LOGGER];\n\n this.optionsBuilder = new DataSourceOptionsBuilder();\n this.options = options;\n }\n\n async setup(container: IContainer): Promise<void> {\n const logger = container.resolve(LoggerInjectionKey);\n\n if (this.options.prepareBuild) {\n await this.options.prepareBuild(container);\n }\n\n const dataSourceOptions = await this.buildDataSourceOptions(container);\n\n if (this.options.setup) {\n await this.options.setup(container, dataSourceOptions);\n } else {\n await this.setupDatabase(container, dataSourceOptions);\n }\n\n const dataSource = new DataSource(dataSourceOptions);\n\n logger.debug('Establishing database connection...');\n await dataSource.initialize();\n logger.debug('Established database connection.');\n\n try {\n if (this.options.migrate) {\n await this.options.migrate(container, dataSource);\n } else {\n await this.migrate(container, dataSource);\n }\n\n validateEntitySchemas(dataSource);\n this.registerRepositories(container, dataSource);\n // the event service must exist before the publisher wiring — the\n // entity-CRUD bridge handler resolves it from the container.\n this.registerEvents(container, dataSource);\n this.registerEventPublisher(container, dataSource);\n\n container.register(DatabaseInjectionKey.DataSource, { useValue: dataSource });\n } catch (e) {\n // teardown() is skipped for a module that fails its own setup(),\n // so release the connection pool and any event-publisher handles\n // here. Guard cleanup so it can never mask the original error.\n try {\n if (dataSource.isInitialized) {\n await dataSource.destroy();\n }\n\n await this.disposeEventPublisher();\n } catch (cleanupError) {\n logger.warn(`Failed to clean up database resources after setup error: ${cleanupError}`);\n }\n\n throw e;\n }\n }\n\n async teardown(container: IContainer): Promise<void> {\n const dataSource = container.tryResolve(DatabaseInjectionKey.DataSource);\n if (dataSource.success) {\n if (dataSource.data.isInitialized) {\n await dataSource.data.destroy();\n }\n\n container.unregister(DatabaseInjectionKey.DataSource);\n }\n\n container.unregister(DatabaseInjectionKey.DomainEventPublisher);\n container.unregister(DatabaseInjectionKey.EventRepository);\n container.unregister(DatabaseInjectionKey.EventService);\n\n await this.disposeEventPublisher();\n }\n\n protected async disposeEventPublisher(): Promise<void> {\n if (this.eventPublisher) {\n await this.eventPublisher.dispose();\n this.eventPublisher = undefined;\n }\n\n if (this.eventRedisClient) {\n this.eventRedisClient.disconnect();\n this.eventRedisClient = undefined;\n }\n }\n\n // ----------------------------------------------------\n\n protected async setupDatabase(container: IContainer, options: DataSourceOptions): Promise<void> {\n const logger = container.resolve(LoggerInjectionKey);\n\n const check = await checkDatabase({ options });\n\n if (!check.exists) {\n logger.debug('Creating database...');\n await createDatabase({\n options,\n synchronize: false,\n ifNotExist: true, \n });\n logger.debug('Created database');\n }\n }\n\n protected async migrate(container: IContainer, dataSource: DataSource): Promise<void> {\n const logger = container.resolve(LoggerInjectionKey);\n\n logger.debug('Migrating database...');\n await synchronizeDatabaseSchema(dataSource);\n logger.debug('Migrated database');\n }\n\n // ----------------------------------------------------\n\n /**\n * Load data source options for connection.\n *\n * @protected\n */\n protected async buildDataSourceOptions(container: IContainer) : Promise<DataSourceOptions> {\n const config = container.resolve(ConfigInjectionKey);\n\n let options : DataSourceOptions | undefined;\n if (config.db) {\n options = this.optionsBuilder.buildWith(config.db);\n } else {\n options = this.optionsBuilder.buildWithEnv();\n }\n\n if (!isDatabaseTypeSupported(options.type)) {\n throw new AuthupError(`Database type ${options.type} is not supported (only: mysql, better-sqlite3 and postgres).`);\n }\n\n if (!isDatabaseTypeSupportedForEnvironment(options.type, config.env)) {\n throw new AuthupError(`Database type ${options.type} is not supported for ${config.env}.`);\n }\n\n const cacheResult = container.tryResolve(CacheInjectionKey);\n if (cacheResult.success) {\n Object.assign(options, {\n cache: {\n provider() {\n return new DatabaseQueryResultCache(cacheResult.data);\n },\n },\n } satisfies Partial<DataSourceOptions>);\n }\n\n return options;\n }\n\n protected registerRepositories(container: IContainer, dataSource: DataSource) : void {\n const entities = dataSource.options.entities || [];\n if (!Array.isArray(entities)) {\n return;\n }\n\n for (const entity of entities) {\n if (InstanceChecker.isEntitySchema(entity)) {\n continue;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n container.register(entity, { useFactory: () => dataSource.getRepository(entity) });\n }\n }\n\n protected registerEventPublisher(container: IContainer, dataSource: DataSource) {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n\n const publisher = new DomainEventPublisher({ logger });\n this.eventPublisher = publisher;\n if (config.redis) {\n const client = createRedisClient(config.redis);\n if (client !== config.redis) {\n this.eventRedisClient = client;\n }\n\n publisher.register(new DomainEventRedisHandler(client));\n publisher.register(new DomainEventSocketHandler(client));\n }\n\n if (config.eventLogEnabled && config.eventLogEntityEnabled) {\n publisher.register(new EntityEventHandler({\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n requestContext: useRequestEventContext,\n options: { retentionDays: config.eventLogEntityRetentionDays },\n }));\n }\n\n container.register(DatabaseInjectionKey.DomainEventPublisher, { useValue: publisher });\n\n for (let i = 0; i < dataSource.subscribers.length; i++) {\n const subscriber = dataSource.subscribers[i];\n if (subscriber instanceof EntitySubscriber) {\n subscriber.setPublisher(publisher);\n }\n }\n }\n\n protected registerEvents(container: IContainer, dataSource: DataSource) {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n\n const repository = new EventRepositoryAdapter(\n dataSource.getRepository<Event>(EventEntity),\n );\n container.register(DatabaseInjectionKey.EventRepository, { useValue: repository });\n\n const service = new EventService({\n repository,\n options: {\n enabled: config.eventLogEnabled,\n retentionDays: config.eventLogRetentionDays,\n },\n logger,\n });\n container.register(DatabaseInjectionKey.EventService, { useValue: service });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["DomainEventPublisher","DomainEventRedisHandler","DomainEventSocketHandler","createRedisClient","AuthupError","DataSource","InstanceChecker","checkDatabase","createDatabase","synchronizeDatabaseSchema","DataSourceOptionsBuilder","DatabaseQueryResultCache","EntitySubscriber","EventEntity","isDatabaseTypeSupported","isDatabaseTypeSupportedForEnvironment","EntityEventHandler","EventService","useRequestEventContext","EventRepositoryAdapter","validateEntitySchemas","CacheInjectionKey","ModuleName","DatabaseInjectionKey","ConfigInjectionKey","LoggerInjectionKey","DatabaseModule","name","dependencies","optionsBuilder","options","eventRedisClient","eventPublisher","DATABASE","CONFIG","LOGGER","setup","container","logger","resolve","prepareBuild","dataSourceOptions","buildDataSourceOptions","setupDatabase","dataSource","debug","initialize","migrate","registerRepositories","registerEvents","registerEventPublisher","register","useValue","e","isInitialized","destroy","disposeEventPublisher","cleanupError","warn","teardown","tryResolve","success","data","unregister","EventRepository","dispose","undefined","disconnect","check","exists","synchronize","ifNotExist","config","db","buildWith","buildWithEnv","type","env","cacheResult","Object","assign","cache","provider","entities","Array","isArray","entity","isEntitySchema","useFactory","getRepository","publisher","redis","client","eventLogEnabled","eventLogEntityEnabled","eventService","requestContext","retentionDays","eventLogEntityRetentionDays","i","subscribers","length","subscriber","setPublisher","repository","service","enabled","eventLogRetentionDays"],"sources":["../../../../src/app/modules/database/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n DomainEventPublisher,\n DomainEventRedisHandler,\n DomainEventSocketHandler,\n createRedisClient,\n} from '@authup/server-kit';\nimport type { RedisClient } from '@authup/server-kit';\nimport { AuthupError } from '@authup/errors';\nimport type { DataSourceOptions } from 'typeorm';\nimport { DataSource, InstanceChecker } from 'typeorm';\nimport {\n checkDatabase,\n createDatabase,\n synchronizeDatabaseSchema,\n} from 'typeorm-extension';\nimport {\n DataSourceOptionsBuilder,\n DatabaseQueryResultCache,\n EntitySubscriber,\n EventEntity,\n isDatabaseTypeSupported,\n isDatabaseTypeSupportedForEnvironment,\n} from '../../../adapters/database/index.ts';\nimport type { Event } from '@authup/core-kit';\nimport { EntityEventHandler, EventService } from '../../../core/index.ts';\nimport { useRequestEventContext } from '../../../adapters/http/request/index.ts';\nimport { EventRepositoryAdapter } from './repositories/index.ts';\nimport { validateEntitySchemas } from './repositories/schema-validation.ts';\nimport { CacheInjectionKey } from '../cache/index.ts';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { DatabaseInjectionKey } from './constants.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport type { IContainer } from 'eldin';\nimport { LoggerInjectionKey } from '../logger/index.ts';\n\nexport type DatabaseModuleOptions = {\n prepareBuild?: (container: IContainer) => Promise<void>;\n setup?: (container: IContainer, options: DataSourceOptions) => Promise<void>;\n migrate?: (container: IContainer, dataSource: DataSource) => Promise<void>;\n};\n\nexport class DatabaseModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n protected optionsBuilder : DataSourceOptionsBuilder;\n\n protected options: DatabaseModuleOptions;\n\n protected eventRedisClient? : RedisClient;\n\n protected eventPublisher? : DomainEventPublisher;\n\n constructor(options: DatabaseModuleOptions = {}) {\n this.name = ModuleName.DATABASE;\n this.dependencies = [ModuleName.CONFIG, ModuleName.LOGGER];\n\n this.optionsBuilder = new DataSourceOptionsBuilder();\n this.options = options;\n }\n\n async setup(container: IContainer): Promise<void> {\n const logger = container.resolve(LoggerInjectionKey);\n\n if (this.options.prepareBuild) {\n await this.options.prepareBuild(container);\n }\n\n const dataSourceOptions = await this.buildDataSourceOptions(container);\n\n if (this.options.setup) {\n await this.options.setup(container, dataSourceOptions);\n } else {\n await this.setupDatabase(container, dataSourceOptions);\n }\n\n const dataSource = new DataSource(dataSourceOptions);\n\n logger.debug('Establishing database connection...');\n await dataSource.initialize();\n logger.debug('Established database connection.');\n\n try {\n if (this.options.migrate) {\n await this.options.migrate(container, dataSource);\n } else {\n await this.migrate(container, dataSource);\n }\n\n validateEntitySchemas(dataSource);\n this.registerRepositories(container, dataSource);\n // the event service must exist before the publisher wiring — the\n // entity-CRUD bridge handler resolves it from the container.\n this.registerEvents(container, dataSource);\n this.registerEventPublisher(container, dataSource);\n\n container.register(DatabaseInjectionKey.DataSource, { useValue: dataSource });\n } catch (e) {\n // teardown() is skipped for a module that fails its own setup(),\n // so release the connection pool and any event-publisher handles\n // here. Guard cleanup so it can never mask the original error.\n try {\n if (dataSource.isInitialized) {\n await dataSource.destroy();\n }\n\n await this.disposeEventPublisher();\n } catch (cleanupError) {\n logger.warn(`Failed to clean up database resources after setup error: ${cleanupError}`);\n }\n\n throw e;\n }\n }\n\n async teardown(container: IContainer): Promise<void> {\n const dataSource = container.tryResolve(DatabaseInjectionKey.DataSource);\n if (dataSource.success) {\n if (dataSource.data.isInitialized) {\n await dataSource.data.destroy();\n }\n\n container.unregister(DatabaseInjectionKey.DataSource);\n }\n\n container.unregister(DatabaseInjectionKey.DomainEventPublisher);\n container.unregister(DatabaseInjectionKey.EventRepository);\n container.unregister(DatabaseInjectionKey.EventService);\n\n await this.disposeEventPublisher();\n }\n\n protected async disposeEventPublisher(): Promise<void> {\n if (this.eventPublisher) {\n await this.eventPublisher.dispose();\n this.eventPublisher = undefined;\n }\n\n if (this.eventRedisClient) {\n this.eventRedisClient.disconnect();\n this.eventRedisClient = undefined;\n }\n }\n\n // ----------------------------------------------------\n\n protected async setupDatabase(container: IContainer, options: DataSourceOptions): Promise<void> {\n const logger = container.resolve(LoggerInjectionKey);\n\n const check = await checkDatabase({ options });\n\n if (!check.exists) {\n logger.debug('Creating database...');\n await createDatabase({\n options,\n synchronize: false,\n ifNotExist: true, \n });\n logger.debug('Created database');\n }\n }\n\n protected async migrate(container: IContainer, dataSource: DataSource): Promise<void> {\n const logger = container.resolve(LoggerInjectionKey);\n\n logger.debug('Migrating database...');\n await synchronizeDatabaseSchema(dataSource);\n logger.debug('Migrated database');\n }\n\n // ----------------------------------------------------\n\n /**\n * Load data source options for connection.\n *\n * @protected\n */\n protected async buildDataSourceOptions(container: IContainer) : Promise<DataSourceOptions> {\n const config = container.resolve(ConfigInjectionKey);\n\n let options : DataSourceOptions | undefined;\n if (config.db) {\n options = this.optionsBuilder.buildWith(config.db);\n } else {\n options = this.optionsBuilder.buildWithEnv();\n }\n\n if (!isDatabaseTypeSupported(options.type)) {\n throw new AuthupError(`Database type ${options.type} is not supported (only: mysql, better-sqlite3 and postgres).`);\n }\n\n if (!isDatabaseTypeSupportedForEnvironment(options.type, config.env)) {\n throw new AuthupError(`Database type ${options.type} is not supported for ${config.env}.`);\n }\n\n const cacheResult = container.tryResolve(CacheInjectionKey);\n if (cacheResult.success) {\n Object.assign(options, {\n cache: {\n provider() {\n return new DatabaseQueryResultCache(cacheResult.data);\n },\n },\n } satisfies Partial<DataSourceOptions>);\n }\n\n return options;\n }\n\n protected registerRepositories(container: IContainer, dataSource: DataSource) : void {\n const entities = dataSource.options.entities || [];\n if (!Array.isArray(entities)) {\n return;\n }\n\n for (const entity of entities) {\n if (InstanceChecker.isEntitySchema(entity)) {\n continue;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n container.register(entity, { useFactory: () => dataSource.getRepository(entity) });\n }\n }\n\n protected registerEventPublisher(container: IContainer, dataSource: DataSource) {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n\n const publisher = new DomainEventPublisher({ logger });\n this.eventPublisher = publisher;\n if (config.redis) {\n const client = createRedisClient(config.redis);\n if (client !== config.redis) {\n this.eventRedisClient = client;\n }\n\n publisher.register(new DomainEventRedisHandler(client));\n publisher.register(new DomainEventSocketHandler(client));\n }\n\n if (config.eventLogEnabled && config.eventLogEntityEnabled) {\n publisher.register(new EntityEventHandler({\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n requestContext: useRequestEventContext,\n options: { retentionDays: config.eventLogEntityRetentionDays },\n }));\n }\n\n container.register(DatabaseInjectionKey.DomainEventPublisher, { useValue: publisher });\n\n for (let i = 0; i < dataSource.subscribers.length; i++) {\n const subscriber = dataSource.subscribers[i];\n if (subscriber instanceof EntitySubscriber) {\n subscriber.setPublisher(publisher);\n }\n }\n }\n\n protected registerEvents(container: IContainer, dataSource: DataSource) {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n\n const repository = new EventRepositoryAdapter(\n dataSource.getRepository<Event>(EventEntity),\n );\n container.register(DatabaseInjectionKey.EventRepository, { useValue: repository });\n\n const service = new EventService({\n repository,\n options: {\n enabled: config.eventLogEnabled,\n retentionDays: config.eventLogRetentionDays,\n },\n logger,\n });\n container.register(DatabaseInjectionKey.EventService, { useValue: service });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/database/repositories/client/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,8BAA8B,CAAC;AAYxF,MAAM,MAAM,8BAA8B,GAAG;IACzC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,qBAAa,uBAAwB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAEhD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;gBAEvC,GAAG,EAAE,8BAA8B;IAKzC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/database/repositories/client/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,8BAA8B,CAAC;AAYxF,MAAM,MAAM,8BAA8B,GAAG;IACzC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,qBAAa,uBAAwB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAEhD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;gBAEvC,GAAG,EAAE,8BAA8B;IAKzC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAiB9E,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIzC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAetE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsB9E,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM3E,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzD,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI7D,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY3E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAIrC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAI9C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAmBvD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAUzF"}
|
|
@@ -6,8 +6,8 @@ import { ClientEntity } from "../../../../../adapters/database/domains/client/en
|
|
|
6
6
|
import { ClientRoleEntity } from "../../../../../adapters/database/domains/client-role/entity.mjs";
|
|
7
7
|
import { ClientPermissionEntity } from "../../../../../adapters/database/domains/client-permission/entity.mjs";
|
|
8
8
|
import "../../../../../adapters/database/domains/index.mjs";
|
|
9
|
-
import { applyQuery } from "../query.mjs";
|
|
10
|
-
import {
|
|
9
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
10
|
+
import { isEntityUnique, translateWhereConditions } from "../helpers.mjs";
|
|
11
11
|
import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
|
|
12
12
|
import "../../../../../adapters/database/index.mjs";
|
|
13
13
|
import { loadBoundPermissions } from "../bindings.mjs";
|
|
@@ -27,10 +27,9 @@ var ClientRepositoryAdapter = class {
|
|
|
27
27
|
const qb = this.repository.createQueryBuilder("client");
|
|
28
28
|
qb.groupBy("client.id");
|
|
29
29
|
const { pagination } = applyQuery(qb, query);
|
|
30
|
-
applyRealmScopeSelect(qb, "client", ["secretHashed", "secretEncrypted"]);
|
|
31
30
|
const [entities, total] = await qb.getManyAndCount();
|
|
32
31
|
return {
|
|
33
|
-
data: entities,
|
|
32
|
+
data: redactFieldConditions(query, entities),
|
|
34
33
|
meta: {
|
|
35
34
|
total,
|
|
36
35
|
...pagination
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","applyRealmScopeSelect","isEntityUnique","translateWhereConditions","loadBoundPermissions","CachePrefix","ClientEntity","ClientPermissionEntity","ClientRoleEntity","RealmRepositoryAdapter","ClientRepositoryAdapter","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","findOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","findOneWithSecret","Object","entries","forEach","key","value","addSelect","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","getRepository","find","clientId","relations","role","cache","prefix","CLIENT_OWNED_ROLES","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","CLIENT_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/client/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 { Client, Realm, Role } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\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 { IClientRepository, IRealmRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ClientRepositoryAdapterContext = {\n repository: Repository<Client>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ClientRepositoryAdapter implements IClientRepository {\n private readonly repository: Repository<Client>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ClientRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Client>> {\n const qb = this.repository.createQueryBuilder('client');\n qb.groupBy('client.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'client', ['secretHashed', 'secretEncrypted']);\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<Client | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Client | null> {\n const qb = this.repository.createQueryBuilder('client');\n qb.where('client.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('client.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOne(id: string, query?: IQuery, realmKey?: string): Promise<Client | null> {\n const qb = this.repository.createQueryBuilder('client');\n\n if (isUUID(id)) {\n qb.where('client.id = :id', { id });\n } else {\n qb.where('client.name = :name', { name: id });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('client.realmId = :realmId', { realmId });\n }\n }\n\n applyQuery(qb, query);\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Client | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Client[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Client | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneWithSecret(where: Record<string, any>): Promise<Client | null> {\n const qb = this.repository.createQueryBuilder('client');\n\n Object.entries(where).forEach(([key, value]) => {\n qb.andWhere(`client.${key} = :${key}`, { [key]: value });\n });\n\n qb.addSelect('client.secret');\n\n return qb.getOne();\n }\n\n create(data: Partial<Client>): Client {\n return this.repository.create(data);\n }\n\n merge(entity: Client, data: Partial<Client>): Client {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Client): Promise<Client> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Client): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Client>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Client>, existing?: Client): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ClientEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | Client): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(ClientRoleEntity)\n .find({\n where: { clientId: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.CLIENT_OWNED_ROLES,\n key: id,\n }),\n milliseconds: 60_000,\n },\n });\n\n return entries.map((entry) => entry.role);\n }\n\n async getBoundPermissions(entity: string | Client): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: ClientPermissionEntity,\n where: { clientId: id },\n cachePrefix: CachePrefix.CLIENT_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","isEntityUnique","translateWhereConditions","loadBoundPermissions","CachePrefix","ClientEntity","ClientPermissionEntity","ClientRoleEntity","RealmRepositoryAdapter","ClientRepositoryAdapter","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","findOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","findOneWithSecret","Object","entries","forEach","key","value","addSelect","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","getRepository","find","clientId","relations","role","cache","prefix","CLIENT_OWNED_ROLES","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","CLIENT_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/client/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 { Client, Realm, Role } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\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 { IClientRepository, IRealmRepository } 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 ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ClientRepositoryAdapterContext = {\n repository: Repository<Client>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ClientRepositoryAdapter implements IClientRepository {\n private readonly repository: Repository<Client>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ClientRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Client>> {\n const qb = this.repository.createQueryBuilder('client');\n qb.groupBy('client.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<Client | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Client | null> {\n const qb = this.repository.createQueryBuilder('client');\n qb.where('client.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('client.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOne(id: string, query?: IQuery, realmKey?: string): Promise<Client | null> {\n const qb = this.repository.createQueryBuilder('client');\n\n if (isUUID(id)) {\n qb.where('client.id = :id', { id });\n } else {\n qb.where('client.name = :name', { name: id });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('client.realmId = :realmId', { realmId });\n }\n }\n\n applyQuery(qb, query);\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Client | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Client[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Client | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneWithSecret(where: Record<string, any>): Promise<Client | null> {\n const qb = this.repository.createQueryBuilder('client');\n\n Object.entries(where).forEach(([key, value]) => {\n qb.andWhere(`client.${key} = :${key}`, { [key]: value });\n });\n\n qb.addSelect('client.secret');\n\n return qb.getOne();\n }\n\n create(data: Partial<Client>): Client {\n return this.repository.create(data);\n }\n\n merge(entity: Client, data: Partial<Client>): Client {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Client): Promise<Client> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Client): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Client>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Client>, existing?: Client): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ClientEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | Client): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(ClientRoleEntity)\n .find({\n where: { clientId: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.CLIENT_OWNED_ROLES,\n key: id,\n }),\n milliseconds: 60_000,\n },\n });\n\n return entries.map((entry) => entry.role);\n }\n\n async getBoundPermissions(entity: string | Client): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: ClientPermissionEntity,\n where: { clientId: id },\n cachePrefix: CachePrefix.CLIENT_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { ClientPermissionEntity } from "../../../../../adapters/database/domains/client-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/client-permission/repository.ts
|
|
@@ -18,7 +18,7 @@ var ClientPermissionRepositoryAdapter = 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","ClientPermissionEntity","translateWhereConditions","ClientPermissionRepositoryAdapter","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/client-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 { ClientPermission } 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 { IClientPermissionRepository } from '../../../../../core/entities/client-permission/types.ts';\nimport { ClientPermissionEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class ClientPermissionRepositoryAdapter implements IClientPermissionRepository {\n private readonly repository: Repository<ClientPermission>;\n\n constructor(repository: Repository<ClientPermission>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<ClientPermission>> {\n const qb = this.repository.createQueryBuilder('clientPermission');\n qb.groupBy('clientPermission.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<ClientPermission | null> {\n return this.findOneBy({ id });\n }\n\n findOneByName(_name: string): Promise<ClientPermission | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<ClientPermission | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<ClientPermission[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<ClientPermission | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<ClientPermission>): ClientPermission {\n return this.repository.create(data);\n }\n\n merge(entity: ClientPermission, data: Partial<ClientPermission>): ClientPermission {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: ClientPermission): Promise<ClientPermission> {\n return this.repository.save(entity);\n }\n\n async remove(entity: ClientPermission): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<ClientPermission>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientPermissionEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","ClientPermissionEntity","translateWhereConditions","ClientPermissionRepositoryAdapter","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/client-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 { ClientPermission } 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 { IClientPermissionRepository } from '../../../../../core/entities/client-permission/types.ts';\nimport { ClientPermissionEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class ClientPermissionRepositoryAdapter implements IClientPermissionRepository {\n private readonly repository: Repository<ClientPermission>;\n\n constructor(repository: Repository<ClientPermission>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<ClientPermission>> {\n const qb = this.repository.createQueryBuilder('clientPermission');\n qb.groupBy('clientPermission.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<ClientPermission | null> {\n return this.findOneBy({ id });\n }\n\n findOneByName(_name: string): Promise<ClientPermission | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<ClientPermission | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<ClientPermission[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<ClientPermission | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<ClientPermission>): ClientPermission {\n return this.repository.create(data);\n }\n\n merge(entity: ClientPermission, data: Partial<ClientPermission>): ClientPermission {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: ClientPermission): Promise<ClientPermission> {\n return this.repository.save(entity);\n }\n\n async remove(entity: ClientPermission): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<ClientPermission>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientPermissionEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,oCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA0C;EAClD,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAA0E;EACrF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,kBAAA;EAC9CD,GAAGE,QAAQ,qBAAA;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,IAA8C;EACtD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEAE,cAAcC,OAAiD;EAC3D,OAAOC,QAAQC,QAAQ,IAAA;CAC3B;CAEAC,kBAAkBC,UAAoD;EAClE,OAAO,KAAKR,YAAYQ,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAyD;EACtE,OAAO,KAAKtB,WAAWuB,OAAOzB,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMR,UAAUQ,OAA8D;EAC1E,OAAO,KAAKtB,WAAWc,UAAUhB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOd,MAAmD;EACtD,OAAO,KAAKV,WAAWwB,OAAOd,IAAAA;CAClC;CAEAe,MAAMC,QAA0BhB,MAAmD;EAC/E,OAAO,KAAKV,WAAWyB,MAAMC,QAAQhB,IAAAA;CACzC;CAEA,MAAMiB,KAAKD,QAAqD;EAC5D,OAAO,KAAK1B,WAAW2B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAyC;EAClD,MAAM,KAAK1B,WAAW4B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBnB,MAAgD;EACtE,MAAMhB,0BAA0BgB,MAAM;GAClCoB,YAAY,KAAK9B,WAAW+B,QAAQC;GACpCC,cAAcpC;EAClB,CAAA;CACJ;AACJ"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { ClientRoleEntity } from "../../../../../adapters/database/domains/client-role/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/client-role/repository.ts
|
|
@@ -18,7 +18,7 @@ var ClientRoleRepositoryAdapter = 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","ClientRoleEntity","translateWhereConditions","ClientRoleRepositoryAdapter","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/client-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 { ClientRole } 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 { IClientRoleRepository } from '../../../../../core/entities/client-role/types.ts';\nimport { ClientRoleEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class ClientRoleRepositoryAdapter implements IClientRoleRepository {\n private readonly repository: Repository<ClientRole>;\n\n constructor(repository: Repository<ClientRole>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<ClientRole>> {\n const qb = this.repository.createQueryBuilder('clientRole');\n qb.groupBy('clientRole.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<ClientRole | null> {\n return this.findOneBy({ id });\n }\n\n findOneByName(_name: string): Promise<ClientRole | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<ClientRole | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<ClientRole[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<ClientRole | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<ClientRole>): ClientRole {\n return this.repository.create(data);\n }\n\n merge(entity: ClientRole, data: Partial<ClientRole>): ClientRole {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: ClientRole): Promise<ClientRole> {\n return this.repository.save(entity);\n }\n\n async remove(entity: ClientRole): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<ClientRole>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientRoleEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","ClientRoleEntity","translateWhereConditions","ClientRoleRepositoryAdapter","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/client-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 { ClientRole } 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 { IClientRoleRepository } from '../../../../../core/entities/client-role/types.ts';\nimport { ClientRoleEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class ClientRoleRepositoryAdapter implements IClientRoleRepository {\n private readonly repository: Repository<ClientRole>;\n\n constructor(repository: Repository<ClientRole>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<ClientRole>> {\n const qb = this.repository.createQueryBuilder('clientRole');\n qb.groupBy('clientRole.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<ClientRole | null> {\n return this.findOneBy({ id });\n }\n\n findOneByName(_name: string): Promise<ClientRole | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<ClientRole | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<ClientRole[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<ClientRole | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<ClientRole>): ClientRole {\n return this.repository.create(data);\n }\n\n merge(entity: ClientRole, data: Partial<ClientRole>): ClientRole {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: ClientRole): Promise<ClientRole> {\n return this.repository.save(entity);\n }\n\n async remove(entity: ClientRole): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<ClientRole>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientRoleEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,8BAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAoC;EAC5C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAoE;EAC/E,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,YAAA;EAC9CD,GAAGE,QAAQ,eAAA;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,IAAwC;EAChD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEAE,cAAcC,OAA2C;EACrD,OAAOC,QAAQC,QAAQ,IAAA;CAC3B;CAEAC,kBAAkBC,UAA8C;EAC5D,OAAO,KAAKR,YAAYQ,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAmD;EAChE,OAAO,KAAKtB,WAAWuB,OAAOzB,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMR,UAAUQ,OAAwD;EACpE,OAAO,KAAKtB,WAAWc,UAAUhB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOd,MAAuC;EAC1C,OAAO,KAAKV,WAAWwB,OAAOd,IAAAA;CAClC;CAEAe,MAAMC,QAAoBhB,MAAuC;EAC7D,OAAO,KAAKV,WAAWyB,MAAMC,QAAQhB,IAAAA;CACzC;CAEA,MAAMiB,KAAKD,QAAyC;EAChD,OAAO,KAAK1B,WAAW2B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAmC;EAC5C,MAAM,KAAK1B,WAAW4B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBnB,MAA0C;EAChE,MAAMhB,0BAA0BgB,MAAM;GAClCoB,YAAY,KAAK9B,WAAW+B,QAAQC;GACpCC,cAAcpC;EAClB,CAAA;CACJ;AACJ"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { ClientScopeEntity } from "../../../../../adapters/database/domains/client-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 { translateWhereConditions } from "../helpers.mjs";
|
|
8
8
|
import { validateEntityJoinColumns } from "typeorm-extension";
|
|
9
9
|
//#region src/app/modules/database/repositories/client-scope/repository.ts
|
|
@@ -18,7 +18,7 @@ var ClientScopeRepositoryAdapter = 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","ClientScopeEntity","translateWhereConditions","ClientScopeRepositoryAdapter","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/client-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 { ClientScope } 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 { IClientScopeRepository } from '../../../../../core/entities/client-scope/types.ts';\nimport { ClientScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class ClientScopeRepositoryAdapter implements IClientScopeRepository {\n private readonly repository: Repository<ClientScope>;\n\n constructor(repository: Repository<ClientScope>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<ClientScope>> {\n const qb = this.repository.createQueryBuilder('clientScope');\n qb.groupBy('clientScope.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<ClientScope | null> {\n return this.findOneBy({ id });\n }\n\n findOneByName(_name: string): Promise<ClientScope | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<ClientScope | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<ClientScope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<ClientScope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<ClientScope>): ClientScope {\n return this.repository.create(data);\n }\n\n merge(entity: ClientScope, data: Partial<ClientScope>): ClientScope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: ClientScope): Promise<ClientScope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: ClientScope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<ClientScope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientScopeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","ClientScopeEntity","translateWhereConditions","ClientScopeRepositoryAdapter","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/client-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 { ClientScope } 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 { IClientScopeRepository } from '../../../../../core/entities/client-scope/types.ts';\nimport { ClientScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class ClientScopeRepositoryAdapter implements IClientScopeRepository {\n private readonly repository: Repository<ClientScope>;\n\n constructor(repository: Repository<ClientScope>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<ClientScope>> {\n const qb = this.repository.createQueryBuilder('clientScope');\n qb.groupBy('clientScope.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<ClientScope | null> {\n return this.findOneBy({ id });\n }\n\n findOneByName(_name: string): Promise<ClientScope | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<ClientScope | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<ClientScope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<ClientScope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<ClientScope>): ClientScope {\n return this.repository.create(data);\n }\n\n merge(entity: ClientScope, data: Partial<ClientScope>): ClientScope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: ClientScope): Promise<ClientScope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: ClientScope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<ClientScope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ClientScopeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,+BAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAqC;EAC7C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAqE;EAChF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,aAAA;EAC9CD,GAAGE,QAAQ,gBAAA;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,IAAyC;EACjD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEAE,cAAcC,OAA4C;EACtD,OAAOC,QAAQC,QAAQ,IAAA;CAC3B;CAEAC,kBAAkBC,UAA+C;EAC7D,OAAO,KAAKR,YAAYQ,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAoD;EACjE,OAAO,KAAKtB,WAAWuB,OAAOzB,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMR,UAAUQ,OAAyD;EACrE,OAAO,KAAKtB,WAAWc,UAAUhB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOd,MAAyC;EAC5C,OAAO,KAAKV,WAAWwB,OAAOd,IAAAA;CAClC;CAEAe,MAAMC,QAAqBhB,MAAyC;EAChE,OAAO,KAAKV,WAAWyB,MAAMC,QAAQhB,IAAAA;CACzC;CAEA,MAAMiB,KAAKD,QAA2C;EAClD,OAAO,KAAK1B,WAAW2B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAoC;EAC7C,MAAM,KAAK1B,WAAW4B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBnB,MAA2C;EACjE,MAAMhB,0BAA0BgB,MAAM;GAClCoB,YAAY,KAAK9B,WAAW+B,QAAQC;GACpCC,cAAcpC;EAClB,CAAA;CACJ;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/database/repositories/event/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EACR,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EACnB,MAAM,8BAA8B,CAAC;AAGtC,qBAAa,sBAAuB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAEnC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIzC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;IAI7B,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAInC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAI9C,QAAQ,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAyB,GACnC,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAoD3C,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/database/repositories/event/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EACR,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EACnB,MAAM,8BAA8B,CAAC;AAGtC,qBAAa,sBAAuB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAEnC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIzC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;IAI7B,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAInC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAI9C,QAAQ,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAyB,GACnC,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAoD3C,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmC5D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQpD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "node:path";
|
|
2
2
|
import "node:url";
|
|
3
3
|
import.meta.url;
|
|
4
|
-
import { applyQuery } from "../query.mjs";
|
|
4
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
5
5
|
import { applyRealmScopeSelect } from "../helpers.mjs";
|
|
6
6
|
import { LessThan } from "typeorm";
|
|
7
7
|
//#region src/app/modules/database/repositories/event/repository.ts
|
|
@@ -46,7 +46,7 @@ var EventRepositoryAdapter = class {
|
|
|
46
46
|
}
|
|
47
47
|
const [entities, total] = await qb.getManyAndCount();
|
|
48
48
|
return {
|
|
49
|
-
data: entities,
|
|
49
|
+
data: redactFieldConditions(query, entities),
|
|
50
50
|
meta: {
|
|
51
51
|
total,
|
|
52
52
|
...pagination
|
|
@@ -54,7 +54,8 @@ var EventRepositoryAdapter = class {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
async countRecent(filter) {
|
|
57
|
-
const
|
|
57
|
+
const since = new Date(filter.since).toISOString().replace("T", " ").replace("Z", "");
|
|
58
|
+
const qb = this.repository.createQueryBuilder("event").where("event.name = :name", { name: filter.name }).andWhere("event.createdAt > :since", { since });
|
|
58
59
|
if (filter.actorName) qb.andWhere("event.actorName = :actorName", { actorName: filter.actorName });
|
|
59
60
|
if (filter.requestIpAddress) qb.andWhere("event.requestIpAddress = :requestIpAddress", { requestIpAddress: filter.requestIpAddress });
|
|
60
61
|
if (typeof filter.realmId !== "undefined") if (filter.realmId === null) qb.andWhere("event.realmId IS NULL");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["LessThan","applyQuery","applyRealmScopeSelect","EventRepositoryAdapter","repository","create","data","save","entity","findOneById","id","findOneBy","findMany","query","options","qb","createQueryBuilder","pagination","owner","andWhere","ownerActorId","actorId","ownerActorType","actorType","realmId","routeRealmId","visibility","constraints","parameters","realmIds","filter","length","push","visibleRealmIds","includes","visibleActorId","visibleActorType","join","entities","total","getManyAndCount","meta","countRecent","
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["LessThan","applyQuery","redactFieldConditions","applyRealmScopeSelect","EventRepositoryAdapter","repository","create","data","save","entity","findOneById","id","findOneBy","findMany","query","options","qb","createQueryBuilder","pagination","owner","andWhere","ownerActorId","actorId","ownerActorType","actorType","realmId","routeRealmId","visibility","constraints","parameters","realmIds","filter","length","push","visibleRealmIds","includes","visibleActorId","visibleActorType","join","entities","total","getManyAndCount","meta","countRecent","since","Date","toISOString","replace","where","name","actorName","requestIpAddress","getCount","deleteExpired","now","result","delete","expiring","expiresAt","affected"],"sources":["../../../../../../src/app/modules/database/repositories/event/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 { Event } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { LessThan } from 'typeorm';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type {\n EventCountRecentFilter,\n EventFindManyOptions,\n IEventRepository,\n} from '../../../../../core/index.ts';\nimport { applyRealmScopeSelect } from '../helpers.ts';\n\nexport class EventRepositoryAdapter implements IEventRepository {\n private readonly repository: Repository<Event>;\n\n constructor(repository: Repository<Event>) {\n this.repository = repository;\n }\n\n create(data: Partial<Event>): Event {\n return this.repository.create(data);\n }\n\n async save(entity: Event): Promise<Event> {\n return this.repository.save(entity);\n }\n\n async findOneById(id: string): Promise<Event | null> {\n return this.repository.findOneBy({ id });\n }\n\n async findMany(\n query: IQuery,\n options: EventFindManyOptions = {},\n ): Promise<EntityRepositoryFindManyResult<Event>> {\n const qb = this.repository.createQueryBuilder('event');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'event', ['actorId', 'actorType']);\n\n if (options.owner) {\n // mandatory constraint — not overridable by a rapiq filter\n qb.andWhere('event.actorId = :ownerActorId AND event.actorType = :ownerActorType', {\n ownerActorId: options.owner.actorId,\n ownerActorType: options.owner.actorType,\n });\n }\n\n if (options.realmId) {\n qb.andWhere('event.realmId = :routeRealmId', { routeRealmId: options.realmId });\n }\n\n if (options.visibility) {\n const constraints: string[] = [];\n const parameters: Record<string, unknown> = {};\n const realmIds = options.visibility.realmIds\n .filter((realmId): realmId is string => realmId !== null);\n\n if (realmIds.length > 0) {\n constraints.push('event.realmId IN (:...visibleRealmIds)');\n parameters.visibleRealmIds = realmIds;\n }\n if (options.visibility.realmIds.includes(null)) {\n constraints.push('event.realmId IS NULL');\n }\n if (options.visibility.owner) {\n constraints.push('(event.actorId = :visibleActorId AND event.actorType = :visibleActorType)');\n parameters.visibleActorId = options.visibility.owner.actorId;\n parameters.visibleActorType = options.visibility.owner.actorType;\n }\n\n qb.andWhere(`(${constraints.length > 0 ? constraints.join(' OR ') : '1 = 0'})`, parameters);\n }\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 countRecent(filter: EventCountRecentFilter): Promise<number> {\n // created_at is stamped by the DATABASE server's clock (assumed UTC —\n // the shipped compose files and deployment posture; a non-UTC DB\n // server shifts the window regardless of what we bind), while a bound\n // Date object is serialized by the pg/mysql drivers in the HOST's\n // local timezone — on a non-UTC host that shifts the window by the\n // UTC offset (postgres: `timestamp without time zone` discards the\n // offset marker entirely). Bind a UTC wall-clock literal instead:\n // pg/mysql cast it as a wall-clock timestamp, sqlite compares it\n // lexicographically against the same format `datetime('now')` stores.\n const since = new Date(filter.since).toISOString().replace('T', ' ').replace('Z', '');\n\n const qb = this.repository.createQueryBuilder('event')\n .where('event.name = :name', { name: filter.name })\n .andWhere('event.createdAt > :since', { since });\n\n if (filter.actorName) {\n qb.andWhere('event.actorName = :actorName', { actorName: filter.actorName });\n }\n\n if (filter.requestIpAddress) {\n qb.andWhere('event.requestIpAddress = :requestIpAddress', { requestIpAddress: filter.requestIpAddress });\n }\n\n if (typeof filter.realmId !== 'undefined') {\n if (filter.realmId === null) {\n qb.andWhere('event.realmId IS NULL');\n } else {\n qb.andWhere('event.realmId = :realmId', { realmId: filter.realmId });\n }\n }\n\n return qb.getCount();\n }\n\n async deleteExpired(now: string): Promise<number> {\n const result = await this.repository.delete({\n expiring: true,\n expiresAt: LessThan(now),\n });\n\n return result.affected ?? 0;\n }\n}\n"],"mappings":";;;;;;;AAoBA,IAAaI,yBAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA+B;EACvC,KAAKA,aAAaA;CACtB;CAEAC,OAAOC,MAA6B;EAChC,OAAO,KAAKF,WAAWC,OAAOC,IAAAA;CAClC;CAEA,MAAMC,KAAKC,QAA+B;EACtC,OAAO,KAAKJ,WAAWG,KAAKC,MAAAA;CAChC;CAEA,MAAMC,YAAYC,IAAmC;EACjD,OAAO,KAAKN,WAAWO,UAAU,EAAED,GAAG,CAAA;CAC1C;CAEA,MAAME,SACFC,OACAC,UAAgC,CAAC,GACa;EAC9C,MAAMC,KAAK,KAAKX,WAAWY,mBAAmB,OAAA;EAE9C,MAAM,EAAEC,eAAejB,WAAWe,IAAIF,KAAAA;EAEtCX,sBAAsBa,IAAI,SAAS,CAAC,WAAW,WAAY,CAAA;EAE3D,IAAID,QAAQI,OAERH,GAAGI,SAAS,uEAAuE;GAC/EC,cAAcN,QAAQI,MAAMG;GAC5BC,gBAAgBR,QAAQI,MAAMK;EAClC,CAAA;EAGJ,IAAIT,QAAQU,SACRT,GAAGI,SAAS,iCAAiC,EAAEM,cAAcX,QAAQU,QAAQ,CAAA;EAGjF,IAAIV,QAAQY,YAAY;GACpB,MAAMC,cAAwB,CAAA;GAC9B,MAAMC,aAAsC,CAAC;GAC7C,MAAMC,WAAWf,QAAQY,WAAWG,SAC/BC,QAAQN,YAA+BA,YAAY,IAAA;GAExD,IAAIK,SAASE,SAAS,GAAG;IACrBJ,YAAYK,KAAK,wCAAA;IACjBJ,WAAWK,kBAAkBJ;GACjC;GACA,IAAIf,QAAQY,WAAWG,SAASK,SAAS,IAAA,GACrCP,YAAYK,KAAK,uBAAA;GAErB,IAAIlB,QAAQY,WAAWR,OAAO;IAC1BS,YAAYK,KAAK,2EAAA;IACjBJ,WAAWO,iBAAiBrB,QAAQY,WAAWR,MAAMG;IACrDO,WAAWQ,mBAAmBtB,QAAQY,WAAWR,MAAMK;GAC3D;GAEAR,GAAGI,SAAS,IAAIQ,YAAYI,SAAS,IAAIJ,YAAYU,KAAK,MAAA,IAAU,QAAQ,IAAIT,UAAAA;EACpF;EAEA,MAAM,CAACU,UAAUC,SAAS,MAAMxB,GAAGyB,gBAAe;EAElD,OAAO;GACHlC,MAAML,sBAAsBY,OAAOyB,QAAAA;GACnCG,MAAM;IACFF;IACA,GAAGtB;GACP;EACJ;CACJ;CAEA,MAAMyB,YAAYZ,QAAiD;EAU/D,MAAMa,QAAQ,IAAIC,KAAKd,OAAOa,KAAK,CAAA,CAAEE,YAAW,CAAA,CAAGC,QAAQ,KAAK,GAAA,CAAA,CAAKA,QAAQ,KAAK,EAAA;EAElF,MAAM/B,KAAK,KAAKX,WAAWY,mBAAmB,OAAA,CAAA,CACzC+B,MAAM,sBAAsB,EAAEC,MAAMlB,OAAOkB,KAAK,CAAA,CAAA,CAChD7B,SAAS,4BAA4B,EAAEwB,MAAM,CAAA;EAElD,IAAIb,OAAOmB,WACPlC,GAAGI,SAAS,gCAAgC,EAAE8B,WAAWnB,OAAOmB,UAAU,CAAA;EAG9E,IAAInB,OAAOoB,kBACPnC,GAAGI,SAAS,8CAA8C,EAAE+B,kBAAkBpB,OAAOoB,iBAAiB,CAAA;EAG1G,IAAI,OAAOpB,OAAON,YAAY,aAC1B,IAAIM,OAAON,YAAY,MACnBT,GAAGI,SAAS,uBAAA;OAEZJ,GAAGI,SAAS,4BAA4B,EAAEK,SAASM,OAAON,QAAQ,CAAA;EAI1E,OAAOT,GAAGoC,SAAQ;CACtB;CAEA,MAAMC,cAAcC,KAA8B;EAM9C,QAAOC,MALc,KAAKlD,WAAWmD,OAAO;GACxCC,UAAU;GACVC,WAAW1D,SAASsD,GAAAA;EACxB,CAAA,EAAA,CAEcK,YAAY;CAC9B;AACJ"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { IdentityProviderEntity } from "../../../../../adapters/database/domains/identity-provider/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 IdentityProviderRepositoryAdapter = 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","IdentityProviderEntity","isEntityUnique","translateWhereConditions","RealmRepositoryAdapter","IdentityProviderRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","save","saveWithEA","attributes","saveOneWithEA","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","findByProtocol","protocol","getMany","extendManyWithEA"],"sources":["../../../../../../src/app/modules/database/repositories/identity-provider/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 { IdentityProvider, IdentityProviderProtocol, Realm } 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 { IIdentityProviderRepository, IRealmRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport type { IdentityProviderRepository } from '../../../../../adapters/database/domains/index.ts';\nimport { IdentityProviderEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type IdentityProviderRepositoryAdapterContext = {\n repository: IdentityProviderRepository,\n realmRepository: Repository<Realm>,\n};\n\nexport class IdentityProviderRepositoryAdapter implements IIdentityProviderRepository {\n private readonly repository: IdentityProviderRepository;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: IdentityProviderRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<IdentityProvider>> {\n const qb = this.repository.createQueryBuilder('provider');\n qb.groupBy('provider.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 findOneById(id: string): Promise<IdentityProvider | null> {\n const entity = await this.findOneBy({ id });\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<IdentityProvider | null> {\n const qb = this.repository.createQueryBuilder('provider');\n qb.where('provider.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('provider.realmId = :realmId', { realmId });\n }\n\n const entity = await qb.getOne();\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<IdentityProvider | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<IdentityProvider[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<IdentityProvider | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<IdentityProvider>): IdentityProvider {\n return this.repository.create(data);\n }\n\n merge(entity: IdentityProvider, data: Partial<IdentityProvider>): IdentityProvider {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: IdentityProvider): Promise<IdentityProvider> {\n return this.repository.save(entity);\n }\n\n async saveWithEA(entity: IdentityProvider, attributes?: Record<string, any>): Promise<IdentityProvider> {\n await this.repository.saveOneWithEA(entity, attributes);\n return entity;\n }\n\n async extendOneWithEA(entity: IdentityProvider): Promise<void> {\n await this.repository.extendOneWithEA(entity);\n }\n\n async remove(entity: IdentityProvider): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<IdentityProvider>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: IdentityProviderEntity,\n });\n }\n\n async checkUniqueness(data: Partial<IdentityProvider>, existing?: IdentityProvider): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: IdentityProviderEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async findByProtocol(protocol: IdentityProviderProtocol, realmKey?: string): Promise<IdentityProvider[]> {\n const qb = this.repository.createQueryBuilder('provider');\n qb.where('provider.protocol = :protocol', { protocol });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return [];\n }\n qb.andWhere('provider.realmId = :realmId', { realmId });\n }\n\n const entities = await qb.getMany();\n await this.repository.extendManyWithEA(entities);\n return entities;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA0BA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","IdentityProviderEntity","isEntityUnique","translateWhereConditions","RealmRepositoryAdapter","IdentityProviderRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","save","saveWithEA","attributes","saveOneWithEA","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","findByProtocol","protocol","getMany","extendManyWithEA"],"sources":["../../../../../../src/app/modules/database/repositories/identity-provider/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 { IdentityProvider, IdentityProviderProtocol, Realm } 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 { IIdentityProviderRepository, IRealmRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport type { IdentityProviderRepository } from '../../../../../adapters/database/domains/index.ts';\nimport { IdentityProviderEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type IdentityProviderRepositoryAdapterContext = {\n repository: IdentityProviderRepository,\n realmRepository: Repository<Realm>,\n};\n\nexport class IdentityProviderRepositoryAdapter implements IIdentityProviderRepository {\n private readonly repository: IdentityProviderRepository;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: IdentityProviderRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<IdentityProvider>> {\n const qb = this.repository.createQueryBuilder('provider');\n qb.groupBy('provider.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 findOneById(id: string): Promise<IdentityProvider | null> {\n const entity = await this.findOneBy({ id });\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<IdentityProvider | null> {\n const qb = this.repository.createQueryBuilder('provider');\n qb.where('provider.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('provider.realmId = :realmId', { realmId });\n }\n\n const entity = await qb.getOne();\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<IdentityProvider | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<IdentityProvider[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<IdentityProvider | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<IdentityProvider>): IdentityProvider {\n return this.repository.create(data);\n }\n\n merge(entity: IdentityProvider, data: Partial<IdentityProvider>): IdentityProvider {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: IdentityProvider): Promise<IdentityProvider> {\n return this.repository.save(entity);\n }\n\n async saveWithEA(entity: IdentityProvider, attributes?: Record<string, any>): Promise<IdentityProvider> {\n await this.repository.saveOneWithEA(entity, attributes);\n return entity;\n }\n\n async extendOneWithEA(entity: IdentityProvider): Promise<void> {\n await this.repository.extendOneWithEA(entity);\n }\n\n async remove(entity: IdentityProvider): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<IdentityProvider>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: IdentityProviderEntity,\n });\n }\n\n async checkUniqueness(data: Partial<IdentityProvider>, existing?: IdentityProvider): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: IdentityProviderEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async findByProtocol(protocol: IdentityProviderProtocol, realmKey?: string): Promise<IdentityProvider[]> {\n const qb = this.repository.createQueryBuilder('provider');\n qb.where('provider.protocol = :protocol', { protocol });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return [];\n }\n qb.andWhere('provider.realmId = :realmId', { realmId });\n }\n\n const entities = await qb.getMany();\n await this.repository.extendManyWithEA(entities);\n return entities;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA0BA,IAAaS,oCAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAA+C;EACvD,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA0E;EACrF,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,UAAA;EAC9CD,GAAGE,QAAQ,aAAA;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;CAEA,MAAMM,YAAYC,IAA8C;EAC5D,MAAMC,SAAS,MAAM,KAAKC,UAAU,EAAEF,GAAG,CAAA;EACzC,IAAIC,QACA,MAAM,KAAKhB,WAAWkB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMG,cAAcC,MAAcC,UAAqD;EACnF,MAAMhB,KAAK,KAAKL,WAAWM,mBAAmB,UAAA;EAC9CD,GAAGiB,MAAM,yBAAyB,EAAEF,KAAK,CAAA;EAEzC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKtB,gBAAgBuB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXlB,GAAGoB,SAAS,+BAA+B,EAAEF,QAAQ,CAAA;EACzD;EAEA,MAAMP,SAAS,MAAMX,GAAGqB,OAAM;EAC9B,IAAIV,QACA,MAAM,KAAKhB,WAAWkB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMW,kBAAkBC,UAAkBC,OAAkD;EACxF,OAAOvC,OAAOsC,QAAAA,IACV,KAAKd,YAAYc,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWR,OAAyD;EACtE,OAAO,KAAKtB,WAAW+B,OAAOlC,yBAAyByB,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAA8D;EAC1E,OAAO,KAAKtB,WAAWiB,UAAUpB,yBAAyByB,KAAAA,CAAAA;CAC9D;CAEAU,OAAOpB,MAAmD;EACtD,OAAO,KAAKZ,WAAWgC,OAAOpB,IAAAA;CAClC;CAEAqB,MAAMjB,QAA0BJ,MAAmD;EAC/E,OAAO,KAAKZ,WAAWiC,MAAMjB,QAAQJ,IAAAA;CACzC;CAEA,MAAMsB,KAAKlB,QAAqD;EAC5D,OAAO,KAAKhB,WAAWkC,KAAKlB,MAAAA;CAChC;CAEA,MAAMmB,WAAWnB,QAA0BoB,YAA6D;EACpG,MAAM,KAAKpC,WAAWqC,cAAcrB,QAAQoB,UAAAA;EAC5C,OAAOpB;CACX;CAEA,MAAME,gBAAgBF,QAAyC;EAC3D,MAAM,KAAKhB,WAAWkB,gBAAgBF,MAAAA;CAC1C;CAEA,MAAMsB,OAAOtB,QAAyC;EAClD,MAAM,KAAKhB,WAAWsC,OAAOtB,MAAAA;CACjC;CAEA,MAAMuB,oBAAoB3B,MAAgD;EACtE,MAAMrB,0BAA0BqB,MAAM;GAClC4B,YAAY,KAAKxC,WAAWyC,QAAQC;GACpCC,cAAchD;EAClB,CAAA;CACJ;CAEA,MAAMiD,gBAAgBhC,MAAiCiC,UAA4C;EAQ/F,IAAI,CAACC,MAPkBlD,eAAe;GAClC4C,YAAY,KAAKxC,WAAWyC,QAAQC;GACpCC,cAAchD;GACdqB,QAAQJ;GACRmC,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAInD,sBAAAA;CAElB;CAEA,MAAMsD,eAAeC,UAAoC5B,UAAgD;EACrG,MAAMhB,KAAK,KAAKL,WAAWM,mBAAmB,UAAA;EAC9CD,GAAGiB,MAAM,iCAAiC,EAAE2B,SAAS,CAAA;EAErD,IAAI5B,UAAU;GACV,MAAME,UAAU,MAAM,KAAKtB,gBAAgBuB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO,CAAA;GAEXlB,GAAGoB,SAAS,+BAA+B,EAAEF,QAAQ,CAAA;EACzD;EAEA,MAAMd,WAAW,MAAMJ,GAAG6C,QAAO;EACjC,MAAM,KAAKlD,WAAWmD,iBAAiB1C,QAAAA;EACvC,OAAOA;CACX;AACJ"}
|
package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { IdentityProviderRoleMappingEntity } from "../../../../../adapters/database/domains/identity-provider-role-mapping/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/identity-provider-role-mapping/repository.ts
|
|
@@ -18,7 +18,7 @@ var IdentityProviderRoleMappingRepositoryAdapter = 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
|
package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","IdentityProviderRoleMappingEntity","translateWhereConditions","IdentityProviderRoleMappingRepositoryAdapter","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/identity-provider-role-mapping/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 { IdentityProviderRoleMapping } 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 { IIdentityProviderRoleMappingRepository } from '../../../../../core/index.ts';\nimport { IdentityProviderRoleMappingEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class IdentityProviderRoleMappingRepositoryAdapter implements IIdentityProviderRoleMappingRepository {\n private readonly repository: Repository<IdentityProviderRoleMapping>;\n\n constructor(repository: Repository<IdentityProviderRoleMapping>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<IdentityProviderRoleMapping>> {\n const qb = this.repository.createQueryBuilder('providerRole');\n qb.groupBy('providerRole.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<IdentityProviderRoleMapping | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<IdentityProviderRoleMapping | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<IdentityProviderRoleMapping | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<IdentityProviderRoleMapping[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<IdentityProviderRoleMapping | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<IdentityProviderRoleMapping>): IdentityProviderRoleMapping {\n return this.repository.create(data);\n }\n\n merge(entity: IdentityProviderRoleMapping, data: Partial<IdentityProviderRoleMapping>): IdentityProviderRoleMapping {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: IdentityProviderRoleMapping): Promise<IdentityProviderRoleMapping> {\n return this.repository.save(entity);\n }\n\n async remove(entity: IdentityProviderRoleMapping): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<IdentityProviderRoleMapping>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: IdentityProviderRoleMappingEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","IdentityProviderRoleMappingEntity","translateWhereConditions","IdentityProviderRoleMappingRepositoryAdapter","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/identity-provider-role-mapping/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 { IdentityProviderRoleMapping } 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 { IIdentityProviderRoleMappingRepository } from '../../../../../core/index.ts';\nimport { IdentityProviderRoleMappingEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class IdentityProviderRoleMappingRepositoryAdapter implements IIdentityProviderRoleMappingRepository {\n private readonly repository: Repository<IdentityProviderRoleMapping>;\n\n constructor(repository: Repository<IdentityProviderRoleMapping>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<IdentityProviderRoleMapping>> {\n const qb = this.repository.createQueryBuilder('providerRole');\n qb.groupBy('providerRole.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<IdentityProviderRoleMapping | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<IdentityProviderRoleMapping | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<IdentityProviderRoleMapping | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<IdentityProviderRoleMapping[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<IdentityProviderRoleMapping | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<IdentityProviderRoleMapping>): IdentityProviderRoleMapping {\n return this.repository.create(data);\n }\n\n merge(entity: IdentityProviderRoleMapping, data: Partial<IdentityProviderRoleMapping>): IdentityProviderRoleMapping {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: IdentityProviderRoleMapping): Promise<IdentityProviderRoleMapping> {\n return this.repository.save(entity);\n }\n\n async remove(entity: IdentityProviderRoleMapping): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<IdentityProviderRoleMapping>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: IdentityProviderRoleMappingEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,+CAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAqD;EAC7D,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAqF;EAChG,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,cAAA;EAC9CD,GAAGE,QAAQ,iBAAA;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,IAAyD;EACjE,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,gBAA6D;EAC/D,OAAO;CACX;CAEA,MAAMC,kBAAkBC,UAA+D;EACnF,OAAO,KAAKL,YAAYK,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAoE;EACjF,OAAO,KAAKnB,WAAWoB,OAAOtB,yBAAyBqB,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAAyE;EACrF,OAAO,KAAKnB,WAAWc,UAAUhB,yBAAyBqB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOX,MAAyE;EAC5E,OAAO,KAAKV,WAAWqB,OAAOX,IAAAA;CAClC;CAEAY,MAAMC,QAAqCb,MAAyE;EAChH,OAAO,KAAKV,WAAWsB,MAAMC,QAAQb,IAAAA;CACzC;CAEA,MAAMc,KAAKD,QAA2E;EAClF,OAAO,KAAKvB,WAAWwB,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAoD;EAC7D,MAAM,KAAKvB,WAAWyB,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBhB,MAA2D;EACjF,MAAMhB,0BAA0BgB,MAAM;GAClCiB,YAAY,KAAK3B,WAAW4B,QAAQC;GACpCC,cAAcjC;EAClB,CAAA;CACJ;AACJ"}
|
|
@@ -7,7 +7,7 @@ import { UserAuthenticatorEntity } from "../../../../../adapters/database/domain
|
|
|
7
7
|
import "../../../../../core/key/constants.mjs";
|
|
8
8
|
import { isWrappedKeyMaterial, unwrapKeyMaterial, wrapKeyMaterial } from "../../../../../core/key/wrap.mjs";
|
|
9
9
|
import "../../../../../core/index.mjs";
|
|
10
|
-
import { applyQuery } from "../query.mjs";
|
|
10
|
+
import { applyQuery, redactFieldConditions } from "../query.mjs";
|
|
11
11
|
import { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from "../helpers.mjs";
|
|
12
12
|
import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
|
|
13
13
|
import "../../../../../adapters/database/index.mjs";
|
|
@@ -162,7 +162,7 @@ import { validateEntityJoinColumns } from "typeorm-extension";
|
|
|
162
162
|
applyRealmScopeSelect(qb, "keyEntity");
|
|
163
163
|
const [entities, total] = await qb.getManyAndCount();
|
|
164
164
|
return {
|
|
165
|
-
data: entities,
|
|
165
|
+
data: redactFieldConditions(query, entities),
|
|
166
166
|
meta: {
|
|
167
167
|
total,
|
|
168
168
|
...pagination
|