@authup/server-core 1.0.0-beta.38 → 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.
Files changed (117) hide show
  1. package/dist/adapters/http/adapters/index.mjs +2 -1
  2. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +2 -1
  3. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
  4. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +10 -1
  5. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  6. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
  7. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +5 -13
  8. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  9. package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -1
  10. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +2 -1
  11. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
  12. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +11 -2
  13. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  14. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +5 -1
  15. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
  16. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +19 -1
  17. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  18. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +6 -1
  19. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
  20. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts +15 -0
  21. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts.map +1 -0
  22. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +57 -0
  23. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs.map +1 -0
  24. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -1
  25. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
  26. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
  27. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
  28. package/dist/adapters/http/adapters/oauth2/index.mjs +2 -1
  29. package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
  30. package/dist/adapters/http/controllers/entities/client/module.mjs +1 -1
  31. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  32. package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts.map +1 -1
  33. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs +1 -1
  34. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs.map +1 -1
  35. package/dist/adapters/http/controllers/entities/robot/module.d.ts.map +1 -1
  36. package/dist/adapters/http/controllers/entities/robot/module.mjs +1 -1
  37. package/dist/adapters/http/controllers/entities/robot/module.mjs.map +1 -1
  38. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  39. package/dist/adapters/http/controllers/workflows/token/module.mjs +4 -1
  40. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  41. package/dist/adapters/http/controllers/workflows/token/types.d.ts +2 -1
  42. package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
  43. package/dist/adapters/http/index.mjs +2 -1
  44. package/dist/app/modules/database/repositories/client/repository.d.ts +1 -0
  45. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  46. package/dist/app/modules/database/repositories/client/repository.mjs +40 -1
  47. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  48. package/dist/app/modules/database/repositories/permission/repository.mjs +1 -1
  49. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  50. package/dist/app/modules/database/repositories/policy/repository.mjs +1 -1
  51. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  52. package/dist/app/modules/database/repositories/realm/repository.mjs +1 -1
  53. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  54. package/dist/app/modules/database/repositories/robot/repository.d.ts +1 -0
  55. package/dist/app/modules/database/repositories/robot/repository.d.ts.map +1 -1
  56. package/dist/app/modules/database/repositories/robot/repository.mjs +32 -1
  57. package/dist/app/modules/database/repositories/robot/repository.mjs.map +1 -1
  58. package/dist/app/modules/database/repositories/role/repository.mjs +1 -1
  59. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  60. package/dist/app/modules/database/repositories/scope/repository.mjs +1 -1
  61. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  62. package/dist/app/modules/database/repositories/user/repository.mjs +2 -2
  63. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  64. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  65. package/dist/app/modules/http/modules/controller.mjs +2 -0
  66. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  67. package/dist/core/entities/client/service.d.ts +1 -1
  68. package/dist/core/entities/client/service.d.ts.map +1 -1
  69. package/dist/core/entities/client/service.mjs +12 -19
  70. package/dist/core/entities/client/service.mjs.map +1 -1
  71. package/dist/core/entities/client/types.d.ts +2 -1
  72. package/dist/core/entities/client/types.d.ts.map +1 -1
  73. package/dist/core/entities/robot/service.d.ts +1 -1
  74. package/dist/core/entities/robot/service.d.ts.map +1 -1
  75. package/dist/core/entities/robot/service.mjs +12 -18
  76. package/dist/core/entities/robot/service.mjs.map +1 -1
  77. package/dist/core/entities/robot/types.d.ts +2 -1
  78. package/dist/core/entities/robot/types.d.ts.map +1 -1
  79. package/dist/core/entities/user/service.d.ts.map +1 -1
  80. package/dist/core/entities/user/service.mjs +10 -13
  81. package/dist/core/entities/user/service.mjs.map +1 -1
  82. package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
  83. package/dist/core/identity/password-recovery/service.mjs +4 -4
  84. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  85. package/dist/core/identity/provider/account/module.d.ts.map +1 -1
  86. package/dist/core/identity/provider/account/module.mjs +3 -2
  87. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  88. package/dist/core/index.mjs +2 -1
  89. package/dist/core/oauth2/authorization/code/verifier/module.d.ts.map +1 -1
  90. package/dist/core/oauth2/authorization/code/verifier/module.mjs +8 -4
  91. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  92. package/dist/core/oauth2/authorization/code/verifier/types.d.ts +2 -0
  93. package/dist/core/oauth2/authorization/code/verifier/types.d.ts.map +1 -1
  94. package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
  95. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +7 -1
  96. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  97. package/dist/core/oauth2/client/authenticator.d.ts +17 -0
  98. package/dist/core/oauth2/client/authenticator.d.ts.map +1 -0
  99. package/dist/core/oauth2/client/authenticator.mjs +34 -0
  100. package/dist/core/oauth2/client/authenticator.mjs.map +1 -0
  101. package/dist/core/oauth2/client/index.d.ts +1 -0
  102. package/dist/core/oauth2/client/index.d.ts.map +1 -1
  103. package/dist/core/oauth2/client/index.mjs +2 -1
  104. package/dist/core/oauth2/grant-types/password.d.ts +7 -3
  105. package/dist/core/oauth2/grant-types/password.d.ts.map +1 -1
  106. package/dist/core/oauth2/grant-types/password.mjs +9 -7
  107. package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
  108. package/dist/core/oauth2/index.mjs +3 -1
  109. package/dist/core/oauth2/token/issuer/base.d.ts.map +1 -1
  110. package/dist/core/oauth2/token/issuer/base.mjs +3 -2
  111. package/dist/core/oauth2/token/issuer/base.mjs.map +1 -1
  112. package/dist/index.mjs +2 -1
  113. package/dist/ui/client/assets/index-Noe7uiOY.js +41 -0
  114. package/dist/ui/client/index.html +1 -1
  115. package/dist/ui/server/server.js +21 -7
  116. package/package.json +9 -9
  117. package/dist/ui/client/assets/index-AHa03lX_.js +0 -41
@@ -73,7 +73,7 @@ var RobotRepositoryAdapter = class {
73
73
  }
74
74
  async findOneByName(name, realmKey) {
75
75
  const qb = this.repository.createQueryBuilder("robot");
76
- qb.where("robot.name LIKE :name", { name });
76
+ qb.where("robot.name = :name", { name });
77
77
  if (realmKey) {
78
78
  const realm = await this.realmRepository.resolve(realmKey);
79
79
  if (realm) qb.andWhere("robot.realm_id = :realmId", { realmId: realm.id });
@@ -83,6 +83,37 @@ var RobotRepositoryAdapter = class {
83
83
  async findOneByIdOrName(idOrName, realm) {
84
84
  return isUUID(idOrName) ? this.findOneById(idOrName) : this.findOneByName(idOrName, realm);
85
85
  }
86
+ async findOne(id, query, realmKey) {
87
+ const qb = this.repository.createQueryBuilder("robot");
88
+ if (isUUID(id)) qb.where("robot.id = :id", { id });
89
+ else {
90
+ qb.where("robot.name = :name", { name: id });
91
+ if (realmKey) {
92
+ const realm = await this.realmRepository.resolve(realmKey);
93
+ if (!realm) return null;
94
+ qb.andWhere("robot.realm_id = :realmId", { realmId: realm.id });
95
+ }
96
+ }
97
+ applyQuery(qb, query || {}, {
98
+ defaultAlias: "robot",
99
+ fields: {
100
+ default: [
101
+ "id",
102
+ "name",
103
+ "display_name",
104
+ "description",
105
+ "active",
106
+ "user_id",
107
+ "realm_id",
108
+ "created_at",
109
+ "updated_at"
110
+ ],
111
+ allowed: ["secret"]
112
+ },
113
+ relations: { allowed: ["realm", "user"] }
114
+ });
115
+ return qb.getOne();
116
+ }
86
117
  async findManyBy(where) {
87
118
  return this.repository.findBy(translateWhereConditions(where));
88
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","loadBoundPermissions","CachePrefix","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RealmRepositoryAdapter","RobotRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","default","filters","maxLimit","relations","onJoin","_property","key","q","addGroupBy","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","findOneWithSecret","Object","entries","forEach","value","addSelect","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","getRepository","find","robot_id","role","cache","prefix","ROBOT_OWNED_ROLES","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","ROBOT_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/robot/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Robot, Role } from '@authup/core-kit';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IRobotRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RobotRepositoryAdapterContext = {\n repository: Repository<Robot>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RobotRepositoryAdapter implements IRobotRepository {\n private readonly repository: Repository<Robot>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RobotRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Robot>> {\n const qb = this.repository.createQueryBuilder('robot');\n qb.groupBy('robot.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'robot',\n fields: {\n allowed: [\n 'secret',\n ],\n default: [\n 'id',\n 'name',\n 'display_name',\n 'description',\n 'active',\n 'user_id',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'name', 'realm_id', 'user_id'] },\n pagination: { maxLimit: 50 },\n relations: {\n // @ts-expect-error onJoin is not in the type definition\n allowed: ['realm', 'user'],\n onJoin: (_property: string, key: string, q: any) => {\n q.addGroupBy(`${key}.id`);\n },\n },\n sort: { allowed: ['id', 'realm_id', 'user_id', 'updated_at', 'created_at'] },\n });\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<Robot | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Robot | null> {\n const qb = this.repository.createQueryBuilder('robot');\n qb.where('robot.name LIKE :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('robot.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Robot | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Robot[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Robot | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneWithSecret(where: Record<string, any>): Promise<Robot | null> {\n const qb = this.repository.createQueryBuilder('robot');\n\n Object.entries(where).forEach(([key, value]) => {\n qb.andWhere(`robot.${key} = :${key}`, { [key]: value });\n });\n\n qb.addSelect('robot.secret');\n\n return qb.getOne();\n }\n\n create(data: Partial<Robot>): Robot {\n return this.repository.create(data);\n }\n\n merge(entity: Robot, data: Partial<Robot>): Robot {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Robot): Promise<Robot> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Robot): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Robot>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RobotEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Robot>, existing?: Robot): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RobotEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | Robot): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(RobotRoleEntity)\n .find({\n where: { robot_id: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.ROBOT_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 | Robot): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RobotPermissionEntity,\n where: { robot_id: id },\n cachePrefix: CachePrefix.ROBOT_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","loadBoundPermissions","CachePrefix","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RealmRepositoryAdapter","RobotRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","default","filters","maxLimit","relations","onJoin","_property","key","q","addGroupBy","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findOne","findManyBy","findBy","findOneWithSecret","Object","entries","forEach","value","addSelect","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","getRepository","find","robot_id","role","cache","prefix","ROBOT_OWNED_ROLES","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","ROBOT_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/robot/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Robot, Role } from '@authup/core-kit';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IRobotRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RobotRepositoryAdapterContext = {\n repository: Repository<Robot>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RobotRepositoryAdapter implements IRobotRepository {\n private readonly repository: Repository<Robot>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RobotRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Robot>> {\n const qb = this.repository.createQueryBuilder('robot');\n qb.groupBy('robot.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'robot',\n fields: {\n allowed: [\n 'secret',\n ],\n default: [\n 'id',\n 'name',\n 'display_name',\n 'description',\n 'active',\n 'user_id',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'name', 'realm_id', 'user_id'] },\n pagination: { maxLimit: 50 },\n relations: {\n // @ts-expect-error onJoin is not in the type definition\n allowed: ['realm', 'user'],\n onJoin: (_property: string, key: string, q: any) => {\n q.addGroupBy(`${key}.id`);\n },\n },\n sort: { allowed: ['id', 'realm_id', 'user_id', 'updated_at', 'created_at'] },\n });\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<Robot | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Robot | null> {\n const qb = this.repository.createQueryBuilder('robot');\n qb.where('robot.name = :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('robot.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Robot | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findOne(id: string, query?: Record<string, any>, realmKey?: string): Promise<Robot | null> {\n const qb = this.repository.createQueryBuilder('robot');\n\n if (isUUID(id)) {\n qb.where('robot.id = :id', { id });\n } else {\n qb.where('robot.name = :name', { name: id });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (!realm) {\n return null;\n }\n qb.andWhere('robot.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n applyQuery(qb, query || {}, {\n defaultAlias: 'robot',\n fields: {\n default: [\n 'id',\n 'name',\n 'display_name',\n 'description',\n 'active',\n 'user_id',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n allowed: ['secret'],\n },\n relations: {\n // @ts-expect-error 'user' is a valid relation but not in the type definition\n allowed: ['realm', 'user'],\n },\n });\n\n return qb.getOne();\n }\n\n async findManyBy(where: Record<string, any>): Promise<Robot[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Robot | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneWithSecret(where: Record<string, any>): Promise<Robot | null> {\n const qb = this.repository.createQueryBuilder('robot');\n\n Object.entries(where).forEach(([key, value]) => {\n qb.andWhere(`robot.${key} = :${key}`, { [key]: value });\n });\n\n qb.addSelect('robot.secret');\n\n return qb.getOne();\n }\n\n create(data: Partial<Robot>): Robot {\n return this.repository.create(data);\n }\n\n merge(entity: Robot, data: Partial<Robot>): Robot {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Robot): Promise<Robot> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Robot): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Robot>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RobotEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Robot>, existing?: Robot): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RobotEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | Robot): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(RobotRoleEntity)\n .find({\n where: { robot_id: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.ROBOT_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 | Robot): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RobotPermissionEntity,\n where: { robot_id: id },\n cachePrefix: CachePrefix.ROBOT_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":"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"}
@@ -60,7 +60,7 @@ var RoleRepositoryAdapter = class {
60
60
  }
61
61
  async findOneByName(name, realmKey) {
62
62
  const qb = this.repository.createQueryBuilder("role");
63
- qb.where("role.name LIKE :name", { name });
63
+ qb.where("role.name = :name", { name });
64
64
  if (realmKey) {
65
65
  const realm = await this.realmRepository.resolve(realmKey);
66
66
  if (realm) qb.andWhere("role.realm_id = :realmId", { realmId: realm.id });
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","loadBoundPermissions","CachePrefix","RoleEntity","RolePermissionEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundPermissions","junctionTarget","role_id","cachePrefix","ROLE_OWNED_PERMISSIONS","cacheKey","getBoundPermissionsForMany","results","Promise","all","map","flat"],"sources":["../../../../../../src/app/modules/database/repositories/role/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role } from '@authup/core-kit';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RoleEntity,\n RolePermissionEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'role',\n fields: {\n allowed: [\n 'id',\n 'name',\n 'display_name',\n 'target',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'name', 'target', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\n });\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name LIKE :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('role.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RolePermissionEntity,\n where: { role_id: id },\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n\n async getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]> {\n const results = await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)));\n return results.flat();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","loadBoundPermissions","CachePrefix","RoleEntity","RolePermissionEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundPermissions","junctionTarget","role_id","cachePrefix","ROLE_OWNED_PERMISSIONS","cacheKey","getBoundPermissionsForMany","results","Promise","all","map","flat"],"sources":["../../../../../../src/app/modules/database/repositories/role/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role } from '@authup/core-kit';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RoleEntity,\n RolePermissionEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'role',\n fields: {\n allowed: [\n 'id',\n 'name',\n 'display_name',\n 'target',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'name', 'target', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\n });\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name = :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('role.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RolePermissionEntity,\n where: { role_id: id },\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n\n async getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]> {\n const results = await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)));\n return results.flat();\n }\n}\n"],"mappings":"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"}
@@ -57,7 +57,7 @@ var ScopeRepositoryAdapter = class {
57
57
  }
58
58
  async findOneByName(name, realmKey) {
59
59
  const qb = this.repository.createQueryBuilder("scope");
60
- qb.where("scope.name LIKE :name", { name });
60
+ qb.where("scope.name = :name", { name });
61
61
  if (realmKey) {
62
62
  const realm = await this.realmRepository.resolve(realmKey);
63
63
  if (realm) qb.andWhere("scope.realm_id = :realmId", { realmId: realm.id });
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Scope } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'scope',\n fields: {\n allowed: [\n 'id',\n 'built_in',\n 'name',\n 'display_name',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'built_in', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\n });\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name LIKE :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('scope.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;AAsBA,IAAaQ,yBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAoC;AAC5C,OAAKF,aAAaE,IAAIF;AACtB,OAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,gBAAe;;CAGzE,MAAME,SAASC,OAA4E;EACvF,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGE,QAAQ,WAAA;EAEX,MAAM,EAAEC,eAAehB,WAAWa,IAAID,OAAO;GACzCK,cAAc;GACdC,QAAQ,EACJC,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACH,EACL;GACAC,SAAS,EAAED,SAAS;IAAC;IAAM;IAAY;IAAQ;IAAW,EAAC;GAC3DH,YAAY,EAAEK,UAAU,IAAG;GAC3BC,MAAM,EAAEH,SAAS;IAAC;IAAM;IAAQ;IAAc;IAAa,EAAC;GAChE,CAAA;EAEA,MAAM,CAACI,UAAUC,SAAS,MAAMX,GAAGY,iBAAe;AAElD,SAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGR;IACP;GACJ;;CAGJY,YAAYC,IAAmC;AAC3C,SAAO,KAAKC,UAAU,EAAED,IAAG,CAAA;;CAG/B,MAAME,cAAcC,MAAcC,UAA0C;EACxE,MAAMpB,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGqB,MAAM,yBAAyB,EAAEF,MAAK,CAAA;AAEzC,MAAIC,UAAU;GACV,MAAME,QAAQ,MAAM,KAAK1B,gBAAgB2B,QAAQH,SAAAA;AACjD,OAAIE,MACAtB,IAAGwB,SAAS,6BAA6B,EAAEC,SAASH,MAAMN,IAAG,CAAA;;AAIrE,SAAOhB,GAAG0B,QAAM;;CAGpB,MAAMC,kBAAkBC,UAAkBN,OAAuC;AAC7E,SAAOpC,OAAO0C,SAAAA,GACV,KAAKb,YAAYa,SAAAA,GACjB,KAAKV,cAAcU,UAAUN,MAAAA;;CAGrC,MAAMO,WAAWR,OAA8C;AAC3D,SAAO,KAAK1B,WAAWmC,OAAOvC,yBAAyB8B,MAAAA,CAAAA;;CAG3D,MAAMJ,UAAUI,OAAmD;AAC/D,SAAO,KAAK1B,WAAWsB,UAAU1B,yBAAyB8B,MAAAA,CAAAA;;CAG9DU,OAAOlB,MAA6B;AAChC,SAAO,KAAKlB,WAAWoC,OAAOlB,KAAAA;;CAGlCmB,MAAMC,QAAepB,MAA6B;AAC9C,SAAO,KAAKlB,WAAWqC,MAAMC,QAAQpB,KAAAA;;CAGzC,MAAMqB,KAAKD,QAA+B;AACtC,SAAO,KAAKtC,WAAWuC,KAAKD,OAAAA;;CAGhC,MAAME,OAAOF,QAA8B;AACvC,QAAM,KAAKtC,WAAWwC,OAAOF,OAAAA;;CAGjC,MAAMG,oBAAoBvB,MAAqC;AAC3D,QAAMxB,0BAA0BwB,MAAM;GAClCwB,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GAClB,CAAA;;CAGJ,MAAMiD,gBAAgB5B,MAAsB6B,UAAiC;AAQzE,MAAI,CAACC,MAPkBvD,eAAe;GAClCiD,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GACdyC,QAAQpB;GACR+B,gBAAgBF;GACpB,CAAA,CAGI,OAAM,IAAIpD,uBAAAA"}
1
+ {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Scope } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'scope',\n fields: {\n allowed: [\n 'id',\n 'built_in',\n 'name',\n 'display_name',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'built_in', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\n });\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name = :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('scope.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;AAsBA,IAAaQ,yBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAoC;AAC5C,OAAKF,aAAaE,IAAIF;AACtB,OAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,gBAAe;;CAGzE,MAAME,SAASC,OAA4E;EACvF,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGE,QAAQ,WAAA;EAEX,MAAM,EAAEC,eAAehB,WAAWa,IAAID,OAAO;GACzCK,cAAc;GACdC,QAAQ,EACJC,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACH,EACL;GACAC,SAAS,EAAED,SAAS;IAAC;IAAM;IAAY;IAAQ;IAAW,EAAC;GAC3DH,YAAY,EAAEK,UAAU,IAAG;GAC3BC,MAAM,EAAEH,SAAS;IAAC;IAAM;IAAQ;IAAc;IAAa,EAAC;GAChE,CAAA;EAEA,MAAM,CAACI,UAAUC,SAAS,MAAMX,GAAGY,iBAAe;AAElD,SAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGR;IACP;GACJ;;CAGJY,YAAYC,IAAmC;AAC3C,SAAO,KAAKC,UAAU,EAAED,IAAG,CAAA;;CAG/B,MAAME,cAAcC,MAAcC,UAA0C;EACxE,MAAMpB,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGqB,MAAM,sBAAsB,EAAEF,MAAK,CAAA;AAEtC,MAAIC,UAAU;GACV,MAAME,QAAQ,MAAM,KAAK1B,gBAAgB2B,QAAQH,SAAAA;AACjD,OAAIE,MACAtB,IAAGwB,SAAS,6BAA6B,EAAEC,SAASH,MAAMN,IAAG,CAAA;;AAIrE,SAAOhB,GAAG0B,QAAM;;CAGpB,MAAMC,kBAAkBC,UAAkBN,OAAuC;AAC7E,SAAOpC,OAAO0C,SAAAA,GACV,KAAKb,YAAYa,SAAAA,GACjB,KAAKV,cAAcU,UAAUN,MAAAA;;CAGrC,MAAMO,WAAWR,OAA8C;AAC3D,SAAO,KAAK1B,WAAWmC,OAAOvC,yBAAyB8B,MAAAA,CAAAA;;CAG3D,MAAMJ,UAAUI,OAAmD;AAC/D,SAAO,KAAK1B,WAAWsB,UAAU1B,yBAAyB8B,MAAAA,CAAAA;;CAG9DU,OAAOlB,MAA6B;AAChC,SAAO,KAAKlB,WAAWoC,OAAOlB,KAAAA;;CAGlCmB,MAAMC,QAAepB,MAA6B;AAC9C,SAAO,KAAKlB,WAAWqC,MAAMC,QAAQpB,KAAAA;;CAGzC,MAAMqB,KAAKD,QAA+B;AACtC,SAAO,KAAKtC,WAAWuC,KAAKD,OAAAA;;CAGhC,MAAME,OAAOF,QAA8B;AACvC,QAAM,KAAKtC,WAAWwC,OAAOF,OAAAA;;CAGjC,MAAMG,oBAAoBvB,MAAqC;AAC3D,QAAMxB,0BAA0BwB,MAAM;GAClCwB,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GAClB,CAAA;;CAGJ,MAAMiD,gBAAgB5B,MAAsB6B,UAAiC;AAQzE,MAAI,CAACC,MAPkBvD,eAAe;GAClCiD,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GACdyC,QAAQpB;GACR+B,gBAAgBF;GACpB,CAAA,CAGI,OAAM,IAAIpD,uBAAAA"}
@@ -78,7 +78,7 @@ var UserRepositoryAdapter = class {
78
78
  }
79
79
  async findOneByName(name, realmKey) {
80
80
  const qb = this.repository.createQueryBuilder("user");
81
- qb.where("user.name LIKE :name", { name });
81
+ qb.where("user.name = :name", { name });
82
82
  if (realmKey) {
83
83
  const realm = await this.realmRepository.resolve(realmKey);
84
84
  if (realm) qb.andWhere("user.realm_id = :realmId", { realmId: realm.id });
@@ -94,7 +94,7 @@ var UserRepositoryAdapter = class {
94
94
  const qb = this.repository.createQueryBuilder("user");
95
95
  if (isUUID(id)) qb.where("user.id = :id", { id });
96
96
  else {
97
- qb.where("user.name LIKE :name", { name: id });
97
+ qb.where("user.name = :name", { name: id });
98
98
  if (realmKey) {
99
99
  const realm = await this.realmRepository.resolve(realmKey);
100
100
  if (realm) qb.andWhere("user.realm_id = :realmId", { realmId: realm.id });
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","CachePrefix","UserEntity","UserPermissionEntity","UserRoleEntity","translateWhereConditions","loadBoundPermissions","RealmRepositoryAdapter","UserRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","default","allowed","filters","maxLimit","relations","onJoin","_property","key","q","addGroupBy","sort","entities","total","getManyAndCount","extendManyWithEA","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findOne","findManyBy","findBy","findOneByWithEmail","addSelect","translated","create","merge","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","entries","getRepository","find","user_id","role","cache","prefix","USER_OWNED_ROLES","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","USER_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/user/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role, User } from '@authup/core-kit';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IUserRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport type { UserRepository } from '../../../../../adapters/database/domains/index.ts';\nimport {\n CachePrefix,\n UserEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type UserRepositoryAdapterContext = {\n repository: UserRepository,\n realmRepository: Repository<Realm>,\n};\n\nexport class UserRepositoryAdapter implements IUserRepository {\n private readonly repository: UserRepository;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: UserRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<User>> {\n const qb = this.repository.createQueryBuilder('user');\n qb.groupBy('user.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n filters: { allowed: ['id', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n relations: {\n allowed: ['realm'],\n onJoin: (_property: string, key: string, q: any) => {\n q.addGroupBy(`${key}.id`);\n },\n },\n sort: { allowed: ['id', 'name', 'display_name', 'created_at', 'updated_at'] },\n });\n\n const [entities, total] = await qb.getManyAndCount();\n\n await this.repository.extendManyWithEA(entities);\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<User | 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<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.where('user.name LIKE :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\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<User | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findOne(id: string, query?: Record<string, any>, realmKey?: string): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n\n if (isUUID(id)) {\n qb.where('user.id = :id', { id });\n } else {\n qb.where('user.name LIKE :name', { name: id });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\n }\n }\n\n applyQuery(qb, query || {}, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n relations: { allowed: ['realm'] },\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 findManyBy(where: Record<string, any>): Promise<User[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<User | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneByWithEmail(where: Record<string, any>): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.addSelect('user.email');\n\n const translated = translateWhereConditions(where);\n qb.where(translated);\n\n return qb.getOne();\n }\n\n create(data: Partial<User>): User {\n return this.repository.create(data);\n }\n\n merge(entity: User, data: Partial<User>): User {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: User): Promise<User> {\n return this.repository.save(entity);\n }\n\n async remove(entity: User): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<User>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n });\n }\n\n async checkUniqueness(data: Partial<User>, existing?: User): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | User): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(UserRoleEntity)\n .find({\n where: { user_id: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.USER_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 | User): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: UserPermissionEntity,\n where: { user_id: id },\n cachePrefix: CachePrefix.USER_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","CachePrefix","UserEntity","UserPermissionEntity","UserRoleEntity","translateWhereConditions","loadBoundPermissions","RealmRepositoryAdapter","UserRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","default","allowed","filters","maxLimit","relations","onJoin","_property","key","q","addGroupBy","sort","entities","total","getManyAndCount","extendManyWithEA","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findOne","findManyBy","findBy","findOneByWithEmail","addSelect","translated","create","merge","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","entries","getRepository","find","user_id","role","cache","prefix","USER_OWNED_ROLES","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","USER_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/user/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role, User } from '@authup/core-kit';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IUserRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport type { UserRepository } from '../../../../../adapters/database/domains/index.ts';\nimport {\n CachePrefix,\n UserEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type UserRepositoryAdapterContext = {\n repository: UserRepository,\n realmRepository: Repository<Realm>,\n};\n\nexport class UserRepositoryAdapter implements IUserRepository {\n private readonly repository: UserRepository;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: UserRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<User>> {\n const qb = this.repository.createQueryBuilder('user');\n qb.groupBy('user.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n filters: { allowed: ['id', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n relations: {\n allowed: ['realm'],\n onJoin: (_property: string, key: string, q: any) => {\n q.addGroupBy(`${key}.id`);\n },\n },\n sort: { allowed: ['id', 'name', 'display_name', 'created_at', 'updated_at'] },\n });\n\n const [entities, total] = await qb.getManyAndCount();\n\n await this.repository.extendManyWithEA(entities);\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<User | 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<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.where('user.name = :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\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<User | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findOne(id: string, query?: Record<string, any>, realmKey?: string): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n\n if (isUUID(id)) {\n qb.where('user.id = :id', { id });\n } else {\n qb.where('user.name = :name', { name: id });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\n }\n }\n\n applyQuery(qb, query || {}, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n relations: { allowed: ['realm'] },\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 findManyBy(where: Record<string, any>): Promise<User[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<User | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneByWithEmail(where: Record<string, any>): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.addSelect('user.email');\n\n const translated = translateWhereConditions(where);\n qb.where(translated);\n\n return qb.getOne();\n }\n\n create(data: Partial<User>): User {\n return this.repository.create(data);\n }\n\n merge(entity: User, data: Partial<User>): User {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: User): Promise<User> {\n return this.repository.save(entity);\n }\n\n async remove(entity: User): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<User>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n });\n }\n\n async checkUniqueness(data: Partial<User>, existing?: User): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | User): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(UserRoleEntity)\n .find({\n where: { user_id: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.USER_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 | User): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: UserPermissionEntity,\n where: { user_id: id },\n cachePrefix: CachePrefix.USER_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/http/modules/controller.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA2ErC,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,qCAAqC,EACrC,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EACrB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAElB,eAAe,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAQH,uBAAuB,EAKvB,mBAAmB,EActB,MAAM,2BAA2B,CAAC;AAOnC,qBAAa,oBAAoB;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqFjE,eAAe,CAAC,SAAS,EAAE,UAAU;IAuBrC,WAAW,CAAC,SAAS,EAAE,UAAU;IA4CjC,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAM5C,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAIpD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAInD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAqBnD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAqB/C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiC5C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiB5C,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAoBrC,0BAA0B,CAAC,SAAS,EAAE,UAAU;IA8CtD,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAYtD,0BAA0B,CAAC,SAAS,EAAE,UAAU;IAShD,2BAA2B,CAAC,SAAS,EAAE,UAAU;IAQjD,+BAA+B,CAAC,SAAS,EAAE,UAAU;IAYrD,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAS/C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAYnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAQtD,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAe3C,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAYnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAS9C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAqB5C,oCAAoC,CAAC,SAAS,EAAE,UAAU;IAS1D,mBAAmB,CAAC,SAAS,EAAE,UAAU;IAMzC,qBAAqB,CAAC,SAAS,EAAE,UAAU;CAe9C"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/http/modules/controller.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA2ErC,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,qCAAqC,EACrC,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EACrB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAElB,eAAe,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EASH,uBAAuB,EAKvB,mBAAmB,EActB,MAAM,2BAA2B,CAAC;AAOnC,qBAAa,oBAAoB;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqFjE,eAAe,CAAC,SAAS,EAAE,UAAU;IAuBrC,WAAW,CAAC,SAAS,EAAE,UAAU;IAgDjC,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAM5C,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAIpD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAInD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAqBnD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAqB/C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiC5C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiB5C,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAoBrC,0BAA0B,CAAC,SAAS,EAAE,UAAU;IA8CtD,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAYtD,0BAA0B,CAAC,SAAS,EAAE,UAAU;IAShD,2BAA2B,CAAC,SAAS,EAAE,UAAU;IAQjD,+BAA+B,CAAC,SAAS,EAAE,UAAU;IAYrD,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAS/C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAYnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAQtD,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAe3C,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAYnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAS9C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAqB5C,oCAAoC,CAAC,SAAS,EAAE,UAAU;IAS1D,mBAAmB,CAAC,SAAS,EAAE,UAAU;IAMzC,qBAAqB,CAAC,SAAS,EAAE,UAAU;CAe9C"}
@@ -47,6 +47,7 @@ import { UserAttributeService } from "../../../../core/entities/user-attribute/s
47
47
  import { UserPermissionService } from "../../../../core/entities/user-permission/service.mjs";
48
48
  import { UserRoleService } from "../../../../core/entities/user-role/service.mjs";
49
49
  import { IdentityProviderRoleMappingService } from "../../../../core/entities/identity-provider-role-mapping/service.mjs";
50
+ import { OAuth2ClientAuthenticator } from "../../../../core/oauth2/client/authenticator.mjs";
50
51
  import { PasswordRecoveryService } from "../../../../core/identity/password-recovery/service.mjs";
51
52
  import { RegistrationService } from "../../../../core/identity/registration/service.mjs";
52
53
  import "../../../../core/index.mjs";
@@ -227,6 +228,7 @@ var HTTPControllerModule = class {
227
228
  clientAuthenticator: new ClientAuthenticator(identityResolver),
228
229
  robotAuthenticator: new RobotAuthenticator(identityResolver),
229
230
  userAuthenticator: new CredentialsAuthenticator([identityProviderLdapCollectionAuthenticator, new UserAuthenticator(identityResolver)]),
231
+ oauth2ClientAuthenticator: new OAuth2ClientAuthenticator(identityResolver),
230
232
  sessionManager
231
233
  });
232
234
  }
@@ -1 +1 @@
1
- {"version":3,"file":"controller.mjs","names":["decorators","useRequestBody","useRequestCookie","useRequestCookies","useRequestQuery","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","IdentityProviderRepository","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyRepository","RealmEntity","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserAttributeEntity","UserEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","ClientScopeRepositoryAdapter","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","IdentityProviderRoleMappingRepositoryAdapter","PermissionDatabaseProvider","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RobotPermissionRepositoryAdapter","RobotRepositoryAdapter","RobotRoleRepositoryAdapter","RoleAttributeRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","UserAttributeRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","ClientController","ClientPermissionController","ClientRoleController","ClientScopeController","IdentityProviderController","IdentityProviderRoleMappingController","PermissionController","PermissionPolicyController","PolicyController","RealmController","RobotController","RobotPermissionController","RobotRoleController","RoleAttributeController","RoleController","RolePermissionController","ScopeController","UserAttributeController","UserController","UserPermissionController","UserRoleController","ActivateController","AuthorizeController","JwkController","OpenIDController","PasswordForgotController","PasswordResetController","RegisterController","StatusController","TokenController","ClientAuthenticator","ClientPermissionService","ClientRoleService","ClientScopeService","ClientService","CredentialsAuthenticator","IdentityProviderRoleMappingService","PasswordRecoveryService","PermissionPolicyService","PermissionService","PolicyService","RealmService","RegistrationService","RobotAuthenticator","RobotPermissionService","RobotRoleService","RobotService","RoleAttributeService","RolePermissionService","RoleService","ScopeService","UserAttributeService","UserAuthenticator","UserPermissionService","UserRoleService","UserService","AuthenticationInjectionKey","OAuth2InjectionToken","IdentityInjectionKey","ConfigInjectionKey","MailInjectionKey","HTTPControllerModule","mount","router","container","realmController","createRealmController","roleController","createRoleController","permissionController","createPermissionController","permissionPolicyController","createPermissionPolicyController","clientController","createClientController","robotController","createRobotController","clientPermissionController","createClientPermissionController","clientRoleController","createClientRoleController","clientScopeController","createClientScopeController","robotPermissionController","createRobotPermissionController","robotRoleController","createRobotRoleController","roleAttributeController","createRoleAttributeController","rolePermissionController","createRolePermissionController","scopeController","createScopeController","userController","createUserController","userAttributeController","createUserAttributeController","userPermissionController","createUserPermissionController","userRoleController","createUserRoleController","policyController","createPolicyController","identityProviderRoleController","createIdentityProviderRoleController","use","controllers","createAuthorize","createToken","createJwkController","createOpenIDController","createActivateController","createPasswordForgotController","createPasswordResetController","createRegisterController","createIdentityProvider","parameter","body","context","name","request","cookie","query","config","resolve","accessTokenIssuer","AccessTokenIssuer","openIdTokenIssuer","OpenIDTokenIssuer","codeIssuer","AuthorizationCodeIssuer","codeRequestVerifier","AuthorizationCodeRequestVerifier","identityResolver","Resolver","options","baseURL","publicUrl","sessionManager","SessionManager","codeVerifier","AuthorizationCodeVerifier","refreshTokenIssuer","RefreshTokenIssuer","tokenRevoker","TokenRevoker","tokenVerifier","TokenVerifier","identityProviderLdapCollectionAuthenticator","ProviderLdapCollectionAuthenticator","identityPermissionProvider","PermissionProvider","clientAuthenticator","robotAuthenticator","userAuthenticator","service","createRegistrationService","createPasswordRecoveryService","dataSource","DataSource","realmRepository","repository","mailClient","passwordRecoveryEnabled","emailVerificationEnabled","registrationEnabled","accountManager","ProviderAccountManager","stateManager","AuthorizationStateManager","realmRepositoryAdapter","roleRepository","rolePermissionRepository","policyRepository","permissionPolicyRepository","permissionProvider","reservedNames","Set","getMetadata","columns","map","c","propertyName","getRepository","keyRepository"],"sources":["../../../../../src/app/modules/http/modules/controller.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 { Router } from 'routup';\nimport { decorators } from '@routup/decorators';\nimport { useRequestBody } from '@routup/basic/body';\nimport { useRequestCookie, useRequestCookies } from '@routup/basic/cookie';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n ClientScope,\n Permission,\n PermissionPolicy,\n Realm,\n Robot,\n RobotPermission,\n RobotRole,\n Role,\n RoleAttribute,\n RolePermission,\n Scope,\n UserAttribute,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n IdentityProviderRepository,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyRepository,\n RealmEntity,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserAttributeEntity,\n UserEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n ClientScopeRepositoryAdapter,\n DatabaseInjectionKey,\n IdentityProviderRepositoryAdapter,\n IdentityProviderRoleMappingRepositoryAdapter,\n PermissionDatabaseProvider,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RobotPermissionRepositoryAdapter,\n RobotRepositoryAdapter,\n RobotRoleRepositoryAdapter,\n RoleAttributeRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n UserAttributeRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../../database/index.ts';\nimport {\n ClientController,\n ClientPermissionController,\n ClientRoleController,\n ClientScopeController, \n IdentityProviderController,\n IdentityProviderRoleMappingController,\n PermissionController,\n PermissionPolicyController,\n PolicyController,\n RealmController,\n RobotController,\n RobotPermissionController,\n RobotRoleController,\n RoleAttributeController,\n RoleController,\n RolePermissionController,\n ScopeController,\n UserAttributeController,\n UserController,\n UserPermissionController,\n UserRoleController,\n} from '../../../../adapters/http/index.ts';\nimport {\n ActivateController,\n AuthorizeController,\n JwkController,\n OpenIDController,\n PasswordForgotController,\n PasswordResetController,\n RegisterController,\n StatusController,\n TokenController,\n} from '../../../../adapters/http/controllers/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientAuthenticator,\n ClientPermissionService,\n ClientRoleService,\n ClientScopeService,\n ClientService,\n CredentialsAuthenticator,\n IdentityProviderRoleMappingService,\n PasswordRecoveryService,\n PermissionPolicyService,\n PermissionService,\n PolicyService,\n RealmService,\n RegistrationService,\n RobotAuthenticator,\n RobotPermissionService,\n RobotRoleService,\n RobotService,\n RoleAttributeService,\n RolePermissionService,\n RoleService,\n ScopeService,\n UserAttributeService,\n UserAuthenticator,\n UserPermissionService,\n UserRoleService,\n UserService,\n} from '../../../../core/index.ts';\nimport { AuthenticationInjectionKey } from '../../authentication/index.ts';\nimport { OAuth2InjectionToken } from '../../oauth2/index.ts';\nimport { IdentityInjectionKey } from '../../identity/index.ts';\nimport { ConfigInjectionKey } from '../../config/index.ts';\nimport { MailInjectionKey } from '../../mail/index.ts';\n\nexport class HTTPControllerModule {\n async mount(router: Router, container: IContainer): Promise<void> {\n const realmController = this.createRealmController(container);\n const roleController = this.createRoleController(container);\n const permissionController = await this.createPermissionController(container);\n const permissionPolicyController = this.createPermissionPolicyController(container);\n const clientController = this.createClientController(container);\n const robotController = this.createRobotController(container);\n const clientPermissionController = this.createClientPermissionController(container);\n const clientRoleController = this.createClientRoleController(container);\n const clientScopeController = this.createClientScopeController(container);\n const robotPermissionController = this.createRobotPermissionController(container);\n const robotRoleController = this.createRobotRoleController(container);\n const roleAttributeController = this.createRoleAttributeController(container);\n const rolePermissionController = this.createRolePermissionController(container);\n const scopeController = this.createScopeController(container);\n const userController = this.createUserController(container);\n const userAttributeController = this.createUserAttributeController(container);\n const userPermissionController = this.createUserPermissionController(container);\n const userRoleController = this.createUserRoleController(container);\n const policyController = this.createPolicyController(container);\n const identityProviderRoleController = this.createIdentityProviderRoleController(container);\n\n router.use(decorators({\n controllers: [\n this.createAuthorize(container),\n this.createToken(container),\n this.createJwkController(container),\n this.createOpenIDController(container),\n this.createActivateController(container),\n this.createPasswordForgotController(container),\n this.createPasswordResetController(container),\n this.createRegisterController(container),\n\n StatusController,\n\n clientController,\n clientPermissionController,\n clientRoleController,\n clientScopeController,\n identityProviderRoleController,\n this.createIdentityProvider(container),\n permissionController,\n permissionPolicyController,\n policyController,\n robotController,\n robotPermissionController,\n robotRoleController,\n realmController,\n roleController,\n roleAttributeController,\n rolePermissionController,\n scopeController,\n userController,\n userAttributeController,\n userPermissionController,\n userRoleController,\n ],\n parameter: {\n body: (context, name) => {\n if (name) {\n return useRequestBody(context.request, name);\n }\n\n return useRequestBody(context.request);\n },\n cookie: (context, name) => {\n if (name) {\n return useRequestCookie(context.request, name);\n }\n\n return useRequestCookies(context.request);\n },\n query: (context, name) => {\n if (name) {\n return useRequestQuery(context.request, name);\n }\n\n return useRequestQuery(context.request);\n },\n },\n }));\n }\n\n // ----------------------------------------------------\n\n createAuthorize(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const openIdTokenIssuer = container.resolve(OAuth2InjectionToken.OpenIDTokenIssuer);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n\n return new AuthorizeController({\n options: { baseURL: config.publicUrl },\n\n accessTokenIssuer,\n openIdTokenIssuer,\n\n codeIssuer,\n codeRequestVerifier,\n\n identityResolver,\n });\n }\n\n createToken(container: IContainer) {\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const codeVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeVerifier);\n\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const refreshTokenIssuer = container.resolve(OAuth2InjectionToken.RefreshTokenIssuer);\n\n const tokenRevoker = container.resolve(OAuth2InjectionToken.TokenRevoker);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n const identityProviderLdapCollectionAuthenticator = container.resolve(IdentityInjectionKey.ProviderLdapCollectionAuthenticator);\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n\n const clientAuthenticator = new ClientAuthenticator(identityResolver);\n const robotAuthenticator = new RobotAuthenticator(identityResolver);\n\n const userAuthenticator = new CredentialsAuthenticator([\n identityProviderLdapCollectionAuthenticator,\n new UserAuthenticator(identityResolver),\n ]);\n\n return new TokenController({\n codeVerifier,\n\n accessTokenIssuer,\n refreshTokenIssuer,\n\n tokenVerifier,\n tokenRevoker,\n\n identityResolver,\n identityPermissionProvider,\n\n clientAuthenticator,\n robotAuthenticator,\n userAuthenticator,\n\n sessionManager,\n });\n }\n\n createOpenIDController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new OpenIDController({ baseURL: config.publicUrl });\n }\n\n createActivateController(container: IContainer) {\n return new ActivateController({ service: this.createRegistrationService(container) });\n }\n\n createPasswordForgotController(container: IContainer) {\n return new PasswordForgotController({ service: this.createPasswordRecoveryService(container) });\n }\n\n createPasswordResetController(container: IContainer) {\n return new PasswordResetController({ service: this.createPasswordRecoveryService(container) });\n }\n\n createPasswordRecoveryService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n\n return new PasswordRecoveryService({\n mailClient,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n passwordRecoveryEnabled: config.passwordRecoveryEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n },\n });\n }\n\n createRegisterController(container: IContainer) {\n return new RegisterController({ service: this.createRegistrationService(container) });\n }\n\n createRegistrationService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n\n return new RegistrationService({\n mailClient,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n registrationEnabled: config.registrationEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n },\n });\n }\n\n createIdentityProvider(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const accountManager = container.resolve(IdentityInjectionKey.ProviderAccountManager);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const stateManager = container.resolve(OAuth2InjectionToken.AuthorizationStateManager);\n\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const repository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository,\n });\n\n return new IdentityProviderController({\n options: { baseURL: config.publicUrl },\n\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n\n accountManager,\n\n codeIssuer,\n codeRequestVerifier,\n stateManager,\n });\n }\n\n createClientController(container: IContainer) {\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new ClientService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new ClientController({\n service,\n repository, \n });\n }\n\n createRobotController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RobotRepositoryAdapter({\n repository: container.resolve<Repository<Robot>>(RobotEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new RobotService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new RobotController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n dataSource,\n });\n }\n\n async createPermissionController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository,\n });\n\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const rolePermissionRepository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const service = new PermissionService({\n repository,\n realmRepository: realmRepositoryAdapter,\n roleRepository,\n rolePermissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const permissionProvider = new PermissionDatabaseProvider(dataSource);\n\n return new PermissionController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider,\n permissionProvider,\n });\n }\n\n createRoleController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new RoleService({\n repository,\n realmRepository, \n });\n return new RoleController({ service });\n }\n\n createClientPermissionController(container: IContainer) {\n const repository = new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new ClientPermissionController({ service });\n }\n\n createClientRoleController(container: IContainer) {\n const repository = new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientRoleService({ repository, identityPermissionProvider });\n return new ClientRoleController({ service });\n }\n\n createClientScopeController(container: IContainer) {\n const repository = new ClientScopeRepositoryAdapter(\n container.resolve<Repository<ClientScope>>(ClientScopeEntity),\n );\n const service = new ClientScopeService({ repository });\n return new ClientScopeController({ service });\n }\n\n createRobotPermissionController(container: IContainer) {\n const repository = new RobotPermissionRepositoryAdapter(\n container.resolve<Repository<RobotPermission>>(RobotPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new RobotPermissionController({ service });\n }\n\n createRobotRoleController(container: IContainer) {\n const repository = new RobotRoleRepositoryAdapter(\n container.resolve<Repository<RobotRole>>(RobotRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotRoleService({ repository, identityPermissionProvider });\n return new RobotRoleController({ service });\n }\n\n createRoleAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RoleAttributeRepositoryAdapter(\n container.resolve<Repository<RoleAttribute>>(RoleAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName),\n );\n const service = new RoleAttributeService({ repository, reservedNames });\n return new RoleAttributeController({ service });\n }\n\n createRolePermissionController(container: IContainer) {\n const repository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RolePermissionService({\n repository,\n identityPermissionProvider, \n });\n return new RolePermissionController({ service });\n }\n\n createPermissionPolicyController(container: IContainer) {\n const repository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n const service = new PermissionPolicyService({ repository });\n return new PermissionPolicyController({ service });\n }\n\n createScopeController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new ScopeService({\n repository,\n realmRepository, \n });\n return new ScopeController({ service });\n }\n\n createUserController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new UserService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new UserController({ service });\n }\n\n createUserAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new UserAttributeRepositoryAdapter(\n container.resolve<Repository<UserAttribute>>(UserAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName),\n );\n const service = new UserAttributeService({ repository, reservedNames });\n return new UserAttributeController({ service });\n }\n\n createUserPermissionController(container: IContainer) {\n const repository = new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new UserPermissionController({ service });\n }\n\n createUserRoleController(container: IContainer) {\n const repository = new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserRoleService({ repository, identityPermissionProvider });\n return new UserRoleController({ service });\n }\n\n createPolicyController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new PolicyService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n return new PolicyController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider, \n });\n }\n\n createIdentityProviderRoleController(container: IContainer) {\n const repository = new IdentityProviderRoleMappingRepositoryAdapter(\n container.resolve<Repository<any>>(IdentityProviderRoleMappingEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new IdentityProviderRoleMappingService({ repository, identityPermissionProvider });\n return new IdentityProviderRoleMappingController({ service });\n }\n\n createJwkController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = dataSource.getRepository(KeyEntity);\n return new JwkController({ repository });\n }\n\n createRealmController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const service = new RealmService({ repository });\n const keyRepository = dataSource.getRepository(KeyEntity);\n\n return new RealmController({\n options: { baseURL: config.publicUrl },\n service,\n keyRepository,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"controller.mjs","names":["decorators","useRequestBody","useRequestCookie","useRequestCookies","useRequestQuery","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","IdentityProviderRepository","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyRepository","RealmEntity","RobotEntity","RobotPermissionEntity","RobotRoleEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserAttributeEntity","UserEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","ClientScopeRepositoryAdapter","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","IdentityProviderRoleMappingRepositoryAdapter","PermissionDatabaseProvider","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RobotPermissionRepositoryAdapter","RobotRepositoryAdapter","RobotRoleRepositoryAdapter","RoleAttributeRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","UserAttributeRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","ClientController","ClientPermissionController","ClientRoleController","ClientScopeController","IdentityProviderController","IdentityProviderRoleMappingController","PermissionController","PermissionPolicyController","PolicyController","RealmController","RobotController","RobotPermissionController","RobotRoleController","RoleAttributeController","RoleController","RolePermissionController","ScopeController","UserAttributeController","UserController","UserPermissionController","UserRoleController","ActivateController","AuthorizeController","JwkController","OpenIDController","PasswordForgotController","PasswordResetController","RegisterController","StatusController","TokenController","ClientAuthenticator","ClientPermissionService","ClientRoleService","ClientScopeService","ClientService","CredentialsAuthenticator","IdentityProviderRoleMappingService","OAuth2ClientAuthenticator","PasswordRecoveryService","PermissionPolicyService","PermissionService","PolicyService","RealmService","RegistrationService","RobotAuthenticator","RobotPermissionService","RobotRoleService","RobotService","RoleAttributeService","RolePermissionService","RoleService","ScopeService","UserAttributeService","UserAuthenticator","UserPermissionService","UserRoleService","UserService","AuthenticationInjectionKey","OAuth2InjectionToken","IdentityInjectionKey","ConfigInjectionKey","MailInjectionKey","HTTPControllerModule","mount","router","container","realmController","createRealmController","roleController","createRoleController","permissionController","createPermissionController","permissionPolicyController","createPermissionPolicyController","clientController","createClientController","robotController","createRobotController","clientPermissionController","createClientPermissionController","clientRoleController","createClientRoleController","clientScopeController","createClientScopeController","robotPermissionController","createRobotPermissionController","robotRoleController","createRobotRoleController","roleAttributeController","createRoleAttributeController","rolePermissionController","createRolePermissionController","scopeController","createScopeController","userController","createUserController","userAttributeController","createUserAttributeController","userPermissionController","createUserPermissionController","userRoleController","createUserRoleController","policyController","createPolicyController","identityProviderRoleController","createIdentityProviderRoleController","use","controllers","createAuthorize","createToken","createJwkController","createOpenIDController","createActivateController","createPasswordForgotController","createPasswordResetController","createRegisterController","createIdentityProvider","parameter","body","context","name","request","cookie","query","config","resolve","accessTokenIssuer","AccessTokenIssuer","openIdTokenIssuer","OpenIDTokenIssuer","codeIssuer","AuthorizationCodeIssuer","codeRequestVerifier","AuthorizationCodeRequestVerifier","identityResolver","Resolver","options","baseURL","publicUrl","sessionManager","SessionManager","codeVerifier","AuthorizationCodeVerifier","refreshTokenIssuer","RefreshTokenIssuer","tokenRevoker","TokenRevoker","tokenVerifier","TokenVerifier","identityProviderLdapCollectionAuthenticator","ProviderLdapCollectionAuthenticator","identityPermissionProvider","PermissionProvider","clientAuthenticator","robotAuthenticator","userAuthenticator","oauth2ClientAuthenticator","service","createRegistrationService","createPasswordRecoveryService","dataSource","DataSource","realmRepository","repository","mailClient","passwordRecoveryEnabled","emailVerificationEnabled","registrationEnabled","accountManager","ProviderAccountManager","stateManager","AuthorizationStateManager","realmRepositoryAdapter","roleRepository","rolePermissionRepository","policyRepository","permissionPolicyRepository","permissionProvider","reservedNames","Set","getMetadata","columns","map","c","propertyName","getRepository","keyRepository"],"sources":["../../../../../src/app/modules/http/modules/controller.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 { Router } from 'routup';\nimport { decorators } from '@routup/decorators';\nimport { useRequestBody } from '@routup/basic/body';\nimport { useRequestCookie, useRequestCookies } from '@routup/basic/cookie';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n ClientScope,\n Permission,\n PermissionPolicy,\n Realm,\n Robot,\n RobotPermission,\n RobotRole,\n Role,\n RoleAttribute,\n RolePermission,\n Scope,\n UserAttribute,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n IdentityProviderRepository,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyRepository,\n RealmEntity,\n RobotEntity,\n RobotPermissionEntity,\n RobotRoleEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserAttributeEntity,\n UserEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n ClientScopeRepositoryAdapter,\n DatabaseInjectionKey,\n IdentityProviderRepositoryAdapter,\n IdentityProviderRoleMappingRepositoryAdapter,\n PermissionDatabaseProvider,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RobotPermissionRepositoryAdapter,\n RobotRepositoryAdapter,\n RobotRoleRepositoryAdapter,\n RoleAttributeRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n UserAttributeRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../../database/index.ts';\nimport {\n ClientController,\n ClientPermissionController,\n ClientRoleController,\n ClientScopeController, \n IdentityProviderController,\n IdentityProviderRoleMappingController,\n PermissionController,\n PermissionPolicyController,\n PolicyController,\n RealmController,\n RobotController,\n RobotPermissionController,\n RobotRoleController,\n RoleAttributeController,\n RoleController,\n RolePermissionController,\n ScopeController,\n UserAttributeController,\n UserController,\n UserPermissionController,\n UserRoleController,\n} from '../../../../adapters/http/index.ts';\nimport {\n ActivateController,\n AuthorizeController,\n JwkController,\n OpenIDController,\n PasswordForgotController,\n PasswordResetController,\n RegisterController,\n StatusController,\n TokenController,\n} from '../../../../adapters/http/controllers/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientAuthenticator,\n ClientPermissionService,\n ClientRoleService,\n ClientScopeService,\n ClientService,\n CredentialsAuthenticator,\n IdentityProviderRoleMappingService,\n OAuth2ClientAuthenticator,\n PasswordRecoveryService,\n PermissionPolicyService,\n PermissionService,\n PolicyService,\n RealmService,\n RegistrationService,\n RobotAuthenticator,\n RobotPermissionService,\n RobotRoleService,\n RobotService,\n RoleAttributeService,\n RolePermissionService,\n RoleService,\n ScopeService,\n UserAttributeService,\n UserAuthenticator,\n UserPermissionService,\n UserRoleService,\n UserService,\n} from '../../../../core/index.ts';\nimport { AuthenticationInjectionKey } from '../../authentication/index.ts';\nimport { OAuth2InjectionToken } from '../../oauth2/index.ts';\nimport { IdentityInjectionKey } from '../../identity/index.ts';\nimport { ConfigInjectionKey } from '../../config/index.ts';\nimport { MailInjectionKey } from '../../mail/index.ts';\n\nexport class HTTPControllerModule {\n async mount(router: Router, container: IContainer): Promise<void> {\n const realmController = this.createRealmController(container);\n const roleController = this.createRoleController(container);\n const permissionController = await this.createPermissionController(container);\n const permissionPolicyController = this.createPermissionPolicyController(container);\n const clientController = this.createClientController(container);\n const robotController = this.createRobotController(container);\n const clientPermissionController = this.createClientPermissionController(container);\n const clientRoleController = this.createClientRoleController(container);\n const clientScopeController = this.createClientScopeController(container);\n const robotPermissionController = this.createRobotPermissionController(container);\n const robotRoleController = this.createRobotRoleController(container);\n const roleAttributeController = this.createRoleAttributeController(container);\n const rolePermissionController = this.createRolePermissionController(container);\n const scopeController = this.createScopeController(container);\n const userController = this.createUserController(container);\n const userAttributeController = this.createUserAttributeController(container);\n const userPermissionController = this.createUserPermissionController(container);\n const userRoleController = this.createUserRoleController(container);\n const policyController = this.createPolicyController(container);\n const identityProviderRoleController = this.createIdentityProviderRoleController(container);\n\n router.use(decorators({\n controllers: [\n this.createAuthorize(container),\n this.createToken(container),\n this.createJwkController(container),\n this.createOpenIDController(container),\n this.createActivateController(container),\n this.createPasswordForgotController(container),\n this.createPasswordResetController(container),\n this.createRegisterController(container),\n\n StatusController,\n\n clientController,\n clientPermissionController,\n clientRoleController,\n clientScopeController,\n identityProviderRoleController,\n this.createIdentityProvider(container),\n permissionController,\n permissionPolicyController,\n policyController,\n robotController,\n robotPermissionController,\n robotRoleController,\n realmController,\n roleController,\n roleAttributeController,\n rolePermissionController,\n scopeController,\n userController,\n userAttributeController,\n userPermissionController,\n userRoleController,\n ],\n parameter: {\n body: (context, name) => {\n if (name) {\n return useRequestBody(context.request, name);\n }\n\n return useRequestBody(context.request);\n },\n cookie: (context, name) => {\n if (name) {\n return useRequestCookie(context.request, name);\n }\n\n return useRequestCookies(context.request);\n },\n query: (context, name) => {\n if (name) {\n return useRequestQuery(context.request, name);\n }\n\n return useRequestQuery(context.request);\n },\n },\n }));\n }\n\n // ----------------------------------------------------\n\n createAuthorize(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const openIdTokenIssuer = container.resolve(OAuth2InjectionToken.OpenIDTokenIssuer);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n\n return new AuthorizeController({\n options: { baseURL: config.publicUrl },\n\n accessTokenIssuer,\n openIdTokenIssuer,\n\n codeIssuer,\n codeRequestVerifier,\n\n identityResolver,\n });\n }\n\n createToken(container: IContainer) {\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const codeVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeVerifier);\n\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const refreshTokenIssuer = container.resolve(OAuth2InjectionToken.RefreshTokenIssuer);\n\n const tokenRevoker = container.resolve(OAuth2InjectionToken.TokenRevoker);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n const identityProviderLdapCollectionAuthenticator = container.resolve(IdentityInjectionKey.ProviderLdapCollectionAuthenticator);\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n\n const clientAuthenticator = new ClientAuthenticator(identityResolver);\n const robotAuthenticator = new RobotAuthenticator(identityResolver);\n\n const userAuthenticator = new CredentialsAuthenticator([\n identityProviderLdapCollectionAuthenticator,\n new UserAuthenticator(identityResolver),\n ]);\n\n const oauth2ClientAuthenticator = new OAuth2ClientAuthenticator(identityResolver);\n\n return new TokenController({\n codeVerifier,\n\n accessTokenIssuer,\n refreshTokenIssuer,\n\n tokenVerifier,\n tokenRevoker,\n\n identityResolver,\n identityPermissionProvider,\n\n clientAuthenticator,\n robotAuthenticator,\n userAuthenticator,\n\n oauth2ClientAuthenticator,\n\n sessionManager,\n });\n }\n\n createOpenIDController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new OpenIDController({ baseURL: config.publicUrl });\n }\n\n createActivateController(container: IContainer) {\n return new ActivateController({ service: this.createRegistrationService(container) });\n }\n\n createPasswordForgotController(container: IContainer) {\n return new PasswordForgotController({ service: this.createPasswordRecoveryService(container) });\n }\n\n createPasswordResetController(container: IContainer) {\n return new PasswordResetController({ service: this.createPasswordRecoveryService(container) });\n }\n\n createPasswordRecoveryService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n\n return new PasswordRecoveryService({\n mailClient,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n passwordRecoveryEnabled: config.passwordRecoveryEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n },\n });\n }\n\n createRegisterController(container: IContainer) {\n return new RegisterController({ service: this.createRegistrationService(container) });\n }\n\n createRegistrationService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n\n return new RegistrationService({\n mailClient,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n options: {\n registrationEnabled: config.registrationEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n },\n });\n }\n\n createIdentityProvider(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const accountManager = container.resolve(IdentityInjectionKey.ProviderAccountManager);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const stateManager = container.resolve(OAuth2InjectionToken.AuthorizationStateManager);\n\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const repository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository,\n });\n\n return new IdentityProviderController({\n options: { baseURL: config.publicUrl },\n\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n\n accountManager,\n\n codeIssuer,\n codeRequestVerifier,\n stateManager,\n });\n }\n\n createClientController(container: IContainer) {\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new ClientService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new ClientController({\n service,\n repository, \n });\n }\n\n createRobotController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RobotRepositoryAdapter({\n repository: container.resolve<Repository<Robot>>(RobotEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new RobotService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new RobotController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n dataSource,\n });\n }\n\n async createPermissionController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository,\n });\n\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const rolePermissionRepository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const service = new PermissionService({\n repository,\n realmRepository: realmRepositoryAdapter,\n roleRepository,\n rolePermissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const permissionProvider = new PermissionDatabaseProvider(dataSource);\n\n return new PermissionController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider,\n permissionProvider,\n });\n }\n\n createRoleController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new RoleService({\n repository,\n realmRepository, \n });\n return new RoleController({ service });\n }\n\n createClientPermissionController(container: IContainer) {\n const repository = new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new ClientPermissionController({ service });\n }\n\n createClientRoleController(container: IContainer) {\n const repository = new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientRoleService({ repository, identityPermissionProvider });\n return new ClientRoleController({ service });\n }\n\n createClientScopeController(container: IContainer) {\n const repository = new ClientScopeRepositoryAdapter(\n container.resolve<Repository<ClientScope>>(ClientScopeEntity),\n );\n const service = new ClientScopeService({ repository });\n return new ClientScopeController({ service });\n }\n\n createRobotPermissionController(container: IContainer) {\n const repository = new RobotPermissionRepositoryAdapter(\n container.resolve<Repository<RobotPermission>>(RobotPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new RobotPermissionController({ service });\n }\n\n createRobotRoleController(container: IContainer) {\n const repository = new RobotRoleRepositoryAdapter(\n container.resolve<Repository<RobotRole>>(RobotRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RobotRoleService({ repository, identityPermissionProvider });\n return new RobotRoleController({ service });\n }\n\n createRoleAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RoleAttributeRepositoryAdapter(\n container.resolve<Repository<RoleAttribute>>(RoleAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName),\n );\n const service = new RoleAttributeService({ repository, reservedNames });\n return new RoleAttributeController({ service });\n }\n\n createRolePermissionController(container: IContainer) {\n const repository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RolePermissionService({\n repository,\n identityPermissionProvider, \n });\n return new RolePermissionController({ service });\n }\n\n createPermissionPolicyController(container: IContainer) {\n const repository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n const service = new PermissionPolicyService({ repository });\n return new PermissionPolicyController({ service });\n }\n\n createScopeController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new ScopeService({\n repository,\n realmRepository, \n });\n return new ScopeController({ service });\n }\n\n createUserController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new UserService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n return new UserController({ service });\n }\n\n createUserAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new UserAttributeRepositoryAdapter(\n container.resolve<Repository<UserAttribute>>(UserAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName),\n );\n const service = new UserAttributeService({ repository, reservedNames });\n return new UserAttributeController({ service });\n }\n\n createUserPermissionController(container: IContainer) {\n const repository = new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserPermissionService({\n repository,\n identityPermissionProvider, \n });\n return new UserPermissionController({ service });\n }\n\n createUserRoleController(container: IContainer) {\n const repository = new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserRoleService({ repository, identityPermissionProvider });\n return new UserRoleController({ service });\n }\n\n createPolicyController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new PolicyService({\n repository,\n realmRepository: realmRepositoryAdapter, \n });\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n return new PolicyController({\n service,\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider, \n });\n }\n\n createIdentityProviderRoleController(container: IContainer) {\n const repository = new IdentityProviderRoleMappingRepositoryAdapter(\n container.resolve<Repository<any>>(IdentityProviderRoleMappingEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new IdentityProviderRoleMappingService({ repository, identityPermissionProvider });\n return new IdentityProviderRoleMappingController({ service });\n }\n\n createJwkController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = dataSource.getRepository(KeyEntity);\n return new JwkController({ repository });\n }\n\n createRealmController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const service = new RealmService({ repository });\n const keyRepository = dataSource.getRepository(KeyEntity);\n\n return new RealmController({\n options: { baseURL: config.publicUrl },\n service,\n keyRepository,\n });\n }\n}\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ export declare class ClientService extends AbstractEntityService implements ICli
15
15
  protected validator: ClientValidator;
16
16
  constructor(ctx: ClientServiceContext);
17
17
  getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<Client>>;
18
- getOne(idOrName: string, actor: ActorContext, realmId?: string): Promise<Client>;
18
+ getOne(idOrName: string, actor: ActorContext, query?: Record<string, any>, realmId?: string): Promise<Client>;
19
19
  create(data: Record<string, any>, actor: ActorContext): Promise<Client>;
20
20
  update(idOrName: string, data: Record<string, any>, actor: ActorContext): Promise<Client>;
21
21
  save(idOrName: string | undefined, data: Record<string, any>, actor: ActorContext, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/service.ts"],"names":[],"mappings":"AAUA,OAAO,EACH,eAAe,EAGlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,MAAM,oBAAoB,GAAG;IAC/B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,eAAe,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,qBAAa,aAAc,SAAQ,qBAAsB,YAAW,cAAc;IAC9E,SAAS,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAExC,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;gBAEzB,GAAG,EAAE,oBAAoB;IAO/B,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAmD5C,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAiDZ,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC;IAKZ,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC;IAKZ,IAAI,CACN,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GACvC,OAAO,CAAC;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC;IAwII,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC;CAmBrB"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/service.ts"],"names":[],"mappings":"AAUA,OAAO,EACH,eAAe,EAGlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,MAAM,oBAAoB,GAAG;IAC/B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,eAAe,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,qBAAa,aAAc,SAAQ,qBAAsB,YAAW,cAAc;IAC9E,SAAS,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAExC,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;gBAEzB,GAAG,EAAE,oBAAoB;IAO/B,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAmD5C,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IA2CZ,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC;IAKZ,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC;IAKZ,IAAI,CACN,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GACvC,OAAO,CAAC;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC;IAwII,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC;CAmBrB"}