@acorex/connectivity 21.0.0-next.42 → 21.0.0-next.44

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 (23) hide show
  1. package/fesm2022/acorex-connectivity-api.mjs +89 -3
  2. package/fesm2022/acorex-connectivity-api.mjs.map +1 -1
  3. package/fesm2022/{acorex-connectivity-mock-acorex-connectivity-mock-BTiDjsTG.mjs → acorex-connectivity-mock-acorex-connectivity-mock-QxKVNQo9.mjs} +3374 -1490
  4. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-QxKVNQo9.mjs.map +1 -0
  5. package/fesm2022/{acorex-connectivity-mock-assign-to-manager.activity-Cbm3SNXn.mjs → acorex-connectivity-mock-assign-to-manager.activity-GtNzTHWI.mjs} +2 -2
  6. package/fesm2022/{acorex-connectivity-mock-assign-to-manager.activity-Cbm3SNXn.mjs.map → acorex-connectivity-mock-assign-to-manager.activity-GtNzTHWI.mjs.map} +1 -1
  7. package/fesm2022/{acorex-connectivity-mock-chat-generate-image.command-OImAZbUq.mjs → acorex-connectivity-mock-chat-generate-image.command-BAMTtIN_.mjs} +2 -2
  8. package/fesm2022/{acorex-connectivity-mock-chat-generate-image.command-OImAZbUq.mjs.map → acorex-connectivity-mock-chat-generate-image.command-BAMTtIN_.mjs.map} +1 -1
  9. package/fesm2022/{acorex-connectivity-mock-chat-synthesize-speech.command-Dieqfce2.mjs → acorex-connectivity-mock-chat-synthesize-speech.command-C0pQvhMF.mjs} +2 -2
  10. package/fesm2022/{acorex-connectivity-mock-chat-synthesize-speech.command-Dieqfce2.mjs.map → acorex-connectivity-mock-chat-synthesize-speech.command-C0pQvhMF.mjs.map} +1 -1
  11. package/fesm2022/{acorex-connectivity-mock-chat-transcribe-speech.command-BvZwDms4.mjs → acorex-connectivity-mock-chat-transcribe-speech.command-BRDl6roP.mjs} +2 -2
  12. package/fesm2022/{acorex-connectivity-mock-chat-transcribe-speech.command-BvZwDms4.mjs.map → acorex-connectivity-mock-chat-transcribe-speech.command-BRDl6roP.mjs.map} +1 -1
  13. package/fesm2022/acorex-connectivity-mock-notification-management-email-send.command-DAQfIWoD.mjs +73 -0
  14. package/fesm2022/acorex-connectivity-mock-notification-management-email-send.command-DAQfIWoD.mjs.map +1 -0
  15. package/fesm2022/{acorex-connectivity-mock-user-roles-for-list-column.query-DZlsdoZn.mjs → acorex-connectivity-mock-user-roles-for-list-column.query-DOAMknK8.mjs} +2 -3
  16. package/fesm2022/acorex-connectivity-mock-user-roles-for-list-column.query-DOAMknK8.mjs.map +1 -0
  17. package/fesm2022/acorex-connectivity-mock.mjs +2 -1
  18. package/fesm2022/acorex-connectivity-mock.mjs.map +1 -1
  19. package/package.json +2 -2
  20. package/types/acorex-connectivity-api.d.ts +12 -1
  21. package/types/acorex-connectivity-mock.d.ts +205 -97
  22. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-BTiDjsTG.mjs.map +0 -1
  23. package/fesm2022/acorex-connectivity-mock-user-roles-for-list-column.query-DZlsdoZn.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-connectivity-api.mjs","sources":["../../../../libs/connectivity/api/src/lib/api-storage.service.ts","../../../../libs/connectivity/api/src/lib/file-storage-api.service.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/application.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/configuration.service.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/feature.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/oidc.strategy.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/permission.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/tenant.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/user-avatar.provider.ts","../../../../libs/connectivity/api/src/lib/report-management/report-viewer-api.service.ts","../../../../libs/connectivity/api/src/lib/report-management/report-management-api.module.ts","../../../../libs/connectivity/api/src/lib/api.module.ts","../../../../libs/connectivity/api/src/lib/api-google.strategy.ts","../../../../libs/connectivity/api/src/lib/report-management/report-management-api.providers.ts","../../../../libs/connectivity/api/src/acorex-connectivity-api.ts"],"sourcesContent":["import { AXP_ROOT_CONFIG_TOKEN, AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/core';\nimport { AXPEntityStorageService } from '@acorex/platform/layout/entity';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { kebabCase } from 'lodash-es';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AXCApiEntityStorageService implements AXPEntityStorageService<string, any> {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private filterService = inject(AXPFilterOperatorMiddlewareService);\n private mainUrl = this.configs.baseUrl;\n\n // API routing constants\n private readonly API_VERSION = 'v1';\n private readonly DEFAULT_AREA = 'global';\n\n constructor(private http: HttpClient) { }\n\n get dbName(): string {\n return 'ACoreXPlatform';\n }\n\n getConfigEntity(entityName: string) {\n const partEntity = entityName.split('.');\n if (partEntity.length == 3) {\n const [area, module, entity] = partEntity;\n const areaKebab = kebabCase(area);\n const moduleKebab = kebabCase(module);\n const entityKebab = kebabCase(entity);\n return {\n module: moduleKebab,\n entity: entityKebab,\n area: areaKebab,\n version: this.API_VERSION,\n };\n } else {\n const [module, entity] = partEntity;\n const moduleKebab = kebabCase(module);\n const entityKebab = kebabCase(entity);\n return {\n module: moduleKebab,\n entity: entityKebab,\n area: this.DEFAULT_AREA,\n version: this.API_VERSION,\n };\n }\n }\n\n async initial<T = any>(entityName: string, collection: T[]): Promise<T[]> {\n //const exists = await this.table('entity-store').where({ entityName }).count();\n // if (exists === 0) {\n // await this.table('entity-store').bulkAdd(collection.map((item) => ({ ...item, entityName })));\n // }\n return collection;\n }\n\n async getOne<T = any>(entityName: string, id: string): Promise<T> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }${id ? '/' + id : ''}`;\n return firstValueFrom(this.http.get<T>(url));\n }\n\n async updateOne<T = any>(entityName: string, id: string, keyValue: { [key: string]: any }): Promise<T> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }${id ? '/' + id : ''}`;\n return firstValueFrom(this.http.put<T>(url, keyValue));\n }\n\n async deleteOne(entityName: string, id: string): Promise<void> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }/${id}`;\n firstValueFrom(this.http.delete(url));\n }\n\n async insertOne<T = any>(entityName: string, entityItem: T): Promise<string> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }`;\n return firstValueFrom(this.http.post<string>(url, entityItem));\n }\n\n async getAll<T = any>(entityName: string): Promise<T[]> {\n return [];\n }\n\n async query<T = any>(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<T>> {\n const routeElement = await this.getConfigEntity(entityName);\n\n let httpParams = new HttpParams().set('Skip', request.skip).set('Take', request.take);\n if (request?.sort && request?.sort.length > 0) {\n const sortParam = request?.sort.map((sort: any) => `${sort.field}:${sort.dir}`).join(',');\n httpParams = httpParams.set('$orderby', sortParam);\n }\n\n const greaterThanOperator = this.filterService.getOperator('greaterThan');\n const lessThanOperator = this.filterService.getOperator('lessThan');\n function generateQueryString(filter: any) {\n if (!filter.filters) {\n // Base case: single filter\n if (typeof filter.value === 'object' && filter.operator.type === 'between') {\n return `${filter.field} ${greaterThanOperator.type} '${filter.value.from}' and ${filter.field} ${lessThanOperator.type} '${filter.value.to}'`;\n } else {\n return `${filter.field} ${filter.operator.type} '${filter.value}'`;\n }\n } else if (!filter.filters.length) {\n return;\n } else {\n // Recursive case: multiple filters\n\n const filterStrings = filter.filters.map((subFilter: any) => generateQueryString(subFilter));\n const logic = filter.logic || 'AND'; // Default logic is 'AND' if not provided\n return `${filterStrings.filter((i: any) => i).join(` ${logic} `)}`;\n }\n }\n\n let queryString = '';\n\n if (request.filter) {\n const filter = request.filter;\n if (filter.filters && filter.filters.length > 0) {\n // Construct filter string from provided filters\n\n const dynamicQueries = generateQueryString(filter);\n console.log({ dynamicQueries: dynamicQueries });\n\n // Append dynamic filters to custom filter, if both exist\n queryString = (queryString ? `${queryString},${dynamicQueries}` : dynamicQueries) as string;\n }\n }\n // Set the $filter parameter if there are any filters\n if (queryString) {\n httpParams = httpParams.set('$query', queryString);\n }\n return firstValueFrom(\n this.http.get<any>(\n `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }`,\n { params: httpParams }\n )\n ).then((response) => {\n return {\n total: response.totalCount,\n items: response.items,\n };\n });\n }\n}\n","import {\n AXPFileStorageCreateRequest,\n AXPFileStorageFindRequest,\n AXPFileStorageInfo,\n AXPFileStorageService,\n AXPFileStorageStatus,\n AXPFileStorageUpdateRequest,\n AXPFileManyStorageInfo,\n} from '@acorex/platform/common';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { firstValueFrom, catchError, of } from 'rxjs';\n\n@Injectable()\nexport class AXCFileStorageApiService extends AXPFileStorageService {\n private readonly http = inject(HttpClient);\n\n //#region ---- API Endpoints ----\n\n private readonly baseUrl = '/api/file-storage';\n\n //#endregion\n\n //#region ---- Fallback Data ----\n\n private readonly fallbackFileInfo: AXPFileStorageInfo = {\n fileId: 'fallback-file-id',\n refId: 'fallback-ref-id',\n refType: 'fallback-ref-type',\n category: 'fallback-category',\n size: 0,\n mimeType: 'application/octet-stream',\n uploadedAt: new Date(),\n isPublic: true,\n isPrimary: false,\n status: AXPFileStorageStatus.Temporary,\n name: 'fallback-file',\n binary: new File([''], 'fallback-file'),\n };\n\n //#endregion\n\n async save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo> {\n try {\n const formData = new FormData();\n formData.append('file', request.file);\n formData.append('refId', request.refId);\n formData.append('refType', request.refType);\n formData.append('category', request.category);\n \n if (request.name) {\n formData.append('name', request.name);\n }\n if (request.path) {\n formData.append('path', request.path);\n }\n if (request.isPrimary !== undefined) {\n formData.append('isPrimary', request.isPrimary.toString());\n }\n if (request.status) {\n formData.append('status', request.status);\n }\n if (request.metadata) {\n formData.append('metadata', JSON.stringify(request.metadata));\n }\n\n return await firstValueFrom(\n this.http.post<AXPFileStorageInfo>(`${this.baseUrl}/save`, formData).pipe(\n catchError(() => of(this.fallbackFileInfo))\n )\n );\n } catch {\n return this.fallbackFileInfo;\n }\n }\n\n async update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo> {\n try {\n const updateData: any = {\n metadata: request.metadata,\n };\n \n if (request.path !== undefined) {\n updateData.path = request.path;\n }\n if (request.name !== undefined) {\n updateData.name = request.name;\n }\n if (request.isPrimary !== undefined) {\n updateData.isPrimary = request.isPrimary;\n }\n\n return await firstValueFrom(\n this.http.put<AXPFileStorageInfo>(`${this.baseUrl}/update/${request.fileId}`, updateData).pipe(\n catchError(() => of(this.fallbackFileInfo))\n )\n );\n } catch {\n return this.fallbackFileInfo;\n }\n }\n\n async find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]> {\n try {\n let params = new HttpParams();\n \n if (request.refId) {\n params = params.set('refId', request.refId);\n }\n if (request.refType) {\n params = params.set('refType', request.refType);\n }\n if (request.category) {\n params = params.set('category', request.category);\n }\n if (request.mimeType) {\n params = params.set('mimeType', request.mimeType);\n }\n if (request.isPublic !== undefined) {\n params = params.set('isPublic', request.isPublic.toString());\n }\n if (request.isPrimary !== undefined) {\n params = params.set('isPrimary', request.isPrimary.toString());\n }\n if (request.uploadedAtRange) {\n params = params.set('uploadedAtFrom', request.uploadedAtRange.from.toISOString());\n params = params.set('uploadedAtTo', request.uploadedAtRange.to.toISOString());\n }\n\n return await firstValueFrom(\n this.http.get<AXPFileStorageInfo[]>(`${this.baseUrl}/find`, { params }).pipe(\n catchError(() => of([]))\n )\n );\n } catch {\n return [];\n }\n }\n\n async getInfo(fileId: string): Promise<AXPFileStorageInfo> {\n try {\n return await firstValueFrom(\n this.http.get<AXPFileStorageInfo>(`${this.baseUrl}/info/${fileId}`).pipe(\n catchError(() => of(this.fallbackFileInfo))\n )\n );\n } catch {\n return this.fallbackFileInfo;\n }\n }\n\n async findMany(ids: string[]): Promise<AXPFileManyStorageInfo[]> {\n try {\n return await firstValueFrom(\n this.http.post<AXPFileManyStorageInfo[]>(`${this.baseUrl}/find-many`, { ids }).pipe(\n catchError(() => of([]))\n )\n );\n } catch {\n return [];\n }\n }\n\n async remove(fileId: string): Promise<void> {\n try {\n await firstValueFrom(\n this.http.delete(`${this.baseUrl}/remove/${fileId}`).pipe(\n catchError(() => of(void 0))\n )\n );\n } catch {\n // Silently fail in fallback mode\n }\n }\n\n async commit(fileId: string): Promise<void> {\n try {\n await firstValueFrom(\n this.http.post(`${this.baseUrl}/commit/${fileId}`, {}).pipe(\n catchError(() => of(void 0))\n )\n );\n } catch {\n // Silently fail in fallback mode\n }\n }\n\n async markForDeletion(fileId: string): Promise<void> {\n try {\n await firstValueFrom(\n this.http.post(`${this.baseUrl}/mark-for-deletion/${fileId}`, {}).pipe(\n catchError(() => of(void 0))\n )\n );\n } catch {\n // Silently fail in fallback mode\n }\n }\n} ","import { AXPApplication, AXPApplicationLoader, AXPSessionContext } from '@acorex/platform/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class AXMOidcApplicationLoader implements AXPApplicationLoader {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private apiGetApps = `${this.configs.baseUrl}/applications/applications-for-current-tenant`;\n private apiSetApp = `${this.configs.baseUrl}/SetApplication`;\n constructor(private http: HttpClient) { }\n\n async getList(context: AXPSessionContext): Promise<AXPApplication[]> {\n const response = await firstValueFrom(this.http.get<{ items: any[] }>(this.apiGetApps));\n return response.items.map((item) => this.mapToAXPApplication(item));\n }\n\n set(application: AXPApplication): Promise<void> {\n return Promise.resolve();\n }\n\n // //TODO: shoud be removed\n // set(application: AXPApplication): Observable<AXPRefreshTokenResult> {\n // return this.http.post<any>(this.apiSetApp, { applicationId: application.id }).pipe(\n // map((response) => {\n // return {\n // succeed: true,\n // data: {\n // accessToken: response.token,\n // refreshToken: response.token,\n // }\n // };\n // })\n // );\n // }\n\n private mapToAXPApplication(item: any): AXPApplication {\n return {\n id: item.id,\n name: item.name || 'defaultName',\n title: item.title || 'defaultTitle',\n version: item.version || '1.0.0',\n description: item.description,\n logo: item.logo, // Assuming logo is of type AXPLogoConfig or undefined\n edition: item.edition\n ? {\n id: item.edition.id,\n title: item.edition.title,\n description: item.edition.description,\n }\n : undefined,\n // features: item.features || [],\n };\n }\n}\n","import { AXM_AUTH_CONFIG_TOKEN } from '@acorex/modules/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, filter, of, switchMap, take, tap } from 'rxjs';\n\nexport interface Localization {\n values: Record<string, Record<string, string>>;\n resources: Record<string, Resource>;\n languages: Language[];\n currentCulture: Culture;\n defaultResourceName: string;\n languagesMap: Record<string, NameValue[]>;\n languageFilesMap: Record<string, NameValue[]>;\n}\n\nexport interface Resource {\n texts: Record<string, string>;\n baseResources: string[];\n}\n\nexport interface Language {\n cultureName: string;\n uiCultureName: string;\n displayName: string;\n twoLetterISOLanguageName: string;\n flagIcon: string;\n}\n\nexport interface Culture {\n displayName: string;\n // ... other properties\n}\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\n// Repeat similar patterns for 'auth', 'setting', 'currentUser', etc.\nexport interface Auth {\n grantedPolicies: Record<string, boolean>;\n}\n\n// Main configuration interface\nexport interface ApplicationConfiguration {\n localization: Localization;\n auth: Auth;\n setting: Record<string, any>;\n currentUser: any;\n features: Record<string, any>;\n globalFeatures: Record<string, any>;\n multiTenancy: Record<string, any>;\n currentCulture: Culture;\n timing: Record<string, any>;\n clock: Record<string, any>;\n objectExtensions: Record<string, any>;\n extraProperties: Record<string, any>;\n\n // ... other properties\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMConfigurationService {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private applicationConfig: ApplicationConfiguration | null = null;\n private apiGetConfig = `${this.configs.baseUrl}/abp/application-configuration`;\n private fetchInProgress: boolean = false;\n private configSubject: BehaviorSubject<ApplicationConfiguration | null> = new BehaviorSubject<ApplicationConfiguration | null>(null);\n\n constructor(private http: HttpClient) {\n this.init().subscribe(); // Automatically trigger configuration load on service instantiation\n }\n\n public init(): Observable<ApplicationConfiguration> {\n if (!this.fetchInProgress) {\n this.fetchInProgress = true;\n return this.http.get<ApplicationConfiguration>(this.apiGetConfig).pipe(\n tap((response) => {\n this.applicationConfig = response;\n this.configSubject.next(this.applicationConfig);\n this.fetchInProgress = false;\n })\n );\n } else {\n // Adjusted approach to handle TypeScript's type safety requirements\n return this.configSubject.asObservable().pipe(\n filter((config): config is ApplicationConfiguration => config !== null),\n take(1) // Ensures it completes after emitting the first non-null value\n );\n }\n }\n\n getConfig(): Observable<ApplicationConfiguration> {\n if (this.applicationConfig) {\n // If the config is already loaded, return it immediately\n return of(this.applicationConfig);\n } else {\n // If the config is not loaded, initiate loading\n return this.configSubject.asObservable().pipe(\n filter((config) => config !== null),\n take(1), // Ensure it only emits the first non-null value and completes\n switchMap(() => of(this.applicationConfig!))\n );\n }\n }\n}\n","import { AXPFeature, AXPFeatureLoader, AXPSessionContext } from '@acorex/platform/auth';\n\nexport class AXMOidcFeatureLoader implements AXPFeatureLoader {\n private list: AXPFeature[] = [\n {\n name: 'axp-entity-list-custom-view',\n title: 'Custom View',\n value: false\n },\n {\n name: 'axp-entity-list-quick-search',\n title: 'Custom View',\n value: false\n }\n ];\n\n async getList(context: AXPSessionContext): Promise<AXPFeature[]> {\n return this.list;\n }\n}\n","import { AXMAuthConfigs, AXM_AUTH_CONFIG_TOKEN } from '@acorex/modules/auth';\nimport {\n AXPAuthStrategy,\n AXPBaseCredentials,\n AXPSessionContext,\n AXPSessionData,\n AXPSessionService,\n AXPSignInResult,\n AXPUser,\n JwtUtil,\n PkceUtil,\n TimeUtil,\n} from '@acorex/platform/auth';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthConfig, OAuthService } from 'angular-oauth2-oidc';\nimport { firstValueFrom } from 'rxjs';\n\n//#endregion\n\n@Injectable()\nexport class AXCAPIOidcStrategy extends AXPAuthStrategy {\n private aXMAuthConfigs: AXMAuthConfigs = inject(AXM_AUTH_CONFIG_TOKEN);\n private oauthService: OAuthService = inject(OAuthService);\n private http: HttpClient = inject(HttpClient);\n private sessionService: AXPSessionService = inject(AXPSessionService);\n private router: Router = inject(Router);\n public userInfo: any; \n public openidConfigurationInfo: any; // clarify the type if possible\n\n public async configureOAuth(): Promise<void> {\n if (this.openidConfigurationInfo) return; \n\n // Validation: اطمینان از وجود authConfig\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing. Please check your environment configuration.');\n }\n\n this.oauthService.configure(this.aXMAuthConfigs.authConfig);\n this.oauthService.setStorage(localStorage);\n\n this.openidConfigurationInfo = await this.oauthService.loadDiscoveryDocument();\n\n if (!this.openidConfigurationInfo) {\n throw new Error('openidConfigurationInfo is missing');\n }\n\n this.oauthService.events.subscribe(async (event) => {\n // console.log('event', event);\n // if (event.type === 'token_received') {\n // console.log('Token has been refreshed');\n // }\n // if (event.type === 'token_expires') {\n // console.log('Token is about to expire. Triggering silent refresh...');\n // }\n });\n\n const oidcJson = localStorage.getItem(AXPSessionService.SESSION_KEY);\n\n if (oidcJson) {\n const authData = JSON.parse(oidcJson) as AXPSessionData;\n if (authData) {\n this.sessionService.setSession(authData);\n\n if (authData.expiresIn && new Date(authData.expiresIn) < new Date()) {\n if (authData.expiresIn) {\n this.sessionService.refreshToken();\n } else {\n this.signout();\n }\n }\n }\n }\n }\n\n async signin(credentials: AXPBaseCredentials): Promise<AXPSignInResult | undefined> {\n // If OIDC with username/password\n if (credentials.strategy === 'oidc' && (credentials as any).username && (credentials as any).password) {\n await this.handleOidcPasswordSignin(credentials as AXPUserPassCredentials);\n await new Promise(() => {}); // Keeps the promise pending until another flow (e.g., OAuth callback) completes\n }\n throw new Error(`Authentication method or credentials not supported: ${credentials.strategy}`);\n }\n\n private async handleOidcPasswordSignin(credentials: AXPUserPassCredentials): Promise<undefined> {\n await this.configureOAuth();\n \n // Validation: اطمینان از وجود baseUrl\n if (!this.aXMAuthConfigs.baseUrl) {\n throw new Error('baseUrl is missing. Please check your environment configuration.');\n }\n \n // استفاده از baseUrl از configuration\n const baseUrl = this.aXMAuthConfigs.baseUrl;\n const loginRes = await fetch(baseUrl + '/auth/manual-login', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ username: credentials.username, password: credentials.password }),\n credentials: 'include',\n });\n if (!loginRes.ok) {\n let errorText = 'Login failed';\n try {\n const errorJson = await loginRes.json();\n if (errorJson && errorJson.error && errorJson.error.description) {\n errorText = errorJson.error.description;\n }\n } catch {\n try {\n const text = await loginRes.text();\n if (text) {\n errorText = text;\n }\n } catch {}\n }\n throw new Error(errorText);\n }\n\n // Check if response is JSON or text\n const contentType = loginRes.headers.get('content-type');\n let result;\n\n if (contentType && contentType.includes('application/json')) {\n result = await loginRes.json();\n } else {\n // Handle text response (like \"Login successful\")\n const responseText = await loginRes.text();\n console.log('Server response:', responseText);\n }\n\n await this.updateToken({});\n }\n\n override async updateToken(params: { [key: string]: any }): Promise<AXPSignInResult | void> {\n try {\n // Ensure OAuth is configured first\n if (!this.openidConfigurationInfo) {\n await this.configureOAuth();\n }\n\n // Validation: اطمینان از وجود authConfig\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing. Please check your environment configuration.');\n }\n // get Token Code\n if (params['code']) {\n \n // If params contains 'code', exchange it for tokens using the OpenIddict token endpoint\n const code = params['code'];\n const redirectUri = params['redirectUri'] || this.aXMAuthConfigs.authConfig.redirectUri!;\n const clientId = params['clientId'] || this.aXMAuthConfigs.authConfig.clientId!;\n const tokenEndpoint =\n params['tokenEndpoint'] ||\n this.openidConfigurationInfo?.info?.discoveryDocument?.token_endpoint ||\n `${this.aXMAuthConfigs?.baseUrl}/connect/token`;\n\n // Get code_verifier from localStorage (PKCE)\n const codeVerifier = localStorage.getItem('pkce_code_verifier');\n localStorage.removeItem('pkce_code_verifier');\n if (!codeVerifier) {\n throw new Error('Code verifier not found. Please try signing in again.');\n }\n\n // Prepare body for token request\n const body = new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: clientId,\n code_verifier: codeVerifier,\n code: code,\n redirect_uri: redirectUri,\n });\n\n // Call the token endpoint (OpenIddict)\n const response = await fetch(tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n });\n\n if (!response.ok) {\n throw new Error(`Token exchange failed: ${response.status} ${response.statusText}`);\n }\n const tokenData = await response.json();\n if (!tokenData) {\n throw new Error('Token data not found');\n }\n const payload = JwtUtil.parseJwt(tokenData.id_token);\n if (!payload) {\n throw new Error('Payload not found');\n }\n const user = {\n id: payload['sub'] || payload['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n console.log('payload', payload);\n\n return {\n succeed: true,\n data: {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n idToken: tokenData.id_token,\n expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),\n user,\n tenant,\n application,\n },\n };\n }\n // get Authorizeation Code\n else {\n // Validation: اطمینان از وجود authConfig\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing. Please check your environment configuration.');\n }\n \n // Extract parameters\n // Support both direct id fields and nested tenant/application objects\n const tenantId = params['tenantId'] ?? params['tenant']?.id ?? null;\n const applicationId = params['applicationId'] ?? params['application']?.id ?? null;\n const redirectUri = params['redirectUri'] || this.aXMAuthConfigs.authConfig.redirectUri!;\n const scope = params['scope'] || this.aXMAuthConfigs.authConfig.scope!;\n\n // Generate PKCE code verifier and challenge\n const codeVerifier = PkceUtil.generateRandomString(128);\n localStorage.setItem('pkce_code_verifier', codeVerifier);\n const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);\n\n // Build authorization URL\n const authorizeEndpoint = this.openidConfigurationInfo.info.discoveryDocument.authorization_endpoint;\n const clientId = this.aXMAuthConfigs.authConfig.clientId!;\n const responseType = 'code';\n const state = Math.random().toString(36).substring(2);\n\n const queryParams = [\n `response_type=${encodeURIComponent(responseType)}`,\n `client_id=${encodeURIComponent(clientId)}`,\n `redirect_uri=${encodeURIComponent(redirectUri)}`,\n `scope=${encodeURIComponent(scope)}`,\n `state=${encodeURIComponent(state)}`,\n tenantId ? `tenant_id=${encodeURIComponent(tenantId)}` : null,\n applicationId ? `application_id=${encodeURIComponent(applicationId)}` : null,\n `code_challenge=${encodeURIComponent(codeChallenge)}`,\n `code_challenge_method=S256`,\n ]\n .filter(Boolean)\n .join('&');\n\n const authorizeUrl = `${authorizeEndpoint}?${queryParams}`;\n\n window.location.href = authorizeUrl;\n // Prevent further execution by waiting on a never-resolving Promise after redirect\n await new Promise(() => {});\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Signs out the user according to OpenID Connect standards.\n * Tries to call the standard OIDC end_session_endpoint if available, else falls back to configured logoutUrl.\n * Falls back to root landing page on local logout if nothing is provided.\n * This runs in the background (without redirecting user immediately to the endpoint).\n */\n async signout(): Promise<void> {\n localStorage.removeItem('pkce_code_verifier');\n localStorage.removeItem('oauth_provider');\n\n // Standard OIDC logout: try to use end_session_endpoint if found in the discovery document\n const discoveryDoc = this.openidConfigurationInfo?.info?.discoveryDocument;\n let logoutUrl: string | undefined;\n\n if (discoveryDoc?.end_session_endpoint) {\n logoutUrl = discoveryDoc.end_session_endpoint;\n // Optional: append id_token_hint, post_logout_redirect_uri or others as needed by your IdP\n // For example: logoutUrl += `?post_logout_redirect_uri=${encodeURIComponent(window.location.origin)}`;\n } else if (this.aXMAuthConfigs.logoutUrl) {\n logoutUrl = this.aXMAuthConfigs.logoutUrl;\n }\n\n // Call logout in the background (don't redirect)\n if (logoutUrl) {\n // Fire-and-forget: Create an invisible iframe to make the logout request in the background\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = logoutUrl;\n document.body.appendChild(iframe);\n\n // Optionally, remove iframe after load\n iframe.onload = () => {\n setTimeout(() => document.body.removeChild(iframe), 1000);\n };\n }\n\n // Always send user to landing page after local logout, regardless\n window.location.href = '/';\n }\n\n async refreshToken(context: AXPSessionContext): Promise<AXPSignInResult> {\n try {\n await this.configureOAuth();\n if (!this.aXMAuthConfigs.authConfig || !this.aXMAuthConfigs.authConfig.clientId) {\n throw new Error('authConfig or clientId is missing');\n }\n const authData = this.loadAuthData();\n if (!authData) {\n return { succeed: false };\n }\n const refreshToken = authData.refreshToken;\n if (!refreshToken) {\n return { succeed: false };\n }\n\n const body = new HttpParams()\n .set('grant_type', 'refresh_token')\n .set('client_id', this.aXMAuthConfigs.authConfig.clientId)\n .set('refresh_token', refreshToken);\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n\n const response = await firstValueFrom(\n this.http.post<IAuthenticationDataModel>(\n this.openidConfigurationInfo.info.discoveryDocument.token_endpoint,\n body.toString(),\n { headers },\n ),\n );\n\n // Extract user, tenant, and application from id_token\n const payload = JwtUtil.parseJwt(response.id_token);\n const user = {\n id: payload['sub'] || payload['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n\n const sessionData: AXPSessionData = {\n accessToken: response.access_token,\n refreshToken: response.refresh_token,\n idToken: response.id_token,\n strategy: 'oidc',\n expiresIn: TimeUtil.calculateExpireInDate(response.expires_in ?? 0),\n user,\n tenant,\n application,\n };\n\n // this.setServiceProps(sessionData);\n\n return {\n succeed: true,\n data: {\n ...sessionData,\n user: sessionData.user as AXPUser, // Ensure user is not undefined\n },\n };\n } catch (error) {\n console.error('Error refreshing token', error);\n return { succeed: false };\n }\n }\n\n private loadAuthData(): AXPSessionData | undefined {\n const sessionData = this.sessionService.getSessionData();\n return sessionData || undefined;\n }\n\n public async loadUserInfo(): Promise<object> {\n return this.oauthService.loadUserProfile();\n }\n\n private handleError(error: any): never {\n console.error('Authentication error:', error);\n throw error;\n }\n\n //#region getter\n get name(): string {\n return 'oidc';\n }\n //#endregion\n}\n\nexport interface AXPUserPassCredentials extends AXPBaseCredentials {\n username: string;\n password: string;\n}\n\nexport interface AXPOAuthExternalCredentials extends AXPBaseCredentials {\n strategy: string;\n accessToken: string;\n refreshToken: string;\n idToken: string;\n user: string; // Store user as JSON string\n expiresIn: string;\n provider: string; // The provider name (e.g., 'google', 'apple', 'aad')\n}\n\nexport interface IAuthenticationDataModel {\n access_token: string;\n applicationid: string;\n applicationname: string;\n applicationtitle: string;\n editionid: string;\n editionname: string;\n editiontitle: string;\n id_token: string;\n refresh_token: string;\n scope: string;\n tenantid: string;\n tenantname: string;\n tenanttitle: string;\n token_type: string;\n expires_in?: number;\n sub?: string;\n fullname?: string;\n picture?: string;\n}\n","import { AXPPermission, AXPPermissionLoader, AXPSessionContext } from '@acorex/platform/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AXMOidcPermissionLoader implements AXPPermissionLoader {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private apiGetConfig = `${this.configs.baseUrl}/abp/application-configuration`;\n\n constructor(private http: HttpClient) {}\n\n async getList(context: AXPSessionContext): Promise<AXPPermission[]> {\n const response = await firstValueFrom(this.http.get<{ items: any }>(this.apiGetConfig));\n return this.mapTo(response);\n // if (context.user == null)\n // return [];\n // else if (context.user.name.toLowerCase() == 'admin')\n // return ['axp.admin.console', 'asc.admin.message', 'asc.admin.settings', 'asc.admin.gliding', 'asc.user.gliding'];\n // else\n // return ['asc.user.gliding'];\n // return ['axp.admin.console', 'asc.admin.message', 'asc.admin.settings', 'asc.admin.gliding', 'asc.user.gliding'];\n }\n\n mapTo(jsonObj: any): string[] {\n const policies = jsonObj.auth.grantedPolicies;\n const truePolicies = Object.keys(policies).filter((key) => policies[key] === true);\n return truePolicies;\n }\n}\n","import { AXPTenant, AXPTenantLoader, AXPSessionContext } from '@acorex/platform/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AXMOidcTenantLoader implements AXPTenantLoader {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private apiGetTenants = `${this.configs.baseUrl}/tenants/available-for-user`;\n constructor(private http: HttpClient) {}\n\n async getList(context: AXPSessionContext): Promise<AXPTenant[]> {\n const response = await firstValueFrom(this.http.get<{ items: any[] }>(this.apiGetTenants));\n return response.items.map((item) => {\n return this.mapToAXPTenant(item);\n });\n }\n\n async set(tenant: AXPTenant): Promise<void> {\n return Promise.resolve();\n }\n\n private mapToAXPTenant(item: any): AXPTenant {\n return {\n id: item.id,\n name: item.name || 'defaultName',\n title: item.title || 'defaultTitle',\n // Add other fields and defaults as needed, and handle the logo if applicable\n };\n }\n}\n","import { AXPUserAvatarData, AXPUserAvatarProvider } from '@acorex/platform/layout/components';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject } from '@angular/core';\nimport { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPDataGenerator } from '@acorex/platform/core';\n\nexport class AXCApiUserAvatarProvider implements AXPUserAvatarProvider {\n private userService = inject(AXMUsersEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(userId: string): Promise<AXPUserAvatarData> {\n // Check if requesting current user info\n const currentUser = this.sessionService.user;\n const isCurrentUser = currentUser?.id === userId;\n\n if (isCurrentUser && currentUser) {\n // Use session service user data for current user\n const [firstName, lastName] = (currentUser.name || '').split(' ') || ['', ''];\n return {\n id: currentUser.id,\n username: currentUser.name || '',\n firstName: firstName || '',\n lastName: lastName || '',\n status: 'online',\n avatarUrl: currentUser.avatar || AXPDataGenerator.avatar(),\n };\n }\n\n // Use entity service for other users\n const user = await this.userService.getOne(userId);\n if (!user) {\n throw new Error(`User not found for ${userId}`);\n }\n const [firstName, lastName] = user.displayName.split(' ') || ['', ''];\n return {\n id: user.id,\n username: user.username,\n firstName: firstName || '',\n lastName: lastName || '',\n status: 'online',\n avatarUrl: AXPDataGenerator.avatar(),\n };\n }\n}\n\n","//#region ---- Imports ----\n\nimport { AXPReportViewerService } from '@acorex/modules/report-management';\nimport { AXPReportCategory, AXPReportDefinition, AXPLayoutExecutionContext, AXPExecutionReportCommandResult } from '@acorex/modules/report-management';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXCReportCategoryApiResponse,\n AXCReportCategoryApiItem,\n AXCReportDefinitionApiResponse,\n AXCReportDefinitionApiItem,\n} from './report-management-api.providers';\n\n//#endregion\n\n/**\n * API-based Report Viewer Service\n * Extends the base service to override data loading methods with API calls\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXCReportViewerApiService extends AXPReportViewerService {\n private readonly http = inject(HttpClient);\n private readonly configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private readonly baseUrl = this.configs.baseUrl;\n\n //#region ---- Override: Category Loading ----\n\n /**\n * Override: Load categories from API instead of entity service\n */\n protected override async loadCategories(parentId?: string): Promise<AXPReportCategory[]> {\n try {\n let url: string;\n if (parentId) {\n url = `${this.baseUrl}/v1/global/report-management/category/${parentId}`;\n const response = await firstValueFrom(this.http.get<AXCReportCategoryApiResponse>(url));\n const categoryData = response.items?.[0];\n const filteredItems = categoryData?.folderItems ?? [];\n return filteredItems.map((item) => this.mapApiCategoryToReportCategory(item));\n } else {\n url = `${this.baseUrl}/v1/global/report-management/category`;\n const params = { Skip: 0, Take: 1000 };\n const response = await firstValueFrom(this.http.get<AXCReportCategoryApiResponse>(url, { params }));\n const all = response.items ?? [];\n const rootCategories = all.filter((i) => !i.reportCategoryParentId);\n return rootCategories.map((item) => this.mapApiCategoryToReportCategory(item));\n }\n } catch (error) {\n console.error('Error fetching report categories:', error);\n return [];\n }\n }\n\n //#endregion\n\n //#region ---- Override: Report Loading ----\n\n /**\n * Override: Load reports from API instead of entity service\n */\n protected override async loadReports(categoryId: string): Promise<AXPReportDefinition[]> {\n try {\n const url = `${this.baseUrl}/v1/global/report-management/category/${categoryId}`;\n const response = await firstValueFrom(this.http.get<AXCReportCategoryApiResponse>(url));\n const categoryData = response.items?.[0];\n const defs = categoryData?.reportDefinitionItems ?? [];\n\n // Fetch full report definitions for each item to get layouts and parameterGroups\n const fullDefinitions = await Promise.all(\n defs.map(async (item) => {\n try {\n const reportUrl = `${this.baseUrl}/v1/global/report-management/report/${item.id}`;\n const reportResponse = await firstValueFrom(\n this.http.get<AXCReportDefinitionApiResponse>(reportUrl)\n );\n return this.mapApiReportDefinitionToReportDefinition(reportResponse);\n } catch {\n // Fallback to item mapping if full fetch fails\n return this.mapApiReportDefinitionItemToReportDefinition(item);\n }\n })\n );\n\n return fullDefinitions;\n } catch (error) {\n console.error('Error fetching report definitions:', error);\n return [];\n }\n }\n\n /**\n * Override: Load single report from API instead of entity service\n */\n protected override async loadReport(id: string): Promise<AXPReportDefinition | undefined> {\n try {\n const url = `${this.baseUrl}/v1/global/report-management/report/${id}`;\n const response = await firstValueFrom(this.http.get<AXCReportDefinitionApiResponse>(url));\n return this.mapApiReportDefinitionToReportDefinition(response);\n } catch (error) {\n console.error('Error fetching report definition by ID:', error);\n return undefined;\n }\n }\n\n //#endregion\n\n //#region ---- Override: Report Execution ----\n\n /**\n * Override: Execute report with given context\n * Implements report execution logic for API environment\n * TODO: Implement API call to execute report\n */\n override async executeReport(context: AXPLayoutExecutionContext): Promise<AXPExecutionReportCommandResult> {\n // TODO: Implement API call to execute report\n // Example:\n // const url = `${this.baseUrl}/v1/global/report-management/report/${context.reportId}/execute`;\n // const response = await firstValueFrom(this.http.post<AXPExecutionReportCommandResult>(url, context));\n // return response;\n \n throw new Error('executeReport API implementation is not yet implemented');\n }\n\n //#endregion\n\n //#region ---- Private: Mapping Methods ----\n\n private mapApiCategoryToReportCategory(apiItem: AXCReportCategoryApiItem): AXPReportCategory {\n return {\n id: apiItem.id,\n title: apiItem.title,\n description: apiItem.description || undefined,\n parentId: apiItem.reportCategoryParentId || undefined,\n childrenCount: apiItem.folderCount ?? 0,\n itemsCount: apiItem.itemCount ?? 0,\n };\n }\n\n private mapApiReportDefinitionItemToReportDefinition(apiItem: AXCReportDefinitionApiItem): AXPReportDefinition {\n return {\n id: apiItem.id,\n title: apiItem.title,\n description: apiItem.description || undefined,\n categoryIds: apiItem.categoryIds,\n parameterGroups: [],\n layouts: [],\n defaultLayoutId: '',\n };\n }\n\n private mapApiReportDefinitionToReportDefinition(apiResponse: AXCReportDefinitionApiResponse): AXPReportDefinition {\n return {\n id: apiResponse.id,\n title: apiResponse.title,\n description: apiResponse.description || undefined,\n categoryIds: apiResponse.categoryIds,\n parameterGroups: apiResponse.parameterGroups.map((group) => ({\n name: group.name,\n title: group.title,\n parameters: group.parameters.map((param) => ({\n path: param.path,\n title: param.title,\n description: param.description,\n widget: {\n type: param.widget.type,\n options: param.widget.options || {},\n valueTransforms: param.widget.valueTransforms || {},\n },\n })),\n })),\n layouts: apiResponse.layouts.map((layout) => ({\n id: layout.id,\n title: layout.title,\n layout: layout.layout,\n dataSource: layout.dataSource as any,\n export: layout.export,\n isDefault: layout.isDefault || false,\n })),\n defaultLayoutId: apiResponse.defaultLayoutId,\n };\n }\n\n //#endregion\n}\n\n","import { NgModule } from '@angular/core';\nimport { AXPRuntimeModule, provideCommandSetups } from '@acorex/platform/runtime';\nimport { AXPReportViewerService } from '@acorex/modules/report-management';\nimport { AXCReportViewerApiService } from './report-viewer-api.service';\n\n@NgModule({\n imports: [AXPRuntimeModule],\n exports: [],\n declarations: [],\n providers: [ \n {\n provide: AXPReportViewerService,\n useClass: AXCReportViewerApiService,\n },\n provideCommandSetups([\n {\n key: 'ReportManagement.Report:Execute',\n command: () => import('./execute.command').then((c) => c.AXCReportExecuteCommand),\n }\n \n ]),\n ],\n})\nexport class AXCReportManagementApiModule { }\n","import {\n AXP_APPLICATION_LOADER,\n AXP_FEATURE_LOADER,\n AXP_PERMISSION_LOADER,\n AXP_TENANT_LOADER,\n AXPAuthModule,\n} from '@acorex/platform/auth';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPEntityStorageService } from '@acorex/platform/layout/entity';\nimport { AXP_USER_AVATAR_PROVIDER } from '@acorex/platform/layout/components';\nimport { STRATEGY_CONFIG_TOKEN } from '@acorex/platform/layout/widgets';\nimport { NgModule } from '@angular/core';\nimport { OAuthModule } from 'angular-oauth2-oidc';\nimport { AXCApiEntityStorageService } from './api-storage.service';\nimport { AXCFileStorageApiService } from './file-storage-api.service';\nimport {\n AXMOidcApplicationLoader,\n AXMOidcFeatureLoader,\n AXMOidcPermissionLoader,\n AXCAPIOidcStrategy,\n AXMOidcTenantLoader,\n AXCApiUserAvatarProvider,\n} from './auth/oidc';\nimport { AXCUtilsModule } from '@acorex/connectivity/utils';import { AXCReportManagementApiModule } from './report-management/report-management-api.module';\n@NgModule({\n imports: [\n OAuthModule.forRoot(),\n AXPAuthModule.forRoot({\n strategies: [AXCAPIOidcStrategy],\n }),\n AXCUtilsModule,\n AXCReportManagementApiModule,\n ],\n providers: [\n {\n provide: AXPEntityStorageService,\n useClass: AXCApiEntityStorageService,\n },\n\n {\n provide: AXPFileStorageService,\n useClass: AXCFileStorageApiService,\n },\n {\n provide: AXP_TENANT_LOADER,\n useClass: AXMOidcTenantLoader,\n },\n {\n provide: AXP_APPLICATION_LOADER,\n useClass: AXMOidcApplicationLoader,\n },\n {\n provide: AXP_PERMISSION_LOADER,\n useClass: AXMOidcPermissionLoader,\n },\n {\n provide: AXP_FEATURE_LOADER,\n useClass: AXMOidcFeatureLoader,\n },\n {\n provide: STRATEGY_CONFIG_TOKEN,\n useValue: {\n selectValueStrategy: 'valueField',\n lookupValueStrategy: 'valueField',\n },\n },\n {\n provide: AXP_USER_AVATAR_PROVIDER,\n useClass: AXCApiUserAvatarProvider,\n },\n ],\n})\nexport class AXCApiModule { }\n","import { AXCExternalAuthorizationService } from '@acorex/connectivity/utils';\nimport { AXM_AUTH_CONFIG_TOKEN, AXMAuthConfigs } from '@acorex/modules/auth';\nimport {\n AXP_APPLICATION_LOADER,\n AXP_TENANT_LOADER,\n AXPAuthStrategy,\n AXPBaseCredentials,\n AXPSessionContext,\n AXPSessionData,\n AXPSessionService,\n AXPSignInResult,\n AXPUser,\n JwtUtil,\n PkceUtil,\n TimeUtil,\n} from '@acorex/platform/auth';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthConfig, OAuthService } from 'angular-oauth2-oidc';\n\n//#region ---- Class Definition ----\n\n@Injectable()\nexport class APIGoogleStrategy extends AXPAuthStrategy {\n private aXMAuthConfigs: AXMAuthConfigs = inject(AXM_AUTH_CONFIG_TOKEN);\n private oauthService: OAuthService = inject(OAuthService);\n private http: HttpClient = inject(HttpClient);\n private sessionService: AXPSessionService = inject(AXPSessionService);\n private router: Router = inject(Router);\n private externalAuthorizationService = inject(AXCExternalAuthorizationService);\n private tenantLoader = inject(AXP_TENANT_LOADER);\n private applicationLoader = inject(AXP_APPLICATION_LOADER);\n\n public userInfo: any;\n public authConfig: AuthConfig;\n public openidConfigurationInfo: any; // clarify the type if possible\n\n constructor() {\n super();\n }\n\n get name(): string {\n return 'google';\n }\n\n public async configureOAuth(): Promise<void> {\n if (this.openidConfigurationInfo) return;\n\n if (!this.authConfig) {\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing');\n }\n this.authConfig = this.aXMAuthConfigs.authConfig;\n }\n\n this.oauthService.configure(this.authConfig);\n this.oauthService.setStorage(localStorage);\n\n this.openidConfigurationInfo = await this.oauthService.loadDiscoveryDocument();\n\n if (!this.openidConfigurationInfo) {\n throw new Error('openidConfigurationInfo is missing');\n }\n\n this.oauthService.events.subscribe(async (event) => {\n // console.log('event', event);\n // if (event.type === 'token_received') {\n // console.log('Token has been refreshed');\n // }\n // if (event.type === 'token_expires') {\n // console.log('Token is about to expire. Triggering silent refresh...');\n // }\n });\n\n const oidcJson = localStorage.getItem(AXPSessionService.SESSION_KEY);\n\n if (oidcJson) {\n const authData = JSON.parse(oidcJson) as AXPSessionData;\n if (authData) {\n this.sessionService.setSession(authData);\n\n if (authData.expiresIn && new Date(authData.expiresIn) < new Date()) {\n if (authData.expiresIn) {\n this.sessionService.refreshToken();\n } else {\n this.signout();\n }\n }\n }\n }\n }\n\n override async signin(credentials: AXPBaseCredentials): Promise<void> {\n const providerName = credentials['strategy'];\n await this.externalAuthorizationService.signin(providerName);\n }\n\n async signout(): Promise<void> {\n localStorage.removeItem('pkce_code_verifier');\n localStorage.removeItem('oauth_provider');\n console.log('User signed out');\n }\n\n async refreshToken(context: AXPSessionContext): Promise<AXPSignInResult> {\n try {\n await this.configureOAuth();\n if (!this.authConfig || !this.authConfig.clientId) {\n throw new Error('authConfig or clientId is missing');\n }\n const authData = this.loadAuthData();\n if (!authData) {\n return { succeed: false };\n }\n const refreshToken = authData.refreshToken;\n if (!refreshToken) {\n return { succeed: false };\n }\n\n const body = new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: this.authConfig.clientId!,\n refresh_token: refreshToken,\n });\n\n const response = await fetch(this.openidConfigurationInfo.info.discoveryDocument.token_endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n });\n\n if (!response.ok) {\n throw new Error(`Token refresh failed: ${response.status} ${response.statusText}`);\n }\n\n const tokenData = await response.json();\n\n // Extract user information from the refreshed token\n const payload = JwtUtil.parseJwt(tokenData.id_token);\n const user = {\n id: payload['sub'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n\n const sessionData: AXPSessionData = {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n idToken: tokenData.id_token,\n strategy: 'google',\n expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),\n user,\n tenant,\n application,\n };\n\n return {\n succeed: true,\n data: {\n ...sessionData,\n user: sessionData.user as AXPUser,\n },\n };\n } catch (error) {\n console.error('Error refreshing token', error);\n return { succeed: false };\n }\n }\n\n override async updateToken(params: { [key: string]: any }): Promise<AXPSignInResult | undefined> {\n try {\n // Ensure OAuth is configured first\n if (!this.openidConfigurationInfo) {\n await this.configureOAuth();\n }\n // If params contains 'code', exchange it for tokens\n if (params['code']) {\n const code = params['code'];\n const redirectUri = params['redirectUri'] || this.authConfig.redirectUri!;\n const clientId = params['clientId'] || this.authConfig.clientId!;\n const tokenEndpoint = this.openidConfigurationInfo.info.discoveryDocument.token_endpoint;\n\n // Get code_verifier from localStorage (PKCE)\n const codeVerifier = localStorage.getItem('pkce_code_verifier');\n localStorage.removeItem('pkce_code_verifier');\n if (!codeVerifier) {\n throw new Error('Code verifier not found. Please try signing in again.');\n }\n\n // Prepare body for token request\n const body = new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: clientId,\n code_verifier: codeVerifier,\n code: code,\n redirect_uri: redirectUri,\n });\n\n // Call the token endpoint\n const response = await fetch(tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n });\n\n if (!response.ok) {\n throw new Error(`Token exchange failed: ${response.status} ${response.statusText}`);\n }\n\n const tokenData = await response.json();\n if (!tokenData) {\n throw new Error('Token data not found');\n }\n\n // Parse the ID token to extract user information\n const payload = JwtUtil.parseJwt(tokenData.id_token);\n if (!payload) {\n throw new Error('Payload not found');\n }\n\n const user = {\n id: payload['sub'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n\n return {\n succeed: true,\n data: {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n idToken: tokenData.id_token,\n expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),\n user,\n tenant,\n application,\n },\n };\n }\n // get Authorizeation Code\n else {\n // Extract parameters\n // Support both direct id fields and nested tenant/application objects\n const tenantId = params['tenantId'] ?? params['tenant']?.id ?? null;\n const applicationId = params['applicationId'] ?? params['application']?.id ?? null;\n const redirectUri = params['redirectUri'] || this.authConfig.redirectUri!;\n const scope = params['scope'] || this.authConfig.scope!;\n\n // Generate PKCE code verifier and challenge\n const codeVerifier = PkceUtil.generateRandomString(128);\n localStorage.setItem('pkce_code_verifier', codeVerifier);\n const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);\n\n // Build authorization URL\n const authorizeEndpoint = this.openidConfigurationInfo.info.discoveryDocument.authorization_endpoint;\n const clientId = this.authConfig.clientId!;\n const responseType = 'code';\n const state = Math.random().toString(36).substring(2);\n\n const queryParams = [\n `response_type=${encodeURIComponent(responseType)}`,\n `client_id=${encodeURIComponent(clientId)}`,\n `redirect_uri=${encodeURIComponent(redirectUri)}`,\n `scope=${encodeURIComponent(scope)}`,\n `state=${encodeURIComponent(state)}`,\n tenantId ? `tenant_id=${encodeURIComponent(tenantId)}` : null,\n applicationId ? `application_id=${encodeURIComponent(applicationId)}` : null,\n `code_challenge=${encodeURIComponent(codeChallenge)}`,\n `code_challenge_method=S256`,\n ]\n .filter(Boolean)\n .join('&');\n\n const authorizeUrl = `${authorizeEndpoint}?${queryParams}`;\n\n window.location.href = authorizeUrl;\n await new Promise(() => {});\n\n return;\n }\n } catch (error) {\n console.error('Error in updateToken:', error);\n throw error;\n }\n }\n\n private loadAuthData(): AXPSessionData | undefined {\n const sessionData = this.sessionService.getSessionData();\n return sessionData || undefined;\n }\n\n private handleError(error: any): never {\n console.error('Authentication error:', error);\n throw error;\n }\n}\n\n//#endregion\n","//#region ---- Execute Report DTO ----\n\n/**\n * Execute Report DTO - Response from report execution API\n */\nexport interface AXPExecuteReportDto {\n type: string;\n items: Record<string, unknown>[];\n totalCount: number;\n}\n\n//#endregion\n\n//#region ---- API Response Types ----\n\n/**\n * API Response for Category endpoint\n * Used by: GET /api/v1/global/report-management/category\n * GET /api/v1/global/report-management/category/{parentId}\n */\nexport interface AXCReportCategoryApiResponse {\n totalCount: number;\n items: AXCReportCategoryApiItem[];\n}\n\n/**\n * Category Item with recursive structure\n * Each category can contain child categories (folderItems) and reports (reportDefinitionItems)\n */\nexport interface AXCReportCategoryApiItem {\n reportCategoryParentId: string | null;\n name: string;\n title: string;\n description: string | null;\n folderCount: number;\n itemCount: number;\n isArchived: boolean;\n reportDefinitionItems: AXCReportDefinitionApiItem[];\n folderItems: AXCReportCategoryApiItem[]; // Recursive: child categories\n id: string;\n}\n\n/**\n * Report Definition Item (in category list, without full layout)\n */\nexport interface AXCReportDefinitionApiItem {\n categoryIds: string[];\n name: string;\n title: string;\n description: string | null;\n isArchived: boolean;\n id: string;\n}\n\n/**\n * Full Report Definition with complete details including layouts\n * Used by: GET /api/v1/global/report-management/report/{reportId}\n */\nexport interface AXCReportDefinitionApiResponse {\n id: string;\n name: string;\n title: string;\n description: string | null;\n categoryIds: string[];\n parameterGroups: AXCReportParameterGroup[];\n layouts: AXCReportLayoutDefinition[];\n defaultLayoutId: string;\n}\n\n/**\n * Parameter Group for report parameters\n */\nexport interface AXCReportParameterGroup {\n name: string;\n title: string;\n parameters: AXCReportParameter[];\n}\n\n/**\n * Report Parameter definition\n */\nexport interface AXCReportParameter {\n path: string;\n title: string;\n description?: string;\n widget: {\n type: string; // Backend sends values like 'number-editor', 'text-editor', etc.\n path?: string | null;\n options?: any;\n valueTransforms?: any;\n };\n}\n\n/**\n * Layout Definition for report display\n */\nexport interface AXCReportLayoutDefinition {\n id: string;\n title: string;\n layout: any; // Will be mapped to proper AXPReportLayout type\n dataSource?: {\n type: string;\n name?: string;\n provider?: string;\n };\n export?: {\n fileNameTemplate: string;\n pdf?: any;\n excel?: any;\n csv?: any;\n };\n isDefault?: boolean;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-connectivity-api.mjs","sources":["../../../../libs/connectivity/api/src/lib/api-storage.service.ts","../../../../libs/connectivity/api/src/lib/file-storage-api.service.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/application.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/configuration.service.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/feature.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/oidc.strategy.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/permission.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/tenant.loader.ts","../../../../libs/connectivity/api/src/lib/auth/oidc/user-avatar.provider.ts","../../../../libs/connectivity/api/src/lib/report-management/report-viewer-api.service.ts","../../../../libs/connectivity/api/src/lib/report-management/report-management-api.module.ts","../../../../libs/connectivity/api/src/lib/api.module.ts","../../../../libs/connectivity/api/src/lib/api-google.strategy.ts","../../../../libs/connectivity/api/src/lib/report-management/report-management-api.providers.ts","../../../../libs/connectivity/api/src/acorex-connectivity-api.ts"],"sourcesContent":["import { AXP_ROOT_CONFIG_TOKEN, AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/core';\nimport {\n AXPEntityAggregateOptions,\n AXPEntityAggregateRequest,\n AXPEntityAggregateResult,\n AXPEntityQueryAllOptions,\n AXPEntityQueryAllResult,\n AXPEntityStorageService,\n computeEntityAggregates,\n} from '@acorex/platform/layout/entity';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { kebabCase } from 'lodash-es';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AXCApiEntityStorageService implements AXPEntityStorageService<string, any> {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private filterService = inject(AXPFilterOperatorMiddlewareService);\n private mainUrl = this.configs.baseUrl;\n\n // API routing constants\n private readonly API_VERSION = 'v1';\n private readonly DEFAULT_AREA = 'global';\n\n private readonly defaultQueryAllPageSize = 500;\n\n private readonly defaultQueryAllMaxRows = 100_000;\n\n private readonly defaultAggregateMaxRows = 50_000;\n\n constructor(private http: HttpClient) {}\n\n get dbName(): string {\n return 'ACoreXPlatform';\n }\n\n getConfigEntity(entityName: string) {\n const partEntity = entityName.split('.');\n if (partEntity.length == 3) {\n const [area, module, entity] = partEntity;\n const areaKebab = kebabCase(area);\n const moduleKebab = kebabCase(module);\n const entityKebab = kebabCase(entity);\n return {\n module: moduleKebab,\n entity: entityKebab,\n area: areaKebab,\n version: this.API_VERSION,\n };\n } else {\n const [module, entity] = partEntity;\n const moduleKebab = kebabCase(module);\n const entityKebab = kebabCase(entity);\n return {\n module: moduleKebab,\n entity: entityKebab,\n area: this.DEFAULT_AREA,\n version: this.API_VERSION,\n };\n }\n }\n\n async initial<T = any>(entityName: string, collection: T[]): Promise<T[]> {\n //const exists = await this.table('entity-store').where({ entityName }).count();\n // if (exists === 0) {\n // await this.table('entity-store').bulkAdd(collection.map((item) => ({ ...item, entityName })));\n // }\n return collection;\n }\n\n async getOne<T = any>(entityName: string, id: string): Promise<T> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }${id ? '/' + id : ''}`;\n return firstValueFrom(this.http.get<T>(url));\n }\n\n async updateOne<T = any>(entityName: string, id: string, keyValue: { [key: string]: any }): Promise<T> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }${id ? '/' + id : ''}`;\n return firstValueFrom(this.http.put<T>(url, keyValue));\n }\n\n async deleteOne(entityName: string, id: string): Promise<void> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }/${id}`;\n await firstValueFrom(this.http.delete(url));\n }\n\n async insertOne<T = any>(entityName: string, entityItem: T): Promise<string> {\n const routeElement = await this.getConfigEntity(entityName);\n const url = `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }`;\n return firstValueFrom(this.http.post<string>(url, entityItem));\n }\n\n async getAll<T = any>(entityName: string): Promise<T[]> {\n return [];\n }\n\n async query<T = any>(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<T>> {\n const routeElement = await this.getConfigEntity(entityName);\n\n let httpParams = new HttpParams()\n .set('Skip', String(request.skip ?? 0))\n .set('Take', String(request.take ?? 0));\n if (request?.sort && request?.sort.length > 0) {\n const sortParam = request?.sort.map((sort: any) => `${sort.field}:${sort.dir}`).join(',');\n httpParams = httpParams.set('$orderby', sortParam);\n }\n\n const greaterThanOperator = this.filterService.getOperator('greaterThan');\n const lessThanOperator = this.filterService.getOperator('lessThan');\n function generateQueryString(filter: any) {\n if (!filter.filters) {\n // Base case: single filter\n if (typeof filter.value === 'object' && filter.operator.type === 'between') {\n return `${filter.field} ${greaterThanOperator.type} '${filter.value.from}' and ${filter.field} ${lessThanOperator.type} '${filter.value.to}'`;\n } else {\n return `${filter.field} ${filter.operator.type} '${filter.value}'`;\n }\n } else if (!filter.filters.length) {\n return;\n } else {\n // Recursive case: multiple filters\n\n const filterStrings = filter.filters.map((subFilter: any) => generateQueryString(subFilter));\n const logic = filter.logic || 'AND'; // Default logic is 'AND' if not provided\n return `${filterStrings.filter((i: any) => i).join(` ${logic} `)}`;\n }\n }\n\n let queryString = '';\n\n if (request.filter) {\n const filter = request.filter;\n if (filter.filters && filter.filters.length > 0) {\n // Construct filter string from provided filters\n\n const dynamicQueries = generateQueryString(filter);\n console.log({ dynamicQueries: dynamicQueries });\n\n // Append dynamic filters to custom filter, if both exist\n queryString = (queryString ? `${queryString},${dynamicQueries}` : dynamicQueries) as string;\n }\n }\n // Set the $filter parameter if there are any filters\n if (queryString) {\n httpParams = httpParams.set('$query', queryString);\n }\n return firstValueFrom(\n this.http.get<any>(\n `${this.mainUrl}/${routeElement.version}/${routeElement.area}/${routeElement.module}/${routeElement.entity\n }`,\n { params: httpParams }\n )\n ).then((response) => {\n return {\n total: response.totalCount,\n items: response.items,\n };\n });\n }\n\n async count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number> {\n const page = await this.query(entityName, { ...request, skip: 0, take: 1 });\n return page.total;\n }\n\n async queryAll(\n entityName: string,\n request: Pick<AXPQueryRequest, 'filter' | 'sort'>,\n options?: AXPEntityQueryAllOptions,\n ): Promise<AXPEntityQueryAllResult<any>> {\n const pageSize = options?.pageSize ?? this.defaultQueryAllPageSize;\n const maxRows = options?.maxRows ?? this.defaultQueryAllMaxRows;\n const items: any[] = [];\n let skip = 0;\n let total = 0;\n while (items.length < maxRows) {\n const take = Math.min(pageSize, maxRows - items.length);\n const page = await this.query(entityName, {\n filter: request.filter,\n sort: request.sort,\n skip,\n take,\n });\n total = page.total;\n if (!page.items?.length) {\n break;\n }\n items.push(...page.items);\n skip += page.items.length;\n if (page.items.length < take || skip >= total) {\n break;\n }\n }\n return {\n items,\n total,\n truncated: total > items.length,\n };\n }\n\n async getMany(entityName: string, ids: string[]): Promise<(any | null)[]> {\n return Promise.all(\n ids.map(async (id) => {\n try {\n const row = await this.getOne(entityName, id);\n return row ?? null;\n } catch {\n return null;\n }\n }),\n );\n }\n\n async exists(entityName: string, id: string): Promise<boolean> {\n try {\n await this.getOne(entityName, id);\n return true;\n } catch {\n return false;\n }\n }\n\n async upsertOne(entityName: string, entity: any, options?: { merge?: boolean }): Promise<string> {\n const id = entity?.id as string | undefined;\n if (id) {\n try {\n const existing = await this.getOne(entityName, id);\n if (existing != null) {\n const merge = options?.merge !== false;\n const next = merge\n ? { ...(existing as Record<string, unknown>), ...(entity as Record<string, unknown>) }\n : { ...(entity as Record<string, unknown>) };\n const { id: _omit, ...patch } = next;\n await this.updateOne(entityName, id, patch);\n return id;\n }\n } catch {\n /* create when GET fails (e.g. 404) */\n }\n }\n return this.insertOne(entityName, entity);\n }\n\n async aggregate(\n entityName: string,\n request: AXPEntityAggregateRequest,\n options?: AXPEntityAggregateOptions,\n ): Promise<AXPEntityAggregateResult> {\n const maxRows = options?.maxRows ?? this.defaultAggregateMaxRows;\n const pageSize = options?.pageSize ?? this.defaultQueryAllPageSize;\n const { items } = await this.queryAll(entityName, request, { maxRows, pageSize });\n return { rows: computeEntityAggregates(items as Record<string, unknown>[], request) };\n }\n}\n","import {\n AXPFileStorageCreateRequest,\n AXPFileStorageFindRequest,\n AXPFileStorageInfo,\n AXPFileStorageService,\n AXPFileStorageStatus,\n AXPFileStorageUpdateRequest,\n AXPFileManyStorageInfo,\n} from '@acorex/platform/common';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { firstValueFrom, catchError, of } from 'rxjs';\n\n@Injectable()\nexport class AXCFileStorageApiService extends AXPFileStorageService {\n private readonly http = inject(HttpClient);\n\n //#region ---- API Endpoints ----\n\n private readonly baseUrl = '/api/file-storage';\n\n //#endregion\n\n //#region ---- Fallback Data ----\n\n private readonly fallbackFileInfo: AXPFileStorageInfo = {\n fileId: 'fallback-file-id',\n refId: 'fallback-ref-id',\n refType: 'fallback-ref-type',\n category: 'fallback-category',\n size: 0,\n mimeType: 'application/octet-stream',\n uploadedAt: new Date(),\n isPublic: true,\n isPrimary: false,\n status: AXPFileStorageStatus.Temporary,\n name: 'fallback-file',\n binary: new File([''], 'fallback-file'),\n };\n\n //#endregion\n\n async save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo> {\n try {\n const formData = new FormData();\n formData.append('file', request.file);\n formData.append('refId', request.refId);\n formData.append('refType', request.refType);\n formData.append('category', request.category);\n \n if (request.name) {\n formData.append('name', request.name);\n }\n if (request.path) {\n formData.append('path', request.path);\n }\n if (request.isPrimary !== undefined) {\n formData.append('isPrimary', request.isPrimary.toString());\n }\n if (request.status) {\n formData.append('status', request.status);\n }\n if (request.metadata) {\n formData.append('metadata', JSON.stringify(request.metadata));\n }\n\n return await firstValueFrom(\n this.http.post<AXPFileStorageInfo>(`${this.baseUrl}/save`, formData).pipe(\n catchError(() => of(this.fallbackFileInfo))\n )\n );\n } catch {\n return this.fallbackFileInfo;\n }\n }\n\n async update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo> {\n try {\n const updateData: any = {\n metadata: request.metadata,\n };\n \n if (request.path !== undefined) {\n updateData.path = request.path;\n }\n if (request.name !== undefined) {\n updateData.name = request.name;\n }\n if (request.isPrimary !== undefined) {\n updateData.isPrimary = request.isPrimary;\n }\n\n return await firstValueFrom(\n this.http.put<AXPFileStorageInfo>(`${this.baseUrl}/update/${request.fileId}`, updateData).pipe(\n catchError(() => of(this.fallbackFileInfo))\n )\n );\n } catch {\n return this.fallbackFileInfo;\n }\n }\n\n async find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]> {\n try {\n let params = new HttpParams();\n \n if (request.refId) {\n params = params.set('refId', request.refId);\n }\n if (request.refType) {\n params = params.set('refType', request.refType);\n }\n if (request.category) {\n params = params.set('category', request.category);\n }\n if (request.mimeType) {\n params = params.set('mimeType', request.mimeType);\n }\n if (request.isPublic !== undefined) {\n params = params.set('isPublic', request.isPublic.toString());\n }\n if (request.isPrimary !== undefined) {\n params = params.set('isPrimary', request.isPrimary.toString());\n }\n if (request.uploadedAtRange) {\n params = params.set('uploadedAtFrom', request.uploadedAtRange.from.toISOString());\n params = params.set('uploadedAtTo', request.uploadedAtRange.to.toISOString());\n }\n\n return await firstValueFrom(\n this.http.get<AXPFileStorageInfo[]>(`${this.baseUrl}/find`, { params }).pipe(\n catchError(() => of([]))\n )\n );\n } catch {\n return [];\n }\n }\n\n async getInfo(fileId: string): Promise<AXPFileStorageInfo> {\n try {\n return await firstValueFrom(\n this.http.get<AXPFileStorageInfo>(`${this.baseUrl}/info/${fileId}`).pipe(\n catchError(() => of(this.fallbackFileInfo))\n )\n );\n } catch {\n return this.fallbackFileInfo;\n }\n }\n\n async findMany(ids: string[]): Promise<AXPFileManyStorageInfo[]> {\n try {\n return await firstValueFrom(\n this.http.post<AXPFileManyStorageInfo[]>(`${this.baseUrl}/find-many`, { ids }).pipe(\n catchError(() => of([]))\n )\n );\n } catch {\n return [];\n }\n }\n\n async remove(fileId: string): Promise<void> {\n try {\n await firstValueFrom(\n this.http.delete(`${this.baseUrl}/remove/${fileId}`).pipe(\n catchError(() => of(void 0))\n )\n );\n } catch {\n // Silently fail in fallback mode\n }\n }\n\n async commit(fileId: string): Promise<void> {\n try {\n await firstValueFrom(\n this.http.post(`${this.baseUrl}/commit/${fileId}`, {}).pipe(\n catchError(() => of(void 0))\n )\n );\n } catch {\n // Silently fail in fallback mode\n }\n }\n\n async markForDeletion(fileId: string): Promise<void> {\n try {\n await firstValueFrom(\n this.http.post(`${this.baseUrl}/mark-for-deletion/${fileId}`, {}).pipe(\n catchError(() => of(void 0))\n )\n );\n } catch {\n // Silently fail in fallback mode\n }\n }\n} ","import { AXPApplication, AXPApplicationLoader, AXPSessionContext } from '@acorex/platform/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class AXMOidcApplicationLoader implements AXPApplicationLoader {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private apiGetApps = `${this.configs.baseUrl}/applications/applications-for-current-tenant`;\n private apiSetApp = `${this.configs.baseUrl}/SetApplication`;\n constructor(private http: HttpClient) { }\n\n async getList(context: AXPSessionContext): Promise<AXPApplication[]> {\n const response = await firstValueFrom(this.http.get<{ items: any[] }>(this.apiGetApps));\n return response.items.map((item) => this.mapToAXPApplication(item));\n }\n\n set(application: AXPApplication): Promise<void> {\n return Promise.resolve();\n }\n\n // //TODO: shoud be removed\n // set(application: AXPApplication): Observable<AXPRefreshTokenResult> {\n // return this.http.post<any>(this.apiSetApp, { applicationId: application.id }).pipe(\n // map((response) => {\n // return {\n // succeed: true,\n // data: {\n // accessToken: response.token,\n // refreshToken: response.token,\n // }\n // };\n // })\n // );\n // }\n\n private mapToAXPApplication(item: any): AXPApplication {\n return {\n id: item.id,\n name: item.name || 'defaultName',\n title: item.title || 'defaultTitle',\n version: item.version || '1.0.0',\n description: item.description,\n logo: item.logo, // Assuming logo is of type AXPLogoConfig or undefined\n edition: item.edition\n ? {\n id: item.edition.id,\n title: item.edition.title,\n description: item.edition.description,\n }\n : undefined,\n // features: item.features || [],\n };\n }\n}\n","import { AXM_AUTH_CONFIG_TOKEN } from '@acorex/modules/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, filter, of, switchMap, take, tap } from 'rxjs';\n\nexport interface Localization {\n values: Record<string, Record<string, string>>;\n resources: Record<string, Resource>;\n languages: Language[];\n currentCulture: Culture;\n defaultResourceName: string;\n languagesMap: Record<string, NameValue[]>;\n languageFilesMap: Record<string, NameValue[]>;\n}\n\nexport interface Resource {\n texts: Record<string, string>;\n baseResources: string[];\n}\n\nexport interface Language {\n cultureName: string;\n uiCultureName: string;\n displayName: string;\n twoLetterISOLanguageName: string;\n flagIcon: string;\n}\n\nexport interface Culture {\n displayName: string;\n // ... other properties\n}\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\n// Repeat similar patterns for 'auth', 'setting', 'currentUser', etc.\nexport interface Auth {\n grantedPolicies: Record<string, boolean>;\n}\n\n// Main configuration interface\nexport interface ApplicationConfiguration {\n localization: Localization;\n auth: Auth;\n setting: Record<string, any>;\n currentUser: any;\n features: Record<string, any>;\n globalFeatures: Record<string, any>;\n multiTenancy: Record<string, any>;\n currentCulture: Culture;\n timing: Record<string, any>;\n clock: Record<string, any>;\n objectExtensions: Record<string, any>;\n extraProperties: Record<string, any>;\n\n // ... other properties\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMConfigurationService {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private applicationConfig: ApplicationConfiguration | null = null;\n private apiGetConfig = `${this.configs.baseUrl}/abp/application-configuration`;\n private fetchInProgress: boolean = false;\n private configSubject: BehaviorSubject<ApplicationConfiguration | null> = new BehaviorSubject<ApplicationConfiguration | null>(null);\n\n constructor(private http: HttpClient) {\n this.init().subscribe(); // Automatically trigger configuration load on service instantiation\n }\n\n public init(): Observable<ApplicationConfiguration> {\n if (!this.fetchInProgress) {\n this.fetchInProgress = true;\n return this.http.get<ApplicationConfiguration>(this.apiGetConfig).pipe(\n tap((response) => {\n this.applicationConfig = response;\n this.configSubject.next(this.applicationConfig);\n this.fetchInProgress = false;\n })\n );\n } else {\n // Adjusted approach to handle TypeScript's type safety requirements\n return this.configSubject.asObservable().pipe(\n filter((config): config is ApplicationConfiguration => config !== null),\n take(1) // Ensures it completes after emitting the first non-null value\n );\n }\n }\n\n getConfig(): Observable<ApplicationConfiguration> {\n if (this.applicationConfig) {\n // If the config is already loaded, return it immediately\n return of(this.applicationConfig);\n } else {\n // If the config is not loaded, initiate loading\n return this.configSubject.asObservable().pipe(\n filter((config) => config !== null),\n take(1), // Ensure it only emits the first non-null value and completes\n switchMap(() => of(this.applicationConfig!))\n );\n }\n }\n}\n","import { AXPFeature, AXPFeatureLoader, AXPSessionContext } from '@acorex/platform/auth';\n\nexport class AXMOidcFeatureLoader implements AXPFeatureLoader {\n private list: AXPFeature[] = [\n {\n name: 'axp-entity-list-custom-view',\n title: 'Custom View',\n value: false\n },\n {\n name: 'axp-entity-list-quick-search',\n title: 'Custom View',\n value: false\n }\n ];\n\n async getList(context: AXPSessionContext): Promise<AXPFeature[]> {\n return this.list;\n }\n}\n","import { AXMAuthConfigs, AXM_AUTH_CONFIG_TOKEN } from '@acorex/modules/auth';\nimport {\n AXPAuthStrategy,\n AXPBaseCredentials,\n AXPSessionContext,\n AXPSessionData,\n AXPSessionService,\n AXPSignInResult,\n AXPUser,\n JwtUtil,\n PkceUtil,\n TimeUtil,\n} from '@acorex/platform/auth';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthConfig, OAuthService } from 'angular-oauth2-oidc';\nimport { firstValueFrom } from 'rxjs';\n\n//#endregion\n\n@Injectable()\nexport class AXCAPIOidcStrategy extends AXPAuthStrategy {\n private aXMAuthConfigs: AXMAuthConfigs = inject(AXM_AUTH_CONFIG_TOKEN);\n private oauthService: OAuthService = inject(OAuthService);\n private http: HttpClient = inject(HttpClient);\n private sessionService: AXPSessionService = inject(AXPSessionService);\n private router: Router = inject(Router);\n public userInfo: any; \n public openidConfigurationInfo: any; // clarify the type if possible\n\n public async configureOAuth(): Promise<void> {\n if (this.openidConfigurationInfo) return; \n\n // Validation: اطمینان از وجود authConfig\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing. Please check your environment configuration.');\n }\n\n this.oauthService.configure(this.aXMAuthConfigs.authConfig);\n this.oauthService.setStorage(localStorage);\n\n this.openidConfigurationInfo = await this.oauthService.loadDiscoveryDocument();\n\n if (!this.openidConfigurationInfo) {\n throw new Error('openidConfigurationInfo is missing');\n }\n\n this.oauthService.events.subscribe(async (event) => {\n // console.log('event', event);\n // if (event.type === 'token_received') {\n // console.log('Token has been refreshed');\n // }\n // if (event.type === 'token_expires') {\n // console.log('Token is about to expire. Triggering silent refresh...');\n // }\n });\n\n const oidcJson = localStorage.getItem(AXPSessionService.SESSION_KEY);\n\n if (oidcJson) {\n const authData = JSON.parse(oidcJson) as AXPSessionData;\n if (authData) {\n this.sessionService.setSession(authData);\n\n if (authData.expiresIn && new Date(authData.expiresIn) < new Date()) {\n if (authData.expiresIn) {\n this.sessionService.refreshToken();\n } else {\n this.signout();\n }\n }\n }\n }\n }\n\n async signin(credentials: AXPBaseCredentials): Promise<AXPSignInResult | undefined> {\n // If OIDC with username/password\n if (credentials.strategy === 'oidc' && (credentials as any).username && (credentials as any).password) {\n await this.handleOidcPasswordSignin(credentials as AXPUserPassCredentials);\n await new Promise(() => {}); // Keeps the promise pending until another flow (e.g., OAuth callback) completes\n }\n throw new Error(`Authentication method or credentials not supported: ${credentials.strategy}`);\n }\n\n private async handleOidcPasswordSignin(credentials: AXPUserPassCredentials): Promise<undefined> {\n await this.configureOAuth();\n \n // Validation: اطمینان از وجود baseUrl\n if (!this.aXMAuthConfigs.baseUrl) {\n throw new Error('baseUrl is missing. Please check your environment configuration.');\n }\n \n // استفاده از baseUrl از configuration\n const baseUrl = this.aXMAuthConfigs.baseUrl;\n const loginRes = await fetch(baseUrl + '/auth/manual-login', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ username: credentials.username, password: credentials.password }),\n credentials: 'include',\n });\n if (!loginRes.ok) {\n let errorText = 'Login failed';\n try {\n const errorJson = await loginRes.json();\n if (errorJson && errorJson.error && errorJson.error.description) {\n errorText = errorJson.error.description;\n }\n } catch {\n try {\n const text = await loginRes.text();\n if (text) {\n errorText = text;\n }\n } catch {}\n }\n throw new Error(errorText);\n }\n\n // Check if response is JSON or text\n const contentType = loginRes.headers.get('content-type');\n let result;\n\n if (contentType && contentType.includes('application/json')) {\n result = await loginRes.json();\n } else {\n // Handle text response (like \"Login successful\")\n const responseText = await loginRes.text();\n console.log('Server response:', responseText);\n }\n\n await this.updateToken({});\n }\n\n override async updateToken(params: { [key: string]: any }): Promise<AXPSignInResult | void> {\n try {\n // Ensure OAuth is configured first\n if (!this.openidConfigurationInfo) {\n await this.configureOAuth();\n }\n\n // Validation: اطمینان از وجود authConfig\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing. Please check your environment configuration.');\n }\n // get Token Code\n if (params['code']) {\n \n // If params contains 'code', exchange it for tokens using the OpenIddict token endpoint\n const code = params['code'];\n const redirectUri = params['redirectUri'] || this.aXMAuthConfigs.authConfig.redirectUri!;\n const clientId = params['clientId'] || this.aXMAuthConfigs.authConfig.clientId!;\n const tokenEndpoint =\n params['tokenEndpoint'] ||\n this.openidConfigurationInfo?.info?.discoveryDocument?.token_endpoint ||\n `${this.aXMAuthConfigs?.baseUrl}/connect/token`;\n\n // Get code_verifier from localStorage (PKCE)\n const codeVerifier = localStorage.getItem('pkce_code_verifier');\n localStorage.removeItem('pkce_code_verifier');\n if (!codeVerifier) {\n throw new Error('Code verifier not found. Please try signing in again.');\n }\n\n // Prepare body for token request\n const body = new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: clientId,\n code_verifier: codeVerifier,\n code: code,\n redirect_uri: redirectUri,\n });\n\n // Call the token endpoint (OpenIddict)\n const response = await fetch(tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n });\n\n if (!response.ok) {\n throw new Error(`Token exchange failed: ${response.status} ${response.statusText}`);\n }\n const tokenData = await response.json();\n if (!tokenData) {\n throw new Error('Token data not found');\n }\n const payload = JwtUtil.parseJwt(tokenData.id_token);\n if (!payload) {\n throw new Error('Payload not found');\n }\n const user = {\n id: payload['sub'] || payload['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n console.log('payload', payload);\n\n return {\n succeed: true,\n data: {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n idToken: tokenData.id_token,\n expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),\n user,\n tenant,\n application,\n },\n };\n }\n // get Authorizeation Code\n else {\n // Validation: اطمینان از وجود authConfig\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing. Please check your environment configuration.');\n }\n \n // Extract parameters\n // Support both direct id fields and nested tenant/application objects\n const tenantId = params['tenantId'] ?? params['tenant']?.id ?? null;\n const applicationId = params['applicationId'] ?? params['application']?.id ?? null;\n const redirectUri = params['redirectUri'] || this.aXMAuthConfigs.authConfig.redirectUri!;\n const scope = params['scope'] || this.aXMAuthConfigs.authConfig.scope!;\n\n // Generate PKCE code verifier and challenge\n const codeVerifier = PkceUtil.generateRandomString(128);\n localStorage.setItem('pkce_code_verifier', codeVerifier);\n const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);\n\n // Build authorization URL\n const authorizeEndpoint = this.openidConfigurationInfo.info.discoveryDocument.authorization_endpoint;\n const clientId = this.aXMAuthConfigs.authConfig.clientId!;\n const responseType = 'code';\n const state = Math.random().toString(36).substring(2);\n\n const queryParams = [\n `response_type=${encodeURIComponent(responseType)}`,\n `client_id=${encodeURIComponent(clientId)}`,\n `redirect_uri=${encodeURIComponent(redirectUri)}`,\n `scope=${encodeURIComponent(scope)}`,\n `state=${encodeURIComponent(state)}`,\n tenantId ? `tenant_id=${encodeURIComponent(tenantId)}` : null,\n applicationId ? `application_id=${encodeURIComponent(applicationId)}` : null,\n `code_challenge=${encodeURIComponent(codeChallenge)}`,\n `code_challenge_method=S256`,\n ]\n .filter(Boolean)\n .join('&');\n\n const authorizeUrl = `${authorizeEndpoint}?${queryParams}`;\n\n window.location.href = authorizeUrl;\n // Prevent further execution by waiting on a never-resolving Promise after redirect\n await new Promise(() => {});\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Signs out the user according to OpenID Connect standards.\n * Tries to call the standard OIDC end_session_endpoint if available, else falls back to configured logoutUrl.\n * Falls back to root landing page on local logout if nothing is provided.\n * This runs in the background (without redirecting user immediately to the endpoint).\n */\n async signout(): Promise<void> {\n localStorage.removeItem('pkce_code_verifier');\n localStorage.removeItem('oauth_provider');\n\n // Standard OIDC logout: try to use end_session_endpoint if found in the discovery document\n const discoveryDoc = this.openidConfigurationInfo?.info?.discoveryDocument;\n let logoutUrl: string | undefined;\n\n if (discoveryDoc?.end_session_endpoint) {\n logoutUrl = discoveryDoc.end_session_endpoint;\n // Optional: append id_token_hint, post_logout_redirect_uri or others as needed by your IdP\n // For example: logoutUrl += `?post_logout_redirect_uri=${encodeURIComponent(window.location.origin)}`;\n } else if (this.aXMAuthConfigs.logoutUrl) {\n logoutUrl = this.aXMAuthConfigs.logoutUrl;\n }\n\n // Call logout in the background (don't redirect)\n if (logoutUrl) {\n // Fire-and-forget: Create an invisible iframe to make the logout request in the background\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = logoutUrl;\n document.body.appendChild(iframe);\n\n // Optionally, remove iframe after load\n iframe.onload = () => {\n setTimeout(() => document.body.removeChild(iframe), 1000);\n };\n }\n\n // Always send user to landing page after local logout, regardless\n window.location.href = '/';\n }\n\n async refreshToken(context: AXPSessionContext): Promise<AXPSignInResult> {\n try {\n await this.configureOAuth();\n if (!this.aXMAuthConfigs.authConfig || !this.aXMAuthConfigs.authConfig.clientId) {\n throw new Error('authConfig or clientId is missing');\n }\n const authData = this.loadAuthData();\n if (!authData) {\n return { succeed: false };\n }\n const refreshToken = authData.refreshToken;\n if (!refreshToken) {\n return { succeed: false };\n }\n\n const body = new HttpParams()\n .set('grant_type', 'refresh_token')\n .set('client_id', this.aXMAuthConfigs.authConfig.clientId)\n .set('refresh_token', refreshToken);\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n\n const response = await firstValueFrom(\n this.http.post<IAuthenticationDataModel>(\n this.openidConfigurationInfo.info.discoveryDocument.token_endpoint,\n body.toString(),\n { headers },\n ),\n );\n\n // Extract user, tenant, and application from id_token\n const payload = JwtUtil.parseJwt(response.id_token);\n const user = {\n id: payload['sub'] || payload['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n\n const sessionData: AXPSessionData = {\n accessToken: response.access_token,\n refreshToken: response.refresh_token,\n idToken: response.id_token,\n strategy: 'oidc',\n expiresIn: TimeUtil.calculateExpireInDate(response.expires_in ?? 0),\n user,\n tenant,\n application,\n };\n\n // this.setServiceProps(sessionData);\n\n return {\n succeed: true,\n data: {\n ...sessionData,\n user: sessionData.user as AXPUser, // Ensure user is not undefined\n },\n };\n } catch (error) {\n console.error('Error refreshing token', error);\n return { succeed: false };\n }\n }\n\n private loadAuthData(): AXPSessionData | undefined {\n const sessionData = this.sessionService.getSessionData();\n return sessionData || undefined;\n }\n\n public async loadUserInfo(): Promise<object> {\n return this.oauthService.loadUserProfile();\n }\n\n private handleError(error: any): never {\n console.error('Authentication error:', error);\n throw error;\n }\n\n //#region getter\n get name(): string {\n return 'oidc';\n }\n //#endregion\n}\n\nexport interface AXPUserPassCredentials extends AXPBaseCredentials {\n username: string;\n password: string;\n}\n\nexport interface AXPOAuthExternalCredentials extends AXPBaseCredentials {\n strategy: string;\n accessToken: string;\n refreshToken: string;\n idToken: string;\n user: string; // Store user as JSON string\n expiresIn: string;\n provider: string; // The provider name (e.g., 'google', 'apple', 'aad')\n}\n\nexport interface IAuthenticationDataModel {\n access_token: string;\n applicationid: string;\n applicationname: string;\n applicationtitle: string;\n editionid: string;\n editionname: string;\n editiontitle: string;\n id_token: string;\n refresh_token: string;\n scope: string;\n tenantid: string;\n tenantname: string;\n tenanttitle: string;\n token_type: string;\n expires_in?: number;\n sub?: string;\n fullname?: string;\n picture?: string;\n}\n","import { AXPPermission, AXPPermissionLoader, AXPSessionContext } from '@acorex/platform/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AXMOidcPermissionLoader implements AXPPermissionLoader {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private apiGetConfig = `${this.configs.baseUrl}/abp/application-configuration`;\n\n constructor(private http: HttpClient) {}\n\n async getList(context: AXPSessionContext): Promise<AXPPermission[]> {\n const response = await firstValueFrom(this.http.get<{ items: any }>(this.apiGetConfig));\n return this.mapTo(response);\n // if (context.user == null)\n // return [];\n // else if (context.user.name.toLowerCase() == 'admin')\n // return ['axp.admin.console', 'asc.admin.message', 'asc.admin.settings', 'asc.admin.gliding', 'asc.user.gliding'];\n // else\n // return ['asc.user.gliding'];\n // return ['axp.admin.console', 'asc.admin.message', 'asc.admin.settings', 'asc.admin.gliding', 'asc.user.gliding'];\n }\n\n mapTo(jsonObj: any): string[] {\n const policies = jsonObj.auth.grantedPolicies;\n const truePolicies = Object.keys(policies).filter((key) => policies[key] === true);\n return truePolicies;\n }\n}\n","import { AXPTenant, AXPTenantLoader, AXPSessionContext } from '@acorex/platform/auth';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AXMOidcTenantLoader implements AXPTenantLoader {\n private configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private apiGetTenants = `${this.configs.baseUrl}/tenants/available-for-user`;\n constructor(private http: HttpClient) {}\n\n async getList(context: AXPSessionContext): Promise<AXPTenant[]> {\n const response = await firstValueFrom(this.http.get<{ items: any[] }>(this.apiGetTenants));\n return response.items.map((item) => {\n return this.mapToAXPTenant(item);\n });\n }\n\n async set(tenant: AXPTenant): Promise<void> {\n return Promise.resolve();\n }\n\n private mapToAXPTenant(item: any): AXPTenant {\n return {\n id: item.id,\n name: item.name || 'defaultName',\n title: item.title || 'defaultTitle',\n // Add other fields and defaults as needed, and handle the logo if applicable\n };\n }\n}\n","import { AXPUserAvatarData, AXPUserAvatarProvider } from '@acorex/platform/layout/components';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject } from '@angular/core';\nimport { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPDataGenerator } from '@acorex/platform/core';\n\nexport class AXCApiUserAvatarProvider implements AXPUserAvatarProvider {\n private userService = inject(AXMUsersEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(userId: string): Promise<AXPUserAvatarData> {\n // Check if requesting current user info\n const currentUser = this.sessionService.user;\n const isCurrentUser = currentUser?.id === userId;\n\n if (isCurrentUser && currentUser) {\n // Use session service user data for current user\n const [firstName, lastName] = (currentUser.name || '').split(' ') || ['', ''];\n return {\n id: currentUser.id,\n username: currentUser.name || '',\n firstName: firstName || '',\n lastName: lastName || '',\n status: 'online',\n avatarUrl: currentUser.avatar || AXPDataGenerator.avatar(),\n };\n }\n\n // Use entity service for other users\n const user = await this.userService.getOne(userId);\n if (!user) {\n throw new Error(`User not found for ${userId}`);\n }\n const [firstName, lastName] = user.displayName.split(' ') || ['', ''];\n return {\n id: user.id,\n username: user.username,\n firstName: firstName || '',\n lastName: lastName || '',\n status: 'online',\n avatarUrl: AXPDataGenerator.avatar(),\n };\n }\n}\n\n","//#region ---- Imports ----\n\nimport { AXPReportViewerService } from '@acorex/modules/report-management';\nimport { AXPReportCategory, AXPReportDefinition, AXPLayoutExecutionContext, AXPExecutionReportCommandResult } from '@acorex/modules/report-management';\nimport { AXP_ROOT_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXCReportCategoryApiResponse,\n AXCReportCategoryApiItem,\n AXCReportDefinitionApiResponse,\n AXCReportDefinitionApiItem,\n} from './report-management-api.providers';\n\n//#endregion\n\n/**\n * API-based Report Viewer Service\n * Extends the base service to override data loading methods with API calls\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXCReportViewerApiService extends AXPReportViewerService {\n private readonly http = inject(HttpClient);\n private readonly configs = inject(AXP_ROOT_CONFIG_TOKEN);\n private readonly baseUrl = this.configs.baseUrl;\n\n //#region ---- Override: Category Loading ----\n\n /**\n * Override: Load categories from API instead of entity service\n */\n protected override async loadCategories(parentId?: string): Promise<AXPReportCategory[]> {\n try {\n let url: string;\n if (parentId) {\n url = `${this.baseUrl}/v1/global/report-management/category/${parentId}`;\n const response = await firstValueFrom(this.http.get<AXCReportCategoryApiResponse>(url));\n const categoryData = response.items?.[0];\n const filteredItems = categoryData?.folderItems ?? [];\n return filteredItems.map((item) => this.mapApiCategoryToReportCategory(item));\n } else {\n url = `${this.baseUrl}/v1/global/report-management/category`;\n const params = { Skip: 0, Take: 1000 };\n const response = await firstValueFrom(this.http.get<AXCReportCategoryApiResponse>(url, { params }));\n const all = response.items ?? [];\n const rootCategories = all.filter((i) => !i.reportCategoryParentId);\n return rootCategories.map((item) => this.mapApiCategoryToReportCategory(item));\n }\n } catch (error) {\n console.error('Error fetching report categories:', error);\n return [];\n }\n }\n\n //#endregion\n\n //#region ---- Override: Report Loading ----\n\n /**\n * Override: Load reports from API instead of entity service\n */\n protected override async loadReports(categoryId: string): Promise<AXPReportDefinition[]> {\n try {\n const url = `${this.baseUrl}/v1/global/report-management/category/${categoryId}`;\n const response = await firstValueFrom(this.http.get<AXCReportCategoryApiResponse>(url));\n const categoryData = response.items?.[0];\n const defs = categoryData?.reportDefinitionItems ?? [];\n\n // Fetch full report definitions for each item to get layouts and parameterGroups\n const fullDefinitions = await Promise.all(\n defs.map(async (item) => {\n try {\n const reportUrl = `${this.baseUrl}/v1/global/report-management/report/${item.id}`;\n const reportResponse = await firstValueFrom(\n this.http.get<AXCReportDefinitionApiResponse>(reportUrl)\n );\n return this.mapApiReportDefinitionToReportDefinition(reportResponse);\n } catch {\n // Fallback to item mapping if full fetch fails\n return this.mapApiReportDefinitionItemToReportDefinition(item);\n }\n })\n );\n\n return fullDefinitions;\n } catch (error) {\n console.error('Error fetching report definitions:', error);\n return [];\n }\n }\n\n /**\n * Override: Load single report from API instead of entity service\n */\n protected override async loadReport(id: string): Promise<AXPReportDefinition | undefined> {\n try {\n const url = `${this.baseUrl}/v1/global/report-management/report/${id}`;\n const response = await firstValueFrom(this.http.get<AXCReportDefinitionApiResponse>(url));\n return this.mapApiReportDefinitionToReportDefinition(response);\n } catch (error) {\n console.error('Error fetching report definition by ID:', error);\n return undefined;\n }\n }\n\n //#endregion\n\n //#region ---- Override: Report Execution ----\n\n /**\n * Override: Execute report with given context\n * Implements report execution logic for API environment\n * TODO: Implement API call to execute report\n */\n override async executeReport(context: AXPLayoutExecutionContext): Promise<AXPExecutionReportCommandResult> {\n // TODO: Implement API call to execute report\n // Example:\n // const url = `${this.baseUrl}/v1/global/report-management/report/${context.reportId}/execute`;\n // const response = await firstValueFrom(this.http.post<AXPExecutionReportCommandResult>(url, context));\n // return response;\n \n throw new Error('executeReport API implementation is not yet implemented');\n }\n\n //#endregion\n\n //#region ---- Private: Mapping Methods ----\n\n private mapApiCategoryToReportCategory(apiItem: AXCReportCategoryApiItem): AXPReportCategory {\n return {\n id: apiItem.id,\n title: apiItem.title,\n description: apiItem.description || undefined,\n parentId: apiItem.reportCategoryParentId || undefined,\n childrenCount: apiItem.folderCount ?? 0,\n itemsCount: apiItem.itemCount ?? 0,\n };\n }\n\n private mapApiReportDefinitionItemToReportDefinition(apiItem: AXCReportDefinitionApiItem): AXPReportDefinition {\n return {\n id: apiItem.id,\n title: apiItem.title,\n description: apiItem.description || undefined,\n categoryIds: apiItem.categoryIds,\n parameterGroups: [],\n layouts: [],\n defaultLayoutId: '',\n };\n }\n\n private mapApiReportDefinitionToReportDefinition(apiResponse: AXCReportDefinitionApiResponse): AXPReportDefinition {\n return {\n id: apiResponse.id,\n title: apiResponse.title,\n description: apiResponse.description || undefined,\n categoryIds: apiResponse.categoryIds,\n parameterGroups: apiResponse.parameterGroups.map((group) => ({\n name: group.name,\n title: group.title,\n parameters: group.parameters.map((param) => ({\n path: param.path,\n title: param.title,\n description: param.description,\n widget: {\n type: param.widget.type,\n options: param.widget.options || {},\n valueTransforms: param.widget.valueTransforms || {},\n },\n })),\n })),\n layouts: apiResponse.layouts.map((layout) => ({\n id: layout.id,\n title: layout.title,\n layout: layout.layout,\n dataSource: layout.dataSource as any,\n export: layout.export,\n isDefault: layout.isDefault || false,\n })),\n defaultLayoutId: apiResponse.defaultLayoutId,\n };\n }\n\n //#endregion\n}\n\n","import { NgModule } from '@angular/core';\nimport { AXPRuntimeModule, provideCommandSetups } from '@acorex/platform/runtime';\nimport { AXPReportViewerService } from '@acorex/modules/report-management';\nimport { AXCReportViewerApiService } from './report-viewer-api.service';\n\n@NgModule({\n imports: [AXPRuntimeModule],\n exports: [],\n declarations: [],\n providers: [ \n {\n provide: AXPReportViewerService,\n useClass: AXCReportViewerApiService,\n },\n provideCommandSetups([\n {\n key: 'ReportManagement.Report:Execute',\n command: () => import('./execute.command').then((c) => c.AXCReportExecuteCommand),\n }\n \n ]),\n ],\n})\nexport class AXCReportManagementApiModule { }\n","import {\n AXP_APPLICATION_LOADER,\n AXP_FEATURE_LOADER,\n AXP_PERMISSION_LOADER,\n AXP_TENANT_LOADER,\n AXPAuthModule,\n} from '@acorex/platform/auth';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPEntityStorageService } from '@acorex/platform/layout/entity';\nimport { AXP_USER_AVATAR_PROVIDER } from '@acorex/platform/layout/components';\nimport { STRATEGY_CONFIG_TOKEN } from '@acorex/platform/layout/widgets';\nimport { NgModule } from '@angular/core';\nimport { OAuthModule } from 'angular-oauth2-oidc';\nimport { AXCApiEntityStorageService } from './api-storage.service';\nimport { AXCFileStorageApiService } from './file-storage-api.service';\nimport {\n AXMOidcApplicationLoader,\n AXMOidcFeatureLoader,\n AXMOidcPermissionLoader,\n AXCAPIOidcStrategy,\n AXMOidcTenantLoader,\n AXCApiUserAvatarProvider,\n} from './auth/oidc';\nimport { AXCUtilsModule } from '@acorex/connectivity/utils';import { AXCReportManagementApiModule } from './report-management/report-management-api.module';\n@NgModule({\n imports: [\n OAuthModule.forRoot(),\n AXPAuthModule.forRoot({\n strategies: [AXCAPIOidcStrategy],\n }),\n AXCUtilsModule,\n AXCReportManagementApiModule,\n ],\n providers: [\n {\n provide: AXPEntityStorageService,\n useClass: AXCApiEntityStorageService,\n },\n\n {\n provide: AXPFileStorageService,\n useClass: AXCFileStorageApiService,\n },\n {\n provide: AXP_TENANT_LOADER,\n useClass: AXMOidcTenantLoader,\n },\n {\n provide: AXP_APPLICATION_LOADER,\n useClass: AXMOidcApplicationLoader,\n },\n {\n provide: AXP_PERMISSION_LOADER,\n useClass: AXMOidcPermissionLoader,\n },\n {\n provide: AXP_FEATURE_LOADER,\n useClass: AXMOidcFeatureLoader,\n },\n {\n provide: STRATEGY_CONFIG_TOKEN,\n useValue: {\n selectValueStrategy: 'valueField',\n lookupValueStrategy: 'valueField',\n },\n },\n {\n provide: AXP_USER_AVATAR_PROVIDER,\n useClass: AXCApiUserAvatarProvider,\n },\n ],\n})\nexport class AXCApiModule { }\n","import { AXCExternalAuthorizationService } from '@acorex/connectivity/utils';\nimport { AXM_AUTH_CONFIG_TOKEN, AXMAuthConfigs } from '@acorex/modules/auth';\nimport {\n AXP_APPLICATION_LOADER,\n AXP_TENANT_LOADER,\n AXPAuthStrategy,\n AXPBaseCredentials,\n AXPSessionContext,\n AXPSessionData,\n AXPSessionService,\n AXPSignInResult,\n AXPUser,\n JwtUtil,\n PkceUtil,\n TimeUtil,\n} from '@acorex/platform/auth';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthConfig, OAuthService } from 'angular-oauth2-oidc';\n\n//#region ---- Class Definition ----\n\n@Injectable()\nexport class APIGoogleStrategy extends AXPAuthStrategy {\n private aXMAuthConfigs: AXMAuthConfigs = inject(AXM_AUTH_CONFIG_TOKEN);\n private oauthService: OAuthService = inject(OAuthService);\n private http: HttpClient = inject(HttpClient);\n private sessionService: AXPSessionService = inject(AXPSessionService);\n private router: Router = inject(Router);\n private externalAuthorizationService = inject(AXCExternalAuthorizationService);\n private tenantLoader = inject(AXP_TENANT_LOADER);\n private applicationLoader = inject(AXP_APPLICATION_LOADER);\n\n public userInfo: any;\n public authConfig: AuthConfig;\n public openidConfigurationInfo: any; // clarify the type if possible\n\n constructor() {\n super();\n }\n\n get name(): string {\n return 'google';\n }\n\n public async configureOAuth(): Promise<void> {\n if (this.openidConfigurationInfo) return;\n\n if (!this.authConfig) {\n if (!this.aXMAuthConfigs.authConfig) {\n throw new Error('authConfig is missing');\n }\n this.authConfig = this.aXMAuthConfigs.authConfig;\n }\n\n this.oauthService.configure(this.authConfig);\n this.oauthService.setStorage(localStorage);\n\n this.openidConfigurationInfo = await this.oauthService.loadDiscoveryDocument();\n\n if (!this.openidConfigurationInfo) {\n throw new Error('openidConfigurationInfo is missing');\n }\n\n this.oauthService.events.subscribe(async (event) => {\n // console.log('event', event);\n // if (event.type === 'token_received') {\n // console.log('Token has been refreshed');\n // }\n // if (event.type === 'token_expires') {\n // console.log('Token is about to expire. Triggering silent refresh...');\n // }\n });\n\n const oidcJson = localStorage.getItem(AXPSessionService.SESSION_KEY);\n\n if (oidcJson) {\n const authData = JSON.parse(oidcJson) as AXPSessionData;\n if (authData) {\n this.sessionService.setSession(authData);\n\n if (authData.expiresIn && new Date(authData.expiresIn) < new Date()) {\n if (authData.expiresIn) {\n this.sessionService.refreshToken();\n } else {\n this.signout();\n }\n }\n }\n }\n }\n\n override async signin(credentials: AXPBaseCredentials): Promise<void> {\n const providerName = credentials['strategy'];\n await this.externalAuthorizationService.signin(providerName);\n }\n\n async signout(): Promise<void> {\n localStorage.removeItem('pkce_code_verifier');\n localStorage.removeItem('oauth_provider');\n console.log('User signed out');\n }\n\n async refreshToken(context: AXPSessionContext): Promise<AXPSignInResult> {\n try {\n await this.configureOAuth();\n if (!this.authConfig || !this.authConfig.clientId) {\n throw new Error('authConfig or clientId is missing');\n }\n const authData = this.loadAuthData();\n if (!authData) {\n return { succeed: false };\n }\n const refreshToken = authData.refreshToken;\n if (!refreshToken) {\n return { succeed: false };\n }\n\n const body = new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: this.authConfig.clientId!,\n refresh_token: refreshToken,\n });\n\n const response = await fetch(this.openidConfigurationInfo.info.discoveryDocument.token_endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n });\n\n if (!response.ok) {\n throw new Error(`Token refresh failed: ${response.status} ${response.statusText}`);\n }\n\n const tokenData = await response.json();\n\n // Extract user information from the refreshed token\n const payload = JwtUtil.parseJwt(tokenData.id_token);\n const user = {\n id: payload['sub'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n\n const sessionData: AXPSessionData = {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n idToken: tokenData.id_token,\n strategy: 'google',\n expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),\n user,\n tenant,\n application,\n };\n\n return {\n succeed: true,\n data: {\n ...sessionData,\n user: sessionData.user as AXPUser,\n },\n };\n } catch (error) {\n console.error('Error refreshing token', error);\n return { succeed: false };\n }\n }\n\n override async updateToken(params: { [key: string]: any }): Promise<AXPSignInResult | undefined> {\n try {\n // Ensure OAuth is configured first\n if (!this.openidConfigurationInfo) {\n await this.configureOAuth();\n }\n // If params contains 'code', exchange it for tokens\n if (params['code']) {\n const code = params['code'];\n const redirectUri = params['redirectUri'] || this.authConfig.redirectUri!;\n const clientId = params['clientId'] || this.authConfig.clientId!;\n const tokenEndpoint = this.openidConfigurationInfo.info.discoveryDocument.token_endpoint;\n\n // Get code_verifier from localStorage (PKCE)\n const codeVerifier = localStorage.getItem('pkce_code_verifier');\n localStorage.removeItem('pkce_code_verifier');\n if (!codeVerifier) {\n throw new Error('Code verifier not found. Please try signing in again.');\n }\n\n // Prepare body for token request\n const body = new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: clientId,\n code_verifier: codeVerifier,\n code: code,\n redirect_uri: redirectUri,\n });\n\n // Call the token endpoint\n const response = await fetch(tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: body.toString(),\n });\n\n if (!response.ok) {\n throw new Error(`Token exchange failed: ${response.status} ${response.statusText}`);\n }\n\n const tokenData = await response.json();\n if (!tokenData) {\n throw new Error('Token data not found');\n }\n\n // Parse the ID token to extract user information\n const payload = JwtUtil.parseJwt(tokenData.id_token);\n if (!payload) {\n throw new Error('Payload not found');\n }\n\n const user = {\n id: payload['sub'] || '',\n title: payload['name'] || payload['email'] || '',\n name: payload['name'] || payload['email'] || '',\n avatar: payload['picture'] || '',\n } as AXPUser;\n\n const tenant =\n payload['tenantid'] || payload['tenant']\n ? {\n id: payload['tenantid'] || payload['tenant'] || '',\n name: payload['tenantname'] || '',\n title: payload['tenanttitle'] || '',\n }\n : undefined;\n\n const application =\n payload['applicationid'] || payload['application']\n ? {\n id: payload['applicationid'] || payload['application'] || '',\n name: payload['applicationname'] || '',\n title: payload['applicationtitle'] || '',\n }\n : undefined;\n\n return {\n succeed: true,\n data: {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n idToken: tokenData.id_token,\n expiresIn: TimeUtil.calculateExpireInDate(tokenData.expires_in || 0),\n user,\n tenant,\n application,\n },\n };\n }\n // get Authorizeation Code\n else {\n // Extract parameters\n // Support both direct id fields and nested tenant/application objects\n const tenantId = params['tenantId'] ?? params['tenant']?.id ?? null;\n const applicationId = params['applicationId'] ?? params['application']?.id ?? null;\n const redirectUri = params['redirectUri'] || this.authConfig.redirectUri!;\n const scope = params['scope'] || this.authConfig.scope!;\n\n // Generate PKCE code verifier and challenge\n const codeVerifier = PkceUtil.generateRandomString(128);\n localStorage.setItem('pkce_code_verifier', codeVerifier);\n const codeChallenge = await PkceUtil.generateCodeChallenge(codeVerifier);\n\n // Build authorization URL\n const authorizeEndpoint = this.openidConfigurationInfo.info.discoveryDocument.authorization_endpoint;\n const clientId = this.authConfig.clientId!;\n const responseType = 'code';\n const state = Math.random().toString(36).substring(2);\n\n const queryParams = [\n `response_type=${encodeURIComponent(responseType)}`,\n `client_id=${encodeURIComponent(clientId)}`,\n `redirect_uri=${encodeURIComponent(redirectUri)}`,\n `scope=${encodeURIComponent(scope)}`,\n `state=${encodeURIComponent(state)}`,\n tenantId ? `tenant_id=${encodeURIComponent(tenantId)}` : null,\n applicationId ? `application_id=${encodeURIComponent(applicationId)}` : null,\n `code_challenge=${encodeURIComponent(codeChallenge)}`,\n `code_challenge_method=S256`,\n ]\n .filter(Boolean)\n .join('&');\n\n const authorizeUrl = `${authorizeEndpoint}?${queryParams}`;\n\n window.location.href = authorizeUrl;\n await new Promise(() => {});\n\n return;\n }\n } catch (error) {\n console.error('Error in updateToken:', error);\n throw error;\n }\n }\n\n private loadAuthData(): AXPSessionData | undefined {\n const sessionData = this.sessionService.getSessionData();\n return sessionData || undefined;\n }\n\n private handleError(error: any): never {\n console.error('Authentication error:', error);\n throw error;\n }\n}\n\n//#endregion\n","//#region ---- Execute Report DTO ----\n\n/**\n * Execute Report DTO - Response from report execution API\n */\nexport interface AXPExecuteReportDto {\n type: string;\n items: Record<string, unknown>[];\n totalCount: number;\n}\n\n//#endregion\n\n//#region ---- API Response Types ----\n\n/**\n * API Response for Category endpoint\n * Used by: GET /api/v1/global/report-management/category\n * GET /api/v1/global/report-management/category/{parentId}\n */\nexport interface AXCReportCategoryApiResponse {\n totalCount: number;\n items: AXCReportCategoryApiItem[];\n}\n\n/**\n * Category Item with recursive structure\n * Each category can contain child categories (folderItems) and reports (reportDefinitionItems)\n */\nexport interface AXCReportCategoryApiItem {\n reportCategoryParentId: string | null;\n name: string;\n title: string;\n description: string | null;\n folderCount: number;\n itemCount: number;\n isArchived: boolean;\n reportDefinitionItems: AXCReportDefinitionApiItem[];\n folderItems: AXCReportCategoryApiItem[]; // Recursive: child categories\n id: string;\n}\n\n/**\n * Report Definition Item (in category list, without full layout)\n */\nexport interface AXCReportDefinitionApiItem {\n categoryIds: string[];\n name: string;\n title: string;\n description: string | null;\n isArchived: boolean;\n id: string;\n}\n\n/**\n * Full Report Definition with complete details including layouts\n * Used by: GET /api/v1/global/report-management/report/{reportId}\n */\nexport interface AXCReportDefinitionApiResponse {\n id: string;\n name: string;\n title: string;\n description: string | null;\n categoryIds: string[];\n parameterGroups: AXCReportParameterGroup[];\n layouts: AXCReportLayoutDefinition[];\n defaultLayoutId: string;\n}\n\n/**\n * Parameter Group for report parameters\n */\nexport interface AXCReportParameterGroup {\n name: string;\n title: string;\n parameters: AXCReportParameter[];\n}\n\n/**\n * Report Parameter definition\n */\nexport interface AXCReportParameter {\n path: string;\n title: string;\n description?: string;\n widget: {\n type: string; // Backend sends values like 'number-editor', 'text-editor', etc.\n path?: string | null;\n options?: any;\n valueTransforms?: any;\n };\n}\n\n/**\n * Layout Definition for report display\n */\nexport interface AXCReportLayoutDefinition {\n id: string;\n title: string;\n layout: any; // Will be mapped to proper AXPReportLayout type\n dataSource?: {\n type: string;\n name?: string;\n provider?: string;\n };\n export?: {\n fileNameTemplate: string;\n pdf?: any;\n excel?: any;\n csv?: any;\n };\n isDefault?: boolean;\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}