@authup/server-core 1.0.0-beta.37 → 1.0.0-beta.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/database/data-source/options/module.mjs +16 -16
- package/dist/adapters/database/domains/client/index.d.ts +0 -1
- package/dist/adapters/database/domains/client/index.d.ts.map +1 -1
- package/dist/adapters/database/domains/client/index.mjs +1 -2
- package/dist/adapters/database/domains/index.mjs +26 -28
- package/dist/adapters/database/domains/policy/repository.mjs +1 -1
- package/dist/adapters/database/domains/robot/index.d.ts +0 -1
- package/dist/adapters/database/domains/robot/index.d.ts.map +1 -1
- package/dist/adapters/database/domains/robot/index.mjs +1 -2
- package/dist/adapters/database/domains/role/repository.d.ts +0 -6
- package/dist/adapters/database/domains/role/repository.d.ts.map +1 -1
- package/dist/adapters/database/domains/role/repository.mjs +1 -58
- package/dist/adapters/database/domains/role/repository.mjs.map +1 -1
- package/dist/adapters/database/domains/role-permission/entity.mjs +1 -1
- package/dist/adapters/database/domains/user/repository.d.ts +1 -5
- package/dist/adapters/database/domains/user/repository.d.ts.map +1 -1
- package/dist/adapters/database/domains/user/repository.mjs +0 -60
- package/dist/adapters/database/domains/user/repository.mjs.map +1 -1
- package/dist/adapters/database/extra-attribute-repository/tree/repository.d.ts.map +1 -1
- package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs +1 -0
- package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs.map +1 -1
- package/dist/adapters/database/index.mjs +18 -20
- package/dist/adapters/http/adapters/index.mjs +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +10 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +5 -13
- package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +11 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +5 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +19 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +6 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts +15 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts.map +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +57 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs.map +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
- package/dist/adapters/http/adapters/oauth2/index.mjs +2 -1
- package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/client/module.mjs +1 -1
- package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +1 -1
- package/dist/adapters/http/controllers/entities/permission/module.mjs +1 -1
- package/dist/adapters/http/controllers/entities/policy/module.mjs +1 -1
- package/dist/adapters/http/controllers/entities/policy/utils/attributes-validator.mjs +1 -1
- package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs +1 -1
- package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/robot/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/robot/module.mjs +1 -1
- package/dist/adapters/http/controllers/entities/robot/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs +5 -6
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs +4 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts +2 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
- package/dist/adapters/http/index.mjs +2 -1
- package/dist/adapters/http/middleware/built-in/assets.mjs +3 -3
- package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
- package/dist/app/modules/database/repositories/bindings.d.ts +17 -0
- package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -0
- package/dist/app/modules/database/repositories/bindings.mjs +40 -0
- package/dist/app/modules/database/repositories/bindings.mjs.map +1 -0
- package/dist/app/modules/database/repositories/client/repository.d.ts +5 -1
- package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/client/repository.mjs +69 -1
- package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/permission/repository.mjs +1 -1
- package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/policy/repository.mjs +1 -1
- package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/realm/repository.mjs +1 -1
- package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/robot/repository.d.ts +5 -1
- package/dist/app/modules/database/repositories/robot/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/robot/repository.mjs +61 -1
- package/dist/app/modules/database/repositories/robot/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/role/repository.d.ts +3 -0
- package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/role/repository.mjs +17 -1
- package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/scope/repository.mjs +1 -1
- package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/user/repository.d.ts +4 -1
- package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/user/repository.mjs +31 -2
- package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
- package/dist/app/modules/http/modules/controller.d.ts +1 -2
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +32 -34
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
- package/dist/app/modules/http/modules/middleware.mjs +2 -15
- package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
- package/dist/app/modules/identity/constants.d.ts +3 -1
- package/dist/app/modules/identity/constants.d.ts.map +1 -1
- package/dist/app/modules/identity/constants.mjs +2 -0
- package/dist/app/modules/identity/constants.mjs.map +1 -1
- package/dist/app/modules/identity/module.d.ts.map +1 -1
- package/dist/app/modules/identity/module.mjs +42 -5
- package/dist/app/modules/identity/module.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/client.d.ts +2 -2
- package/dist/app/modules/identity/repositories/client.d.ts.map +1 -1
- package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/robot.d.ts +2 -2
- package/dist/app/modules/identity/repositories/robot.d.ts.map +1 -1
- package/dist/app/modules/identity/repositories/robot.mjs.map +1 -1
- package/dist/app/modules/oauth2/module.d.ts.map +1 -1
- package/dist/app/modules/oauth2/module.mjs +5 -2
- package/dist/app/modules/oauth2/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +14 -9
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.mjs +66 -10
- package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
- package/dist/components/database/unique-entries/module.mjs +1 -1
- package/dist/core/entities/client/service.d.ts +1 -1
- package/dist/core/entities/client/service.d.ts.map +1 -1
- package/dist/core/entities/client/service.mjs +27 -23
- package/dist/core/entities/client/service.mjs.map +1 -1
- package/dist/core/entities/client/types.d.ts +6 -2
- package/dist/core/entities/client/types.d.ts.map +1 -1
- package/dist/core/entities/client-scope/service.d.ts.map +1 -1
- package/dist/core/entities/client-scope/service.mjs +2 -0
- package/dist/core/entities/client-scope/service.mjs.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.mjs +2 -0
- package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
- package/dist/core/entities/permission/service.mjs +1 -1
- package/dist/core/entities/policy/attributes-validator.mjs +1 -1
- package/dist/core/entities/policy/service.mjs +1 -1
- package/dist/core/entities/realm/service.mjs +1 -1
- package/dist/core/entities/robot/service.d.ts +1 -1
- package/dist/core/entities/robot/service.d.ts.map +1 -1
- package/dist/core/entities/robot/service.mjs +41 -26
- package/dist/core/entities/robot/service.mjs.map +1 -1
- package/dist/core/entities/robot/types.d.ts +6 -2
- package/dist/core/entities/robot/types.d.ts.map +1 -1
- package/dist/core/entities/role/service.mjs +1 -1
- package/dist/core/entities/role/types.d.ts +3 -0
- package/dist/core/entities/role/types.d.ts.map +1 -1
- package/dist/core/entities/role-attribute/service.d.ts +2 -0
- package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/role-attribute/service.mjs +7 -3
- package/dist/core/entities/role-attribute/service.mjs.map +1 -1
- package/dist/core/entities/scope/service.mjs +1 -1
- package/dist/core/entities/user/service.d.ts.map +1 -1
- package/dist/core/entities/user/service.mjs +20 -25
- package/dist/core/entities/user/service.mjs.map +1 -1
- package/dist/core/entities/user/types.d.ts +4 -1
- package/dist/core/entities/user/types.d.ts.map +1 -1
- package/dist/core/entities/user-attribute/service.d.ts +3 -1
- package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/user-attribute/service.mjs +44 -17
- package/dist/core/entities/user-attribute/service.mjs.map +1 -1
- package/dist/core/identity/index.d.ts +1 -0
- package/dist/core/identity/index.d.ts.map +1 -1
- package/dist/core/identity/index.mjs +2 -1
- package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
- package/dist/core/identity/password-recovery/service.mjs +4 -4
- package/dist/core/identity/password-recovery/service.mjs.map +1 -1
- package/dist/core/identity/permission/module.d.ts +12 -6
- package/dist/core/identity/permission/module.d.ts.map +1 -1
- package/dist/core/identity/permission/module.mjs +11 -19
- package/dist/core/identity/permission/module.mjs.map +1 -1
- package/dist/core/identity/permission/types.d.ts +11 -13
- package/dist/core/identity/permission/types.d.ts.map +1 -1
- package/dist/core/identity/provider/account/module.d.ts.map +1 -1
- package/dist/core/identity/provider/account/module.mjs +3 -2
- package/dist/core/identity/provider/account/module.mjs.map +1 -1
- package/dist/core/identity/role/index.d.ts +3 -0
- package/dist/core/identity/role/index.d.ts.map +1 -0
- package/dist/core/identity/role/index.mjs +2 -0
- package/dist/core/identity/role/module.d.ts +15 -0
- package/dist/core/identity/role/module.d.ts.map +1 -0
- package/dist/core/identity/role/module.mjs +27 -0
- package/dist/core/identity/role/module.mjs.map +1 -0
- package/dist/core/identity/role/types.d.ts +14 -0
- package/dist/core/identity/role/types.d.ts.map +1 -0
- package/dist/core/identity/role/types.mjs +1 -0
- package/dist/core/index.mjs +3 -1
- package/dist/core/oauth2/authorization/code/verifier/module.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code/verifier/module.mjs +8 -4
- package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
- package/dist/core/oauth2/authorization/code/verifier/types.d.ts +2 -0
- package/dist/core/oauth2/authorization/code/verifier/types.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +7 -1
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
- package/dist/core/oauth2/client/authenticator.d.ts +17 -0
- package/dist/core/oauth2/client/authenticator.d.ts.map +1 -0
- package/dist/core/oauth2/client/authenticator.mjs +34 -0
- package/dist/core/oauth2/client/authenticator.mjs.map +1 -0
- package/dist/core/oauth2/client/index.d.ts +1 -0
- package/dist/core/oauth2/client/index.d.ts.map +1 -1
- package/dist/core/oauth2/client/index.mjs +2 -1
- package/dist/core/oauth2/grant-types/password.d.ts +7 -3
- package/dist/core/oauth2/grant-types/password.d.ts.map +1 -1
- package/dist/core/oauth2/grant-types/password.mjs +9 -7
- package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/core/oauth2/index.mjs +3 -1
- package/dist/core/oauth2/token/issuer/access/module.d.ts +4 -1
- package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
- package/dist/core/oauth2/token/issuer/access/module.mjs +24 -2
- package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
- package/dist/core/oauth2/token/issuer/base.d.ts.map +1 -1
- package/dist/core/oauth2/token/issuer/base.mjs +3 -2
- package/dist/core/oauth2/token/issuer/base.mjs.map +1 -1
- package/dist/core/provisioning/entities/permission/types.d.ts +8 -0
- package/dist/core/provisioning/entities/permission/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/permission/module.d.ts +5 -1
- package/dist/core/provisioning/synchronizer/permission/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs +23 -0
- package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/permission/types.d.ts +4 -1
- package/dist/core/provisioning/synchronizer/permission/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/policy/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/policy/module.mjs +4 -2
- package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
- package/dist/index.mjs +19 -20
- package/dist/path.d.ts +2 -1
- package/dist/path.d.ts.map +1 -1
- package/dist/path.mjs +3 -2
- package/dist/path.mjs.map +1 -1
- package/dist/swagger.json +14 -0
- package/dist/ui/client/.vite/ssr-manifest.json +2777 -0
- package/dist/ui/client/assets/fa-brands-400-BP5tdqmh.woff2 +0 -0
- package/dist/ui/client/assets/fa-regular-400-nyy7hhHF.woff2 +0 -0
- package/dist/ui/client/assets/fa-solid-900-DRAAbZTg.woff2 +0 -0
- package/dist/ui/client/assets/index-BVfayRKv.css +1 -0
- package/dist/ui/client/assets/index-Noe7uiOY.js +41 -0
- package/dist/ui/client/index.html +22 -0
- package/dist/ui/server/assets/multipart-parser-pHQi-kA6.js +166 -0
- package/dist/ui/server/server.js +79116 -0
- package/package.json +30 -13
- package/dist/adapters/database/domains/client/repository.d.ts +0 -13
- package/dist/adapters/database/domains/client/repository.d.ts.map +0 -1
- package/dist/adapters/database/domains/client/repository.mjs +0 -75
- package/dist/adapters/database/domains/client/repository.mjs.map +0 -1
- package/dist/adapters/database/domains/robot/repository.d.ts +0 -13
- package/dist/adapters/database/domains/robot/repository.d.ts.map +0 -1
- package/dist/adapters/database/domains/robot/repository.mjs +0 -75
- package/dist/adapters/database/domains/robot/repository.mjs.map +0 -1
- package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts +0 -4
- package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts.map +0 -1
- package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs +0 -35
- package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs.map +0 -1
|
@@ -2,6 +2,12 @@ import { RealmEntity } from "../../domains/realm/entity.mjs";
|
|
|
2
2
|
import { RealmSubscriber } from "../../domains/realm/subscriber.mjs";
|
|
3
3
|
import { KeyEntity } from "../../domains/key/entity.mjs";
|
|
4
4
|
import { ClientEntity } from "../../domains/client/entity.mjs";
|
|
5
|
+
import { ClientSubscriber } from "../../domains/client/subscriber.mjs";
|
|
6
|
+
import { RoleEntity } from "../../domains/role/entity.mjs";
|
|
7
|
+
import { RoleAttributeEntity } from "../../domains/role-attribute/entity.mjs";
|
|
8
|
+
import { RoleSubscriber } from "../../domains/role/subscriber.mjs";
|
|
9
|
+
import { ClientRoleEntity } from "../../domains/client-role/entity.mjs";
|
|
10
|
+
import { ClientRoleSubscriber } from "../../domains/client-role/subscriber.mjs";
|
|
5
11
|
import { PermissionEntity } from "../../domains/permission/entity.mjs";
|
|
6
12
|
import { PermissionSubscriber } from "../../domains/permission/subscriber.mjs";
|
|
7
13
|
import { PolicyEntity } from "../../domains/policy/entity.mjs";
|
|
@@ -10,14 +16,6 @@ import { PolicyAttributeSubscriber } from "../../domains/policy-attribute/subscr
|
|
|
10
16
|
import { PolicySubscriber } from "../../domains/policy/subscriber.mjs";
|
|
11
17
|
import { ClientPermissionEntity } from "../../domains/client-permission/entity.mjs";
|
|
12
18
|
import { ClientPermissionSubscriber } from "../../domains/client-permission/subscriber.mjs";
|
|
13
|
-
import { RoleEntity } from "../../domains/role/entity.mjs";
|
|
14
|
-
import { RoleAttributeEntity } from "../../domains/role-attribute/entity.mjs";
|
|
15
|
-
import { RolePermissionEntity } from "../../domains/role-permission/entity.mjs";
|
|
16
|
-
import { RolePermissionSubscriber } from "../../domains/role-permission/subscriber.mjs";
|
|
17
|
-
import { RoleSubscriber } from "../../domains/role/subscriber.mjs";
|
|
18
|
-
import { ClientRoleEntity } from "../../domains/client-role/entity.mjs";
|
|
19
|
-
import { ClientRoleSubscriber } from "../../domains/client-role/subscriber.mjs";
|
|
20
|
-
import { ClientSubscriber } from "../../domains/client/subscriber.mjs";
|
|
21
19
|
import { ScopeEntity } from "../../domains/scope/entity.mjs";
|
|
22
20
|
import { ScopeSubscriber } from "../../domains/scope/subscriber.mjs";
|
|
23
21
|
import { ClientScopeEntity } from "../../domains/client-scope/entity.mjs";
|
|
@@ -29,10 +27,6 @@ import { IdentityProviderSubscriber } from "../../domains/identity-provider/subs
|
|
|
29
27
|
import { UserEntity } from "../../domains/user/entity.mjs";
|
|
30
28
|
import { UserAttributeEntity } from "../../domains/user-attribute/entity.mjs";
|
|
31
29
|
import { UserAttributeSubscriber } from "../../domains/user-attribute/subscriber.mjs";
|
|
32
|
-
import { UserPermissionEntity } from "../../domains/user-permission/entity.mjs";
|
|
33
|
-
import { UserPermissionSubscriber } from "../../domains/user-permission/subscriber.mjs";
|
|
34
|
-
import { UserRoleEntity } from "../../domains/user-role/entity.mjs";
|
|
35
|
-
import { UserRoleSubscriber } from "../../domains/user-role/subscriber.mjs";
|
|
36
30
|
import { UserSubscriber } from "../../domains/user/subscriber.mjs";
|
|
37
31
|
import { IdentityProviderAccountEntity } from "../../domains/identity-provider-account/entity.mjs";
|
|
38
32
|
import { IdentityProviderAccountSubscriber } from "../../domains/identity-provider-account/subscriber.mjs";
|
|
@@ -41,14 +35,20 @@ import { IdentityProviderPermissionMappingEntity } from "../../domains/identity-
|
|
|
41
35
|
import { IdentityProviderRoleMappingEntity } from "../../domains/identity-provider-role-mapping/entity.mjs";
|
|
42
36
|
import { IdentityProviderRoleSubscriber } from "../../domains/identity-provider-role-mapping/subscriber.mjs";
|
|
43
37
|
import { RobotEntity } from "../../domains/robot/entity.mjs";
|
|
44
|
-
import { RobotRoleEntity } from "../../domains/robot-role/entity.mjs";
|
|
45
|
-
import { RobotRoleSubscriber } from "../../domains/robot-role/subscriber.mjs";
|
|
46
|
-
import { RobotPermissionEntity } from "../../domains/robot-permission/entity.mjs";
|
|
47
|
-
import { RobotPermissionSubscriber } from "../../domains/robot-permission/subscriber.mjs";
|
|
48
38
|
import { RobotSubscriber } from "../../domains/robot/subscriber.mjs";
|
|
49
39
|
import { SessionEntity } from "../../domains/session/entity.mjs";
|
|
50
40
|
import { PermissionPolicyEntity } from "../../domains/permission-policy/entity.mjs";
|
|
41
|
+
import { RobotPermissionEntity } from "../../domains/robot-permission/entity.mjs";
|
|
42
|
+
import { RobotPermissionSubscriber } from "../../domains/robot-permission/subscriber.mjs";
|
|
43
|
+
import { RobotRoleEntity } from "../../domains/robot-role/entity.mjs";
|
|
44
|
+
import { RobotRoleSubscriber } from "../../domains/robot-role/subscriber.mjs";
|
|
51
45
|
import { RoleAttributeSubscriber } from "../../domains/role-attribute/subscriber.mjs";
|
|
46
|
+
import { RolePermissionEntity } from "../../domains/role-permission/entity.mjs";
|
|
47
|
+
import { RolePermissionSubscriber } from "../../domains/role-permission/subscriber.mjs";
|
|
48
|
+
import { UserPermissionEntity } from "../../domains/user-permission/entity.mjs";
|
|
49
|
+
import { UserPermissionSubscriber } from "../../domains/user-permission/subscriber.mjs";
|
|
50
|
+
import { UserRoleEntity } from "../../domains/user-role/entity.mjs";
|
|
51
|
+
import { UserRoleSubscriber } from "../../domains/user-role/subscriber.mjs";
|
|
52
52
|
import "../../domains/index.mjs";
|
|
53
53
|
import { AuthupError } from "@authup/errors";
|
|
54
54
|
import { CodeTransformation, isCodeTransformation, readDataSourceOptionsFromEnv, transformFilePath } from "typeorm-extension";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/client/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/client/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
|
|
@@ -6,6 +6,16 @@ import "./realm/index.mjs";
|
|
|
6
6
|
import { KeyEntity } from "./key/entity.mjs";
|
|
7
7
|
import "./key/index.mjs";
|
|
8
8
|
import { ClientEntity } from "./client/entity.mjs";
|
|
9
|
+
import { ClientSubscriber } from "./client/subscriber.mjs";
|
|
10
|
+
import "./client/index.mjs";
|
|
11
|
+
import { RoleEntity } from "./role/entity.mjs";
|
|
12
|
+
import { RoleAttributeEntity } from "./role-attribute/entity.mjs";
|
|
13
|
+
import { RoleRepository } from "./role/repository.mjs";
|
|
14
|
+
import { RoleSubscriber } from "./role/subscriber.mjs";
|
|
15
|
+
import "./role/index.mjs";
|
|
16
|
+
import { ClientRoleEntity } from "./client-role/entity.mjs";
|
|
17
|
+
import { ClientRoleSubscriber } from "./client-role/subscriber.mjs";
|
|
18
|
+
import "./client-role/index.mjs";
|
|
9
19
|
import { PermissionEntity } from "./permission/entity.mjs";
|
|
10
20
|
import { PermissionSubscriber } from "./permission/subscriber.mjs";
|
|
11
21
|
import "./permission/index.mjs";
|
|
@@ -19,20 +29,6 @@ import "./policy/index.mjs";
|
|
|
19
29
|
import { ClientPermissionEntity } from "./client-permission/entity.mjs";
|
|
20
30
|
import { ClientPermissionSubscriber } from "./client-permission/subscriber.mjs";
|
|
21
31
|
import "./client-permission/index.mjs";
|
|
22
|
-
import { RoleEntity } from "./role/entity.mjs";
|
|
23
|
-
import { RoleAttributeEntity } from "./role-attribute/entity.mjs";
|
|
24
|
-
import { RolePermissionEntity } from "./role-permission/entity.mjs";
|
|
25
|
-
import { RolePermissionSubscriber } from "./role-permission/subscriber.mjs";
|
|
26
|
-
import "./role-permission/index.mjs";
|
|
27
|
-
import { RoleRepository } from "./role/repository.mjs";
|
|
28
|
-
import { RoleSubscriber } from "./role/subscriber.mjs";
|
|
29
|
-
import "./role/index.mjs";
|
|
30
|
-
import { ClientRoleEntity } from "./client-role/entity.mjs";
|
|
31
|
-
import { ClientRoleSubscriber } from "./client-role/subscriber.mjs";
|
|
32
|
-
import "./client-role/index.mjs";
|
|
33
|
-
import { ClientRepository } from "./client/repository.mjs";
|
|
34
|
-
import { ClientSubscriber } from "./client/subscriber.mjs";
|
|
35
|
-
import "./client/index.mjs";
|
|
36
32
|
import { ScopeEntity } from "./scope/entity.mjs";
|
|
37
33
|
import { ScopeSubscriber } from "./scope/subscriber.mjs";
|
|
38
34
|
import "./scope/index.mjs";
|
|
@@ -50,12 +46,6 @@ import { UserEntity } from "./user/entity.mjs";
|
|
|
50
46
|
import { UserAttributeEntity } from "./user-attribute/entity.mjs";
|
|
51
47
|
import { UserAttributeSubscriber } from "./user-attribute/subscriber.mjs";
|
|
52
48
|
import "./user-attribute/index.mjs";
|
|
53
|
-
import { UserPermissionEntity } from "./user-permission/entity.mjs";
|
|
54
|
-
import { UserPermissionSubscriber } from "./user-permission/subscriber.mjs";
|
|
55
|
-
import "./user-permission/index.mjs";
|
|
56
|
-
import { UserRoleEntity } from "./user-role/entity.mjs";
|
|
57
|
-
import { UserRoleSubscriber } from "./user-role/subscriber.mjs";
|
|
58
|
-
import "./user-role/index.mjs";
|
|
59
49
|
import { UserRepository } from "./user/repository.mjs";
|
|
60
50
|
import { UserSubscriber } from "./user/subscriber.mjs";
|
|
61
51
|
import "./user/index.mjs";
|
|
@@ -70,19 +60,27 @@ import { IdentityProviderRoleMappingEntity } from "./identity-provider-role-mapp
|
|
|
70
60
|
import { IdentityProviderRoleSubscriber } from "./identity-provider-role-mapping/subscriber.mjs";
|
|
71
61
|
import "./identity-provider-role-mapping/index.mjs";
|
|
72
62
|
import { RobotEntity } from "./robot/entity.mjs";
|
|
73
|
-
import { RobotRoleEntity } from "./robot-role/entity.mjs";
|
|
74
|
-
import { RobotRoleSubscriber } from "./robot-role/subscriber.mjs";
|
|
75
|
-
import "./robot-role/index.mjs";
|
|
76
|
-
import { RobotPermissionEntity } from "./robot-permission/entity.mjs";
|
|
77
|
-
import { RobotPermissionSubscriber } from "./robot-permission/subscriber.mjs";
|
|
78
|
-
import "./robot-permission/index.mjs";
|
|
79
|
-
import { RobotRepository } from "./robot/repository.mjs";
|
|
80
63
|
import { RobotSubscriber } from "./robot/subscriber.mjs";
|
|
81
64
|
import "./robot/index.mjs";
|
|
82
65
|
import { SessionEntity } from "./session/entity.mjs";
|
|
83
66
|
import "./session/index.mjs";
|
|
84
67
|
import { PermissionPolicyEntity } from "./permission-policy/entity.mjs";
|
|
85
68
|
import "./permission-policy/index.mjs";
|
|
69
|
+
import { RobotPermissionEntity } from "./robot-permission/entity.mjs";
|
|
70
|
+
import { RobotPermissionSubscriber } from "./robot-permission/subscriber.mjs";
|
|
71
|
+
import "./robot-permission/index.mjs";
|
|
72
|
+
import { RobotRoleEntity } from "./robot-role/entity.mjs";
|
|
73
|
+
import { RobotRoleSubscriber } from "./robot-role/subscriber.mjs";
|
|
74
|
+
import "./robot-role/index.mjs";
|
|
86
75
|
import { RoleAttributeSubscriber } from "./role-attribute/subscriber.mjs";
|
|
87
76
|
import "./role-attribute/index.mjs";
|
|
88
|
-
|
|
77
|
+
import { RolePermissionEntity } from "./role-permission/entity.mjs";
|
|
78
|
+
import { RolePermissionSubscriber } from "./role-permission/subscriber.mjs";
|
|
79
|
+
import "./role-permission/index.mjs";
|
|
80
|
+
import { UserPermissionEntity } from "./user-permission/entity.mjs";
|
|
81
|
+
import { UserPermissionSubscriber } from "./user-permission/subscriber.mjs";
|
|
82
|
+
import "./user-permission/index.mjs";
|
|
83
|
+
import { UserRoleEntity } from "./user-role/entity.mjs";
|
|
84
|
+
import { UserRoleSubscriber } from "./user-role/subscriber.mjs";
|
|
85
|
+
import "./user-role/index.mjs";
|
|
86
|
+
export { CachePrefix, ClientEntity, ClientPermissionEntity, ClientPermissionSubscriber, ClientRoleEntity, ClientRoleSubscriber, ClientScopeEntity, ClientScopeSubscriber, ClientSubscriber, IdentityProviderAccountEntity, IdentityProviderAccountSubscriber, IdentityProviderAttributeEntity, IdentityProviderAttributeMappingEntity, IdentityProviderAttributeSubscriber, IdentityProviderEntity, IdentityProviderPermissionMappingEntity, IdentityProviderRepository, IdentityProviderRoleMappingEntity, IdentityProviderRoleSubscriber, IdentityProviderSubscriber, KeyEntity, PermissionEntity, PermissionPolicyEntity, PermissionSubscriber, PolicyAttributeEntity, PolicyAttributeSubscriber, PolicyEntity, PolicyRepository, PolicySubscriber, RealmEntity, RealmRepository, RealmSubscriber, RobotEntity, RobotPermissionEntity, RobotPermissionSubscriber, RobotRoleEntity, RobotRoleSubscriber, RobotSubscriber, RoleAttributeEntity, RoleAttributeSubscriber, RoleEntity, RolePermissionEntity, RolePermissionSubscriber, RoleRepository, RoleSubscriber, ScopeEntity, ScopeSubscriber, SessionEntity, UserAttributeEntity, UserAttributeSubscriber, UserEntity, UserPermissionEntity, UserPermissionSubscriber, UserRepository, UserRoleEntity, UserRoleSubscriber, UserSubscriber };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CachePrefix } from "../constants.mjs";
|
|
2
|
-
import { PolicyEntity } from "./entity.mjs";
|
|
3
2
|
import { EATreeRepository } from "../../extra-attribute-repository/tree/repository.mjs";
|
|
4
3
|
import "../../extra-attribute-repository/index.mjs";
|
|
4
|
+
import { PolicyEntity } from "./entity.mjs";
|
|
5
5
|
import { PolicyAttributeEntity } from "../policy-attribute/entity.mjs";
|
|
6
6
|
import "../policy-attribute/index.mjs";
|
|
7
7
|
import { EntityNotFoundError } from "typeorm";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/robot/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/robot/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import type { DataSource, EntityManager } from 'typeorm';
|
|
2
|
-
import type { Role } from '@authup/core-kit';
|
|
3
|
-
import type { PermissionPolicyBinding } from '@authup/access';
|
|
4
2
|
import { EARepository } from '../../extra-attribute-repository/index.ts';
|
|
5
3
|
import { RoleAttributeEntity } from '../role-attribute/entity.ts';
|
|
6
4
|
import { RoleEntity } from './entity.ts';
|
|
7
5
|
export declare class RoleRepository extends EARepository<RoleEntity, RoleAttributeEntity> {
|
|
8
6
|
constructor(instance: DataSource | EntityManager);
|
|
9
|
-
getBoundPermissionsForMany(ids: (string | Role)[]): Promise<PermissionPolicyBinding[]>;
|
|
10
|
-
clearBoundPermissionsCache(entity: string | Role): Promise<void>;
|
|
11
|
-
getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]>;
|
|
12
|
-
private loadPolicyTrees;
|
|
13
7
|
}
|
|
14
8
|
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/role/repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/role/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qBAAa,cAAe,SAAQ,YAAY,CAAC,UAAU,EAAE,mBAAmB,CAAC;gBACjE,QAAQ,EAAE,UAAU,GAAG,aAAa;CAenD"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import { CachePrefix } from "../constants.mjs";
|
|
2
|
+
import { RoleEntity } from "./entity.mjs";
|
|
2
3
|
import { EARepository } from "../../extra-attribute-repository/repository.mjs";
|
|
3
4
|
import "../../extra-attribute-repository/index.mjs";
|
|
4
|
-
import { PolicyRepository } from "../policy/repository.mjs";
|
|
5
|
-
import "../policy/index.mjs";
|
|
6
|
-
import { RoleEntity } from "./entity.mjs";
|
|
7
5
|
import { RoleAttributeEntity } from "../role-attribute/entity.mjs";
|
|
8
|
-
import { RolePermissionEntity } from "../role-permission/entity.mjs";
|
|
9
|
-
import "../role-permission/index.mjs";
|
|
10
|
-
import { buildRedisKeyPath } from "@authup/server-kit";
|
|
11
6
|
//#region src/adapters/database/domains/role/repository.ts
|
|
12
7
|
var RoleRepository = class extends EARepository {
|
|
13
8
|
constructor(instance) {
|
|
@@ -24,58 +19,6 @@ var RoleRepository = class extends EARepository {
|
|
|
24
19
|
cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS
|
|
25
20
|
});
|
|
26
21
|
}
|
|
27
|
-
async getBoundPermissionsForMany(ids) {
|
|
28
|
-
const promises = [];
|
|
29
|
-
for (const id of ids) promises.push(this.getBoundPermissions(id));
|
|
30
|
-
return (await Promise.all(promises)).flat();
|
|
31
|
-
}
|
|
32
|
-
async clearBoundPermissionsCache(entity) {
|
|
33
|
-
let id;
|
|
34
|
-
if (typeof entity === "string") id = entity;
|
|
35
|
-
else id = entity.id;
|
|
36
|
-
if (!this.manager.connection.queryResultCache) return;
|
|
37
|
-
await this.manager.connection.queryResultCache.remove([buildRedisKeyPath({
|
|
38
|
-
prefix: CachePrefix.ROLE_OWNED_PERMISSIONS,
|
|
39
|
-
key: id
|
|
40
|
-
})]);
|
|
41
|
-
}
|
|
42
|
-
async getBoundPermissions(entity) {
|
|
43
|
-
let id;
|
|
44
|
-
if (typeof entity === "string") id = entity;
|
|
45
|
-
else id = entity.id;
|
|
46
|
-
const entities = await this.manager.getRepository(RolePermissionEntity).find({
|
|
47
|
-
where: { role_id: id },
|
|
48
|
-
relations: { permission: true },
|
|
49
|
-
cache: {
|
|
50
|
-
id: buildRedisKeyPath({
|
|
51
|
-
prefix: CachePrefix.ROLE_OWNED_PERMISSIONS,
|
|
52
|
-
key: id
|
|
53
|
-
}),
|
|
54
|
-
milliseconds: 6e4
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
const policyIds = /* @__PURE__ */ new Set();
|
|
58
|
-
for (const entry of entities) if (entry.policy_id) policyIds.add(entry.policy_id);
|
|
59
|
-
const policyTrees = await this.loadPolicyTrees([...policyIds]);
|
|
60
|
-
return entities.map((entry) => {
|
|
61
|
-
const policies = [];
|
|
62
|
-
if (entry.policy_id && policyTrees[entry.policy_id]) policies.push(policyTrees[entry.policy_id]);
|
|
63
|
-
return {
|
|
64
|
-
permission: entry.permission,
|
|
65
|
-
policies: policies.length > 0 ? policies : void 0
|
|
66
|
-
};
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
async loadPolicyTrees(policyIds) {
|
|
70
|
-
if (policyIds.length === 0) return {};
|
|
71
|
-
const policyRepository = new PolicyRepository(this.manager);
|
|
72
|
-
const result = {};
|
|
73
|
-
for (const id of policyIds) {
|
|
74
|
-
const tree = await policyRepository.findDescendantsTreeById(id);
|
|
75
|
-
if (tree) result[id] = tree;
|
|
76
|
-
}
|
|
77
|
-
return result;
|
|
78
|
-
}
|
|
79
22
|
};
|
|
80
23
|
//#endregion
|
|
81
24
|
export { RoleRepository };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["CachePrefix","EARepository","RoleAttributeEntity","RoleEntity","RoleRepository","instance","attributeProperties","input","parent","role_id","id","realm_id","entity","entityPrimaryColumn","attributeEntity","attributeForeignColumn","cachePrefix","ROLE_OWNED_PERMISSIONS"],"sources":["../../../../../src/adapters/database/domains/role/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-2021.\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 { DataSource, EntityManager } from 'typeorm';\nimport { CachePrefix } from '../constants.ts';\nimport { EARepository } from '../../extra-attribute-repository/index.ts';\nimport { RoleAttributeEntity } from '../role-attribute/entity.ts';\nimport { RoleEntity } from './entity.ts';\n\nexport class RoleRepository extends EARepository<RoleEntity, RoleAttributeEntity> {\n constructor(instance: DataSource | EntityManager) {\n super(instance, {\n attributeProperties: (input, parent) => {\n input.role_id = parent.id;\n input.realm_id = parent.realm_id;\n\n return input;\n },\n entity: RoleEntity,\n entityPrimaryColumn: 'id',\n attributeEntity: RoleAttributeEntity,\n attributeForeignColumn: 'role_id',\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n });\n }\n}\n"],"mappings":";;;;;;AAaA,IAAaI,iBAAb,cAAoCH,aAAAA;CAChC,YAAYI,UAAsC;AAC9C,QAAMA,UAAU;GACZC,sBAAsBC,OAAOC,WAAAA;AACzBD,UAAME,UAAUD,OAAOE;AACvBH,UAAMI,WAAWH,OAAOG;AAExB,WAAOJ;;GAEXK,QAAQT;GACRU,qBAAqB;GACrBC,iBAAiBZ;GACjBa,wBAAwB;GACxBC,aAAahB,YAAYiB;GAC7B,CAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { RealmEntity } from "../realm/entity.mjs";
|
|
2
2
|
import "../realm/index.mjs";
|
|
3
|
+
import { RoleEntity } from "../role/entity.mjs";
|
|
3
4
|
import { PermissionEntity } from "../permission/entity.mjs";
|
|
4
5
|
import "../permission/index.mjs";
|
|
5
6
|
import { PolicyEntity } from "../policy/entity.mjs";
|
|
6
7
|
import "../policy/index.mjs";
|
|
7
|
-
import { RoleEntity } from "../role/entity.mjs";
|
|
8
8
|
import { Column, CreateDateColumn, Entity, Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
|
9
9
|
//#region src/adapters/database/domains/role-permission/entity.ts
|
|
10
10
|
function _ts_decorate(decorators, target, key, desc) {
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { PermissionPolicyBinding } from '@authup/access';
|
|
1
|
+
import type { User, UserAttribute } from '@authup/core-kit';
|
|
3
2
|
import type { DataSource, EntityManager } from 'typeorm';
|
|
4
3
|
import { EARepository } from '../../extra-attribute-repository/index.ts';
|
|
5
4
|
export declare class UserRepository extends EARepository<User, UserAttribute> {
|
|
6
5
|
constructor(instance: DataSource | EntityManager);
|
|
7
|
-
getBoundRoles(entity: string | User): Promise<Role[]>;
|
|
8
|
-
getBoundPermissions(entity: string | User): Promise<PermissionPolicyBinding[]>;
|
|
9
|
-
private loadPolicyTrees;
|
|
10
6
|
}
|
|
11
7
|
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/user/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/domains/user/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAIzE,qBAAa,cAAe,SAAQ,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC;gBACrD,QAAQ,EAAE,UAAU,GAAG,aAAa;CAenD"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import { CachePrefix } from "../constants.mjs";
|
|
2
2
|
import { EARepository } from "../../extra-attribute-repository/repository.mjs";
|
|
3
3
|
import "../../extra-attribute-repository/index.mjs";
|
|
4
|
-
import { PolicyRepository } from "../policy/repository.mjs";
|
|
5
|
-
import "../policy/index.mjs";
|
|
6
4
|
import { UserEntity } from "./entity.mjs";
|
|
7
5
|
import { UserAttributeEntity } from "../user-attribute/entity.mjs";
|
|
8
6
|
import "../user-attribute/index.mjs";
|
|
9
|
-
import { UserPermissionEntity } from "../user-permission/entity.mjs";
|
|
10
|
-
import "../user-permission/index.mjs";
|
|
11
|
-
import { UserRoleEntity } from "../user-role/entity.mjs";
|
|
12
|
-
import "../user-role/index.mjs";
|
|
13
|
-
import { buildRedisKeyPath } from "@authup/server-kit";
|
|
14
7
|
//#region src/adapters/database/domains/user/repository.ts
|
|
15
8
|
var UserRepository = class extends EARepository {
|
|
16
9
|
constructor(instance) {
|
|
@@ -27,59 +20,6 @@ var UserRepository = class extends EARepository {
|
|
|
27
20
|
cachePrefix: CachePrefix.USER_OWNED_ATTRIBUTES
|
|
28
21
|
});
|
|
29
22
|
}
|
|
30
|
-
async getBoundRoles(entity) {
|
|
31
|
-
let id;
|
|
32
|
-
if (typeof entity === "string") id = entity;
|
|
33
|
-
else id = entity.id;
|
|
34
|
-
return (await this.manager.getRepository(UserRoleEntity).find({
|
|
35
|
-
where: { user_id: id },
|
|
36
|
-
relations: { role: true },
|
|
37
|
-
cache: {
|
|
38
|
-
id: buildRedisKeyPath({
|
|
39
|
-
prefix: CachePrefix.USER_OWNED_ROLES,
|
|
40
|
-
key: id
|
|
41
|
-
}),
|
|
42
|
-
milliseconds: 6e4
|
|
43
|
-
}
|
|
44
|
-
})).map((relation) => relation.role);
|
|
45
|
-
}
|
|
46
|
-
async getBoundPermissions(entity) {
|
|
47
|
-
let id;
|
|
48
|
-
if (typeof entity === "string") id = entity;
|
|
49
|
-
else id = entity.id;
|
|
50
|
-
const entities = await this.manager.getRepository(UserPermissionEntity).find({
|
|
51
|
-
where: { user_id: id },
|
|
52
|
-
relations: { permission: true },
|
|
53
|
-
cache: {
|
|
54
|
-
id: buildRedisKeyPath({
|
|
55
|
-
prefix: CachePrefix.USER_OWNED_PERMISSIONS,
|
|
56
|
-
key: id
|
|
57
|
-
}),
|
|
58
|
-
milliseconds: 6e4
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
const policyIds = /* @__PURE__ */ new Set();
|
|
62
|
-
for (const entry of entities) if (entry.policy_id) policyIds.add(entry.policy_id);
|
|
63
|
-
const policyTrees = await this.loadPolicyTrees([...policyIds]);
|
|
64
|
-
return entities.map((entry) => {
|
|
65
|
-
const policies = [];
|
|
66
|
-
if (entry.policy_id && policyTrees[entry.policy_id]) policies.push(policyTrees[entry.policy_id]);
|
|
67
|
-
return {
|
|
68
|
-
permission: entry.permission,
|
|
69
|
-
policies: policies.length > 0 ? policies : void 0
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
async loadPolicyTrees(policyIds) {
|
|
74
|
-
if (policyIds.length === 0) return {};
|
|
75
|
-
const policyRepository = new PolicyRepository(this.manager);
|
|
76
|
-
const result = {};
|
|
77
|
-
for (const id of policyIds) {
|
|
78
|
-
const tree = await policyRepository.findDescendantsTreeById(id);
|
|
79
|
-
if (tree) result[id] = tree;
|
|
80
|
-
}
|
|
81
|
-
return result;
|
|
82
|
-
}
|
|
83
23
|
};
|
|
84
24
|
//#endregion
|
|
85
25
|
export { UserRepository };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["CachePrefix","EARepository","UserAttributeEntity","UserEntity","UserRepository","instance","attributeProperties","input","parent","user_id","id","realm_id","entity","entityPrimaryColumn","attributeEntity","attributeForeignColumn","cachePrefix","USER_OWNED_ATTRIBUTES"],"sources":["../../../../../src/adapters/database/domains/user/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-2021.\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 { User, UserAttribute } from '@authup/core-kit';\nimport type { DataSource, EntityManager } from 'typeorm';\nimport { CachePrefix } from '../constants.ts';\nimport { EARepository } from '../../extra-attribute-repository/index.ts';\nimport { UserAttributeEntity } from '../user-attribute/index.ts';\nimport { UserEntity } from './entity.ts';\n\nexport class UserRepository extends EARepository<User, UserAttribute> {\n constructor(instance: DataSource | EntityManager) {\n super(instance, {\n attributeProperties: (input, parent) => {\n input.user_id = parent.id;\n input.realm_id = parent.realm_id;\n\n return input;\n },\n entity: UserEntity,\n entityPrimaryColumn: 'id',\n attributeEntity: UserAttributeEntity,\n attributeForeignColumn: 'user_id',\n cachePrefix: CachePrefix.USER_OWNED_ATTRIBUTES,\n });\n }\n}\n"],"mappings":";;;;;;;AAcA,IAAaI,iBAAb,cAAoCH,aAAAA;CAChC,YAAYI,UAAsC;AAC9C,QAAMA,UAAU;GACZC,sBAAsBC,OAAOC,WAAAA;AACzBD,UAAME,UAAUD,OAAOE;AACvBH,UAAMI,WAAWH,OAAOG;AAExB,WAAOJ;;GAEXK,QAAQT;GACRU,qBAAqB;GACrBC,iBAAiBZ;GACjBa,wBAAwB;GACxBC,aAAahB,YAAYiB;GAC7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/extra-attribute-repository/tree/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,UAAU,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EAElB,MAAM,SAAS,CAAC;AACjB,OAAO,EAGH,cAAc,EAEjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EACR,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EAChB,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,qBAAa,gBAAgB,CACzB,CAAC,SAAS,aAAa,GAAG,aAAa,EACvC,CAAC,SAAS,sBAAsB,GAAG,sBAAsB,CAC3D,SAAQ,cAAc,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAGzC,QAAQ,EAAE,UAAU,GAAG,aAAa,EACpC,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAuB7B,MAAM,IAAI,CAAC;IAEX,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IAE9C,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAmB9C,OAAO,CAAC,uBAAuB;IAkBzB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7C,KAAK,EAAE,CAAC,GAAG,CAAC,EACZ,UAAU,CAAC,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACrC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IAMX,aAAa,CACf,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,YAAY,GAAE,uBAA4B,GAC3C,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAInB,4BAA4B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EACjB,YAAY,CAAC,EAAE,uBAAuB,GACvC,OAAO,CAAC,CAAC,CAAC;IAIP,cAAc,CAChB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAE7B,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,EAC3B,YAAY,GAAE,uBAA4B,GAC3C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAMf,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/C,MAAM,EAAE,CAAC,EACT,YAAY,GAAE,uBAA4B,GAC3C,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IAMX,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChD,QAAQ,EAAE,CAAC,EAAE,EACb,YAAY,GAAE,uBAA4B,GAC3C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAMf,SAAS,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAQlD,mBAAmB,CACrB,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/database/extra-attribute-repository/tree/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mjs","names":["FindOptionsUtils","InstanceChecker","TreeRepository","TreeRepositoryUtils","ExtraAttributesTreeRepositoryAdapter","EATreeRepository","adapter","options","instance","entity","attributeEntity","ctx","isDataSource","manager","repository","attributeRepository","getRepository","create","entityLike","Array","isArray","map","i","preserveExtraAttributes","source","columns","Set","col","metadata","add","propertyName","rel","relations","key","Object","keys","has","saveOneWithEA","input","attributes","saveWithEA","findOneWithEA","extraOptions","findOneWithEAByPrimaryColumn","value","findManyWithEA","findWithEA","extendOneWithEA","output","extendManyWithEA","entities","findRoots","findDescendantsTree","qb","createDescendantsQueryBuilder","applyOptionsToTreeQueryBuilder","getRawAndEntities","relationMaps","createRelationMaps","raw","buildChildrenEntityTree","depth","findAncestors","findAncestorsTree","createAncestorsQueryBuilder","buildParentEntityTree","updateClosureTable","primaryKeyValue","primaryColumns","getEntityValue","closureTable","closureJunctionTable","executeClosureTableUpdate","connection","transaction","tableName","ancestorColumn","ancestorColumns","descendantColumn","descendantColumns","param","index","driver","createParameter","ancestors","query","databasePath","treeParentRelation","parentId","joinColumns","ancestorIds","filter","ancestor","length","descendants","descendantIds","descendant","placeholders","_","join","ancestorsOfDescendants","acc","reduce","curr","push","ancestorsOfDescendent","ancestorId","indexOf","descendantId"],"sources":["../../../../../src/adapters/database/extra-attribute-repository/tree/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-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 {\n DataSource, \n DeepPartial, \n EntityManager, \n FindManyOptions, \n FindOneOptions, \n FindTreeOptions,\n SelectQueryBuilder,\n} from 'typeorm';\nimport {\n FindOptionsUtils,\n InstanceChecker,\n TreeRepository, \n TreeRepositoryUtils,\n} from 'typeorm';\nimport type { ObjectLiteral } from '@authup/kit';\nimport type { ExtraAttributesRepositoryAdapter } from '../adapter.ts';\nimport type {\n EARepositoryEntityBase, \n EARepositoryFindOptions, \n EARepositoryOptions, \n EARepositorySaveOptions, \n IEARepository,\n} from '../types.ts';\nimport { ExtraAttributesTreeRepositoryAdapter } from './adapter.ts';\n\n/**\n * @see https://github.com/typeorm/typeorm/blob/master/src/repository/TreeRepository.ts\n */\nexport class EATreeRepository<\n T extends ObjectLiteral = ObjectLiteral,\n A extends EARepositoryEntityBase = EARepositoryEntityBase,\n> extends TreeRepository<T> implements IEARepository<T> {\n protected adapter: ExtraAttributesRepositoryAdapter<T, A>;\n\n protected options: EARepositoryOptions<T, A>;\n\n constructor(\n instance: DataSource | EntityManager,\n options: EARepositoryOptions<T, A>,\n ) {\n const {\n entity,\n attributeEntity,\n ...ctx\n } = options;\n\n super(\n entity,\n InstanceChecker.isDataSource(instance) ? instance.manager : instance,\n );\n\n this.options = options;\n this.adapter = new ExtraAttributesTreeRepositoryAdapter<T, A>({\n ...ctx,\n repository: this,\n attributeRepository: this.manager.getRepository(attributeEntity),\n });\n }\n\n // ------------------------------------------------------------------------------\n\n override create(): T;\n\n override create(entityLikeArray: DeepPartial<T>[]): T[];\n\n override create(entityLike: DeepPartial<T>): T;\n\n override create(entityLike?: DeepPartial<T> | DeepPartial<T>[]): T | T[] {\n if (!entityLike) {\n return super.create();\n }\n\n if (Array.isArray(entityLike)) {\n return super.create(entityLike).map((entity, i) => {\n this.preserveExtraAttributes(entity, entityLike[i]);\n return entity;\n });\n }\n\n const entity = super.create(entityLike);\n this.preserveExtraAttributes(entity, entityLike);\n return entity;\n }\n\n private preserveExtraAttributes(entity: T, source: DeepPartial<T>): void {\n const columns = new Set<string>();\n for (const col of this.metadata.columns) {\n columns.add(col.propertyName);\n }\n for (const rel of this.metadata.relations) {\n columns.add(rel.propertyName);\n }\n\n for (const key of Object.keys(source)) {\n if (!columns.has(key) && !(key in entity)) {\n (entity as Record<string, any>)[key] = (source as Record<string, any>)[key];\n }\n }\n }\n\n // ------------------------------------------------------------------------------\n\n async saveOneWithEA<E extends Record<string, any>>(\n input: T & E,\n attributes?: E,\n options?: EARepositorySaveOptions<T>,\n ): Promise<T & E> {\n return this.adapter.saveWithEA(input, attributes, options);\n }\n\n // ------------------------------------------------------------------------------\n\n async findOneWithEA(\n options: FindOneOptions<T>,\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<T | undefined> {\n return this.adapter.findOneWithEA(options, extraOptions);\n }\n\n async findOneWithEAByPrimaryColumn<E extends Record<string, any>>(\n value: T[keyof T],\n extraOptions?: EARepositoryFindOptions,\n ): Promise<E> {\n return this.adapter.findOneWithEAByPrimaryColumn(value, extraOptions);\n }\n\n async findManyWithEA<\n E extends Record<string, any>,\n >(\n options: FindManyOptions<T>,\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<(T & E)[]> {\n return this.adapter.findWithEA(options, extraOptions);\n }\n\n // ------------------------------------------------------------------------------\n\n async extendOneWithEA<E extends Record<string, any>>(\n entity: T,\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<T & E> {\n const [output] = await this.extendManyWithEA([entity], extraOptions);\n\n return output as (T & E);\n }\n\n async extendManyWithEA<E extends Record<string, any>>(\n entities: T[],\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<(T & E)[]> {\n return this.adapter.extendManyWithEA(entities, extraOptions);\n }\n\n // -------------------------------------------------------------------------------\n\n async findRoots(options?: FindTreeOptions): Promise<T[]> {\n const entities = await super.findRoots(options);\n\n await this.extendManyWithEA(entities);\n\n return entities;\n }\n\n async findDescendantsTree(\n entity: T,\n options?: FindTreeOptions,\n ): Promise<T> {\n const qb: SelectQueryBuilder<T> = this.createDescendantsQueryBuilder(\n 'treeEntity',\n 'treeClosure',\n entity,\n );\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n\n const entities = await qb.getRawAndEntities();\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n 'treeEntity',\n entities.raw,\n );\n\n await this.extendManyWithEA(entities.entities);\n\n TreeRepositoryUtils.buildChildrenEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n {\n depth: -1,\n ...options,\n },\n );\n\n return entity;\n }\n\n async findAncestors(\n entity: T,\n options?: FindTreeOptions,\n ): Promise<T[]> {\n const entities = await super.findAncestors(entity, options);\n\n await this.extendManyWithEA(entities);\n\n return entities;\n }\n\n // -------------------------------------------------------------------------------\n\n async findAncestorsTree(\n entity: T,\n options?: FindTreeOptions,\n ): Promise<T> {\n const qb = this.createAncestorsQueryBuilder(\n 'treeEntity',\n 'treeClosure',\n entity,\n );\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n\n const entities = await qb.getRawAndEntities();\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n 'treeEntity',\n entities.raw,\n );\n\n await this.extendManyWithEA(entities.entities);\n\n TreeRepositoryUtils.buildParentEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n );\n return entity;\n }\n\n // -------------------------------------------------------------------------------\n\n async updateClosureTable(entity: T, manager?: EntityManager) {\n const primaryKeyValue = this.metadata.primaryColumns[0].getEntityValue(entity);\n if (!primaryKeyValue) {\n return;\n }\n\n const closureTable = this.metadata.closureJunctionTable;\n if (!closureTable) {\n return;\n }\n\n if (manager) {\n await this.executeClosureTableUpdate(entity, manager);\n } else {\n await this.manager.connection.transaction(async (manager) => {\n await this.executeClosureTableUpdate(entity, manager);\n });\n }\n }\n\n private async executeClosureTableUpdate(entity: T, manager: EntityManager) {\n const primaryKeyValue = this.metadata.primaryColumns[0].getEntityValue(entity);\n\n const { tableName } = this.metadata.closureJunctionTable;\n const ancestorColumn = this.metadata.closureJunctionTable.ancestorColumns[0];\n const descendantColumn = this.metadata.closureJunctionTable.descendantColumns[0];\n\n const param = (index: number) => manager.connection.driver.createParameter(`p${index}`, index);\n\n // 1. Get All ancestors of current entity\n const ancestors = await manager.query<Record<string, any>[]>(\n `SELECT *\n FROM ${tableName}\n WHERE ${ancestorColumn.databasePath} != ${descendantColumn.databasePath} AND\n ${descendantColumn.databasePath} = ${param(0)} AND\n ${ancestorColumn.databasePath} != ${param(1)}`,\n [primaryKeyValue, primaryKeyValue],\n );\n\n if (!this.metadata.treeParentRelation) {\n return;\n }\n\n const parentId = this.metadata.treeParentRelation.joinColumns[0].getEntityValue(entity);\n\n let ancestorIds : string[];\n if (parentId) {\n ancestorIds = [\n parentId,\n ...ancestors\n .filter((ancestor) => ancestor[ancestorColumn.databasePath] !== parentId)\n .map((ancestor) => ancestor[ancestorColumn.databasePath]),\n ];\n } else {\n ancestorIds = ancestors.map((ancestor) => ancestor[ancestorColumn.databasePath]);\n }\n\n if (ancestorIds.length === 0) {\n return;\n }\n\n // 2. Get All descendants of current entity.\n const descendants = await manager.query<Record<string, any>[]>(\n `SELECT *\n FROM ${tableName}\n WHERE ${ancestorColumn.databasePath} != ${descendantColumn.databasePath} AND\n ${ancestorColumn.databasePath} = ${param(0)} AND\n ${descendantColumn.databasePath} != ${param(1)}`,\n [primaryKeyValue, primaryKeyValue],\n );\n\n if (parentId) {\n // 3. get all descendant\n const descendantIds = descendants\n .map((descendant) => descendant[descendantColumn.databasePath]);\n\n if (descendantIds.length > 0) {\n // 4. get all ancestors of each descendant\n const placeholders = descendantIds.map((_, i) => param(i + 1)).join(',');\n const ancestorsOfDescendants = await manager.query<Record<string, any>[]>(\n `SELECT *\n FROM ${tableName}\n WHERE\n ${ancestorColumn.databasePath} != ${param(0)} AND\n ${ancestorColumn.databasePath} != ${descendantColumn.databasePath} AND\n ${descendantColumn.databasePath} IN (${placeholders})`,\n [primaryKeyValue, ...descendantIds],\n );\n\n const acc = ancestorsOfDescendants.reduce((acc, curr) => {\n if (!acc[curr[descendantColumn.databasePath]]) {\n acc[curr[descendantColumn.databasePath]] = [];\n }\n\n acc[curr[descendantColumn.databasePath]].push(curr[ancestorColumn.databasePath]);\n return acc;\n }, {} as Record<string, string[]>);\n\n // 5. Check if for each child a relation exists with each ancestor (create if not exist)\n for (const descendant of descendantIds) {\n const ancestorsOfDescendent = acc[descendant] ?? [];\n\n for (const ancestorId of ancestorIds) {\n const index = ancestorsOfDescendent.indexOf(ancestorId);\n if (index === -1) {\n await manager.query(\n `INSERT INTO ${tableName}\n (${ancestorColumn.databasePath}, ${descendantColumn.databasePath})\n VALUES (${param(0)}, ${param(1)})`,\n [ancestorId, descendant],\n );\n }\n }\n }\n }\n } else {\n const descendantIds = [\n primaryKeyValue,\n ...descendants.map((descendant) => descendant[descendantColumn.databasePath]),\n ];\n\n for (const ancestorId of ancestorIds) {\n for (const descendantId of descendantIds) {\n await manager.query(\n `DELETE FROM ${tableName}\n WHERE ${ancestorColumn.databasePath} = ${param(0)}\n AND ${descendantColumn.databasePath} = ${param(1)}`,\n [ancestorId, descendantId],\n );\n }\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repository.mjs","names":["FindOptionsUtils","InstanceChecker","TreeRepository","TreeRepositoryUtils","ExtraAttributesTreeRepositoryAdapter","EATreeRepository","adapter","options","instance","entity","attributeEntity","ctx","isDataSource","manager","repository","attributeRepository","getRepository","create","entityLike","Array","isArray","map","i","preserveExtraAttributes","source","columns","Set","col","metadata","add","propertyName","rel","relations","key","Object","keys","has","saveOneWithEA","input","attributes","saveWithEA","findOneWithEA","extraOptions","findOneWithEAByPrimaryColumn","value","findManyWithEA","findWithEA","extendOneWithEA","output","extendManyWithEA","entities","findRoots","findDescendantsTree","qb","createDescendantsQueryBuilder","applyOptionsToTreeQueryBuilder","getRawAndEntities","relationMaps","createRelationMaps","raw","buildChildrenEntityTree","depth","findAncestors","findAncestorsTree","createAncestorsQueryBuilder","buildParentEntityTree","updateClosureTable","primaryKeyValue","primaryColumns","getEntityValue","closureTable","closureJunctionTable","executeClosureTableUpdate","connection","transaction","tableName","ancestorColumn","ancestorColumns","descendantColumn","descendantColumns","param","index","driver","createParameter","ancestors","query","databasePath","treeParentRelation","parentId","joinColumns","ancestorIds","filter","ancestor","length","descendants","descendantIds","descendant","placeholders","_","join","ancestorsOfDescendants","acc","reduce","curr","push","ancestorsOfDescendent","ancestorId","indexOf","descendantId"],"sources":["../../../../../src/adapters/database/extra-attribute-repository/tree/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-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 {\n DataSource, \n DeepPartial, \n EntityManager, \n FindManyOptions, \n FindOneOptions, \n FindTreeOptions,\n SelectQueryBuilder,\n} from 'typeorm';\nimport {\n FindOptionsUtils,\n InstanceChecker,\n TreeRepository, \n TreeRepositoryUtils,\n} from 'typeorm';\nimport type { ObjectLiteral } from '@authup/kit';\nimport type { ExtraAttributesRepositoryAdapter } from '../adapter.ts';\nimport type {\n EARepositoryEntityBase, \n EARepositoryFindOptions, \n EARepositoryOptions, \n EARepositorySaveOptions, \n IEARepository,\n} from '../types.ts';\nimport { ExtraAttributesTreeRepositoryAdapter } from './adapter.ts';\n\n/**\n * @see https://github.com/typeorm/typeorm/blob/master/src/repository/TreeRepository.ts\n */\nexport class EATreeRepository<\n T extends ObjectLiteral = ObjectLiteral,\n A extends EARepositoryEntityBase = EARepositoryEntityBase,\n> extends TreeRepository<T> implements IEARepository<T> {\n protected adapter: ExtraAttributesRepositoryAdapter<T, A>;\n\n protected options: EARepositoryOptions<T, A>;\n\n constructor(\n instance: DataSource | EntityManager,\n options: EARepositoryOptions<T, A>,\n ) {\n const {\n entity,\n attributeEntity,\n ...ctx\n } = options;\n\n super(\n entity,\n InstanceChecker.isDataSource(instance) ? instance.manager : instance,\n );\n\n this.options = options;\n this.adapter = new ExtraAttributesTreeRepositoryAdapter<T, A>({\n ...ctx,\n repository: this,\n attributeRepository: this.manager.getRepository(attributeEntity),\n });\n }\n\n // ------------------------------------------------------------------------------\n\n override create(): T;\n\n override create(entityLikeArray: DeepPartial<T>[]): T[];\n\n override create(entityLike: DeepPartial<T>): T;\n\n override create(entityLike?: DeepPartial<T> | DeepPartial<T>[]): T | T[] {\n if (!entityLike) {\n return super.create();\n }\n\n if (Array.isArray(entityLike)) {\n return super.create(entityLike).map((entity, i) => {\n this.preserveExtraAttributes(entity, entityLike[i]);\n return entity;\n });\n }\n\n const entity = super.create(entityLike);\n this.preserveExtraAttributes(entity, entityLike);\n return entity;\n }\n\n private preserveExtraAttributes(entity: T, source: DeepPartial<T>): void {\n const columns = new Set<string>();\n for (const col of this.metadata.columns) {\n columns.add(col.propertyName);\n }\n for (const rel of this.metadata.relations) {\n columns.add(rel.propertyName);\n }\n\n for (const key of Object.keys(source)) {\n if (!columns.has(key) && !(key in entity)) {\n (entity as Record<string, any>)[key] = (source as Record<string, any>)[key];\n }\n }\n }\n\n // ------------------------------------------------------------------------------\n\n async saveOneWithEA<E extends Record<string, any>>(\n input: T & E,\n attributes?: E,\n options?: EARepositorySaveOptions<T>,\n ): Promise<T & E> {\n return this.adapter.saveWithEA(input, attributes, options);\n }\n\n // ------------------------------------------------------------------------------\n\n async findOneWithEA(\n options: FindOneOptions<T>,\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<T | undefined> {\n return this.adapter.findOneWithEA(options, extraOptions);\n }\n\n async findOneWithEAByPrimaryColumn<E extends Record<string, any>>(\n value: T[keyof T],\n extraOptions?: EARepositoryFindOptions,\n ): Promise<E> {\n return this.adapter.findOneWithEAByPrimaryColumn(value, extraOptions);\n }\n\n async findManyWithEA<\n E extends Record<string, any>,\n >(\n options: FindManyOptions<T>,\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<(T & E)[]> {\n return this.adapter.findWithEA(options, extraOptions);\n }\n\n // ------------------------------------------------------------------------------\n\n async extendOneWithEA<E extends Record<string, any>>(\n entity: T,\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<T & E> {\n const [output] = await this.extendManyWithEA([entity], extraOptions);\n\n return output as (T & E);\n }\n\n async extendManyWithEA<E extends Record<string, any>>(\n entities: T[],\n extraOptions: EARepositoryFindOptions = {},\n ): Promise<(T & E)[]> {\n return this.adapter.extendManyWithEA(entities, extraOptions);\n }\n\n // -------------------------------------------------------------------------------\n\n async findRoots(options?: FindTreeOptions): Promise<T[]> {\n const entities = await super.findRoots(options);\n\n await this.extendManyWithEA(entities);\n\n return entities;\n }\n\n async findDescendantsTree(\n entity: T,\n options?: FindTreeOptions,\n ): Promise<T> {\n const qb: SelectQueryBuilder<T> = this.createDescendantsQueryBuilder(\n 'treeEntity',\n 'treeClosure',\n entity,\n );\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n\n const entities = await qb.getRawAndEntities();\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n 'treeEntity',\n entities.raw,\n );\n\n await this.extendManyWithEA(entities.entities);\n\n TreeRepositoryUtils.buildChildrenEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n {\n depth: -1,\n ...options,\n },\n );\n\n // The descendants closure may include the root, but `entity` here is a\n // different reference than the one in `entities.entities`, so its own EA\n // fields are not populated. Load them explicitly so leaf-as-root callers\n // (e.g. policies bound directly to permissions/junctions) see EA.\n await this.extendOneWithEA(entity);\n\n return entity;\n }\n\n async findAncestors(\n entity: T,\n options?: FindTreeOptions,\n ): Promise<T[]> {\n const entities = await super.findAncestors(entity, options);\n\n await this.extendManyWithEA(entities);\n\n return entities;\n }\n\n // -------------------------------------------------------------------------------\n\n async findAncestorsTree(\n entity: T,\n options?: FindTreeOptions,\n ): Promise<T> {\n const qb = this.createAncestorsQueryBuilder(\n 'treeEntity',\n 'treeClosure',\n entity,\n );\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options);\n\n const entities = await qb.getRawAndEntities();\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n 'treeEntity',\n entities.raw,\n );\n\n await this.extendManyWithEA(entities.entities);\n\n TreeRepositoryUtils.buildParentEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n );\n return entity;\n }\n\n // -------------------------------------------------------------------------------\n\n async updateClosureTable(entity: T, manager?: EntityManager) {\n const primaryKeyValue = this.metadata.primaryColumns[0].getEntityValue(entity);\n if (!primaryKeyValue) {\n return;\n }\n\n const closureTable = this.metadata.closureJunctionTable;\n if (!closureTable) {\n return;\n }\n\n if (manager) {\n await this.executeClosureTableUpdate(entity, manager);\n } else {\n await this.manager.connection.transaction(async (manager) => {\n await this.executeClosureTableUpdate(entity, manager);\n });\n }\n }\n\n private async executeClosureTableUpdate(entity: T, manager: EntityManager) {\n const primaryKeyValue = this.metadata.primaryColumns[0].getEntityValue(entity);\n\n const { tableName } = this.metadata.closureJunctionTable;\n const ancestorColumn = this.metadata.closureJunctionTable.ancestorColumns[0];\n const descendantColumn = this.metadata.closureJunctionTable.descendantColumns[0];\n\n const param = (index: number) => manager.connection.driver.createParameter(`p${index}`, index);\n\n // 1. Get All ancestors of current entity\n const ancestors = await manager.query<Record<string, any>[]>(\n `SELECT *\n FROM ${tableName}\n WHERE ${ancestorColumn.databasePath} != ${descendantColumn.databasePath} AND\n ${descendantColumn.databasePath} = ${param(0)} AND\n ${ancestorColumn.databasePath} != ${param(1)}`,\n [primaryKeyValue, primaryKeyValue],\n );\n\n if (!this.metadata.treeParentRelation) {\n return;\n }\n\n const parentId = this.metadata.treeParentRelation.joinColumns[0].getEntityValue(entity);\n\n let ancestorIds : string[];\n if (parentId) {\n ancestorIds = [\n parentId,\n ...ancestors\n .filter((ancestor) => ancestor[ancestorColumn.databasePath] !== parentId)\n .map((ancestor) => ancestor[ancestorColumn.databasePath]),\n ];\n } else {\n ancestorIds = ancestors.map((ancestor) => ancestor[ancestorColumn.databasePath]);\n }\n\n if (ancestorIds.length === 0) {\n return;\n }\n\n // 2. Get All descendants of current entity.\n const descendants = await manager.query<Record<string, any>[]>(\n `SELECT *\n FROM ${tableName}\n WHERE ${ancestorColumn.databasePath} != ${descendantColumn.databasePath} AND\n ${ancestorColumn.databasePath} = ${param(0)} AND\n ${descendantColumn.databasePath} != ${param(1)}`,\n [primaryKeyValue, primaryKeyValue],\n );\n\n if (parentId) {\n // 3. get all descendant\n const descendantIds = descendants\n .map((descendant) => descendant[descendantColumn.databasePath]);\n\n if (descendantIds.length > 0) {\n // 4. get all ancestors of each descendant\n const placeholders = descendantIds.map((_, i) => param(i + 1)).join(',');\n const ancestorsOfDescendants = await manager.query<Record<string, any>[]>(\n `SELECT *\n FROM ${tableName}\n WHERE\n ${ancestorColumn.databasePath} != ${param(0)} AND\n ${ancestorColumn.databasePath} != ${descendantColumn.databasePath} AND\n ${descendantColumn.databasePath} IN (${placeholders})`,\n [primaryKeyValue, ...descendantIds],\n );\n\n const acc = ancestorsOfDescendants.reduce((acc, curr) => {\n if (!acc[curr[descendantColumn.databasePath]]) {\n acc[curr[descendantColumn.databasePath]] = [];\n }\n\n acc[curr[descendantColumn.databasePath]].push(curr[ancestorColumn.databasePath]);\n return acc;\n }, {} as Record<string, string[]>);\n\n // 5. Check if for each child a relation exists with each ancestor (create if not exist)\n for (const descendant of descendantIds) {\n const ancestorsOfDescendent = acc[descendant] ?? [];\n\n for (const ancestorId of ancestorIds) {\n const index = ancestorsOfDescendent.indexOf(ancestorId);\n if (index === -1) {\n await manager.query(\n `INSERT INTO ${tableName}\n (${ancestorColumn.databasePath}, ${descendantColumn.databasePath})\n VALUES (${param(0)}, ${param(1)})`,\n [ancestorId, descendant],\n );\n }\n }\n }\n }\n } else {\n const descendantIds = [\n primaryKeyValue,\n ...descendants.map((descendant) => descendant[descendantColumn.databasePath]),\n ];\n\n for (const ancestorId of ancestorIds) {\n for (const descendantId of descendantIds) {\n await manager.query(\n `DELETE FROM ${tableName}\n WHERE ${ancestorColumn.databasePath} = ${param(0)}\n AND ${descendantColumn.databasePath} = ${param(1)}`,\n [ancestorId, descendantId],\n );\n }\n }\n }\n }\n}\n"],"mappings":"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"}
|