@authup/server-core 1.0.0-beta.50 → 1.0.0-beta.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/database/domains/client-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/client-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/client-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/client-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/robot-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/robot-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/robot-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/robot-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/robot-role/entity.mjs +1 -1
- package/dist/adapters/database/domains/robot-role/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/role-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/role-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/role-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/role-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/domains/user-permission/entity.d.ts +2 -1
- package/dist/adapters/database/domains/user-permission/entity.d.ts.map +1 -1
- package/dist/adapters/database/domains/user-permission/entity.mjs +6 -0
- package/dist/adapters/database/domains/user-permission/entity.mjs.map +1 -1
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.d.ts +7 -0
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.d.ts.map +1 -0
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.mjs +85 -0
- package/dist/adapters/database/migrations/mysql/1779300000000-Default.mjs.map +1 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.d.ts +7 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.d.ts.map +1 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.mjs +87 -0
- package/dist/adapters/database/migrations/postgres/1779300000000-Default.mjs.map +1 -0
- package/dist/adapters/http/adapters/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +12 -4
- package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +2 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts +1 -0
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs.map +1 -1
- package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -2
- package/dist/adapters/http/adapters/oauth2/index.mjs +2 -2
- package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +24 -9
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs +2 -1
- package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts +2 -1
- package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
- package/dist/adapters/http/index.mjs +3 -3
- package/dist/adapters/http/request/helpers/identity.d.ts +0 -1
- package/dist/adapters/http/request/helpers/identity.d.ts.map +1 -1
- package/dist/adapters/http/request/helpers/identity.mjs +2 -5
- package/dist/adapters/http/request/helpers/identity.mjs.map +1 -1
- package/dist/adapters/http/request/helpers/index.mjs +2 -2
- package/dist/adapters/http/request/index.mjs +2 -2
- package/dist/adapters/http/request/permission/module.mjs +2 -2
- package/dist/adapters/http/request/permission/module.mjs.map +1 -1
- package/dist/app/modules/database/repositories/bindings.d.ts +2 -0
- package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/bindings.mjs +3 -1
- package/dist/app/modules/database/repositories/bindings.mjs.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs +4 -2
- package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
- package/dist/app/modules/database/repositories/permission-provider/module.d.ts +2 -2
- package/dist/app/modules/database/repositories/permission-provider/module.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/permission-provider/module.mjs +4 -3
- package/dist/app/modules/database/repositories/permission-provider/module.mjs.map +1 -1
- package/dist/app/modules/database/repositories/realm/repository.d.ts.map +1 -1
- package/dist/app/modules/database/repositories/realm/repository.mjs +6 -2
- package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
- package/dist/app/modules/http/modules/controller.d.ts +2 -0
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +18 -0
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/client.mjs +2 -2
- package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/robot.mjs +2 -2
- package/dist/app/modules/identity/repositories/robot.mjs.map +1 -1
- package/dist/app/modules/identity/repositories/user.mjs +2 -2
- package/dist/app/modules/identity/repositories/user.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/client/repository.mjs +2 -2
- package/dist/app/modules/oauth2/repositories/client/repository.mjs.map +1 -1
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +0 -1
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/default/module.mjs +14 -56
- package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
- package/dist/core/entities/client/service.mjs +25 -7
- package/dist/core/entities/client/service.mjs.map +1 -1
- package/dist/core/entities/client-permission/service.d.ts +7 -4
- package/dist/core/entities/client-permission/service.d.ts.map +1 -1
- package/dist/core/entities/client-permission/service.mjs +59 -19
- package/dist/core/entities/client-permission/service.mjs.map +1 -1
- package/dist/core/entities/client-role/service.d.ts +3 -2
- package/dist/core/entities/client-role/service.d.ts.map +1 -1
- package/dist/core/entities/client-role/service.mjs +12 -5
- package/dist/core/entities/client-role/service.mjs.map +1 -1
- package/dist/core/entities/client-scope/service.d.ts +3 -2
- package/dist/core/entities/client-scope/service.d.ts.map +1 -1
- package/dist/core/entities/client-scope/service.mjs +12 -5
- package/dist/core/entities/client-scope/service.mjs.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.d.ts +7 -4
- package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
- package/dist/core/entities/identity-provider-role-mapping/service.mjs +29 -6
- package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
- package/dist/core/entities/permission/service.d.ts +3 -5
- package/dist/core/entities/permission/service.d.ts.map +1 -1
- package/dist/core/entities/permission/service.mjs +30 -24
- package/dist/core/entities/permission/service.mjs.map +1 -1
- package/dist/core/entities/permission-policy/service.d.ts +3 -2
- package/dist/core/entities/permission-policy/service.d.ts.map +1 -1
- package/dist/core/entities/permission-policy/service.mjs +12 -5
- package/dist/core/entities/permission-policy/service.mjs.map +1 -1
- package/dist/core/entities/policy/service.d.ts.map +1 -1
- package/dist/core/entities/policy/service.mjs +16 -7
- package/dist/core/entities/policy/service.mjs.map +1 -1
- package/dist/core/entities/realm/service.mjs +4 -4
- package/dist/core/entities/realm/service.mjs.map +1 -1
- package/dist/core/entities/realm/types.d.ts +4 -0
- package/dist/core/entities/realm/types.d.ts.map +1 -1
- package/dist/core/entities/robot/service.d.ts.map +1 -1
- package/dist/core/entities/robot/service.mjs +29 -11
- package/dist/core/entities/robot/service.mjs.map +1 -1
- package/dist/core/entities/robot-permission/service.d.ts +7 -4
- package/dist/core/entities/robot-permission/service.d.ts.map +1 -1
- package/dist/core/entities/robot-permission/service.mjs +59 -19
- package/dist/core/entities/robot-permission/service.mjs.map +1 -1
- package/dist/core/entities/robot-role/service.d.ts +3 -2
- package/dist/core/entities/robot-role/service.d.ts.map +1 -1
- package/dist/core/entities/robot-role/service.mjs +12 -5
- package/dist/core/entities/robot-role/service.mjs.map +1 -1
- package/dist/core/entities/role/service.d.ts.map +1 -1
- package/dist/core/entities/role/service.mjs +16 -7
- package/dist/core/entities/role/service.mjs.map +1 -1
- package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/role-attribute/service.mjs +24 -6
- package/dist/core/entities/role-attribute/service.mjs.map +1 -1
- package/dist/core/entities/role-permission/service.d.ts +7 -4
- package/dist/core/entities/role-permission/service.d.ts.map +1 -1
- package/dist/core/entities/role-permission/service.mjs +61 -21
- package/dist/core/entities/role-permission/service.mjs.map +1 -1
- package/dist/core/entities/scope/service.d.ts.map +1 -1
- package/dist/core/entities/scope/service.mjs +16 -7
- package/dist/core/entities/scope/service.mjs.map +1 -1
- package/dist/core/entities/user/service.d.ts.map +1 -1
- package/dist/core/entities/user/service.mjs +28 -10
- package/dist/core/entities/user/service.mjs.map +1 -1
- package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
- package/dist/core/entities/user-attribute/service.mjs +18 -6
- package/dist/core/entities/user-attribute/service.mjs.map +1 -1
- package/dist/core/entities/user-permission/service.d.ts +7 -4
- package/dist/core/entities/user-permission/service.d.ts.map +1 -1
- package/dist/core/entities/user-permission/service.mjs +59 -19
- package/dist/core/entities/user-permission/service.mjs.map +1 -1
- package/dist/core/entities/user-role/service.d.ts +3 -2
- package/dist/core/entities/user-role/service.d.ts.map +1 -1
- package/dist/core/entities/user-role/service.mjs +12 -5
- package/dist/core/entities/user-role/service.mjs.map +1 -1
- package/dist/core/identity/index.mjs +2 -1
- package/dist/core/identity/permission/checker/service.d.ts.map +1 -1
- package/dist/core/identity/permission/checker/service.mjs +6 -4
- package/dist/core/identity/permission/checker/service.mjs.map +1 -1
- package/dist/core/identity/permission/index.d.ts +1 -0
- package/dist/core/identity/permission/index.d.ts.map +1 -1
- package/dist/core/identity/permission/index.mjs +2 -1
- package/dist/core/identity/permission/junction-grant.d.ts +49 -0
- package/dist/core/identity/permission/junction-grant.d.ts.map +1 -0
- package/dist/core/identity/permission/junction-grant.mjs +57 -0
- package/dist/core/identity/permission/junction-grant.mjs.map +1 -0
- package/dist/core/identity/permission/module.d.ts +2 -3
- package/dist/core/identity/permission/module.d.ts.map +1 -1
- package/dist/core/identity/permission/module.mjs +52 -14
- package/dist/core/identity/permission/module.mjs.map +1 -1
- package/dist/core/identity/permission/types.d.ts +22 -2
- package/dist/core/identity/permission/types.d.ts.map +1 -1
- package/dist/core/index.mjs +2 -1
- package/dist/core/provisioning/entities/role/types.d.ts +8 -5
- package/dist/core/provisioning/entities/role/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/base.d.ts +3 -0
- package/dist/core/provisioning/synchronizer/base.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/base.mjs +3 -0
- package/dist/core/provisioning/synchronizer/base.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/client/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/client/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs +3 -0
- package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/index.mjs +1 -0
- package/dist/core/provisioning/synchronizer/permission/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs +2 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/policy/module.d.ts +2 -0
- package/dist/core/provisioning/synchronizer/policy/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/policy/module.mjs +19 -1
- package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/robot/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/robot/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/robot/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/role/module.d.ts +2 -3
- package/dist/core/provisioning/synchronizer/role/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/role/module.mjs +14 -20
- package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/role/types.d.ts +1 -2
- package/dist/core/provisioning/synchronizer/role/types.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/scope/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/user/module.d.ts.map +1 -1
- package/dist/core/provisioning/synchronizer/user/module.mjs +1 -0
- package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
- package/dist/core/security/policy/evaluator.d.ts +4 -4
- package/dist/core/security/policy/evaluator.d.ts.map +1 -1
- package/dist/core/security/policy/evaluator.mjs +19 -18
- package/dist/core/security/policy/evaluator.mjs.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/swagger.json +54 -0
- package/dist/ui/client/.vite/ssr-manifest.json +1017 -639
- package/dist/ui/client/assets/index-Cd3uWit-.js +127 -0
- package/dist/ui/client/assets/index-DoCTwJ8M.css +2 -0
- package/dist/ui/client/index.html +2 -2
- package/dist/ui/server/server.js +11086 -2362
- package/package.json +37 -35
- package/dist/ui/client/assets/index-BFXs98mu.js +0 -102
- package/dist/ui/client/assets/index-C_-HM1P-.css +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-resolver.mjs","names":["ProvisioningEntityResolver","repository","resolveGlobal","names","length","hasWildcard","includes","findManyBy","realm_id","client_id","
|
|
1
|
+
{"version":3,"file":"entity-resolver.mjs","names":["ProvisioningEntityResolver","repository","resolveGlobal","names","length","map","name","trim","toLowerCase","hasWildcard","includes","findManyBy","realm_id","client_id","resolveRealm","realmId","resolveClient","clientId"],"sources":["../../../../src/core/provisioning/synchronizer/entity-resolver.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ObjectLiteral } from '@authup/kit';\nimport type { IEntityRepository } from '@authup/server-kit';\n\nexport class ProvisioningEntityResolver<T extends ObjectLiteral = ObjectLiteral> {\n protected repository: IEntityRepository<T>;\n\n constructor(repository: IEntityRepository<T>) {\n this.repository = repository;\n }\n\n async resolveGlobal(names?: string[]): Promise<T[]> {\n if (!names || names.length === 0) {\n return [];\n }\n\n names = names.map((name) => name.trim().toLowerCase());\n\n const hasWildcard = names.includes('*');\n if (hasWildcard) {\n return this.repository.findManyBy({\n realm_id: null,\n client_id: null,\n });\n }\n\n return this.repository.findManyBy({\n name: names,\n realm_id: null,\n client_id: null,\n });\n }\n\n async resolveRealm(names: string[] | undefined, realmId: string): Promise<T[]> {\n if (!names || names.length === 0) {\n return [];\n }\n\n names = names.map((name) => name.trim().toLowerCase());\n\n const hasWildcard = names.includes('*');\n if (hasWildcard) {\n return this.repository.findManyBy({\n realm_id: realmId,\n client_id: null,\n });\n }\n\n return this.repository.findManyBy({\n name: names,\n realm_id: realmId,\n client_id: null,\n });\n }\n\n async resolveClient(names: string[] | undefined, realmId: string, clientId: string): Promise<T[]> {\n if (!names || names.length === 0) {\n return [];\n }\n\n names = names.map((name) => name.trim().toLowerCase());\n\n const hasWildcard = names.includes('*');\n if (hasWildcard) {\n return this.repository.findManyBy({\n realm_id: realmId,\n client_id: clientId,\n });\n }\n\n return this.repository.findManyBy({\n name: names,\n realm_id: realmId,\n client_id: clientId,\n });\n }\n}\n"],"mappings":";;;;AAUA,IAAaA,6BAAb,MAAaA;CACCC;CAEV,YAAYA,YAAkC;EAC1C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,cAAcC,OAAgC;EAChD,IAAI,CAACA,SAASA,MAAMC,WAAW,GAC3B,OAAO,CAAA;EAGXD,QAAQA,MAAME,KAAKC,SAASA,KAAKC,KAAI,CAAA,CAAGC,YAAW,CAAA;EAGnD,IADoBL,MAAMO,SAAS,GAC/BD,GACA,OAAO,KAAKR,WAAWU,WAAW;GAC9BC,UAAU;GACVC,WAAW;EACf,CAAA;EAGJ,OAAO,KAAKZ,WAAWU,WAAW;GAC9BL,MAAMH;GACNS,UAAU;GACVC,WAAW;EACf,CAAA;CACJ;CAEA,MAAMC,aAAaX,OAA6BY,SAA+B;EAC3E,IAAI,CAACZ,SAASA,MAAMC,WAAW,GAC3B,OAAO,CAAA;EAGXD,QAAQA,MAAME,KAAKC,SAASA,KAAKC,KAAI,CAAA,CAAGC,YAAW,CAAA;EAGnD,IADoBL,MAAMO,SAAS,GAC/BD,GACA,OAAO,KAAKR,WAAWU,WAAW;GAC9BC,UAAUG;GACVF,WAAW;EACf,CAAA;EAGJ,OAAO,KAAKZ,WAAWU,WAAW;GAC9BL,MAAMH;GACNS,UAAUG;GACVF,WAAW;EACf,CAAA;CACJ;CAEA,MAAMG,cAAcb,OAA6BY,SAAiBE,UAAgC;EAC9F,IAAI,CAACd,SAASA,MAAMC,WAAW,GAC3B,OAAO,CAAA;EAGXD,QAAQA,MAAME,KAAKC,SAASA,KAAKC,KAAI,CAAA,CAAGC,YAAW,CAAA;EAGnD,IADoBL,MAAMO,SAAS,GAC/BD,GACA,OAAO,KAAKR,WAAWU,WAAW;GAC9BC,UAAUG;GACVF,WAAWI;EACf,CAAA;EAGJ,OAAO,KAAKhB,WAAWU,WAAW;GAC9BL,MAAMH;GACNS,UAAUG;GACVF,WAAWI;EACf,CAAA;CACJ;AACJ"}
|
|
@@ -8,6 +8,7 @@ import "./client/index.mjs";
|
|
|
8
8
|
import { PermissionProvisioningSynchronizer } from "./permission/module.mjs";
|
|
9
9
|
import "./permission/index.mjs";
|
|
10
10
|
import { PolicyProvisioningSynchronizer } from "./policy/module.mjs";
|
|
11
|
+
import "./policy/index.mjs";
|
|
11
12
|
import { RealmProvisioningSynchronizer } from "./realm/module.mjs";
|
|
12
13
|
import "./realm/index.mjs";
|
|
13
14
|
import { RoleProvisioningSynchronizer } from "./role/module.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/permission/module.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAChG,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAE9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,kCAAmC,SAAQ,4BAA4B,CAAC,4BAA4B,CAAC;IAC9G,SAAS,CAAC,UAAU,EAAG,qBAAqB,CAAC;IAE7C,SAAS,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAE/C,SAAS,CAAC,0BAA0B,CAAC,EAAE,2BAA2B,CAAC;gBAEvD,GAAG,EAAE,yCAAyC;IAQpD,WAAW,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/permission/module.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAChG,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAE9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,kCAAmC,SAAQ,4BAA4B,CAAC,4BAA4B,CAAC;IAC9G,SAAS,CAAC,UAAU,EAAG,qBAAqB,CAAC;IAE7C,SAAS,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAE/C,SAAS,CAAC,0BAA0B,CAAC,EAAE,2BAA2B,CAAC;gBAEvD,GAAG,EAAE,yCAAyC;IAQpD,WAAW,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC;YAoD/E,mBAAmB;CAgCpC"}
|
|
@@ -18,6 +18,7 @@ var PermissionProvisioningSynchronizer = class extends BaseProvisioningSynchroni
|
|
|
18
18
|
this.permissionPolicyRepository = ctx.permissionPolicyRepository;
|
|
19
19
|
}
|
|
20
20
|
async synchronize(input) {
|
|
21
|
+
this.canonicalizeName(input.attributes);
|
|
21
22
|
const strategy = normalizeEntityProvisioningStrategy(input.strategy);
|
|
22
23
|
let attributes = await this.repository.findOneBy({
|
|
23
24
|
name: input.attributes.name,
|
|
@@ -51,7 +52,7 @@ var PermissionProvisioningSynchronizer = class extends BaseProvisioningSynchroni
|
|
|
51
52
|
async synchronizePolicies(permission, policyNames) {
|
|
52
53
|
if (!this.policyRepository || !this.permissionPolicyRepository) throw new Error("Provisioning: policy/permissionPolicy repositories must be wired to attach policies to permissions.");
|
|
53
54
|
for (const policyName of policyNames) {
|
|
54
|
-
const policy = await this.policyRepository.findOneByName(policyName);
|
|
55
|
+
const policy = await this.policyRepository.findOneByName(policyName.trim().toLowerCase());
|
|
55
56
|
if (!policy) throw new Error(`Provisioning: policy '${policyName}' not found for permission '${permission.name}'.`);
|
|
56
57
|
if (await this.permissionPolicyRepository.findOneBy({
|
|
57
58
|
permission_id: permission.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","PermissionProvisioningSynchronizer","repository","policyRepository","permissionPolicyRepository","ctx","synchronize","input","
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","PermissionProvisioningSynchronizer","repository","policyRepository","permissionPolicyRepository","ctx","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realm_id","client_id","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","relations","policies","length","synchronizePolicies","permission","policyNames","Error","policyName","policy","findOneByName","trim","toLowerCase","existing","permission_id","policy_id","entry","permission_realm_id","policy_realm_id"],"sources":["../../../../../src/core/provisioning/synchronizer/permission/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pickRecord } from '@authup/kit';\nimport type { Permission } from '@authup/core-kit';\nimport type { IPermissionPolicyRepository } from '../../../entities/permission-policy/types.ts';\nimport type { IPermissionRepository, IPolicyRepository } from '../../../entities/index.ts';\nimport type { PermissionProvisioningEntity } from '../../entities/permission';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport type { PermissionProvisioningSynchronizerContext } from './types.ts';\n\nexport class PermissionProvisioningSynchronizer extends BaseProvisioningSynchronizer<PermissionProvisioningEntity> {\n protected repository : IPermissionRepository;\n\n protected policyRepository?: IPolicyRepository;\n\n protected permissionPolicyRepository?: IPermissionPolicyRepository;\n\n constructor(ctx: PermissionProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n this.policyRepository = ctx.policyRepository;\n this.permissionPolicyRepository = ctx.permissionPolicyRepository;\n }\n\n async synchronize(input: PermissionProvisioningEntity): Promise<PermissionProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n\n let attributes = await this.repository.findOneBy({\n name: input.attributes.name,\n realm_id: input.attributes.realm_id || null,\n client_id: input.attributes.client_id || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.repository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes,\n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.repository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.repository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.repository.save(this.repository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.repository.save(this.repository.create(input.attributes));\n }\n\n if (input.relations?.policies && input.relations.policies.length > 0) {\n await this.synchronizePolicies(attributes, input.relations.policies);\n }\n\n return {\n ...input,\n attributes,\n };\n }\n\n private async synchronizePolicies(permission: Permission, policyNames: string[]): Promise<void> {\n if (!this.policyRepository || !this.permissionPolicyRepository) {\n throw new Error(\n 'Provisioning: policy/permissionPolicy repositories must be wired to attach policies to permissions.',\n );\n }\n\n for (const policyName of policyNames) {\n const policy = await this.policyRepository.findOneByName(policyName.trim().toLowerCase());\n if (!policy) {\n throw new Error(\n `Provisioning: policy '${policyName}' not found for permission '${permission.name}'.`,\n );\n }\n\n const existing = await this.permissionPolicyRepository.findOneBy({\n permission_id: permission.id,\n policy_id: policy.id,\n });\n if (existing) {\n continue;\n }\n\n const entry = this.permissionPolicyRepository.create({\n permission_id: permission.id,\n permission_realm_id: permission.realm_id,\n policy_id: policy.id,\n policy_realm_id: policy.realm_id,\n });\n await this.permissionPolicyRepository.save(entry);\n }\n }\n}\n"],"mappings":";;;;;;;;;AAgBA,IAAaI,qCAAb,cAAwDD,6BAAAA;CAC1CE;CAEAC;CAEAC;CAEV,YAAYC,KAAgD;EACxD,MAAK;EAEL,KAAKH,aAAaG,IAAIH;EACtB,KAAKC,mBAAmBE,IAAIF;EAC5B,KAAKC,6BAA6BC,IAAID;CAC1C;CAEA,MAAME,YAAYC,OAA4E;EAC1F,KAAKC,iBAAiBD,MAAME,UAAU;EAEtC,MAAMC,WAAWX,oCAAoCQ,MAAMG,QAAQ;EAEnE,IAAID,aAAa,MAAM,KAAKP,WAAWS,UAAU;GAC7CC,MAAML,MAAME,WAAWG;GACvBC,UAAUN,MAAME,WAAWI,YAAY;GACvCC,WAAWP,MAAME,WAAWK,aAAa;EAC7C,CAAA;EAEA,IAAIJ,SAASK,SAASjB,+BAA+BkB,QAAQ;GACzD,IAAIP,YACA,MAAM,KAAKP,WAAWe,OAAOR,UAAAA;GAEjC,OAAO;IACH,GAAGF;IACHE,YAAYA,cAAcF,MAAME;GACpC;EACJ;EAEA,IAAIA,YACA,QAAQC,SAASK,MAAjB;GACI,KAAKjB,+BAA+BoB;IAChCT,aAAa,KAAKP,WAAWiB,MACzBV,YACAC,SAASD,aACLZ,WAAWU,MAAME,YAAYC,SAASD,UAAU,IAChDF,MAAME,UAAU;IAGxBA,aAAa,MAAM,KAAKP,WAAWkB,KAAKX,UAAAA;IACxC;GACJ,KAAKX,+BAA+BuB;IAChCd,MAAME,WAAWa,KAAKb,WAAWa;IACjCb,aAAa,MAAM,KAAKP,WAAWkB,KAAK,KAAKlB,WAAWqB,OAAOhB,MAAME,UAAU,CAAA;IAC/E;EACR;OAEAA,aAAa,MAAM,KAAKP,WAAWkB,KAAK,KAAKlB,WAAWqB,OAAOhB,MAAME,UAAU,CAAA;EAGnF,IAAIF,MAAMiB,WAAWC,YAAYlB,MAAMiB,UAAUC,SAASC,SAAS,GAC/D,MAAM,KAAKC,oBAAoBlB,YAAYF,MAAMiB,UAAUC,QAAQ;EAGvE,OAAO;GACH,GAAGlB;GACHE;EACJ;CACJ;CAEA,MAAckB,oBAAoBC,YAAwBC,aAAsC;EAC5F,IAAI,CAAC,KAAK1B,oBAAoB,CAAC,KAAKC,4BAChC,MAAM,IAAI0B,MACN,qGAAA;EAIR,KAAK,MAAMC,cAAcF,aAAa;GAClC,MAAMG,SAAS,MAAM,KAAK7B,iBAAiB8B,cAAcF,WAAWG,KAAI,CAAA,CAAGC,YAAW,CAAA;GACtF,IAAI,CAACH,QACD,MAAM,IAAIF,MACN,yBAAyBC,WAAW,8BAA8BH,WAAWhB,KAAK,GAAG;GAQ7F,IAAIwB,MAJmB,KAAKhC,2BAA2BO,UAAU;IAC7D0B,eAAeT,WAAWN;IAC1BgB,WAAWN,OAAOV;GACtB,CAAA,GAEI;GAGJ,MAAMiB,QAAQ,KAAKnC,2BAA2BmB,OAAO;IACjDc,eAAeT,WAAWN;IAC1BkB,qBAAqBZ,WAAWf;IAChCyB,WAAWN,OAAOV;IAClBmB,iBAAiBT,OAAOnB;GAC5B,CAAA;GACA,MAAM,KAAKT,2BAA2BgB,KAAKmB,KAAAA;EAC/C;CACJ;AACJ"}
|
|
@@ -7,9 +7,11 @@ export declare class PolicyProvisioningSynchronizer extends BaseProvisioningSync
|
|
|
7
7
|
protected repository: IPolicyRepository;
|
|
8
8
|
protected permissionPolicyRepository: IPermissionPolicyRepository;
|
|
9
9
|
constructor(ctx: PolicyProvisioningSynchronizerContext);
|
|
10
|
+
synchronizeMany(input: PolicyProvisioningEntity[]): Promise<PolicyProvisioningEntity[]>;
|
|
10
11
|
synchronize(input: PolicyProvisioningEntity): Promise<PolicyProvisioningEntity>;
|
|
11
12
|
private synchronizeChildren;
|
|
12
13
|
private cleanupStaleChildren;
|
|
14
|
+
private cleanupStaleTopLevel;
|
|
13
15
|
private cleanupStaleChild;
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/policy/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/policy/module.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,8BAA+B,SAAQ,4BAA4B,CAAC,wBAAwB,CAAC;IACtG,SAAS,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAExC,SAAS,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;gBAEtD,GAAG,EAAE,qCAAqC;IAOhD,eAAe,CAAC,KAAK,EAAE,wBAAwB,EAAE,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAWvF,WAAW,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;YAqCvE,mBAAmB;YAkBnB,oBAAoB;YAgBpB,oBAAoB;YAuBpB,iBAAiB;CAclC"}
|
|
@@ -2,6 +2,7 @@ import "node:path";
|
|
|
2
2
|
import "node:url";
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { BaseProvisioningSynchronizer } from "../base.mjs";
|
|
5
|
+
import { SystemPolicyName } from "@authup/access";
|
|
5
6
|
//#region src/core/provisioning/synchronizer/policy/module.ts
|
|
6
7
|
var PolicyProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
7
8
|
repository;
|
|
@@ -11,7 +12,13 @@ var PolicyProvisioningSynchronizer = class extends BaseProvisioningSynchronizer
|
|
|
11
12
|
this.repository = ctx.repository;
|
|
12
13
|
this.permissionPolicyRepository = ctx.permissionPolicyRepository;
|
|
13
14
|
}
|
|
15
|
+
async synchronizeMany(input) {
|
|
16
|
+
const output = await super.synchronizeMany(input);
|
|
17
|
+
await this.cleanupStaleTopLevel(input.map((entity) => entity.attributes.name));
|
|
18
|
+
return output;
|
|
19
|
+
}
|
|
14
20
|
async synchronize(input) {
|
|
21
|
+
this.canonicalizeName(input.attributes);
|
|
15
22
|
let entity = await this.repository.findOneBy({
|
|
16
23
|
name: input.attributes.name,
|
|
17
24
|
realm_id: input.attributes.realm_id || null
|
|
@@ -37,13 +44,13 @@ var PolicyProvisioningSynchronizer = class extends BaseProvisioningSynchronizer
|
|
|
37
44
|
};
|
|
38
45
|
}
|
|
39
46
|
async synchronizeChildren(parentId, children = []) {
|
|
40
|
-
const declaredNames = children.map((c) => c.attributes.name);
|
|
41
47
|
await children.reduce(async (prev, child) => {
|
|
42
48
|
await prev;
|
|
43
49
|
child.attributes.parent_id = parentId;
|
|
44
50
|
child.attributes.parent = { id: parentId };
|
|
45
51
|
await this.synchronize(child);
|
|
46
52
|
}, Promise.resolve());
|
|
53
|
+
const declaredNames = children.map((c) => c.attributes.name);
|
|
47
54
|
await this.cleanupStaleChildren(parentId, declaredNames);
|
|
48
55
|
}
|
|
49
56
|
async cleanupStaleChildren(parentId, declaredNames) {
|
|
@@ -52,6 +59,17 @@ var PolicyProvisioningSynchronizer = class extends BaseProvisioningSynchronizer
|
|
|
52
59
|
await this.cleanupStaleChild(child);
|
|
53
60
|
}, Promise.resolve());
|
|
54
61
|
}
|
|
62
|
+
async cleanupStaleTopLevel(declaredNames) {
|
|
63
|
+
if (!declaredNames.includes(SystemPolicyName.DEFAULT)) return;
|
|
64
|
+
await (await this.repository.findManyBy({
|
|
65
|
+
parent_id: null,
|
|
66
|
+
realm_id: null,
|
|
67
|
+
built_in: true
|
|
68
|
+
})).filter((policy) => !declaredNames.includes(policy.name)).reduce(async (prev, policy) => {
|
|
69
|
+
await prev;
|
|
70
|
+
await this.cleanupStaleChild(policy);
|
|
71
|
+
}, Promise.resolve());
|
|
72
|
+
}
|
|
55
73
|
async cleanupStaleChild(child) {
|
|
56
74
|
if ((await this.permissionPolicyRepository.findManyBy({ policy_id: child.id })).length === 0) await this.repository.deleteFromTree(child);
|
|
57
75
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["BaseProvisioningSynchronizer","PolicyProvisioningSynchronizer","repository","permissionPolicyRepository","ctx","
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["SystemPolicyName","BaseProvisioningSynchronizer","PolicyProvisioningSynchronizer","repository","permissionPolicyRepository","ctx","synchronizeMany","input","output","cleanupStaleTopLevel","map","entity","attributes","name","synchronize","canonicalizeName","findOneBy","realm_id","mergeData","type","built_in","parent_id","parent","invert","merge","saveWithEA","extraAttributes","create","synchronizeChildren","id","children","parentId","reduce","prev","child","Promise","resolve","declaredNames","c","cleanupStaleChildren","existingChildren","findManyBy","staleChildren","filter","includes","cleanupStaleChild","DEFAULT","existing","stale","policy","referencingJunctions","policy_id","length","deleteFromTree","detached"],"sources":["../../../../../src/core/provisioning/synchronizer/policy/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SystemPolicyName } from '@authup/access';\nimport type { Policy } from '@authup/core-kit';\nimport type { IPermissionPolicyRepository } from '../../../entities/permission-policy/types.ts';\nimport type { IPolicyRepository } from '../../../entities/index.ts';\nimport type { PolicyProvisioningEntity } from '../../entities/policy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport type { PolicyProvisioningSynchronizerContext } from './types.ts';\n\nexport class PolicyProvisioningSynchronizer extends BaseProvisioningSynchronizer<PolicyProvisioningEntity> {\n protected repository: IPolicyRepository;\n\n protected permissionPolicyRepository: IPermissionPolicyRepository;\n\n constructor(ctx: PolicyProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n this.permissionPolicyRepository = ctx.permissionPolicyRepository;\n }\n\n async synchronizeMany(input: PolicyProvisioningEntity[]): Promise<PolicyProvisioningEntity[]> {\n const output = await super.synchronizeMany(input);\n // Prune stale TOP-LEVEL built-in system policies (e.g. a system policy removed\n // from the source). cleanupStaleChildren handles removed CHILDREN of a synced\n // parent; this is its top-level counterpart so the provisioner — not a migration\n // — owns the policy-graph shape. Realm-scoped (realm_id != null) policies are out\n // of scope. Safe: the only caller passes the complete global top-level set.\n await this.cleanupStaleTopLevel(input.map((entity) => entity.attributes.name));\n return output;\n }\n\n async synchronize(input: PolicyProvisioningEntity): Promise<PolicyProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n let entity = await this.repository.findOneBy({\n name: input.attributes.name,\n realm_id: input.attributes.realm_id || null,\n });\n\n if (entity) {\n // Only assign `invert` when the source declares it explicitly.\n // TypeORM's `merge` is a plain assign and would otherwise clobber\n // an existing flag with `undefined` (turning `invert: true` into\n // `null`/`false` on every reprovisioning pass).\n const mergeData: Partial<Policy> = {\n type: input.attributes.type,\n built_in: input.attributes.built_in,\n parent_id: input.attributes.parent_id,\n parent: input.attributes.parent,\n };\n if (typeof input.attributes.invert !== 'undefined') {\n mergeData.invert = input.attributes.invert;\n }\n entity = this.repository.merge(entity, mergeData);\n await this.repository.saveWithEA(entity, input.extraAttributes);\n } else {\n entity = this.repository.create(input.attributes);\n await this.repository.saveWithEA(entity, input.extraAttributes);\n }\n\n await this.synchronizeChildren(entity.id, input.children || []);\n\n return {\n ...input,\n attributes: entity,\n };\n }\n\n private async synchronizeChildren(\n parentId: string,\n children: PolicyProvisioningEntity[] = [],\n ): Promise<void> {\n await children.reduce(async (prev, child) => {\n await prev;\n child.attributes.parent_id = parentId;\n child.attributes.parent = { id: parentId } as any;\n await this.synchronize(child);\n }, Promise.resolve());\n\n // derived AFTER synchronize() so the names are canonicalized —\n // a pre-sync snapshot would misidentify mixed-case children as stale\n const declaredNames = children.map((c) => c.attributes.name);\n\n await this.cleanupStaleChildren(parentId, declaredNames);\n }\n\n private async cleanupStaleChildren(\n parentId: string,\n declaredNames: (string | undefined)[],\n ): Promise<void> {\n const existingChildren = await this.repository.findManyBy({ parent_id: parentId });\n\n const staleChildren = existingChildren.filter(\n (child) => !declaredNames.includes(child.name),\n );\n\n await staleChildren.reduce(async (prev, child) => {\n await prev;\n await this.cleanupStaleChild(child);\n }, Promise.resolve());\n }\n\n private async cleanupStaleTopLevel(declaredNames: (string | undefined)[]): Promise<void> {\n // Sentinel guard: only prune when the authoritative system source is present.\n // `system.default` is always declared by DefaultProvisioningSource; if it is\n // absent the caller passed a partial/non-system set (e.g. a file-only source via a\n // bare ProvisionerModule), so pruning would wrongly delete real system policies.\n if (!declaredNames.includes(SystemPolicyName.DEFAULT)) {\n return;\n }\n\n const existing = await this.repository.findManyBy({\n parent_id: null,\n realm_id: null,\n built_in: true,\n });\n\n const stale = existing.filter((policy) => !declaredNames.includes(policy.name));\n\n await stale.reduce(async (prev, policy) => {\n await prev;\n await this.cleanupStaleChild(policy);\n }, Promise.resolve());\n }\n\n private async cleanupStaleChild(child: Policy): Promise<void> {\n const referencingJunctions = await this.permissionPolicyRepository.findManyBy({ policy_id: child.id });\n\n if (referencingJunctions.length === 0) {\n await this.repository.deleteFromTree(child);\n } else {\n const detached = this.repository.merge(child, {\n parent_id: null,\n parent: null,\n built_in: false,\n });\n await this.repository.saveWithEA(detached);\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/realm/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,UAAU,EAAG,gBAAgB,CAAC;IAExC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,wBAAwB,CAAC,CAAC;IAElF,SAAS,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IAE1F,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IAEhF,SAAS,CAAC,iBAAiB,EAAG,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;gBAErE,GAAG,EAAE,oCAAoC;IAY/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/realm/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,UAAU,EAAG,gBAAgB,CAAC;IAExC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,wBAAwB,CAAC,CAAC;IAElF,SAAS,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IAE1F,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IAEhF,SAAS,CAAC,iBAAiB,EAAG,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;gBAErE,GAAG,EAAE,oCAAoC;IAY/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAwGtF"}
|
|
@@ -26,6 +26,7 @@ var RealmProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
|
26
26
|
this.scopeSynchronizer = ctx.scopeSynchronizer;
|
|
27
27
|
}
|
|
28
28
|
async synchronize(input) {
|
|
29
|
+
this.canonicalizeName(input.attributes);
|
|
29
30
|
const strategy = normalizeEntityProvisioningStrategy(input.strategy);
|
|
30
31
|
let attributes = await this.repository.findOneBy({ name: input.attributes.name });
|
|
31
32
|
if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","RealmProvisioningSynchronizer","repository","clientSynchronizer","permissionSynchronizer","roleSynchronizer","userSynchronizer","robotSynchronizer","scopeSynchronizer","ctx","synchronize","input","
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","RealmProvisioningSynchronizer","repository","clientSynchronizer","permissionSynchronizer","roleSynchronizer","userSynchronizer","robotSynchronizer","scopeSynchronizer","ctx","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","relations","clients","map","child","realm_id","realm","synchronizeMany","permissions","roles","users","robots","scopes"],"sources":["../../../../../src/core/provisioning/synchronizer/realm/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pickRecord } from '@authup/kit';\nimport type { IRealmRepository } from '../../../entities/index.ts';\nimport type { ClientProvisioningEntity, ScopeProvisioningEntity } from '../../entities/index.ts';\nimport type { PermissionProvisioningEntity } from '../../entities/permission/index.ts';\nimport type { RealmProvisioningEntity } from '../../entities/realm/index.ts';\nimport type { RobotProvisioningEntity } from '../../entities/robot/index.ts';\nimport type { RoleProvisioningEntity } from '../../entities/role/index.ts';\nimport type { UserProvisioningEntity } from '../../entities/user/index.ts';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport type { IProvisioningSynchronizer } from '../../types.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport type { RealmProvisioningSynchronizerContext } from './types.ts';\n\nexport class RealmProvisioningSynchronizer extends BaseProvisioningSynchronizer<RealmProvisioningEntity> {\n protected repository : IRealmRepository;\n\n protected clientSynchronizer: IProvisioningSynchronizer<ClientProvisioningEntity>;\n\n protected permissionSynchronizer: IProvisioningSynchronizer<PermissionProvisioningEntity>;\n\n protected roleSynchronizer: IProvisioningSynchronizer<RoleProvisioningEntity>;\n\n protected userSynchronizer: IProvisioningSynchronizer<UserProvisioningEntity>;\n\n protected robotSynchronizer: IProvisioningSynchronizer<RobotProvisioningEntity>;\n\n protected scopeSynchronizer : IProvisioningSynchronizer<ScopeProvisioningEntity>;\n\n constructor(ctx: RealmProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n this.clientSynchronizer = ctx.clientSynchronizer;\n this.permissionSynchronizer = ctx.permissionSynchronizer;\n this.roleSynchronizer = ctx.roleSynchronizer;\n this.userSynchronizer = ctx.userSynchronizer;\n this.robotSynchronizer = ctx.robotSynchronizer;\n this.scopeSynchronizer = ctx.scopeSynchronizer;\n }\n\n async synchronize(input: RealmProvisioningEntity): Promise<RealmProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n let attributes = await this.repository.findOneBy({ name: input.attributes.name });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.repository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes, \n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.repository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.repository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.repository.save(this.repository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.repository.save(this.repository.create(input.attributes));\n }\n\n if (input.relations && input.relations.clients) {\n const clients = input.relations.clients.map(\n (child) => {\n child.attributes.realm_id = attributes.id;\n child.attributes.realm = attributes;\n return child;\n },\n );\n\n await this.clientSynchronizer.synchronizeMany(clients);\n }\n\n if (input.relations && input.relations.permissions) {\n const permissions = input.relations.permissions.map((child) => {\n child.attributes.realm_id = attributes.id;\n child.attributes.realm = attributes;\n return child;\n });\n\n await this.permissionSynchronizer.synchronizeMany(permissions);\n }\n\n if (input.relations && input.relations.roles) {\n const roles = input.relations.roles.map((child) => {\n child.attributes.realm_id = attributes.id;\n child.attributes.realm = attributes;\n return child;\n });\n\n await this.roleSynchronizer.synchronizeMany(roles);\n }\n\n if (input.relations && input.relations.users) {\n const users = input.relations.users.map((child) => {\n child.attributes.realm_id = attributes.id;\n child.attributes.realm = attributes;\n return child;\n });\n\n await this.userSynchronizer.synchronizeMany(users);\n }\n\n if (input.relations && input.relations.robots) {\n const robots = input.relations.robots.map((child) => {\n child.attributes.realm_id = attributes.id;\n child.attributes.realm = attributes;\n return child;\n });\n\n await this.robotSynchronizer.synchronizeMany(robots);\n }\n\n if (input.relations && input.relations.scopes) {\n const scopes = input.relations.scopes.map((child) => {\n child.attributes.realm_id = attributes.id;\n child.attributes.realm = attributes;\n return child;\n });\n\n await this.scopeSynchronizer.synchronizeMany(scopes);\n }\n\n return {\n ...input,\n attributes,\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/robot/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,UAAU,EACV,eAAe,EACf,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,eAAe,CAAC,CAAC;IAEhF,SAAS,CAAC,YAAY,EAAE,gCAAgC,CAAC,SAAS,CAAC,CAAC;gBAExD,GAAG,EAAE,oCAAoC;IAoB/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/robot/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,UAAU,EACV,eAAe,EACf,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,eAAe,CAAC,CAAC;IAEhF,SAAS,CAAC,YAAY,EAAE,gCAAgC,CAAC,SAAS,CAAC,CAAC;gBAExD,GAAG,EAAE,oCAAoC;IAoB/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CA0FtF"}
|
|
@@ -32,6 +32,7 @@ var RobotProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
async synchronize(input) {
|
|
35
|
+
this.canonicalizeName(input.attributes);
|
|
35
36
|
const strategy = normalizeEntityProvisioningStrategy(input.strategy);
|
|
36
37
|
let attributes = await this.robotRepository.findOneBy({
|
|
37
38
|
name: input.attributes.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ProvisioningEntityResolver","ProvisioningJunctionSynchronizer","RobotProvisioningSynchronizer","robotRepository","permissionResolver","roleResolver","permissionJunction","roleJunction","ctx","permissionRepository","roleRepository","repository","robotPermissionRepository","ownerKey","ownerRealmKey","robotRoleRepository","synchronize","input","
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ProvisioningEntityResolver","ProvisioningJunctionSynchronizer","RobotProvisioningSynchronizer","robotRepository","permissionResolver","roleResolver","permissionJunction","roleJunction","ctx","permissionRepository","roleRepository","repository","robotPermissionRepository","ownerKey","ownerRealmKey","robotRoleRepository","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realm_id","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","permissions","resolveGlobal","relations","globalPermissions","resolveRealm","realmPermissions","length","roles","globalRoles","realmRoles"],"sources":["../../../../../src/core/provisioning/synchronizer/robot/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Permission, \n RobotPermission, \n RobotRole, \n Role,\n} from '@authup/core-kit';\nimport { pickRecord } from '@authup/kit';\nimport type { IRobotRepository } from '../../../entities/index.ts';\nimport type { RobotProvisioningEntity } from '../../entities/robot/index.ts';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport { ProvisioningEntityResolver } from '../entity-resolver.ts';\nimport { ProvisioningJunctionSynchronizer } from '../junction-synchronizer.ts';\nimport type { RobotProvisioningSynchronizerContext } from './types.ts';\n\nexport class RobotProvisioningSynchronizer extends BaseProvisioningSynchronizer<RobotProvisioningEntity> {\n protected robotRepository: IRobotRepository;\n\n protected permissionResolver: ProvisioningEntityResolver<Permission>;\n\n protected roleResolver: ProvisioningEntityResolver<Role>;\n\n protected permissionJunction: ProvisioningJunctionSynchronizer<RobotPermission>;\n\n protected roleJunction: ProvisioningJunctionSynchronizer<RobotRole>;\n\n constructor(ctx: RobotProvisioningSynchronizerContext) {\n super();\n\n this.robotRepository = ctx.robotRepository;\n\n this.permissionResolver = new ProvisioningEntityResolver(ctx.permissionRepository);\n this.roleResolver = new ProvisioningEntityResolver(ctx.roleRepository);\n\n this.permissionJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.robotPermissionRepository,\n ownerKey: 'robot_id',\n ownerRealmKey: 'robot_realm_id',\n });\n this.roleJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.robotRoleRepository,\n ownerKey: 'robot_id',\n ownerRealmKey: 'robot_realm_id',\n });\n }\n\n async synchronize(input: RobotProvisioningEntity): Promise<RobotProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n\n let attributes = await this.robotRepository.findOneBy({\n name: input.attributes.name,\n ...(input.attributes.realm_id ? { realm_id: input.attributes.realm_id } : { realm_id: null }),\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.robotRepository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes, \n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.robotRepository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.robotRepository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.robotRepository.save(this.robotRepository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.robotRepository.save(this.robotRepository.create(input.attributes));\n }\n\n // Permissions (Global & Realm)\n const permissions = [\n ...await this.permissionResolver.resolveGlobal(\n input.relations && input.relations.globalPermissions,\n ),\n ...(attributes.realm_id ?\n await this.permissionResolver.resolveRealm(\n input.relations && input.relations.realmPermissions,\n attributes.realm_id,\n ) :\n []),\n ];\n\n if (permissions.length > 0) {\n await this.permissionJunction.synchronize(\n attributes,\n permissions,\n 'permission_id',\n 'permission_realm_id',\n );\n }\n\n // Roles (Global & Realm)\n const roles = [\n ...await this.roleResolver.resolveGlobal(\n input.relations && input.relations.globalRoles,\n ),\n ...(attributes.realm_id ?\n await this.roleResolver.resolveRealm(\n input.relations && input.relations.realmRoles,\n attributes.realm_id,\n ) :\n []),\n ];\n\n if (roles.length > 0) {\n await this.roleJunction.synchronize(\n attributes,\n roles,\n 'role_id',\n 'role_realm_id',\n );\n }\n\n return {\n ...input,\n attributes,\n };\n }\n}\n"],"mappings":";;;;;;;;;;;AAsBA,IAAaM,gCAAb,cAAmDH,6BAAAA;CACrCI;CAEAC;CAEAC;CAEAC;CAEAC;CAEV,YAAYC,KAA2C;EACnD,MAAK;EAEL,KAAKL,kBAAkBK,IAAIL;EAE3B,KAAKC,qBAAqB,IAAIJ,2BAA2BQ,IAAIC,oBAAoB;EACjF,KAAKJ,eAAe,IAAIL,2BAA2BQ,IAAIE,cAAc;EAErE,KAAKJ,qBAAqB,IAAIL,iCAAiC;GAC3DU,YAAYH,IAAII;GAChBC,UAAU;GACVC,eAAe;EACnB,CAAA;EACA,KAAKP,eAAe,IAAIN,iCAAiC;GACrDU,YAAYH,IAAIO;GAChBF,UAAU;GACVC,eAAe;EACnB,CAAA;CACJ;CAEA,MAAME,YAAYC,OAAkE;EAChF,KAAKC,iBAAiBD,MAAME,UAAU;EAEtC,MAAMC,WAAWtB,oCAAoCmB,MAAMG,QAAQ;EAEnE,IAAID,aAAa,MAAM,KAAKhB,gBAAgBkB,UAAU;GAClDC,MAAML,MAAME,WAAWG;GACvB,GAAIL,MAAME,WAAWI,WAAW,EAAEA,UAAUN,MAAME,WAAWI,SAAS,IAAI,EAAEA,UAAU,KAAK;EAC/F,CAAA;EAEA,IAAIH,SAASI,SAAS3B,+BAA+B4B,QAAQ;GACzD,IAAIN,YACA,MAAM,KAAKhB,gBAAgBuB,OAAOP,UAAAA;GAEtC,OAAO;IACH,GAAGF;IACHE,YAAYA,cAAcF,MAAME;GACpC;EACJ;EAEA,IAAIA,YACA,QAAQC,SAASI,MAAjB;GACI,KAAK3B,+BAA+B8B;IAChCR,aAAa,KAAKhB,gBAAgByB,MAC9BT,YACAC,SAASD,aACLvB,WAAWqB,MAAME,YAAYC,SAASD,UAAU,IAChDF,MAAME,UAAU;IAGxBA,aAAa,MAAM,KAAKhB,gBAAgB0B,KAAKV,UAAAA;IAC7C;GACJ,KAAKtB,+BAA+BiC;IAChCb,MAAME,WAAWY,KAAKZ,WAAWY;IACjCZ,aAAa,MAAM,KAAKhB,gBAAgB0B,KAAK,KAAK1B,gBAAgB6B,OAAOf,MAAME,UAAU,CAAA;IACzF;EACR;OAEAA,aAAa,MAAM,KAAKhB,gBAAgB0B,KAAK,KAAK1B,gBAAgB6B,OAAOf,MAAME,UAAU,CAAA;EAI7F,MAAMc,cAAc,CAAA,GACb,MAAM,KAAK7B,mBAAmB8B,cAC7BjB,MAAMkB,aAAalB,MAAMkB,UAAUC,iBAAiB,GAAA,GAEpDjB,WAAWI,WACX,MAAM,KAAKnB,mBAAmBiC,aAC1BpB,MAAMkB,aAAalB,MAAMkB,UAAUG,kBACnCnB,WAAWI,QAAQ,IAEvB,CAAA,CAAA;EAGR,IAAIU,YAAYM,SAAS,GACrB,MAAM,KAAKjC,mBAAmBU,YAC1BG,YACAc,aACA,iBACA,qBAAA;EAKR,MAAMO,QAAQ,CAAA,GACP,MAAM,KAAKnC,aAAa6B,cACvBjB,MAAMkB,aAAalB,MAAMkB,UAAUM,WAAW,GAAA,GAE9CtB,WAAWI,WACX,MAAM,KAAKlB,aAAagC,aACpBpB,MAAMkB,aAAalB,MAAMkB,UAAUO,YACnCvB,WAAWI,QAAQ,IAEvB,CAAA,CAAA;EAGR,IAAIiB,MAAMD,SAAS,GACf,MAAM,KAAKhC,aAAaS,YACpBG,YACAqB,OACA,WACA,eAAA;EAIR,OAAO;GACH,GAAGvB;GACHE;EACJ;CACJ;AACJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Permission, RolePermission } from '@authup/core-kit';
|
|
2
|
-
import type {
|
|
2
|
+
import type { IRoleRepository } from '../../../entities/index.ts';
|
|
3
3
|
import type { RoleProvisioningEntity } from '../../entities/role/index.ts';
|
|
4
4
|
import { BaseProvisioningSynchronizer } from '../base.ts';
|
|
5
5
|
import { ProvisioningEntityResolver } from '../entity-resolver.ts';
|
|
@@ -7,11 +7,10 @@ import { ProvisioningJunctionSynchronizer } from '../junction-synchronizer.ts';
|
|
|
7
7
|
import type { RoleProvisioningSynchronizerContext } from './types.ts';
|
|
8
8
|
export declare class RoleProvisioningSynchronizer extends BaseProvisioningSynchronizer<RoleProvisioningEntity> {
|
|
9
9
|
protected repository: IRoleRepository;
|
|
10
|
-
protected policyRepository?: IPolicyRepository;
|
|
11
10
|
protected permissionResolver: ProvisioningEntityResolver<Permission>;
|
|
12
11
|
protected permissionJunction: ProvisioningJunctionSynchronizer<RolePermission>;
|
|
13
12
|
constructor(ctx: RoleProvisioningSynchronizerContext);
|
|
14
13
|
synchronize(input: RoleProvisioningEntity): Promise<RoleProvisioningEntity>;
|
|
15
|
-
private
|
|
14
|
+
private buildRealmScopeOverrides;
|
|
16
15
|
}
|
|
17
16
|
//# sourceMappingURL=module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/role/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/role/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,qBAAa,4BAA6B,SAAQ,4BAA4B,CAAC,sBAAsB,CAAC;IAClG,SAAS,CAAC,UAAU,EAAG,eAAe,CAAC;IAEvC,SAAS,CAAC,kBAAkB,EAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAEtE,SAAS,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,cAAc,CAAC,CAAC;gBAEnE,GAAG,EAAE,mCAAmC;IAY9C,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA+FjF,OAAO,CAAC,wBAAwB;CAcnC"}
|
|
@@ -11,13 +11,11 @@ import { pickRecord } from "@authup/kit";
|
|
|
11
11
|
//#region src/core/provisioning/synchronizer/role/module.ts
|
|
12
12
|
var RoleProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
13
13
|
repository;
|
|
14
|
-
policyRepository;
|
|
15
14
|
permissionResolver;
|
|
16
15
|
permissionJunction;
|
|
17
16
|
constructor(ctx) {
|
|
18
17
|
super();
|
|
19
18
|
this.repository = ctx.repository;
|
|
20
|
-
this.policyRepository = ctx.policyRepository;
|
|
21
19
|
this.permissionResolver = new ProvisioningEntityResolver(ctx.permissionRepository);
|
|
22
20
|
this.permissionJunction = new ProvisioningJunctionSynchronizer({
|
|
23
21
|
repository: ctx.rolePermissionRepository,
|
|
@@ -26,6 +24,7 @@ var RoleProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
|
26
24
|
});
|
|
27
25
|
}
|
|
28
26
|
async synchronize(input) {
|
|
27
|
+
this.canonicalizeName(input.attributes);
|
|
29
28
|
const strategy = normalizeEntityProvisioningStrategy(input.strategy);
|
|
30
29
|
let attributes = await this.repository.findOneBy({
|
|
31
30
|
name: input.attributes.name,
|
|
@@ -62,32 +61,27 @@ var RoleProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
|
62
61
|
const realmPermissions = attributes.realm_id ? await this.permissionResolver.resolveRealm(input.relations.realmPermissions, attributes.realm_id) : [];
|
|
63
62
|
const permissions = [...globalPermissions, ...realmPermissions];
|
|
64
63
|
if (permissions.length > 0) {
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
64
|
+
const defaultScope = input.relations.globalPermissionsRealmScope;
|
|
65
|
+
if (defaultScope) {
|
|
66
|
+
const overrides = this.buildRealmScopeOverrides(input);
|
|
67
|
+
for (const permission of permissions) {
|
|
68
|
+
const realmScope = overrides.get(permission.name) ?? defaultScope;
|
|
69
|
+
await this.permissionJunction.synchronize(attributes, [permission], "permission_id", "permission_realm_id", { realm_scope: realmScope });
|
|
70
|
+
}
|
|
71
|
+
} else await this.permissionJunction.synchronize(attributes, permissions, "permission_id", "permission_realm_id");
|
|
71
72
|
}
|
|
72
73
|
return {
|
|
73
74
|
...input,
|
|
74
75
|
attributes
|
|
75
76
|
};
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
-
if (!input.relations?.globalPermissionsPolicyName || !this.policyRepository) return;
|
|
79
|
-
const defaultPolicy = await this.policyRepository.findOneByName(input.relations.globalPermissionsPolicyName);
|
|
80
|
-
if (!defaultPolicy) throw new Error(`Provisioning: policy '${input.relations.globalPermissionsPolicyName}' not found for role '${roleName}'.`);
|
|
78
|
+
buildRealmScopeOverrides(input) {
|
|
81
79
|
const overrides = /* @__PURE__ */ new Map();
|
|
82
|
-
if (input.relations
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
for (const permName of permissionNames) overrides.set(permName, policy.id);
|
|
80
|
+
if (input.relations?.globalPermissionsRealmScopeOverrides) for (const [realmScope, permissionNames] of Object.entries(input.relations.globalPermissionsRealmScopeOverrides)) {
|
|
81
|
+
if (!permissionNames) continue;
|
|
82
|
+
for (const permName of permissionNames) overrides.set(permName, realmScope);
|
|
86
83
|
}
|
|
87
|
-
return
|
|
88
|
-
defaultPolicyId: defaultPolicy.id,
|
|
89
|
-
overrides
|
|
90
|
-
};
|
|
84
|
+
return overrides;
|
|
91
85
|
}
|
|
92
86
|
};
|
|
93
87
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ProvisioningEntityResolver","ProvisioningJunctionSynchronizer","RoleProvisioningSynchronizer","repository","policyRepository","permissionResolver","permissionJunction","ctx","permissionRepository","rolePermissionRepository","ownerKey","ownerRealmKey","synchronize","input","strategy","attributes","findOneBy","name","realm_id","client_id","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","relations","globalPermissions","resolveGlobal","globalPermissionsExclude","length","excludeSet","Set","filter","p","has","realmPermissions","resolveRealm","permissions","policyMap","resolvePolicyMap","permission","policyId","overrides","get","defaultPolicyId","policy_id","undefined","roleName","globalPermissionsPolicyName","defaultPolicy","findOneByName","Error","Map","globalPermissionsPolicyOverrides","policyName","permissionNames","Object","entries","policy","permName","set"],"sources":["../../../../../src/core/provisioning/synchronizer/role/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pickRecord } from '@authup/kit';\nimport type { Permission, RolePermission } from '@authup/core-kit';\nimport type { IPolicyRepository, IRoleRepository } from '../../../entities/index.ts';\nimport type { RoleProvisioningEntity } from '../../entities/role/index.ts';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport { ProvisioningEntityResolver } from '../entity-resolver.ts';\nimport { ProvisioningJunctionSynchronizer } from '../junction-synchronizer.ts';\nimport type { RoleProvisioningSynchronizerContext } from './types.ts';\n\nexport class RoleProvisioningSynchronizer extends BaseProvisioningSynchronizer<RoleProvisioningEntity> {\n protected repository : IRoleRepository;\n\n protected policyRepository?: IPolicyRepository;\n\n protected permissionResolver : ProvisioningEntityResolver<Permission>;\n\n protected permissionJunction: ProvisioningJunctionSynchronizer<RolePermission>;\n\n constructor(ctx: RoleProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n this.policyRepository = ctx.policyRepository;\n this.permissionResolver = new ProvisioningEntityResolver(ctx.permissionRepository);\n this.permissionJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.rolePermissionRepository,\n ownerKey: 'role_id',\n ownerRealmKey: 'role_realm_id',\n });\n }\n\n async synchronize(input: RoleProvisioningEntity): Promise<RoleProvisioningEntity> {\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n let attributes = await this.repository.findOneBy({\n name: input.attributes.name,\n realm_id: input.attributes.realm_id || null,\n client_id: input.attributes.client_id || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.repository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes, \n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.repository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.repository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.repository.save(this.repository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.repository.save(this.repository.create(input.attributes));\n }\n\n if (!input.relations) {\n return {\n ...input,\n attributes,\n };\n }\n\n let globalPermissions = await this.permissionResolver.resolveGlobal(input.relations.globalPermissions);\n\n if (input.relations.globalPermissionsExclude && input.relations.globalPermissionsExclude.length > 0) {\n const excludeSet = new Set(input.relations.globalPermissionsExclude);\n globalPermissions = globalPermissions.filter((p) => !excludeSet.has(p.name));\n }\n\n const realmPermissions = attributes.realm_id ?\n await this.permissionResolver.resolveRealm(input.relations.realmPermissions, attributes.realm_id) :\n [];\n\n const permissions = [\n ...globalPermissions,\n ...realmPermissions,\n ];\n\n if (permissions.length > 0) {\n const policyMap = await this.resolvePolicyMap(input, attributes.name);\n\n if (policyMap) {\n for (const permission of permissions) {\n const policyId = policyMap.overrides.get(permission.name) ?? policyMap.defaultPolicyId;\n await this.permissionJunction.synchronize(\n attributes,\n [permission],\n 'permission_id',\n 'permission_realm_id',\n policyId ? { policy_id: policyId } : undefined,\n );\n }\n } else {\n await this.permissionJunction.synchronize(\n attributes,\n permissions,\n 'permission_id',\n 'permission_realm_id',\n );\n }\n }\n\n return {\n ...input,\n attributes,\n };\n }\n\n private async resolvePolicyMap(\n input: RoleProvisioningEntity,\n roleName: string | undefined,\n ): Promise<{\n defaultPolicyId: string | undefined,\n overrides: Map<string, string> \n } | undefined> {\n if (!input.relations?.globalPermissionsPolicyName || !this.policyRepository) {\n return undefined;\n }\n\n const defaultPolicy = await this.policyRepository.findOneByName(input.relations.globalPermissionsPolicyName);\n if (!defaultPolicy) {\n throw new Error(\n `Provisioning: policy '${input.relations.globalPermissionsPolicyName}' not found for role '${roleName}'.`,\n );\n }\n\n const overrides = new Map<string, string>();\n\n if (input.relations.globalPermissionsPolicyOverrides) {\n for (const [policyName, permissionNames] of Object.entries(input.relations.globalPermissionsPolicyOverrides)) {\n const policy = await this.policyRepository.findOneByName(policyName);\n if (!policy) {\n throw new Error(\n `Provisioning: override policy '${policyName}' not found for role '${roleName}'.`,\n );\n }\n for (const permName of permissionNames) {\n overrides.set(permName, policy.id);\n }\n }\n }\n\n return {\n defaultPolicyId: defaultPolicy.id,\n overrides,\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ProvisioningEntityResolver","ProvisioningJunctionSynchronizer","RoleProvisioningSynchronizer","repository","permissionResolver","permissionJunction","ctx","permissionRepository","rolePermissionRepository","ownerKey","ownerRealmKey","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realm_id","client_id","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","relations","globalPermissions","resolveGlobal","globalPermissionsExclude","length","excludeSet","Set","filter","p","has","realmPermissions","resolveRealm","permissions","defaultScope","globalPermissionsRealmScope","overrides","buildRealmScopeOverrides","permission","realmScope","get","realm_scope","Map","globalPermissionsRealmScopeOverrides","permissionNames","Object","entries","permName","set"],"sources":["../../../../../src/core/provisioning/synchronizer/role/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pickRecord } from '@authup/kit';\nimport type { Permission, RolePermission } from '@authup/core-kit';\nimport type { IRoleRepository } from '../../../entities/index.ts';\nimport type { RoleProvisioningEntity } from '../../entities/role/index.ts';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport { ProvisioningEntityResolver } from '../entity-resolver.ts';\nimport { ProvisioningJunctionSynchronizer } from '../junction-synchronizer.ts';\nimport type { RoleProvisioningSynchronizerContext } from './types.ts';\n\nexport class RoleProvisioningSynchronizer extends BaseProvisioningSynchronizer<RoleProvisioningEntity> {\n protected repository : IRoleRepository;\n\n protected permissionResolver : ProvisioningEntityResolver<Permission>;\n\n protected permissionJunction: ProvisioningJunctionSynchronizer<RolePermission>;\n\n constructor(ctx: RoleProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n this.permissionResolver = new ProvisioningEntityResolver(ctx.permissionRepository);\n this.permissionJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.rolePermissionRepository,\n ownerKey: 'role_id',\n ownerRealmKey: 'role_realm_id',\n });\n }\n\n async synchronize(input: RoleProvisioningEntity): Promise<RoleProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n let attributes = await this.repository.findOneBy({\n name: input.attributes.name,\n realm_id: input.attributes.realm_id || null,\n client_id: input.attributes.client_id || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.repository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes,\n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.repository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.repository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.repository.save(this.repository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.repository.save(this.repository.create(input.attributes));\n }\n\n if (!input.relations) {\n return {\n ...input,\n attributes,\n };\n }\n\n let globalPermissions = await this.permissionResolver.resolveGlobal(input.relations.globalPermissions);\n\n if (input.relations.globalPermissionsExclude && input.relations.globalPermissionsExclude.length > 0) {\n const excludeSet = new Set(input.relations.globalPermissionsExclude);\n globalPermissions = globalPermissions.filter((p) => !excludeSet.has(p.name));\n }\n\n const realmPermissions = attributes.realm_id ?\n await this.permissionResolver.resolveRealm(input.relations.realmPermissions, attributes.realm_id) :\n [];\n\n const permissions = [\n ...globalPermissions,\n ...realmPermissions,\n ];\n\n if (permissions.length > 0) {\n const defaultScope = input.relations.globalPermissionsRealmScope;\n\n if (defaultScope) {\n const overrides = this.buildRealmScopeOverrides(input);\n for (const permission of permissions) {\n const realmScope = overrides.get(permission.name) ?? defaultScope;\n await this.permissionJunction.synchronize(\n attributes,\n [permission],\n 'permission_id',\n 'permission_realm_id',\n { realm_scope: realmScope },\n );\n }\n } else {\n await this.permissionJunction.synchronize(\n attributes,\n permissions,\n 'permission_id',\n 'permission_realm_id',\n );\n }\n }\n\n return {\n ...input,\n attributes,\n };\n }\n\n private buildRealmScopeOverrides(input: RoleProvisioningEntity): Map<string, string> {\n const overrides = new Map<string, string>();\n if (input.relations?.globalPermissionsRealmScopeOverrides) {\n for (const [realmScope, permissionNames] of Object.entries(input.relations.globalPermissionsRealmScopeOverrides)) {\n if (!permissionNames) {\n continue;\n }\n for (const permName of permissionNames) {\n overrides.set(permName, realmScope);\n }\n }\n }\n return overrides;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { IPermissionRepository,
|
|
1
|
+
import type { IPermissionRepository, IRolePermissionRepository, IRoleRepository } from '../../../entities/index.ts';
|
|
2
2
|
export type RoleProvisioningSynchronizerContext = {
|
|
3
3
|
repository: IRoleRepository;
|
|
4
4
|
permissionRepository: IPermissionRepository;
|
|
5
5
|
rolePermissionRepository: IRolePermissionRepository;
|
|
6
|
-
policyRepository?: IPolicyRepository;
|
|
7
6
|
};
|
|
8
7
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/role/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/role/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EAClB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,mCAAmC,GAAG;IAC9C,UAAU,EAAE,eAAe,CAAC;IAC5B,oBAAoB,EAAE,qBAAqB,CAAC;IAC5C,wBAAwB,EAAE,yBAAyB,CAAC;CACvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/scope/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,UAAU,EAAG,gBAAgB,CAAC;gBAE5B,GAAG,EAAE,oCAAoC;IAM/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/scope/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,UAAU,EAAG,gBAAgB,CAAC;gBAE5B,GAAG,EAAE,oCAAoC;IAM/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CA8CtF"}
|
|
@@ -14,6 +14,7 @@ var ScopeProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
|
14
14
|
this.repository = ctx.repository;
|
|
15
15
|
}
|
|
16
16
|
async synchronize(input) {
|
|
17
|
+
this.canonicalizeName(input.attributes);
|
|
17
18
|
const strategy = normalizeEntityProvisioningStrategy(input.strategy);
|
|
18
19
|
let attributes = await this.repository.findOneBy({
|
|
19
20
|
name: input.attributes.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ScopeProvisioningSynchronizer","repository","ctx","synchronize","input","
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ScopeProvisioningSynchronizer","repository","ctx","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realm_id","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create"],"sources":["../../../../../src/core/provisioning/synchronizer/scope/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { pickRecord } from '@authup/kit';\nimport type { IScopeRepository } from '../../../entities/index.ts';\nimport type { ScopeProvisioningEntity } from '../../entities/index.ts';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport type { ScopeProvisioningSynchronizerContext } from './types.ts';\n\nexport class ScopeProvisioningSynchronizer extends BaseProvisioningSynchronizer<ScopeProvisioningEntity> {\n protected repository : IScopeRepository;\n\n constructor(ctx: ScopeProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n }\n\n async synchronize(input: ScopeProvisioningEntity): Promise<ScopeProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n\n let attributes = await this.repository.findOneBy({\n name: input.attributes.name,\n realm_id: input.attributes.realm_id || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.repository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes, \n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.repository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.repository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.repository.save(this.repository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.repository.save(this.repository.create(input.attributes));\n }\n\n return {\n ...input,\n attributes,\n };\n }\n}\n"],"mappings":";;;;;;;;;AAcA,IAAaI,gCAAb,cAAmDD,6BAAAA;CACrCE;CAEV,YAAYC,KAA2C;EACnD,MAAK;EAEL,KAAKD,aAAaC,IAAID;CAC1B;CAEA,MAAME,YAAYC,OAAkE;EAChF,KAAKC,iBAAiBD,MAAME,UAAU;EAEtC,MAAMC,WAAWT,oCAAoCM,MAAMG,QAAQ;EAEnE,IAAID,aAAa,MAAM,KAAKL,WAAWO,UAAU;GAC7CC,MAAML,MAAME,WAAWG;GACvBC,UAAUN,MAAME,WAAWI,YAAY;EAC3C,CAAA;EAEA,IAAIH,SAASI,SAASd,+BAA+Be,QAAQ;GACzD,IAAIN,YACA,MAAM,KAAKL,WAAWY,OAAOP,UAAAA;GAEjC,OAAO;IACH,GAAGF;IACHE,YAAYA,cAAcF,MAAME;GACpC;EACJ;EAEA,IAAIA,YACA,QAAQC,SAASI,MAAjB;GACI,KAAKd,+BAA+BiB;IAChCR,aAAa,KAAKL,WAAWc,MACzBT,YACAC,SAASD,aACLV,WAAWQ,MAAME,YAAYC,SAASD,UAAU,IAChDF,MAAME,UAAU;IAGxBA,aAAa,MAAM,KAAKL,WAAWe,KAAKV,UAAAA;IACxC;GACJ,KAAKT,+BAA+BoB;IAChCb,MAAME,WAAWY,KAAKZ,WAAWY;IACjCZ,aAAa,MAAM,KAAKL,WAAWe,KAAK,KAAKf,WAAWkB,OAAOf,MAAME,UAAU,CAAA;IAC/E;EACR;OAEAA,aAAa,MAAM,KAAKL,WAAWe,KAAK,KAAKf,WAAWkB,OAAOf,MAAME,UAAU,CAAA;EAGnF,OAAO;GACH,GAAGF;GACHE;EACJ;CACJ;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/user/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,UAAU,EACV,IAAI,EACJ,cAAc,EACd,QAAQ,EACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EACR,iBAAiB,EACjB,eAAe,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,qBAAa,4BAA6B,SAAQ,4BAA4B,CAAC,sBAAsB,CAAC;IAClG,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC;IAE1C,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,cAAc,CAAC,CAAC;IAE/E,SAAS,CAAC,YAAY,EAAE,gCAAgC,CAAC,QAAQ,CAAC,CAAC;gBAEvD,GAAG,EAAE,mCAAmC;IAqB9C,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/user/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,UAAU,EACV,IAAI,EACJ,cAAc,EACd,QAAQ,EACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EACR,iBAAiB,EACjB,eAAe,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,qBAAa,4BAA6B,SAAQ,4BAA4B,CAAC,sBAAsB,CAAC;IAClG,SAAS,CAAC,cAAc,EAAE,eAAe,CAAC;IAE1C,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,cAAc,CAAC,CAAC;IAE/E,SAAS,CAAC,YAAY,EAAE,gCAAgC,CAAC,QAAQ,CAAC,CAAC;gBAEvD,GAAG,EAAE,mCAAmC;IAqB9C,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAiJpF"}
|
|
@@ -35,6 +35,7 @@ var UserProvisioningSynchronizer = class extends BaseProvisioningSynchronizer {
|
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
async synchronize(input) {
|
|
38
|
+
this.canonicalizeName(input.attributes);
|
|
38
39
|
const strategy = normalizeEntityProvisioningStrategy(input.strategy);
|
|
39
40
|
let attributes = await this.userRepository.findOneBy({
|
|
40
41
|
name: input.attributes.name,
|